<?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>170766</bug_id>
          
          <creation_ts>2017-04-12 01:23:24 -0700</creation_ts>
          <short_desc>Provide a viewport parameter to disable clipping to the safe area</short_desc>
          <delta_ts>2017-04-17 13:25:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>bdakin</cc>
    
    <cc>dino</cc>
    
    <cc>eoconnor</cc>
    
    <cc>jonlee</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1296675</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-12 01:23:24 -0700</bug_when>
    <thetext>Provide a viewport parameter to disable clipping to the document rect</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296676</commentid>
    <comment_count>1</comment_count>
      <attachid>306894</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-12 01:27:08 -0700</bug_when>
    <thetext>Created attachment 306894
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296677</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-12 01:27:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/31564634&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296678</commentid>
    <comment_count>3</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-12 01:28:49 -0700</bug_when>
    <thetext>We should also separately consider improving the margin tile mechanism -- we could extend the normal tiles into the insets, for example, to reduce memory overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296687</commentid>
    <comment_count>4</comment_count>
      <attachid>306894</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-04-12 01:49:55 -0700</bug_when>
    <thetext>Comment on attachment 306894
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=306894&amp;action=review

&gt; Source/WebCore/dom/ViewportArguments.h:54
&gt;      float shrinkToFit;
&gt; +    float clipToDocument;

Can we stop this madness?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296722</commentid>
    <comment_count>5</comment_count>
      <attachid>306894</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-04-12 05:58:58 -0700</bug_when>
    <thetext>Comment on attachment 306894
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=306894&amp;action=review

&gt;&gt; Source/WebCore/dom/ViewportArguments.h:54
&gt;&gt; +    float clipToDocument;
&gt; 
&gt; Can we stop this madness?

Agreed. Why this float?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296880</commentid>
    <comment_count>6</comment_count>
      <attachid>306950</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-12 16:46:17 -0700</bug_when>
    <thetext>Created attachment 306950
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296884</commentid>
    <comment_count>7</comment_count>
      <attachid>306953</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-12 17:06:39 -0700</bug_when>
    <thetext>Created attachment 306953
add a second test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296894</commentid>
    <comment_count>8</comment_count>
      <attachid>306956</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-12 17:50:14 -0700</bug_when>
    <thetext>Created attachment 306956
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297122</commentid>
    <comment_count>9</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-13 13:58:28 -0700</bug_when>
    <thetext>Repaints in the margins are getting clipped out in GraphicsLayerCA::setNeedsDisplayInRect...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297126</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-13 14:05:39 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #9)
&gt; Repaints in the margins are getting clipped out in
&gt; GraphicsLayerCA::setNeedsDisplayInRect...

... because the RenderView&apos;s layer isn&apos;t extended into the margins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297136</commentid>
    <comment_count>11</comment_count>
      <attachid>307025</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-13 14:32:11 -0700</bug_when>
    <thetext>Created attachment 307025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297558</commentid>
    <comment_count>12</comment_count>
      <attachid>307164</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-14 16:12:35 -0700</bug_when>
    <thetext>Created attachment 307164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297593</commentid>
    <comment_count>13</comment_count>
      <attachid>307172</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-14 17:46:39 -0700</bug_when>
    <thetext>Created attachment 307172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297594</commentid>
    <comment_count>14</comment_count>
      <attachid>307173</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-14 17:48:55 -0700</bug_when>
    <thetext>Created attachment 307173
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297932</commentid>
    <comment_count>15</comment_count>
      <attachid>307173</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-17 10:10:42 -0700</bug_when>
    <thetext>Comment on attachment 307173
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=307173&amp;action=review

&gt; Source/WebCore/page/ViewportConfiguration.cpp:341
&gt; +        m_configuration.clipToSafeArea = m_viewportArguments.clipToSafeArea != 0.;

This can just be assignment now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297943</commentid>
    <comment_count>16</comment_count>
      <attachid>307280</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-17 10:46:52 -0700</bug_when>
    <thetext>Created attachment 307280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297944</commentid>
    <comment_count>17</comment_count>
      <attachid>307281</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-17 10:52:11 -0700</bug_when>
    <thetext>Created attachment 307281
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1297990</commentid>
    <comment_count>18</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-17 13:25:24 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/215425/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306894</attachid>
            <date>2017-04-12 01:27:08 -0700</date>
            <delta_ts>2017-04-12 16:46:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170766-20170412012707.patch</filename>
            <type>text/plain</type>
            <size>36208</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjU0N2Y4MWM0MzYxZjRm
YjRhZjBkYjUzNTg5YjMxNjlkMThlZTgxNS4uNTBiNDNjMzU4NzEwNjcwMWU3MDExZjhhYWE4MWU1
YWE3N2U2ZjFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE3LTA0LTEyICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2
aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgZG9jdW1lbnQgcmVj
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzY2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3
cG9ydC1jbGlwLXRvLWRvY3VtZW50LW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWwKKworICAgICAg
ICAqIGRvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50czo6cmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRWaWV3cG9ydEZlYXR1
cmUpOgorICAgICAgICAqIGRvbS9WaWV3cG9ydEFyZ3VtZW50cy5oOgorICAgICAgICAoV2ViQ29y
ZTo6Vmlld3BvcnRBcmd1bWVudHM6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBhZ2UvVmlld3Bv
cnRDb25maWd1cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0Q29uZmlndXJh
dGlvbjo6dXBkYXRlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0Q29uZmlndXJhdGlvbjo6ZGVzY3JpcHRpb24p
OgorICAgICAgICAqIHBhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpWaWV3cG9ydENvbmZpZ3VyYXRpb246OlBhcmFtZXRlcnM6OlBhcmFtZXRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Vmlld3BvcnRDb25maWd1cmF0aW9uOjpjbGlwVG9Eb2N1bWVudCk6Cisg
ICAgICAgIEFkZCB2aWV3cG9ydCBwYXJhbWV0ZXIuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNs
aWVudC5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGFnZS9GcmFt
ZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjplbmFibGVTcGVjdWxhdGl2
ZVRpbGluZ0lmTmVlZGVkKToKKyAgICAgICAgSWYgbm90IGNsaXBwaW5nIHRvIHRoZSBkb2N1bWVu
dCwgZW5hYmxlICJzcGVjdWxhdGl2ZSIgdGlsaW5nIGltbWVkaWF0ZWx5LAorICAgICAgICBiZWNh
dXNlIHRoZSBtYXJnaW4gdGlsZXMgY2FuIGJlIHZpc2libGUgaW1tZWRpYXRlbHkuCisKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6aGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlVGlsZXNGb3JFeHRlbmRl
ZEJhY2tncm91bmRNb2RlKToKKyAgICAgICAgRG9uJ3QgY2hlY2sgdGhlIHNldHRpbmcgaGVyZTsg
anVzdCByZXNwZWN0IHRoZSBtb2RlIHRoYXQgaXMgY29tcHV0ZWQKKyAgICAgICAgYnkgY2FsY3Vs
YXRlRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpjYWxjdWxhdGVFeHRlbmRlZEJhY2tncm91bmRNb2RlKToKKyAgICAgICAgSWYgdGhlIHZpZXdw
b3J0IHBhcmFtZXRlciB3YXMgc2V0LCBhZGQgbWFyZ2luIHRpbGVzIG9uIGJvdGggYXhlcy4KKwor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRDbGlwVG9Eb2N1bWVudCk6CisgICAgICAg
IE5vdGlmeSBDaHJvbWVDbGllbnQgb2YgdGhlIGNoYW5nZSwgYW5kIHJlLWNvbXB1dGUgdGhlIG1h
cmdpbiB0aWxlIG1vZGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6Cisg
ICAgICAgIEZhY3RvciBvdXQgY29kZSB0aGF0IGRlY2lkZXMgd2hldGhlciB0aGUgY29udGVudCBs
YXllciBjbGlwcyB0byBib3VuZHMsCisgICAgICAgIGFuZCBtYWtlIGl0IHRha2UgdGhlIG5ldyB2
aWV3cG9ydCBwYXJhbWV0ZXIgaW50byBhY2NvdW50LgorCiAyMDE3LTA0LTA1ICBBbmRyZWFzIEts
aW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGluYWN0aXZlIHdlYiBwcm9j
ZXNzZXMgYmVoYXZlIGFzIHRob3VnaCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggMTAyMzg3MjRhMTI4YjhkZTI5MmU0YTExMTRlMDc1OWU4OTc0MTNkYi4uMDdhMzBhZTEyNGJj
MmMyZGIwOTQ3MTQ2MjgwZTRhODM4YmJlNzg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBA
CisyMDE3LTA0LTEyICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisg
ICAgICAgIFByb3ZpZGUgYSB2aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0
byB0aGUgZG9jdW1lbnQgcmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwNzY2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlc2V0
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENsaXBUb0RvY3VtZW50
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6Y2xpcFRvRG9jdW1lbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6
OmRpZENoYW5nZUNsaXBUb0RvY3VtZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1Bh
Z2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmRpZENoYW5nZUNsaXBUb0RvY3VtZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgIEZvcndhcmQgY2xpcC10by1kb2N1bWVudCBjaGFu
Z2VzIGZyb20gQ2hyb21lQ2xpZW50IHRvIFdLV2ViVmlldy4KKyAgICAgICAgVXBkYXRlIHZpc2li
bGUgY29udGVudCByZWN0cyB3aGVuIGl0IGNoYW5nZXMsIHdoaWNoIHdpbGwKKyAgICAgICAgcmVz
dWx0IGluIGEgY2FsbCB0byB1cGRhdGVGaXhlZENsaXBwaW5nVmlldywgYXMgYmVsb3cuCisgICAg
ICAgIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlIFVJIHByb2Nlc3MuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9jb250ZW50TWF5RHJhd0luT2JzY3VyZWRJbnNldHNdKToKKyAgICAgICAgRXhwb3NlIHRo
ZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjbGlwLXRvLWRvY3VtZW50IGJpdCBhcyBTUEkuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW06CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgdXBkYXRlRml4ZWRDbGlwcGluZ1ZpZXc6XSk6CisgICAgICAgIERpc2FibGUgZml4
ZWQgY2xpcHBpbmcgd2hlbiBjbGlwLXRvLWRvY3VtZW50IGlzIGRpc2FibGVkLgorICAgICAgICAK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnZpZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQpOgorICAgICAg
ICBQdXNoIHRoZSB2aWV3cG9ydCdzIGNsaXAtdG8tZG9jdW1lbnQgYml0IG9udG8gdGhlIG1haW4g
ZnJhbWUncyBGcmFtZVZpZXcuCisKIDIwMTctMDQtMDUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIHNvIFdlYnNpdGVEYXRhU3RvcmVzIGFsd2F5
cyBoYXZlIGEgU3RvcmFnZU1hbmFnZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Vmlld3BvcnRBcmd1bWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1l
bnRzLmNwcAppbmRleCAxZTY5YjkyNmRiMWJkNjcxMzBiYWNlZTUxMzUzNDIyMjRkM2IzODBkLi40
MDNlZDhkMDFlNzE0ZDM4NjIwMjdhZDJiMTA0MTQyMGZkMWRmNmJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHAKQEAgLTI0Niw2ICsyNDYsNyBAQCBWaWV3cG9ydEF0
dHJpYnV0ZXMgVmlld3BvcnRBcmd1bWVudHM6OnJlc29sdmUoY29uc3QgRmxvYXRTaXplJiBpbml0
aWFsVmlld3BvcnRTaQogICAgIHJlc3VsdC51c2VyU2NhbGFibGUgPSB1c2VyWm9vbTsKICAgICBy
ZXN1bHQub3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKICAgICByZXN1bHQuc2hyaW5rVG9GaXQg
PSBzaHJpbmtUb0ZpdDsKKyAgICByZXN1bHQuY2xpcFRvRG9jdW1lbnQgPSBjbGlwVG9Eb2N1bWVu
dDsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00MDMsNiArNDA0LDggQEAgdm9pZCBzZXRW
aWV3cG9ydEZlYXR1cmUoVmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cywgRG9jdW1lbnQmIGRv
Y3VtZW50LCBTdHJpbmcKICNlbmRpZgogICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGtleSwgInNocmluay10by1maXQiKSkKICAgICAgICAgYXJndW1lbnRzLnNocmlu
a1RvRml0ID0gZmluZEJvb2xlYW5WYWx1ZShkb2N1bWVudCwga2V5LCB2YWx1ZSk7CisgICAgZWxz
ZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5LCAiY2xpcC10by1kb2N1bWVu
dCIpKQorICAgICAgICBhcmd1bWVudHMuY2xpcFRvRG9jdW1lbnQgPSBmaW5kQm9vbGVhblZhbHVl
KGRvY3VtZW50LCBrZXksIHZhbHVlKTsKICAgICBlbHNlCiAgICAgICAgIHJlcG9ydFZpZXdwb3J0
V2FybmluZyhkb2N1bWVudCwgVW5yZWNvZ25pemVkVmlld3BvcnRBcmd1bWVudEtleUVycm9yLCBr
ZXkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRz
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuaAppbmRleCA0ZTY5MDdm
NTg5ZGI3MjZkYmE4YWMwOWY4MWQ4Nzk1N2U3NmY4ODJiLi4xZGM4ODc0ZTg0OTU5MmVmMDEzZWY2
OWRhMTIzNGEzM2U3ODBmMTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3Bv
cnRBcmd1bWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMu
aApAQCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgVmlld3BvcnRBdHRyaWJ1dGVzIHsKICAgICBmbG9h
dCB1c2VyU2NhbGFibGU7CiAgICAgZmxvYXQgb3JpZW50YXRpb247CiAgICAgZmxvYXQgc2hyaW5r
VG9GaXQ7CisgICAgZmxvYXQgY2xpcFRvRG9jdW1lbnQ7CiB9OwogCiBzdHJ1Y3QgVmlld3BvcnRB
cmd1bWVudHMgewpAQCAtOTQsNiArOTUsNyBAQCBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHMgewog
ICAgIGZsb2F0IHVzZXJab29tIHsgVmFsdWVBdXRvIH07CiAgICAgZmxvYXQgb3JpZW50YXRpb24g
eyBWYWx1ZUF1dG8gfTsKICAgICBmbG9hdCBzaHJpbmtUb0ZpdCB7IFZhbHVlQXV0byB9OworICAg
IGZsb2F0IGNsaXBUb0RvY3VtZW50IHsgVmFsdWVBdXRvIH07CiAgICAgYm9vbCB3aWR0aFdhc0V4
cGxpY2l0IHsgZmFsc2UgfTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaWV3cG9ydEFy
Z3VtZW50cyYgb3RoZXIpIGNvbnN0CkBAIC0xMTIsNiArMTE0LDcgQEAgc3RydWN0IFZpZXdwb3J0
QXJndW1lbnRzIHsKICAgICAgICAgICAgICYmIHVzZXJab29tID09IG90aGVyLnVzZXJab29tCiAg
ICAgICAgICAgICAmJiBvcmllbnRhdGlvbiA9PSBvdGhlci5vcmllbnRhdGlvbgogICAgICAgICAg
ICAgJiYgc2hyaW5rVG9GaXQgPT0gb3RoZXIuc2hyaW5rVG9GaXQKKyAgICAgICAgICAgICYmIGNs
aXBUb0RvY3VtZW50ID09IG90aGVyLmNsaXBUb0RvY3VtZW50CiAgICAgICAgICAgICAmJiB3aWR0
aFdhc0V4cGxpY2l0ID09IG90aGVyLndpZHRoV2FzRXhwbGljaXQ7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCBiMDgwYTk1ODk1OWU0NTY1Y2YwMmM3ZjQwODA3Zjhj
NDQwMmYwMWY3Li43MDVjNWFhMTQ2ZTRiMTg3OGQ4YTQ1NWQzZTRhZWI0OTgxMzgwMjQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQ2Niw2ICs0NjYsOCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UHJvY2Vzc0NQVVRpbWUoaW50NjRfdCwgQWN0aXZpdHlT
dGF0ZUZvckNQVVNhbXBsaW5nKSB7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VDbGlw
VG9Eb2N1bWVudChib29sKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkNocm9tZUNs
aWVudCgpIHsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBhNzQ4Nzk0NjU4
YmY3NTlkNzRkNTJiMjJkZGMwZTYxYjZiY2Q4Y2U5Li5lYmI4NWYyZGZhYWVmNDM5ZTVmNjZhN2Vl
NjM4YWUzNGUxMmM5NDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0yOTI5LDYg
KzI5MjksMTAgQEAgdm9pZCBGcmFtZVZpZXc6OmVuYWJsZVNwZWN1bGF0aXZlVGlsaW5nSWZOZWVk
ZWQoKQogICAgICAgICBtX3NwZWN1bGF0aXZlVGlsaW5nRW5hYmxlZCA9IHRydWU7CiAgICAgICAg
IHJldHVybjsKICAgICB9CisgICAgaWYgKCFtX2NsaXBUb0RvY3VtZW50KSB7CisgICAgICAgIG1f
c3BlY3VsYXRpdmVUaWxpbmdFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICBpZiAoIXNob3VsZEVuYWJsZVNwZWN1bGF0aXZlVGlsaW5nRHVyaW5nTG9hZGluZygqdGhp
cykpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobV9zcGVjdWxhdGl2ZVRpbGluZ0VuYWJsZVRp
bWVyLmlzQWN0aXZlKCkpCkBAIC0zMjI1LDkgKzMyMjksNiBAQCB2b2lkIEZyYW1lVmlldzo6dXBk
YXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIGJv
b2wgdAogCiBib29sIEZyYW1lVmlldzo6aGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50
aW5nKCkgY29uc3QKIHsKLSAgICBpZiAoIWZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hv
dWxkRXh0ZW5kQmV5b25kUGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBUaWxl
ZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IHRoaXMtPnRpbGVkQmFja2luZygpOwogICAgIGlmICgh
dGlsZWRCYWNraW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjQ2LDExICszMjQ3LDEw
IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKQog
CiBGcmFtZVZpZXc6OkV4dGVuZGVkQmFja2dyb3VuZE1vZGUgRnJhbWVWaWV3OjpjYWxjdWxhdGVF
eHRlbmRlZEJhY2tncm91bmRNb2RlKCkgY29uc3QKIHsKLSAgICAvLyBKdXN0IGJlY2F1c2UgU2V0
dGluZ3M6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkgaXMgdHJ1ZSBkb2VzIG5v
dCBuZWNlc3NhcmlseSBtZWFuCi0gICAgLy8gdGhhdCB0aGUgYmFja2dyb3VuZCByZWN0IG5lZWRz
IHRvIGJlIGV4dGVuZGVkIGZvciBwYWludGluZy4gU2ltcGxlIGJhY2tncm91bmRzIGNhbiBiZSBl
eHRlbmRlZAotICAgIC8vIGp1c3Qgd2l0aCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldFJvb3RF
eHRlbmRlZEJhY2tncm91bmRDb2xvcigpLiBNb3JlIGNvbXBsaWNhdGVkIGJhY2tncm91bmRzLAot
ICAgIC8vIHN1Y2ggYXMgaW1hZ2VzLCByZXF1aXJlIGV4dGVuZGluZyB0aGUgYmFja2dyb3VuZCBy
ZWN0IHRvIGNvbnRpbnVlIHBhaW50aW5nIGludG8gdGhlIGV4dGVuZGVkCi0gICAgLy8gcmVnaW9u
LiBUaGlzIGZ1bmN0aW9uIGZpbmRzIG91dCBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gZXh0ZW5kIHRo
ZSBiYWNrZ3JvdW5kIHJlY3QgZm9yIHBhaW50aW5nLgorICAgIGlmIChQYWdlICpwYWdlID0gZnJh
bWUoKS5wYWdlKCkpIHsKKyAgICAgICAgaWYgKCFtX2NsaXBUb0RvY3VtZW50KQorICAgICAgICAg
ICAgcmV0dXJuIEV4dGVuZGVkQmFja2dyb3VuZE1vZGVBbGw7CisgICAgfQogCiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xNjIwMTM3Mz4KQEAgLTMyNTksNiArMzI1
OSwxMiBAQCBGcmFtZVZpZXc6OkV4dGVuZGVkQmFja2dyb3VuZE1vZGUgRnJhbWVWaWV3OjpjYWxj
dWxhdGVFeHRlbmRlZEJhY2tncm91bmRNb2RlKCkgYwogICAgIGlmICghZnJhbWUoKS5zZXR0aW5n
cygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkpCiAgICAgICAgIHJldHVybiBF
eHRlbmRlZEJhY2tncm91bmRNb2RlTm9uZTsKIAorICAgIC8vIEp1c3QgYmVjYXVzZSBTZXR0aW5n
czo6YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSBpcyB0cnVlIGRvZXMgbm90IG5l
Y2Vzc2FyaWx5IG1lYW4KKyAgICAvLyB0aGF0IHRoZSBiYWNrZ3JvdW5kIHJlY3QgbmVlZHMgdG8g
YmUgZXh0ZW5kZWQgZm9yIHBhaW50aW5nLiBTaW1wbGUgYmFja2dyb3VuZHMgY2FuIGJlIGV4dGVu
ZGVkCisgICAgLy8ganVzdCB3aXRoIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0Um9vdEV4dGVu
ZGVkQmFja2dyb3VuZENvbG9yKCkuIE1vcmUgY29tcGxpY2F0ZWQgYmFja2dyb3VuZHMsCisgICAg
Ly8gc3VjaCBhcyBpbWFnZXMsIHJlcXVpcmUgZXh0ZW5kaW5nIHRoZSBiYWNrZ3JvdW5kIHJlY3Qg
dG8gY29udGludWUgcGFpbnRpbmcgaW50byB0aGUgZXh0ZW5kZWQKKyAgICAvLyByZWdpb24uIFRo
aXMgZnVuY3Rpb24gZmluZHMgb3V0IGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBleHRlbmQgdGhlIGJh
Y2tncm91bmQgcmVjdCBmb3IgcGFpbnRpbmcuCisKICAgICBpZiAoIWZyYW1lKCkuaXNNYWluRnJh
bWUoKSkKICAgICAgICAgcmV0dXJuIEV4dGVuZGVkQmFja2dyb3VuZE1vZGVOb25lOwogCkBAIC0z
Mjg4LDkgKzMyOTQsNiBAQCBGcmFtZVZpZXc6OkV4dGVuZGVkQmFja2dyb3VuZE1vZGUgRnJhbWVW
aWV3OjpjYWxjdWxhdGVFeHRlbmRlZEJhY2tncm91bmRNb2RlKCkgYwogCiB2b2lkIEZyYW1lVmll
dzo6dXBkYXRlVGlsZXNGb3JFeHRlbmRlZEJhY2tncm91bmRNb2RlKEV4dGVuZGVkQmFja2dyb3Vu
ZE1vZGUgbW9kZSkKIHsKLSAgICBpZiAoIWZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hv
dWxkRXh0ZW5kQmV5b25kUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBSZW5kZXJWaWV3
KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmlldygpOwogICAgIGlmICghcmVuZGVyVmlldykK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzMzNSw2ICszMzM4LDMwIEBAIEludFJlY3QgRnJhbWVWaWV3
OjpleHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcoKSBjb25zdAogICAgIHJldHVybiBz
bmFwcGVkSW50UmVjdChleHRlbmRlZFJlY3QpOwogfQogCit2b2lkIEZyYW1lVmlldzo6c2V0Q2xp
cFRvRG9jdW1lbnQoYm9vbCBjbGlwVG9Eb2N1bWVudCkKK3sKKyAgICBpZiAoIWZyYW1lKCkuaXNN
YWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xpcFRvRG9jdW1lbnQg
PT0gY2xpcFRvRG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpcFRvRG9jdW1l
bnQgPSBjbGlwVG9Eb2N1bWVudDsKKworICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUoKS5wYWdl
KCkpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLmRpZENoYW5nZUNsaXBUb0RvY3Vt
ZW50KGNsaXBUb0RvY3VtZW50KTsKKworICAgIHVwZGF0ZUV4dGVuZEJhY2tncm91bmRJZk5lY2Vz
c2FyeSgpOworICAgIGFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdlKCk7CisKKyAgICBSZW5kZXJW
aWV3KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmlldygpOworICAgIGlmICghcmVuZGVyVmll
dykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXJDb21wb3NpdG9yJiBjb21wb3Np
dG9yID0gcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpOworICAgIGNvbXBvc2l0b3IudXBkYXRlUm9v
dENvbnRlbnRMYXllckNsaXBwaW5nKCk7Cit9CisKIGJvb2wgRnJhbWVWaWV3OjpzaG91bGRVcGRh
dGVXaGlsZU9mZnNjcmVlbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2hvdWxkVXBkYXRlV2hp
bGVPZmZzY3JlZW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAppbmRleCAyNjM2ZDRiYTMxZGI1Yzkw
ODg2ZjhhOTMyY2E3NTkyYWRmODk3OGQ0Li5lZGQ5MzBiYWFmZTc2MDMzMzgxYjhiMzZkNzdmY2Rk
M2JjOGIxYjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKQEAgLTIxMyw2ICsyMTMsOSBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcoKSBj
b25zdDsKICAgICBJbnRSZWN0IGV4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpIGNv
bnN0OwogCisgICAgYm9vbCBjbGlwVG9Eb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFRv
RG9jdW1lbnQ7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENsaXBUb0RvY3VtZW50KGJv
b2wpOworCiAgICAgYm9vbCBzaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbigpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oYm9vbCk7
CiAgICAgYm9vbCBzaG91bGRVcGRhdGUoKSBjb25zdDsKQEAgLTgxMCw2ICs4MTMsOCBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCBtX25lZWRzRGVmZXJyZWRTY3JvbGxiYXJzVXBkYXRlIHsgZmFsc2Ug
fTsKIAorICAgIGJvb2wgbV9jbGlwVG9Eb2N1bWVudCB7IHRydWUgfTsKKwogICAgIFJlZlB0cjxD
b250YWluZXJOb2RlPiBtX21haW50YWluU2Nyb2xsUG9zaXRpb25BbmNob3I7CiAKICAgICAvLyBS
ZW5kZXJlciB0byBob2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5lci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcAppbmRleCA4MDVjNmUwY2NlNTdkZTlk
ZGY3ZTljZWYyMjZkOGUxMDA4ODkxZmQ1Li44M2NmZTk1M2M3NzM0YzM4NmI5OTdiM2RhNjkyMDI5
YTEwMjU4ZDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmln
dXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRp
b24uY3BwCkBAIC0zMzYsNiArMzM2LDkgQEAgdm9pZCBWaWV3cG9ydENvbmZpZ3VyYXRpb246OnVw
ZGF0ZUNvbmZpZ3VyYXRpb24oKQogCiAgICAgaWYgKGJvb2xlYW5WaWV3cG9ydEFyZ3VtZW50SXNT
ZXQobV92aWV3cG9ydEFyZ3VtZW50cy5zaHJpbmtUb0ZpdCkpCiAgICAgICAgIG1fY29uZmlndXJh
dGlvbi5hbGxvd3NTaHJpbmtUb0ZpdCA9IG1fdmlld3BvcnRBcmd1bWVudHMuc2hyaW5rVG9GaXQg
IT0gMC47CisKKyAgICBpZiAoYm9vbGVhblZpZXdwb3J0QXJndW1lbnRJc1NldChtX3ZpZXdwb3J0
QXJndW1lbnRzLmNsaXBUb0RvY3VtZW50KSkKKyAgICAgICAgbV9jb25maWd1cmF0aW9uLmNsaXBU
b0RvY3VtZW50ID0gbV92aWV3cG9ydEFyZ3VtZW50cy5jbGlwVG9Eb2N1bWVudCAhPSAwLjsKIH0K
IAogZG91YmxlIFZpZXdwb3J0Q29uZmlndXJhdGlvbjo6dmlld3BvcnRBcmd1bWVudHNMZW5ndGgo
ZG91YmxlIGxlbmd0aCkgY29uc3QKQEAgLTQzOSw2ICs0NDIsNyBAQCBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBWaWV3cG9ydENvbmZpZ3VyYXRpb246OlBhcmFt
ZXRlcnMmCiAgICAgdHMuZHVtcFByb3BlcnR5KCJtYXhpbXVtU2NhbGUiLCBwYXJhbWV0ZXJzLm1h
eGltdW1TY2FsZSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJhbGxvd3NVc2VyU2NhbGluZyIsIHBh
cmFtZXRlcnMuYWxsb3dzVXNlclNjYWxpbmcpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxsb3dz
U2hyaW5rVG9GaXQiLCBwYXJhbWV0ZXJzLmFsbG93c1Nocmlua1RvRml0KTsKKyAgICB0cy5kdW1w
UHJvcGVydHkoImNsaXBUb0RvY3VtZW50IiwgcGFyYW1ldGVycy5jbGlwVG9Eb2N1bWVudCk7CiAK
ICAgICByZXR1cm4gdHM7CiB9CkBAIC00NzIsNiArNDc2LDcgQEAgQ1N0cmluZyBWaWV3cG9ydENv
bmZpZ3VyYXRpb246OmRlc2NyaXB0aW9uKCkgY29uc3QKICAgICB0cy5kdW1wUHJvcGVydHkoImNv
bXB1dGVkIGxheW91dCBzaXplIiwgbGF5b3V0U2l6ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHko
Imlnbm9yaW5nIGhvcml6b250YWwgc2NhbGluZyBjb25zdHJhaW50cyIsIHNob3VsZElnbm9yZUhv
cml6b250YWxTY2FsaW5nQ29uc3RyYWludHMoKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiaWdub3JpbmcgdmVydGljYWwgc2NhbGluZyBjb25zdHJhaW50cyIsIHNo
b3VsZElnbm9yZVZlcnRpY2FsU2NhbGluZ0NvbnN0cmFpbnRzKCkgPyAidHJ1ZSIgOiAiZmFsc2Ui
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNsaXAgdG8gZG9jdW1lbnQiLCBjbGlwVG9Eb2N1bWVu
dCgpID8gInRydWUiIDogImZhbHNlIik7CiAgICAgCiAgICAgdHMuZW5kR3JvdXAoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmgKaW5kZXggYjcyYzBiZmE5
ZDY3MDc5MWEyOTEyOWEzNTY1OWMwOGE2YzY0NzcyMS4uNzJhYWRlMTJjZDMzMWYyNjNhYWE4Y2Vi
ZWE1OWI1MjExNWZjMWUxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9y
dENvbmZpZ3VyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmln
dXJhdGlvbi5oCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgbWF4aW11
bVNjYWxlKDApCiAgICAgICAgICAgICAsIGFsbG93c1VzZXJTY2FsaW5nKGZhbHNlKQogICAgICAg
ICAgICAgLCBhbGxvd3NTaHJpbmtUb0ZpdChmYWxzZSkKKyAgICAgICAgICAgICwgY2xpcFRvRG9j
dW1lbnQodHJ1ZSkKICAgICAgICAgICAgICwgd2lkdGhJc1NldChmYWxzZSkKICAgICAgICAgICAg
ICwgaGVpZ2h0SXNTZXQoZmFsc2UpCiAgICAgICAgICAgICAsIGluaXRpYWxTY2FsZUlzU2V0KGZh
bHNlKQpAQCAtNjMsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSBtYXhpbXVtU2Nh
bGU7CiAgICAgICAgIGJvb2wgYWxsb3dzVXNlclNjYWxpbmc7CiAgICAgICAgIGJvb2wgYWxsb3dz
U2hyaW5rVG9GaXQ7CisgICAgICAgIGJvb2wgY2xpcFRvRG9jdW1lbnQ7CiAKICAgICAgICAgYm9v
bCB3aWR0aElzU2V0OwogICAgICAgICBib29sIGhlaWdodElzU2V0OwpAQCAtOTUsNiArOTcsNyBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhbGxvd3NVc2VyU2NhbGluZygpIGNv
bnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWxsb3dzVXNlclNjYWxpbmdJZ25vcmluZ0Fs
d2F5c1NjYWxhYmxlKCkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd3NTaHJpbmtUb0ZpdCgpIGNvbnN0
OworICAgIGJvb2wgY2xpcFRvRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbmZpZ3VyYXRp
b24uY2xpcFRvRG9jdW1lbnQ7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXJhbWV0
ZXJzIHdlYnBhZ2VQYXJhbWV0ZXJzKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhcmFt
ZXRlcnMgdGV4dERvY3VtZW50UGFyYW1ldGVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCAyZDYxMTY5ZDY4OTFjZTY1
MmNlOTk1NjkyYmI3MTMxMTMzZjk3YWVkLi5mYzU2NzMxZTEwN2Q1NzMxNzdmN2M3ODE4ODU2YTEy
NmVjNzZlZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcApAQCAtOTU5LDYgKzk1OSwxMSBAQCBzdGF0aWMgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYgcmVuZGVyZXJGb3JDb21wb3NpdGluZ1Rlc3RzKGNvbnN0IFJlbmRlckxheWVy
JiBsYQogICAgIHJldHVybiAqcmVuZGVyZXI7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVSb290Q29udGVudExheWVyQ2xpcHBpbmcoKQoreworICAgIG1fcm9vdENvbnRl
bnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyghbV9yZW5kZXJWaWV3LnNldHRpbmdzKCkuYmFja2dy
b3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSAmJiBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCku
Y2xpcFRvRG9jdW1lbnQoKSk7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRh
dGVCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgQ29tcG9zaXRpbmdDaGFuZ2VSZXBhaW50IHNo
b3VsZFJlcGFpbnQsIEJhY2tpbmdSZXF1aXJlZCBiYWNraW5nUmVxdWlyZWQpCiB7CiAgICAgYm9v
bCBsYXllckNoYW5nZWQgPSBmYWxzZTsKQEAgLTk5MCw4ICs5OTUsNyBAQCBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIENvbXBvc2l0
aW5nQ2hhbmdlUgogICAgICAgICAgICAgICAgIHVwZGF0ZUxheWVyRm9ySGVhZGVyKHBhZ2UoKS5o
ZWFkZXJIZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJGb3JGb290ZXIocGFn
ZSgpLmZvb3RlckhlaWdodCgpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGlmIChtX3JlbmRl
clZpZXcuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKQotICAg
ICAgICAgICAgICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFs
c2UpOworICAgICAgICAgICAgICAgIHVwZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygpOwog
CiAgICAgICAgICAgICAgICAgaWYgKFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nID0gbGF5ZXIu
YmFja2luZygpLT50aWxlZEJhY2tpbmcoKSkKICAgICAgICAgICAgICAgICAgICAgdGlsZWRCYWNr
aW5nLT5zZXRUb3BDb250ZW50SW5zZXQobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnRvcENvbnRl
bnRJbnNldCgpKTsKQEAgLTMzNDMsNyArMzM0Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjplbnN1cmVSb290TGF5ZXIoKQogI2VuZGlmCiAKICAgICAgICAgLy8gTmVlZCB0byBjbGlw
IHRvIHByZXZlbnQgdHJhbnNmb3JtZWQgY29udGVudCBzaG93aW5nIG91dHNpZGUgdGhpcyBmcmFt
ZQotICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7Cisg
ICAgICAgIHVwZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygpOwogICAgIH0KIAogICAgIGlm
IChyZXF1aXJlc1Njcm9sbExheWVyKGV4cGVjdGVkQXR0YWNobWVudCkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCA4NzNjMDQ0
OWZkMTVlZDZmMzcyY2EzZDVhYTQxNGM0Yzk3ZDE1M2NmLi4yMDRlYWEzMTMyOWQ0NzllN2QxYjc0
NWNhZDkyZTVlMzdmODhmZTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0zMTMsNiArMzEzLDggQEAgcHVibGljOgogICAgIHZv
aWQgc2V0Um9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgY29u
c3QgQ29sb3ImIHJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yOyB9CiAKKyAgICB2b2lkIHVwZGF0ZVJvb3RDb250
ZW50TGF5ZXJDbGlwcGluZygpOworCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICB2
b2lkIHVwZGF0ZVNjcm9sbFNuYXBQcm9wZXJ0aWVzV2l0aEZyYW1lVmlldyhjb25zdCBGcmFtZVZp
ZXcmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQppbmRleCAxMTg3N2NiMzA2YjM5ZTdkMTdhZDc3YWY3ZTJjZTM0YjE2YzBlMTA1
Li5mMzgyY2FkNTYzZWEwZDQwNGUwZTgwMmNlYjliNjM3NTkzYTQ4YzMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtNDI2MCw2ICs0
MjYwLDExIEBAIC0gKEJPT0wpX2lzU2hvd2luZ05hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKICAg
ICByZXR1cm4gX3BhZ2UtPmlzU2hvd2luZ05hdmlnYXRpb25HZXN0dXJlU25hcHNob3QoKTsKIH0K
IAorLSAoQk9PTClfY29udGVudE1heURyYXdJbk9ic2N1cmVkSW5zZXRzCit7CisgICAgcmV0dXJu
ICFfcGFnZS0+Y2xpcFRvRG9jdW1lbnQoKTsKK30KKwogLSAoX1dLTGF5b3V0TW9kZSlfbGF5b3V0
TW9kZQogewogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKaW5kZXggMjgyNzVjM2RmYTBiZDkz
ZWY0MjM0MzcwNDQ1OTkwNmM5OTc2ZGY2My4uMzUxNjY3MzVjNDkwZWU4MDlkMDU3MzdiNWIwMTk2
YzUzNTI4ZmU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKQEAgLTE0Myw2ICsxNDMsOCBAQCB0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlKSB7CiAvLyBEZWZpbmUgdGhlIGlu
c2V0IG9mIHRoZSBzY3JvbGx2aWV3IHVudXNhYmxlIGJ5IHRoZSB3ZWIgcGFnZS4KIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldE9ic2N1cmVkSW5zZXRzOikgVUlFZGdlSW5zZXRzIF9v
YnNjdXJlZEluc2V0czsKIAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9j
b250ZW50TWF5RHJhd0luT2JzY3VyZWRJbnNldHM7CisKIC8vIE92ZXJyaWRlIHRoZSBpbnRlcmZh
Y2Ugb3JpZW50YXRpb24uIENsaWVudHMgdXNpbmcgX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBk
YXRlczogbXVzdCB1cGRhdGUgdGhlIGludGVyZmFjZSBvcmllbnRhdGlvbgogLy8gaW4gdGhlIHVw
ZGF0ZSBibG9jay4KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEludGVyZmFjZU9y
aWVudGF0aW9uT3ZlcnJpZGU6KSBVSUludGVyZmFjZU9yaWVudGF0aW9uIF9pbnRlcmZhY2VPcmll
bnRhdGlvbk92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggOGM1Nzc2ZjM0MjhmNmJiMGQxOTlhYWFlOGUwMjY2MDA3
MDRhY2UxMC4uZTkyZTQ4MjAyMjI4NjRkOTc5MGNlNzlkMDU4MWU5MmIwODE3ZTMwMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCkBA
IC0xNDYsNiArMTQ2LDggQEAgcHJpdmF0ZToKIAogICAgIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb24gdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIG92ZXJyaWRlIHsg
cmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246OkxUUjsgfQogCisg
ICAgdm9pZCBkaWRDaGFuZ2VDbGlwVG9Eb2N1bWVudChib29sIGNsaXBUb0RvY3VtZW50KSBvdmVy
cmlkZSB7IH0KKwogICAgIC8vIE1lbWJlcnMgb2YgUGFnZUNsaWVudEltcGwgY2xhc3MKICAgICBH
dGtXaWRnZXQqIG1fdmlld1dpZGdldDsKICAgICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIgbV91bmRv
Q29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IGI1NmRl
YmY1M2IxNWI2NDQ4MGVjNjQ4ZTdmNzdlNjk5MTRjMDkyNGMuLmE4NTVjNTA3N2U4ZWQzMDVkODMy
YTNmNjkzMTcwYTI2OGIxMmQyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aApAQCAtMzg2LDYgKzM4Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29uY2x1
ZGVFZGl0RGF0YUludGVyYWN0aW9uKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VGV4dEluZGljYXRv
ckRhdGE+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZURhdGFJbnRlcmFjdGlvbkNh
cmV0UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBwcmV2aW91c0NhcmV0UmVjdCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgY2FyZXRSZWN0KSA9IDA7CiAjZW5kaWYKKworICAgIHZpcnR1YWwg
dm9pZCBkaWRDaGFuZ2VDbGlwVG9Eb2N1bWVudChib29sIGNsaXBUb0RvY3VtZW50KSA9IDA7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAKaW5kZXggYWU3ODZlY2E5YTBiZDI5NTkyYTU1YTFmMGJjOGU4YzI4NGEwMzU0
My4uNjQ1NTQzZWNjYjA0NWYyNzBlMDdjNTNlMDUzMTdiZDYzZjJmNmQ3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTU0NTcsNiArNTQ1Nyw4IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlKFJlc2V0U3RhdGVSZWFzb24gcmVzZXRTdGF0ZVJl
YXNvbikKICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQogICAgIHJlcXVlc3RQb2ludGVyVW5sb2Nr
KCk7CiAjZW5kaWYKKworICAgIG1fY2xpcFRvRG9jdW1lbnQgPSB0cnVlOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZCgpCkBAIC02ODgwLDQgKzY4
ODIsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BVUkxTY2hlbWVIYW5kbGVyVGFzayh1aW50
NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QKICAgICBpdGVyYXRvci0+dmFsdWUtPnN0
b3BUYXNrKCp0aGlzLCByZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0Q2xpcFRvRG9jdW1lbnQoYm9vbCBjbGlwVG9Eb2N1bWVudCkKK3sKKyAgICBtX2NsaXBU
b0RvY3VtZW50ID0gY2xpcFRvRG9jdW1lbnQ7CisKKyAgICBtX3BhZ2VDbGllbnQuZGlkQ2hhbmdl
Q2xpcFRvRG9jdW1lbnQoY2xpcFRvRG9jdW1lbnQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAwNThjNTliZjg4
ZTJmMjQwOTcyMGE5Y2VjM2IxNGIyNjI3YjYwZjViLi5mYTQ2MDFmZmU5ZjNkN2ZmNzg5ZGY3NmFl
NjExMzk3YjUyOWQxMzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CkBAIC0xMTkxLDYgKzExOTEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVUkxTY2hlbWVIYW5k
bGVyRm9yU2NoZW1lKFJlZjxXZWJVUkxTY2hlbWVIYW5kbGVyPiYmLCBjb25zdCBTdHJpbmcmIHNj
aGVtZSk7CiAgICAgV2ViVVJMU2NoZW1lSGFuZGxlciogdXJsU2NoZW1lSGFuZGxlckZvclNjaGVt
ZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7CiAKKyAgICB2b2lkIHNldENsaXBUb0RvY3VtZW50KGJv
b2wpOworICAgIGJvb2wgY2xpcFRvRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaXBUb0Rv
Y3VtZW50OyB9CisKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmLCBXZWJQ
cm9jZXNzUHJveHkmLCB1aW50NjRfdCBwYWdlSUQsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9u
PiYmKTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpAQCAtMTk3Niw3ICsxOTc5LDkg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgYm9vbCBtX2lzVXNpbmdIaWdoUGVyZm9ybWFuY2VX
ZWJHTCB7IGZhbHNlIH07Ci0gICAgICAgIAorCisgICAgYm9vbCBtX2NsaXBUb0RvY3VtZW50IHsg
dHJ1ZSB9OworCiAgICAgV2Vha1B0ckZhY3Rvcnk8V2ViUGFnZVByb3h5PiBtX3dlYWtQdHJGYWN0
b3J5OwogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZjxXZWJVUkxTY2hlbWVIYW5kbGVyPj4gbV91
cmxTY2hlbWVIYW5kbGVyc0J5U2NoZW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggZjZjNTRjNzE2MjZiZDVmZTE4MTAzYzU1
MjMxZmI3ODE5NGFmN2I4Ni4uMzhlNzAxOWMyOTI0MzZkZGIwOWJhZmYyMzkwYTU5YTRkODJmMzJm
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluCkBAIC00OTQsNCArNDk0LDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAog
ICAgIFN0YXJ0VVJMU2NoZW1lSGFuZGxlclRhc2sodWludDY0X3QgbG9hZGVySWRlbnRpZmllciwg
dWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVx
dWVzdCkKICAgICBTdG9wVVJMU2NoZW1lSGFuZGxlclRhc2sodWludDY0X3QgbG9hZGVySWRlbnRp
ZmllciwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKQorCisgICAgU2V0Q2xpcFRvRG9jdW1l
bnQoYm9vbCBjbGlwVG9Eb2N1bWVudCkKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAppbmRleCA1MjFlMWRkODFhMjNiMmIyOWFjMjIxOGMz
N2ExYTU4YTc2YjI4ZGFhLi40N2JmYTViNzQ4Y2MwOWQyNWU0MDhjMGRkY2M2MzJmZmI3M2JiYTk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBs
SU9TLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5oCkBAIC0xOTgsNiArMTk4LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaGFuZGxlQWN0aXZl
Tm93UGxheWluZ1Nlc3Npb25JbmZvUmVzcG9uc2UoYm9vbCBoYXNBY3RpdmVTZXNzaW9uLCBjb25z
dCBTdHJpbmcmIHRpdGxlLCBkb3VibGUgZHVyYXRpb24sIGRvdWJsZSBlbGFwc2VkVGltZSkgb3Zl
cnJpZGU7CiAKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb0RvY3VtZW50KGJvb2wgY2xpcFRvRG9j
dW1lbnQpIG92ZXJyaWRlOworCiAjaWYgVVNFKFFVSUNLX0xPT0spCiAgICAgdm9pZCByZXF1ZXN0
UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudChjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpIG92ZXJyaWRlOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1t
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQppbmRl
eCBiOTZjZDJlMjc4ZjE1NDBjZTYxZDQ5NzU1YWZjOTkxZmExOGI3MmUwLi4yMzRmYTJiNmIyYzRk
NjlhYjQ4MDhmZDRmYTcxOTlhM2IxYWUyNDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTgyMSw2ICs4MjEsMTEgQEAgdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6cmVxdWVzdFBhc3N3b3JkRm9yUXVpY2tMb29rRG9jdW1lbnQoY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwKIH0KICNlbmRpZgogCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpk
aWRDaGFuZ2VDbGlwVG9Eb2N1bWVudChib29sIGNsaXBUb0RvY3VtZW50KQoreworICAgIFttX3dl
YlZpZXcgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KaW5kZXggMzliMDBhYzJhMWYyZmUwMTk1
ODFmYmQ5YTVkY2Y5M2ZhZTBjYTUxZS4uMjY1M2VmNTM1NTIyNDkyMTgzYWUzMjcyNzIyZmVhMmUz
Zjc5ODU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
dy5tbQpAQCAtMzYwLDYgKzM2MCw3IEBAIC0gKHZvaWQpdXBkYXRlRml4ZWRDbGlwcGluZ1ZpZXc6
KEZsb2F0UmVjdClmaXhlZFBvc2l0aW9uUmVjdEZvclVJCiAKICAgICBbX2ZpeGVkQ2xpcHBpbmdW
aWV3IHNldENlbnRlcjpjbGlwcGluZ0JvdW5kcy5sb2NhdGlvbigpXTsgLy8gTm90IHJlYWxseSB0
aGUgY2VudGVyIHNpbmNlIHdlIHNldCBhbiBhbmNob3IgcG9pbnQuCiAgICAgW19maXhlZENsaXBw
aW5nVmlldyBzZXRCb3VuZHM6Y2xpcHBpbmdCb3VuZHNdOworICAgIFtfZml4ZWRDbGlwcGluZ1Zp
ZXcgbGF5ZXJdLm1hc2tzVG9Cb3VuZHMgPSBfcGFnZS0+Y2xpcFRvRG9jdW1lbnQoKTsKIH0KIAog
LSAodm9pZClfZGlkRXhpdFN0YWJsZVN0YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggM2NiNmNhOGFhNmYzYTE5YWY1OGY4NDUwNzBjYTNi
ZjVlZTQ0YmQ1OS4uYzkwMWQ1ZmQxYWU1NWRiZjA4MDM2NjBmMjQ4YzRiZjg5ZGJlZTAxNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaApAQCAtMjUx
LDYgKzI1MSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZFJlc3RvcmVTY3JvbGxQb3NpdGlv
bigpIG92ZXJyaWRlOwogICAgIGJvb2wgd2luZG93SXNGcm9udFdpbmRvd1VuZGVyTW91c2UoY29u
c3QgTmF0aXZlV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkaWRDaGFuZ2VD
bGlwVG9Eb2N1bWVudChib29sIGNsaXBUb0RvY3VtZW50KSBvdmVycmlkZSB7IH0KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDE0YzFlNDY2
MTI2M2IxZDFkZTA5MjA2OGFkYzlkMGRiNmQwOWQwYmMuLmMyZmZhZTVjOTg0ZTY2NGMxNjc0MWYz
NjYxMDdjYzNlMjdkYTYxMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTEyMjIsNCAr
MTIyMiw5IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJr
ZXJSZWN0cygpCiAgICAgbV9wYWdlLmZpbmRDb250cm9sbGVyKCkuZGlkSW52YWxpZGF0ZURvY3Vt
ZW50TWFya2VyUmVjdHMoKTsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZENoYW5nZUNs
aXBUb0RvY3VtZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQpCit7CisgICAgbV9wYWdlLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0Q2xpcFRvRG9jdW1lbnQoY2xpcFRvRG9jdW1lbnQpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBhNTE0
YjI5OTQ4ODg0MmJjZjkyNDU4OTEzYjAzNzliM2VhZjllYmFlLi5hYWIxNmViM2M2Zjg2MGNmODAx
ZWFjY2EyNzA3YTQ4NWM4NjI2MTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTM0MCw2ICsz
NDAsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJrZXJS
ZWN0cygpIGZpbmFsOwogCisgICAgdm9pZCBkaWRDaGFuZ2VDbGlwVG9Eb2N1bWVudChib29sKSBm
aW5hbDsKKwogICAgIFN0cmluZyBtX2NhY2hlZFRvb2xUaXA7CiAgICAgbXV0YWJsZSBSZWZQdHI8
V2ViRnJhbWU+IG1fY2FjaGVkRnJhbWVTZXRMYXJnZXN0RnJhbWU7CiAgICAgbXV0YWJsZSBib29s
IG1fY2FjaGVkTWFpbkZyYW1lSGFzSG9yaXpvbnRhbFNjcm9sbGJhciB7IGZhbHNlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0K
aW5kZXggNjgwOGViNGI2NzU4MmE5ZGU4OGI0ZmRhN2RiZTcwY2VmZTUzMzdmOC4uZDMwYjU1NDZj
NWI3ZDZhNWVmYTk5YmRmNGRmNWQzM2VhM2JmZWQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMzA0NSw2ICszMDQ1
LDggQEAgdm9pZCBXZWJQYWdlOjp2aWV3cG9ydENvbmZpZ3VyYXRpb25DaGFuZ2VkKCkKICAgICB1
cGRhdGVWaWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKCk7CiAKICAgICBGcmFtZVZpZXcm
IGZyYW1lVmlldyA9ICptYWluRnJhbWVWaWV3KCk7CisgICAgZnJhbWVWaWV3LnNldENsaXBUb0Rv
Y3VtZW50KG1fdmlld3BvcnRDb25maWd1cmF0aW9uLmNsaXBUb0RvY3VtZW50KCkpOworCiAgICAg
SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBmcmFtZVZpZXcuc2Nyb2xsUG9zaXRpb24oKTsKICAg
ICBpZiAoIW1faGFzUmVjZWl2ZWRWaXNpYmxlQ29udGVudFJlY3RzQWZ0ZXJEaWRDb21taXRMb2Fk
KSB7CiAgICAgICAgIEZsb2F0U2l6ZSBtaW5pbXVtTGF5b3V0U2l6ZUluU2Nyb2xsVmlld0Nvb3Jk
aW5hdGVzID0gbV92aWV3cG9ydENvbmZpZ3VyYXRpb24ubWluaW11bUxheW91dFNpemUoKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1YzYwOTFj
ZWI1ZDlmN2NjNzRjMTUzYjEyNTBmZWQ0MzlhNjE5ZjhjLi4xZTJjNTZiNmE0MGYwNzJlMzE4NTE3
MDIyM2I2Y2FkYjk2NzhiNjM5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTctMDQtMTIgIFRpbSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUHJvdmlkZSBhIHZpZXdwb3J0IHBh
cmFtZXRlciB0byBkaXNhYmxlIGNsaXBwaW5nIHRvIHRoZSBkb2N1bWVudCByZWN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzMxNTY0NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5tbToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJlZElu
c2V0cyk6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGlu
Z3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbDoKKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJ
U2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpVSVNj
cmlwdENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKToKKyAgICAgICAgKiBUZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgor
ICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKToKKyAg
ICAgICAgQWRkIGEgVUlTY3JpcHRDb250cm9sbGVyIG1lY2hhbmlzbSB0byBpbnN0YWxsIG9ic2N1
cmVkIGluc2V0cworICAgICAgICBvbiB0aGUgd2ViIHZpZXcuCisKIDIwMTctMDQtMDUgIEpvbmF0
aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIHdlYmtpdHB5OiBBZGQg
cGlkIGxvZ2dpbmcgZm9yIHNpbXVsYXRvciBwcm9jZXNzZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IDQwM2I1OWI0MWQzNTk5
ZDU4YTIzNjU5OTM4ODIzZjYzNzM4MjU3MjYuLmIwZTA0ZGQ2NmE5MTNkNjZhMDRiOWY4ZDI4ZDI3
NDg1NjcxY2Q2YzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0
Q29udHJvbGxlcklPUy5tbQpAQCAtMzE2LDYgKzMxNiwxMCBAQCB2b2lkIFVJU2NyaXB0Q29udHJv
bGxlcjo6YWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYpCiB7CiB9CiAKK3ZvaWQgVUlTY3JpcHRD
b250cm9sbGVyOjpzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUpCit7Cit9CisKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29u
dHJvbGxlci5pZGwgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5k
aW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCmluZGV4IGY2NmFlMTUyMmY1MTYxNzA3Y2M3ZjFm
ODRkNGM4ODFhOTJkYzJiZjEuLmRiYTQ1NmViY2IxZTNmOTg3ZDg5YjI3ODZlZTUzZmJkYzlhZTJh
YmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0Jp
bmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKKysrIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbApAQCAtMjMy
LDQgKzIzMiw2IEBAIGludGVyZmFjZSBVSVNjcmlwdENvbnRyb2xsZXIgewogICAgIHZvaWQgYWRk
Vmlld1RvV2luZG93KG9iamVjdCBjYWxsYmFjayk7CiAKICAgICB2b2lkIG92ZXJyaWRlUHJlZmVy
ZW5jZShET01TdHJpbmcgcHJlZmVyZW5jZSwgRE9NU3RyaW5nIHZhbHVlKTsKKworICAgIHZvaWQg
c2V0T2JzY3VyZWRJbnNldHMoZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9t
LCBkb3VibGUgbGVmdCk7CiB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9V
SVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1Rlc3RSdW5uZXJT
aGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggNjEyYzll
MjlmMWRhMjRlMjE4ODQ2NDA1YzgxNDIwZTZhYmRiODIzZi4uMGYxZmNjMWQ0OWYyMTZlMzVjNzFm
ODZmYWY4ODZlOGFhNDk5NzU5YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9V
SVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9UZXN0UnVu
bmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0zOTks
NiArMzk5LDEwIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBVSVNjcmlwdENvbnRyb2xsZXI6
OmFjY2Vzc2liaWxpdHlTcGVha1NlbGVjdGlvbkNvbnRlbnQoCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUg
dG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KQoreworfQorCiAj
ZW5kaWYKIAogI2lmICFQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKaW5kZXgg
NDZjMjhiMTQwMWRkNDY0MTc2NDRhYTc2Njc0Y2FhYzNiMWJkNGNhOS4uNjYyNzM4ODdiOWU2YWI5
OTE2YjU5YTkxODlhMjIxYjEwODRkN2EzMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNo
YXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKQEAgLTE1
Niw2ICsxNTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVWaWV3RnJvbVdpbmRvdyhKU1Zh
bHVlUmVmKTsKICAgICB2b2lkIGFkZFZpZXdUb1dpbmRvdyhKU1ZhbHVlUmVmKTsKIAorICAgIHZv
aWQgc2V0T2JzY3VyZWRJbnNldHMoZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90
dG9tLCBkb3VibGUgbGVmdCk7CisKIHByaXZhdGU6CiAgICAgVUlTY3JpcHRDb250cm9sbGVyKFVJ
U2NyaXB0Q29udGV4dCYpOwogICAgIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9U
ZXN0Q29udHJvbGxlcklPUy5tbQppbmRleCA3YzM1MWY4MmY4NjdiZGI3ZTJkMTAyOTkzZDZhMDFm
ZjM1OGI2MDQyLi5hMGQxMTJmNTYzMjY0MGI0ZjcyZjFlNzJmYThmNmJjNmI5MDBlMmI3IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQpAQCAt
ODUsNiArODUsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUb0Nv
bnNpc3RlbnRWYWx1ZXMoKQogICAgICAgICBbc2Nyb2xsVmlldyBfcmVtb3ZlQWxsQW5pbWF0aW9u
czpZRVNdOwogICAgICAgICBbc2Nyb2xsVmlldyBzZXRab29tU2NhbGU6MSBhbmltYXRlZDpOT107
CiAgICAgICAgIFtzY3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6Q0dQb2ludFplcm9dOworCisg
ICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gVUlFZGdlSW5zZXRzWmVybzsKKyAgICAg
ICAgd2ViVmlldy0+cGxhdGZvcm1WaWV3KCkuX29ic2N1cmVkSW5zZXRzID0gVUlFZGdlSW5zZXRz
WmVybzsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJ
U2NyaXB0Q29udHJvbGxlcklPUy5tbQppbmRleCBjZTY3ZjVlNTQzOWY4N2M3NWQ5Y2E2NWUyNDY0
Y2ZlZmY2YTM4ZGQ2Li41N2ExOTU0OWQ5ZDg5M2YyZTJkODI0MjY0YzE2MDdmMzBjNWYyZGJkIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJ
T1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVy
SU9TLm1tCkBAIC02NjgsNiArNjY4LDE0IEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpwbGF0
Zm9ybUNsZWFyQWxsQ2FsbGJhY2tzKCkKICAgICB3ZWJWaWV3LmRpZEVuZFNjcm9sbGluZ0NhbGxi
YWNrID0gbmlsOwogfQogCit2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6c2V0T2JzY3VyZWRJbnNl
dHMoZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9tLCBkb3VibGUgbGVmdCkK
K3sKKyAgICBVSUVkZ2VJbnNldHMgaW5zZXRzID0gVUlFZGdlSW5zZXRzTWFrZSh0b3AsIGxlZnQs
IGJvdHRvbSwgcmlnaHQpOworICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcgPSBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7Cisg
ICAgd2ViVmlldy5zY3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IGluc2V0czsKKyAgICB3ZWJWaWV3
Ll9vYnNjdXJlZEluc2V0cyA9IGluc2V0czsKK30KKwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGI5ODhmMTExODQ3N2Y3OThlNTFlMmM0YTZmYjc5NDk3ZTk1NjlhYWYuLjI3
Y2U5Yjk5NWFjZjlkZDFmYTRkNWRlYTkwMjE5YzMwZWY1NTU5MWQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAxNy0wNC0xMiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
KworICAgICAgICBQcm92aWRlIGEgdmlld3BvcnQgcGFyYW1ldGVyIHRvIGRpc2FibGUgY2xpcHBp
bmcgdG8gdGhlIGRvY3VtZW50IHJlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MDc2NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE1NjQ2MzQ+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0aWxl
ZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLWRvY3VtZW50LW5vLWdldHMtbWFyZ2luLXRp
bGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdGlsZWQtZHJhd2luZy9pb3Mvdmll
d3BvcnQtY2xpcC10by1kb2N1bWVudC1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sOiBBZGRlZC4K
KwogMjAxNy0wNC0wNSAgSmF2aWVyIEZlcm5hbmRleiAgPGpmZXJuYW5kZXpAaWdhbGlhLmNvbT4K
IAogICAgICAgICBbY3NzLWFsaWduXSBJbXBsZW1lbnQgdGhlIHBsYWNlLWl0ZW1zIHNob3J0aGFu
ZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xp
cC10by1kb2N1bWVudC1uby1nZXRzLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLWRvY3VtZW50LW5vLWdldHMt
bWFyZ2luLXRpbGVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzUwYmQzZGEwNzQzMjIyMWQ5
NDBiMWMwMTM4ZGExZDJmODgyZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdGls
ZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1kb2N1bWVudC1uby1nZXRzLW1hcmdpbi10
aWxlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMyBAQAorKEdyYXBoaWNzTGF5ZXIKKyAgKGFu
Y2hvciAwLjAwIDAuMDApCisgIChib3VuZHMgMzIwLjAwIDU0OC4wMCkKKyAgKHZpc2libGUgcmVj
dCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAgKGNvdmVyYWdlIHJlY3QgLTQwLjAwLCAt
MTAuMDAgMzIwLjAwIHggNTQ4LjAwKQorICAoaW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisg
IChjb250ZW50c1NjYWxlIDIuMDApCisgIChjaGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIK
KyAgICAgIChib3VuZHMgMzIwLjAwIDU0OC4wMCkKKyAgICAgIChjb250ZW50c09wYXF1ZSAxKQor
ICAgICAgKHZpc2libGUgcmVjdCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAgICAgIChj
b3ZlcmFnZSByZWN0IC00MC4wMCwgLTEwLjAwIDU3Ni4wMCB4IDgwNC4wMCkKKyAgICAgIChpbnRl
cnNlY3RzIGNvdmVyYWdlIHJlY3QgMSkKKyAgICAgIChjb250ZW50c1NjYWxlIDIuMDApCisgICAg
ICAodGlsZSBjYWNoZSBjb3ZlcmFnZSAtNTEyLCAtNTEyIDEzNDQgeCAxNTcyKQorICAgICAgKHRp
bGUgc2l6ZSA1MTIgeCA1NDgpCisgICAgICAodG9wIGxlZnQgdGlsZSAtMSwgLTEgdGlsZXMgZ3Jp
ZCAzIHggMykKKyAgICAgIChpbiB3aW5kb3cgMSkKKyAgICApCisgICkKKykKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1kb2N1bWVu
dC1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9p
b3Mvdmlld3BvcnQtY2xpcC10by1kb2N1bWVudC1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjk1MzQ4NGVlODBiZjA3Mjk2MTk4MjhkZTU3NDNjY2M5NjJkZWMwZDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlw
LXRvLWRvY3VtZW50LW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWwKQEAgLTAsMCArMSw0MyBAQAor
PCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGlibGVWaWV3
cG9ydD10cnVlIF0gLS0+CisKKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgbmFtZT0idmlld3Bv
cnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MSwgY2xpcC10by1kb2N1bWVudD1ubyI+CisgICAg
PHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gZ2V0VUlTY3JpcHQoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIHVpQ29udHJvbGxlci5zZXRPYnNjdXJlZEluc2V0cygxMCwgMjAsIDMwLCA0MCk7CisgICAg
ICAgICAgICAgICAgdWlDb250cm9sbGVyLmltbWVkaWF0ZVNjcm9sbFRvT2Zmc2V0KC00MCwgLTEw
KTsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuZG9BZnRlclZpc2libGVDb250ZW50UmVj
dFVwZGF0ZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci51
aVNjcmlwdENvbXBsZXRlKCk7CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIH0pKCk7
YAorICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAg
ICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChnZXRVSVNjcmlwdCgp
LCBmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGVybmFs
cykgeworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5ZXJz
JykuaW5uZXJUZXh0ID0gaW50ZXJuYWxzLmxheWVyVHJlZUFzVGV4dChkb2N1bWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGludGVybmFscy5MQVlFUl9UUkVFX0lOQ0xVREVTX1ZJU0lCTEVf
UkVDVFMgfCBpbnRlcm5hbHMuTEFZRVJfVFJFRV9JTkNMVURFU19USUxFX0NBQ0hFUyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICB3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcignbG9hZCcsIGRvVGVzdCwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgor
Cis8Ym9keT4KKzxwcmUgaWQ9ImxheWVycyI+TGF5ZXIgdHJlZSBnb2VzIGhlcmU8L3A+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306950</attachid>
            <date>2017-04-12 16:46:17 -0700</date>
            <delta_ts>2017-04-12 17:06:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170766-20170412164616.patch</filename>
            <type>text/plain</type>
            <size>37407</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjU0N2Y4MWM0MzYxZjRm
YjRhZjBkYjUzNTg5YjMxNjlkMThlZTgxNS4uNTBiNDNjMzU4NzEwNjcwMWU3MDExZjhhYWE4MWU1
YWE3N2U2ZjFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE3LTA0LTEyICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2
aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgZG9jdW1lbnQgcmVj
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzY2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3
cG9ydC1jbGlwLXRvLWRvY3VtZW50LW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWwKKworICAgICAg
ICAqIGRvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50czo6cmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRWaWV3cG9ydEZlYXR1
cmUpOgorICAgICAgICAqIGRvbS9WaWV3cG9ydEFyZ3VtZW50cy5oOgorICAgICAgICAoV2ViQ29y
ZTo6Vmlld3BvcnRBcmd1bWVudHM6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBhZ2UvVmlld3Bv
cnRDb25maWd1cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0Q29uZmlndXJh
dGlvbjo6dXBkYXRlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0Q29uZmlndXJhdGlvbjo6ZGVzY3JpcHRpb24p
OgorICAgICAgICAqIHBhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpWaWV3cG9ydENvbmZpZ3VyYXRpb246OlBhcmFtZXRlcnM6OlBhcmFtZXRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Vmlld3BvcnRDb25maWd1cmF0aW9uOjpjbGlwVG9Eb2N1bWVudCk6Cisg
ICAgICAgIEFkZCB2aWV3cG9ydCBwYXJhbWV0ZXIuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNs
aWVudC5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGFnZS9GcmFt
ZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjplbmFibGVTcGVjdWxhdGl2
ZVRpbGluZ0lmTmVlZGVkKToKKyAgICAgICAgSWYgbm90IGNsaXBwaW5nIHRvIHRoZSBkb2N1bWVu
dCwgZW5hYmxlICJzcGVjdWxhdGl2ZSIgdGlsaW5nIGltbWVkaWF0ZWx5LAorICAgICAgICBiZWNh
dXNlIHRoZSBtYXJnaW4gdGlsZXMgY2FuIGJlIHZpc2libGUgaW1tZWRpYXRlbHkuCisKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6aGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlVGlsZXNGb3JFeHRlbmRl
ZEJhY2tncm91bmRNb2RlKToKKyAgICAgICAgRG9uJ3QgY2hlY2sgdGhlIHNldHRpbmcgaGVyZTsg
anVzdCByZXNwZWN0IHRoZSBtb2RlIHRoYXQgaXMgY29tcHV0ZWQKKyAgICAgICAgYnkgY2FsY3Vs
YXRlRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpjYWxjdWxhdGVFeHRlbmRlZEJhY2tncm91bmRNb2RlKToKKyAgICAgICAgSWYgdGhlIHZpZXdw
b3J0IHBhcmFtZXRlciB3YXMgc2V0LCBhZGQgbWFyZ2luIHRpbGVzIG9uIGJvdGggYXhlcy4KKwor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRDbGlwVG9Eb2N1bWVudCk6CisgICAgICAg
IE5vdGlmeSBDaHJvbWVDbGllbnQgb2YgdGhlIGNoYW5nZSwgYW5kIHJlLWNvbXB1dGUgdGhlIG1h
cmdpbiB0aWxlIG1vZGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6Cisg
ICAgICAgIEZhY3RvciBvdXQgY29kZSB0aGF0IGRlY2lkZXMgd2hldGhlciB0aGUgY29udGVudCBs
YXllciBjbGlwcyB0byBib3VuZHMsCisgICAgICAgIGFuZCBtYWtlIGl0IHRha2UgdGhlIG5ldyB2
aWV3cG9ydCBwYXJhbWV0ZXIgaW50byBhY2NvdW50LgorCiAyMDE3LTA0LTA1ICBBbmRyZWFzIEts
aW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGluYWN0aXZlIHdlYiBwcm9j
ZXNzZXMgYmVoYXZlIGFzIHRob3VnaCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggMTAyMzg3MjRhMTI4YjhkZTI5MmU0YTExMTRlMDc1OWU4OTc0MTNkYi4uMDdhMzBhZTEyNGJj
MmMyZGIwOTQ3MTQ2MjgwZTRhODM4YmJlNzg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBA
CisyMDE3LTA0LTEyICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisg
ICAgICAgIFByb3ZpZGUgYSB2aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0
byB0aGUgZG9jdW1lbnQgcmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwNzY2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlc2V0
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENsaXBUb0RvY3VtZW50
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6Y2xpcFRvRG9jdW1lbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6
OmRpZENoYW5nZUNsaXBUb0RvY3VtZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1Bh
Z2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmRpZENoYW5nZUNsaXBUb0RvY3VtZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgIEZvcndhcmQgY2xpcC10by1kb2N1bWVudCBjaGFu
Z2VzIGZyb20gQ2hyb21lQ2xpZW50IHRvIFdLV2ViVmlldy4KKyAgICAgICAgVXBkYXRlIHZpc2li
bGUgY29udGVudCByZWN0cyB3aGVuIGl0IGNoYW5nZXMsIHdoaWNoIHdpbGwKKyAgICAgICAgcmVz
dWx0IGluIGEgY2FsbCB0byB1cGRhdGVGaXhlZENsaXBwaW5nVmlldywgYXMgYmVsb3cuCisgICAg
ICAgIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlIFVJIHByb2Nlc3MuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IF9jb250ZW50TWF5RHJhd0luT2JzY3VyZWRJbnNldHNdKToKKyAgICAgICAgRXhwb3NlIHRo
ZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjbGlwLXRvLWRvY3VtZW50IGJpdCBhcyBTUEkuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW06CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgdXBkYXRlRml4ZWRDbGlwcGluZ1ZpZXc6XSk6CisgICAgICAgIERpc2FibGUgZml4
ZWQgY2xpcHBpbmcgd2hlbiBjbGlwLXRvLWRvY3VtZW50IGlzIGRpc2FibGVkLgorICAgICAgICAK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnZpZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQpOgorICAgICAg
ICBQdXNoIHRoZSB2aWV3cG9ydCdzIGNsaXAtdG8tZG9jdW1lbnQgYml0IG9udG8gdGhlIG1haW4g
ZnJhbWUncyBGcmFtZVZpZXcuCisKIDIwMTctMDQtMDUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIHNvIFdlYnNpdGVEYXRhU3RvcmVzIGFsd2F5
cyBoYXZlIGEgU3RvcmFnZU1hbmFnZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Vmlld3BvcnRBcmd1bWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1l
bnRzLmNwcAppbmRleCAxZTY5YjkyNmRiMWJkNjcxMzBiYWNlZTUxMzUzNDIyMjRkM2IzODBkLi5j
N2YzY2UxNzk0M2MxNWQ2NjAyYjBlMzU4YzRiOTk3OWVhNWNlZDVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHAKQEAgLTI0Niw2ICsyNDYsNyBAQCBWaWV3cG9ydEF0
dHJpYnV0ZXMgVmlld3BvcnRBcmd1bWVudHM6OnJlc29sdmUoY29uc3QgRmxvYXRTaXplJiBpbml0
aWFsVmlld3BvcnRTaQogICAgIHJlc3VsdC51c2VyU2NhbGFibGUgPSB1c2VyWm9vbTsKICAgICBy
ZXN1bHQub3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKICAgICByZXN1bHQuc2hyaW5rVG9GaXQg
PSBzaHJpbmtUb0ZpdDsKKyAgICByZXN1bHQuY2xpcFRvRG9jdW1lbnQgPSBjbGlwVG9Eb2N1bWVu
dDsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0zNjMsMjIgKzM2NCwyMSBAQCBzdGF0aWMg
ZmxvYXQgZmluZFNjYWxlVmFsdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwg
U3RyaW5nVmlldyB2YWx1ZQogICAgIHJldHVybiBudW1lcmljVmFsdWU7CiB9CiAKLS8vIEZJWE1F
OiBJdCdzIGtpbmQgb2YgYml6YXJyZSB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIG9mIDEg
YW5kIDAgdG8gcmVwcmVzZW50IHRydWUgYW5kIGZhbHNlLgotc3RhdGljIGZsb2F0IGZpbmRCb29s
ZWFuVmFsdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2
YWx1ZSkKK3N0YXRpYyBib29sIGZpbmRCb29sZWFuVmFsdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBT
dHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZSkKIHsKICAgICAvLyB5ZXMgYW5kIG5vIGFy
ZSB1c2VkIGFzIGtleXdvcmRzLgogICAgIC8vIE51bWJlcnMgPj0gMSwgbnVtYmVycyA8PSAtMSwg
ZGV2aWNlLXdpZHRoIGFuZCBkZXZpY2UtaGVpZ2h0IGFyZSBtYXBwZWQgdG8geWVzLgogICAgIC8v
IE51bWJlcnMgaW4gdGhlIHJhbmdlIDwtMSwgMT4sIGFuZCB1bmtub3duIHZhbHVlcywgYXJlIG1h
cHBlZCB0byBuby4KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1
ZSwgInllcyIpKQotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAibm8iKSkKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UodmFsdWUsICJkZXZpY2Utd2lkdGgiKSkKLSAgICAgICAgcmV0dXJuIDE7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZSh2YWx1ZSwgImRldmljZS1oZWlnaHQiKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0
dXJuIHN0ZDo6YWJzKG51bWVyaWNQcmVmaXgoZG9jdW1lbnQsIGtleSwgdmFsdWUpKSA+PSAxID8g
MSA6IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmFicyhudW1lcmlj
UHJlZml4KGRvY3VtZW50LCBrZXksIHZhbHVlKSkgPj0gMTsKIH0KIAogdm9pZCBzZXRWaWV3cG9y
dEZlYXR1cmUoVmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cywgRG9jdW1lbnQmIGRvY3VtZW50
LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZSkKQEAgLTQwMyw2ICs0MDMsOCBAQCB2
b2lkIHNldFZpZXdwb3J0RmVhdHVyZShWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzLCBEb2N1
bWVudCYgZG9jdW1lbnQsIFN0cmluZwogI2VuZGlmCiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2Uoa2V5LCAic2hyaW5rLXRvLWZpdCIpKQogICAgICAgICBhcmd1bWVu
dHMuc2hyaW5rVG9GaXQgPSBmaW5kQm9vbGVhblZhbHVlKGRvY3VtZW50LCBrZXksIHZhbHVlKTsK
KyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJjbGlwLXRv
LWRvY3VtZW50IikpCisgICAgICAgIGFyZ3VtZW50cy5jbGlwVG9Eb2N1bWVudCA9IGZpbmRCb29s
ZWFuVmFsdWUoZG9jdW1lbnQsIGtleSwgdmFsdWUpOwogICAgIGVsc2UKICAgICAgICAgcmVwb3J0
Vmlld3BvcnRXYXJuaW5nKGRvY3VtZW50LCBVbnJlY29nbml6ZWRWaWV3cG9ydEFyZ3VtZW50S2V5
RXJyb3IsIGtleSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRB
cmd1bWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oCmluZGV4
IDRlNjkwN2Y1ODlkYjcyNmRiYThhYzA5ZjgxZDg3OTU3ZTc2Zjg4MmIuLjM4N2JhOGVmMzc3Y2Yw
NmYyZTAwNjhmYjcwN2RkOWRjZGYyOTczMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9WaWV3cG9ydEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFy
Z3VtZW50cy5oCkBAIC01MSw2ICs1MSw3IEBAIHN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXMgewog
ICAgIGZsb2F0IHVzZXJTY2FsYWJsZTsKICAgICBmbG9hdCBvcmllbnRhdGlvbjsKICAgICBmbG9h
dCBzaHJpbmtUb0ZpdDsKKyAgICBib29sIGNsaXBUb0RvY3VtZW50OwogfTsKIAogc3RydWN0IFZp
ZXdwb3J0QXJndW1lbnRzIHsKQEAgLTk0LDYgKzk1LDcgQEAgc3RydWN0IFZpZXdwb3J0QXJndW1l
bnRzIHsKICAgICBmbG9hdCB1c2VyWm9vbSB7IFZhbHVlQXV0byB9OwogICAgIGZsb2F0IG9yaWVu
dGF0aW9uIHsgVmFsdWVBdXRvIH07CiAgICAgZmxvYXQgc2hyaW5rVG9GaXQgeyBWYWx1ZUF1dG8g
fTsKKyAgICBib29sIGNsaXBUb0RvY3VtZW50IHsgdHJ1ZSB9OwogICAgIGJvb2wgd2lkdGhXYXNF
eHBsaWNpdCB7IGZhbHNlIH07CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmlld3BvcnRB
cmd1bWVudHMmIG90aGVyKSBjb25zdApAQCAtMTEyLDYgKzExNCw3IEBAIHN0cnVjdCBWaWV3cG9y
dEFyZ3VtZW50cyB7CiAgICAgICAgICAgICAmJiB1c2VyWm9vbSA9PSBvdGhlci51c2VyWm9vbQog
ICAgICAgICAgICAgJiYgb3JpZW50YXRpb24gPT0gb3RoZXIub3JpZW50YXRpb24KICAgICAgICAg
ICAgICYmIHNocmlua1RvRml0ID09IG90aGVyLnNocmlua1RvRml0CisgICAgICAgICAgICAmJiBj
bGlwVG9Eb2N1bWVudCA9PSBvdGhlci5jbGlwVG9Eb2N1bWVudAogICAgICAgICAgICAgJiYgd2lk
dGhXYXNFeHBsaWNpdCA9PSBvdGhlci53aWR0aFdhc0V4cGxpY2l0OwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggYjA4MGE5NTg5NTllNDU2NWNmMDJjN2Y0MDgwN2Y4
YzQ0MDJmMDFmNy4uNzA1YzVhYTE0NmU0YjE4NzhkOGE0NTVkM2U0YWViNDk4MTM4MDI0MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00NjYsNiArNDY2LDggQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydFByb2Nlc3NDUFVUaW1lKGludDY0X3QsIEFjdGl2aXR5
U3RhdGVGb3JDUFVTYW1wbGluZykgeyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ2xp
cFRvRG9jdW1lbnQoYm9vbCkgeyB9CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5DaHJvbWVD
bGllbnQoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYTc0ODc5NDY1
OGJmNzU5ZDc0ZDUyYjIyZGRjMGU2MWI2YmNkOGNlOS4uZTg0OWExMzdhOTk0ZDYxMjdlYTAzZDYx
Njc2MzBiM2FhZmNiODg1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMjkyOSw2
ICsyOTI5LDEwIEBAIHZvaWQgRnJhbWVWaWV3OjplbmFibGVTcGVjdWxhdGl2ZVRpbGluZ0lmTmVl
ZGVkKCkKICAgICAgICAgbV9zcGVjdWxhdGl2ZVRpbGluZ0VuYWJsZWQgPSB0cnVlOwogICAgICAg
ICByZXR1cm47CiAgICAgfQorICAgIGlmICghbV9jbGlwVG9Eb2N1bWVudCkgeworICAgICAgICBt
X3NwZWN1bGF0aXZlVGlsaW5nRW5hYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAgICAgaWYgKCFzaG91bGRFbmFibGVTcGVjdWxhdGl2ZVRpbGluZ0R1cmluZ0xvYWRpbmcoKnRo
aXMpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fc3BlY3VsYXRpdmVUaWxpbmdFbmFibGVU
aW1lci5pc0FjdGl2ZSgpKQpAQCAtMzIyNSw5ICszMjI5LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnVw
ZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBi
b29sIHQKIAogYm9vbCBGcmFtZVZpZXc6Omhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWlu
dGluZygpIGNvbnN0CiB7Ci0gICAgaWYgKCFmcmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNo
b3VsZEV4dGVuZEJleW9uZFBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgVGls
ZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKTsKICAgICBpZiAo
IXRpbGVkQmFja2luZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI0NiwxMSArMzI0Nyw4
IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKQog
CiBGcmFtZVZpZXc6OkV4dGVuZGVkQmFja2dyb3VuZE1vZGUgRnJhbWVWaWV3OjpjYWxjdWxhdGVF
eHRlbmRlZEJhY2tncm91bmRNb2RlKCkgY29uc3QKIHsKLSAgICAvLyBKdXN0IGJlY2F1c2UgU2V0
dGluZ3M6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkgaXMgdHJ1ZSBkb2VzIG5v
dCBuZWNlc3NhcmlseSBtZWFuCi0gICAgLy8gdGhhdCB0aGUgYmFja2dyb3VuZCByZWN0IG5lZWRz
IHRvIGJlIGV4dGVuZGVkIGZvciBwYWludGluZy4gU2ltcGxlIGJhY2tncm91bmRzIGNhbiBiZSBl
eHRlbmRlZAotICAgIC8vIGp1c3Qgd2l0aCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldFJvb3RF
eHRlbmRlZEJhY2tncm91bmRDb2xvcigpLiBNb3JlIGNvbXBsaWNhdGVkIGJhY2tncm91bmRzLAot
ICAgIC8vIHN1Y2ggYXMgaW1hZ2VzLCByZXF1aXJlIGV4dGVuZGluZyB0aGUgYmFja2dyb3VuZCBy
ZWN0IHRvIGNvbnRpbnVlIHBhaW50aW5nIGludG8gdGhlIGV4dGVuZGVkCi0gICAgLy8gcmVnaW9u
LiBUaGlzIGZ1bmN0aW9uIGZpbmRzIG91dCBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gZXh0ZW5kIHRo
ZSBiYWNrZ3JvdW5kIHJlY3QgZm9yIHBhaW50aW5nLgorICAgIGlmICghbV9jbGlwVG9Eb2N1bWVu
dCkKKyAgICAgICAgcmV0dXJuIEV4dGVuZGVkQmFja2dyb3VuZE1vZGVBbGw7CiAKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzE2MjAxMzczPgpAQCAtMzI1OSw2ICsz
MjU3LDEyIEBAIEZyYW1lVmlldzo6RXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBGcmFtZVZpZXc6OmNh
bGN1bGF0ZUV4dGVuZGVkQmFja2dyb3VuZE1vZGUoKSBjCiAgICAgaWYgKCFmcmFtZSgpLnNldHRp
bmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSkKICAgICAgICAgcmV0dXJu
IEV4dGVuZGVkQmFja2dyb3VuZE1vZGVOb25lOwogCisgICAgLy8gSnVzdCBiZWNhdXNlIFNldHRp
bmdzOjpiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpIGlzIHRydWUgZG9lcyBub3Qg
bmVjZXNzYXJpbHkgbWVhbgorICAgIC8vIHRoYXQgdGhlIGJhY2tncm91bmQgcmVjdCBuZWVkcyB0
byBiZSBleHRlbmRlZCBmb3IgcGFpbnRpbmcuIFNpbXBsZSBiYWNrZ3JvdW5kcyBjYW4gYmUgZXh0
ZW5kZWQKKyAgICAvLyBqdXN0IHdpdGggUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRSb290RXh0
ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKS4gTW9yZSBjb21wbGljYXRlZCBiYWNrZ3JvdW5kcywKKyAg
ICAvLyBzdWNoIGFzIGltYWdlcywgcmVxdWlyZSBleHRlbmRpbmcgdGhlIGJhY2tncm91bmQgcmVj
dCB0byBjb250aW51ZSBwYWludGluZyBpbnRvIHRoZSBleHRlbmRlZAorICAgIC8vIHJlZ2lvbi4g
VGhpcyBmdW5jdGlvbiBmaW5kcyBvdXQgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGV4dGVuZCB0aGUg
YmFja2dyb3VuZCByZWN0IGZvciBwYWludGluZy4KKwogICAgIGlmICghZnJhbWUoKS5pc01haW5G
cmFtZSgpKQogICAgICAgICByZXR1cm4gRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZU5vbmU7CiAKQEAg
LTMyODgsOSArMzI5Miw2IEBAIEZyYW1lVmlldzo6RXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBGcmFt
ZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFja2dyb3VuZE1vZGUoKSBjCiAKIHZvaWQgRnJhbWVW
aWV3Ojp1cGRhdGVUaWxlc0ZvckV4dGVuZGVkQmFja2dyb3VuZE1vZGUoRXh0ZW5kZWRCYWNrZ3Jv
dW5kTW9kZSBtb2RlKQogewotICAgIGlmICghZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRT
aG91bGRFeHRlbmRCZXlvbmRQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFJlbmRlclZp
ZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3
KQogICAgICAgICByZXR1cm47CkBAIC0zMzM1LDYgKzMzMzYsMzAgQEAgSW50UmVjdCBGcmFtZVZp
ZXc6OmV4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpIGNvbnN0CiAgICAgcmV0dXJu
IHNuYXBwZWRJbnRSZWN0KGV4dGVuZGVkUmVjdCk7CiB9CiAKK3ZvaWQgRnJhbWVWaWV3OjpzZXRD
bGlwVG9Eb2N1bWVudChib29sIGNsaXBUb0RvY3VtZW50KQoreworICAgIGlmICghZnJhbWUoKS5p
c01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbGlwVG9Eb2N1bWVu
dCA9PSBjbGlwVG9Eb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGlwVG9Eb2N1
bWVudCA9IGNsaXBUb0RvY3VtZW50OworCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBh
Z2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuZGlkQ2hhbmdlQ2xpcFRvRG9j
dW1lbnQoY2xpcFRvRG9jdW1lbnQpOworCisgICAgdXBkYXRlRXh0ZW5kQmFja2dyb3VuZElmTmVj
ZXNzYXJ5KCk7CisgICAgYWRqdXN0VGlsZWRCYWNraW5nQ292ZXJhZ2UoKTsKKworICAgIFJlbmRl
clZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCk7CisgICAgaWYgKCFyZW5kZXJW
aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJMYXllckNvbXBvc2l0b3ImIGNvbXBv
c2l0b3IgPSByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCk7CisgICAgY29tcG9zaXRvci51cGRhdGVS
b290Q29udGVudExheWVyQ2xpcHBpbmcoKTsKK30KKwogYm9vbCBGcmFtZVZpZXc6OnNob3VsZFVw
ZGF0ZVdoaWxlT2Zmc2NyZWVuKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zaG91bGRVcGRhdGVX
aGlsZU9mZnNjcmVlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCmluZGV4IDI2MzZkNGJhMzFkYjVj
OTA4ODZmOGE5MzJjYTc1OTJhZGY4OTc4ZDQuLmVkZDkzMGJhYWZlNzYwMzMzODFiOGIzNmQ3N2Zj
ZGQzYmM4YjFiOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApAQCAtMjEzLDYgKzIxMyw5IEBA
IHB1YmxpYzoKICAgICBib29sIGhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygp
IGNvbnN0OwogICAgIEludFJlY3QgZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkg
Y29uc3Q7CiAKKyAgICBib29sIGNsaXBUb0RvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGlw
VG9Eb2N1bWVudDsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2xpcFRvRG9jdW1lbnQo
Ym9vbCk7CisKICAgICBib29sIHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKCkgY29uc3Q7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbihib29s
KTsKICAgICBib29sIHNob3VsZFVwZGF0ZSgpIGNvbnN0OwpAQCAtODEwLDYgKzgxMyw4IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG1fbmVlZHNEZWZlcnJlZFNjcm9sbGJhcnNVcGRhdGUgeyBmYWxz
ZSB9OwogCisgICAgYm9vbCBtX2NsaXBUb0RvY3VtZW50IHsgdHJ1ZSB9OworCiAgICAgUmVmUHRy
PENvbnRhaW5lck5vZGU+IG1fbWFpbnRhaW5TY3JvbGxQb3NpdGlvbkFuY2hvcjsKIAogICAgIC8v
IFJlbmRlcmVyIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uY3BwCmluZGV4IDgwNWM2ZTBjY2U1N2Rl
OWRkZjdlOWNlZjIyNmQ4ZTEwMDg4OTFmZDUuLjgzY2ZlOTUzYzc3MzRjMzg2Yjk5N2IzZGE2OTIw
MjlhMTAyNThkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25m
aWd1cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJh
dGlvbi5jcHAKQEAgLTMzNiw2ICszMzYsOSBAQCB2b2lkIFZpZXdwb3J0Q29uZmlndXJhdGlvbjo6
dXBkYXRlQ29uZmlndXJhdGlvbigpCiAKICAgICBpZiAoYm9vbGVhblZpZXdwb3J0QXJndW1lbnRJ
c1NldChtX3ZpZXdwb3J0QXJndW1lbnRzLnNocmlua1RvRml0KSkKICAgICAgICAgbV9jb25maWd1
cmF0aW9uLmFsbG93c1Nocmlua1RvRml0ID0gbV92aWV3cG9ydEFyZ3VtZW50cy5zaHJpbmtUb0Zp
dCAhPSAwLjsKKworICAgIGlmIChib29sZWFuVmlld3BvcnRBcmd1bWVudElzU2V0KG1fdmlld3Bv
cnRBcmd1bWVudHMuY2xpcFRvRG9jdW1lbnQpKQorICAgICAgICBtX2NvbmZpZ3VyYXRpb24uY2xp
cFRvRG9jdW1lbnQgPSBtX3ZpZXdwb3J0QXJndW1lbnRzLmNsaXBUb0RvY3VtZW50ICE9IDAuOwog
fQogCiBkb3VibGUgVmlld3BvcnRDb25maWd1cmF0aW9uOjp2aWV3cG9ydEFyZ3VtZW50c0xlbmd0
aChkb3VibGUgbGVuZ3RoKSBjb25zdApAQCAtNDM5LDYgKzQ0Miw3IEBAIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFZpZXdwb3J0Q29uZmlndXJhdGlvbjo6UGFy
YW1ldGVycyYKICAgICB0cy5kdW1wUHJvcGVydHkoIm1heGltdW1TY2FsZSIsIHBhcmFtZXRlcnMu
bWF4aW11bVNjYWxlKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImFsbG93c1VzZXJTY2FsaW5nIiwg
cGFyYW1ldGVycy5hbGxvd3NVc2VyU2NhbGluZyk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJhbGxv
d3NTaHJpbmtUb0ZpdCIsIHBhcmFtZXRlcnMuYWxsb3dzU2hyaW5rVG9GaXQpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiY2xpcFRvRG9jdW1lbnQiLCBwYXJhbWV0ZXJzLmNsaXBUb0RvY3VtZW50KTsK
IAogICAgIHJldHVybiB0czsKIH0KQEAgLTQ3Miw2ICs0NzYsNyBAQCBDU3RyaW5nIFZpZXdwb3J0
Q29uZmlndXJhdGlvbjo6ZGVzY3JpcHRpb24oKSBjb25zdAogICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y29tcHV0ZWQgbGF5b3V0IHNpemUiLCBsYXlvdXRTaXplKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgiaWdub3JpbmcgaG9yaXpvbnRhbCBzY2FsaW5nIGNvbnN0cmFpbnRzIiwgc2hvdWxkSWdub3Jl
SG9yaXpvbnRhbFNjYWxpbmdDb25zdHJhaW50cygpID8gInRydWUiIDogImZhbHNlIik7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJpZ25vcmluZyB2ZXJ0aWNhbCBzY2FsaW5nIGNvbnN0cmFpbnRzIiwg
c2hvdWxkSWdub3JlVmVydGljYWxTY2FsaW5nQ29uc3RyYWludHMoKSA/ICJ0cnVlIiA6ICJmYWxz
ZSIpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2xpcCB0byBkb2N1bWVudCIsIGNsaXBUb0RvY3Vt
ZW50KCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICAKICAgICB0cy5lbmRHcm91cCgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uaAppbmRleCBiNzJjMGJm
YTlkNjcwNzkxYTI5MTI5YTM1NjU5YzA4YTZjNjQ3NzIxLi43MmFhZGUxMmNkMzMxZjI2M2FhYThj
ZWJlYTU5YjUyMTE1ZmMxZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdw
b3J0Q29uZmlndXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25m
aWd1cmF0aW9uLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtYXhp
bXVtU2NhbGUoMCkKICAgICAgICAgICAgICwgYWxsb3dzVXNlclNjYWxpbmcoZmFsc2UpCiAgICAg
ICAgICAgICAsIGFsbG93c1Nocmlua1RvRml0KGZhbHNlKQorICAgICAgICAgICAgLCBjbGlwVG9E
b2N1bWVudCh0cnVlKQogICAgICAgICAgICAgLCB3aWR0aElzU2V0KGZhbHNlKQogICAgICAgICAg
ICAgLCBoZWlnaHRJc1NldChmYWxzZSkKICAgICAgICAgICAgICwgaW5pdGlhbFNjYWxlSXNTZXQo
ZmFsc2UpCkBAIC02Myw2ICs2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgZG91YmxlIG1heGltdW1T
Y2FsZTsKICAgICAgICAgYm9vbCBhbGxvd3NVc2VyU2NhbGluZzsKICAgICAgICAgYm9vbCBhbGxv
d3NTaHJpbmtUb0ZpdDsKKyAgICAgICAgYm9vbCBjbGlwVG9Eb2N1bWVudDsKIAogICAgICAgICBi
b29sIHdpZHRoSXNTZXQ7CiAgICAgICAgIGJvb2wgaGVpZ2h0SXNTZXQ7CkBAIC05NSw2ICs5Nyw3
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFsbG93c1VzZXJTY2FsaW5nKCkg
Y29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhbGxvd3NVc2VyU2NhbGluZ0lnbm9yaW5n
QWx3YXlzU2NhbGFibGUoKSBjb25zdDsKICAgICBib29sIGFsbG93c1Nocmlua1RvRml0KCkgY29u
c3Q7CisgICAgYm9vbCBjbGlwVG9Eb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJh
dGlvbi5jbGlwVG9Eb2N1bWVudDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhcmFt
ZXRlcnMgd2VicGFnZVBhcmFtZXRlcnMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFy
YW1ldGVycyB0ZXh0RG9jdW1lbnRQYXJhbWV0ZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDJkNjExNjlkNjg5MWNl
NjUyY2U5OTU2OTJiYjcxMzExMzNmOTdhZWQuLmZjNTY3MzFlMTA3ZDU3MzE3N2Y3Yzc4MTg4NTZh
MTI2ZWM3NmVmZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCkBAIC05NTksNiArOTU5LDExIEBAIHN0YXRpYyBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiByZW5kZXJlckZvckNvbXBvc2l0aW5nVGVzdHMoY29uc3QgUmVuZGVyTGF5
ZXImIGxhCiAgICAgcmV0dXJuICpyZW5kZXJlcjsKIH0KIAordm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnVwZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygpCit7CisgICAgbV9yb290Q29u
dGVudExheWVyLT5zZXRNYXNrc1RvQm91bmRzKCFtX3JlbmRlclZpZXcuc2V0dGluZ3MoKS5iYWNr
Z3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpICYmIG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5jbGlwVG9Eb2N1bWVudCgpKTsKK30KKwogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnQg
c2hvdWxkUmVwYWludCwgQmFja2luZ1JlcXVpcmVkIGJhY2tpbmdSZXF1aXJlZCkKIHsKICAgICBi
b29sIGxheWVyQ2hhbmdlZCA9IGZhbHNlOwpAQCAtOTkwLDggKzk5NSw3IEBAIGJvb2wgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgQ29tcG9z
aXRpbmdDaGFuZ2VSCiAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJGb3JIZWFkZXIocGFnZSgp
LmhlYWRlckhlaWdodCgpKTsKICAgICAgICAgICAgICAgICB1cGRhdGVMYXllckZvckZvb3Rlcihw
YWdlKCkuZm9vdGVySGVpZ2h0KCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKG1fcmVu
ZGVyVmlldy5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkpCi0g
ICAgICAgICAgICAgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyhm
YWxzZSk7CisgICAgICAgICAgICAgICAgdXBkYXRlUm9vdENvbnRlbnRMYXllckNsaXBwaW5nKCk7
CiAKICAgICAgICAgICAgICAgICBpZiAoVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSBsYXll
ci5iYWNraW5nKCktPnRpbGVkQmFja2luZygpKQogICAgICAgICAgICAgICAgICAgICB0aWxlZEJh
Y2tpbmctPnNldFRvcENvbnRlbnRJbnNldChtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudG9wQ29u
dGVudEluc2V0KCkpOwpAQCAtMzM0Myw3ICszMzQ3LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmVuc3VyZVJvb3RMYXllcigpCiAjZW5kaWYKIAogICAgICAgICAvLyBOZWVkIHRvIGNs
aXAgdG8gcHJldmVudCB0cmFuc2Zvcm1lZCBjb250ZW50IHNob3dpbmcgb3V0c2lkZSB0aGlzIGZy
YW1lCi0gICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsK
KyAgICAgICAgdXBkYXRlUm9vdENvbnRlbnRMYXllckNsaXBwaW5nKCk7CiAgICAgfQogCiAgICAg
aWYgKHJlcXVpcmVzU2Nyb2xsTGF5ZXIoZXhwZWN0ZWRBdHRhY2htZW50KSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDg3M2Mw
NDQ5ZmQxNWVkNmYzNzJjYTNkNWFhNDE0YzRjOTdkMTUzY2YuLjIwNGVhYTMxMzI5ZDQ3OWU3ZDFi
NzQ1Y2FkOTJlNWUzN2Y4OGZlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTMxMyw2ICszMTMsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRSb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBj
b25zdCBDb2xvciYgcm9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9yb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7IH0KIAorICAgIHZvaWQgdXBkYXRlUm9vdENv
bnRlbnRMYXllckNsaXBwaW5nKCk7CisKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAg
IHZvaWQgdXBkYXRlU2Nyb2xsU25hcFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KGNvbnN0IEZyYW1l
VmlldyYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tCmluZGV4IDExODc3Y2IzMDZiMzllN2QxN2FkNzdhZjdlMmNlMzRiMTZjMGUx
MDUuLmYzODJjYWQ1NjNlYTBkNDA0ZTBlODAyY2ViOWI2Mzc1OTNhNDhjMzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC00MjYwLDYg
KzQyNjAsMTEgQEAgLSAoQk9PTClfaXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAog
ICAgIHJldHVybiBfcGFnZS0+aXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpOwog
fQogCistIChCT09MKV9jb250ZW50TWF5RHJhd0luT2JzY3VyZWRJbnNldHMKK3sKKyAgICByZXR1
cm4gIV9wYWdlLT5jbGlwVG9Eb2N1bWVudCgpOworfQorCiAtIChfV0tMYXlvdXRNb2RlKV9sYXlv
dXRNb2RlCiB7CiAjaWYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAppbmRleCAyODI3NWMzZGZhMGJk
OTNlZjQyMzQzNzA0NDU5OTA2Yzk5NzZkZjYzLi4zNTE2NjczNWM0OTBlZTgwOWQwNTczN2I1YjAx
OTZjNTM1MjhmZTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaApAQCAtMTQzLDYgKzE0Myw4IEBAIHR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpIHsKIC8vIERlZmluZSB0aGUg
aW5zZXQgb2YgdGhlIHNjcm9sbHZpZXcgdW51c2FibGUgYnkgdGhlIHdlYiBwYWdlLgogQHByb3Bl
cnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0T2JzY3VyZWRJbnNldHM6KSBVSUVkZ2VJbnNldHMg
X29ic2N1cmVkSW5zZXRzOwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wg
X2NvbnRlbnRNYXlEcmF3SW5PYnNjdXJlZEluc2V0czsKKwogLy8gT3ZlcnJpZGUgdGhlIGludGVy
ZmFjZSBvcmllbnRhdGlvbi4gQ2xpZW50cyB1c2luZyBfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhV
cGRhdGVzOiBtdXN0IHVwZGF0ZSB0aGUgaW50ZXJmYWNlIG9yaWVudGF0aW9uCiAvLyBpbiB0aGUg
dXBkYXRlIGJsb2NrLgogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0SW50ZXJmYWNl
T3JpZW50YXRpb25PdmVycmlkZTopIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gX2ludGVyZmFjZU9y
aWVudGF0aW9uT3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvUGFnZUNsaWVudEltcGwuaAppbmRleCA4YzU3NzZmMzQyOGY2YmIwZDE5OWFhYWU4ZTAyNjYw
MDcwNGFjZTEwLi5lOTJlNDgyMDIyMjg2NGQ5NzkwY2U3OWQwNTgxZTkyYjA4MTdlMzAzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgK
QEAgLTE0Niw2ICsxNDYsOCBAQCBwcml2YXRlOgogCiAgICAgV2ViQ29yZTo6VXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbiB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgb3ZlcnJpZGUg
eyByZXR1cm4gV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRSOyB9CiAK
KyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb0RvY3VtZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQpIG92
ZXJyaWRlIHsgfQorCiAgICAgLy8gTWVtYmVycyBvZiBQYWdlQ2xpZW50SW1wbCBjbGFzcwogICAg
IEd0a1dpZGdldCogbV92aWV3V2lkZ2V0OwogICAgIERlZmF1bHRVbmRvQ29udHJvbGxlciBtX3Vu
ZG9Db250cm9sbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggYjU2
ZGViZjUzYjE1YjY0NDgwZWM2NDhlN2Y3N2U2OTkxNGMwOTI0Yy4uYTg1NWM1MDc3ZThlZDMwNWQ4
MzJhM2Y2OTMxNzBhMjY4YjEyZDIzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCkBAIC0zODYsNiArMzg2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDb25j
bHVkZUVkaXREYXRhSW50ZXJhY3Rpb24oc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yRGF0YT4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlRGF0YUludGVyYWN0aW9u
Q2FyZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHByZXZpb3VzQ2FyZXRSZWN0LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBjYXJldFJlY3QpID0gMDsKICNlbmRpZgorCisgICAgdmlydHVh
bCB2b2lkIGRpZENoYW5nZUNsaXBUb0RvY3VtZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQpID0gMDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAppbmRleCBhZTc4NmVjYTlhMGJkMjk1OTJhNTVhMWYwYmM4ZThjMjg0YTAz
NTQzLi42NDU1NDNlY2NiMDQ1ZjI3MGUwN2M1M2UwNTMxN2JkNjNmMmY2ZDdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNTQ1Nyw2ICs1NDU3LDggQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUoUmVzZXRTdGF0ZVJlYXNvbiByZXNldFN0YXRl
UmVhc29uKQogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgcmVxdWVzdFBvaW50ZXJVbmxv
Y2soKTsKICNlbmRpZgorCisgICAgbV9jbGlwVG9Eb2N1bWVudCA9IHRydWU7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKCkKQEAgLTY4ODAsNCAr
Njg4MiwxMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcFVSTFNjaGVtZUhhbmRsZXJUYXNrKHVp
bnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdAogICAgIGl0ZXJhdG9yLT52YWx1ZS0+
c3RvcFRhc2soKnRoaXMsIHJlc291cmNlSWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRDbGlwVG9Eb2N1bWVudChib29sIGNsaXBUb0RvY3VtZW50KQoreworICAgIG1fY2xp
cFRvRG9jdW1lbnQgPSBjbGlwVG9Eb2N1bWVudDsKKworICAgIG1fcGFnZUNsaWVudC5kaWRDaGFu
Z2VDbGlwVG9Eb2N1bWVudChjbGlwVG9Eb2N1bWVudCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDA1OGM1OWJm
ODhlMmYyNDA5NzIwYTljZWMzYjE0YjI2MjdiNjBmNWIuLmZhNDYwMWZmZTlmM2Q3ZmY3ODlkZjc2
YWU2MTEzOTdiNTI5ZDEzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgKQEAgLTExOTEsNiArMTE5MSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVSTFNjaGVtZUhh
bmRsZXJGb3JTY2hlbWUoUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+JiYsIGNvbnN0IFN0cmluZyYg
c2NoZW1lKTsKICAgICBXZWJVUkxTY2hlbWVIYW5kbGVyKiB1cmxTY2hlbWVIYW5kbGVyRm9yU2No
ZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKIAorICAgIHZvaWQgc2V0Q2xpcFRvRG9jdW1lbnQo
Ym9vbCk7CisgICAgYm9vbCBjbGlwVG9Eb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFRv
RG9jdW1lbnQ7IH0KKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYsIFdl
YlByb2Nlc3NQcm94eSYsIHVpbnQ2NF90IHBhZ2VJRCwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRp
b24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CkBAIC0xOTc2LDcgKzE5Nzks
OSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBib29sIG1faXNVc2luZ0hpZ2hQZXJmb3JtYW5j
ZVdlYkdMIHsgZmFsc2UgfTsKLSAgICAgICAgCisKKyAgICBib29sIG1fY2xpcFRvRG9jdW1lbnQg
eyB0cnVlIH07CisKICAgICBXZWFrUHRyRmFjdG9yeTxXZWJQYWdlUHJveHk+IG1fd2Vha1B0ckZh
Y3Rvcnk7CiAKICAgICBIYXNoTWFwPFN0cmluZywgUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+PiBt
X3VybFNjaGVtZUhhbmRsZXJzQnlTY2hlbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBmNmM1NGM3MTYyNmJkNWZlMTgxMDNj
NTUyMzFmYjc4MTk0YWY3Yjg2Li4zOGU3MDE5YzI5MjQzNmRkYjA5YmFmZjIzOTBhNTlhNGQ4MmYz
MmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4KQEAgLTQ5NCw0ICs0OTQsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewog
CiAgICAgU3RhcnRVUkxTY2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJZGVudGlmaWVy
LCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0KQogICAgIFN0b3BVUkxTY2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJZGVu
dGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpCisKKyAgICBTZXRDbGlwVG9Eb2N1
bWVudChib29sIGNsaXBUb0RvY3VtZW50KQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCmluZGV4IDUyMWUxZGQ4MWEyM2IyYjI5YWMyMjE4
YzM3YTFhNThhNzZiMjhkYWEuLjQ3YmZhNWI3NDhjYzA5ZDI1ZTQwOGMwZGRjYzYzMmZmYjczYmJh
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBs
SU9TLmgKQEAgLTE5OCw2ICsxOTgsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBoYW5kbGVBY3Rp
dmVOb3dQbGF5aW5nU2Vzc2lvbkluZm9SZXNwb25zZShib29sIGhhc0FjdGl2ZVNlc3Npb24sIGNv
bnN0IFN0cmluZyYgdGl0bGUsIGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIGVsYXBzZWRUaW1lKSBv
dmVycmlkZTsKIAorICAgIHZvaWQgZGlkQ2hhbmdlQ2xpcFRvRG9jdW1lbnQoYm9vbCBjbGlwVG9E
b2N1bWVudCkgb3ZlcnJpZGU7CisKICNpZiBVU0UoUVVJQ0tfTE9PSykKICAgICB2b2lkIHJlcXVl
c3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHN0
ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJikgb3ZlcnJpZGU7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1Mu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmlu
ZGV4IGI5NmNkMmUyNzhmMTU0MGNlNjFkNDk3NTVhZmM5OTFmYTE4YjcyZTAuLjIzNGZhMmI2YjJj
NGQ2OWFiNDgwOGZkNGZhNzE5OWEzYjFhZTI0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtODIxLDYgKzgyMSwxMSBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudChj
b25zdCBTdHJpbmcmIGZpbGVOYW1lLAogfQogI2VuZGlmCiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OmRpZENoYW5nZUNsaXBUb0RvY3VtZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQpCit7CisgICAgW21f
d2ViVmlldyBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQppbmRleCAzOWIwMGFjMmExZjJmZTAx
OTU4MWZiZDlhNWRjZjkzZmFlMGNhNTFlLi4yNjUzZWY1MzU1MjI0OTIxODNhZTMyNzI3MjJmZWEy
ZTNmNzk4NTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3Lm1tCkBAIC0zNjAsNiArMzYwLDcgQEAgLSAodm9pZCl1cGRhdGVGaXhlZENsaXBwaW5nVmll
dzooRmxvYXRSZWN0KWZpeGVkUG9zaXRpb25SZWN0Rm9yVUkKIAogICAgIFtfZml4ZWRDbGlwcGlu
Z1ZpZXcgc2V0Q2VudGVyOmNsaXBwaW5nQm91bmRzLmxvY2F0aW9uKCldOyAvLyBOb3QgcmVhbGx5
IHRoZSBjZW50ZXIgc2luY2Ugd2Ugc2V0IGFuIGFuY2hvciBwb2ludC4KICAgICBbX2ZpeGVkQ2xp
cHBpbmdWaWV3IHNldEJvdW5kczpjbGlwcGluZ0JvdW5kc107CisgICAgW19maXhlZENsaXBwaW5n
VmlldyBsYXllcl0ubWFza3NUb0JvdW5kcyA9IF9wYWdlLT5jbGlwVG9Eb2N1bWVudCgpOwogfQog
CiAtICh2b2lkKV9kaWRFeGl0U3RhYmxlU3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGwuaAppbmRleCAzY2I2Y2E4YWE2ZjNhMTlhZjU4Zjg0NTA3MGNh
M2JmNWVlNDRiZDU5Li5jOTAxZDVmZDFhZTU1ZGJmMDgwMzY2MGYyNDhjNGJmODlkYmVlMDE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCkBAIC0y
NTEsNiArMjUxLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkUmVzdG9yZVNjcm9sbFBvc2l0
aW9uKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCB3aW5kb3dJc0Zyb250V2luZG93VW5kZXJNb3VzZShj
b25zdCBOYXRpdmVXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRpZENoYW5n
ZUNsaXBUb0RvY3VtZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQpIG92ZXJyaWRlIHsgfQogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggMTRjMWU0
NjYxMjYzYjFkMWRlMDkyMDY4YWRjOWQwZGI2ZDA5ZDBiYy4uYzJmZmFlNWM5ODRlNjY0YzE2NzQx
ZjM2NjEwN2NjM2UyN2RhNjEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTIyMiw0
ICsxMjIyLDkgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZEludmFsaWRhdGVEb2N1bWVudE1h
cmtlclJlY3RzKCkKICAgICBtX3BhZ2UuZmluZENvbnRyb2xsZXIoKS5kaWRJbnZhbGlkYXRlRG9j
dW1lbnRNYXJrZXJSZWN0cygpOwogfQogCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkQ2hhbmdl
Q2xpcFRvRG9jdW1lbnQoYm9vbCBjbGlwVG9Eb2N1bWVudCkKK3sKKyAgICBtX3BhZ2Uuc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRDbGlwVG9Eb2N1bWVudChjbGlwVG9Eb2N1bWVudCkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGE1
MTRiMjk5NDg4ODQyYmNmOTI0NTg5MTNiMDM3OWIzZWFmOWViYWUuLmFhYjE2ZWIzYzZmODYwY2Y4
MDFlYWNjYTI3MDdhNDg1Yzg2MjYxOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMzQwLDYg
KzM0MCw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEludmFsaWRhdGVEb2N1bWVudE1hcmtl
clJlY3RzKCkgZmluYWw7CiAKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb0RvY3VtZW50KGJvb2wp
IGZpbmFsOworCiAgICAgU3RyaW5nIG1fY2FjaGVkVG9vbFRpcDsKICAgICBtdXRhYmxlIFJlZlB0
cjxXZWJGcmFtZT4gbV9jYWNoZWRGcmFtZVNldExhcmdlc3RGcmFtZTsKICAgICBtdXRhYmxlIGJv
b2wgbV9jYWNoZWRNYWluRnJhbWVIYXNIb3Jpem9udGFsU2Nyb2xsYmFyIHsgZmFsc2UgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQppbmRleCA2ODA4ZWI0YjY3NTgyYTlkZTg4YjRmZGE3ZGJlNzBjZWZlNTMzN2Y4Li5kMzBiNTU0
NmM1YjdkNmE1ZWZhOTliZGY0ZGY1ZDMzZWEzYmZlZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0zMDQ1LDYgKzMw
NDUsOCBAQCB2b2lkIFdlYlBhZ2U6OnZpZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQoKQogICAg
IHVwZGF0ZVZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIEZyYW1lVmll
dyYgZnJhbWVWaWV3ID0gKm1haW5GcmFtZVZpZXcoKTsKKyAgICBmcmFtZVZpZXcuc2V0Q2xpcFRv
RG9jdW1lbnQobV92aWV3cG9ydENvbmZpZ3VyYXRpb24uY2xpcFRvRG9jdW1lbnQoKSk7CisKICAg
ICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy5zY3JvbGxQb3NpdGlvbigpOwog
ICAgIGlmICghbV9oYXNSZWNlaXZlZFZpc2libGVDb250ZW50UmVjdHNBZnRlckRpZENvbW1pdExv
YWQpIHsKICAgICAgICAgRmxvYXRTaXplIG1pbmltdW1MYXlvdXRTaXplSW5TY3JvbGxWaWV3Q29v
cmRpbmF0ZXMgPSBtX3ZpZXdwb3J0Q29uZmlndXJhdGlvbi5taW5pbXVtTGF5b3V0U2l6ZSgpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDVjNjA5
MWNlYjVkOWY3Y2M3NGMxNTNiMTI1MGZlZDQzOWE2MTlmOGMuLjFlMmM1NmI2YTQwZjA3MmUzMTg1
MTcwMjIzYjZjYWRiOTY3OGI2MzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxNy0wNC0xMiAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIGEgdmlld3BvcnQg
cGFyYW1ldGVyIHRvIGRpc2FibGUgY2xpcHBpbmcgdG8gdGhlIGRvY3VtZW50IHJlY3QKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc2NgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMzE1NjQ2MzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9s
bGVySU9TLm1tOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1cmVk
SW5zZXRzKToKKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5k
aW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQv
VUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlVJ
U2NyaXB0Q29udHJvbGxlcjo6c2V0T2JzY3VyZWRJbnNldHMpOgorICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW06
CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6c2V0T2JzY3VyZWRJbnNldHMpOgor
ICAgICAgICBBZGQgYSBVSVNjcmlwdENvbnRyb2xsZXIgbWVjaGFuaXNtIHRvIGluc3RhbGwgb2Jz
Y3VyZWQgaW5zZXRzCisgICAgICAgIG9uIHRoZSB3ZWIgdmlldy4KKwogMjAxNy0wNC0wNSAgSm9u
YXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgd2Via2l0cHk6IEFk
ZCBwaWQgbG9nZ2luZyBmb3Igc2ltdWxhdG9yIHByb2Nlc3NlcwpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KaW5kZXggNDAzYjU5YjQxZDM1
OTlkNThhMjM2NTk5Mzg4MjNmNjM3MzgyNTcyNi4uYjBlMDRkZDY2YTkxM2Q2NmEwNGI5ZjhkMjhk
Mjc0ODU2NzFjZDZjNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2Ny
aXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3Jp
cHRDb250cm9sbGVySU9TLm1tCkBAIC0zMTYsNiArMzE2LDEwIEBAIHZvaWQgVUlTY3JpcHRDb250
cm9sbGVyOjphZGRWaWV3VG9XaW5kb3coSlNWYWx1ZVJlZikKIHsKIH0KIAordm9pZCBVSVNjcmlw
dENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRv
dWJsZSkKK3sKK30KKwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRD
b250cm9sbGVyLmlkbCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0Jp
bmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKaW5kZXggZjY2YWUxNTIyZjUxNjE3MDdjYzdm
MWY4NGQ0Yzg4MWE5MmRjMmJmMS4uZGJhNDU2ZWJjYjFlM2Y5ODdkODliMjc4NmVlNTNmYmRjOWFl
MmFiYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQv
QmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hh
cmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCkBAIC0y
MzIsNCArMjMyLDYgQEAgaW50ZXJmYWNlIFVJU2NyaXB0Q29udHJvbGxlciB7CiAgICAgdm9pZCBh
ZGRWaWV3VG9XaW5kb3cob2JqZWN0IGNhbGxiYWNrKTsKIAogICAgIHZvaWQgb3ZlcnJpZGVQcmVm
ZXJlbmNlKERPTVN0cmluZyBwcmVmZXJlbmNlLCBET01TdHJpbmcgdmFsdWUpOworCisgICAgdm9p
ZCBzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0
b20sIGRvdWJsZSBsZWZ0KTsKIH07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA2MTJj
OWUyOWYxZGEyNGUyMTg4NDY0MDVjODE0MjBlNmFiZGI4MjNmLi4wZjFmY2MxZDQ5ZjIxNmUzNWM3
MWY4NmZhZjg4NmU4YWE0OTk3NTljIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVk
L1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTM5
OSw2ICszOTksMTAgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFVJU2NyaXB0Q29udHJvbGxl
cjo6YWNjZXNzaWJpbGl0eVNwZWFrU2VsZWN0aW9uQ29udGVudCgKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKGRvdWJs
ZSB0b3AsIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSwgZG91YmxlIGxlZnQpCit7Cit9CisK
ICNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmggYi9Ub29scy9U
ZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAppbmRl
eCA0NmMyOGIxNDAxZGQ0NjQxNzY0NGFhNzY2NzRjYWFjM2IxYmQ0Y2E5Li42NjI3Mzg4N2I5ZTZh
Yjk5MTZiNTlhOTE4OWEyMjFiMTA4NGQ3YTMwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9U
ZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaApAQCAt
MTU2LDYgKzE1Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZVZpZXdGcm9tV2luZG93KEpT
VmFsdWVSZWYpOwogICAgIHZvaWQgYWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYpOwogCisgICAg
dm9pZCBzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBi
b3R0b20sIGRvdWJsZSBsZWZ0KTsKKwogcHJpdmF0ZToKICAgICBVSVNjcmlwdENvbnRyb2xsZXIo
VUlTY3JpcHRDb250ZXh0Jik7CiAgICAgCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1Rlc3RDb250cm9sbGVySU9TLm1tCmluZGV4IDdjMzUxZjgyZjg2N2JkYjdlMmQxMDI5OTNkNmEw
MWZmMzU4YjYwNDIuLmEwZDExMmY1NjMyNjQwYjRmNzJmMWU3MmZhOGY2YmM2YjkwMGUyYjcgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1t
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCkBA
IC04NSw2ICs4NSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVRv
Q29uc2lzdGVudFZhbHVlcygpCiAgICAgICAgIFtzY3JvbGxWaWV3IF9yZW1vdmVBbGxBbmltYXRp
b25zOllFU107CiAgICAgICAgIFtzY3JvbGxWaWV3IHNldFpvb21TY2FsZToxIGFuaW1hdGVkOk5P
XTsKICAgICAgICAgW3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpDR1BvaW50WmVyb107CisK
KyAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBVSUVkZ2VJbnNldHNaZXJvOworICAg
ICAgICB3ZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKS5fb2JzY3VyZWRJbnNldHMgPSBVSUVkZ2VJbnNl
dHNaZXJvOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3Mv
VUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IGNlNjdmNWU1NDM5Zjg3Yzc1ZDljYTY1ZTI0
NjRjZmVmZjZhMzhkZDYuLjU3YTE5NTQ5ZDlkODkzZjJlMmQ4MjQyNjRjMTYwN2YzMGM1ZjJkYmQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxl
cklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xs
ZXJJT1MubW0KQEAgLTY2OCw2ICs2NjgsMTQgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBs
YXRmb3JtQ2xlYXJBbGxDYWxsYmFja3MoKQogICAgIHdlYlZpZXcuZGlkRW5kU2Nyb2xsaW5nQ2Fs
bGJhY2sgPSBuaWw7CiB9CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJlZElu
c2V0cyhkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0
KQoreworICAgIFVJRWRnZUluc2V0cyBpbnNldHMgPSBVSUVkZ2VJbnNldHNNYWtlKHRvcCwgbGVm
dCwgYm90dG9tLCByaWdodCk7CisgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldyA9IFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsK
KyAgICB3ZWJWaWV3LnNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gaW5zZXRzOworICAgIHdlYlZp
ZXcuX29ic2N1cmVkSW5zZXRzID0gaW5zZXRzOworfQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggYjk4OGYxMTE4NDc3Zjc5OGU1MWUyYzRhNmZiNzk0OTdlOTU2OWFhZi4u
MjdjZTliOTk1YWNmOWRkMWZhNGQ1ZGVhOTAyMTljMzBlZjU1NTkxZCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDE3LTA0LTEyICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29t
PgorCisgICAgICAgIFByb3ZpZGUgYSB2aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlw
cGluZyB0byB0aGUgZG9jdW1lbnQgcmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzY2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYz
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRp
bGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQtbm8tZ2V0cy1tYXJnaW4t
dGlsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0aWxlZC1kcmF3aW5nL2lvcy92
aWV3cG9ydC1jbGlwLXRvLWRvY3VtZW50LW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWw6IEFkZGVk
LgorCiAyMDE3LTA0LTA1ICBKYXZpZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtjc3MtYWxpZ25dIEltcGxlbWVudCB0aGUgcGxhY2UtaXRlbXMgc2hvcnRo
YW5kCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1j
bGlwLXRvLWRvY3VtZW50LW5vLWdldHMtbWFyZ2luLXRpbGVzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQtbm8tZ2V0
cy1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3NTBiZDNkYTA3NDMyMjIx
ZDk0MGIxYzAxMzhkYTFkMmY4ODJkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90
aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLWRvY3VtZW50LW5vLWdldHMtbWFyZ2lu
LXRpbGVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIzIEBACisoR3JhcGhpY3NMYXllcgorICAo
YW5jaG9yIDAuMDAgMC4wMCkKKyAgKGJvdW5kcyAzMjAuMDAgNTQ4LjAwKQorICAodmlzaWJsZSBy
ZWN0IDAuMDAsIDAuMDAgMjgwLjAwIHggNTM4LjAwKQorICAoY292ZXJhZ2UgcmVjdCAtNDAuMDAs
IC0xMC4wMCAzMjAuMDAgeCA1NDguMDApCisgIChpbnRlcnNlY3RzIGNvdmVyYWdlIHJlY3QgMSkK
KyAgKGNvbnRlbnRzU2NhbGUgMi4wMCkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXll
cgorICAgICAgKGJvdW5kcyAzMjAuMDAgNTQ4LjAwKQorICAgICAgKGNvbnRlbnRzT3BhcXVlIDEp
CisgICAgICAodmlzaWJsZSByZWN0IDAuMDAsIDAuMDAgMjgwLjAwIHggNTM4LjAwKQorICAgICAg
KGNvdmVyYWdlIHJlY3QgLTQwLjAwLCAtMTAuMDAgNTc2LjAwIHggODA0LjAwKQorICAgICAgKGlu
dGVyc2VjdHMgY292ZXJhZ2UgcmVjdCAxKQorICAgICAgKGNvbnRlbnRzU2NhbGUgMi4wMCkKKyAg
ICAgICh0aWxlIGNhY2hlIGNvdmVyYWdlIC01MTIsIC01MTIgMTM0NCB4IDE1NzIpCisgICAgICAo
dGlsZSBzaXplIDUxMiB4IDU0OCkKKyAgICAgICh0b3AgbGVmdCB0aWxlIC0xLCAtMSB0aWxlcyBn
cmlkIDMgeCAzKQorICAgICAgKGluIHdpbmRvdyAxKQorICAgICkKKyAgKQorKQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLWRvY3Vt
ZW50LW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWwgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5n
L2lvcy92aWV3cG9ydC1jbGlwLXRvLWRvY3VtZW50LW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTUzNDg0ZWU4MGJmMDcyOTYxOTgyOGRlNTc0M2NjYzk2MmRlYzBkMQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNs
aXAtdG8tZG9jdW1lbnQtbm8tZ2V0cy1tYXJnaW4tdGlsZXMuaHRtbApAQCAtMCwwICsxLDQzIEBA
Cis8IURPQ1RZUEUgaHRtbD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VGbGV4aWJsZVZp
ZXdwb3J0PXRydWUgXSAtLT4KKworPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3
cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLCBjbGlwLXRvLWRvY3VtZW50PW5vIj4KKyAg
ICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBnZXRVSVNjcmlwdCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBgCisgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgdWlDb250cm9sbGVyLnNldE9ic2N1cmVkSW5zZXRzKDEwLCAyMCwgMzAsIDQwKTsKKyAg
ICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuaW1tZWRpYXRlU2Nyb2xsVG9PZmZzZXQoLTQwLCAt
MTApOworICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5kb0FmdGVyVmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVy
LnVpU2NyaXB0Q29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgfSko
KTtgCisgICAgICAgIH0KKworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci53
YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBkb1Rlc3QoKQor
ICAgICAgICB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGdldFVJU2NyaXB0
KCksIGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJu
YWxzKSB7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXll
cnMnKS5pbm5lclRleHQgPSBpbnRlcm5hbHMubGF5ZXJUcmVlQXNUZXh0KGRvY3VtZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVERVNfVklTSUJM
RV9SRUNUUyB8IGludGVybmFscy5MQVlFUl9UUkVFX0lOQ0xVREVTX1RJTEVfQ0FDSEVTKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCdsb2FkJywgZG9UZXN0LCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+
CisKKzxib2R5PgorPHByZSBpZD0ibGF5ZXJzIj5MYXllciB0cmVlIGdvZXMgaGVyZTwvcD4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306953</attachid>
            <date>2017-04-12 17:06:39 -0700</date>
            <delta_ts>2017-04-12 17:50:13 -0700</delta_ts>
            <desc>add a second test</desc>
            <filename>bug-170766-20170412170638.patch</filename>
            <type>text/plain</type>
            <size>40562</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjU0N2Y4MWM0MzYxZjRm
YjRhZjBkYjUzNTg5YjMxNjlkMThlZTgxNS4uZDk0OTlhOWMxOWI0Yjc0M2RjZTc5MTRkZWVjMWM2
ZGNiZGJmMGI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE3LTA0LTEyICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2
aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgZG9jdW1lbnQgcmVj
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzY2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogdGlsZWQtZHJhd2luZy9pb3Mvdmll
d3BvcnQtY2xpcC10by1kb2N1bWVudC1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sLAorICAgICAg
ICAgICAgICAgdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1kb2N1bWVudC15ZXMt
Z2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbCwKKworICAgICAgICAqIGRvbS9WaWV3cG9ydEFyZ3Vt
ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6cmVzb2x2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRWaWV3cG9ydEZlYXR1cmUpOgorICAgICAgICAqIGRvbS9W
aWV3cG9ydEFyZ3VtZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6
Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0Q29uZmlndXJhdGlvbjo6dXBkYXRlQ29uZmlndXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6
OlZpZXdwb3J0Q29uZmlndXJhdGlvbjo6ZGVzY3JpcHRpb24pOgorICAgICAgICAqIHBhZ2UvVmll
d3BvcnRDb25maWd1cmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpWaWV3cG9ydENvbmZpZ3Vy
YXRpb246OlBhcmFtZXRlcnM6OlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3Bv
cnRDb25maWd1cmF0aW9uOjpjbGlwVG9Eb2N1bWVudCk6CisgICAgICAgIEFkZCB2aWV3cG9ydCBw
YXJhbWV0ZXIuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBh
Z2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3OjplbmFibGVTcGVjdWxhdGl2ZVRpbGluZ0lmTmVlZGVkKToKKyAg
ICAgICAgSWYgbm90IGNsaXBwaW5nIHRvIHRoZSBkb2N1bWVudCwgZW5hYmxlICJzcGVjdWxhdGl2
ZSIgdGlsaW5nIGltbWVkaWF0ZWx5LAorICAgICAgICBiZWNhdXNlIHRoZSBtYXJnaW4gdGlsZXMg
Y2FuIGJlIHZpc2libGUgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6aGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6dXBkYXRlVGlsZXNGb3JFeHRlbmRlZEJhY2tncm91bmRNb2RlKToKKyAg
ICAgICAgRG9uJ3QgY2hlY2sgdGhlIHNldHRpbmcgaGVyZTsganVzdCByZXNwZWN0IHRoZSBtb2Rl
IHRoYXQgaXMgY29tcHV0ZWQKKyAgICAgICAgYnkgY2FsY3VsYXRlRXh0ZW5kZWRCYWNrZ3JvdW5k
TW9kZS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpjYWxjdWxhdGVFeHRlbmRlZEJh
Y2tncm91bmRNb2RlKToKKyAgICAgICAgSWYgdGhlIHZpZXdwb3J0IHBhcmFtZXRlciB3YXMgc2V0
LCBhZGQgbWFyZ2luIHRpbGVzIG9uIGJvdGggYXhlcy4KKworICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjpzZXRDbGlwVG9Eb2N1bWVudCk6CisgICAgICAgIE5vdGlmeSBDaHJvbWVDbGllbnQg
b2YgdGhlIGNoYW5nZSwgYW5kIHJlLWNvbXB1dGUgdGhlIG1hcmdpbiB0aWxlIG1vZGUuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIEZhY3RvciBvdXQgY29k
ZSB0aGF0IGRlY2lkZXMgd2hldGhlciB0aGUgY29udGVudCBsYXllciBjbGlwcyB0byBib3VuZHMs
CisgICAgICAgIGFuZCBtYWtlIGl0IHRha2UgdGhlIG5ldyB2aWV3cG9ydCBwYXJhbWV0ZXIgaW50
byBhY2NvdW50LgorCiAyMDE3LTA0LTA1ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNv
bT4KIAogICAgICAgICBNYWtlIGluYWN0aXZlIHdlYiBwcm9jZXNzZXMgYmVoYXZlIGFzIHRob3Vn
aCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTAyMzg3MjRhMTI4YjhkZTI5
MmU0YTExMTRlMDc1OWU4OTc0MTNkYi4uMDdhMzBhZTEyNGJjMmMyZGIwOTQ3MTQ2MjgwZTRhODM4
YmJlNzg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTA0LTEyICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2aWV3
cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgZG9jdW1lbnQgcmVjdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzY2Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNldENsaXBUb0RvY3VtZW50KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2xpcFRv
RG9jdW1lbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmRpZENoYW5nZUNsaXBUb0RvY3Vt
ZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1w
bElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZENoYW5nZUNsaXBU
b0RvY3VtZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmg6Cisg
ICAgICAgIEZvcndhcmQgY2xpcC10by1kb2N1bWVudCBjaGFuZ2VzIGZyb20gQ2hyb21lQ2xpZW50
IHRvIFdLV2ViVmlldy4KKyAgICAgICAgVXBkYXRlIHZpc2libGUgY29udGVudCByZWN0cyB3aGVu
IGl0IGNoYW5nZXMsIHdoaWNoIHdpbGwKKyAgICAgICAgcmVzdWx0IGluIGEgY2FsbCB0byB1cGRh
dGVGaXhlZENsaXBwaW5nVmlldywgYXMgYmVsb3cuCisgICAgICAgIEtlZXAgdHJhY2sgb2YgdGhl
IGN1cnJlbnQgc3RhdGUgaW4gdGhlIFVJIHByb2Nlc3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50TWF5RHJhd0lu
T2JzY3VyZWRJbnNldHNdKToKKyAgICAgICAgRXhwb3NlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRo
ZSBjbGlwLXRvLWRvY3VtZW50IGJpdCBhcyBTUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXcubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgdXBkYXRlRml4ZWRD
bGlwcGluZ1ZpZXc6XSk6CisgICAgICAgIERpc2FibGUgZml4ZWQgY2xpcHBpbmcgd2hlbiBjbGlw
LXRvLWRvY3VtZW50IGlzIGRpc2FibGVkLgorICAgICAgICAKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnZp
ZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQpOgorICAgICAgICBQdXNoIHRoZSB2aWV3cG9ydCdz
IGNsaXAtdG8tZG9jdW1lbnQgYml0IG9udG8gdGhlIG1haW4gZnJhbWUncyBGcmFtZVZpZXcuCisK
IDIwMTctMDQtMDUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAg
IFJlZmFjdG9yIHNvIFdlYnNpdGVEYXRhU3RvcmVzIGFsd2F5cyBoYXZlIGEgU3RvcmFnZU1hbmFn
ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcAppbmRleCAxZTY5Yjky
NmRiMWJkNjcxMzBiYWNlZTUxMzUzNDIyMjRkM2IzODBkLi5jN2YzY2UxNzk0M2MxNWQ2NjAyYjBl
MzU4YzRiOTk3OWVhNWNlZDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3Bv
cnRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50
cy5jcHAKQEAgLTI0Niw2ICsyNDYsNyBAQCBWaWV3cG9ydEF0dHJpYnV0ZXMgVmlld3BvcnRBcmd1
bWVudHM6OnJlc29sdmUoY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmlld3BvcnRTaQogICAgIHJl
c3VsdC51c2VyU2NhbGFibGUgPSB1c2VyWm9vbTsKICAgICByZXN1bHQub3JpZW50YXRpb24gPSBv
cmllbnRhdGlvbjsKICAgICByZXN1bHQuc2hyaW5rVG9GaXQgPSBzaHJpbmtUb0ZpdDsKKyAgICBy
ZXN1bHQuY2xpcFRvRG9jdW1lbnQgPSBjbGlwVG9Eb2N1bWVudDsKIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CkBAIC0zNjMsMjIgKzM2NCwyMSBAQCBzdGF0aWMgZmxvYXQgZmluZFNjYWxlVmFsdWUo
RG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZQogICAg
IHJldHVybiBudW1lcmljVmFsdWU7CiB9CiAKLS8vIEZJWE1FOiBJdCdzIGtpbmQgb2YgYml6YXJy
ZSB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIG9mIDEgYW5kIDAgdG8gcmVwcmVzZW50IHRy
dWUgYW5kIGZhbHNlLgotc3RhdGljIGZsb2F0IGZpbmRCb29sZWFuVmFsdWUoRG9jdW1lbnQmIGRv
Y3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZSkKK3N0YXRpYyBib29sIGZp
bmRCb29sZWFuVmFsdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5n
VmlldyB2YWx1ZSkKIHsKICAgICAvLyB5ZXMgYW5kIG5vIGFyZSB1c2VkIGFzIGtleXdvcmRzLgog
ICAgIC8vIE51bWJlcnMgPj0gMSwgbnVtYmVycyA8PSAtMSwgZGV2aWNlLXdpZHRoIGFuZCBkZXZp
Y2UtaGVpZ2h0IGFyZSBtYXBwZWQgdG8geWVzLgogICAgIC8vIE51bWJlcnMgaW4gdGhlIHJhbmdl
IDwtMSwgMT4sIGFuZCB1bmtub3duIHZhbHVlcywgYXJlIG1hcHBlZCB0byBuby4KIAogICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgInllcyIpKQotICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHZhbHVlLCAibm8iKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUs
ICJkZXZpY2Utd2lkdGgiKSkKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImRldmljZS1o
ZWlnaHQiKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIHN0ZDo6YWJzKG51bWVyaWNQ
cmVmaXgoZG9jdW1lbnQsIGtleSwgdmFsdWUpKSA+PSAxID8gMSA6IDA7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBzdGQ6OmFicyhudW1lcmljUHJlZml4KGRvY3VtZW50LCBrZXks
IHZhbHVlKSkgPj0gMTsKIH0KIAogdm9pZCBzZXRWaWV3cG9ydEZlYXR1cmUoVmlld3BvcnRBcmd1
bWVudHMmIGFyZ3VtZW50cywgRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3Ry
aW5nVmlldyB2YWx1ZSkKQEAgLTQwMyw2ICs0MDMsOCBAQCB2b2lkIHNldFZpZXdwb3J0RmVhdHVy
ZShWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzLCBEb2N1bWVudCYgZG9jdW1lbnQsIFN0cmlu
ZwogI2VuZGlmCiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5
LCAic2hyaW5rLXRvLWZpdCIpKQogICAgICAgICBhcmd1bWVudHMuc2hyaW5rVG9GaXQgPSBmaW5k
Qm9vbGVhblZhbHVlKGRvY3VtZW50LCBrZXksIHZhbHVlKTsKKyAgICBlbHNlIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJjbGlwLXRvLWRvY3VtZW50IikpCisgICAgICAg
IGFyZ3VtZW50cy5jbGlwVG9Eb2N1bWVudCA9IGZpbmRCb29sZWFuVmFsdWUoZG9jdW1lbnQsIGtl
eSwgdmFsdWUpOwogICAgIGVsc2UKICAgICAgICAgcmVwb3J0Vmlld3BvcnRXYXJuaW5nKGRvY3Vt
ZW50LCBVbnJlY29nbml6ZWRWaWV3cG9ydEFyZ3VtZW50S2V5RXJyb3IsIGtleSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oCmluZGV4IDRlNjkwN2Y1ODlkYjcyNmRiYThh
YzA5ZjgxZDg3OTU3ZTc2Zjg4MmIuLjM4N2JhOGVmMzc3Y2YwNmYyZTAwNjhmYjcwN2RkOWRjZGYy
OTczMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oCkBAIC01MSw2ICs1
MSw3IEBAIHN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXMgewogICAgIGZsb2F0IHVzZXJTY2FsYWJs
ZTsKICAgICBmbG9hdCBvcmllbnRhdGlvbjsKICAgICBmbG9hdCBzaHJpbmtUb0ZpdDsKKyAgICBi
b29sIGNsaXBUb0RvY3VtZW50OwogfTsKIAogc3RydWN0IFZpZXdwb3J0QXJndW1lbnRzIHsKQEAg
LTk0LDYgKzk1LDcgQEAgc3RydWN0IFZpZXdwb3J0QXJndW1lbnRzIHsKICAgICBmbG9hdCB1c2Vy
Wm9vbSB7IFZhbHVlQXV0byB9OwogICAgIGZsb2F0IG9yaWVudGF0aW9uIHsgVmFsdWVBdXRvIH07
CiAgICAgZmxvYXQgc2hyaW5rVG9GaXQgeyBWYWx1ZUF1dG8gfTsKKyAgICBib29sIGNsaXBUb0Rv
Y3VtZW50IHsgdHJ1ZSB9OwogICAgIGJvb2wgd2lkdGhXYXNFeHBsaWNpdCB7IGZhbHNlIH07CiAK
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmlld3BvcnRBcmd1bWVudHMmIG90aGVyKSBjb25z
dApAQCAtMTEyLDYgKzExNCw3IEBAIHN0cnVjdCBWaWV3cG9ydEFyZ3VtZW50cyB7CiAgICAgICAg
ICAgICAmJiB1c2VyWm9vbSA9PSBvdGhlci51c2VyWm9vbQogICAgICAgICAgICAgJiYgb3JpZW50
YXRpb24gPT0gb3RoZXIub3JpZW50YXRpb24KICAgICAgICAgICAgICYmIHNocmlua1RvRml0ID09
IG90aGVyLnNocmlua1RvRml0CisgICAgICAgICAgICAmJiBjbGlwVG9Eb2N1bWVudCA9PSBvdGhl
ci5jbGlwVG9Eb2N1bWVudAogICAgICAgICAgICAgJiYgd2lkdGhXYXNFeHBsaWNpdCA9PSBvdGhl
ci53aWR0aFdhc0V4cGxpY2l0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgK
aW5kZXggYjA4MGE5NTg5NTllNDU2NWNmMDJjN2Y0MDgwN2Y4YzQ0MDJmMDFmNy4uNzA1YzVhYTE0
NmU0YjE4NzhkOGE0NTVkM2U0YWViNDk4MTM4MDI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCkBAIC00NjYsNiArNDY2LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJl
cG9ydFByb2Nlc3NDUFVUaW1lKGludDY0X3QsIEFjdGl2aXR5U3RhdGVGb3JDUFVTYW1wbGluZykg
eyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ2xpcFRvRG9jdW1lbnQoYm9vbCkgeyB9
CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5DaHJvbWVDbGllbnQoKSB7IH0KIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYTc0ODc5NDY1OGJmNzU5ZDc0ZDUyYjIyZGRjMGU2
MWI2YmNkOGNlOS4uZTg0OWExMzdhOTk0ZDYxMjdlYTAzZDYxNjc2MzBiM2FhZmNiODg1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMjkyOSw2ICsyOTI5LDEwIEBAIHZvaWQgRnJh
bWVWaWV3OjplbmFibGVTcGVjdWxhdGl2ZVRpbGluZ0lmTmVlZGVkKCkKICAgICAgICAgbV9zcGVj
dWxhdGl2ZVRpbGluZ0VuYWJsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IGlmICghbV9jbGlwVG9Eb2N1bWVudCkgeworICAgICAgICBtX3NwZWN1bGF0aXZlVGlsaW5nRW5h
YmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKCFzaG91bGRFbmFi
bGVTcGVjdWxhdGl2ZVRpbGluZ0R1cmluZ0xvYWRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKG1fc3BlY3VsYXRpdmVUaWxpbmdFbmFibGVUaW1lci5pc0FjdGl2ZSgpKQpAQCAt
MzIyNSw5ICszMjI5LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUJhY2tncm91bmRSZWN1cnNp
dmVseShjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBib29sIHQKIAogYm9vbCBGcmFtZVZp
ZXc6Omhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpIGNvbnN0CiB7Ci0gICAg
aWYgKCFmcmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2Uo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tp
bmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKTsKICAgICBpZiAoIXRpbGVkQmFja2luZykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI0NiwxMSArMzI0Nyw4IEBAIHZvaWQgRnJhbWVWaWV3Ojp1
cGRhdGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKQogCiBGcmFtZVZpZXc6OkV4dGVuZGVk
QmFja2dyb3VuZE1vZGUgRnJhbWVWaWV3OjpjYWxjdWxhdGVFeHRlbmRlZEJhY2tncm91bmRNb2Rl
KCkgY29uc3QKIHsKLSAgICAvLyBKdXN0IGJlY2F1c2UgU2V0dGluZ3M6OmJhY2tncm91bmRTaG91
bGRFeHRlbmRCZXlvbmRQYWdlKCkgaXMgdHJ1ZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuCi0g
ICAgLy8gdGhhdCB0aGUgYmFja2dyb3VuZCByZWN0IG5lZWRzIHRvIGJlIGV4dGVuZGVkIGZvciBw
YWludGluZy4gU2ltcGxlIGJhY2tncm91bmRzIGNhbiBiZSBleHRlbmRlZAotICAgIC8vIGp1c3Qg
d2l0aCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldFJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xv
cigpLiBNb3JlIGNvbXBsaWNhdGVkIGJhY2tncm91bmRzLAotICAgIC8vIHN1Y2ggYXMgaW1hZ2Vz
LCByZXF1aXJlIGV4dGVuZGluZyB0aGUgYmFja2dyb3VuZCByZWN0IHRvIGNvbnRpbnVlIHBhaW50
aW5nIGludG8gdGhlIGV4dGVuZGVkCi0gICAgLy8gcmVnaW9uLiBUaGlzIGZ1bmN0aW9uIGZpbmRz
IG91dCBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gZXh0ZW5kIHRoZSBiYWNrZ3JvdW5kIHJlY3QgZm9y
IHBhaW50aW5nLgorICAgIGlmICghbV9jbGlwVG9Eb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIEV4
dGVuZGVkQmFja2dyb3VuZE1vZGVBbGw7CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzE2MjAxMzczPgpAQCAtMzI1OSw2ICszMjU3LDEyIEBAIEZyYW1lVmlldzo6
RXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFja2dy
b3VuZE1vZGUoKSBjCiAgICAgaWYgKCFmcmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3Vs
ZEV4dGVuZEJleW9uZFBhZ2UoKSkKICAgICAgICAgcmV0dXJuIEV4dGVuZGVkQmFja2dyb3VuZE1v
ZGVOb25lOwogCisgICAgLy8gSnVzdCBiZWNhdXNlIFNldHRpbmdzOjpiYWNrZ3JvdW5kU2hvdWxk
RXh0ZW5kQmV5b25kUGFnZSgpIGlzIHRydWUgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbgorICAg
IC8vIHRoYXQgdGhlIGJhY2tncm91bmQgcmVjdCBuZWVkcyB0byBiZSBleHRlbmRlZCBmb3IgcGFp
bnRpbmcuIFNpbXBsZSBiYWNrZ3JvdW5kcyBjYW4gYmUgZXh0ZW5kZWQKKyAgICAvLyBqdXN0IHdp
dGggUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRSb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3Io
KS4gTW9yZSBjb21wbGljYXRlZCBiYWNrZ3JvdW5kcywKKyAgICAvLyBzdWNoIGFzIGltYWdlcywg
cmVxdWlyZSBleHRlbmRpbmcgdGhlIGJhY2tncm91bmQgcmVjdCB0byBjb250aW51ZSBwYWludGlu
ZyBpbnRvIHRoZSBleHRlbmRlZAorICAgIC8vIHJlZ2lvbi4gVGhpcyBmdW5jdGlvbiBmaW5kcyBv
dXQgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGV4dGVuZCB0aGUgYmFja2dyb3VuZCByZWN0IGZvciBw
YWludGluZy4KKwogICAgIGlmICghZnJhbWUoKS5pc01haW5GcmFtZSgpKQogICAgICAgICByZXR1
cm4gRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZU5vbmU7CiAKQEAgLTMyODgsOSArMzI5Miw2IEBAIEZy
YW1lVmlldzo6RXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVu
ZGVkQmFja2dyb3VuZE1vZGUoKSBjCiAKIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVUaWxlc0ZvckV4
dGVuZGVkQmFja2dyb3VuZE1vZGUoRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBtb2RlKQogewotICAg
IGlmICghZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdl
KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlz
LT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm47CkBA
IC0zMzM1LDYgKzMzMzYsMzAgQEAgSW50UmVjdCBGcmFtZVZpZXc6OmV4dGVuZGVkQmFja2dyb3Vu
ZFJlY3RGb3JQYWludGluZygpIGNvbnN0CiAgICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0KGV4dGVu
ZGVkUmVjdCk7CiB9CiAKK3ZvaWQgRnJhbWVWaWV3OjpzZXRDbGlwVG9Eb2N1bWVudChib29sIGNs
aXBUb0RvY3VtZW50KQoreworICAgIGlmICghZnJhbWUoKS5pc01haW5GcmFtZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9jbGlwVG9Eb2N1bWVudCA9PSBjbGlwVG9Eb2N1bWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGlwVG9Eb2N1bWVudCA9IGNsaXBUb0RvY3VtZW50
OworCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+
Y2hyb21lKCkuY2xpZW50KCkuZGlkQ2hhbmdlQ2xpcFRvRG9jdW1lbnQoY2xpcFRvRG9jdW1lbnQp
OworCisgICAgdXBkYXRlRXh0ZW5kQmFja2dyb3VuZElmTmVjZXNzYXJ5KCk7CisgICAgYWRqdXN0
VGlsZWRCYWNraW5nQ292ZXJhZ2UoKTsKKworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0
aGlzLT5yZW5kZXJWaWV3KCk7CisgICAgaWYgKCFyZW5kZXJWaWV3KQorICAgICAgICByZXR1cm47
CisKKyAgICBSZW5kZXJMYXllckNvbXBvc2l0b3ImIGNvbXBvc2l0b3IgPSByZW5kZXJWaWV3LT5j
b21wb3NpdG9yKCk7CisgICAgY29tcG9zaXRvci51cGRhdGVSb290Q29udGVudExheWVyQ2xpcHBp
bmcoKTsKK30KKwogYm9vbCBGcmFtZVZpZXc6OnNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9zaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCmluZGV4IDI2MzZkNGJhMzFkYjVjOTA4ODZmOGE5MzJjYTc1OTJhZGY4
OTc4ZDQuLmVkZDkzMGJhYWZlNzYwMzMzODFiOGIzNmQ3N2ZjZGQzYmM4YjFiOTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuaApAQCAtMjEzLDYgKzIxMyw5IEBAIHB1YmxpYzoKICAgICBib29sIGhh
c0V4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpIGNvbnN0OwogICAgIEludFJlY3Qg
ZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3Q7CiAKKyAgICBib29sIGNs
aXBUb0RvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwVG9Eb2N1bWVudDsgfQorICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2xpcFRvRG9jdW1lbnQoYm9vbCk7CisKICAgICBib29sIHNo
b3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbihib29sKTsKICAgICBib29sIHNob3VsZFVw
ZGF0ZSgpIGNvbnN0OwpAQCAtODEwLDYgKzgxMyw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1f
bmVlZHNEZWZlcnJlZFNjcm9sbGJhcnNVcGRhdGUgeyBmYWxzZSB9OwogCisgICAgYm9vbCBtX2Ns
aXBUb0RvY3VtZW50IHsgdHJ1ZSB9OworCiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fbWFp
bnRhaW5TY3JvbGxQb3NpdGlvbkFuY2hvcjsKIAogICAgIC8vIFJlbmRlcmVyIHRvIGhvbGQgb3Vy
IGN1c3RvbSBzY3JvbGwgY29ybmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9W
aWV3cG9ydENvbmZpZ3VyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENv
bmZpZ3VyYXRpb24uY3BwCmluZGV4IDgwNWM2ZTBjY2U1N2RlOWRkZjdlOWNlZjIyNmQ4ZTEwMDg4
OTFmZDUuLjgzY2ZlOTUzYzc3MzRjMzg2Yjk5N2IzZGE2OTIwMjlhMTAyNThkMjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHAKQEAgLTMzNiw2ICsz
MzYsOSBAQCB2b2lkIFZpZXdwb3J0Q29uZmlndXJhdGlvbjo6dXBkYXRlQ29uZmlndXJhdGlvbigp
CiAKICAgICBpZiAoYm9vbGVhblZpZXdwb3J0QXJndW1lbnRJc1NldChtX3ZpZXdwb3J0QXJndW1l
bnRzLnNocmlua1RvRml0KSkKICAgICAgICAgbV9jb25maWd1cmF0aW9uLmFsbG93c1Nocmlua1Rv
Rml0ID0gbV92aWV3cG9ydEFyZ3VtZW50cy5zaHJpbmtUb0ZpdCAhPSAwLjsKKworICAgIGlmIChi
b29sZWFuVmlld3BvcnRBcmd1bWVudElzU2V0KG1fdmlld3BvcnRBcmd1bWVudHMuY2xpcFRvRG9j
dW1lbnQpKQorICAgICAgICBtX2NvbmZpZ3VyYXRpb24uY2xpcFRvRG9jdW1lbnQgPSBtX3ZpZXdw
b3J0QXJndW1lbnRzLmNsaXBUb0RvY3VtZW50ICE9IDAuOwogfQogCiBkb3VibGUgVmlld3BvcnRD
b25maWd1cmF0aW9uOjp2aWV3cG9ydEFyZ3VtZW50c0xlbmd0aChkb3VibGUgbGVuZ3RoKSBjb25z
dApAQCAtNDM5LDYgKzQ0Miw3IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFZpZXdwb3J0Q29uZmlndXJhdGlvbjo6UGFyYW1ldGVycyYKICAgICB0cy5kdW1w
UHJvcGVydHkoIm1heGltdW1TY2FsZSIsIHBhcmFtZXRlcnMubWF4aW11bVNjYWxlKTsKICAgICB0
cy5kdW1wUHJvcGVydHkoImFsbG93c1VzZXJTY2FsaW5nIiwgcGFyYW1ldGVycy5hbGxvd3NVc2Vy
U2NhbGluZyk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJhbGxvd3NTaHJpbmtUb0ZpdCIsIHBhcmFt
ZXRlcnMuYWxsb3dzU2hyaW5rVG9GaXQpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2xpcFRvRG9j
dW1lbnQiLCBwYXJhbWV0ZXJzLmNsaXBUb0RvY3VtZW50KTsKIAogICAgIHJldHVybiB0czsKIH0K
QEAgLTQ3Miw2ICs0NzYsNyBAQCBDU3RyaW5nIFZpZXdwb3J0Q29uZmlndXJhdGlvbjo6ZGVzY3Jp
cHRpb24oKSBjb25zdAogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcHV0ZWQgbGF5b3V0IHNpemUi
LCBsYXlvdXRTaXplKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaWdub3JpbmcgaG9yaXpvbnRh
bCBzY2FsaW5nIGNvbnN0cmFpbnRzIiwgc2hvdWxkSWdub3JlSG9yaXpvbnRhbFNjYWxpbmdDb25z
dHJhaW50cygpID8gInRydWUiIDogImZhbHNlIik7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpZ25v
cmluZyB2ZXJ0aWNhbCBzY2FsaW5nIGNvbnN0cmFpbnRzIiwgc2hvdWxkSWdub3JlVmVydGljYWxT
Y2FsaW5nQ29uc3RyYWludHMoKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiY2xpcCB0byBkb2N1bWVudCIsIGNsaXBUb0RvY3VtZW50KCkgPyAidHJ1ZSIgOiAiZmFs
c2UiKTsKICAgICAKICAgICB0cy5lbmRHcm91cCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9W
aWV3cG9ydENvbmZpZ3VyYXRpb24uaAppbmRleCBiNzJjMGJmYTlkNjcwNzkxYTI5MTI5YTM1NjU5
YzA4YTZjNjQ3NzIxLi43MmFhZGUxMmNkMzMxZjI2M2FhYThjZWJlYTU5YjUyMTE1ZmMxZTFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmgKQEAgLTUwLDYg
KzUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtYXhpbXVtU2NhbGUoMCkKICAgICAgICAg
ICAgICwgYWxsb3dzVXNlclNjYWxpbmcoZmFsc2UpCiAgICAgICAgICAgICAsIGFsbG93c1Nocmlu
a1RvRml0KGZhbHNlKQorICAgICAgICAgICAgLCBjbGlwVG9Eb2N1bWVudCh0cnVlKQogICAgICAg
ICAgICAgLCB3aWR0aElzU2V0KGZhbHNlKQogICAgICAgICAgICAgLCBoZWlnaHRJc1NldChmYWxz
ZSkKICAgICAgICAgICAgICwgaW5pdGlhbFNjYWxlSXNTZXQoZmFsc2UpCkBAIC02Myw2ICs2NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgZG91YmxlIG1heGltdW1TY2FsZTsKICAgICAgICAgYm9vbCBh
bGxvd3NVc2VyU2NhbGluZzsKICAgICAgICAgYm9vbCBhbGxvd3NTaHJpbmtUb0ZpdDsKKyAgICAg
ICAgYm9vbCBjbGlwVG9Eb2N1bWVudDsKIAogICAgICAgICBib29sIHdpZHRoSXNTZXQ7CiAgICAg
ICAgIGJvb2wgaGVpZ2h0SXNTZXQ7CkBAIC05NSw2ICs5Nyw3IEBAIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGFsbG93c1VzZXJTY2FsaW5nKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCBhbGxvd3NVc2VyU2NhbGluZ0lnbm9yaW5nQWx3YXlzU2NhbGFibGUoKSBjb25z
dDsKICAgICBib29sIGFsbG93c1Nocmlua1RvRml0KCkgY29uc3Q7CisgICAgYm9vbCBjbGlwVG9E
b2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5jbGlwVG9Eb2N1bWVudDsg
fQogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhcmFtZXRlcnMgd2VicGFnZVBhcmFtZXRl
cnMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFyYW1ldGVycyB0ZXh0RG9jdW1lbnRQ
YXJhbWV0ZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCmluZGV4IDJkNjExNjlkNjg5MWNlNjUyY2U5OTU2OTJiYjcxMzExMzNm
OTdhZWQuLmZjNTY3MzFlMTA3ZDU3MzE3N2Y3Yzc4MTg4NTZhMTI2ZWM3NmVmZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBA
IC05NTksNiArOTU5LDExIEBAIHN0YXRpYyBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJl
ckZvckNvbXBvc2l0aW5nVGVzdHMoY29uc3QgUmVuZGVyTGF5ZXImIGxhCiAgICAgcmV0dXJuICpy
ZW5kZXJlcjsKIH0KIAordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVJvb3RDb250
ZW50TGF5ZXJDbGlwcGluZygpCit7CisgICAgbV9yb290Q29udGVudExheWVyLT5zZXRNYXNrc1Rv
Qm91bmRzKCFtX3JlbmRlclZpZXcuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5
b25kUGFnZSgpICYmIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5jbGlwVG9Eb2N1bWVudCgpKTsK
K30KKwogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5
ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnQgc2hvdWxkUmVwYWludCwgQmFja2lu
Z1JlcXVpcmVkIGJhY2tpbmdSZXF1aXJlZCkKIHsKICAgICBib29sIGxheWVyQ2hhbmdlZCA9IGZh
bHNlOwpAQCAtOTkwLDggKzk5NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRh
dGVCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgQ29tcG9zaXRpbmdDaGFuZ2VSCiAgICAgICAg
ICAgICAgICAgdXBkYXRlTGF5ZXJGb3JIZWFkZXIocGFnZSgpLmhlYWRlckhlaWdodCgpKTsKICAg
ICAgICAgICAgICAgICB1cGRhdGVMYXllckZvckZvb3RlcihwYWdlKCkuZm9vdGVySGVpZ2h0KCkp
OwogI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKG1fcmVuZGVyVmlldy5zZXR0aW5ncygpLmJh
Y2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1f
cm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgICAgICAgICAg
ICAgdXBkYXRlUm9vdENvbnRlbnRMYXllckNsaXBwaW5nKCk7CiAKICAgICAgICAgICAgICAgICBp
ZiAoVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSBsYXllci5iYWNraW5nKCktPnRpbGVkQmFj
a2luZygpKQogICAgICAgICAgICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNldFRvcENvbnRlbnRJ
bnNldChtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudG9wQ29udGVudEluc2V0KCkpOwpAQCAtMzM0
Myw3ICszMzQ3LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXll
cigpCiAjZW5kaWYKIAogICAgICAgICAvLyBOZWVkIHRvIGNsaXAgdG8gcHJldmVudCB0cmFuc2Zv
cm1lZCBjb250ZW50IHNob3dpbmcgb3V0c2lkZSB0aGlzIGZyYW1lCi0gICAgICAgIG1fcm9vdENv
bnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICAgICAgdXBkYXRlUm9vdENv
bnRlbnRMYXllckNsaXBwaW5nKCk7CiAgICAgfQogCiAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsTGF5
ZXIoZXhwZWN0ZWRBdHRhY2htZW50KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDg3M2MwNDQ5ZmQxNWVkNmYzNzJjYTNkNWFh
NDE0YzRjOTdkMTUzY2YuLjIwNGVhYTMxMzI5ZDQ3OWU3ZDFiNzQ1Y2FkOTJlNWUzN2Y4OGZlNjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgKQEAgLTMxMyw2ICszMTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSb290RXh0ZW5kZWRC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBjb25zdCBDb2xvciYgcm9vdEV4dGVu
ZGVkQmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9yb290RXh0ZW5kZWRCYWNrZ3Jv
dW5kQ29sb3I7IH0KIAorICAgIHZvaWQgdXBkYXRlUm9vdENvbnRlbnRMYXllckNsaXBwaW5nKCk7
CisKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25h
cFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KGNvbnN0IEZyYW1lVmlldyYpOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDEx
ODc3Y2IzMDZiMzllN2QxN2FkNzdhZjdlMmNlMzRiMTZjMGUxMDUuLmYzODJjYWQ1NjNlYTBkNDA0
ZTBlODAyY2ViOWI2Mzc1OTNhNDhjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC00MjYwLDYgKzQyNjAsMTEgQEAgLSAoQk9PTClf
aXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAogICAgIHJldHVybiBfcGFnZS0+aXNT
aG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpOwogfQogCistIChCT09MKV9jb250ZW50
TWF5RHJhd0luT2JzY3VyZWRJbnNldHMKK3sKKyAgICByZXR1cm4gIV9wYWdlLT5jbGlwVG9Eb2N1
bWVudCgpOworfQorCiAtIChfV0tMYXlvdXRNb2RlKV9sYXlvdXRNb2RlCiB7CiAjaWYgUExBVEZP
Uk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlld1ByaXZhdGUuaAppbmRleCAyODI3NWMzZGZhMGJkOTNlZjQyMzQzNzA0NDU5OTA2Yzk5
NzZkZjYzLi4zNTE2NjczNWM0OTBlZTgwOWQwNTczN2I1YjAxOTZjNTM1MjhmZTQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZh
dGUuaApAQCAtMTQzLDYgKzE0Myw4IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0lt
bWVkaWF0ZUFjdGlvblR5cGUpIHsKIC8vIERlZmluZSB0aGUgaW5zZXQgb2YgdGhlIHNjcm9sbHZp
ZXcgdW51c2FibGUgYnkgdGhlIHdlYiBwYWdlLgogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRl
cj1fc2V0T2JzY3VyZWRJbnNldHM6KSBVSUVkZ2VJbnNldHMgX29ic2N1cmVkSW5zZXRzOwogCitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2NvbnRlbnRNYXlEcmF3SW5PYnNj
dXJlZEluc2V0czsKKwogLy8gT3ZlcnJpZGUgdGhlIGludGVyZmFjZSBvcmllbnRhdGlvbi4gQ2xp
ZW50cyB1c2luZyBfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVzOiBtdXN0IHVwZGF0ZSB0
aGUgaW50ZXJmYWNlIG9yaWVudGF0aW9uCiAvLyBpbiB0aGUgdXBkYXRlIGJsb2NrLgogQHByb3Bl
cnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0SW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTop
IFVJSW50ZXJmYWNlT3JpZW50YXRpb24gX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1w
bC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaApp
bmRleCA4YzU3NzZmMzQyOGY2YmIwZDE5OWFhYWU4ZTAyNjYwMDcwNGFjZTEwLi5lOTJlNDgyMDIy
Mjg2NGQ5NzkwY2U3OWQwNTgxZTkyYjA4MTdlMzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTE0Niw2ICsxNDYsOCBAQCBw
cml2YXRlOgogCiAgICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gV2ViQ29yZTo6VXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRSOyB9CiAKKyAgICB2b2lkIGRpZENoYW5nZUNs
aXBUb0RvY3VtZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQpIG92ZXJyaWRlIHsgfQorCiAgICAgLy8g
TWVtYmVycyBvZiBQYWdlQ2xpZW50SW1wbCBjbGFzcwogICAgIEd0a1dpZGdldCogbV92aWV3V2lk
Z2V0OwogICAgIERlZmF1bHRVbmRvQ29udHJvbGxlciBtX3VuZG9Db250cm9sbGVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggYjU2ZGViZjUzYjE1YjY0NDgwZWM2NDhl
N2Y3N2U2OTkxNGMwOTI0Yy4uYTg1NWM1MDc3ZThlZDMwNWQ4MzJhM2Y2OTMxNzBhMjY4YjEyZDIz
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC0zODYsNiArMzg2LDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDb25jbHVkZUVkaXREYXRhSW50ZXJhY3Rp
b24oc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YT4pID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlRGF0YUludGVyYWN0aW9uQ2FyZXRSZWN0KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHByZXZpb3VzQ2FyZXRSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
YXJldFJlY3QpID0gMDsKICNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNsaXBU
b0RvY3VtZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBh
ZTc4NmVjYTlhMGJkMjk1OTJhNTVhMWYwYmM4ZThjMjg0YTAzNTQzLi42NDU1NDNlY2NiMDQ1ZjI3
MGUwN2M1M2UwNTMxN2JkNjNmMmY2ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcApAQCAtNTQ1Nyw2ICs1NDU3LDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJl
c2V0U3RhdGUoUmVzZXRTdGF0ZVJlYXNvbiByZXNldFN0YXRlUmVhc29uKQogI2lmIEVOQUJMRShQ
T0lOVEVSX0xPQ0spCiAgICAgcmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKICNlbmRpZgorCisgICAg
bV9jbGlwVG9Eb2N1bWVudCA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpyZXNldFN0
YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKCkKQEAgLTY4ODAsNCArNjg4MiwxMSBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c3RvcFVSTFNjaGVtZUhhbmRsZXJUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlm
aWVyLCB1aW50NjRfdAogICAgIGl0ZXJhdG9yLT52YWx1ZS0+c3RvcFRhc2soKnRoaXMsIHJlc291
cmNlSWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRDbGlwVG9Eb2N1bWVu
dChib29sIGNsaXBUb0RvY3VtZW50KQoreworICAgIG1fY2xpcFRvRG9jdW1lbnQgPSBjbGlwVG9E
b2N1bWVudDsKKworICAgIG1fcGFnZUNsaWVudC5kaWRDaGFuZ2VDbGlwVG9Eb2N1bWVudChjbGlw
VG9Eb2N1bWVudCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDA1OGM1OWJmODhlMmYyNDA5NzIwYTljZWMzYjE0
YjI2MjdiNjBmNWIuLmZhNDYwMWZmZTlmM2Q3ZmY3ODlkZjc2YWU2MTEzOTdiNTI5ZDEzNWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTExOTEsNiArMTE5MSw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVSTFNjaGVtZUhhbmRsZXJGb3JTY2hlbWUoUmVmPFdl
YlVSTFNjaGVtZUhhbmRsZXI+JiYsIGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKICAgICBXZWJVUkxT
Y2hlbWVIYW5kbGVyKiB1cmxTY2hlbWVIYW5kbGVyRm9yU2NoZW1lKGNvbnN0IFN0cmluZyYgc2No
ZW1lKTsKIAorICAgIHZvaWQgc2V0Q2xpcFRvRG9jdW1lbnQoYm9vbCk7CisgICAgYm9vbCBjbGlw
VG9Eb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFRvRG9jdW1lbnQ7IH0KKwogcHJpdmF0
ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYsIFdlYlByb2Nlc3NQcm94eSYsIHVpbnQ2
NF90IHBhZ2VJRCwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogICAgIHZvaWQgcGxh
dGZvcm1Jbml0aWFsaXplKCk7CkBAIC0xOTc2LDcgKzE5NzksOSBAQCBwcml2YXRlOgogI2VuZGlm
CiAKICAgICBib29sIG1faXNVc2luZ0hpZ2hQZXJmb3JtYW5jZVdlYkdMIHsgZmFsc2UgfTsKLSAg
ICAgICAgCisKKyAgICBib29sIG1fY2xpcFRvRG9jdW1lbnQgeyB0cnVlIH07CisKICAgICBXZWFr
UHRyRmFjdG9yeTxXZWJQYWdlUHJveHk+IG1fd2Vha1B0ckZhY3Rvcnk7CiAKICAgICBIYXNoTWFw
PFN0cmluZywgUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+PiBtX3VybFNjaGVtZUhhbmRsZXJzQnlT
Y2hlbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgppbmRleCBmNmM1NGM3MTYyNmJkNWZlMTgxMDNjNTUyMzFmYjc4MTk0YWY3Yjg2Li4z
OGU3MDE5YzI5MjQzNmRkYjA5YmFmZjIzOTBhNTlhNGQ4MmYzMmY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTQ5NCw0ICs0
OTQsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgU3RhcnRVUkxTY2hlbWVI
YW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlk
ZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KQogICAgIFN0b3BVUkxT
Y2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNv
dXJjZUlkZW50aWZpZXIpCisKKyAgICBTZXRDbGlwVG9Eb2N1bWVudChib29sIGNsaXBUb0RvY3Vt
ZW50KQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1w
bElPUy5oCmluZGV4IDUyMWUxZGQ4MWEyM2IyYjI5YWMyMjE4YzM3YTFhNThhNzZiMjhkYWEuLjQ3
YmZhNWI3NDhjYzA5ZDI1ZTQwOGMwZGRjYzYzMmZmYjczYmJhOTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKQEAgLTE5OCw2ICsxOTgs
OCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBoYW5kbGVBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbklu
Zm9SZXNwb25zZShib29sIGhhc0FjdGl2ZVNlc3Npb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGRv
dWJsZSBkdXJhdGlvbiwgZG91YmxlIGVsYXBzZWRUaW1lKSBvdmVycmlkZTsKIAorICAgIHZvaWQg
ZGlkQ2hhbmdlQ2xpcFRvRG9jdW1lbnQoYm9vbCBjbGlwVG9Eb2N1bWVudCkgb3ZlcnJpZGU7CisK
ICNpZiBVU0UoUVVJQ0tfTE9PSykKICAgICB2b2lkIHJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9v
a0RvY3VtZW50KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25z
dCBTdHJpbmcmKT4mJikgb3ZlcnJpZGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IGI5NmNkMmUyNzhmMTU0MGNl
NjFkNDk3NTVhZmM5OTFmYTE4YjcyZTAuLjIzNGZhMmI2YjJjNGQ2OWFiNDgwOGZkNGZhNzE5OWEz
YjFhZTI0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNs
aWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5tbQpAQCAtODIxLDYgKzgyMSwxMSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpy
ZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudChjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LAogfQogI2VuZGlmCiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENoYW5nZUNsaXBUb0RvY3Vt
ZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQpCit7CisgICAgW21fd2ViVmlldyBfc2NoZWR1bGVWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGVdOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlldy5tbQppbmRleCAzOWIwMGFjMmExZjJmZTAxOTU4MWZiZDlhNWRjZjkzZmFlMGNh
NTFlLi4yNjUzZWY1MzU1MjI0OTIxODNhZTMyNzI3MjJmZWEyZTNmNzk4NTYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC0zNjAsNiArMzYw
LDcgQEAgLSAodm9pZCl1cGRhdGVGaXhlZENsaXBwaW5nVmlldzooRmxvYXRSZWN0KWZpeGVkUG9z
aXRpb25SZWN0Rm9yVUkKIAogICAgIFtfZml4ZWRDbGlwcGluZ1ZpZXcgc2V0Q2VudGVyOmNsaXBw
aW5nQm91bmRzLmxvY2F0aW9uKCldOyAvLyBOb3QgcmVhbGx5IHRoZSBjZW50ZXIgc2luY2Ugd2Ug
c2V0IGFuIGFuY2hvciBwb2ludC4KICAgICBbX2ZpeGVkQ2xpcHBpbmdWaWV3IHNldEJvdW5kczpj
bGlwcGluZ0JvdW5kc107CisgICAgW19maXhlZENsaXBwaW5nVmlldyBsYXllcl0ubWFza3NUb0Jv
dW5kcyA9IF9wYWdlLT5jbGlwVG9Eb2N1bWVudCgpOwogfQogCiAtICh2b2lkKV9kaWRFeGl0U3Rh
YmxlU3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwu
aAppbmRleCAzY2I2Y2E4YWE2ZjNhMTlhZjU4Zjg0NTA3MGNhM2JmNWVlNDRiZDU5Li5jOTAxZDVm
ZDFhZTU1ZGJmMDgwMzY2MGYyNDhjNGJmODlkYmVlMDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCkBAIC0yNTEsNiArMjUxLDggQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkgb3ZlcnJpZGU7CiAgICAg
Ym9vbCB3aW5kb3dJc0Zyb250V2luZG93VW5kZXJNb3VzZShjb25zdCBOYXRpdmVXZWJNb3VzZUV2
ZW50Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb0RvY3VtZW50KGJvb2wg
Y2xpcFRvRG9jdW1lbnQpIG92ZXJyaWRlIHsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggMTRjMWU0NjYxMjYzYjFkMWRlMDkyMDY4YWRj
OWQwZGI2ZDA5ZDBiYy4uYzJmZmFlNWM5ODRlNjY0YzE2NzQxZjM2NjEwN2NjM2UyN2RhNjEwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTIyMiw0ICsxMjIyLDkgQEAgdm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmRpZEludmFsaWRhdGVEb2N1bWVudE1hcmtlclJlY3RzKCkKICAgICBtX3Bh
Z2UuZmluZENvbnRyb2xsZXIoKS5kaWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJrZXJSZWN0cygpOwog
fQogCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkQ2hhbmdlQ2xpcFRvRG9jdW1lbnQoYm9vbCBj
bGlwVG9Eb2N1bWVudCkKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpTZXRDbGlwVG9Eb2N1bWVudChjbGlwVG9Eb2N1bWVudCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGE1MTRiMjk5NDg4ODQyYmNmOTI0NTg5
MTNiMDM3OWIzZWFmOWViYWUuLmFhYjE2ZWIzYzZmODYwY2Y4MDFlYWNjYTI3MDdhNDg1Yzg2MjYx
OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMzQwLDYgKzM0MCw4IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIGRpZEludmFsaWRhdGVEb2N1bWVudE1hcmtlclJlY3RzKCkgZmluYWw7CiAKKyAg
ICB2b2lkIGRpZENoYW5nZUNsaXBUb0RvY3VtZW50KGJvb2wpIGZpbmFsOworCiAgICAgU3RyaW5n
IG1fY2FjaGVkVG9vbFRpcDsKICAgICBtdXRhYmxlIFJlZlB0cjxXZWJGcmFtZT4gbV9jYWNoZWRG
cmFtZVNldExhcmdlc3RGcmFtZTsKICAgICBtdXRhYmxlIGJvb2wgbV9jYWNoZWRNYWluRnJhbWVI
YXNIb3Jpem9udGFsU2Nyb2xsYmFyIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCA2ODA4ZWI0YjY3NTgy
YTlkZTg4YjRmZGE3ZGJlNzBjZWZlNTMzN2Y4Li5kMzBiNTU0NmM1YjdkNmE1ZWZhOTliZGY0ZGY1
ZDMzZWEzYmZlZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0zMDQ1LDYgKzMwNDUsOCBAQCB2b2lkIFdlYlBhZ2U6
OnZpZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQoKQogICAgIHVwZGF0ZVZpZXdwb3J0U2l6ZUZv
ckNTU1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gKm1haW5G
cmFtZVZpZXcoKTsKKyAgICBmcmFtZVZpZXcuc2V0Q2xpcFRvRG9jdW1lbnQobV92aWV3cG9ydENv
bmZpZ3VyYXRpb24uY2xpcFRvRG9jdW1lbnQoKSk7CisKICAgICBJbnRQb2ludCBzY3JvbGxQb3Np
dGlvbiA9IGZyYW1lVmlldy5zY3JvbGxQb3NpdGlvbigpOwogICAgIGlmICghbV9oYXNSZWNlaXZl
ZFZpc2libGVDb250ZW50UmVjdHNBZnRlckRpZENvbW1pdExvYWQpIHsKICAgICAgICAgRmxvYXRT
aXplIG1pbmltdW1MYXlvdXRTaXplSW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMgPSBtX3ZpZXdwb3J0
Q29uZmlndXJhdGlvbi5taW5pbXVtTGF5b3V0U2l6ZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDVjNjA5MWNlYjVkOWY3Y2M3NGMxNTNiMTI1
MGZlZDQzOWE2MTlmOGMuLjFlMmM1NmI2YTQwZjA3MmUzMTg1MTcwMjIzYjZjYWRiOTY3OGI2Mzkg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxNy0wNC0xMiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxl
LmNvbT4KKworICAgICAgICBQcm92aWRlIGEgdmlld3BvcnQgcGFyYW1ldGVyIHRvIGRpc2FibGUg
Y2xpcHBpbmcgdG8gdGhlIGRvY3VtZW50IHJlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc2NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE1
NjQ2MzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAo
V1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKToKKyAgICAgICAgKiBU
ZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xs
ZXIuaWRsOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2Ny
aXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6c2V0
T2JzY3VyZWRJbnNldHMpOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250
ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9z
L1Rlc3RDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1SZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlVJU2Ny
aXB0Q29udHJvbGxlcjo6c2V0T2JzY3VyZWRJbnNldHMpOgorICAgICAgICBBZGQgYSBVSVNjcmlw
dENvbnRyb2xsZXIgbWVjaGFuaXNtIHRvIGluc3RhbGwgb2JzY3VyZWQgaW5zZXRzCisgICAgICAg
IG9uIHRoZSB3ZWIgdmlldy4KKwogMjAxNy0wNC0wNSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFy
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgd2Via2l0cHk6IEFkZCBwaWQgbG9nZ2luZyBmb3Igc2lt
dWxhdG9yIHByb2Nlc3NlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJ
U2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW0KaW5kZXggNDAzYjU5YjQxZDM1OTlkNThhMjM2NTk5Mzg4MjNmNjM3
MzgyNTcyNi4uYjBlMDRkZDY2YTkxM2Q2NmEwNGI5ZjhkMjhkMjc0ODU2NzFjZDZjNSAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBA
IC0zMTYsNiArMzE2LDEwIEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjphZGRWaWV3VG9XaW5k
b3coSlNWYWx1ZVJlZikKIHsKIH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1
cmVkSW5zZXRzKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKK3sKK30KKwogfQogCiAj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbCBiL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJv
bGxlci5pZGwKaW5kZXggZjY2YWUxNTIyZjUxNjE3MDdjYzdmMWY4NGQ0Yzg4MWE5MmRjMmJmMS4u
ZGJhNDU2ZWJjYjFlM2Y5ODdkODliMjc4NmVlNTNmYmRjOWFlMmFiYiAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250
cm9sbGVyLmlkbAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9C
aW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCkBAIC0yMzIsNCArMjMyLDYgQEAgaW50ZXJm
YWNlIFVJU2NyaXB0Q29udHJvbGxlciB7CiAgICAgdm9pZCBhZGRWaWV3VG9XaW5kb3cob2JqZWN0
IGNhbGxiYWNrKTsKIAogICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKERPTVN0cmluZyBwcmVm
ZXJlbmNlLCBET01TdHJpbmcgdmFsdWUpOworCisgICAgdm9pZCBzZXRPYnNjdXJlZEluc2V0cyhk
b3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KTsKIH07
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNj
cmlwdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRl
eHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA2MTJjOWUyOWYxZGEyNGUyMTg4NDY0MDVj
ODE0MjBlNmFiZGI4MjNmLi4wZjFmY2MxZDQ5ZjIxNmUzNWM3MWY4NmZhZjg4NmU4YWE0OTk3NTlj
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNj
cmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRD
b250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTM5OSw2ICszOTksMTAgQEAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IFVJU2NyaXB0Q29udHJvbGxlcjo6YWNjZXNzaWJpbGl0eVNwZWFr
U2VsZWN0aW9uQ29udGVudCgKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAordm9pZCBVSVNjcmlw
dENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwg
ZG91YmxlIGJvdHRvbSwgZG91YmxlIGxlZnQpCit7Cit9CisKICNlbmRpZgogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENv
bnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAppbmRleCA0NmMyOGIxNDAxZGQ0NjQxNzY0
NGFhNzY2NzRjYWFjM2IxYmQ0Y2E5Li42NjI3Mzg4N2I5ZTZhYjk5MTZiNTlhOTE4OWEyMjFiMTA4
NGQ3YTMwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4
dC9VSVNjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaApAQCAtMTU2LDYgKzE1Niw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlbW92ZVZpZXdGcm9tV2luZG93KEpTVmFsdWVSZWYpOwogICAgIHZvaWQg
YWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYpOwogCisgICAgdm9pZCBzZXRPYnNjdXJlZEluc2V0
cyhkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KTsK
KwogcHJpdmF0ZToKICAgICBVSVNjcmlwdENvbnRyb2xsZXIoVUlTY3JpcHRDb250ZXh0Jik7CiAg
ICAgCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxl
cklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1t
CmluZGV4IDdjMzUxZjgyZjg2N2JkYjdlMmQxMDI5OTNkNmEwMWZmMzU4YjYwNDIuLmEwZDExMmY1
NjMyNjQwYjRmNzJmMWU3MmZhOGY2YmM2YjkwMGUyYjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCkBAIC04NSw2ICs4NSw5IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAg
ICAgICAgIFtzY3JvbGxWaWV3IF9yZW1vdmVBbGxBbmltYXRpb25zOllFU107CiAgICAgICAgIFtz
Y3JvbGxWaWV3IHNldFpvb21TY2FsZToxIGFuaW1hdGVkOk5PXTsKICAgICAgICAgW3Njcm9sbFZp
ZXcgc2V0Q29udGVudE9mZnNldDpDR1BvaW50WmVyb107CisKKyAgICAgICAgc2Nyb2xsVmlldy5j
b250ZW50SW5zZXQgPSBVSUVkZ2VJbnNldHNaZXJvOworICAgICAgICB3ZWJWaWV3LT5wbGF0Zm9y
bVZpZXcoKS5fb2JzY3VyZWRJbnNldHMgPSBVSUVkZ2VJbnNldHNaZXJvOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVy
SU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9T
Lm1tCmluZGV4IGNlNjdmNWU1NDM5Zjg3Yzc1ZDljYTY1ZTI0NjRjZmVmZjZhMzhkZDYuLjU3YTE5
NTQ5ZDlkODkzZjJlMmQ4MjQyNjRjMTYwN2YzMGM1ZjJkYmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTY2OCw2ICs2
NjgsMTQgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtQ2xlYXJBbGxDYWxsYmFj
a3MoKQogICAgIHdlYlZpZXcuZGlkRW5kU2Nyb2xsaW5nQ2FsbGJhY2sgPSBuaWw7CiB9CiAKK3Zv
aWQgVUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3Vi
bGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KQoreworICAgIFVJRWRnZUluc2V0
cyBpbnNldHMgPSBVSUVkZ2VJbnNldHNNYWtlKHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCk7Cisg
ICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICB3ZWJWaWV3LnNjcm9sbFZp
ZXcuY29udGVudEluc2V0ID0gaW5zZXRzOworICAgIHdlYlZpZXcuX29ic2N1cmVkSW5zZXRzID0g
aW5zZXRzOworfQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjk4OGYx
MTE4NDc3Zjc5OGU1MWUyYzRhNmZiNzk0OTdlOTU2OWFhZi4uMDNmZTI4M2E0OThkZjlkNjNhZDI1
YzNmZDA4NzZmNWNjMDdjMmRmMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE3LTA0LTEyICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUg
YSB2aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgZG9jdW1lbnQg
cmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcw
NzY2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRpbGVkLWRyYXdpbmcvaW9zL3ZpZXdw
b3J0LWNsaXAtdG8tZG9jdW1lbnQtbm8tZ2V0cy1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLWRvY3Vt
ZW50LW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRpbGVkLWRy
YXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQteWVzLWdldHMtbm8tbWFyZ2luLXRp
bGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdGlsZWQtZHJhd2luZy9pb3Mvdmll
d3BvcnQtY2xpcC10by1kb2N1bWVudC15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbDogQWRk
ZWQuCisKIDIwMTctMDQtMDUgIEphdmllciBGZXJuYW5kZXogIDxqZmVybmFuZGV6QGlnYWxpYS5j
b20+CiAKICAgICAgICAgW2Nzcy1hbGlnbl0gSW1wbGVtZW50IHRoZSBwbGFjZS1pdGVtcyBzaG9y
dGhhbmQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0
LWNsaXAtdG8tZG9jdW1lbnQtbm8tZ2V0cy1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1kb2N1bWVudC1uby1n
ZXRzLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc1MGJkM2RhMDc0MzIy
MjFkOTQwYjFjMDEzOGRhMWQyZjg4MmRkNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQtbm8tZ2V0cy1tYXJn
aW4tdGlsZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjMgQEAKKyhHcmFwaGljc0xheWVyCisg
IChhbmNob3IgMC4wMCAwLjAwKQorICAoYm91bmRzIDMyMC4wMCA1NDguMDApCisgICh2aXNpYmxl
IHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1MzguMDApCisgIChjb3ZlcmFnZSByZWN0IC00MC4w
MCwgLTEwLjAwIDMyMC4wMCB4IDU0OC4wMCkKKyAgKGludGVyc2VjdHMgY292ZXJhZ2UgcmVjdCAx
KQorICAoY29udGVudHNTY2FsZSAyLjAwKQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xh
eWVyCisgICAgICAoYm91bmRzIDMyMC4wMCA1NDguMDApCisgICAgICAoY29udGVudHNPcGFxdWUg
MSkKKyAgICAgICh2aXNpYmxlIHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1MzguMDApCisgICAg
ICAoY292ZXJhZ2UgcmVjdCAtNDAuMDAsIC0xMC4wMCA1NzYuMDAgeCA4MDQuMDApCisgICAgICAo
aW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisgICAgICAoY29udGVudHNTY2FsZSAyLjAwKQor
ICAgICAgKHRpbGUgY2FjaGUgY292ZXJhZ2UgLTUxMiwgLTUxMiAxMzQ0IHggMTU3MikKKyAgICAg
ICh0aWxlIHNpemUgNTEyIHggNTQ4KQorICAgICAgKHRvcCBsZWZ0IHRpbGUgLTEsIC0xIHRpbGVz
IGdyaWQgMyB4IDMpCisgICAgICAoaW4gd2luZG93IDEpCisgICAgKQorICApCispCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9j
dW1lbnQtbm8tZ2V0cy1tYXJnaW4tdGlsZXMuaHRtbCBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdp
bmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQtbm8tZ2V0cy1tYXJnaW4tdGlsZXMuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NTM0ODRlZTgwYmYwNzI5NjE5ODI4ZGU1NzQzY2NjOTYyZGVjMGQxCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQt
Y2xpcC10by1kb2N1bWVudC1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sCkBAIC0wLDAgKzEsNDMg
QEAKKzwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxl
Vmlld3BvcnQ9dHJ1ZSBdIC0tPgorCis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIG5hbWU9InZp
ZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxlPTEsIGNsaXAtdG8tZG9jdW1lbnQ9bm8iPgor
ICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIGdldFVJU2NyaXB0KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICB1aUNvbnRyb2xsZXIuc2V0T2JzY3VyZWRJbnNldHMoMTAsIDIwLCAzMCwgNDApOwor
ICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5pbW1lZGlhdGVTY3JvbGxUb09mZnNldCgtNDAs
IC0xMCk7CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLmRvQWZ0ZXJWaXNpYmxlQ29udGVu
dFJlY3RVcGRhdGUoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xs
ZXIudWlTY3JpcHRDb21wbGV0ZSgpOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9
KSgpO2AKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAg
ICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRvVGVzdCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoZ2V0VUlTY3Jp
cHQoKSwgZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRl
cm5hbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xh
eWVycycpLmlubmVyVGV4dCA9IGludGVybmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuTEFZRVJfVFJFRV9JTkNMVURFU19WSVNJ
QkxFX1JFQ1RTIHwgaW50ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVERVNfVElMRV9DQUNIRVMpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVh
ZD4KKworPGJvZHk+Cis8cHJlIGlkPSJsYXllcnMiPkxheWVyIHRyZWUgZ29lcyBoZXJlPC9wPgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9p
b3Mvdmlld3BvcnQtY2xpcC10by1kb2N1bWVudC15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10
by1kb2N1bWVudC15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFjZWM2OWMxZGM1M2MwMmIzNmQzMjliN2ZjNWQ5ZTM5ZWIwYzhiMWYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLWRv
Y3VtZW50LXllcy1nZXRzLW5vLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwy
MyBAQAorKEdyYXBoaWNzTGF5ZXIKKyAgKGFuY2hvciAwLjAwIDAuMDApCisgIChib3VuZHMgMzIw
LjAwIDU0OC4wMCkKKyAgKHZpc2libGUgcmVjdCAwLjAwLCAwLjAwIDMyMC4wMCB4IDU0OC4wMCkK
KyAgKGNvdmVyYWdlIHJlY3QgMC4wMCwgMC4wMCAzMjAuMDAgeCA1NDguMDApCisgIChpbnRlcnNl
Y3RzIGNvdmVyYWdlIHJlY3QgMSkKKyAgKGNvbnRlbnRzU2NhbGUgMi4wMCkKKyAgKGNoaWxkcmVu
IDEKKyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKGJvdW5kcyAzMjAuMDAgNTQ4LjAwKQorICAg
ICAgKGNvbnRlbnRzT3BhcXVlIDEpCisgICAgICAodmlzaWJsZSByZWN0IDAuMDAsIDAuMDAgMzIw
LjAwIHggNTQ4LjAwKQorICAgICAgKGNvdmVyYWdlIHJlY3QgMC4wMCwgMC4wMCAzMjAuMDAgeCA1
NDguMDApCisgICAgICAoaW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisgICAgICAoY29udGVu
dHNTY2FsZSAyLjAwKQorICAgICAgKHRpbGUgY2FjaGUgY292ZXJhZ2UgMCwgMCAzMjAgeCA1NDgp
CisgICAgICAodGlsZSBzaXplIDUxMiB4IDU0OCkKKyAgICAgICh0b3AgbGVmdCB0aWxlIDAsIDAg
dGlsZXMgZ3JpZCAxIHggMSkKKyAgICAgIChpbiB3aW5kb3cgMSkKKyAgICApCisgICkKKykKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10
by1kb2N1bWVudC15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbCBiL0xheW91dFRlc3RzL3Rp
bGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQteWVzLWdldHMtbm8tbWFy
Z2luLXRpbGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Q0OGNmNTUxNDk0OTU0M2NjNDgxYTg3NDRlZjQ5
MGRiMjY2YTU0ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcv
aW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQteWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLmh0
bWwKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgdXNlRmxleGlibGVWaWV3cG9ydD10cnVlIF0gLS0+CisKKzxodG1sPgorPGhlYWQ+Cisg
ICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MSwgY2xpcC10
by1kb2N1bWVudD15ZXMiPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIGdldFVJU2Ny
aXB0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuc2V0T2JzY3VyZWRJbnNldHMo
MTAsIDIwLCAzMCwgNDApOworICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5pbW1lZGlhdGVT
Y3JvbGxUb09mZnNldCgtNDAsIC0xMCk7CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLmRv
QWZ0ZXJWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgICAgICB1aUNvbnRyb2xsZXIudWlTY3JpcHRDb21wbGV0ZSgpOworICAgICAgICAgICAgICAg
IH0pCisgICAgICAgICAgICB9KSgpO2AKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIGRvVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIucnVu
VUlTY3JpcHQoZ2V0VUlTY3JpcHQoKSwgZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2xheWVycycpLmlubmVyVGV4dCA9IGludGVybmFscy5sYXllclRyZWVB
c1RleHQoZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuTEFZRVJf
VFJFRV9JTkNMVURFU19WSVNJQkxFX1JFQ1RTIHwgaW50ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVE
RVNfVElMRV9DQUNIRVMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKyAg
ICA8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8cHJlIGlkPSJsYXllcnMiPkxheWVyIHRy
ZWUgZ29lcyBoZXJlPC9wPgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306956</attachid>
            <date>2017-04-12 17:50:14 -0700</date>
            <delta_ts>2017-04-13 14:32:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170766-20170412175013.patch</filename>
            <type>text/plain</type>
            <size>40562</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjU0N2Y4MWM0MzYxZjRm
YjRhZjBkYjUzNTg5YjMxNjlkMThlZTgxNS4uZDk0OTlhOWMxOWI0Yjc0M2RjZTc5MTRkZWVjMWM2
ZGNiZGJmMGI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE3LTA0LTEyICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2
aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgZG9jdW1lbnQgcmVj
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzY2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogdGlsZWQtZHJhd2luZy9pb3Mvdmll
d3BvcnQtY2xpcC10by1kb2N1bWVudC1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sLAorICAgICAg
ICAgICAgICAgdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1kb2N1bWVudC15ZXMt
Z2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbCwKKworICAgICAgICAqIGRvbS9WaWV3cG9ydEFyZ3Vt
ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6cmVzb2x2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRWaWV3cG9ydEZlYXR1cmUpOgorICAgICAgICAqIGRvbS9W
aWV3cG9ydEFyZ3VtZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6
Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0Q29uZmlndXJhdGlvbjo6dXBkYXRlQ29uZmlndXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6
OlZpZXdwb3J0Q29uZmlndXJhdGlvbjo6ZGVzY3JpcHRpb24pOgorICAgICAgICAqIHBhZ2UvVmll
d3BvcnRDb25maWd1cmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpWaWV3cG9ydENvbmZpZ3Vy
YXRpb246OlBhcmFtZXRlcnM6OlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3Bv
cnRDb25maWd1cmF0aW9uOjpjbGlwVG9Eb2N1bWVudCk6CisgICAgICAgIEFkZCB2aWV3cG9ydCBw
YXJhbWV0ZXIuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBh
Z2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3OjplbmFibGVTcGVjdWxhdGl2ZVRpbGluZ0lmTmVlZGVkKToKKyAg
ICAgICAgSWYgbm90IGNsaXBwaW5nIHRvIHRoZSBkb2N1bWVudCwgZW5hYmxlICJzcGVjdWxhdGl2
ZSIgdGlsaW5nIGltbWVkaWF0ZWx5LAorICAgICAgICBiZWNhdXNlIHRoZSBtYXJnaW4gdGlsZXMg
Y2FuIGJlIHZpc2libGUgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6aGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6dXBkYXRlVGlsZXNGb3JFeHRlbmRlZEJhY2tncm91bmRNb2RlKToKKyAg
ICAgICAgRG9uJ3QgY2hlY2sgdGhlIHNldHRpbmcgaGVyZTsganVzdCByZXNwZWN0IHRoZSBtb2Rl
IHRoYXQgaXMgY29tcHV0ZWQKKyAgICAgICAgYnkgY2FsY3VsYXRlRXh0ZW5kZWRCYWNrZ3JvdW5k
TW9kZS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpjYWxjdWxhdGVFeHRlbmRlZEJh
Y2tncm91bmRNb2RlKToKKyAgICAgICAgSWYgdGhlIHZpZXdwb3J0IHBhcmFtZXRlciB3YXMgc2V0
LCBhZGQgbWFyZ2luIHRpbGVzIG9uIGJvdGggYXhlcy4KKworICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjpzZXRDbGlwVG9Eb2N1bWVudCk6CisgICAgICAgIE5vdGlmeSBDaHJvbWVDbGllbnQg
b2YgdGhlIGNoYW5nZSwgYW5kIHJlLWNvbXB1dGUgdGhlIG1hcmdpbiB0aWxlIG1vZGUuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIEZhY3RvciBvdXQgY29k
ZSB0aGF0IGRlY2lkZXMgd2hldGhlciB0aGUgY29udGVudCBsYXllciBjbGlwcyB0byBib3VuZHMs
CisgICAgICAgIGFuZCBtYWtlIGl0IHRha2UgdGhlIG5ldyB2aWV3cG9ydCBwYXJhbWV0ZXIgaW50
byBhY2NvdW50LgorCiAyMDE3LTA0LTA1ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNv
bT4KIAogICAgICAgICBNYWtlIGluYWN0aXZlIHdlYiBwcm9jZXNzZXMgYmVoYXZlIGFzIHRob3Vn
aCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTAyMzg3MjRhMTI4YjhkZTI5
MmU0YTExMTRlMDc1OWU4OTc0MTNkYi4uMDdhMzBhZTEyNGJjMmMyZGIwOTQ3MTQ2MjgwZTRhODM4
YmJlNzg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTA0LTEyICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2aWV3
cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgZG9jdW1lbnQgcmVjdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzY2Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNldENsaXBUb0RvY3VtZW50KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2xpcFRv
RG9jdW1lbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmRpZENoYW5nZUNsaXBUb0RvY3Vt
ZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1w
bElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZENoYW5nZUNsaXBU
b0RvY3VtZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmg6Cisg
ICAgICAgIEZvcndhcmQgY2xpcC10by1kb2N1bWVudCBjaGFuZ2VzIGZyb20gQ2hyb21lQ2xpZW50
IHRvIFdLV2ViVmlldy4KKyAgICAgICAgVXBkYXRlIHZpc2libGUgY29udGVudCByZWN0cyB3aGVu
IGl0IGNoYW5nZXMsIHdoaWNoIHdpbGwKKyAgICAgICAgcmVzdWx0IGluIGEgY2FsbCB0byB1cGRh
dGVGaXhlZENsaXBwaW5nVmlldywgYXMgYmVsb3cuCisgICAgICAgIEtlZXAgdHJhY2sgb2YgdGhl
IGN1cnJlbnQgc3RhdGUgaW4gdGhlIFVJIHByb2Nlc3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50TWF5RHJhd0lu
T2JzY3VyZWRJbnNldHNdKToKKyAgICAgICAgRXhwb3NlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRo
ZSBjbGlwLXRvLWRvY3VtZW50IGJpdCBhcyBTUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXcubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgdXBkYXRlRml4ZWRD
bGlwcGluZ1ZpZXc6XSk6CisgICAgICAgIERpc2FibGUgZml4ZWQgY2xpcHBpbmcgd2hlbiBjbGlw
LXRvLWRvY3VtZW50IGlzIGRpc2FibGVkLgorICAgICAgICAKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnZp
ZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQpOgorICAgICAgICBQdXNoIHRoZSB2aWV3cG9ydCdz
IGNsaXAtdG8tZG9jdW1lbnQgYml0IG9udG8gdGhlIG1haW4gZnJhbWUncyBGcmFtZVZpZXcuCisK
IDIwMTctMDQtMDUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAg
IFJlZmFjdG9yIHNvIFdlYnNpdGVEYXRhU3RvcmVzIGFsd2F5cyBoYXZlIGEgU3RvcmFnZU1hbmFn
ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcAppbmRleCAxZTY5Yjky
NmRiMWJkNjcxMzBiYWNlZTUxMzUzNDIyMjRkM2IzODBkLi5jN2YzY2UxNzk0M2MxNWQ2NjAyYjBl
MzU4YzRiOTk3OWVhNWNlZDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3Bv
cnRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50
cy5jcHAKQEAgLTI0Niw2ICsyNDYsNyBAQCBWaWV3cG9ydEF0dHJpYnV0ZXMgVmlld3BvcnRBcmd1
bWVudHM6OnJlc29sdmUoY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmlld3BvcnRTaQogICAgIHJl
c3VsdC51c2VyU2NhbGFibGUgPSB1c2VyWm9vbTsKICAgICByZXN1bHQub3JpZW50YXRpb24gPSBv
cmllbnRhdGlvbjsKICAgICByZXN1bHQuc2hyaW5rVG9GaXQgPSBzaHJpbmtUb0ZpdDsKKyAgICBy
ZXN1bHQuY2xpcFRvRG9jdW1lbnQgPSBjbGlwVG9Eb2N1bWVudDsKIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CkBAIC0zNjMsMjIgKzM2NCwyMSBAQCBzdGF0aWMgZmxvYXQgZmluZFNjYWxlVmFsdWUo
RG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZQogICAg
IHJldHVybiBudW1lcmljVmFsdWU7CiB9CiAKLS8vIEZJWE1FOiBJdCdzIGtpbmQgb2YgYml6YXJy
ZSB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIG9mIDEgYW5kIDAgdG8gcmVwcmVzZW50IHRy
dWUgYW5kIGZhbHNlLgotc3RhdGljIGZsb2F0IGZpbmRCb29sZWFuVmFsdWUoRG9jdW1lbnQmIGRv
Y3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZSkKK3N0YXRpYyBib29sIGZp
bmRCb29sZWFuVmFsdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5n
VmlldyB2YWx1ZSkKIHsKICAgICAvLyB5ZXMgYW5kIG5vIGFyZSB1c2VkIGFzIGtleXdvcmRzLgog
ICAgIC8vIE51bWJlcnMgPj0gMSwgbnVtYmVycyA8PSAtMSwgZGV2aWNlLXdpZHRoIGFuZCBkZXZp
Y2UtaGVpZ2h0IGFyZSBtYXBwZWQgdG8geWVzLgogICAgIC8vIE51bWJlcnMgaW4gdGhlIHJhbmdl
IDwtMSwgMT4sIGFuZCB1bmtub3duIHZhbHVlcywgYXJlIG1hcHBlZCB0byBuby4KIAogICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgInllcyIpKQotICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHZhbHVlLCAibm8iKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUs
ICJkZXZpY2Utd2lkdGgiKSkKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImRldmljZS1o
ZWlnaHQiKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIHN0ZDo6YWJzKG51bWVyaWNQ
cmVmaXgoZG9jdW1lbnQsIGtleSwgdmFsdWUpKSA+PSAxID8gMSA6IDA7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBzdGQ6OmFicyhudW1lcmljUHJlZml4KGRvY3VtZW50LCBrZXks
IHZhbHVlKSkgPj0gMTsKIH0KIAogdm9pZCBzZXRWaWV3cG9ydEZlYXR1cmUoVmlld3BvcnRBcmd1
bWVudHMmIGFyZ3VtZW50cywgRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3Ry
aW5nVmlldyB2YWx1ZSkKQEAgLTQwMyw2ICs0MDMsOCBAQCB2b2lkIHNldFZpZXdwb3J0RmVhdHVy
ZShWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzLCBEb2N1bWVudCYgZG9jdW1lbnQsIFN0cmlu
ZwogI2VuZGlmCiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5
LCAic2hyaW5rLXRvLWZpdCIpKQogICAgICAgICBhcmd1bWVudHMuc2hyaW5rVG9GaXQgPSBmaW5k
Qm9vbGVhblZhbHVlKGRvY3VtZW50LCBrZXksIHZhbHVlKTsKKyAgICBlbHNlIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJjbGlwLXRvLWRvY3VtZW50IikpCisgICAgICAg
IGFyZ3VtZW50cy5jbGlwVG9Eb2N1bWVudCA9IGZpbmRCb29sZWFuVmFsdWUoZG9jdW1lbnQsIGtl
eSwgdmFsdWUpOwogICAgIGVsc2UKICAgICAgICAgcmVwb3J0Vmlld3BvcnRXYXJuaW5nKGRvY3Vt
ZW50LCBVbnJlY29nbml6ZWRWaWV3cG9ydEFyZ3VtZW50S2V5RXJyb3IsIGtleSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oCmluZGV4IDRlNjkwN2Y1ODlkYjcyNmRiYThh
YzA5ZjgxZDg3OTU3ZTc2Zjg4MmIuLjM4N2JhOGVmMzc3Y2YwNmYyZTAwNjhmYjcwN2RkOWRjZGYy
OTczMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oCkBAIC01MSw2ICs1
MSw3IEBAIHN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXMgewogICAgIGZsb2F0IHVzZXJTY2FsYWJs
ZTsKICAgICBmbG9hdCBvcmllbnRhdGlvbjsKICAgICBmbG9hdCBzaHJpbmtUb0ZpdDsKKyAgICBi
b29sIGNsaXBUb0RvY3VtZW50OwogfTsKIAogc3RydWN0IFZpZXdwb3J0QXJndW1lbnRzIHsKQEAg
LTk0LDYgKzk1LDcgQEAgc3RydWN0IFZpZXdwb3J0QXJndW1lbnRzIHsKICAgICBmbG9hdCB1c2Vy
Wm9vbSB7IFZhbHVlQXV0byB9OwogICAgIGZsb2F0IG9yaWVudGF0aW9uIHsgVmFsdWVBdXRvIH07
CiAgICAgZmxvYXQgc2hyaW5rVG9GaXQgeyBWYWx1ZUF1dG8gfTsKKyAgICBib29sIGNsaXBUb0Rv
Y3VtZW50IHsgdHJ1ZSB9OwogICAgIGJvb2wgd2lkdGhXYXNFeHBsaWNpdCB7IGZhbHNlIH07CiAK
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmlld3BvcnRBcmd1bWVudHMmIG90aGVyKSBjb25z
dApAQCAtMTEyLDYgKzExNCw3IEBAIHN0cnVjdCBWaWV3cG9ydEFyZ3VtZW50cyB7CiAgICAgICAg
ICAgICAmJiB1c2VyWm9vbSA9PSBvdGhlci51c2VyWm9vbQogICAgICAgICAgICAgJiYgb3JpZW50
YXRpb24gPT0gb3RoZXIub3JpZW50YXRpb24KICAgICAgICAgICAgICYmIHNocmlua1RvRml0ID09
IG90aGVyLnNocmlua1RvRml0CisgICAgICAgICAgICAmJiBjbGlwVG9Eb2N1bWVudCA9PSBvdGhl
ci5jbGlwVG9Eb2N1bWVudAogICAgICAgICAgICAgJiYgd2lkdGhXYXNFeHBsaWNpdCA9PSBvdGhl
ci53aWR0aFdhc0V4cGxpY2l0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgK
aW5kZXggYjA4MGE5NTg5NTllNDU2NWNmMDJjN2Y0MDgwN2Y4YzQ0MDJmMDFmNy4uNzA1YzVhYTE0
NmU0YjE4NzhkOGE0NTVkM2U0YWViNDk4MTM4MDI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCkBAIC00NjYsNiArNDY2LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJl
cG9ydFByb2Nlc3NDUFVUaW1lKGludDY0X3QsIEFjdGl2aXR5U3RhdGVGb3JDUFVTYW1wbGluZykg
eyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ2xpcFRvRG9jdW1lbnQoYm9vbCkgeyB9
CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5DaHJvbWVDbGllbnQoKSB7IH0KIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYTc0ODc5NDY1OGJmNzU5ZDc0ZDUyYjIyZGRjMGU2
MWI2YmNkOGNlOS4uZTg0OWExMzdhOTk0ZDYxMjdlYTAzZDYxNjc2MzBiM2FhZmNiODg1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMjkyOSw2ICsyOTI5LDEwIEBAIHZvaWQgRnJh
bWVWaWV3OjplbmFibGVTcGVjdWxhdGl2ZVRpbGluZ0lmTmVlZGVkKCkKICAgICAgICAgbV9zcGVj
dWxhdGl2ZVRpbGluZ0VuYWJsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IGlmICghbV9jbGlwVG9Eb2N1bWVudCkgeworICAgICAgICBtX3NwZWN1bGF0aXZlVGlsaW5nRW5h
YmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKCFzaG91bGRFbmFi
bGVTcGVjdWxhdGl2ZVRpbGluZ0R1cmluZ0xvYWRpbmcoKnRoaXMpKQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKG1fc3BlY3VsYXRpdmVUaWxpbmdFbmFibGVUaW1lci5pc0FjdGl2ZSgpKQpAQCAt
MzIyNSw5ICszMjI5LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUJhY2tncm91bmRSZWN1cnNp
dmVseShjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBib29sIHQKIAogYm9vbCBGcmFtZVZp
ZXc6Omhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpIGNvbnN0CiB7Ci0gICAg
aWYgKCFmcmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2Uo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tp
bmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKTsKICAgICBpZiAoIXRpbGVkQmFja2luZykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI0NiwxMSArMzI0Nyw4IEBAIHZvaWQgRnJhbWVWaWV3Ojp1
cGRhdGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKQogCiBGcmFtZVZpZXc6OkV4dGVuZGVk
QmFja2dyb3VuZE1vZGUgRnJhbWVWaWV3OjpjYWxjdWxhdGVFeHRlbmRlZEJhY2tncm91bmRNb2Rl
KCkgY29uc3QKIHsKLSAgICAvLyBKdXN0IGJlY2F1c2UgU2V0dGluZ3M6OmJhY2tncm91bmRTaG91
bGRFeHRlbmRCZXlvbmRQYWdlKCkgaXMgdHJ1ZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuCi0g
ICAgLy8gdGhhdCB0aGUgYmFja2dyb3VuZCByZWN0IG5lZWRzIHRvIGJlIGV4dGVuZGVkIGZvciBw
YWludGluZy4gU2ltcGxlIGJhY2tncm91bmRzIGNhbiBiZSBleHRlbmRlZAotICAgIC8vIGp1c3Qg
d2l0aCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldFJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xv
cigpLiBNb3JlIGNvbXBsaWNhdGVkIGJhY2tncm91bmRzLAotICAgIC8vIHN1Y2ggYXMgaW1hZ2Vz
LCByZXF1aXJlIGV4dGVuZGluZyB0aGUgYmFja2dyb3VuZCByZWN0IHRvIGNvbnRpbnVlIHBhaW50
aW5nIGludG8gdGhlIGV4dGVuZGVkCi0gICAgLy8gcmVnaW9uLiBUaGlzIGZ1bmN0aW9uIGZpbmRz
IG91dCBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gZXh0ZW5kIHRoZSBiYWNrZ3JvdW5kIHJlY3QgZm9y
IHBhaW50aW5nLgorICAgIGlmICghbV9jbGlwVG9Eb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIEV4
dGVuZGVkQmFja2dyb3VuZE1vZGVBbGw7CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzE2MjAxMzczPgpAQCAtMzI1OSw2ICszMjU3LDEyIEBAIEZyYW1lVmlldzo6
RXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFja2dy
b3VuZE1vZGUoKSBjCiAgICAgaWYgKCFmcmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3Vs
ZEV4dGVuZEJleW9uZFBhZ2UoKSkKICAgICAgICAgcmV0dXJuIEV4dGVuZGVkQmFja2dyb3VuZE1v
ZGVOb25lOwogCisgICAgLy8gSnVzdCBiZWNhdXNlIFNldHRpbmdzOjpiYWNrZ3JvdW5kU2hvdWxk
RXh0ZW5kQmV5b25kUGFnZSgpIGlzIHRydWUgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbgorICAg
IC8vIHRoYXQgdGhlIGJhY2tncm91bmQgcmVjdCBuZWVkcyB0byBiZSBleHRlbmRlZCBmb3IgcGFp
bnRpbmcuIFNpbXBsZSBiYWNrZ3JvdW5kcyBjYW4gYmUgZXh0ZW5kZWQKKyAgICAvLyBqdXN0IHdp
dGggUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRSb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3Io
KS4gTW9yZSBjb21wbGljYXRlZCBiYWNrZ3JvdW5kcywKKyAgICAvLyBzdWNoIGFzIGltYWdlcywg
cmVxdWlyZSBleHRlbmRpbmcgdGhlIGJhY2tncm91bmQgcmVjdCB0byBjb250aW51ZSBwYWludGlu
ZyBpbnRvIHRoZSBleHRlbmRlZAorICAgIC8vIHJlZ2lvbi4gVGhpcyBmdW5jdGlvbiBmaW5kcyBv
dXQgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGV4dGVuZCB0aGUgYmFja2dyb3VuZCByZWN0IGZvciBw
YWludGluZy4KKwogICAgIGlmICghZnJhbWUoKS5pc01haW5GcmFtZSgpKQogICAgICAgICByZXR1
cm4gRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZU5vbmU7CiAKQEAgLTMyODgsOSArMzI5Miw2IEBAIEZy
YW1lVmlldzo6RXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVu
ZGVkQmFja2dyb3VuZE1vZGUoKSBjCiAKIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVUaWxlc0ZvckV4
dGVuZGVkQmFja2dyb3VuZE1vZGUoRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBtb2RlKQogewotICAg
IGlmICghZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdl
KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlz
LT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm47CkBA
IC0zMzM1LDYgKzMzMzYsMzAgQEAgSW50UmVjdCBGcmFtZVZpZXc6OmV4dGVuZGVkQmFja2dyb3Vu
ZFJlY3RGb3JQYWludGluZygpIGNvbnN0CiAgICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0KGV4dGVu
ZGVkUmVjdCk7CiB9CiAKK3ZvaWQgRnJhbWVWaWV3OjpzZXRDbGlwVG9Eb2N1bWVudChib29sIGNs
aXBUb0RvY3VtZW50KQoreworICAgIGlmICghZnJhbWUoKS5pc01haW5GcmFtZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9jbGlwVG9Eb2N1bWVudCA9PSBjbGlwVG9Eb2N1bWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGlwVG9Eb2N1bWVudCA9IGNsaXBUb0RvY3VtZW50
OworCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+
Y2hyb21lKCkuY2xpZW50KCkuZGlkQ2hhbmdlQ2xpcFRvRG9jdW1lbnQoY2xpcFRvRG9jdW1lbnQp
OworCisgICAgdXBkYXRlRXh0ZW5kQmFja2dyb3VuZElmTmVjZXNzYXJ5KCk7CisgICAgYWRqdXN0
VGlsZWRCYWNraW5nQ292ZXJhZ2UoKTsKKworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0
aGlzLT5yZW5kZXJWaWV3KCk7CisgICAgaWYgKCFyZW5kZXJWaWV3KQorICAgICAgICByZXR1cm47
CisKKyAgICBSZW5kZXJMYXllckNvbXBvc2l0b3ImIGNvbXBvc2l0b3IgPSByZW5kZXJWaWV3LT5j
b21wb3NpdG9yKCk7CisgICAgY29tcG9zaXRvci51cGRhdGVSb290Q29udGVudExheWVyQ2xpcHBp
bmcoKTsKK30KKwogYm9vbCBGcmFtZVZpZXc6OnNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9zaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCmluZGV4IDI2MzZkNGJhMzFkYjVjOTA4ODZmOGE5MzJjYTc1OTJhZGY4
OTc4ZDQuLmVkZDkzMGJhYWZlNzYwMzMzODFiOGIzNmQ3N2ZjZGQzYmM4YjFiOTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuaApAQCAtMjEzLDYgKzIxMyw5IEBAIHB1YmxpYzoKICAgICBib29sIGhh
c0V4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpIGNvbnN0OwogICAgIEludFJlY3Qg
ZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3Q7CiAKKyAgICBib29sIGNs
aXBUb0RvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwVG9Eb2N1bWVudDsgfQorICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2xpcFRvRG9jdW1lbnQoYm9vbCk7CisKICAgICBib29sIHNo
b3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbihib29sKTsKICAgICBib29sIHNob3VsZFVw
ZGF0ZSgpIGNvbnN0OwpAQCAtODEwLDYgKzgxMyw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1f
bmVlZHNEZWZlcnJlZFNjcm9sbGJhcnNVcGRhdGUgeyBmYWxzZSB9OwogCisgICAgYm9vbCBtX2Ns
aXBUb0RvY3VtZW50IHsgdHJ1ZSB9OworCiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fbWFp
bnRhaW5TY3JvbGxQb3NpdGlvbkFuY2hvcjsKIAogICAgIC8vIFJlbmRlcmVyIHRvIGhvbGQgb3Vy
IGN1c3RvbSBzY3JvbGwgY29ybmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9W
aWV3cG9ydENvbmZpZ3VyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENv
bmZpZ3VyYXRpb24uY3BwCmluZGV4IDgwNWM2ZTBjY2U1N2RlOWRkZjdlOWNlZjIyNmQ4ZTEwMDg4
OTFmZDUuLjgzY2ZlOTUzYzc3MzRjMzg2Yjk5N2IzZGE2OTIwMjlhMTAyNThkMjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHAKQEAgLTMzNiw2ICsz
MzYsOSBAQCB2b2lkIFZpZXdwb3J0Q29uZmlndXJhdGlvbjo6dXBkYXRlQ29uZmlndXJhdGlvbigp
CiAKICAgICBpZiAoYm9vbGVhblZpZXdwb3J0QXJndW1lbnRJc1NldChtX3ZpZXdwb3J0QXJndW1l
bnRzLnNocmlua1RvRml0KSkKICAgICAgICAgbV9jb25maWd1cmF0aW9uLmFsbG93c1Nocmlua1Rv
Rml0ID0gbV92aWV3cG9ydEFyZ3VtZW50cy5zaHJpbmtUb0ZpdCAhPSAwLjsKKworICAgIGlmIChi
b29sZWFuVmlld3BvcnRBcmd1bWVudElzU2V0KG1fdmlld3BvcnRBcmd1bWVudHMuY2xpcFRvRG9j
dW1lbnQpKQorICAgICAgICBtX2NvbmZpZ3VyYXRpb24uY2xpcFRvRG9jdW1lbnQgPSBtX3ZpZXdw
b3J0QXJndW1lbnRzLmNsaXBUb0RvY3VtZW50ICE9IDAuOwogfQogCiBkb3VibGUgVmlld3BvcnRD
b25maWd1cmF0aW9uOjp2aWV3cG9ydEFyZ3VtZW50c0xlbmd0aChkb3VibGUgbGVuZ3RoKSBjb25z
dApAQCAtNDM5LDYgKzQ0Miw3IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFZpZXdwb3J0Q29uZmlndXJhdGlvbjo6UGFyYW1ldGVycyYKICAgICB0cy5kdW1w
UHJvcGVydHkoIm1heGltdW1TY2FsZSIsIHBhcmFtZXRlcnMubWF4aW11bVNjYWxlKTsKICAgICB0
cy5kdW1wUHJvcGVydHkoImFsbG93c1VzZXJTY2FsaW5nIiwgcGFyYW1ldGVycy5hbGxvd3NVc2Vy
U2NhbGluZyk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJhbGxvd3NTaHJpbmtUb0ZpdCIsIHBhcmFt
ZXRlcnMuYWxsb3dzU2hyaW5rVG9GaXQpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2xpcFRvRG9j
dW1lbnQiLCBwYXJhbWV0ZXJzLmNsaXBUb0RvY3VtZW50KTsKIAogICAgIHJldHVybiB0czsKIH0K
QEAgLTQ3Miw2ICs0NzYsNyBAQCBDU3RyaW5nIFZpZXdwb3J0Q29uZmlndXJhdGlvbjo6ZGVzY3Jp
cHRpb24oKSBjb25zdAogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcHV0ZWQgbGF5b3V0IHNpemUi
LCBsYXlvdXRTaXplKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaWdub3JpbmcgaG9yaXpvbnRh
bCBzY2FsaW5nIGNvbnN0cmFpbnRzIiwgc2hvdWxkSWdub3JlSG9yaXpvbnRhbFNjYWxpbmdDb25z
dHJhaW50cygpID8gInRydWUiIDogImZhbHNlIik7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpZ25v
cmluZyB2ZXJ0aWNhbCBzY2FsaW5nIGNvbnN0cmFpbnRzIiwgc2hvdWxkSWdub3JlVmVydGljYWxT
Y2FsaW5nQ29uc3RyYWludHMoKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiY2xpcCB0byBkb2N1bWVudCIsIGNsaXBUb0RvY3VtZW50KCkgPyAidHJ1ZSIgOiAiZmFs
c2UiKTsKICAgICAKICAgICB0cy5lbmRHcm91cCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9W
aWV3cG9ydENvbmZpZ3VyYXRpb24uaAppbmRleCBiNzJjMGJmYTlkNjcwNzkxYTI5MTI5YTM1NjU5
YzA4YTZjNjQ3NzIxLi43MmFhZGUxMmNkMzMxZjI2M2FhYThjZWJlYTU5YjUyMTE1ZmMxZTFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmgKQEAgLTUwLDYg
KzUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtYXhpbXVtU2NhbGUoMCkKICAgICAgICAg
ICAgICwgYWxsb3dzVXNlclNjYWxpbmcoZmFsc2UpCiAgICAgICAgICAgICAsIGFsbG93c1Nocmlu
a1RvRml0KGZhbHNlKQorICAgICAgICAgICAgLCBjbGlwVG9Eb2N1bWVudCh0cnVlKQogICAgICAg
ICAgICAgLCB3aWR0aElzU2V0KGZhbHNlKQogICAgICAgICAgICAgLCBoZWlnaHRJc1NldChmYWxz
ZSkKICAgICAgICAgICAgICwgaW5pdGlhbFNjYWxlSXNTZXQoZmFsc2UpCkBAIC02Myw2ICs2NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgZG91YmxlIG1heGltdW1TY2FsZTsKICAgICAgICAgYm9vbCBh
bGxvd3NVc2VyU2NhbGluZzsKICAgICAgICAgYm9vbCBhbGxvd3NTaHJpbmtUb0ZpdDsKKyAgICAg
ICAgYm9vbCBjbGlwVG9Eb2N1bWVudDsKIAogICAgICAgICBib29sIHdpZHRoSXNTZXQ7CiAgICAg
ICAgIGJvb2wgaGVpZ2h0SXNTZXQ7CkBAIC05NSw2ICs5Nyw3IEBAIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGFsbG93c1VzZXJTY2FsaW5nKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCBhbGxvd3NVc2VyU2NhbGluZ0lnbm9yaW5nQWx3YXlzU2NhbGFibGUoKSBjb25z
dDsKICAgICBib29sIGFsbG93c1Nocmlua1RvRml0KCkgY29uc3Q7CisgICAgYm9vbCBjbGlwVG9E
b2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5jbGlwVG9Eb2N1bWVudDsg
fQogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhcmFtZXRlcnMgd2VicGFnZVBhcmFtZXRl
cnMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFyYW1ldGVycyB0ZXh0RG9jdW1lbnRQ
YXJhbWV0ZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCmluZGV4IDJkNjExNjlkNjg5MWNlNjUyY2U5OTU2OTJiYjcxMzExMzNm
OTdhZWQuLmZjNTY3MzFlMTA3ZDU3MzE3N2Y3Yzc4MTg4NTZhMTI2ZWM3NmVmZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBA
IC05NTksNiArOTU5LDExIEBAIHN0YXRpYyBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJl
ckZvckNvbXBvc2l0aW5nVGVzdHMoY29uc3QgUmVuZGVyTGF5ZXImIGxhCiAgICAgcmV0dXJuICpy
ZW5kZXJlcjsKIH0KIAordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVJvb3RDb250
ZW50TGF5ZXJDbGlwcGluZygpCit7CisgICAgbV9yb290Q29udGVudExheWVyLT5zZXRNYXNrc1Rv
Qm91bmRzKCFtX3JlbmRlclZpZXcuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5
b25kUGFnZSgpICYmIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5jbGlwVG9Eb2N1bWVudCgpKTsK
K30KKwogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5
ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnQgc2hvdWxkUmVwYWludCwgQmFja2lu
Z1JlcXVpcmVkIGJhY2tpbmdSZXF1aXJlZCkKIHsKICAgICBib29sIGxheWVyQ2hhbmdlZCA9IGZh
bHNlOwpAQCAtOTkwLDggKzk5NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRh
dGVCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgQ29tcG9zaXRpbmdDaGFuZ2VSCiAgICAgICAg
ICAgICAgICAgdXBkYXRlTGF5ZXJGb3JIZWFkZXIocGFnZSgpLmhlYWRlckhlaWdodCgpKTsKICAg
ICAgICAgICAgICAgICB1cGRhdGVMYXllckZvckZvb3RlcihwYWdlKCkuZm9vdGVySGVpZ2h0KCkp
OwogI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKG1fcmVuZGVyVmlldy5zZXR0aW5ncygpLmJh
Y2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1f
cm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgICAgICAgICAg
ICAgdXBkYXRlUm9vdENvbnRlbnRMYXllckNsaXBwaW5nKCk7CiAKICAgICAgICAgICAgICAgICBp
ZiAoVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSBsYXllci5iYWNraW5nKCktPnRpbGVkQmFj
a2luZygpKQogICAgICAgICAgICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNldFRvcENvbnRlbnRJ
bnNldChtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudG9wQ29udGVudEluc2V0KCkpOwpAQCAtMzM0
Myw3ICszMzQ3LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXll
cigpCiAjZW5kaWYKIAogICAgICAgICAvLyBOZWVkIHRvIGNsaXAgdG8gcHJldmVudCB0cmFuc2Zv
cm1lZCBjb250ZW50IHNob3dpbmcgb3V0c2lkZSB0aGlzIGZyYW1lCi0gICAgICAgIG1fcm9vdENv
bnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKyAgICAgICAgdXBkYXRlUm9vdENv
bnRlbnRMYXllckNsaXBwaW5nKCk7CiAgICAgfQogCiAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsTGF5
ZXIoZXhwZWN0ZWRBdHRhY2htZW50KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDg3M2MwNDQ5ZmQxNWVkNmYzNzJjYTNkNWFh
NDE0YzRjOTdkMTUzY2YuLjIwNGVhYTMxMzI5ZDQ3OWU3ZDFiNzQ1Y2FkOTJlNWUzN2Y4OGZlNjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgKQEAgLTMxMyw2ICszMTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSb290RXh0ZW5kZWRC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBjb25zdCBDb2xvciYgcm9vdEV4dGVu
ZGVkQmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9yb290RXh0ZW5kZWRCYWNrZ3Jv
dW5kQ29sb3I7IH0KIAorICAgIHZvaWQgdXBkYXRlUm9vdENvbnRlbnRMYXllckNsaXBwaW5nKCk7
CisKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25h
cFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KGNvbnN0IEZyYW1lVmlldyYpOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDEx
ODc3Y2IzMDZiMzllN2QxN2FkNzdhZjdlMmNlMzRiMTZjMGUxMDUuLmYzODJjYWQ1NjNlYTBkNDA0
ZTBlODAyY2ViOWI2Mzc1OTNhNDhjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC00MjYwLDYgKzQyNjAsMTEgQEAgLSAoQk9PTClf
aXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAogICAgIHJldHVybiBfcGFnZS0+aXNT
aG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpOwogfQogCistIChCT09MKV9jb250ZW50
TWF5RHJhd0luT2JzY3VyZWRJbnNldHMKK3sKKyAgICByZXR1cm4gIV9wYWdlLT5jbGlwVG9Eb2N1
bWVudCgpOworfQorCiAtIChfV0tMYXlvdXRNb2RlKV9sYXlvdXRNb2RlCiB7CiAjaWYgUExBVEZP
Uk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlld1ByaXZhdGUuaAppbmRleCAyODI3NWMzZGZhMGJkOTNlZjQyMzQzNzA0NDU5OTA2Yzk5
NzZkZjYzLi4zNTE2NjczNWM0OTBlZTgwOWQwNTczN2I1YjAxOTZjNTM1MjhmZTQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZh
dGUuaApAQCAtMTQzLDYgKzE0Myw4IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0lt
bWVkaWF0ZUFjdGlvblR5cGUpIHsKIC8vIERlZmluZSB0aGUgaW5zZXQgb2YgdGhlIHNjcm9sbHZp
ZXcgdW51c2FibGUgYnkgdGhlIHdlYiBwYWdlLgogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRl
cj1fc2V0T2JzY3VyZWRJbnNldHM6KSBVSUVkZ2VJbnNldHMgX29ic2N1cmVkSW5zZXRzOwogCitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2NvbnRlbnRNYXlEcmF3SW5PYnNj
dXJlZEluc2V0czsKKwogLy8gT3ZlcnJpZGUgdGhlIGludGVyZmFjZSBvcmllbnRhdGlvbi4gQ2xp
ZW50cyB1c2luZyBfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVzOiBtdXN0IHVwZGF0ZSB0
aGUgaW50ZXJmYWNlIG9yaWVudGF0aW9uCiAvLyBpbiB0aGUgdXBkYXRlIGJsb2NrLgogQHByb3Bl
cnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0SW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTop
IFVJSW50ZXJmYWNlT3JpZW50YXRpb24gX2ludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1w
bC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaApp
bmRleCA4YzU3NzZmMzQyOGY2YmIwZDE5OWFhYWU4ZTAyNjYwMDcwNGFjZTEwLi5lOTJlNDgyMDIy
Mjg2NGQ5NzkwY2U3OWQwNTgxZTkyYjA4MTdlMzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTE0Niw2ICsxNDYsOCBAQCBw
cml2YXRlOgogCiAgICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gV2ViQ29yZTo6VXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRSOyB9CiAKKyAgICB2b2lkIGRpZENoYW5nZUNs
aXBUb0RvY3VtZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQpIG92ZXJyaWRlIHsgfQorCiAgICAgLy8g
TWVtYmVycyBvZiBQYWdlQ2xpZW50SW1wbCBjbGFzcwogICAgIEd0a1dpZGdldCogbV92aWV3V2lk
Z2V0OwogICAgIERlZmF1bHRVbmRvQ29udHJvbGxlciBtX3VuZG9Db250cm9sbGVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggYjU2ZGViZjUzYjE1YjY0NDgwZWM2NDhl
N2Y3N2U2OTkxNGMwOTI0Yy4uYTg1NWM1MDc3ZThlZDMwNWQ4MzJhM2Y2OTMxNzBhMjY4YjEyZDIz
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC0zODYsNiArMzg2LDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDb25jbHVkZUVkaXREYXRhSW50ZXJhY3Rp
b24oc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YT4pID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlRGF0YUludGVyYWN0aW9uQ2FyZXRSZWN0KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHByZXZpb3VzQ2FyZXRSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
YXJldFJlY3QpID0gMDsKICNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNsaXBU
b0RvY3VtZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBh
ZTc4NmVjYTlhMGJkMjk1OTJhNTVhMWYwYmM4ZThjMjg0YTAzNTQzLi42NDU1NDNlY2NiMDQ1ZjI3
MGUwN2M1M2UwNTMxN2JkNjNmMmY2ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcApAQCAtNTQ1Nyw2ICs1NDU3LDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJl
c2V0U3RhdGUoUmVzZXRTdGF0ZVJlYXNvbiByZXNldFN0YXRlUmVhc29uKQogI2lmIEVOQUJMRShQ
T0lOVEVSX0xPQ0spCiAgICAgcmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKICNlbmRpZgorCisgICAg
bV9jbGlwVG9Eb2N1bWVudCA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpyZXNldFN0
YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKCkKQEAgLTY4ODAsNCArNjg4MiwxMSBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c3RvcFVSTFNjaGVtZUhhbmRsZXJUYXNrKHVpbnQ2NF90IGhhbmRsZXJJZGVudGlm
aWVyLCB1aW50NjRfdAogICAgIGl0ZXJhdG9yLT52YWx1ZS0+c3RvcFRhc2soKnRoaXMsIHJlc291
cmNlSWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRDbGlwVG9Eb2N1bWVu
dChib29sIGNsaXBUb0RvY3VtZW50KQoreworICAgIG1fY2xpcFRvRG9jdW1lbnQgPSBjbGlwVG9E
b2N1bWVudDsKKworICAgIG1fcGFnZUNsaWVudC5kaWRDaGFuZ2VDbGlwVG9Eb2N1bWVudChjbGlw
VG9Eb2N1bWVudCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDA1OGM1OWJmODhlMmYyNDA5NzIwYTljZWMzYjE0
YjI2MjdiNjBmNWIuLmZhNDYwMWZmZTlmM2Q3ZmY3ODlkZjc2YWU2MTEzOTdiNTI5ZDEzNWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTExOTEsNiArMTE5MSw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVSTFNjaGVtZUhhbmRsZXJGb3JTY2hlbWUoUmVmPFdl
YlVSTFNjaGVtZUhhbmRsZXI+JiYsIGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKICAgICBXZWJVUkxT
Y2hlbWVIYW5kbGVyKiB1cmxTY2hlbWVIYW5kbGVyRm9yU2NoZW1lKGNvbnN0IFN0cmluZyYgc2No
ZW1lKTsKIAorICAgIHZvaWQgc2V0Q2xpcFRvRG9jdW1lbnQoYm9vbCk7CisgICAgYm9vbCBjbGlw
VG9Eb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFRvRG9jdW1lbnQ7IH0KKwogcHJpdmF0
ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYsIFdlYlByb2Nlc3NQcm94eSYsIHVpbnQ2
NF90IHBhZ2VJRCwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogICAgIHZvaWQgcGxh
dGZvcm1Jbml0aWFsaXplKCk7CkBAIC0xOTc2LDcgKzE5NzksOSBAQCBwcml2YXRlOgogI2VuZGlm
CiAKICAgICBib29sIG1faXNVc2luZ0hpZ2hQZXJmb3JtYW5jZVdlYkdMIHsgZmFsc2UgfTsKLSAg
ICAgICAgCisKKyAgICBib29sIG1fY2xpcFRvRG9jdW1lbnQgeyB0cnVlIH07CisKICAgICBXZWFr
UHRyRmFjdG9yeTxXZWJQYWdlUHJveHk+IG1fd2Vha1B0ckZhY3Rvcnk7CiAKICAgICBIYXNoTWFw
PFN0cmluZywgUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+PiBtX3VybFNjaGVtZUhhbmRsZXJzQnlT
Y2hlbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgppbmRleCBmNmM1NGM3MTYyNmJkNWZlMTgxMDNjNTUyMzFmYjc4MTk0YWY3Yjg2Li4z
OGU3MDE5YzI5MjQzNmRkYjA5YmFmZjIzOTBhNTlhNGQ4MmYzMmY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTQ5NCw0ICs0
OTQsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgU3RhcnRVUkxTY2hlbWVI
YW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlk
ZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KQogICAgIFN0b3BVUkxT
Y2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNv
dXJjZUlkZW50aWZpZXIpCisKKyAgICBTZXRDbGlwVG9Eb2N1bWVudChib29sIGNsaXBUb0RvY3Vt
ZW50KQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1w
bElPUy5oCmluZGV4IDUyMWUxZGQ4MWEyM2IyYjI5YWMyMjE4YzM3YTFhNThhNzZiMjhkYWEuLjQ3
YmZhNWI3NDhjYzA5ZDI1ZTQwOGMwZGRjYzYzMmZmYjczYmJhOTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKQEAgLTE5OCw2ICsxOTgs
OCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBoYW5kbGVBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbklu
Zm9SZXNwb25zZShib29sIGhhc0FjdGl2ZVNlc3Npb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGRv
dWJsZSBkdXJhdGlvbiwgZG91YmxlIGVsYXBzZWRUaW1lKSBvdmVycmlkZTsKIAorICAgIHZvaWQg
ZGlkQ2hhbmdlQ2xpcFRvRG9jdW1lbnQoYm9vbCBjbGlwVG9Eb2N1bWVudCkgb3ZlcnJpZGU7CisK
ICNpZiBVU0UoUVVJQ0tfTE9PSykKICAgICB2b2lkIHJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9v
a0RvY3VtZW50KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25z
dCBTdHJpbmcmKT4mJikgb3ZlcnJpZGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IGI5NmNkMmUyNzhmMTU0MGNl
NjFkNDk3NTVhZmM5OTFmYTE4YjcyZTAuLjIzNGZhMmI2YjJjNGQ2OWFiNDgwOGZkNGZhNzE5OWEz
YjFhZTI0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNs
aWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5tbQpAQCAtODIxLDYgKzgyMSwxMSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpy
ZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudChjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LAogfQogI2VuZGlmCiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENoYW5nZUNsaXBUb0RvY3Vt
ZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQpCit7CisgICAgW21fd2ViVmlldyBfc2NoZWR1bGVWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGVdOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlldy5tbQppbmRleCAzOWIwMGFjMmExZjJmZTAxOTU4MWZiZDlhNWRjZjkzZmFlMGNh
NTFlLi4yNjUzZWY1MzU1MjI0OTIxODNhZTMyNzI3MjJmZWEyZTNmNzk4NTYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC0zNjAsNiArMzYw
LDcgQEAgLSAodm9pZCl1cGRhdGVGaXhlZENsaXBwaW5nVmlldzooRmxvYXRSZWN0KWZpeGVkUG9z
aXRpb25SZWN0Rm9yVUkKIAogICAgIFtfZml4ZWRDbGlwcGluZ1ZpZXcgc2V0Q2VudGVyOmNsaXBw
aW5nQm91bmRzLmxvY2F0aW9uKCldOyAvLyBOb3QgcmVhbGx5IHRoZSBjZW50ZXIgc2luY2Ugd2Ug
c2V0IGFuIGFuY2hvciBwb2ludC4KICAgICBbX2ZpeGVkQ2xpcHBpbmdWaWV3IHNldEJvdW5kczpj
bGlwcGluZ0JvdW5kc107CisgICAgW19maXhlZENsaXBwaW5nVmlldyBsYXllcl0ubWFza3NUb0Jv
dW5kcyA9IF9wYWdlLT5jbGlwVG9Eb2N1bWVudCgpOwogfQogCiAtICh2b2lkKV9kaWRFeGl0U3Rh
YmxlU3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwu
aAppbmRleCAzY2I2Y2E4YWE2ZjNhMTlhZjU4Zjg0NTA3MGNhM2JmNWVlNDRiZDU5Li5jOTAxZDVm
ZDFhZTU1ZGJmMDgwMzY2MGYyNDhjNGJmODlkYmVlMDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCkBAIC0yNTEsNiArMjUxLDggQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkgb3ZlcnJpZGU7CiAgICAg
Ym9vbCB3aW5kb3dJc0Zyb250V2luZG93VW5kZXJNb3VzZShjb25zdCBOYXRpdmVXZWJNb3VzZUV2
ZW50Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb0RvY3VtZW50KGJvb2wg
Y2xpcFRvRG9jdW1lbnQpIG92ZXJyaWRlIHsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggMTRjMWU0NjYxMjYzYjFkMWRlMDkyMDY4YWRj
OWQwZGI2ZDA5ZDBiYy4uYzJmZmFlNWM5ODRlNjY0YzE2NzQxZjM2NjEwN2NjM2UyN2RhNjEwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTIyMiw0ICsxMjIyLDkgQEAgdm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmRpZEludmFsaWRhdGVEb2N1bWVudE1hcmtlclJlY3RzKCkKICAgICBtX3Bh
Z2UuZmluZENvbnRyb2xsZXIoKS5kaWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJrZXJSZWN0cygpOwog
fQogCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkQ2hhbmdlQ2xpcFRvRG9jdW1lbnQoYm9vbCBj
bGlwVG9Eb2N1bWVudCkKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpTZXRDbGlwVG9Eb2N1bWVudChjbGlwVG9Eb2N1bWVudCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGE1MTRiMjk5NDg4ODQyYmNmOTI0NTg5
MTNiMDM3OWIzZWFmOWViYWUuLmFhYjE2ZWIzYzZmODYwY2Y4MDFlYWNjYTI3MDdhNDg1Yzg2MjYx
OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMzQwLDYgKzM0MCw4IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIGRpZEludmFsaWRhdGVEb2N1bWVudE1hcmtlclJlY3RzKCkgZmluYWw7CiAKKyAg
ICB2b2lkIGRpZENoYW5nZUNsaXBUb0RvY3VtZW50KGJvb2wpIGZpbmFsOworCiAgICAgU3RyaW5n
IG1fY2FjaGVkVG9vbFRpcDsKICAgICBtdXRhYmxlIFJlZlB0cjxXZWJGcmFtZT4gbV9jYWNoZWRG
cmFtZVNldExhcmdlc3RGcmFtZTsKICAgICBtdXRhYmxlIGJvb2wgbV9jYWNoZWRNYWluRnJhbWVI
YXNIb3Jpem9udGFsU2Nyb2xsYmFyIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCA2ODA4ZWI0YjY3NTgy
YTlkZTg4YjRmZGE3ZGJlNzBjZWZlNTMzN2Y4Li5kMzBiNTU0NmM1YjdkNmE1ZWZhOTliZGY0ZGY1
ZDMzZWEzYmZlZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0zMDQ1LDYgKzMwNDUsOCBAQCB2b2lkIFdlYlBhZ2U6
OnZpZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQoKQogICAgIHVwZGF0ZVZpZXdwb3J0U2l6ZUZv
ckNTU1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gKm1haW5G
cmFtZVZpZXcoKTsKKyAgICBmcmFtZVZpZXcuc2V0Q2xpcFRvRG9jdW1lbnQobV92aWV3cG9ydENv
bmZpZ3VyYXRpb24uY2xpcFRvRG9jdW1lbnQoKSk7CisKICAgICBJbnRQb2ludCBzY3JvbGxQb3Np
dGlvbiA9IGZyYW1lVmlldy5zY3JvbGxQb3NpdGlvbigpOwogICAgIGlmICghbV9oYXNSZWNlaXZl
ZFZpc2libGVDb250ZW50UmVjdHNBZnRlckRpZENvbW1pdExvYWQpIHsKICAgICAgICAgRmxvYXRT
aXplIG1pbmltdW1MYXlvdXRTaXplSW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMgPSBtX3ZpZXdwb3J0
Q29uZmlndXJhdGlvbi5taW5pbXVtTGF5b3V0U2l6ZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDVjNjA5MWNlYjVkOWY3Y2M3NGMxNTNiMTI1
MGZlZDQzOWE2MTlmOGMuLjFlMmM1NmI2YTQwZjA3MmUzMTg1MTcwMjIzYjZjYWRiOTY3OGI2Mzkg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxNy0wNC0xMiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxl
LmNvbT4KKworICAgICAgICBQcm92aWRlIGEgdmlld3BvcnQgcGFyYW1ldGVyIHRvIGRpc2FibGUg
Y2xpcHBpbmcgdG8gdGhlIGRvY3VtZW50IHJlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc2NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE1
NjQ2MzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAo
V1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKToKKyAgICAgICAgKiBU
ZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xs
ZXIuaWRsOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2Ny
aXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6c2V0
T2JzY3VyZWRJbnNldHMpOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250
ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9z
L1Rlc3RDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1SZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlVJU2Ny
aXB0Q29udHJvbGxlcjo6c2V0T2JzY3VyZWRJbnNldHMpOgorICAgICAgICBBZGQgYSBVSVNjcmlw
dENvbnRyb2xsZXIgbWVjaGFuaXNtIHRvIGluc3RhbGwgb2JzY3VyZWQgaW5zZXRzCisgICAgICAg
IG9uIHRoZSB3ZWIgdmlldy4KKwogMjAxNy0wNC0wNSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFy
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgd2Via2l0cHk6IEFkZCBwaWQgbG9nZ2luZyBmb3Igc2lt
dWxhdG9yIHByb2Nlc3NlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJ
U2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW0KaW5kZXggNDAzYjU5YjQxZDM1OTlkNThhMjM2NTk5Mzg4MjNmNjM3
MzgyNTcyNi4uYjBlMDRkZDY2YTkxM2Q2NmEwNGI5ZjhkMjhkMjc0ODU2NzFjZDZjNSAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBA
IC0zMTYsNiArMzE2LDEwIEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjphZGRWaWV3VG9XaW5k
b3coSlNWYWx1ZVJlZikKIHsKIH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1
cmVkSW5zZXRzKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKK3sKK30KKwogfQogCiAj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbCBiL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJv
bGxlci5pZGwKaW5kZXggZjY2YWUxNTIyZjUxNjE3MDdjYzdmMWY4NGQ0Yzg4MWE5MmRjMmJmMS4u
ZGJhNDU2ZWJjYjFlM2Y5ODdkODliMjc4NmVlNTNmYmRjOWFlMmFiYiAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250
cm9sbGVyLmlkbAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9C
aW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCkBAIC0yMzIsNCArMjMyLDYgQEAgaW50ZXJm
YWNlIFVJU2NyaXB0Q29udHJvbGxlciB7CiAgICAgdm9pZCBhZGRWaWV3VG9XaW5kb3cob2JqZWN0
IGNhbGxiYWNrKTsKIAogICAgIHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKERPTVN0cmluZyBwcmVm
ZXJlbmNlLCBET01TdHJpbmcgdmFsdWUpOworCisgICAgdm9pZCBzZXRPYnNjdXJlZEluc2V0cyhk
b3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KTsKIH07
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNj
cmlwdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRl
eHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA2MTJjOWUyOWYxZGEyNGUyMTg4NDY0MDVj
ODE0MjBlNmFiZGI4MjNmLi4wZjFmY2MxZDQ5ZjIxNmUzNWM3MWY4NmZhZjg4NmU4YWE0OTk3NTlj
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNj
cmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRD
b250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTM5OSw2ICszOTksMTAgQEAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IFVJU2NyaXB0Q29udHJvbGxlcjo6YWNjZXNzaWJpbGl0eVNwZWFr
U2VsZWN0aW9uQ29udGVudCgKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAordm9pZCBVSVNjcmlw
dENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwg
ZG91YmxlIGJvdHRvbSwgZG91YmxlIGxlZnQpCit7Cit9CisKICNlbmRpZgogCiAjaWYgIVBMQVRG
T1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENv
bnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAppbmRleCA0NmMyOGIxNDAxZGQ0NjQxNzY0
NGFhNzY2NzRjYWFjM2IxYmQ0Y2E5Li42NjI3Mzg4N2I5ZTZhYjk5MTZiNTlhOTE4OWEyMjFiMTA4
NGQ3YTMwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4
dC9VSVNjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaApAQCAtMTU2LDYgKzE1Niw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJlbW92ZVZpZXdGcm9tV2luZG93KEpTVmFsdWVSZWYpOwogICAgIHZvaWQg
YWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYpOwogCisgICAgdm9pZCBzZXRPYnNjdXJlZEluc2V0
cyhkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KTsK
KwogcHJpdmF0ZToKICAgICBVSVNjcmlwdENvbnRyb2xsZXIoVUlTY3JpcHRDb250ZXh0Jik7CiAg
ICAgCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxl
cklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1t
CmluZGV4IDdjMzUxZjgyZjg2N2JkYjdlMmQxMDI5OTNkNmEwMWZmMzU4YjYwNDIuLmEwZDExMmY1
NjMyNjQwYjRmNzJmMWU3MmZhOGY2YmM2YjkwMGUyYjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCkBAIC04NSw2ICs4NSw5IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAg
ICAgICAgIFtzY3JvbGxWaWV3IF9yZW1vdmVBbGxBbmltYXRpb25zOllFU107CiAgICAgICAgIFtz
Y3JvbGxWaWV3IHNldFpvb21TY2FsZToxIGFuaW1hdGVkOk5PXTsKICAgICAgICAgW3Njcm9sbFZp
ZXcgc2V0Q29udGVudE9mZnNldDpDR1BvaW50WmVyb107CisKKyAgICAgICAgc2Nyb2xsVmlldy5j
b250ZW50SW5zZXQgPSBVSUVkZ2VJbnNldHNaZXJvOworICAgICAgICB3ZWJWaWV3LT5wbGF0Zm9y
bVZpZXcoKS5fb2JzY3VyZWRJbnNldHMgPSBVSUVkZ2VJbnNldHNaZXJvOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVy
SU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9T
Lm1tCmluZGV4IGNlNjdmNWU1NDM5Zjg3Yzc1ZDljYTY1ZTI0NjRjZmVmZjZhMzhkZDYuLjU3YTE5
NTQ5ZDlkODkzZjJlMmQ4MjQyNjRjMTYwN2YzMGM1ZjJkYmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTY2OCw2ICs2
NjgsMTQgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtQ2xlYXJBbGxDYWxsYmFj
a3MoKQogICAgIHdlYlZpZXcuZGlkRW5kU2Nyb2xsaW5nQ2FsbGJhY2sgPSBuaWw7CiB9CiAKK3Zv
aWQgVUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3Vi
bGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KQoreworICAgIFVJRWRnZUluc2V0
cyBpbnNldHMgPSBVSUVkZ2VJbnNldHNNYWtlKHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCk7Cisg
ICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICB3ZWJWaWV3LnNjcm9sbFZp
ZXcuY29udGVudEluc2V0ID0gaW5zZXRzOworICAgIHdlYlZpZXcuX29ic2N1cmVkSW5zZXRzID0g
aW5zZXRzOworfQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjk4OGYx
MTE4NDc3Zjc5OGU1MWUyYzRhNmZiNzk0OTdlOTU2OWFhZi4uMDNmZTI4M2E0OThkZjlkNjNhZDI1
YzNmZDA4NzZmNWNjMDdjMmRmMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE3LTA0LTEyICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUg
YSB2aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgZG9jdW1lbnQg
cmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcw
NzY2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRpbGVkLWRyYXdpbmcvaW9zL3ZpZXdw
b3J0LWNsaXAtdG8tZG9jdW1lbnQtbm8tZ2V0cy1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLWRvY3Vt
ZW50LW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRpbGVkLWRy
YXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQteWVzLWdldHMtbm8tbWFyZ2luLXRp
bGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdGlsZWQtZHJhd2luZy9pb3Mvdmll
d3BvcnQtY2xpcC10by1kb2N1bWVudC15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbDogQWRk
ZWQuCisKIDIwMTctMDQtMDUgIEphdmllciBGZXJuYW5kZXogIDxqZmVybmFuZGV6QGlnYWxpYS5j
b20+CiAKICAgICAgICAgW2Nzcy1hbGlnbl0gSW1wbGVtZW50IHRoZSBwbGFjZS1pdGVtcyBzaG9y
dGhhbmQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0
LWNsaXAtdG8tZG9jdW1lbnQtbm8tZ2V0cy1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1kb2N1bWVudC1uby1n
ZXRzLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc1MGJkM2RhMDc0MzIy
MjFkOTQwYjFjMDEzOGRhMWQyZjg4MmRkNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQtbm8tZ2V0cy1tYXJn
aW4tdGlsZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjMgQEAKKyhHcmFwaGljc0xheWVyCisg
IChhbmNob3IgMC4wMCAwLjAwKQorICAoYm91bmRzIDMyMC4wMCA1NDguMDApCisgICh2aXNpYmxl
IHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1MzguMDApCisgIChjb3ZlcmFnZSByZWN0IC00MC4w
MCwgLTEwLjAwIDMyMC4wMCB4IDU0OC4wMCkKKyAgKGludGVyc2VjdHMgY292ZXJhZ2UgcmVjdCAx
KQorICAoY29udGVudHNTY2FsZSAyLjAwKQorICAoY2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xh
eWVyCisgICAgICAoYm91bmRzIDMyMC4wMCA1NDguMDApCisgICAgICAoY29udGVudHNPcGFxdWUg
MSkKKyAgICAgICh2aXNpYmxlIHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1MzguMDApCisgICAg
ICAoY292ZXJhZ2UgcmVjdCAtNDAuMDAsIC0xMC4wMCA1NzYuMDAgeCA4MDQuMDApCisgICAgICAo
aW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisgICAgICAoY29udGVudHNTY2FsZSAyLjAwKQor
ICAgICAgKHRpbGUgY2FjaGUgY292ZXJhZ2UgLTUxMiwgLTUxMiAxMzQ0IHggMTU3MikKKyAgICAg
ICh0aWxlIHNpemUgNTEyIHggNTQ4KQorICAgICAgKHRvcCBsZWZ0IHRpbGUgLTEsIC0xIHRpbGVz
IGdyaWQgMyB4IDMpCisgICAgICAoaW4gd2luZG93IDEpCisgICAgKQorICApCispCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9j
dW1lbnQtbm8tZ2V0cy1tYXJnaW4tdGlsZXMuaHRtbCBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdp
bmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQtbm8tZ2V0cy1tYXJnaW4tdGlsZXMuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NTM0ODRlZTgwYmYwNzI5NjE5ODI4ZGU1NzQzY2NjOTYyZGVjMGQxCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQt
Y2xpcC10by1kb2N1bWVudC1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sCkBAIC0wLDAgKzEsNDMg
QEAKKzwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxl
Vmlld3BvcnQ9dHJ1ZSBdIC0tPgorCis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIG5hbWU9InZp
ZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxlPTEsIGNsaXAtdG8tZG9jdW1lbnQ9bm8iPgor
ICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIGdldFVJU2NyaXB0KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICB1aUNvbnRyb2xsZXIuc2V0T2JzY3VyZWRJbnNldHMoMTAsIDIwLCAzMCwgNDApOwor
ICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5pbW1lZGlhdGVTY3JvbGxUb09mZnNldCgtNDAs
IC0xMCk7CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLmRvQWZ0ZXJWaXNpYmxlQ29udGVu
dFJlY3RVcGRhdGUoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xs
ZXIudWlTY3JpcHRDb21wbGV0ZSgpOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9
KSgpO2AKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAg
ICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICB0ZXN0UnVubmVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRvVGVzdCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoZ2V0VUlTY3Jp
cHQoKSwgZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRl
cm5hbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xh
eWVycycpLmlubmVyVGV4dCA9IGludGVybmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuTEFZRVJfVFJFRV9JTkNMVURFU19WSVNJ
QkxFX1JFQ1RTIHwgaW50ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVERVNfVElMRV9DQUNIRVMpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVh
ZD4KKworPGJvZHk+Cis8cHJlIGlkPSJsYXllcnMiPkxheWVyIHRyZWUgZ29lcyBoZXJlPC9wPgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9p
b3Mvdmlld3BvcnQtY2xpcC10by1kb2N1bWVudC15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10
by1kb2N1bWVudC15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjc1NDdjOTUyOWY4MDk5MTM3MTg4Zjg3YzM4ZDcwY2Y5MTBhM2ViYmYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLWRv
Y3VtZW50LXllcy1nZXRzLW5vLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwy
MyBAQAorKEdyYXBoaWNzTGF5ZXIKKyAgKGFuY2hvciAwLjAwIDAuMDApCisgIChib3VuZHMgMzIw
LjAwIDU0OC4wMCkKKyAgKHZpc2libGUgcmVjdCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkK
KyAgKGNvdmVyYWdlIHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1MzguMDApCisgIChpbnRlcnNl
Y3RzIGNvdmVyYWdlIHJlY3QgMSkKKyAgKGNvbnRlbnRzU2NhbGUgMi4wMCkKKyAgKGNoaWxkcmVu
IDEKKyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKGJvdW5kcyAzMjAuMDAgNTQ4LjAwKQorICAg
ICAgKGNvbnRlbnRzT3BhcXVlIDEpCisgICAgICAodmlzaWJsZSByZWN0IDAuMDAsIDAuMDAgMjgw
LjAwIHggNTM4LjAwKQorICAgICAgKGNvdmVyYWdlIHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1
MzguMDApCisgICAgICAoaW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisgICAgICAoY29udGVu
dHNTY2FsZSAyLjAwKQorICAgICAgKHRpbGUgY2FjaGUgY292ZXJhZ2UgMCwgMCAzMjAgeCA1NDgp
CisgICAgICAodGlsZSBzaXplIDUxMiB4IDU0OCkKKyAgICAgICh0b3AgbGVmdCB0aWxlIDAsIDAg
dGlsZXMgZ3JpZCAxIHggMSkKKyAgICAgIChpbiB3aW5kb3cgMSkKKyAgICApCisgICkKKykKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10
by1kb2N1bWVudC15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbCBiL0xheW91dFRlc3RzL3Rp
bGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQteWVzLWdldHMtbm8tbWFy
Z2luLXRpbGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Q0OGNmNTUxNDk0OTU0M2NjNDgxYTg3NDRlZjQ5
MGRiMjY2YTU0ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcv
aW9zL3ZpZXdwb3J0LWNsaXAtdG8tZG9jdW1lbnQteWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLmh0
bWwKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgdXNlRmxleGlibGVWaWV3cG9ydD10cnVlIF0gLS0+CisKKzxodG1sPgorPGhlYWQ+Cisg
ICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MSwgY2xpcC10
by1kb2N1bWVudD15ZXMiPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIGdldFVJU2Ny
aXB0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuc2V0T2JzY3VyZWRJbnNldHMo
MTAsIDIwLCAzMCwgNDApOworICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5pbW1lZGlhdGVT
Y3JvbGxUb09mZnNldCgtNDAsIC0xMCk7CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLmRv
QWZ0ZXJWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgICAgICB1aUNvbnRyb2xsZXIudWlTY3JpcHRDb21wbGV0ZSgpOworICAgICAgICAgICAgICAg
IH0pCisgICAgICAgICAgICB9KSgpO2AKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIGRvVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIucnVu
VUlTY3JpcHQoZ2V0VUlTY3JpcHQoKSwgZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2xheWVycycpLmlubmVyVGV4dCA9IGludGVybmFscy5sYXllclRyZWVB
c1RleHQoZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuTEFZRVJf
VFJFRV9JTkNMVURFU19WSVNJQkxFX1JFQ1RTIHwgaW50ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVE
RVNfVElMRV9DQUNIRVMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKyAg
ICA8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8cHJlIGlkPSJsYXllcnMiPkxheWVyIHRy
ZWUgZ29lcyBoZXJlPC9wPgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307025</attachid>
            <date>2017-04-13 14:32:11 -0700</date>
            <delta_ts>2017-04-14 16:12:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170766-20170413143210.patch</filename>
            <type>text/plain</type>
            <size>17216</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE0OTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjU0N2Y4MWM0MzYxZjRm
YjRhZjBkYjUzNTg5YjMxNjlkMThlZTgxNS4uMTAxMDZjY2MxZjkwYTU0OGJhYTk3NmYwNTJlMmY4
ODc0MmY1Y2U1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE3LTA0LTEyICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2
aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgZG9jdW1lbnQgcmVj
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzY2
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogdGlsZWQtZHJhd2luZy9pb3Mvdmll
d3BvcnQtY2xpcC10by1kb2N1bWVudC1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sLAorICAgICAg
ICAgICAgICAgdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1kb2N1bWVudC15ZXMt
Z2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbCwKKworICAgICAgICAqIGRvbS9WaWV3cG9ydEFyZ3Vt
ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6cmVzb2x2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRWaWV3cG9ydEZlYXR1cmUpOgorICAgICAgICAqIGRvbS9W
aWV3cG9ydEFyZ3VtZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6
Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0Q29uZmlndXJhdGlvbjo6dXBkYXRlQ29uZmlndXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6
OlZpZXdwb3J0Q29uZmlndXJhdGlvbjo6ZGVzY3JpcHRpb24pOgorICAgICAgICAqIHBhZ2UvVmll
d3BvcnRDb25maWd1cmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpWaWV3cG9ydENvbmZpZ3Vy
YXRpb246OlBhcmFtZXRlcnM6OlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3Bv
cnRDb25maWd1cmF0aW9uOjpjbGlwVG9Eb2N1bWVudCk6CisgICAgICAgIEFkZCB2aWV3cG9ydCBw
YXJhbWV0ZXIuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBh
Z2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3OjplbmFibGVTcGVjdWxhdGl2ZVRpbGluZ0lmTmVlZGVkKToKKyAg
ICAgICAgSWYgbm90IGNsaXBwaW5nIHRvIHRoZSBkb2N1bWVudCwgZW5hYmxlICJzcGVjdWxhdGl2
ZSIgdGlsaW5nIGltbWVkaWF0ZWx5LAorICAgICAgICBiZWNhdXNlIHRoZSBtYXJnaW4gdGlsZXMg
Y2FuIGJlIHZpc2libGUgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6aGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6dXBkYXRlVGlsZXNGb3JFeHRlbmRlZEJhY2tncm91bmRNb2RlKToKKyAg
ICAgICAgRG9uJ3QgY2hlY2sgdGhlIHNldHRpbmcgaGVyZTsganVzdCByZXNwZWN0IHRoZSBtb2Rl
IHRoYXQgaXMgY29tcHV0ZWQKKyAgICAgICAgYnkgY2FsY3VsYXRlRXh0ZW5kZWRCYWNrZ3JvdW5k
TW9kZS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpjYWxjdWxhdGVFeHRlbmRlZEJh
Y2tncm91bmRNb2RlKToKKyAgICAgICAgSWYgdGhlIHZpZXdwb3J0IHBhcmFtZXRlciB3YXMgc2V0
LCBhZGQgbWFyZ2luIHRpbGVzIG9uIGJvdGggYXhlcy4KKworICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjpzZXRDbGlwVG9Eb2N1bWVudCk6CisgICAgICAgIE5vdGlmeSBDaHJvbWVDbGllbnQg
b2YgdGhlIGNoYW5nZSwgYW5kIHJlLWNvbXB1dGUgdGhlIG1hcmdpbiB0aWxlIG1vZGUuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIEZhY3RvciBvdXQgY29k
ZSB0aGF0IGRlY2lkZXMgd2hldGhlciB0aGUgY29udGVudCBsYXllciBjbGlwcyB0byBib3VuZHMs
CisgICAgICAgIGFuZCBtYWtlIGl0IHRha2UgdGhlIG5ldyB2aWV3cG9ydCBwYXJhbWV0ZXIgaW50
byBhY2NvdW50LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAg
ICAgIERvbid0IGNsaXAgUmVuZGVyVmlldyByZXBhaW50cyB0byBSZW5kZXJWaWV3J3MgR3JhcGhp
Y3NMYXllciBib3VuZHMgaWYKKyAgICAgICAgY2xpcC10by1kb2N1bWVudCBpcyBvZmYsIGp1c3Qg
bGlrZSB3ZSBkbyBmb3Igc2xvdy1yZXBhaW50IG9iamVjdHMgaW4KKyAgICAgICAgZXh0ZW5kZWQg
YmFja2dyb3VuZCBtb2RlLgorCiAyMDE3LTA0LTA1ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFw
cGxlLmNvbT4KIAogICAgICAgICBNYWtlIGluYWN0aXZlIHdlYiBwcm9jZXNzZXMgYmVoYXZlIGFz
IHRob3VnaCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0
QXJndW1lbnRzLmNwcAppbmRleCAxZTY5YjkyNmRiMWJkNjcxMzBiYWNlZTUxMzUzNDIyMjRkM2Iz
ODBkLi5jN2YzY2UxNzk0M2MxNWQ2NjAyYjBlMzU4YzRiOTk3OWVhNWNlZDVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHAKQEAgLTI0Niw2ICsyNDYsNyBAQCBWaWV3
cG9ydEF0dHJpYnV0ZXMgVmlld3BvcnRBcmd1bWVudHM6OnJlc29sdmUoY29uc3QgRmxvYXRTaXpl
JiBpbml0aWFsVmlld3BvcnRTaQogICAgIHJlc3VsdC51c2VyU2NhbGFibGUgPSB1c2VyWm9vbTsK
ICAgICByZXN1bHQub3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKICAgICByZXN1bHQuc2hyaW5r
VG9GaXQgPSBzaHJpbmtUb0ZpdDsKKyAgICByZXN1bHQuY2xpcFRvRG9jdW1lbnQgPSBjbGlwVG9E
b2N1bWVudDsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0zNjMsMjIgKzM2NCwyMSBAQCBz
dGF0aWMgZmxvYXQgZmluZFNjYWxlVmFsdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3
IGtleSwgU3RyaW5nVmlldyB2YWx1ZQogICAgIHJldHVybiBudW1lcmljVmFsdWU7CiB9CiAKLS8v
IEZJWE1FOiBJdCdzIGtpbmQgb2YgYml6YXJyZSB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVz
IG9mIDEgYW5kIDAgdG8gcmVwcmVzZW50IHRydWUgYW5kIGZhbHNlLgotc3RhdGljIGZsb2F0IGZp
bmRCb29sZWFuVmFsdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5n
VmlldyB2YWx1ZSkKK3N0YXRpYyBib29sIGZpbmRCb29sZWFuVmFsdWUoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZSkKIHsKICAgICAvLyB5ZXMgYW5k
IG5vIGFyZSB1c2VkIGFzIGtleXdvcmRzLgogICAgIC8vIE51bWJlcnMgPj0gMSwgbnVtYmVycyA8
PSAtMSwgZGV2aWNlLXdpZHRoIGFuZCBkZXZpY2UtaGVpZ2h0IGFyZSBtYXBwZWQgdG8geWVzLgog
ICAgIC8vIE51bWJlcnMgaW4gdGhlIHJhbmdlIDwtMSwgMT4sIGFuZCB1bmtub3duIHZhbHVlcywg
YXJlIG1hcHBlZCB0byBuby4KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZSh2YWx1ZSwgInllcyIpKQotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAibm8iKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJkZXZpY2Utd2lkdGgiKSkKLSAgICAgICAgcmV0
dXJuIDE7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZSh2YWx1ZSwgImRldmljZS1oZWlnaHQiKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgcmV0dXJuIHN0ZDo6YWJzKG51bWVyaWNQcmVmaXgoZG9jdW1lbnQsIGtleSwgdmFsdWUpKSA+
PSAxID8gMSA6IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmFicyhu
dW1lcmljUHJlZml4KGRvY3VtZW50LCBrZXksIHZhbHVlKSkgPj0gMTsKIH0KIAogdm9pZCBzZXRW
aWV3cG9ydEZlYXR1cmUoVmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cywgRG9jdW1lbnQmIGRv
Y3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZSkKQEAgLTQwMyw2ICs0MDMs
OCBAQCB2b2lkIHNldFZpZXdwb3J0RmVhdHVyZShWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRz
LCBEb2N1bWVudCYgZG9jdW1lbnQsIFN0cmluZwogI2VuZGlmCiAgICAgZWxzZSBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5LCAic2hyaW5rLXRvLWZpdCIpKQogICAgICAgICBh
cmd1bWVudHMuc2hyaW5rVG9GaXQgPSBmaW5kQm9vbGVhblZhbHVlKGRvY3VtZW50LCBrZXksIHZh
bHVlKTsKKyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJj
bGlwLXRvLWRvY3VtZW50IikpCisgICAgICAgIGFyZ3VtZW50cy5jbGlwVG9Eb2N1bWVudCA9IGZp
bmRCb29sZWFuVmFsdWUoZG9jdW1lbnQsIGtleSwgdmFsdWUpOwogICAgIGVsc2UKICAgICAgICAg
cmVwb3J0Vmlld3BvcnRXYXJuaW5nKGRvY3VtZW50LCBVbnJlY29nbml6ZWRWaWV3cG9ydEFyZ3Vt
ZW50S2V5RXJyb3IsIGtleSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmll
d3BvcnRBcmd1bWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5o
CmluZGV4IDRlNjkwN2Y1ODlkYjcyNmRiYThhYzA5ZjgxZDg3OTU3ZTc2Zjg4MmIuLjM4N2JhOGVm
Mzc3Y2YwNmYyZTAwNjhmYjcwN2RkOWRjZGYyOTczMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3
cG9ydEFyZ3VtZW50cy5oCkBAIC01MSw2ICs1MSw3IEBAIHN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0
ZXMgewogICAgIGZsb2F0IHVzZXJTY2FsYWJsZTsKICAgICBmbG9hdCBvcmllbnRhdGlvbjsKICAg
ICBmbG9hdCBzaHJpbmtUb0ZpdDsKKyAgICBib29sIGNsaXBUb0RvY3VtZW50OwogfTsKIAogc3Ry
dWN0IFZpZXdwb3J0QXJndW1lbnRzIHsKQEAgLTk0LDYgKzk1LDcgQEAgc3RydWN0IFZpZXdwb3J0
QXJndW1lbnRzIHsKICAgICBmbG9hdCB1c2VyWm9vbSB7IFZhbHVlQXV0byB9OwogICAgIGZsb2F0
IG9yaWVudGF0aW9uIHsgVmFsdWVBdXRvIH07CiAgICAgZmxvYXQgc2hyaW5rVG9GaXQgeyBWYWx1
ZUF1dG8gfTsKKyAgICBib29sIGNsaXBUb0RvY3VtZW50IHsgdHJ1ZSB9OwogICAgIGJvb2wgd2lk
dGhXYXNFeHBsaWNpdCB7IGZhbHNlIH07CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmll
d3BvcnRBcmd1bWVudHMmIG90aGVyKSBjb25zdApAQCAtMTEyLDYgKzExNCw3IEBAIHN0cnVjdCBW
aWV3cG9ydEFyZ3VtZW50cyB7CiAgICAgICAgICAgICAmJiB1c2VyWm9vbSA9PSBvdGhlci51c2Vy
Wm9vbQogICAgICAgICAgICAgJiYgb3JpZW50YXRpb24gPT0gb3RoZXIub3JpZW50YXRpb24KICAg
ICAgICAgICAgICYmIHNocmlua1RvRml0ID09IG90aGVyLnNocmlua1RvRml0CisgICAgICAgICAg
ICAmJiBjbGlwVG9Eb2N1bWVudCA9PSBvdGhlci5jbGlwVG9Eb2N1bWVudAogICAgICAgICAgICAg
JiYgd2lkdGhXYXNFeHBsaWNpdCA9PSBvdGhlci53aWR0aFdhc0V4cGxpY2l0OwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggYjA4MGE5NTg5NTllNDU2NWNmMDJjN2Y0
MDgwN2Y4YzQ0MDJmMDFmNy4uNzA1YzVhYTE0NmU0YjE4NzhkOGE0NTVkM2U0YWViNDk4MTM4MDI0
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00NjYsNiArNDY2LDggQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydFByb2Nlc3NDUFVUaW1lKGludDY0X3QsIEFj
dGl2aXR5U3RhdGVGb3JDUFVTYW1wbGluZykgeyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hh
bmdlQ2xpcFRvRG9jdW1lbnQoYm9vbCkgeyB9CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5D
aHJvbWVDbGllbnQoKSB7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYTc0
ODc5NDY1OGJmNzU5ZDc0ZDUyYjIyZGRjMGU2MWI2YmNkOGNlOS4uZTg0OWExMzdhOTk0ZDYxMjdl
YTAzZDYxNjc2MzBiM2FhZmNiODg1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAt
MjkyOSw2ICsyOTI5LDEwIEBAIHZvaWQgRnJhbWVWaWV3OjplbmFibGVTcGVjdWxhdGl2ZVRpbGlu
Z0lmTmVlZGVkKCkKICAgICAgICAgbV9zcGVjdWxhdGl2ZVRpbGluZ0VuYWJsZWQgPSB0cnVlOwog
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmICghbV9jbGlwVG9Eb2N1bWVudCkgeworICAg
ICAgICBtX3NwZWN1bGF0aXZlVGlsaW5nRW5hYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgaWYgKCFzaG91bGRFbmFibGVTcGVjdWxhdGl2ZVRpbGluZ0R1cmluZ0xvYWRp
bmcoKnRoaXMpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fc3BlY3VsYXRpdmVUaWxpbmdF
bmFibGVUaW1lci5pc0FjdGl2ZSgpKQpAQCAtMzIyNSw5ICszMjI5LDYgQEAgdm9pZCBGcmFtZVZp
ZXc6OnVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShjb25zdCBDb2xvciYgYmFja2dyb3VuZENv
bG9yLCBib29sIHQKIAogYm9vbCBGcmFtZVZpZXc6Omhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3RG
b3JQYWludGluZygpIGNvbnN0CiB7Ci0gICAgaWYgKCFmcmFtZSgpLnNldHRpbmdzKCkuYmFja2dy
b3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAg
ICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKTsKICAg
ICBpZiAoIXRpbGVkQmFja2luZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI0NiwxMSAr
MzI0Nyw4IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3Nh
cnkoKQogCiBGcmFtZVZpZXc6OkV4dGVuZGVkQmFja2dyb3VuZE1vZGUgRnJhbWVWaWV3OjpjYWxj
dWxhdGVFeHRlbmRlZEJhY2tncm91bmRNb2RlKCkgY29uc3QKIHsKLSAgICAvLyBKdXN0IGJlY2F1
c2UgU2V0dGluZ3M6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkgaXMgdHJ1ZSBk
b2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuCi0gICAgLy8gdGhhdCB0aGUgYmFja2dyb3VuZCByZWN0
IG5lZWRzIHRvIGJlIGV4dGVuZGVkIGZvciBwYWludGluZy4gU2ltcGxlIGJhY2tncm91bmRzIGNh
biBiZSBleHRlbmRlZAotICAgIC8vIGp1c3Qgd2l0aCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNl
dFJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpLiBNb3JlIGNvbXBsaWNhdGVkIGJhY2tncm91
bmRzLAotICAgIC8vIHN1Y2ggYXMgaW1hZ2VzLCByZXF1aXJlIGV4dGVuZGluZyB0aGUgYmFja2dy
b3VuZCByZWN0IHRvIGNvbnRpbnVlIHBhaW50aW5nIGludG8gdGhlIGV4dGVuZGVkCi0gICAgLy8g
cmVnaW9uLiBUaGlzIGZ1bmN0aW9uIGZpbmRzIG91dCBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gZXh0
ZW5kIHRoZSBiYWNrZ3JvdW5kIHJlY3QgZm9yIHBhaW50aW5nLgorICAgIGlmICghbV9jbGlwVG9E
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuIEV4dGVuZGVkQmFja2dyb3VuZE1vZGVBbGw7CiAKICNp
ZiBQTEFURk9STShJT1MpCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzE2MjAxMzczPgpAQCAtMzI1
OSw2ICszMjU3LDEyIEBAIEZyYW1lVmlldzo6RXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBGcmFtZVZp
ZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFja2dyb3VuZE1vZGUoKSBjCiAgICAgaWYgKCFmcmFtZSgp
LnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSkKICAgICAgICAg
cmV0dXJuIEV4dGVuZGVkQmFja2dyb3VuZE1vZGVOb25lOwogCisgICAgLy8gSnVzdCBiZWNhdXNl
IFNldHRpbmdzOjpiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpIGlzIHRydWUgZG9l
cyBub3QgbmVjZXNzYXJpbHkgbWVhbgorICAgIC8vIHRoYXQgdGhlIGJhY2tncm91bmQgcmVjdCBu
ZWVkcyB0byBiZSBleHRlbmRlZCBmb3IgcGFpbnRpbmcuIFNpbXBsZSBiYWNrZ3JvdW5kcyBjYW4g
YmUgZXh0ZW5kZWQKKyAgICAvLyBqdXN0IHdpdGggUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRS
b290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKS4gTW9yZSBjb21wbGljYXRlZCBiYWNrZ3JvdW5k
cywKKyAgICAvLyBzdWNoIGFzIGltYWdlcywgcmVxdWlyZSBleHRlbmRpbmcgdGhlIGJhY2tncm91
bmQgcmVjdCB0byBjb250aW51ZSBwYWludGluZyBpbnRvIHRoZSBleHRlbmRlZAorICAgIC8vIHJl
Z2lvbi4gVGhpcyBmdW5jdGlvbiBmaW5kcyBvdXQgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGV4dGVu
ZCB0aGUgYmFja2dyb3VuZCByZWN0IGZvciBwYWludGluZy4KKwogICAgIGlmICghZnJhbWUoKS5p
c01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm4gRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZU5vbmU7
CiAKQEAgLTMyODgsOSArMzI5Miw2IEBAIEZyYW1lVmlldzo6RXh0ZW5kZWRCYWNrZ3JvdW5kTW9k
ZSBGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFja2dyb3VuZE1vZGUoKSBjCiAKIHZvaWQg
RnJhbWVWaWV3Ojp1cGRhdGVUaWxlc0ZvckV4dGVuZGVkQmFja2dyb3VuZE1vZGUoRXh0ZW5kZWRC
YWNrZ3JvdW5kTW9kZSBtb2RlKQogewotICAgIGlmICghZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tn
cm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFJl
bmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCk7CiAgICAgaWYgKCFyZW5k
ZXJWaWV3KQogICAgICAgICByZXR1cm47CkBAIC0zMzM1LDYgKzMzMzYsMzAgQEAgSW50UmVjdCBG
cmFtZVZpZXc6OmV4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpIGNvbnN0CiAgICAg
cmV0dXJuIHNuYXBwZWRJbnRSZWN0KGV4dGVuZGVkUmVjdCk7CiB9CiAKK3ZvaWQgRnJhbWVWaWV3
OjpzZXRDbGlwVG9Eb2N1bWVudChib29sIGNsaXBUb0RvY3VtZW50KQoreworICAgIGlmICghZnJh
bWUoKS5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbGlwVG9E
b2N1bWVudCA9PSBjbGlwVG9Eb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGlw
VG9Eb2N1bWVudCA9IGNsaXBUb0RvY3VtZW50OworCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFt
ZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuZGlkQ2hhbmdlQ2xp
cFRvRG9jdW1lbnQoY2xpcFRvRG9jdW1lbnQpOworCisgICAgdXBkYXRlRXh0ZW5kQmFja2dyb3Vu
ZElmTmVjZXNzYXJ5KCk7CisgICAgYWRqdXN0VGlsZWRCYWNraW5nQ292ZXJhZ2UoKTsKKworICAg
IFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCk7CisgICAgaWYgKCFy
ZW5kZXJWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJMYXllckNvbXBvc2l0b3Im
IGNvbXBvc2l0b3IgPSByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCk7CisgICAgY29tcG9zaXRvci51
cGRhdGVSb290Q29udGVudExheWVyQ2xpcHBpbmcoKTsKK30KKwogYm9vbCBGcmFtZVZpZXc6OnNo
b3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zaG91bGRV
cGRhdGVXaGlsZU9mZnNjcmVlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCmluZGV4IDI2MzZkNGJh
MzFkYjVjOTA4ODZmOGE5MzJjYTc1OTJhZGY4OTc4ZDQuLmVkZDkzMGJhYWZlNzYwMzMzODFiOGIz
NmQ3N2ZjZGQzYmM4YjFiOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApAQCAtMjEzLDYgKzIx
Myw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWlu
dGluZygpIGNvbnN0OwogICAgIEludFJlY3QgZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50
aW5nKCkgY29uc3Q7CiAKKyAgICBib29sIGNsaXBUb0RvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9jbGlwVG9Eb2N1bWVudDsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2xpcFRvRG9j
dW1lbnQoYm9vbCk7CisKICAgICBib29sIHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKCkgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVl
bihib29sKTsKICAgICBib29sIHNob3VsZFVwZGF0ZSgpIGNvbnN0OwpAQCAtODEwLDYgKzgxMyw4
IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fbmVlZHNEZWZlcnJlZFNjcm9sbGJhcnNVcGRhdGUg
eyBmYWxzZSB9OwogCisgICAgYm9vbCBtX2NsaXBUb0RvY3VtZW50IHsgdHJ1ZSB9OworCiAgICAg
UmVmUHRyPENvbnRhaW5lck5vZGU+IG1fbWFpbnRhaW5TY3JvbGxQb3NpdGlvbkFuY2hvcjsKIAog
ICAgIC8vIFJlbmRlcmVyIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uY3BwCmluZGV4IDgwNWM2ZTBj
Y2U1N2RlOWRkZjdlOWNlZjIyNmQ4ZTEwMDg4OTFmZDUuLjgzY2ZlOTUzYzc3MzRjMzg2Yjk5N2Iz
ZGE2OTIwMjlhMTAyNThkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3Bv
cnRDb25maWd1cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29u
ZmlndXJhdGlvbi5jcHAKQEAgLTMzNiw2ICszMzYsOSBAQCB2b2lkIFZpZXdwb3J0Q29uZmlndXJh
dGlvbjo6dXBkYXRlQ29uZmlndXJhdGlvbigpCiAKICAgICBpZiAoYm9vbGVhblZpZXdwb3J0QXJn
dW1lbnRJc1NldChtX3ZpZXdwb3J0QXJndW1lbnRzLnNocmlua1RvRml0KSkKICAgICAgICAgbV9j
b25maWd1cmF0aW9uLmFsbG93c1Nocmlua1RvRml0ID0gbV92aWV3cG9ydEFyZ3VtZW50cy5zaHJp
bmtUb0ZpdCAhPSAwLjsKKworICAgIGlmIChib29sZWFuVmlld3BvcnRBcmd1bWVudElzU2V0KG1f
dmlld3BvcnRBcmd1bWVudHMuY2xpcFRvRG9jdW1lbnQpKQorICAgICAgICBtX2NvbmZpZ3VyYXRp
b24uY2xpcFRvRG9jdW1lbnQgPSBtX3ZpZXdwb3J0QXJndW1lbnRzLmNsaXBUb0RvY3VtZW50ICE9
IDAuOwogfQogCiBkb3VibGUgVmlld3BvcnRDb25maWd1cmF0aW9uOjp2aWV3cG9ydEFyZ3VtZW50
c0xlbmd0aChkb3VibGUgbGVuZ3RoKSBjb25zdApAQCAtNDM5LDYgKzQ0Miw3IEBAIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFZpZXdwb3J0Q29uZmlndXJhdGlv
bjo6UGFyYW1ldGVycyYKICAgICB0cy5kdW1wUHJvcGVydHkoIm1heGltdW1TY2FsZSIsIHBhcmFt
ZXRlcnMubWF4aW11bVNjYWxlKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImFsbG93c1VzZXJTY2Fs
aW5nIiwgcGFyYW1ldGVycy5hbGxvd3NVc2VyU2NhbGluZyk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJhbGxvd3NTaHJpbmtUb0ZpdCIsIHBhcmFtZXRlcnMuYWxsb3dzU2hyaW5rVG9GaXQpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgiY2xpcFRvRG9jdW1lbnQiLCBwYXJhbWV0ZXJzLmNsaXBUb0RvY3Vt
ZW50KTsKIAogICAgIHJldHVybiB0czsKIH0KQEAgLTQ3Miw2ICs0NzYsNyBAQCBDU3RyaW5nIFZp
ZXdwb3J0Q29uZmlndXJhdGlvbjo6ZGVzY3JpcHRpb24oKSBjb25zdAogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiY29tcHV0ZWQgbGF5b3V0IHNpemUiLCBsYXlvdXRTaXplKCkpOwogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiaWdub3JpbmcgaG9yaXpvbnRhbCBzY2FsaW5nIGNvbnN0cmFpbnRzIiwgc2hvdWxk
SWdub3JlSG9yaXpvbnRhbFNjYWxpbmdDb25zdHJhaW50cygpID8gInRydWUiIDogImZhbHNlIik7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpZ25vcmluZyB2ZXJ0aWNhbCBzY2FsaW5nIGNvbnN0cmFp
bnRzIiwgc2hvdWxkSWdub3JlVmVydGljYWxTY2FsaW5nQ29uc3RyYWludHMoKSA/ICJ0cnVlIiA6
ICJmYWxzZSIpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2xpcCB0byBkb2N1bWVudCIsIGNsaXBU
b0RvY3VtZW50KCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICAKICAgICB0cy5lbmRHcm91cCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uaAppbmRleCBi
NzJjMGJmYTlkNjcwNzkxYTI5MTI5YTM1NjU5YzA4YTZjNjQ3NzIxLi43MmFhZGUxMmNkMzMxZjI2
M2FhYThjZWJlYTU5YjUyMTE1ZmMxZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3Bv
cnRDb25maWd1cmF0aW9uLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
LCBtYXhpbXVtU2NhbGUoMCkKICAgICAgICAgICAgICwgYWxsb3dzVXNlclNjYWxpbmcoZmFsc2Up
CiAgICAgICAgICAgICAsIGFsbG93c1Nocmlua1RvRml0KGZhbHNlKQorICAgICAgICAgICAgLCBj
bGlwVG9Eb2N1bWVudCh0cnVlKQogICAgICAgICAgICAgLCB3aWR0aElzU2V0KGZhbHNlKQogICAg
ICAgICAgICAgLCBoZWlnaHRJc1NldChmYWxzZSkKICAgICAgICAgICAgICwgaW5pdGlhbFNjYWxl
SXNTZXQoZmFsc2UpCkBAIC02Myw2ICs2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgZG91YmxlIG1h
eGltdW1TY2FsZTsKICAgICAgICAgYm9vbCBhbGxvd3NVc2VyU2NhbGluZzsKICAgICAgICAgYm9v
bCBhbGxvd3NTaHJpbmtUb0ZpdDsKKyAgICAgICAgYm9vbCBjbGlwVG9Eb2N1bWVudDsKIAogICAg
ICAgICBib29sIHdpZHRoSXNTZXQ7CiAgICAgICAgIGJvb2wgaGVpZ2h0SXNTZXQ7CkBAIC05NSw2
ICs5Nyw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFsbG93c1VzZXJTY2Fs
aW5nKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhbGxvd3NVc2VyU2NhbGluZ0ln
bm9yaW5nQWx3YXlzU2NhbGFibGUoKSBjb25zdDsKICAgICBib29sIGFsbG93c1Nocmlua1RvRml0
KCkgY29uc3Q7CisgICAgYm9vbCBjbGlwVG9Eb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
ZmlndXJhdGlvbi5jbGlwVG9Eb2N1bWVudDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFBhcmFtZXRlcnMgd2VicGFnZVBhcmFtZXRlcnMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUGFyYW1ldGVycyB0ZXh0RG9jdW1lbnRQYXJhbWV0ZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDJkNjExNjlk
Njg5MWNlNjUyY2U5OTU2OTJiYjcxMzExMzNmOTdhZWQuLmZjNTY3MzFlMTA3ZDU3MzE3N2Y3Yzc4
MTg4NTZhMTI2ZWM3NmVmZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC05NTksNiArOTU5LDExIEBAIHN0YXRpYyBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckZvckNvbXBvc2l0aW5nVGVzdHMoY29uc3QgUmVu
ZGVyTGF5ZXImIGxhCiAgICAgcmV0dXJuICpyZW5kZXJlcjsKIH0KIAordm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnVwZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygpCit7CisgICAgbV9y
b290Q29udGVudExheWVyLT5zZXRNYXNrc1RvQm91bmRzKCFtX3JlbmRlclZpZXcuc2V0dGluZ3Mo
KS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpICYmIG1fcmVuZGVyVmlldy5mcmFt
ZVZpZXcoKS5jbGlwVG9Eb2N1bWVudCgpKTsKK30KKwogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVJl
cGFpbnQgc2hvdWxkUmVwYWludCwgQmFja2luZ1JlcXVpcmVkIGJhY2tpbmdSZXF1aXJlZCkKIHsK
ICAgICBib29sIGxheWVyQ2hhbmdlZCA9IGZhbHNlOwpAQCAtOTkwLDggKzk5NSw3IEBAIGJvb2wg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwg
Q29tcG9zaXRpbmdDaGFuZ2VSCiAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJGb3JIZWFkZXIo
cGFnZSgpLmhlYWRlckhlaWdodCgpKTsKICAgICAgICAgICAgICAgICB1cGRhdGVMYXllckZvckZv
b3RlcihwYWdlKCkuZm9vdGVySGVpZ2h0KCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYg
KG1fcmVuZGVyVmlldy5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdl
KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0Jv
dW5kcyhmYWxzZSk7CisgICAgICAgICAgICAgICAgdXBkYXRlUm9vdENvbnRlbnRMYXllckNsaXBw
aW5nKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcg
PSBsYXllci5iYWNraW5nKCktPnRpbGVkQmFja2luZygpKQogICAgICAgICAgICAgICAgICAgICB0
aWxlZEJhY2tpbmctPnNldFRvcENvbnRlbnRJbnNldChtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCku
dG9wQ29udGVudEluc2V0KCkpOwpAQCAtMzM0Myw3ICszMzQ3LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXllcigpCiAjZW5kaWYKIAogICAgICAgICAvLyBOZWVk
IHRvIGNsaXAgdG8gcHJldmVudCB0cmFuc2Zvcm1lZCBjb250ZW50IHNob3dpbmcgb3V0c2lkZSB0
aGlzIGZyYW1lCi0gICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0
cnVlKTsKKyAgICAgICAgdXBkYXRlUm9vdENvbnRlbnRMYXllckNsaXBwaW5nKCk7CiAgICAgfQog
CiAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsTGF5ZXIoZXhwZWN0ZWRBdHRhY2htZW50KSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4
IDg3M2MwNDQ5ZmQxNWVkNmYzNzJjYTNkNWFhNDE0YzRjOTdkMTUzY2YuLjIwNGVhYTMxMzI5ZDQ3
OWU3ZDFiNzQ1Y2FkOTJlNWUzN2Y4OGZlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTMxMyw2ICszMTMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRSb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsK
ICAgICBjb25zdCBDb2xvciYgcm9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9yb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7IH0KIAorICAgIHZvaWQgdXBkYXRl
Um9vdENvbnRlbnRMYXllckNsaXBwaW5nKCk7CisKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQogICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KGNvbnN0
IEZyYW1lVmlldyYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCmluZGV4IDExNjlkOTJjZWY3ODg4ZTFlMmNkMWVlMTAzNzUwM2JjY2U5MjAwNDAuLjNm
NmYzMjc3ZTVhOGIzY2JiNDkzNzc5MmFkMTI1MzdkYWFkNTlmODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC04OTcsNiArODk3LDkgQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OnJlcGFpbnRVc2luZ0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiByZXBhaW50Q28KICAgICAgICAgICAgIHZpZXcucmVwYWludFZpZXdSZWN0YW5nbGUocmVj
dCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIXZpZXcu
ZnJhbWVWaWV3KCkuY2xpcFRvRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIHNob3VsZENsaXBUb0xh
eWVyID0gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKHZpZXcoKS51c2VzQ29tcG9zaXRpbmcoKSkg
ewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307164</attachid>
            <date>2017-04-14 16:12:35 -0700</date>
            <delta_ts>2017-04-14 17:46:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170766-20170414161234.patch</filename>
            <type>text/plain</type>
            <size>41352</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1Mzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzU4ODFiMTQ1Yjg0NWMx
MTg3MDIxMjkyOWUwM2M1NmY3MGE3NTFjZC4uYzE2OWQ2NTM2MWVlMjc4ODJmNjAxZThkNjgxMmQw
OTA2YmQzNmNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE3LTA0LTE0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2
aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxNTY0NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9y
dC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sLAorICAgICAgICAg
ICAgICAgdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEteWVzLWdl
dHMtbm8tbWFyZ2luLXRpbGVzLmh0bWwsCisKKyAgICAgICAgKiBkb20vVmlld3BvcnRBcmd1bWVu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OnJlc29sdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0Vmlld3BvcnRGZWF0dXJlKToKKyAgICAgICAgKiBkb20vVmll
d3BvcnRBcmd1bWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKiBwYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWV3cG9ydENvbmZpZ3VyYXRpb246OnVwZGF0ZUNvbmZpZ3VyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpW
aWV3cG9ydENvbmZpZ3VyYXRpb246OmRlc2NyaXB0aW9uKToKKyAgICAgICAgKiBwYWdlL1ZpZXdw
b3J0Q29uZmlndXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRDb25maWd1cmF0
aW9uOjpQYXJhbWV0ZXJzOjpQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0
Q29uZmlndXJhdGlvbjo6Y2xpcFRvU2FmZUFyZWEpOgorICAgICAgICBBZGQgdmlld3BvcnQgcGFy
YW1ldGVyLgorCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5hYmxlU3BlY3VsYXRpdmVUaWxpbmdJZk5lZWRlZCk6CisgICAg
ICAgIElmIG5vdCBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhLCBlbmFibGUgInNwZWN1bGF0aXZl
IiB0aWxpbmcgaW1tZWRpYXRlbHksCisgICAgICAgIGJlY2F1c2UgdGhlIG1hcmdpbiB0aWxlcyBj
YW4gYmUgdmlzaWJsZSBpbW1lZGlhdGVseS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpoYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3Ojp1cGRhdGVUaWxlc0ZvckV4dGVuZGVkQmFja2dyb3VuZE1vZGUpOgorICAg
ICAgICBEb24ndCBjaGVjayB0aGUgc2V0dGluZyBoZXJlOyBqdXN0IHJlc3BlY3QgdGhlIG1vZGUg
dGhhdCBpcyBjb21wdXRlZAorICAgICAgICBieSBjYWxjdWxhdGVFeHRlbmRlZEJhY2tncm91bmRN
b2RlLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFj
a2dyb3VuZE1vZGUpOgorICAgICAgICBJZiB0aGUgdmlld3BvcnQgcGFyYW1ldGVyIHdhcyBzZXQs
IGFkZCBtYXJnaW4gdGlsZXMgb24gYm90aCBheGVzLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OnNldENsaXBUb1NhZmVBcmVhKToKKyAgICAgICAgTm90aWZ5IENocm9tZUNsaWVudCBv
ZiB0aGUgY2hhbmdlLCBhbmQgcmUtY29tcHV0ZSB0aGUgbWFyZ2luIHRpbGUgbW9kZS4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgRmFjdG9yIG91dCBjb2Rl
IHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRoZSBjb250ZW50IGxheWVyIGNsaXBzIHRvIGJvdW5kcywK
KyAgICAgICAgYW5kIG1ha2UgaXQgdGFrZSB0aGUgbmV3IHZpZXdwb3J0IHBhcmFtZXRlciBpbnRv
IGFjY291bnQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAg
ICAgRG9uJ3QgY2xpcCBSZW5kZXJWaWV3IHJlcGFpbnRzIHRvIFJlbmRlclZpZXcncyBHcmFwaGlj
c0xheWVyIGJvdW5kcyBpZgorICAgICAgICBjbGlwLXRvLXNhZmUtYXJlYSBpcyBvZmYsIGp1c3Qg
bGlrZSB3ZSBkbyBmb3Igc2xvdy1yZXBhaW50IG9iamVjdHMgaW4KKyAgICAgICAgZXh0ZW5kZWQg
YmFja2dyb3VuZCBtb2RlLgorCiAyMDE3LTA0LTE0ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgdGV4dC1hbGlnbiBzdGFydCAvIGVuZCBmYWlsdXJlIGluIHRhYmxl
IGNlbGxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjlkNmYwNDRiZDQ4OTUwYzlkMTQzYjI2ODg3MTYwNTdkNTU3
ZDE3Ni4uYjc0NTYwOWMyYjJlYzE1NzRlYTI3MjYxNTI2NzFiNTMwODVlYWQ4MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTA0LTE0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0
b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2aWV3cG9ydCBwYXJhbWV0ZXIgdG8g
ZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzMxNTY0NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0
Q2xpcFRvU2FmZUFyZWEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGlwVG9TYWZlQXJlYSk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNocm9tZUNsaWVudDo6ZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNs
aWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgRm9yd2FyZCBjbGlwLXRv
LXNhZmUtYXJlYSBjaGFuZ2VzIGZyb20gQ2hyb21lQ2xpZW50IHRvIFdLV2ViVmlldy4KKyAgICAg
ICAgVXBkYXRlIHZpc2libGUgY29udGVudCByZWN0cyB3aGVuIGl0IGNoYW5nZXMsIHdoaWNoIHdp
bGwKKyAgICAgICAgcmVzdWx0IGluIGEgY2FsbCB0byB1cGRhdGVGaXhlZENsaXBwaW5nVmlldywg
YXMgYmVsb3cuCisgICAgICAgIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhl
IFVJIHByb2Nlc3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1By
aXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50TWF5RHJhd0luT2JzY3VyZWRJbnNldHNdKToKKyAg
ICAgICAgRXhwb3NlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjbGlwLXRvLWRvY3VtZW50IGJp
dCBhcyBTUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW06Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgdXBkYXRlRml4ZWRDbGlwcGluZ1ZpZXc6XSk6CisgICAg
ICAgIERpc2FibGUgZml4ZWQgY2xpcHBpbmcgd2hlbiBjbGlwLXRvLWRvY3VtZW50IGlzIGRpc2Fi
bGVkLgorICAgICAgICAKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnZpZXdwb3J0Q29uZmlndXJhdGlvbkNo
YW5nZWQpOgorICAgICAgICBQdXNoIHRoZSB2aWV3cG9ydCdzIGNsaXAtdG8tZG9jdW1lbnQgYml0
IG9udG8gdGhlIG1haW4gZnJhbWUncyBGcmFtZVZpZXcuCisKIDIwMTctMDQtMTQgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01lZGlhU291cmNlXSBQdXNoIGNh
cGFiaWxpdGllcyBhY3Jvc3MgcHJvY2VzcyBib3VuZGFyeSBkdXJpbmcgVUlQcm9jZXNzIGNhcHR1
cmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcAppbmRleCAxZTY5Yjky
NmRiMWJkNjcxMzBiYWNlZTUxMzUzNDIyMjRkM2IzODBkLi5jMDBkZDkwZDU4ZWVmMGEwODlhMTYw
Y2ZjYWE4NzBhNmUxZjE5MWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3Bv
cnRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50
cy5jcHAKQEAgLTI0Niw2ICsyNDYsNyBAQCBWaWV3cG9ydEF0dHJpYnV0ZXMgVmlld3BvcnRBcmd1
bWVudHM6OnJlc29sdmUoY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmlld3BvcnRTaQogICAgIHJl
c3VsdC51c2VyU2NhbGFibGUgPSB1c2VyWm9vbTsKICAgICByZXN1bHQub3JpZW50YXRpb24gPSBv
cmllbnRhdGlvbjsKICAgICByZXN1bHQuc2hyaW5rVG9GaXQgPSBzaHJpbmtUb0ZpdDsKKyAgICBy
ZXN1bHQuY2xpcFRvU2FmZUFyZWEgPSBjbGlwVG9TYWZlQXJlYTsKIAogICAgIHJldHVybiByZXN1
bHQ7CiB9CkBAIC0zNjMsMjIgKzM2NCwyMSBAQCBzdGF0aWMgZmxvYXQgZmluZFNjYWxlVmFsdWUo
RG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZQogICAg
IHJldHVybiBudW1lcmljVmFsdWU7CiB9CiAKLS8vIEZJWE1FOiBJdCdzIGtpbmQgb2YgYml6YXJy
ZSB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIG9mIDEgYW5kIDAgdG8gcmVwcmVzZW50IHRy
dWUgYW5kIGZhbHNlLgotc3RhdGljIGZsb2F0IGZpbmRCb29sZWFuVmFsdWUoRG9jdW1lbnQmIGRv
Y3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZSkKK3N0YXRpYyBib29sIGZp
bmRCb29sZWFuVmFsdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5n
VmlldyB2YWx1ZSkKIHsKICAgICAvLyB5ZXMgYW5kIG5vIGFyZSB1c2VkIGFzIGtleXdvcmRzLgog
ICAgIC8vIE51bWJlcnMgPj0gMSwgbnVtYmVycyA8PSAtMSwgZGV2aWNlLXdpZHRoIGFuZCBkZXZp
Y2UtaGVpZ2h0IGFyZSBtYXBwZWQgdG8geWVzLgogICAgIC8vIE51bWJlcnMgaW4gdGhlIHJhbmdl
IDwtMSwgMT4sIGFuZCB1bmtub3duIHZhbHVlcywgYXJlIG1hcHBlZCB0byBuby4KIAogICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgInllcyIpKQotICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKHZhbHVlLCAibm8iKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUs
ICJkZXZpY2Utd2lkdGgiKSkKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImRldmljZS1o
ZWlnaHQiKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIHN0ZDo6YWJzKG51bWVyaWNQ
cmVmaXgoZG9jdW1lbnQsIGtleSwgdmFsdWUpKSA+PSAxID8gMSA6IDA7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBzdGQ6OmFicyhudW1lcmljUHJlZml4KGRvY3VtZW50LCBrZXks
IHZhbHVlKSkgPj0gMTsKIH0KIAogdm9pZCBzZXRWaWV3cG9ydEZlYXR1cmUoVmlld3BvcnRBcmd1
bWVudHMmIGFyZ3VtZW50cywgRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3Ry
aW5nVmlldyB2YWx1ZSkKQEAgLTQwMyw2ICs0MDMsOCBAQCB2b2lkIHNldFZpZXdwb3J0RmVhdHVy
ZShWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzLCBEb2N1bWVudCYgZG9jdW1lbnQsIFN0cmlu
ZwogI2VuZGlmCiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5
LCAic2hyaW5rLXRvLWZpdCIpKQogICAgICAgICBhcmd1bWVudHMuc2hyaW5rVG9GaXQgPSBmaW5k
Qm9vbGVhblZhbHVlKGRvY3VtZW50LCBrZXksIHZhbHVlKTsKKyAgICBlbHNlIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJjbGlwLXRvLXNhZmUtYXJlYSIpKQorICAgICAg
ICBhcmd1bWVudHMuY2xpcFRvU2FmZUFyZWEgPSBmaW5kQm9vbGVhblZhbHVlKGRvY3VtZW50LCBr
ZXksIHZhbHVlKTsKICAgICBlbHNlCiAgICAgICAgIHJlcG9ydFZpZXdwb3J0V2FybmluZyhkb2N1
bWVudCwgVW5yZWNvZ25pemVkVmlld3BvcnRBcmd1bWVudEtleUVycm9yLCBrZXkpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuaAppbmRleCA0ZTY5MDdmNTg5ZGI3MjZkYmE4
YWMwOWY4MWQ4Nzk1N2U3NmY4ODJiLi4xZThjYzIzYjU2NGFkOTE3YWVkMzNiMzQ4MjdhZjg5NjRk
ZTUwODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuaApAQCAtNTEsNiAr
NTEsNyBAQCBzdHJ1Y3QgVmlld3BvcnRBdHRyaWJ1dGVzIHsKICAgICBmbG9hdCB1c2VyU2NhbGFi
bGU7CiAgICAgZmxvYXQgb3JpZW50YXRpb247CiAgICAgZmxvYXQgc2hyaW5rVG9GaXQ7CisgICAg
Ym9vbCBjbGlwVG9TYWZlQXJlYTsKIH07CiAKIHN0cnVjdCBWaWV3cG9ydEFyZ3VtZW50cyB7CkBA
IC05NCw2ICs5NSw3IEBAIHN0cnVjdCBWaWV3cG9ydEFyZ3VtZW50cyB7CiAgICAgZmxvYXQgdXNl
clpvb20geyBWYWx1ZUF1dG8gfTsKICAgICBmbG9hdCBvcmllbnRhdGlvbiB7IFZhbHVlQXV0byB9
OwogICAgIGZsb2F0IHNocmlua1RvRml0IHsgVmFsdWVBdXRvIH07CisgICAgYm9vbCBjbGlwVG9T
YWZlQXJlYSB7IHRydWUgfTsKICAgICBib29sIHdpZHRoV2FzRXhwbGljaXQgeyBmYWxzZSB9Owog
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJiBvdGhlcikgY29u
c3QKQEAgLTExMiw2ICsxMTQsNyBAQCBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHMgewogICAgICAg
ICAgICAgJiYgdXNlclpvb20gPT0gb3RoZXIudXNlclpvb20KICAgICAgICAgICAgICYmIG9yaWVu
dGF0aW9uID09IG90aGVyLm9yaWVudGF0aW9uCiAgICAgICAgICAgICAmJiBzaHJpbmtUb0ZpdCA9
PSBvdGhlci5zaHJpbmtUb0ZpdAorICAgICAgICAgICAgJiYgY2xpcFRvU2FmZUFyZWEgPT0gb3Ro
ZXIuY2xpcFRvU2FmZUFyZWEKICAgICAgICAgICAgICYmIHdpZHRoV2FzRXhwbGljaXQgPT0gb3Ro
ZXIud2lkdGhXYXNFeHBsaWNpdDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CmluZGV4IGIwODBhOTU4OTU5ZTQ1NjVjZjAyYzdmNDA4MDdmOGM0NDAyZjAxZjcuLmU3Y2U4ZTI5
NzNmY2M5MTRiZWVmYjQ3ODllZWNlZjAyNzc3MmQ5ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaApAQCAtNDY2LDYgKzQ2Niw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBy
ZXBvcnRQcm9jZXNzQ1BVVGltZShpbnQ2NF90LCBBY3Rpdml0eVN0YXRlRm9yQ1BVU2FtcGxpbmcp
IHsgfQogCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wpIHsg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+Q2hyb21lQ2xpZW50KCkgeyB9CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDE0ODA4NGIyYjhhNDFhMjRiYTI3YjE5ZjY0OGJk
ZTMyN2VjZjM5M2UuLjM2OGM2Y2QwYzg0M2NiMjkwZThiMGFmMGE0ZWIyNTM3NzgxMWZkNjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTI5MjksNiArMjkyOSwxMCBAQCB2b2lkIEZy
YW1lVmlldzo6ZW5hYmxlU3BlY3VsYXRpdmVUaWxpbmdJZk5lZWRlZCgpCiAgICAgICAgIG1fc3Bl
Y3VsYXRpdmVUaWxpbmdFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAg
ICBpZiAoIW1fY2xpcFRvU2FmZUFyZWEpIHsKKyAgICAgICAgbV9zcGVjdWxhdGl2ZVRpbGluZ0Vu
YWJsZWQgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmICghc2hvdWxkRW5h
YmxlU3BlY3VsYXRpdmVUaWxpbmdEdXJpbmdMb2FkaW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0zMjM4LDkgKzMyNDIsNiBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQmFja2dyb3Vu
ZFJlY3Vyc2l2ZWx5KGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIGJvb2wgdAogCiBib29s
IEZyYW1lVmlldzo6aGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3QK
IHsKLSAgICBpZiAoIWZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5
b25kUGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBUaWxlZEJhY2tpbmcqIHRp
bGVkQmFja2luZyA9IHRoaXMtPnRpbGVkQmFja2luZygpOwogICAgIGlmICghdGlsZWRCYWNraW5n
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjU5LDExICszMjYwLDggQEAgdm9pZCBGcmFt
ZVZpZXc6OnVwZGF0ZUV4dGVuZEJhY2tncm91bmRJZk5lY2Vzc2FyeSgpCiAKIEZyYW1lVmlldzo6
RXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFja2dy
b3VuZE1vZGUoKSBjb25zdAogewotICAgIC8vIEp1c3QgYmVjYXVzZSBTZXR0aW5nczo6YmFja2dy
b3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSBpcyB0cnVlIGRvZXMgbm90IG5lY2Vzc2FyaWx5
IG1lYW4KLSAgICAvLyB0aGF0IHRoZSBiYWNrZ3JvdW5kIHJlY3QgbmVlZHMgdG8gYmUgZXh0ZW5k
ZWQgZm9yIHBhaW50aW5nLiBTaW1wbGUgYmFja2dyb3VuZHMgY2FuIGJlIGV4dGVuZGVkCi0gICAg
Ly8ganVzdCB3aXRoIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0Um9vdEV4dGVuZGVkQmFja2dy
b3VuZENvbG9yKCkuIE1vcmUgY29tcGxpY2F0ZWQgYmFja2dyb3VuZHMsCi0gICAgLy8gc3VjaCBh
cyBpbWFnZXMsIHJlcXVpcmUgZXh0ZW5kaW5nIHRoZSBiYWNrZ3JvdW5kIHJlY3QgdG8gY29udGlu
dWUgcGFpbnRpbmcgaW50byB0aGUgZXh0ZW5kZWQKLSAgICAvLyByZWdpb24uIFRoaXMgZnVuY3Rp
b24gZmluZHMgb3V0IGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBleHRlbmQgdGhlIGJhY2tncm91bmQg
cmVjdCBmb3IgcGFpbnRpbmcuCisgICAgaWYgKCFtX2NsaXBUb1NhZmVBcmVhKQorICAgICAgICBy
ZXR1cm4gRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZUFsbDsKIAogI2lmIFBMQVRGT1JNKElPUykKICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vMTYyMDEzNzM+CkBAIC0zMjcyLDYgKzMyNzAsMTIgQEAgRnJh
bWVWaWV3OjpFeHRlbmRlZEJhY2tncm91bmRNb2RlIEZyYW1lVmlldzo6Y2FsY3VsYXRlRXh0ZW5k
ZWRCYWNrZ3JvdW5kTW9kZSgpIGMKICAgICBpZiAoIWZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3Jv
dW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKQogICAgICAgICByZXR1cm4gRXh0ZW5kZWRCYWNr
Z3JvdW5kTW9kZU5vbmU7CiAKKyAgICAvLyBKdXN0IGJlY2F1c2UgU2V0dGluZ3M6OmJhY2tncm91
bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkgaXMgdHJ1ZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBt
ZWFuCisgICAgLy8gdGhhdCB0aGUgYmFja2dyb3VuZCByZWN0IG5lZWRzIHRvIGJlIGV4dGVuZGVk
IGZvciBwYWludGluZy4gU2ltcGxlIGJhY2tncm91bmRzIGNhbiBiZSBleHRlbmRlZAorICAgIC8v
IGp1c3Qgd2l0aCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldFJvb3RFeHRlbmRlZEJhY2tncm91
bmRDb2xvcigpLiBNb3JlIGNvbXBsaWNhdGVkIGJhY2tncm91bmRzLAorICAgIC8vIHN1Y2ggYXMg
aW1hZ2VzLCByZXF1aXJlIGV4dGVuZGluZyB0aGUgYmFja2dyb3VuZCByZWN0IHRvIGNvbnRpbnVl
IHBhaW50aW5nIGludG8gdGhlIGV4dGVuZGVkCisgICAgLy8gcmVnaW9uLiBUaGlzIGZ1bmN0aW9u
IGZpbmRzIG91dCBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gZXh0ZW5kIHRoZSBiYWNrZ3JvdW5kIHJl
Y3QgZm9yIHBhaW50aW5nLgorCiAgICAgaWYgKCFmcmFtZSgpLmlzTWFpbkZyYW1lKCkpCiAgICAg
ICAgIHJldHVybiBFeHRlbmRlZEJhY2tncm91bmRNb2RlTm9uZTsKIApAQCAtMzMwMSw5ICszMzA1
LDYgQEAgRnJhbWVWaWV3OjpFeHRlbmRlZEJhY2tncm91bmRNb2RlIEZyYW1lVmlldzo6Y2FsY3Vs
YXRlRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSgpIGMKIAogdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZVRp
bGVzRm9yRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZShFeHRlbmRlZEJhY2tncm91bmRNb2RlIG1vZGUp
CiB7Ci0gICAgaWYgKCFmcmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJl
eW9uZFBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmll
dyA9IHRoaXMtPnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMzNDgsNiArMzM0OSwzMCBAQCBJbnRSZWN0IEZyYW1lVmlldzo6ZXh0ZW5kZWRC
YWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3QKICAgICByZXR1cm4gc25hcHBlZEludFJl
Y3QoZXh0ZW5kZWRSZWN0KTsKIH0KIAordm9pZCBGcmFtZVZpZXc6OnNldENsaXBUb1NhZmVBcmVh
KGJvb2wgY2xpcFRvU2FmZUFyZWEpCit7CisgICAgaWYgKCFmcmFtZSgpLmlzTWFpbkZyYW1lKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaXBUb1NhZmVBcmVhID09IGNsaXBUb1Nh
ZmVBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaXBUb1NhZmVBcmVhID0gY2xpcFRv
U2FmZUFyZWE7CisKKyAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpKQorICAgICAg
ICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5kaWRDaGFuZ2VDbGlwVG9TYWZlQXJlYShjbGlwVG9T
YWZlQXJlYSk7CisKKyAgICB1cGRhdGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKTsKKyAg
ICBhZGp1c3RUaWxlZEJhY2tpbmdDb3ZlcmFnZSgpOworCisgICAgUmVuZGVyVmlldyogcmVuZGVy
VmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKTsKKyAgICBpZiAoIXJlbmRlclZpZXcpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlbmRlckxheWVyQ29tcG9zaXRvciYgY29tcG9zaXRvciA9IHJlbmRl
clZpZXctPmNvbXBvc2l0b3IoKTsKKyAgICBjb21wb3NpdG9yLnVwZGF0ZVJvb3RDb250ZW50TGF5
ZXJDbGlwcGluZygpOworfQorCiBib29sIEZyYW1lVmlldzo6c2hvdWxkVXBkYXRlV2hpbGVPZmZz
Y3JlZW4oKSBjb25zdAogewogICAgIHJldHVybiBtX3Nob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggYjE0ZmVmMzNiNzQ2MjY2ODIzZDgzNDUwNGJi
NmE3ZDc0NTYyZjM1OS4uMGEzMjc1MzAwNDI0Y2RjYjY5ZWU2ZTljYTNlODIwZTY5OGFjZjk0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC0yMTMsNiArMjEzLDkgQEAgcHVibGljOgogICAg
IGJvb2wgaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3Q7CiAgICAg
SW50UmVjdCBleHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcoKSBjb25zdDsKIAorICAg
IGJvb2wgY2xpcFRvU2FmZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX2NsaXBUb1NhZmVBcmVhOyB9
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDbGlwVG9TYWZlQXJlYShib29sKTsKKwogICAg
IGJvb2wgc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oKSBjb25zdDsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKGJvb2wpOwogICAgIGJvb2wg
c2hvdWxkVXBkYXRlKCkgY29uc3Q7CkBAIC04MTMsNiArODE2LDggQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgbV9uZWVkc0RlZmVycmVkU2Nyb2xsYmFyc1VwZGF0ZSB7IGZhbHNlIH07CiAKKyAgICBi
b29sIG1fY2xpcFRvU2FmZUFyZWEgeyB0cnVlIH07CisKICAgICBSZWZQdHI8Q29udGFpbmVyTm9k
ZT4gbV9tYWludGFpblNjcm9sbFBvc2l0aW9uQW5jaG9yOwogCiAgICAgLy8gUmVuZGVyZXIgdG8g
aG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Zp
ZXdwb3J0Q29uZmlndXJhdGlvbi5jcHAKaW5kZXggODA1YzZlMGNjZTU3ZGU5ZGRmN2U5Y2VmMjI2
ZDhlMTAwODg5MWZkNS4uYmFjMDgxMjYzNzZiZmUwNmYwYjk4ZDQxMjM1ZDRlYjA2NjgzMTQ2ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcApAQCAt
MzM2LDYgKzMzNiw5IEBAIHZvaWQgVmlld3BvcnRDb25maWd1cmF0aW9uOjp1cGRhdGVDb25maWd1
cmF0aW9uKCkKIAogICAgIGlmIChib29sZWFuVmlld3BvcnRBcmd1bWVudElzU2V0KG1fdmlld3Bv
cnRBcmd1bWVudHMuc2hyaW5rVG9GaXQpKQogICAgICAgICBtX2NvbmZpZ3VyYXRpb24uYWxsb3dz
U2hyaW5rVG9GaXQgPSBtX3ZpZXdwb3J0QXJndW1lbnRzLnNocmlua1RvRml0ICE9IDAuOworCisg
ICAgaWYgKGJvb2xlYW5WaWV3cG9ydEFyZ3VtZW50SXNTZXQobV92aWV3cG9ydEFyZ3VtZW50cy5j
bGlwVG9TYWZlQXJlYSkpCisgICAgICAgIG1fY29uZmlndXJhdGlvbi5jbGlwVG9TYWZlQXJlYSA9
IG1fdmlld3BvcnRBcmd1bWVudHMuY2xpcFRvU2FmZUFyZWEgIT0gMC47CiB9CiAKIGRvdWJsZSBW
aWV3cG9ydENvbmZpZ3VyYXRpb246OnZpZXdwb3J0QXJndW1lbnRzTGVuZ3RoKGRvdWJsZSBsZW5n
dGgpIGNvbnN0CkBAIC00MzksNiArNDQyLDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgVmlld3BvcnRDb25maWd1cmF0aW9uOjpQYXJhbWV0ZXJzJgogICAg
IHRzLmR1bXBQcm9wZXJ0eSgibWF4aW11bVNjYWxlIiwgcGFyYW1ldGVycy5tYXhpbXVtU2NhbGUp
OwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxsb3dzVXNlclNjYWxpbmciLCBwYXJhbWV0ZXJzLmFs
bG93c1VzZXJTY2FsaW5nKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImFsbG93c1Nocmlua1RvRml0
IiwgcGFyYW1ldGVycy5hbGxvd3NTaHJpbmtUb0ZpdCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJj
bGlwVG9TYWZlQXJlYSIsIHBhcmFtZXRlcnMuY2xpcFRvU2FmZUFyZWEpOwogCiAgICAgcmV0dXJu
IHRzOwogfQpAQCAtNDcyLDYgKzQ3Niw3IEBAIENTdHJpbmcgVmlld3BvcnRDb25maWd1cmF0aW9u
OjpkZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wdXRlZCBsYXlv
dXQgc2l6ZSIsIGxheW91dFNpemUoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpZ25vcmluZyBo
b3Jpem9udGFsIHNjYWxpbmcgY29uc3RyYWludHMiLCBzaG91bGRJZ25vcmVIb3Jpem9udGFsU2Nh
bGluZ0NvbnN0cmFpbnRzKCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoImlnbm9yaW5nIHZlcnRpY2FsIHNjYWxpbmcgY29uc3RyYWludHMiLCBzaG91bGRJZ25vcmVW
ZXJ0aWNhbFNjYWxpbmdDb25zdHJhaW50cygpID8gInRydWUiIDogImZhbHNlIik7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJjbGlwIHRvIGRvY3VtZW50IiwgY2xpcFRvU2FmZUFyZWEoKSA/ICJ0cnVl
IiA6ICJmYWxzZSIpOwogICAgIAogICAgIHRzLmVuZEdyb3VwKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5oCmluZGV4IGI3MmMwYmZhOWQ2NzA3OTFhMjkx
MjlhMzU2NTljMDhhNmM2NDc3MjEuLmJhZGQ2ZThkN2I5YTdmOGMxNmEyYzQ4NjRjMjYxYTAxM2Q3
ODkzNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uaApA
QCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIG1heGltdW1TY2FsZSgwKQog
ICAgICAgICAgICAgLCBhbGxvd3NVc2VyU2NhbGluZyhmYWxzZSkKICAgICAgICAgICAgICwgYWxs
b3dzU2hyaW5rVG9GaXQoZmFsc2UpCisgICAgICAgICAgICAsIGNsaXBUb1NhZmVBcmVhKHRydWUp
CiAgICAgICAgICAgICAsIHdpZHRoSXNTZXQoZmFsc2UpCiAgICAgICAgICAgICAsIGhlaWdodElz
U2V0KGZhbHNlKQogICAgICAgICAgICAgLCBpbml0aWFsU2NhbGVJc1NldChmYWxzZSkKQEAgLTYz
LDYgKzY0LDcgQEAgcHVibGljOgogICAgICAgICBkb3VibGUgbWF4aW11bVNjYWxlOwogICAgICAg
ICBib29sIGFsbG93c1VzZXJTY2FsaW5nOwogICAgICAgICBib29sIGFsbG93c1Nocmlua1RvRml0
OworICAgICAgICBib29sIGNsaXBUb1NhZmVBcmVhOwogCiAgICAgICAgIGJvb2wgd2lkdGhJc1Nl
dDsKICAgICAgICAgYm9vbCBoZWlnaHRJc1NldDsKQEAgLTk1LDYgKzk3LDcgQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWxsb3dzVXNlclNjYWxpbmcoKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBib29sIGFsbG93c1VzZXJTY2FsaW5nSWdub3JpbmdBbHdheXNTY2FsYWJs
ZSgpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dzU2hyaW5rVG9GaXQoKSBjb25zdDsKKyAgICBib29s
IGNsaXBUb1NhZmVBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLmNsaXBUb1Nh
ZmVBcmVhOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFyYW1ldGVycyB3ZWJwYWdl
UGFyYW1ldGVycygpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXJhbWV0ZXJzIHRleHRE
b2N1bWVudFBhcmFtZXRlcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggNTA3NzI4Y2M3NDQ5N2VmOGVlMDhlNTNmYTZj
YTMzMTJjMmZiOWQyZC4uZDc5MTNkY2U0ZjI0ODQ5NjZlMGRkNDM3YjYxYmYwZTdlMGYyNjczNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKQEAgLTk3NCw2ICs5NzQsMTEgQEAgc3RhdGljIFJlbmRlckxheWVyTW9kZWxPYmplY3Qm
IHJlbmRlcmVyRm9yQ29tcG9zaXRpbmdUZXN0cyhjb25zdCBSZW5kZXJMYXllciYgbGEKICAgICBy
ZXR1cm4gKnJlbmRlcmVyOwogfQogCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
Um9vdENvbnRlbnRMYXllckNsaXBwaW5nKCkKK3sKKyAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNl
dE1hc2tzVG9Cb3VuZHMoIW1fcmVuZGVyVmlldy5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRF
eHRlbmRCZXlvbmRQYWdlKCkgJiYgbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmNsaXBUb1NhZmVB
cmVhKCkpOworfQorCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyhS
ZW5kZXJMYXllciYgbGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludCBzaG91bGRSZXBhaW50
LCBCYWNraW5nUmVxdWlyZWQgYmFja2luZ1JlcXVpcmVkKQogewogICAgIGJvb2wgbGF5ZXJDaGFu
Z2VkID0gZmFsc2U7CkBAIC0xMDA1LDggKzEwMTAsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdl
UgogICAgICAgICAgICAgICAgIHVwZGF0ZUxheWVyRm9ySGVhZGVyKHBhZ2UoKS5oZWFkZXJIZWln
aHQoKSk7CiAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJGb3JGb290ZXIocGFnZSgpLmZvb3Rl
ckhlaWdodCgpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGlmIChtX3JlbmRlclZpZXcuc2V0
dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKQotICAgICAgICAgICAg
ICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAg
ICAgICAgICAgICAgIHVwZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygpOwogCiAgICAgICAg
ICAgICAgICAgaWYgKFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nID0gbGF5ZXIuYmFja2luZygp
LT50aWxlZEJhY2tpbmcoKSkKICAgICAgICAgICAgICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRU
b3BDb250ZW50SW5zZXQobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnRvcENvbnRlbnRJbnNldCgp
KTsKQEAgLTMzODAsNyArMzM4NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1
cmVSb290TGF5ZXIoKQogI2VuZGlmCiAKICAgICAgICAgLy8gTmVlZCB0byBjbGlwIHRvIHByZXZl
bnQgdHJhbnNmb3JtZWQgY29udGVudCBzaG93aW5nIG91dHNpZGUgdGhpcyBmcmFtZQotICAgICAg
ICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgICAgIHVw
ZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygpOwogICAgIH0KIAogICAgIGlmIChyZXF1aXJl
c1Njcm9sbExheWVyKGV4cGVjdGVkQXR0YWNobWVudCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCA4MjhhZTlkMTI5YThlMTAz
NTYyYzM0YzI0NWI0OGFmMGUyOTE4N2FkLi44YWZjZDVkNDNiZDgxY2ZjYTgyNjg3MDFiYmUxNzc3
N2Q0M2Y1OTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5oCkBAIC0zMTMsNiArMzEzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Um9v
dEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgY29uc3QgQ29sb3Im
IHJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEV4dGVu
ZGVkQmFja2dyb3VuZENvbG9yOyB9CiAKKyAgICB2b2lkIHVwZGF0ZVJvb3RDb250ZW50TGF5ZXJD
bGlwcGluZygpOworCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICB2b2lkIHVwZGF0
ZVNjcm9sbFNuYXBQcm9wZXJ0aWVzV2l0aEZyYW1lVmlldyhjb25zdCBGcmFtZVZpZXcmKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCAxMTY5
ZDkyY2VmNzg4OGUxZTJjZDFlZTEwMzc1MDNiY2NlOTIwMDQwLi4wNWU4YmIxMmJmNjM4NWNhYWRk
NGZlODBiMjhiY2U3OTIxZmQ2OTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcApAQCAtODk3LDYgKzg5Nyw5IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50
VXNpbmdDb250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvCiAg
ICAgICAgICAgICB2aWV3LnJlcGFpbnRWaWV3UmVjdGFuZ2xlKHJlY3QpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmNsaXBU
b1NhZmVBcmVhKCkpCisgICAgICAgICAgICBzaG91bGRDbGlwVG9MYXllciA9IGZhbHNlOwogICAg
IH0KIAogICAgIGlmICh2aWV3KCkudXNlc0NvbXBvc2l0aW5nKCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggZTVkOTZlNjJjNDNm
MjU2NThlMjNiNjRkNDZjNjNjNjgwNmQwMDM4Yi4uZjllMWIzNjg2YzMxY2RjYzJhNjlhZjgwMzRh
ZWU4YmM5MzUyZGExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0KQEAgLTQyNjAsNiArNDI2MCwxMSBAQCBzdGF0aWMgaW5saW5lIFdlYktp
dDo6RmluZE9wdGlvbnMgdG9GaW5kT3B0aW9ucyhfV0tGaW5kT3B0aW9ucyB3a0ZpbmRPcHRpb25z
KQogICAgIHJldHVybiBfcGFnZS0+aXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgp
OwogfQogCistIChCT09MKV9jb250ZW50TWF5RHJhd0luT2JzY3VyZWRJbnNldHMKK3sKKyAgICBy
ZXR1cm4gIV9wYWdlLT5jbGlwVG9TYWZlQXJlYSgpOworfQorCiAtIChfV0tMYXlvdXRNb2RlKV9s
YXlvdXRNb2RlCiB7CiAjaWYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAppbmRleCBhMDI4NDNmNGIy
NGM3MzJkMWMyNDY5YTFlNDQ4OWU3MmI0MTk2OTJhLi44ZTg5YTA2NjdkOWQ0MmY3MWU3M2E1MWU2
MjFlMDQ3OTBmNzM3OWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaApAQCAtMTQ0LDYgKzE0NCw4IEBAIHR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpIHsKIC8vIERlZmluZSB0
aGUgaW5zZXQgb2YgdGhlIHNjcm9sbHZpZXcgdW51c2FibGUgYnkgdGhlIHdlYiBwYWdlLgogQHBy
b3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0T2JzY3VyZWRJbnNldHM6KSBVSUVkZ2VJbnNl
dHMgX29ic2N1cmVkSW5zZXRzOwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJP
T0wgX2NvbnRlbnRNYXlEcmF3SW5PYnNjdXJlZEluc2V0czsKKwogLy8gT3ZlcnJpZGUgdGhlIGlu
dGVyZmFjZSBvcmllbnRhdGlvbi4gQ2xpZW50cyB1c2luZyBfYmVnaW5BbmltYXRlZFJlc2l6ZVdp
dGhVcGRhdGVzOiBtdXN0IHVwZGF0ZSB0aGUgaW50ZXJmYWNlIG9yaWVudGF0aW9uCiAvLyBpbiB0
aGUgdXBkYXRlIGJsb2NrLgogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0SW50ZXJm
YWNlT3JpZW50YXRpb25PdmVycmlkZTopIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gX2ludGVyZmFj
ZU9yaWVudGF0aW9uT3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuaAppbmRleCA4YzU3NzZmMzQyOGY2YmIwZDE5OWFhYWU4ZTAy
NjYwMDcwNGFjZTEwLi5lOTJlNDgyMDIyMjg2NGQ5NzkwY2U3OWQwNTgxZTkyYjA4MTdlMzAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBs
LmgKQEAgLTE0Niw2ICsxNDYsOCBAQCBwcml2YXRlOgogCiAgICAgV2ViQ29yZTo6VXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbiB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRSOyB9
CiAKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb0RvY3VtZW50KGJvb2wgY2xpcFRvRG9jdW1lbnQp
IG92ZXJyaWRlIHsgfQorCiAgICAgLy8gTWVtYmVycyBvZiBQYWdlQ2xpZW50SW1wbCBjbGFzcwog
ICAgIEd0a1dpZGdldCogbV92aWV3V2lkZ2V0OwogICAgIERlZmF1bHRVbmRvQ29udHJvbGxlciBt
X3VuZG9Db250cm9sbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXgg
YjU2ZGViZjUzYjE1YjY0NDgwZWM2NDhlN2Y3N2U2OTkxNGMwOTI0Yy4uMGRkZmQ0NjIzNTQ0NTQ4
NjMwMmMyODE1ZjU1ZTgzMTBmZmQwNzk2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCkBAIC0zODYsNiArMzg2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRD
b25jbHVkZUVkaXREYXRhSW50ZXJhY3Rpb24oc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yRGF0YT4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlRGF0YUludGVyYWN0
aW9uQ2FyZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHByZXZpb3VzQ2FyZXRSZWN0LCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjYXJldFJlY3QpID0gMDsKICNlbmRpZgorCisgICAgdmly
dHVhbCB2b2lkIGRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpID0g
MDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAppbmRleCBkNzdkNDA3MjMyMjMzYTVjZTk4OWYzZjliNDdkYWFhMmNi
ZTQwMGRhLi5jODgzMzU4MjE1NDJkNjE0NDdhMmIxMjZhZmMyMTczOTk3YjhjZDM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNTQ1NSw2ICs1NDU1LDgg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGUoUmVzZXRTdGF0ZVJlYXNvbiByZXNldFN0
YXRlUmVhc29uKQogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgcmVxdWVzdFBvaW50ZXJV
bmxvY2soKTsKICNlbmRpZgorCisgICAgbV9jbGlwVG9TYWZlQXJlYSA9IHRydWU7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKCkKQEAgLTY4ODAs
NCArNjg4MiwxMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcFVSTFNjaGVtZUhhbmRsZXJUYXNr
KHVpbnQ2NF90IGhhbmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdAogICAgIGl0ZXJhdG9yLT52YWx1
ZS0+c3RvcFRhc2soKnRoaXMsIHJlc291cmNlSWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRDbGlwVG9TYWZlQXJlYShib29sIGNsaXBUb1NhZmVBcmVhKQoreworICAgIG1f
Y2xpcFRvU2FmZUFyZWEgPSBjbGlwVG9TYWZlQXJlYTsKKworICAgIG1fcGFnZUNsaWVudC5kaWRD
aGFuZ2VDbGlwVG9TYWZlQXJlYShjbGlwVG9TYWZlQXJlYSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDA1OGM1
OWJmODhlMmYyNDA5NzIwYTljZWMzYjE0YjI2MjdiNjBmNWIuLmViZDRlMjcxZmYxNjhmYjc0NmVj
OTQ1YmIyNDc3OTYxMGY5YmIyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKQEAgLTExOTEsNiArMTE5MSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVSTFNjaGVt
ZUhhbmRsZXJGb3JTY2hlbWUoUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+JiYsIGNvbnN0IFN0cmlu
ZyYgc2NoZW1lKTsKICAgICBXZWJVUkxTY2hlbWVIYW5kbGVyKiB1cmxTY2hlbWVIYW5kbGVyRm9y
U2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKIAorICAgIHZvaWQgc2V0Q2xpcFRvU2FmZUFy
ZWEoYm9vbCk7CisgICAgYm9vbCBjbGlwVG9TYWZlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xp
cFRvU2FmZUFyZWE7IH0KKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYs
IFdlYlByb2Nlc3NQcm94eSYsIHVpbnQ2NF90IHBhZ2VJRCwgUmVmPEFQSTo6UGFnZUNvbmZpZ3Vy
YXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CkBAIC0xOTc2LDcgKzE5
NzksOSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBib29sIG1faXNVc2luZ0hpZ2hQZXJmb3Jt
YW5jZVdlYkdMIHsgZmFsc2UgfTsKLSAgICAgICAgCisKKyAgICBib29sIG1fY2xpcFRvU2FmZUFy
ZWEgeyB0cnVlIH07CisKICAgICBXZWFrUHRyRmFjdG9yeTxXZWJQYWdlUHJveHk+IG1fd2Vha1B0
ckZhY3Rvcnk7CiAKICAgICBIYXNoTWFwPFN0cmluZywgUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+
PiBtX3VybFNjaGVtZUhhbmRsZXJzQnlTY2hlbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBmNmM1NGM3MTYyNmJkNWZlMTgx
MDNjNTUyMzFmYjc4MTk0YWY3Yjg2Li44NDVkNDMwOTRlMTAwYmQwYjEwMmIxYzcyMDM1ODg1NWIw
YmZlMzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4KQEAgLTQ5NCw0ICs0OTQsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkg
ewogCiAgICAgU3RhcnRVUkxTY2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJZGVudGlm
aWVyLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCByZXF1ZXN0KQogICAgIFN0b3BVUkxTY2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJ
ZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpCisKKyAgICBTZXRDbGlwVG9T
YWZlQXJlYShib29sIGNsaXBUb1NhZmVBcmVhKQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCmluZGV4IDUyMWUxZGQ4MWEyM2IyYjI5YWMy
MjE4YzM3YTFhNThhNzZiMjhkYWEuLjY5MTQyNmRkZjZjZjZiMjY5NDE4NzMzYjkwZjAwMWY3YjQ0
MzU1Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVu
dEltcGxJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJ
bXBsSU9TLmgKQEAgLTE5OCw2ICsxOTgsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBoYW5kbGVB
Y3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm9SZXNwb25zZShib29sIGhhc0FjdGl2ZVNlc3Npb24s
IGNvbnN0IFN0cmluZyYgdGl0bGUsIGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIGVsYXBzZWRUaW1l
KSBvdmVycmlkZTsKIAorICAgIHZvaWQgZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEoYm9vbCBjbGlw
VG9TYWZlQXJlYSkgb3ZlcnJpZGU7CisKICNpZiBVU0UoUVVJQ0tfTE9PSykKICAgICB2b2lkIHJl
cXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUs
IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJikgb3ZlcnJpZGU7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJ
T1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1t
CmluZGV4IGI5NmNkMmUyNzhmMTU0MGNlNjFkNDk3NTVhZmM5OTFmYTE4YjcyZTAuLmQ4ZDViYjA5
MzEzNTQxMDVhZTExMjlkYTNlNDVlODg1NDE0NDMyNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtODIxLDYgKzgyMSwxMSBA
QCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVu
dChjb25zdCBTdHJpbmcmIGZpbGVOYW1lLAogfQogI2VuZGlmCiAKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OmRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpCit7CisgICAg
W21fd2ViVmlldyBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQppbmRleCBkN2M2MzkyMjMzMzZi
YzIwZTRkYmQwODdkN2E1ZWQxOTNjNWU3MTM2Li43NWY3MThiZGY5ZGI3OTUxZWQxODYyMjhmMDk1
YTljOGUxYTgyOTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3Lm1tCkBAIC0zNjAsNiArMzYwLDcgQEAgcHJpdmF0ZToKIAogICAgIFtfZml4ZWRDbGlw
cGluZ1ZpZXcgc2V0Q2VudGVyOmNsaXBwaW5nQm91bmRzLmxvY2F0aW9uKCldOyAvLyBOb3QgcmVh
bGx5IHRoZSBjZW50ZXIgc2luY2Ugd2Ugc2V0IGFuIGFuY2hvciBwb2ludC4KICAgICBbX2ZpeGVk
Q2xpcHBpbmdWaWV3IHNldEJvdW5kczpjbGlwcGluZ0JvdW5kc107CisgICAgW19maXhlZENsaXBw
aW5nVmlldyBsYXllcl0ubWFza3NUb0JvdW5kcyA9IF9wYWdlLT5jbGlwVG9TYWZlQXJlYSgpOwog
fQogCiAtICh2b2lkKV9kaWRFeGl0U3RhYmxlU3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAppbmRleCAzY2I2Y2E4YWE2ZjNhMTlhZjU4Zjg0NTA3
MGNhM2JmNWVlNDRiZDU5Li4wZjhlN2UzYmI5Y2FhN2UzMmI3MjViMzY4YmQ2ZGQ4NmJmMTI5MTMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCkBA
IC0yNTEsNiArMjUxLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkUmVzdG9yZVNjcm9sbFBv
c2l0aW9uKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCB3aW5kb3dJc0Zyb250V2luZG93VW5kZXJNb3Vz
ZShjb25zdCBOYXRpdmVXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRpZENo
YW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpIG92ZXJyaWRlIHsgfQogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggMTRj
MWU0NjYxMjYzYjFkMWRlMDkyMDY4YWRjOWQwZGI2ZDA5ZDBiYy4uNmJkZjY3OGFmYjA3NDcwNGRk
NWMzYjY3M2YwNmM5YTE2ZTExNjM3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTIy
Miw0ICsxMjIyLDkgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZEludmFsaWRhdGVEb2N1bWVu
dE1hcmtlclJlY3RzKCkKICAgICBtX3BhZ2UuZmluZENvbnRyb2xsZXIoKS5kaWRJbnZhbGlkYXRl
RG9jdW1lbnRNYXJrZXJSZWN0cygpOwogfQogCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkQ2hh
bmdlQ2xpcFRvU2FmZUFyZWEoYm9vbCBjbGlwVG9TYWZlQXJlYSkKK3sKKyAgICBtX3BhZ2Uuc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRDbGlwVG9TYWZlQXJlYShjbGlwVG9TYWZlQXJl
YSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4
IGE1MTRiMjk5NDg4ODQyYmNmOTI0NTg5MTNiMDM3OWIzZWFmOWViYWUuLjA0Y2Y2YjVhMmE2Yzk1
NWE4MzRmZGIyYTJiMzA5MmEwNzc1ODE2YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMzQw
LDYgKzM0MCw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEludmFsaWRhdGVEb2N1bWVudE1h
cmtlclJlY3RzKCkgZmluYWw7CiAKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJv
b2wpIGZpbmFsOworCiAgICAgU3RyaW5nIG1fY2FjaGVkVG9vbFRpcDsKICAgICBtdXRhYmxlIFJl
ZlB0cjxXZWJGcmFtZT4gbV9jYWNoZWRGcmFtZVNldExhcmdlc3RGcmFtZTsKICAgICBtdXRhYmxl
IGJvb2wgbV9jYWNoZWRNYWluRnJhbWVIYXNIb3Jpem9udGFsU2Nyb2xsYmFyIHsgZmFsc2UgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQppbmRleCAwYWM3YjgzZjNhZWIzMGY0OGQ3NGVkN2YwMjYwYWFhZTc0MTlkOTkzLi40YjEz
NWQwNGEzMzQyMGQxYjZjM2Y0ODUzMWNjYmU1NTliODE3YTViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0zMDQ1LDYg
KzMwNDUsOCBAQCB2b2lkIFdlYlBhZ2U6OnZpZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQoKQog
ICAgIHVwZGF0ZVZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIEZyYW1l
VmlldyYgZnJhbWVWaWV3ID0gKm1haW5GcmFtZVZpZXcoKTsKKyAgICBmcmFtZVZpZXcuc2V0Q2xp
cFRvU2FmZUFyZWEobV92aWV3cG9ydENvbmZpZ3VyYXRpb24uY2xpcFRvU2FmZUFyZWEoKSk7CisK
ICAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy5zY3JvbGxQb3NpdGlvbigp
OwogICAgIGlmICghbV9oYXNSZWNlaXZlZFZpc2libGVDb250ZW50UmVjdHNBZnRlckRpZENvbW1p
dExvYWQpIHsKICAgICAgICAgRmxvYXRTaXplIG1pbmltdW1MYXlvdXRTaXplSW5TY3JvbGxWaWV3
Q29vcmRpbmF0ZXMgPSBtX3ZpZXdwb3J0Q29uZmlndXJhdGlvbi5taW5pbXVtTGF5b3V0U2l6ZSgp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDEx
YzI4NTY1YzRlMjU2MjM5ZWNmZjQ0YjRlNjg5YmI1OWZmYzFhODQuLjU0MTFjNzk1N2FhMDViNDQ1
ZWE4Y2E3NTNmNzU5NjVmNzQ1MzQ4YmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxNy0wNC0xNCAgVGltIEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIGEgdmlld3Bv
cnQgcGFyYW1ldGVyIHRvIGRpc2FibGUgY2xpcHBpbmcgdG8gdGhlIHNhZmUgYXJlYQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzY2CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xs
ZXJJT1MubW06CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6c2V0T2JzY3VyZWRJ
bnNldHMpOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRp
bmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGw6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9V
SVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VUlT
Y3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJlZEluc2V0cyk6CisgICAgICAgICogVGVzdFJ1bm5l
clNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbToK
KyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJlZEluc2V0cyk6Cisg
ICAgICAgIEFkZCBhIFVJU2NyaXB0Q29udHJvbGxlciBtZWNoYW5pc20gdG8gaW5zdGFsbCBvYnNj
dXJlZCBpbnNldHMKKyAgICAgICAgb24gdGhlIHdlYiB2aWV3LgorCiAyMDE3LTA0LTE0ICBKb25h
dGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICB3ZWJraXRweTogSWdu
b3JlIHByZXZpb3VzbHkgbGF1bmNoZWQgcGlkIHdoZW4gc3lzdGVtIGlzIHVuZGVyIHN0cmVzcwpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklP
Uy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0K
aW5kZXggNDAzYjU5YjQxZDM1OTlkNThhMjM2NTk5Mzg4MjNmNjM3MzgyNTcyNi4uYjBlMDRkZDY2
YTkxM2Q2NmEwNGI5ZjhkMjhkMjc0ODU2NzFjZDZjNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBAIC0zMTYsNiArMzE2LDEwIEBA
IHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjphZGRWaWV3VG9XaW5kb3coSlNWYWx1ZVJlZikKIHsK
IH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKK3sKK30KKwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQv
QmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
VUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKaW5kZXggZjY2
YWUxNTIyZjUxNjE3MDdjYzdmMWY4NGQ0Yzg4MWE5MmRjMmJmMS4uZGJhNDU2ZWJjYjFlM2Y5ODdk
ODliMjc4NmVlNTNmYmRjOWFlMmFiYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbAorKysgYi9U
b29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENv
bnRyb2xsZXIuaWRsCkBAIC0yMzIsNCArMjMyLDYgQEAgaW50ZXJmYWNlIFVJU2NyaXB0Q29udHJv
bGxlciB7CiAgICAgdm9pZCBhZGRWaWV3VG9XaW5kb3cob2JqZWN0IGNhbGxiYWNrKTsKIAogICAg
IHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKERPTVN0cmluZyBwcmVmZXJlbmNlLCBET01TdHJpbmcg
dmFsdWUpOworCisgICAgdm9pZCBzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3VibGUg
cmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KTsKIH07CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3Bw
IGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9s
bGVyLmNwcAppbmRleCA2MTJjOWUyOWYxZGEyNGUyMTg4NDY0MDVjODE0MjBlNmFiZGI4MjNmLi4w
ZjFmY2MxZDQ5ZjIxNmUzNWM3MWY4NmZhZjg4NmU4YWE0OTk3NTljIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5jcHAKQEAgLTM5OSw2ICszOTksMTAgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IFVJU2NyaXB0Q29udHJvbGxlcjo6YWNjZXNzaWJpbGl0eVNwZWFrU2VsZWN0aW9uQ29udGVudCgK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9i
c2N1cmVkSW5zZXRzKGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSwgZG91
YmxlIGxlZnQpCit7Cit9CisKICNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250
cm9sbGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlw
dENvbnRyb2xsZXIuaAppbmRleCA0NmMyOGIxNDAxZGQ0NjQxNzY0NGFhNzY2NzRjYWFjM2IxYmQ0
Y2E5Li42NjI3Mzg4N2I5ZTZhYjk5MTZiNTlhOTE4OWEyMjFiMTA4NGQ3YTMwIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xs
ZXIuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlw
dENvbnRyb2xsZXIuaApAQCAtMTU2LDYgKzE1Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92
ZVZpZXdGcm9tV2luZG93KEpTVmFsdWVSZWYpOwogICAgIHZvaWQgYWRkVmlld1RvV2luZG93KEpT
VmFsdWVSZWYpOwogCisgICAgdm9pZCBzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3Vi
bGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KTsKKwogcHJpdmF0ZToKICAgICBV
SVNjcmlwdENvbnRyb2xsZXIoVUlTY3JpcHRDb250ZXh0Jik7CiAgICAgCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCmluZGV4IDdjMzUxZjgyZjg2
N2JkYjdlMmQxMDI5OTNkNmEwMWZmMzU4YjYwNDIuLmEwZDExMmY1NjMyNjQwYjRmNzJmMWU3MmZh
OGY2YmM2YjkwMGUyYjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rl
c3RDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RD
b250cm9sbGVySU9TLm1tCkBAIC04NSw2ICs4NSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgICAgIFtzY3JvbGxWaWV3
IF9yZW1vdmVBbGxBbmltYXRpb25zOllFU107CiAgICAgICAgIFtzY3JvbGxWaWV3IHNldFpvb21T
Y2FsZToxIGFuaW1hdGVkOk5PXTsKICAgICAgICAgW3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNl
dDpDR1BvaW50WmVyb107CisKKyAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBVSUVk
Z2VJbnNldHNaZXJvOworICAgICAgICB3ZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKS5fb2JzY3VyZWRJ
bnNldHMgPSBVSUVkZ2VJbnNldHNaZXJvOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IGNlNjdmNWU1
NDM5Zjg3Yzc1ZDljYTY1ZTI0NjRjZmVmZjZhMzhkZDYuLjU3YTE5NTQ5ZDlkODkzZjJlMmQ4MjQy
NjRjMTYwN2YzMGM1ZjJkYmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTY2OCw2ICs2NjgsMTQgQEAgdm9pZCBVSVNj
cmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtQ2xlYXJBbGxDYWxsYmFja3MoKQogICAgIHdlYlZpZXcu
ZGlkRW5kU2Nyb2xsaW5nQ2FsbGJhY2sgPSBuaWw7CiB9CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9s
bGVyOjpzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBi
b3R0b20sIGRvdWJsZSBsZWZ0KQoreworICAgIFVJRWRnZUluc2V0cyBpbnNldHMgPSBVSUVkZ2VJ
bnNldHNNYWtlKHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCk7CisgICAgVGVzdFJ1bm5lcldLV2Vi
VmlldyAqd2ViVmlldyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVZpZXcoKTsKKyAgICB3ZWJWaWV3LnNjcm9sbFZpZXcuY29udGVudEluc2V0ID0g
aW5zZXRzOworICAgIHdlYlZpZXcuX29ic2N1cmVkSW5zZXRzID0gaW5zZXRzOworfQorCiB9CiAK
ICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTFjZmU5MzU4MjI5NDQyZTVkMjBiNjlj
ZmFmNGM1MmZhMjdjZWY3ZS4uNmFlMDczYzU1NTRjNDc5OWYwMWIyYWY1NTMxNDZlYjNmYzVmYTMw
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE3LTA0LTE0ICBUaW0gSG9ydG9uICA8dGltb3Ro
eV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2aWV3cG9ydCBwYXJhbWV0
ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzMxNTY0NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEt
bm8tZ2V0cy1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0aWxl
ZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10
aWxlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1j
bGlwLXRvLXNhZmUtYXJlYS15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUt
YXJlYS15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbDogQWRkZWQuCisKIDIwMTctMDQtMTQg
IFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgU2tpcCB3b3Jr
ZXJzL3dhc20tKiBMYXlvdXRUZXN0cyBvbiBpb3Mtc2ltdWxhdG9yLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEtbm8t
Z2V0cy1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2lu
Zy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEtbm8tZ2V0cy1tYXJnaW4tdGlsZXMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3NTBiZDNkYTA3NDMyMjIxZDk0MGIxYzAxMzhkYTFkMmY4
ODJkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92
aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10aWxlcy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwyMyBAQAorKEdyYXBoaWNzTGF5ZXIKKyAgKGFuY2hvciAwLjAwIDAuMDAp
CisgIChib3VuZHMgMzIwLjAwIDU0OC4wMCkKKyAgKHZpc2libGUgcmVjdCAwLjAwLCAwLjAwIDI4
MC4wMCB4IDUzOC4wMCkKKyAgKGNvdmVyYWdlIHJlY3QgLTQwLjAwLCAtMTAuMDAgMzIwLjAwIHgg
NTQ4LjAwKQorICAoaW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisgIChjb250ZW50c1NjYWxl
IDIuMDApCisgIChjaGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChib3VuZHMg
MzIwLjAwIDU0OC4wMCkKKyAgICAgIChjb250ZW50c09wYXF1ZSAxKQorICAgICAgKHZpc2libGUg
cmVjdCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAgICAgIChjb3ZlcmFnZSByZWN0IC00
MC4wMCwgLTEwLjAwIDU3Ni4wMCB4IDgwNC4wMCkKKyAgICAgIChpbnRlcnNlY3RzIGNvdmVyYWdl
IHJlY3QgMSkKKyAgICAgIChjb250ZW50c1NjYWxlIDIuMDApCisgICAgICAodGlsZSBjYWNoZSBj
b3ZlcmFnZSAtNTEyLCAtNTEyIDEzNDQgeCAxNTcyKQorICAgICAgKHRpbGUgc2l6ZSA1MTIgeCA1
NDgpCisgICAgICAodG9wIGxlZnQgdGlsZSAtMSwgLTEgdGlsZXMgZ3JpZCAzIHggMykKKyAgICAg
IChpbiB3aW5kb3cgMSkKKyAgICApCisgICkKKykKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
dGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEtbm8tZ2V0cy1tYXJn
aW4tdGlsZXMuaHRtbCBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNs
aXAtdG8tc2FmZS1hcmVhLW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGFh
NTMyODQ4ZmRlMTAwMDdiZDdmYzI2YTgxZDBlZmY1MTJkOWZmZAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVh
LW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWwKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0
bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGlibGVWaWV3cG9ydD10cnVlIF0g
LS0+CisKKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9
ImluaXRpYWwtc2NhbGU9MSwgY2xpcC10by1zYWZlLWFyZWE9bm8iPgorICAgIDxzY3JpcHQ+Cisg
ICAgICAgIGZ1bmN0aW9uIGdldFVJU2NyaXB0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGAKKyAgICAgICAgICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB1aUNvbnRy
b2xsZXIuc2V0T2JzY3VyZWRJbnNldHMoMTAsIDIwLCAzMCwgNDApOworICAgICAgICAgICAgICAg
IHVpQ29udHJvbGxlci5pbW1lZGlhdGVTY3JvbGxUb09mZnNldCgtNDAsIC0xMCk7CisgICAgICAg
ICAgICAgICAgdWlDb250cm9sbGVyLmRvQWZ0ZXJWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUoZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIudWlTY3JpcHRDb21w
bGV0ZSgpOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9KSgpO2AKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRvVGVzdCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoZ2V0VUlTY3JpcHQoKSwgZnVuY3Rpb24o
cmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheWVycycpLmlubmVyVGV4
dCA9IGludGVybmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcm5hbHMuTEFZRVJfVFJFRV9JTkNMVURFU19WSVNJQkxFX1JFQ1RTIHwgaW50
ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVERVNfVElMRV9DQUNIRVMpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCisgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xv
YWQnLCBkb1Rlc3QsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8
cHJlIGlkPSJsYXllcnMiPkxheWVyIHRyZWUgZ29lcyBoZXJlPC9wPgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xp
cC10by1zYWZlLWFyZWEteWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLXll
cy1nZXRzLW5vLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzU0N2M5NTI5
ZjgwOTkxMzcxODhmODdjMzhkNzBjZjkxMGEzZWJiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLXllcy1n
ZXRzLW5vLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMyBAQAorKEdyYXBo
aWNzTGF5ZXIKKyAgKGFuY2hvciAwLjAwIDAuMDApCisgIChib3VuZHMgMzIwLjAwIDU0OC4wMCkK
KyAgKHZpc2libGUgcmVjdCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAgKGNvdmVyYWdl
IHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1MzguMDApCisgIChpbnRlcnNlY3RzIGNvdmVyYWdl
IHJlY3QgMSkKKyAgKGNvbnRlbnRzU2NhbGUgMi4wMCkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3Jh
cGhpY3NMYXllcgorICAgICAgKGJvdW5kcyAzMjAuMDAgNTQ4LjAwKQorICAgICAgKGNvbnRlbnRz
T3BhcXVlIDEpCisgICAgICAodmlzaWJsZSByZWN0IDAuMDAsIDAuMDAgMjgwLjAwIHggNTM4LjAw
KQorICAgICAgKGNvdmVyYWdlIHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1MzguMDApCisgICAg
ICAoaW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisgICAgICAoY29udGVudHNTY2FsZSAyLjAw
KQorICAgICAgKHRpbGUgY2FjaGUgY292ZXJhZ2UgMCwgMCAzMjAgeCA1NDgpCisgICAgICAodGls
ZSBzaXplIDUxMiB4IDU0OCkKKyAgICAgICh0b3AgbGVmdCB0aWxlIDAsIDAgdGlsZXMgZ3JpZCAx
IHggMSkKKyAgICAgIChpbiB3aW5kb3cgMSkKKyAgICApCisgICkKKykKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEt
eWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLmh0bWwgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5n
L2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xNmQxOTVhMzY0MzY4YTdkZDc0MzIwZjY5ODExYjA5YWEzZDZkNGY4
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3Bv
cnQtY2xpcC10by1zYWZlLWFyZWEteWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLmh0bWwKQEAgLTAs
MCArMSw0MyBAQAorPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgdXNl
RmxleGlibGVWaWV3cG9ydD10cnVlIF0gLS0+CisKKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEg
bmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MSwgY2xpcC10by1zYWZlLWFy
ZWE9eWVzIj4KKyAgICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBnZXRVSVNjcmlwdCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBgCisgICAgICAgICAgICAoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnNldE9ic2N1cmVkSW5zZXRzKDEwLCAyMCwg
MzAsIDQwKTsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuaW1tZWRpYXRlU2Nyb2xsVG9P
ZmZzZXQoLTQwLCAtMTApOworICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5kb0FmdGVyVmlz
aWJsZUNvbnRlbnRSZWN0VXBkYXRlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAg
dWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICB9KQorICAg
ICAgICAgICAgfSkoKTtgCisgICAgICAgIH0KKworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBkb1Rlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0
KGdldFVJU2NyaXB0KCksIGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICAgICAgICAgIGlmICh3
aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdsYXllcnMnKS5pbm5lclRleHQgPSBpbnRlcm5hbHMubGF5ZXJUcmVlQXNUZXh0KGRv
Y3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLkxBWUVSX1RSRUVfSU5D
TFVERVNfVklTSUJMRV9SRUNUUyB8IGludGVybmFscy5MQVlFUl9UUkVFX0lOQ0xVREVTX1RJTEVf
Q0FDSEVTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0LCBmYWxzZSk7CisgICAgPC9zY3Jp
cHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorPHByZSBpZD0ibGF5ZXJzIj5MYXllciB0cmVlIGdvZXMg
aGVyZTwvcD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307172</attachid>
            <date>2017-04-14 17:46:39 -0700</date>
            <delta_ts>2017-04-14 17:48:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170766-20170414174637.patch</filename>
            <type>text/plain</type>
            <size>41340</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1Mzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzU4ODFiMTQ1Yjg0NWMx
MTg3MDIxMjkyOWUwM2M1NmY3MGE3NTFjZC4uYzE2OWQ2NTM2MWVlMjc4ODJmNjAxZThkNjgxMmQw
OTA2YmQzNmNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE3LTA0LTE0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2
aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxNTY0NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9y
dC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sLAorICAgICAgICAg
ICAgICAgdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEteWVzLWdl
dHMtbm8tbWFyZ2luLXRpbGVzLmh0bWwsCisKKyAgICAgICAgKiBkb20vVmlld3BvcnRBcmd1bWVu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OnJlc29sdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0Vmlld3BvcnRGZWF0dXJlKToKKyAgICAgICAgKiBkb20vVmll
d3BvcnRBcmd1bWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKiBwYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWV3cG9ydENvbmZpZ3VyYXRpb246OnVwZGF0ZUNvbmZpZ3VyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpW
aWV3cG9ydENvbmZpZ3VyYXRpb246OmRlc2NyaXB0aW9uKToKKyAgICAgICAgKiBwYWdlL1ZpZXdw
b3J0Q29uZmlndXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRDb25maWd1cmF0
aW9uOjpQYXJhbWV0ZXJzOjpQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0
Q29uZmlndXJhdGlvbjo6Y2xpcFRvU2FmZUFyZWEpOgorICAgICAgICBBZGQgdmlld3BvcnQgcGFy
YW1ldGVyLgorCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5hYmxlU3BlY3VsYXRpdmVUaWxpbmdJZk5lZWRlZCk6CisgICAg
ICAgIElmIG5vdCBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhLCBlbmFibGUgInNwZWN1bGF0aXZl
IiB0aWxpbmcgaW1tZWRpYXRlbHksCisgICAgICAgIGJlY2F1c2UgdGhlIG1hcmdpbiB0aWxlcyBj
YW4gYmUgdmlzaWJsZSBpbW1lZGlhdGVseS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpoYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3Ojp1cGRhdGVUaWxlc0ZvckV4dGVuZGVkQmFja2dyb3VuZE1vZGUpOgorICAg
ICAgICBEb24ndCBjaGVjayB0aGUgc2V0dGluZyBoZXJlOyBqdXN0IHJlc3BlY3QgdGhlIG1vZGUg
dGhhdCBpcyBjb21wdXRlZAorICAgICAgICBieSBjYWxjdWxhdGVFeHRlbmRlZEJhY2tncm91bmRN
b2RlLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFj
a2dyb3VuZE1vZGUpOgorICAgICAgICBJZiB0aGUgdmlld3BvcnQgcGFyYW1ldGVyIHdhcyBzZXQs
IGFkZCBtYXJnaW4gdGlsZXMgb24gYm90aCBheGVzLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OnNldENsaXBUb1NhZmVBcmVhKToKKyAgICAgICAgTm90aWZ5IENocm9tZUNsaWVudCBv
ZiB0aGUgY2hhbmdlLCBhbmQgcmUtY29tcHV0ZSB0aGUgbWFyZ2luIHRpbGUgbW9kZS4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgRmFjdG9yIG91dCBjb2Rl
IHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRoZSBjb250ZW50IGxheWVyIGNsaXBzIHRvIGJvdW5kcywK
KyAgICAgICAgYW5kIG1ha2UgaXQgdGFrZSB0aGUgbmV3IHZpZXdwb3J0IHBhcmFtZXRlciBpbnRv
IGFjY291bnQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAg
ICAgRG9uJ3QgY2xpcCBSZW5kZXJWaWV3IHJlcGFpbnRzIHRvIFJlbmRlclZpZXcncyBHcmFwaGlj
c0xheWVyIGJvdW5kcyBpZgorICAgICAgICBjbGlwLXRvLXNhZmUtYXJlYSBpcyBvZmYsIGp1c3Qg
bGlrZSB3ZSBkbyBmb3Igc2xvdy1yZXBhaW50IG9iamVjdHMgaW4KKyAgICAgICAgZXh0ZW5kZWQg
YmFja2dyb3VuZCBtb2RlLgorCiAyMDE3LTA0LTE0ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgdGV4dC1hbGlnbiBzdGFydCAvIGVuZCBmYWlsdXJlIGluIHRhYmxl
IGNlbGxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjlkNmYwNDRiZDQ4OTUwYzlkMTQzYjI2ODg3MTYwNTdkNTU3
ZDE3Ni4uMzUwY2I2YTkyMTUyMTQ4YWI4NGFmZjZjY2YxZjlmMjg2OTNiNTBlMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTA0LTE0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0
b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2aWV3cG9ydCBwYXJhbWV0ZXIgdG8g
ZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzMxNTY0NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0
Q2xpcFRvU2FmZUFyZWEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGlwVG9TYWZlQXJlYSk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNocm9tZUNsaWVudDo6ZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNs
aWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgRm9yd2FyZCBjbGlwLXRv
LXNhZmUtYXJlYSBjaGFuZ2VzIGZyb20gQ2hyb21lQ2xpZW50IHRvIFdLV2ViVmlldy4KKyAgICAg
ICAgVXBkYXRlIHZpc2libGUgY29udGVudCByZWN0cyB3aGVuIGl0IGNoYW5nZXMsIHdoaWNoIHdp
bGwKKyAgICAgICAgcmVzdWx0IGluIGEgY2FsbCB0byB1cGRhdGVGaXhlZENsaXBwaW5nVmlldywg
YXMgYmVsb3cuCisgICAgICAgIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhl
IFVJIHByb2Nlc3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1By
aXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50TWF5RHJhd0luT2JzY3VyZWRJbnNldHNdKToKKyAg
ICAgICAgRXhwb3NlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjbGlwLXRvLXNhZmUtYXJlYSBi
aXQgYXMgU1BJLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHVwZGF0ZUZpeGVkQ2xpcHBpbmdWaWV3Ol0pOgorICAg
ICAgICBEaXNhYmxlIGZpeGVkIGNsaXBwaW5nIHdoZW4gY2xpcC10by1zYWZlLWFyZWEgaXMgZGlz
YWJsZWQuCisgICAgICAgIAorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dmlld3BvcnRDb25maWd1cmF0aW9u
Q2hhbmdlZCk6CisgICAgICAgIFB1c2ggdGhlIHZpZXdwb3J0J3MgY2xpcC10by1zYWZlLWFyZWEg
Yml0IG9udG8gdGhlIG1haW4gZnJhbWUncyBGcmFtZVZpZXcuCisKIDIwMTctMDQtMTQgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01lZGlhU291cmNlXSBQdXNo
IGNhcGFiaWxpdGllcyBhY3Jvc3MgcHJvY2VzcyBib3VuZGFyeSBkdXJpbmcgVUlQcm9jZXNzIGNh
cHR1cmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcAppbmRleCAxZTY5
YjkyNmRiMWJkNjcxMzBiYWNlZTUxMzUzNDIyMjRkM2IzODBkLi5jMDBkZDkwZDU4ZWVmMGEwODlh
MTYwY2ZjYWE4NzBhNmUxZjE5MWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmll
d3BvcnRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3Vt
ZW50cy5jcHAKQEAgLTI0Niw2ICsyNDYsNyBAQCBWaWV3cG9ydEF0dHJpYnV0ZXMgVmlld3BvcnRB
cmd1bWVudHM6OnJlc29sdmUoY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmlld3BvcnRTaQogICAg
IHJlc3VsdC51c2VyU2NhbGFibGUgPSB1c2VyWm9vbTsKICAgICByZXN1bHQub3JpZW50YXRpb24g
PSBvcmllbnRhdGlvbjsKICAgICByZXN1bHQuc2hyaW5rVG9GaXQgPSBzaHJpbmtUb0ZpdDsKKyAg
ICByZXN1bHQuY2xpcFRvU2FmZUFyZWEgPSBjbGlwVG9TYWZlQXJlYTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC0zNjMsMjIgKzM2NCwyMSBAQCBzdGF0aWMgZmxvYXQgZmluZFNjYWxlVmFs
dWUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZQog
ICAgIHJldHVybiBudW1lcmljVmFsdWU7CiB9CiAKLS8vIEZJWE1FOiBJdCdzIGtpbmQgb2YgYml6
YXJyZSB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIG9mIDEgYW5kIDAgdG8gcmVwcmVzZW50
IHRydWUgYW5kIGZhbHNlLgotc3RhdGljIGZsb2F0IGZpbmRCb29sZWFuVmFsdWUoRG9jdW1lbnQm
IGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZSkKK3N0YXRpYyBib29s
IGZpbmRCb29sZWFuVmFsdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3Ry
aW5nVmlldyB2YWx1ZSkKIHsKICAgICAvLyB5ZXMgYW5kIG5vIGFyZSB1c2VkIGFzIGtleXdvcmRz
LgogICAgIC8vIE51bWJlcnMgPj0gMSwgbnVtYmVycyA8PSAtMSwgZGV2aWNlLXdpZHRoIGFuZCBk
ZXZpY2UtaGVpZ2h0IGFyZSBtYXBwZWQgdG8geWVzLgogICAgIC8vIE51bWJlcnMgaW4gdGhlIHJh
bmdlIDwtMSwgMT4sIGFuZCB1bmtub3duIHZhbHVlcywgYXJlIG1hcHBlZCB0byBuby4KIAogICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgInllcyIpKQotICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAibm8iKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFs
dWUsICJkZXZpY2Utd2lkdGgiKSkKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImRldmlj
ZS1oZWlnaHQiKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIHN0ZDo6YWJzKG51bWVy
aWNQcmVmaXgoZG9jdW1lbnQsIGtleSwgdmFsdWUpKSA+PSAxID8gMSA6IDA7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmFicyhudW1lcmljUHJlZml4KGRvY3VtZW50LCBr
ZXksIHZhbHVlKSkgPj0gMTsKIH0KIAogdm9pZCBzZXRWaWV3cG9ydEZlYXR1cmUoVmlld3BvcnRB
cmd1bWVudHMmIGFyZ3VtZW50cywgRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwg
U3RyaW5nVmlldyB2YWx1ZSkKQEAgLTQwMyw2ICs0MDMsOCBAQCB2b2lkIHNldFZpZXdwb3J0RmVh
dHVyZShWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzLCBEb2N1bWVudCYgZG9jdW1lbnQsIFN0
cmluZwogI2VuZGlmCiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
a2V5LCAic2hyaW5rLXRvLWZpdCIpKQogICAgICAgICBhcmd1bWVudHMuc2hyaW5rVG9GaXQgPSBm
aW5kQm9vbGVhblZhbHVlKGRvY3VtZW50LCBrZXksIHZhbHVlKTsKKyAgICBlbHNlIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJjbGlwLXRvLXNhZmUtYXJlYSIpKQorICAg
ICAgICBhcmd1bWVudHMuY2xpcFRvU2FmZUFyZWEgPSBmaW5kQm9vbGVhblZhbHVlKGRvY3VtZW50
LCBrZXksIHZhbHVlKTsKICAgICBlbHNlCiAgICAgICAgIHJlcG9ydFZpZXdwb3J0V2FybmluZyhk
b2N1bWVudCwgVW5yZWNvZ25pemVkVmlld3BvcnRBcmd1bWVudEtleUVycm9yLCBrZXkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuaAppbmRleCA0ZTY5MDdmNTg5ZGI3MjZk
YmE4YWMwOWY4MWQ4Nzk1N2U3NmY4ODJiLi4xZThjYzIzYjU2NGFkOTE3YWVkMzNiMzQ4MjdhZjg5
NjRkZTUwODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVu
dHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuaApAQCAtNTEs
NiArNTEsNyBAQCBzdHJ1Y3QgVmlld3BvcnRBdHRyaWJ1dGVzIHsKICAgICBmbG9hdCB1c2VyU2Nh
bGFibGU7CiAgICAgZmxvYXQgb3JpZW50YXRpb247CiAgICAgZmxvYXQgc2hyaW5rVG9GaXQ7Cisg
ICAgYm9vbCBjbGlwVG9TYWZlQXJlYTsKIH07CiAKIHN0cnVjdCBWaWV3cG9ydEFyZ3VtZW50cyB7
CkBAIC05NCw2ICs5NSw3IEBAIHN0cnVjdCBWaWV3cG9ydEFyZ3VtZW50cyB7CiAgICAgZmxvYXQg
dXNlclpvb20geyBWYWx1ZUF1dG8gfTsKICAgICBmbG9hdCBvcmllbnRhdGlvbiB7IFZhbHVlQXV0
byB9OwogICAgIGZsb2F0IHNocmlua1RvRml0IHsgVmFsdWVBdXRvIH07CisgICAgYm9vbCBjbGlw
VG9TYWZlQXJlYSB7IHRydWUgfTsKICAgICBib29sIHdpZHRoV2FzRXhwbGljaXQgeyBmYWxzZSB9
OwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJiBvdGhlcikg
Y29uc3QKQEAgLTExMiw2ICsxMTQsNyBAQCBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHMgewogICAg
ICAgICAgICAgJiYgdXNlclpvb20gPT0gb3RoZXIudXNlclpvb20KICAgICAgICAgICAgICYmIG9y
aWVudGF0aW9uID09IG90aGVyLm9yaWVudGF0aW9uCiAgICAgICAgICAgICAmJiBzaHJpbmtUb0Zp
dCA9PSBvdGhlci5zaHJpbmtUb0ZpdAorICAgICAgICAgICAgJiYgY2xpcFRvU2FmZUFyZWEgPT0g
b3RoZXIuY2xpcFRvU2FmZUFyZWEKICAgICAgICAgICAgICYmIHdpZHRoV2FzRXhwbGljaXQgPT0g
b3RoZXIud2lkdGhXYXNFeHBsaWNpdDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVu
dC5oCmluZGV4IGIwODBhOTU4OTU5ZTQ1NjVjZjAyYzdmNDA4MDdmOGM0NDAyZjAxZjcuLmU3Y2U4
ZTI5NzNmY2M5MTRiZWVmYjQ3ODllZWNlZjAyNzc3MmQ5ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaApAQCAtNDY2LDYgKzQ2Niw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCByZXBvcnRQcm9jZXNzQ1BVVGltZShpbnQ2NF90LCBBY3Rpdml0eVN0YXRlRm9yQ1BVU2FtcGxp
bmcpIHsgfQogCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wp
IHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+Q2hyb21lQ2xpZW50KCkgeyB9CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDE0ODA4NGIyYjhhNDFhMjRiYTI3YjE5ZjY0
OGJkZTMyN2VjZjM5M2UuLjM2OGM2Y2QwYzg0M2NiMjkwZThiMGFmMGE0ZWIyNTM3NzgxMWZkNjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTI5MjksNiArMjkyOSwxMCBAQCB2b2lk
IEZyYW1lVmlldzo6ZW5hYmxlU3BlY3VsYXRpdmVUaWxpbmdJZk5lZWRlZCgpCiAgICAgICAgIG1f
c3BlY3VsYXRpdmVUaWxpbmdFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
KyAgICBpZiAoIW1fY2xpcFRvU2FmZUFyZWEpIHsKKyAgICAgICAgbV9zcGVjdWxhdGl2ZVRpbGlu
Z0VuYWJsZWQgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmICghc2hvdWxk
RW5hYmxlU3BlY3VsYXRpdmVUaWxpbmdEdXJpbmdMb2FkaW5nKCp0aGlzKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0zMjM4LDkgKzMyNDIsNiBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQmFja2dy
b3VuZFJlY3Vyc2l2ZWx5KGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIGJvb2wgdAogCiBi
b29sIEZyYW1lVmlldzo6aGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29u
c3QKIHsKLSAgICBpZiAoIWZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5k
QmV5b25kUGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZyA9IHRoaXMtPnRpbGVkQmFja2luZygpOwogICAgIGlmICghdGlsZWRCYWNr
aW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjU5LDExICszMjYwLDggQEAgdm9pZCBG
cmFtZVZpZXc6OnVwZGF0ZUV4dGVuZEJhY2tncm91bmRJZk5lY2Vzc2FyeSgpCiAKIEZyYW1lVmll
dzo6RXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFj
a2dyb3VuZE1vZGUoKSBjb25zdAogewotICAgIC8vIEp1c3QgYmVjYXVzZSBTZXR0aW5nczo6YmFj
a2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSBpcyB0cnVlIGRvZXMgbm90IG5lY2Vzc2Fy
aWx5IG1lYW4KLSAgICAvLyB0aGF0IHRoZSBiYWNrZ3JvdW5kIHJlY3QgbmVlZHMgdG8gYmUgZXh0
ZW5kZWQgZm9yIHBhaW50aW5nLiBTaW1wbGUgYmFja2dyb3VuZHMgY2FuIGJlIGV4dGVuZGVkCi0g
ICAgLy8ganVzdCB3aXRoIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0Um9vdEV4dGVuZGVkQmFj
a2dyb3VuZENvbG9yKCkuIE1vcmUgY29tcGxpY2F0ZWQgYmFja2dyb3VuZHMsCi0gICAgLy8gc3Vj
aCBhcyBpbWFnZXMsIHJlcXVpcmUgZXh0ZW5kaW5nIHRoZSBiYWNrZ3JvdW5kIHJlY3QgdG8gY29u
dGludWUgcGFpbnRpbmcgaW50byB0aGUgZXh0ZW5kZWQKLSAgICAvLyByZWdpb24uIFRoaXMgZnVu
Y3Rpb24gZmluZHMgb3V0IGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBleHRlbmQgdGhlIGJhY2tncm91
bmQgcmVjdCBmb3IgcGFpbnRpbmcuCisgICAgaWYgKCFtX2NsaXBUb1NhZmVBcmVhKQorICAgICAg
ICByZXR1cm4gRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZUFsbDsKIAogI2lmIFBMQVRGT1JNKElPUykK
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTYyMDEzNzM+CkBAIC0zMjcyLDYgKzMyNzAsMTIgQEAg
RnJhbWVWaWV3OjpFeHRlbmRlZEJhY2tncm91bmRNb2RlIEZyYW1lVmlldzo6Y2FsY3VsYXRlRXh0
ZW5kZWRCYWNrZ3JvdW5kTW9kZSgpIGMKICAgICBpZiAoIWZyYW1lKCkuc2V0dGluZ3MoKS5iYWNr
Z3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKQogICAgICAgICByZXR1cm4gRXh0ZW5kZWRC
YWNrZ3JvdW5kTW9kZU5vbmU7CiAKKyAgICAvLyBKdXN0IGJlY2F1c2UgU2V0dGluZ3M6OmJhY2tn
cm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkgaXMgdHJ1ZSBkb2VzIG5vdCBuZWNlc3Nhcmls
eSBtZWFuCisgICAgLy8gdGhhdCB0aGUgYmFja2dyb3VuZCByZWN0IG5lZWRzIHRvIGJlIGV4dGVu
ZGVkIGZvciBwYWludGluZy4gU2ltcGxlIGJhY2tncm91bmRzIGNhbiBiZSBleHRlbmRlZAorICAg
IC8vIGp1c3Qgd2l0aCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldFJvb3RFeHRlbmRlZEJhY2tn
cm91bmRDb2xvcigpLiBNb3JlIGNvbXBsaWNhdGVkIGJhY2tncm91bmRzLAorICAgIC8vIHN1Y2gg
YXMgaW1hZ2VzLCByZXF1aXJlIGV4dGVuZGluZyB0aGUgYmFja2dyb3VuZCByZWN0IHRvIGNvbnRp
bnVlIHBhaW50aW5nIGludG8gdGhlIGV4dGVuZGVkCisgICAgLy8gcmVnaW9uLiBUaGlzIGZ1bmN0
aW9uIGZpbmRzIG91dCBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gZXh0ZW5kIHRoZSBiYWNrZ3JvdW5k
IHJlY3QgZm9yIHBhaW50aW5nLgorCiAgICAgaWYgKCFmcmFtZSgpLmlzTWFpbkZyYW1lKCkpCiAg
ICAgICAgIHJldHVybiBFeHRlbmRlZEJhY2tncm91bmRNb2RlTm9uZTsKIApAQCAtMzMwMSw5ICsz
MzA1LDYgQEAgRnJhbWVWaWV3OjpFeHRlbmRlZEJhY2tncm91bmRNb2RlIEZyYW1lVmlldzo6Y2Fs
Y3VsYXRlRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSgpIGMKIAogdm9pZCBGcmFtZVZpZXc6OnVwZGF0
ZVRpbGVzRm9yRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZShFeHRlbmRlZEJhY2tncm91bmRNb2RlIG1v
ZGUpCiB7Ci0gICAgaWYgKCFmcmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVu
ZEJleW9uZFBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUmVuZGVyVmlldyogcmVuZGVy
VmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAg
IHJldHVybjsKQEAgLTMzNDgsNiArMzM0OSwzMCBAQCBJbnRSZWN0IEZyYW1lVmlldzo6ZXh0ZW5k
ZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3QKICAgICByZXR1cm4gc25hcHBlZElu
dFJlY3QoZXh0ZW5kZWRSZWN0KTsKIH0KIAordm9pZCBGcmFtZVZpZXc6OnNldENsaXBUb1NhZmVB
cmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpCit7CisgICAgaWYgKCFmcmFtZSgpLmlzTWFpbkZyYW1l
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaXBUb1NhZmVBcmVhID09IGNsaXBU
b1NhZmVBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaXBUb1NhZmVBcmVhID0gY2xp
cFRvU2FmZUFyZWE7CisKKyAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpKQorICAg
ICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5kaWRDaGFuZ2VDbGlwVG9TYWZlQXJlYShjbGlw
VG9TYWZlQXJlYSk7CisKKyAgICB1cGRhdGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKTsK
KyAgICBhZGp1c3RUaWxlZEJhY2tpbmdDb3ZlcmFnZSgpOworCisgICAgUmVuZGVyVmlldyogcmVu
ZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKTsKKyAgICBpZiAoIXJlbmRlclZpZXcpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJlbmRlckxheWVyQ29tcG9zaXRvciYgY29tcG9zaXRvciA9IHJl
bmRlclZpZXctPmNvbXBvc2l0b3IoKTsKKyAgICBjb21wb3NpdG9yLnVwZGF0ZVJvb3RDb250ZW50
TGF5ZXJDbGlwcGluZygpOworfQorCiBib29sIEZyYW1lVmlldzo6c2hvdWxkVXBkYXRlV2hpbGVP
ZmZzY3JlZW4oKSBjb25zdAogewogICAgIHJldHVybiBtX3Nob3VsZFVwZGF0ZVdoaWxlT2Zmc2Ny
ZWVuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggYjE0ZmVmMzNiNzQ2MjY2ODIzZDgzNDUw
NGJiNmE3ZDc0NTYyZjM1OS4uMGEzMjc1MzAwNDI0Y2RjYjY5ZWU2ZTljYTNlODIwZTY5OGFjZjk0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC0yMTMsNiArMjEzLDkgQEAgcHVibGljOgog
ICAgIGJvb2wgaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3Q7CiAg
ICAgSW50UmVjdCBleHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcoKSBjb25zdDsKIAor
ICAgIGJvb2wgY2xpcFRvU2FmZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX2NsaXBUb1NhZmVBcmVh
OyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDbGlwVG9TYWZlQXJlYShib29sKTsKKwog
ICAgIGJvb2wgc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKGJvb2wpOwogICAgIGJv
b2wgc2hvdWxkVXBkYXRlKCkgY29uc3Q7CkBAIC04MTMsNiArODE2LDggQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgbV9uZWVkc0RlZmVycmVkU2Nyb2xsYmFyc1VwZGF0ZSB7IGZhbHNlIH07CiAKKyAg
ICBib29sIG1fY2xpcFRvU2FmZUFyZWEgeyB0cnVlIH07CisKICAgICBSZWZQdHI8Q29udGFpbmVy
Tm9kZT4gbV9tYWludGFpblNjcm9sbFBvc2l0aW9uQW5jaG9yOwogCiAgICAgLy8gUmVuZGVyZXIg
dG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHAKaW5kZXggODA1YzZlMGNjZTU3ZGU5ZGRmN2U5Y2Vm
MjI2ZDhlMTAwODg5MWZkNS4uYmFjMDgxMjYzNzZiZmUwNmYwYjk4ZDQxMjM1ZDRlYjA2NjgzMTQ2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcApA
QCAtMzM2LDYgKzMzNiw5IEBAIHZvaWQgVmlld3BvcnRDb25maWd1cmF0aW9uOjp1cGRhdGVDb25m
aWd1cmF0aW9uKCkKIAogICAgIGlmIChib29sZWFuVmlld3BvcnRBcmd1bWVudElzU2V0KG1fdmll
d3BvcnRBcmd1bWVudHMuc2hyaW5rVG9GaXQpKQogICAgICAgICBtX2NvbmZpZ3VyYXRpb24uYWxs
b3dzU2hyaW5rVG9GaXQgPSBtX3ZpZXdwb3J0QXJndW1lbnRzLnNocmlua1RvRml0ICE9IDAuOwor
CisgICAgaWYgKGJvb2xlYW5WaWV3cG9ydEFyZ3VtZW50SXNTZXQobV92aWV3cG9ydEFyZ3VtZW50
cy5jbGlwVG9TYWZlQXJlYSkpCisgICAgICAgIG1fY29uZmlndXJhdGlvbi5jbGlwVG9TYWZlQXJl
YSA9IG1fdmlld3BvcnRBcmd1bWVudHMuY2xpcFRvU2FmZUFyZWEgIT0gMC47CiB9CiAKIGRvdWJs
ZSBWaWV3cG9ydENvbmZpZ3VyYXRpb246OnZpZXdwb3J0QXJndW1lbnRzTGVuZ3RoKGRvdWJsZSBs
ZW5ndGgpIGNvbnN0CkBAIC00MzksNiArNDQyLDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgVmlld3BvcnRDb25maWd1cmF0aW9uOjpQYXJhbWV0ZXJzJgog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgibWF4aW11bVNjYWxlIiwgcGFyYW1ldGVycy5tYXhpbXVtU2Nh
bGUpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxsb3dzVXNlclNjYWxpbmciLCBwYXJhbWV0ZXJz
LmFsbG93c1VzZXJTY2FsaW5nKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImFsbG93c1Nocmlua1Rv
Rml0IiwgcGFyYW1ldGVycy5hbGxvd3NTaHJpbmtUb0ZpdCk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJjbGlwVG9TYWZlQXJlYSIsIHBhcmFtZXRlcnMuY2xpcFRvU2FmZUFyZWEpOwogCiAgICAgcmV0
dXJuIHRzOwogfQpAQCAtNDcyLDYgKzQ3Niw3IEBAIENTdHJpbmcgVmlld3BvcnRDb25maWd1cmF0
aW9uOjpkZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wdXRlZCBs
YXlvdXQgc2l6ZSIsIGxheW91dFNpemUoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpZ25vcmlu
ZyBob3Jpem9udGFsIHNjYWxpbmcgY29uc3RyYWludHMiLCBzaG91bGRJZ25vcmVIb3Jpem9udGFs
U2NhbGluZ0NvbnN0cmFpbnRzKCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICB0cy5kdW1wUHJv
cGVydHkoImlnbm9yaW5nIHZlcnRpY2FsIHNjYWxpbmcgY29uc3RyYWludHMiLCBzaG91bGRJZ25v
cmVWZXJ0aWNhbFNjYWxpbmdDb25zdHJhaW50cygpID8gInRydWUiIDogImZhbHNlIik7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJjbGlwIHRvIGRvY3VtZW50IiwgY2xpcFRvU2FmZUFyZWEoKSA/ICJ0
cnVlIiA6ICJmYWxzZSIpOwogICAgIAogICAgIHRzLmVuZEdyb3VwKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5oCmluZGV4IGI3MmMwYmZhOWQ2NzA3OTFh
MjkxMjlhMzU2NTljMDhhNmM2NDc3MjEuLmJhZGQ2ZThkN2I5YTdmOGMxNmEyYzQ4NjRjMjYxYTAx
M2Q3ODkzNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1
cmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24u
aApAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIG1heGltdW1TY2FsZSgw
KQogICAgICAgICAgICAgLCBhbGxvd3NVc2VyU2NhbGluZyhmYWxzZSkKICAgICAgICAgICAgICwg
YWxsb3dzU2hyaW5rVG9GaXQoZmFsc2UpCisgICAgICAgICAgICAsIGNsaXBUb1NhZmVBcmVhKHRy
dWUpCiAgICAgICAgICAgICAsIHdpZHRoSXNTZXQoZmFsc2UpCiAgICAgICAgICAgICAsIGhlaWdo
dElzU2V0KGZhbHNlKQogICAgICAgICAgICAgLCBpbml0aWFsU2NhbGVJc1NldChmYWxzZSkKQEAg
LTYzLDYgKzY0LDcgQEAgcHVibGljOgogICAgICAgICBkb3VibGUgbWF4aW11bVNjYWxlOwogICAg
ICAgICBib29sIGFsbG93c1VzZXJTY2FsaW5nOwogICAgICAgICBib29sIGFsbG93c1Nocmlua1Rv
Rml0OworICAgICAgICBib29sIGNsaXBUb1NhZmVBcmVhOwogCiAgICAgICAgIGJvb2wgd2lkdGhJ
c1NldDsKICAgICAgICAgYm9vbCBoZWlnaHRJc1NldDsKQEAgLTk1LDYgKzk3LDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWxsb3dzVXNlclNjYWxpbmcoKSBjb25zdDsKICAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGFsbG93c1VzZXJTY2FsaW5nSWdub3JpbmdBbHdheXNTY2Fs
YWJsZSgpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dzU2hyaW5rVG9GaXQoKSBjb25zdDsKKyAgICBi
b29sIGNsaXBUb1NhZmVBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWd1cmF0aW9uLmNsaXBU
b1NhZmVBcmVhOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFyYW1ldGVycyB3ZWJw
YWdlUGFyYW1ldGVycygpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXJhbWV0ZXJzIHRl
eHREb2N1bWVudFBhcmFtZXRlcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggNTA3NzI4Y2M3NDQ5N2VmOGVlMDhlNTNm
YTZjYTMzMTJjMmZiOWQyZC4uZDc5MTNkY2U0ZjI0ODQ5NjZlMGRkNDM3YjYxYmYwZTdlMGYyNjcz
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAKQEAgLTk3NCw2ICs5NzQsMTEgQEAgc3RhdGljIFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QmIHJlbmRlcmVyRm9yQ29tcG9zaXRpbmdUZXN0cyhjb25zdCBSZW5kZXJMYXllciYgbGEKICAg
ICByZXR1cm4gKnJlbmRlcmVyOwogfQogCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBk
YXRlUm9vdENvbnRlbnRMYXllckNsaXBwaW5nKCkKK3sKKyAgICBtX3Jvb3RDb250ZW50TGF5ZXIt
PnNldE1hc2tzVG9Cb3VuZHMoIW1fcmVuZGVyVmlldy5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91
bGRFeHRlbmRCZXlvbmRQYWdlKCkgJiYgbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmNsaXBUb1Nh
ZmVBcmVhKCkpOworfQorCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2lu
ZyhSZW5kZXJMYXllciYgbGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludCBzaG91bGRSZXBh
aW50LCBCYWNraW5nUmVxdWlyZWQgYmFja2luZ1JlcXVpcmVkKQogewogICAgIGJvb2wgbGF5ZXJD
aGFuZ2VkID0gZmFsc2U7CkBAIC0xMDA1LDggKzEwMTAsNyBAQCBib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIENvbXBvc2l0aW5nQ2hh
bmdlUgogICAgICAgICAgICAgICAgIHVwZGF0ZUxheWVyRm9ySGVhZGVyKHBhZ2UoKS5oZWFkZXJI
ZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJGb3JGb290ZXIocGFnZSgpLmZv
b3RlckhlaWdodCgpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGlmIChtX3JlbmRlclZpZXcu
c2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKQotICAgICAgICAg
ICAgICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOwor
ICAgICAgICAgICAgICAgIHVwZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygpOwogCiAgICAg
ICAgICAgICAgICAgaWYgKFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nID0gbGF5ZXIuYmFja2lu
ZygpLT50aWxlZEJhY2tpbmcoKSkKICAgICAgICAgICAgICAgICAgICAgdGlsZWRCYWNraW5nLT5z
ZXRUb3BDb250ZW50SW5zZXQobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnRvcENvbnRlbnRJbnNl
dCgpKTsKQEAgLTMzODAsNyArMzM4NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpl
bnN1cmVSb290TGF5ZXIoKQogI2VuZGlmCiAKICAgICAgICAgLy8gTmVlZCB0byBjbGlwIHRvIHBy
ZXZlbnQgdHJhbnNmb3JtZWQgY29udGVudCBzaG93aW5nIG91dHNpZGUgdGhpcyBmcmFtZQotICAg
ICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgICAg
IHVwZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygpOwogICAgIH0KIAogICAgIGlmIChyZXF1
aXJlc1Njcm9sbExheWVyKGV4cGVjdGVkQXR0YWNobWVudCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCA4MjhhZTlkMTI5YThl
MTAzNTYyYzM0YzI0NWI0OGFmMGUyOTE4N2FkLi44YWZjZDVkNDNiZDgxY2ZjYTgyNjg3MDFiYmUx
Nzc3N2Q0M2Y1OTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5oCkBAIC0zMTMsNiArMzEzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0
Um9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgY29uc3QgQ29s
b3ImIHJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEV4
dGVuZGVkQmFja2dyb3VuZENvbG9yOyB9CiAKKyAgICB2b2lkIHVwZGF0ZVJvb3RDb250ZW50TGF5
ZXJDbGlwcGluZygpOworCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICB2b2lkIHVw
ZGF0ZVNjcm9sbFNuYXBQcm9wZXJ0aWVzV2l0aEZyYW1lVmlldyhjb25zdCBGcmFtZVZpZXcmKTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCAx
MTY5ZDkyY2VmNzg4OGUxZTJjZDFlZTEwMzc1MDNiY2NlOTIwMDQwLi4wNWU4YmIxMmJmNjM4NWNh
YWRkNGZlODBiMjhiY2U3OTIxZmQ2OTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcApAQCAtODk3LDYgKzg5Nyw5IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZXBh
aW50VXNpbmdDb250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENv
CiAgICAgICAgICAgICB2aWV3LnJlcGFpbnRWaWV3UmVjdGFuZ2xlKHJlY3QpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmNs
aXBUb1NhZmVBcmVhKCkpCisgICAgICAgICAgICBzaG91bGRDbGlwVG9MYXllciA9IGZhbHNlOwog
ICAgIH0KIAogICAgIGlmICh2aWV3KCkudXNlc0NvbXBvc2l0aW5nKCkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggZTVkOTZlNjJj
NDNmMjU2NThlMjNiNjRkNDZjNjNjNjgwNmQwMDM4Yi4uZjllMWIzNjg2YzMxY2RjYzJhNjlhZjgw
MzRhZWU4YmM5MzUyZGExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0KQEAgLTQyNjAsNiArNDI2MCwxMSBAQCBzdGF0aWMgaW5saW5lIFdl
YktpdDo6RmluZE9wdGlvbnMgdG9GaW5kT3B0aW9ucyhfV0tGaW5kT3B0aW9ucyB3a0ZpbmRPcHRp
b25zKQogICAgIHJldHVybiBfcGFnZS0+aXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hv
dCgpOwogfQogCistIChCT09MKV9jb250ZW50TWF5RHJhd0luT2JzY3VyZWRJbnNldHMKK3sKKyAg
ICByZXR1cm4gIV9wYWdlLT5jbGlwVG9TYWZlQXJlYSgpOworfQorCiAtIChfV0tMYXlvdXRNb2Rl
KV9sYXlvdXRNb2RlCiB7CiAjaWYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAppbmRleCBhMDI4NDNm
NGIyNGM3MzJkMWMyNDY5YTFlNDQ4OWU3MmI0MTk2OTJhLi44ZTg5YTA2NjdkOWQ0MmY3MWU3M2E1
MWU2MjFlMDQ3OTBmNzM3OWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaApAQCAtMTQ0LDYgKzE0NCw4IEBAIHR5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0ltbWVkaWF0ZUFjdGlvblR5cGUpIHsKIC8vIERlZmlu
ZSB0aGUgaW5zZXQgb2YgdGhlIHNjcm9sbHZpZXcgdW51c2FibGUgYnkgdGhlIHdlYiBwYWdlLgog
QHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0T2JzY3VyZWRJbnNldHM6KSBVSUVkZ2VJ
bnNldHMgX29ic2N1cmVkSW5zZXRzOwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IEJPT0wgX2NvbnRlbnRNYXlEcmF3SW5PYnNjdXJlZEluc2V0czsKKwogLy8gT3ZlcnJpZGUgdGhl
IGludGVyZmFjZSBvcmllbnRhdGlvbi4gQ2xpZW50cyB1c2luZyBfYmVnaW5BbmltYXRlZFJlc2l6
ZVdpdGhVcGRhdGVzOiBtdXN0IHVwZGF0ZSB0aGUgaW50ZXJmYWNlIG9yaWVudGF0aW9uCiAvLyBp
biB0aGUgdXBkYXRlIGJsb2NrLgogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0SW50
ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTopIFVJSW50ZXJmYWNlT3JpZW50YXRpb24gX2ludGVy
ZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAppbmRleCA4YzU3NzZmMzQyOGY2YmIwZDE5OWFhYWU4
ZTAyNjYwMDcwNGFjZTEwLi5hZGQzZjY2NTIyZGMyNTk1ZDc5YjJlNzUwNDA3N2UzYzhkZjBmNWUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJ
bXBsLmgKQEAgLTE0Niw2ICsxNDYsOCBAQCBwcml2YXRlOgogCiAgICAgV2ViQ29yZTo6VXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgb3Zl
cnJpZGUgeyByZXR1cm4gV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbjo6TFRS
OyB9CiAKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wpIG92ZXJyaWRlIHsg
fQorCiAgICAgLy8gTWVtYmVycyBvZiBQYWdlQ2xpZW50SW1wbCBjbGFzcwogICAgIEd0a1dpZGdl
dCogbV92aWV3V2lkZ2V0OwogICAgIERlZmF1bHRVbmRvQ29udHJvbGxlciBtX3VuZG9Db250cm9s
bGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggYjU2ZGViZjUzYjE1
YjY0NDgwZWM2NDhlN2Y3N2U2OTkxNGMwOTI0Yy4uMGRkZmQ0NjIzNTQ0NTQ4NjMwMmMyODE1ZjU1
ZTgzMTBmZmQwNzk2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC0z
ODYsNiArMzg2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDb25jbHVkZUVkaXRE
YXRhSW50ZXJhY3Rpb24oc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yRGF0YT4p
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlRGF0YUludGVyYWN0aW9uQ2FyZXRSZWN0
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHByZXZpb3VzQ2FyZXRSZWN0LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjYXJldFJlY3QpID0gMDsKICNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGRp
ZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpID0gMDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAppbmRleCBkNzdkNDA3MjMyMjMzYTVjZTk4OWYzZjliNDdkYWFhMmNiZTQwMGRhLi5jODgz
MzU4MjE1NDJkNjE0NDdhMmIxMjZhZmMyMTczOTk3YjhjZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNTQ1NSw2ICs1NDU1LDggQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnJlc2V0U3RhdGUoUmVzZXRTdGF0ZVJlYXNvbiByZXNldFN0YXRlUmVhc29uKQog
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgcmVxdWVzdFBvaW50ZXJVbmxvY2soKTsKICNl
bmRpZgorCisgICAgbV9jbGlwVG9TYWZlQXJlYSA9IHRydWU7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpyZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKCkKQEAgLTY4ODAsNCArNjg4MiwxMSBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcFVSTFNjaGVtZUhhbmRsZXJUYXNrKHVpbnQ2NF90IGhh
bmRsZXJJZGVudGlmaWVyLCB1aW50NjRfdAogICAgIGl0ZXJhdG9yLT52YWx1ZS0+c3RvcFRhc2so
KnRoaXMsIHJlc291cmNlSWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRD
bGlwVG9TYWZlQXJlYShib29sIGNsaXBUb1NhZmVBcmVhKQoreworICAgIG1fY2xpcFRvU2FmZUFy
ZWEgPSBjbGlwVG9TYWZlQXJlYTsKKworICAgIG1fcGFnZUNsaWVudC5kaWRDaGFuZ2VDbGlwVG9T
YWZlQXJlYShjbGlwVG9TYWZlQXJlYSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDA1OGM1OWJmODhlMmYyNDA5
NzIwYTljZWMzYjE0YjI2MjdiNjBmNWIuLmViZDRlMjcxZmYxNjhmYjc0NmVjOTQ1YmIyNDc3OTYx
MGY5YmIyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTEx
OTEsNiArMTE5MSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVSTFNjaGVtZUhhbmRsZXJGb3JT
Y2hlbWUoUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+JiYsIGNvbnN0IFN0cmluZyYgc2NoZW1lKTsK
ICAgICBXZWJVUkxTY2hlbWVIYW5kbGVyKiB1cmxTY2hlbWVIYW5kbGVyRm9yU2NoZW1lKGNvbnN0
IFN0cmluZyYgc2NoZW1lKTsKIAorICAgIHZvaWQgc2V0Q2xpcFRvU2FmZUFyZWEoYm9vbCk7Cisg
ICAgYm9vbCBjbGlwVG9TYWZlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcFRvU2FmZUFyZWE7
IH0KKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYsIFdlYlByb2Nlc3NQ
cm94eSYsIHVpbnQ2NF90IHBhZ2VJRCwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwog
ICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CkBAIC0xOTc2LDcgKzE5NzksOSBAQCBwcml2
YXRlOgogI2VuZGlmCiAKICAgICBib29sIG1faXNVc2luZ0hpZ2hQZXJmb3JtYW5jZVdlYkdMIHsg
ZmFsc2UgfTsKLSAgICAgICAgCisKKyAgICBib29sIG1fY2xpcFRvU2FmZUFyZWEgeyB0cnVlIH07
CisKICAgICBXZWFrUHRyRmFjdG9yeTxXZWJQYWdlUHJveHk+IG1fd2Vha1B0ckZhY3Rvcnk7CiAK
ICAgICBIYXNoTWFwPFN0cmluZywgUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+PiBtX3VybFNjaGVt
ZUhhbmRsZXJzQnlTY2hlbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBmNmM1NGM3MTYyNmJkNWZlMTgxMDNjNTUyMzFmYjc4
MTk0YWY3Yjg2Li44NDVkNDMwOTRlMTAwYmQwYjEwMmIxYzcyMDM1ODg1NWIwYmZlMzJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4K
QEAgLTQ5NCw0ICs0OTQsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgU3Rh
cnRVUkxTY2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJZGVudGlmaWVyLCB1aW50NjRf
dCByZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KQog
ICAgIFN0b3BVUkxTY2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJZGVudGlmaWVyLCB1
aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpCisKKyAgICBTZXRDbGlwVG9TYWZlQXJlYShib29s
IGNsaXBUb1NhZmVBcmVhKQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5oCmluZGV4IDUyMWUxZGQ4MWEyM2IyYjI5YWMyMjE4YzM3YTFhNThh
NzZiMjhkYWEuLjY5MTQyNmRkZjZjZjZiMjY5NDE4NzMzYjkwZjAwMWY3YjQ0MzU1Y2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKQEAg
LTE5OCw2ICsxOTgsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBoYW5kbGVBY3RpdmVOb3dQbGF5
aW5nU2Vzc2lvbkluZm9SZXNwb25zZShib29sIGhhc0FjdGl2ZVNlc3Npb24sIGNvbnN0IFN0cmlu
ZyYgdGl0bGUsIGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIGVsYXBzZWRUaW1lKSBvdmVycmlkZTsK
IAorICAgIHZvaWQgZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEoYm9vbCBjbGlwVG9TYWZlQXJlYSkg
b3ZlcnJpZGU7CisKICNpZiBVU0UoUVVJQ0tfTE9PSykKICAgICB2b2lkIHJlcXVlc3RQYXNzd29y
ZEZvclF1aWNrTG9va0RvY3VtZW50KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHN0ZDo6ZnVuY3Rp
b248dm9pZChjb25zdCBTdHJpbmcmKT4mJikgb3ZlcnJpZGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IGI5NmNk
MmUyNzhmMTU0MGNlNjFkNDk3NTVhZmM5OTFmYTE4YjcyZTAuLmQ4ZDViYjA5MzEzNTQxMDVhZTEx
MjlkYTNlNDVlODg1NDE0NDMyNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtODIxLDYgKzgyMSwxMSBAQCB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpyZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudChjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLAogfQogI2VuZGlmCiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENoYW5n
ZUNsaXBUb1NhZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpCit7CisgICAgW21fd2ViVmlldyBf
c2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQppbmRleCBkN2M2MzkyMjMzMzZiYzIwZTRkYmQwODdk
N2E1ZWQxOTNjNWU3MTM2Li43NWY3MThiZGY5ZGI3OTUxZWQxODYyMjhmMDk1YTljOGUxYTgyOTM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBA
IC0zNjAsNiArMzYwLDcgQEAgcHJpdmF0ZToKIAogICAgIFtfZml4ZWRDbGlwcGluZ1ZpZXcgc2V0
Q2VudGVyOmNsaXBwaW5nQm91bmRzLmxvY2F0aW9uKCldOyAvLyBOb3QgcmVhbGx5IHRoZSBjZW50
ZXIgc2luY2Ugd2Ugc2V0IGFuIGFuY2hvciBwb2ludC4KICAgICBbX2ZpeGVkQ2xpcHBpbmdWaWV3
IHNldEJvdW5kczpjbGlwcGluZ0JvdW5kc107CisgICAgW19maXhlZENsaXBwaW5nVmlldyBsYXll
cl0ubWFza3NUb0JvdW5kcyA9IF9wYWdlLT5jbGlwVG9TYWZlQXJlYSgpOwogfQogCiAtICh2b2lk
KV9kaWRFeGl0U3RhYmxlU3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFn
ZUNsaWVudEltcGwuaAppbmRleCAzY2I2Y2E4YWE2ZjNhMTlhZjU4Zjg0NTA3MGNhM2JmNWVlNDRi
ZDU5Li4wZjhlN2UzYmI5Y2FhN2UzMmI3MjViMzY4YmQ2ZGQ4NmJmMTI5MTMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCkBAIC0yNTEsNiArMjUx
LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkgb3Zl
cnJpZGU7CiAgICAgYm9vbCB3aW5kb3dJc0Zyb250V2luZG93VW5kZXJNb3VzZShjb25zdCBOYXRp
dmVXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb1Nh
ZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpIG92ZXJyaWRlIHsgfQogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggMTRjMWU0NjYxMjYzYjFk
MWRlMDkyMDY4YWRjOWQwZGI2ZDA5ZDBiYy4uNmJkZjY3OGFmYjA3NDcwNGRkNWMzYjY3M2YwNmM5
YTE2ZTExNjM3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTIyMiw0ICsxMjIyLDkg
QEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZEludmFsaWRhdGVEb2N1bWVudE1hcmtlclJlY3Rz
KCkKICAgICBtX3BhZ2UuZmluZENvbnRyb2xsZXIoKS5kaWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJr
ZXJSZWN0cygpOwogfQogCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkQ2hhbmdlQ2xpcFRvU2Fm
ZUFyZWEoYm9vbCBjbGlwVG9TYWZlQXJlYSkKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpTZXRDbGlwVG9TYWZlQXJlYShjbGlwVG9TYWZlQXJlYSkpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGE1MTRiMjk5NDg4
ODQyYmNmOTI0NTg5MTNiMDM3OWIzZWFmOWViYWUuLjA0Y2Y2YjVhMmE2Yzk1NWE4MzRmZGIyYTJi
MzA5MmEwNzc1ODE2YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMzQwLDYgKzM0MCw4IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEludmFsaWRhdGVEb2N1bWVudE1hcmtlclJlY3RzKCkg
ZmluYWw7CiAKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wpIGZpbmFsOwor
CiAgICAgU3RyaW5nIG1fY2FjaGVkVG9vbFRpcDsKICAgICBtdXRhYmxlIFJlZlB0cjxXZWJGcmFt
ZT4gbV9jYWNoZWRGcmFtZVNldExhcmdlc3RGcmFtZTsKICAgICBtdXRhYmxlIGJvb2wgbV9jYWNo
ZWRNYWluRnJhbWVIYXNIb3Jpem9udGFsU2Nyb2xsYmFyIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCAw
YWM3YjgzZjNhZWIzMGY0OGQ3NGVkN2YwMjYwYWFhZTc0MTlkOTkzLi40YjEzNWQwNGEzMzQyMGQx
YjZjM2Y0ODUzMWNjYmU1NTliODE3YTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0zMDQ1LDYgKzMwNDUsOCBAQCB2
b2lkIFdlYlBhZ2U6OnZpZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQoKQogICAgIHVwZGF0ZVZp
ZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIEZyYW1lVmlldyYgZnJhbWVW
aWV3ID0gKm1haW5GcmFtZVZpZXcoKTsKKyAgICBmcmFtZVZpZXcuc2V0Q2xpcFRvU2FmZUFyZWEo
bV92aWV3cG9ydENvbmZpZ3VyYXRpb24uY2xpcFRvU2FmZUFyZWEoKSk7CisKICAgICBJbnRQb2lu
dCBzY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy5zY3JvbGxQb3NpdGlvbigpOwogICAgIGlmICgh
bV9oYXNSZWNlaXZlZFZpc2libGVDb250ZW50UmVjdHNBZnRlckRpZENvbW1pdExvYWQpIHsKICAg
ICAgICAgRmxvYXRTaXplIG1pbmltdW1MYXlvdXRTaXplSW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMg
PSBtX3ZpZXdwb3J0Q29uZmlndXJhdGlvbi5taW5pbXVtTGF5b3V0U2l6ZSgpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDExYzI4NTY1YzRlMjU2
MjM5ZWNmZjQ0YjRlNjg5YmI1OWZmYzFhODQuLjU0MTFjNzk1N2FhMDViNDQ1ZWE4Y2E3NTNmNzU5
NjVmNzQ1MzQ4YmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxNy0wNC0xNCAgVGltIEhvcnRvbiAgPHRpbW90aHlf
aG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIGEgdmlld3BvcnQgcGFyYW1ldGVy
IHRvIGRpc2FibGUgY2xpcHBpbmcgdG8gdGhlIHNhZmUgYXJlYQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzY2CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW06Cisg
ICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6c2V0T2JzY3VyZWRJbnNldHMpOgorICAg
ICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0
Q29udHJvbGxlci5pZGw6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRl
eHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9s
bGVyOjpzZXRPYnNjdXJlZEluc2V0cyk6CisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9VSVNj
cmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdU
Ujo6VUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJlZEluc2V0cyk6CisgICAgICAgIEFkZCBh
IFVJU2NyaXB0Q29udHJvbGxlciBtZWNoYW5pc20gdG8gaW5zdGFsbCBvYnNjdXJlZCBpbnNldHMK
KyAgICAgICAgb24gdGhlIHdlYiB2aWV3LgorCiAyMDE3LTA0LTE0ICBKb25hdGhhbiBCZWRhcmQg
IDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICB3ZWJraXRweTogSWdub3JlIHByZXZpb3Vz
bHkgbGF1bmNoZWQgcGlkIHdoZW4gc3lzdGVtIGlzIHVuZGVyIHN0cmVzcwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KaW5kZXggNDAzYjU5
YjQxZDM1OTlkNThhMjM2NTk5Mzg4MjNmNjM3MzgyNTcyNi4uYjBlMDRkZDY2YTkxM2Q2NmEwNGI5
ZjhkMjhkMjc0ODU2NzFjZDZjNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9z
L1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3Mv
VUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBAIC0zMTYsNiArMzE2LDEwIEBAIHZvaWQgVUlTY3Jp
cHRDb250cm9sbGVyOjphZGRWaWV3VG9XaW5kb3coSlNWYWx1ZVJlZikKIHsKIH0KIAordm9pZCBV
SVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKGRvdWJsZSwgZG91YmxlLCBkb3Vi
bGUsIGRvdWJsZSkKK3sKK30KKwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlT
Y3JpcHRDb250cm9sbGVyLmlkbCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250
ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKaW5kZXggZjY2YWUxNTIyZjUxNjE3
MDdjYzdmMWY4NGQ0Yzg4MWE5MmRjMmJmMS4uZGJhNDU2ZWJjYjFlM2Y5ODdkODliMjc4NmVlNTNm
YmRjOWFlMmFiYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENv
bnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbAorKysgYi9Ub29scy9UZXN0UnVu
bmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRs
CkBAIC0yMzIsNCArMjMyLDYgQEAgaW50ZXJmYWNlIFVJU2NyaXB0Q29udHJvbGxlciB7CiAgICAg
dm9pZCBhZGRWaWV3VG9XaW5kb3cob2JqZWN0IGNhbGxiYWNrKTsKIAogICAgIHZvaWQgb3ZlcnJp
ZGVQcmVmZXJlbmNlKERPTVN0cmluZyBwcmVmZXJlbmNlLCBET01TdHJpbmcgdmFsdWUpOworCisg
ICAgdm9pZCBzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJs
ZSBib3R0b20sIGRvdWJsZSBsZWZ0KTsKIH07CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcAppbmRl
eCA2MTJjOWUyOWYxZGEyNGUyMTg4NDY0MDVjODE0MjBlNmFiZGI4MjNmLi4wZjFmY2MxZDQ5ZjIx
NmUzNWM3MWY4NmZhZjg4NmU4YWE0OTk3NTljIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVy
U2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAK
QEAgLTM5OSw2ICszOTksMTAgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IFVJU2NyaXB0Q29u
dHJvbGxlcjo6YWNjZXNzaWJpbGl0eVNwZWFrU2VsZWN0aW9uQ29udGVudCgKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRz
KGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSwgZG91YmxlIGxlZnQpCit7
Cit9CisKICNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmggYi9U
b29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIu
aAppbmRleCA0NmMyOGIxNDAxZGQ0NjQxNzY0NGFhNzY2NzRjYWFjM2IxYmQ0Y2E5Li42NjI3Mzg4
N2I5ZTZhYjk5MTZiNTlhOTE4OWEyMjFiMTA4NGQ3YTMwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuaAorKysgYi9U
b29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIu
aApAQCAtMTU2LDYgKzE1Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZVZpZXdGcm9tV2lu
ZG93KEpTVmFsdWVSZWYpOwogICAgIHZvaWQgYWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYpOwog
CisgICAgdm9pZCBzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRv
dWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KTsKKwogcHJpdmF0ZToKICAgICBVSVNjcmlwdENvbnRy
b2xsZXIoVUlTY3JpcHRDb250ZXh0Jik7CiAgICAgCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCmluZGV4IDdjMzUxZjgyZjg2N2JkYjdlMmQxMDI5
OTNkNmEwMWZmMzU4YjYwNDIuLmEwZDExMmY1NjMyNjQwYjRmNzJmMWU3MmZhOGY2YmM2YjkwMGUy
YjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVy
SU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9T
Lm1tCkBAIC04NSw2ICs4NSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRT
dGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgICAgIFtzY3JvbGxWaWV3IF9yZW1vdmVBbGxB
bmltYXRpb25zOllFU107CiAgICAgICAgIFtzY3JvbGxWaWV3IHNldFpvb21TY2FsZToxIGFuaW1h
dGVkOk5PXTsKICAgICAgICAgW3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpDR1BvaW50WmVy
b107CisKKyAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBVSUVkZ2VJbnNldHNaZXJv
OworICAgICAgICB3ZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKS5fb2JzY3VyZWRJbnNldHMgPSBVSUVk
Z2VJbnNldHNaZXJvOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IGNlNjdmNWU1NDM5Zjg3Yzc1ZDlj
YTY1ZTI0NjRjZmVmZjZhMzhkZDYuLjU3YTE5NTQ5ZDlkODkzZjJlMmQ4MjQyNjRjMTYwN2YzMGM1
ZjJkYmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29u
dHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENv
bnRyb2xsZXJJT1MubW0KQEAgLTY2OCw2ICs2NjgsMTQgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xs
ZXI6OnBsYXRmb3JtQ2xlYXJBbGxDYWxsYmFja3MoKQogICAgIHdlYlZpZXcuZGlkRW5kU2Nyb2xs
aW5nQ2FsbGJhY2sgPSBuaWw7CiB9CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNj
dXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJs
ZSBsZWZ0KQoreworICAgIFVJRWRnZUluc2V0cyBpbnNldHMgPSBVSUVkZ2VJbnNldHNNYWtlKHRv
cCwgbGVmdCwgYm90dG9tLCByaWdodCk7CisgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmll
dyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZp
ZXcoKTsKKyAgICB3ZWJWaWV3LnNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gaW5zZXRzOworICAg
IHdlYlZpZXcuX29ic2N1cmVkSW5zZXRzID0gaW5zZXRzOworfQorCiB9CiAKICNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTFjZmU5MzU4MjI5NDQyZTVkMjBiNjljZmFmNGM1MmZhMjdj
ZWY3ZS4uNmFlMDczYzU1NTRjNDc5OWYwMWIyYWY1NTMxNDZlYjNmYzVmYTMwZSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE2IEBACisyMDE3LTA0LTE0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBw
bGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJs
ZSBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxNTY0
NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
dGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEtbm8tZ2V0cy1tYXJn
aW4tdGlsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0aWxlZC1kcmF3aW5nL2lv
cy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUt
YXJlYS15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS15ZXMtZ2V0
cy1uby1tYXJnaW4tdGlsZXMuaHRtbDogQWRkZWQuCisKIDIwMTctMDQtMTQgIFJ5YW4gSGFkZGFk
ICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgU2tpcCB3b3JrZXJzL3dhc20tKiBM
YXlvdXRUZXN0cyBvbiBpb3Mtc2ltdWxhdG9yLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdGls
ZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEtbm8tZ2V0cy1tYXJnaW4t
dGlsZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3Bv
cnQtY2xpcC10by1zYWZlLWFyZWEtbm8tZ2V0cy1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY3NTBiZDNkYTA3NDMyMjIxZDk0MGIxYzAxMzhkYTFkMmY4ODJkZDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlw
LXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwyMyBAQAorKEdyYXBoaWNzTGF5ZXIKKyAgKGFuY2hvciAwLjAwIDAuMDApCisgIChib3VuZHMg
MzIwLjAwIDU0OC4wMCkKKyAgKHZpc2libGUgcmVjdCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4w
MCkKKyAgKGNvdmVyYWdlIHJlY3QgLTQwLjAwLCAtMTAuMDAgMzIwLjAwIHggNTQ4LjAwKQorICAo
aW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisgIChjb250ZW50c1NjYWxlIDIuMDApCisgIChj
aGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChib3VuZHMgMzIwLjAwIDU0OC4w
MCkKKyAgICAgIChjb250ZW50c09wYXF1ZSAxKQorICAgICAgKHZpc2libGUgcmVjdCAwLjAwLCAw
LjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAgICAgIChjb3ZlcmFnZSByZWN0IC00MC4wMCwgLTEwLjAw
IDU3Ni4wMCB4IDgwNC4wMCkKKyAgICAgIChpbnRlcnNlY3RzIGNvdmVyYWdlIHJlY3QgMSkKKyAg
ICAgIChjb250ZW50c1NjYWxlIDIuMDApCisgICAgICAodGlsZSBjYWNoZSBjb3ZlcmFnZSAtNTEy
LCAtNTEyIDEzNDQgeCAxNTcyKQorICAgICAgKHRpbGUgc2l6ZSA1MTIgeCA1NDgpCisgICAgICAo
dG9wIGxlZnQgdGlsZSAtMSwgLTEgdGlsZXMgZ3JpZCAzIHggMykKKyAgICAgIChpbiB3aW5kb3cg
MSkKKyAgICApCisgICkKKykKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2lu
Zy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEtbm8tZ2V0cy1tYXJnaW4tdGlsZXMuaHRt
bCBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1h
cmVhLW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGFhNTMyODQ4ZmRlMTAw
MDdiZDdmYzI2YTgxZDBlZmY1MTJkOWZmZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLW5vLWdldHMtbWFy
Z2luLXRpbGVzLmh0bWwKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGlibGVWaWV3cG9ydD10cnVlIF0gLS0+CisKKzxodG1s
PgorPGhlYWQ+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2Nh
bGU9MSwgY2xpcC10by1zYWZlLWFyZWE9bm8iPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0
aW9uIGdldFVJU2NyaXB0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGAKKyAgICAg
ICAgICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuc2V0T2Jz
Y3VyZWRJbnNldHMoMTAsIDIwLCAzMCwgNDApOworICAgICAgICAgICAgICAgIHVpQ29udHJvbGxl
ci5pbW1lZGlhdGVTY3JvbGxUb09mZnNldCgtNDAsIC0xMCk7CisgICAgICAgICAgICAgICAgdWlD
b250cm9sbGVyLmRvQWZ0ZXJWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUoZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIudWlTY3JpcHRDb21wbGV0ZSgpOworICAg
ICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9KSgpO2AKKyAgICAgICAgfQorCisgICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIGRvVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRl
c3RSdW5uZXIucnVuVUlTY3JpcHQoZ2V0VUlTY3JpcHQoKSwgZnVuY3Rpb24ocmVzdWx0KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheWVycycpLmlubmVyVGV4dCA9IGludGVybmFs
cy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRl
cm5hbHMuTEFZRVJfVFJFRV9JTkNMVURFU19WSVNJQkxFX1JFQ1RTIHwgaW50ZXJuYWxzLkxBWUVS
X1RSRUVfSU5DTFVERVNfVElMRV9DQUNIRVMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
ICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3Qs
IGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8cHJlIGlkPSJsYXll
cnMiPkxheWVyIHRyZWUgZ29lcyBoZXJlPC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFy
ZWEteWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Rp
bGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLXllcy1nZXRzLW5vLW1h
cmdpbi10aWxlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzU0N2M5NTI5ZjgwOTkxMzcxODhm
ODdjMzhkNzBjZjkxMGEzZWJiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RpbGVk
LWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLXllcy1nZXRzLW5vLW1hcmdp
bi10aWxlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMyBAQAorKEdyYXBoaWNzTGF5ZXIKKyAg
KGFuY2hvciAwLjAwIDAuMDApCisgIChib3VuZHMgMzIwLjAwIDU0OC4wMCkKKyAgKHZpc2libGUg
cmVjdCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAgKGNvdmVyYWdlIHJlY3QgMC4wMCwg
MC4wMCAyODAuMDAgeCA1MzguMDApCisgIChpbnRlcnNlY3RzIGNvdmVyYWdlIHJlY3QgMSkKKyAg
KGNvbnRlbnRzU2NhbGUgMi4wMCkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXllcgor
ICAgICAgKGJvdW5kcyAzMjAuMDAgNTQ4LjAwKQorICAgICAgKGNvbnRlbnRzT3BhcXVlIDEpCisg
ICAgICAodmlzaWJsZSByZWN0IDAuMDAsIDAuMDAgMjgwLjAwIHggNTM4LjAwKQorICAgICAgKGNv
dmVyYWdlIHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1MzguMDApCisgICAgICAoaW50ZXJzZWN0
cyBjb3ZlcmFnZSByZWN0IDEpCisgICAgICAoY29udGVudHNTY2FsZSAyLjAwKQorICAgICAgKHRp
bGUgY2FjaGUgY292ZXJhZ2UgMCwgMCAzMjAgeCA1NDgpCisgICAgICAodGlsZSBzaXplIDUxMiB4
IDU0OCkKKyAgICAgICh0b3AgbGVmdCB0aWxlIDAsIDAgdGlsZXMgZ3JpZCAxIHggMSkKKyAgICAg
IChpbiB3aW5kb3cgMSkKKyAgICApCisgICkKKykKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
dGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEteWVzLWdldHMtbm8t
bWFyZ2luLXRpbGVzLmh0bWwgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9y
dC1jbGlwLXRvLXNhZmUtYXJlYS15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xNmQxOTVhMzY0MzY4YTdkZDc0MzIwZjY5ODExYjA5YWEzZDZkNGY4Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1z
YWZlLWFyZWEteWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLmh0bWwKQEAgLTAsMCArMSw0MyBAQAor
PCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGlibGVWaWV3
cG9ydD10cnVlIF0gLS0+CisKKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgbmFtZT0idmlld3Bv
cnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MSwgY2xpcC10by1zYWZlLWFyZWE9eWVzIj4KKyAg
ICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBnZXRVSVNjcmlwdCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBgCisgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgdWlDb250cm9sbGVyLnNldE9ic2N1cmVkSW5zZXRzKDEwLCAyMCwgMzAsIDQwKTsKKyAg
ICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuaW1tZWRpYXRlU2Nyb2xsVG9PZmZzZXQoLTQwLCAt
MTApOworICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5kb0FmdGVyVmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVy
LnVpU2NyaXB0Q29tcGxldGUoKTsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgfSko
KTtgCisgICAgICAgIH0KKworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci53
YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBkb1Rlc3QoKQor
ICAgICAgICB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGdldFVJU2NyaXB0
KCksIGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJu
YWxzKSB7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXll
cnMnKS5pbm5lclRleHQgPSBpbnRlcm5hbHMubGF5ZXJUcmVlQXNUZXh0KGRvY3VtZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVERVNfVklTSUJM
RV9SRUNUUyB8IGludGVybmFscy5MQVlFUl9UUkVFX0lOQ0xVREVTX1RJTEVfQ0FDSEVTKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCdsb2FkJywgZG9UZXN0LCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+
CisKKzxib2R5PgorPHByZSBpZD0ibGF5ZXJzIj5MYXllciB0cmVlIGdvZXMgaGVyZTwvcD4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307173</attachid>
            <date>2017-04-14 17:48:55 -0700</date>
            <delta_ts>2017-04-17 10:46:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170766-20170414174854.patch</filename>
            <type>text/plain</type>
            <size>41341</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1Mzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzU4ODFiMTQ1Yjg0NWMx
MTg3MDIxMjkyOWUwM2M1NmY3MGE3NTFjZC4uYzE2OWQ2NTM2MWVlMjc4ODJmNjAxZThkNjgxMmQw
OTA2YmQzNmNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE3LTA0LTE0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2
aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxNTY0NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9y
dC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sLAorICAgICAgICAg
ICAgICAgdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEteWVzLWdl
dHMtbm8tbWFyZ2luLXRpbGVzLmh0bWwsCisKKyAgICAgICAgKiBkb20vVmlld3BvcnRBcmd1bWVu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OnJlc29sdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0Vmlld3BvcnRGZWF0dXJlKToKKyAgICAgICAgKiBkb20vVmll
d3BvcnRBcmd1bWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKiBwYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWV3cG9ydENvbmZpZ3VyYXRpb246OnVwZGF0ZUNvbmZpZ3VyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpW
aWV3cG9ydENvbmZpZ3VyYXRpb246OmRlc2NyaXB0aW9uKToKKyAgICAgICAgKiBwYWdlL1ZpZXdw
b3J0Q29uZmlndXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRDb25maWd1cmF0
aW9uOjpQYXJhbWV0ZXJzOjpQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0
Q29uZmlndXJhdGlvbjo6Y2xpcFRvU2FmZUFyZWEpOgorICAgICAgICBBZGQgdmlld3BvcnQgcGFy
YW1ldGVyLgorCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5hYmxlU3BlY3VsYXRpdmVUaWxpbmdJZk5lZWRlZCk6CisgICAg
ICAgIElmIG5vdCBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhLCBlbmFibGUgInNwZWN1bGF0aXZl
IiB0aWxpbmcgaW1tZWRpYXRlbHksCisgICAgICAgIGJlY2F1c2UgdGhlIG1hcmdpbiB0aWxlcyBj
YW4gYmUgdmlzaWJsZSBpbW1lZGlhdGVseS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpoYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3Ojp1cGRhdGVUaWxlc0ZvckV4dGVuZGVkQmFja2dyb3VuZE1vZGUpOgorICAg
ICAgICBEb24ndCBjaGVjayB0aGUgc2V0dGluZyBoZXJlOyBqdXN0IHJlc3BlY3QgdGhlIG1vZGUg
dGhhdCBpcyBjb21wdXRlZAorICAgICAgICBieSBjYWxjdWxhdGVFeHRlbmRlZEJhY2tncm91bmRN
b2RlLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFj
a2dyb3VuZE1vZGUpOgorICAgICAgICBJZiB0aGUgdmlld3BvcnQgcGFyYW1ldGVyIHdhcyBzZXQs
IGFkZCBtYXJnaW4gdGlsZXMgb24gYm90aCBheGVzLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OnNldENsaXBUb1NhZmVBcmVhKToKKyAgICAgICAgTm90aWZ5IENocm9tZUNsaWVudCBv
ZiB0aGUgY2hhbmdlLCBhbmQgcmUtY29tcHV0ZSB0aGUgbWFyZ2luIHRpbGUgbW9kZS4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgRmFjdG9yIG91dCBjb2Rl
IHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRoZSBjb250ZW50IGxheWVyIGNsaXBzIHRvIGJvdW5kcywK
KyAgICAgICAgYW5kIG1ha2UgaXQgdGFrZSB0aGUgbmV3IHZpZXdwb3J0IHBhcmFtZXRlciBpbnRv
IGFjY291bnQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAg
ICAgRG9uJ3QgY2xpcCBSZW5kZXJWaWV3IHJlcGFpbnRzIHRvIFJlbmRlclZpZXcncyBHcmFwaGlj
c0xheWVyIGJvdW5kcyBpZgorICAgICAgICBjbGlwLXRvLXNhZmUtYXJlYSBpcyBvZmYsIGp1c3Qg
bGlrZSB3ZSBkbyBmb3Igc2xvdy1yZXBhaW50IG9iamVjdHMgaW4KKyAgICAgICAgZXh0ZW5kZWQg
YmFja2dyb3VuZCBtb2RlLgorCiAyMDE3LTA0LTE0ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgdGV4dC1hbGlnbiBzdGFydCAvIGVuZCBmYWlsdXJlIGluIHRhYmxl
IGNlbGxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjlkNmYwNDRiZDQ4OTUwYzlkMTQzYjI2ODg3MTYwNTdkNTU3
ZDE3Ni4uMzUwY2I2YTkyMTUyMTQ4YWI4NGFmZjZjY2YxZjlmMjg2OTNiNTBlMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTA0LTE0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0
b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2aWV3cG9ydCBwYXJhbWV0ZXIgdG8g
ZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzMxNTY0NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0
Q2xpcFRvU2FmZUFyZWEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjbGlwVG9TYWZlQXJlYSk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNocm9tZUNsaWVudDo6ZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNs
aWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgRm9yd2FyZCBjbGlwLXRv
LXNhZmUtYXJlYSBjaGFuZ2VzIGZyb20gQ2hyb21lQ2xpZW50IHRvIFdLV2ViVmlldy4KKyAgICAg
ICAgVXBkYXRlIHZpc2libGUgY29udGVudCByZWN0cyB3aGVuIGl0IGNoYW5nZXMsIHdoaWNoIHdp
bGwKKyAgICAgICAgcmVzdWx0IGluIGEgY2FsbCB0byB1cGRhdGVGaXhlZENsaXBwaW5nVmlldywg
YXMgYmVsb3cuCisgICAgICAgIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhl
IFVJIHByb2Nlc3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1By
aXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9jb250ZW50TWF5RHJhd0luT2JzY3VyZWRJbnNldHNdKToKKyAg
ICAgICAgRXhwb3NlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjbGlwLXRvLXNhZmUtYXJlYSBi
aXQgYXMgU1BJLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHVwZGF0ZUZpeGVkQ2xpcHBpbmdWaWV3Ol0pOgorICAg
ICAgICBEaXNhYmxlIGZpeGVkIGNsaXBwaW5nIHdoZW4gY2xpcC10by1zYWZlLWFyZWEgaXMgZGlz
YWJsZWQuCisgICAgICAgIAorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dmlld3BvcnRDb25maWd1cmF0aW9u
Q2hhbmdlZCk6CisgICAgICAgIFB1c2ggdGhlIHZpZXdwb3J0J3MgY2xpcC10by1zYWZlLWFyZWEg
Yml0IG9udG8gdGhlIG1haW4gZnJhbWUncyBGcmFtZVZpZXcuCisKIDIwMTctMDQtMTQgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01lZGlhU291cmNlXSBQdXNo
IGNhcGFiaWxpdGllcyBhY3Jvc3MgcHJvY2VzcyBib3VuZGFyeSBkdXJpbmcgVUlQcm9jZXNzIGNh
cHR1cmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcAppbmRleCAxZTY5
YjkyNmRiMWJkNjcxMzBiYWNlZTUxMzUzNDIyMjRkM2IzODBkLi5jMDBkZDkwZDU4ZWVmMGEwODlh
MTYwY2ZjYWE4NzBhNmUxZjE5MWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmll
d3BvcnRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3Vt
ZW50cy5jcHAKQEAgLTI0Niw2ICsyNDYsNyBAQCBWaWV3cG9ydEF0dHJpYnV0ZXMgVmlld3BvcnRB
cmd1bWVudHM6OnJlc29sdmUoY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmlld3BvcnRTaQogICAg
IHJlc3VsdC51c2VyU2NhbGFibGUgPSB1c2VyWm9vbTsKICAgICByZXN1bHQub3JpZW50YXRpb24g
PSBvcmllbnRhdGlvbjsKICAgICByZXN1bHQuc2hyaW5rVG9GaXQgPSBzaHJpbmtUb0ZpdDsKKyAg
ICByZXN1bHQuY2xpcFRvU2FmZUFyZWEgPSBjbGlwVG9TYWZlQXJlYTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC0zNjMsMjIgKzM2NCwyMSBAQCBzdGF0aWMgZmxvYXQgZmluZFNjYWxlVmFs
dWUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZQog
ICAgIHJldHVybiBudW1lcmljVmFsdWU7CiB9CiAKLS8vIEZJWE1FOiBJdCdzIGtpbmQgb2YgYml6
YXJyZSB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIG9mIDEgYW5kIDAgdG8gcmVwcmVzZW50
IHRydWUgYW5kIGZhbHNlLgotc3RhdGljIGZsb2F0IGZpbmRCb29sZWFuVmFsdWUoRG9jdW1lbnQm
IGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3RyaW5nVmlldyB2YWx1ZSkKK3N0YXRpYyBib29s
IGZpbmRCb29sZWFuVmFsdWUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwgU3Ry
aW5nVmlldyB2YWx1ZSkKIHsKICAgICAvLyB5ZXMgYW5kIG5vIGFyZSB1c2VkIGFzIGtleXdvcmRz
LgogICAgIC8vIE51bWJlcnMgPj0gMSwgbnVtYmVycyA8PSAtMSwgZGV2aWNlLXdpZHRoIGFuZCBk
ZXZpY2UtaGVpZ2h0IGFyZSBtYXBwZWQgdG8geWVzLgogICAgIC8vIE51bWJlcnMgaW4gdGhlIHJh
bmdlIDwtMSwgMT4sIGFuZCB1bmtub3duIHZhbHVlcywgYXJlIG1hcHBlZCB0byBuby4KIAogICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgInllcyIpKQotICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAibm8iKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFs
dWUsICJkZXZpY2Utd2lkdGgiKSkKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgImRldmlj
ZS1oZWlnaHQiKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIHN0ZDo6YWJzKG51bWVy
aWNQcmVmaXgoZG9jdW1lbnQsIGtleSwgdmFsdWUpKSA+PSAxID8gMSA6IDA7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6OmFicyhudW1lcmljUHJlZml4KGRvY3VtZW50LCBr
ZXksIHZhbHVlKSkgPj0gMTsKIH0KIAogdm9pZCBzZXRWaWV3cG9ydEZlYXR1cmUoVmlld3BvcnRB
cmd1bWVudHMmIGFyZ3VtZW50cywgRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3IGtleSwg
U3RyaW5nVmlldyB2YWx1ZSkKQEAgLTQwMyw2ICs0MDMsOCBAQCB2b2lkIHNldFZpZXdwb3J0RmVh
dHVyZShWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzLCBEb2N1bWVudCYgZG9jdW1lbnQsIFN0
cmluZwogI2VuZGlmCiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
a2V5LCAic2hyaW5rLXRvLWZpdCIpKQogICAgICAgICBhcmd1bWVudHMuc2hyaW5rVG9GaXQgPSBm
aW5kQm9vbGVhblZhbHVlKGRvY3VtZW50LCBrZXksIHZhbHVlKTsKKyAgICBlbHNlIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXksICJjbGlwLXRvLXNhZmUtYXJlYSIpKQorICAg
ICAgICBhcmd1bWVudHMuY2xpcFRvU2FmZUFyZWEgPSBmaW5kQm9vbGVhblZhbHVlKGRvY3VtZW50
LCBrZXksIHZhbHVlKTsKICAgICBlbHNlCiAgICAgICAgIHJlcG9ydFZpZXdwb3J0V2FybmluZyhk
b2N1bWVudCwgVW5yZWNvZ25pemVkVmlld3BvcnRBcmd1bWVudEtleUVycm9yLCBrZXkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuaAppbmRleCA0ZTY5MDdmNTg5ZGI3MjZk
YmE4YWMwOWY4MWQ4Nzk1N2U3NmY4ODJiLi4xZThjYzIzYjU2NGFkOTE3YWVkMzNiMzQ4MjdhZjg5
NjRkZTUwODU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVu
dHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuaApAQCAtNTEs
NiArNTEsNyBAQCBzdHJ1Y3QgVmlld3BvcnRBdHRyaWJ1dGVzIHsKICAgICBmbG9hdCB1c2VyU2Nh
bGFibGU7CiAgICAgZmxvYXQgb3JpZW50YXRpb247CiAgICAgZmxvYXQgc2hyaW5rVG9GaXQ7Cisg
ICAgYm9vbCBjbGlwVG9TYWZlQXJlYTsKIH07CiAKIHN0cnVjdCBWaWV3cG9ydEFyZ3VtZW50cyB7
CkBAIC05NCw2ICs5NSw3IEBAIHN0cnVjdCBWaWV3cG9ydEFyZ3VtZW50cyB7CiAgICAgZmxvYXQg
dXNlclpvb20geyBWYWx1ZUF1dG8gfTsKICAgICBmbG9hdCBvcmllbnRhdGlvbiB7IFZhbHVlQXV0
byB9OwogICAgIGZsb2F0IHNocmlua1RvRml0IHsgVmFsdWVBdXRvIH07CisgICAgYm9vbCBjbGlw
VG9TYWZlQXJlYSB7IHRydWUgfTsKICAgICBib29sIHdpZHRoV2FzRXhwbGljaXQgeyBmYWxzZSB9
OwogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJiBvdGhlcikg
Y29uc3QKQEAgLTExMiw2ICsxMTQsNyBAQCBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHMgewogICAg
ICAgICAgICAgJiYgdXNlclpvb20gPT0gb3RoZXIudXNlclpvb20KICAgICAgICAgICAgICYmIG9y
aWVudGF0aW9uID09IG90aGVyLm9yaWVudGF0aW9uCiAgICAgICAgICAgICAmJiBzaHJpbmtUb0Zp
dCA9PSBvdGhlci5zaHJpbmtUb0ZpdAorICAgICAgICAgICAgJiYgY2xpcFRvU2FmZUFyZWEgPT0g
b3RoZXIuY2xpcFRvU2FmZUFyZWEKICAgICAgICAgICAgICYmIHdpZHRoV2FzRXhwbGljaXQgPT0g
b3RoZXIud2lkdGhXYXNFeHBsaWNpdDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVu
dC5oCmluZGV4IGIwODBhOTU4OTU5ZTQ1NjVjZjAyYzdmNDA4MDdmOGM0NDAyZjAxZjcuLmU3Y2U4
ZTI5NzNmY2M5MTRiZWVmYjQ3ODllZWNlZjAyNzc3MmQ5ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaApAQCAtNDY2LDYgKzQ2Niw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCByZXBvcnRQcm9jZXNzQ1BVVGltZShpbnQ2NF90LCBBY3Rpdml0eVN0YXRlRm9yQ1BVU2FtcGxp
bmcpIHsgfQogCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wp
IHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+Q2hyb21lQ2xpZW50KCkgeyB9CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDE0ODA4NGIyYjhhNDFhMjRiYTI3YjE5ZjY0
OGJkZTMyN2VjZjM5M2UuLjM2OGM2Y2QwYzg0M2NiMjkwZThiMGFmMGE0ZWIyNTM3NzgxMWZkNjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTI5MjksNiArMjkyOSwxMCBAQCB2b2lk
IEZyYW1lVmlldzo6ZW5hYmxlU3BlY3VsYXRpdmVUaWxpbmdJZk5lZWRlZCgpCiAgICAgICAgIG1f
c3BlY3VsYXRpdmVUaWxpbmdFbmFibGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
KyAgICBpZiAoIW1fY2xpcFRvU2FmZUFyZWEpIHsKKyAgICAgICAgbV9zcGVjdWxhdGl2ZVRpbGlu
Z0VuYWJsZWQgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmICghc2hvdWxk
RW5hYmxlU3BlY3VsYXRpdmVUaWxpbmdEdXJpbmdMb2FkaW5nKCp0aGlzKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0zMjM4LDkgKzMyNDIsNiBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQmFja2dy
b3VuZFJlY3Vyc2l2ZWx5KGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIGJvb2wgdAogCiBi
b29sIEZyYW1lVmlldzo6aGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29u
c3QKIHsKLSAgICBpZiAoIWZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5k
QmV5b25kUGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZyA9IHRoaXMtPnRpbGVkQmFja2luZygpOwogICAgIGlmICghdGlsZWRCYWNr
aW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjU5LDExICszMjYwLDggQEAgdm9pZCBG
cmFtZVZpZXc6OnVwZGF0ZUV4dGVuZEJhY2tncm91bmRJZk5lY2Vzc2FyeSgpCiAKIEZyYW1lVmll
dzo6RXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFj
a2dyb3VuZE1vZGUoKSBjb25zdAogewotICAgIC8vIEp1c3QgYmVjYXVzZSBTZXR0aW5nczo6YmFj
a2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSBpcyB0cnVlIGRvZXMgbm90IG5lY2Vzc2Fy
aWx5IG1lYW4KLSAgICAvLyB0aGF0IHRoZSBiYWNrZ3JvdW5kIHJlY3QgbmVlZHMgdG8gYmUgZXh0
ZW5kZWQgZm9yIHBhaW50aW5nLiBTaW1wbGUgYmFja2dyb3VuZHMgY2FuIGJlIGV4dGVuZGVkCi0g
ICAgLy8ganVzdCB3aXRoIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0Um9vdEV4dGVuZGVkQmFj
a2dyb3VuZENvbG9yKCkuIE1vcmUgY29tcGxpY2F0ZWQgYmFja2dyb3VuZHMsCi0gICAgLy8gc3Vj
aCBhcyBpbWFnZXMsIHJlcXVpcmUgZXh0ZW5kaW5nIHRoZSBiYWNrZ3JvdW5kIHJlY3QgdG8gY29u
dGludWUgcGFpbnRpbmcgaW50byB0aGUgZXh0ZW5kZWQKLSAgICAvLyByZWdpb24uIFRoaXMgZnVu
Y3Rpb24gZmluZHMgb3V0IGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBleHRlbmQgdGhlIGJhY2tncm91
bmQgcmVjdCBmb3IgcGFpbnRpbmcuCisgICAgaWYgKCFtX2NsaXBUb1NhZmVBcmVhKQorICAgICAg
ICByZXR1cm4gRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZUFsbDsKIAogI2lmIFBMQVRGT1JNKElPUykK
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTYyMDEzNzM+CkBAIC0zMjcyLDYgKzMyNzAsMTIgQEAg
RnJhbWVWaWV3OjpFeHRlbmRlZEJhY2tncm91bmRNb2RlIEZyYW1lVmlldzo6Y2FsY3VsYXRlRXh0
ZW5kZWRCYWNrZ3JvdW5kTW9kZSgpIGMKICAgICBpZiAoIWZyYW1lKCkuc2V0dGluZ3MoKS5iYWNr
Z3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKQogICAgICAgICByZXR1cm4gRXh0ZW5kZWRC
YWNrZ3JvdW5kTW9kZU5vbmU7CiAKKyAgICAvLyBKdXN0IGJlY2F1c2UgU2V0dGluZ3M6OmJhY2tn
cm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkgaXMgdHJ1ZSBkb2VzIG5vdCBuZWNlc3Nhcmls
eSBtZWFuCisgICAgLy8gdGhhdCB0aGUgYmFja2dyb3VuZCByZWN0IG5lZWRzIHRvIGJlIGV4dGVu
ZGVkIGZvciBwYWludGluZy4gU2ltcGxlIGJhY2tncm91bmRzIGNhbiBiZSBleHRlbmRlZAorICAg
IC8vIGp1c3Qgd2l0aCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldFJvb3RFeHRlbmRlZEJhY2tn
cm91bmRDb2xvcigpLiBNb3JlIGNvbXBsaWNhdGVkIGJhY2tncm91bmRzLAorICAgIC8vIHN1Y2gg
YXMgaW1hZ2VzLCByZXF1aXJlIGV4dGVuZGluZyB0aGUgYmFja2dyb3VuZCByZWN0IHRvIGNvbnRp
bnVlIHBhaW50aW5nIGludG8gdGhlIGV4dGVuZGVkCisgICAgLy8gcmVnaW9uLiBUaGlzIGZ1bmN0
aW9uIGZpbmRzIG91dCBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gZXh0ZW5kIHRoZSBiYWNrZ3JvdW5k
IHJlY3QgZm9yIHBhaW50aW5nLgorCiAgICAgaWYgKCFmcmFtZSgpLmlzTWFpbkZyYW1lKCkpCiAg
ICAgICAgIHJldHVybiBFeHRlbmRlZEJhY2tncm91bmRNb2RlTm9uZTsKIApAQCAtMzMwMSw5ICsz
MzA1LDYgQEAgRnJhbWVWaWV3OjpFeHRlbmRlZEJhY2tncm91bmRNb2RlIEZyYW1lVmlldzo6Y2Fs
Y3VsYXRlRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSgpIGMKIAogdm9pZCBGcmFtZVZpZXc6OnVwZGF0
ZVRpbGVzRm9yRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZShFeHRlbmRlZEJhY2tncm91bmRNb2RlIG1v
ZGUpCiB7Ci0gICAgaWYgKCFmcmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVu
ZEJleW9uZFBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUmVuZGVyVmlldyogcmVuZGVy
VmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAg
IHJldHVybjsKQEAgLTMzNDgsNiArMzM0OSwzMCBAQCBJbnRSZWN0IEZyYW1lVmlldzo6ZXh0ZW5k
ZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3QKICAgICByZXR1cm4gc25hcHBlZElu
dFJlY3QoZXh0ZW5kZWRSZWN0KTsKIH0KIAordm9pZCBGcmFtZVZpZXc6OnNldENsaXBUb1NhZmVB
cmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpCit7CisgICAgaWYgKCFmcmFtZSgpLmlzTWFpbkZyYW1l
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaXBUb1NhZmVBcmVhID09IGNsaXBU
b1NhZmVBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaXBUb1NhZmVBcmVhID0gY2xp
cFRvU2FmZUFyZWE7CisKKyAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpKQorICAg
ICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5kaWRDaGFuZ2VDbGlwVG9TYWZlQXJlYShjbGlw
VG9TYWZlQXJlYSk7CisKKyAgICB1cGRhdGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKTsK
KyAgICBhZGp1c3RUaWxlZEJhY2tpbmdDb3ZlcmFnZSgpOworCisgICAgUmVuZGVyVmlldyogcmVu
ZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKTsKKyAgICBpZiAoIXJlbmRlclZpZXcpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJlbmRlckxheWVyQ29tcG9zaXRvciYgY29tcG9zaXRvciA9IHJl
bmRlclZpZXctPmNvbXBvc2l0b3IoKTsKKyAgICBjb21wb3NpdG9yLnVwZGF0ZVJvb3RDb250ZW50
TGF5ZXJDbGlwcGluZygpOworfQorCiBib29sIEZyYW1lVmlldzo6c2hvdWxkVXBkYXRlV2hpbGVP
ZmZzY3JlZW4oKSBjb25zdAogewogICAgIHJldHVybiBtX3Nob3VsZFVwZGF0ZVdoaWxlT2Zmc2Ny
ZWVuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggYjE0ZmVmMzNiNzQ2MjY2ODIzZDgzNDUw
NGJiNmE3ZDc0NTYyZjM1OS4uMGEzMjc1MzAwNDI0Y2RjYjY5ZWU2ZTljYTNlODIwZTY5OGFjZjk0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC0yMTMsNiArMjEzLDkgQEAgcHVibGljOgog
ICAgIGJvb2wgaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3Q7CiAg
ICAgSW50UmVjdCBleHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcoKSBjb25zdDsKIAor
ICAgIGJvb2wgY2xpcFRvU2FmZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX2NsaXBUb1NhZmVBcmVh
OyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDbGlwVG9TYWZlQXJlYShib29sKTsKKwog
ICAgIGJvb2wgc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKGJvb2wpOwogICAgIGJv
b2wgc2hvdWxkVXBkYXRlKCkgY29uc3Q7CkBAIC04MTMsNiArODE2LDggQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgbV9uZWVkc0RlZmVycmVkU2Nyb2xsYmFyc1VwZGF0ZSB7IGZhbHNlIH07CiAKKyAg
ICBib29sIG1fY2xpcFRvU2FmZUFyZWEgeyB0cnVlIH07CisKICAgICBSZWZQdHI8Q29udGFpbmVy
Tm9kZT4gbV9tYWludGFpblNjcm9sbFBvc2l0aW9uQW5jaG9yOwogCiAgICAgLy8gUmVuZGVyZXIg
dG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHAKaW5kZXggODA1YzZlMGNjZTU3ZGU5ZGRmN2U5Y2Vm
MjI2ZDhlMTAwODg5MWZkNS4uNmNlZmUzNGEwZjNlOTNmNmQ4YTY1OWEzZTRhY2VmYmZhYTEwOTRk
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcApA
QCAtMzM2LDYgKzMzNiw5IEBAIHZvaWQgVmlld3BvcnRDb25maWd1cmF0aW9uOjp1cGRhdGVDb25m
aWd1cmF0aW9uKCkKIAogICAgIGlmIChib29sZWFuVmlld3BvcnRBcmd1bWVudElzU2V0KG1fdmll
d3BvcnRBcmd1bWVudHMuc2hyaW5rVG9GaXQpKQogICAgICAgICBtX2NvbmZpZ3VyYXRpb24uYWxs
b3dzU2hyaW5rVG9GaXQgPSBtX3ZpZXdwb3J0QXJndW1lbnRzLnNocmlua1RvRml0ICE9IDAuOwor
CisgICAgaWYgKGJvb2xlYW5WaWV3cG9ydEFyZ3VtZW50SXNTZXQobV92aWV3cG9ydEFyZ3VtZW50
cy5jbGlwVG9TYWZlQXJlYSkpCisgICAgICAgIG1fY29uZmlndXJhdGlvbi5jbGlwVG9TYWZlQXJl
YSA9IG1fdmlld3BvcnRBcmd1bWVudHMuY2xpcFRvU2FmZUFyZWEgIT0gMC47CiB9CiAKIGRvdWJs
ZSBWaWV3cG9ydENvbmZpZ3VyYXRpb246OnZpZXdwb3J0QXJndW1lbnRzTGVuZ3RoKGRvdWJsZSBs
ZW5ndGgpIGNvbnN0CkBAIC00MzksNiArNDQyLDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgVmlld3BvcnRDb25maWd1cmF0aW9uOjpQYXJhbWV0ZXJzJgog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgibWF4aW11bVNjYWxlIiwgcGFyYW1ldGVycy5tYXhpbXVtU2Nh
bGUpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxsb3dzVXNlclNjYWxpbmciLCBwYXJhbWV0ZXJz
LmFsbG93c1VzZXJTY2FsaW5nKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImFsbG93c1Nocmlua1Rv
Rml0IiwgcGFyYW1ldGVycy5hbGxvd3NTaHJpbmtUb0ZpdCk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJjbGlwVG9TYWZlQXJlYSIsIHBhcmFtZXRlcnMuY2xpcFRvU2FmZUFyZWEpOwogCiAgICAgcmV0
dXJuIHRzOwogfQpAQCAtNDcyLDYgKzQ3Niw3IEBAIENTdHJpbmcgVmlld3BvcnRDb25maWd1cmF0
aW9uOjpkZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wdXRlZCBs
YXlvdXQgc2l6ZSIsIGxheW91dFNpemUoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpZ25vcmlu
ZyBob3Jpem9udGFsIHNjYWxpbmcgY29uc3RyYWludHMiLCBzaG91bGRJZ25vcmVIb3Jpem9udGFs
U2NhbGluZ0NvbnN0cmFpbnRzKCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICB0cy5kdW1wUHJv
cGVydHkoImlnbm9yaW5nIHZlcnRpY2FsIHNjYWxpbmcgY29uc3RyYWludHMiLCBzaG91bGRJZ25v
cmVWZXJ0aWNhbFNjYWxpbmdDb25zdHJhaW50cygpID8gInRydWUiIDogImZhbHNlIik7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJjbGlwIHRvIHNhZmUgYXJlYSIsIGNsaXBUb1NhZmVBcmVhKCkgPyAi
dHJ1ZSIgOiAiZmFsc2UiKTsKICAgICAKICAgICB0cy5lbmRHcm91cCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uaAppbmRleCBiNzJjMGJmYTlkNjcwNzkx
YTI5MTI5YTM1NjU5YzA4YTZjNjQ3NzIxLi5iYWRkNmU4ZDdiOWE3ZjhjMTZhMmM0ODY0YzI2MWEw
MTNkNzg5MzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmln
dXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9u
LmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLCBtYXhpbXVtU2NhbGUo
MCkKICAgICAgICAgICAgICwgYWxsb3dzVXNlclNjYWxpbmcoZmFsc2UpCiAgICAgICAgICAgICAs
IGFsbG93c1Nocmlua1RvRml0KGZhbHNlKQorICAgICAgICAgICAgLCBjbGlwVG9TYWZlQXJlYSh0
cnVlKQogICAgICAgICAgICAgLCB3aWR0aElzU2V0KGZhbHNlKQogICAgICAgICAgICAgLCBoZWln
aHRJc1NldChmYWxzZSkKICAgICAgICAgICAgICwgaW5pdGlhbFNjYWxlSXNTZXQoZmFsc2UpCkBA
IC02Myw2ICs2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgZG91YmxlIG1heGltdW1TY2FsZTsKICAg
ICAgICAgYm9vbCBhbGxvd3NVc2VyU2NhbGluZzsKICAgICAgICAgYm9vbCBhbGxvd3NTaHJpbmtU
b0ZpdDsKKyAgICAgICAgYm9vbCBjbGlwVG9TYWZlQXJlYTsKIAogICAgICAgICBib29sIHdpZHRo
SXNTZXQ7CiAgICAgICAgIGJvb2wgaGVpZ2h0SXNTZXQ7CkBAIC05NSw2ICs5Nyw3IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFsbG93c1VzZXJTY2FsaW5nKCkgY29uc3Q7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhbGxvd3NVc2VyU2NhbGluZ0lnbm9yaW5nQWx3YXlzU2Nh
bGFibGUoKSBjb25zdDsKICAgICBib29sIGFsbG93c1Nocmlua1RvRml0KCkgY29uc3Q7CisgICAg
Ym9vbCBjbGlwVG9TYWZlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlndXJhdGlvbi5jbGlw
VG9TYWZlQXJlYTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhcmFtZXRlcnMgd2Vi
cGFnZVBhcmFtZXRlcnMoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFyYW1ldGVycyB0
ZXh0RG9jdW1lbnRQYXJhbWV0ZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDUwNzcyOGNjNzQ0OTdlZjhlZTA4ZTUz
ZmE2Y2EzMzEyYzJmYjlkMmQuLmQ3OTEzZGNlNGYyNDg0OTY2ZTBkZDQzN2I2MWJmMGU3ZTBmMjY3
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCkBAIC05NzQsNiArOTc0LDExIEBAIHN0YXRpYyBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlckZvckNvbXBvc2l0aW5nVGVzdHMoY29uc3QgUmVuZGVyTGF5ZXImIGxhCiAg
ICAgcmV0dXJuICpyZW5kZXJlcjsKIH0KIAordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygpCit7CisgICAgbV9yb290Q29udGVudExheWVy
LT5zZXRNYXNrc1RvQm91bmRzKCFtX3JlbmRlclZpZXcuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hv
dWxkRXh0ZW5kQmV5b25kUGFnZSgpICYmIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5jbGlwVG9T
YWZlQXJlYSgpKTsKK30KKwogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tp
bmcoUmVuZGVyTGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnQgc2hvdWxkUmVw
YWludCwgQmFja2luZ1JlcXVpcmVkIGJhY2tpbmdSZXF1aXJlZCkKIHsKICAgICBib29sIGxheWVy
Q2hhbmdlZCA9IGZhbHNlOwpAQCAtMTAwNSw4ICsxMDEwLDcgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0No
YW5nZVIKICAgICAgICAgICAgICAgICB1cGRhdGVMYXllckZvckhlYWRlcihwYWdlKCkuaGVhZGVy
SGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIHVwZGF0ZUxheWVyRm9yRm9vdGVyKHBhZ2UoKS5m
b290ZXJIZWlnaHQoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAobV9yZW5kZXJWaWV3
LnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSkKLSAgICAgICAg
ICAgICAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICB1cGRhdGVSb290Q29udGVudExheWVyQ2xpcHBpbmcoKTsKIAogICAg
ICAgICAgICAgICAgIGlmIChUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IGxheWVyLmJhY2tp
bmcoKS0+dGlsZWRCYWNraW5nKCkpCiAgICAgICAgICAgICAgICAgICAgIHRpbGVkQmFja2luZy0+
c2V0VG9wQ29udGVudEluc2V0KG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS50b3BDb250ZW50SW5z
ZXQoKSk7CkBAIC0zMzgwLDcgKzMzODQsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
ZW5zdXJlUm9vdExheWVyKCkKICNlbmRpZgogCiAgICAgICAgIC8vIE5lZWQgdG8gY2xpcCB0byBw
cmV2ZW50IHRyYW5zZm9ybWVkIGNvbnRlbnQgc2hvd2luZyBvdXRzaWRlIHRoaXMgZnJhbWUKLSAg
ICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworICAgICAg
ICB1cGRhdGVSb290Q29udGVudExheWVyQ2xpcHBpbmcoKTsKICAgICB9CiAKICAgICBpZiAocmVx
dWlyZXNTY3JvbGxMYXllcihleHBlY3RlZEF0dGFjaG1lbnQpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggODI4YWU5ZDEyOWE4
ZTEwMzU2MmMzNGMyNDViNDhhZjBlMjkxODdhZC4uOGFmY2Q1ZDQzYmQ4MWNmY2E4MjY4NzAxYmJl
MTc3NzdkNDNmNTk4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuaApAQCAtMzEzLDYgKzMxMyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwogICAgIGNvbnN0IENv
bG9yJiByb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RF
eHRlbmRlZEJhY2tncm91bmRDb2xvcjsgfQogCisgICAgdm9pZCB1cGRhdGVSb290Q29udGVudExh
eWVyQ2xpcHBpbmcoKTsKKwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgdm9pZCB1
cGRhdGVTY3JvbGxTbmFwUHJvcGVydGllc1dpdGhGcmFtZVZpZXcoY29uc3QgRnJhbWVWaWV3Jik7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXgg
MTE2OWQ5MmNlZjc4ODhlMWUyY2QxZWUxMDM3NTAzYmNjZTkyMDA0MC4uMDVlOGJiMTJiZjYzODVj
YWFkZDRmZTgwYjI4YmNlNzkyMWZkNjkyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKQEAgLTg5Nyw2ICs4OTcsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVw
YWludFVzaW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRD
bwogICAgICAgICAgICAgdmlldy5yZXBhaW50Vmlld1JlY3RhbmdsZShyZWN0KTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5j
bGlwVG9TYWZlQXJlYSgpKQorICAgICAgICAgICAgc2hvdWxkQ2xpcFRvTGF5ZXIgPSBmYWxzZTsK
ICAgICB9CiAKICAgICBpZiAodmlldygpLnVzZXNDb21wb3NpdGluZygpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IGU1ZDk2ZTYy
YzQzZjI1NjU4ZTIzYjY0ZDQ2YzYzYzY4MDZkMDAzOGIuLmY5ZTFiMzY4NmMzMWNkY2MyYTY5YWY4
MDM0YWVlOGJjOTM1MmRhMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tCkBAIC00MjYwLDYgKzQyNjAsMTEgQEAgc3RhdGljIGlubGluZSBX
ZWJLaXQ6OkZpbmRPcHRpb25zIHRvRmluZE9wdGlvbnMoX1dLRmluZE9wdGlvbnMgd2tGaW5kT3B0
aW9ucykKICAgICByZXR1cm4gX3BhZ2UtPmlzU2hvd2luZ05hdmlnYXRpb25HZXN0dXJlU25hcHNo
b3QoKTsKIH0KIAorLSAoQk9PTClfY29udGVudE1heURyYXdJbk9ic2N1cmVkSW5zZXRzCit7Cisg
ICAgcmV0dXJuICFfcGFnZS0+Y2xpcFRvU2FmZUFyZWEoKTsKK30KKwogLSAoX1dLTGF5b3V0TW9k
ZSlfbGF5b3V0TW9kZQogewogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKaW5kZXggYTAyODQz
ZjRiMjRjNzMyZDFjMjQ2OWExZTQ0ODllNzJiNDE5NjkyYS4uOGU4OWEwNjY3ZDlkNDJmNzFlNzNh
NTFlNjIxZTA0NzkwZjczNzlhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKQEAgLTE0NCw2ICsxNDQsOCBAQCB0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlKSB7CiAvLyBEZWZp
bmUgdGhlIGluc2V0IG9mIHRoZSBzY3JvbGx2aWV3IHVudXNhYmxlIGJ5IHRoZSB3ZWIgcGFnZS4K
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldE9ic2N1cmVkSW5zZXRzOikgVUlFZGdl
SW5zZXRzIF9vYnNjdXJlZEluc2V0czsKIAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBCT09MIF9jb250ZW50TWF5RHJhd0luT2JzY3VyZWRJbnNldHM7CisKIC8vIE92ZXJyaWRlIHRo
ZSBpbnRlcmZhY2Ugb3JpZW50YXRpb24uIENsaWVudHMgdXNpbmcgX2JlZ2luQW5pbWF0ZWRSZXNp
emVXaXRoVXBkYXRlczogbXVzdCB1cGRhdGUgdGhlIGludGVyZmFjZSBvcmllbnRhdGlvbgogLy8g
aW4gdGhlIHVwZGF0ZSBibG9jay4KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldElu
dGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU6KSBVSUludGVyZmFjZU9yaWVudGF0aW9uIF9pbnRl
cmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggOGM1Nzc2ZjM0MjhmNmJiMGQxOTlhYWFl
OGUwMjY2MDA3MDRhY2UxMC4uYWRkM2Y2NjUyMmRjMjU5NWQ3OWIyZTc1MDQwNzdlM2M4ZGYwZjVl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVu
dEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50
SW1wbC5oCkBAIC0xNDYsNiArMTQ2LDggQEAgcHJpdmF0ZToKIAogICAgIFdlYkNvcmU6OlVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIG92
ZXJyaWRlIHsgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246OkxU
UjsgfQogCisgICAgdm9pZCBkaWRDaGFuZ2VDbGlwVG9TYWZlQXJlYShib29sKSBvdmVycmlkZSB7
IH0KKwogICAgIC8vIE1lbWJlcnMgb2YgUGFnZUNsaWVudEltcGwgY2xhc3MKICAgICBHdGtXaWRn
ZXQqIG1fdmlld1dpZGdldDsKICAgICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIgbV91bmRvQ29udHJv
bGxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IGI1NmRlYmY1M2Ix
NWI2NDQ4MGVjNjQ4ZTdmNzdlNjk5MTRjMDkyNGMuLjBkZGZkNDYyMzU0NDU0ODYzMDJjMjgxNWY1
NWU4MzEwZmZkMDc5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdl
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAt
Mzg2LDYgKzM4Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29uY2x1ZGVFZGl0
RGF0YUludGVyYWN0aW9uKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGE+
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZURhdGFJbnRlcmFjdGlvbkNhcmV0UmVj
dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBwcmV2aW91c0NhcmV0UmVjdCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgY2FyZXRSZWN0KSA9IDA7CiAjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBk
aWRDaGFuZ2VDbGlwVG9TYWZlQXJlYShib29sIGNsaXBUb1NhZmVBcmVhKSA9IDA7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKaW5kZXggZDc3ZDQwNzIzMjIzM2E1Y2U5ODlmM2Y5YjQ3ZGFhYTJjYmU0MDBkYS4uYzg4
MzM1ODIxNTQyZDYxNDQ3YTJiMTI2YWZjMjE3Mzk5N2I4Y2QzOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTU0NTUsNiArNTQ1NSw4IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpyZXNldFN0YXRlKFJlc2V0U3RhdGVSZWFzb24gcmVzZXRTdGF0ZVJlYXNvbikK
ICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQogICAgIHJlcXVlc3RQb2ludGVyVW5sb2NrKCk7CiAj
ZW5kaWYKKworICAgIG1fY2xpcFRvU2FmZUFyZWEgPSB0cnVlOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZCgpCkBAIC02ODgwLDQgKzY4ODIsMTEg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BVUkxTY2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBo
YW5kbGVySWRlbnRpZmllciwgdWludDY0X3QKICAgICBpdGVyYXRvci0+dmFsdWUtPnN0b3BUYXNr
KCp0aGlzLCByZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
Q2xpcFRvU2FmZUFyZWEoYm9vbCBjbGlwVG9TYWZlQXJlYSkKK3sKKyAgICBtX2NsaXBUb1NhZmVB
cmVhID0gY2xpcFRvU2FmZUFyZWE7CisKKyAgICBtX3BhZ2VDbGllbnQuZGlkQ2hhbmdlQ2xpcFRv
U2FmZUFyZWEoY2xpcFRvU2FmZUFyZWEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAwNThjNTliZjg4ZTJmMjQw
OTcyMGE5Y2VjM2IxNGIyNjI3YjYwZjViLi5lYmQ0ZTI3MWZmMTY4ZmI3NDZlYzk0NWJiMjQ3Nzk2
MTBmOWJiMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0x
MTkxLDYgKzExOTEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVUkxTY2hlbWVIYW5kbGVyRm9y
U2NoZW1lKFJlZjxXZWJVUkxTY2hlbWVIYW5kbGVyPiYmLCBjb25zdCBTdHJpbmcmIHNjaGVtZSk7
CiAgICAgV2ViVVJMU2NoZW1lSGFuZGxlciogdXJsU2NoZW1lSGFuZGxlckZvclNjaGVtZShjb25z
dCBTdHJpbmcmIHNjaGVtZSk7CiAKKyAgICB2b2lkIHNldENsaXBUb1NhZmVBcmVhKGJvb2wpOwor
ICAgIGJvb2wgY2xpcFRvU2FmZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX2NsaXBUb1NhZmVBcmVh
OyB9CisKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmLCBXZWJQcm9jZXNz
UHJveHkmLCB1aW50NjRfdCBwYWdlSUQsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsK
ICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpAQCAtMTk3Niw3ICsxOTc5LDkgQEAgcHJp
dmF0ZToKICNlbmRpZgogCiAgICAgYm9vbCBtX2lzVXNpbmdIaWdoUGVyZm9ybWFuY2VXZWJHTCB7
IGZhbHNlIH07Ci0gICAgICAgIAorCisgICAgYm9vbCBtX2NsaXBUb1NhZmVBcmVhIHsgdHJ1ZSB9
OworCiAgICAgV2Vha1B0ckZhY3Rvcnk8V2ViUGFnZVByb3h5PiBtX3dlYWtQdHJGYWN0b3J5Owog
CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZjxXZWJVUkxTY2hlbWVIYW5kbGVyPj4gbV91cmxTY2hl
bWVIYW5kbGVyc0J5U2NoZW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggZjZjNTRjNzE2MjZiZDVmZTE4MTAzYzU1MjMxZmI3
ODE5NGFmN2I4Ni4uODQ1ZDQzMDk0ZTEwMGJkMGIxMDJiMWM3MjAzNTg4NTViMGJmZTMyYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
CkBAIC00OTQsNCArNDk0LDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKIAogICAgIFN0
YXJ0VVJMU2NoZW1lSGFuZGxlclRhc2sodWludDY0X3QgbG9hZGVySWRlbnRpZmllciwgdWludDY0
X3QgcmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCkK
ICAgICBTdG9wVVJMU2NoZW1lSGFuZGxlclRhc2sodWludDY0X3QgbG9hZGVySWRlbnRpZmllciwg
dWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKQorCisgICAgU2V0Q2xpcFRvU2FmZUFyZWEoYm9v
bCBjbGlwVG9TYWZlQXJlYSkKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
UGFnZUNsaWVudEltcGxJT1MuaAppbmRleCA1MjFlMWRkODFhMjNiMmIyOWFjMjIxOGMzN2ExYTU4
YTc2YjI4ZGFhLi42OTE0MjZkZGY2Y2Y2YjI2OTQxODczM2I5MGYwMDFmN2I0NDM1NWNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCkBA
IC0xOTgsNiArMTk4LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaGFuZGxlQWN0aXZlTm93UGxh
eWluZ1Nlc3Npb25JbmZvUmVzcG9uc2UoYm9vbCBoYXNBY3RpdmVTZXNzaW9uLCBjb25zdCBTdHJp
bmcmIHRpdGxlLCBkb3VibGUgZHVyYXRpb24sIGRvdWJsZSBlbGFwc2VkVGltZSkgb3ZlcnJpZGU7
CiAKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEp
IG92ZXJyaWRlOworCiAjaWYgVVNFKFFVSUNLX0xPT0spCiAgICAgdm9pZCByZXF1ZXN0UGFzc3dv
cmRGb3JRdWlja0xvb2tEb2N1bWVudChjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpIG92ZXJyaWRlOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQppbmRleCBiOTZj
ZDJlMjc4ZjE1NDBjZTYxZDQ5NzU1YWZjOTkxZmExOGI3MmUwLi5kOGQ1YmIwOTMxMzU0MTA1YWUx
MTI5ZGEzZTQ1ZTg4NTQxNDQzMjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTgyMSw2ICs4MjEsMTEgQEAgdm9pZCBQYWdl
Q2xpZW50SW1wbDo6cmVxdWVzdFBhc3N3b3JkRm9yUXVpY2tMb29rRG9jdW1lbnQoY29uc3QgU3Ry
aW5nJiBmaWxlTmFtZSwKIH0KICNlbmRpZgogCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDaGFu
Z2VDbGlwVG9TYWZlQXJlYShib29sIGNsaXBUb1NhZmVBcmVhKQoreworICAgIFttX3dlYlZpZXcg
X3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KaW5kZXggZDdjNjM5MjIzMzM2YmMyMGU0ZGJkMDg3
ZDdhNWVkMTkzYzVlNzEzNi4uNzVmNzE4YmRmOWRiNzk1MWVkMTg2MjI4ZjA5NWE5YzhlMWE4Mjkz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQpA
QCAtMzYwLDYgKzM2MCw3IEBAIHByaXZhdGU6CiAKICAgICBbX2ZpeGVkQ2xpcHBpbmdWaWV3IHNl
dENlbnRlcjpjbGlwcGluZ0JvdW5kcy5sb2NhdGlvbigpXTsgLy8gTm90IHJlYWxseSB0aGUgY2Vu
dGVyIHNpbmNlIHdlIHNldCBhbiBhbmNob3IgcG9pbnQuCiAgICAgW19maXhlZENsaXBwaW5nVmll
dyBzZXRCb3VuZHM6Y2xpcHBpbmdCb3VuZHNdOworICAgIFtfZml4ZWRDbGlwcGluZ1ZpZXcgbGF5
ZXJdLm1hc2tzVG9Cb3VuZHMgPSBfcGFnZS0+Y2xpcFRvU2FmZUFyZWEoKTsKIH0KIAogLSAodm9p
ZClfZGlkRXhpdFN0YWJsZVN0YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsLmgKaW5kZXggM2NiNmNhOGFhNmYzYTE5YWY1OGY4NDUwNzBjYTNiZjVlZTQ0
YmQ1OS4uMGY4ZTdlM2JiOWNhYTdlMzJiNzI1YjM2OGJkNmRkODZiZjEyOTEzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaApAQCAtMjUxLDYgKzI1
MSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpIG92
ZXJyaWRlOwogICAgIGJvb2wgd2luZG93SXNGcm9udFdpbmRvd1VuZGVyTW91c2UoY29uc3QgTmF0
aXZlV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkaWRDaGFuZ2VDbGlwVG9T
YWZlQXJlYShib29sIGNsaXBUb1NhZmVBcmVhKSBvdmVycmlkZSB7IH0KIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDE0YzFlNDY2MTI2M2Ix
ZDFkZTA5MjA2OGFkYzlkMGRiNmQwOWQwYmMuLjZiZGY2NzhhZmIwNzQ3MDRkZDVjM2I2NzNmMDZj
OWExNmUxMTYzNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTEyMjIsNCArMTIyMiw5
IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJrZXJSZWN0
cygpCiAgICAgbV9wYWdlLmZpbmRDb250cm9sbGVyKCkuZGlkSW52YWxpZGF0ZURvY3VtZW50TWFy
a2VyUmVjdHMoKTsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZENoYW5nZUNsaXBUb1Nh
ZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpCit7CisgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6U2V0Q2xpcFRvU2FmZUFyZWEoY2xpcFRvU2FmZUFyZWEpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBhNTE0YjI5OTQ4
ODg0MmJjZjkyNDU4OTEzYjAzNzliM2VhZjllYmFlLi4wNGNmNmI1YTJhNmM5NTVhODM0ZmRiMmEy
YjMwOTJhMDc3NTgxNmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTM0MCw2ICszNDAsOCBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJrZXJSZWN0cygp
IGZpbmFsOwogCisgICAgdm9pZCBkaWRDaGFuZ2VDbGlwVG9TYWZlQXJlYShib29sKSBmaW5hbDsK
KwogICAgIFN0cmluZyBtX2NhY2hlZFRvb2xUaXA7CiAgICAgbXV0YWJsZSBSZWZQdHI8V2ViRnJh
bWU+IG1fY2FjaGVkRnJhbWVTZXRMYXJnZXN0RnJhbWU7CiAgICAgbXV0YWJsZSBib29sIG1fY2Fj
aGVkTWFpbkZyYW1lSGFzSG9yaXpvbnRhbFNjcm9sbGJhciB7IGZhbHNlIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXgg
MGFjN2I4M2YzYWViMzBmNDhkNzRlZDdmMDI2MGFhYWU3NDE5ZDk5My4uNGIxMzVkMDRhMzM0MjBk
MWI2YzNmNDg1MzFjY2JlNTU5YjgxN2E1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMzA0NSw2ICszMDQ1LDggQEAg
dm9pZCBXZWJQYWdlOjp2aWV3cG9ydENvbmZpZ3VyYXRpb25DaGFuZ2VkKCkKICAgICB1cGRhdGVW
aWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKCk7CiAKICAgICBGcmFtZVZpZXcmIGZyYW1l
VmlldyA9ICptYWluRnJhbWVWaWV3KCk7CisgICAgZnJhbWVWaWV3LnNldENsaXBUb1NhZmVBcmVh
KG1fdmlld3BvcnRDb25maWd1cmF0aW9uLmNsaXBUb1NhZmVBcmVhKCkpOworCiAgICAgSW50UG9p
bnQgc2Nyb2xsUG9zaXRpb24gPSBmcmFtZVZpZXcuc2Nyb2xsUG9zaXRpb24oKTsKICAgICBpZiAo
IW1faGFzUmVjZWl2ZWRWaXNpYmxlQ29udGVudFJlY3RzQWZ0ZXJEaWRDb21taXRMb2FkKSB7CiAg
ICAgICAgIEZsb2F0U2l6ZSBtaW5pbXVtTGF5b3V0U2l6ZUluU2Nyb2xsVmlld0Nvb3JkaW5hdGVz
ID0gbV92aWV3cG9ydENvbmZpZ3VyYXRpb24ubWluaW11bUxheW91dFNpemUoKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMWMyODU2NWM0ZTI1
NjIzOWVjZmY0NGI0ZTY4OWJiNTlmZmMxYTg0Li41NDExYzc5NTdhYTA1YjQ0NWVhOGNhNzUzZjc1
OTY1Zjc0NTM0OGJiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTctMDQtMTQgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUHJvdmlkZSBhIHZpZXdwb3J0IHBhcmFtZXRl
ciB0byBkaXNhYmxlIGNsaXBwaW5nIHRvIHRoZSBzYWZlIGFyZWEKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc2NgorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzE1NjQ2MzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgor
ICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKToKKyAg
ICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlw
dENvbnRyb2xsZXIuaWRsOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250
ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJv
bGxlcjo6c2V0T2JzY3VyZWRJbnNldHMpOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1SZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChX
VFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6c2V0T2JzY3VyZWRJbnNldHMpOgorICAgICAgICBBZGQg
YSBVSVNjcmlwdENvbnRyb2xsZXIgbWVjaGFuaXNtIHRvIGluc3RhbGwgb2JzY3VyZWQgaW5zZXRz
CisgICAgICAgIG9uIHRoZSB3ZWIgdmlldy4KKwogMjAxNy0wNC0xNCAgSm9uYXRoYW4gQmVkYXJk
ICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgd2Via2l0cHk6IElnbm9yZSBwcmV2aW91
c2x5IGxhdW5jaGVkIHBpZCB3aGVuIHN5c3RlbSBpcyB1bmRlciBzdHJlc3MKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IDQwM2I1
OWI0MWQzNTk5ZDU4YTIzNjU5OTM4ODIzZjYzNzM4MjU3MjYuLmIwZTA0ZGQ2NmE5MTNkNjZhMDRi
OWY4ZDI4ZDI3NDg1NjcxY2Q2YzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lv
cy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9z
L1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQpAQCAtMzE2LDYgKzMxNiwxMCBAQCB2b2lkIFVJU2Ny
aXB0Q29udHJvbGxlcjo6YWRkVmlld1RvV2luZG93KEpTVmFsdWVSZWYpCiB7CiB9CiAKK3ZvaWQg
VUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUsIGRvdWJsZSwgZG91
YmxlLCBkb3VibGUpCit7Cit9CisKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJ
U2NyaXB0Q29udHJvbGxlci5pZGwgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29u
dGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCmluZGV4IGY2NmFlMTUyMmY1MTYx
NzA3Y2M3ZjFmODRkNGM4ODFhOTJkYzJiZjEuLmRiYTQ1NmViY2IxZTNmOTg3ZDg5YjI3ODZlZTUz
ZmJkYzlhZTJhYmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRD
b250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKKysrIGIvVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlk
bApAQCAtMjMyLDQgKzIzMiw2IEBAIGludGVyZmFjZSBVSVNjcmlwdENvbnRyb2xsZXIgewogICAg
IHZvaWQgYWRkVmlld1RvV2luZG93KG9iamVjdCBjYWxsYmFjayk7CiAKICAgICB2b2lkIG92ZXJy
aWRlUHJlZmVyZW5jZShET01TdHJpbmcgcHJlZmVyZW5jZSwgRE9NU3RyaW5nIHZhbHVlKTsKKwor
ICAgIHZvaWQgc2V0T2JzY3VyZWRJbnNldHMoZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3Vi
bGUgYm90dG9tLCBkb3VibGUgbGVmdCk7CiB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKaW5k
ZXggNjEyYzllMjlmMWRhMjRlMjE4ODQ2NDA1YzgxNDIwZTZhYmRiODIzZi4uMGYxZmNjMWQ0OWYy
MTZlMzVjNzFmODZmYWY4ODZlOGFhNDk5NzU5YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3Bw
CkBAIC0zOTksNiArMzk5LDEwIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBVSVNjcmlwdENv
bnRyb2xsZXI6OmFjY2Vzc2liaWxpdHlTcGVha1NlbGVjdGlvbkNvbnRlbnQoCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJlZEluc2V0
cyhkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KQor
eworfQorCiAjZW5kaWYKIAogI2lmICFQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVy
LmgKaW5kZXggNDZjMjhiMTQwMWRkNDY0MTc2NDRhYTc2Njc0Y2FhYzNiMWJkNGNhOS4uNjYyNzM4
ODdiOWU2YWI5OTE2YjU5YTkxODlhMjIxYjEwODRkN2EzMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKKysrIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVy
LmgKQEAgLTE1Niw2ICsxNTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVWaWV3RnJvbVdp
bmRvdyhKU1ZhbHVlUmVmKTsKICAgICB2b2lkIGFkZFZpZXdUb1dpbmRvdyhKU1ZhbHVlUmVmKTsK
IAorICAgIHZvaWQgc2V0T2JzY3VyZWRJbnNldHMoZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBk
b3VibGUgYm90dG9tLCBkb3VibGUgbGVmdCk7CisKIHByaXZhdGU6CiAgICAgVUlTY3JpcHRDb250
cm9sbGVyKFVJU2NyaXB0Q29udGV4dCYpOwogICAgIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQppbmRleCA3YzM1MWY4MmY4NjdiZGI3ZTJkMTAy
OTkzZDZhMDFmZjM1OGI2MDQyLi5hMGQxMTJmNTYzMjY0MGI0ZjcyZjFlNzJmYThmNmJjNmI5MDBl
MmI3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxl
cklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklP
Uy5tbQpAQCAtODUsNiArODUsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0
U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoKQogICAgICAgICBbc2Nyb2xsVmlldyBfcmVtb3ZlQWxs
QW5pbWF0aW9uczpZRVNdOwogICAgICAgICBbc2Nyb2xsVmlldyBzZXRab29tU2NhbGU6MSBhbmlt
YXRlZDpOT107CiAgICAgICAgIFtzY3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6Q0dQb2ludFpl
cm9dOworCisgICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gVUlFZGdlSW5zZXRzWmVy
bzsKKyAgICAgICAgd2ViVmlldy0+cGxhdGZvcm1WaWV3KCkuX29ic2N1cmVkSW5zZXRzID0gVUlF
ZGdlSW5zZXRzWmVybzsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQppbmRleCBjZTY3ZjVlNTQzOWY4N2M3NWQ5
Y2E2NWUyNDY0Y2ZlZmY2YTM4ZGQ2Li41N2ExOTU0OWQ5ZDg5M2YyZTJkODI0MjY0YzE2MDdmMzBj
NWYyZGJkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENv
bnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRD
b250cm9sbGVySU9TLm1tCkBAIC02NjgsNiArNjY4LDE0IEBAIHZvaWQgVUlTY3JpcHRDb250cm9s
bGVyOjpwbGF0Zm9ybUNsZWFyQWxsQ2FsbGJhY2tzKCkKICAgICB3ZWJWaWV3LmRpZEVuZFNjcm9s
bGluZ0NhbGxiYWNrID0gbmlsOwogfQogCit2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6c2V0T2Jz
Y3VyZWRJbnNldHMoZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9tLCBkb3Vi
bGUgbGVmdCkKK3sKKyAgICBVSUVkZ2VJbnNldHMgaW5zZXRzID0gVUlFZGdlSW5zZXRzTWFrZSh0
b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQpOworICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZp
ZXcgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGxhdGZvcm1W
aWV3KCk7CisgICAgd2ViVmlldy5zY3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IGluc2V0czsKKyAg
ICB3ZWJWaWV3Ll9vYnNjdXJlZEluc2V0cyA9IGluc2V0czsKK30KKwogfQogCiAjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGExY2ZlOTM1ODIyOTQ0MmU1ZDIwYjY5Y2ZhZjRjNTJmYTI3
Y2VmN2UuLjZhZTA3M2M1NTU0YzQ3OTlmMDFiMmFmNTUzMTQ2ZWIzZmM1ZmEzMGUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNiBAQAorMjAxNy0wNC0xNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KKworICAgICAgICBQcm92aWRlIGEgdmlld3BvcnQgcGFyYW1ldGVyIHRvIGRpc2Fi
bGUgY2xpcHBpbmcgdG8gdGhlIHNhZmUgYXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNzY2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2
NDYzND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHRpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLW5vLWdldHMtbWFy
Z2luLXRpbGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdGlsZWQtZHJhd2luZy9p
b3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEtbm8tZ2V0cy1tYXJnaW4tdGlsZXMuaHRtbDog
QWRkZWQuCisgICAgICAgICogdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZl
LWFyZWEteWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEteWVzLWdl
dHMtbm8tbWFyZ2luLXRpbGVzLmh0bWw6IEFkZGVkLgorCiAyMDE3LTA0LTE0ICBSeWFuIEhhZGRh
ZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFNraXAgd29ya2Vycy93YXNtLSog
TGF5b3V0VGVzdHMgb24gaW9zLXNpbXVsYXRvci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Rp
bGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLW5vLWdldHMtbWFyZ2lu
LXRpbGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdw
b3J0LWNsaXAtdG8tc2FmZS1hcmVhLW5vLWdldHMtbWFyZ2luLXRpbGVzLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNzUwYmQzZGEwNzQzMjIyMWQ5NDBiMWMwMTM4ZGExZDJmODgyZGQ1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xp
cC10by1zYWZlLWFyZWEtbm8tZ2V0cy1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMjMgQEAKKyhHcmFwaGljc0xheWVyCisgIChhbmNob3IgMC4wMCAwLjAwKQorICAoYm91bmRz
IDMyMC4wMCA1NDguMDApCisgICh2aXNpYmxlIHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1Mzgu
MDApCisgIChjb3ZlcmFnZSByZWN0IC00MC4wMCwgLTEwLjAwIDMyMC4wMCB4IDU0OC4wMCkKKyAg
KGludGVyc2VjdHMgY292ZXJhZ2UgcmVjdCAxKQorICAoY29udGVudHNTY2FsZSAyLjAwKQorICAo
Y2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAgICAoYm91bmRzIDMyMC4wMCA1NDgu
MDApCisgICAgICAoY29udGVudHNPcGFxdWUgMSkKKyAgICAgICh2aXNpYmxlIHJlY3QgMC4wMCwg
MC4wMCAyODAuMDAgeCA1MzguMDApCisgICAgICAoY292ZXJhZ2UgcmVjdCAtNDAuMDAsIC0xMC4w
MCA1NzYuMDAgeCA4MDQuMDApCisgICAgICAoaW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisg
ICAgICAoY29udGVudHNTY2FsZSAyLjAwKQorICAgICAgKHRpbGUgY2FjaGUgY292ZXJhZ2UgLTUx
MiwgLTUxMiAxMzQ0IHggMTU3MikKKyAgICAgICh0aWxlIHNpemUgNTEyIHggNTQ4KQorICAgICAg
KHRvcCBsZWZ0IHRpbGUgLTEsIC0xIHRpbGVzIGdyaWQgMyB4IDMpCisgICAgICAoaW4gd2luZG93
IDEpCisgICAgKQorICApCispCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RpbGVkLWRyYXdp
bmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0
bWwgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUt
YXJlYS1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhYTUzMjg0OGZkZTEw
MDA3YmQ3ZmMyNmE4MWQwZWZmNTEyZDlmZmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1h
cmdpbi10aWxlcy5odG1sCkBAIC0wLDAgKzEsNDMgQEAKKzwhRE9DVFlQRSBodG1sPiA8IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBdIC0tPgorCis8aHRt
bD4KKzxoZWFkPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNj
YWxlPTEsIGNsaXAtdG8tc2FmZS1hcmVhPW5vIj4KKyAgICA8c2NyaXB0PgorICAgICAgICBmdW5j
dGlvbiBnZXRVSVNjcmlwdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBgCisgICAg
ICAgICAgICAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnNldE9i
c2N1cmVkSW5zZXRzKDEwLCAyMCwgMzAsIDQwKTsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xs
ZXIuaW1tZWRpYXRlU2Nyb2xsVG9PZmZzZXQoLTQwLCAtMTApOworICAgICAgICAgICAgICAgIHVp
Q29udHJvbGxlci5kb0FmdGVyVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUoKTsKKyAg
ICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgfSkoKTtgCisgICAgICAgIH0KKworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFz
VGV4dCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBkb1Rlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICB0
ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGdldFVJU2NyaXB0KCksIGZ1bmN0aW9uKHJlc3VsdCkgewor
ICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXllcnMnKS5pbm5lclRleHQgPSBpbnRlcm5h
bHMubGF5ZXJUcmVlQXNUZXh0KGRvY3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50
ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVERVNfVklTSUJMRV9SRUNUUyB8IGludGVybmFscy5MQVlF
Ul9UUkVFX0lOQ0xVREVTX1RJTEVfQ0FDSEVTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0
LCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorPHByZSBpZD0ibGF5
ZXJzIj5MYXllciB0cmVlIGdvZXMgaGVyZTwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1h
cmVhLXllcy1nZXRzLW5vLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90
aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS15ZXMtZ2V0cy1uby1t
YXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1NDdjOTUyOWY4MDk5MTM3MTg4
Zjg3YzM4ZDcwY2Y5MTBhM2ViYmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90aWxl
ZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS15ZXMtZ2V0cy1uby1tYXJn
aW4tdGlsZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjMgQEAKKyhHcmFwaGljc0xheWVyCisg
IChhbmNob3IgMC4wMCAwLjAwKQorICAoYm91bmRzIDMyMC4wMCA1NDguMDApCisgICh2aXNpYmxl
IHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1MzguMDApCisgIChjb3ZlcmFnZSByZWN0IDAuMDAs
IDAuMDAgMjgwLjAwIHggNTM4LjAwKQorICAoaW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisg
IChjb250ZW50c1NjYWxlIDIuMDApCisgIChjaGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIK
KyAgICAgIChib3VuZHMgMzIwLjAwIDU0OC4wMCkKKyAgICAgIChjb250ZW50c09wYXF1ZSAxKQor
ICAgICAgKHZpc2libGUgcmVjdCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAgICAgIChj
b3ZlcmFnZSByZWN0IDAuMDAsIDAuMDAgMjgwLjAwIHggNTM4LjAwKQorICAgICAgKGludGVyc2Vj
dHMgY292ZXJhZ2UgcmVjdCAxKQorICAgICAgKGNvbnRlbnRzU2NhbGUgMi4wMCkKKyAgICAgICh0
aWxlIGNhY2hlIGNvdmVyYWdlIDAsIDAgMzIwIHggNTQ4KQorICAgICAgKHRpbGUgc2l6ZSA1MTIg
eCA1NDgpCisgICAgICAodG9wIGxlZnQgdGlsZSAwLCAwIHRpbGVzIGdyaWQgMSB4IDEpCisgICAg
ICAoaW4gd2luZG93IDEpCisgICAgKQorICApCispCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLXllcy1nZXRzLW5v
LW1hcmdpbi10aWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3Bv
cnQtY2xpcC10by1zYWZlLWFyZWEteWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTZkMTk1YTM2NDM2OGE3ZGQ3NDMyMGY2OTgxMWIwOWFhM2Q2ZDRmOAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8t
c2FmZS1hcmVhLXllcy1nZXRzLW5vLW1hcmdpbi10aWxlcy5odG1sCkBAIC0wLDAgKzEsNDMgQEAK
KzwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmll
d3BvcnQ9dHJ1ZSBdIC0tPgorCis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIG5hbWU9InZpZXdw
b3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxlPTEsIGNsaXAtdG8tc2FmZS1hcmVhPXllcyI+Cisg
ICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gZ2V0VUlTY3JpcHQoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHVpQ29udHJvbGxlci5zZXRPYnNjdXJlZEluc2V0cygxMCwgMjAsIDMwLCA0MCk7Cisg
ICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLmltbWVkaWF0ZVNjcm9sbFRvT2Zmc2V0KC00MCwg
LTEwKTsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuZG9BZnRlclZpc2libGVDb250ZW50
UmVjdFVwZGF0ZShmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbGxl
ci51aVNjcmlwdENvbXBsZXRlKCk7CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIH0p
KCk7YAorICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAg
ICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZG9UZXN0KCkK
KyAgICAgICAgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChnZXRVSVNjcmlw
dCgpLCBmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGVy
bmFscykgeworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5
ZXJzJykuaW5uZXJUZXh0ID0gaW50ZXJuYWxzLmxheWVyVHJlZUFzVGV4dChkb2N1bWVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGludGVybmFscy5MQVlFUl9UUkVFX0lOQ0xVREVTX1ZJU0lC
TEVfUkVDVFMgfCBpbnRlcm5hbHMuTEFZRVJfVFJFRV9JTkNMVURFU19USUxFX0NBQ0hFUyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICB3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignbG9hZCcsIGRvVGVzdCwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorPC9oZWFk
PgorCis8Ym9keT4KKzxwcmUgaWQ9ImxheWVycyI+TGF5ZXIgdHJlZSBnb2VzIGhlcmU8L3A+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307280</attachid>
            <date>2017-04-17 10:46:52 -0700</date>
            <delta_ts>2017-04-17 10:48:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170766-20170417104650.patch</filename>
            <type>text/plain</type>
            <size>381993</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2FjOGVmN2IwZmZhYzhi
OTI4ODdmMzllMDY5OTQwMTk2MDBhNWJmYS4uYjI4MjEwZjFlZGU2Zjc0NmVmNjZlMGViM2I1MTVh
ZjlmZWJiODY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE3LTA0LTE3ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2
aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxNTY0NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9y
dC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sLAorICAgICAgICAg
ICAgICAgdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEteWVzLWdl
dHMtbm8tbWFyZ2luLXRpbGVzLmh0bWwsCisKKyAgICAgICAgKiBkb20vVmlld3BvcnRBcmd1bWVu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OnJlc29sdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0Vmlld3BvcnRGZWF0dXJlKToKKyAgICAgICAgKiBkb20vVmll
d3BvcnRBcmd1bWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKiBwYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWV3cG9ydENvbmZpZ3VyYXRpb246OnVwZGF0ZUNvbmZpZ3VyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpW
aWV3cG9ydENvbmZpZ3VyYXRpb246OmRlc2NyaXB0aW9uKToKKyAgICAgICAgKiBwYWdlL1ZpZXdw
b3J0Q29uZmlndXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRDb25maWd1cmF0
aW9uOjpQYXJhbWV0ZXJzOjpQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0
Q29uZmlndXJhdGlvbjo6Y2xpcFRvU2FmZUFyZWEpOgorICAgICAgICBBZGQgdmlld3BvcnQgcGFy
YW1ldGVyLgorCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5hYmxlU3BlY3VsYXRpdmVUaWxpbmdJZk5lZWRlZCk6CisgICAg
ICAgIElmIG5vdCBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhLCBlbmFibGUgInNwZWN1bGF0aXZl
IiB0aWxpbmcgaW1tZWRpYXRlbHksCisgICAgICAgIGJlY2F1c2UgdGhlIG1hcmdpbiB0aWxlcyBj
YW4gYmUgdmlzaWJsZSBpbW1lZGlhdGVseS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpoYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3Ojp1cGRhdGVUaWxlc0ZvckV4dGVuZGVkQmFja2dyb3VuZE1vZGUpOgorICAg
ICAgICBEb24ndCBjaGVjayB0aGUgc2V0dGluZyBoZXJlOyBqdXN0IHJlc3BlY3QgdGhlIG1vZGUg
dGhhdCBpcyBjb21wdXRlZAorICAgICAgICBieSBjYWxjdWxhdGVFeHRlbmRlZEJhY2tncm91bmRN
b2RlLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFj
a2dyb3VuZE1vZGUpOgorICAgICAgICBJZiB0aGUgdmlld3BvcnQgcGFyYW1ldGVyIHdhcyBzZXQs
IGFkZCBtYXJnaW4gdGlsZXMgb24gYm90aCBheGVzLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OnNldENsaXBUb1NhZmVBcmVhKToKKyAgICAgICAgTm90aWZ5IENocm9tZUNsaWVudCBv
ZiB0aGUgY2hhbmdlLCBhbmQgcmUtY29tcHV0ZSB0aGUgbWFyZ2luIHRpbGUgbW9kZS4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgRmFjdG9yIG91dCBjb2Rl
IHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRoZSBjb250ZW50IGxheWVyIGNsaXBzIHRvIGJvdW5kcywK
KyAgICAgICAgYW5kIG1ha2UgaXQgdGFrZSB0aGUgbmV3IHZpZXdwb3J0IHBhcmFtZXRlciBpbnRv
IGFjY291bnQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAg
ICAgRG9uJ3QgY2xpcCBSZW5kZXJWaWV3IHJlcGFpbnRzIHRvIFJlbmRlclZpZXcncyBHcmFwaGlj
c0xheWVyIGJvdW5kcyBpZgorICAgICAgICBjbGlwLXRvLXNhZmUtYXJlYSBpcyBvZmYsIGp1c3Qg
bGlrZSB3ZSBkbyBmb3Igc2xvdy1yZXBhaW50IG9iamVjdHMgaW4KKyAgICAgICAgZXh0ZW5kZWQg
YmFja2dyb3VuZCBtb2RlLgorCiAyMDE3LTA0LTE3ICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBlbnVtZXJhdGVEZXZpY2VzIHRvIGFsbG93IHNl
cGFyYXRlIENhcHR1cmVEZXZpY2VNYW5hZ2VycyBmb3IgYXVkaW8gYW5kIHZpZGVvLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IDUzNTI3ZmI2MjNiNzNjMzZhNDg4NTU4ZDU0NzAzNjJhOGZlZmUzYWMuLjI3YmQ4M2Vk
ZGZmNmNjOGRmZWE4NjQ2MzVjYjY5YzhlNTdhYjFiY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
NCBAQAorMjAxNy0wNC0xNyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
KworICAgICAgICBQcm92aWRlIGEgdmlld3BvcnQgcGFyYW1ldGVyIHRvIGRpc2FibGUgY2xpcHBp
bmcgdG8gdGhlIHNhZmUgYXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwNzY2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlc2V0
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENsaXBUb1NhZmVBcmVh
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6Y2xpcFRvU2FmZUFyZWEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6
OmRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1Bh
Z2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgIEZvcndhcmQgY2xpcC10by1zYWZlLWFyZWEgY2hh
bmdlcyBmcm9tIENocm9tZUNsaWVudCB0byBXS1dlYlZpZXcuCisgICAgICAgIFVwZGF0ZSB2aXNp
YmxlIGNvbnRlbnQgcmVjdHMgd2hlbiBpdCBjaGFuZ2VzLCB3aGljaCB3aWxsCisgICAgICAgIHJl
c3VsdCBpbiBhIGNhbGwgdG8gdXBkYXRlRml4ZWRDbGlwcGluZ1ZpZXcsIGFzIGJlbG93LgorICAg
ICAgICBLZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHN0YXRlIGluIHRoZSBVSSBwcm9jZXNzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2Vi
VmlldyBfY29udGVudE1heURyYXdJbk9ic2N1cmVkSW5zZXRzXSk6CisgICAgICAgIEV4cG9zZSB0
aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgY2xpcC10by1zYWZlLWFyZWEgYml0IGFzIFNQSS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyB1cGRhdGVGaXhlZENsaXBwaW5nVmlldzpdKToKKyAgICAgICAgRGlzYWJsZSBm
aXhlZCBjbGlwcGluZyB3aGVuIGNsaXAtdG8tc2FmZS1hcmVhIGlzIGRpc2FibGVkLgorICAgICAg
ICAKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnZpZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQpOgorICAg
ICAgICBQdXNoIHRoZSB2aWV3cG9ydCdzIGNsaXAtdG8tc2FmZS1hcmVhIGJpdCBvbnRvIHRoZSBt
YWluIGZyYW1lJ3MgRnJhbWVWaWV3LgorCiAyMDE3LTA0LTE3ICBKZXJlbXkgSm9uZXMgIDxqZXJl
bXlqQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBlbnVtZXJhdGVEZXZpY2VzIHRvIGFs
bG93IHNlcGFyYXRlIENhcHR1cmVEZXZpY2VNYW5hZ2VycyBmb3IgYXVkaW8gYW5kIHZpZGVvLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHAKaW5kZXggMWU2OWI5MjZkYjFi
ZDY3MTMwYmFjZWU1MTM1MzQyMjI0ZDNiMzgwZC4uYzAwZGQ5MGQ1OGVlZjBhMDg5YTE2MGNmY2Fh
ODcwYTZlMWYxOTFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJn
dW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3Bw
CkBAIC0yNDYsNiArMjQ2LDcgQEAgVmlld3BvcnRBdHRyaWJ1dGVzIFZpZXdwb3J0QXJndW1lbnRz
OjpyZXNvbHZlKGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbFZpZXdwb3J0U2kKICAgICByZXN1bHQu
dXNlclNjYWxhYmxlID0gdXNlclpvb207CiAgICAgcmVzdWx0Lm9yaWVudGF0aW9uID0gb3JpZW50
YXRpb247CiAgICAgcmVzdWx0LnNocmlua1RvRml0ID0gc2hyaW5rVG9GaXQ7CisgICAgcmVzdWx0
LmNsaXBUb1NhZmVBcmVhID0gY2xpcFRvU2FmZUFyZWE7CiAKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtMzYzLDIyICszNjQsMjEgQEAgc3RhdGljIGZsb2F0IGZpbmRTY2FsZVZhbHVlKERvY3Vt
ZW50JiBkb2N1bWVudCwgU3RyaW5nVmlldyBrZXksIFN0cmluZ1ZpZXcgdmFsdWUKICAgICByZXR1
cm4gbnVtZXJpY1ZhbHVlOwogfQogCi0vLyBGSVhNRTogSXQncyBraW5kIG9mIGJpemFycmUgdG8g
dXNlIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBvZiAxIGFuZCAwIHRvIHJlcHJlc2VudCB0cnVlIGFu
ZCBmYWxzZS4KLXN0YXRpYyBmbG9hdCBmaW5kQm9vbGVhblZhbHVlKERvY3VtZW50JiBkb2N1bWVu
dCwgU3RyaW5nVmlldyBrZXksIFN0cmluZ1ZpZXcgdmFsdWUpCitzdGF0aWMgYm9vbCBmaW5kQm9v
bGVhblZhbHVlKERvY3VtZW50JiBkb2N1bWVudCwgU3RyaW5nVmlldyBrZXksIFN0cmluZ1ZpZXcg
dmFsdWUpCiB7CiAgICAgLy8geWVzIGFuZCBubyBhcmUgdXNlZCBhcyBrZXl3b3Jkcy4KICAgICAv
LyBOdW1iZXJzID49IDEsIG51bWJlcnMgPD0gLTEsIGRldmljZS13aWR0aCBhbmQgZGV2aWNlLWhl
aWdodCBhcmUgbWFwcGVkIHRvIHllcy4KICAgICAvLyBOdW1iZXJzIGluIHRoZSByYW5nZSA8LTEs
IDE+LCBhbmQgdW5rbm93biB2YWx1ZXMsIGFyZSBtYXBwZWQgdG8gbm8uCiAKICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJ5ZXMiKSkKLSAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSh2YWx1ZSwgIm5vIikpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiZGV2
aWNlLXdpZHRoIikpCi0gICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJkZXZpY2UtaGVpZ2h0
IikpCi0gICAgICAgIHJldHVybiAxOwotICAgIHJldHVybiBzdGQ6OmFicyhudW1lcmljUHJlZml4
KGRvY3VtZW50LCBrZXksIHZhbHVlKSkgPj0gMSA/IDEgOiAwOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc3RkOjphYnMobnVtZXJpY1ByZWZpeChkb2N1bWVudCwga2V5LCB2YWx1
ZSkpID49IDE7CiB9CiAKIHZvaWQgc2V0Vmlld3BvcnRGZWF0dXJlKFZpZXdwb3J0QXJndW1lbnRz
JiBhcmd1bWVudHMsIERvY3VtZW50JiBkb2N1bWVudCwgU3RyaW5nVmlldyBrZXksIFN0cmluZ1Zp
ZXcgdmFsdWUpCkBAIC00MDMsNiArNDAzLDggQEAgdm9pZCBzZXRWaWV3cG9ydEZlYXR1cmUoVmll
d3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cywgRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmcKICNl
bmRpZgogICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleSwgInNo
cmluay10by1maXQiKSkKICAgICAgICAgYXJndW1lbnRzLnNocmlua1RvRml0ID0gZmluZEJvb2xl
YW5WYWx1ZShkb2N1bWVudCwga2V5LCB2YWx1ZSk7CisgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2Uoa2V5LCAiY2xpcC10by1zYWZlLWFyZWEiKSkKKyAgICAgICAgYXJn
dW1lbnRzLmNsaXBUb1NhZmVBcmVhID0gZmluZEJvb2xlYW5WYWx1ZShkb2N1bWVudCwga2V5LCB2
YWx1ZSk7CiAgICAgZWxzZQogICAgICAgICByZXBvcnRWaWV3cG9ydFdhcm5pbmcoZG9jdW1lbnQs
IFVucmVjb2duaXplZFZpZXdwb3J0QXJndW1lbnRLZXlFcnJvciwga2V5KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmgKaW5kZXggNGU2OTA3ZjU4OWRiNzI2ZGJhOGFjMDlm
ODFkODc5NTdlNzZmODgyYi4uMWU4Y2MyM2I1NjRhZDkxN2FlZDMzYjM0ODI3YWY4OTY0ZGU1MDg1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmgKQEAgLTUxLDYgKzUxLDcg
QEAgc3RydWN0IFZpZXdwb3J0QXR0cmlidXRlcyB7CiAgICAgZmxvYXQgdXNlclNjYWxhYmxlOwog
ICAgIGZsb2F0IG9yaWVudGF0aW9uOwogICAgIGZsb2F0IHNocmlua1RvRml0OworICAgIGJvb2wg
Y2xpcFRvU2FmZUFyZWE7CiB9OwogCiBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHMgewpAQCAtOTQs
NiArOTUsNyBAQCBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHMgewogICAgIGZsb2F0IHVzZXJab29t
IHsgVmFsdWVBdXRvIH07CiAgICAgZmxvYXQgb3JpZW50YXRpb24geyBWYWx1ZUF1dG8gfTsKICAg
ICBmbG9hdCBzaHJpbmtUb0ZpdCB7IFZhbHVlQXV0byB9OworICAgIGJvb2wgY2xpcFRvU2FmZUFy
ZWEgeyB0cnVlIH07CiAgICAgYm9vbCB3aWR0aFdhc0V4cGxpY2l0IHsgZmFsc2UgfTsKIAogICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYgb3RoZXIpIGNvbnN0CkBA
IC0xMTIsNiArMTE0LDcgQEAgc3RydWN0IFZpZXdwb3J0QXJndW1lbnRzIHsKICAgICAgICAgICAg
ICYmIHVzZXJab29tID09IG90aGVyLnVzZXJab29tCiAgICAgICAgICAgICAmJiBvcmllbnRhdGlv
biA9PSBvdGhlci5vcmllbnRhdGlvbgogICAgICAgICAgICAgJiYgc2hyaW5rVG9GaXQgPT0gb3Ro
ZXIuc2hyaW5rVG9GaXQKKyAgICAgICAgICAgICYmIGNsaXBUb1NhZmVBcmVhID09IG90aGVyLmNs
aXBUb1NhZmVBcmVhCiAgICAgICAgICAgICAmJiB3aWR0aFdhc0V4cGxpY2l0ID09IG90aGVyLndp
ZHRoV2FzRXhwbGljaXQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRl
eCA4NDgwZDkxM2U1NTA1MDkxMTZiZDFjNGE2YjhjYmJjZTNkNGE3ZmRmLi5iNmZkYzlhNTkyN2E2
MjcwY2ExNDZiYTI5NjA0ZjdjZmM1YzllZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgKQEAgLTQ2OCw2ICs0NjgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydFBy
b2Nlc3NDUFVUaW1lKGludDY0X3QsIEFjdGl2aXR5U3RhdGVGb3JDUFVTYW1wbGluZykgeyB9CiAg
ICAgdmlydHVhbCBSZWZQdHI8SWNvbj4gY3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiAvKiBmaWxlbmFtZXMgKi8pID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFu
Z2VDbGlwVG9TYWZlQXJlYShib29sKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkNo
cm9tZUNsaWVudCgpIHsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50Lmgub3JpZyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50Lmgub3Jp
ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44NDgwZDkxM2U1NTA1MDkxMTZiZDFjNGE2YjhjYmJjZTNkNGE3ZmRmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaC5vcmln
CkBAIC0wLDAgKzEsNDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTcgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiQXV0b3BsYXlFdmVu
dC5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlRGV0YWlscy5oIgor
I2luY2x1ZGUgIkRpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgorI2luY2x1ZGUgIkZvY3VzRGlyZWN0
aW9uLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50RW51bXMuaCIKKyNpbmNsdWRlICJIb3N0
V2luZG93LmgiCisjaW5jbHVkZSAiSWNvbi5oIgorI2luY2x1ZGUgIkxheWVyRmx1c2hUaHJvdHRs
ZVN0YXRlLmgiCisjaW5jbHVkZSAiTWVkaWFQcm9kdWNlci5oIgorI2luY2x1ZGUgIlBvcHVwTWVu
dS5oIgorI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgorI2luY2x1ZGUgIlJlbmRlckVtYmVk
ZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJTY3JvbGxp
bmdDb29yZGluYXRvci5oIgorI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgorI2luY2x1ZGUg
IldlYkNvcmVLZXlib2FyZFVJTW9kZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvQ29uc29sZVR5cGVz
Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQpCisjaW5jbHVkZSAiTWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQuaCIKKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNkZWZpbmUg
TlNSZXNwb25kZXIgV0FLUmVzcG9uZGVyCisjaWZuZGVmIF9fT0JKQ19fCitjbGFzcyBXQUtSZXNw
b25kZXI7CisjZWxzZQorQGNsYXNzIFdBS1Jlc3BvbmRlcjsKKyNlbmRpZgorI2VuZGlmCisKK09C
SkNfQ0xBU1MgTlNSZXNwb25kZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQWNj
ZXNzaWJpbGl0eU9iamVjdDsKK2NsYXNzIENvbG9yQ2hvb3NlcjsKK2NsYXNzIENvbG9yQ2hvb3Nl
ckNsaWVudDsKK2NsYXNzIERhdGVUaW1lQ2hvb3NlcjsKK2NsYXNzIERhdGVUaW1lQ2hvb3NlckNs
aWVudDsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBGaWxlQ2hvb3NlcjsKK2NsYXNzIEZpbGVJY29u
TG9hZGVyOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRnJhbWU7CitjbGFzcyBHZW9sb2NhdGlv
bjsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CitjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKK2Ns
YXNzIEhUTUxJbnB1dEVsZW1lbnQ7CitjbGFzcyBIVE1MTWVkaWFFbGVtZW50OworY2xhc3MgSFRN
TFZpZGVvRWxlbWVudDsKK2NsYXNzIEhpdFRlc3RSZXN1bHQ7CitjbGFzcyBJbnRSZWN0OworY2xh
c3MgTWVkaWFTZXNzaW9uTWV0YWRhdGE7CitjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOworY2xhc3Mg
Tm9kZTsKK2NsYXNzIFBhZ2U7CitjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CitjbGFzcyBTZWN1cml0
eU9yaWdpbjsKK2NsYXNzIFZpZXdwb3J0Q29uc3RyYWludHM7CitjbGFzcyBXaWRnZXQ7CisKKyNp
ZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCitjbGFzcyBNZWRpYVBsYXllclJlcXVl
c3RJbnN0YWxsTWlzc2luZ1BsdWdpbnNDYWxsYmFjazsKKyNlbmRpZgorCitzdHJ1Y3QgRGF0ZVRp
bWVDaG9vc2VyUGFyYW1ldGVyczsKK3N0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0Oworc3RydWN0IEdy
YXBoaWNzRGV2aWNlQWRhcHRlcjsKK3N0cnVjdCBWaWV3cG9ydEFyZ3VtZW50czsKK3N0cnVjdCBX
aW5kb3dGZWF0dXJlczsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgQ2hyb21lQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHdpbmRvd1JlY3QoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBw
YWdlUmVjdCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBmb2N1cygpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdW5mb2N1cygpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBjYW5UYWtlRm9jdXMo
Rm9jdXNEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKEZvY3VzRGly
ZWN0aW9uKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXNlZEVsZW1lbnRDaGFuZ2VkKEVs
ZW1lbnQqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZvY3VzZWRGcmFtZUNoYW5nZWQoRnJhbWUq
KSA9IDA7CisKKyAgICAvLyBUaGUgRnJhbWUgcG9pbnRlciBwcm92aWRlcyB0aGUgQ2hyb21lQ2xp
ZW50IHdpdGggY29udGV4dCBhYm91dCB3aGljaAorICAgIC8vIEZyYW1lIHdhbnRzIHRvIGNyZWF0
ZSB0aGUgbmV3IFBhZ2UuIEFsc28sIHRoZSBuZXdseSBjcmVhdGVkIHdpbmRvdworICAgIC8vIHNo
b3VsZCBub3QgYmUgc2hvd24gdG8gdGhlIHVzZXIgdW50aWwgdGhlIENocm9tZUNsaWVudCBvZiB0
aGUgbmV3bHkKKyAgICAvLyBjcmVhdGVkIFBhZ2UgaGFzIGl0cyBzaG93IG1ldGhvZCBjYWxsZWQu
CisgICAgLy8gVGhlIEZyYW1lTG9hZFJlcXVlc3QgcGFyYW1ldGVyIGlzIG9ubHkgZm9yIENocm9t
ZUNsaWVudCB0byBjaGVjayBpZiB0aGUKKyAgICAvLyByZXF1ZXN0IGNvdWxkIGJlIGZ1bGZpbGxl
ZC4gVGhlIENocm9tZUNsaWVudCBzaG91bGQgbm90IGxvYWQgdGhlIHJlcXVlc3QuCisgICAgdmly
dHVhbCBQYWdlKiBjcmVhdGVXaW5kb3coRnJhbWUmLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0Jiwg
Y29uc3QgV2luZG93RmVhdHVyZXMmLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzaG93KCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGNhblJ1bk1vZGFs
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBydW5Nb2RhbCgpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBzZXRUb29sYmFyc1Zpc2libGUoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB0b29s
YmFyc1Zpc2libGUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzYmFyVmlzaWJs
ZShib29sKSA9IDA7CisgICAgdmlydHVhbCBib29sIHN0YXR1c2JhclZpc2libGUoKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsYmFyc1Zpc2libGUoYm9vbCkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRNZW51YmFyVmlzaWJsZShib29sKSA9IDA7CisgICAgdmlydHVhbCBib29sIG1lbnViYXJWaXNp
YmxlKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldFJlc2l6YWJsZShib29sKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgdW5z
aWduZWQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKSA9IDA7CisKKyAgICB2
aXJ0dWFsIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBGcmFtZSYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvd1Nvb24oKSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lJiwgY29uc3Qg
U3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShGcmFt
ZSYsIGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdFBy
b21wdChGcmFtZSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0
VmFsdWUsIFN0cmluZyYgcmVzdWx0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c2Jh
clRleHQoY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgS2V5Ym9hcmRVSU1vZGUga2V5
Ym9hcmRVSU1vZGUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbW1lZGlhdGVJ
bnZhbGlkYXRpb24oKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlUm9vdFZpZXcoY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzRm9yU2xvd1Njcm9sbChjb25zdCBJbnRSZWN0JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBJbnRSZWN0JikgPSAwOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
ICAgIHZpcnR1YWwgdm9pZCBkZWxlZ2F0ZWRTY3JvbGxSZXF1ZXN0ZWQoY29uc3QgSW50UG9pbnQm
KSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgSW50UG9pbnQgc2NyZWVuVG9Sb290Vmlldyhj
b25zdCBJbnRQb2ludCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgcm9vdFZpZXdU
b1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOworCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIHZpcnR1YWwgSW50UG9pbnQgYWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3Qg
SW50UG9pbnQmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRSZWN0IHJvb3RWaWV3VG9BY2Nl
c3NpYmlsaXR5U2NyZWVuKGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisjZW5kaWYgICAgCisK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3Qg
PSAwOworCisjaWYgRU5BQkxFKENVUlNPUl9TVVBQT1JUKQorICAgIHZpcnR1YWwgdm9pZCBzZXRD
dXJzb3IoY29uc3QgQ3Vyc29yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRk
ZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgPSAwOworI2VuZGlmCisKKyNpZiAhVVNFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlv
bigpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCBGbG9hdFNpemUgc2NyZWVuU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Q2hyb21lQ2xpZW50Jj4oKnRoaXMpLndpbmRvd1JlY3Qo
KS5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBhdmFpbGFibGVTY3JlZW5TaXplKCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxDaHJvbWVDbGllbnQmPigqdGhpcykud2luZG93UmVj
dCgpLnNpemUoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVmlld3BvcnRQcm9wZXJ0
aWVzRGlkQ2hhbmdlKGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJikgY29uc3QgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChGcmFtZSYsIGNvbnN0IEludFNpemUmKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRS
ZWN0JikgY29uc3QgeyB9OyAvLyBDdXJyZW50bHkgb25seSBNYWMgaGFzIGEgbm9uIGVtcHR5IGlt
cGxlbWVudGF0aW9uLgorCisgICAgdmlydHVhbCBib29sIHNob3VsZFVuYXZhaWxhYmxlUGx1Z2lu
TWVzc2FnZUJlQnV0dG9uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJpbGl0
eVJlYXNvbikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5hdmFp
bGFibGVQbHVnaW5CdXR0b25DbGlja2VkKEVsZW1lbnQmLCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6
UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBt
b3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9k
aWZpZXJGbGFncykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3Ry
aW5nJiwgVGV4dERpcmVjdGlvbikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHByaW50KEZyYW1l
JikgPSAwOworCisgICAgdmlydHVhbCBDb2xvciB1bmRlcmxheUNvbG9yKCkgY29uc3QgeyByZXR1
cm4gQ29sb3IoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBhZ2VFeHRlbmRlZEJhY2tncm91bmRD
b2xvckRpZENoYW5nZShDb2xvcikgY29uc3QgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKEZyYW1lJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIERhdGFi
YXNlRGV0YWlscykgPSAwOworCisgICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBhcHBs
aWNhdGlvbiBjYWNoZSBmYWlscyB0byBzYXZlIGEgY2FjaGUgb2JqZWN0CisgICAgLy8gYmVjYXVz
ZSBzdG9yaW5nIGl0IHdvdWxkIGdyb3cgdGhlIGRhdGFiYXNlIGZpbGUgcGFzdCBpdHMgZGVmaW5l
ZCBtYXhpbXVtCisgICAgLy8gc2l6ZSBvciBwYXN0IHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBv
biB0aGUgZGV2aWNlLiAKKyAgICAvLyBUaGUgY2hyb21lIGNsaWVudCB3b3VsZCBuZWVkIHRvIHRh
a2Ugc29tZSBhY3Rpb24gc3VjaCBhcyBldmljdGluZyBzb21lCisgICAgLy8gb2xkIGNhY2hlcy4K
KyAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVl
ZGVkKSA9IDA7CisKKyAgICAvLyBDYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9u
IGNhY2hlIG9yaWdpbiBxdW90YSBpcyByZWFjaGVkLiBUaGlzCisgICAgLy8gbWVhbnMgdGhhdCB0
aGUgcmVzb3VyY2VzIGF0dGVtcHRpbmcgdG8gYmUgY2FjaGVkIHZpYSB0aGUgbWFuaWZlc3QgYXJl
CisgICAgLy8gbW9yZSB0aGFuIGFsbG93ZWQgb24gdGhpcyBvcmlnaW4uIFRoaXMgY2FsbGJhY2sg
YWxsb3dzIHRoZSBjaHJvbWUgY2xpZW50CisgICAgLy8gdG8gdGFrZSBhY3Rpb24sIHN1Y2ggYXMg
cHJvbXB0aW5nIHRoZSB1c2VyIHRvIGFzayB0byBpbmNyZWFzZSB0aGUgcXVvdGEKKyAgICAvLyBm
b3IgdGhpcyBvcmlnaW4uIFRoZSB0b3RhbFNwYWNlTmVlZGVkIHBhcmFtZXRlciBpcyB0aGUgdG90
YWwgYW1vdW50IG9mCisgICAgLy8gc3RvcmFnZSwgaW4gYnl0ZXMsIG5lZWRlZCB0byBzdG9yZSB0
aGUgbmV3IGNhY2hlIGFsb25nIHdpdGggYWxsIG9mIHRoZQorICAgIC8vIG90aGVyIGV4aXN0aW5n
IGNhY2hlcyBmb3IgdGhlIG9yaWdpbiB0aGF0IHdvdWxkIG5vdCBiZSByZXBsYWNlZCBieQorICAg
IC8vIHRoZSBuZXcgY2FjaGUuCisgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRBcHBsaWNhdGlvbkNh
Y2hlT3JpZ2luUXVvdGEoU2VjdXJpdHlPcmlnaW4mLCBpbnQ2NF90IHRvdGFsU3BhY2VOZWVkZWQp
ID0gMDsKKworI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKyAgICB2aXJ0dWFsIHZvaWQg
YW5ub3RhdGVkUmVnaW9uc0NoYW5nZWQoKTsKKyNlbmRpZgorCisgICAgdmlydHVhbCBib29sIHNo
b3VsZFJlcGxhY2VXaXRoR2VuZXJhdGVkRmlsZUZvclVwbG9hZChjb25zdCBTdHJpbmcmIHBhdGgs
IFN0cmluZyYgZ2VuZXJhdGVkRmlsZW5hbWUpOworICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRl
UmVwbGFjZW1lbnRGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyNpZiBFTkFCTEUoSU9TX1RP
VUNIX0VWRU5UUykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUHJldmVudERlZmF1bHRGb3JFdmVudCgp
ID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCBTZWNvbmRzIGV2ZW50VGhyb3R0bGluZ0RlbGF5
KCkgeyByZXR1cm4gMF9zOyB9OworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlTW9iaWxlRG9jVHlwZShib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzU2Nyb2xsTm90aWZpY2F0aW9ucyhGcmFtZSYsIGJvb2wpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgb2JzZXJ2ZWRDb250ZW50Q2hhbmdlKEZyYW1lJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckNvbnRlbnRDaGFuZ2VPYnNlcnZlcnMoRnJhbWUmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZShGcmFtZSYpID0gMDsK
KworICAgIGVudW0gTGF5b3V0VHlwZSB7IE5vcm1hbExheW91dCwgU2Nyb2xsIH07CisgICAgdmly
dHVhbCB2b2lkIGRpZExheW91dChMYXlvdXRUeXBlID0gTm9ybWFsTGF5b3V0KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRpZEVuZE92ZXJmbG93U2Nyb2xsKCkgPSAwOworCisgICAgLy8gRklYTUU6IFJlbW92ZSB0
aGlzIGZ1bmN0aW9uYWxpdHkuIFRoaXMgZnVuY3Rpb25hbGl0eSB3YXMgYWRkZWQgdG8gd29ya2Fy
b3VuZCBhbiBpc3N1ZSAoPHJkYXI6Ly9wcm9ibGVtLzU5NzM4NzU+KQorICAgIC8vIHdoZXJlIHRo
ZSB1bmNvbmZpcm1lZCB0ZXh0IGluIGEgdGV4dCBhcmVhIHdvdWxkIGJlIHJlbW92ZWQgd2hlbiBh
IHBlcnNvbiBjbGlja3MgaW4gdGhlIHRleHQgYXJlYSBiZWZvcmUgYQorICAgIC8vIHN1Z2dlc3Rp
b24gaXMgc2hvd24uIFdlIHNob3VsZCBmaXggdGhpcyBpc3N1ZSBpbiA8cmRhcjovL3Byb2JsZW0v
NTk3NTU1OT4uCisgICAgdmlydHVhbCB2b2lkIHN1cHByZXNzRm9ybU5vdGlmaWNhdGlvbnMoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVGb3JtTm90aWZpY2F0aW9ucygpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRGbHVzaENvbXBvc2l0aW5nTGF5ZXJzKCkgeyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgZmV0Y2hDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdChJbnRSZWN0Jikg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydENvbnN0
cmFpbmVkTGF5ZXJzKEhhc2hNYXA8UGxhdGZvcm1MYXllciosIHN0ZDo6dW5pcXVlX3B0cjxWaWV3
cG9ydENvbnN0cmFpbnRzPj4mLCBIYXNoTWFwPFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUxheWVy
Kj4mKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKE5v
ZGUqLCBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciogY29udGVu
dHNMYXllciwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsU2l6ZSwgYm9vbCBhbGxvd0hvcml6b250YWxT
Y3JvbGxiYXIsIGJvb2wgYWxsb3dWZXJ0aWNhbFNjcm9sbGJhcikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihOb2RlKiwgUGxhdGZvcm1MYXllciogc2Nyb2xsaW5n
TGF5ZXIsIFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCB3ZWJBcHBPcmllbnRhdGlvbnNVcGRhdGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
aG93UGxheWJhY2tUYXJnZXRQaWNrZXIoYm9vbCBoYXNWaWRlbykgPSAwOworI2VuZGlmCisKKyNp
ZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRTKQorICAgIHZpcnR1YWwgaW50IGRldmljZU9yaWVu
dGF0aW9uKCkgY29uc3QgPSAwOworI2VuZGlmCisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xP
UikKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDb2xvckNob29zZXI+IGNyZWF0ZUNvbG9y
Q2hvb3NlcihDb2xvckNob29zZXJDbGllbnQmLCBjb25zdCBDb2xvciYpID0gMDsKKyNlbmRpZgor
CisgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSYsIEZpbGVDaG9vc2VyJikgPSAw
OworICAgIC8vIEFzeW5jaHJvbm91cyByZXF1ZXN0IHRvIGxvYWQgYW4gaWNvbiBmb3Igc3BlY2lm
aWVkIGZpbGVuYW1lcy4KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZEljb25Gb3JGaWxlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIEZpbGVJY29uTG9hZGVyJikgPSAwOworICAgICAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgZWxlbWVudERpZEZvY3VzKEVsZW1lbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZWxlbWVudERpZEJsdXIoRWxlbWVudCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBlbGVtZW50RGlk
UmVmb2N1cyhFbGVtZW50JikgeyB9CisgICAgCisgICAgdmlydHVhbCBib29sIHNob3VsZFBhaW50
RW50aXJlQ29udGVudHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBoYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICAvLyBBbGxvd3MgcG9ydHMgdG8gY3VzdG9taXplIHRoZSB0eXBlIG9mIGdyYXBoaWNzIGxheWVy
cyBjcmVhdGVkIGJ5IHRoaXMgcGFnZS4KKyAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXJGYWN0b3J5
KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKworI2lm
IFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCisgICAgdmlydHVh
bCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyNlbmRpZgor
CisgICAgLy8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhl
IHJvb3QgbGF5ZXIuCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZy
YW1lJiwgR3JhcGhpY3NMYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092
ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciopID0gMDsKKyAgICAvLyBT
ZXRzIGEgZmxhZyB0byBzcGVjaWZ5IHRoYXQgdGhlIG5leHQgdGltZSBjb250ZW50IGlzIGRyYXdu
IHRvIHRoZSB3aW5kb3csCisgICAgLy8gdGhlIGNoYW5nZXMgYXBwZWFyIG9uIHRoZSBzY3JlZW4g
aW4gc3luY2hyb255IHdpdGggdXBkYXRlcyB0byBHcmFwaGljc0xheWVycy4KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpID0gMDsKKyAgICAv
LyBTZXRzIGEgZmxhZyB0byBzcGVjaWZ5IHRoYXQgdGhlIHZpZXcgbmVlZHMgdG8gYmUgdXBkYXRl
ZCwgc28gd2UgbmVlZAorICAgIC8vIHRvIGRvIGFuIGVhZ2VyIGxheW91dCBiZWZvcmUgdGhlIGRy
YXdpbmcuCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkg
PSAwOworICAgIC8vIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGNsaWVudCBjYW4gcmVuZGVy
IHRoZSBjb21wb3NpdGVkIGxheWVyLAorICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmdz
LgorICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgZW51bSBDb21wb3NpdGluZ1RyaWdnZXIgeworICAgICAg
ICBUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyID0gMSA8PCAwLAorICAgICAgICBWaWRlb1RyaWdnZXIg
PSAxIDw8IDEsCisgICAgICAgIFBsdWdpblRyaWdnZXIgPSAxIDw8IDIsCisgICAgICAgIENhbnZh
c1RyaWdnZXIgPSAxIDw8IDMsCisgICAgICAgIEFuaW1hdGlvblRyaWdnZXIgPSAxIDw8IDQsCisg
ICAgICAgIEZpbHRlclRyaWdnZXIgPSAxIDw8IDUsCisgICAgICAgIFNjcm9sbGFibGVJbm5lckZy
YW1lVHJpZ2dlciA9IDEgPDwgNiwKKyAgICAgICAgQW5pbWF0ZWRPcGFjaXR5VHJpZ2dlciA9IDEg
PDwgNywKKyAgICAgICAgQWxsVHJpZ2dlcnMgPSAweEZGRkZGRkZGCisgICAgfTsKKyAgICB0eXBl
ZGVmIHVuc2lnbmVkIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzOworCisgICAgLy8gUmV0dXJucyBh
IGJpdGZpZWxkIGluZGljYXRpbmcgY29uZGl0aW9ucyB0aGF0IGNhbiB0cmlnZ2VyIHRoZSBjb21w
b3NpdG9yLgorICAgIHZpcnR1YWwgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBv
c2l0aW5nVHJpZ2dlcnMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGluZ1Ry
aWdnZXJGbGFncz4oQWxsVHJpZ2dlcnMpOyB9CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IGxheWVyIHRyZWUgdXBkYXRlcyBhcmUgZGlzYWJsZWQuCisgICAgdmlydHVhbCBib29sIGxheWVy
VHJlZVN0YXRlSXNGcm96ZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVh
bCBib29sIGFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKExheWVyRmx1c2hUaHJvdHRsZVN0YXRl
OjpGbGFncykgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgUmVmUHRyPFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yPiBjcmVhdGVTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlJikgY29uc3QgeyBy
ZXR1cm4gbnVsbHB0cjsgfQorCisjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQVZGT1VOREFUSU9O
KQorICAgIHZpcnR1YWwgR3JhcGhpY3NEZXZpY2VBZGFwdGVyKiBncmFwaGljc0RldmljZUFkYXB0
ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVs
bHNjcmVlbk1vZGUpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
dmlydHVhbCB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KEhUTUxWaWRl
b0VsZW1lbnQmLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKEhUTUxNZWRp
YUVsZW1lbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQbGF5YmFja0NvbnRyb2xzTWFu
YWdlcigpIHsgfQorI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVl
bkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50JikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01vZGVXaXRob3V0QW5pbWF0aW9uKEhUTUxWaWRlb0VsZW1l
bnQmLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUpIHsgfQorICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgeyByZXR1
cm4gZmFsc2U7IH0gCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIGJvb2wpIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbFNjcmVlbkZvckVsZW1l
bnQoRWxlbWVudCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQoRWxlbWVudCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290RnVsbFNjcmVlbkxheWVy
KEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyNlbmRpZgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorICAgIHZpcnR1YWwgSW50UmVjdCB2aXNpYmxlUmVjdEZvclRpbGVkQmFja2luZ1N0b3Jl
KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIHZpcnR1YWwgTlNSZXNwb25kZXIgKmZpcnN0UmVzcG9uZGVyKCkgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBtYWtlRmlyc3RSZXNwb25kZXIoTlNSZXNwb25k
ZXIgKikgeyB9CisgICAgLy8gRm9jdXNlcyBvbiB0aGUgY29udGFpbmluZyB2aWV3IGFzc29jaWF0
ZWQgd2l0aCB0aGlzIHBhZ2UuCisgICAgdmlydHVhbCB2b2lkIG1ha2VGaXJzdFJlc3BvbmRlcigp
IHsgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IENvbWUgdXAg
d2l0aCBhIG1vcmUgZGVzY3JpcHRpdmUgbmFtZSBmb3IgdGhpcyBmdW5jdGlvbiBhbmQgbWFrZSBp
dCBwbGF0Zm9ybSBpbmRlcGVuZGVudCAoaWYgcG9zc2libGUpLgorICAgIHZpcnR1YWwgYm9vbCBp
c1N0b3BwaW5nKCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlU3VkZGVu
VGVybWluYXRpb24oKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0
aW9uKCkgeyB9CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgdmlydHVhbCB2b2lkIHNldExhc3RT
ZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIEFYU3RhcnRG
cmFtZUxvYWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIEFYRmluaXNoRnJhbWVMb2FkKCkgPSAw
OworI2VuZGlmCisKKyAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25J
c05hdHVyYWwoKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xs
b3dzTWVudVdyaXRpbmdEaXJlY3Rpb24oKSA9IDA7CisgICAgLy8gQ2hlY2tzIGlmIHRoZXJlIGlz
IGFuIG9wZW5lZCBwb3B1cCwgY2FsbGVkIGJ5IFJlbmRlck1lbnVMaXN0OjpzaG93UG9wdXAoKS4K
KyAgICB2aXJ0dWFsIGJvb2wgaGFzT3BlbmVkUG9wdXAoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBSZWZQdHI8UG9wdXBNZW51PiBjcmVhdGVQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50JikgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4gY3JlYXRlU2VhcmNo
UG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCYpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCBwb3N0QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgQVhP
YmplY3RDYWNoZTo6QVhOb3RpZmljYXRpb24pIHsgfQorCisgICAgdmlydHVhbCB2b2lkIG5vdGlm
eVNjcm9sbGVyVGh1bWJJc1Zpc2libGVJblJlY3QoY29uc3QgSW50UmVjdCYpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCByZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKFNjcm9sbGJhclN0
eWxlKSB7IH0KKworICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxTY3JvbGxiYXJPdmVybGF5U3R5
bGU+IHByZWZlcnJlZFNjcm9sbGJhck92ZXJsYXlTdHlsZSgpIHsgcmV0dXJuIFNjcm9sbGJhck92
ZXJsYXlTdHlsZURlZmF1bHQ7IH0KKworICAgIHZpcnR1YWwgdm9pZCB3aGVlbEV2ZW50SGFuZGxl
cnNDaGFuZ2VkKGJvb2wgaGFzSGFuZGxlcnMpID0gMDsKKyAgICAgICAgCisgICAgdmlydHVhbCBi
b29sIGlzU1ZHSW1hZ2VDaHJvbWVDbGllbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisj
aWYgRU5BQkxFKFBPSU5URVJfTE9DSykKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWVzdFBvaW50ZXJM
b2NrKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBvaW50ZXJV
bmxvY2soKSB7IH0KKyNlbmRpZgorCisgICAgdmlydHVhbCBGbG9hdFNpemUgbWluaW11bVdpbmRv
d1NpemUoKSBjb25zdCB7IHJldHVybiBGbG9hdFNpemUoMTAwLCAxMDApOyB9OworCisgICAgdmly
dHVhbCBib29sIGlzRW1wdHlDaHJvbWVDbGllbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgdmlydHVhbCBTdHJpbmcgcGx1Z0luU3RhcnRMYWJlbFRpdGxlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIGNvbnN0IHsgVU5VU0VEX1BBUkFNKG1pbWVUeXBlKTsgcmV0dXJuIFN0cmluZygp
OyB9CisgICAgdmlydHVhbCBTdHJpbmcgcGx1Z0luU3RhcnRMYWJlbFN1YnRpdGxlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpIGNvbnN0IHsgVU5VU0VEX1BBUkFNKG1pbWVUeXBlKTsgcmV0dXJuIFN0
cmluZygpOyB9CisgICAgdmlydHVhbCBTdHJpbmcgcGx1Z0luRXh0cmFTdHlsZVNoZWV0KCkgY29u
c3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBwbHVnSW5FeHRyYVNj
cmlwdCgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
QXNzb2NpYXRlRm9ybUNvbnRyb2xzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RWxlbWVudD4+JikgeyB9
OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzKCkgeyByZXR1cm4g
ZmFsc2U7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkSGVhZGVyTGF5ZXIoR3JhcGhpY3NM
YXllciYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRGb290ZXJMYXllcihHcmFwaGljc0xh
eWVyJikgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nRm9yRnJh
bWVWaWV3KGNvbnN0IEZyYW1lVmlldyYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgaXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2UoTWVkaWFQcm9kdWNlcjo6TWVkaWFT
dGF0ZUZsYWdzLCB1aW50NjRfdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUF1dG9wbGF5
RXZlbnQoQXV0b3BsYXlFdmVudCkgeyB9CisKKyNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKKyAg
ICB2aXJ0dWFsIHZvaWQgaGFzTWVkaWFTZXNzaW9uV2l0aEFjdGl2ZU1lZGlhRWxlbWVudHNEaWRD
aGFuZ2UoYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIG1lZGlhU2Vzc2lvbk1ldGFkYXRhRGlk
Q2hhbmdlKGNvbnN0IE1lZGlhU2Vzc2lvbk1ldGFkYXRhJikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGZvY3VzZWRDb250ZW50TWVkaWFFbGVtZW50RGlkQ2hhbmdlKHVpbnQ2NF90KSB7IH0KKyNlbmRp
ZgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisgICAgdmlydHVhbCBib29sIHdyYXBDcnlw
dG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYsIFZlY3Rvcjx1aW50OF90PiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisjZW5kaWYKKworI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExB
VEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhj
b25zdCBTdHJpbmcmLCBjb25zdCBJbnRQb2ludCYpIHsgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUo
U0VSVklDRV9DT05UUk9MUykKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlU2VsZWN0aW9uU2Vydmlj
ZUNsaWNrKEZyYW1lU2VsZWN0aW9uJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBJbnRQ
b2ludCYpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNSZWxldmFudFNlbGVjdGlvblNlcnZpY2Vz
KGJvb2wgLyppc1RleHRPbmx5Ki8pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKwor
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXV0b0ZpbGxCdXR0
b25DbGljayhIVE1MSW5wdXRFbGVtZW50JikgeyB9CisKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExB
WUJBQ0tfVEFSR0VUKQorICAgIHZpcnR1YWwgdm9pZCBhZGRQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudCh1aW50NjRfdCAvKmNvbnRleHRJZCovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
UGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWludDY0X3QgLypjb250ZXh0SWQqLykgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcih1aW50NjRfdCAvKmNvbnRl
eHRJZCovLCBjb25zdCBJbnRQb2ludCYsIGJvb2wgLyppc1ZpZGVvKi8pIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBwbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlKHVpbnQ2NF90
IC8qY29udGV4dElkKi8sIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncykgeyB9CisgICAg
dmlydHVhbCB2b2lkIHNldE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyRW5hYmxlZChib29s
KSAgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2Vy
U3RhdGUoY29uc3QgU3RyaW5nJiwgTWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQ6OlN0YXRlKSB7
IH0KKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNo
YW5nZWQoY29uc3QgSW50U2l6ZSYpIHsgfQorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NU
UkVBTUVSKQorICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0SW5zdGFsbE1pc3NpbmdNZWRpYVBsdWdp
bnMoY29uc3QgU3RyaW5nJiAvKmRldGFpbHMqLywgY29uc3QgU3RyaW5nJiAvKmRlc2NyaXB0aW9u
Ki8sIE1lZGlhUGxheWVyUmVxdWVzdEluc3RhbGxNaXNzaW5nUGx1Z2luc0NhbGxiYWNrJikgeyB9
CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBkaWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJrZXJS
ZWN0cygpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydFByb2Nlc3NDUFVUaW1lKGludDY0
X3QsIEFjdGl2aXR5U3RhdGVGb3JDUFVTYW1wbGluZykgeyB9CisgICAgdmlydHVhbCBSZWZQdHI8
SWNvbj4gY3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiAvKiBmaWxlbmFt
ZXMgKi8pID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkNocm9tZUNsaWVudCgpIHsg
fQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CmluZGV4IDE0ODA4NGIyYjhhNDFhMjRiYTI3YjE5ZjY0OGJkZTMyN2VjZjM5M2UuLjM2OGM2Y2Qw
Yzg0M2NiMjkwZThiMGFmMGE0ZWIyNTM3NzgxMWZkNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKQEAgLTI5MjksNiArMjkyOSwxMCBAQCB2b2lkIEZyYW1lVmlldzo6ZW5hYmxlU3BlY3Vs
YXRpdmVUaWxpbmdJZk5lZWRlZCgpCiAgICAgICAgIG1fc3BlY3VsYXRpdmVUaWxpbmdFbmFibGVk
ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoIW1fY2xpcFRvU2FmZUFy
ZWEpIHsKKyAgICAgICAgbV9zcGVjdWxhdGl2ZVRpbGluZ0VuYWJsZWQgPSB0cnVlOworICAgICAg
ICByZXR1cm47CisgICAgfQogICAgIGlmICghc2hvdWxkRW5hYmxlU3BlY3VsYXRpdmVUaWxpbmdE
dXJpbmdMb2FkaW5nKCp0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjM4LDkgKzMyNDIs
NiBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGNvbnN0IENv
bG9yJiBiYWNrZ3JvdW5kQ29sb3IsIGJvb2wgdAogCiBib29sIEZyYW1lVmlldzo6aGFzRXh0ZW5k
ZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3QKIHsKLSAgICBpZiAoIWZyYW1lKCku
c2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KICAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IHRoaXMtPnRp
bGVkQmFja2luZygpOwogICAgIGlmICghdGlsZWRCYWNraW5nKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0zMjU5LDExICszMjYwLDggQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUV4dGVuZEJh
Y2tncm91bmRJZk5lY2Vzc2FyeSgpCiAKIEZyYW1lVmlldzo6RXh0ZW5kZWRCYWNrZ3JvdW5kTW9k
ZSBGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFja2dyb3VuZE1vZGUoKSBjb25zdAogewot
ICAgIC8vIEp1c3QgYmVjYXVzZSBTZXR0aW5nczo6YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9u
ZFBhZ2UoKSBpcyB0cnVlIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4KLSAgICAvLyB0aGF0IHRo
ZSBiYWNrZ3JvdW5kIHJlY3QgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgZm9yIHBhaW50aW5nLiBTaW1w
bGUgYmFja2dyb3VuZHMgY2FuIGJlIGV4dGVuZGVkCi0gICAgLy8ganVzdCB3aXRoIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6c2V0Um9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCkuIE1vcmUgY29t
cGxpY2F0ZWQgYmFja2dyb3VuZHMsCi0gICAgLy8gc3VjaCBhcyBpbWFnZXMsIHJlcXVpcmUgZXh0
ZW5kaW5nIHRoZSBiYWNrZ3JvdW5kIHJlY3QgdG8gY29udGludWUgcGFpbnRpbmcgaW50byB0aGUg
ZXh0ZW5kZWQKLSAgICAvLyByZWdpb24uIFRoaXMgZnVuY3Rpb24gZmluZHMgb3V0IGlmIGl0IGlz
IG5lY2Vzc2FyeSB0byBleHRlbmQgdGhlIGJhY2tncm91bmQgcmVjdCBmb3IgcGFpbnRpbmcuCisg
ICAgaWYgKCFtX2NsaXBUb1NhZmVBcmVhKQorICAgICAgICByZXR1cm4gRXh0ZW5kZWRCYWNrZ3Jv
dW5kTW9kZUFsbDsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyA8cmRhcjovL3Byb2JsZW0v
MTYyMDEzNzM+CkBAIC0zMjcyLDYgKzMyNzAsMTIgQEAgRnJhbWVWaWV3OjpFeHRlbmRlZEJhY2tn
cm91bmRNb2RlIEZyYW1lVmlldzo6Y2FsY3VsYXRlRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSgpIGMK
ICAgICBpZiAoIWZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25k
UGFnZSgpKQogICAgICAgICByZXR1cm4gRXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZU5vbmU7CiAKKyAg
ICAvLyBKdXN0IGJlY2F1c2UgU2V0dGluZ3M6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQ
YWdlKCkgaXMgdHJ1ZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuCisgICAgLy8gdGhhdCB0aGUg
YmFja2dyb3VuZCByZWN0IG5lZWRzIHRvIGJlIGV4dGVuZGVkIGZvciBwYWludGluZy4gU2ltcGxl
IGJhY2tncm91bmRzIGNhbiBiZSBleHRlbmRlZAorICAgIC8vIGp1c3Qgd2l0aCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnNldFJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpLiBNb3JlIGNvbXBs
aWNhdGVkIGJhY2tncm91bmRzLAorICAgIC8vIHN1Y2ggYXMgaW1hZ2VzLCByZXF1aXJlIGV4dGVu
ZGluZyB0aGUgYmFja2dyb3VuZCByZWN0IHRvIGNvbnRpbnVlIHBhaW50aW5nIGludG8gdGhlIGV4
dGVuZGVkCisgICAgLy8gcmVnaW9uLiBUaGlzIGZ1bmN0aW9uIGZpbmRzIG91dCBpZiBpdCBpcyBu
ZWNlc3NhcnkgdG8gZXh0ZW5kIHRoZSBiYWNrZ3JvdW5kIHJlY3QgZm9yIHBhaW50aW5nLgorCiAg
ICAgaWYgKCFmcmFtZSgpLmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybiBFeHRlbmRlZEJh
Y2tncm91bmRNb2RlTm9uZTsKIApAQCAtMzMwMSw5ICszMzA1LDYgQEAgRnJhbWVWaWV3OjpFeHRl
bmRlZEJhY2tncm91bmRNb2RlIEZyYW1lVmlldzo6Y2FsY3VsYXRlRXh0ZW5kZWRCYWNrZ3JvdW5k
TW9kZSgpIGMKIAogdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZVRpbGVzRm9yRXh0ZW5kZWRCYWNrZ3Jv
dW5kTW9kZShFeHRlbmRlZEJhY2tncm91bmRNb2RlIG1vZGUpCiB7Ci0gICAgaWYgKCFmcmFtZSgp
LnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXco
KTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJldHVybjsKQEAgLTMzNDgsNiArMzM0
OSwzMCBAQCBJbnRSZWN0IEZyYW1lVmlldzo6ZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50
aW5nKCkgY29uc3QKICAgICByZXR1cm4gc25hcHBlZEludFJlY3QoZXh0ZW5kZWRSZWN0KTsKIH0K
IAordm9pZCBGcmFtZVZpZXc6OnNldENsaXBUb1NhZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEp
Cit7CisgICAgaWYgKCFmcmFtZSgpLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX2NsaXBUb1NhZmVBcmVhID09IGNsaXBUb1NhZmVBcmVhKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2NsaXBUb1NhZmVBcmVhID0gY2xpcFRvU2FmZUFyZWE7CisKKyAgICBpZiAo
UGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGll
bnQoKS5kaWRDaGFuZ2VDbGlwVG9TYWZlQXJlYShjbGlwVG9TYWZlQXJlYSk7CisKKyAgICB1cGRh
dGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKTsKKyAgICBhZGp1c3RUaWxlZEJhY2tpbmdD
b3ZlcmFnZSgpOworCisgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZp
ZXcoKTsKKyAgICBpZiAoIXJlbmRlclZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRl
ckxheWVyQ29tcG9zaXRvciYgY29tcG9zaXRvciA9IHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKTsK
KyAgICBjb21wb3NpdG9yLnVwZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygpOworfQorCiBi
b29sIEZyYW1lVmlldzo6c2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oKSBjb25zdAogewogICAg
IHJldHVybiBtX3Nob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgKaW5kZXggYjE0ZmVmMzNiNzQ2MjY2ODIzZDgzNDUwNGJiNmE3ZDc0NTYyZjM1OS4uMGEzMjc1
MzAwNDI0Y2RjYjY5ZWU2ZTljYTNlODIwZTY5OGFjZjk0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCkBAIC0yMTMsNiArMjEzLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXh0ZW5kZWRCYWNr
Z3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3Q7CiAgICAgSW50UmVjdCBleHRlbmRlZEJhY2tn
cm91bmRSZWN0Rm9yUGFpbnRpbmcoKSBjb25zdDsKIAorICAgIGJvb2wgY2xpcFRvU2FmZUFyZWEo
KSBjb25zdCB7IHJldHVybiBtX2NsaXBUb1NhZmVBcmVhOyB9CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRDbGlwVG9TYWZlQXJlYShib29sKTsKKwogICAgIGJvb2wgc2hvdWxkVXBkYXRlV2hp
bGVPZmZzY3JlZW4oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZFVw
ZGF0ZVdoaWxlT2Zmc2NyZWVuKGJvb2wpOwogICAgIGJvb2wgc2hvdWxkVXBkYXRlKCkgY29uc3Q7
CkBAIC04MTMsNiArODE2LDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9uZWVkc0RlZmVycmVk
U2Nyb2xsYmFyc1VwZGF0ZSB7IGZhbHNlIH07CiAKKyAgICBib29sIG1fY2xpcFRvU2FmZUFyZWEg
eyB0cnVlIH07CisKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbV9tYWludGFpblNjcm9sbFBv
c2l0aW9uQW5jaG9yOwogCiAgICAgLy8gUmVuZGVyZXIgdG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9s
bCBjb3JuZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmln
dXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5j
cHAKaW5kZXggODA1YzZlMGNjZTU3ZGU5ZGRmN2U5Y2VmMjI2ZDhlMTAwODg5MWZkNS4uMjA2ZjAy
Yjk3ZDBkMzBjZWQ0OWFkMDE0YTZhMjkzODI3Mzk4Yzc1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmNwcApAQCAtMzM2LDYgKzMzNiw5IEBAIHZvaWQg
Vmlld3BvcnRDb25maWd1cmF0aW9uOjp1cGRhdGVDb25maWd1cmF0aW9uKCkKIAogICAgIGlmIChi
b29sZWFuVmlld3BvcnRBcmd1bWVudElzU2V0KG1fdmlld3BvcnRBcmd1bWVudHMuc2hyaW5rVG9G
aXQpKQogICAgICAgICBtX2NvbmZpZ3VyYXRpb24uYWxsb3dzU2hyaW5rVG9GaXQgPSBtX3ZpZXdw
b3J0QXJndW1lbnRzLnNocmlua1RvRml0ICE9IDAuOworCisgICAgaWYgKGJvb2xlYW5WaWV3cG9y
dEFyZ3VtZW50SXNTZXQobV92aWV3cG9ydEFyZ3VtZW50cy5jbGlwVG9TYWZlQXJlYSkpCisgICAg
ICAgIG1fY29uZmlndXJhdGlvbi5jbGlwVG9TYWZlQXJlYSA9IG1fdmlld3BvcnRBcmd1bWVudHMu
Y2xpcFRvU2FmZUFyZWE7CiB9CiAKIGRvdWJsZSBWaWV3cG9ydENvbmZpZ3VyYXRpb246OnZpZXdw
b3J0QXJndW1lbnRzTGVuZ3RoKGRvdWJsZSBsZW5ndGgpIGNvbnN0CkBAIC00MzksNiArNDQyLDcg
QEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVmlld3BvcnRD
b25maWd1cmF0aW9uOjpQYXJhbWV0ZXJzJgogICAgIHRzLmR1bXBQcm9wZXJ0eSgibWF4aW11bVNj
YWxlIiwgcGFyYW1ldGVycy5tYXhpbXVtU2NhbGUpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxs
b3dzVXNlclNjYWxpbmciLCBwYXJhbWV0ZXJzLmFsbG93c1VzZXJTY2FsaW5nKTsKICAgICB0cy5k
dW1wUHJvcGVydHkoImFsbG93c1Nocmlua1RvRml0IiwgcGFyYW1ldGVycy5hbGxvd3NTaHJpbmtU
b0ZpdCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjbGlwVG9TYWZlQXJlYSIsIHBhcmFtZXRlcnMu
Y2xpcFRvU2FmZUFyZWEpOwogCiAgICAgcmV0dXJuIHRzOwogfQpAQCAtNDcyLDYgKzQ3Niw3IEBA
IENTdHJpbmcgVmlld3BvcnRDb25maWd1cmF0aW9uOjpkZXNjcmlwdGlvbigpIGNvbnN0CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJjb21wdXRlZCBsYXlvdXQgc2l6ZSIsIGxheW91dFNpemUoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJpZ25vcmluZyBob3Jpem9udGFsIHNjYWxpbmcgY29uc3RyYWlu
dHMiLCBzaG91bGRJZ25vcmVIb3Jpem9udGFsU2NhbGluZ0NvbnN0cmFpbnRzKCkgPyAidHJ1ZSIg
OiAiZmFsc2UiKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImlnbm9yaW5nIHZlcnRpY2FsIHNjYWxp
bmcgY29uc3RyYWludHMiLCBzaG91bGRJZ25vcmVWZXJ0aWNhbFNjYWxpbmdDb25zdHJhaW50cygp
ID8gInRydWUiIDogImZhbHNlIik7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjbGlwIHRvIHNhZmUg
YXJlYSIsIGNsaXBUb1NhZmVBcmVhKCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICAKICAgICB0
cy5lbmRHcm91cCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdwb3J0
Q29uZmlndXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRp
b24uaAppbmRleCBiNzJjMGJmYTlkNjcwNzkxYTI5MTI5YTM1NjU5YzA4YTZjNjQ3NzIxLi5iYWRk
NmU4ZDdiOWE3ZjhjMTZhMmM0ODY0YzI2MWEwMTNkNzg5MzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgLCBtYXhpbXVtU2NhbGUoMCkKICAgICAgICAgICAgICwgYWxsb3dzVXNlclNj
YWxpbmcoZmFsc2UpCiAgICAgICAgICAgICAsIGFsbG93c1Nocmlua1RvRml0KGZhbHNlKQorICAg
ICAgICAgICAgLCBjbGlwVG9TYWZlQXJlYSh0cnVlKQogICAgICAgICAgICAgLCB3aWR0aElzU2V0
KGZhbHNlKQogICAgICAgICAgICAgLCBoZWlnaHRJc1NldChmYWxzZSkKICAgICAgICAgICAgICwg
aW5pdGlhbFNjYWxlSXNTZXQoZmFsc2UpCkBAIC02Myw2ICs2NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgZG91YmxlIG1heGltdW1TY2FsZTsKICAgICAgICAgYm9vbCBhbGxvd3NVc2VyU2NhbGluZzsK
ICAgICAgICAgYm9vbCBhbGxvd3NTaHJpbmtUb0ZpdDsKKyAgICAgICAgYm9vbCBjbGlwVG9TYWZl
QXJlYTsKIAogICAgICAgICBib29sIHdpZHRoSXNTZXQ7CiAgICAgICAgIGJvb2wgaGVpZ2h0SXNT
ZXQ7CkBAIC05NSw2ICs5Nyw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFs
bG93c1VzZXJTY2FsaW5nKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhbGxvd3NV
c2VyU2NhbGluZ0lnbm9yaW5nQWx3YXlzU2NhbGFibGUoKSBjb25zdDsKICAgICBib29sIGFsbG93
c1Nocmlua1RvRml0KCkgY29uc3Q7CisgICAgYm9vbCBjbGlwVG9TYWZlQXJlYSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uZmlndXJhdGlvbi5jbGlwVG9TYWZlQXJlYTsgfQogCiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFBhcmFtZXRlcnMgd2VicGFnZVBhcmFtZXRlcnMoKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUGFyYW1ldGVycyB0ZXh0RG9jdW1lbnRQYXJhbWV0ZXJzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmlu
ZGV4IDE4NDU2N2UyZTBiMmQzNGM1ZDU0OTA5MzYzNjY1MmJiMmU1MDY2YjEuLmJlMGViZGRlMmY4
YWY4NmQ2Y2MyNDEwM2IzN2NjMTZhZWRjN2Y1YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC05NzYsNiArOTc2LDExIEBA
IHN0YXRpYyBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckZvckNvbXBvc2l0aW5nVGVz
dHMoY29uc3QgUmVuZGVyTGF5ZXImIGxhCiAgICAgcmV0dXJuICpyZW5kZXJlcjsKIH0KIAordm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygp
Cit7CisgICAgbV9yb290Q29udGVudExheWVyLT5zZXRNYXNrc1RvQm91bmRzKCFtX3JlbmRlclZp
ZXcuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpICYmIG1fcmVu
ZGVyVmlldy5mcmFtZVZpZXcoKS5jbGlwVG9TYWZlQXJlYSgpKTsKK30KKwogYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBDb21wb3Np
dGluZ0NoYW5nZVJlcGFpbnQgc2hvdWxkUmVwYWludCwgQmFja2luZ1JlcXVpcmVkIGJhY2tpbmdS
ZXF1aXJlZCkKIHsKICAgICBib29sIGxheWVyQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMTAwNyw4ICsx
MDEyLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVy
TGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVIKICAgICAgICAgICAgICAgICB1cGRhdGVM
YXllckZvckhlYWRlcihwYWdlKCkuaGVhZGVySGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIHVw
ZGF0ZUxheWVyRm9yRm9vdGVyKHBhZ2UoKS5mb290ZXJIZWlnaHQoKSk7CiAjZW5kaWYKLSAgICAg
ICAgICAgICAgICBpZiAobV9yZW5kZXJWaWV3LnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4
dGVuZEJleW9uZFBhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9yb290Q29udGVudExheWVy
LT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVSb290Q29u
dGVudExheWVyQ2xpcHBpbmcoKTsKIAogICAgICAgICAgICAgICAgIGlmIChUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZyA9IGxheWVyLmJhY2tpbmcoKS0+dGlsZWRCYWNraW5nKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHRpbGVkQmFja2luZy0+c2V0VG9wQ29udGVudEluc2V0KG1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKS50b3BDb250ZW50SW5zZXQoKSk7CkBAIC0zMzgyLDcgKzMzODYsNyBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9vdExheWVyKCkKICNlbmRpZgogCiAg
ICAgICAgIC8vIE5lZWQgdG8gY2xpcCB0byBwcmV2ZW50IHRyYW5zZm9ybWVkIGNvbnRlbnQgc2hv
d2luZyBvdXRzaWRlIHRoaXMgZnJhbWUKLSAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRN
YXNrc1RvQm91bmRzKHRydWUpOworICAgICAgICB1cGRhdGVSb290Q29udGVudExheWVyQ2xpcHBp
bmcoKTsKICAgICB9CiAKICAgICBpZiAocmVxdWlyZXNTY3JvbGxMYXllcihleHBlY3RlZEF0dGFj
aG1lbnQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcC5vcmlnIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAub3JpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODQ1NjdlMmUwYjJkMzRjNWQ1NDkw
OTM2MzY2NTJiYjJlNTA2NmIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAub3JpZwpAQCAtMCwwICsxLDQxNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisK
KyNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRl
ICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGbG93VGhy
ZWFkQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1haW5GcmFt
ZS5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0
LmgiCisjaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlckZ1bGxT
Y3JlZW4uaCIKKyNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgorI2luY2x1ZGUgIlJlbmRl
cklGcmFtZS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgorI2lu
Y2x1ZGUgIlJlbmRlclZpZGVvLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUg
IlNjcm9sbGluZ0NvbnN0cmFpbnRzLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
aCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNs
dWRlICJUaWxlZEJhY2tpbmcuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgorI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiTGVnYWN5VGlsZUNhY2hlLmgi
CisjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShUUkVF
X0RFQlVHR0lORykKKyNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCisjZW5kaWYKKworI2lm
IEVOQUJMRSgzRF9UUkFOU0ZPUk1TKQorLy8gVGhpcyBzeW1ib2wgaXMgdXNlZCB0byBkZXRlcm1p
bmUgZnJvbSBhIHNjcmlwdCB3aGV0aGVyIDNEIHJlbmRlcmluZyBpcyBlbmFibGVkICh2aWEgJ25t
JykuCitXRUJDT1JFX0VYUE9SVCBib29sIFdlYkNvcmVIYXMzRFJlbmRlcmluZyA9IHRydWU7Cisj
ZW5kaWYKKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCisjZGVmaW5lIFVT
RV9DT01QT1NJVElOR19GT1JfU01BTExfQ0FOVkFTRVMgMQorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworI2lmICFVU0UoQ09NUE9TSVRJTkdfRk9SX1NNQUxMX0NBTlZBU0VTKQorc3Rh
dGljIGNvbnN0IGludCBjYW52YXNBcmVhVGhyZXNob2xkUmVxdWlyaW5nQ29tcG9zaXRpbmcgPSA1
MCAqIDEwMDsKKyNlbmRpZgorLy8gRHVyaW5nIHBhZ2UgbG9hZGluZyBkZWxheSBsYXllciBmbHVz
aGVzIHVwIHRvIHRoaXMgbWFueSBzZWNvbmRzIHRvIGFsbG93IHRoZW0gY29hbGVzY2UsIHJlZHVj
aW5nIHdvcmtsb2FkLgorI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBjb25zdCBTZWNvbmRzIHRo
cm90dGxlZExheWVyRmx1c2hJbml0aWFsRGVsYXkgeyA1MDBfbXMgfTsKK3N0YXRpYyBjb25zdCBT
ZWNvbmRzIHRocm90dGxlZExheWVyRmx1c2hEZWxheSB7IDEuNV9zIH07CisjZWxzZQorc3RhdGlj
IGNvbnN0IFNlY29uZHMgdGhyb3R0bGVkTGF5ZXJGbHVzaEluaXRpYWxEZWxheSB7IDUwMF9tcyB9
Oworc3RhdGljIGNvbnN0IFNlY29uZHMgdGhyb3R0bGVkTGF5ZXJGbHVzaERlbGF5IHsgNTAwX21z
IH07CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworY2xhc3MgT3Zlcmxh
cE1hcENvbnRhaW5lciB7CitwdWJsaWM6CisgICAgdm9pZCBhZGQoY29uc3QgTGF5b3V0UmVjdCYg
Ym91bmRzKQorICAgIHsKKyAgICAgICAgbV9sYXllclJlY3RzLmFwcGVuZChib3VuZHMpOworICAg
ICAgICBtX2JvdW5kaW5nQm94LnVuaXRlKGJvdW5kcyk7CisgICAgfQorCisgICAgYm9vbCBvdmVy
bGFwc0xheWVycyhjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0CisgICAgeworICAgICAg
ICAvLyBDaGVja2luZyB3aXRoIHRoZSBib3VuZGluZyBib3ggd2lsbCBxdWlja2x5IHJlamVjdCBj
YXNlcyB3aGVuCisgICAgICAgIC8vIGxheWVycyBhcmUgY3JlYXRlZCBmb3IgbGlzdHMgb2YgaXRl
bXMgZ29pbmcgaW4gb25lIGRpcmVjdGlvbiBhbmQKKyAgICAgICAgLy8gbmV2ZXIgb3ZlcmxhcCB3
aXRoIGVhY2ggb3RoZXIuCisgICAgICAgIGlmICghYm91bmRzLmludGVyc2VjdHMobV9ib3VuZGlu
Z0JveCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgYXV0
byYgbGF5ZXJSZWN0IDogbV9sYXllclJlY3RzKSB7CisgICAgICAgICAgICBpZiAobGF5ZXJSZWN0
LmludGVyc2VjdHMoYm91bmRzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB1bml0ZShjb25z
dCBPdmVybGFwTWFwQ29udGFpbmVyJiBvdGhlckNvbnRhaW5lcikKKyAgICB7CisgICAgICAgIG1f
bGF5ZXJSZWN0cy5hcHBlbmRWZWN0b3Iob3RoZXJDb250YWluZXIubV9sYXllclJlY3RzKTsKKyAg
ICAgICAgbV9ib3VuZGluZ0JveC51bml0ZShvdGhlckNvbnRhaW5lci5tX2JvdW5kaW5nQm94KTsK
KyAgICB9Citwcml2YXRlOgorICAgIFZlY3RvcjxMYXlvdXRSZWN0PiBtX2xheWVyUmVjdHM7Cisg
ICAgTGF5b3V0UmVjdCBtX2JvdW5kaW5nQm94OworfTsKKworY2xhc3MgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpPdmVybGFwTWFwIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPdmVybGFwTWFw
KTsKK3B1YmxpYzoKKyAgICBPdmVybGFwTWFwKCkKKyAgICAgICAgOiBtX2dlb21ldHJ5TWFwKFVz
ZVRyYW5zZm9ybXMpCisgICAgeworICAgICAgICAvLyBCZWdpbiBhc3N1bWluZyB0aGUgcm9vdCBs
YXllciB3aWxsIGJlIGNvbXBvc2l0ZWQgc28gdGhhdCB0aGVyZSBpcworICAgICAgICAvLyBzb21l
dGhpbmcgb24gdGhlIHN0YWNrLiBUaGUgcm9vdCBsYXllciBzaG91bGQgYWxzbyBuZXZlciBnZXQg
YW4KKyAgICAgICAgLy8gcG9wQ29tcG9zaXRpbmdDb250YWluZXIgY2FsbC4KKyAgICAgICAgcHVz
aENvbXBvc2l0aW5nQ29udGFpbmVyKCk7CisgICAgfQorCisgICAgdm9pZCBhZGQoY29uc3QgTGF5
b3V0UmVjdCYgYm91bmRzKQorICAgIHsKKyAgICAgICAgLy8gTGF5ZXJzIGRvIG5vdCBjb250cmli
dXRlIHRvIG92ZXJsYXAgaW1tZWRpYXRlbHktLWluc3RlYWQsIHRoZXkgd2lsbAorICAgICAgICAv
LyBjb250cmlidXRlIHRvIG92ZXJsYXAgYXMgc29vbiBhcyB0aGVpciBjb21wb3NpdGVkIGFuY2Vz
dG9yIGhhcyBiZWVuCisgICAgICAgIC8vIHJlY3Vyc2l2ZWx5IHByb2Nlc3NlZCBhbmQgcG9wcGVk
IG9mZiB0aGUgc3RhY2suCisgICAgICAgIEFTU0VSVChtX292ZXJsYXBTdGFjay5zaXplKCkgPj0g
Mik7CisgICAgICAgIG1fb3ZlcmxhcFN0YWNrW21fb3ZlcmxhcFN0YWNrLnNpemUoKSAtIDJdLmFk
ZChib3VuZHMpOworICAgICAgICBtX2lzRW1wdHkgPSBmYWxzZTsKKyAgICB9CisKKyAgICBib29s
IG92ZXJsYXBzTGF5ZXJzKGNvbnN0IExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX292ZXJsYXBTdGFjay5sYXN0KCkub3ZlcmxhcHNMYXllcnMoYm91bmRz
KTsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1faXNFbXB0eTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hDb21wb3NpdGluZ0NvbnRhaW5l
cigpCisgICAgeworICAgICAgICBtX292ZXJsYXBTdGFjay5hcHBlbmQoT3ZlcmxhcE1hcENvbnRh
aW5lcigpKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcENvbXBvc2l0aW5nQ29udGFpbmVyKCkKKyAg
ICB7CisgICAgICAgIG1fb3ZlcmxhcFN0YWNrW21fb3ZlcmxhcFN0YWNrLnNpemUoKSAtIDJdLnVu
aXRlKG1fb3ZlcmxhcFN0YWNrLmxhc3QoKSk7CisgICAgICAgIG1fb3ZlcmxhcFN0YWNrLnJlbW92
ZUxhc3QoKTsKKyAgICB9CisKKyAgICBjb25zdCBSZW5kZXJHZW9tZXRyeU1hcCYgZ2VvbWV0cnlN
YXAoKSBjb25zdCB7IHJldHVybiBtX2dlb21ldHJ5TWFwOyB9CisgICAgUmVuZGVyR2VvbWV0cnlN
YXAmIGdlb21ldHJ5TWFwKCkgeyByZXR1cm4gbV9nZW9tZXRyeU1hcDsgfQorCitwcml2YXRlOgor
ICAgIHN0cnVjdCBSZWN0TGlzdCB7CisgICAgICAgIFZlY3RvcjxMYXlvdXRSZWN0PiByZWN0czsK
KyAgICAgICAgTGF5b3V0UmVjdCBib3VuZGluZ1JlY3Q7CisgICAgICAgIAorICAgICAgICB2b2lk
IGFwcGVuZChjb25zdCBMYXlvdXRSZWN0JiByZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZWN0cy5hcHBlbmQocmVjdCk7CisgICAgICAgICAgICBib3VuZGluZ1JlY3QudW5pdGUocmVjdCk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGVuZChjb25zdCBSZWN0TGlzdCYgcmVjdExp
c3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlY3RzLmFwcGVuZFZlY3RvcihyZWN0TGlzdC5y
ZWN0cyk7CisgICAgICAgICAgICBib3VuZGluZ1JlY3QudW5pdGUocmVjdExpc3QuYm91bmRpbmdS
ZWN0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0
IExheW91dFJlY3QmIHJlY3QpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghcmVj
dHMuc2l6ZSgpIHx8ICFib3VuZGluZ1JlY3QuaW50ZXJzZWN0cyhyZWN0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgY3VycmVu
dFJlY3QgOiByZWN0cykgeworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVjdC5pbnRlcnNl
Y3RzKHJlY3QpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBW
ZWN0b3I8T3ZlcmxhcE1hcENvbnRhaW5lcj4gbV9vdmVybGFwU3RhY2s7CisgICAgUmVuZGVyR2Vv
bWV0cnlNYXAgbV9nZW9tZXRyeU1hcDsKKyAgICBib29sIG1faXNFbXB0eSB7IHRydWUgfTsKK307
CisKK3N0cnVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OkNvbXBvc2l0aW5nU3RhdGUgeworICAg
IENvbXBvc2l0aW5nU3RhdGUoUmVuZGVyTGF5ZXIqIGNvbXBBbmNlc3RvciwgYm9vbCB0ZXN0T3Zl
cmxhcCA9IHRydWUpCisgICAgICAgIDogY29tcG9zaXRpbmdBbmNlc3Rvcihjb21wQW5jZXN0b3Ip
CisgICAgICAgICwgc3VidHJlZUlzQ29tcG9zaXRpbmcoZmFsc2UpCisgICAgICAgICwgdGVzdGlu
Z092ZXJsYXAodGVzdE92ZXJsYXApCisgICAgICAgICwgYW5jZXN0b3JIYXNUcmFuc2Zvcm1Bbmlt
YXRpb24oZmFsc2UpCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICAgICAgLCBoYXNO
b3RJc29sYXRlZENvbXBvc2l0ZWRCbGVuZGluZ0Rlc2NlbmRhbnRzKGZhbHNlKQorI2VuZGlmCisj
aWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQorICAgICAgICAsIGRlcHRoKDApCisjZW5kaWYKKyAg
ICB7CisgICAgfQorICAgIAorICAgIENvbXBvc2l0aW5nU3RhdGUoY29uc3QgQ29tcG9zaXRpbmdT
dGF0ZSYgb3RoZXIpCisgICAgICAgIDogY29tcG9zaXRpbmdBbmNlc3RvcihvdGhlci5jb21wb3Np
dGluZ0FuY2VzdG9yKQorICAgICAgICAsIHN1YnRyZWVJc0NvbXBvc2l0aW5nKG90aGVyLnN1YnRy
ZWVJc0NvbXBvc2l0aW5nKQorICAgICAgICAsIHRlc3RpbmdPdmVybGFwKG90aGVyLnRlc3RpbmdP
dmVybGFwKQorICAgICAgICAsIGFuY2VzdG9ySGFzVHJhbnNmb3JtQW5pbWF0aW9uKG90aGVyLmFu
Y2VzdG9ySGFzVHJhbnNmb3JtQW5pbWF0aW9uKQorI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcp
CisgICAgICAgICwgaGFzTm90SXNvbGF0ZWRDb21wb3NpdGVkQmxlbmRpbmdEZXNjZW5kYW50cyhv
dGhlci5oYXNOb3RJc29sYXRlZENvbXBvc2l0ZWRCbGVuZGluZ0Rlc2NlbmRhbnRzKQorI2VuZGlm
CisjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQorICAgICAgICAsIGRlcHRoKG90aGVyLmRlcHRo
ICsgMSkKKyNlbmRpZgorICAgIHsKKyAgICB9CisgICAgCisgICAgUmVuZGVyTGF5ZXIqIGNvbXBv
c2l0aW5nQW5jZXN0b3I7CisgICAgYm9vbCBzdWJ0cmVlSXNDb21wb3NpdGluZzsKKyAgICBib29s
IHRlc3RpbmdPdmVybGFwOworICAgIGJvb2wgYW5jZXN0b3JIYXNUcmFuc2Zvcm1BbmltYXRpb247
CisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICBib29sIGhhc05vdElzb2xhdGVkQ29t
cG9zaXRlZEJsZW5kaW5nRGVzY2VuZGFudHM7CisjZW5kaWYKKyNpZiBFTkFCTEUoVFJFRV9ERUJV
R0dJTkcpCisgICAgaW50IGRlcHRoOworI2VuZGlmCit9OworCitzdHJ1Y3QgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpPdmVybGFwRXh0ZW50IHsKKyAgICBMYXlvdXRSZWN0IGJvdW5kczsKKyAgICBi
b29sIGV4dGVudENvbXB1dGVkIHsgZmFsc2UgfTsKKyAgICBib29sIGhhc1RyYW5zZm9ybUFuaW1h
dGlvbiB7IGZhbHNlIH07CisgICAgYm9vbCBhbmltYXRpb25DYXVzZXNFeHRlbnRVbmNlcnRhaW50
eSB7IGZhbHNlIH07CisKKyAgICBib29sIGtub3duVG9CZUhhdmVFeHRlbnRVbmNlcnRhaW50eSgp
IGNvbnN0IHsgcmV0dXJuIGV4dGVudENvbXB1dGVkICYmIGFuaW1hdGlvbkNhdXNlc0V4dGVudFVu
Y2VydGFpbnR5OyB9Cit9OworCisjaWYgIUxPR19ESVNBQkxFRAorc3RhdGljIGlubGluZSBib29s
IGNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpCit7CisgICAgcmV0dXJuIExvZ0NvbXBvc2l0aW5nLnN0
YXRlID09IFdURkxvZ0NoYW5uZWxPbjsKK30KKyNlbmRpZgorCitSZW5kZXJMYXllckNvbXBvc2l0
b3I6OlJlbmRlckxheWVyQ29tcG9zaXRvcihSZW5kZXJWaWV3JiByZW5kZXJWaWV3KQorICAgIDog
bV9yZW5kZXJWaWV3KHJlbmRlclZpZXcpCisgICAgLCBtX3VwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
VGltZXIoKnRoaXMsICZSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzVGltZXJGaXJlZCkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKCp0aGlzLCAmUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZCkKK3sKK30KKworUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp+UmVuZGVyTGF5ZXJDb21wb3NpdG9yKCkKK3sKKyAgICAvLyBUYWtlIGNhcmUg
dGhhdCB0aGUgb3duZWQgR3JhcGhpY3NMYXllcnMgYXJlIGRlbGV0ZWQgZmlyc3QgYXMgdGhlaXIg
ZGVzdHJ1Y3RvcnMgbWF5IGNhbGwgYmFjayBoZXJlLgorICAgIG1fY2xpcExheWVyID0gbnVsbHB0
cjsKKyAgICBtX3Njcm9sbExheWVyID0gbnVsbHB0cjsKKyAgICBBU1NFUlQobV9yb290TGF5ZXJB
dHRhY2htZW50ID09IFJvb3RMYXllclVuYXR0YWNoZWQpOworfQorCit2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6ZW5hYmxlQ29tcG9zaXRpbmdNb2RlKGJvb2wgZW5hYmxlIC8qID0gdHJ1ZSAq
LykKK3sKKyAgICBpZiAoZW5hYmxlICE9IG1fY29tcG9zaXRpbmcpIHsKKyAgICAgICAgbV9jb21w
b3NpdGluZyA9IGVuYWJsZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2NvbXBvc2l0aW5nKSB7
CisgICAgICAgICAgICBlbnN1cmVSb290TGF5ZXIoKTsKKyAgICAgICAgICAgIG5vdGlmeUlGcmFt
ZXNPZkNvbXBvc2l0aW5nQ2hhbmdlKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZGVz
dHJveVJvb3RMYXllcigpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmNhY2hlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZsYWdzKCkKK3sKKyAgICBib29sIGhhc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcgPSBmYWxzZTsKKyAgICBib29sIHNob3dEZWJ1Z0JvcmRlcnMgPSBm
YWxzZTsKKyAgICBib29sIHNob3dSZXBhaW50Q291bnRlciA9IGZhbHNlOworICAgIGJvb2wgZm9y
Y2VDb21wb3NpdGluZ01vZGUgPSBmYWxzZTsKKyAgICBib29sIGFjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQgPSBmYWxzZTsKKyAgICBib29sIGRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQgPSBmYWxz
ZTsKKworICAgIGF1dG8mIHNldHRpbmdzID0gbV9yZW5kZXJWaWV3LnNldHRpbmdzKCk7CisgICAg
aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IHNldHRpbmdzLmFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkKCk7CisKKyAgICAvLyBXZSBhbGxvdyB0aGUgY2hyb21lIHRvIG92ZXJyaWRlIHRo
ZSBzZXR0aW5ncywgaW4gY2FzZSB0aGUgcGFnZSBpcyByZW5kZXJlZAorICAgIC8vIG9uIGEgY2hy
b21lIHRoYXQgZG9lc24ndCBhbGxvdyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZy4KKyAgICBpZiAo
aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZykgeworICAgICAgICBtX2NvbXBvc2l0aW5nVHJpZ2dl
cnMgPSBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMo
KTsKKyAgICAgICAgaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyA9IG1fY29tcG9zaXRpbmdUcmln
Z2VyczsKKyAgICB9CisKKyAgICBzaG93RGVidWdCb3JkZXJzID0gc2V0dGluZ3Muc2hvd0RlYnVn
Qm9yZGVycygpOworICAgIHNob3dSZXBhaW50Q291bnRlciA9IHNldHRpbmdzLnNob3dSZXBhaW50
Q291bnRlcigpOworICAgIGZvcmNlQ29tcG9zaXRpbmdNb2RlID0gc2V0dGluZ3MuZm9yY2VDb21w
b3NpdGluZ01vZGUoKSAmJiBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nOworCisgICAgaWYgKGZv
cmNlQ29tcG9zaXRpbmdNb2RlICYmICFpc01haW5GcmFtZUNvbXBvc2l0b3IoKSkKKyAgICAgICAg
Zm9yY2VDb21wb3NpdGluZ01vZGUgPSByZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Nyb2xsYWJsZUZy
YW1lKCk7CisKKyAgICBhY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkID0gc2V0dGluZ3MuYWNjZWxl
cmF0ZWREcmF3aW5nRW5hYmxlZCgpOworICAgIGRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQgPSBz
ZXR0aW5ncy5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVkKCk7CisgICAgCisgICAgaWYgKGhhc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcgIT0gbV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nIHx8IHNo
b3dEZWJ1Z0JvcmRlcnMgIT0gbV9zaG93RGVidWdCb3JkZXJzIHx8IHNob3dSZXBhaW50Q291bnRl
ciAhPSBtX3Nob3dSZXBhaW50Q291bnRlciB8fCBmb3JjZUNvbXBvc2l0aW5nTW9kZSAhPSBtX2Zv
cmNlQ29tcG9zaXRpbmdNb2RlKQorICAgICAgICBzZXRDb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1
aWxkKCk7CisKKyAgICBib29sIGRlYnVnQm9yZGVyc0NoYW5nZWQgPSBtX3Nob3dEZWJ1Z0JvcmRl
cnMgIT0gc2hvd0RlYnVnQm9yZGVyczsKKyAgICBtX2hhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcg
PSBoYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nOworICAgIG1fc2hvd0RlYnVnQm9yZGVycyA9IHNo
b3dEZWJ1Z0JvcmRlcnM7CisgICAgbV9zaG93UmVwYWludENvdW50ZXIgPSBzaG93UmVwYWludENv
dW50ZXI7CisgICAgbV9mb3JjZUNvbXBvc2l0aW5nTW9kZSA9IGZvcmNlQ29tcG9zaXRpbmdNb2Rl
OworICAgIG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCA9IGFjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQ7CisgICAgbV9kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVkID0gZGlzcGxheUxpc3REcmF3
aW5nRW5hYmxlZDsKKyAgICAKKyAgICBpZiAoZGVidWdCb3JkZXJzQ2hhbmdlZCkgeworICAgICAg
ICBpZiAobV9sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX2xheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U2hvd0RlYnVnQm9yZGVyKG1fc2hvd0RlYnVnQm9y
ZGVycyk7CisKKyAgICAgICAgaWYgKG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAg
ICAgICAgIG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci0+c2V0U2hvd0RlYnVnQm9yZGVyKG1f
c2hvd0RlYnVnQm9yZGVycyk7CisKKyAgICAgICAgaWYgKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIp
CisgICAgICAgICAgICBtX2xheWVyRm9yU2Nyb2xsQ29ybmVyLT5zZXRTaG93RGVidWdCb3JkZXIo
bV9zaG93RGVidWdCb3JkZXJzKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSBjb25zdAoreworICAgIHJldHVybiBoYXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nKCkgJiYgKG1fY29tcG9zaXRpbmdUcmlnZ2VycyAmIENocm9tZUNs
aWVudDo6VGhyZWVEVHJhbnNmb3JtVHJpZ2dlcik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpzZXRDb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkKGJvb2wgbmVlZFJlYnVpbGQp
Cit7CisgICAgaWYgKGluQ29tcG9zaXRpbmdNb2RlKCkpCisgICAgICAgIG1fY29tcG9zaXRpbmdM
YXllcnNOZWVkUmVidWlsZCA9IG5lZWRSZWJ1aWxkOworfQorCit2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6d2lsbFJlY2FsY1N0eWxlKCkKK3sKKyAgICBtX2xheWVyTmVlZHNDb21wb3NpdGlu
Z1VwZGF0ZSA9IGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkUmVj
YWxjU3R5bGVXaXRoTm9QZW5kaW5nTGF5b3V0KCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJOZWVkc0Nv
bXBvc2l0aW5nVXBkYXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgY2FjaGVB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRmxhZ3MoKTsKKyAgICByZXR1cm4gdXBkYXRlQ29tcG9zaXRp
bmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVBZnRlclN0eWxlQ2hhbmdlKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmN1c3RvbVBvc2l0aW9uRm9yVmlzaWJsZVJlY3RDb21wdXRh
dGlvbihjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBGbG9hdFBvaW50JiBwb3Np
dGlvbikgY29uc3QKK3sKKyAgICBpZiAoZ3JhcGhpY3NMYXllciAhPSBtX3Njcm9sbExheWVyLmdl
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uID0g
LXBvc2l0aW9uOworCisgICAgaWYgKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5zY3JvbGxCZWhh
dmlvckZvckZpeGVkRWxlbWVudHMoKSA9PSBTdGlja1RvRG9jdW1lbnRCb3VuZHMpCisgICAgICAg
IHNjcm9sbFBvc2l0aW9uID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmNvbnN0cmFpblNjcm9s
bFBvc2l0aW9uRm9yT3Zlcmhhbmcocm91bmRlZEludFBvaW50KHNjcm9sbFBvc2l0aW9uKSk7CisK
KyAgICBwb3NpdGlvbiA9IC1zY3JvbGxQb3NpdGlvbjsKK30KKwordm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIp
Cit7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKGxheWVyLT5jYW5UaHJvdHRsZUxheWVyRmx1c2go
KSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY2hlZHVsZUxheWVyRmx1c2hO
b3coKQoreworICAgIG1faGFzUGVuZGluZ0xheWVyRmx1c2ggPSBmYWxzZTsKKyAgICBwYWdlKCku
Y2hyb21lKCkuY2xpZW50KCkuc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaChib29sIGNhblRo
cm90dGxlKQoreworICAgIEFTU0VSVCghbV9mbHVzaGluZ0xheWVycyk7CisKKyAgICBpZiAoY2Fu
VGhyb3R0bGUpCisgICAgICAgIHN0YXJ0SW5pdGlhbExheWVyRmx1c2hUaW1lcklmTmVlZGVkKCk7
CisKKyAgICBpZiAoY2FuVGhyb3R0bGUgJiYgaXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzKCkpIHsK
KyAgICAgICAgbV9oYXNQZW5kaW5nTGF5ZXJGbHVzaCA9IHRydWU7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgc2NoZWR1bGVMYXllckZsdXNoTm93KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoYm9vbCBpc0ZsdXNoUm9vdCkK
K3sKKyAgICAvLyBGcmFtZVZpZXc6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZy
YW1lcygpIGZsdXNoZXMgZWFjaCBzdWJmcmFtZSwKKyAgICAvLyBidXQgR3JhcGhpY3NMYXllcjo6
Zmx1c2hDb21wb3NpdGluZ1N0YXRlKCkgd2lsbCBjcm9zcyBmcmFtZSBib3VuZGFyaWVzCisgICAg
Ly8gaWYgdGhlIEdyYXBoaWNzTGF5ZXJzIGFyZSBjb25uZWN0ZWQgKHRoZSBSb290TGF5ZXJBdHRh
Y2hlZFZpYUVuY2xvc2luZ0ZyYW1lIGNhc2UpLgorICAgIC8vIEFzIGxvbmcgYXMgd2UncmUgbm90
IHRoZSByb290IG9mIHRoZSBmbHVzaCwgd2UgY2FuIGJhaWwuCisgICAgaWYgKCFpc0ZsdXNoUm9v
dCAmJiByb290TGF5ZXJBdHRhY2htZW50KCkgPT0gUm9vdExheWVyQXR0YWNoZWRWaWFFbmNsb3Np
bmdGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChyb290TGF5ZXJBdHRhY2ht
ZW50KCkgPT0gUm9vdExheWVyVW5hdHRhY2hlZCkgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAg
ICAgc3RhcnRMYXllckZsdXNoVGltZXJJZk5lZWRlZCgpOworI2VuZGlmCisgICAgICAgIG1fc2hv
dWxkRmx1c2hPblJlYXR0YWNoID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOworICAgIEFu
aW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZmcmFtZVZpZXcuZnJhbWUo
KS5hbmltYXRpb24oKSk7CisKKyAgICBBU1NFUlQoIW1fZmx1c2hpbmdMYXllcnMpOworICAgIG1f
Zmx1c2hpbmdMYXllcnMgPSB0cnVlOworCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXll
ciA9IHJvb3RHcmFwaGljc0xheWVyKCkpIHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgIEZs
b2F0UmVjdCBleHBvc2VkUmVjdCA9IGZyYW1lVmlldy5leHBvc2VkQ29udGVudFJlY3QoKTsKKyAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKENvbXBvc2l0aW5nLCBzdHJlYW0gPDwgIlxuUmVuZGVyTGF5
ZXJDb21wb3NpdG9yICIgPDwgdGhpcyA8PCAiIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyAocm9v
dCAiIDw8IGlzRmx1c2hSb290IDw8ICIpIGV4cG9zZWRSZWN0ICIgPDwgZXhwb3NlZFJlY3QpOwor
CisgICAgICAgIC8vIEZJWE1FOiBVc2Ugb3B0aW1pemVkIGZsdXNoZXMuCisgICAgICAgIHJvb3RM
YXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKGV4cG9zZWRSZWN0KTsKKyNlbHNlCisgICAgICAg
IC8vIEhhdmluZyBhIG1fY2xpcExheWVyIGluZGljYXRlcyB0aGF0IHdlJ3JlIGRvaW5nIHNjcm9s
bGluZyB2aWEgR3JhcGhpY3NMYXllcnMuCisgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9
IG1fY2xpcExheWVyID8gRmxvYXRSZWN0KHsgMCwgMCB9LCBmcmFtZVZpZXcuc2l6ZUZvclZpc2li
bGVDb250ZW50KCkpIDogZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdCgpOworCisgICAgICAg
IGlmIChmcmFtZVZpZXcudmlld0V4cG9zZWRSZWN0KCkpCisgICAgICAgICAgICB2aXNpYmxlUmVj
dC5pbnRlcnNlY3QoZnJhbWVWaWV3LnZpZXdFeHBvc2VkUmVjdCgpLnZhbHVlKCkpOworCisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShDb21wb3NpdGluZywgIHN0cmVhbSA8PCAiXG5SZW5kZXJMYXll
ckNvbXBvc2l0b3IgIiA8PCB0aGlzIDw8ICIgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCIgPDwg
aXNGbHVzaFJvb3QgPDwgIikgIiA8PCB2aXNpYmxlUmVjdCk7CisgICAgICAgIHJvb3RMYXllci0+
Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVSZWN0LCBHcmFwaGljc0xheWVyOjpGbHVzaFNj
b3BlOjpVbmNvbW1pdHRlZCk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShDb21wb3NpdGluZywg
IHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yICIgPDwgdGhpcyA8PCAiIGZsdXNoIGNv
bXBsZXRlXG4iKTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBBU1NFUlQobV9mbHVzaGluZ0xh
eWVycyk7CisgICAgbV9mbHVzaGluZ0xheWVycyA9IGZhbHNlOworCisgICAgdXBkYXRlU2Nyb2xs
Q29vcmRpbmF0ZWRMYXllcnNBZnRlckZsdXNoSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgaWYgKGlzRmx1c2hSb290KQorICAgICAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuZGlkRmx1c2hDb21wb3NpdGluZ0xheWVycygpOworI2VuZGlmCisKKyAgICAr
K21fbGF5ZXJGbHVzaENvdW50OworICAgIHN0YXJ0TGF5ZXJGbHVzaFRpbWVySWZOZWVkZWQoKTsK
K30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGVk
TGF5ZXJzQWZ0ZXJGbHVzaEluY2x1ZGluZ1N1YmZyYW1lcygpCit7CisgICAgdXBkYXRlU2Nyb2xs
Q29vcmRpbmF0ZWRMYXllcnNBZnRlckZsdXNoKCk7CisKKyAgICBGcmFtZSYgZnJhbWUgPSBtX3Jl
bmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICBmb3IgKEZyYW1lKiBzdWJmcmFtZSA9
IGZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IHN1YmZyYW1lOyBzdWJmcmFtZSA9IHN1YmZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCZmcmFtZSkpIHsKKyAgICAgICAgUmVuZGVyVmlldyogdmll
dyA9IHN1YmZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCF2aWV3KQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdmlldy0+Y29tcG9zaXRvcigpLnVwZGF0ZVNj
cm9sbENvb3JkaW5hdGVkTGF5ZXJzQWZ0ZXJGbHVzaCgpOworICAgIH0KK30KKwordm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzQWZ0ZXJGbHVz
aCgpCit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHVwZGF0ZUN1c3RvbUxheWVyc0FmdGVyRmx1
c2goKTsKKyNlbmRpZgorCisgICAgZm9yIChhdXRvKiBsYXllciA6IG1fc2Nyb2xsQ29vcmRpbmF0
ZWRMYXllcnNOZWVkaW5nVXBkYXRlKQorICAgICAgICB1cGRhdGVTY3JvbGxDb29yZGluYXRlZFN0
YXR1cygqbGF5ZXIpOworCisgICAgbV9zY3JvbGxDb29yZGluYXRlZExheWVyc05lZWRpbmdVcGRh
dGUuY2xlYXIoKTsKK30KKworI2lmIFBMQVRGT1JNKElPUykKK3N0YXRpYyBib29sIHNjcm9sbGJh
ckhhc0Rpc3BsYXlOb25lKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIGlmICghc2Nyb2xs
YmFyIHx8ICFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc2Nyb2xsYmFyU3R5bGUg
PSBzdGF0aWNfY2FzdDxSZW5kZXJTY3JvbGxiYXIqPihzY3JvbGxiYXIpLT5nZXRTY3JvbGxiYXJQ
c2V1ZG9TdHlsZShTY3JvbGxiYXJCR1BhcnQsIFNDUk9MTEJBUik7CisgICAgcmV0dXJuIHNjcm9s
bGJhclN0eWxlICYmIHNjcm9sbGJhclN0eWxlLT5kaXNwbGF5KCkgPT0gTk9ORTsKK30KKworLy8g
RklYTUU6IENhbiB3ZSBtYWtlIHxsYXllcnwgY29uc3QgUmVuZGVyTGF5ZXImPworc3RhdGljIHZv
aWQgdXBkYXRlU2Nyb2xsaW5nTGF5ZXJXaXRoQ2xpZW50KFJlbmRlckxheWVyJiBsYXllciwgQ2hy
b21lQ2xpZW50JiBjbGllbnQpCit7CisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0g
bGF5ZXIuYmFja2luZygpOworICAgIEFTU0VSVChiYWNraW5nKTsKKworICAgIGJvb2wgYWxsb3dI
b3Jpem9udGFsU2Nyb2xsYmFyID0gIXNjcm9sbGJhckhhc0Rpc3BsYXlOb25lKGxheWVyLmhvcml6
b250YWxTY3JvbGxiYXIoKSk7CisgICAgYm9vbCBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyID0gIXNj
cm9sbGJhckhhc0Rpc3BsYXlOb25lKGxheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgIGNs
aWVudC5hZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKGxheWVyLnJlbmRlcmVyKCkuZWxlbWVudCgp
LCBiYWNraW5nLT5zY3JvbGxpbmdMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGJhY2tpbmctPnNj
cm9sbGluZ0NvbnRlbnRzTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLAorICAgICAgICBsYXllci5z
Y3JvbGxhYmxlQ29udGVudHNTaXplKCksIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciwgYWxsb3dW
ZXJ0aWNhbFNjcm9sbGJhcik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRh
dGVDdXN0b21MYXllcnNBZnRlckZsdXNoKCkKK3sKKyAgICByZWdpc3RlckFsbFZpZXdwb3J0Q29u
c3RyYWluZWRMYXllcnMoKTsKKworICAgIGlmICghbV9zY3JvbGxpbmdMYXllcnNOZWVkaW5nVXBk
YXRlLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKGF1dG8qIGxheWVyIDogbV9zY3JvbGxpbmdM
YXllcnNOZWVkaW5nVXBkYXRlKQorICAgICAgICAgICAgdXBkYXRlU2Nyb2xsaW5nTGF5ZXJXaXRo
Q2xpZW50KCpsYXllciwgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpKTsKKyAgICAgICAgbV9zY3Jv
bGxpbmdMYXllcnNOZWVkaW5nVXBkYXRlLmNsZWFyKCk7CisgICAgfQorICAgIG1fc2Nyb2xsaW5n
TGF5ZXJzTmVlZGluZ1VwZGF0ZS5jbGVhcigpOworfQorI2VuZGlmCisKK3ZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpkaWRGbHVzaENoYW5nZXNGb3JMYXllcihSZW5kZXJMYXllciYgbGF5ZXIs
IGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgaWYgKG1fc2Nyb2xs
Q29vcmRpbmF0ZWRMYXllcnMuY29udGFpbnMoJmxheWVyKSkKKyAgICAgICAgbV9zY3JvbGxDb29y
ZGluYXRlZExheWVyc05lZWRpbmdVcGRhdGUuYWRkKCZsYXllcik7CisKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgaWYgKG1fc2Nyb2xsaW5nTGF5ZXJzLmNvbnRhaW5zKCZsYXllcikpCisgICAgICAg
IG1fc2Nyb2xsaW5nTGF5ZXJzTmVlZGluZ1VwZGF0ZS5hZGQoJmxheWVyKTsKKyNlbmRpZgorCisg
ICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygpOworICAgIGlm
IChiYWNraW5nLT5iYWNrZ3JvdW5kTGF5ZXJQYWludHNGaXhlZFJvb3RCYWNrZ3JvdW5kKCkgJiYg
Z3JhcGhpY3NMYXllciA9PSBiYWNraW5nLT5iYWNrZ3JvdW5kTGF5ZXIoKSkKKyAgICAgICAgZml4
ZWRSb290QmFja2dyb3VuZExheWVyQ2hhbmdlZCgpOworfQorCit2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6ZGlkUGFpbnRCYWNraW5nKFJlbmRlckxheWVyQmFja2luZyopCit7CisgICAgRnJh
bWVWaWV3JiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CisgICAgZnJhbWVW
aWV3LnNldExhc3RQYWludFRpbWUobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworICAg
IGlmIChmcmFtZVZpZXcubWlsZXN0b25lc1BlbmRpbmdQYWludCgpKQorICAgICAgICBmcmFtZVZp
ZXcuZmlyZVBhaW50UmVsYXRlZE1pbGVzdG9uZXNJZk5lZWRlZCgpOworfQorCit2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6ZGlkQ2hhbmdlVmlzaWJsZVJlY3QoKQoreworICAgIEdyYXBoaWNz
TGF5ZXIqIHJvb3RMYXllciA9IHJvb3RHcmFwaGljc0xheWVyKCk7CisgICAgaWYgKCFyb290TGF5
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEZyYW1lVmlldyYgZnJhbWVWaWV3ID0g
bV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOworCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEludFJl
Y3QgdmlzaWJsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZyYW1lVmlldy5leHBvc2VkQ29udGVu
dFJlY3QoKSk7CisjZWxzZQorICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBtX2NsaXBMYXllciA/
IEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LmNvbnRlbnRzU2l6ZSgpKSA6IGZyYW1lVmll
dy52aXNpYmxlQ29udGVudFJlY3QoKTsKKyNlbmRpZgorICAgIGlmICghcm9vdExheWVyLT52aXNp
YmxlUmVjdENoYW5nZVJlcXVpcmVzRmx1c2godmlzaWJsZVJlY3QpKQorICAgICAgICByZXR1cm47
CisgICAgc2NoZWR1bGVMYXllckZsdXNoTm93KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpub3RpZnlGbHVzaEJlZm9yZURpc3BsYXlSZWZyZXNoKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqKQoreworICAgIGlmICghbV9sYXllclVwZGF0ZXIpIHsKKyAgICAgICAgUGxhdGZvcm1EaXNw
bGF5SUQgZGlzcGxheUlEID0gcGFnZSgpLmNocm9tZSgpLmRpc3BsYXlJRCgpOworICAgICAgICBt
X2xheWVyVXBkYXRlciA9IHN0ZDo6bWFrZV91bmlxdWU8R3JhcGhpY3NMYXllclVwZGF0ZXI+KCp0
aGlzLCBkaXNwbGF5SUQpOworICAgIH0KKyAgICAKKyAgICBtX2xheWVyVXBkYXRlci0+c2NoZWR1
bGVVcGRhdGUoKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZsdXNoTGF5ZXJz
U29vbihHcmFwaGljc0xheWVyVXBkYXRlciYpCit7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKHRy
dWUpOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJUaWxlZEJhY2tpbmdV
c2FnZUNoYW5nZWQoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgYm9vbCB1c2lu
Z1RpbGVkQmFja2luZykKK3sKKyAgICBpZiAodXNpbmdUaWxlZEJhY2tpbmcpIHsKKyAgICAgICAg
KyttX2xheWVyc1dpdGhUaWxlZEJhY2tpbmdDb3VudDsKKyAgICAgICAgZ3JhcGhpY3NMYXllci0+
dGlsZWRCYWNraW5nKCktPnNldElzSW5XaW5kb3cocGFnZSgpLmlzSW5XaW5kb3coKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fbGF5ZXJzV2l0aFRpbGVkQmFja2luZ0NvdW50ID4g
MCk7CisgICAgICAgIC0tbV9sYXllcnNXaXRoVGlsZWRCYWNraW5nQ291bnQ7CisgICAgfQorfQor
CitSZW5kZXJMYXllckNvbXBvc2l0b3IqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5jbG9zaW5n
Q29tcG9zaXRvckZsdXNoaW5nTGF5ZXJzKCkgY29uc3QKK3sKKyAgICBmb3IgKEZyYW1lKiBmcmFt
ZSA9ICZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS5wYXJlbnQoKSkgeworICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3IqIGNv
bXBvc2l0b3IgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkgPyAmZnJhbWUtPmNvbnRlbnRSZW5k
ZXJlcigpLT5jb21wb3NpdG9yKCkgOiBudWxscHRyOworICAgICAgICBpZiAoY29tcG9zaXRvci0+
aXNGbHVzaGluZ0xheWVycygpKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0b3I7CisgICAg
fQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyVXBkYXRlKCkKK3sKKyAgICBpZiAoIW1fdXBk
YXRlQ29tcG9zaXRpbmdMYXllcnNUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3VwZGF0ZUNv
bXBvc2l0aW5nTGF5ZXJzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc1RpbWVyRmlyZWQoKQorewor
ICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlQWZ0ZXJMYXlvdXQp
OworfQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzQW55QWRkaXRpb25hbENvbXBv
c2l0ZWRMYXllcnMoY29uc3QgUmVuZGVyTGF5ZXImIHJvb3RMYXllcikgY29uc3QKK3sKKyAgICBp
bnQgbGF5ZXJDb3VudCA9IG1fY29tcG9zaXRlZExheWVyQ291bnQgKyBtX3JlbmRlclZpZXcuZnJh
bWUoKS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5vdmVybGF5Q291bnQoKTsK
KyAgICByZXR1cm4gbGF5ZXJDb3VudCA+IChyb290TGF5ZXIuaXNDb21wb3NpdGVkKCkgPyAxIDog
MCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYW5jZWxDb21wb3NpdGluZ0xh
eWVyVXBkYXRlKCkKK3sKKyAgICBtX3VwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzVGltZXIuc3RvcCgp
OworfQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXll
cnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlIHVwZGF0ZVR5cGUsIFJlbmRlckxheWVyKiB1cGRhdGVS
b290KQoreworICAgIExPRyhDb21wb3NpdGluZywgIlJlbmRlckxheWVyQ29tcG9zaXRvciAlcCB1
cGRhdGVDb21wb3NpdGluZ0xheWVycyAlZCAlcCIsIHRoaXMsIHVwZGF0ZVR5cGUsIHVwZGF0ZVJv
b3QpOworCisgICAgbV91cGRhdGVDb21wb3NpdGluZ0xheWVyc1RpbWVyLnN0b3AoKTsKKworICAg
IEFTU0VSVChtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpID09IERvY3Vt
ZW50OjpOb3RJblBhZ2VDYWNoZSk7CisgICAgCisgICAgLy8gQ29tcG9zaXRpbmcgbGF5ZXJzIHdp
bGwgYmUgdXBkYXRlZCBpbiBEb2N1bWVudDo6c2V0VmlzdWFsVXBkYXRlc0FsbG93ZWQoYm9vbCkg
aWYgc3VwcHJlc3NlZCBoZXJlLgorICAgIGlmICghbV9yZW5kZXJWaWV3LmRvY3VtZW50KCkudmlz
dWFsVXBkYXRlc0FsbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQXZv
aWQgdXBkYXRpbmcgdGhlIGxheWVycyB3aXRoIG9sZCB2YWx1ZXMuIENvbXBvc2l0aW5nIGxheWVy
cyB3aWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgdGhlIGxheW91dCBpcyBmaW5pc2hlZC4KKyAgICBpZiAo
bV9yZW5kZXJWaWV3Lm5lZWRzTGF5b3V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghbV9jb21wb3NpdGluZyAmJiAobV9mb3JjZUNvbXBvc2l0aW5nTW9kZSB8fCAoaXNNYWlu
RnJhbWVDb21wb3NpdG9yKCkgJiYgbV9yZW5kZXJWaWV3LmZyYW1lKCkubWFpbkZyYW1lKCkucGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkub3ZlcmxheUNvdW50KCkpKSkKKyAgICAgICAgZW5hYmxlQ29t
cG9zaXRpbmdNb2RlKHRydWUpOworCisgICAgaWYgKCFtX3JlZXZhbHVhdGVDb21wb3NpdGluZ0Fm
dGVyTGF5b3V0ICYmICFtX2NvbXBvc2l0aW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICArK21fY29tcG9zaXRpbmdVcGRhdGVDb3VudDsKKworICAgIEFuaW1hdGlvblVwZGF0ZUJsb2Nr
IGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5h
bmltYXRpb24oKSk7CisKKyAgICBTZXRGb3JTY29wZTxib29sPiBwb3N0TGF5b3V0Q2hhbmdlKG1f
aW5Qb3N0TGF5b3V0VXBkYXRlLCB0cnVlKTsKKyAgICAKKyAgICBib29sIGNoZWNrRm9ySGllcmFy
Y2h5VXBkYXRlID0gbV9yZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91dDsKKyAgICBib29s
IG5lZWRHZW9tZXRyeVVwZGF0ZSA9IGZhbHNlOworCisgICAgc3dpdGNoICh1cGRhdGVUeXBlKSB7
CisgICAgY2FzZSBDb21wb3NpdGluZ1VwZGF0ZUFmdGVyU3R5bGVDaGFuZ2U6CisgICAgY2FzZSBD
b21wb3NpdGluZ1VwZGF0ZUFmdGVyTGF5b3V0OgorICAgIGNhc2UgQ29tcG9zaXRpbmdVcGRhdGVP
bkhpdFRlc3Q6CisgICAgICAgIGNoZWNrRm9ySGllcmFyY2h5VXBkYXRlID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGluZ1VwZGF0ZU9uU2Nyb2xsOgorICAgICAgICBj
aGVja0ZvckhpZXJhcmNoeVVwZGF0ZSA9IHRydWU7IC8vIE92ZXJsYXAgY2FuIGNoYW5nZSB3aXRo
IHNjcm9sbGluZywgc28gbmVlZCB0byBjaGVjayBmb3IgaGllcmFyY2h5IHVwZGF0ZXMuCisKKyAg
ICAgICAgbmVlZEdlb21ldHJ5VXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDb21wb3NpdGluZ1VwZGF0ZU9uQ29tcG9zaXRlZFNjcm9sbDoKKyAgICAgICAgbmVlZEdlb21l
dHJ5VXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFjaGVj
a0ZvckhpZXJhcmNoeVVwZGF0ZSAmJiAhbmVlZEdlb21ldHJ5VXBkYXRlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBib29sIG5lZWRIaWVyYXJjaHlVcGRhdGUgPSBtX2NvbXBvc2l0aW5n
TGF5ZXJzTmVlZFJlYnVpbGQ7CisgICAgYm9vbCBpc0Z1bGxVcGRhdGUgPSAhdXBkYXRlUm9vdDsK
KworICAgIC8vIE9ubHkgY2xlYXIgdGhlIGZsYWcgaWYgd2UncmUgdXBkYXRpbmcgdGhlIGVudGly
ZSBoaWVyYXJjaHkuCisgICAgbV9jb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkID0gZmFsc2U7
CisgICAgdXBkYXRlUm9vdCA9ICZyb290UmVuZGVyTGF5ZXIoKTsKKworICAgIGlmIChpc0Z1bGxV
cGRhdGUgJiYgdXBkYXRlVHlwZSA9PSBDb21wb3NpdGluZ1VwZGF0ZUFmdGVyTGF5b3V0KQorICAg
ICAgICBtX3JlZXZhbHVhdGVDb21wb3NpdGluZ0FmdGVyTGF5b3V0ID0gZmFsc2U7CisKKyAgICBM
T0coQ29tcG9zaXRpbmcsICIgY2hlY2tGb3JIaWVyYXJjaHlVcGRhdGUgJWQsIG5lZWRHZW9tZXRy
eVVwZGF0ZSAlZCIsIGNoZWNrRm9ySGllcmFyY2h5VXBkYXRlLCBuZWVkSGllcmFyY2h5VXBkYXRl
KTsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICBkb3VibGUgc3RhcnRUaW1lID0gMDsKKyAgICBp
ZiAoY29tcG9zaXRpbmdMb2dFbmFibGVkKCkpIHsKKyAgICAgICAgKyttX3Jvb3RMYXllclVwZGF0
ZUNvdW50OworICAgICAgICBzdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChjaGVja0ZvckhpZXJhcmNoeVVwZGF0ZSkgewor
ICAgICAgICBpZiAobV9yZW5kZXJWaWV3Lmhhc1JlbmRlck5hbWVkRmxvd1RocmVhZHMoKSAmJiBp
c0Z1bGxVcGRhdGUpCisgICAgICAgICAgICBtX3JlbmRlclZpZXcuZmxvd1RocmVhZENvbnRyb2xs
ZXIoKS51cGRhdGVGbG93VGhyZWFkc0xheWVyVG9SZWdpb25NYXBwaW5nc0lmTmVlZGVkKCk7Cisg
ICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGxheWVycyBpbiBwcmVzZW50YXRpb24gb3JkZXIsIHNv
IHRoYXQgd2UgY2FuIGNvbXB1dGUgd2hpY2ggUmVuZGVyTGF5ZXJzIG5lZWQgY29tcG9zaXRpbmcg
bGF5ZXJzLgorICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgbWF5YmUgZG8gdGhpcyBhbmQgdGhl
IGhpZXJhcmNoeSB1ZHBhdGUgaW4gb25lIHBhc3MsIGJ1dCB0aGUgcGFyZW50aW5nIGxvZ2ljIHdv
dWxkIGJlIG1vcmUgY29tcGxleC4KKyAgICAgICAgQ29tcG9zaXRpbmdTdGF0ZSBjb21wU3RhdGUo
dXBkYXRlUm9vdCk7CisgICAgICAgIGJvb2wgbGF5ZXJzQ2hhbmdlZCA9IGZhbHNlOworICAgICAg
ICBib29sIHNhdzNEVHJhbnNmb3JtID0gZmFsc2U7CisgICAgICAgIE92ZXJsYXBNYXAgb3Zlcmxh
cFRlc3RSZXF1ZXN0TWFwOworICAgICAgICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMo
bnVsbHB0ciwgKnVwZGF0ZVJvb3QsIG92ZXJsYXBUZXN0UmVxdWVzdE1hcCwgY29tcFN0YXRlLCBs
YXllcnNDaGFuZ2VkLCBzYXczRFRyYW5zZm9ybSk7CisgICAgICAgIG5lZWRIaWVyYXJjaHlVcGRh
dGUgfD0gbGF5ZXJzQ2hhbmdlZDsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgaWYg
KGNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpICYmIGlzRnVsbFVwZGF0ZSAmJiAobmVlZEhpZXJhcmNo
eVVwZGF0ZSB8fCBuZWVkR2VvbWV0cnlVcGRhdGUpKSB7CisgICAgICAgIG1fb2JsaWdhdGVDb21w
b3NpdGVkTGF5ZXJDb3VudCA9IDA7CisgICAgICAgIG1fc2Vjb25kYXJ5Q29tcG9zaXRlZExheWVy
Q291bnQgPSAwOworICAgICAgICBtX29ibGlnYXRvcnlCYWNraW5nU3RvcmVCeXRlcyA9IDA7Cisg
ICAgICAgIG1fc2Vjb25kYXJ5QmFja2luZ1N0b3JlQnl0ZXMgPSAwOworCisgICAgICAgIEZyYW1l
JiBmcmFtZSA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpOworICAgICAgICBib29s
IGlzTWFpbkZyYW1lID0gaXNNYWluRnJhbWVDb21wb3NpdG9yKCk7CisgICAgICAgIExPRyhDb21w
b3NpdGluZywgIlxuVXBkYXRlICVkIG9mICVzLlxuIiwgbV9yb290TGF5ZXJVcGRhdGVDb3VudCwg
aXNNYWluRnJhbWUgPyAibWFpbiBmcmFtZSIgOiBmcmFtZS50cmVlKCkudW5pcXVlTmFtZSgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKG5lZWRIaWVy
YXJjaHlVcGRhdGUpIHsKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBoaWVyYXJjaHkgb2YgdGhlIGNv
bXBvc2l0aW5nIGxheWVycy4KKyAgICAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZExp
c3Q7CisgICAgICAgIHJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZSgqdXBkYXRlUm9vdCwgY2hp
bGRMaXN0LCAwKTsKKworICAgICAgICAvLyBIb3N0IHRoZSBkb2N1bWVudCBsYXllciBpbiB0aGUg
UmVuZGVyVmlldydzIHJvb3QgbGF5ZXIuCisgICAgICAgIGlmIChpc0Z1bGxVcGRhdGUpIHsKKyAg
ICAgICAgICAgIGFwcGVuZERvY3VtZW50T3ZlcmxheUxheWVycyhjaGlsZExpc3QpOworICAgICAg
ICAgICAgLy8gRXZlbiB3aGVuIGNoaWxkTGlzdCBpcyBlbXB0eSwgZG9uJ3QgZHJvcCBvdXQgb2Yg
Y29tcG9zaXRpbmcgbW9kZSBpZiB0aGVyZSBhcmUKKyAgICAgICAgICAgIC8vIGNvbXBvc2l0ZWQg
bGF5ZXJzIHRoYXQgd2UgZGlkbid0IGhpdCBpbiBvdXIgdHJhdmVyc2FsIChlLmcuIGJlY2F1c2Ug
b2YgdmlzaWJpbGl0eTpoaWRkZW4pLgorICAgICAgICAgICAgaWYgKGNoaWxkTGlzdC5pc0VtcHR5
KCkgJiYgIWhhc0FueUFkZGl0aW9uYWxDb21wb3NpdGVkTGF5ZXJzKCp1cGRhdGVSb290KSkKKyAg
ICAgICAgICAgICAgICBkZXN0cm95Um9vdExheWVyKCk7CisgICAgICAgICAgICBlbHNlIGlmICht
X3Jvb3RDb250ZW50TGF5ZXIpCisgICAgICAgICAgICAgICAgbV9yb290Q29udGVudExheWVyLT5z
ZXRDaGlsZHJlbihjaGlsZExpc3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZWF0
dGFjaFN1YmZyYW1lU2Nyb2xsTGF5ZXJzKCk7CisgICAgfSBlbHNlIGlmIChuZWVkR2VvbWV0cnlV
cGRhdGUpIHsKKyAgICAgICAgLy8gV2UganVzdCBuZWVkIHRvIGRvIGEgZ2VvbWV0cnkgdXBkYXRl
LiBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgcG9zaXRpb246Zml4ZWQgc2Nyb2xsaW5nOworICAgICAg
ICAvLyBtb3N0IG9mIHRoZSB0aW1lLCBnZW9tZXRyeSBpcyB1cGRhdGVkIHZpYSBSZW5kZXJMYXll
cjo6c3R5bGVDaGFuZ2VkKCkuCisgICAgICAgIHVwZGF0ZUxheWVyVHJlZUdlb21ldHJ5KCp1cGRh
dGVSb290LCAwKTsKKyAgICAgICAgQVNTRVJUKCFpc0Z1bGxVcGRhdGUgfHwgIW1fc3ViZnJhbWVT
Y3JvbGxMYXllcnNOZWVkUmVhdHRhY2gpOworICAgIH0KKyAgICAKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgaWYgKGNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpICYmIGlzRnVsbFVwZGF0ZSAmJiAobmVl
ZEhpZXJhcmNoeVVwZGF0ZSB8fCBuZWVkR2VvbWV0cnlVcGRhdGUpKSB7CisgICAgICAgIGRvdWJs
ZSBlbmRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgICAgIExPRyhD
b21wb3NpdGluZywgIlRvdGFsIGxheWVycyAgIHByaW1hcnkgICBzZWNvbmRhcnkgICBvYmxpZ2F0
b3J5IGJhY2tpbmcgKEtCKSAgIHNlY29uZGFyeSBiYWNraW5nKEtCKSAgIHRvdGFsIGJhY2tpbmcg
KEtCKSAgdXBkYXRlIHRpbWUgKG1zKVxuIik7CisKKyAgICAgICAgTE9HKENvbXBvc2l0aW5nLCAi
JThkICUxMWQgJTlkICUyMC4yZiAlMjIuMmYgJTIyLjJmICUxOC4yZlxuIiwKKyAgICAgICAgICAg
IG1fb2JsaWdhdGVDb21wb3NpdGVkTGF5ZXJDb3VudCArIG1fc2Vjb25kYXJ5Q29tcG9zaXRlZExh
eWVyQ291bnQsIG1fb2JsaWdhdGVDb21wb3NpdGVkTGF5ZXJDb3VudCwKKyAgICAgICAgICAgIG1f
c2Vjb25kYXJ5Q29tcG9zaXRlZExheWVyQ291bnQsIG1fb2JsaWdhdG9yeUJhY2tpbmdTdG9yZUJ5
dGVzIC8gMTAyNCwgbV9zZWNvbmRhcnlCYWNraW5nU3RvcmVCeXRlcyAvIDEwMjQsIChtX29ibGln
YXRvcnlCYWNraW5nU3RvcmVCeXRlcyArIG1fc2Vjb25kYXJ5QmFja2luZ1N0b3JlQnl0ZXMpIC8g
MTAyNCwgMTAwMC4wICogKGVuZFRpbWUgLSBzdGFydFRpbWUpKTsKKyAgICB9CisjZW5kaWYKKyAg
ICBBU1NFUlQodXBkYXRlUm9vdCB8fCAhbV9jb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkKTsK
KworICAgIGlmICghaGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgICAgICBlbmFibGVD
b21wb3NpdGluZ01vZGUoZmFsc2UpOworCisgICAgLy8gSW5mb3JtIHRoZSBpbnNwZWN0b3IgdGhh
dCB0aGUgbGF5ZXIgdHJlZSBoYXMgY2hhbmdlZC4KKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmxheWVyVHJlZURpZENoYW5nZSgmcGFnZSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJz
KFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCkKK3sKKyAgICBpZiAoIWlzTWFpbkZy
YW1lQ29tcG9zaXRvcigpIHx8ICFtX2NvbXBvc2l0aW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICBj
aGlsZExpc3QuYXBwZW5kKCZmcmFtZS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS5sYXllcldpdGhEb2N1bWVudE92ZXJsYXlzKCkpOworfQorCit2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6bGF5ZXJCZWNhbWVOb25Db21wb3NpdGVkKGNvbnN0IFJlbmRlckxheWVyJiBsYXll
cikKK3sKKyAgICAvLyBJbmZvcm0gdGhlIGluc3BlY3RvciB0aGF0IHRoZSBnaXZlbiBSZW5kZXJM
YXllciB3YXMgZGVzdHJveWVkLgorICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cmVuZGVy
TGF5ZXJEZXN0cm95ZWQoJnBhZ2UoKSwgbGF5ZXIpOworCisgICAgQVNTRVJUKG1fY29tcG9zaXRl
ZExheWVyQ291bnQgPiAwKTsKKyAgICAtLW1fY29tcG9zaXRlZExheWVyQ291bnQ7Cit9CisKKyNp
ZiAhTE9HX0RJU0FCTEVECit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bG9nTGF5ZXJJbmZv
KGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgaW50IGRlcHRoKQoreworICAgIGlmICghY29tcG9z
aXRpbmdMb2dFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckxheWVyQmFj
a2luZyogYmFja2luZyA9IGxheWVyLmJhY2tpbmcoKTsKKyAgICBpZiAocmVxdWlyZXNDb21wb3Np
dGluZ0xheWVyKGxheWVyKSB8fCBsYXllci5pc1Jvb3RMYXllcigpKSB7CisgICAgICAgICsrbV9v
YmxpZ2F0ZUNvbXBvc2l0ZWRMYXllckNvdW50OworICAgICAgICBtX29ibGlnYXRvcnlCYWNraW5n
U3RvcmVCeXRlcyArPSBiYWNraW5nLT5iYWNraW5nU3RvcmVNZW1vcnlFc3RpbWF0ZSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgICsrbV9zZWNvbmRhcnlDb21wb3NpdGVkTGF5ZXJDb3VudDsKKyAg
ICAgICAgbV9zZWNvbmRhcnlCYWNraW5nU3RvcmVCeXRlcyArPSBiYWNraW5nLT5iYWNraW5nU3Rv
cmVNZW1vcnlFc3RpbWF0ZSgpOworICAgIH0KKworICAgIExheW91dFJlY3QgYWJzb2x1dGVCb3Vu
ZHMgPSBiYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCk7CisgICAgYWJzb2x1dGVCb3VuZHMubW92
ZShsYXllci5vZmZzZXRGcm9tQW5jZXN0b3IobV9yZW5kZXJWaWV3LmxheWVyKCkpKTsKKyAgICAK
KyAgICBTdHJpbmdCdWlsZGVyIGxvZ1N0cmluZzsKKyAgICBsb2dTdHJpbmcuYXBwZW5kKFN0cmlu
Zzo6Zm9ybWF0KCIlKnAgKCUuM2YsJS4zZi0lLjNmLCUuM2YpICUuMmZLQiIsIDEyICsgZGVwdGgg
KiAyLCAmbGF5ZXIsCisgICAgICAgIGFic29sdXRlQm91bmRzLngoKS50b0Zsb2F0KCksIGFic29s
dXRlQm91bmRzLnkoKS50b0Zsb2F0KCksIGFic29sdXRlQm91bmRzLm1heFgoKS50b0Zsb2F0KCks
IGFic29sdXRlQm91bmRzLm1heFkoKS50b0Zsb2F0KCksCisgICAgICAgIGJhY2tpbmctPmJhY2tp
bmdTdG9yZU1lbW9yeUVzdGltYXRlKCkgLyAxMDI0KSk7CisgICAgCisgICAgbG9nU3RyaW5nLmFw
cGVuZExpdGVyYWwoIiAoIik7CisgICAgbG9nU3RyaW5nLmFwcGVuZChsb2dSZWFzb25zRm9yQ29t
cG9zaXRpbmcobGF5ZXIpKTsKKyAgICBsb2dTdHJpbmcuYXBwZW5kTGl0ZXJhbCgiKSAiKTsKKwor
ICAgIGlmIChiYWNraW5nLT5ncmFwaGljc0xheWVyKCktPmNvbnRlbnRzT3BhcXVlKCkgfHwgYmFj
a2luZy0+cGFpbnRzSW50b0NvbXBvc2l0ZWRBbmNlc3RvcigpIHx8IGJhY2tpbmctPmZvcmVncm91
bmRMYXllcigpIHx8IGJhY2tpbmctPmJhY2tncm91bmRMYXllcigpKSB7CisgICAgICAgIGxvZ1N0
cmluZy5hcHBlbmQoJ1snKTsKKyAgICAgICAgYm9vbCBwcmVwZW5kU3BhY2UgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+Y29udGVudHNPcGFxdWUoKSkgewor
ICAgICAgICAgICAgbG9nU3RyaW5nLmFwcGVuZExpdGVyYWwoIm9wYXF1ZSIpOworICAgICAgICAg
ICAgcHJlcGVuZFNwYWNlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiYWNraW5n
LT5wYWludHNJbnRvQ29tcG9zaXRlZEFuY2VzdG9yKCkpIHsKKyAgICAgICAgICAgIGlmIChwcmVw
ZW5kU3BhY2UpCisgICAgICAgICAgICAgICAgbG9nU3RyaW5nLmFwcGVuZExpdGVyYWwoIiwgIik7
CisgICAgICAgICAgICBsb2dTdHJpbmcuYXBwZW5kTGl0ZXJhbCgicGFpbnRzIGludG8gYW5jZXN0
b3IiKTsKKyAgICAgICAgICAgIHByZXBlbmRTcGFjZSA9IHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoYmFja2luZy0+Zm9yZWdyb3VuZExheWVyKCkgfHwgYmFja2luZy0+YmFja2dyb3Vu
ZExheWVyKCkpIHsKKyAgICAgICAgICAgIGlmIChwcmVwZW5kU3BhY2UpCisgICAgICAgICAgICAg
ICAgbG9nU3RyaW5nLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgICAgICBpZiAoYmFja2lu
Zy0+Zm9yZWdyb3VuZExheWVyKCkgJiYgYmFja2luZy0+YmFja2dyb3VuZExheWVyKCkpCisgICAg
ICAgICAgICAgICAgbG9nU3RyaW5nLmFwcGVuZExpdGVyYWwoImZvcmVncm91bmQrYmFja2dyb3Vu
ZCIpOworICAgICAgICAgICAgZWxzZSBpZiAoYmFja2luZy0+Zm9yZWdyb3VuZExheWVyKCkpCisg
ICAgICAgICAgICAgICAgbG9nU3RyaW5nLmFwcGVuZExpdGVyYWwoImZvcmVncm91bmQiKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2dTdHJpbmcuYXBwZW5kTGl0ZXJhbCgi
YmFja2dyb3VuZCIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYmFja2luZy0+
cGFpbnRzU3VicGl4ZWxBbnRpYWxpYXNlZFRleHQoKSkgeworICAgICAgICAgICAgaWYgKHByZXBl
bmRTcGFjZSkKKyAgICAgICAgICAgICAgICBsb2dTdHJpbmcuYXBwZW5kTGl0ZXJhbCgiLCAiKTsK
KyAgICAgICAgICAgIGxvZ1N0cmluZy5hcHBlbmRMaXRlcmFsKCJ0ZXh0eSIpOworICAgICAgICB9
CisKKyAgICAgICAgbG9nU3RyaW5nLmFwcGVuZExpdGVyYWwoIl0gIik7CisgICAgfQorCisgICAg
bG9nU3RyaW5nLmFwcGVuZChsYXllci5uYW1lKCkpOworCisgICAgTE9HKENvbXBvc2l0aW5nLCAi
JXMiLCBsb2dTdHJpbmcudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30KKyNlbmRpZgorCitz
dGF0aWMgYm9vbCBjaGVja0lmRGVzY2VuZGFudENsaXBwaW5nQ29udGV4dE5lZWRzVXBkYXRlKGNv
bnN0IFJlbmRlckxheWVyJiBsYXllciwgYm9vbCBpc0NsaXBwaW5nKQoreworICAgIGZvciAoUmVu
ZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXIuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcg
PSBjaGlsZC0+YmFja2luZygpOworICAgICAgICBpZiAoYmFja2luZyAmJiAoaXNDbGlwcGluZyB8
fCBiYWNraW5nLT5oYXNBbmNlc3RvckNsaXBwaW5nTGF5ZXIoKSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgICBpZiAoY2hlY2tJZkRlc2NlbmRhbnRDbGlwcGluZ0NvbnRleHRO
ZWVkc1VwZGF0ZSgqY2hpbGQsIGlzQ2xpcHBpbmcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF9P
VkVSRkxPV19TQ1JPTExJTkcpCitzdGF0aWMgYm9vbCBpc1Njcm9sbGFibGVPdmVyZmxvdyhFT3Zl
cmZsb3cgb3ZlcmZsb3cpCit7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE9TQ1JPTEwgfHwgb3Zl
cmZsb3cgPT0gT0FVVE8gfHwgb3ZlcmZsb3cgPT0gT09WRVJMQVk7Cit9CisKK3N0YXRpYyBib29s
IHN0eWxlSGFzVG91Y2hTY3JvbGxpbmcoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAg
IHJldHVybiBzdHlsZS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgJiYgKGlzU2Nyb2xsYWJs
ZU92ZXJmbG93KHN0eWxlLm92ZXJmbG93WCgpKSB8fCBpc1Njcm9sbGFibGVPdmVyZmxvdyhzdHls
ZS5vdmVyZmxvd1koKSkpOworfQorI2VuZGlmCisKK3N0YXRpYyBib29sIHN0eWxlQ2hhbmdlUmVx
dWlyZXNMYXllclJlYnVpbGQoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJT
dHlsZSYgb2xkU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkKK3sKKyAgICAvLyBD
bGlwIGNhbiBhZmZlY3QgYW5jZXN0b3IgY29tcG9zaXRpbmcgYm91bmRzLCBzbyB3ZSBuZWVkIHJl
Y29tcHV0ZSBvdmVybGFwIHdoZW4gaXQgY2hhbmdlcyBvbiBhIG5vbi1jb21wb3NpdGVkIGxheWVy
LgorICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgYXZvaWQgZG9pbmcgdGhpcyBmb3IgYWxsIGNsaXAg
Y2hhbmdlcy4KKyAgICBpZiAob2xkU3R5bGUuY2xpcCgpICE9IG5ld1N0eWxlLmNsaXAoKSB8fCBv
bGRTdHlsZS5oYXNDbGlwKCkgIT0gbmV3U3R5bGUuaGFzQ2xpcCgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIC8vIEZJWE1FOiBuZWVkIHRvIGNoZWNrIGV2ZXJ5dGhpbmcgdGhhdCB3ZSBj
b25zdWx0IHRvIGF2b2lkIGJhY2tpbmcgc3RvcmUgaGVyZTogd2Via2l0Lm9yZy9iLzEzODM4Mwor
ICAgIGlmICghb2xkU3R5bGUub3BhY2l0eSgpICE9ICFuZXdTdHlsZS5vcGFjaXR5KCkpIHsKKyAg
ICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IGxheWVyLnJl
bmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgICAgICBpZiAoUmVuZGVyTGF5ZXJC
YWNraW5nKiBhbmNlc3RvckJhY2tpbmcgPSByZXBhaW50Q29udGFpbmVyID8gcmVwYWludENvbnRh
aW5lci0+bGF5ZXIoKS0+YmFja2luZygpIDogbnVsbHB0cikgeworICAgICAgICAgICAgaWYgKHN0
YXRpY19jYXN0PGJvb2w+KG5ld1N0eWxlLm9wYWNpdHkoKSkgIT0gYW5jZXN0b3JCYWNraW5nLT5n
cmFwaGljc0xheWVyKCktPmRyYXdzQ29udGVudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2hlbiBvdmVyZmxvdyBjaGFuZ2VzLCBj
b21wb3NpdGVkIGxheWVycyBtYXkgbmVlZCB0byB1cGRhdGUgdGhlaXIgYW5jZXN0b3JDbGlwcGlu
ZyBsYXllcnMuCisgICAgaWYgKCFsYXllci5pc0NvbXBvc2l0ZWQoKSAmJiAob2xkU3R5bGUub3Zl
cmZsb3dYKCkgIT0gbmV3U3R5bGUub3ZlcmZsb3dYKCkgfHwgb2xkU3R5bGUub3ZlcmZsb3dZKCkg
IT0gbmV3U3R5bGUub3ZlcmZsb3dZKCkpICYmIGxheWVyLnN0YWNraW5nQ29udGFpbmVyKCktPmhh
c0NvbXBvc2l0aW5nRGVzY2VuZGFudCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKQorICAgIGlmIChzdHlsZUhh
c1RvdWNoU2Nyb2xsaW5nKG9sZFN0eWxlKSAhPSBzdHlsZUhhc1RvdWNoU2Nyb2xsaW5nKG5ld1N0
eWxlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKworICAgIC8vIENvbXBvc2l0aW5n
IGxheWVycyBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhleSBhcmUgY2xpcHBlZCBieSBhbnkgb2Yg
dGhlIGFuY2VzdG9ycy4KKyAgICAvLyBXaGVuIHRoZSBjdXJyZW50IGxheWVyJ3MgY2xpcHBpbmcg
YmVoYXZpb3VyIGNoYW5nZXMsIHdlIG5lZWQgdG8gcHJvcGFnYXRlIGl0IHRvIHRoZSBkZXNjZW5k
YW50cy4KKyAgICBib29sIHdhc0NsaXBwaW5nID0gb2xkU3R5bGUuaGFzQ2xpcCgpIHx8IG9sZFN0
eWxlLm92ZXJmbG93WCgpICE9IE9WSVNJQkxFIHx8IG9sZFN0eWxlLm92ZXJmbG93WSgpICE9IE9W
SVNJQkxFOworICAgIGJvb2wgaXNDbGlwcGluZyA9IG5ld1N0eWxlLmhhc0NsaXAoKSB8fCBuZXdT
dHlsZS5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSB8fCBuZXdTdHlsZS5vdmVyZmxvd1koKSAhPSBP
VklTSUJMRTsKKyAgICBpZiAoaXNDbGlwcGluZyAhPSB3YXNDbGlwcGluZykgeworICAgICAgICBp
ZiAoY2hlY2tJZkRlc2NlbmRhbnRDbGlwcGluZ0NvbnRleHROZWVkc1VwZGF0ZShsYXllciwgaXND
bGlwcGluZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllclN0eWxlQ2hhbmdl
ZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpCit7CisgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlRXF1YWwp
CisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSA9IGxh
eWVyLnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBpZiAodXBkYXRlTGF5ZXJDb21wb3NpdGluZ1N0
YXRlKGxheWVyKSB8fCAob2xkU3R5bGUgJiYgc3R5bGVDaGFuZ2VSZXF1aXJlc0xheWVyUmVidWls
ZChsYXllciwgKm9sZFN0eWxlLCBuZXdTdHlsZSkpKSB7CisgICAgICAgIHNldENvbXBvc2l0aW5n
TGF5ZXJzTmVlZFJlYnVpbGQoKTsKKyAgICAgICAgbV9sYXllck5lZWRzQ29tcG9zaXRpbmdVcGRh
dGUgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGxheWVyLmlzQ29t
cG9zaXRlZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiB1cGRhdGluZyBnZW9tZXRyeSBoZXJlIGlz
IHBvdGVudGlhbGx5IGhhcm1mdWwsIGJlY2F1c2UgbGF5b3V0IGlzIG5vdCB1cC10by1kYXRlLgor
ICAgICAgICBsYXllci5iYWNraW5nKCktPnVwZGF0ZUdlb21ldHJ5KCk7CisgICAgICAgIGxheWVy
LmJhY2tpbmcoKS0+dXBkYXRlQWZ0ZXJEZXNjZW5kYW50cygpOworICAgICAgICBtX2xheWVyTmVl
ZHNDb21wb3NpdGluZ1VwZGF0ZSA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBXZSBkb24ndCBoYXZlIGFueSBkaXJlY3QgcmVhc29ucyBmb3IgdGhpcyBzdHlsZSBjaGFu
Z2UgdG8gYWZmZWN0IGxheWVyIGNvbXBvc2l0aW9uLiBUZXN0IGlmIGl0IG1pZ2h0IGFmZmVjdCB0
aGluZ3MgaW5kaXJlY3RseS4KKyAgICBpZiAob2xkU3R5bGUgJiYgc3R5bGVDaGFuZ2VNYXlBZmZl
Y3RJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29ucyhsYXllci5yZW5kZXJlcigpLCAqb2xkU3R5bGUp
KSB7CisgICAgICAgIG1fbGF5ZXJOZWVkc0NvbXBvc2l0aW5nVXBkYXRlID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChsYXllci5pc1Jvb3RMYXllcigpKSB7CisgICAg
ICAgIC8vIE5lZWRlZCBmb3Igc2Nyb2xsIGJhcnMuCisgICAgICAgIG1fbGF5ZXJOZWVkc0NvbXBv
c2l0aW5nVXBkYXRlID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpjYW5Db21wb3NpdGVDbGlwUGF0aChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCit7Cisg
ICAgQVNTRVJUKGxheWVyLmlzQ29tcG9zaXRlZCgpKTsKKyAgICBBU1NFUlQobGF5ZXIucmVuZGVy
ZXIoKS5zdHlsZSgpLmNsaXBQYXRoKCkpOworCisgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaGFz
TWFzaygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDbGlwUGF0aE9wZXJhdGlvbiYg
Y2xpcFBhdGggPSAqbGF5ZXIucmVuZGVyZXIoKS5zdHlsZSgpLmNsaXBQYXRoKCk7CisgICAgcmV0
dXJuIChjbGlwUGF0aC50eXBlKCkgIT0gQ2xpcFBhdGhPcGVyYXRpb246OlNoYXBlIHx8IGNsaXBQ
YXRoLnR5cGUoKSA9PSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hhcGUpICYmIEdyYXBoaWNzTGF5ZXI6
OnN1cHBvcnRzTGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXI6OlR5cGU6OlNoYXBlKTsKK30KKworc3Rh
dGljIFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyRm9yQ29tcG9zaXRpbmdUZXN0cyhj
b25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCit7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
cmVuZGVyZXIgPSAmbGF5ZXIucmVuZGVyZXIoKTsKKworICAgIC8vIFRoZSBjb21wb3NpdGluZyBz
dGF0ZSBvZiBhIHJlZmxlY3Rpb24gc2hvdWxkIG1hdGNoIHRoYXQgb2YgaXRzIHJlZmxlY3RlZCBs
YXllci4KKyAgICBpZiAobGF5ZXIuaXNSZWZsZWN0aW9uKCkpCisgICAgICAgIHJlbmRlcmVyID0g
ZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4ocmVuZGVyZXItPnBhcmVudCgpKTsgLy8g
VGhlIFJlbmRlclJlcGxpY2EncyBwYXJlbnQgaXMgdGhlIG9iamVjdCBiZWluZyByZWZsZWN0ZWQu
CisKKyAgICByZXR1cm4gKnJlbmRlcmVyOworfQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUmVw
YWludCBzaG91bGRSZXBhaW50LCBCYWNraW5nUmVxdWlyZWQgYmFja2luZ1JlcXVpcmVkKQorewor
ICAgIGJvb2wgbGF5ZXJDaGFuZ2VkID0gZmFsc2U7CisgICAgUmVuZGVyTGF5ZXI6OlZpZXdwb3J0
Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIHZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21w
b3NpdGVkUmVhc29uID0gUmVuZGVyTGF5ZXI6Ok5vTm90Q29tcG9zaXRlZFJlYXNvbjsKKworICAg
IGlmIChiYWNraW5nUmVxdWlyZWQgPT0gQmFja2luZ1JlcXVpcmVkOjpVbmtub3duKQorICAgICAg
ICBiYWNraW5nUmVxdWlyZWQgPSBuZWVkc1RvQmVDb21wb3NpdGVkKGxheWVyLCAmdmlld3BvcnRD
b25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24pID8gQmFja2luZ1JlcXVpcmVkOjpZZXMgOiBC
YWNraW5nUmVxdWlyZWQ6Ok5vOworICAgIGVsc2UgeworICAgICAgICAvLyBOZWVkIHRvIGZldGNo
IHZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uLCBidXQgd2l0aG91dCBkb2lu
ZyBhbGwgdGhlIHdvcmsgdGhhdCBuZWVkc1RvQmVDb21wb3NpdGVkIGRvZXMuCisgICAgICAgIHJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihyZW5kZXJlckZvckNvbXBvc2l0aW5nVGVzdHMo
bGF5ZXIpLCBsYXllciwgJnZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKTsK
KyAgICB9CisKKyAgICBpZiAoYmFja2luZ1JlcXVpcmVkID09IEJhY2tpbmdSZXF1aXJlZDo6WWVz
KSB7CisgICAgICAgIGVuYWJsZUNvbXBvc2l0aW5nTW9kZSgpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFsYXllci5iYWNraW5nKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gcmVw
YWludCwgZG8gc28gYmVmb3JlIG1ha2luZyBiYWNraW5nCisgICAgICAgICAgICBpZiAoc2hvdWxk
UmVwYWludCA9PSBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnROb3cpCisgICAgICAgICAgICAgICAg
cmVwYWludE9uQ29tcG9zaXRpbmdDaGFuZ2UobGF5ZXIpOworCisgICAgICAgICAgICBsYXllci5l
bnN1cmVCYWNraW5nKCk7CisKKyAgICAgICAgICAgIC8vIEF0IHRoaXMgdGltZSwgdGhlIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yIG9ubHkgc3VwcG9ydHMgdGhlIHRvcC1sZXZlbCBmcmFtZS4KKyAgICAg
ICAgICAgIGlmIChsYXllci5pc1Jvb3RMYXllcigpICYmIGlzTWFpbkZyYW1lQ29tcG9zaXRvcigp
KSB7CisgICAgICAgICAgICAgICAgdXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRTdGF0dXMobGF5ZXIp
OworICAgICAgICAgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29v
cmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgICAg
ICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKG1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKSk7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAg
ICAgICAgICAgICAgIHVwZGF0ZUxheWVyRm9ySGVhZGVyKHBhZ2UoKS5oZWFkZXJIZWlnaHQoKSk7
CisgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJGb3JGb290ZXIocGFnZSgpLmZvb3RlckhlaWdo
dCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChtX3JlbmRlclZpZXcuc2V0dGluZ3Mo
KS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKQorICAgICAgICAgICAgICAgICAg
ICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworCisgICAgICAg
ICAgICAgICAgaWYgKFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nID0gbGF5ZXIuYmFja2luZygp
LT50aWxlZEJhY2tpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRU
b3BDb250ZW50SW5zZXQobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnRvcENvbnRlbnRJbnNldCgp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhpcyBsYXllciBhbmQgYWxsIG9m
IGl0cyBkZXNjZW5kYW50cyBoYXZlIGNhY2hlZCByZXBhaW50cyByZWN0cyB0aGF0IGFyZSByZWxh
dGl2ZSB0bworICAgICAgICAgICAgLy8gdGhlIHJlcGFpbnQgY29udGFpbmVyLCBzbyBjaGFuZ2Ug
d2hlbiBjb21wb3NpdGluZyBjaGFuZ2VzOyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGVtIGhlcmUuCisg
ICAgICAgICAgICBpZiAobGF5ZXIucGFyZW50KCkpCisgICAgICAgICAgICAgICAgbGF5ZXIuY29t
cHV0ZVJlcGFpbnRSZWN0c0luY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CisKKyAgICAgICAgICAgIGxh
eWVyQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
bGF5ZXIuYmFja2luZygpKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSdyZSByZW1vdmluZyBiYWNr
aW5nIG9uIGEgcmVmbGVjdGlvbiwgY2xlYXIgdGhlIHNvdXJjZSBHcmFwaGljc0xheWVyJ3MgcG9p
bnRlciB0bworICAgICAgICAgICAgLy8gaXRzIHJlcGxpY2EgR3JhcGhpY3NMYXllci4gSW4gcHJh
Y3RpY2UgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgcmVmbGVjdGVlIGFuZCByZWZs
ZWN0aW9uIAorICAgICAgICAgICAgLy8gYXJlIGJvdGggZWl0aGVyIGNvbXBvc2l0ZWQsIG9yIG5v
dCBjb21wb3NpdGVkLgorICAgICAgICAgICAgaWYgKGxheWVyLmlzUmVmbGVjdGlvbigpKSB7Cisg
ICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIHNvdXJjZUxheWVyID0gZG93bmNhc3Q8UmVuZGVy
TGF5ZXJNb2RlbE9iamVjdD4oKmxheWVyLnJlbmRlcmVyKCkucGFyZW50KCkpLmxheWVyKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHNvdXJjZUxh
eWVyLT5iYWNraW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJhY2tpbmctPmdy
YXBoaWNzTGF5ZXIoKS0+cmVwbGljYUxheWVyKCkgPT0gbGF5ZXIuYmFja2luZygpLT5ncmFwaGlj
c0xheWVyKCkpOworICAgICAgICAgICAgICAgICAgICBiYWNraW5nLT5ncmFwaGljc0xheWVyKCkt
PnNldFJlcGxpY2F0ZWRCeUxheWVyKG51bGxwdHIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJz
KGxheWVyKTsKKworICAgICAgICAgICAgbGF5ZXIuY2xlYXJCYWNraW5nKCk7CisgICAgICAgICAg
ICBsYXllckNoYW5nZWQgPSB0cnVlOworCisgICAgICAgICAgICAvLyBUaGlzIGxheWVyIGFuZCBh
bGwgb2YgaXRzIGRlc2NlbmRhbnRzIGhhdmUgY2FjaGVkIHJlcGFpbnRzIHJlY3RzIHRoYXQgYXJl
IHJlbGF0aXZlIHRvCisgICAgICAgICAgICAvLyB0aGUgcmVwYWludCBjb250YWluZXIsIHNvIGNo
YW5nZSB3aGVuIGNvbXBvc2l0aW5nIGNoYW5nZXM7IHdlIG5lZWQgdG8gdXBkYXRlIHRoZW0gaGVy
ZS4KKyAgICAgICAgICAgIGxheWVyLmNvbXB1dGVSZXBhaW50UmVjdHNJbmNsdWRpbmdEZXNjZW5k
YW50cygpOworCisgICAgICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIHJlcGFpbnQsIGRvIHNvIG5v
dyB0aGF0IHdlJ3ZlIHJlbW92ZWQgdGhlIGJhY2tpbmcKKyAgICAgICAgICAgIGlmIChzaG91bGRS
ZXBhaW50ID09IENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludE5vdykKKyAgICAgICAgICAgICAgICBy
ZXBhaW50T25Db21wb3NpdGluZ0NoYW5nZShsYXllcik7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIGlmIChsYXllckNoYW5nZWQgJiYgaXM8UmVuZGVyVmlk
ZW8+KGxheWVyLnJlbmRlcmVyKCkpKSB7CisgICAgICAgIC8vIElmIGl0J3MgYSB2aWRlbywgZ2l2
ZSB0aGUgbWVkaWEgcGxheWVyIGEgY2hhbmNlIHRvIGhvb2sgdXAgdG8gdGhlIGxheWVyLgorICAg
ICAgICBkb3duY2FzdDxSZW5kZXJWaWRlbz4obGF5ZXIucmVuZGVyZXIoKSkuYWNjZWxlcmF0ZWRS
ZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChsYXllckNo
YW5nZWQgJiYgaXM8UmVuZGVyV2lkZ2V0PihsYXllci5yZW5kZXJlcigpKSkgeworICAgICAgICBS
ZW5kZXJMYXllckNvbXBvc2l0b3IqIGlubmVyQ29tcG9zaXRvciA9IGZyYW1lQ29udGVudHNDb21w
b3NpdG9yKCZkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KGxheWVyLnJlbmRlcmVyKCkpKTsKKyAgICAg
ICAgaWYgKGlubmVyQ29tcG9zaXRvciAmJiBpbm5lckNvbXBvc2l0b3ItPmluQ29tcG9zaXRpbmdN
b2RlKCkpCisgICAgICAgICAgICBpbm5lckNvbXBvc2l0b3ItPnVwZGF0ZVJvb3RMYXllckF0dGFj
aG1lbnQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGxheWVyQ2hhbmdlZCkKKyAgICAgICAgbGF5
ZXIuY2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cyhQYWludGluZ0NsaXBSZWN0cyk7
CisKKyAgICAvLyBJZiBhIGZpeGVkIHBvc2l0aW9uIGxheWVyIGdhaW5lZC9sb3N0IGEgYmFja2lu
ZyBvciB0aGUgcmVhc29uIG5vdCBjb21wb3NpdGluZyBpdCBjaGFuZ2VkLAorICAgIC8vIHRoZSBz
Y3JvbGxpbmcgY29vcmRpbmF0b3IgbmVlZHMgdG8gcmVjYWxjdWxhdGUgd2hldGhlciBpdCBjYW4g
ZG8gZmFzdCBzY3JvbGxpbmcuCisgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuc3R5bGUoKS5wb3Np
dGlvbigpID09IEZpeGVkUG9zaXRpb24pIHsKKyAgICAgICAgaWYgKGxheWVyLnZpZXdwb3J0Q29u
c3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKCkgIT0gdmlld3BvcnRDb25zdHJhaW5lZE5vdENv
bXBvc2l0ZWRSZWFzb24pIHsKKyAgICAgICAgICAgIGxheWVyLnNldFZpZXdwb3J0Q29uc3RyYWlu
ZWROb3RDb21wb3NpdGVkUmVhc29uKHZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVh
c29uKTsKKyAgICAgICAgICAgIGxheWVyQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGxheWVyQ2hhbmdlZCkgeworICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
CisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld0ZpeGVkT2Jq
ZWN0c0RpZENoYW5nZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkpOworICAgICAgICB9CisgICAg
fSBlbHNlCisgICAgICAgIGxheWVyLnNldFZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVk
UmVhc29uKFJlbmRlckxheWVyOjpOb05vdENvbXBvc2l0ZWRSZWFzb24pOworICAgIAorICAgIGlm
IChsYXllci5iYWNraW5nKCkpCisgICAgICAgIGxheWVyLmJhY2tpbmcoKS0+dXBkYXRlRGVidWdJ
bmRpY2F0b3JzKG1fc2hvd0RlYnVnQm9yZGVycywgbV9zaG93UmVwYWludENvdW50ZXIpOworCisg
ICAgcmV0dXJuIGxheWVyQ2hhbmdlZDsKK30KKworYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnVwZGF0ZUxheWVyQ29tcG9zaXRpbmdTdGF0ZShSZW5kZXJMYXllciYgbGF5ZXIsIENvbXBvc2l0
aW5nQ2hhbmdlUmVwYWludCBzaG91bGRSZXBhaW50KQoreworICAgIGJvb2wgbGF5ZXJDaGFuZ2Vk
ID0gdXBkYXRlQmFja2luZyhsYXllciwgc2hvdWxkUmVwYWludCk7CisKKyAgICAvLyBTZWUgaWYg
d2UgbmVlZCBjb250ZW50IG9yIGNsaXBwaW5nIGxheWVycy4gTWV0aG9kcyBjYWxsZWQgaGVyZSBz
aG91bGQgYXNzdW1lCisgICAgLy8gdGhhdCB0aGUgY29tcG9zaXRpbmcgc3RhdGUgb2YgZGVzY2Vu
ZGFudCBsYXllcnMgaGFzIG5vdCBiZWVuIHVwZGF0ZWQgeWV0LgorICAgIGlmIChsYXllci5iYWNr
aW5nKCkgJiYgbGF5ZXIuYmFja2luZygpLT51cGRhdGVDb25maWd1cmF0aW9uKCkpCisgICAgICAg
IGxheWVyQ2hhbmdlZCA9IHRydWU7CisKKyAgICByZXR1cm4gbGF5ZXJDaGFuZ2VkOworfQorCit2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVwYWludE9uQ29tcG9zaXRpbmdDaGFuZ2UoUmVu
ZGVyTGF5ZXImIGxheWVyKQoreworICAgIC8vIElmIHRoZSByZW5kZXJlciBpcyBub3QgYXR0YWNo
ZWQgeWV0LCBubyBuZWVkIHRvIHJlcGFpbnQuCisgICAgaWYgKCZsYXllci5yZW5kZXJlcigpICE9
ICZtX3JlbmRlclZpZXcgJiYgIWxheWVyLnJlbmRlcmVyKCkucGFyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSBs
YXllci5yZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICBpZiAoIXJlcGFpbnRD
b250YWluZXIpCisgICAgICAgIHJlcGFpbnRDb250YWluZXIgPSAmbV9yZW5kZXJWaWV3OworCisg
ICAgbGF5ZXIucmVwYWludEluY2x1ZGluZ05vbkNvbXBvc2l0aW5nRGVzY2VuZGFudHMocmVwYWlu
dENvbnRhaW5lcik7CisgICAgaWYgKHJlcGFpbnRDb250YWluZXIgPT0gJm1fcmVuZGVyVmlldykg
eworICAgICAgICAvLyBUaGUgY29udGVudHMgb2YgdGhpcyBsYXllciBtYXkgYmUgbW92aW5nIGJl
dHdlZW4gdGhlIHdpbmRvdworICAgICAgICAvLyBhbmQgYSBHcmFwaGljc0xheWVyLCBzbyB3ZSBu
ZWVkIHRvIG1ha2Ugc3VyZSB0aGUgd2luZG93IHN5c3RlbQorICAgICAgICAvLyBzeW5jaHJvbml6
ZXMgdGhvc2UgY2hhbmdlcyBvbiB0aGUgc2NyZWVuLgorICAgICAgICBtX3JlbmRlclZpZXcuZnJh
bWVWaWV3KCkuc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpOworICAgIH0K
K30KKworLy8gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IGxheW91dCBpcyB1cC10by1kYXRlLCB1
bmxpa2UgcmVwYWludE9uQ29tcG9zaXRpbmdDaGFuZ2UoKS4KK3ZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZXBhaW50SW5Db21wb3NpdGVkQW5jZXN0b3IoUmVuZGVyTGF5ZXImIGxheWVyLCBj
b25zdCBMYXlvdXRSZWN0JiByZWN0KQoreworICAgIFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5j
ZXN0b3IgPSBsYXllci5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyRm9yUmVwYWludChFeGNsdWRl
U2VsZik7CisgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3RvcikgeworICAgICAgICBBU1NFUlQoY29t
cG9zaXRlZEFuY2VzdG9yLT5iYWNraW5nKCkpOworICAgICAgICBMYXlvdXRSZWN0IHJlcGFpbnRS
ZWN0ID0gcmVjdDsKKyAgICAgICAgcmVwYWludFJlY3QubW92ZShsYXllci5vZmZzZXRGcm9tQW5j
ZXN0b3IoY29tcG9zaXRlZEFuY2VzdG9yKSk7CisgICAgICAgIGNvbXBvc2l0ZWRBbmNlc3Rvci0+
c2V0QmFja2luZ05lZWRzUmVwYWludEluUmVjdChyZXBhaW50UmVjdCk7CisgICAgfQorCisgICAg
Ly8gVGhlIGNvbnRlbnRzIG9mIHRoaXMgbGF5ZXIgbWF5IGJlIG1vdmluZyBmcm9tIGEgR3JhcGhp
Y3NMYXllciB0byB0aGUgd2luZG93LAorICAgIC8vIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRo
ZSB3aW5kb3cgc3lzdGVtIHN5bmNocm9uaXplcyB0aG9zZSBjaGFuZ2VzIG9uIHRoZSBzY3JlZW4u
CisgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3RvciA9PSBtX3JlbmRlclZpZXcubGF5ZXIoKSkKKyAg
ICAgICAgbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5j
aHJvbml6YXRpb24oKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyV2Fz
QWRkZWQoUmVuZGVyTGF5ZXImLCBSZW5kZXJMYXllciYpCit7CisgICAgc2V0Q29tcG9zaXRpbmdM
YXllcnNOZWVkUmVidWlsZCgpOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5
ZXJXaWxsQmVSZW1vdmVkKFJlbmRlckxheWVyJiBwYXJlbnQsIFJlbmRlckxheWVyJiBjaGlsZCkK
K3sKKyAgICBpZiAoIWNoaWxkLmlzQ29tcG9zaXRlZCgpIHx8IHBhcmVudC5yZW5kZXJlcigpLnJl
bmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICByZW1vdmVG
cm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMoY2hpbGQpOworICAgIHJlcGFpbnRJbkNvbXBvc2l0
ZWRBbmNlc3RvcihjaGlsZCwgY2hpbGQuYmFja2luZygpLT5jb21wb3NpdGVkQm91bmRzKCkpOwor
CisgICAgc2V0Q29tcG9zaXRpbmdQYXJlbnQoY2hpbGQsIG51bGxwdHIpOworICAgIHNldENvbXBv
c2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsKK30KKworUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6ZW5jbG9zaW5nTm9uU3RhY2tpbmdDbGlwcGluZ0xheWVyKGNvbnN0IFJlbmRl
ckxheWVyJiBsYXllcikgY29uc3QKK3sKKyAgICBmb3IgKFJlbmRlckxheWVyKiBwYXJlbnQgPSBs
YXllci5wYXJlbnQoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudCgpKSB7CisgICAg
ICAgIGlmIChwYXJlbnQtPmlzU3RhY2tpbmdDb250YWluZXIoKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICBpZiAocGFyZW50LT5yZW5kZXJlcigpLmhhc0NsaXBPck92ZXJm
bG93Q2xpcCgpKQorICAgICAgICAgICAgcmV0dXJuIHBhcmVudDsKKyAgICB9CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlRXh0ZW50
KGNvbnN0IE92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwg
T3ZlcmxhcEV4dGVudCYgZXh0ZW50KSBjb25zdAoreworICAgIGlmIChleHRlbnQuZXh0ZW50Q29t
cHV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7Cisg
ICAgaWYgKGV4dGVudC5oYXNUcmFuc2Zvcm1BbmltYXRpb24pCisgICAgICAgIGV4dGVudC5hbmlt
YXRpb25DYXVzZXNFeHRlbnRVbmNlcnRhaW50eSA9ICFsYXllci5nZXRPdmVybGFwQm91bmRzSW5j
bHVkaW5nQ2hpbGRyZW5BY2NvdW50aW5nRm9yVHJhbnNmb3JtQW5pbWF0aW9ucyhsYXllckJvdW5k
cyk7CisgICAgZWxzZQorICAgICAgICBsYXllckJvdW5kcyA9IGxheWVyLm92ZXJsYXBCb3VuZHMo
KTsKKyAgICAKKyAgICAvLyBJbiB0aGUgYW5pbWF0aW5nIHRyYW5zZm9ybSBjYXNlLCB3ZSBhdm9p
ZCBkb3VibGUtYWNjb3VudGluZyBmb3IgdGhlIHRyYW5zZm9ybSBiZWNhdXNlCisgICAgLy8gd2Ug
dG9sZCBwdXNoTWFwcGluZ3NUb0FuY2VzdG9yKCkgdG8gaWdub3JlIHRyYW5zZm9ybXMgZWFybGll
ci4KKyAgICBleHRlbnQuYm91bmRzID0gZW5jbG9zaW5nTGF5b3V0UmVjdChvdmVybGFwTWFwLmdl
b21ldHJ5TWFwKCkuYWJzb2x1dGVSZWN0KGxheWVyQm91bmRzKSk7CisKKyAgICAvLyBFbXB0eSBy
ZWN0cyBuZXZlciBpbnRlcnNlY3QsIGJ1dCB3ZSBuZWVkIHRoZW0gdG8gZm9yIHRoZSBwdXJwb3Nl
cyBvZiBvdmVybGFwIHRlc3RpbmcuCisgICAgaWYgKGV4dGVudC5ib3VuZHMuaXNFbXB0eSgpKQor
ICAgICAgICBleHRlbnQuYm91bmRzLnNldFNpemUoTGF5b3V0U2l6ZSgxLCAxKSk7CisKKworICAg
IFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyID0gbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBpZiAocmVuZGVyZXIuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgcmVuZGVyZXIuc3R5bGUo
KS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gJiYgcmVuZGVyZXIuY29udGFpbmVyKCkgPT0g
Jm1fcmVuZGVyVmlldykgeworICAgICAgICAvLyBCZWNhdXNlIGZpeGVkIGVsZW1lbnRzIGdldCBt
b3ZlZCBhcm91bmQgd2l0aG91dCByZS1jb21wdXRpbmcgb3ZlcmxhcCwgd2UgaGF2ZSB0byBjb21w
dXRlIGFuIG92ZXJsYXAKKyAgICAgICAgLy8gcmVjdCB0aGF0IGNvdmVycyBhbGwgdGhlIGxvY2F0
aW9ucyB0aGF0IHRoZSBmaXhlZCBlbGVtZW50IGNvdWxkIG1vdmUgdG8uCisgICAgICAgIC8vIEZJ
WE1FOiBuZWVkIHRvIGhhbmRsZSBzdGlja3kgdG9vLgorICAgICAgICBleHRlbnQuYm91bmRzID0g
bV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZpeGVkU2Nyb2xsYWJsZUFyZWFCb3VuZHNJbmZsYXRl
ZEZvclNjcm9sbGluZyhleHRlbnQuYm91bmRzKTsKKyAgICB9CisKKyAgICBleHRlbnQuZXh0ZW50
Q29tcHV0ZWQgPSB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9P
dmVybGFwTWFwKE92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIGNvbnN0IFJlbmRlckxheWVyJiBsYXll
ciwgT3ZlcmxhcEV4dGVudCYgZXh0ZW50KQoreworICAgIGlmIChsYXllci5pc1Jvb3RMYXllcigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBjb21wdXRlRXh0ZW50KG92ZXJsYXBNYXAsIGxheWVy
LCBleHRlbnQpOworCisgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGxheWVyLmJhY2tncm91bmRD
bGlwUmVjdChSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dCgmcm9vdFJlbmRlckxheWVyKCks
IEFic29sdXRlQ2xpcFJlY3RzKSkucmVjdCgpOyAvLyBGSVhNRTogSW5jb3JyZWN0IGZvciBDU1Mg
cmVnaW9ucy4KKworICAgIC8vIE9uIGlPUywgcGFnZVNjYWxlRmFjdG9yKCkgaXMgbm90IGFwcGxp
ZWQgYnkgUmVuZGVyVmlldywgc28gd2Ugc2hvdWxkIG5vdCBzY2FsZSBoZXJlLgorICAgIGlmICgh
bV9yZW5kZXJWaWV3LnNldHRpbmdzKCkuZGVsZWdhdGVzUGFnZVNjYWxpbmcoKSkKKyAgICAgICAg
Y2xpcFJlY3Quc2NhbGUocGFnZVNjYWxlRmFjdG9yKCkpOworICAgIGNsaXBSZWN0LmludGVyc2Vj
dChleHRlbnQuYm91bmRzKTsKKyAgICBvdmVybGFwTWFwLmFkZChjbGlwUmVjdCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXBSZWN1cnNpdmUoT3Zlcmxh
cE1hcCYgb3ZlcmxhcE1hcCwgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJM
YXllciogYW5jZXN0b3JMYXllcikKK3sKKyAgICBpZiAoIWNhbkJlQ29tcG9zaXRlZChsYXllcikp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEEgbnVsbCBhbmNlc3RvckxheWVyIGlzIGFuIGlu
ZGljYXRpb24gdGhhdCAnbGF5ZXInIGhhcyBhbHJlYWR5IGJlZW4gcHVzaGVkLgorICAgIGlmIChh
bmNlc3RvckxheWVyKQorICAgICAgICBvdmVybGFwTWFwLmdlb21ldHJ5TWFwKCkucHVzaE1hcHBp
bmdzVG9BbmNlc3RvcigmbGF5ZXIsIGFuY2VzdG9yTGF5ZXIpOworICAgIAorICAgIE92ZXJsYXBF
eHRlbnQgbGF5ZXJFeHRlbnQ7CisgICAgYWRkVG9PdmVybGFwTWFwKG92ZXJsYXBNYXAsIGxheWVy
LCBsYXllckV4dGVudCk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgTGF5ZXJMaXN0TXV0
YXRpb25EZXRlY3RvciBtdXRhdGlvbkNoZWNrZXIoY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KCZs
YXllcikpOworI2VuZGlmCisKKyAgICBpZiAobGF5ZXIuaXNTdGFja2luZ0NvbnRhaW5lcigpKSB7
CisgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlzdCA9IGxheWVy
Lm5lZ1pPcmRlckxpc3QoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvKiByZW5kZXJMYXllciA6
ICpuZWdaT3JkZXJMaXN0KQorICAgICAgICAgICAgICAgIGFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2
ZShvdmVybGFwTWFwLCAqcmVuZGVyTGF5ZXIsICZsYXllcik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIG5vcm1hbEZsb3dMaXN0ID0gbGF5ZXIubm9y
bWFsRmxvd0xpc3QoKSkgeworICAgICAgICBmb3IgKGF1dG8qIHJlbmRlckxheWVyIDogKm5vcm1h
bEZsb3dMaXN0KQorICAgICAgICAgICAgYWRkVG9PdmVybGFwTWFwUmVjdXJzaXZlKG92ZXJsYXBN
YXAsICpyZW5kZXJMYXllciwgJmxheWVyKTsKKyAgICB9CisKKyAgICBpZiAobGF5ZXIuaXNTdGFj
a2luZ0NvbnRhaW5lcigpKSB7CisgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogcG9z
Wk9yZGVyTGlzdCA9IGxheWVyLnBvc1pPcmRlckxpc3QoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvKiByZW5kZXJMYXllciA6ICpwb3NaT3JkZXJMaXN0KQorICAgICAgICAgICAgICAgIGFkZFRv
T3ZlcmxhcE1hcFJlY3Vyc2l2ZShvdmVybGFwTWFwLCAqcmVuZGVyTGF5ZXIsICZsYXllcik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKGFuY2VzdG9yTGF5ZXIpCisgICAgICAgIG92
ZXJsYXBNYXAuZ2VvbWV0cnlNYXAoKS5wb3BNYXBwaW5nc1RvQW5jZXN0b3IoYW5jZXN0b3JMYXll
cik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdS
ZXF1aXJlbWVudHNGb3JOYW1lZEZsb3dGaXhlZChSZW5kZXJMYXllciYgbGF5ZXIsIE92ZXJsYXBN
YXAmIG92ZXJsYXBNYXAsIENvbXBvc2l0aW5nU3RhdGUmIGNoaWxkU3RhdGUsIGJvb2wmIGxheWVy
c0NoYW5nZWQsIGJvb2wmIGFueURlc2NlbmRhbnRIYXMzRFRyYW5zZm9ybSkKK3sKKyAgICBpZiAo
IWxheWVyLmlzUm9vdExheWVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbGF5ZXIu
cmVuZGVyZXIoKS52aWV3KCkuaGFzUmVuZGVyTmFtZWRGbG93VGhyZWFkcygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiBmaXhlZExheWVyczsKKyAgICBsYXll
ci5yZW5kZXJlcigpLnZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxlcigpLmNvbGxlY3RGaXhlZFBv
c2l0aW9uZWRMYXllcnMoZml4ZWRMYXllcnMpOworCisgICAgZm9yIChhdXRvKiBmaXhlZExheWVy
IDogZml4ZWRMYXllcnMpCisgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cygm
bGF5ZXIsICpmaXhlZExheWVyLCBvdmVybGFwTWFwLCBjaGlsZFN0YXRlLCBsYXllcnNDaGFuZ2Vk
LCBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pOworfQorCisvLyAgUmVjdXJzZSB0aHJvdWdo
IHRoZSBsYXllcnMgaW4gei1pbmRleCBhbmQgb3ZlcmZsb3cgb3JkZXIgKHdoaWNoIGlzIGVxdWl2
YWxlbnQgdG8gcGFpbnRpbmcgb3JkZXIpCisvLyAgRm9yIHRoZSB6LW9yZGVyIGNoaWxkcmVuIG9m
IGEgY29tcG9zaXRpbmcgbGF5ZXI6CisvLyAgICAgIElmIGEgY2hpbGQgbGF5ZXJzIGhhcyBhIGNv
bXBvc2l0aW5nIGxheWVyLCB0aGVuIGFsbCBzdWJzZXF1ZW50IGxheWVycyBtdXN0CisvLyAgICAg
IGJlIGNvbXBvc2l0aW5nIGluIG9yZGVyIHRvIHJlbmRlciBhYm92ZSB0aGF0IGxheWVyLgorLy8K
Ky8vICAgICAgSWYgYSBjaGlsZCBpbiB0aGUgbmVnYXRpdmUgei1vcmRlciBsaXN0IGlzIGNvbXBv
c2l0aW5nLCB0aGVuIHRoZSBsYXllciBpdHNlbGYKKy8vICAgICAgbXVzdCBiZSBjb21wb3NpdGlu
ZyBzbyB0aGF0IGl0cyBjb250ZW50cyByZW5kZXIgb3ZlciB0aGF0IGNoaWxkLgorLy8gICAgICBU
aGlzIGltcGxpZXMgdGhhdCBpdHMgcG9zaXRpdmUgei1pbmRleCBjaGlsZHJlbiBtdXN0IGFsc28g
YmUgY29tcG9zaXRpbmcuCisvLwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVD
b21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgUmVuZGVy
TGF5ZXImIGxheWVyLCBPdmVybGFwTWFwJiBvdmVybGFwTWFwLCBDb21wb3NpdGluZ1N0YXRlJiBj
b21wb3NpdGluZ1N0YXRlLCBib29sJiBsYXllcnNDaGFuZ2VkLCBib29sJiBkZXNjZW5kYW50SGFz
M0RUcmFuc2Zvcm0pCit7CisgICAgbGF5ZXIudXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdz
KCk7CisgICAgbGF5ZXIudXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CisKKyAgICBpZiAobGF5
ZXIuaXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpIHsK
KyAgICAgICAgYXV0byYgZmxvd1RocmVhZCA9IGRvd25jYXN0PFJlbmRlckZsb3dUaHJlYWQ+KGxh
eWVyLnJlbmRlcmVyKCkpOworICAgICAgICBsYXllci5zZXRIYXNDb21wb3NpdGluZ0Rlc2NlbmRh
bnQoZmxvd1RocmVhZC5oYXNDb21wb3NpdGluZ1JlZ2lvbkRlc2NlbmRhbnQoKSk7CisKKyAgICAg
ICAgLy8gQmVmb3JlIHJldHVybmluZywgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGxpc3RzIG9mIGFs
bCBjaGlsZCBsYXllcnMuIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSwKKyAgICAgICAgLy8gaWYg
dGhpcyBmbG93IHRocmVhZCB3aWxsIG5vdCBiZSBwYWludGVkIChmb3IgaW5zdGFuY2UgYmVjYXVz
ZSBvZiBoYXZpbmcgbm8gcmVnaW9ucywgb3Igb25seSBpbnZhbGlkIHJlZ2lvbnMpLAorICAgICAg
ICAvLyB0aGUgY2hpbGQgbGF5ZXJzIHdpbGwgbmV2ZXIgaGF2ZSB0aGVpciBsaXN0cyB1cGRhdGVk
ICh3aGljaCB3b3VsZCBub3JtYWxseSBoYXBwZW4gZHVyaW5nIHBhaW50aW5nKS4KKyAgICAgICAg
bGF5ZXIudXBkYXRlRGVzY2VuZGFudHNMYXllckxpc3RzSWZOZWVkZWQodHJ1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDbGVhciB0aGUgZmxhZworICAgIGxheWVyLnNldEhh
c0NvbXBvc2l0aW5nRGVzY2VuZGFudChmYWxzZSk7CisgICAgbGF5ZXIuc2V0SW5kaXJlY3RDb21w
b3NpdGluZ1JlYXNvbihSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6Tm9u
ZSk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgbGF5ZXIgbmVlZHMgdG8gYmUgY29tcG9zaXRlZCBm
b3IgZGlyZWN0IHJlYXNvbnMgKGUuZy4gM0QgdHJhbnNmb3JtKS4KKyAgICBib29sIHdpbGxCZUNv
bXBvc2l0ZWQgPSBuZWVkc1RvQmVDb21wb3NpdGVkKGxheWVyKTsKKworICAgIE92ZXJsYXBFeHRl
bnQgbGF5ZXJFeHRlbnQ7CisgICAgLy8gVXNlIHRoZSBmYWN0IHRoYXQgd2UncmUgY29tcG9zaXRl
ZCBhcyBhIGhpbnQgdG8gY2hlY2sgZm9yIGFuIGFuaW1hdGluZyB0cmFuc2Zvcm0uCisgICAgLy8g
RklYTUU6IE1heWJlIG5lZWRzVG9CZUNvbXBvc2l0ZWQoKSBzaG91bGQgcmV0dXJuIGEgYml0bWFz
ayBvZiByZWFzb25zLCB0byBhdm9pZCB0aGUgbmVlZCB0byByZWNvbXB1dGUgdGhpbmdzLgorICAg
IGlmICh3aWxsQmVDb21wb3NpdGVkICYmICFsYXllci5pc1Jvb3RMYXllcigpKQorICAgICAgICBs
YXllckV4dGVudC5oYXNUcmFuc2Zvcm1BbmltYXRpb24gPSBpc1J1bm5pbmdUcmFuc2Zvcm1Bbmlt
YXRpb24obGF5ZXIucmVuZGVyZXIoKSk7CisKKyAgICBib29sIHJlc3BlY3RUcmFuc2Zvcm1zID0g
IWxheWVyRXh0ZW50Lmhhc1RyYW5zZm9ybUFuaW1hdGlvbjsKKyAgICBvdmVybGFwTWFwLmdlb21l
dHJ5TWFwKCkucHVzaE1hcHBpbmdzVG9BbmNlc3RvcigmbGF5ZXIsIGFuY2VzdG9yTGF5ZXIsIHJl
c3BlY3RUcmFuc2Zvcm1zKTsKKworICAgIFJlbmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5n
UmVhc29uIGNvbXBvc2l0aW5nUmVhc29uID0gY29tcG9zaXRpbmdTdGF0ZS5zdWJ0cmVlSXNDb21w
b3NpdGluZyA/IFJlbmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpTdGFja2lu
ZyA6IFJlbmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lOworCisgICAg
Ly8gSWYgd2Uga25vdyBmb3Igc3VyZSB0aGUgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgY29tcG9zaXRl
ZCwgZG9uJ3QgYm90aGVyIGxvb2tpbmcgaXQgdXAgaW4gdGhlIG92ZXJsYXAgbWFwCisgICAgaWYg
KCF3aWxsQmVDb21wb3NpdGVkICYmICFvdmVybGFwTWFwLmlzRW1wdHkoKSAmJiBjb21wb3NpdGlu
Z1N0YXRlLnRlc3RpbmdPdmVybGFwKSB7CisgICAgICAgIGNvbXB1dGVFeHRlbnQob3ZlcmxhcE1h
cCwgbGF5ZXIsIGxheWVyRXh0ZW50KTsKKyAgICAgICAgLy8gSWYgd2UncmUgdGVzdGluZyBmb3Ig
b3ZlcmxhcCwgd2Ugb25seSBuZWVkIHRvIGNvbXBvc2l0ZSBpZiB3ZSBvdmVybGFwIHNvbWV0aGlu
ZyB0aGF0IGlzIGFscmVhZHkgY29tcG9zaXRlZC4KKyAgICAgICAgY29tcG9zaXRpbmdSZWFzb24g
PSBvdmVybGFwTWFwLm92ZXJsYXBzTGF5ZXJzKGxheWVyRXh0ZW50LmJvdW5kcykgPyBSZW5kZXJM
YXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6T3ZlcmxhcCA6IFJlbmRlckxheWVyOjpJ
bmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lOworICAgIH0KKworI2lmIEVOQUJMRShWSURF
TykKKyAgICAvLyBWaWRlbyBpcyBzcGVjaWFsLiBJdCdzIHRoZSBvbmx5IFJlbmRlckxheWVyIHR5
cGUgdGhhdCBjYW4gYm90aCBoYXZlCisgICAgLy8gUmVuZGVyTGF5ZXIgY2hpbGRyZW4gYW5kIHdo
b3NlIGNoaWxkcmVuIGNhbid0IHVzZSBpdHMgYmFja2luZyB0byByZW5kZXIKKyAgICAvLyBpbnRv
LiBUaGVzZSBjaGlsZHJlbiAodGhlIGNvbnRyb2xzKSBhbHdheXMgbmVlZCB0byBiZSBwcm9tb3Rl
ZCBpbnRvIHRoZWlyCisgICAgLy8gb3duIGxheWVycyB0byBkcmF3IG9uIHRvcCBvZiB0aGUgYWNj
ZWxlcmF0ZWQgdmlkZW8uCisgICAgaWYgKGNvbXBvc2l0aW5nU3RhdGUuY29tcG9zaXRpbmdBbmNl
c3RvciAmJiBjb21wb3NpdGluZ1N0YXRlLmNvbXBvc2l0aW5nQW5jZXN0b3ItPnJlbmRlcmVyKCku
aXNWaWRlbygpKQorICAgICAgICBjb21wb3NpdGluZ1JlYXNvbiA9IFJlbmRlckxheWVyOjpJbmRp
cmVjdENvbXBvc2l0aW5nUmVhc29uOjpPdmVybGFwOworI2VuZGlmCisKKyAgICBsYXllci5zZXRJ
bmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKGNvbXBvc2l0aW5nUmVhc29uKTsKKworICAgIC8vIENo
ZWNrIGlmIHRoZSBjb21wdXRlZCBpbmRpcmVjdCByZWFzb24gd2lsbCBmb3JjZSB0aGUgbGF5ZXIg
dG8gYmVjb21lIGNvbXBvc2l0ZWQuCisgICAgaWYgKCF3aWxsQmVDb21wb3NpdGVkICYmIGxheWVy
Lm11c3RDb21wb3NpdGVGb3JJbmRpcmVjdFJlYXNvbnMoKSAmJiBjYW5CZUNvbXBvc2l0ZWQobGF5
ZXIpKQorICAgICAgICB3aWxsQmVDb21wb3NpdGVkID0gdHJ1ZTsKKyAgICBBU1NFUlQod2lsbEJl
Q29tcG9zaXRlZCA9PSBuZWVkc1RvQmVDb21wb3NpdGVkKGxheWVyKSk7CisKKyAgICAvLyBUaGUg
Y2hpbGRyZW4gb2YgdGhpcyBsYXllciBkb24ndCBuZWVkIHRvIGNvbXBvc2l0ZSwgdW5sZXNzIHRo
ZXJlIGlzCisgICAgLy8gYSBjb21wb3NpdGluZyBsYXllciBhbW9uZyB0aGVtLCBzbyBzdGFydCBi
eSBpbmhlcml0aW5nIHRoZSBjb21wb3NpdGluZworICAgIC8vIGFuY2VzdG9yIHdpdGggc3VidHJl
ZUlzQ29tcG9zaXRpbmcgc2V0IHRvIGZhbHNlLgorICAgIENvbXBvc2l0aW5nU3RhdGUgY2hpbGRT
dGF0ZShjb21wb3NpdGluZ1N0YXRlKTsKKyAgICBjaGlsZFN0YXRlLnN1YnRyZWVJc0NvbXBvc2l0
aW5nID0gZmFsc2U7CisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICBjaGlsZFN0YXRl
Lmhhc05vdElzb2xhdGVkQ29tcG9zaXRlZEJsZW5kaW5nRGVzY2VuZGFudHMgPSBmYWxzZTsKKyNl
bmRpZgorCisgICAgaWYgKHdpbGxCZUNvbXBvc2l0ZWQpIHsKKyAgICAgICAgLy8gVGVsbCB0aGUg
cGFyZW50IGl0IGhhcyBjb21wb3NpdGluZyBkZXNjZW5kYW50cy4KKyAgICAgICAgY29tcG9zaXRp
bmdTdGF0ZS5zdWJ0cmVlSXNDb21wb3NpdGluZyA9IHRydWU7CisgICAgICAgIC8vIFRoaXMgbGF5
ZXIgbm93IGFjdHMgYXMgdGhlIGFuY2VzdG9yIGZvciBraWRzLgorICAgICAgICBjaGlsZFN0YXRl
LmNvbXBvc2l0aW5nQW5jZXN0b3IgPSAmbGF5ZXI7CisKKyAgICAgICAgb3ZlcmxhcE1hcC5wdXNo
Q29tcG9zaXRpbmdDb250YWluZXIoKTsKKyAgICAgICAgLy8gVGhpcyBsYXllciBpcyBnb2luZyB0
byBiZSBjb21wb3NpdGVkLCBzbyBjaGlsZHJlbiBjYW4gc2FmZWx5IGlnbm9yZSB0aGUgZmFjdCB0
aGF0IHRoZXJlJ3MgYW4gCisgICAgICAgIC8vIGFuaW1hdGlvbiBydW5uaW5nIGJlaGluZCB0aGlz
IGxheWVyLCBtZWFuaW5nIHRoZXkgY2FuIHJlbHkgb24gdGhlIG92ZXJsYXAgbWFwIHRlc3Rpbmcg
YWdhaW4uCisgICAgICAgIGNoaWxkU3RhdGUudGVzdGluZ092ZXJsYXAgPSB0cnVlOworCisgICAg
ICAgIGNvbXB1dGVFeHRlbnQob3ZlcmxhcE1hcCwgbGF5ZXIsIGxheWVyRXh0ZW50KTsKKyAgICAg
ICAgY2hpbGRTdGF0ZS5hbmNlc3Rvckhhc1RyYW5zZm9ybUFuaW1hdGlvbiB8PSBsYXllckV4dGVu
dC5oYXNUcmFuc2Zvcm1BbmltYXRpb247CisgICAgICAgIC8vIFRvbyBoYXJkIHRvIGNvbXB1dGUg
YW5pbWF0ZWQgYm91bmRzIGlmIGJvdGggdXMgYW5kIHNvbWUgYW5jZXN0b3IgaXMgYW5pbWF0aW5n
IHRyYW5zZm9ybS4KKyAgICAgICAgbGF5ZXJFeHRlbnQuYW5pbWF0aW9uQ2F1c2VzRXh0ZW50VW5j
ZXJ0YWludHkgfD0gbGF5ZXJFeHRlbnQuaGFzVHJhbnNmb3JtQW5pbWF0aW9uICYmIGNvbXBvc2l0
aW5nU3RhdGUuYW5jZXN0b3JIYXNUcmFuc2Zvcm1BbmltYXRpb247CisgICAgfQorCisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIExheWVyTGlzdE11dGF0aW9uRGV0ZWN0b3IgbXV0YXRpb25DaGVj
a2VyKCZsYXllcik7CisjZW5kaWYKKworICAgIGJvb2wgYW55RGVzY2VuZGFudEhhczNEVHJhbnNm
b3JtID0gZmFsc2U7CisKKyAgICBpZiAobGF5ZXIuaXNTdGFja2luZ0NvbnRhaW5lcigpKSB7Cisg
ICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlzdCA9IGxheWVyLm5l
Z1pPcmRlckxpc3QoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvKiByZW5kZXJMYXllciA6ICpu
ZWdaT3JkZXJMaXN0KSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZUNvbXBvc2l0aW5nUmVxdWly
ZW1lbnRzKCZsYXllciwgKnJlbmRlckxheWVyLCBvdmVybGFwTWFwLCBjaGlsZFN0YXRlLCBsYXll
cnNDaGFuZ2VkLCBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pOworCisgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgaGF2ZSB0byBtYWtlIGEgbGF5ZXIgZm9yIHRoaXMgY2hpbGQsIG1ha2Ugb25l
IG5vdyBzbyB3ZSBjYW4gaGF2ZSBhIGNvbnRlbnRzIGxheWVyCisgICAgICAgICAgICAgICAgLy8g
KHNpbmNlIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIC12ZSB6LW9yZGVyIGNoaWxkIHJlbmRl
cnMgdW5kZXJuZWF0aCBvdXIgY29udGVudHMpLgorICAgICAgICAgICAgICAgIGlmICghd2lsbEJl
Q29tcG9zaXRlZCAmJiBjaGlsZFN0YXRlLnN1YnRyZWVJc0NvbXBvc2l0aW5nKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIG1ha2UgbGF5ZXIgY29tcG9zaXRpbmcKKyAgICAgICAgICAgICAgICAg
ICAgbGF5ZXIuc2V0SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihSZW5kZXJMYXllcjo6SW5kaXJl
Y3RDb21wb3NpdGluZ1JlYXNvbjo6QmFja2dyb3VuZExheWVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgY2hpbGRTdGF0ZS5jb21wb3NpdGluZ0FuY2VzdG9yID0gJmxheWVyOworICAgICAgICAgICAg
ICAgICAgICBvdmVybGFwTWFwLnB1c2hDb21wb3NpdGluZ0NvbnRhaW5lcigpOworICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGxheWVyIGlzIGdvaW5nIHRvIGJlIGNvbXBvc2l0ZWQsIHNvIGNo
aWxkcmVuIGNhbiBzYWZlbHkgaWdub3JlIHRoZSBmYWN0IHRoYXQgdGhlcmUncyBhbiAKKyAgICAg
ICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIHJ1bm5pbmcgYmVoaW5kIHRoaXMgbGF5ZXIsIG1l
YW5pbmcgdGhleSBjYW4gcmVseSBvbiB0aGUgb3ZlcmxhcCBtYXAgdGVzdGluZyBhZ2FpbgorICAg
ICAgICAgICAgICAgICAgICBjaGlsZFN0YXRlLnRlc3RpbmdPdmVybGFwID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgd2lsbEJlQ29tcG9zaXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxheWVyLnJlbmRl
cmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKSB7CisgICAgICAgIC8v
IFdlIGFyZSBnb2luZyB0byBjb2xsZWN0IGxheWVycyBmcm9tIHRoZSBSZW5kZXJGbG93VGhyZWFk
IGludG8gdGhlIEdyYXBoaWNzTGF5ZXIgb2YgdGhlIHBhcmVudCBvZiB0aGUKKyAgICAgICAgLy8g
YW5vbnltb3VzIFJlbmRlclJlZ2lvbiwgYnV0IGZpcnN0IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRo
YXQgdGhlIHBhcmVudCBpdHNlbGYgb2YgdGhlIHJlZ2lvbiBpcyBnb2luZyB0bworICAgICAgICAv
LyBoYXZlIGEgY29tcG9zaXRlZCBsYXllci4gV2Ugb25seSB3YW50IHRvIG1ha2UgcmVnaW9ucyBj
b21wb3NpdGVkIHdoZW4gdGhlcmUncyBhbiBhY3R1YWwgbGF5ZXIgdGhhdCB3ZQorICAgICAgICAv
LyBuZWVkIHRvIG1vdmUgdG8gdGhhdCByZWdpb24uCisgICAgICAgIGNvbXB1dGVSZWdpb25Db21w
b3NpdGluZ1JlcXVpcmVtZW50cyhkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KGxheWVyLnJlbmRl
cmVyKCkpLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCksIG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUs
IGxheWVyc0NoYW5nZWQsIGFueURlc2NlbmRhbnRIYXMzRFRyYW5zZm9ybSk7CisgICAgfQorCisg
ICAgCisgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBub3JtYWxGbG93TGlzdCA9IGxheWVy
Lm5vcm1hbEZsb3dMaXN0KCkpIHsKKyAgICAgICAgZm9yIChhdXRvKiByZW5kZXJMYXllciA6ICpu
b3JtYWxGbG93TGlzdCkKKyAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50
cygmbGF5ZXIsICpyZW5kZXJMYXllciwgb3ZlcmxhcE1hcCwgY2hpbGRTdGF0ZSwgbGF5ZXJzQ2hh
bmdlZCwgYW55RGVzY2VuZGFudEhhczNEVHJhbnNmb3JtKTsKKyAgICB9CisKKyAgICBpZiAobGF5
ZXIuaXNTdGFja2luZ0NvbnRhaW5lcigpKSB7CisgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5
ZXIqPiogcG9zWk9yZGVyTGlzdCA9IGxheWVyLnBvc1pPcmRlckxpc3QoKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvKiByZW5kZXJMYXllciA6ICpwb3NaT3JkZXJMaXN0KQorICAgICAgICAgICAg
ICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cygmbGF5ZXIsICpyZW5kZXJMYXllciwg
b3ZlcmxhcE1hcCwgY2hpbGRTdGF0ZSwgbGF5ZXJzQ2hhbmdlZCwgYW55RGVzY2VuZGFudEhhczNE
VHJhbnNmb3JtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsYXllci5pc1Jvb3RMYXll
cigpKQorICAgICAgICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHNGb3JOYW1lZEZsb3dG
aXhlZChsYXllciwgb3ZlcmxhcE1hcCwgY2hpbGRTdGF0ZSwgbGF5ZXJzQ2hhbmdlZCwgYW55RGVz
Y2VuZGFudEhhczNEVHJhbnNmb3JtKTsKKworICAgIC8vIElmIHdlIGp1c3QgZW50ZXJlZCBjb21w
b3NpdGluZyBtb2RlLCB0aGUgcm9vdCB3aWxsIGhhdmUgYmVjb21lIGNvbXBvc2l0ZWQgKGFzIGxv
bmcgYXMgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgZW5hYmxlZCkuCisgICAgaWYgKGxheWVy
LmlzUm9vdExheWVyKCkpIHsKKyAgICAgICAgaWYgKGluQ29tcG9zaXRpbmdNb2RlKCkgJiYgbV9o
YXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKQorICAgICAgICAgICAgd2lsbEJlQ29tcG9zaXRlZCA9
IHRydWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVCh3aWxsQmVDb21wb3NpdGVkID09IG5lZWRz
VG9CZUNvbXBvc2l0ZWQobGF5ZXIpKTsKKworICAgIC8vIEFsbCBsYXllcnMgKGV2ZW4gb25lcyB0
aGF0IGFyZW4ndCBiZWluZyBjb21wb3NpdGVkKSBuZWVkIHRvIGdldCBhZGRlZCB0bworICAgIC8v
IHRoZSBvdmVybGFwIG1hcC4gTGF5ZXJzIHRoYXQgZG8gbm90IGNvbXBvc2l0ZSB3aWxsIGRyYXcg
aW50byB0aGVpcgorICAgIC8vIGNvbXBvc2l0aW5nIGFuY2VzdG9yJ3MgYmFja2luZywgYW5kIHNv
IGFyZSBzdGlsbCBjb25zaWRlcmVkIGZvciBvdmVybGFwLgorICAgIC8vIEZJWE1FOiBXaGVuIGxh
eWVyRXh0ZW50IGhhcyB0YWtlbiBhbmltYXRpb24gYm91bmRzIGludG8gYWNjb3VudCwgd2UgYWxz
byBrbm93IHRoYXQgdGhlIGJvdW5kcworICAgIC8vIGluY2x1ZGUgZGVzY2VuZGFudHMsIHNvIHdl
IGRvbid0IG5lZWQgdG8gYWRkIHRoZW0gYWxsIHRvIHRoZSBvdmVybGFwIG1hcC4KKyAgICBpZiAo
Y2hpbGRTdGF0ZS5jb21wb3NpdGluZ0FuY2VzdG9yICYmICFjaGlsZFN0YXRlLmNvbXBvc2l0aW5n
QW5jZXN0b3ItPmlzUm9vdExheWVyKCkpCisgICAgICAgIGFkZFRvT3ZlcmxhcE1hcChvdmVybGFw
TWFwLCBsYXllciwgbGF5ZXJFeHRlbnQpOworCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykK
KyAgICBsYXllci5zZXRIYXNOb3RJc29sYXRlZENvbXBvc2l0ZWRCbGVuZGluZ0Rlc2NlbmRhbnRz
KGNoaWxkU3RhdGUuaGFzTm90SXNvbGF0ZWRDb21wb3NpdGVkQmxlbmRpbmdEZXNjZW5kYW50cyk7
CisgICAgQVNTRVJUKCFsYXllci5oYXNOb3RJc29sYXRlZENvbXBvc2l0ZWRCbGVuZGluZ0Rlc2Nl
bmRhbnRzKCkgfHwgbGF5ZXIuaGFzTm90SXNvbGF0ZWRCbGVuZGluZ0Rlc2NlbmRhbnRzKCkpOwor
I2VuZGlmCisgICAgLy8gTm93IGNoZWNrIGZvciByZWFzb25zIHRvIGJlY29tZSBjb21wb3NpdGVk
IHRoYXQgZGVwZW5kIG9uIHRoZSBzdGF0ZSBvZiBkZXNjZW5kYW50IGxheWVycy4KKyAgICBSZW5k
ZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiBpbmRpcmVjdENvbXBvc2l0aW5nUmVh
c29uOworICAgIGlmICghd2lsbEJlQ29tcG9zaXRlZCAmJiBjYW5CZUNvbXBvc2l0ZWQobGF5ZXIp
CisgICAgICAgICYmIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JJbmRpcmVjdFJlYXNvbihsYXllci5y
ZW5kZXJlcigpLCBjaGlsZFN0YXRlLnN1YnRyZWVJc0NvbXBvc2l0aW5nLCBhbnlEZXNjZW5kYW50
SGFzM0RUcmFuc2Zvcm0sIGluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24pKSB7CisgICAgICAgIGxh
eWVyLnNldEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oaW5kaXJlY3RDb21wb3NpdGluZ1JlYXNv
bik7CisgICAgICAgIGNoaWxkU3RhdGUuY29tcG9zaXRpbmdBbmNlc3RvciA9ICZsYXllcjsKKyAg
ICAgICAgb3ZlcmxhcE1hcC5wdXNoQ29tcG9zaXRpbmdDb250YWluZXIoKTsKKyAgICAgICAgYWRk
VG9PdmVybGFwTWFwUmVjdXJzaXZlKG92ZXJsYXBNYXAsIGxheWVyKTsKKyAgICAgICAgd2lsbEJl
Q29tcG9zaXRlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVCh3aWxsQmVDb21wb3Np
dGVkID09IG5lZWRzVG9CZUNvbXBvc2l0ZWQobGF5ZXIpKTsKKyAgICBpZiAobGF5ZXIucmVmbGVj
dGlvbkxheWVyKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZG4ndCB3ZSBjYWxsIGNvbXB1
dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyB0byBoYW5kbGUgYSByZWZsZWN0aW9uIG92ZXJsYXBw
aW5nIHdpdGggYW5vdGhlciByZW5kZXJlcj8KKyAgICAgICAgbGF5ZXIucmVmbGVjdGlvbkxheWVy
KCktPnNldEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24od2lsbEJlQ29tcG9zaXRlZCA/IFJlbmRl
ckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpTdGFja2luZyA6IFJlbmRlckxheWVy
OjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKTsKKyAgICB9CisKKyAgICAvLyBTdWJz
ZXF1ZW50IGxheWVycyBpbiB0aGUgcGFyZW50IHN0YWNraW5nIGNvbnRleHQgYWxzbyBuZWVkIHRv
IGNvbXBvc2l0ZS4KKyAgICBpZiAoY2hpbGRTdGF0ZS5zdWJ0cmVlSXNDb21wb3NpdGluZykKKyAg
ICAgICAgY29tcG9zaXRpbmdTdGF0ZS5zdWJ0cmVlSXNDb21wb3NpdGluZyA9IHRydWU7CisKKyAg
ICAvLyBTZXQgdGhlIGZsYWcgdG8gc2F5IHRoYXQgdGhpcyBsYXllciBoYXMgY29tcG9zaXRpbmcg
Y2hpbGRyZW4uCisgICAgbGF5ZXIuc2V0SGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KGNoaWxkU3Rh
dGUuc3VidHJlZUlzQ29tcG9zaXRpbmcpOworCisgICAgLy8gc2V0SGFzQ29tcG9zaXRpbmdEZXNj
ZW5kYW50KCkgbWF5IGhhdmUgY2hhbmdlZCB0aGUgYW5zd2VyIHRvIG5lZWRzVG9CZUNvbXBvc2l0
ZWQoKSB3aGVuIGNsaXBwaW5nLCBzbyB0ZXN0IHRoYXQgYWdhaW4uCisgICAgYm9vbCBpc0NvbXBv
c2l0ZWRDbGlwcGluZ0xheWVyID0gY2FuQmVDb21wb3NpdGVkKGxheWVyKSAmJiBjbGlwc0NvbXBv
c2l0aW5nRGVzY2VuZGFudHMobGF5ZXIpOworCisgICAgLy8gVHVybiBvdmVybGFwIHRlc3Rpbmcg
b2ZmIGZvciBsYXRlciBsYXllcnMgaWYgaXQncyBhbHJlYWR5IG9mZiwgb3IgaWYgd2UgaGF2ZSBh
biBhbmltYXRpbmcgdHJhbnNmb3JtLgorICAgIC8vIE5vdGUgdGhhdCBpZiB0aGUgbGF5ZXIgY2xp
cHMgaXRzIGRlc2NlbmRhbnRzLCB0aGVyZSdzIG5vIHJlYXNvbiB0byBwcm9wYWdhdGUgdGhlIGNo
aWxkIGFuaW1hdGlvbiB0byB0aGUgcGFyZW50IGxheWVycy4gVGhhdCdzIGJlY2F1c2UKKyAgICAv
LyB3ZSBrbm93IGZvciBzdXJlIHRoZSBhbmltYXRpb24gaXMgY29udGFpbmVkIGluc2lkZSB0aGUg
Y2xpcHBpbmcgcmVjdGFuZ2xlLCB3aGljaCBpcyBhbHJlYWR5IGFkZGVkIHRvIHRoZSBvdmVybGFw
IG1hcC4KKyAgICBpZiAoKCFjaGlsZFN0YXRlLnRlc3RpbmdPdmVybGFwICYmICFpc0NvbXBvc2l0
ZWRDbGlwcGluZ0xheWVyKSB8fCBsYXllckV4dGVudC5rbm93blRvQmVIYXZlRXh0ZW50VW5jZXJ0
YWludHkoKSkKKyAgICAgICAgY29tcG9zaXRpbmdTdGF0ZS50ZXN0aW5nT3ZlcmxhcCA9IGZhbHNl
OworICAgIAorICAgIGlmIChpc0NvbXBvc2l0ZWRDbGlwcGluZ0xheWVyKSB7CisgICAgICAgIGlm
ICghd2lsbEJlQ29tcG9zaXRlZCkgeworICAgICAgICAgICAgY2hpbGRTdGF0ZS5jb21wb3NpdGlu
Z0FuY2VzdG9yID0gJmxheWVyOworICAgICAgICAgICAgb3ZlcmxhcE1hcC5wdXNoQ29tcG9zaXRp
bmdDb250YWluZXIoKTsKKyAgICAgICAgICAgIGFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZShvdmVy
bGFwTWFwLCBsYXllcik7CisgICAgICAgICAgICB3aWxsQmVDb21wb3NpdGVkID0gdHJ1ZTsKKyAg
ICAgICAgIH0KKyAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQorICAgIGlmICgo
d2lsbEJlQ29tcG9zaXRlZCAmJiBsYXllci5oYXNCbGVuZE1vZGUoKSkKKyAgICAgICAgfHwgKGxh
eWVyLmhhc05vdElzb2xhdGVkQ29tcG9zaXRlZEJsZW5kaW5nRGVzY2VuZGFudHMoKSAmJiAhbGF5
ZXIuaXNvbGF0ZXNDb21wb3NpdGVkQmxlbmRpbmcoKSkpCisgICAgICAgIGNvbXBvc2l0aW5nU3Rh
dGUuaGFzTm90SXNvbGF0ZWRDb21wb3NpdGVkQmxlbmRpbmdEZXNjZW5kYW50cyA9IHRydWU7Cisj
ZW5kaWYKKworICAgIGlmIChjaGlsZFN0YXRlLmNvbXBvc2l0aW5nQW5jZXN0b3IgPT0gJmxheWVy
ICYmICFsYXllci5pc1Jvb3RMYXllcigpKQorICAgICAgICBvdmVybGFwTWFwLnBvcENvbXBvc2l0
aW5nQ29udGFpbmVyKCk7CisKKyAgICAvLyBJZiB3ZSdyZSBiYWNrIGF0IHRoZSByb290LCBhbmQg
bm8gb3RoZXIgbGF5ZXJzIG5lZWQgdG8gYmUgY29tcG9zaXRlZCwgYW5kIHRoZSByb290IGxheWVy
IGl0c2VsZiBkb2Vzbid0IG5lZWQKKyAgICAvLyB0byBiZSBjb21wb3NpdGVkLCB0aGVuIHdlIGNh
biBkcm9wIG91dCBvZiBjb21wb3NpdGluZyBtb2RlIGFsdG9nZXRoZXIuIEhvd2V2ZXIsIGRvbid0
IGRyb3Agb3V0IG9mIGNvbXBvc2l0aW5nIG1vZGUKKyAgICAvLyBpZiB0aGVyZSBhcmUgY29tcG9z
aXRlZCBsYXllcnMgdGhhdCB3ZSBkaWRuJ3QgaGl0IGluIG91ciB0cmF2ZXJzYWwgKGUuZy4gYmVj
YXVzZSBvZiB2aXNpYmlsaXR5OmhpZGRlbikuCisgICAgaWYgKGxheWVyLmlzUm9vdExheWVyKCkg
JiYgIWNoaWxkU3RhdGUuc3VidHJlZUlzQ29tcG9zaXRpbmcgJiYgIXJlcXVpcmVzQ29tcG9zaXRp
bmdMYXllcihsYXllcikgJiYgIW1fZm9yY2VDb21wb3NpdGluZ01vZGUgJiYgIWhhc0FueUFkZGl0
aW9uYWxDb21wb3NpdGVkTGF5ZXJzKGxheWVyKSkgeworICAgICAgICAvLyBEb24ndCBkcm9wIG91
dCBvZiBjb21wb3NpdGluZyBvbiBpT1MsIGJlY2F1c2Ugd2UgbWF5IGZsYXNoLiBTZWUgPHJkYXI6
Ly9wcm9ibGVtLzgzNDgzMzc+LgorI2lmICFQTEFURk9STShJT1MpCisgICAgICAgIGVuYWJsZUNv
bXBvc2l0aW5nTW9kZShmYWxzZSk7CisgICAgICAgIHdpbGxCZUNvbXBvc2l0ZWQgPSBmYWxzZTsK
KyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBBU1NFUlQod2lsbEJlQ29tcG9zaXRlZCA9PSBuZWVk
c1RvQmVDb21wb3NpdGVkKGxheWVyKSk7CisKKyAgICAvLyBVcGRhdGUgYmFja2luZyBub3csIHNv
IHRoYXQgd2UgY2FuIHVzZSBpc0NvbXBvc2l0ZWQoKSByZWxpYWJseSBkdXJpbmcgdHJlZSB0cmF2
ZXJzYWwgaW4gcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKCkuCisgICAgaWYgKHVwZGF0ZUJh
Y2tpbmcobGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludE5vdywgd2lsbEJlQ29tcG9zaXRl
ZCA/IEJhY2tpbmdSZXF1aXJlZDo6WWVzIDogQmFja2luZ1JlcXVpcmVkOjpObykpCisgICAgICAg
IGxheWVyc0NoYW5nZWQgPSB0cnVlOworCisgICAgaWYgKGxheWVyLnJlZmxlY3Rpb25MYXllcigp
ICYmIHVwZGF0ZUxheWVyQ29tcG9zaXRpbmdTdGF0ZSgqbGF5ZXIucmVmbGVjdGlvbkxheWVyKCks
IENvbXBvc2l0aW5nQ2hhbmdlUmVwYWludE5vdykpCisgICAgICAgIGxheWVyc0NoYW5nZWQgPSB0
cnVlOworCisgICAgZGVzY2VuZGFudEhhczNEVHJhbnNmb3JtIHw9IGFueURlc2NlbmRhbnRIYXMz
RFRyYW5zZm9ybSB8fCBsYXllci5oYXMzRFRyYW5zZm9ybSgpOworCisgICAgb3ZlcmxhcE1hcC5n
ZW9tZXRyeU1hcCgpLnBvcE1hcHBpbmdzVG9BbmNlc3RvcihhbmNlc3RvckxheWVyKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVSZWdpb25Db21wb3NpdGluZ1JlcXVp
cmVtZW50cyhSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVnaW9uLCBPdmVybGFwTWFwJiBvdmVy
bGFwTWFwLCBDb21wb3NpdGluZ1N0YXRlJiBjaGlsZFN0YXRlLCBib29sJiBsYXllcnNDaGFuZ2Vk
LCBib29sJiBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pCit7CisgICAgaWYgKCFyZWdpb24t
PmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxv
d1RocmVhZCA9IHJlZ2lvbi0+Zmxvd1RocmVhZCgpOworICAgIAorICAgIG92ZXJsYXBNYXAuZ2Vv
bWV0cnlNYXAoKS5wdXNoUmVuZGVyRmxvd1RocmVhZChmbG93VGhyZWFkKTsKKworICAgIGlmIChj
b25zdCBSZW5kZXJMYXllckxpc3QqIGxheWVyTGlzdCA9IGZsb3dUaHJlYWQtPmdldExheWVyTGlz
dEZvclJlZ2lvbihyZWdpb24pKSB7CisgICAgICAgIGZvciAoYXV0byogcmVuZGVyTGF5ZXIgOiAq
bGF5ZXJMaXN0KSB7CisgICAgICAgICAgICBBU1NFUlQoZmxvd1RocmVhZC0+cmVnaW9uRm9yQ29t
cG9zaXRlZExheWVyKCpyZW5kZXJMYXllcikgPT0gcmVnaW9uKTsKKyAgICAgICAgICAgIGNvbXB1
dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhmbG93VGhyZWFkLT5sYXllcigpLCAqcmVuZGVyTGF5
ZXIsIG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQsIGFueURlc2NlbmRhbnRI
YXMzRFRyYW5zZm9ybSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvdmVybGFwTWFwLmdlb21l
dHJ5TWFwKCkucG9wTWFwcGluZ3NUb0FuY2VzdG9yKCZyZWdpb24tPmxheWVyT3duZXIoKSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRDb21wb3NpdGluZ1BhcmVudChSZW5k
ZXJMYXllciYgY2hpbGRMYXllciwgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKQoreworICAgIEFT
U0VSVCghcGFyZW50TGF5ZXIgfHwgY2hpbGRMYXllci5hbmNlc3RvckNvbXBvc2l0aW5nTGF5ZXIo
KSA9PSBwYXJlbnRMYXllcik7CisgICAgQVNTRVJUKGNoaWxkTGF5ZXIuaXNDb21wb3NpdGVkKCkp
OworCisgICAgLy8gSXQncyBwb3NzaWJsZSB0byBiZSBjYWxsZWQgd2l0aCBhIHBhcmVudCB0aGF0
IGlzbid0IHlldCBjb21wb3NpdGVkIHdoZW4gd2UncmUgZG9pbmcKKyAgICAvLyBwYXJ0aWFsIHVw
ZGF0ZXMgYXMgcmVxdWlyZWQgYnkgcGFpbnRpbmcgb3IgaGl0IHRlc3RpbmcuIEp1c3QgYmFpbCBp
biB0aGF0IGNhc2U7CisgICAgLy8gd2UnbGwgZG8gYSBmdWxsIGxheWVyIHVwZGF0ZSBzb29uLgor
ICAgIGlmICghcGFyZW50TGF5ZXIgfHwgIXBhcmVudExheWVyLT5pc0NvbXBvc2l0ZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKHBhcmVudExheWVyKSB7CisgICAgICAgIEdyYXBoaWNz
TGF5ZXIqIGhvc3RpbmdMYXllciA9IHBhcmVudExheWVyLT5iYWNraW5nKCktPnBhcmVudEZvclN1
YmxheWVycygpOworICAgICAgICBHcmFwaGljc0xheWVyKiBob3N0ZWRMYXllciA9IGNoaWxkTGF5
ZXIuYmFja2luZygpLT5jaGlsZEZvclN1cGVybGF5ZXJzKCk7CisgICAgICAgIAorICAgICAgICBo
b3N0aW5nTGF5ZXItPmFkZENoaWxkKGhvc3RlZExheWVyKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
Y2hpbGRMYXllci5iYWNraW5nKCktPmNoaWxkRm9yU3VwZXJsYXllcnMoKS0+cmVtb3ZlRnJvbVBh
cmVudCgpOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVtb3ZlQ29tcG9zaXRl
ZENoaWxkcmVuKFJlbmRlckxheWVyJiBsYXllcikKK3sKKyAgICBBU1NFUlQobGF5ZXIuaXNDb21w
b3NpdGVkKCkpOworCisgICAgbGF5ZXIuYmFja2luZygpLT5wYXJlbnRGb3JTdWJsYXllcnMoKS0+
cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK2Jvb2wgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpjYW5BY2NlbGVyYXRlVmlkZW9SZW5kZXJpbmcoUmVuZGVyVmlkZW8m
IHZpZGVvKSBjb25zdAoreworICAgIGlmICghbV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdmlkZW8uc3VwcG9ydHNBY2NlbGVy
YXRlZFJlbmRlcmluZygpOworfQorI2VuZGlmCisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRyZWVGb3JOYW1lZEZsb3dGaXhlZChSZW5kZXJMYXll
ciYgbGF5ZXIsIFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkR3JhcGhpY3NMYXllcnNPZkVu
Y2xvc2luZ0xheWVyLCBpbnQgZGVwdGgpCit7CisgICAgaWYgKCFsYXllci5pc1Jvb3RMYXllcigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWxheWVyLnJlbmRlcmVyKCkudmlldygpLmhh
c1JlbmRlck5hbWVkRmxvd1RocmVhZHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9y
PFJlbmRlckxheWVyKj4gZml4ZWRMYXllcnM7CisgICAgbGF5ZXIucmVuZGVyZXIoKS52aWV3KCku
Zmxvd1RocmVhZENvbnRyb2xsZXIoKS5jb2xsZWN0Rml4ZWRQb3NpdGlvbmVkTGF5ZXJzKGZpeGVk
TGF5ZXJzKTsKKworICAgIGZvciAoYXV0byogZml4ZWRMYXllciA6IGZpeGVkTGF5ZXJzKQorICAg
ICAgICByZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRyZWUoKmZpeGVkTGF5ZXIsIGNoaWxkR3JhcGhp
Y3NMYXllcnNPZkVuY2xvc2luZ0xheWVyLCBkZXB0aCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRyZWUoUmVuZGVyTGF5ZXImIGxheWVy
LCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVyc09mRW5jbG9zaW5nTGF5ZXIsIGlu
dCBkZXB0aCkKK3sKKyAgICAvLyBNYWtlIHRoZSBsYXllciBjb21wb3NpdGluZyBpZiBuZWNlc3Nh
cnksIGFuZCBzZXQgdXAgY2xpcHBpbmcgYW5kIGNvbnRlbnQgbGF5ZXJzLgorICAgIC8vIE5vdGUg
dGhhdCB3ZSBjYW4gb25seSBkbyB3b3JrIGhlcmUgdGhhdCBpcyBpbmRlcGVuZGVudCBvZiB3aGV0
aGVyIHRoZSBkZXNjZW5kYW50IGxheWVycworICAgIC8vIGhhdmUgYmVlbiBwcm9jZXNzZWQuIGNv
bXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cygpIHdpbGwgYWxyZWFkeSBoYXZlIGRvbmUgdGhl
IHJlcGFpbnQgaWYgbmVjZXNzYXJ5LgorCisgICAgLy8gRG8gbm90IGl0ZXJhdGUgdGhlIFJlbmRl
ckZsb3dUaHJlYWQgZGlyZWN0bHkuIFdlIGFyZSBnb2luZyB0byBjb2xsZWN0IGNvbXBvc2l0ZWQg
bGF5ZXJzIGFzIHBhcnQgb2YgcmVnaW9ucy4KKyAgICBpZiAobGF5ZXIuaXNGbG93VGhyZWFkQ29s
bGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlbmRlckxheWVyQmFja2luZyogbGF5ZXJCYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwor
ICAgIGlmIChsYXllckJhY2tpbmcpIHsKKyAgICAgICAgLy8gVGhlIGNvbXBvc2l0aW5nIHN0YXRl
IG9mIGFsbCBvdXIgY2hpbGRyZW4gaGFzIGJlZW4gdXBkYXRlZCBhbHJlYWR5LCBzbyBub3cKKyAg
ICAgICAgLy8gd2UgY2FuIGNvbXB1dGUgYW5kIGNhY2hlIHRoZSBjb21wb3NpdGVkIGJvdW5kcyBm
b3IgdGhpcyBsYXllci4KKyAgICAgICAgbGF5ZXJCYWNraW5nLT51cGRhdGVDb21wb3NpdGVkQm91
bmRzKCk7CisKKyAgICAgICAgaWYgKFJlbmRlckxheWVyKiByZWZsZWN0aW9uID0gbGF5ZXIucmVm
bGVjdGlvbkxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWZsZWN0aW9uLT5iYWNraW5nKCkp
CisgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+YmFja2luZygpLT51cGRhdGVDb21wb3NpdGVk
Qm91bmRzKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGF5ZXJCYWNraW5nLT51cGRhdGVD
b25maWd1cmF0aW9uKCkpCisgICAgICAgICAgICBsYXllckJhY2tpbmctPnVwZGF0ZURlYnVnSW5k
aWNhdG9ycyhtX3Nob3dEZWJ1Z0JvcmRlcnMsIG1fc2hvd1JlcGFpbnRDb3VudGVyKTsKKyAgICAg
ICAgCisgICAgICAgIGxheWVyQmFja2luZy0+dXBkYXRlR2VvbWV0cnkoKTsKKworICAgICAgICBp
ZiAoIWxheWVyLnBhcmVudCgpKQorICAgICAgICAgICAgdXBkYXRlUm9vdExheWVyUG9zaXRpb24o
KTsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICAgICAgbG9nTGF5ZXJJbmZvKGxheWVyLCBkZXB0
aCk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oZGVwdGgpOworI2VuZGlmCisgICAgICAg
IGlmIChsYXllckJhY2tpbmctPmhhc1VucG9zaXRpb25lZE92ZXJmbG93Q29udHJvbHNMYXllcnMo
KSkKKyAgICAgICAgICAgIGxheWVyLnBvc2l0aW9uTmV3bHlDcmVhdGVkT3ZlcmZsb3dDb250cm9s
cygpOworICAgIH0KKworICAgIC8vIElmIHRoaXMgbGF5ZXIgaGFzIGJhY2tpbmcsIHRoZW4gd2Ug
YXJlIGNvbGxlY3RpbmcgaXRzIGNoaWxkcmVuLCBvdGhlcndpc2UgYXBwZW5kaW5nCisgICAgLy8g
dG8gdGhlIGNvbXBvc2l0aW5nIGNoaWxkIGxpc3Qgb2YgYW4gZW5jbG9zaW5nIGxheWVyLgorICAg
IFZlY3RvcjxHcmFwaGljc0xheWVyKj4gbGF5ZXJDaGlsZHJlbjsKKyAgICBWZWN0b3I8R3JhcGhp
Y3NMYXllcio+JiBjaGlsZExpc3QgPSBsYXllckJhY2tpbmcgPyBsYXllckNoaWxkcmVuIDogY2hp
bGRMYXllcnNPZkVuY2xvc2luZ0xheWVyOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIExh
eWVyTGlzdE11dGF0aW9uRGV0ZWN0b3IgbXV0YXRpb25DaGVja2VyKCZsYXllcik7CisjZW5kaWYK
KworICAgIGlmIChsYXllci5pc1N0YWNraW5nQ29udGFpbmVyKCkpIHsKKyAgICAgICAgaWYgKFZl
Y3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0ID0gbGF5ZXIubmVnWk9yZGVyTGlzdCgp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8qIHJlbmRlckxheWVyIDogKm5lZ1pPcmRlckxpc3Qp
CisgICAgICAgICAgICAgICAgcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKCpyZW5kZXJMYXll
ciwgY2hpbGRMaXN0LCBkZXB0aCArIDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgYSBu
ZWdhdGl2ZSB6LW9yZGVyIGNoaWxkIGlzIGNvbXBvc2l0aW5nLCB3ZSBnZXQgYSBmb3JlZ3JvdW5k
IGxheWVyIHdoaWNoIG5lZWRzIHRvIGdldCBwYXJlbnRlZC4KKyAgICAgICAgaWYgKGxheWVyQmFj
a2luZyAmJiBsYXllckJhY2tpbmctPmZvcmVncm91bmRMYXllcigpKQorICAgICAgICAgICAgY2hp
bGRMaXN0LmFwcGVuZChsYXllckJhY2tpbmctPmZvcmVncm91bmRMYXllcigpKTsKKyAgICB9CisK
KyAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFp
bmVyKCkpCisgICAgICAgIHJlYnVpbGRSZWdpb25Db21wb3NpdGluZ0xheWVyVHJlZShkb3duY2Fz
dDxSZW5kZXJCbG9ja0Zsb3c+KGxheWVyLnJlbmRlcmVyKCkpLnJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KCksIGxheWVyQ2hpbGRyZW4sIGRlcHRoICsgMSk7CisKKyAgICBpZiAoVmVjdG9yPFJlbmRl
ckxheWVyKj4qIG5vcm1hbEZsb3dMaXN0ID0gbGF5ZXIubm9ybWFsRmxvd0xpc3QoKSkgeworICAg
ICAgICBmb3IgKGF1dG8qIHJlbmRlckxheWVyIDogKm5vcm1hbEZsb3dMaXN0KQorICAgICAgICAg
ICAgcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKCpyZW5kZXJMYXllciwgY2hpbGRMaXN0LCBk
ZXB0aCArIDEpOworICAgIH0KKyAgICAKKyAgICBpZiAobGF5ZXIuaXNTdGFja2luZ0NvbnRhaW5l
cigpKSB7CisgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogcG9zWk9yZGVyTGlzdCA9
IGxheWVyLnBvc1pPcmRlckxpc3QoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvKiByZW5kZXJM
YXllciA6ICpwb3NaT3JkZXJMaXN0KQorICAgICAgICAgICAgICAgIHJlYnVpbGRDb21wb3NpdGlu
Z0xheWVyVHJlZSgqcmVuZGVyTGF5ZXIsIGNoaWxkTGlzdCwgZGVwdGggKyAxKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChsYXllci5pc1Jvb3RMYXllcigpKQorICAgICAgICByZWJ1aWxk
Q29tcG9zaXRpbmdMYXllclRyZWVGb3JOYW1lZEZsb3dGaXhlZChsYXllciwgY2hpbGRMaXN0LCBk
ZXB0aCArIDEpOworCisgICAgaWYgKGxheWVyQmFja2luZykgeworICAgICAgICBib29sIHBhcmVu
dGVkID0gZmFsc2U7CisgICAgICAgIGlmIChpczxSZW5kZXJXaWRnZXQ+KGxheWVyLnJlbmRlcmVy
KCkpKQorICAgICAgICAgICAgcGFyZW50ZWQgPSBwYXJlbnRGcmFtZUNvbnRlbnRMYXllcnMoJmRv
d25jYXN0PFJlbmRlcldpZGdldD4obGF5ZXIucmVuZGVyZXIoKSkpOworCisgICAgICAgIGlmICgh
cGFyZW50ZWQpCisgICAgICAgICAgICBsYXllckJhY2tpbmctPnBhcmVudEZvclN1YmxheWVycygp
LT5zZXRDaGlsZHJlbihsYXllckNoaWxkcmVuKTsKKworICAgICAgICAvLyBJZiB0aGUgbGF5ZXIg
aGFzIGEgY2xpcHBpbmcgbGF5ZXIgdGhlIG92ZXJmbG93IGNvbnRyb2xzIGxheWVycyB3aWxsIGJl
IHNpYmxpbmdzIG9mIHRoZSBjbGlwcGluZyBsYXllci4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB0
aGUgb3ZlcmZsb3cgY29udHJvbCBsYXllcnMgYXJlIG5vcm1hbCBjaGlsZHJlbi4KKyAgICAgICAg
aWYgKCFsYXllckJhY2tpbmctPmhhc0NsaXBwaW5nTGF5ZXIoKSAmJiAhbGF5ZXJCYWNraW5nLT5o
YXNTY3JvbGxpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogb3Zl
cmZsb3dDb250cm9sTGF5ZXIgPSBsYXllckJhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpKSB7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3dDb250cm9sTGF5ZXItPnJlbW92ZUZy
b21QYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBsYXllckJhY2tpbmctPnBhcmVudEZvclN1Ymxh
eWVycygpLT5hZGRDaGlsZChvdmVyZmxvd0NvbnRyb2xMYXllcik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBvdmVyZmxvd0NvbnRyb2xMYXllciA9IGxh
eWVyQmFja2luZy0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICAg
ICAgb3ZlcmZsb3dDb250cm9sTGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgICAg
ICAgICBsYXllckJhY2tpbmctPnBhcmVudEZvclN1YmxheWVycygpLT5hZGRDaGlsZChvdmVyZmxv
d0NvbnRyb2xMYXllcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChHcmFwaGlj
c0xheWVyKiBvdmVyZmxvd0NvbnRyb2xMYXllciA9IGxheWVyQmFja2luZy0+bGF5ZXJGb3JTY3Jv
bGxDb3JuZXIoKSkgeworICAgICAgICAgICAgICAgIG92ZXJmbG93Q29udHJvbExheWVyLT5yZW1v
dmVGcm9tUGFyZW50KCk7CisgICAgICAgICAgICAgICAgbGF5ZXJCYWNraW5nLT5wYXJlbnRGb3JT
dWJsYXllcnMoKS0+YWRkQ2hpbGQob3ZlcmZsb3dDb250cm9sTGF5ZXIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgY2hpbGRMYXllcnNPZkVuY2xvc2luZ0xheWVyLmFwcGVu
ZChsYXllckJhY2tpbmctPmNoaWxkRm9yU3VwZXJsYXllcnMoKSk7CisgICAgfQorICAgIAorICAg
IGlmIChSZW5kZXJMYXllckJhY2tpbmcqIGxheWVyQmFja2luZyA9IGxheWVyLmJhY2tpbmcoKSkK
KyAgICAgICAgbGF5ZXJCYWNraW5nLT51cGRhdGVBZnRlckRlc2NlbmRhbnRzKCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxkUmVnaW9uQ29tcG9zaXRpbmdMYXllclRy
ZWUoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIHJlZ2lvbiwgVmVjdG9yPEdyYXBoaWNzTGF5ZXIq
PiYgY2hpbGRMaXN0LCBpbnQgZGVwdGgpCit7CisgICAgaWYgKCFyZWdpb24tPmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IHJl
Z2lvbi0+Zmxvd1RocmVhZCgpOworICAgIEFTU0VSVChmbG93VGhyZWFkLT5jb2xsZWN0c0dyYXBo
aWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpOworICAgIGlmIChjb25zdCBSZW5kZXJMYXllckxpc3Qq
IGxheWVyTGlzdCA9IGZsb3dUaHJlYWQtPmdldExheWVyTGlzdEZvclJlZ2lvbihyZWdpb24pKSB7
CisgICAgICAgIGZvciAoYXV0byogcmVuZGVyTGF5ZXIgOiAqbGF5ZXJMaXN0KSB7CisgICAgICAg
ICAgICBBU1NFUlQoZmxvd1RocmVhZC0+cmVnaW9uRm9yQ29tcG9zaXRlZExheWVyKCpyZW5kZXJM
YXllcikgPT0gcmVnaW9uKTsKKyAgICAgICAgICAgIHJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJl
ZSgqcmVuZGVyTGF5ZXIsIGNoaWxkTGlzdCwgZGVwdGggKyAxKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lVmlld0RpZENoYW5nZUxvY2F0
aW9uKGNvbnN0IEludFBvaW50JiBjb250ZW50c09mZnNldCkKK3sKKyAgICBpZiAobV9vdmVyZmxv
d0NvbnRyb2xzSG9zdExheWVyKQorICAgICAgICBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXIt
PnNldFBvc2l0aW9uKGNvbnRlbnRzT2Zmc2V0KTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmZyYW1lVmlld0RpZENoYW5nZVNpemUoKQoreworICAgIGlmIChtX2NsaXBMYXllcikg
eworICAgICAgICBjb25zdCBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFt
ZVZpZXcoKTsKKyAgICAgICAgbV9jbGlwTGF5ZXItPnNldFNpemUoZnJhbWVWaWV3LnNpemVGb3JW
aXNpYmxlQ29udGVudCgpKTsKKyAgICAgICAgbV9jbGlwTGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0
aW9uRm9yQ2xpcExheWVyKCkpOworCisgICAgICAgIGZyYW1lVmlld0RpZFNjcm9sbCgpOworICAg
ICAgICB1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCk7CisKKyNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCisgICAgICAgIGlmIChtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcykgeworICAgICAg
ICAgICAgbV9sYXllckZvck92ZXJoYW5nQXJlYXMtPnNldFNpemUoZnJhbWVWaWV3LmZyYW1lUmVj
dCgpLnNpemUoKSk7CisgICAgICAgICAgICBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcy0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludCgwLCBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudG9wQ29udGVudElu
c2V0KCkpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCitib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6aGFzQ29vcmRpbmF0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nv
b3JkaW5hdG9yKCk7CisgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yICYmIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5jb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhtX3JlbmRlclZp
ZXcuZnJhbWVWaWV3KCkpOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
U2Nyb2xsTGF5ZXJQb3NpdGlvbigpCit7CisgICAgQVNTRVJUKG1fc2Nyb2xsTGF5ZXIpOworCisg
ICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CisgICAg
SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBmcmFtZVZpZXcuc2Nyb2xsUG9zaXRpb24oKTsKKwor
ICAgIG1fc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoLXNjcm9sbFBvc2l0aW9u
LngoKSwgLXNjcm9sbFBvc2l0aW9uLnkoKSkpOworCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGZp
eGVkQmFja2dyb3VuZExheWVyID0gZml4ZWRSb290QmFja2dyb3VuZExheWVyKCkpCisgICAgICAg
IGZpeGVkQmFja2dyb3VuZExheWVyLT5zZXRQb3NpdGlvbihmcmFtZVZpZXcuc2Nyb2xsUG9zaXRp
b25Gb3JGaXhlZFBvc2l0aW9uKCkpOworfQorCitGbG9hdFBvaW50IFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cG9zaXRpb25Gb3JDbGlwTGF5ZXIoKSBjb25zdAoreworICAgIEZyYW1lVmlldyYgZnJh
bWVWaWV3ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOworCisgICAgcmV0dXJuIEZsb2F0UG9p
bnQoCisgICAgICAgIGZyYW1lVmlldy5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCkgPyBmcmFtZVZpZXcuaG9yaXpvbnRhbFNjcm9sbGJhckludHJ1c2lvbigpIDogMCwK
KyAgICAgICAgRnJhbWVWaWV3Ojp5UG9zaXRpb25Gb3JJbnNldENsaXBMYXllcihmcmFtZVZpZXcu
c2Nyb2xsUG9zaXRpb24oKSwgZnJhbWVWaWV3LnRvcENvbnRlbnRJbnNldCgpKSk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWRTY3JvbGwoKQoreworICAgIGlm
ICghbV9zY3JvbGxMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlcmUncyBh
IHNjcm9sbGluZyBjb29yZGluYXRvciB0aGF0IG1hbmFnZXMgc2Nyb2xsaW5nIGZvciB0aGlzIGZy
YW1lIHZpZXcsCisgICAgLy8gaXQgd2lsbCBhbHNvIG1hbmFnZSB1cGRhdGluZyB0aGUgc2Nyb2xs
IGxheWVyIHBvc2l0aW9uLgorICAgIGlmIChoYXNDb29yZGluYXRlZFNjcm9sbGluZygpKSB7Cisg
ICAgICAgIC8vIFdlIGhhdmUgdG8gc2NoZWR1bGUgYSBmbHVzaCBpbiBvcmRlciBmb3IgdGhlIG1h
aW4gVGlsZWRCYWNraW5nIHRvIHVwZGF0ZSBpdHMgdGlsZSBjb3ZlcmFnZS4KKyAgICAgICAgc2No
ZWR1bGVMYXllckZsdXNoTm93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1cGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpmcmFtZVZpZXdEaWRBZGRPclJlbW92ZVNjcm9sbGJhcnMoKQoreworICAgIHVwZGF0ZU92ZXJm
bG93Q29udHJvbHNMYXllcnMoKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZy
YW1lVmlld0RpZExheW91dCgpCit7CisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiByZW5kZXJWaWV3
QmFja2luZyA9IG1fcmVuZGVyVmlldy5sYXllcigpLT5iYWNraW5nKCk7CisgICAgaWYgKHJlbmRl
clZpZXdCYWNraW5nKQorICAgICAgICByZW5kZXJWaWV3QmFja2luZy0+YWRqdXN0VGlsZWRCYWNr
aW5nQ292ZXJhZ2UoKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJvb3RGaXhl
ZEJhY2tncm91bmRzQ2hhbmdlZCgpCit7CisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiByZW5kZXJW
aWV3QmFja2luZyA9IG1fcmVuZGVyVmlldy5sYXllcigpLT5iYWNraW5nKCk7CisgICAgaWYgKHJl
bmRlclZpZXdCYWNraW5nICYmIHJlbmRlclZpZXdCYWNraW5nLT5pc01haW5GcmFtZUxheWVyV2l0
aFRpbGVkQmFja2luZygpKQorICAgICAgICBzZXRDb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxk
KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxpbmdMYXllckRpZENo
YW5nZShSZW5kZXJMYXllciYgbGF5ZXIpCit7CisgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9y
KiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisg
ICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlk
Q2hhbmdlKGxheWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZpeGVkUm9v
dEJhY2tncm91bmRMYXllckNoYW5nZWQoKQoreworICAgIGlmIChtX3JlbmRlclZpZXcucmVuZGVy
VHJlZUJlaW5nRGVzdHJveWVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3JlbmRl
clZpZXcubGF5ZXIoKS0+aXNDb21wb3NpdGVkKCkpCisgICAgICAgIHVwZGF0ZVNjcm9sbENvb3Jk
aW5hdGVkU3RhdHVzKCptX3JlbmRlclZpZXcubGF5ZXIoKSk7Cit9CisKK1N0cmluZyBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmxheWVyVHJlZUFzVGV4dChMYXllclRyZWVGbGFncyBmbGFncykKK3sK
KyAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZUFmdGVyTGF5b3V0
KTsKKworICAgIGlmICghbV9yb290Q29udGVudExheWVyKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXModHJ1ZSk7CisKKyAgICBMYXllclRy
ZWVBc1RleHRCZWhhdmlvciBsYXllclRyZWVCZWhhdmlvciA9IExheWVyVHJlZUFzVGV4dEJlaGF2
aW9yTm9ybWFsOworICAgIGlmIChmbGFncyAmIExheWVyVHJlZUZsYWdzSW5jbHVkZURlYnVnSW5m
bykKKyAgICAgICAgbGF5ZXJUcmVlQmVoYXZpb3IgfD0gTGF5ZXJUcmVlQXNUZXh0RGVidWc7Cisg
ICAgaWYgKGZsYWdzICYgTGF5ZXJUcmVlRmxhZ3NJbmNsdWRlVmlzaWJsZVJlY3RzKQorICAgICAg
ICBsYXllclRyZWVCZWhhdmlvciB8PSBMYXllclRyZWVBc1RleHRJbmNsdWRlVmlzaWJsZVJlY3Rz
OworICAgIGlmIChmbGFncyAmIExheWVyVHJlZUZsYWdzSW5jbHVkZVRpbGVDYWNoZXMpCisgICAg
ICAgIGxheWVyVHJlZUJlaGF2aW9yIHw9IExheWVyVHJlZUFzVGV4dEluY2x1ZGVUaWxlQ2FjaGVz
OworICAgIGlmIChmbGFncyAmIExheWVyVHJlZUZsYWdzSW5jbHVkZVJlcGFpbnRSZWN0cykKKyAg
ICAgICAgbGF5ZXJUcmVlQmVoYXZpb3IgfD0gTGF5ZXJUcmVlQXNUZXh0SW5jbHVkZVJlcGFpbnRS
ZWN0czsKKyAgICBpZiAoZmxhZ3MgJiBMYXllclRyZWVGbGFnc0luY2x1ZGVQYWludGluZ1BoYXNl
cykKKyAgICAgICAgbGF5ZXJUcmVlQmVoYXZpb3IgfD0gTGF5ZXJUcmVlQXNUZXh0SW5jbHVkZVBh
aW50aW5nUGhhc2VzOworICAgIGlmIChmbGFncyAmIExheWVyVHJlZUZsYWdzSW5jbHVkZUNvbnRl
bnRMYXllcnMpCisgICAgICAgIGxheWVyVHJlZUJlaGF2aW9yIHw9IExheWVyVHJlZUFzVGV4dElu
Y2x1ZGVDb250ZW50TGF5ZXJzOworICAgIGlmIChmbGFncyAmIExheWVyVHJlZUZsYWdzSW5jbHVk
ZUFjY2VsZXJhdGVzRHJhd2luZykKKyAgICAgICAgbGF5ZXJUcmVlQmVoYXZpb3IgfD0gTGF5ZXJU
cmVlQXNUZXh0SW5jbHVkZUFjY2VsZXJhdGVzRHJhd2luZzsKKworICAgIC8vIFdlIHNraXAgZHVt
cGluZyB0aGUgc2Nyb2xsIGFuZCBjbGlwIGxheWVycyB0byBrZWVwIGxheWVyVHJlZUFzVGV4dCBv
dXRwdXQKKyAgICAvLyBzaW1pbGFyIGJldHdlZW4gcGxhdGZvcm1zLgorICAgIFN0cmluZyBsYXll
clRyZWVUZXh0ID0gbV9yb290Q29udGVudExheWVyLT5sYXllclRyZWVBc1RleHQobGF5ZXJUcmVl
QmVoYXZpb3IpOworCisgICAgLy8gRHVtcCBhbiBlbXB0eSBsYXllciB0cmVlIG9ubHkgaWYgdGhl
IG9ubHkgY29tcG9zaXRlZCBsYXllciBpcyB0aGUgbWFpbiBmcmFtZSdzIHRpbGVkIGJhY2tpbmcs
CisgICAgLy8gc28gdGhhdCB0ZXN0cyBleHBlY3RpbmcgdXMgdG8gZHJvcCBvdXQgb2YgYWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcgd2hlbiB0aGVyZSBhcmUgbm8gbGF5ZXJzIHN1Y2NlZWQuCisgICAg
aWYgKCFoYXNBbnlBZGRpdGlvbmFsQ29tcG9zaXRlZExheWVycyhyb290UmVuZGVyTGF5ZXIoKSkg
JiYgZG9jdW1lbnRVc2VzVGlsZWRCYWNraW5nKCkgJiYgIShsYXllclRyZWVCZWhhdmlvciAmIExh
eWVyVHJlZUFzVGV4dEluY2x1ZGVUaWxlQ2FjaGVzKSkKKyAgICAgICAgbGF5ZXJUcmVlVGV4dCA9
IGVtcHR5U3RyaW5nKCk7CisKKyAgICAvLyBUaGUgdHJ1ZSByb290IGxheWVyIGlzIG5vdCBpbmNs
dWRlZCBpbiB0aGUgZHVtcCwgc28gaWYgd2Ugd2FudCB0byByZXBvcnQKKyAgICAvLyBpdHMgcmVw
YWludCByZWN0cywgdGhleSBtdXN0IGJlIGluY2x1ZGVkIGhlcmUuCisgICAgaWYgKGZsYWdzICYg
TGF5ZXJUcmVlRmxhZ3NJbmNsdWRlUmVwYWludFJlY3RzKQorICAgICAgICByZXR1cm4gbV9yZW5k
ZXJWaWV3LmZyYW1lVmlldygpLnRyYWNrZWRSZXBhaW50UmVjdHNBc1RleHQoKSArIGxheWVyVHJl
ZVRleHQ7CisKKyAgICByZXR1cm4gbGF5ZXJUcmVlVGV4dDsKK30KKworUmVuZGVyTGF5ZXJDb21w
b3NpdG9yKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lQ29udGVudHNDb21wb3NpdG9yKFJl
bmRlcldpZGdldCogcmVuZGVyZXIpCit7CisgICAgaWYgKERvY3VtZW50KiBjb250ZW50RG9jdW1l
bnQgPSByZW5kZXJlci0+ZnJhbWVPd25lckVsZW1lbnQoKS5jb250ZW50RG9jdW1lbnQoKSkgewor
ICAgICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGNvbnRlbnREb2N1bWVudC0+cmVuZGVyVmll
dygpKQorICAgICAgICAgICAgcmV0dXJuICZ2aWV3LT5jb21wb3NpdG9yKCk7CisgICAgfQorICAg
IHJldHVybiBudWxscHRyOworfQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50
RnJhbWVDb250ZW50TGF5ZXJzKFJlbmRlcldpZGdldCogcmVuZGVyZXIpCit7CisgICAgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yKiBpbm5lckNvbXBvc2l0b3IgPSBmcmFtZUNvbnRlbnRzQ29tcG9zaXRv
cihyZW5kZXJlcik7CisgICAgaWYgKCFpbm5lckNvbXBvc2l0b3IgfHwgIWlubmVyQ29tcG9zaXRv
ci0+aW5Db21wb3NpdGluZ01vZGUoKSB8fCBpbm5lckNvbXBvc2l0b3ItPnJvb3RMYXllckF0dGFj
aG1lbnQoKSAhPSBSb290TGF5ZXJBdHRhY2hlZFZpYUVuY2xvc2luZ0ZyYW1lKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmxh
eWVyKCk7CisgICAgaWYgKCFsYXllci0+aXNDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyLT5iYWNraW5n
KCk7CisgICAgR3JhcGhpY3NMYXllciogaG9zdGluZ0xheWVyID0gYmFja2luZy0+cGFyZW50Rm9y
U3VibGF5ZXJzKCk7CisgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyID0gaW5uZXJDb21wb3Np
dG9yLT5yb290R3JhcGhpY3NMYXllcigpOworICAgIGlmIChob3N0aW5nTGF5ZXItPmNoaWxkcmVu
KCkuc2l6ZSgpICE9IDEgfHwgaG9zdGluZ0xheWVyLT5jaGlsZHJlbigpWzBdICE9IHJvb3RMYXll
cikgeworICAgICAgICBob3N0aW5nTGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgICAg
IGhvc3RpbmdMYXllci0+YWRkQ2hpbGQocm9vdExheWVyKTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKy8vIFRoaXMganVzdCB1cGRhdGVzIGxheWVyIGdlb21ldHJ5IHdpdGhvdXQgY2hh
bmdpbmcgdGhlIGhpZXJhcmNoeS4KK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVM
YXllclRyZWVHZW9tZXRyeShSZW5kZXJMYXllciYgbGF5ZXIsIGludCBkZXB0aCkKK3sKKyAgICBp
ZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBsYXllckJhY2tpbmcgPSBsYXllci5iYWNraW5nKCkpIHsK
KyAgICAgICAgLy8gVGhlIGNvbXBvc2l0aW5nIHN0YXRlIG9mIGFsbCBvdXIgY2hpbGRyZW4gaGFz
IGJlZW4gdXBkYXRlZCBhbHJlYWR5LCBzbyBub3cKKyAgICAgICAgLy8gd2UgY2FuIGNvbXB1dGUg
YW5kIGNhY2hlIHRoZSBjb21wb3NpdGVkIGJvdW5kcyBmb3IgdGhpcyBsYXllci4KKyAgICAgICAg
bGF5ZXJCYWNraW5nLT51cGRhdGVDb21wb3NpdGVkQm91bmRzKCk7CisKKyAgICAgICAgaWYgKFJl
bmRlckxheWVyKiByZWZsZWN0aW9uID0gbGF5ZXIucmVmbGVjdGlvbkxheWVyKCkpIHsKKyAgICAg
ICAgICAgIGlmIChyZWZsZWN0aW9uLT5iYWNraW5nKCkpCisgICAgICAgICAgICAgICAgcmVmbGVj
dGlvbi0+YmFja2luZygpLT51cGRhdGVDb21wb3NpdGVkQm91bmRzKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBsYXllckJhY2tpbmctPnVwZGF0ZUNvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgbGF5
ZXJCYWNraW5nLT51cGRhdGVHZW9tZXRyeSgpOworCisgICAgICAgIGlmICghbGF5ZXIucGFyZW50
KCkpCisgICAgICAgICAgICB1cGRhdGVSb290TGF5ZXJQb3NpdGlvbigpOworCisjaWYgIUxPR19E
SVNBQkxFRAorICAgICAgICBsb2dMYXllckluZm8obGF5ZXIsIGRlcHRoKTsKKyNlbHNlCisgICAg
ICAgIFVOVVNFRF9QQVJBTShkZXB0aCk7CisjZW5kaWYKKyAgICB9CisKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgTGF5ZXJMaXN0TXV0YXRpb25EZXRlY3RvciBtdXRhdGlvbkNoZWNrZXIoJmxh
eWVyKTsKKyNlbmRpZgorCisgICAgaWYgKGxheWVyLmlzU3RhY2tpbmdDb250YWluZXIoKSkgewor
ICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIG5lZ1pPcmRlckxpc3QgPSBsYXllci5u
ZWdaT3JkZXJMaXN0KCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byogcmVuZGVyTGF5ZXIgOiAq
bmVnWk9yZGVyTGlzdCkKKyAgICAgICAgICAgICAgICB1cGRhdGVMYXllclRyZWVHZW9tZXRyeSgq
cmVuZGVyTGF5ZXIsIGRlcHRoICsgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVmVj
dG9yPFJlbmRlckxheWVyKj4qIG5vcm1hbEZsb3dMaXN0ID0gbGF5ZXIubm9ybWFsRmxvd0xpc3Qo
KSkgeworICAgICAgICBmb3IgKGF1dG8qIHJlbmRlckxheWVyIDogKm5vcm1hbEZsb3dMaXN0KQor
ICAgICAgICAgICAgdXBkYXRlTGF5ZXJUcmVlR2VvbWV0cnkoKnJlbmRlckxheWVyLCBkZXB0aCAr
IDEpOworICAgIH0KKyAgICAKKyAgICBpZiAobGF5ZXIuaXNTdGFja2luZ0NvbnRhaW5lcigpKSB7
CisgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogcG9zWk9yZGVyTGlzdCA9IGxheWVy
LnBvc1pPcmRlckxpc3QoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvKiByZW5kZXJMYXllciA6
ICpwb3NaT3JkZXJMaXN0KQorICAgICAgICAgICAgICAgIHVwZGF0ZUxheWVyVHJlZUdlb21ldHJ5
KCpyZW5kZXJMYXllciwgZGVwdGggKyAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChS
ZW5kZXJMYXllckJhY2tpbmcqIGxheWVyQmFja2luZyA9IGxheWVyLmJhY2tpbmcoKSkKKyAgICAg
ICAgbGF5ZXJCYWNraW5nLT51cGRhdGVBZnRlckRlc2NlbmRhbnRzKCk7Cit9CisKKy8vIFJlY3Vy
cyBkb3duIHRoZSBSZW5kZXJMYXllciB0cmVlIHVudGlsIGl0cyBmaW5kcyB0aGUgY29tcG9zaXRp
bmcgZGVzY2VuZGFudHMgb2YgY29tcG9zaXRpbmdBbmNlc3RvciBhbmQgdXBkYXRlcyB0aGVpciBn
ZW9tZXRyeS4KK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0Rl
c2NlbmRhbnRHZW9tZXRyeShSZW5kZXJMYXllciYgY29tcG9zaXRpbmdBbmNlc3RvciwgUmVuZGVy
TGF5ZXImIGxheWVyLCBib29sIGNvbXBvc2l0ZWRDaGlsZHJlbk9ubHkpCit7CisgICAgaWYgKCZs
YXllciAhPSAmY29tcG9zaXRpbmdBbmNlc3RvcikgeworICAgICAgICBpZiAoUmVuZGVyTGF5ZXJC
YWNraW5nKiBsYXllckJhY2tpbmcgPSBsYXllci5iYWNraW5nKCkpIHsKKyAgICAgICAgICAgIGxh
eWVyQmFja2luZy0+dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpOworCisgICAgICAgICAgICBpZiAo
UmVuZGVyTGF5ZXIqIHJlZmxlY3Rpb24gPSBsYXllci5yZWZsZWN0aW9uTGF5ZXIoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChyZWZsZWN0aW9uLT5iYWNraW5nKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJlZmxlY3Rpb24tPmJhY2tpbmcoKS0+dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBsYXllckJhY2tpbmctPnVwZGF0ZUdlb21ldHJ5KCk7
CisgICAgICAgICAgICBpZiAoY29tcG9zaXRlZENoaWxkcmVuT25seSkgeworICAgICAgICAgICAg
ICAgIGxheWVyQmFja2luZy0+dXBkYXRlQWZ0ZXJEZXNjZW5kYW50cygpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChs
YXllci5yZWZsZWN0aW9uTGF5ZXIoKSkKKyAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdEZXNjZW5k
YW50R2VvbWV0cnkoY29tcG9zaXRpbmdBbmNlc3RvciwgKmxheWVyLnJlZmxlY3Rpb25MYXllcigp
LCBjb21wb3NpdGVkQ2hpbGRyZW5Pbmx5KTsKKworICAgIGlmICghbGF5ZXIuaGFzQ29tcG9zaXRp
bmdEZXNjZW5kYW50KCkpCisgICAgICAgIHJldHVybjsKKworI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICBMYXllckxpc3RNdXRhdGlvbkRldGVjdG9yIG11dGF0aW9uQ2hlY2tlcigmbGF5ZXIpOwor
I2VuZGlmCisgICAgCisgICAgaWYgKGxheWVyLmlzU3RhY2tpbmdDb250YWluZXIoKSkgeworICAg
ICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIG5lZ1pPcmRlckxpc3QgPSBsYXllci5uZWda
T3JkZXJMaXN0KCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byogcmVuZGVyTGF5ZXIgOiAqbmVn
Wk9yZGVyTGlzdCkKKyAgICAgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0Rlc2NlbmRhbnRH
ZW9tZXRyeShjb21wb3NpdGluZ0FuY2VzdG9yLCAqcmVuZGVyTGF5ZXIsIGNvbXBvc2l0ZWRDaGls
ZHJlbk9ubHkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXll
cio+KiBub3JtYWxGbG93TGlzdCA9IGxheWVyLm5vcm1hbEZsb3dMaXN0KCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvKiByZW5kZXJMYXllciA6ICpub3JtYWxGbG93TGlzdCkKKyAgICAgICAgICAgIHVw
ZGF0ZUNvbXBvc2l0aW5nRGVzY2VuZGFudEdlb21ldHJ5KGNvbXBvc2l0aW5nQW5jZXN0b3IsICpy
ZW5kZXJMYXllciwgY29tcG9zaXRlZENoaWxkcmVuT25seSk7CisgICAgfQorICAgIAorICAgIGlm
IChsYXllci5pc1N0YWNraW5nQ29udGFpbmVyKCkpIHsKKyAgICAgICAgaWYgKFZlY3RvcjxSZW5k
ZXJMYXllcio+KiBwb3NaT3JkZXJMaXN0ID0gbGF5ZXIucG9zWk9yZGVyTGlzdCgpKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8qIHJlbmRlckxheWVyIDogKnBvc1pPcmRlckxpc3QpCisgICAgICAg
ICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdEZXNjZW5kYW50R2VvbWV0cnkoY29tcG9zaXRpbmdB
bmNlc3RvciwgKnJlbmRlckxheWVyLCBjb21wb3NpdGVkQ2hpbGRyZW5Pbmx5KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBpZiAoJmxheWVyICE9ICZjb21wb3NpdGluZ0FuY2VzdG9yKSB7
CisgICAgICAgIGlmIChSZW5kZXJMYXllckJhY2tpbmcqIGxheWVyQmFja2luZyA9IGxheWVyLmJh
Y2tpbmcoKSkKKyAgICAgICAgICAgIGxheWVyQmFja2luZy0+dXBkYXRlQWZ0ZXJEZXNjZW5kYW50
cygpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcGFpbnRDb21w
b3NpdGVkTGF5ZXJzKCkKK3sKKyAgICByZWN1cnNpdmVSZXBhaW50TGF5ZXIocm9vdFJlbmRlckxh
eWVyKCkpOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVjdXJzaXZlUmVwYWlu
dExheWVyKFJlbmRlckxheWVyJiBsYXllcikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qg
ZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgorICAgIGlmIChsYXllci5p
c0NvbXBvc2l0ZWQoKSAmJiAhbGF5ZXIuYmFja2luZygpLT5wYWludHNJbnRvQ29tcG9zaXRlZEFu
Y2VzdG9yKCkpCisgICAgICAgIGxheWVyLnNldEJhY2tpbmdOZWVkc1JlcGFpbnQoKTsKKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBMYXllckxpc3RNdXRhdGlvbkRldGVjdG9yIG11dGF0aW9u
Q2hlY2tlcigmbGF5ZXIpOworI2VuZGlmCisKKyAgICBpZiAobGF5ZXIuaGFzQ29tcG9zaXRpbmdE
ZXNjZW5kYW50KCkpIHsKKyAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdaT3Jk
ZXJMaXN0ID0gbGF5ZXIubmVnWk9yZGVyTGlzdCgpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8q
IHJlbmRlckxheWVyIDogKm5lZ1pPcmRlckxpc3QpCisgICAgICAgICAgICAgICAgcmVjdXJzaXZl
UmVwYWludExheWVyKCpyZW5kZXJMYXllcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVmVj
dG9yPFJlbmRlckxheWVyKj4qIHBvc1pPcmRlckxpc3QgPSBsYXllci5wb3NaT3JkZXJMaXN0KCkp
IHsKKyAgICAgICAgICAgIGZvciAoYXV0byogcmVuZGVyTGF5ZXIgOiAqcG9zWk9yZGVyTGlzdCkK
KyAgICAgICAgICAgICAgICByZWN1cnNpdmVSZXBhaW50TGF5ZXIoKnJlbmRlckxheWVyKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIG5vcm1hbEZsb3dM
aXN0ID0gbGF5ZXIubm9ybWFsRmxvd0xpc3QoKSkgeworICAgICAgICBmb3IgKGF1dG8qIHJlbmRl
ckxheWVyIDogKm5vcm1hbEZsb3dMaXN0KQorICAgICAgICAgICAgcmVjdXJzaXZlUmVwYWludExh
eWVyKCpyZW5kZXJMYXllcik7CisgICAgfQorfQorCitSZW5kZXJMYXllciYgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyb290UmVuZGVyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiAqbV9yZW5k
ZXJWaWV3LmxheWVyKCk7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cm9vdEdyYXBoaWNzTGF5ZXIoKSBjb25zdAoreworICAgIGlmIChtX292ZXJmbG93Q29udHJv
bHNIb3N0TGF5ZXIpCisgICAgICAgIHJldHVybiBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXIu
Z2V0KCk7CisgICAgcmV0dXJuIG1fcm9vdENvbnRlbnRMYXllci5nZXQoKTsKK30KKworR3JhcGhp
Y3NMYXllciogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxMYXllcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc2Nyb2xsTGF5ZXIuZ2V0KCk7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y2xpcExheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGlw
TGF5ZXIuZ2V0KCk7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
cm9vdENvbnRlbnRMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcm9vdENvbnRlbnRMYXll
ci5nZXQoKTsKK30KKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKK0dyYXBoaWNzTGF5ZXIq
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGVhZGVyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVy
biBtX2xheWVyRm9ySGVhZGVyLmdldCgpOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmZvb3RlckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckZv
ckZvb3Rlci5nZXQoKTsKK30KKyNlbmRpZgorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
c2V0SXNJbldpbmRvdyhib29sIGlzSW5XaW5kb3cpCit7CisgICAgTE9HKENvbXBvc2l0aW5nLCAi
UmVuZGVyTGF5ZXJDb21wb3NpdG9yICVwIHNldElzSW5XaW5kb3cgJWQiLCB0aGlzLCBpc0luV2lu
ZG93KTsKKworICAgIGlmICghaW5Db21wb3NpdGluZ01vZGUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciA9IHJvb3RHcmFwaGljc0xheWVyKCkp
IHsKKyAgICAgICAgR3JhcGhpY3NMYXllcjo6dHJhdmVyc2UoKnJvb3RMYXllciwgW2lzSW5XaW5k
b3ddKEdyYXBoaWNzTGF5ZXImIGxheWVyKSB7CisgICAgICAgICAgICBsYXllci5zZXRJc0luV2lu
ZG93KGlzSW5XaW5kb3cpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAoaXNJbldpbmRv
dykgeworICAgICAgICBpZiAobV9yb290TGF5ZXJBdHRhY2htZW50ICE9IFJvb3RMYXllclVuYXR0
YWNoZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUm9vdExheWVyQXR0YWNobWVu
dCBhdHRhY2htZW50ID0gaXNNYWluRnJhbWVDb21wb3NpdG9yKCkgPyBSb290TGF5ZXJBdHRhY2hl
ZFZpYUNocm9tZUNsaWVudCA6IFJvb3RMYXllckF0dGFjaGVkVmlhRW5jbG9zaW5nRnJhbWU7Cisg
ICAgICAgIGF0dGFjaFJvb3RMYXllcihhdHRhY2htZW50KTsKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgICAgIHJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycygpOworICAgICAgICBy
ZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKG1fcm9vdExheWVyQXR0YWNobWVudCA9PSBSb290TGF5ZXJVbmF0dGFjaGVkKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGRldGFjaFJvb3RMYXllcigpOworI2lmIFBMQVRG
T1JNKElPUykKKyAgICAgICAgdW5yZWdpc3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMo
KTsKKyAgICAgICAgdW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpOworI2VuZGlmCisgICAg
fQorfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2xlYXJCYWNraW5nRm9yTGF5ZXJJ
bmNsdWRpbmdEZXNjZW5kYW50cyhSZW5kZXJMYXllciYgbGF5ZXIpCit7CisgICAgaWYgKGxheWVy
LmlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAgIHJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExh
eWVycyhsYXllcik7CisgICAgICAgIGxheWVyLmNsZWFyQmFja2luZygpOworICAgIH0KKworICAg
IGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIgPSBsYXllci5maXJzdENoaWxkKCk7IGNoaWxk
TGF5ZXI7IGNoaWxkTGF5ZXIgPSBjaGlsZExheWVyLT5uZXh0U2libGluZygpKQorICAgICAgICBj
bGVhckJhY2tpbmdGb3JMYXllckluY2x1ZGluZ0Rlc2NlbmRhbnRzKCpjaGlsZExheWVyKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsZWFyQmFja2luZ0ZvckFsbExheWVycygp
Cit7CisgICAgY2xlYXJCYWNraW5nRm9yTGF5ZXJJbmNsdWRpbmdEZXNjZW5kYW50cygqbV9yZW5k
ZXJWaWV3LmxheWVyKCkpOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
Um9vdExheWVyUG9zaXRpb24oKQoreworICAgIGlmIChtX3Jvb3RDb250ZW50TGF5ZXIpIHsKKyAg
ICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRTaXplKG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5jb250ZW50c1NpemUoKSk7CisgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0UG9zaXRp
b24obV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnBvc2l0aW9uRm9yUm9vdENvbnRlbnRMYXllcigp
KTsKKyAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
M0QoKSk7CisgICAgfQorICAgIGlmIChtX2NsaXBMYXllcikgeworICAgICAgICBtX2NsaXBMYXll
ci0+c2V0U2l6ZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2l6ZUZvclZpc2libGVDb250ZW50
KCkpOworICAgICAgICBtX2NsaXBMYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb25Gb3JDbGlwTGF5
ZXIoKSk7CisgICAgfQorCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIGlmIChtX2Nv
bnRlbnRTaGFkb3dMYXllcikgeworICAgICAgICBtX2NvbnRlbnRTaGFkb3dMYXllci0+c2V0UG9z
aXRpb24obV9yb290Q29udGVudExheWVyLT5wb3NpdGlvbigpKTsKKyAgICAgICAgbV9jb250ZW50
U2hhZG93TGF5ZXItPnNldFNpemUobV9yb290Q29udGVudExheWVyLT5zaXplKCkpOworICAgIH0K
KworICAgIHVwZGF0ZUxheWVyRm9yVG9wT3ZlcmhhbmdBcmVhKG1fbGF5ZXJGb3JUb3BPdmVyaGFu
Z0FyZWEgIT0gbnVsbHB0cik7CisgICAgdXBkYXRlTGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEo
bV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJlYSAhPSBudWxscHRyKTsKKyAgICB1cGRhdGVMYXll
ckZvckhlYWRlcihtX2xheWVyRm9ySGVhZGVyICE9IG51bGxwdHIpOworICAgIHVwZGF0ZUxheWVy
Rm9yRm9vdGVyKG1fbGF5ZXJGb3JGb290ZXIgIT0gbnVsbHB0cik7CisjZW5kaWYKK30KKworYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmhhczNEQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGxheWVySGFzM0RDb250ZW50KHJvb3RSZW5kZXJMYXllcigpKTsKK30KKworYm9vbCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6Om5lZWRzVG9CZUNvbXBvc2l0ZWQoY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWVyLCBSZW5kZXJMYXllcjo6Vmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFz
b24qIHZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKSBjb25zdAoreworICAg
IGlmICghY2FuQmVDb21wb3NpdGVkKGxheWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHJlcXVpcmVzQ29tcG9zaXRpbmdMYXllcihsYXllciwgdmlld3BvcnRDb25zdHJh
aW5lZE5vdENvbXBvc2l0ZWRSZWFzb24pIHx8IGxheWVyLm11c3RDb21wb3NpdGVGb3JJbmRpcmVj
dFJlYXNvbnMoKSB8fCAoaW5Db21wb3NpdGluZ01vZGUoKSAmJiBsYXllci5pc1Jvb3RMYXllcigp
KTsKK30KKworLy8gTm90ZTogdGhpcyBzcGVjaWZpZXMgd2hldGhlciB0aGUgUkwgbmVlZHMgYSBj
b21wb3NpdGluZyBsYXllciBmb3IgaW50cmluc2ljIHJlYXNvbnMuCisvLyBVc2UgbmVlZHNUb0Jl
Q29tcG9zaXRlZCgpIHRvIGRldGVybWluZSBpZiBhIFJMIGFjdHVhbGx5IG5lZWRzIGEgY29tcG9z
aXRpbmcgbGF5ZXIuCisvLyBzdGF0aWMKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1
aXJlc0NvbXBvc2l0aW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBSZW5kZXJMYXll
cjo6Vmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24qIHZpZXdwb3J0Q29uc3Ry
YWluZWROb3RDb21wb3NpdGVkUmVhc29uKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0g
cmVuZGVyZXJGb3JDb21wb3NpdGluZ1Rlc3RzKGxheWVyKTsKKworICAgIC8vIFRoZSByb290IGxh
eWVyIGFsd2F5cyBoYXMgYSBjb21wb3NpdGluZyBsYXllciwgYnV0IGl0IG1heSBub3QgaGF2ZSBi
YWNraW5nLgorICAgIHJldHVybiByZXF1aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNmb3JtKHJlbmRl
cmVyKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yVmlkZW8ocmVuZGVyZXIpCisg
ICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JDYW52YXMocmVuZGVyZXIpCisgICAgICAg
IHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQbHVnaW4ocmVuZGVyZXIpCisgICAgICAgIHx8IHJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JGcmFtZShyZW5kZXJlcikKKyAgICAgICAgfHwgcmVxdWlyZXND
b21wb3NpdGluZ0ZvckJhY2tmYWNlVmlzaWJpbGl0eShyZW5kZXJlcikKKyAgICAgICAgfHwgY2xp
cHNDb21wb3NpdGluZ0Rlc2NlbmRhbnRzKCpyZW5kZXJlci5sYXllcigpKQorICAgICAgICB8fCBy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKHJlbmRlcmVyKQorICAgICAgICB8fCByZXF1
aXJlc0NvbXBvc2l0aW5nRm9yRmlsdGVycyhyZW5kZXJlcikKKyAgICAgICAgfHwgcmVxdWlyZXND
b21wb3NpdGluZ0ZvcldpbGxDaGFuZ2UocmVuZGVyZXIpCisgICAgICAgIHx8IHJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JQb3NpdGlvbihyZW5kZXJlciwgKnJlbmRlcmVyLmxheWVyKCksIHZpZXdwb3J0
Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKQorI2lmIFBMQVRGT1JNKElPUykKKyAgICAg
ICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclNjcm9sbGluZygqcmVuZGVyZXIubGF5ZXIoKSkK
KyNlbmRpZgorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxp
bmcoKnJlbmRlcmVyLmxheWVyKCkpOworfQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y2FuQmVDb21wb3NpdGVkKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgY29uc3QKK3sKKyAgICBp
ZiAobV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nICYmIGxheWVyLmlzU2VsZlBhaW50aW5nTGF5
ZXIoKSkgeworICAgICAgICBpZiAoIWxheWVyLmlzSW5zaWRlRmxvd1RocmVhZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8gQ1NTIFJlZ2lvbnMgZmxvdyB0aHJlYWRz
IGRvIG5vdCBuZWVkIHRvIGJlIGNvbXBvc2l0ZWQgYXMgd2UgdXNlIGNvbXBvc2l0ZWQgUmVuZGVy
UmVnaW9ucworICAgICAgICAvLyB0byByZW5kZXIgdGhlIGJhY2tncm91bmQgb2YgdGhlIFJlbmRl
ckZsb3dUaHJlYWQuCisgICAgICAgIGlmIChsYXllci5pc1JlbmRlckZsb3dUaHJlYWQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWly
ZXNPd25CYWNraW5nU3RvcmUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJM
YXllciogY29tcG9zaXRpbmdBbmNlc3RvckxheWVyLCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckNv
bXBvc2l0ZWRCb3VuZHNJbkFuY2VzdG9yLCBjb25zdCBMYXlvdXRSZWN0JiBhbmNlc3RvckNvbXBv
c2l0ZWRCb3VuZHMpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBsYXllci5yZW5kZXJl
cigpOworCisgICAgaWYgKGNvbXBvc2l0aW5nQW5jZXN0b3JMYXllcgorICAgICAgICAmJiAhKGNv
bXBvc2l0aW5nQW5jZXN0b3JMYXllci0+YmFja2luZygpLT5ncmFwaGljc0xheWVyKCktPmRyYXdz
Q29udGVudCgpCisgICAgICAgICAgICB8fCBjb21wb3NpdGluZ0FuY2VzdG9yTGF5ZXItPmJhY2tp
bmcoKS0+cGFpbnRzSW50b1dpbmRvdygpCisgICAgICAgICAgICB8fCBjb21wb3NpdGluZ0FuY2Vz
dG9yTGF5ZXItPmJhY2tpbmcoKS0+cGFpbnRzSW50b0NvbXBvc2l0ZWRBbmNlc3RvcigpKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobGF5ZXIuaXNSb290TGF5ZXIoKQorICAgICAg
ICB8fCBsYXllci50cmFuc2Zvcm0oKSAvLyBub3RlOiBleGNsdWRlcyBwZXJzcGVjdGl2ZSBhbmQg
dHJhbnNmb3JtU3R5bGUzRC4KKyAgICAgICAgfHwgcmVxdWlyZXNDb21wb3NpdGluZ0ZvclZpZGVv
KHJlbmRlcmVyKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yQ2FudmFzKHJlbmRl
cmVyKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yUGx1Z2luKHJlbmRlcmVyKQor
ICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnJhbWUocmVuZGVyZXIpCisgICAgICAg
IHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JCYWNrZmFjZVZpc2liaWxpdHkocmVuZGVyZXIpCisg
ICAgICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24ocmVuZGVyZXIpCisgICAg
ICAgIHx8IHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGaWx0ZXJzKHJlbmRlcmVyKQorICAgICAgICB8
fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yV2lsbENoYW5nZShyZW5kZXJlcikKKyAgICAgICAgfHwg
cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKHJlbmRlcmVyLCBsYXllcikKKyAgICAgICAg
fHwgcmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5nKGxheWVyKQorICAgICAg
ICB8fCByZW5kZXJlci5pc1RyYW5zcGFyZW50KCkKKyAgICAgICAgfHwgcmVuZGVyZXIuaGFzTWFz
aygpCisgICAgICAgIHx8IHJlbmRlcmVyLmhhc1JlZmxlY3Rpb24oKQorICAgICAgICB8fCByZW5k
ZXJlci5oYXNGaWx0ZXIoKQorICAgICAgICB8fCByZW5kZXJlci5oYXNCYWNrZHJvcEZpbHRlcigp
CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICB8fCByZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Ny
b2xsaW5nKGxheWVyKQorI2VuZGlmCisgICAgICAgICkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAobGF5ZXIubXVzdENvbXBvc2l0ZUZvckluZGlyZWN0UmVhc29ucygpKSB7CisgICAg
ICAgIFJlbmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIHJlYXNvbiA9IGxheWVy
LmluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oKTsKKyAgICAgICAgcmV0dXJuIHJlYXNvbiA9PSBS
ZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6T3ZlcmxhcAorICAgICAgICAg
ICAgfHwgcmVhc29uID09IFJlbmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpT
dGFja2luZworICAgICAgICAgICAgfHwgcmVhc29uID09IFJlbmRlckxheWVyOjpJbmRpcmVjdENv
bXBvc2l0aW5nUmVhc29uOjpCYWNrZ3JvdW5kTGF5ZXIKKyAgICAgICAgICAgIHx8IHJlYXNvbiA9
PSBSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6R3JhcGhpY2FsRWZmZWN0
CisgICAgICAgICAgICB8fCByZWFzb24gPT0gUmVuZGVyTGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRp
bmdSZWFzb246OlByZXNlcnZlM0Q7IC8vIHByZXNlcnZlLTNkIGhhcyB0byBjcmVhdGUgYmFja2lu
ZyBzdG9yZSB0byBlbnN1cmUgdGhhdCAzZC10cmFuc2Zvcm1lZCBlbGVtZW50cyBpbnRlcnNlY3Qu
CisgICAgfQorCisgICAgaWYgKCFhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMuY29udGFpbnMobGF5
ZXJDb21wb3NpdGVkQm91bmRzSW5BbmNlc3RvcikpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitDb21wb3NpdGluZ1JlYXNvbnMgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZWFzb25zRm9yQ29tcG9zaXRpbmcoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSBj
b25zdAoreworICAgIENvbXBvc2l0aW5nUmVhc29ucyByZWFzb25zID0gQ29tcG9zaXRpbmdSZWFz
b25Ob25lOworCisgICAgaWYgKCFsYXllci5pc0NvbXBvc2l0ZWQoKSkKKyAgICAgICAgcmV0dXJu
IHJlYXNvbnM7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IHJlbmRlcmVyRm9yQ29tcG9zaXRpbmdU
ZXN0cyhsYXllcik7CisKKyAgICBpZiAocmVxdWlyZXNDb21wb3NpdGluZ0ZvclRyYW5zZm9ybShy
ZW5kZXJlcikpCisgICAgICAgIHJlYXNvbnMgfD0gQ29tcG9zaXRpbmdSZWFzb24zRFRyYW5zZm9y
bTsKKworICAgIGlmIChyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVmlkZW8ocmVuZGVyZXIpKQorICAg
ICAgICByZWFzb25zIHw9IENvbXBvc2l0aW5nUmVhc29uVmlkZW87CisgICAgZWxzZSBpZiAocmVx
dWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyhyZW5kZXJlcikpCisgICAgICAgIHJlYXNvbnMgfD0g
Q29tcG9zaXRpbmdSZWFzb25DYW52YXM7CisgICAgZWxzZSBpZiAocmVxdWlyZXNDb21wb3NpdGlu
Z0ZvclBsdWdpbihyZW5kZXJlcikpCisgICAgICAgIHJlYXNvbnMgfD0gQ29tcG9zaXRpbmdSZWFz
b25QbHVnaW47CisgICAgZWxzZSBpZiAocmVxdWlyZXNDb21wb3NpdGluZ0ZvckZyYW1lKHJlbmRl
cmVyKSkKKyAgICAgICAgcmVhc29ucyB8PSBDb21wb3NpdGluZ1JlYXNvbklGcmFtZTsKKyAgICAK
KyAgICBpZiAoKGNhblJlbmRlcjNEVHJhbnNmb3JtcygpICYmIHJlbmRlcmVyLnN0eWxlKCkuYmFj
a2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVuKSkKKyAgICAgICAg
cmVhc29ucyB8PSBDb21wb3NpdGluZ1JlYXNvbkJhY2tmYWNlVmlzaWJpbGl0eUhpZGRlbjsKKwor
ICAgIGlmIChjbGlwc0NvbXBvc2l0aW5nRGVzY2VuZGFudHMoKnJlbmRlcmVyLmxheWVyKCkpKQor
ICAgICAgICByZWFzb25zIHw9IENvbXBvc2l0aW5nUmVhc29uQ2xpcHNDb21wb3NpdGluZ0Rlc2Nl
bmRhbnRzOworCisgICAgaWYgKHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24ocmVuZGVy
ZXIpKQorICAgICAgICByZWFzb25zIHw9IENvbXBvc2l0aW5nUmVhc29uQW5pbWF0aW9uOworCisg
ICAgaWYgKHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGaWx0ZXJzKHJlbmRlcmVyKSkKKyAgICAgICAg
cmVhc29ucyB8PSBDb21wb3NpdGluZ1JlYXNvbkZpbHRlcnM7CisKKyAgICBpZiAocmVxdWlyZXND
b21wb3NpdGluZ0ZvcldpbGxDaGFuZ2UocmVuZGVyZXIpKQorICAgICAgICByZWFzb25zIHw9IENv
bXBvc2l0aW5nUmVhc29uV2lsbENoYW5nZTsKKworICAgIGlmIChyZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yUG9zaXRpb24ocmVuZGVyZXIsICpyZW5kZXJlci5sYXllcigpKSkKKyAgICAgICAgcmVhc29u
cyB8PSByZW5kZXJlci5zdHlsZSgpLnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbiA/IENvbXBv
c2l0aW5nUmVhc29uUG9zaXRpb25GaXhlZCA6IENvbXBvc2l0aW5nUmVhc29uUG9zaXRpb25TdGlj
a3k7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JT
Y3JvbGxpbmcoKnJlbmRlcmVyLmxheWVyKCkpKQorICAgICAgICByZWFzb25zIHw9IENvbXBvc2l0
aW5nUmVhc29uT3ZlcmZsb3dTY3JvbGxpbmdUb3VjaDsKKyNlbmRpZgorCisgICAgaWYgKHJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZygqcmVuZGVyZXIubGF5ZXIoKSkpCisg
ICAgICAgIHJlYXNvbnMgfD0gQ29tcG9zaXRpbmdSZWFzb25PdmVyZmxvd1Njcm9sbGluZ1RvdWNo
OworCisgICAgc3dpdGNoIChyZW5kZXJlci5sYXllcigpLT5pbmRpcmVjdENvbXBvc2l0aW5nUmVh
c29uKCkpIHsKKyAgICBjYXNlIFJlbmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29u
OjpOb25lOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlbmRlckxheWVyOjpJbmRpcmVjdENv
bXBvc2l0aW5nUmVhc29uOjpTdGFja2luZzoKKyAgICAgICAgcmVhc29ucyB8PSBDb21wb3NpdGlu
Z1JlYXNvblN0YWNraW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlbmRlckxheWVyOjpJ
bmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpPdmVybGFwOgorICAgICAgICByZWFzb25zIHw9IENv
bXBvc2l0aW5nUmVhc29uT3ZlcmxhcDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZW5kZXJM
YXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6QmFja2dyb3VuZExheWVyOgorICAgICAg
ICByZWFzb25zIHw9IENvbXBvc2l0aW5nUmVhc29uTmVnYXRpdmVaSW5kZXhDaGlsZHJlbjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1Jl
YXNvbjo6R3JhcGhpY2FsRWZmZWN0OgorICAgICAgICBpZiAocmVuZGVyZXIuaGFzVHJhbnNmb3Jt
KCkpCisgICAgICAgICAgICByZWFzb25zIHw9IENvbXBvc2l0aW5nUmVhc29uVHJhbnNmb3JtV2l0
aENvbXBvc2l0ZWREZXNjZW5kYW50czsKKworICAgICAgICBpZiAocmVuZGVyZXIuaXNUcmFuc3Bh
cmVudCgpKQorICAgICAgICAgICAgcmVhc29ucyB8PSBDb21wb3NpdGluZ1JlYXNvbk9wYWNpdHlX
aXRoQ29tcG9zaXRlZERlc2NlbmRhbnRzOworCisgICAgICAgIGlmIChyZW5kZXJlci5oYXNNYXNr
KCkpCisgICAgICAgICAgICByZWFzb25zIHw9IENvbXBvc2l0aW5nUmVhc29uTWFza1dpdGhDb21w
b3NpdGVkRGVzY2VuZGFudHM7CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLmhhc1JlZmxlY3Rpb24o
KSkKKyAgICAgICAgICAgIHJlYXNvbnMgfD0gQ29tcG9zaXRpbmdSZWFzb25SZWZsZWN0aW9uV2l0
aENvbXBvc2l0ZWREZXNjZW5kYW50czsKKworICAgICAgICBpZiAocmVuZGVyZXIuaGFzRmlsdGVy
KCkgfHwgcmVuZGVyZXIuaGFzQmFja2Ryb3BGaWx0ZXIoKSkKKyAgICAgICAgICAgIHJlYXNvbnMg
fD0gQ29tcG9zaXRpbmdSZWFzb25GaWx0ZXJXaXRoQ29tcG9zaXRlZERlc2NlbmRhbnRzOworCisj
aWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICAgICAgaWYgKGxheWVyLmlzb2xhdGVzQ29t
cG9zaXRlZEJsZW5kaW5nKCkpCisgICAgICAgICAgICByZWFzb25zIHw9IENvbXBvc2l0aW5nUmVh
c29uSXNvbGF0ZXNDb21wb3NpdGVkQmxlbmRpbmdEZXNjZW5kYW50czsKKworICAgICAgICBpZiAo
bGF5ZXIuaGFzQmxlbmRNb2RlKCkpCisgICAgICAgICAgICByZWFzb25zIHw9IENvbXBvc2l0aW5n
UmVhc29uQmxlbmRpbmdXaXRoQ29tcG9zaXRlZERlc2NlbmRhbnRzOworI2VuZGlmCisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb246
OlBlcnNwZWN0aXZlOgorICAgICAgICByZWFzb25zIHw9IENvbXBvc2l0aW5nUmVhc29uUGVyc3Bl
Y3RpdmU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkluZGlyZWN0Q29t
cG9zaXRpbmdSZWFzb246OlByZXNlcnZlM0Q6CisgICAgICAgIHJlYXNvbnMgfD0gQ29tcG9zaXRp
bmdSZWFzb25QcmVzZXJ2ZTNEOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaW5D
b21wb3NpdGluZ01vZGUoKSAmJiByZW5kZXJlci5sYXllcigpLT5pc1Jvb3RMYXllcigpKQorICAg
ICAgICByZWFzb25zIHw9IENvbXBvc2l0aW5nUmVhc29uUm9vdDsKKworICAgIHJldHVybiByZWFz
b25zOworfQorCisjaWYgIUxPR19ESVNBQkxFRAorY29uc3QgY2hhciogUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpsb2dSZWFzb25zRm9yQ29tcG9zaXRpbmcoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
KQoreworICAgIENvbXBvc2l0aW5nUmVhc29ucyByZWFzb25zID0gcmVhc29uc0ZvckNvbXBvc2l0
aW5nKGxheWVyKTsKKworICAgIGlmIChyZWFzb25zICYgQ29tcG9zaXRpbmdSZWFzb24zRFRyYW5z
Zm9ybSkKKyAgICAgICAgcmV0dXJuICIzRCB0cmFuc2Zvcm0iOworCisgICAgaWYgKHJlYXNvbnMg
JiBDb21wb3NpdGluZ1JlYXNvblZpZGVvKQorICAgICAgICByZXR1cm4gInZpZGVvIjsKKyAgICBl
bHNlIGlmIChyZWFzb25zICYgQ29tcG9zaXRpbmdSZWFzb25DYW52YXMpCisgICAgICAgIHJldHVy
biAiY2FudmFzIjsKKyAgICBlbHNlIGlmIChyZWFzb25zICYgQ29tcG9zaXRpbmdSZWFzb25QbHVn
aW4pCisgICAgICAgIHJldHVybiAicGx1Z2luIjsKKyAgICBlbHNlIGlmIChyZWFzb25zICYgQ29t
cG9zaXRpbmdSZWFzb25JRnJhbWUpCisgICAgICAgIHJldHVybiAiaWZyYW1lIjsKKyAgICAKKyAg
ICBpZiAocmVhc29ucyAmIENvbXBvc2l0aW5nUmVhc29uQmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVu
KQorICAgICAgICByZXR1cm4gImJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbiI7CisKKyAgICBp
ZiAocmVhc29ucyAmIENvbXBvc2l0aW5nUmVhc29uQ2xpcHNDb21wb3NpdGluZ0Rlc2NlbmRhbnRz
KQorICAgICAgICByZXR1cm4gImNsaXBzIGNvbXBvc2l0aW5nIGRlc2NlbmRhbnRzIjsKKworICAg
IGlmIChyZWFzb25zICYgQ29tcG9zaXRpbmdSZWFzb25BbmltYXRpb24pCisgICAgICAgIHJldHVy
biAiYW5pbWF0aW9uIjsKKworICAgIGlmIChyZWFzb25zICYgQ29tcG9zaXRpbmdSZWFzb25GaWx0
ZXJzKQorICAgICAgICByZXR1cm4gImZpbHRlcnMiOworCisgICAgaWYgKHJlYXNvbnMgJiBDb21w
b3NpdGluZ1JlYXNvblBvc2l0aW9uRml4ZWQpCisgICAgICAgIHJldHVybiAicG9zaXRpb246IGZp
eGVkIjsKKworICAgIGlmIChyZWFzb25zICYgQ29tcG9zaXRpbmdSZWFzb25Qb3NpdGlvblN0aWNr
eSkKKyAgICAgICAgcmV0dXJuICJwb3NpdGlvbjogc3RpY2t5IjsKKworICAgIGlmIChyZWFzb25z
ICYgQ29tcG9zaXRpbmdSZWFzb25PdmVyZmxvd1Njcm9sbGluZ1RvdWNoKQorICAgICAgICByZXR1
cm4gIi13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaCI7CisKKyAgICBpZiAocmVhc29u
cyAmIENvbXBvc2l0aW5nUmVhc29uU3RhY2tpbmcpCisgICAgICAgIHJldHVybiAic3RhY2tpbmci
OworCisgICAgaWYgKHJlYXNvbnMgJiBDb21wb3NpdGluZ1JlYXNvbk92ZXJsYXApCisgICAgICAg
IHJldHVybiAib3ZlcmxhcCI7CisKKyAgICBpZiAocmVhc29ucyAmIENvbXBvc2l0aW5nUmVhc29u
TmVnYXRpdmVaSW5kZXhDaGlsZHJlbikKKyAgICAgICAgcmV0dXJuICJuZWdhdGl2ZSB6LWluZGV4
IGNoaWxkcmVuIjsKKworICAgIGlmIChyZWFzb25zICYgQ29tcG9zaXRpbmdSZWFzb25UcmFuc2Zv
cm1XaXRoQ29tcG9zaXRlZERlc2NlbmRhbnRzKQorICAgICAgICByZXR1cm4gInRyYW5zZm9ybSB3
aXRoIGNvbXBvc2l0ZWQgZGVzY2VuZGFudHMiOworCisgICAgaWYgKHJlYXNvbnMgJiBDb21wb3Np
dGluZ1JlYXNvbk9wYWNpdHlXaXRoQ29tcG9zaXRlZERlc2NlbmRhbnRzKQorICAgICAgICByZXR1
cm4gIm9wYWNpdHkgd2l0aCBjb21wb3NpdGVkIGRlc2NlbmRhbnRzIjsKKworICAgIGlmIChyZWFz
b25zICYgQ29tcG9zaXRpbmdSZWFzb25NYXNrV2l0aENvbXBvc2l0ZWREZXNjZW5kYW50cykKKyAg
ICAgICAgcmV0dXJuICJtYXNrIHdpdGggY29tcG9zaXRlZCBkZXNjZW5kYW50cyI7CisKKyAgICBp
ZiAocmVhc29ucyAmIENvbXBvc2l0aW5nUmVhc29uUmVmbGVjdGlvbldpdGhDb21wb3NpdGVkRGVz
Y2VuZGFudHMpCisgICAgICAgIHJldHVybiAicmVmbGVjdGlvbiB3aXRoIGNvbXBvc2l0ZWQgZGVz
Y2VuZGFudHMiOworCisgICAgaWYgKHJlYXNvbnMgJiBDb21wb3NpdGluZ1JlYXNvbkZpbHRlcldp
dGhDb21wb3NpdGVkRGVzY2VuZGFudHMpCisgICAgICAgIHJldHVybiAiZmlsdGVyIHdpdGggY29t
cG9zaXRlZCBkZXNjZW5kYW50cyI7CisKKyNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQorICAg
IGlmIChyZWFzb25zICYgQ29tcG9zaXRpbmdSZWFzb25CbGVuZGluZ1dpdGhDb21wb3NpdGVkRGVz
Y2VuZGFudHMpCisgICAgICAgIHJldHVybiAiYmxlbmRpbmcgd2l0aCBjb21wb3NpdGVkIGRlc2Nl
bmRhbnRzIjsKKworICAgIGlmIChyZWFzb25zICYgQ29tcG9zaXRpbmdSZWFzb25Jc29sYXRlc0Nv
bXBvc2l0ZWRCbGVuZGluZ0Rlc2NlbmRhbnRzKQorICAgICAgICByZXR1cm4gImlzb2xhdGVzIGNv
bXBvc2l0ZWQgYmxlbmRpbmcgZGVzY2VuZGFudHMiOworI2VuZGlmCisKKyAgICBpZiAocmVhc29u
cyAmIENvbXBvc2l0aW5nUmVhc29uUGVyc3BlY3RpdmUpCisgICAgICAgIHJldHVybiAicGVyc3Bl
Y3RpdmUiOworCisgICAgaWYgKHJlYXNvbnMgJiBDb21wb3NpdGluZ1JlYXNvblByZXNlcnZlM0Qp
CisgICAgICAgIHJldHVybiAicHJlc2VydmUtM2QiOworCisgICAgaWYgKHJlYXNvbnMgJiBDb21w
b3NpdGluZ1JlYXNvblJvb3QpCisgICAgICAgIHJldHVybiAicm9vdCI7CisKKyAgICByZXR1cm4g
IiI7Cit9CisjZW5kaWYKKworLy8gUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGxheWVyIGhhcyBz
b21lIGFuY2VzdG9yIGluIHRoZSBSZW5kZXJMYXllciBoaWVyYXJjaHkgdGhhdCBjbGlwcywKKy8v
IHVwIHRvIHRoZSBlbmNsb3NpbmcgY29tcG9zaXRpbmcgYW5jZXN0b3IuIFRoaXMgaXMgcmVxdWly
ZWQgYmVjYXVzZSBjb21wb3NpdGluZyBsYXllcnMgYXJlIHBhcmVudGVkCisvLyBhY2NvcmRpbmcg
dG8gdGhlIHotb3JkZXIgaGllcmFyY2h5LCB5ZXQgY2xpcHBpbmcgZ29lcyBkb3duIHRoZSByZW5k
ZXJlciBoaWVyYXJjaHkuCisvLyBUaHVzLCBhIFJlbmRlckxheWVyIGNhbiBiZSBjbGlwcGVkIGJ5
IGEgUmVuZGVyTGF5ZXIgdGhhdCBpcyBhbiBhbmNlc3RvciBpbiB0aGUgcmVuZGVyZXIgaGllcmFy
Y2h5LAorLy8gYnV0IGEgc2libGluZyBpbiB0aGUgei1vcmRlciBoaWVyYXJjaHkuCitib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y2xpcHBlZEJ5QW5jZXN0b3IoUmVuZGVyTGF5ZXImIGxheWVy
KSBjb25zdAoreworICAgIGlmICghbGF5ZXIuaXNDb21wb3NpdGVkKCkgfHwgIWxheWVyLnBhcmVu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJMYXllciogY29tcG9zaXRp
bmdBbmNlc3RvciA9IGxheWVyLmFuY2VzdG9yQ29tcG9zaXRpbmdMYXllcigpOworICAgIGlmICgh
Y29tcG9zaXRpbmdBbmNlc3RvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYg
dGhlIGNvbXBvc2l0aW5nQW5jZXN0b3IgY2xpcHMsIHRoYXQgd2lsbCBiZSB0YWtlbiBjYXJlIG9m
IGJ5IGNsaXBzQ29tcG9zaXRpbmdEZXNjZW5kYW50cygpLAorICAgIC8vIHNvIHdlIG9ubHkgY2Fy
ZSBhYm91dCBjbGlwcGluZyBiZXR3ZWVuIGl0cyBmaXJzdCBjaGlsZCB0aGF0IGlzIG91ciBhbmNl
c3RvciAodGhlIGNvbXB1dGVDbGlwUm9vdCksCisgICAgLy8gYW5kIGxheWVyLiBUaGUgZXhjZXB0
aW9uIGlzIHdoZW4gdGhlIGNvbXBvc2l0aW5nQW5jZXN0b3IgaXNvbGF0ZXMgY29tcG9zaXRlZCBi
bGVuZGluZyBjaGlsZHJlbiwKKyAgICAvLyBpbiB0aGlzIGNhc2UgaXQgaXMgbm90IGFsbG93ZWQg
dG8gY2xpcHNDb21wb3NpdGluZ0Rlc2NlbmRhbnRzKCkgYW5kIGVhY2ggb2YgaXRzIGNoaWxkcmVu
CisgICAgLy8gd2lsbCBiZSBjbGlwcGVkQnlBbmNlc3RvcigpcywgaW5jbHVkaW5nIHRoZSBjb21w
b3NpdGluZ0FuY2VzdG9yLgorICAgIFJlbmRlckxheWVyKiBjb21wdXRlQ2xpcFJvb3QgPSBjb21w
b3NpdGluZ0FuY2VzdG9yOworICAgIGlmICghY29tcG9zaXRpbmdBbmNlc3Rvci0+aXNvbGF0ZXND
b21wb3NpdGVkQmxlbmRpbmcoKSkgeworICAgICAgICBjb21wdXRlQ2xpcFJvb3QgPSBudWxscHRy
OworICAgICAgICBSZW5kZXJMYXllciogcGFyZW50ID0gJmxheWVyOworICAgICAgICB3aGlsZSAo
cGFyZW50KSB7CisgICAgICAgICAgICBSZW5kZXJMYXllciogbmV4dCA9IHBhcmVudC0+cGFyZW50
KCk7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBjb21wb3NpdGluZ0FuY2VzdG9yKSB7CisgICAg
ICAgICAgICAgICAgY29tcHV0ZUNsaXBSb290ID0gcGFyZW50OworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyZW50ID0gbmV4dDsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghY29tcHV0ZUNsaXBSb290IHx8IGNvbXB1dGVDbGlwUm9vdCA9PSAm
bGF5ZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuICFs
YXllci5iYWNrZ3JvdW5kQ2xpcFJlY3QoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRleHQoY29t
cHV0ZUNsaXBSb290LCBUZW1wb3JhcnlDbGlwUmVjdHMpKS5pc0luZmluaXRlKCk7IC8vIEZJWE1F
OiBJbmNvcnJlY3QgZm9yIENTUyByZWdpb25zLgorfQorCisvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUg
Z2l2ZW4gbGF5ZXIgaXMgYSBzdGFja2luZyBjb250ZXh0IGFuZCBoYXMgY29tcG9zaXRpbmcgY2hp
bGQKKy8vIGxheWVycyB0aGF0IGl0IG5lZWRzIHRvIGNsaXAuIEluIHRoaXMgY2FzZSB3ZSBpbnNl
cnQgYSBjbGlwcGluZyBHcmFwaGljc0xheWVyCisvLyBpbnRvIHRoZSBoaWVyYXJjaHkgYmV0d2Vl
biB0aGlzIGxheWVyIGFuZCBpdHMgY2hpbGRyZW4gaW4gdGhlIHotb3JkZXIgaGllcmFyY2h5Lgor
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsaXBzQ29tcG9zaXRpbmdEZXNjZW5kYW50cyhj
b25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxheWVyLmhhc0Nv
bXBvc2l0aW5nRGVzY2VuZGFudCgpICYmIGxheWVyLnJlbmRlcmVyKCkuaGFzQ2xpcE9yT3ZlcmZs
b3dDbGlwKCkgJiYgIWxheWVyLmlzb2xhdGVzQ29tcG9zaXRlZEJsZW5kaW5nKCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yU2Nyb2xsYWJs
ZUZyYW1lKCkgY29uc3QKK3sKKyAgICAvLyBOZWVkIHRoaXMgZG9uZSBmaXJzdCB0byBkZXRlcm1p
bmUgb3ZlcmZsb3cuCisgICAgQVNTRVJUKCFtX3JlbmRlclZpZXcubmVlZHNMYXlvdXQoKSk7Cisg
ICAgaWYgKGlzTWFpbkZyYW1lQ29tcG9zaXRvcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIShtX2NvbXBvc2l0aW5nVHJpZ2dlcnMgJiBDaHJvbWVDbGllbnQ6OlNjcm9sbGFi
bGVJbm5lckZyYW1lVHJpZ2dlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuaXNTY3JvbGxhYmxlKCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNmb3JtKFJlbmRl
ckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKSBjb25zdAoreworICAgIGlmICghKG1fY29tcG9z
aXRpbmdUcmlnZ2VycyAmIENocm9tZUNsaWVudDo6VGhyZWVEVHJhbnNmb3JtVHJpZ2dlcikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE5vdGUgdGhhdCB3ZSBhc2sgdGhlIHJlbmRl
cmVyIGlmIGl0IGhhcyBhIHRyYW5zZm9ybSwgYmVjYXVzZSB0aGUgc3R5bGUgbWF5IGhhdmUgdHJh
bnNmb3JtcywKKyAgICAvLyBidXQgdGhlIHJlbmRlcmVyIG1heSBiZSBhbiBpbmxpbmUgdGhhdCBk
b2Vzbid0IHN1cHBwb3J0IHRoZW0uCisgICAgcmV0dXJuIHJlbmRlcmVyLmhhc1RyYW5zZm9ybSgp
ICYmIHJlbmRlcmVyLnN0eWxlKCkudHJhbnNmb3JtKCkuaGFzM0RPcGVyYXRpb24oKTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JCYWNrZmFj
ZVZpc2liaWxpdHkoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpIGNvbnN0Cit7Cisg
ICAgaWYgKCEobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xpZW50OjpUaHJlZURUcmFu
c2Zvcm1UcmlnZ2VyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJlbmRlcmVy
LnN0eWxlKCkuYmFja2ZhY2VWaXNpYmlsaXR5KCkgIT0gQmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVu
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGlmIChyZW5kZXJlci5sYXll
cigpLT5oYXMzRFRyYW5zZm9ybWVkQW5jZXN0b3IoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgLy8gRklYTUU6IHdvcmthcm91bmQgZm9yIHdlYmtpdC5vcmcvYi8xMzI4MDEKKyAg
ICBSZW5kZXJMYXllciogc3RhY2tpbmdDb250ZXh0ID0gcmVuZGVyZXIubGF5ZXIoKS0+c3RhY2tp
bmdDb250YWluZXIoKTsKKyAgICBpZiAoc3RhY2tpbmdDb250ZXh0ICYmIHN0YWNraW5nQ29udGV4
dC0+cmVuZGVyZXIoKS5zdHlsZSgpLnRyYW5zZm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1TdHls
ZTNEUHJlc2VydmUzRCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9y
VmlkZW8oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgaWYg
KCEobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xpZW50OjpWaWRlb1RyaWdnZXIpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIGlmIChpczxSZW5k
ZXJWaWRlbz4ocmVuZGVyZXIpKSB7CisgICAgICAgIGF1dG8mIHZpZGVvID0gZG93bmNhc3Q8UmVu
ZGVyVmlkZW8+KHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuICh2aWRlby5yZXF1aXJlc0ltbWVk
aWF0ZUNvbXBvc2l0aW5nKCkgfHwgdmlkZW8uc2hvdWxkRGlzcGxheVZpZGVvKCkpICYmIGNhbkFj
Y2VsZXJhdGVWaWRlb1JlbmRlcmluZyh2aWRlbyk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ocmVuZGVyZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyhSZW5kZXJM
YXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikgY29uc3QKK3sKKyAgICBpZiAoIShtX2NvbXBvc2l0
aW5nVHJpZ2dlcnMgJiBDaHJvbWVDbGllbnQ6OkNhbnZhc1RyaWdnZXIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAocmVuZGVyZXIuaXNDYW52YXMoKSkgeworI2lmIFVTRShDT01Q
T1NJVElOR19GT1JfU01BTExfQ0FOVkFTRVMpCisgICAgICAgIGJvb2wgaXNDYW52YXNMYXJnZUVu
b3VnaFRvRm9yY2VDb21wb3NpdGluZyA9IHRydWU7CisjZWxzZQorICAgICAgICBIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyLmVs
ZW1lbnQoKSk7CisgICAgICAgIGF1dG8gY2FudmFzQXJlYSA9IGNhbnZhcy0+c2l6ZSgpLmFyZWE8
UmVjb3JkT3ZlcmZsb3c+KCk7CisgICAgICAgIGJvb2wgaXNDYW52YXNMYXJnZUVub3VnaFRvRm9y
Y2VDb21wb3NpdGluZyA9ICFjYW52YXNBcmVhLmhhc092ZXJmbG93ZWQoKSAmJiBjYW52YXNBcmVh
LnVuc2FmZUdldCgpID49IGNhbnZhc0FyZWFUaHJlc2hvbGRSZXF1aXJpbmdDb21wb3NpdGluZzsK
KyNlbmRpZgorICAgICAgICBDYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5IGNvbXBvc2l0aW5nU3Ry
YXRlZ3kgPSBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKTsKKyAgICAgICAgcmV0
dXJuIGNvbXBvc2l0aW5nU3RyYXRlZ3kgPT0gQ2FudmFzQXNMYXllckNvbnRlbnRzIHx8IChjb21w
b3NpdGluZ1N0cmF0ZWd5ID09IENhbnZhc1BhaW50ZWRUb0xheWVyICYmIGlzQ2FudmFzTGFyZ2VF
bm91Z2hUb0ZvcmNlQ29tcG9zaXRpbmcpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQbHVn
aW4oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgaWYgKCEo
bV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xpZW50OjpQbHVnaW5UcmlnZ2VyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBjb21wb3NpdGUgPSBpczxSZW5kZXJFbWJl
ZGRlZE9iamVjdD4ocmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0Pihy
ZW5kZXJlcikuYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOworICAgIGlmICghY29tcG9z
aXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3JlZXZhbHVhdGVDb21wb3NpdGlu
Z0FmdGVyTGF5b3V0ID0gdHJ1ZTsKKyAgICAKKyAgICBSZW5kZXJXaWRnZXQmIHBsdWdpblJlbmRl
cmVyID0gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcik7CisgICAgLy8gSWYgd2UgY2Fu
J3QgcmVsaWFibHkga25vdyB0aGUgc2l6ZSBvZiB0aGUgcGx1Z2luIHlldCwgZG9uJ3QgY2hhbmdl
IGNvbXBvc2l0aW5nIHN0YXRlLgorICAgIGlmIChwbHVnaW5SZW5kZXJlci5uZWVkc0xheW91dCgp
KQorICAgICAgICByZXR1cm4gcGx1Z2luUmVuZGVyZXIuaXNDb21wb3NpdGVkKCk7CisKKyAgICAv
LyBEb24ndCBnbyBpbnRvIGNvbXBvc2l0aW5nIG1vZGUgaWYgaGVpZ2h0IG9yIHdpZHRoIGFyZSB6
ZXJvLCBvciBzaXplIGlzIDF4MS4KKyAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSBzbmFwcGVkSW50
UmVjdChwbHVnaW5SZW5kZXJlci5jb250ZW50Qm94UmVjdCgpKTsKKyAgICByZXR1cm4gY29udGVu
dEJveC5oZWlnaHQoKSAqIGNvbnRlbnRCb3gud2lkdGgoKSA+IDE7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yRnJhbWUoUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYgcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgaWYgKCFpczxSZW5kZXJXaWRnZXQ+
KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZnJhbWVSZW5k
ZXJlciA9IGRvd25jYXN0PFJlbmRlcldpZGdldD4ocmVuZGVyZXIpOworICAgIGlmICghZnJhbWVS
ZW5kZXJlci5yZXF1aXJlc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9yZWV2YWx1YXRlQ29tcG9zaXRpbmdBZnRlckxheW91dCA9IHRydWU7
CisKKyAgICAvLyBJZiB3ZSBjYW4ndCByZWxpYWJseSBrbm93IHRoZSBzaXplIG9mIHRoZSBpZnJh
bWUgeWV0LCBkb24ndCBjaGFuZ2UgY29tcG9zaXRpbmcgc3RhdGUuCisgICAgaWYgKCFmcmFtZVJl
bmRlcmVyLnBhcmVudCgpIHx8IGZyYW1lUmVuZGVyZXIubmVlZHNMYXlvdXQoKSkKKyAgICAgICAg
cmV0dXJuIGZyYW1lUmVuZGVyZXIuaXNDb21wb3NpdGVkKCk7CisgICAgCisgICAgLy8gRG9uJ3Qg
Z28gaW50byBjb21wb3NpdGluZyBtb2RlIGlmIGhlaWdodCBvciB3aWR0aCBhcmUgemVyby4KKyAg
ICByZXR1cm4gIXNuYXBwZWRJbnRSZWN0KGZyYW1lUmVuZGVyZXIuY29udGVudEJveFJlY3QoKSku
aXNFbXB0eSgpOworfQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21w
b3NpdGluZ0ZvckFuaW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikgY29u
c3QKK3sKKyAgICBpZiAoIShtX2NvbXBvc2l0aW5nVHJpZ2dlcnMgJiBDaHJvbWVDbGllbnQ6OkFu
aW1hdGlvblRyaWdnZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBBbmlt
YXRpb25CYXNlOjpSdW5uaW5nU3RhdGUgYWN0aXZlQW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25C
YXNlOjpSdW5uaW5nIHwgQW5pbWF0aW9uQmFzZTo6UGF1c2VkOworICAgIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXImIGFuaW1Db250cm9sbGVyID0gcmVuZGVyZXIuYW5pbWF0aW9uKCk7CisgICAgcmV0
dXJuIChhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVy
LCBDU1NQcm9wZXJ0eU9wYWNpdHksIGFjdGl2ZUFuaW1hdGlvblN0YXRlKQorICAgICAgICAgICAg
JiYgKGluQ29tcG9zaXRpbmdNb2RlKCkgfHwgKG1fY29tcG9zaXRpbmdUcmlnZ2VycyAmIENocm9t
ZUNsaWVudDo6QW5pbWF0ZWRPcGFjaXR5VHJpZ2dlcikpKQorICAgICAgICAgICAgfHwgYW5pbUNv
bnRyb2xsZXIuaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVy
dHlGaWx0ZXIsIGFjdGl2ZUFuaW1hdGlvblN0YXRlKQorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVM
XzIpCisgICAgICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJl
bmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyLCBhY3RpdmVB
bmltYXRpb25TdGF0ZSkKKyNlbmRpZgorICAgICAgICAgICAgfHwgYW5pbUNvbnRyb2xsZXIuaXNS
dW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0s
IGFjdGl2ZUFuaW1hdGlvblN0YXRlKTsKK30KKworYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JJbmRpcmVjdFJlYXNvbihSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlciwgYm9vbCBoYXNDb21wb3NpdGVkRGVzY2VuZGFudHMsIGJvb2wgaGFzM0RU
cmFuc2Zvcm1lZERlc2NlbmRhbnRzLCBSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1Jl
YXNvbiYgcmVhc29uKSBjb25zdAoreworICAgIFJlbmRlckxheWVyJiBsYXllciA9ICpkb3duY2Fz
dDxSZW5kZXJCb3hNb2RlbE9iamVjdD4ocmVuZGVyZXIpLmxheWVyKCk7CisKKyAgICAvLyBXaGVu
IGEgbGF5ZXIgaGFzIGNvbXBvc2l0ZWQgZGVzY2VuZGFudHMsIHNvbWUgZWZmZWN0cywgbGlrZSAy
ZCB0cmFuc2Zvcm1zLCBmaWx0ZXJzLCBtYXNrcyBldGMgbXVzdCBiZSBpbXBsZW1lbnRlZAorICAg
IC8vIHZpYSBjb21wb3NpdGluZyBzbyB0aGF0IHRoZXkgYWxzbyBhcHBseSB0byB0aG9zZSBjb21w
b3NpdGVkIGRlc2NlbmRhbnRzLgorICAgIGlmIChoYXNDb21wb3NpdGVkRGVzY2VuZGFudHMgJiYg
KGxheWVyLmlzb2xhdGVzQ29tcG9zaXRlZEJsZW5kaW5nKCkgfHwgbGF5ZXIudHJhbnNmb3JtKCkg
fHwgcmVuZGVyZXIuY3JlYXRlc0dyb3VwKCkgfHwgcmVuZGVyZXIuaGFzUmVmbGVjdGlvbigpIHx8
IHJlbmRlcmVyLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkpIHsKKyAgICAg
ICAgcmVhc29uID0gUmVuZGVyTGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb246OkdyYXBo
aWNhbEVmZmVjdDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gQSBsYXll
ciB3aXRoIHByZXNlcnZlLTNkIG9yIHBlcnNwZWN0aXZlIG9ubHkgbmVlZHMgdG8gYmUgY29tcG9z
aXRlZCBpZiB0aGVyZSBhcmUgZGVzY2VuZGFudCBsYXllcnMgdGhhdAorICAgIC8vIHdpbGwgYmUg
YWZmZWN0ZWQgYnkgdGhlIHByZXNlcnZlLTNkIG9yIHBlcnNwZWN0aXZlLgorICAgIGlmIChoYXMz
RFRyYW5zZm9ybWVkRGVzY2VuZGFudHMpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCku
dHJhbnNmb3JtU3R5bGUzRCgpID09IFRyYW5zZm9ybVN0eWxlM0RQcmVzZXJ2ZTNEKSB7CisgICAg
ICAgICAgICByZWFzb24gPSBSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6
UHJlc2VydmUzRDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgCisg
ICAgICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLmhhc1BlcnNwZWN0aXZlKCkpIHsKKyAgICAgICAg
ICAgIHJlYXNvbiA9IFJlbmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpQZXJz
cGVjdGl2ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmVhc29uID0gUmVuZGVyTGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb246Ok5vbmU7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c3R5
bGVDaGFuZ2VNYXlBZmZlY3RJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29ucyhjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIG9sZFN0eWxlKQor
eworICAgIGlmIChyZW5kZXJlci5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlci5zdHls
ZSgpOworICAgIGlmIChSZW5kZXJFbGVtZW50OjpjcmVhdGVzR3JvdXBGb3JTdHlsZShzdHlsZSkg
IT0gUmVuZGVyRWxlbWVudDo6Y3JlYXRlc0dyb3VwRm9yU3R5bGUob2xkU3R5bGUpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc3R5bGUuaXNvbGF0aW9uKCkgIT0gb2xkU3R5bGUuaXNv
bGF0aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChzdHlsZS5oYXNUcmFuc2Zv
cm0oKSAhPSBvbGRTdHlsZS5oYXNUcmFuc2Zvcm0oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgaWYgKHN0eWxlLmJveFJlZmxlY3QoKSAhPSBvbGRTdHlsZS5ib3hSZWZsZWN0KCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGlmIChzdHlsZS50cmFuc2Zvcm1TdHlsZTNEKCkgIT0gb2xk
U3R5bGUudHJhbnNmb3JtU3R5bGUzRCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
c3R5bGUuaGFzUGVyc3BlY3RpdmUoKSAhPSBvbGRTdHlsZS5oYXNQZXJzcGVjdGl2ZSgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JGaWx0ZXJzKFJlbmRlckxheWVy
TW9kZWxPYmplY3QmIHJlbmRlcmVyKSBjb25zdAoreworI2lmIEVOQUJMRShGSUxURVJTX0xFVkVM
XzIpCisgICAgaWYgKHJlbmRlcmVyLmhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworI2VuZGlmCisKKyAgICBpZiAoIShtX2NvbXBvc2l0aW5nVHJpZ2dlcnMgJiBDaHJv
bWVDbGllbnQ6OkZpbHRlclRyaWdnZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gcmVuZGVyZXIuaGFzRmlsdGVyKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yV2lsbENoYW5nZShSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlcikgY29uc3QKK3sKKyAgICBpZiAoIXJlbmRlcmVyLnN0eWxlKCkud2lsbENo
YW5nZSgpIHx8ICFyZW5kZXJlci5zdHlsZSgpLndpbGxDaGFuZ2UoKS0+Y2FuVHJpZ2dlckNvbXBv
c2l0aW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpczxSZW5kZXJCb3g+
KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gcmVuZGVyZXIu
c3R5bGUoKS53aWxsQ2hhbmdlKCktPmNhblRyaWdnZXJDb21wb3NpdGluZ09uSW5saW5lKCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjppc0FzeW5jU2Nyb2xsYWJsZVN0aWNreUxh
eWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZXIqKiBlbmNsb3Np
bmdBY2NlbGVyYXRlZE92ZXJmbG93TGF5ZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheWVyLnJl
bmRlcmVyKCkuaXNTdGlja3lQb3NpdGlvbmVkKCkpOworCisgICAgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ092ZXJmbG93TGF5ZXIgPSBsYXllci5lbmNsb3NpbmdPdmVyZmxvd0NsaXBMYXllcihFeGNs
dWRlU2VsZik7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKGVuY2xvc2luZ092ZXJmbG93
TGF5ZXIgJiYgZW5jbG9zaW5nT3ZlcmZsb3dMYXllci0+aGFzVG91Y2hTY3JvbGxhYmxlT3ZlcmZs
b3coKSkgeworICAgICAgICBpZiAoZW5jbG9zaW5nQWNjZWxlcmF0ZWRPdmVyZmxvd0xheWVyKQor
ICAgICAgICAgICAgKmVuY2xvc2luZ0FjY2VsZXJhdGVkT3ZlcmZsb3dMYXllciA9IGVuY2xvc2lu
Z092ZXJmbG93TGF5ZXI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGVuY2xvc2luZ0FjY2VsZXJhdGVkT3ZlcmZsb3dMYXllcik7CisjZW5kaWYK
KyAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgaW5zaWRlIG5vcm1hbCBvdmVyZmxvdywgaXQncyBub3Qg
YXN5bmMtc2Nyb2xsYWJsZS4KKyAgICBpZiAoZW5jbG9zaW5nT3ZlcmZsb3dMYXllcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gTm8gb3ZlcmZsb3cgYW5jZXN0b3IsIHNvIHNlZSBp
ZiB0aGUgZnJhbWUgc3VwcG9ydHMgYXN5bmMgc2Nyb2xsaW5nLgorICAgIGlmIChoYXNDb29yZGlu
YXRlZFNjcm9sbGluZygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworI2lmIFBMQVRGT1JNKElP
UykKKyAgICAvLyBpT1MgV0sxIGhhcyBmaXhlZC9zdGlja3kgc3VwcG9ydCBpbiB0aGUgbWFpbiBm
cmFtZSB2aWEgV2ViRml4ZWRQb3NpdGlvbkNvbnRlbnQuCisgICAgcmV0dXJuIGlzTWFpbkZyYW1l
Q29tcG9zaXRvcigpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlj
a3lMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIGNvbnN0Cit7CisgICAgaWYgKGxheWVy
LnJlbmRlcmVyKCkuaXNTdGlja3lQb3NpdGlvbmVkKCkpCisgICAgICAgIHJldHVybiBpc0FzeW5j
U2Nyb2xsYWJsZVN0aWNreUxheWVyKGxheWVyKTsKKworICAgIGlmIChsYXllci5yZW5kZXJlcigp
LnN0eWxlKCkucG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBGSVhNRTogSGFuZGxlIGZpeGVkIGluc2lkZSBvZiBhIHRyYW5zZm9ybSwg
d2hpY2ggc2hvdWxkIG5vdCBiZWhhdmUgYXMgZml4ZWQuCisgICAgZm9yIChSZW5kZXJMYXllciog
c3RhY2tpbmdDb250YWluZXIgPSBsYXllci5zdGFja2luZ0NvbnRhaW5lcigpOyBzdGFja2luZ0Nv
bnRhaW5lcjsgc3RhY2tpbmdDb250YWluZXIgPSBzdGFja2luZ0NvbnRhaW5lci0+c3RhY2tpbmdD
b250YWluZXIoKSkgeworICAgICAgICBpZiAoc3RhY2tpbmdDb250YWluZXItPmlzQ29tcG9zaXRl
ZCgpICYmIHN0YWNraW5nQ29udGFpbmVyLT5yZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSA9
PSBGaXhlZFBvc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB1c2VDb29yZGluYXRlZFNjcm9sbGluZ0Zv
ckxheWVyKFJlbmRlclZpZXcmIHZpZXcsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKK3sKKyAg
ICBpZiAobGF5ZXIuaXNSb290TGF5ZXIoKSAmJiB2aWV3LmZyYW1lVmlldygpLmZyYW1lKCkuaXNN
YWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgcmV0dXJuIGxheWVyLmhhc1RvdWNoU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisjZWxzZQorICAg
IHJldHVybiBsYXllci5uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyNlbmRpZgorfQorCiti
b29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9u
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJMYXllciYgbGF5
ZXIsIFJlbmRlckxheWVyOjpWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiog
dmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24pIGNvbnN0Cit7CisgICAgLy8g
cG9zaXRpb246Zml4ZWQgZWxlbWVudHMgdGhhdCBjcmVhdGUgdGhlaXIgb3duIHN0YWNraW5nIGNv
bnRleHQgKGUuZy4gaGF2ZSBhbiBleHBsaWNpdCB6LWluZGV4LAorICAgIC8vIG9wYWNpdHksIHRy
YW5zZm9ybSkgY2FuIGdldCB0aGVpciBvd24gY29tcG9zaXRlZCBsYXllci4gQSBzdGFja2luZyBj
b250ZXh0IGlzIHJlcXVpcmVkIG90aGVyd2lzZQorICAgIC8vIHotaW5kZXggYW5kIGNsaXBwaW5n
IHdpbGwgYmUgYnJva2VuLgorICAgIGlmICghcmVuZGVyZXIuaXNQb3NpdGlvbmVkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBFUG9zaXRpb24gcG9zaXRpb24gPSByZW5kZXJl
ci5zdHlsZSgpLnBvc2l0aW9uKCk7CisgICAgYm9vbCBpc0ZpeGVkID0gcmVuZGVyZXIuaXNPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkgJiYgcG9zaXRpb24gPT0gRml4ZWRQb3NpdGlvbjsKKyAgICBpZiAo
aXNGaXhlZCAmJiAhbGF5ZXIuaXNTdGFja2luZ0NvbnRhaW5lcigpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgYm9vbCBpc1N0aWNreSA9IHJlbmRlcmVyLmlzSW5GbG93UG9zaXRp
b25lZCgpICYmIHBvc2l0aW9uID09IFN0aWNreVBvc2l0aW9uOworICAgIGlmICghaXNGaXhlZCAm
JiAhaXNTdGlja3kpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBhY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQgc2hvdWxkIHByb2JhYmx5
IGJlIHJlbmFtZWQgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZXdwb3J0Q29uc3RyYWluZWRQ
b3NpdGlvbkVuYWJsZWQoKS4KKyAgICBpZiAoIW1fcmVuZGVyVmlldy5zZXR0aW5ncygpLmFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoaXNTdGlja3kpCisgICAgICAgIHJldHVybiBpc0FzeW5jU2Ny
b2xsYWJsZVN0aWNreUxheWVyKGxheWVyKTsKKworICAgIGF1dG8gY29udGFpbmVyID0gcmVuZGVy
ZXIuY29udGFpbmVyKCk7CisgICAgLy8gSWYgdGhlIHJlbmRlcmVyIGlzIG5vdCBob29rZWQgdXAg
eWV0IHRoZW4gd2UgaGF2ZSB0byB3YWl0IHVudGlsIGl0IGlzLgorICAgIGlmICghY29udGFpbmVy
KSB7CisgICAgICAgIG1fcmVldmFsdWF0ZUNvbXBvc2l0aW5nQWZ0ZXJMYXlvdXQgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRG9uJ3QgcHJvbW90ZSBmaXhl
ZCBwb3NpdGlvbiBlbGVtZW50cyB0aGF0IGFyZSBkZXNjZW5kYW50cyBvZiBhIG5vbi12aWV3IGNv
bnRhaW5lciwgZS5nLiB0cmFuc2Zvcm1lZCBlbGVtZW50cy4KKyAgICAvLyBUaGV5IHdpbGwgc3Rh
eSBmaXhlZCB3cnQgdGhlIGNvbnRhaW5lciByYXRoZXIgdGhhbiB0aGUgZW5jbG9zaW5nIGZyYW1l
LgorICAgIGlmIChjb250YWluZXIgIT0gJm1fcmVuZGVyVmlldyAmJiAhcmVuZGVyZXIuZml4ZWRQ
b3NpdGlvbmVkV2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgICAgIGlmICh2
aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbikKKyAgICAgICAgICAgICp2aWV3
cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiA9IFJlbmRlckxheWVyOjpOb3RDb21w
b3NpdGVkRm9yTm9uVmlld0NvbnRhaW5lcjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICAvLyBTdWJzZXF1ZW50IHRlc3RzIGRlcGVuZCBvbiBsYXlvdXQuIElmIHdlIGNh
bid0IHRlbGwgbm93LCBqdXN0IGtlZXAgdGhpbmdzIHRoZSB3YXkgdGhleSBhcmUgdW50aWwgbGF5
b3V0IGlzIGRvbmUuCisgICAgaWYgKCFtX2luUG9zdExheW91dFVwZGF0ZSkgeworICAgICAgICBt
X3JlZXZhbHVhdGVDb21wb3NpdGluZ0FmdGVyTGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IGxheWVyLmlzQ29tcG9zaXRlZCgpOworICAgIH0KKworICAgIGJvb2wgcGFpbnRzQ29udGVudCA9
IGxheWVyLmlzVmlzdWFsbHlOb25FbXB0eSgpIHx8IGxheWVyLmhhc1Zpc2libGVEZXNjZW5kYW50
KCk7CisgICAgaWYgKCFwYWludHNDb250ZW50KSB7CisgICAgICAgIGlmICh2aWV3cG9ydENvbnN0
cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbikKKyAgICAgICAgICAgICp2aWV3cG9ydENvbnN0cmFp
bmVkTm90Q29tcG9zaXRlZFJlYXNvbiA9IFJlbmRlckxheWVyOjpOb3RDb21wb3NpdGVkRm9yTm9W
aXNpYmxlQ29udGVudDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEZp
eGVkIHBvc2l0aW9uIGVsZW1lbnRzIHRoYXQgYXJlIGludmlzaWJsZSBpbiB0aGUgY3VycmVudCB2
aWV3IGRvbid0IGdldCB0aGVpciBvd24gbGF5ZXIuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBoYXZlIHRvIGNoZWNrIHVzZUZpeGVkTGF5b3V0KCkgaGVyZTsgb25lIG9mIHRoZSB2aWV3cG9y
dCByZWN0cyBuZWVkcyB0byBnaXZlIHRoZSBjb3JyZWN0IGFuc3dlci4KKyAgICBMYXlvdXRSZWN0
IHZpZXdCb3VuZHM7CisgICAgaWYgKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS51c2VGaXhlZExh
eW91dCgpKQorICAgICAgICB2aWV3Qm91bmRzID0gbV9yZW5kZXJWaWV3LnVuc2NhbGVkRG9jdW1l
bnRSZWN0KCk7CisgICAgZWxzZQorICAgICAgICB2aWV3Qm91bmRzID0gbV9yZW5kZXJWaWV3LmZy
YW1lVmlldygpLnJlY3RGb3JGaXhlZFBvc2l0aW9uTGF5b3V0KCk7CisKKyAgICBMYXlvdXRSZWN0
IGxheWVyQm91bmRzID0gbGF5ZXIuY2FsY3VsYXRlTGF5ZXJCb3VuZHMoJmxheWVyLCBMYXlvdXRT
aXplKCksIFJlbmRlckxheWVyOjpVc2VMb2NhbENsaXBSZWN0SWZQb3NzaWJsZSB8IFJlbmRlckxh
eWVyOjpJbmNsdWRlTGF5ZXJGaWx0ZXJPdXRzZXRzIHwgUmVuZGVyTGF5ZXI6OlVzZUZyYWdtZW50
Qm94ZXNFeGNsdWRpbmdDb21wb3NpdGluZworICAgICAgICB8IFJlbmRlckxheWVyOjpFeGNsdWRl
SGlkZGVuRGVzY2VuZGFudHMgfCBSZW5kZXJMYXllcjo6RG9udENvbnN0cmFpbkZvck1hc2sgfCBS
ZW5kZXJMYXllcjo6SW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyk7CisgICAgLy8gTWFwIHRv
IG1fcmVuZGVyVmlldyB0byBpZ25vcmUgcGFnZSBzY2FsZS4KKyAgICBGbG9hdFJlY3QgYWJzb2x1
dGVCb3VuZHMgPSBsYXllci5yZW5kZXJlcigpLmxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVj
dChsYXllckJvdW5kcyksICZtX3JlbmRlclZpZXcpLmJvdW5kaW5nQm94KCk7CisgICAgaWYgKCF2
aWV3Qm91bmRzLmludGVyc2VjdHMoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZUJvdW5kcykpKSB7
CisgICAgICAgIGlmICh2aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbikKKyAg
ICAgICAgICAgICp2aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiA9IFJlbmRl
ckxheWVyOjpOb3RDb21wb3NpdGVkRm9yQm91bmRzT3V0T2ZWaWV3OworICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oQ29tcG9zaXRpbmcsIHN0cmVhbSA8PCAiTGF5ZXIgIiA8PCAmbGF5ZXIgPDwgIiBi
b3VuZHMgIiA8PCBsYXllckJvdW5kcyA8PCAiIG91dHNpZGUgdmlzaWJsZSByZWN0ICIgPDwgdmll
d0JvdW5kcyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0
aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSBjb25zdAor
eworICAgIHJldHVybiBsYXllci5uZWVkc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKK30KKworI2lm
IFBMQVRGT1JNKElPUykKK2Jvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBv
c2l0aW5nRm9yU2Nyb2xsaW5nKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgY29uc3QKK3sKKyAg
ICBpZiAoIWxheWVyLmhhc0FjY2VsZXJhdGVkVG91Y2hTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2luUG9zdExheW91dFVwZGF0ZSkgeworICAgICAgICBt
X3JlZXZhbHVhdGVDb21wb3NpdGluZ0FmdGVyTGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IGxheWVyLmlzQ29tcG9zaXRlZCgpOworICAgIH0KKworICAgIHJldHVybiBsYXllci5oYXNUb3Vj
aFNjcm9sbGFibGVPdmVyZmxvdygpOworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjppc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCYgcmVuZGVyZXIpIGNvbnN0Cit7CisgICAgaWYgKCEobV9jb21wb3NpdGluZ1RyaWdnZXJzICYg
Q2hyb21lQ2xpZW50OjpBbmltYXRpb25UcmlnZ2VyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHJlbmRlcmVyLmFuaW1hdGlvbigpLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVu
ZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5VHJhbnNmb3JtLCBBbmltYXRpb25CYXNlOjpSdW5u
aW5nIHwgQW5pbWF0aW9uQmFzZTo6UGF1c2VkKTsKK30KKworLy8gSWYgYW4gZWxlbWVudCBoYXMg
bmVnYXRpdmUgei1pbmRleCBjaGlsZHJlbiwgdGhvc2UgY2hpbGRyZW4gcmVuZGVyIGluIGZyb250
IG9mIHRoZSAKKy8vIGxheWVyIGJhY2tncm91bmQsIHNvIHdlIG5lZWQgYW4gZXh0cmEgJ2NvbnRl
bnRzJyBsYXllciBmb3IgdGhlIGZvcmVncm91bmQgb2YgdGhlIGxheWVyCisvLyBvYmplY3QuCiti
b29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bmVlZHNDb250ZW50c0NvbXBvc2l0aW5nTGF5ZXIo
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSBjb25zdAoreworICAgIHJldHVybiBsYXllci5oYXNO
ZWdhdGl2ZVpPcmRlckxpc3QoKTsKK30KKworYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzU2Nyb2xsTGF5ZXIoUm9vdExheWVyQXR0YWNobWVudCBhdHRhY2htZW50KSBjb25zdAor
eworICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwor
CisgICAgLy8gVGhpcyBhcHBsaWVzIHdoZW4gdGhlIGFwcGxpY2F0aW9uIFVJIGhhbmRsZXMgc2Ny
b2xsaW5nLCBpbiB3aGljaCBjYXNlIFJlbmRlckxheWVyQ29tcG9zaXRvciBkb2Vzbid0IG5lZWQg
dG8gbWFuYWdlIGl0LgorICAgIGlmIChmcmFtZVZpZXcuZGVsZWdhdGVzU2Nyb2xsaW5nKCkgJiYg
aXNNYWluRnJhbWVDb21wb3NpdG9yKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IFdlIG5lZWQgdG8gaGFuZGxlIG91ciBvd24gc2Nyb2xsaW5nIGlmIHdlJ3JlOgorICAgIHJldHVy
biAhbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnBsYXRmb3JtV2lkZ2V0KCkgLy8gdmlld2xlc3Mg
KGkuZS4gbm9uLU1hYywgb3IgTWFjIGluIFdlYktpdDIpCisgICAgICAgIHx8IGF0dGFjaG1lbnQg
PT0gUm9vdExheWVyQXR0YWNoZWRWaWFFbmNsb3NpbmdGcmFtZTsgLy8gYSBjb21wb3NpdGVkIGZy
YW1lIG9uIE1hYworfQorCit2b2lkIHBhaW50U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXApCit7CisgICAg
aWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQuc2F2ZSgpOwor
ICAgIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QgPSBzY3JvbGxiYXItPmZyYW1lUmVjdCgp
OworICAgIGNvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxiYXJSZWN0LngoKSwgLXNjcm9sbGJhclJl
Y3QueSgpKTsKKyAgICBJbnRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IGNsaXA7CisgICAgdHJhbnNm
b3JtZWRDbGlwLm1vdmVCeShzY3JvbGxiYXJSZWN0LmxvY2F0aW9uKCkpOworICAgIHNjcm9sbGJh
ci0+cGFpbnQoY29udGV4dCwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICBjb250ZXh0LnJlc3RvcmUo
KTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhaW50Q29udGVudHMoY29uc3Qg
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBH
cmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwKQoreworICAg
IEludFJlY3QgcGl4ZWxTbmFwcGVkUmVjdEZvckludGVncmFsUG9zaXRpb25lZEl0ZW1zID0gc25h
cHBlZEludFJlY3QoTGF5b3V0UmVjdChjbGlwKSk7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0g
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIHBhaW50U2Nyb2xsYmFyKG1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKS5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIHBp
eGVsU25hcHBlZFJlY3RGb3JJbnRlZ3JhbFBvc2l0aW9uZWRJdGVtcyk7CisgICAgZWxzZSBpZiAo
Z3JhcGhpY3NMYXllciA9PSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHBh
aW50U2Nyb2xsYmFyKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS52ZXJ0aWNhbFNjcm9sbGJhcigp
LCBjb250ZXh0LCBwaXhlbFNuYXBwZWRSZWN0Rm9ySW50ZWdyYWxQb3NpdGlvbmVkSXRlbXMpOwor
ICAgIGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewor
ICAgICAgICBjb25zdCBJbnRSZWN0JiBzY3JvbGxDb3JuZXIgPSBtX3JlbmRlclZpZXcuZnJhbWVW
aWV3KCkuc2Nyb2xsQ29ybmVyUmVjdCgpOworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAg
ICAgY29udGV4dC50cmFuc2xhdGUoLXNjcm9sbENvcm5lci54KCksIC1zY3JvbGxDb3JuZXIueSgp
KTsKKyAgICAgICAgSW50UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBwaXhlbFNuYXBwZWRSZWN0Rm9y
SW50ZWdyYWxQb3NpdGlvbmVkSXRlbXM7CisgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnko
c2Nyb2xsQ29ybmVyLmxvY2F0aW9uKCkpOworICAgICAgICBtX3JlbmRlclZpZXcuZnJhbWVWaWV3
KCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICAgICAg
Y29udGV4dC5yZXN0b3JlKCk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6c3VwcG9ydHNGaXhlZFJvb3RCYWNrZ3JvdW5kQ29tcG9zaXRpbmcoKSBjb25zdAoreworICAg
IFJlbmRlckxheWVyQmFja2luZyogcmVuZGVyVmlld0JhY2tpbmcgPSBtX3JlbmRlclZpZXcubGF5
ZXIoKS0+YmFja2luZygpOworICAgIHJldHVybiByZW5kZXJWaWV3QmFja2luZyAmJiByZW5kZXJW
aWV3QmFja2luZy0+aXNNYWluRnJhbWVMYXllcldpdGhUaWxlZEJhY2tpbmcoKTsKK30KKworYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6Om5lZWRzRml4ZWRSb290QmFja2dyb3VuZExheWVyKGNv
bnN0IFJlbmRlckxheWVyJiBsYXllcikgY29uc3QKK3sKKyAgICBpZiAoJmxheWVyICE9IG1fcmVu
ZGVyVmlldy5sYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9yZW5k
ZXJWaWV3LnNldHRpbmdzKCkuZml4ZWRCYWNrZ3JvdW5kc1BhaW50UmVsYXRpdmVUb0RvY3VtZW50
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIExPRyhDb21wb3NpdGluZywgIlJlbmRl
ckxheWVyQ29tcG9zaXRvciAlcCBuZWVkc0ZpeGVkUm9vdEJhY2tncm91bmRMYXllciByZXR1cm5p
bmcgJWQiLCB0aGlzLCBzdXBwb3J0c0ZpeGVkUm9vdEJhY2tncm91bmRDb21wb3NpdGluZygpICYm
IG1fcmVuZGVyVmlldy5yb290QmFja2dyb3VuZElzRW50aXJlbHlGaXhlZCgpKTsKKworICAgIHJl
dHVybiBzdXBwb3J0c0ZpeGVkUm9vdEJhY2tncm91bmRDb21wb3NpdGluZygpICYmIG1fcmVuZGVy
Vmlldy5yb290QmFja2dyb3VuZElzRW50aXJlbHlGaXhlZCgpOworfQorCitHcmFwaGljc0xheWVy
KiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZpeGVkUm9vdEJhY2tncm91bmRMYXllcigpIGNvbnN0
Cit7CisgICAgLy8gR2V0IHRoZSBmaXhlZCByb290IGJhY2tncm91bmQgZnJvbSB0aGUgUmVuZGVy
VmlldyBsYXllcidzIGJhY2tpbmcuCisgICAgUmVuZGVyTGF5ZXIqIHZpZXdMYXllciA9IG1fcmVu
ZGVyVmlldy5sYXllcigpOworICAgIGlmICghdmlld0xheWVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGlmICh2aWV3TGF5ZXItPmlzQ29tcG9zaXRlZCgpICYmIHZpZXdMYXllci0+
YmFja2luZygpLT5iYWNrZ3JvdW5kTGF5ZXJQYWludHNGaXhlZFJvb3RCYWNrZ3JvdW5kKCkpCisg
ICAgICAgIHJldHVybiB2aWV3TGF5ZXItPmJhY2tpbmcoKS0+YmFja2dyb3VuZExheWVyKCk7CisK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
c2V0VHJhY2tlZFJlcGFpbnRSZWN0cygpCit7CisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIHJvb3RM
YXllciA9IHJvb3RHcmFwaGljc0xheWVyKCkpIHsKKyAgICAgICAgR3JhcGhpY3NMYXllcjo6dHJh
dmVyc2UoKnJvb3RMYXllciwgW10oR3JhcGhpY3NMYXllciYgbGF5ZXIpIHsKKyAgICAgICAgICAg
IGxheWVyLnJlc2V0VHJhY2tlZFJlcGFpbnRzKCk7CisgICAgICAgIH0pOworICAgIH0KK30KKwor
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldFRyYWNrc1JlcGFpbnRzKGJvb2wgdHJhY2tz
UmVwYWludHMpCit7CisgICAgbV9pc1RyYWNraW5nUmVwYWludHMgPSB0cmFja3NSZXBhaW50czsK
K30KKworYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVHJhY2tpbmdSZXBhaW50cygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faXNUcmFja2luZ1JlcGFpbnRzOworfQorCitmbG9hdCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9yZW5kZXJWaWV3LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKworZmxv
YXQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYWdlU2NhbGVGYWN0b3IoKSBjb25zdAoreworICAg
IHJldHVybiBwYWdlKCkucGFnZVNjYWxlRmFjdG9yKCk7Cit9CisKK2Zsb2F0IFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6em9vbWVkT3V0UGFnZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gcGFnZSgpLnpvb21lZE91dFBhZ2VTY2FsZUZhY3RvcigpOworfQorCitmbG9hdCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmNvbnRlbnRzU2NhbGVNdWx0aXBsaWVyRm9yTmV3VGlsZXMoY29uc3Qg
R3JhcGhpY3NMYXllciopIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIExlZ2FjeVRp
bGVDYWNoZSogdGlsZUNhY2hlID0gbnVsbHB0cjsKKyAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBwYWdlKCkubWFpbkZyYW1lKCkudmlldygpKQorICAgICAgICB0aWxlQ2FjaGUgPSBmcmFt
ZVZpZXctPmxlZ2FjeVRpbGVDYWNoZSgpOworCisgICAgaWYgKCF0aWxlQ2FjaGUpCisgICAgICAg
IHJldHVybiAxOworCisgICAgcmV0dXJuIHRpbGVDYWNoZS0+dGlsZUNvbnRyb2xsZXJTaG91bGRV
c2VMb3dTY2FsZVRpbGVzKCkgPyAwLjEyNSA6IDE7CisjZWxzZQorICAgIHJldHVybiAxOworI2Vu
ZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRDb21taXRDaGFuZ2VzRm9y
TGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciopIGNvbnN0Cit7CisgICAgLy8gTm90aGluZyB0byBk
byBoZXJlIHlldC4KK30KKworYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRvY3VtZW50VXNl
c1RpbGVkQmFja2luZygpIGNvbnN0Cit7CisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9yZW5k
ZXJWaWV3LmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXItPmJhY2tpbmcoKTsKKyAg
ICBpZiAoIWJhY2tpbmcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBiYWNr
aW5nLT5pc01haW5GcmFtZUxheWVyV2l0aFRpbGVkQmFja2luZygpOworfQorCitib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6aXNNYWluRnJhbWVDb21wb3NpdG9yKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCkuaXNNYWluRnJhbWUoKTsKK30K
KworYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNob3VsZENvbXBvc2l0ZU92ZXJmbG93Q29u
dHJvbHMoKSBjb25zdAoreworICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3
LmZyYW1lVmlldygpOworCisgICAgaWYgKGZyYW1lVmlldy5wbGF0Zm9ybVdpZGdldCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZnJhbWVWaWV3LmRlbGVnYXRlc1Njcm9sbGlu
ZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZG9jdW1lbnRVc2VzVGlsZWRC
YWNraW5nKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisjaWYgIVVTRShDT09SRElOQVRFRF9H
UkFQSElDU19USFJFQURFRCkKKyAgICBpZiAoIWZyYW1lVmlldy5oYXNPdmVybGF5U2Nyb2xsYmFy
cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBzaG91bGRDb21wb3NpdGVPdmVyZmxvd0Nv
bnRyb2xzKCkgJiYgbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmhvcml6b250YWxTY3JvbGxiYXIo
KTsKK30KKworYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzVmVydGljYWxTY3Jv
bGxiYXJMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNob3VsZENvbXBvc2l0ZU92ZXJmbG93
Q29udHJvbHMoKSAmJiBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudmVydGljYWxTY3JvbGxiYXIo
KTsKK30KKworYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzU2Nyb2xsQ29ybmVy
TGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBzaG91bGRDb21wb3NpdGVPdmVyZmxvd0NvbnRy
b2xzKCkgJiYgbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgp
OworfQorCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlcXVpcmVzT3ZlcmhhbmdBcmVhc0xheWVyKCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
TWFpbkZyYW1lQ29tcG9zaXRvcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBX
ZSBkbyB3YW50IGEgbGF5ZXIgaWYgd2UncmUgdXNpbmcgdGlsZWQgZHJhd2luZyBhbmQgY2FuIHNj
cm9sbC4KKyAgICBpZiAoZG9jdW1lbnRVc2VzVGlsZWRCYWNraW5nKCkgJiYgbV9yZW5kZXJWaWV3
LmZyYW1lVmlldygpLmhhc09wYXF1ZUJhY2tncm91bmQoKSAmJiAhbV9yZW5kZXJWaWV3LmZyYW1l
VmlldygpLnByb2hpYml0c1Njcm9sbGluZygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVz
Q29udGVudFNoYWRvd0xheWVyKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzTWFpbkZyYW1lQ29tcG9z
aXRvcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICBpZiAodmlld0hhc1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBJZiB0aGUgYmFja2dyb3VuZCBpcyBnb2luZyB0byBleHRlbmQsIHRoZW4g
aXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGhhdmUgYSBzaGFkb3cgbGF5ZXIuCisgICAgaWYgKG1f
cmVuZGVyVmlldy5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE9uIE1hYywgd2Ugd2FudCBhIGNvbnRl
bnQgc2hhZG93IGxheWVyIGlmIHdlJ3JlIHVzaW5nIHRpbGVkIGRyYXdpbmcgYW5kIGNhbiBzY3Jv
bGwuCisgICAgaWYgKGRvY3VtZW50VXNlc1RpbGVkQmFja2luZygpICYmICFtX3JlbmRlclZpZXcu
ZnJhbWVWaWV3KCkucHJvaGliaXRzU2Nyb2xsaW5nKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
I2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEoYm9vbCB3YW50c0xh
eWVyKQoreworICAgIGlmICghaXNNYWluRnJhbWVDb21wb3NpdG9yKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgaWYgKCF3YW50c0xheWVyKSB7CisgICAgICAgIGlmIChtX2xheWVy
Rm9yVG9wT3ZlcmhhbmdBcmVhKSB7CisgICAgICAgICAgICBtX2xheWVyRm9yVG9wT3ZlcmhhbmdB
cmVhLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgICAgICAgICBtX2xheWVyRm9yVG9wT3Zlcmhh
bmdBcmVhID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBpZiAoIW1fbGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEpIHsKKyAgICAgICAgbV9s
YXllckZvclRvcE92ZXJoYW5nQXJlYSA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xh
eWVyRmFjdG9yeSgpLCAqdGhpcyk7CisgICAgICAgIG1fbGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEt
PnNldE5hbWUoInRvcCBvdmVyaGFuZyIpOworICAgICAgICBtX3Njcm9sbExheWVyLT5hZGRDaGls
ZEJlbG93KG1fbGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEuZ2V0KCksIG1fcm9vdENvbnRlbnRMYXll
ci5nZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fbGF5ZXJGb3JUb3BPdmVyaGFuZ0FyZWEu
Z2V0KCk7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
TGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEoYm9vbCB3YW50c0xheWVyKQoreworICAgIGlmICgh
aXNNYWluRnJhbWVDb21wb3NpdG9yKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
aWYgKCF3YW50c0xheWVyKSB7CisgICAgICAgIGlmIChtX2xheWVyRm9yQm90dG9tT3ZlcmhhbmdB
cmVhKSB7CisgICAgICAgICAgICBtX2xheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhLT5yZW1vdmVG
cm9tUGFyZW50KCk7CisgICAgICAgICAgICBtX2xheWVyRm9yQm90dG9tT3ZlcmhhbmdBcmVhID0g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBpZiAoIW1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEpIHsKKyAgICAgICAgbV9sYXllckZv
ckJvdHRvbU92ZXJoYW5nQXJlYSA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVy
RmFjdG9yeSgpLCAqdGhpcyk7CisgICAgICAgIG1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEt
PnNldE5hbWUoImJvdHRvbSBvdmVyaGFuZyIpOworICAgICAgICBtX3Njcm9sbExheWVyLT5hZGRD
aGlsZEJlbG93KG1fbGF5ZXJGb3JCb3R0b21PdmVyaGFuZ0FyZWEuZ2V0KCksIG1fcm9vdENvbnRl
bnRMYXllci5nZXQoKSk7CisgICAgfQorCisgICAgbV9sYXllckZvckJvdHRvbU92ZXJoYW5nQXJl
YS0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgwLCBtX3Jvb3RDb250ZW50TGF5ZXItPnNpemUoKS5o
ZWlnaHQoKSArIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5oZWFkZXJIZWlnaHQoKQorICAgICAg
ICArIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mb290ZXJIZWlnaHQoKSArIG1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKS50b3BDb250ZW50SW5zZXQoKSkpOworICAgIHJldHVybiBtX2xheWVyRm9y
Qm90dG9tT3ZlcmhhbmdBcmVhLmdldCgpOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyRm9ySGVhZGVyKGJvb2wgd2FudHNMYXllcikKK3sKKyAg
ICBpZiAoIWlzTWFpbkZyYW1lQ29tcG9zaXRvcigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGlmICghd2FudHNMYXllcikgeworICAgICAgICBpZiAobV9sYXllckZvckhlYWRlcikg
eworICAgICAgICAgICAgbV9sYXllckZvckhlYWRlci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAg
ICAgICAgICAgbV9sYXllckZvckhlYWRlciA9IG51bGxwdHI7CisKKyAgICAgICAgICAgIC8vIFRo
ZSBTY3JvbGxpbmdUcmVlIGtub3dzIGFib3V0IHRoZSBoZWFkZXIgbGF5ZXIsIGFuZCB0aGUgcG9z
aXRpb24gb2YgdGhlIHJvb3QgbGF5ZXIgaXMgYWZmZWN0ZWQKKyAgICAgICAgICAgIC8vIGJ5IHRo
ZSBoZWFkZXIgbGF5ZXIsIHNvIGlmIHdlIHJlbW92ZSB0aGUgaGVhZGVyLCB3ZSBuZWVkIHRvIHRl
bGwgdGhlIHNjcm9sbGluZyB0cmVlLgorICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
CisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jvb3RMYXll
ckRpZENoYW5nZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghbV9sYXllckZvckhlYWRlcikgewor
ICAgICAgICBtX2xheWVyRm9ySGVhZGVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICAgICAgbV9sYXllckZvckhlYWRlci0+c2V0TmFt
ZSgiaGVhZGVyIik7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXItPmFkZENoaWxkQWJvdmUobV9sYXll
ckZvckhlYWRlci5nZXQoKSwgbV9yb290Q29udGVudExheWVyLmdldCgpKTsKKyAgICAgICAgbV9y
ZW5kZXJWaWV3LmZyYW1lVmlldygpLmFkZFBhaW50UGVuZGluZ01pbGVzdG9uZXMoRGlkRmlyc3RG
bHVzaEZvckhlYWRlckxheWVyKTsKKyAgICB9CisKKyAgICBtX2xheWVyRm9ySGVhZGVyLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KDAsCisgICAgICAgIEZyYW1lVmlldzo6eVBvc2l0aW9uRm9ySGVh
ZGVyTGF5ZXIobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnNjcm9sbFBvc2l0aW9uKCksIG1fcmVu
ZGVyVmlldy5mcmFtZVZpZXcoKS50b3BDb250ZW50SW5zZXQoKSkpKTsKKyAgICBtX2xheWVyRm9y
SGVhZGVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAgbV9sYXllckZvckhl
YWRlci0+c2V0U2l6ZShGbG9hdFNpemUobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnZpc2libGVX
aWR0aCgpLCBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuaGVhZGVySGVpZ2h0KCkpKTsKKworICAg
IGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5z
Y3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJh
bWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSk7CisKKyAg
ICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkQWRkSGVhZGVyTGF5ZXIoKm1fbGF5ZXJGb3JI
ZWFkZXIpOworCisgICAgcmV0dXJuIG1fbGF5ZXJGb3JIZWFkZXIuZ2V0KCk7Cit9CisKK0dyYXBo
aWNzTGF5ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJGb3JGb290ZXIoYm9v
bCB3YW50c0xheWVyKQoreworICAgIGlmICghaXNNYWluRnJhbWVDb21wb3NpdG9yKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCF3YW50c0xheWVyKSB7CisgICAgICAgIGlm
IChtX2xheWVyRm9yRm9vdGVyKSB7CisgICAgICAgICAgICBtX2xheWVyRm9yRm9vdGVyLT5yZW1v
dmVGcm9tUGFyZW50KCk7CisgICAgICAgICAgICBtX2xheWVyRm9yRm9vdGVyID0gbnVsbHB0cjsK
KworICAgICAgICAgICAgLy8gVGhlIFNjcm9sbGluZ1RyZWUga25vd3MgYWJvdXQgdGhlIGZvb3Rl
ciBsYXllciwgYW5kIHRoZSB0b3RhbCBzY3JvbGxhYmxlIHNpemUgaXMgYWZmZWN0ZWQKKyAgICAg
ICAgICAgIC8vIGJ5IHRoZSBmb290ZXIgbGF5ZXIsIHNvIGlmIHdlIHJlbW92ZSB0aGUgZm9vdGVy
LCB3ZSBuZWVkIHRvIHRlbGwgdGhlIHNjcm9sbGluZyB0cmVlLgorICAgICAgICAgICAgaWYgKFNj
cm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZy
YW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghbV9sYXll
ckZvckZvb3RlcikgeworICAgICAgICBtX2xheWVyRm9yRm9vdGVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICAgICAgbV9sYXllckZv
ckZvb3Rlci0+c2V0TmFtZSgiZm9vdGVyIik7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXItPmFkZENo
aWxkQWJvdmUobV9sYXllckZvckZvb3Rlci5nZXQoKSwgbV9yb290Q29udGVudExheWVyLmdldCgp
KTsKKyAgICB9CisKKyAgICBmbG9hdCB0b3RhbENvbnRlbnRIZWlnaHQgPSBtX3Jvb3RDb250ZW50
TGF5ZXItPnNpemUoKS5oZWlnaHQoKSArIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5oZWFkZXJI
ZWlnaHQoKSArIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mb290ZXJIZWlnaHQoKTsKKyAgICBt
X2xheWVyRm9yRm9vdGVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDAsIEZyYW1lVmlldzo6eVBv
c2l0aW9uRm9yRm9vdGVyTGF5ZXIobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnNjcm9sbFBvc2l0
aW9uKCksCisgICAgICAgIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS50b3BDb250ZW50SW5zZXQo
KSwgdG90YWxDb250ZW50SGVpZ2h0LCBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZm9vdGVySGVp
Z2h0KCkpKSk7CisgICAgbV9sYXllckZvckZvb3Rlci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2lu
dDNEKCkpOworICAgIG1fbGF5ZXJGb3JGb290ZXItPnNldFNpemUoRmxvYXRTaXplKG1fcmVuZGVy
Vmlldy5mcmFtZVZpZXcoKS52aXNpYmxlV2lkdGgoKSwgbV9yZW5kZXJWaWV3LmZyYW1lVmlldygp
LmZvb3RlckhlaWdodCgpKSk7CisKKyAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAg
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShtX3JlbmRl
clZpZXcuZnJhbWVWaWV3KCkpOworCisgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEFk
ZEZvb3RlckxheWVyKCptX2xheWVyRm9yRm9vdGVyKTsKKworICAgIHJldHVybiBtX2xheWVyRm9y
Rm9vdGVyLmdldCgpOworfQorCisjZW5kaWYKKworYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnZpZXdIYXNUcmFuc3BhcmVudEJhY2tncm91bmQoQ29sb3IqIGJhY2tncm91bmRDb2xvcikgY29u
c3QKK3sKKyAgICBpZiAobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmlzVHJhbnNwYXJlbnQoKSkg
eworICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9yKQorICAgICAgICAgICAgKmJhY2tncm91bmRD
b2xvciA9IENvbG9yKCk7IC8vIFJldHVybiBhbiBpbnZhbGlkIGNvbG9yLgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBDb2xvciBkb2N1bWVudEJhY2tncm91bmRDb2xvciA9IG1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKS5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpOworICAgIGlm
ICghZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICBkb2N1bWVudEJh
Y2tncm91bmRDb2xvciA9IENvbG9yOjp3aGl0ZTsKKworICAgIGlmIChiYWNrZ3JvdW5kQ29sb3Ip
CisgICAgICAgICpiYWNrZ3JvdW5kQ29sb3IgPSBkb2N1bWVudEJhY2tncm91bmRDb2xvcjsKKyAg
ICAgICAgCisgICAgcmV0dXJuICFkb2N1bWVudEJhY2tncm91bmRDb2xvci5pc09wYXF1ZSgpOwor
fQorCisvLyBXZSBjYW4ndCByZWx5IG9uIGdldHRpbmcgbGF5ZXJTdHlsZUNoYW5nZWQoKSBmb3Ig
YSBzdHlsZSBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSByb290IGJhY2tncm91bmQsIGJlY2F1c2Ug
dGhlIHN0eWxlIGNoYW5nZSBtYXkKKy8vIGJlIG9uIHRoZSBib2R5IHdoaWNoIGhhcyBubyBSZW5k
ZXJMYXllci4KK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyb290T3JCb2R5U3R5bGVDaGFu
Z2VkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
Cit7CisgICAgaWYgKCFpbkNvbXBvc2l0aW5nTW9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDb2xvciBvbGRCYWNrZ3JvdW5kQ29sb3I7CisgICAgaWYgKG9sZFN0eWxlKQorICAgICAgICBv
bGRCYWNrZ3JvdW5kQ29sb3IgPSBvbGRTdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKTsKKworICAgIGlmIChvbGRCYWNrZ3JvdW5kQ29sb3IgIT0g
cmVuZGVyZXIuc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpKQorICAgICAgICByb290QmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKTsK
KworICAgIGJvb2wgaGFkRml4ZWRCYWNrZ3JvdW5kID0gb2xkU3R5bGUgJiYgb2xkU3R5bGUtPmhh
c0VudGlyZWx5Rml4ZWRCYWNrZ3JvdW5kKCk7CisgICAgaWYgKGhhZEZpeGVkQmFja2dyb3VuZCAh
PSByZW5kZXJlci5zdHlsZSgpLmhhc0VudGlyZWx5Rml4ZWRCYWNrZ3JvdW5kKCkpIHsKKyAgICAg
ICAgc2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZCgpOworICAgICAgICBzY2hlZHVsZUNv
bXBvc2l0aW5nTGF5ZXJVcGRhdGUoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyb290QmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKQoreworICAgIGlmICgh
aW5Db21wb3NpdGluZ01vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBpc1RyYW5z
cGFyZW50ID0gdmlld0hhc1RyYW5zcGFyZW50QmFja2dyb3VuZCgpOworCisgICAgTE9HKENvbXBv
c2l0aW5nLCAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yICVwIHJvb3RCYWNrZ3JvdW5kVHJhbnNwYXJl
bmN5Q2hhbmdlZC4gaXNUcmFuc3BhcmVudD0lZCwgY2hhbmdlZD0lZCIsIHRoaXMsIGlzVHJhbnNw
YXJlbnQsIG1fdmlld0JhY2tncm91bmRJc1RyYW5zcGFyZW50ID09IGlzVHJhbnNwYXJlbnQpOwor
ICAgIGlmIChtX3ZpZXdCYWNrZ3JvdW5kSXNUcmFuc3BhcmVudCA9PSBpc1RyYW5zcGFyZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3ZpZXdCYWNrZ3JvdW5kSXNUcmFuc3BhcmVudCA9IGlz
VHJhbnNwYXJlbnQ7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHNvbWV0aGluZyBsZXNz
IGV4cGVuc2l2ZSB0aGFuIGEgZnVsbCBsYXllciByZWJ1aWxkLgorICAgIHNldENvbXBvc2l0aW5n
TGF5ZXJzTmVlZFJlYnVpbGQoKTsKKyAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJVcGRhdGUo
KTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldFJvb3RFeHRlbmRlZEJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yID09IG1fcm9v
dEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RF
eHRlbmRlZEJhY2tncm91bmRDb2xvciA9IGNvbG9yOworCisgICAgcGFnZSgpLmNocm9tZSgpLmNs
aWVudCgpLnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRpZENoYW5nZShjb2xvcik7CisKKyNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKCFtX2xheWVyRm9yT3ZlcmhhbmdBcmVh
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllckZvck92ZXJoYW5nQXJlYXMtPnNldEJh
Y2tncm91bmRDb2xvcihtX3Jvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcik7CisKKyAgICBpZiAo
IW1fcm9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgbV9sYXll
ckZvck92ZXJoYW5nQXJlYXMtPnNldEN1c3RvbUFwcGVhcmFuY2UoR3JhcGhpY3NMYXllcjo6U2Ny
b2xsaW5nT3ZlcmhhbmcpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JB
TkRJTkcpCisgICAgaWYgKHJlcXVpcmVzT3ZlcmhhbmdBcmVhc0xheWVyKCkpIHsKKyAgICAgICAg
aWYgKCFtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcykgeworICAgICAgICAgICAgbV9sYXllckZvck92
ZXJoYW5nQXJlYXMgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NMYXllckZhY3Rvcnko
KSwgKnRoaXMpOworICAgICAgICAgICAgbV9sYXllckZvck92ZXJoYW5nQXJlYXMtPnNldE5hbWUo
Im92ZXJoYW5nIGFyZWFzIik7CisgICAgICAgICAgICBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcy0+
c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKworICAgICAgICAgICAgZmxvYXQgdG9wQ29udGVudElu
c2V0ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnRvcENvbnRlbnRJbnNldCgpOworICAgICAg
ICAgICAgSW50U2l6ZSBvdmVyaGFuZ0FyZWFTaXplID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygp
LmZyYW1lUmVjdCgpLnNpemUoKTsKKyAgICAgICAgICAgIG92ZXJoYW5nQXJlYVNpemUuc2V0SGVp
Z2h0KG92ZXJoYW5nQXJlYVNpemUuaGVpZ2h0KCkgLSB0b3BDb250ZW50SW5zZXQpOworICAgICAg
ICAgICAgbV9sYXllckZvck92ZXJoYW5nQXJlYXMtPnNldFNpemUob3ZlcmhhbmdBcmVhU2l6ZSk7
CisgICAgICAgICAgICBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcy0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludCgwLCB0b3BDb250ZW50SW5zZXQpKTsKKyAgICAgICAgICAgIG1fbGF5ZXJGb3JPdmVyaGFu
Z0FyZWFzLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisKKyAgICAgICAgICAgIGlm
IChtX3JlbmRlclZpZXcuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFn
ZSgpKQorICAgICAgICAgICAgICAgIG1fbGF5ZXJGb3JPdmVyaGFuZ0FyZWFzLT5zZXRCYWNrZ3Jv
dW5kQ29sb3IobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmRvY3VtZW50QmFja2dyb3VuZENvbG9y
KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fbGF5ZXJGb3JPdmVyaGFu
Z0FyZWFzLT5zZXRDdXN0b21BcHBlYXJhbmNlKEdyYXBoaWNzTGF5ZXI6OlNjcm9sbGluZ092ZXJo
YW5nKTsKKworICAgICAgICAgICAgLy8gV2Ugd2FudCB0aGUgb3ZlcmhhbmcgYXJlYXMgbGF5ZXIg
dG8gYmUgcG9zaXRpb25lZCBiZWxvdyB0aGUgZnJhbWUgY29udGVudHMsCisgICAgICAgICAgICAv
LyBzbyBpbnNlcnQgaXQgYmVsb3cgdGhlIGNsaXAgbGF5ZXIuCisgICAgICAgICAgICBtX292ZXJm
bG93Q29udHJvbHNIb3N0TGF5ZXItPmFkZENoaWxkQmVsb3cobV9sYXllckZvck92ZXJoYW5nQXJl
YXMuZ2V0KCksIG1fY2xpcExheWVyLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
bV9sYXllckZvck92ZXJoYW5nQXJlYXMpIHsKKyAgICAgICAgbV9sYXllckZvck92ZXJoYW5nQXJl
YXMtPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgbV9sYXllckZvck92ZXJoYW5nQXJlYXMg
PSBudWxscHRyOworICAgIH0KKworICAgIGlmIChyZXF1aXJlc0NvbnRlbnRTaGFkb3dMYXllcigp
KSB7CisgICAgICAgIGlmICghbV9jb250ZW50U2hhZG93TGF5ZXIpIHsKKyAgICAgICAgICAgIG1f
Y29udGVudFNoYWRvd0xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCksICp0aGlzKTsKKyAgICAgICAgICAgIG1fY29udGVudFNoYWRvd0xheWVyLT5zZXRO
YW1lKCJjb250ZW50IHNoYWRvdyIpOworICAgICAgICAgICAgbV9jb250ZW50U2hhZG93TGF5ZXIt
PnNldFNpemUobV9yb290Q29udGVudExheWVyLT5zaXplKCkpOworICAgICAgICAgICAgbV9jb250
ZW50U2hhZG93TGF5ZXItPnNldFBvc2l0aW9uKG1fcm9vdENvbnRlbnRMYXllci0+cG9zaXRpb24o
KSk7CisgICAgICAgICAgICBtX2NvbnRlbnRTaGFkb3dMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxv
YXRQb2ludDNEKCkpOworICAgICAgICAgICAgbV9jb250ZW50U2hhZG93TGF5ZXItPnNldEN1c3Rv
bUFwcGVhcmFuY2UoR3JhcGhpY3NMYXllcjo6U2Nyb2xsaW5nU2hhZG93KTsKKworICAgICAgICAg
ICAgbV9zY3JvbGxMYXllci0+YWRkQ2hpbGRCZWxvdyhtX2NvbnRlbnRTaGFkb3dMYXllci5nZXQo
KSwgbV9yb290Q29udGVudExheWVyLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
bV9jb250ZW50U2hhZG93TGF5ZXIpIHsKKyAgICAgICAgbV9jb250ZW50U2hhZG93TGF5ZXItPnJl
bW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgbV9jb250ZW50U2hhZG93TGF5ZXIgPSBudWxscHRy
OworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyKCkpIHsKKyAgICAgICAgaWYgKCFtX2xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcikgewor
ICAgICAgICAgICAgbV9sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOworICAgICAgICAgICAgbV9s
YXllckZvckhvcml6b250YWxTY3JvbGxiYXItPnNldFNob3dEZWJ1Z0JvcmRlcihtX3Nob3dEZWJ1
Z0JvcmRlcnMpOworICAgICAgICAgICAgbV9sYXllckZvckhvcml6b250YWxTY3JvbGxiYXItPnNl
dE5hbWUoImhvcml6b250YWwgc2Nyb2xsYmFyIGNvbnRhaW5lciIpOworI2lmIFBMQVRGT1JNKENP
Q09BKSAmJiBVU0UoQ0EpCisgICAgICAgICAgICBtX2xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
ci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXllci0+YWRkQ2hpbGQo
bV9sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIuZ2V0KCkpOworCisgICAgICAgICAgICBpZiAo
U2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX3JlbmRlclZpZXcuZnJhbWVW
aWV3KCksIEhvcml6b250YWxTY3JvbGxiYXIpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICht
X2xheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBtX2xheWVyRm9ySG9yaXpv
bnRhbFNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgICAgICBtX2xheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhciA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkpCisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3Jv
bGxiYXJMYXllckRpZENoYW5nZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCksIEhvcml6b250YWxT
Y3JvbGxiYXIpOworICAgIH0KKworICAgIGlmIChyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5
ZXIoKSkgeworICAgICAgICBpZiAoIW1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcikgeworICAg
ICAgICAgICAgbV9sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyID0gR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICAgICAgICAgIG1fbGF5ZXJG
b3JWZXJ0aWNhbFNjcm9sbGJhci0+c2V0U2hvd0RlYnVnQm9yZGVyKG1fc2hvd0RlYnVnQm9yZGVy
cyk7CisgICAgICAgICAgICBtX2xheWVyRm9yVmVydGljYWxTY3JvbGxiYXItPnNldE5hbWUoInZl
cnRpY2FsIHNjcm9sbGJhciBjb250YWluZXIiKTsKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNF
KENBKQorICAgICAgICAgICAgbV9sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRBY2NlbGVy
YXRlc0RyYXdpbmcoYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpKTsKKyNlbmRpZgorICAgICAg
ICAgICAgbV9vdmVyZmxvd0NvbnRyb2xzSG9zdExheWVyLT5hZGRDaGlsZChtX2xheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIuZ2V0KCkpOworCisgICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRp
bmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KSkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFT
Y3JvbGxiYXJMYXllckRpZENoYW5nZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCksIFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9sYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKSB7CisgICAgICAgIG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci0+cmVtb3Zl
RnJvbVBhcmVudCgpOworICAgICAgICBtX2xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIgPSBudWxs
cHRyOworCisgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRp
bmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9y
ZW5kZXJWaWV3LmZyYW1lVmlldygpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgfQorCisgICAg
aWYgKHJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSkgeworICAgICAgICBpZiAoIW1fbGF5ZXJG
b3JTY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgICAgIG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIgPSBH
cmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOworICAg
ICAgICAgICAgbV9sYXllckZvclNjcm9sbENvcm5lci0+c2V0U2hvd0RlYnVnQm9yZGVyKG1fc2hv
d0RlYnVnQm9yZGVycyk7CisgICAgICAgICAgICBtX2xheWVyRm9yU2Nyb2xsQ29ybmVyLT5zZXRO
YW1lKCJzY3JvbGwgY29ybmVyIik7CisjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShDQSkKKyAg
ICAgICAgICAgIG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXItPnNldEFjY2VsZXJhdGVzRHJhd2luZyhh
Y2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOworI2VuZGlmCisgICAgICAgICAgICBtX292ZXJm
bG93Q29udHJvbHNIb3N0TGF5ZXItPmFkZENoaWxkKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIuZ2V0
KCkpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX2xheWVyRm9yU2Nyb2xsQ29ybmVyKSB7
CisgICAgICAgIG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAg
ICAgICAgbV9sYXllckZvclNjcm9sbENvcm5lciA9IG51bGxwdHI7CisgICAgfQorCisgICAgbV9y
ZW5kZXJWaWV3LmZyYW1lVmlldygpLnBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXJzKCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1cmVSb290TGF5ZXIoKQoreworICAgIFJvb3RM
YXllckF0dGFjaG1lbnQgZXhwZWN0ZWRBdHRhY2htZW50ID0gaXNNYWluRnJhbWVDb21wb3NpdG9y
KCkgPyBSb290TGF5ZXJBdHRhY2hlZFZpYUNocm9tZUNsaWVudCA6IFJvb3RMYXllckF0dGFjaGVk
VmlhRW5jbG9zaW5nRnJhbWU7CisgICAgaWYgKGV4cGVjdGVkQXR0YWNobWVudCA9PSBtX3Jvb3RM
YXllckF0dGFjaG1lbnQpCisgICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcm9vdENvbnRl
bnRMYXllcikgeworICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpj
cmVhdGUoZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOworICAgICAgICBtX3Jvb3RDb250
ZW50TGF5ZXItPnNldE5hbWUoImNvbnRlbnQgcm9vdCIpOworICAgICAgICBJbnRSZWN0IG92ZXJm
bG93UmVjdCA9IHNuYXBwZWRJbnRSZWN0KG1fcmVuZGVyVmlldy5sYXlvdXRPdmVyZmxvd1JlY3Qo
KSk7CisgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0U2l6ZShGbG9hdFNpemUob3ZlcmZs
b3dSZWN0Lm1heFgoKSwgb3ZlcmZsb3dSZWN0Lm1heFkoKSkpOworICAgICAgICBtX3Jvb3RDb250
ZW50TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoKSk7CisKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgICAgIC8vIFBhZ2Ugc2NhbGUgaXMgYXBwbGllZCBhYm92ZSB0aGlzIG9uIGlPUywgc28g
d2UnbGwganVzdCBzYXkgdGhhdCBvdXIgcm9vdCBsYXllciBhcHBsaWVzIGl0LgorICAgICAgICBG
cmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICAgICAg
aWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXIt
PnNldEFwcGxpZXNQYWdlU2NhbGUoKTsKKyNlbmRpZgorCisgICAgICAgIC8vIE5lZWQgdG8gY2xp
cCB0byBwcmV2ZW50IHRyYW5zZm9ybWVkIGNvbnRlbnQgc2hvd2luZyBvdXRzaWRlIHRoaXMgZnJh
bWUKKyAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwor
ICAgIH0KKworICAgIGlmIChyZXF1aXJlc1Njcm9sbExheWVyKGV4cGVjdGVkQXR0YWNobWVudCkp
IHsKKyAgICAgICAgaWYgKCFtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXIpIHsKKyAgICAgICAg
ICAgIEFTU0VSVCghbV9zY3JvbGxMYXllcik7CisgICAgICAgICAgICBBU1NFUlQoIW1fY2xpcExh
eWVyKTsKKworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbGF5ZXIgdG8gaG9zdCB0aGUgY2xpcHBp
bmcgbGF5ZXIgYW5kIHRoZSBvdmVyZmxvdyBjb250cm9scyBsYXllcnMuCisgICAgICAgICAgICBt
X292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhp
Y3NMYXllckZhY3RvcnkoKSwgKnRoaXMpOworICAgICAgICAgICAgbV9vdmVyZmxvd0NvbnRyb2xz
SG9zdExheWVyLT5zZXROYW1lKCJvdmVyZmxvdyBjb250cm9scyBob3N0Iik7CisKKyAgICAgICAg
ICAgIC8vIENyZWF0ZSBhIGNsaXBwaW5nIGxheWVyIGlmIHRoaXMgaXMgYW4gaWZyYW1lCisgICAg
ICAgICAgICBtX2NsaXBMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVy
RmFjdG9yeSgpLCAqdGhpcyk7CisgICAgICAgICAgICBtX2NsaXBMYXllci0+c2V0TmFtZSgiZnJh
bWUgY2xpcHBpbmciKTsKKyAgICAgICAgICAgIG1fY2xpcExheWVyLT5zZXRNYXNrc1RvQm91bmRz
KHRydWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3Njcm9sbExheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKTsKKyAgICAgICAg
ICAgIG1fc2Nyb2xsTGF5ZXItPnNldE5hbWUoImZyYW1lIHNjcm9sbGluZyIpOworCisgICAgICAg
ICAgICAvLyBIb29rIHRoZW0gdXAKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dDb250cm9sc0hvc3RM
YXllci0+YWRkQ2hpbGQobV9jbGlwTGF5ZXIuZ2V0KCkpOworICAgICAgICAgICAgbV9jbGlwTGF5
ZXItPmFkZENoaWxkKG1fc2Nyb2xsTGF5ZXIuZ2V0KCkpOworICAgICAgICAgICAgbV9zY3JvbGxM
YXllci0+YWRkQ2hpbGQobV9yb290Q29udGVudExheWVyLmdldCgpKTsKKworICAgICAgICAgICAg
bV9jbGlwTGF5ZXItPnNldFNpemUobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnNpemVGb3JWaXNp
YmxlQ29udGVudCgpKTsKKyAgICAgICAgICAgIG1fY2xpcExheWVyLT5zZXRQb3NpdGlvbihwb3Np
dGlvbkZvckNsaXBMYXllcigpKTsKKyAgICAgICAgICAgIG1fY2xpcExheWVyLT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50M0QoKSk7CisKKyAgICAgICAgICAgIHVwZGF0ZU92ZXJmbG93Q29udHJv
bHNMYXllcnMoKTsKKworICAgICAgICAgICAgaWYgKGhhc0Nvb3JkaW5hdGVkU2Nyb2xsaW5nKCkp
CisgICAgICAgICAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKHRydWUpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb24oKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5
ZXIpIHsKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXllciA9IG51bGxwdHI7
CisgICAgICAgICAgICBtX2NsaXBMYXllciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX3Njcm9s
bExheWVyID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIHRvIHNl
ZSBpZiB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgYXR0YWNobWVudAorICAgIGlmIChtX3Jvb3RMYXll
ckF0dGFjaG1lbnQgIT0gUm9vdExheWVyVW5hdHRhY2hlZCkKKyAgICAgICAgZGV0YWNoUm9vdExh
eWVyKCk7CisKKyAgICBhdHRhY2hSb290TGF5ZXIoZXhwZWN0ZWRBdHRhY2htZW50KTsKK30KKwor
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRlc3Ryb3lSb290TGF5ZXIoKQoreworICAgIGlm
ICghbV9yb290Q29udGVudExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBkZXRhY2hSb290
TGF5ZXIoKTsKKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAobV9sYXllckZv
ck92ZXJoYW5nQXJlYXMpIHsKKyAgICAgICAgbV9sYXllckZvck92ZXJoYW5nQXJlYXMtPnJlbW92
ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgbV9sYXllckZvck92ZXJoYW5nQXJlYXMgPSBudWxscHRy
OworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKG1fbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KSB7CisgICAgICAgIG1fbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFy
ZW50KCk7CisgICAgICAgIG1fbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyID0gbnVsbHB0cjsK
KyAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX3JlbmRlclZp
ZXcuZnJhbWVWaWV3KCksIEhvcml6b250YWxTY3JvbGxiYXIpOworICAgICAgICBpZiAoU2Nyb2xs
YmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnZlcnRp
Y2FsU2Nyb2xsYmFyKCkpCisgICAgICAgICAgICBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuaW52
YWxpZGF0ZVNjcm9sbGJhcigqaG9yaXpvbnRhbFNjcm9sbGJhciwgSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgaG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkuc2l6ZSgpKSk7CisgICAgfQor
CisgICAgaWYgKG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBtX2xheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgbV9sYXll
ckZvclZlcnRpY2FsU2Nyb2xsYmFyID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkpCisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFT
Y3JvbGxiYXJMYXllckRpZENoYW5nZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCksIFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKyAgICAgICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBt
X3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgICAg
IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5pbnZhbGlkYXRlU2Nyb2xsYmFyKCp2ZXJ0aWNhbFNj
cm9sbGJhciwgSW50UmVjdChJbnRQb2ludCgwLCAwKSwgdmVydGljYWxTY3JvbGxiYXItPmZyYW1l
UmVjdCgpLnNpemUoKSkpOworICAgIH0KKworICAgIGlmIChtX2xheWVyRm9yU2Nyb2xsQ29ybmVy
KSB7CisgICAgICAgIG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIgPSBudWxscHRyOworICAgICAgICBt
X3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuaW52YWxpZGF0ZVNjcm9sbENvcm5lcihtX3JlbmRlclZp
ZXcuZnJhbWVWaWV3KCkuc2Nyb2xsQ29ybmVyUmVjdCgpKTsKKyAgICB9CisKKyAgICBpZiAobV9v
dmVyZmxvd0NvbnRyb2xzSG9zdExheWVyKSB7CisgICAgICAgIG1fb3ZlcmZsb3dDb250cm9sc0hv
c3RMYXllciA9IG51bGxwdHI7CisgICAgICAgIG1fY2xpcExheWVyID0gbnVsbHB0cjsKKyAgICAg
ICAgbV9zY3JvbGxMYXllciA9IG51bGxwdHI7CisgICAgfQorICAgIEFTU0VSVCghbV9zY3JvbGxM
YXllcik7CisgICAgbV9yb290Q29udGVudExheWVyID0gbnVsbHB0cjsKKworICAgIG1fbGF5ZXJV
cGRhdGVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFj
aFJvb3RMYXllcihSb290TGF5ZXJBdHRhY2htZW50IGF0dGFjaG1lbnQpCit7CisgICAgaWYgKCFt
X3Jvb3RDb250ZW50TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhDb21wb3NpdGlu
ZywgIlJlbmRlckxheWVyQ29tcG9zaXRvciAlcCBhdHRhY2hSb290TGF5ZXIgJWQiLCB0aGlzLCBh
dHRhY2htZW50KTsKKworICAgIHN3aXRjaCAoYXR0YWNobWVudCkgeworICAgICAgICBjYXNlIFJv
b3RMYXllclVuYXR0YWNoZWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJvb3RMYXllckF0dGFjaGVkVmlhQ2hyb21l
Q2xpZW50OiB7CisgICAgICAgICAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVW
aWV3KCkuZnJhbWUoKTsKKyAgICAgICAgICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5hdHRh
Y2hSb290R3JhcGhpY3NMYXllcihmcmFtZSwgcm9vdEdyYXBoaWNzTGF5ZXIoKSk7CisgICAgICAg
ICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgICAgICBwYWdlKCkuY2hy
b21lKCkuY2xpZW50KCkuYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKGZyYW1lLCAmZnJh
bWUubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCkubGF5ZXJXaXRoVmlld092ZXJs
YXlzKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBSb290
TGF5ZXJBdHRhY2hlZFZpYUVuY2xvc2luZ0ZyYW1lOiB7CisgICAgICAgICAgICAvLyBUaGUgbGF5
ZXIgd2lsbCBnZXQgaG9va2VkIHVwIHZpYSBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZp
Z3VyYXRpb24oKQorICAgICAgICAgICAgLy8gZm9yIHRoZSBmcmFtZSdzIHJlbmRlcmVyIGluIHRo
ZSBwYXJlbnQgZG9jdW1lbnQuCisgICAgICAgICAgICBpZiAoYXV0byogb3duZXJFbGVtZW50ID0g
bV9yZW5kZXJWaWV3LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpCisgICAgICAgICAgICAgICAg
b3duZXJFbGVtZW50LT5zY2hlZHVsZWludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24o
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgbV9yb290TGF5
ZXJBdHRhY2htZW50ID0gYXR0YWNobWVudDsKKyAgICByb290TGF5ZXJBdHRhY2htZW50Q2hhbmdl
ZCgpOworICAgIAorICAgIGlmIChtX3Nob3VsZEZsdXNoT25SZWF0dGFjaCkgeworICAgICAgICBz
Y2hlZHVsZUxheWVyRmx1c2hOb3coKTsKKyAgICAgICAgbV9zaG91bGRGbHVzaE9uUmVhdHRhY2gg
PSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hS
b290TGF5ZXIoKQoreworICAgIGlmICghbV9yb290Q29udGVudExheWVyIHx8IG1fcm9vdExheWVy
QXR0YWNobWVudCA9PSBSb290TGF5ZXJVbmF0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzd2l0Y2ggKG1fcm9vdExheWVyQXR0YWNobWVudCkgeworICAgIGNhc2UgUm9vdExheWVyQXR0
YWNoZWRWaWFFbmNsb3NpbmdGcmFtZTogeworICAgICAgICAvLyBUaGUgbGF5ZXIgd2lsbCBnZXQg
dW5ob29rZWQgdXAgdmlhIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckNv
bmZpZ3VyYXRpb24oKQorICAgICAgICAvLyBmb3IgdGhlIGZyYW1lJ3MgcmVuZGVyZXIgaW4gdGhl
IHBhcmVudCBkb2N1bWVudC4KKyAgICAgICAgaWYgKG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXll
cikKKyAgICAgICAgICAgIG1fb3ZlcmZsb3dDb250cm9sc0hvc3RMYXllci0+cmVtb3ZlRnJvbVBh
cmVudCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnJl
bW92ZUZyb21QYXJlbnQoKTsKKworICAgICAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBv
d25lckVsZW1lbnQgPSBtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkKKyAg
ICAgICAgICAgIG93bmVyRWxlbWVudC0+c2NoZWR1bGVpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNv
bXBvc2l0aW9uKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFJvb3RMYXllckF0
dGFjaGVkVmlhQ2hyb21lQ2xpZW50OiB7CisgICAgICAgIEZyYW1lJiBmcmFtZSA9IG1fcmVuZGVy
Vmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpOworICAgICAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50
KCkuYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoZnJhbWUsIG51bGxwdHIpOworICAgICAgICBpZiAo
ZnJhbWUuaXNNYWluRnJhbWUoKSkgeworICAgICAgICAgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVu
dCgpLmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihmcmFtZSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBmcmFtZS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS53aWxsRGV0
YWNoUm9vdExheWVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisgICAgY2FzZSBS
b290TGF5ZXJVbmF0dGFjaGVkOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX3Jvb3RM
YXllckF0dGFjaG1lbnQgPSBSb290TGF5ZXJVbmF0dGFjaGVkOworICAgIHJvb3RMYXllckF0dGFj
aG1lbnRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVS
b290TGF5ZXJBdHRhY2htZW50KCkKK3sKKyAgICBlbnN1cmVSb290TGF5ZXIoKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJvb3RMYXllckF0dGFjaG1lbnRDaGFuZ2VkKCkKK3sK
KyAgICAvLyBUaGUgZG9jdW1lbnQtcmVsYXRpdmUgcGFnZSBvdmVybGF5IGxheWVyICh3aGljaCBp
cyBwaW5uZWQgdG8gdGhlIG1haW4gZnJhbWUncyBsYXllciB0cmVlKQorICAgIC8vIGlzIG1vdmVk
IGJldHdlZW4gZGlmZmVyZW50IFJlbmRlckxheWVyQ29tcG9zaXRvcnMnIGxheWVyIHRyZWVzLCBh
bmQgbmVlZHMgdG8gYmUKKyAgICAvLyByZWF0dGFjaGVkIHdoZW5ldmVyIHdlIHN3YXAgaW4gYSBu
ZXcgUmVuZGVyTGF5ZXJDb21wb3NpdG9yLgorICAgIGlmIChtX3Jvb3RMYXllckF0dGFjaG1lbnQg
PT0gUm9vdExheWVyVW5hdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUmIGZy
YW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCk7CisKKyAgICAvLyBUaGUgYXR0
YWNobWVudCBjYW4gYWZmZWN0IHdoZXRoZXIgdGhlIFJlbmRlclZpZXcgbGF5ZXIncyBwYWludHNJ
bnRvV2luZG93KCkgYmVoYXZpb3IsCisgICAgLy8gc28gY2FsbCB1cGRhdGVEcmF3c0NvbnRlbnQo
KSB0byB1cGRhdGUgdGhhdC4KKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBtX3JlbmRlclZpZXcu
bGF5ZXIoKTsKKyAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXIgPyBs
YXllci0+YmFja2luZygpIDogbnVsbHB0cikKKyAgICAgICAgYmFja2luZy0+dXBkYXRlRHJhd3ND
b250ZW50KCk7CisKKyAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcm9vdENvbnRlbnRMYXllci0+YWRkQ2hpbGQoJmZyYW1lLm1haW5GcmFtZSgp
LnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmxheWVyV2l0aERvY3VtZW50T3ZlcmxheXMoKSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpub3RpZnlJRnJhbWVzT2ZDb21wb3NpdGlu
Z0NoYW5nZSgpCit7CisgICAgLy8gQ29tcG9zaXRpbmcgYWZmZWN0cyB0aGUgYW5zd2VyIHRvIFJl
bmRlcklGcmFtZTo6cmVxdWlyZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCksIHNvCisgICAgLy8g
d2UgbmVlZCB0byBzY2hlZHVsZSBhIHN0eWxlIHJlY2FsYyBpbiBvdXIgcGFyZW50IGRvY3VtZW50
LgorICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fcmVuZGVy
Vmlldy5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICBvd25lckVsZW1lbnQtPnNj
aGVkdWxlaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOworfQorCitib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJIYXMzRENvbnRlbnQoY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWVyKSBjb25zdAoreworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IGxheWVyLnJl
bmRlcmVyKCkuc3R5bGUoKTsKKworICAgIGlmIChzdHlsZS50cmFuc2Zvcm1TdHlsZTNEKCkgPT0g
VHJhbnNmb3JtU3R5bGUzRFByZXNlcnZlM0QgfHwgc3R5bGUuaGFzUGVyc3BlY3RpdmUoKSB8fCBz
dHlsZS50cmFuc2Zvcm0oKS5oYXMzRE9wZXJhdGlvbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXImPihsYXllcikudXBkYXRlTGF5ZXJMaXN0c0lm
TmVlZGVkKCk7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgTGF5ZXJMaXN0TXV0YXRpb25E
ZXRlY3RvciBtdXRhdGlvbkNoZWNrZXIoY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KCZsYXllcikp
OworI2VuZGlmCisKKyAgICBpZiAobGF5ZXIuaXNTdGFja2luZ0NvbnRhaW5lcigpKSB7CisgICAg
ICAgIGlmIChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbmVnWk9yZGVyTGlzdCA9IGxheWVyLm5lZ1pP
cmRlckxpc3QoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvKiByZW5kZXJMYXllciA6ICpuZWda
T3JkZXJMaXN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGxheWVySGFzM0RDb250ZW50KCpyZW5k
ZXJMYXllcikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBwb3NaT3Jk
ZXJMaXN0ID0gbGF5ZXIucG9zWk9yZGVyTGlzdCgpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8q
IHJlbmRlckxheWVyIDogKnBvc1pPcmRlckxpc3QpIHsKKyAgICAgICAgICAgICAgICBpZiAobGF5
ZXJIYXMzRENvbnRlbnQoKnJlbmRlckxheWVyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoVmVjdG9y
PFJlbmRlckxheWVyKj4qIG5vcm1hbEZsb3dMaXN0ID0gbGF5ZXIubm9ybWFsRmxvd0xpc3QoKSkg
eworICAgICAgICBmb3IgKGF1dG8qIHJlbmRlckxheWVyIDogKm5vcm1hbEZsb3dMaXN0KSB7Cisg
ICAgICAgICAgICBpZiAobGF5ZXJIYXMzRENvbnRlbnQoKnJlbmRlckxheWVyKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCgpCit7CisgICAgLy8gUGFnZSBzY2FsZSB3aWxsIG9ubHkgYmUgYXBwbGllZCBh
dCB0byB0aGUgUmVuZGVyVmlldyBhbmQgc3VibGF5ZXJzLCBidXQgdGhlIGRldmljZSBzY2FsZSBm
YWN0b3IKKyAgICAvLyBuZWVkcyB0byBiZSBhcHBsaWVkIGF0IHRoZSBsZXZlbCBvZiByb290R3Jh
cGhpY3NMYXllcigpLgorICAgIEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciA9IHJvb3RHcmFwaGlj
c0xheWVyKCk7CisgICAgaWYgKHJvb3RMYXllcikKKyAgICAgICAgcm9vdExheWVyLT5ub3RlRGV2
aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkU3RhdHVz
KFJlbmRlckxheWVyJiBsYXllcikKK3sKKyAgICBMYXllclNjcm9sbENvb3JkaW5hdGlvblJvbGVz
IGNvb3JkaW5hdGlvblJvbGVzID0gMDsKKyAgICBpZiAoaXNWaWV3cG9ydENvbnN0cmFpbmVkRml4
ZWRPclN0aWNreUxheWVyKGxheWVyKSkKKyAgICAgICAgY29vcmRpbmF0aW9uUm9sZXMgfD0gVmll
d3BvcnRDb25zdHJhaW5lZDsKKworICAgIGlmICh1c2VDb29yZGluYXRlZFNjcm9sbGluZ0Zvckxh
eWVyKG1fcmVuZGVyVmlldywgbGF5ZXIpKQorICAgICAgICBjb29yZGluYXRpb25Sb2xlcyB8PSBT
Y3JvbGxpbmc7CisKKyAgICBpZiAoY29vcmRpbmF0aW9uUm9sZXMpIHsKKyAgICAgICAgaWYgKG1f
c2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMuYWRkKCZsYXllcikuaXNOZXdFbnRyeSkKKyAgICAgICAg
ICAgIG1fc3ViZnJhbWVTY3JvbGxMYXllcnNOZWVkUmVhdHRhY2ggPSB0cnVlOworCisgICAgICAg
IHVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkTGF5ZXIobGF5ZXIsIGNvb3JkaW5hdGlvblJvbGVzKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKGxh
eWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21TY3JvbGxD
b29yZGluYXRlZExheWVycyhSZW5kZXJMYXllciYgbGF5ZXIpCit7CisgICAgaWYgKCFtX3Njcm9s
bENvb3JkaW5hdGVkTGF5ZXJzLmNvbnRhaW5zKCZsYXllcikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fc3ViZnJhbWVTY3JvbGxMYXllcnNOZWVkUmVhdHRhY2ggPSB0cnVlOworICAgIAorICAg
IG1fc2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMucmVtb3ZlKCZsYXllcik7CisgICAgbV9zY3JvbGxD
b29yZGluYXRlZExheWVyc05lZWRpbmdVcGRhdGUucmVtb3ZlKCZsYXllcik7CisKKyAgICBkZXRh
Y2hTY3JvbGxDb29yZGluYXRlZExheWVyKGxheWVyLCBTY3JvbGxpbmcgfCBWaWV3cG9ydENvbnN0
cmFpbmVkKTsKK30KKworRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpjb21wdXRlRml4ZWRWaWV3cG9ydENvbnN0cmFpbnRzKFJlbmRlckxheWVy
JiBsYXllcikgY29uc3QKK3sKKyAgICBBU1NFUlQobGF5ZXIuaXNDb21wb3NpdGVkKCkpOworCisg
ICAgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IGxheWVyLmJhY2tpbmcoKS0+Z3JhcGhp
Y3NMYXllcigpOworICAgIExheW91dFJlY3Qgdmlld3BvcnRSZWN0ID0gbV9yZW5kZXJWaWV3LmZy
YW1lVmlldygpLnJlY3RGb3JGaXhlZFBvc2l0aW9uTGF5b3V0KCk7CisKKyAgICBGaXhlZFBvc2l0
aW9uVmlld3BvcnRDb25zdHJhaW50cyBjb25zdHJhaW50czsKKyAgICBjb25zdHJhaW50cy5zZXRM
YXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KGdyYXBoaWNzTGF5ZXItPnBvc2l0aW9uKCkpOworICAg
IGNvbnN0cmFpbnRzLnNldFZpZXdwb3J0UmVjdEF0TGFzdExheW91dCh2aWV3cG9ydFJlY3QpOwor
ICAgIGNvbnN0cmFpbnRzLnNldEFsaWdubWVudE9mZnNldChncmFwaGljc0xheWVyLT5waXhlbEFs
aWdubWVudE9mZnNldCgpKTsKKworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IGxheWVy
LnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlLmxlZnQoKS5pc0F1dG8oKSkKKyAg
ICAgICAgY29uc3RyYWludHMuYWRkQW5jaG9yRWRnZShWaWV3cG9ydENvbnN0cmFpbnRzOjpBbmNo
b3JFZGdlTGVmdCk7CisKKyAgICBpZiAoIXN0eWxlLnJpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAg
IGNvbnN0cmFpbnRzLmFkZEFuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRn
ZVJpZ2h0KTsKKworICAgIGlmICghc3R5bGUudG9wKCkuaXNBdXRvKCkpCisgICAgICAgIGNvbnN0
cmFpbnRzLmFkZEFuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZVRvcCk7
CisKKyAgICBpZiAoIXN0eWxlLmJvdHRvbSgpLmlzQXV0bygpKQorICAgICAgICBjb25zdHJhaW50
cy5hZGRBbmNob3JFZGdlKFZpZXdwb3J0Q29uc3RyYWludHM6OkFuY2hvckVkZ2VCb3R0b20pOwor
CisgICAgLy8gSWYgbGVmdCBhbmQgcmlnaHQgYXJlIGF1dG8sIHVzZSBsZWZ0LgorICAgIGlmIChz
dHlsZS5sZWZ0KCkuaXNBdXRvKCkgJiYgc3R5bGUucmlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAg
Y29uc3RyYWludHMuYWRkQW5jaG9yRWRnZShWaWV3cG9ydENvbnN0cmFpbnRzOjpBbmNob3JFZGdl
TGVmdCk7CisKKyAgICAvLyBJZiB0b3AgYW5kIGJvdHRvbSBhcmUgYXV0bywgdXNlIHRvcC4KKyAg
ICBpZiAoc3R5bGUudG9wKCkuaXNBdXRvKCkgJiYgc3R5bGUuYm90dG9tKCkuaXNBdXRvKCkpCisg
ICAgICAgIGNvbnN0cmFpbnRzLmFkZEFuY2hvckVkZ2UoVmlld3BvcnRDb25zdHJhaW50czo6QW5j
aG9yRWRnZVRvcCk7CisgICAgICAgIAorICAgIHJldHVybiBjb25zdHJhaW50czsKK30KKworU3Rp
Y2t5UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29t
cHV0ZVN0aWNreVZpZXdwb3J0Q29uc3RyYWludHMoUmVuZGVyTGF5ZXImIGxheWVyKSBjb25zdAor
eworICAgIEFTU0VSVChsYXllci5pc0NvbXBvc2l0ZWQoKSk7CisjaWYgIVBMQVRGT1JNKElPUykK
KyAgICAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIHN0aWNraWVzIGNvbnN0cmFpbmVk
IGJ5IGFuIGVuY2xvc2luZyBjbGlwcGluZyBsYXllci4KKyAgICAvLyBGSVhNRTogV2h5IGRvZXMg
dGhpcyBhc3NlcnRpb24gZmFpbCBvbiBpT1M/CisgICAgQVNTRVJUKCFsYXllci5lbmNsb3NpbmdP
dmVyZmxvd0NsaXBMYXllcihFeGNsdWRlU2VsZikpOworI2VuZGlmCisKKyAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4obGF5
ZXIucmVuZGVyZXIoKSk7CisKKyAgICBTdGlja3lQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMg
Y29uc3RyYWludHM7CisgICAgcmVuZGVyZXIuY29tcHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWlu
dHMoY29uc3RyYWludHMsIHJlbmRlcmVyLmNvbnN0cmFpbmluZ1JlY3RGb3JTdGlja3lQb3NpdGlv
bigpKTsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSBsYXllci5iYWNraW5n
KCktPmdyYXBoaWNzTGF5ZXIoKTsKKworICAgIGNvbnN0cmFpbnRzLnNldExheWVyUG9zaXRpb25B
dExhc3RMYXlvdXQoZ3JhcGhpY3NMYXllci0+cG9zaXRpb24oKSk7CisgICAgY29uc3RyYWludHMu
c2V0U3RpY2t5T2Zmc2V0QXRMYXN0TGF5b3V0KHJlbmRlcmVyLnN0aWNreVBvc2l0aW9uT2Zmc2V0
KCkpOworICAgIGNvbnN0cmFpbnRzLnNldEFsaWdubWVudE9mZnNldChncmFwaGljc0xheWVyLT5w
aXhlbEFsaWdubWVudE9mZnNldCgpKTsKKworICAgIHJldHVybiBjb25zdHJhaW50czsKK30KKwor
c3RhdGljIFNjcm9sbGluZ05vZGVJRCBlbmNsb3NpbmdTY3JvbGxpbmdOb2RlSUQoUmVuZGVyTGF5
ZXImIGxheWVyLCBJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmKQoreworICAgIFJlbmRlckxh
eWVyKiBjdXJyTGF5ZXIgPSBpbmNsdWRlU2VsZiA9PSBJbmNsdWRlU2VsZiA/ICZsYXllciA6IGxh
eWVyLnBhcmVudCgpOworICAgIHdoaWxlIChjdXJyTGF5ZXIpIHsKKyAgICAgICAgaWYgKFJlbmRl
ckxheWVyQmFja2luZyogYmFja2luZyA9IGN1cnJMYXllci0+YmFja2luZygpKSB7CisgICAgICAg
ICAgICBpZiAoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCA9IGJhY2tpbmctPnNjcm9sbGluZ05vZGVJ
REZvckNoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJRDsKKyAgICAgICAg
fQorICAgICAgICBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPnBhcmVudCgpOworICAgIH0KKworICAg
IHJldHVybiAwOworfQorCitzdGF0aWMgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbENvb3JkaW5hdGVk
QW5jZXN0b3JJblBhcmVudE9mRnJhbWUoRnJhbWUmIGZyYW1lKQoreworICAgIGlmICghZnJhbWUu
ZG9jdW1lbnQoKSB8fCAhZnJhbWUudmlldygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8v
IEZpbmQgdGhlIGZyYW1lJ3MgZW5jbG9zaW5nIGxheWVyIGluIG91ciByZW5kZXIgdHJlZS4KKyAg
ICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IGZyYW1lLmRvY3VtZW50KCkt
Pm93bmVyRWxlbWVudCgpOworICAgIFJlbmRlckVsZW1lbnQqIGZyYW1lUmVuZGVyZXIgPSBvd25l
ckVsZW1lbnQgPyBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIGlmICgh
ZnJhbWVSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJMYXllciogbGF5
ZXJJblBhcmVudERvY3VtZW50ID0gZnJhbWVSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAg
ICBpZiAoIWxheWVySW5QYXJlbnREb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlEKCpsYXllckluUGFyZW50RG9jdW1lbnQsIElu
Y2x1ZGVTZWxmKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYXR0YWNoU3Vi
ZnJhbWVTY3JvbGxMYXllcnMoKQoreworICAgIGlmICghbV9zdWJmcmFtZVNjcm9sbExheWVyc05l
ZWRSZWF0dGFjaCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc3ViZnJhbWVTY3JvbGxM
YXllcnNOZWVkUmVhdHRhY2ggPSBmYWxzZTsKKworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisKKyAg
ICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpLnRy
ZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxp
bmcoKSkgeworICAgICAgICBpZiAoIWNoaWxkLT5kb2N1bWVudCgpIHx8ICFjaGlsZC0+dmlldygp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gSWdub3JlIGZyYW1lcyB0aGF0
IGFyZSBub3Qgc2Nyb2xsLWNvb3JkaW5hdGVkLgorICAgICAgICBGcmFtZVZpZXcqIGNoaWxkRnJh
bWVWaWV3ID0gY2hpbGQtPnZpZXcoKTsKKyAgICAgICAgU2Nyb2xsaW5nTm9kZUlEIGZyYW1lU2Ny
b2xsaW5nTm9kZUlEID0gY2hpbGRGcmFtZVZpZXctPnNjcm9sbExheWVySUQoKTsKKyAgICAgICAg
aWYgKCFmcmFtZVNjcm9sbGluZ05vZGVJRCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIFNjcm9sbGluZ05vZGVJRCBwYXJlbnROb2RlSUQgPSBzY3JvbGxDb29yZGluYXRlZEFuY2Vz
dG9ySW5QYXJlbnRPZkZyYW1lKCpjaGlsZCk7CisgICAgICAgIGlmICghcGFyZW50Tm9kZUlEKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmF0
dGFjaFRvU3RhdGVUcmVlKEZyYW1lU2Nyb2xsaW5nTm9kZSwgZnJhbWVTY3JvbGxpbmdOb2RlSUQs
IHBhcmVudE5vZGVJRCk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIExheWVyU2Nyb2xsQ29v
cmRpbmF0aW9uUm9sZSBzY3JvbGxDb29yZGluYXRpb25Sb2xlRm9yTm9kZVR5cGUoU2Nyb2xsaW5n
Tm9kZVR5cGUgbm9kZVR5cGUpCit7CisgICAgc3dpdGNoIChub2RlVHlwZSkgeworICAgIGNhc2Ug
RnJhbWVTY3JvbGxpbmdOb2RlOgorICAgIGNhc2UgT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOgorICAg
ICAgICByZXR1cm4gU2Nyb2xsaW5nOworICAgIGNhc2UgRml4ZWROb2RlOgorICAgIGNhc2UgU3Rp
Y2t5Tm9kZToKKyAgICAgICAgcmV0dXJuIFZpZXdwb3J0Q29uc3RyYWluZWQ7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTY3JvbGxpbmc7Cit9CisKK1Njcm9s
bGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFNjcm9sbGluZ05vZGUoUmVu
ZGVyTGF5ZXImIGxheWVyLCBTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSwgU2Nyb2xsaW5nTm9k
ZUlEIHBhcmVudE5vZGVJRCkKK3sKKyAgICBTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5n
Q29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpOworICAgIFJlbmRlckxh
eWVyQmFja2luZyogYmFja2luZyA9IGxheWVyLmJhY2tpbmcoKTsKKyAgICAvLyBDcmFzaCBsb2dz
IHN1Z2dlc3QgdGhhdCBiYWNraW5nIGNhbiBiZSBudWxsIGhlcmUsIGJ1dCB3ZSBkb24ndCBrbm93
IGhvdzogcmRhcjovL3Byb2JsZW0vMTg1NDU0NTIuCisgICAgQVNTRVJUKGJhY2tpbmcpOworICAg
IGlmICghYmFja2luZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBMYXllclNjcm9sbENvb3Jk
aW5hdGlvblJvbGUgcm9sZSA9IHNjcm9sbENvb3JkaW5hdGlvblJvbGVGb3JOb2RlVHlwZShub2Rl
VHlwZSk7CisgICAgU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCA9IGJhY2tpbmctPnNjcm9sbGluZ05v
ZGVJREZvclJvbGUocm9sZSk7CisgICAgaWYgKCFub2RlSUQpCisgICAgICAgIG5vZGVJRCA9IHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT51bmlxdWVTY3JvbGxMYXllcklEKCk7CisKKyAgICBub2RlSUQg
PSBzY3JvbGxpbmdDb29yZGluYXRvci0+YXR0YWNoVG9TdGF0ZVRyZWUobm9kZVR5cGUsIG5vZGVJ
RCwgcGFyZW50Tm9kZUlEKTsKKyAgICBpZiAoIW5vZGVJRCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBiYWNraW5nLT5zZXRTY3JvbGxpbmdOb2RlSURGb3JSb2xlKG5vZGVJRCwgcm9sZSk7Cisg
ICAgbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5hZGQobm9kZUlELCAmbGF5ZXIpOworICAgIAor
ICAgIHJldHVybiBub2RlSUQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRh
Y2hTY3JvbGxDb29yZGluYXRlZExheWVyKFJlbmRlckxheWVyJiBsYXllciwgTGF5ZXJTY3JvbGxD
b29yZGluYXRpb25Sb2xlcyByb2xlcykKK3sKKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tp
bmcgPSBsYXllci5iYWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAocm9sZXMgJiBTY3JvbGxpbmcpIHsKKyAgICAgICAgaWYgKFNjcm9sbGluZ05v
ZGVJRCBub2RlSUQgPSBiYWNraW5nLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKFNjcm9sbGluZykp
CisgICAgICAgICAgICBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLnJlbW92ZShub2RlSUQpOwor
ICAgIH0KKworICAgIGlmIChyb2xlcyAmIFZpZXdwb3J0Q29uc3RyYWluZWQpIHsKKyAgICAgICAg
aWYgKFNjcm9sbGluZ05vZGVJRCBub2RlSUQgPSBiYWNraW5nLT5zY3JvbGxpbmdOb2RlSURGb3JS
b2xlKFZpZXdwb3J0Q29uc3RyYWluZWQpKQorICAgICAgICAgICAgbV9zY3JvbGxpbmdOb2RlVG9M
YXllck1hcC5yZW1vdmUobm9kZUlEKTsKKyAgICB9CisKKyAgICBiYWNraW5nLT5kZXRhY2hGcm9t
U2Nyb2xsaW5nQ29vcmRpbmF0b3Iocm9sZXMpOworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0aW9uRm9yVGhpc0ZyYW1lKFNjcm9sbGluZ05vZGVJ
RCBwYXJlbnROb2RlSUQpCit7CisgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICBBU1NFUlQoc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPmNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KG1fcmVu
ZGVyVmlldy5mcmFtZVZpZXcoKSkpOworCisgICAgU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCA9IGF0
dGFjaFNjcm9sbGluZ05vZGUoKm1fcmVuZGVyVmlldy5sYXllcigpLCBGcmFtZVNjcm9sbGluZ05v
ZGUsIHBhcmVudE5vZGVJRCk7CisgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZShub2RlSUQsIG1fc2Nyb2xsTGF5ZXIuZ2V0KCksIG1fcm9vdENvbnRlbnRM
YXllci5nZXQoKSwgZml4ZWRSb290QmFja2dyb3VuZExheWVyKCksIGNsaXBMYXllcigpKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkTGF5
ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBMYXllclNjcm9sbENvb3JkaW5hdGlvblJvbGVzIHJlYXNv
bnMpCit7CisgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0g
dGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICBpZiAoIXNjcm9sbGluZ0Nvb3JkaW5h
dG9yIHx8ICFzY3JvbGxpbmdDb29yZGluYXRvci0+Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFt
ZVZpZXcobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ym9vbCBpc1Jvb3RMYXllciA9ICZsYXllciA9PSBtX3JlbmRlclZpZXcubGF5ZXIoKTsKKworICAg
IC8vIEZJWE1FOiBSZW1vdmUgc3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgc2luY2UgYWxs
IHBsYXRmb3JtcyBzdXBwb3J0IHRoZW0gbm93LgorICAgIGlmICghc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIHx8ICghbGF5ZXIucGFyZW50KCkgJiYg
IWlzUm9vdExheWVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc2Nyb2xsQ29v
cmRpbmF0ZWRMYXllcnMuY29udGFpbnMoJmxheWVyKSk7CisgICAgQVNTRVJUKGxheWVyLmlzQ29t
cG9zaXRlZCgpKTsKKworICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyLmJh
Y2tpbmcoKTsKKyAgICBpZiAoIWJhY2tpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV9yZW5kZXJWaWV3LmZyYW1lKCkuaXNNYWluRnJhbWUoKSkgeworICAgICAgICBTY3JvbGxpbmdO
b2RlSUQgcGFyZW50RG9jdW1lbnRIb3N0aW5nTm9kZUlEID0gc2Nyb2xsQ29vcmRpbmF0ZWRBbmNl
c3RvckluUGFyZW50T2ZGcmFtZShtX3JlbmRlclZpZXcuZnJhbWUoKSk7CisgICAgICAgIGlmICgh
cGFyZW50RG9jdW1lbnRIb3N0aW5nTm9kZUlEKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHVwZGF0ZVNjcm9sbENvb3JkaW5hdGlvbkZvclRoaXNGcmFtZShwYXJlbnREb2N1bWVudEhv
c3RpbmdOb2RlSUQpOworICAgICAgICBpZiAoIShyZWFzb25zICYgVmlld3BvcnRDb25zdHJhaW5l
ZCkgJiYgaXNSb290TGF5ZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU2Ny
b2xsaW5nTm9kZUlEIHBhcmVudE5vZGVJRCA9IGVuY2xvc2luZ1Njcm9sbGluZ05vZGVJRChsYXll
ciwgRXhjbHVkZVNlbGYpOworICAgIGlmICghcGFyZW50Tm9kZUlEICYmICFpc1Jvb3RMYXllcikK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEFsd2F5cyBjYWxsIHRoaXMgZXZlbiBpZiB0
aGUgYmFja2luZyBpcyBhbHJlYWR5IGF0dGFjaGVkIGJlY2F1c2UgdGhlIHBhcmVudCBtYXkgaGF2
ZSBjaGFuZ2VkLgorICAgIC8vIElmIGEgbm9kZSBwbGF5cyBib3RoIHJvbGVzLCBmaXhlZC9zdGlj
a3kgaXMgYWx3YXlzIHRoZSBhbmNlc3RvciBub2RlIG9mIHNjcm9sbGluZy4KKyAgICBpZiAocmVh
c29ucyAmIFZpZXdwb3J0Q29uc3RyYWluZWQpIHsKKyAgICAgICAgU2Nyb2xsaW5nTm9kZVR5cGUg
bm9kZVR5cGUgPSBGcmFtZVNjcm9sbGluZ05vZGU7CisgICAgICAgIGlmIChsYXllci5yZW5kZXJl
cigpLnN0eWxlKCkucG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKQorICAgICAgICAgICAgbm9k
ZVR5cGUgPSBGaXhlZE5vZGU7CisgICAgICAgIGVsc2UgaWYgKGxheWVyLnJlbmRlcmVyKCkuc3R5
bGUoKS5wb3NpdGlvbigpID09IFN0aWNreVBvc2l0aW9uKQorICAgICAgICAgICAgbm9kZVR5cGUg
PSBTdGlja3lOb2RlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKworICAgICAgICBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEID0gYXR0YWNoU2Nyb2xsaW5n
Tm9kZShsYXllciwgbm9kZVR5cGUsIHBhcmVudE5vZGVJRCk7CisgICAgICAgIGlmICghbm9kZUlE
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAobm9kZVR5cGUpIHsKKyAg
ICAgICAgY2FzZSBGaXhlZE5vZGU6CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
dXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZE5vZGUobm9kZUlELCBjb21wdXRlRml4ZWRWaWV3cG9y
dENvbnN0cmFpbnRzKGxheWVyKSwgYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0aWNreU5vZGU6CisgICAgICAgICAgICBzY3JvbGxp
bmdDb29yZGluYXRvci0+dXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZE5vZGUobm9kZUlELCBjb21w
dXRlU3RpY2t5Vmlld3BvcnRDb25zdHJhaW50cyhsYXllciksIGJhY2tpbmctPmdyYXBoaWNzTGF5
ZXIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGcmFtZVNjcm9sbGluZ05v
ZGU6CisgICAgICAgIGNhc2UgT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHBhcmVudE5vZGVJRCA9IG5vZGVJRDsK
KyAgICB9IGVsc2UKKyAgICAgICAgZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcihsYXllciwg
Vmlld3BvcnRDb25zdHJhaW5lZCk7CisKKyAgICBpZiAocmVhc29ucyAmIFNjcm9sbGluZykgewor
ICAgICAgICBpZiAoaXNSb290TGF5ZXIpCisgICAgICAgICAgICB1cGRhdGVTY3JvbGxDb29yZGlu
YXRpb25Gb3JUaGlzRnJhbWUocGFyZW50Tm9kZUlEKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSA9IE92ZXJmbG93U2Nyb2xsaW5nTm9kZTsK
KyAgICAgICAgICAgIFNjcm9sbGluZ05vZGVJRCBub2RlSUQgPSBhdHRhY2hTY3JvbGxpbmdOb2Rl
KGxheWVyLCBub2RlVHlwZSwgcGFyZW50Tm9kZUlEKTsKKyAgICAgICAgICAgIGlmICghbm9kZUlE
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OlNjcm9sbGluZ0dlb21ldHJ5IHNjcm9sbGluZ0dlb21ldHJ5OworICAgICAgICAgICAg
c2Nyb2xsaW5nR2VvbWV0cnkuc2Nyb2xsT3JpZ2luID0gbGF5ZXIuc2Nyb2xsT3JpZ2luKCk7Cisg
ICAgICAgICAgICBzY3JvbGxpbmdHZW9tZXRyeS5zY3JvbGxQb3NpdGlvbiA9IGxheWVyLnNjcm9s
bFBvc2l0aW9uKCk7CisgICAgICAgICAgICBzY3JvbGxpbmdHZW9tZXRyeS5zY3JvbGxhYmxlQXJl
YVNpemUgPSBsYXllci52aXNpYmxlU2l6ZSgpOworICAgICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0
cnkuY29udGVudFNpemUgPSBsYXllci5jb250ZW50c1NpemUoKTsKKyAgICAgICAgICAgIHNjcm9s
bGluZ0dlb21ldHJ5LnJlYWNoYWJsZUNvbnRlbnRTaXplID0gbGF5ZXIuc2Nyb2xsYWJsZUNvbnRl
bnRzU2l6ZSgpOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgICAgICAgICBpZiAo
Y29uc3QgVmVjdG9yPExheW91dFVuaXQ+KiBvZmZzZXRzID0gbGF5ZXIuaG9yaXpvbnRhbFNuYXBP
ZmZzZXRzKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0cnkuaG9yaXpvbnRhbFNu
YXBPZmZzZXRzID0gKm9mZnNldHM7CisgICAgICAgICAgICBpZiAoY29uc3QgVmVjdG9yPExheW91
dFVuaXQ+KiBvZmZzZXRzID0gbGF5ZXIudmVydGljYWxTbmFwT2Zmc2V0cygpKQorICAgICAgICAg
ICAgICAgIHNjcm9sbGluZ0dlb21ldHJ5LnZlcnRpY2FsU25hcE9mZnNldHMgPSAqb2Zmc2V0czsK
KyAgICAgICAgICAgIGlmIChjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8TGF5b3V0VW5p
dD4+KiByYW5nZXMgPSBsYXllci5ob3Jpem9udGFsU25hcE9mZnNldFJhbmdlcygpKQorICAgICAg
ICAgICAgICAgIHNjcm9sbGluZ0dlb21ldHJ5Lmhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzID0g
KnJhbmdlczsKKyAgICAgICAgICAgIGlmIChjb25zdCBWZWN0b3I8U2Nyb2xsT2Zmc2V0UmFuZ2U8
TGF5b3V0VW5pdD4+KiByYW5nZXMgPSBsYXllci52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMoKSkK
KyAgICAgICAgICAgICAgICBzY3JvbGxpbmdHZW9tZXRyeS52ZXJ0aWNhbFNuYXBPZmZzZXRSYW5n
ZXMgPSAqcmFuZ2VzOworICAgICAgICAgICAgc2Nyb2xsaW5nR2VvbWV0cnkuY3VycmVudEhvcml6
b250YWxTbmFwUG9pbnRJbmRleCA9IGxheWVyLmN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5k
ZXgoKTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0dlb21ldHJ5LmN1cnJlbnRWZXJ0aWNhbFNuYXBQ
b2ludEluZGV4ID0gbGF5ZXIuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKKyNlbmRp
ZgorICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0ZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZShub2RlSUQsIGJhY2tpbmctPnNjcm9sbGluZ0xheWVyKCksIGJhY2tpbmctPnNjcm9s
bGluZ0NvbnRlbnRzTGF5ZXIoKSwgJnNjcm9sbGluZ0dlb21ldHJ5KTsKKyAgICAgICAgfQorICAg
IH0gZWxzZQorICAgICAgICBkZXRhY2hTY3JvbGxDb29yZGluYXRlZExheWVyKGxheWVyLCBTY3Jv
bGxpbmcpOworfQorCitTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3Jv
bGxhYmxlQXJlYUZvclNjcm9sbExheWVySUQoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkgY29uc3QK
K3sKKyAgICBpZiAoIW5vZGVJRCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQobm9kZUlEKTsKK30KKworI2lmIFBMQVRG
T1JNKElPUykKK3R5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybUxheWVyKiwgc3RkOjp1bmlxdWVfcHRy
PFZpZXdwb3J0Q29uc3RyYWludHM+PiBMYXllck1hcDsKK3R5cGVkZWYgSGFzaE1hcDxQbGF0Zm9y
bUxheWVyKiwgUGxhdGZvcm1MYXllcio+IFN0aWNreUNvbnRhaW5lck1hcDsKKwordm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycygp
Cit7CisgICAgLy8gT25seSB0aGUgbWFpbiBmcmFtZSBzaG91bGQgcmVnaXN0ZXIgZml4ZWQvc3Rp
Y2t5IGxheWVycy4KKyAgICBpZiAoIWlzTWFpbkZyYW1lQ29tcG9zaXRvcigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTGF5ZXJNYXAgbGF5ZXJNYXA7CisgICAgU3RpY2t5Q29udGFpbmVyTWFwIHN0aWNr
eUNvbnRhaW5lck1hcDsKKworICAgIGZvciAoYXV0byogbGF5ZXIgOiBtX3Njcm9sbENvb3JkaW5h
dGVkTGF5ZXJzKSB7CisgICAgICAgIEFTU0VSVChsYXllci0+aXNDb21wb3NpdGVkKCkpOworCisg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxWaWV3cG9ydENvbnN0cmFpbnRzPiBjb25zdHJhaW50czsK
KyAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLmlzU3RpY2t5UG9zaXRpb25lZCgpKSB7Cisg
ICAgICAgICAgICBjb25zdHJhaW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8U3RpY2t5UG9zaXRpb25W
aWV3cG9ydENvbnN0cmFpbnRzPihjb21wdXRlU3RpY2t5Vmlld3BvcnRDb25zdHJhaW50cygqbGF5
ZXIpKTsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlckxheWVyKiBlbmNsb3NpbmdUb3VjaFNjcm9s
bGFibGVMYXllciA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoaXNBc3luY1Njcm9sbGFibGVT
dGlja3lMYXllcigqbGF5ZXIsICZlbmNsb3NpbmdUb3VjaFNjcm9sbGFibGVMYXllcikgJiYgZW5j
bG9zaW5nVG91Y2hTY3JvbGxhYmxlTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZW5j
bG9zaW5nVG91Y2hTY3JvbGxhYmxlTGF5ZXItPmlzQ29tcG9zaXRlZCgpKTsKKyAgICAgICAgICAg
ICAgICBzdGlja3lDb250YWluZXJNYXAuYWRkKGxheWVyLT5iYWNraW5nKCktPmdyYXBoaWNzTGF5
ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBlbmNsb3NpbmdUb3VjaFNjcm9sbGFibGVMYXllci0+YmFj
a2luZygpLT5zY3JvbGxpbmdMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKGxheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24o
KSA9PSBGaXhlZFBvc2l0aW9uKQorICAgICAgICAgICAgY29uc3RyYWludHMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzPihjb21wdXRlRml4ZWRWaWV3
cG9ydENvbnN0cmFpbnRzKCpsYXllcikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBsYXllck1hcC5hZGQobGF5ZXItPmJhY2tpbmcoKS0+Z3JhcGhpY3NM
YXllcigpLT5wbGF0Zm9ybUxheWVyKCksIFdURk1vdmUoY29uc3RyYWludHMpKTsKKyAgICB9Cisg
ICAgCisgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLnVwZGF0ZVZpZXdwb3J0Q29uc3RyYWlu
ZWRMYXllcnMobGF5ZXJNYXAsIHN0aWNreUNvbnRhaW5lck1hcCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1bnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWVycygp
Cit7CisgICAgLy8gT25seSB0aGUgbWFpbiBmcmFtZSBzaG91bGQgcmVnaXN0ZXIgZml4ZWQvc3Rp
Y2t5IGxheWVycy4KKyAgICBpZiAoIWlzTWFpbkZyYW1lQ29tcG9zaXRvcigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTGF5ZXJNYXAgbGF5ZXJNYXA7CisgICAgU3RpY2t5Q29udGFpbmVyTWFwIHN0aWNr
eUNvbnRhaW5lck1hcDsKKyAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkudXBkYXRlVmlld3Bv
cnRDb25zdHJhaW5lZExheWVycyhsYXllck1hcCwgc3RpY2t5Q29udGFpbmVyTWFwKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkK
K3sKKyAgICBmb3IgKGF1dG8qIGxheWVyIDogbV9zY3JvbGxpbmdMYXllcnMpCisgICAgICAgIHVw
ZGF0ZVNjcm9sbGluZ0xheWVyV2l0aENsaWVudCgqbGF5ZXIsIHBhZ2UoKS5jaHJvbWUoKS5jbGll
bnQoKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1bnJlZ2lzdGVyQWxsU2Ny
b2xsaW5nTGF5ZXJzKCkKK3sKKyAgICBmb3IgKGF1dG8qIGxheWVyIDogbV9zY3JvbGxpbmdMYXll
cnMpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXItPmJhY2tp
bmcoKTsKKyAgICAgICAgQVNTRVJUKGJhY2tpbmcpOworICAgICAgICBwYWdlKCkuY2hyb21lKCku
Y2xpZW50KCkucmVtb3ZlU2Nyb2xsaW5nTGF5ZXIobGF5ZXItPnJlbmRlcmVyKCkuZWxlbWVudCgp
LCBiYWNraW5nLT5zY3JvbGxpbmdMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGJhY2tpbmctPnNj
cm9sbGluZ0NvbnRlbnRzTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKKyAgICB9Cit9CisjZW5k
aWYKKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXll
cldpdGhCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJCYWNraW5nJiBiYWNr
aW5nKQoreworICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0
b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGJhY2tpbmcuZGV0
YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9yKFNjcm9sbGluZyk7CisKKyAgICAgICAgLy8gRm9y
IENvb3JkaW5hdGVkIEdyYXBoaWNzLgorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Ny
b2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShsYXllcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9zY3JvbGxpbmdMYXllcnNOZWVkaW5n
VXBkYXRlLnJlbW92ZSgmbGF5ZXIpOworICAgIG1fc2Nyb2xsaW5nTGF5ZXJzLnJlbW92ZSgmbGF5
ZXIpOworCisgICAgaWYgKG1fcmVuZGVyVmlldy5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0YXRlKCkg
IT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKQorICAgICAgICByZXR1cm47CisKKyAgICBQbGF0
Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciA9IGJhY2tpbmcuc2Nyb2xsaW5nTGF5ZXIoKS0+cGxh
dGZvcm1MYXllcigpOworICAgIFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIgPSBiYWNraW5n
LnNjcm9sbGluZ0NvbnRlbnRzTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpOworICAgIHBhZ2UoKS5j
aHJvbWUoKS5jbGllbnQoKS5yZW1vdmVTY3JvbGxpbmdMYXllcihsYXllci5yZW5kZXJlcigpLmVs
ZW1lbnQoKSwgc2Nyb2xsaW5nTGF5ZXIsIGNvbnRlbnRzTGF5ZXIpOworI2VuZGlmCit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXll
ciYgbGF5ZXIpCit7CisgICAgdXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRTdGF0dXMobGF5ZXIpOwor
CisgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRo
aXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgLy8gRm9yIENvb3JkaW5hdGVk
IEdyYXBoaWNzLgorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFT
Y3JvbGxMYXllckRpZENoYW5nZShsYXllcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgQVNTRVJUKG1fcmVuZGVyVmlldy5kb2N1bWVudCgpLnBhZ2VD
YWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKTsKKyAgICBtX3Njcm9sbGlu
Z0xheWVycy5hZGQoJmxheWVyKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkK
K3sKKyAgICBpZiAobV9sYXllclVwZGF0ZXIpCisgICAgICAgIG1fbGF5ZXJVcGRhdGVyLT5zY3Jl
ZW5EaWRDaGFuZ2UoZGlzcGxheUlEKTsKK30KKworU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSBjb25zdAoreworICAgIHJl
dHVybiBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKK30KKworR3JhcGhpY3NMYXllckZh
Y3RvcnkqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKSBjb25z
dAoreworICAgIHJldHVybiBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZ3JhcGhpY3NMYXllckZh
Y3RvcnkoKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldExheWVyRmx1c2hU
aHJvdHRsaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9sYXllckZsdXNoVGhyb3R0
bGluZ0VuYWJsZWQgPSBlbmFibGVkOworICAgIGlmIChtX2xheWVyRmx1c2hUaHJvdHRsaW5nRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKKyAg
ICBpZiAoIW1faGFzUGVuZGluZ0xheWVyRmx1c2gpCisgICAgICAgIHJldHVybjsKKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2hOb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRp
c2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24oKQorewor
ICAgIGlmIChtX2xheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlEaXNhYmxlZEZvckludGVy
YWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllckZsdXNoVGhyb3R0bGluZ1RlbXBv
cmFyaWx5RGlzYWJsZWRGb3JJbnRlcmFjdGlvbiA9IHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjppc1Rocm90dGxpbmdMYXllckZsdXNoZXMoKSBjb25zdAoreworICAgIGlm
ICghbV9sYXllckZsdXNoVGhyb3R0bGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV9sYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlzYWJsZWRG
b3JJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c3RhcnRMYXllckZsdXNoVGltZXJJZk5l
ZWRlZCgpCit7CisgICAgbV9sYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlzYWJsZWRG
b3JJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKKyAg
ICBpZiAoIW1fbGF5ZXJGbHVzaFRocm90dGxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KHRocm90dGxlZExheWVyRmx1c2hEZWxh
eSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzdGFydEluaXRpYWxMYXllckZs
dXNoVGltZXJJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2xheWVyRmx1c2hUaHJvdHRsaW5nRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2
ZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90
KHRocm90dGxlZExheWVyRmx1c2hJbml0aWFsRGVsYXkpOworfQorCit2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKQoreworICAgIGlmICghbV9oYXNQZW5k
aW5nTGF5ZXJGbHVzaCkKKyAgICAgICAgcmV0dXJuOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaE5v
dygpOworfQorCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRP
UikKK1JlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkg
Y29uc3QKK3sKKyAgICBpZiAoYXV0byBtb25pdG9yID0gcGFnZSgpLmNocm9tZSgpLmNsaWVudCgp
LmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpKQorICAgICAgICByZXR1cm4g
bW9uaXRvcjsKKworICAgIHJldHVybiBEaXNwbGF5UmVmcmVzaE1vbml0b3I6OmNyZWF0ZURlZmF1
bHREaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlEKTsKK30KKyNlbmRpZgorCit2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6c3RhcnRUcmFja2luZ0xheWVyRmx1c2hlcygpCit7CisgICAg
bV9sYXllckZsdXNoQ291bnQgPSAwOworfQorCit1bnNpZ25lZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmxheWVyRmx1c2hDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJGbHVzaENv
dW50OworfQorCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c3RhcnRUcmFja2luZ0NvbXBv
c2l0aW5nVXBkYXRlcygpCit7CisgICAgbV9jb21wb3NpdGluZ1VwZGF0ZUNvdW50ID0gMDsKK30K
KwordW5zaWduZWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wb3NpdGluZ1VwZGF0ZUNvdW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21wb3NpdGluZ1VwZGF0ZUNvdW50OworfQorCisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1
cGRhdGVTY3JvbGxTbmFwUHJvcGVydGllc1dpdGhGcmFtZVZpZXcoY29uc3QgRnJhbWVWaWV3JiBm
cmFtZVZpZXcpCit7CisgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBjb29yZGluYXRvciA9
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIGNvb3JkaW5hdG9yLT51cGRhdGVTY3Jv
bGxTbmFwUHJvcGVydGllc1dpdGhGcmFtZVZpZXcoZnJhbWVWaWV3KTsKK30KKyNlbmRpZgorCitQ
YWdlJiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBt
X3JlbmRlclZpZXcucGFnZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggODI4
YWU5ZDEyOWE4ZTEwMzU2MmMzNGMyNDViNDhhZjBlMjkxODdhZC4uOGFmY2Q1ZDQzYmQ4MWNmY2E4
MjY4NzAxYmJlMTc3NzdkNDNmNTk4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMzEzLDYgKzMxMyw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwogICAg
IGNvbnN0IENvbG9yJiByb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcjsgfQogCisgICAgdm9pZCB1cGRhdGVSb290
Q29udGVudExheWVyQ2xpcHBpbmcoKTsKKwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAg
ICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUHJvcGVydGllc1dpdGhGcmFtZVZpZXcoY29uc3QgRnJh
bWVWaWV3Jik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKaW5kZXggMTE2OWQ5MmNlZjc4ODhlMWUyY2QxZWUxMDM3NTAzYmNjZTkyMDA0MC4uMDVlOGJi
MTJiZjYzODVjYWFkZDRmZTgwYjI4YmNlNzkyMWZkNjkyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTg5Nyw2ICs4OTcsOSBAQCB2b2lkIFJlbmRlck9i
amVjdDo6cmVwYWludFVzaW5nQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDbwogICAgICAgICAgICAgdmlldy5yZXBhaW50Vmlld1JlY3RhbmdsZShyZWN0KTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGlmICghdmlldy5mcmFt
ZVZpZXcoKS5jbGlwVG9TYWZlQXJlYSgpKQorICAgICAgICAgICAgc2hvdWxkQ2xpcFRvTGF5ZXIg
PSBmYWxzZTsKICAgICB9CiAKICAgICBpZiAodmlldygpLnVzZXNDb21wb3NpdGluZygpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4
IGU1ZDk2ZTYyYzQzZjI1NjU4ZTIzYjY0ZDQ2YzYzYzY4MDZkMDAzOGIuLmY5ZTFiMzY4NmMzMWNk
Y2MyYTY5YWY4MDM0YWVlOGJjOTM1MmRhMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC00MjYwLDYgKzQyNjAsMTEgQEAgc3RhdGlj
IGlubGluZSBXZWJLaXQ6OkZpbmRPcHRpb25zIHRvRmluZE9wdGlvbnMoX1dLRmluZE9wdGlvbnMg
d2tGaW5kT3B0aW9ucykKICAgICByZXR1cm4gX3BhZ2UtPmlzU2hvd2luZ05hdmlnYXRpb25HZXN0
dXJlU25hcHNob3QoKTsKIH0KIAorLSAoQk9PTClfY29udGVudE1heURyYXdJbk9ic2N1cmVkSW5z
ZXRzCit7CisgICAgcmV0dXJuICFfcGFnZS0+Y2xpcFRvU2FmZUFyZWEoKTsKK30KKwogLSAoX1dL
TGF5b3V0TW9kZSlfbGF5b3V0TW9kZQogewogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKaW5k
ZXggYTAyODQzZjRiMjRjNzMyZDFjMjQ2OWExZTQ0ODllNzJiNDE5NjkyYS4uOGU4OWEwNjY3ZDlk
NDJmNzFlNzNhNTFlNjIxZTA0NzkwZjczNzlhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKQEAgLTE0NCw2ICsxNDQs
OCBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlKSB7
CiAvLyBEZWZpbmUgdGhlIGluc2V0IG9mIHRoZSBzY3JvbGx2aWV3IHVudXNhYmxlIGJ5IHRoZSB3
ZWIgcGFnZS4KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldE9ic2N1cmVkSW5zZXRz
OikgVUlFZGdlSW5zZXRzIF9vYnNjdXJlZEluc2V0czsKIAorQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBCT09MIF9jb250ZW50TWF5RHJhd0luT2JzY3VyZWRJbnNldHM7CisKIC8vIE92
ZXJyaWRlIHRoZSBpbnRlcmZhY2Ugb3JpZW50YXRpb24uIENsaWVudHMgdXNpbmcgX2JlZ2luQW5p
bWF0ZWRSZXNpemVXaXRoVXBkYXRlczogbXVzdCB1cGRhdGUgdGhlIGludGVyZmFjZSBvcmllbnRh
dGlvbgogLy8gaW4gdGhlIHVwZGF0ZSBibG9jay4KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0
ZXI9X3NldEludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU6KSBVSUludGVyZmFjZU9yaWVudGF0
aW9uIF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggOGM1Nzc2ZjM0MjhmNmJi
MGQxOTlhYWFlOGUwMjY2MDA3MDRhY2UxMC4uYWRkM2Y2NjUyMmRjMjU5NWQ3OWIyZTc1MDQwNzdl
M2M4ZGYwZjVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
UGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9Q
YWdlQ2xpZW50SW1wbC5oCkBAIC0xNDYsNiArMTQ2LDggQEAgcHJpdmF0ZToKIAogICAgIFdlYkNv
cmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gdXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbigpIG92ZXJyaWRlIHsgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb246OkxUUjsgfQogCisgICAgdm9pZCBkaWRDaGFuZ2VDbGlwVG9TYWZlQXJlYShib29sKSBv
dmVycmlkZSB7IH0KKwogICAgIC8vIE1lbWJlcnMgb2YgUGFnZUNsaWVudEltcGwgY2xhc3MKICAg
ICBHdGtXaWRnZXQqIG1fdmlld1dpZGdldDsKICAgICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIgbV91
bmRvQ29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdl
Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IGI1
NmRlYmY1M2IxNWI2NDQ4MGVjNjQ4ZTdmNzdlNjk5MTRjMDkyNGMuLjBkZGZkNDYyMzU0NDU0ODYz
MDJjMjgxNWY1NWU4MzEwZmZkMDc5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaApAQCAtMzg2LDYgKzM4Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29u
Y2x1ZGVFZGl0RGF0YUludGVyYWN0aW9uKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VGV4dEluZGlj
YXRvckRhdGE+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZURhdGFJbnRlcmFjdGlv
bkNhcmV0UmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBwcmV2aW91c0NhcmV0UmVjdCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY2FyZXRSZWN0KSA9IDA7CiAjZW5kaWYKKworICAgIHZpcnR1
YWwgdm9pZCBkaWRDaGFuZ2VDbGlwVG9TYWZlQXJlYShib29sIGNsaXBUb1NhZmVBcmVhKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKaW5kZXggZDc3ZDQwNzIzMjIzM2E1Y2U5ODlmM2Y5YjQ3ZGFhYTJjYmU0
MDBkYS4uYzg4MzM1ODIxNTQyZDYxNDQ3YTJiMTI2YWZjMjE3Mzk5N2I4Y2QzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTU0NTUsNiArNTQ1NSw4IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlKFJlc2V0U3RhdGVSZWFzb24gcmVzZXRTdGF0
ZVJlYXNvbikKICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQogICAgIHJlcXVlc3RQb2ludGVyVW5s
b2NrKCk7CiAjZW5kaWYKKworICAgIG1fY2xpcFRvU2FmZUFyZWEgPSB0cnVlOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZCgpCkBAIC02ODgwLDQg
KzY4ODIsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BVUkxTY2hlbWVIYW5kbGVyVGFzayh1
aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QKICAgICBpdGVyYXRvci0+dmFsdWUt
PnN0b3BUYXNrKCp0aGlzLCByZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCit2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0Q2xpcFRvU2FmZUFyZWEoYm9vbCBjbGlwVG9TYWZlQXJlYSkKK3sKKyAgICBtX2Ns
aXBUb1NhZmVBcmVhID0gY2xpcFRvU2FmZUFyZWE7CisKKyAgICBtX3BhZ2VDbGllbnQuZGlkQ2hh
bmdlQ2xpcFRvU2FmZUFyZWEoY2xpcFRvU2FmZUFyZWEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBiMWNiODQ2
NTY1ODk1ZGU1ODJmZjI0MjhmZmUzZmNlMTI4YTAyNjhkLi4yN2NkZmZkYzQxYzBhMTFjNTM2MTY4
ZTcxYzU0NTQxMzcxODZkNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCkBAIC0xMTk1LDYgKzExOTUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVTYW5kYm94
RXh0ZW5zaW9uc0lmTmVlZGVkKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlcywgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiBmaWxlUmVhZEhhbmRsZSwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXkmIGZpbGVVcGxvYWRIYW5kbGVzKTsKICNlbmRpZgogCisgICAgdm9pZCBzZXRDbGlwVG9T
YWZlQXJlYShib29sKTsKKyAgICBib29sIGNsaXBUb1NhZmVBcmVhKCkgY29uc3QgeyByZXR1cm4g
bV9jbGlwVG9TYWZlQXJlYTsgfQorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xp
ZW50JiwgV2ViUHJvY2Vzc1Byb3h5JiwgdWludDY0X3QgcGFnZUlELCBSZWY8QVBJOjpQYWdlQ29u
ZmlndXJhdGlvbj4mJik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKQEAgLTE5ODAs
NyArMTk4Myw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIGJvb2wgbV9pc1VzaW5nSGlnaFBl
cmZvcm1hbmNlV2ViR0wgeyBmYWxzZSB9OwotICAgICAgICAKKworICAgIGJvb2wgbV9jbGlwVG9T
YWZlQXJlYSB7IHRydWUgfTsKKwogICAgIFdlYWtQdHJGYWN0b3J5PFdlYlBhZ2VQcm94eT4gbV93
ZWFrUHRyRmFjdG9yeTsKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWY8V2ViVVJMU2NoZW1lSGFu
ZGxlcj4+IG1fdXJsU2NoZW1lSGFuZGxlcnNCeVNjaGVtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaC5vcmlnIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oLm9yaWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFjYjg0NjU2NTg5NWRlNTgy
ZmYyNDI4ZmZlM2ZjZTEyOGEwMjY4ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaC5vcmlnCkBAIC0wLDAgKzEsMTk5MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNs
dWRlICJBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oIgorI2luY2x1ZGUgIkF1dG9Db3JyZWN0aW9u
Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiQ29udGV4dE1l
bnVDb250ZXh0RGF0YS5oIgorI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKKyNpbmNsdWRlICJEcmFn
Q29udHJvbGxlckFjdGlvbi5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNs
dWRlICJFZGl0aW5nUmFuZ2UuaCIKKyNpbmNsdWRlICJFZGl0b3JTdGF0ZS5oIgorI2luY2x1ZGUg
Ikdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJM
YXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUg
Ik5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgiCisjaW5jbHVkZSAi
UGFnZUxvYWRTdGF0ZS5oIgorI2luY2x1ZGUgIlByb2Nlc3NUaHJvdHRsZXIuaCIKKyNpbmNsdWRl
ICJTYW5kYm94RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5j
bHVkZSAiVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRl
ICJWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV0tCYXNlLmgiCisj
aW5jbHVkZSAiV0tQYWdlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYkNvbG9yUGlja2VyLmgiCisj
aW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiV2ViUGFnZURpYWdub3N0aWNMb2dn
aW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmgiCisj
aW5jbHVkZSAiV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcmVm
ZXJlbmNlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQWx0ZXJuYXRpdmVUZXh0Q2xpZW50Lmg+IC8v
IEZJWE1FOiBOZWVkZWQgYnkgV2ViUGFnZVByb3h5TWVzc2FnZXMuaCBmb3IgRElDVEFUSU9OX0FM
VEVSTkFUSVZFUy4KKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IldlYlBvcHVwTWVudVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc0xpZmV0aW1lVHJhY2tl
ci5oIgorI2luY2x1ZGUgIldlYnNpdGVQb2xpY2llcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQWN0
aXZpdHlTdGF0ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQXV0b3BsYXlFdmVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdBY3Rpb25zLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FdmVudFRyYWNraW5nUmVnaW9ucy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVMb2FkZXJUeXBlcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQcm9kdWNlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1Njcm9sbFR5cGVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWFyY2hQb3B1cE1lbnUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2luZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dEdyYW51bGFyaXR5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Vc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlU2VsZWN0aW9uLmg+CisjaW5j
bHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitPQkpDX0NMQVNTIE5TVmlldzsKK09CSkNf
Q0xBU1MgX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk7CisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JU
KQorI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0FjdGlvbnMuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKKyNpbmNsdWRlICJOYXRpdmVXZWJUb3VjaEV2ZW50LmgiCisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIkxheWVyUmVwcmVzZW50YXRpb24uaCIK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIkF0dHJpYnV0ZWRTdHJpbmcu
aCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUgIlByb2Nlc3NUaHJvdHRs
ZXIuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIkFyZ3VtZW50Q29k
ZXJzR3RrLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQp
ICYmICFQTEFURk9STShJT1MpCisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVBsYXliYWNrVGFyZ2V0
UGlja2VyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50
Lmg+CisjZW5kaWYKKworI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQorbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgTWVkaWFTZXNzaW9uTWV0YWRhdGE7Cit9CisjZW5kaWYKKworbmFtZXNwYWNl
IEFQSSB7CitjbGFzcyBDb250ZXh0TWVudUNsaWVudDsKK2NsYXNzIEZpbmRDbGllbnQ7CitjbGFz
cyBGaW5kTWF0Y2hlc0NsaWVudDsKK2NsYXNzIEZvcm1DbGllbnQ7CitjbGFzcyBGdWxsc2NyZWVu
Q2xpZW50OworY2xhc3MgSGlzdG9yeUNsaWVudDsKK2NsYXNzIEljb25Mb2FkaW5nQ2xpZW50Owor
Y2xhc3MgTG9hZGVyQ2xpZW50OworY2xhc3MgTmF2aWdhdGlvbjsKK2NsYXNzIE5hdmlnYXRpb25D
bGllbnQ7CitjbGFzcyBQb2xpY3lDbGllbnQ7CitjbGFzcyBVSUNsaWVudDsKK2NsYXNzIFVSTFJl
cXVlc3Q7Cit9CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgRGVjb2RlcjsKK2NsYXNzIENvbm5l
Y3Rpb247Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOworY2xhc3MgQ3Vyc29yOworY2xhc3MgRHJhZ0RhdGE7CitjbGFzcyBGbG9hdFJlY3Q7
CitjbGFzcyBHcmFwaGljc0xheWVyOworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFByb3RlY3Rpb25T
cGFjZTsKK2NsYXNzIFJ1bkxvb3BPYnNlcnZlcjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKK2NsYXNz
IFRleHRJbmRpY2F0b3I7CitjbGFzcyBWYWxpZGF0aW9uQnViYmxlOworCitzdHJ1Y3QgRGljdGlv
bmFyeVBvcHVwSW5mbzsKK3N0cnVjdCBFeGNlcHRpb25EZXRhaWxzOworc3RydWN0IEZpbGVDaG9v
c2VyU2V0dGluZ3M7CitzdHJ1Y3QgTWVkaWFDb25zdHJhaW50c0RhdGE7CitzdHJ1Y3QgU2VjdXJp
dHlPcmlnaW5EYXRhOworc3RydWN0IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZTsKK3N0cnVjdCBU
ZXh0Q2hlY2tpbmdSZXN1bHQ7CitzdHJ1Y3QgVmlld3BvcnRBdHRyaWJ1dGVzOworc3RydWN0IFdp
bmRvd0ZlYXR1cmVzOworCitlbnVtIGNsYXNzIEhhc0luc2VjdXJlQ29udGVudDsKK2VudW0gY2xh
c3MgU2hvdWxkU2FtcGxlOworfQorCisjaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBHdGtXaWRn
ZXQqIFBsYXRmb3JtV2lkZ2V0OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVt
IEhpZGRlblBhZ2VUaHJvdHRsaW5nQXV0b0luY3JlYXNlc0NvdW50ZXJUeXBlIHsgfTsKK3R5cGVk
ZWYgUmVmQ291bnRlcjxIaWRkZW5QYWdlVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXNDb3VudGVyVHlw
ZT4gSGlkZGVuUGFnZVRocm90dGxpbmdBdXRvSW5jcmVhc2VzQ291bnRlcjsKKworY2xhc3MgQ2Vy
dGlmaWNhdGVJbmZvOworY2xhc3MgTmF0aXZlV2ViR2VzdHVyZUV2ZW50OworY2xhc3MgTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudDsKK2NsYXNzIE5hdGl2ZVdlYk1vdXNlRXZlbnQ7CitjbGFzcyBOYXRp
dmVXZWJXaGVlbEV2ZW50OworY2xhc3MgUGFnZUNsaWVudDsKK2NsYXNzIFJlbW90ZUxheWVyVHJl
ZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YTsKK2NsYXNzIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uOworY2xhc3MgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTsKK2NsYXNzIFVzZXJE
YXRhOworY2xhc3MgVmlld1NuYXBzaG90OworY2xhc3MgVmlzaXRlZExpbmtTdG9yZTsKK2NsYXNz
IFdlYkJhY2tGb3J3YXJkTGlzdDsKK2NsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CitjbGFz
cyBXZWJDb250ZXh0TWVudVByb3h5OworY2xhc3MgV2ViRWRpdENvbW1hbmRQcm94eTsKK2NsYXNz
IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk7CitjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHk7CitjbGFzcyBXZWJOYXZpZ2F0aW9uU3RhdGU7CitjbGFzcyBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyUHJveHk7CitjbGFzcyBXZWJLZXlib2FyZEV2ZW50OworY2xhc3MgV2ViVVJM
U2NoZW1lSGFuZGxlcjsKK2NsYXNzIFdlYk1vdXNlRXZlbnQ7CitjbGFzcyBXZWJPcGVuUGFuZWxS
ZXN1bHRMaXN0ZW5lclByb3h5OworY2xhc3MgV2ViUGFnZUdyb3VwOworY2xhc3MgV2ViUHJvY2Vz
c1Byb3h5OworY2xhc3MgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk7CitjbGFzcyBXZWJX
aGVlbEV2ZW50OworY2xhc3MgV2Vic2l0ZURhdGFTdG9yZTsKK2NsYXNzIEdhbWVwYWREYXRhOwor
CitzdHJ1Y3QgQXR0cmlidXRlZFN0cmluZzsKK3N0cnVjdCBDb2xvclNwYWNlRGF0YTsKK3N0cnVj
dCBFZGl0aW5nUmFuZ2U7CitzdHJ1Y3QgRWRpdG9yU3RhdGU7CitzdHJ1Y3QgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvblJlcXVlc3Q7CitzdHJ1Y3QgTG9hZFBhcmFtZXRlcnM7CitzdHJ1Y3QgUGxhdGZv
cm1Qb3B1cE1lbnVEYXRhOworc3RydWN0IFByaW50SW5mbzsKK3N0cnVjdCBXZWJQb3B1cEl0ZW07
CisKKyNpZiBFTkFCTEUoVklCUkFUSU9OKQorY2xhc3MgV2ViVmlicmF0aW9uUHJveHk7CisjZW5k
aWYKKworI2lmIFVTRShRVUlDS19MT09LKQorY2xhc3MgUXVpY2tMb29rRG9jdW1lbnREYXRhOwor
I2VuZGlmCisKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPHVpbnQ2NF90PiBVbnNpZ25lZENhbGxi
YWNrOwordHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8RWRpdGluZ1JhbmdlPiBFZGl0aW5nUmFuZ2VD
YWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPGNvbnN0IFN0cmluZyY+IFN0cmluZ0Nh
bGxiYWNrOwordHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWUqLCBib29sLCBjb25zdCBXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzJj4gU2NyaXB0VmFsdWVD
YWxsYmFjazsKKworZW51bSBWaXNpYmxlV2ViUGFnZUNvdW50ZXJUeXBlIHsgfTsKK3VzaW5nIFZp
c2libGVXZWJQYWdlQ291bnRlciA9IFJlZkNvdW50ZXI8VmlzaWJsZVdlYlBhZ2VDb3VudGVyVHlw
ZT47Cit1c2luZyBWaXNpYmxlV2ViUGFnZVRva2VuID0gVmlzaWJsZVdlYlBhZ2VDb3VudGVyOjpU
b2tlbjsKKworI2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6
RXJyb3IqPiBQcmludEZpbmlzaGVkQ2FsbGJhY2s7CisjZW5kaWYKKworI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCitzdHJ1Y3QgUXVldWVkVG91Y2hFdmVudHMgeworICAgIFF1ZXVlZFRvdWNoRXZl
bnRzKGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW50KQorICAgICAgICA6IGZvcndhcmRl
ZEV2ZW50KGV2ZW50KQorICAgIHsKKyAgICB9CisgICAgTmF0aXZlV2ViVG91Y2hFdmVudCBmb3J3
YXJkZWRFdmVudDsKKyAgICBWZWN0b3I8TmF0aXZlV2ViVG91Y2hFdmVudD4gZGVmZXJyZWRUb3Vj
aEV2ZW50czsKK307CisjZW5kaWYKKwordHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgU3Ry
aW5nJiwgYm9vbCwgaW50MzJfdD4gVmFsaWRhdGVDb21tYW5kQ2FsbGJhY2s7Cit0eXBlZGVmIEdl
bmVyaWNDYWxsYmFjazxjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgRWRpdGluZ1Jhbmdl
Jj4gUmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2s7CisKKyNpZiBQTEFURk9STShNQUMpCit0
eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBBdHRyaWJ1dGVkU3RyaW5nJiwgY29uc3QgRWRp
dGluZ1JhbmdlJj4gQXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2s7Cit0
eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBTdHJpbmcmLCBkb3VibGUsIGJvb2w+IEZvbnRB
dFNlbGVjdGlvbkNhbGxiYWNrOworI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCit0eXBlZGVm
IEdlbmVyaWNDYWxsYmFjazxjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50
MzJfdCwgdWludDMyX3Q+IEdlc3R1cmVDYWxsYmFjazsKK3R5cGVkZWYgR2VuZXJpY0NhbGxiYWNr
PGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90PiBUb3VjaGVzQ2Fs
bGJhY2s7Cit0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2Vs
ZWN0aW9uUmVjdD4mPiBTZWxlY3Rpb25SZWN0c0NhbGxiYWNrOworc3RydWN0IE5vZGVBc3Npc3Rh
bmNlQXJndW1lbnRzIHsKKyAgICBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiBtX25vZGVJbmZvcm1h
dGlvbjsKKyAgICBib29sIG1fdXNlcklzSW50ZXJhY3Rpbmc7CisgICAgYm9vbCBtX2JsdXJQcmV2
aW91c05vZGU7CisgICAgUmVmUHRyPEFQSTo6T2JqZWN0PiBtX3VzZXJEYXRhOworfTsKKwordXNp
bmcgRHJhd1RvUERGQ2FsbGJhY2sgPSBHZW5lcmljQ2FsbGJhY2s8Y29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJj47CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQordHlwZWRlZiBHZW5lcmlj
Q2FsbGJhY2s8Y29uc3QgV2ViQ29yZTo6TWFjaFNlbmRSaWdodCY+IE1hY2hTZW5kUmlnaHRDYWxs
YmFjazsKKyNlbmRpZgorCitjbGFzcyBXZWJQYWdlUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJ
bXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpQYWdlPgorI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9S
KQorICAgICwgcHVibGljIFdlYkNvbG9yUGlja2VyOjpDbGllbnQKKyNlbmRpZgorI2lmIEVOQUJM
RShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCisgICAgLCBwdWJs
aWMgV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudAorI2VuZGlmCisgICAgLCBw
dWJsaWMgV2ViUG9wdXBNZW51UHJveHk6OkNsaWVudAorICAgICwgcHVibGljIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyCisgICAgLCBwdWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPFdlYlBhZ2VQcm94eT4gY3JlYXRlKFBhZ2VDbGllbnQmLCBXZWJQcm9jZXNz
UHJveHkmLCB1aW50NjRfdCBwYWdlSUQsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsK
KyAgICB2aXJ0dWFsIH5XZWJQYWdlUHJveHkoKTsKKworICAgIGNvbnN0IEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb24mIGNvbmZpZ3VyYXRpb24oKSBjb25zdDsKKworICAgIHVpbnQ2NF90IHBhZ2VJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZUlEOyB9CisgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Np
b25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CisKKyAgICBXZWJGcmFtZVByb3h5
KiBtYWluRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX21haW5GcmFtZS5nZXQoKTsgfQorICAgIFdl
YkZyYW1lUHJveHkqIGZvY3VzZWRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZEZyYW1l
LmdldCgpOyB9CisgICAgV2ViRnJhbWVQcm94eSogZnJhbWVTZXRMYXJnZXN0RnJhbWUoKSBjb25z
dCB7IHJldHVybiBtX2ZyYW1lU2V0TGFyZ2VzdEZyYW1lLmdldCgpOyB9CisKKyAgICBEcmF3aW5n
QXJlYVByb3h5KiBkcmF3aW5nQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0FyZWEuZ2V0
KCk7IH0KKworICAgIFdlYk5hdmlnYXRpb25TdGF0ZSYgbmF2aWdhdGlvblN0YXRlKCkgeyByZXR1
cm4gKm1fbmF2aWdhdGlvblN0YXRlLmdldCgpOyB9CisKKyAgICBXZWJzaXRlRGF0YVN0b3JlJiB3
ZWJzaXRlRGF0YVN0b3JlKCkgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlOyB9CisKKyNpZiBF
TkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgTlNBcnJheSAqZGF0YURldGVjdGlvblJlc3VsdHMo
KSB7IHJldHVybiBtX2RhdGFEZXRlY3Rpb25SZXN1bHRzLmdldCgpOyB9CisjZW5kaWYKKyAgICAg
ICAgCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclByb3h5KiBzY3JvbGxpbmdDb29yZGluYXRvclByb3h5KCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmdldCgpOyB9CisjZW5kaWYKKworICAgIFdlYkJh
Y2tGb3J3YXJkTGlzdCYgYmFja0ZvcndhcmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExp
c3Q7IH0KKworICAgIGJvb2wgYWRkc1Zpc2l0ZWRMaW5rcygpIGNvbnN0IHsgcmV0dXJuIG1fYWRk
c1Zpc2l0ZWRMaW5rczsgfQorICAgIHZvaWQgc2V0QWRkc1Zpc2l0ZWRMaW5rcyhib29sIGFkZHNW
aXNpdGVkTGlua3MpIHsgbV9hZGRzVmlzaXRlZExpbmtzID0gYWRkc1Zpc2l0ZWRMaW5rczsgfQor
CisgICAgdm9pZCBmdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUoKTsKKyAgICB2b2lkIGRpZEVu
dGVyRnVsbHNjcmVlbigpOworICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKTsKKworICAgIFdl
Ykluc3BlY3RvclByb3h5KiBpbnNwZWN0b3IoKSBjb25zdDsKKworICAgIGJvb2wgaXNDb250cm9s
bGVkQnlBdXRvbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb250cm9sbGVkQnlBdXRvbWF0aW9u
OyB9CisgICAgdm9pZCBzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wpOworCisjaWYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgYm9vbCBhbGxvd3NSZW1vdGVJbnNwZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9hbGxvd3NSZW1vdGVJbnNwZWN0aW9uOyB9CisgICAgdm9pZCBzZXRB
bGxvd3NSZW1vdGVJbnNwZWN0aW9uKGJvb2wpOworICAgIFN0cmluZyByZW1vdGVJbnNwZWN0aW9u
TmFtZU92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJy
aWRlOyB9CisgICAgdm9pZCBzZXRSZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlKGNvbnN0IFN0
cmluZyYpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoVklCUkFUSU9OKQorICAgIFdlYlZpYnJhdGlv
blByb3h5KiB2aWJyYXRpb24oKSB7IHJldHVybiBtX3ZpYnJhdGlvbi5nZXQoKTsgfQorI2VuZGlm
CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eSogZnVsbFNjcmVlbk1hbmFnZXIoKTsKKworICAgIEFQSTo6RnVsbHNjcmVlbkNsaWVudCYg
ZnVsbHNjcmVlbkNsaWVudCgpIGNvbnN0IHsgcmV0dXJuICptX2Z1bGxzY3JlZW5DbGllbnQ7IH0K
KyAgICB2b2lkIHNldEZ1bGxzY3JlZW5DbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RnVsbHNj
cmVlbkNsaWVudD4pOworI2VuZGlmCisjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkp
IHx8IChQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisg
ICAgV2ViUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
KCk7CisgICAgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5KiB2aWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyKCk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIGFsbG93c01l
ZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjaygpIGNvbnN0OworICAgIHZvaWQgc2V0QWxsb3dzTWVk
aWFEb2N1bWVudElubGluZVBsYXliYWNrKGJvb2wpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKKyAgICBBUEk6OkNvbnRleHRNZW51Q2xpZW50JiBjb250ZXh0TWVudUNsaWVu
dCgpIHsgcmV0dXJuICptX2NvbnRleHRNZW51Q2xpZW50OyB9CisgICAgdm9pZCBzZXRDb250ZXh0
TWVudUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpDb250ZXh0TWVudUNsaWVudD4pOworI2Vu
ZGlmCisgICAgQVBJOjpGaW5kQ2xpZW50JiBmaW5kQ2xpZW50KCkgeyByZXR1cm4gKm1fZmluZENs
aWVudDsgfQorICAgIHZvaWQgc2V0RmluZENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGaW5k
Q2xpZW50Pik7CisgICAgQVBJOjpGaW5kTWF0Y2hlc0NsaWVudCYgZmluZE1hdGNoZXNDbGllbnQo
KSB7IHJldHVybiAqbV9maW5kTWF0Y2hlc0NsaWVudDsgfQorICAgIHZvaWQgc2V0RmluZE1hdGNo
ZXNDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6RmluZE1hdGNoZXNDbGllbnQ+KTsKKyAgICBB
UEk6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50JiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpIHsg
cmV0dXJuICptX2RpYWdub3N0aWNMb2dnaW5nQ2xpZW50OyB9CisgICAgdm9pZCBzZXREaWFnbm9z
dGljTG9nZ2luZ0NsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudD4pOworICAgIHZvaWQgc2V0Rm9ybUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGb3Jt
Q2xpZW50Pik7CisgICAgdm9pZCBzZXROYXZpZ2F0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6Ok5hdmlnYXRpb25DbGllbnQ+KTsKKyAgICB2b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1
bmlxdWVfcHRyPEFQSTo6SGlzdG9yeUNsaWVudD4pOworICAgIHZvaWQgc2V0TG9hZGVyQ2xpZW50
KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxvYWRlckNsaWVudD4pOworICAgIHZvaWQgc2V0UG9saWN5
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OlBvbGljeUNsaWVudD4pOworICAgIHZvaWQgc2V0
SW5qZWN0ZWRCdW5kbGVDbGllbnQoY29uc3QgV0tQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnRCYXNl
Kik7CisgICAgV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50KiBpbmplY3RlZEJ1bmRsZUNsaWVu
dCgpIHsgcmV0dXJuIG1faW5qZWN0ZWRCdW5kbGVDbGllbnQuZ2V0KCk7IH0KKworICAgIEFQSTo6
VUlDbGllbnQmIHVpQ2xpZW50KCkgeyByZXR1cm4gKm1fdWlDbGllbnQ7IH0KKyAgICB2b2lkIHNl
dFVJQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OlVJQ2xpZW50Pik7CisKKyAgICBBUEk6Oklj
b25Mb2FkaW5nQ2xpZW50JiBpY29uTG9hZGluZ0NsaWVudCgpIHsgcmV0dXJuICptX2ljb25Mb2Fk
aW5nQ2xpZW50OyB9CisgICAgdm9pZCBzZXRJY29uTG9hZGluZ0NsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpJY29uTG9hZGluZ0NsaWVudD4pOworCisgICAgdm9pZCBpbml0aWFsaXplV2ViUGFn
ZSgpOworCisgICAgdm9pZCBjbG9zZSgpOworICAgIGJvb2wgdHJ5Q2xvc2UoKTsKKyAgICBib29s
IGlzQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0Nsb3NlZDsgfQorCisgICAgdm9pZCBzZXRJ
c1VzaW5nSGlnaFBlcmZvcm1hbmNlV2ViR0woYm9vbCB2YWx1ZSkgeyBtX2lzVXNpbmdIaWdoUGVy
Zm9ybWFuY2VXZWJHTCA9IHZhbHVlOyB9CisgICAgYm9vbCBpc1VzaW5nSGlnaFBlcmZvcm1hbmNl
V2ViR0woKSBjb25zdCB7IHJldHVybiBtX2lzVXNpbmdIaWdoUGVyZm9ybWFuY2VXZWJHTDsgfQor
CisgICAgdm9pZCBjbG9zZVBhZ2UoYm9vbCBzdG9wUmVzcG9uc2l2ZW5lc3NUaW1lcik7CisKKyAg
ICB2b2lkIGFkZFBsYXRmb3JtTG9hZFBhcmFtZXRlcnMoTG9hZFBhcmFtZXRlcnMmKTsKKyAgICBS
ZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBsb2FkUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5ID0gV2ViQ29y
ZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3dFeHRlcm5hbFNjaGVt
ZXMsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSA9IG51bGxwdHIpOworICAgIFJlZlB0cjxBUEk6Ok5h
dmlnYXRpb24+IGxvYWRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVVSTCwgY29uc3QgU3RyaW5nJiBy
ZXNvdXJjZURpcmVjdG9yeVVSTCwgQVBJOjpPYmplY3QqIHVzZXJEYXRhID0gbnVsbHB0cik7Cisg
ICAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gbG9hZERhdGEoQVBJOjpEYXRhKiwgY29uc3QgU3Ry
aW5nJiBNSU1FVHlwZSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgY29uc3QgU3RyaW5nJiBiYXNl
VVJMLCBBUEk6Ok9iamVjdCogdXNlckRhdGEgPSBudWxscHRyKTsKKyAgICBSZWZQdHI8QVBJOjpO
YXZpZ2F0aW9uPiBsb2FkSFRNTFN0cmluZyhjb25zdCBTdHJpbmcmIGh0bWxTdHJpbmcsIGNvbnN0
IFN0cmluZyYgYmFzZVVSTCwgQVBJOjpPYmplY3QqIHVzZXJEYXRhID0gbnVsbHB0cik7CisgICAg
dm9pZCBsb2FkQWx0ZXJuYXRlSFRNTFN0cmluZyhjb25zdCBTdHJpbmcmIGh0bWxTdHJpbmcsIGNv
bnN0IFN0cmluZyYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiB1bnJlYWNoYWJsZVVSTCwgQVBJOjpP
YmplY3QqIHVzZXJEYXRhID0gbnVsbHB0cik7CisgICAgdm9pZCBsb2FkUGxhaW5UZXh0U3RyaW5n
KGNvbnN0IFN0cmluZyYsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSA9IG51bGxwdHIpOworICAgIHZv
aWQgbG9hZFdlYkFyY2hpdmVEYXRhKEFQSTo6RGF0YSosIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSA9
IG51bGxwdHIpOworICAgIHZvaWQgbmF2aWdhdGVUb1BERkxpbmtXaXRoU2ltdWxhdGVkQ2xpY2so
Y29uc3QgU3RyaW5nJiB1cmwsIFdlYkNvcmU6OkludFBvaW50IGRvY3VtZW50UG9pbnQsIFdlYkNv
cmU6OkludFBvaW50IHNjcmVlblBvaW50KTsKKworICAgIHZvaWQgc3RvcExvYWRpbmcoKTsKKyAg
ICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiByZWxvYWQoT3B0aW9uU2V0PFdlYkNvcmU6OlJlbG9h
ZE9wdGlvbj4pOworCisgICAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gZ29Gb3J3YXJkKCk7Cisg
ICAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gZ29CYWNrKCk7CisKKyAgICBSZWZQdHI8QVBJOjpO
YXZpZ2F0aW9uPiBnb1RvQmFja0ZvcndhcmRJdGVtKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qKTsK
KyAgICB2b2lkIHRyeVJlc3RvcmVTY3JvbGxQb3NpdGlvbigpOworICAgIHZvaWQgZGlkQ2hhbmdl
QmFja0ZvcndhcmRMaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGFkZGVkSXRlbSwgVmVjdG9y
PFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZCk7CisgICAgdm9pZCB3aWxs
R29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0odWludDY0X3QgaXRlbUlELCBjb25zdCBVc2VyRGF0YSYp
OworCisgICAgYm9vbCBzaG91bGRLZWVwQ3VycmVudEJhY2tGb3J3YXJkTGlzdEl0ZW1Jbkxpc3Qo
V2ViQmFja0ZvcndhcmRMaXN0SXRlbSopOworCisgICAgYm9vbCB3aWxsSGFuZGxlSG9yaXpvbnRh
bFNjcm9sbEV2ZW50cygpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVXZWJzaXRlUG9saWNpZXMo
Y29uc3QgV2Vic2l0ZVBvbGljaWVzJik7CisKKyAgICBib29sIGNhblNob3dNSU1FVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKTsKKworICAgIGJvb2wgZHJhd3NCYWNrZ3JvdW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9kcmF3c0JhY2tncm91bmQ7IH0KKyAgICB2b2lkIHNldERyYXdzQmFja2dyb3Vu
ZChib29sKTsKKworICAgIGZsb2F0IHRvcENvbnRlbnRJbnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
dG9wQ29udGVudEluc2V0OyB9CisgICAgdm9pZCBzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQpOwor
CisgICAgV2ViQ29yZTo6Q29sb3IgdW5kZXJsYXlDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fdW5k
ZXJsYXlDb2xvcjsgfQorICAgIHZvaWQgc2V0VW5kZXJsYXlDb2xvcihjb25zdCBXZWJDb3JlOjpD
b2xvciYpOworCisgICAgLy8gQXQgdGhpcyB0aW1lLCBtX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRD
b2xvciBjYW4gYmUgc2V0IHZpYSBwYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3JEaWRDaGFuZ2Uo
KSB3aGljaCBpcyBhIG1lc3NhZ2UKKyAgICAvLyBmcm9tIHRoZSBVSVByb2Nlc3MsIG9yIGJ5IGRp
ZENvbW1pdExheWVyVHJlZSgpLiBXaGVuIFBMQVRGT1JNKE1BQykgYWRvcHRzIFVJIHNpZGUgY29t
cG9zaXRpbmcsIHdlIHNob3VsZCBnZXQgcmlkIG9mCisgICAgLy8gdGhlIG1lc3NhZ2UgZW50aXJl
bHkuCisgICAgV2ViQ29yZTo6Q29sb3IgcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7IH0KKworICAgIHZvaWQg
dmlld1dpbGxTdGFydExpdmVSZXNpemUoKTsKKyAgICB2b2lkIHZpZXdXaWxsRW5kTGl2ZVJlc2l6
ZSgpOworCisgICAgdm9pZCBzZXRJbml0aWFsRm9jdXMoYm9vbCBmb3J3YXJkLCBib29sIGlzS2V5
Ym9hcmRFdmVudFZhbGlkLCBjb25zdCBXZWJLZXlib2FyZEV2ZW50Jiwgc3RkOjpmdW5jdGlvbjx2
b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIAorICAgIHZvaWQgY2xlYXJTZWxlY3Rp
b24oKTsKKyAgICB2b2lkIHJlc3RvcmVTZWxlY3Rpb25JbkZvY3VzZWRFZGl0YWJsZUVsZW1lbnQo
KTsKKworICAgIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpSZWdpb24m
KTsKKyAgICB2b2lkIHJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgc2Ny
b2xsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxPcmlnaW4sIGJvb2wg
aXNQcm9ncmFtbWF0aWNTY3JvbGwpOworICAgIAorICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdmll
d1Njcm9sbFBvc2l0aW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldERlbGVnYXRlc1Njcm9sbGlu
Zyhib29sIGRlbGVnYXRlc1Njcm9sbGluZykgeyBtX2RlbGVnYXRlc1Njcm9sbGluZyA9IGRlbGVn
YXRlc1Njcm9sbGluZzsgfQorICAgIGJvb2wgZGVsZWdhdGVzU2Nyb2xsaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZWxlZ2F0ZXNTY3JvbGxpbmc7IH0KKworICAgIGVudW0gY2xhc3MgQWN0aXZpdHlT
dGF0ZUNoYW5nZURpc3BhdGNoTW9kZSB7IERlZmVycmFibGUsIEltbWVkaWF0ZSB9OworICAgIHZv
aWQgYWN0aXZpdHlTdGF0ZURpZENoYW5nZShXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpGbGFncyBt
YXlIYXZlQ2hhbmdlZCwgYm9vbCB3YW50c1N5bmNocm9ub3VzUmVwbHkgPSBmYWxzZSwgQWN0aXZp
dHlTdGF0ZUNoYW5nZURpc3BhdGNoTW9kZSA9IEFjdGl2aXR5U3RhdGVDaGFuZ2VEaXNwYXRjaE1v
ZGU6OkRlZmVycmFibGUpOworICAgIGJvb2wgaXNJbldpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1f
YWN0aXZpdHlTdGF0ZSAmIFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzSW5XaW5kb3c7IH0KKyAg
ICB2b2lkIHdhaXRGb3JEaWRVcGRhdGVBY3Rpdml0eVN0YXRlKCk7CisgICAgdm9pZCBkaWRVcGRh
dGVBY3Rpdml0eVN0YXRlKCkgeyBtX3dhaXRpbmdGb3JEaWRVcGRhdGVBY3Rpdml0eVN0YXRlID0g
ZmFsc2U7IH0KKworICAgIHZvaWQgbGF5ZXJIb3N0aW5nTW9kZURpZENoYW5nZSgpOworCisgICAg
V2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaXNWaWV3VmlzaWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZpdHlTdGF0ZSAmIFdlYkNvcmU6OkFjdGl2aXR5U3Rh
dGU6OklzVmlzaWJsZTsgfQorICAgIGJvb2wgaXNWaWV3V2luZG93QWN0aXZlKCkgY29uc3Q7CisK
KyAgICB2b2lkIGFkZE1JTUVUeXBlV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKTsKKworICAgIHZvaWQgZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQgPSBTdHJpbmcoKSk7CisgICAg
dm9pZCB2YWxpZGF0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgc3RkOjpmdW5j
dGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBib29sLCBpbnQzMl90LCBDYWxsYmFja0Jhc2U6OkVy
cm9yKT4pOworCisgICAgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvclN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9lZGl0b3JTdGF0ZTsgfQorICAgIGJvb2wgY2FuRGVsZXRlKCkgY29uc3QgeyByZXR1
cm4gaGFzU2VsZWN0ZWRSYW5nZSgpICYmIGlzQ29udGVudEVkaXRhYmxlKCk7IH0KKyAgICBib29s
IGhhc1NlbGVjdGVkUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2VkaXRvclN0YXRlLnNlbGVjdGlv
bklzUmFuZ2U7IH0KKyAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4g
bV9lZGl0b3JTdGF0ZS5pc0NvbnRlbnRFZGl0YWJsZTsgfQorICAgIAorICAgIGJvb2wgbWFpbnRh
aW5zSW5hY3RpdmVTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX21haW50YWluc0luYWN0aXZl
U2VsZWN0aW9uOyB9CisgICAgdm9pZCBzZXRNYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbihib29s
KTsKKyAgICB2b2lkIHNldEVkaXRhYmxlKGJvb2wpOworICAgIGJvb2wgaXNFZGl0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNFZGl0YWJsZTsgfQorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZv
aWQgZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICBkb3VibGUgZGlzcGxheWVk
Q29udGVudFNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaWJsZUNvbnRlbnRSZWN0VXBk
YXRlLnNjYWxlKCk7IH0KKyAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGV4cG9zZWRDb250
ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZS5l
eHBvc2VkQ29udGVudFJlY3QoKTsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdW5v
YnNjdXJlZENvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlLnVub2JzY3VyZWRDb250ZW50UmVjdCgpOyB9CisgICAgYm9vbCBpblN0YWJsZVN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlLmluU3Rh
YmxlU3RhdGUoKTsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdW5vYnNjdXJlZENv
bnRlbnRSZWN0UmVzcGVjdGluZ0lucHV0Vmlld0JvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fbGFz
dFZpc2libGVDb250ZW50UmVjdFVwZGF0ZS51bm9ic2N1cmVkQ29udGVudFJlY3RSZXNwZWN0aW5n
SW5wdXRWaWV3Qm91bmRzKCk7IH0KKyAgICAvLyBXaGVuIHZpc3VhbCB2aWV3cG9ydHMgYXJlIGVu
YWJsZWQsIHRoaXMgaXMgdGhlIGxheW91dCB2aWV3cG9ydCByZWN0LgorICAgIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgY3VzdG9tRml4ZWRQb3NpdGlvblJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2xhc3RWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUuY3VzdG9tRml4ZWRQb3NpdGlvblJlY3QoKTsg
fQorCisgICAgdm9pZCB1cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzKGNvbnN0IFZpc2libGVDb250
ZW50UmVjdFVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHJlc2VuZExhc3RWaXNpYmxlQ29udGVudFJl
Y3RzKCk7CisKKyAgICBlbnVtIGNsYXNzIFVub2JzY3VyZWRSZWN0Q29uc3RyYWludCB7IENvbnN0
cmFpbmVkVG9Eb2N1bWVudFJlY3QsIFVuY29uc3RyYWluZWQgfTsKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgY29tcHV0ZUN1c3RvbUZpeGVkUG9zaXRpb25SZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgdW5vYnNjdXJlZENvbnRlbnRSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHVu
b2JzY3VyZWRDb250ZW50UmVjdFJlc3BlY3RpbmdJbnB1dFZpZXdCb3VuZHMsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgY3VycmVudEN1c3RvbUZpeGVkUG9zaXRpb25SZWN0LCBkb3VibGUgZGlz
cGxheWVkQ29udGVudFNjYWxlLCBVbm9ic2N1cmVkUmVjdENvbnN0cmFpbnQgPSBVbm9ic2N1cmVk
UmVjdENvbnN0cmFpbnQ6OlVuY29uc3RyYWluZWQsIGJvb2wgdmlzdWFsVmlld3BvcnRFbmFibGVk
ID0gZmFsc2UpIGNvbnN0OworCisgICAgdm9pZCBvdmVyZmxvd1Njcm9sbFZpZXdXaWxsU3RhcnRQ
YW5HZXN0dXJlKCk7CisgICAgdm9pZCBvdmVyZmxvd1Njcm9sbFZpZXdEaWRTY3JvbGwoKTsKKyAg
ICB2b2lkIG92ZXJmbG93U2Nyb2xsV2lsbFN0YXJ0U2Nyb2xsKCk7CisgICAgdm9pZCBvdmVyZmxv
d1Njcm9sbERpZEVuZFNjcm9sbCgpOworCisgICAgdm9pZCBkeW5hbWljVmlld3BvcnRTaXplVXBk
YXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbWluaW11bUxheW91dFNpemUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgbWF4aW11bVVub2JzY3VyZWRTaXplLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIHRhcmdldEV4cG9zZWRDb250ZW50UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiB0YXJnZXRVbm9ic2N1cmVkUmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0YXJn
ZXRVbm9ic2N1cmVkUmVjdEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzLCBkb3VibGUgdGFyZ2V0U2Nh
bGUsIGludDMyX3QgZGV2aWNlT3JpZW50YXRpb24pOworICAgIHZvaWQgc3luY2hyb25pemVEeW5h
bWljVmlld3BvcnRVcGRhdGUoKTsKKworICAgIHZvaWQgc2V0Vmlld3BvcnRDb25maWd1cmF0aW9u
TWluaW11bUxheW91dFNpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisgICAgdm9pZCBz
ZXRNYXhpbXVtVW5vYnNjdXJlZFNpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisgICAg
dm9pZCBzZXREZXZpY2VPcmllbnRhdGlvbihpbnQzMl90KTsKKyAgICBpbnQzMl90IGRldmljZU9y
aWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbjsgfQorICAgIHZv
aWQgd2lsbENvbW1pdExheWVyVHJlZSh1aW50NjRfdCB0cmFuc2FjdGlvbklEKTsKKworICAgIHZv
aWQgc2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRl
eHRHcmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0
ZSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgc3RkOjpmdW5jdGlvbjx2b2lk
IChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3Qs
IENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CisgICAgdm9pZCB1cGRhdGVTZWxlY3Rpb25XaXRoVG91
Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgdWludDMyX3QgdG91Y2hlcywgYm9vbCBiYXNl
SXNTdGFydCwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVp
bnQzMl90LCB1aW50MzJfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIHNlbGVj
dFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50IGZyb20sIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50IHRvLCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0
YXRlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMy
X3QsIHVpbnQzMl90LCB1aW50MzJfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lk
IHVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCB1
aW50MzJfdCB0b3VjaCwgdWludDMyX3QgaGFuZGxlUG9zaXRpb24pOworICAgIHZvaWQgZXh0ZW5k
U2VsZWN0aW9uKFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSk7CisgICAgdm9pZCBzZWxlY3RXb3Jk
QmFja3dhcmQoKTsKKyAgICB2b2lkIG1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNl
dCwgc3RkOjpmdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQg
c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQs
IFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVk
Tm9kZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZv
aWQgc2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBib29sIGlz
SW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKENhbGxiYWNr
QmFzZTo6RXJyb3IpPik7CisgICAgdm9pZCBzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGly
ZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHks
IFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lz
dGVkTm9kZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAg
IHZvaWQgbW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNvcmU6OlRleHRH
cmFudWxhcml0eSwgV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIGJlZ2luU2VsZWN0aW9uSW5EaXJl
Y3Rpb24oV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHVp
bnQ2NF90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9u
V2l0aEV4dGVudFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBib29sIGlzSW50ZXJhY3Rp
bmdXaXRoQXNzaXN0ZWROb2RlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHVpbnQ2NF90LCBDYWxsYmFj
a0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50
QW5kQm91bmRhcnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxh
cml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgc3RkOjpmdW5jdGlvbjx2
b2lkKHVpbnQ2NF90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgcmVxdWVzdEF1
dG9jb3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcmIHRleHRGb3JBdXRvY29ycmVjdGlvbiwgc3Rk
OjpmdW5jdGlvbjx2b2lkIChjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGNvbnN0
IFN0cmluZyYsIGRvdWJsZSwgdWludDY0X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CisgICAg
dm9pZCBhcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29uc3Qg
U3RyaW5nJiBvcmlnaW5hbFRleHQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwg
Q2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICBib29sIGFwcGx5QXV0b2NvcnJlY3Rpb24oY29u
c3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVGV4dCk7CisgICAg
dm9pZCByZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
dWludDY0X3QsIHVpbnQ2NF90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgZ2V0
QXV0b2NvcnJlY3Rpb25Db250ZXh0KFN0cmluZyYgY29udGV4dEJlZm9yZSwgU3RyaW5nJiBtYXJr
ZWRUZXh0LCBTdHJpbmcmIHNlbGVjdGVkVGV4dCwgU3RyaW5nJiBjb250ZXh0QWZ0ZXIsIHVpbnQ2
NF90JiBsb2NhdGlvbiwgdWludDY0X3QmIGxlbmd0aCk7CisgICAgdm9pZCByZXF1ZXN0RGljdGF0
aW9uQ29udGV4dChzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CisgICAgdm9pZCByZXBs
YWNlRGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYgb2xkVGV4dCwgY29uc3QgU3RyaW5nJiBuZXdU
ZXh0KTsKKyAgICB2b2lkIHJlcGxhY2VTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJiBvbGRUZXh0
LCBjb25zdCBTdHJpbmcmIG5ld1RleHQpOworICAgIHZvaWQgZGlkUmVjZWl2ZVBvc2l0aW9uSW5m
b3JtYXRpb24oY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKTsKKyAgICB2
b2lkIGdldFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvblJl
cXVlc3QmLCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpOworICAgIHZvaWQgcmVx
dWVzdFBvc2l0aW9uSW5mb3JtYXRpb24oY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVl
c3QmKTsKKyAgICB2b2lkIHN0YXJ0SW50ZXJhY3Rpb25XaXRoRWxlbWVudEF0UG9zaXRpb24oY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIHN0b3BJbnRlcmFjdGlvbigpOworICAg
IHZvaWQgcGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rpb24pOworICAgIHZvaWQg
c2F2ZUltYWdlVG9MaWJyYXJ5KGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBpbWFnZUhhbmRs
ZSwgdWludDY0X3QgaW1hZ2VTaXplKTsKKyAgICB2b2lkIGRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9u
V2l0aFRvdWNoKHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBmbGFncywgZmxvYXQgZ3Jvd1RocmVz
aG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNob2xkKTsKKyAgICB2b2lkIGZvY3VzTmV4dEFzc2lzdGVk
Tm9kZShib29sIGlzRm9yd2FyZCwgc3RkOjpmdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVy
cm9yKT4pOworICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFsdWUoY29uc3QgU3RyaW5nJik7Cisg
ICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJsZSk7CisgICAgdm9pZCBz
ZXRBc3Npc3RlZE5vZGVTZWxlY3RlZEluZGV4KHVpbnQzMl90IGluZGV4LCBib29sIGFsbG93TXVs
dGlwbGVTZWxlY3Rpb24gPSBmYWxzZSk7CisgICAgdm9pZCBhcHBsaWNhdGlvbkRpZEVudGVyQmFj
a2dyb3VuZCgpOworICAgIHZvaWQgYXBwbGljYXRpb25EaWRGaW5pc2hTbmFwc2hvdHRpbmdBZnRl
ckVudGVyaW5nQmFja2dyb3VuZCgpOworICAgIHZvaWQgYXBwbGljYXRpb25XaWxsRW50ZXJGb3Jl
Z3JvdW5kKCk7CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxSZXNpZ25BY3RpdmUoKTsKKyAgICB2
b2lkIGFwcGxpY2F0aW9uRGlkQmVjb21lQWN0aXZlKCk7CisgICAgdm9pZCBjb21taXRQb3RlbnRp
YWxUYXBGYWlsZWQoKTsKKyAgICB2b2lkIGRpZE5vdEhhbmRsZVRhcEFzQ2xpY2soY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlU3ludGhldGljQ2xpY2soKTsK
KyAgICB2b2lkIGRpc2FibGVEb3VibGVUYXBHZXN0dXJlc0R1cmluZ1RhcElmTmVjZXNzYXJ5KHVp
bnQ2NF90IHJlcXVlc3RJRCk7CisgICAgdm9pZCBjb250ZW50U2l6ZUNhdGVnb3J5RGlkQ2hhbmdl
KGNvbnN0IFN0cmluZyYgY29udGVudFNpemVDYXRlZ29yeSk7CisgICAgdm9pZCBnZXRTZWxlY3Rp
b25Db250ZXh0KHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgaGFuZGxl
VHdvRmluZ2VyVGFwQXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQ2NF90IHJl
cXVlc3RJRCk7CisgICAgdm9pZCBzZXRGb3JjZUFsd2F5c1VzZXJTY2FsYWJsZShib29sKTsKKyAg
ICB2b2lkIHNldElzU2Nyb2xsaW5nT3Jab29taW5nKGJvb2wpOworICAgIHZvaWQgcmVxdWVzdFJl
Y3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KFdlYkNvcmU6OlRleHRHcmFudWxh
cml0eSwgdWludDMyX3Qgb2Zmc2V0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lk
IHJlcXVlc3RSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJfdCBvZmZzZXQsIGNv
bnN0IFN0cmluZyYsIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2Vs
ZWN0aW9uUmVjdD4mLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworI2lmIEVOQUJMRShEQVRBX0lO
VEVSQUNUSU9OKQorICAgIHZvaWQgZGlkUGVyZm9ybURhdGFJbnRlcmFjdGlvbkNvbnRyb2xsZXJP
cGVyYXRpb24oKTsKKyAgICB2b2lkIGRpZEhhbmRsZVN0YXJ0RGF0YUludGVyYWN0aW9uUmVxdWVz
dChib29sIHN0YXJ0ZWQpOworICAgIHZvaWQgcmVxdWVzdFN0YXJ0RGF0YUludGVyYWN0aW9uKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGdsb2JhbFBvc2l0aW9uKTsKKyAgICB2b2lkIGRpZENvbmNsdWRlRWRpdERhdGFJbnRl
cmFjdGlvbihzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlRleHRJbmRpY2F0b3JEYXRhPik7CisjZW5k
aWYKKyNlbmRpZgorI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICB2b2lkIHNldERhdGFE
ZXRlY3Rpb25SZXN1bHQoY29uc3QgRGF0YURldGVjdGlvblJlc3VsdCYpOworI2VuZGlmCisgICAg
dm9pZCBkaWRDb21taXRMYXllclRyZWUoY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbiYpOworICAgIHZvaWQgbGF5ZXJUcmVlQ29tbWl0Q29tcGxldGUoKTsKKworICAgIGJv
b2wgdXBkYXRlTGF5b3V0Vmlld3BvcnRQYXJhbWV0ZXJzKGNvbnN0IFdlYktpdDo6UmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb24mKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19NVUxU
SVBST0NFU1MpCisgICAgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsKKyAg
ICB2b2lkIGNvbW1pdFBhZ2VUcmFuc2l0aW9uVmlld3BvcnQoKTsKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oR1RLKQorICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBW
ZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90
IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2Vt
ZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCk7CisgICAgdm9pZCBj
b25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiBjb21wb3NpdGlvblN0cmluZywgaW50NjRf
dCBzZWxlY3Rpb25TdGFydCwgaW50NjRfdCBzZWxlY3Rpb25MZW5ndGgpOworICAgIHZvaWQgY2Fu
Y2VsQ29tcG9zaXRpb24oKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQg
c2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOworI2VuZGlmCisKKyNpZiBQTEFURk9S
TSAoR1RLKSAmJiBIQVZFKEdUS19HRVNUVVJFUykKKyAgICB2b2lkIGdldENlbnRlckZvclpvb21H
ZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjZW50ZXJJblZpZXdDb29yZGluYXRlcywg
V2ViQ29yZTo6SW50UG9pbnQmIGNlbnRlcik7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBhY2Nlc3NpYmlsaXR5Vmlld0Nvb3JkaW5hdGVzKTsKKyAgICB2b2lkIHNldE1haW5G
cmFtZUlzU2Nyb2xsYWJsZShib29sKTsKKworICAgIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXRU
b1BsdWdpbih1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiB0ZXh0SW5wdXQpOworICAgIGJvb2wgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0Zv
ckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICBib29sIGFjY2VwdHNGaXJzdE1vdXNl
KGludCBldmVudE51bWJlciwgY29uc3QgV2ViTW91c2VFdmVudCYpOworCisgICAgdm9pZCBzZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKExheWVyT3JWaWV3Kik7CisgICAgTGF5ZXJP
clZpZXcqIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKSBjb25zdDsKKworICAgIHZv
aWQgaW5zZXJ0VGV4dEFzeW5jKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgRWRpdGluZ1Jhbmdl
JiByZXBsYWNlbWVudFJhbmdlLCBib29sIHJlZ2lzdGVyVW5kb0dyb3VwID0gZmFsc2UsIEVkaXRp
bmdSYW5nZUlzUmVsYXRpdmVUbyA9IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6RWRpdGFibGVS
b290LCBib29sIHN1cHByZXNzU2VsZWN0aW9uVXBkYXRlID0gZmFsc2UpOworICAgIHZvaWQgZ2V0
TWFya2VkUmFuZ2VBc3luYyhzdGQ6OmZ1bmN0aW9uPHZvaWQgKEVkaXRpbmdSYW5nZSwgQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIGdldFNlbGVjdGVkUmFuZ2VBc3luYyhzdGQ6OmZ1
bmN0aW9uPHZvaWQgKEVkaXRpbmdSYW5nZSwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2
b2lkIGNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYs
IHN0ZDo6ZnVuY3Rpb248dm9pZCAodWludDY0X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7Cisg
ICAgdm9pZCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5n
ZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IEVk
aXRpbmdSYW5nZSYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CisgICAgdm9pZCBzZXRDb21wb3Np
dGlvbkFzeW5jKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9u
VW5kZXJsaW5lPiB1bmRlcmxpbmVzLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHNlbGVjdGlvblJhbmdl
LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UpOworICAgIHZvaWQgY29uZmly
bUNvbXBvc2l0aW9uQXN5bmMoKTsKKworICAgIHZvaWQgc2V0U2Nyb2xsUGVyZm9ybWFuY2VEYXRh
Q29sbGVjdGlvbkVuYWJsZWQoYm9vbCk7CisgICAgYm9vbCBzY3JvbGxQZXJmb3JtYW5jZURhdGFD
b2xsZWN0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsUGVyZm9ybWFuY2VEYXRh
Q29sbGVjdGlvbkVuYWJsZWQ7IH0KKyAgICBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3Jt
YW5jZURhdGEqIHNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YSgpIHsgcmV0dXJuIG1fc2Nyb2xsaW5n
UGVyZm9ybWFuY2VEYXRhLmdldCgpOyB9CisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCisKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBpbnNlcnREaWN0YXRlZFRleHRBc3luYyhjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSwgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OlRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZT4mIGRpY3RhdGlvbkFsdGVy
bmF0aXZlcywgYm9vbCByZWdpc3RlclVuZG9Hcm91cCk7CisgICAgdm9pZCBhdHRyaWJ1dGVkU3Vi
c3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcmLCBjb25zdCBFZGl0aW5nUmFuZ2Um
LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgc2V0Rm9udChjb25zdCBTdHJpbmcm
IGZvbnRGYW1pbHksIGRvdWJsZSBmb250U2l6ZSwgdWludDY0X3QgZm9udFRyYWl0cyk7CisgICAg
dm9pZCBmb250QXRTZWxlY3Rpb24oc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBk
b3VibGUsIGJvb2wsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CisKKyAgICB2b2lkIHN0YXJ0V2lu
ZG93RHJhZygpOworICAgIE5TV2luZG93ICpwbGF0Zm9ybVdpbmRvdygpOworICAgIHZvaWQgcm9v
dFZpZXdUb1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3UmVjdCwgV2ViQ29yZTo6
SW50UmVjdCYgd2luZG93UmVjdCk7CisKKyNpZiBXS19BUElfRU5BQkxFRAorICAgIE5TVmlldyAq
aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSAq
cmVtb3RlT2JqZWN0UmVnaXN0cnkoKTsKKyNlbmRpZgorCisgICAgdm9pZCBpbnRyaW5zaWNDb250
ZW50U2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRyaW5zaWNDb250ZW50
U2l6ZSk7CisgICAgQ0dSZWN0IGJvdW5kc09mTGF5ZXJJbkxheWVyQmFja2VkV2luZG93Q29vcmRp
bmF0ZXMoQ0FMYXllciAqKSBjb25zdDsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyNpZiBQ
TEFURk9STShHVEspCisgICAgUGxhdGZvcm1XaWRnZXQgdmlld1dpZGdldCgpOworICAgIGNvbnN0
IFdlYkNvcmU6OkNvbG9yJiBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tn
cm91bmRDb2xvcjsgfQorICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiBjb2xvcikgeyBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9yOyB9CisjZW5kaWYKKwor
ICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChjb25zdCBOYXRpdmVXZWJNb3VzZUV2ZW50Jik7Cisg
ICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKTsKKyAg
ICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYp
OworCisjaWYgRU5BQkxFKE1BQ19HRVNUVVJFX0VWRU5UUykKKyAgICB2b2lkIGhhbmRsZUdlc3R1
cmVFdmVudChjb25zdCBOYXRpdmVXZWJHZXN0dXJlRXZlbnQmKTsKKyNlbmRpZgorCisjaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdm9pZCBoYW5kbGVUb3VjaEV2ZW50U3luY2hyb25v
dXNseShOYXRpdmVXZWJUb3VjaEV2ZW50Jik7CisgICAgdm9pZCBoYW5kbGVUb3VjaEV2ZW50QXN5
bmNocm9ub3VzbHkoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYpOworCisjZWxpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQorICAgIHZvaWQgaGFuZGxlVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJU
b3VjaEV2ZW50Jik7CisjZW5kaWYKKworICAgIHZvaWQgc2Nyb2xsQnkoV2ViQ29yZTo6U2Nyb2xs
RGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSk7CisgICAgdm9pZCBjZW50ZXJT
ZWxlY3Rpb25JblZpc2libGVBcmVhKCk7CisKKyAgICBjb25zdCBTdHJpbmcmIHRvb2xUaXAoKSBj
b25zdCB7IHJldHVybiBtX3Rvb2xUaXA7IH0KKworICAgIGNvbnN0IFN0cmluZyYgdXNlckFnZW50
KCkgY29uc3QgeyByZXR1cm4gbV91c2VyQWdlbnQ7IH0KKyAgICB2b2lkIHNldEFwcGxpY2F0aW9u
TmFtZUZvclVzZXJBZ2VudChjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBTdHJpbmcmIGFwcGxp
Y2F0aW9uTmFtZUZvclVzZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25OYW1l
Rm9yVXNlckFnZW50OyB9CisgICAgdm9pZCBzZXRDdXN0b21Vc2VyQWdlbnQoY29uc3QgU3RyaW5n
Jik7CisgICAgY29uc3QgU3RyaW5nJiBjdXN0b21Vc2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBt
X2N1c3RvbVVzZXJBZ2VudDsgfQorICAgIHN0YXRpYyBTdHJpbmcgc3RhbmRhcmRVc2VyQWdlbnQo
Y29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWUgPSBTdHJpbmcoKSk7CisKKyAgICBib29sIHN1
cHBvcnRzVGV4dEVuY29kaW5nKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDdXN0b21UZXh0RW5jb2Rp
bmdOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBjdXN0b21UZXh0RW5jb2RpbmdOYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21UZXh0RW5jb2RpbmdOYW1lOyB9CisKKyAgICBib29s
IGFyZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zU3VzcGVuZGVkKCkgY29uc3QgeyByZXR1
cm4gbV9pc1BhZ2VTdXNwZW5kZWQ7IH0KKyAgICB2b2lkIHJlc3VtZUFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKCk7CisgICAgdm9pZCBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKKworICAgIGRvdWJsZSBlc3RpbWF0ZWRQcm9ncmVzcygpIGNvbnN0OworCisgICAg
dm9pZCB0ZXJtaW5hdGVQcm9jZXNzKCk7CisKKyAgICBTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRl
KGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbCAoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpPiYgPSBu
dWxscHRyKSBjb25zdDsKKyAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiByZXN0b3JlRnJvbVNl
c3Npb25TdGF0ZShTZXNzaW9uU3RhdGUsIGJvb2wgbmF2aWdhdGUpOworCisgICAgYm9vbCBzdXBw
b3J0c1RleHRab29tKCkgY29uc3Q7CisgICAgZG91YmxlIHRleHRab29tRmFjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0Wm9vbUZhY3RvcjsgfQorICAgIHZvaWQgc2V0VGV4dFpvb21GYWN0b3Io
ZG91YmxlKTsKKyAgICBkb3VibGUgcGFnZVpvb21GYWN0b3IoKSBjb25zdDsKKyAgICB2b2lkIHNl
dFBhZ2Vab29tRmFjdG9yKGRvdWJsZSk7CisgICAgdm9pZCBzZXRQYWdlQW5kVGV4dFpvb21GYWN0
b3JzKGRvdWJsZSBwYWdlWm9vbUZhY3RvciwgZG91YmxlIHRleHRab29tRmFjdG9yKTsKKworICAg
IHZvaWQgc2NhbGVQYWdlKGRvdWJsZSBzY2FsZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9y
aWdpbik7CisgICAgdm9pZCBzY2FsZVBhZ2VJblZpZXdDb29yZGluYXRlcyhkb3VibGUgc2NhbGUs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjZW50ZXJJblZpZXdDb29yZGluYXRlcyk7CisgICAg
ZG91YmxlIHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0OworICAgIGRvdWJsZSB2aWV3U2NhbGVGYWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdTY2FsZUZhY3RvcjsgfQorICAgIHZvaWQgc2NhbGVW
aWV3KGRvdWJsZSBzY2FsZSk7CisgICAgdm9pZCBzZXRTaG91bGRTY2FsZVZpZXdUb0ZpdERvY3Vt
ZW50KGJvb2wpOworICAgIAorICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRJbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7CisgICAgdm9pZCBz
ZXRDdXN0b21EZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7CisgICAgdm9pZCB3aW5kb3dTY3JlZW5E
aWRDaGFuZ2UoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpOworICAgIHZvaWQgYWNjZXNzaWJp
bGl0eVNldHRpbmdzRGlkQ2hhbmdlKCk7CisKKyAgICB2b2lkIHNldFVzZUZpeGVkTGF5b3V0KGJv
b2wpOworICAgIHZvaWQgc2V0Rml4ZWRMYXlvdXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KTsKKyAgICBib29sIHVzZUZpeGVkTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV91c2VGaXhlZExh
eW91dDsgfTsKKyAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBmaXhlZExheW91dFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2ZpeGVkTGF5b3V0U2l6ZTsgfTsKKworICAgIHZvaWQgbGlzdGVuRm9y
TGF5b3V0TWlsZXN0b25lcyhXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmVzKTsKKworICAgIGJvb2wg
aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkZyYW1lSGFzSG9y
aXpvbnRhbFNjcm9sbGJhcjsgfQorICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKSBjb25z
dCB7IHJldHVybiBtX21haW5GcmFtZUhhc1ZlcnRpY2FsU2Nyb2xsYmFyOyB9CisKKyAgICB2b2lk
IHNldFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0aW9ucyhib29sKTsKKyAgICBib29sIGFyZVNjcm9s
bGJhckFuaW1hdGlvbnNTdXBwcmVzc2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdXBwcmVzc1Njcm9s
bGJhckFuaW1hdGlvbnM7IH0KKworICAgIGJvb2wgaXNQaW5uZWRUb0xlZnRTaWRlKCkgY29uc3Qg
eyByZXR1cm4gbV9tYWluRnJhbWVJc1Bpbm5lZFRvTGVmdFNpZGU7IH0KKyAgICBib29sIGlzUGlu
bmVkVG9SaWdodFNpZGUoKSBjb25zdCB7IHJldHVybiBtX21haW5GcmFtZUlzUGlubmVkVG9SaWdo
dFNpZGU7IH0KKyAgICBib29sIGlzUGlubmVkVG9Ub3BTaWRlKCkgY29uc3QgeyByZXR1cm4gbV9t
YWluRnJhbWVJc1Bpbm5lZFRvVG9wU2lkZTsgfQorICAgIGJvb2wgaXNQaW5uZWRUb0JvdHRvbVNp
ZGUoKSBjb25zdCB7IHJldHVybiBtX21haW5GcmFtZUlzUGlubmVkVG9Cb3R0b21TaWRlOyB9CisK
KyAgICBib29sIHJ1YmJlckJhbmRzQXRMZWZ0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRSdWJiZXJC
YW5kc0F0TGVmdChib29sKTsKKyAgICBib29sIHJ1YmJlckJhbmRzQXRSaWdodCgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0UnViYmVyQmFuZHNBdFJpZ2h0KGJvb2wpOworICAgIGJvb2wgcnViYmVyQmFu
ZHNBdFRvcCgpIGNvbnN0OworICAgIHZvaWQgc2V0UnViYmVyQmFuZHNBdFRvcChib29sKTsKKyAg
ICBib29sIHJ1YmJlckJhbmRzQXRCb3R0b20oKSBjb25zdDsKKyAgICB2b2lkIHNldFJ1YmJlckJh
bmRzQXRCb3R0b20oYm9vbCk7CisKKyAgICB2b2lkIHNldFNob3VsZFVzZUltcGxpY2l0UnViYmVy
QmFuZENvbnRyb2woYm9vbCBzaG91bGRVc2VJbXBsaWNpdFJ1YmJlckJhbmRDb250cm9sKSB7IG1f
c2hvdWxkVXNlSW1wbGljaXRSdWJiZXJCYW5kQ29udHJvbCA9IHNob3VsZFVzZUltcGxpY2l0UnVi
YmVyQmFuZENvbnRyb2w7IH0KKyAgICBib29sIHNob3VsZFVzZUltcGxpY2l0UnViYmVyQmFuZENv
bnRyb2woKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFVzZUltcGxpY2l0UnViYmVyQmFuZENvbnRy
b2w7IH0KKyAgICAgICAgCisgICAgdm9pZCBzZXRFbmFibGVWZXJ0aWNhbFJ1YmJlckJhbmRpbmco
Ym9vbCk7CisgICAgYm9vbCB2ZXJ0aWNhbFJ1YmJlckJhbmRpbmdJc0VuYWJsZWQoKSBjb25zdDsK
KyAgICB2b2lkIHNldEVuYWJsZUhvcml6b250YWxSdWJiZXJCYW5kaW5nKGJvb2wpOworICAgIGJv
b2wgaG9yaXpvbnRhbFJ1YmJlckJhbmRpbmdJc0VuYWJsZWQoKSBjb25zdDsKKyAgICAgICAgCisg
ICAgdm9pZCBzZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoYm9vbCk7CisgICAgYm9vbCBi
YWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoKSBjb25zdDsKKworICAgIHZvaWQgc2V0UGFnaW5h
dGlvbk1vZGUoV2ViQ29yZTo6UGFnaW5hdGlvbjo6TW9kZSk7CisgICAgV2ViQ29yZTo6UGFnaW5h
dGlvbjo6TW9kZSBwYWdpbmF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnaW5hdGlvbk1v
ZGU7IH0KKyAgICB2b2lkIHNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoYm9vbCk7Cisg
ICAgYm9vbCBwYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9w
YWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zOyB9CisgICAgdm9pZCBzZXRQYWdlTGVuZ3RoKGRv
dWJsZSk7CisgICAgZG91YmxlIHBhZ2VMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VMZW5n
dGg7IH0KKyAgICB2b2lkIHNldEdhcEJldHdlZW5QYWdlcyhkb3VibGUpOworICAgIGRvdWJsZSBn
YXBCZXR3ZWVuUGFnZXMoKSBjb25zdCB7IHJldHVybiBtX2dhcEJldHdlZW5QYWdlczsgfQorICAg
IHZvaWQgc2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZChib29sKTsKKyAgICBib29sIHBhZ2lu
YXRpb25MaW5lR3JpZEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2luYXRpb25MaW5lR3Jp
ZEVuYWJsZWQ7IH0KKyAgICB1bnNpZ25lZCBwYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3Bh
Z2VDb3VudDsgfQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSB3
ZWIgcHJvY2VzcyB0aHJvdWdoIGEgbWVzc2FnZS4KKyAgICB2b2lkIHJlZ2lzdGVyV2ViUHJvY2Vz
c0FjY2Vzc2liaWxpdHlUb2tlbihjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKKyAgICAvLyBD
YWxsZWQgYnkgdGhlIFVJIHByb2Nlc3Mgd2hlbiBpdCBpcyByZWFkeSB0byBzZW5kIGl0cyB0b2tl
bnMgdG8gdGhlIHdlYiBwcm9jZXNzLgorICAgIHZvaWQgcmVnaXN0ZXJVSVByb2Nlc3NBY2Nlc3Np
YmlsaXR5VG9rZW5zKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZWxlbWVuVG9rZW4sIGNvbnN0
IElQQzo6RGF0YVJlZmVyZW5jZSYgd2luZG93VG9rZW4pOworICAgIGJvb2wgcmVhZFNlbGVjdGlv
bkZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOworICAgIFN0cmlu
ZyBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gZGF0YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSk7CisgICAgdm9pZCBtYWtlRmlyc3RSZXNwb25kZXIoKTsKKworICAgIENvbG9y
U3BhY2VEYXRhIGNvbG9yU3BhY2UoKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09O
VFJPTFMpCisgICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmREYXRhKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiB0eXBlcywgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJik7CisjZW5k
aWYKKworICAgIHZvaWQgcGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKGRvdWJsZSk7CisgICAgdm9p
ZCBwbHVnaW5TY2FsZUZhY3RvckRpZENoYW5nZShkb3VibGUpOworICAgIHZvaWQgcGx1Z2luWm9v
bUZhY3RvckRpZENoYW5nZShkb3VibGUpOworCisgICAgLy8gRmluZC4KKyAgICB2b2lkIGZpbmRT
dHJpbmcoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQp
OworICAgIHZvaWQgZmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMs
IHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOworICAgIHZvaWQgZ2V0SW1hZ2VGb3JGaW5kTWF0Y2go
aW50MzJfdCBtYXRjaEluZGV4KTsKKyAgICB2b2lkIHNlbGVjdEZpbmRNYXRjaChpbnQzMl90IG1h
dGNoSW5kZXgpOworICAgIHZvaWQgZGlkR2V0SW1hZ2VGb3JGaW5kTWF0Y2goY29uc3QgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSwgdWludDMyX3QgbWF0Y2hJbmRl
eCk7CisgICAgdm9pZCBoaWRlRmluZFVJKCk7CisgICAgdm9pZCBjb3VudFN0cmluZ01hdGNoZXMo
Y29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpOworICAg
IHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNo
Q291bnQpOworICAgIHZvaWQgc2V0VGV4dEluZGljYXRvcihjb25zdCBXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yRGF0YSYsIHVpbnQ2NF90IC8qIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dMaWZl
dGltZSAqLyBsaWZldGltZSA9IDAgLyogUGVybWFuZW50ICovKTsKKyAgICB2b2lkIHNldFRleHRJ
bmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhmbG9hdCk7CisgICAgdm9pZCBjbGVhclRleHRJbmRp
Y2F0b3IoKTsKKyAgICB2b2lkIGRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+JiwgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRj
aEluZGV4LCBib29sIGRpZFdyYXBBcm91bmQpOworICAgIHZvaWQgZGlkRmFpbFRvRmluZFN0cmlu
Zyhjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGRpZEZpbmRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4+JiBtYXRjaFJlY3Rz
LCBpbnQzMl90IGZpcnN0SW5kZXhBZnRlclNlbGVjdGlvbik7CisKKyAgICB2b2lkIGdldENvbnRl
bnRzQXNTdHJpbmcoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBDYWxsYmFja0Jh
c2U6OkVycm9yKT4pOworICAgIHZvaWQgZ2V0Qnl0ZWNvZGVQcm9maWxlKHN0ZDo6ZnVuY3Rpb248
dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIGdl
dFNhbXBsaW5nUHJvZmlsZXJPdXRwdXQoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcm
LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOworICAgIHZvaWQgaXNXZWJQcm9jZXNzUmVzcG9uc2l2
ZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgaXNXZWJQcm9jZXNzUmVzcG9uc2l2ZSk+KTsKKwor
I2lmIEVOQUJMRShNSFRNTCkKKyAgICB2b2lkIGdldENvbnRlbnRzQXNNSFRNTERhdGEoRnVuY3Rp
b248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOworI2VuZGlmCisg
ICAgdm9pZCBnZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShXZWJGcmFtZVByb3h5KiwgRnVuY3Rp
b248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOworICAgIHZvaWQg
Z2V0UmVzb3VyY2VEYXRhRnJvbUZyYW1lKFdlYkZyYW1lUHJveHkqLCBBUEk6OlVSTCosIEZ1bmN0
aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKKyAgICB2b2lk
IGdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKHN0ZDo6ZnVuY3Rpb248dm9pZCAo
Y29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKKyAgICB2b2lkIGdldFNlbGVj
dGlvbk9yQ29udGVudHNBc1N0cmluZyhzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYs
IENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CisgICAgdm9pZCBnZXRTZWxlY3Rpb25Bc1dlYkFyY2hp
dmVEYXRhKEZ1bmN0aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYm
KTsKKyAgICB2b2lkIGdldFNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CisgICAgdm9p
ZCBnZXRXZWJBcmNoaXZlT2ZGcmFtZShXZWJGcmFtZVByb3h5KiwgRnVuY3Rpb248dm9pZCAoQVBJ
OjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOworICAgIHZvaWQgcnVuSmF2YVNjcmlw
dEluTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWUqLCBib29sIGhhZEV4Y2VwdGlvbiwgY29uc3QgV2ViQ29yZTo6RXhj
ZXB0aW9uRGV0YWlscyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uKTsK
KyAgICB2b2lkIGZvcmNlUmVwYWludChQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4pOworCisgICAg
ZmxvYXQgaGVhZGVySGVpZ2h0KFdlYkZyYW1lUHJveHkqKTsKKyAgICBmbG9hdCBmb290ZXJIZWln
aHQoV2ViRnJhbWVQcm94eSopOworICAgIHZvaWQgZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5Kiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1l
UHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIC8vIERpY3Rpb25hcnkuCisgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0
TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworICAgIHZvaWQgcGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKTsKKyNlbmRpZgorCisgICAgdm9pZCBy
ZWNlaXZlZFBvbGljeURlY2lzaW9uKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwgV2ViRnJhbWVQcm94
eSYsIHVpbnQ2NF90IGxpc3RlbmVySUQsIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlvbklELCBj
b25zdCBXZWJzaXRlUG9saWNpZXMmKTsKKworICAgIHZvaWQgYmFja0ZvcndhcmRSZW1vdmVkSXRl
bSh1aW50NjRfdCBpdGVtSUQpOworCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkgICAgCisgICAg
Ly8gRHJhZyBhbmQgZHJvcCBzdXBwb3J0LgorICAgIHZvaWQgZHJhZ0VudGVyZWQoV2ViQ29yZTo6
RHJhZ0RhdGEmLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSA9IFN0cmluZygpKTsKKyAg
ICB2b2lkIGRyYWdVcGRhdGVkKFdlYkNvcmU6OkRyYWdEYXRhJiwgY29uc3QgU3RyaW5nJiBkcmFn
U3RvcmFnZU5hbWUgPSBTdHJpbmcoKSk7CisgICAgdm9pZCBkcmFnRXhpdGVkKFdlYkNvcmU6OkRy
YWdEYXRhJiwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUgPSBTdHJpbmcoKSk7CisgICAg
dm9pZCBwZXJmb3JtRHJhZ09wZXJhdGlvbihXZWJDb3JlOjpEcmFnRGF0YSYsIGNvbnN0IFN0cmlu
ZyYgZHJhZ1N0b3JhZ2VOYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25z
dCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYpOworCisgICAgdm9pZCBkaWRQZXJmb3Jt
RHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgZHJhZ09wZXJhdGlvbiwgYm9vbCBtb3VzZUlz
T3ZlckZpbGVJbnB1dCwgdW5zaWduZWQgbnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRlZCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgaW5zZXJ0aW9uUmVjdCk7CisgICAgdm9pZCBkcmFnRW5kZWQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IG9wZXJhdGlvbik7CisgICAgdm9pZCBkcmFn
Q2FuY2VsbGVkKCk7CisgICAgdm9pZCBzZXREcmFnQ2FyZXRSZWN0KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lkIHNldERyYWdJbWFnZShjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlJiBkcmFnSW1hZ2VIYW5kbGUsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VGV4dElu
ZGljYXRvckRhdGE+LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBkcmFnSW1hZ2VBbmNob3Is
IHVpbnQ2NF90IGFjdGlvbik7CisgICAgdm9pZCBzZXRQcm9taXNlZERhdGFGb3JJbWFnZShjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaW1h
Z2VIYW5kbGUsIHVpbnQ2NF90IGltYWdlU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29u
c3QgU3RyaW5nJiBleHRlbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVSTCwg
Y29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGFyY2hpdmVIYW5kbGUsIHVpbnQ2NF90IGFyY2hp
dmVTaXplKTsKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAgIHZvaWQgc2V0UHJv
bWlzZWREYXRhRm9yQXR0YWNobWVudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5n
JiB0aXRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVSTCk7Cisj
ZW5kaWYKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHN0YXJ0RHJhZyhXZWJT
ZWxlY3Rpb25EYXRhJiYsIHVpbnQ2NF90IGRyYWdPcGVyYXRpb24sIGNvbnN0IFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJiBkcmFnSW1hZ2UpOworI2VuZGlmCisjZW5kaWYKKworICAgIHZvaWQgcHJv
Y2Vzc0RpZEJlY29tZVVucmVzcG9uc2l2ZSgpOworICAgIHZvaWQgcHJvY2Vzc0RpZEJlY29tZVJl
c3BvbnNpdmUoKTsKKyAgICB2b2lkIHByb2Nlc3NEaWRDcmFzaCgpOworICAgIHZvaWQgd2lsbENo
YW5nZVByb2Nlc3NJc1Jlc3BvbnNpdmUoKTsKKyAgICB2b2lkIGRpZENoYW5nZVByb2Nlc3NJc1Jl
c3BvbnNpdmUoKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIHByb2Nlc3NXaWxsQmVj
b21lU3VzcGVuZGVkKCk7CisgICAgdm9pZCBwcm9jZXNzV2lsbEJlY29tZUZvcmVncm91bmQoKTsK
KyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOworICAgIHZpcnR1YWwgdm9pZCBleGl0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOworCisgICAgZW51bSBV
bmRvT3JSZWRvIHsgVW5kbywgUmVkbyB9OworICAgIHZvaWQgYWRkRWRpdENvbW1hbmQoV2ViRWRp
dENvbW1hbmRQcm94eSopOworICAgIHZvaWQgcmVtb3ZlRWRpdENvbW1hbmQoV2ViRWRpdENvbW1h
bmRQcm94eSopOworICAgIGJvb2wgaXNWYWxpZEVkaXRDb21tYW5kKFdlYkVkaXRDb21tYW5kUHJv
eHkqKTsKKyAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29t
bWFuZFByb3h5PiwgVW5kb09yUmVkbyk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lk
IHJlZ2lzdGVyS2V5cHJlc3NDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9rbm93
bktleXByZXNzQ29tbWFuZE5hbWVzLmFkZChuYW1lKTsgfQorICAgIGJvb2wgaXNWYWxpZEtleXBy
ZXNzQ29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdCB7IHJldHVybiBtX2tub3du
S2V5cHJlc3NDb21tYW5kTmFtZXMuY29udGFpbnMobmFtZSk7IH0KKyNlbmRpZgorCisgICAgV2Vi
UHJvY2Vzc1Byb3h5JiBwcm9jZXNzKCkgeyByZXR1cm4gbV9wcm9jZXNzOyB9CisgICAgcGlkX3Qg
cHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdDsKKworICAgIFdlYlByZWZlcmVuY2VzJiBwcmVmZXJl
bmNlcygpIHsgcmV0dXJuIG1fcHJlZmVyZW5jZXM7IH0KKyAgICB2b2lkIHNldFByZWZlcmVuY2Vz
KFdlYlByZWZlcmVuY2VzJik7CisKKyAgICBXZWJQYWdlR3JvdXAmIHBhZ2VHcm91cCgpIHsgcmV0
dXJuIG1fcGFnZUdyb3VwOyB9CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKKworI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCisgICAgV2ViQ29yZTo6RHJhZ09wZXJhdGlvbiBjdXJyZW50RHJh
Z09wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudERyYWdPcGVyYXRpb247IH0KKyAg
ICBib29sIGN1cnJlbnREcmFnSXNPdmVyRmlsZUlucHV0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50RHJhZ0lzT3ZlckZpbGVJbnB1dDsgfQorICAgIHVuc2lnbmVkIGN1cnJlbnREcmFnTnVtYmVy
T2ZGaWxlc1RvQmVBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudERyYWdOdW1iZXJP
ZkZpbGVzVG9CZUFjY2VwdGVkOyB9CisgICAgV2ViQ29yZTo6SW50UmVjdCBjdXJyZW50RHJhZ0Nh
cmV0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudERyYWdDYXJldFJlY3Q7IH0KKyAgICB2
b2lkIHJlc2V0Q3VycmVudERyYWdJbmZvcm1hdGlvbigpOworICAgIHZvaWQgZGlkRW5kRHJhZ2dp
bmcoKTsKKyNlbmRpZgorCisgICAgdm9pZCBwcmVmZXJlbmNlc0RpZENoYW5nZSgpOworCisjaWYg
RU5BQkxFKENPTlRFWFRfTUVOVVMpCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBXZWJDb250ZXh0TWVu
dVByb3h5LgorICAgIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4
dE1lbnVJdGVtRGF0YSYpOworICAgIHZvaWQgaGFuZGxlQ29udGV4dE1lbnVLZXlFdmVudCgpOwor
I2VuZGlmCisKKyAgICAvLyBDYWxsZWQgYnkgdGhlIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVy
UHJveHkuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgZGlkQ2hvb3NlRmlsZXNGb3JPcGVu
UGFuZWxXaXRoRGlzcGxheVN0cmluZ0FuZEljb24oY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25z
dCBTdHJpbmcmIGRpc3BsYXlTdHJpbmcsIGNvbnN0IEFQSTo6RGF0YSogaWNvbkRhdGEpOworI2Vu
ZGlmCisgICAgdm9pZCBkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbChjb25zdCBWZWN0b3I8U3Ry
aW5nPiYpOworICAgIHZvaWQgZGlkQ2FuY2VsRm9yT3BlblBhbmVsKCk7CisKKyAgICBXZWJQYWdl
Q3JlYXRpb25QYXJhbWV0ZXJzIGNyZWF0aW9uUGFyYW1ldGVycygpOworCisgICAgdm9pZCBoYW5k
bGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOworCisgICAgdm9pZCBhZHZhbmNlVG9O
ZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbik7CisgICAgdm9pZCBjaGFu
Z2VTcGVsbGluZ1RvV29yZChjb25zdCBTdHJpbmcmIHdvcmQpOworI2lmIFVTRShBUFBLSVQpCisg
ICAgdm9pZCB1cHBlcmNhc2VXb3JkKCk7CisgICAgdm9pZCBsb3dlcmNhc2VXb3JkKCk7CisgICAg
dm9pZCBjYXBpdGFsaXplV29yZCgpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICBib29sIGlzU21hcnRJbnNlcnREZWxldGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1Nt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsgfQorICAgIHZvaWQgc2V0U21hcnRJbnNlcnREZWxldGVF
bmFibGVkKGJvb2wpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspCisgICAgU3RyaW5nIGFj
Y2Vzc2liaWxpdHlQbHVnSUQoKSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc2liaWxpdHlQbHVnSUQ7
IH0KKyNlbmRpZgorCisgICAgdm9pZCBzZXRDYW5SdW5Nb2RhbChib29sKTsKKyAgICBib29sIGNh
blJ1bk1vZGFsKCk7CisKKyAgICB2b2lkIGJlZ2luUHJpbnRpbmcoV2ViRnJhbWVQcm94eSosIGNv
bnN0IFByaW50SW5mbyYpOworICAgIHZvaWQgZW5kUHJpbnRpbmcoKTsKKyAgICB2b2lkIGNvbXB1
dGVQYWdlc0ZvclByaW50aW5nKFdlYkZyYW1lUHJveHkqLCBjb25zdCBQcmludEluZm8mLCBQYXNz
UmVmUHRyPENvbXB1dGVkUGFnZXNDYWxsYmFjaz4pOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAg
IHZvaWQgZHJhd1JlY3RUb0ltYWdlKFdlYkZyYW1lUHJveHkqLCBjb25zdCBQcmludEluZm8mLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFBhc3NSZWZQ
dHI8SW1hZ2VDYWxsYmFjaz4pOworICAgIHZvaWQgZHJhd1BhZ2VzVG9QREYoV2ViRnJhbWVQcm94
eSosIGNvbnN0IFByaW50SW5mbyYsIHVpbnQzMl90IGZpcnN0LCB1aW50MzJfdCBjb3VudCwgUGFz
c1JlZlB0cjxEYXRhQ2FsbGJhY2s+KTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgdWludDMyX3Qg
Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmdBbmREcmF3VG9QREYodWludDY0X3QgZnJhbWVJRCwgY29u
c3QgUHJpbnRJbmZvJiwgRHJhd1RvUERGQ2FsbGJhY2s6OkNhbGxiYWNrRnVuY3Rpb24mJik7Cisg
ICAgdm9pZCBkcmF3VG9QREZDYWxsYmFjayhjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHBkZkRh
dGEsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOworI2VuZGlmCisjZWxpZiBQTEFURk9STShHVEspCisg
ICAgdm9pZCBkcmF3UGFnZXNGb3JQcmludGluZyhXZWJGcmFtZVByb3h5KiwgY29uc3QgUHJpbnRJ
bmZvJiwgUGFzc1JlZlB0cjxQcmludEZpbmlzaGVkQ2FsbGJhY2s+KTsKKyNlbmRpZgorCisgICAg
UGFnZUxvYWRTdGF0ZSYgcGFnZUxvYWRTdGF0ZSgpIHsgcmV0dXJuIG1fcGFnZUxvYWRTdGF0ZTsg
fQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCBoYW5kbGVBbHRlcm5hdGl2ZVRleHRV
SVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCk7CisjZW5kaWYKKworICAgIHZvaWQgc2F2ZURh
dGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1l
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmF0aW5nVVJMU3Ry
aW5nLCBBUEk6OkRhdGEqKTsKKyAgICB2b2lkIHNhdmVQREZUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRl
cihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIG9yaWdpbmF0
aW5nVVJMU3RyaW5nLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICB2b2lkIHNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRoTmF0aXZl
QXBwbGljYXRpb25SYXcoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSwgY29uc3QgU3Ry
aW5nJiBvcmlnaW5hdGluZ1VSTFN0cmluZywgY29uc3QgdWludDhfdCogZGF0YSwgdW5zaWduZWQg
bG9uZyBzaXplLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOworICAgIHZvaWQgc2F2ZVBERlRvVGVt
cG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIG9yaWdpbmF0aW5nVVJMU3RyaW5nLCBjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmIHBkZlVVSUQpOworICAgIHZvaWQg
b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3Ry
aW5nJiBwZGZVVUlEKTsKKyNlbmRpZgorCisgICAgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlU2Ny
b2xsZXJUaHVtYlJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVj
dDsgfQorCisgICAgdWludDY0X3QgcmVuZGVyVHJlZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3Jl
bmRlclRyZWVTaXplOyB9CisKKyAgICB2b2lkIHByaW50TWFpbkZyYW1lKCk7CisgICAgCisgICAg
dm9pZCBzZXRNZWRpYVZvbHVtZShmbG9hdCk7CisgICAgdm9pZCBzZXRNdXRlZChXZWJDb3JlOjpN
ZWRpYVByb2R1Y2VyOjpNdXRlZFN0YXRlRmxhZ3MpOworICAgIHZvaWQgc2V0TWF5U3RhcnRNZWRp
YVdoZW5JbldpbmRvdyhib29sKTsKKyAgICBib29sIG1heVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3co
KSBjb25zdCB7IHJldHVybiBtX21heVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3c7IH0KKyAgICAgICAg
CisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCisgICAgYm9vbCBoYXNNZWRpYVNlc3Npb25XaXRo
QWN0aXZlTWVkaWFFbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWVkaWFTZXNzaW9uV2l0
aEFjdGl2ZU1lZGlhRWxlbWVudHM7IH0KKyAgICB2b2lkIGhhbmRsZU1lZGlhRXZlbnQoV2ViQ29y
ZTo6TWVkaWFFdmVudFR5cGUpOworICAgIHZvaWQgc2V0Vm9sdW1lT2ZNZWRpYUVsZW1lbnQoZG91
YmxlLCB1aW50NjRfdCk7CisjZW5kaWYKKyAgICAgICAgCisjaWYgRU5BQkxFKFBPSU5URVJfTE9D
SykKKyAgICB2b2lkIGRpZEFsbG93UG9pbnRlckxvY2soKTsKKyAgICB2b2lkIGRpZERlbnlQb2lu
dGVyTG9jaygpOworI2VuZGlmCisKKyAgICAvLyBXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50Cisg
ICAgTmF0aXZlV2ViTW91c2VFdmVudCogY3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQo
KSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhib29s
IGZsYWcpOworICAgIGJvb2wgc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcygpIHsgcmV0dXJuIG1f
c3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlczsgfQorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZv
aWQgd2lsbFN0YXJ0VXNlclRyaWdnZXJlZFpvb21pbmcoKTsKKworICAgIHZvaWQgcG90ZW50aWFs
VGFwQXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgdWludDY0X3QmIHJlcXVl
c3RJRCk7CisgICAgdm9pZCBjb21taXRQb3RlbnRpYWxUYXAodWludDY0X3QgbGF5ZXJUcmVlVHJh
bnNhY3Rpb25JZEF0TGFzdFRvdWNoU3RhcnQpOworICAgIHZvaWQgY2FuY2VsUG90ZW50aWFsVGFw
KCk7CisgICAgdm9pZCB0YXBIaWdobGlnaHRBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmLCB1aW50NjRfdCYgcmVxdWVzdElEKTsKKyAgICB2b2lkIGhhbmRsZVRhcChjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiwgdWludDY0X3QgbGF5ZXJUcmVlVHJhbnNhY3Rpb25JZEF0TGFz
dFRvdWNoU3RhcnQpOworCisgICAgdm9pZCBpbnNwZWN0b3JOb2RlU2VhcmNoTW92ZWRUb1Bvc2l0
aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIGluc3BlY3Rvck5vZGVT
ZWFyY2hFbmRlZEF0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworCisgICAg
dm9pZCBibHVyQXNzaXN0ZWROb2RlKCk7CisjZW5kaWYKKworICAgIHZvaWQgcG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIEFQSTo6T2JqZWN0KiBt
ZXNzYWdlQm9keSk7CisKKyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKKyAgICB2b2lkIHNl
dENvbG9yUGlja2VyQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKyAgICB2b2lkIGVuZENv
bG9yUGlja2VyKCk7CisjZW5kaWYKKworICAgIFdlYkNvcmU6OkludFNpemUgbWluaW11bUxheW91
dFNpemUoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1MYXlvdXRTaXplOyB9CisgICAgdm9pZCBz
ZXRNaW5pbXVtTGF5b3V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisKKyAgICBib29s
IGF1dG9TaXppbmdTaG91bGRFeHBhbmRUb1ZpZXdIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2F1
dG9TaXppbmdTaG91bGRFeHBhbmRUb1ZpZXdIZWlnaHQ7IH0KKyAgICB2b2lkIHNldEF1dG9TaXpp
bmdTaG91bGRFeHBhbmRUb1ZpZXdIZWlnaHQoYm9vbCk7CisKKyAgICB2b2lkIGRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KHVpbnQ2NF90IGZyYW1lSUQsIFBhc3NSZWZQdHI8
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eT4pOworCisgICAgaW50NjRfdCBzcGVsbERvY3Vt
ZW50VGFnKCk7CisgICAgdm9pZCBkaWRGaW5pc2hDaGVja2luZ1RleHQodWludDY0X3QgcmVxdWVz
dElELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYpOworICAgIHZv
aWQgZGlkQ2FuY2VsQ2hlY2tpbmdUZXh0KHVpbnQ2NF90IHJlcXVlc3RJRCk7CisKKyAgICB2b2lk
IGNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mKTsKKyAgICB2b2lkIHdlYlByb2Nl
c3NXaWxsU2h1dERvd24oKTsKKworICAgIHZvaWQgcHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZygp
OworCisgICAgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKTsKKyAgICAgICAgCisgICAgdm9pZCBz
ZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IoV2ViQ29yZTo6U2Nyb2xsUGlubmluZ0JlaGF2aW9yKTsK
KyAgICBXZWJDb3JlOjpTY3JvbGxQaW5uaW5nQmVoYXZpb3Igc2Nyb2xsUGlubmluZ0JlaGF2aW9y
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxQaW5uaW5nQmVoYXZpb3I7IH0KKworICAgIHZvaWQg
c2V0T3ZlcmxheVNjcm9sbGJhclN0eWxlKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFy
T3ZlcmxheVN0eWxlPik7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxiYXJPdmVy
bGF5U3R5bGU+IG92ZXJsYXlTY3JvbGxiYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xs
YmFyT3ZlcmxheVN0eWxlOyB9CisKKyAgICBib29sIHNob3VsZFJlY29yZE5hdmlnYXRpb25TbmFw
c2hvdHMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdHM7
IH0KKyAgICB2b2lkIHNldFNob3VsZFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdHMoYm9vbCBzaG91
bGRSZWNvcmRTbmFwc2hvdHMpIHsgbV9zaG91bGRSZWNvcmROYXZpZ2F0aW9uU25hcHNob3RzID0g
c2hvdWxkUmVjb3JkU25hcHNob3RzOyB9CisgICAgdm9pZCByZWNvcmRBdXRvbWF0aWNOYXZpZ2F0
aW9uU25hcHNob3QoKTsKKyAgICB2b2lkIHJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtJik7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBQYXNzUmVmUHRy
PFZpZXdTbmFwc2hvdD4gdGFrZVZpZXdTbmFwc2hvdCgpOworI2VuZGlmCisKKyNpZiBFTkFCTEUo
U1VCVExFX0NSWVBUTykKKyAgICB2b2lkIHdyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiwgYm9vbCYgc3VjY2VlZGVkLCBWZWN0b3I8dWludDhfdD4mKTsKKyAgICB2b2lkIHVud3Jh
cENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mLCBib29sJiBzdWNjZWVkZWQsIFZlY3Rv
cjx1aW50OF90PiYpOworI2VuZGlmCisKKyAgICB2b2lkIHRha2VTbmFwc2hvdChXZWJDb3JlOjpJ
bnRSZWN0LCBXZWJDb3JlOjpJbnRTaXplIGJpdG1hcFNpemUsIFNuYXBzaG90T3B0aW9ucywgc3Rk
OjpmdW5jdGlvbjx2b2lkIChjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIENhbGxiYWNr
QmFzZTo6RXJyb3IpPik7CisKKyAgICB2b2lkIG5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKTsK
KyAgICB2b2lkIG5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZChib29sIHdpbGxOYXZpZ2F0ZSwgV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSYpOworICAgIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQo
Ym9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKTsKKyAgICB2b2lkIG5h
dmlnYXRpb25HZXN0dXJlRGlkRW5kKCk7CisgICAgdm9pZCBuYXZpZ2F0aW9uR2VzdHVyZVNuYXBz
aG90V2FzUmVtb3ZlZCgpOworICAgIHZvaWQgd2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtJik7CisKKyAgICBib29sIGlzU2hvd2luZ05hdmlnYXRpb25H
ZXN0dXJlU25hcHNob3QoKSBjb25zdCB7IHJldHVybiBtX2lzU2hvd2luZ05hdmlnYXRpb25HZXN0
dXJlU25hcHNob3Q7IH0KKworICAgIGJvb2wgaXNQbGF5aW5nQXVkaW8oKSBjb25zdCB7IHJldHVy
biAhIShtX21lZGlhU3RhdGUgJiBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdBdWRp
byk7IH0KKyAgICB2b2lkIGlzUGxheWluZ01lZGlhRGlkQ2hhbmdlKFdlYkNvcmU6Ok1lZGlhUHJv
ZHVjZXI6Ok1lZGlhU3RhdGVGbGFncywgdWludDY0X3QpOworICAgIGJvb2wgaGFzQWN0aXZlQXVk
aW9TdHJlYW0oKSBjb25zdCB7IHJldHVybiBtX21lZGlhU3RhdGUgJiBXZWJDb3JlOjpNZWRpYVBy
b2R1Y2VyOjpIYXNBY3RpdmVBdWRpb0NhcHR1cmVEZXZpY2U7IH0KKyAgICBib29sIGhhc0FjdGl2
ZVZpZGVvU3RyZWFtKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVN0YXRlICYgV2ViQ29yZTo6TWVk
aWFQcm9kdWNlcjo6SGFzQWN0aXZlVmlkZW9DYXB0dXJlRGV2aWNlOyB9CisgICAgV2ViQ29yZTo6
TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIG1lZGlhU3RhdGVGbGFncygpIGNvbnN0IHsg
cmV0dXJuIG1fbWVkaWFTdGF0ZTsgfQorICAgIHZvaWQgaGFuZGxlQXV0b3BsYXlFdmVudCh1aW50
MzJfdCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCB2aWRlb0NvbnRyb2xzTWFuYWdl
ckRpZENoYW5nZSgpOworICAgIGJvb2wgaGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIo
KSBjb25zdDsKKyAgICB2b2lkIHJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKCkgY29uc3Q7Cisg
ICAgdm9pZCBoYW5kbGVDb250cm9sbGVkRWxlbWVudElEUmVzcG9uc2UoY29uc3QgU3RyaW5nJikg
Y29uc3Q7CisgICAgYm9vbCBpc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29u
c3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgcmVxdWVzdEFjdGl2
ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbygpOworICAgIHZvaWQgaGFuZGxlQWN0aXZlTm93UGxheWlu
Z1Nlc3Npb25JbmZvUmVzcG9uc2UoYm9vbCBoYXNBY3RpdmVTZXNzaW9uLCBjb25zdCBTdHJpbmcm
IHRpdGxlLCBkb3VibGUgZHVyYXRpb24sIGRvdWJsZSBlbGFwc2VkVGltZSkgY29uc3Q7CisjZW5k
aWYKKworI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQorICAgIHZvaWQgaGFzTWVkaWFTZXNzaW9u
V2l0aEFjdGl2ZU1lZGlhRWxlbWVudHNEaWRDaGFuZ2UoYm9vbCk7CisgICAgdm9pZCBtZWRpYVNl
c3Npb25NZXRhZGF0YURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpNZWRpYVNlc3Npb25NZXRhZGF0
YSYpOworICAgIHZvaWQgZm9jdXNlZENvbnRlbnRNZWRpYUVsZW1lbnREaWRDaGFuZ2UodWludDY0
X3QpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgQVBJOjpIaXRUZXN0UmVzdWx0
KiBsYXN0TW91c2VNb3ZlSGl0VGVzdFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdE1vdXNl
TW92ZUhpdFRlc3RSZXN1bHQuZ2V0KCk7IH0KKyAgICB2b2lkIHBlcmZvcm1JbW1lZGlhdGVBY3Rp
b25IaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50KTsKKworICAgIHZvaWQgaW1t
ZWRpYXRlQWN0aW9uRGlkVXBkYXRlKCk7CisgICAgdm9pZCBpbW1lZGlhdGVBY3Rpb25EaWRDYW5j
ZWwoKTsKKyAgICB2b2lkIGltbWVkaWF0ZUFjdGlvbkRpZENvbXBsZXRlKCk7CisKKyAgICB2b2lk
KiBpbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdChSZWZQ
dHI8QVBJOjpIaXRUZXN0UmVzdWx0PiwgdWludDY0X3QsIFJlZlB0cjxBUEk6Ok9iamVjdD4pOwor
CisgICAgdm9pZCBpbnN0YWxsQWN0aXZpdHlTdGF0ZUNoYW5nZUNvbXBsZXRpb25IYW5kbGVyKHZv
aWQoXmNvbXBsZXRpb25IYW5kbGVyKSgpKTsKKworICAgIHZvaWQgaGFuZGxlQWNjZXB0ZWRDYW5k
aWRhdGUoV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0KTsKKyAgICB2b2lkIGRpZEhhbmRsZUFj
Y2VwdGVkQ2FuZGlkYXRlKCk7CisKKyAgICB2b2lkIHNldEhlYWRlckJhbm5lckhlaWdodEZvclRl
c3RpbmcoaW50KTsKKyAgICB2b2lkIHNldEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaW50
KTsKKyNlbmRpZgorCisjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKKyAgICB2b2lkIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdU
eXBlcywgaW50MzJfdCBpbnNlcnRpb25Qb2ludCwgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2lu
Z1Jlc3VsdD4mIHJlc3VsdHMpOworI2VuZGlmCisgICAgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChj
b25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgaW50MzJfdCBpbnNlcnRp
b25Qb2ludCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpOworCisgICAgdm9pZCBzZXRTaG91bGRE
aXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMoYm9vbCk7CisKKyAgICAvLyBEaWFnbm9zdGljIG1l
c3NhZ2VzIGxvZ2dpbmcuCisgICAgdm9pZCBsb2dEaWFnbm9zdGljTWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIFdlYkNvcmU6OlNob3VsZFNh
bXBsZSk7CisgICAgdm9pZCBsb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhSZXN1bHQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCB1aW50MzJfdCByZXN1bHQs
IFdlYkNvcmU6OlNob3VsZFNhbXBsZSk7CisgICAgdm9pZCBsb2dEaWFnbm9zdGljTWVzc2FnZVdp
dGhWYWx1ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24s
IGRvdWJsZSB2YWx1ZSwgdW5zaWduZWQgc2lnbmlmaWNhbnRGaWd1cmVzLCBXZWJDb3JlOjpTaG91
bGRTYW1wbGUpOworICAgIHZvaWQgbG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoRW5oYW5jZWRQcml2
YWN5KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgV2Vi
Q29yZTo6U2hvdWxkU2FtcGxlKTsKKworICAgIC8vIEZvcm0gdmFsaWRhdGlvbiBtZXNzYWdlcy4K
KyAgICB2b2lkIHNob3dWYWxpZGF0aW9uTWVzc2FnZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBh
bmNob3JDbGllbnRSZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZvaWQgaGlkZVZh
bGlkYXRpb25NZXNzYWdlKCk7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgV2ViQ29yZTo6VmFs
aWRhdGlvbkJ1YmJsZSogdmFsaWRhdGlvbkJ1YmJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsaWRh
dGlvbkJ1YmJsZS5nZXQoKTsgfSAvLyBGb3IgdGVzdGluZy4KKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIHZvaWQgc2V0SXNLZXlib2FyZEFuaW1hdGluZ0luKGJvb2wgaXNLZXlib2Fy
ZEFuaW1hdGluZ0luKSB7IG1faXNLZXlib2FyZEFuaW1hdGluZ0luID0gaXNLZXlib2FyZEFuaW1h
dGluZ0luOyB9CisjZW5kaWYKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQp
ICYmICFQTEFURk9STShJT1MpCisgICAgdm9pZCBhZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVu
dCh1aW50NjRfdCk7CisgICAgdm9pZCByZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCh1
aW50NjRfdCk7CisgICAgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIodWludDY0X3QsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGJvb2wgaGFzVmlkZW8pOworICAgIHZvaWQgcGxheWJh
Y2tUYXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSh1aW50NjRfdCwgV2ViQ29yZTo6TWVk
aWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKTsKKyAgICB2b2lkIHNldE1vY2tNZWRpYVBsYXli
YWNrVGFyZ2V0UGlja2VyRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldE1vY2tNZWRpYVBsYXli
YWNrVGFyZ2V0UGlja2VyU3RhdGUoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6TWVkaWFQbGF5YmFj
a1RhcmdldENvbnRleHQ6OlN0YXRlKTsKKworICAgIC8vIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJD
bGllbnQKKyAgICB2b2lkIHNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2NF90LCBSZWY8V2ViQ29yZTo6
TWVkaWFQbGF5YmFja1RhcmdldD4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBleHRlcm5hbE91dHB1
dERldmljZUF2YWlsYWJsZURpZENoYW5nZSh1aW50NjRfdCwgYm9vbCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1aW50NjRfdCwgYm9vbCkgb3ZlcnJp
ZGU7CisjZW5kaWYKKworICAgIHZvaWQgZGlkQ2hhbmdlQmFja2dyb3VuZENvbG9yKCk7CisgICAg
dm9pZCBkaWRMYXlvdXRGb3JDdXN0b21Db250ZW50UHJvdmlkZXIoKTsKKworICAgIC8vIEZvciB0
ZXN0aW5nCisgICAgdm9pZCBjbGVhcldoZWVsRXZlbnRUZXN0VHJpZ2dlcigpOworICAgIHZvaWQg
Y2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKENhbGxi
YWNrQmFzZTo6RXJyb3IpPik7CisKKyAgICB2b2lkIGRpZFJlYWNoTGF5b3V0TWlsZXN0b25lKHVp
bnQzMl90IGxheW91dE1pbGVzdG9uZXMpOworCisgICAgdm9pZCBkaWRSZXN0b3JlU2Nyb2xsUG9z
aXRpb24oKTsKKworICAgIHZvaWQgZ2V0TG9hZERlY2lzaW9uRm9ySWNvbihjb25zdCBXZWJDb3Jl
OjpMaW5rSWNvbiYsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOworICAgIHZvaWQgZmluaXNoZWRMb2Fk
aW5nSWNvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElQQzo6RGF0YVJlZmVy
ZW5jZSYpOworCisgICAgdm9pZCBzZXRGb2N1cyhib29sIGZvY3VzZWQpOworICAgIHZvaWQgc2V0
V2luZG93RnJhbWUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBnZXRXaW5k
b3dGcmFtZShXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKworICAgIGJvb2wgaXNSZXNvdXJjZUNhY2hp
bmdEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZDsg
fQorICAgIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCk7CisKKyAgICBXZWJD
b3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb24oKTsKKyAgICB2b2lkIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oV2ViQ29y
ZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbik7CisKKyAgICBib29sIGhhc0hhZFNlbGVj
dGlvbkNoYW5nZXNGcm9tVXNlckludGVyYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNIYWRT
ZWxlY3Rpb25DaGFuZ2VzRnJvbVVzZXJJbnRlcmFjdGlvbjsgfQorICAgIGJvb2wgbmVlZHNIaWRk
ZW5Db250ZW50RWRpdGFibGVRdWlyaygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNIaWRkZW5Db250
ZW50RWRpdGFibGVRdWlyazsgfQorICAgIGJvb2wgbmVlZHNQbGFpblRleHRRdWlyaygpIGNvbnN0
IHsgcmV0dXJuIG1fbmVlZHNQbGFpblRleHRRdWlyazsgfQorCisgICAgYm9vbCBpc0Fsd2F5c09u
TG9nZ2luZ0FsbG93ZWQoKSBjb25zdDsKKworICAgIHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZSh1aW50NjRfdCBsb2FkZXJJRCwgdWludDY0X3QgZnJhbWVJRCwgY29u
c3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJik7CisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKyAg
ICB2b2lkIGdhbWVwYWRBY3Rpdml0eShjb25zdCBWZWN0b3I8R2FtZXBhZERhdGE+JiwgYm9vbCBz
aG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlKTsKKyNlbmRpZgorICAgICAgICAKKyAgICBXZWFrUHRy
PFdlYlBhZ2VQcm94eT4gY3JlYXRlV2Vha1B0cigpIGNvbnN0IHsgcmV0dXJuIG1fd2Vha1B0ckZh
Y3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CisKKyAgICB2b2lkIGlzTG9hZGluZ0NoYW5nZWQoKSB7
IGFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNMb2FkaW5n
KTsgfQorCisgICAgdm9pZCBjbGVhclVzZXJNZWRpYVN0YXRlKCk7CisKKyAgICB2b2lkIHNldFNo
b3VsZFNraXBXYWl0aW5nRm9yUGFpbnRBZnRlck5leHRWaWV3RGlkTW92ZVRvV2luZG93KGJvb2wg
c2hvdWxkU2tpcCkgeyBtX3Nob3VsZFNraXBXYWl0aW5nRm9yUGFpbnRBZnRlck5leHRWaWV3RGlk
TW92ZVRvV2luZG93ID0gc2hvdWxkU2tpcDsgfQorCisgICAgdm9pZCBzZXRVUkxTY2hlbWVIYW5k
bGVyRm9yU2NoZW1lKFJlZjxXZWJVUkxTY2hlbWVIYW5kbGVyPiYmLCBjb25zdCBTdHJpbmcmIHNj
aGVtZSk7CisgICAgV2ViVVJMU2NoZW1lSGFuZGxlciogdXJsU2NoZW1lSGFuZGxlckZvclNjaGVt
ZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lk
IGNyZWF0ZVNhbmRib3hFeHRlbnNpb25zSWZOZWVkZWQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZp
bGVzLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGZpbGVSZWFkSGFuZGxlLCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSYgZmlsZVVwbG9hZEhhbmRsZXMpOworI2VuZGlmCisKK3ByaXZh
dGU6CisgICAgV2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmLCBXZWJQcm9jZXNzUHJveHkmLCB1aW50
NjRfdCBwYWdlSUQsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKKyAgICB2b2lkIHBs
YXRmb3JtSW5pdGlhbGl6ZSgpOworCisgICAgdm9pZCB1cGRhdGVBY3Rpdml0eVN0YXRlKFdlYkNv
cmU6OkFjdGl2aXR5U3RhdGU6OkZsYWdzIGZsYWdzVG9VcGRhdGUgPSBXZWJDb3JlOjpBY3Rpdml0
eVN0YXRlOjpBbGxGbGFncyk7CisgICAgdm9pZCB1cGRhdGVUaHJvdHRsZVN0YXRlKCk7CisgICAg
dm9pZCB1cGRhdGVIaWRkZW5QYWdlVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMoKTsKKworICAgIGVu
dW0gY2xhc3MgUmVzZXRTdGF0ZVJlYXNvbiB7CisgICAgICAgIFBhZ2VJbnZhbGlkYXRlZCwKKyAg
ICAgICAgV2ViUHJvY2Vzc0V4aXRlZCwKKyAgICB9OworICAgIHZvaWQgcmVzZXRTdGF0ZShSZXNl
dFN0YXRlUmVhc29uKTsKKyAgICB2b2lkIHJlc2V0U3RhdGVBZnRlclByb2Nlc3NFeGl0ZWQoKTsK
KworICAgIHZvaWQgc2V0VXNlckFnZW50KGNvbnN0IFN0cmluZyYpOworCisgICAgLy8gSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIKKyAgICAvLyBJbXBsZW1lbnRlZCBpbiBnZW5lcmF0ZWQgV2ViUGFnZVBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWNlaXZl
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlkZTsKKworCisgICAgLy8gSVBDOjpNZXNzYWdlU2Vu
ZGVyCisgICAgYm9vbCBzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiwg
T3B0aW9uU2V0PElQQzo6U2VuZE9wdGlvbj4pIG92ZXJyaWRlOworICAgIElQQzo6Q29ubmVjdGlv
biogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIG92ZXJyaWRlOworCisgICAgLy8gV2ViUG9wdXBNZW51
UHJveHk6OkNsaWVudAorICAgIHZvaWQgdmFsdWVDaGFuZ2VkRm9yUG9wdXBNZW51KFdlYlBvcHVw
TWVudVByb3h5KiwgaW50MzJfdCBuZXdTZWxlY3RlZEluZGV4KSBvdmVycmlkZTsKKyAgICB2b2lk
IHNldFRleHRGcm9tSXRlbUZvclBvcHVwTWVudShXZWJQb3B1cE1lbnVQcm94eSosIGludDMyX3Qg
aW5kZXgpIG92ZXJyaWRlOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIGZhaWxlZFRvU2hv
d1BvcHVwTWVudSgpIG92ZXJyaWRlOworI2VuZGlmCisKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NL
KQorICAgIHZvaWQgcmVxdWVzdFBvaW50ZXJMb2NrKCk7CisgICAgdm9pZCByZXF1ZXN0UG9pbnRl
clVubG9jaygpOworI2VuZGlmCisKKyAgICB2b2lkIGRpZENyZWF0ZU1haW5GcmFtZSh1aW50NjRf
dCBmcmFtZUlEKTsKKyAgICB2b2lkIGRpZENyZWF0ZVN1YmZyYW1lKHVpbnQ2NF90IGZyYW1lSUQp
OworCisgICAgdm9pZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgdW5yZWFjaGFibGVVUkwsIGNvbnN0IFVzZXJEYXRhJik7CisgICAgdm9pZCBkaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFt
ZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVzZXJEYXRh
Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VQcm92aXNpb25hbFVSTEZvckZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZv
aWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0
IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgZnJhbWVTZWN1cml0eU9yaWdpbiwgdWludDY0
X3QgbmF2aWdhdGlvbklELCBjb25zdCBTdHJpbmcmIHByb3Zpc2lvbmFsVVJMLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVXNlckRhdGEmKTsKKyAgICB2b2lkIGRpZENvbW1p
dExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIs
IHVpbnQzMl90IGZyYW1lTG9hZFR5cGUsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYs
IGJvb2wgY29udGFpbnNQbHVnaW5Eb2N1bWVudCwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpIYXNJ
bnNlY3VyZUNvbnRlbnQ+IGZvcmNlZEhhc0luc2VjdXJlQ29udGVudCwgY29uc3QgVXNlckRhdGEm
KTsKKyAgICB2b2lkIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1l
SUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgVXNlckRhdGEmKTsKKyAgICB2b2lkIGRp
ZEZpbmlzaExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBuYXZpZ2F0aW9u
SUQsIGNvbnN0IFVzZXJEYXRhJik7CisgICAgdm9pZCBkaWRGYWlsTG9hZEZvckZyYW1lKHVpbnQ2
NF90IGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYsIGNvbnN0IFVzZXJEYXRhJik7CisgICAgdm9pZCBkaWRTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbmF2aWdhdGlvbklELCB1
aW50MzJfdCBzYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
VXNlckRhdGEmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFVzZXJEYXRhJik7CisgICAgdm9pZCBkaWRGaXJz
dExheW91dEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFVzZXJEYXRhJik7CisgICAg
dm9pZCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSh1aW50NjRfdCBmcmFt
ZUlELCBjb25zdCBVc2VyRGF0YSYpOworICAgIHZvaWQgZGlkRGlzcGxheUluc2VjdXJlQ29udGVu
dEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFVzZXJEYXRhJik7CisgICAgdm9pZCBk
aWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBVc2Vy
RGF0YSYpOworICAgIHZvaWQgZGlkRGV0ZWN0WFNTRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwg
Y29uc3QgVXNlckRhdGEmKTsKKyAgICB2b2lkIG1haW5GcmFtZVBsdWdpbkhhbmRsZXNQYWdlU2Nh
bGVHZXN0dXJlRGlkQ2hhbmdlKGJvb2wpOworICAgIHZvaWQgZnJhbWVEaWRCZWNvbWVGcmFtZVNl
dCh1aW50NjRfdCBmcmFtZUlELCBib29sKTsKKyAgICB2b2lkIGRpZFN0YXJ0UHJvZ3Jlc3MoKTsK
KyAgICB2b2lkIGRpZENoYW5nZVByb2dyZXNzKGRvdWJsZSk7CisgICAgdm9pZCBkaWRGaW5pc2hQ
cm9ncmVzcygpOworICAgIHZvaWQgc2V0TmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcyhib29sKTsK
KworICAgIHZvaWQgaGFzSW5zZWN1cmVDb250ZW50KFdlYkNvcmU6Okhhc0luc2VjdXJlQ29udGVu
dCYpOworCisgICAgdm9pZCBkaWREZXN0cm95TmF2aWdhdGlvbih1aW50NjRfdCBuYXZpZ2F0aW9u
SUQpOworCisgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKHVpbnQ2NF90
IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgZnJhbWVTZWN1cml0
eU9yaWdpbiwgdWludDY0X3QgbmF2aWdhdGlvbklELCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uRGF0
YSYsIHVpbnQ2NF90IG9yaWdpbmF0aW5nRnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhJiBvcmlnaW5hdGluZ0ZyYW1lU2VjdXJpdHlPcmlnaW4sIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCB1aW50NjRfdCBsaXN0ZW5lcklELCBjb25zdCBVc2VyRGF0YSYsIFJlZjxNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOjpEZWxh
eWVkUmVwbHk+JiYpOworICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKHVp
bnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgZnJhbWVT
ZWN1cml0eU9yaWdpbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbkRhdGEmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgdWludDY0X3QgbGlz
dGVuZXJJRCwgY29uc3QgVXNlckRhdGEmKTsKKyAgICB2b2lkIGRlY2lkZVBvbGljeUZvclJlc3Bv
bnNlKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYg
ZnJhbWVTZWN1cml0eU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wgY2FuU2hvd01JTUVUeXBlLCB1aW50
NjRfdCBsaXN0ZW5lcklELCBjb25zdCBVc2VyRGF0YSYpOworICAgIHZvaWQgZGVjaWRlUG9saWN5
Rm9yUmVzcG9uc2VTeW5jKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYgZnJhbWVTZWN1cml0eU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGJvb2wgY2FuU2hvd01J
TUVUeXBlLCB1aW50NjRfdCBsaXN0ZW5lcklELCBjb25zdCBVc2VyRGF0YSYsIFJlZjxNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JSZXNwb25zZVN5bmM6OkRlbGF5ZWRSZXBs
eT4mJik7CisgICAgdm9pZCB1bmFibGVUb0ltcGxlbWVudFBvbGljeSh1aW50NjRfdCBmcmFtZUlE
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiwgY29uc3QgVXNlckRhdGEmKTsKKworICAg
IHZvaWQgd2lsbFN1Ym1pdEZvcm0odWludDY0X3QgZnJhbWVJRCwgdWludDY0X3Qgc291cmNlRnJh
bWVJRCwgY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+JiB0ZXh0RmllbGRW
YWx1ZXMsIHVpbnQ2NF90IGxpc3RlbmVySUQsIGNvbnN0IFVzZXJEYXRhJik7CisKKyAgICAvLyBI
aXN0b3J5IGNsaWVudAorICAgIHZvaWQgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoY29u
c3QgV2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYsIHVpbnQ2NF90IGZyYW1lSUQpOworICAgIHZvaWQg
ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IFN0cmluZyYgc291cmNlVVJMU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCB1aW50NjRfdCBmcmFtZUlEKTsKKyAg
ICB2b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTFN0
cmluZywgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblVSTFN0cmluZywgdWludDY0X3QgZnJhbWVJ
RCk7CisgICAgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwg
Y29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGZyYW1lSUQpOworCisgICAgLy8gVUkgY2xpZW50
CisgICAgdm9pZCBjcmVhdGVOZXdQYWdlKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbkRhdGEm
LCB1aW50NjRfdCYgbmV3UGFnZUlELCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAg
dm9pZCBzaG93UGFnZSgpOworICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYs
IFJlZjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQ6OkRlbGF5ZWRS
ZXBseT4mJik7CisgICAgdm9pZCBydW5KYXZhU2NyaXB0Q29uZmlybSh1aW50NjRfdCBmcmFtZUlE
LCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBTdHJpbmcmLCBSZWY8
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm06OkRlbGF5ZWRSZXBs
eT4mJik7CisgICAgdm9pZCBydW5KYXZhU2NyaXB0UHJvbXB0KHVpbnQ2NF90IGZyYW1lSUQsIGNv
bnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIFJlZlB0cjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0
OjpEZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJik7
CisgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJIaXRUZXN0UmVzdWx0
RGF0YSYsIHVpbnQzMl90IG1vZGlmaWVycywgY29uc3QgVXNlckRhdGEmKTsKKworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25D
bGlja2VkKHVpbnQzMl90IG9wYXF1ZVBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHBsdWdpblVSTFN0cmluZywgY29uc3QgU3Ry
aW5nJiBwbHVnaW5zUGFnZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywg
Y29uc3QgU3RyaW5nJiBwYWdlVVJMU3RyaW5nKTsKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgdm9pZCB3ZWJHTFBvbGljeUZvclVS
TChjb25zdCBTdHJpbmcmIHVybCwgdWludDMyX3QmIGxvYWRQb2xpY3kpOworICAgIHZvaWQgcmVz
b2x2ZVdlYkdMUG9saWN5Rm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsLCB1aW50MzJfdCYgbG9hZFBv
bGljeSk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQorICAgIHZvaWQgc2V0VG9vbGJhcnNBcmVW
aXNpYmxlKGJvb2wgdG9vbGJhcnNBcmVWaXNpYmxlKTsKKyAgICB2b2lkIGdldFRvb2xiYXJzQXJl
VmlzaWJsZShib29sJiB0b29sYmFyc0FyZVZpc2libGUpOworICAgIHZvaWQgc2V0TWVudUJhcklz
VmlzaWJsZShib29sIG1lbnVCYXJJc1Zpc2libGUpOworICAgIHZvaWQgZ2V0TWVudUJhcklzVmlz
aWJsZShib29sJiBtZW51QmFySXNWaXNpYmxlKTsKKyAgICB2b2lkIHNldFN0YXR1c0JhcklzVmlz
aWJsZShib29sIHN0YXR1c0JhcklzVmlzaWJsZSk7CisgICAgdm9pZCBnZXRTdGF0dXNCYXJJc1Zp
c2libGUoYm9vbCYgc3RhdHVzQmFySXNWaXNpYmxlKTsKKyAgICB2b2lkIHNldElzUmVzaXphYmxl
KGJvb2wgaXNSZXNpemFibGUpOworICAgIHZvaWQgZ2V0SXNSZXNpemFibGUoYm9vbCYgaXNSZXNp
emFibGUpOworICAgIHZvaWQgc2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgc2NyZWVuUG9pbnQsIFdlYkNvcmU6OkludFBvaW50JiB3aW5kb3dQb2ludCk7CisgICAgdm9p
ZCByb290Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdSZWN0LCBXZWJD
b3JlOjpJbnRSZWN0JiByZXN1bHQpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIGFjY2Vz
c2liaWxpdHlTY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Q
b2ludCwgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKKyAgICB2b2lkIHJvb3RWaWV3
VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdSZWN0LCBX
ZWJDb3JlOjpJbnRSZWN0JiByZXN1bHQpOworI2VuZGlmCisgICAgdm9pZCBydW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1aW50NjRfdCBmcmFtZUlELCBS
ZWZQdHI8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
OjpEZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhj
b25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKKyAgICB2b2lkIHBhZ2VEaWRTY3Jv
bGwoKTsKKyAgICB2b2lkIHJ1bk9wZW5QYW5lbCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmLCBjb25zdCBXZWJDb3JlOjpGaWxlQ2hvb3NlclNldHRp
bmdzJik7CisgICAgdm9pZCBwcmludEZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpOworICAgIHZvaWQg
ZXhjZWVkZWREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgb3Jp
Z2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgY3VycmVudE9yaWdp
blVzYWdlLCB1aW50NjRfdCBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdWludDY0X3QgZXhwZWN0ZWRV
c2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFiYXNl
UXVvdGE6OkRlbGF5ZWRSZXBseT4pOworICAgIHZvaWQgcmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVP
cmlnaW5RdW90YShjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIHVpbnQ2NF90IGN1cnJl
bnRRdW90YSwgdWludDY0X3QgdG90YWxCeXRlc05lZWRlZCwgUGFzc1JlZlB0cjxNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpSZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhOjpEZWxheWVk
UmVwbHk+KTsKKyAgICB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSh1
aW50NjRfdCBnZW9sb2NhdGlvbklELCB1aW50NjRfdCBmcmFtZUlELCBTdHJpbmcgb3JpZ2luSWRl
bnRpZmllcik7CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIFVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5JiB1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXIoKTsKKyNlbmRpZgorICAgIHZvaWQgcmVxdWVzdFVzZXJNZWRpYVBlcm1pc3Npb25Gb3JGcmFt
ZSh1aW50NjRfdCB1c2VyTWVkaWFJRCwgdWludDY0X3QgZnJhbWVJRCwgU3RyaW5nIHVzZXJNZWRp
YURvY3VtZW50T3JpZ2luSWRlbnRpZmllciwgU3RyaW5nIHRvcExldmVsRG9jdW1lbnRPcmlnaW5J
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnRzRGF0YSYgYXVkaW9Db25z
dHJhaW50cywgY29uc3QgV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50c0RhdGEmIHZpZGVvQ29uc3Ry
YWludHMpOworICAgIHZvaWQgZW51bWVyYXRlTWVkaWFEZXZpY2VzRm9yRnJhbWUodWludDY0X3Qg
dXNlck1lZGlhSUQsIHVpbnQ2NF90IGZyYW1lSUQsIFN0cmluZyB1c2VyTWVkaWFEb2N1bWVudE9y
aWdpbklkZW50aWZpZXIsIFN0cmluZyB0b3BMZXZlbERvY3VtZW50T3JpZ2luSWRlbnRpZmllcik7
CisKKyAgICB2b2lkIHJ1bk1vZGFsKCk7CisgICAgdm9pZCBub3RpZnlTY3JvbGxlclRodW1iSXNW
aXNpYmxlSW5SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIHJlY29tbWVu
ZGVkU2Nyb2xsYmFyU3R5bGVEaWRDaGFuZ2UoaW50MzJfdCBuZXdTdHlsZSk7CisgICAgdm9pZCBk
aWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZyYW1lKGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJh
ciwgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxP
ZmZzZXRQaW5uaW5nRm9yTWFpbkZyYW1lKGJvb2wgcGlubmVkVG9MZWZ0U2lkZSwgYm9vbCBwaW5u
ZWRUb1JpZ2h0U2lkZSwgYm9vbCBwaW5uZWRUb1RvcFNpZGUsIGJvb2wgcGlubmVkVG9Cb3R0b21T
aWRlKTsKKyAgICB2b2lkIGRpZENoYW5nZVBhZ2VDb3VudCh1bnNpZ25lZCk7CisgICAgdm9pZCBw
YWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3JEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6Q29sb3Im
KTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICB2b2lkIGRpZEZhaWxUb0lu
aXRpYWxpemVQbHVnaW4oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBmcmFt
ZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwYWdlVVJMU3RyaW5nKTsKKyAgICB2b2lkIGRpZEJs
b2NrSW5zZWN1cmVQbHVnaW5WZXJzaW9uKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0
cmluZyYgcGx1Z2luVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHBhZ2VVUkxTdHJpbmcsIGJvb2wgcmVwbGFjZW1lbnRPYnNjdXJlZCk7CisjZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgdm9pZCBzZXRDYW5TaG9ydENp
cmN1aXRIb3Jpem9udGFsV2hlZWxFdmVudHMoYm9vbCBjYW5TaG9ydENpcmN1aXRIb3Jpem9udGFs
V2hlZWxFdmVudHMpIHsgbV9jYW5TaG9ydENpcmN1aXRIb3Jpem9udGFsV2hlZWxFdmVudHMgPSBj
YW5TaG9ydENpcmN1aXRIb3Jpem9udGFsV2hlZWxFdmVudHM7IH0KKworICAgIHZvaWQgcmVhdHRh
Y2hUb1dlYlByb2Nlc3MoKTsKKyAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiByZWF0dGFjaFRv
V2ViUHJvY2Vzc0ZvclJlbG9hZCgpOworICAgIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IHJlYXR0
YWNoVG9XZWJQcm9jZXNzV2l0aEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSopOworCisgICAg
dm9pZCByZXF1ZXN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbih1aW50NjRfdCBub3RpZmljYXRpb25J
RCwgY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcpOworICAgIHZvaWQgc2hvd05vdGlmaWNhdGlv
bihjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIGJvZHksIGNvbnN0IFN0cmluZyYg
aWNvblVSTCwgY29uc3QgU3RyaW5nJiB0YWcsIGNvbnN0IFN0cmluZyYgbGFuZywgY29uc3QgU3Ry
aW5nJiBkaXIsIGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCB1aW50NjRfdCBub3RpZmljYXRp
b25JRCk7CisgICAgdm9pZCBjYW5jZWxOb3RpZmljYXRpb24odWludDY0X3Qgbm90aWZpY2F0aW9u
SUQpOworICAgIHZvaWQgY2xlYXJOb3RpZmljYXRpb25zKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4m
IG5vdGlmaWNhdGlvbklEcyk7CisgICAgdm9pZCBkaWREZXN0cm95Tm90aWZpY2F0aW9uKHVpbnQ2
NF90IG5vdGlmaWNhdGlvbklEKTsKKworICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudFNpemUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYpOworCisjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCisg
ICAgdm9pZCBzaG93Q29sb3JQaWNrZXIoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xv
ciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZGlkQ2hvb3NlQ29sb3IoY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEVuZENvbG9yUGlja2Vy
KCkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIHZvaWQgZWRpdG9yU3RhdGVDaGFuZ2VkKGNvbnN0
IEVkaXRvclN0YXRlJik7CisgICAgdm9pZCBjb21wb3NpdGlvbldhc0NhbmNlbGVkKCk7CisgICAg
dm9pZCBzZXRIYXNIYWRTZWxlY3Rpb25DaGFuZ2VzRnJvbVVzZXJJbnRlcmFjdGlvbihib29sKTsK
KyAgICB2b2lkIHNldE5lZWRzSGlkZGVuQ29udGVudEVkaXRhYmxlUXVpcmsoYm9vbCk7CisgICAg
dm9pZCBzZXROZWVkc1BsYWluVGV4dFF1aXJrKGJvb2wpOworCisgICAgLy8gQmFjay9Gb3J3YXJk
IGxpc3QgbWFuYWdlbWVudAorICAgIHZvaWQgYmFja0ZvcndhcmRBZGRJdGVtKHVpbnQ2NF90IGl0
ZW1JRCk7CisgICAgdm9pZCBiYWNrRm9yd2FyZEdvVG9JdGVtKHVpbnQ2NF90IGl0ZW1JRCwgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CisgICAgdm9pZCBiYWNrRm9yd2FyZEl0ZW1BdEluZGV4
KGludDMyX3QgaW5kZXgsIHVpbnQ2NF90JiBpdGVtSUQpOworICAgIHZvaWQgYmFja0ZvcndhcmRC
YWNrTGlzdENvdW50KGludDMyX3QmIGNvdW50KTsKKyAgICB2b2lkIGJhY2tGb3J3YXJkRm9yd2Fy
ZExpc3RDb3VudChpbnQzMl90JiBjb3VudCk7CisgICAgdm9pZCBiYWNrRm9yd2FyZENsZWFyKCk7
CisKKyAgICAvLyBVbmRvIG1hbmFnZW1lbnQKKyAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmRG
b3JVbmRvKHVpbnQ2NF90IGNvbW1hbmRJRCwgdWludDMyX3QgZWRpdEFjdGlvbik7CisgICAgdm9p
ZCByZWdpc3Rlckluc2VydGlvblVuZG9Hcm91cGluZygpOworICAgIHZvaWQgY2xlYXJBbGxFZGl0
Q29tbWFuZHMoKTsKKyAgICB2b2lkIGNhblVuZG9SZWRvKHVpbnQzMl90IGFjdGlvbiwgYm9vbCYg
cmVzdWx0KTsKKyAgICB2b2lkIGV4ZWN1dGVVbmRvUmVkbyh1aW50MzJfdCBhY3Rpb24sIGJvb2wm
IHJlc3VsdCk7CisKKyAgICAvLyBLZXlib2FyZCBoYW5kbGluZworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIHZvaWQgZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgYm9vbCYgaGFuZGxlZCk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyAg
ICB2b2lkIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiwg
VmVjdG9yPFN0cmluZz4mKTsKKyAgICB2b2lkIGJpbmRBY2Nlc3NpYmlsaXR5VHJlZShjb25zdCBT
dHJpbmcmKTsKKyNlbmRpZgorCisgICAgLy8gUG9wdXAgTWVudS4KKyAgICB2b2lkIHNob3dQb3B1
cE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCwgdWludDY0X3QgdGV4dERpcmVjdGlv
biwgY29uc3QgVmVjdG9yPFdlYlBvcHVwSXRlbT4mIGl0ZW1zLCBpbnQzMl90IHNlbGVjdGVkSW5k
ZXgsIGNvbnN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YSYpOworICAgIHZvaWQgaGlkZVBvcHVwTWVu
dSgpOworCisjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCisgICAgdm9pZCBzaG93Q29udGV4dE1l
bnUoY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYsIGNvbnN0IFVzZXJEYXRhJik7CisgICAg
dm9pZCBpbnRlcm5hbFNob3dDb250ZXh0TWVudShjb25zdCBDb250ZXh0TWVudUNvbnRleHREYXRh
JiwgY29uc3QgVXNlckRhdGEmKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1C
RVJfREVURUNUSU9OKQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIHNob3dUZWxlcGhvbmVO
dW1iZXJNZW51KGNvbnN0IFN0cmluZyYgdGVsZXBob25lTnVtYmVyLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpOworI2VuZGlmCisjZW5kaWYKKworICAgIC8vIFNlYXJjaCBwb3B1cCByZXN1bHRz
CisgICAgdm9pZCBzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlJlY2VudFNlYXJjaD4mKTsKKyAgICB2b2lkIGxvYWRSZWNlbnRTZWFyY2hlcyhj
b25zdCBTdHJpbmcmLCBWZWN0b3I8V2ViQ29yZTo6UmVjZW50U2VhcmNoPiYpOworCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgLy8gU3BlZWNoLgorICAgIHZvaWQgZ2V0SXNTcGVha2luZyhib29s
Jik7CisgICAgdm9pZCBzcGVhayhjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHN0b3BTcGVha2lu
ZygpOworCisgICAgLy8gU3BvdGxpZ2h0LgorICAgIHZvaWQgc2VhcmNoV2l0aFNwb3RsaWdodChj
b25zdCBTdHJpbmcmKTsKKyAgICAgICAgCisgICAgdm9pZCBzZWFyY2hUaGVXZWIoY29uc3QgU3Ry
aW5nJik7CisKKyAgICAvLyBEaWN0aW9uYXJ5LgorICAgIHZvaWQgZGlkUGVyZm9ybURpY3Rpb25h
cnlMb29rdXAoY29uc3QgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyYpOworI2VuZGlmCisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgYm9vbCBhcHBsZU1haWxQYWdpbmF0aW9uUXVpcmtFbmFi
bGVkKCk7CisjZW5kaWYKKworICAgIC8vIFNwZWxsaW5nIGFuZCBncmFtbWFyLgorICAgIHZvaWQg
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgaW50MzJfdCYgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIHZvaWQgY2hl
Y2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6R3Jh
bW1hckRldGFpbD4mLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QmIGJhZEdy
YW1tYXJMZW5ndGgpOworICAgIHZvaWQgc3BlbGxpbmdVSUlzU2hvd2luZyhib29sJik7CisgICAg
dm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlz
c3BlbGxlZFdvcmQpOworICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRl
dGFpbCYpOworICAgIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CisgICAgdm9p
ZCBpZ25vcmVXb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CisgICAgdm9pZCByZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OlRleHRDaGVja2lu
Z1JlcXVlc3REYXRhJiwgaW50MzJfdCBpbnNlcnRpb25Qb2ludCk7CisKKyAgICB2b2lkIHRha2VG
b2N1cyh1aW50MzJfdCBkaXJlY3Rpb24pOworICAgIHZvaWQgc2V0VG9vbFRpcChjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKKyAgICB2
b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKTsKKworICAgIHZvaWQgZGlk
UmVjZWl2ZUV2ZW50KHVpbnQzMl90IG9wYXF1ZVR5cGUsIGJvb2wgaGFuZGxlZCk7CisgICAgdm9p
ZCBzdG9wUmVzcG9uc2l2ZW5lc3NUaW1lcigpOworCisgICAgdm9pZCB2b2lkQ2FsbGJhY2sodWlu
dDY0X3QpOworICAgIHZvaWQgZGF0YUNhbGxiYWNrKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYs
IHVpbnQ2NF90KTsKKyAgICB2b2lkIGltYWdlQ2FsbGJhY2soY29uc3QgU2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmLCB1aW50NjRfdCk7CisgICAgdm9pZCBzdHJpbmdDYWxsYmFjayhjb25zdCBTdHJp
bmcmLCB1aW50NjRfdCk7CisgICAgdm9pZCBpbnZhbGlkYXRlU3RyaW5nQ2FsbGJhY2sodWludDY0
X3QpOworICAgIHZvaWQgc2NyaXB0VmFsdWVDYWxsYmFjayhjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmLCBib29sIGhhZEV4Y2VwdGlvbiwgY29uc3QgV2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlscyYs
IHVpbnQ2NF90KTsKKyAgICB2b2lkIGNvbXB1dGVkUGFnZXNDYWxsYmFjayhjb25zdCBWZWN0b3I8
V2ViQ29yZTo6SW50UmVjdD4mLCBkb3VibGUgdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nLCB1
aW50NjRfdCk7CisgICAgdm9pZCB2YWxpZGF0ZUNvbW1hbmRDYWxsYmFjayhjb25zdCBTdHJpbmcm
LCBib29sLCBpbnQsIHVpbnQ2NF90KTsKKyAgICB2b2lkIHVuc2lnbmVkQ2FsbGJhY2sodWludDY0
X3QsIHVpbnQ2NF90KTsKKyAgICB2b2lkIGVkaXRpbmdSYW5nZUNhbGxiYWNrKGNvbnN0IEVkaXRp
bmdSYW5nZSYsIHVpbnQ2NF90KTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lkIG1hY2hT
ZW5kUmlnaHRDYWxsYmFjayhjb25zdCBXZWJDb3JlOjpNYWNoU2VuZFJpZ2h0JiwgdWludDY0X3Qp
OworI2VuZGlmCisgICAgdm9pZCByZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgRWRpdGluZ1JhbmdlJiwgdWludDY0X3QpOworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICB2b2lkIGF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNh
bGxiYWNrKGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcmLCBjb25zdCBFZGl0aW5nUmFuZ2UmLCB1aW50
NjRfdCk7CisgICAgdm9pZCBmb250QXRTZWxlY3Rpb25DYWxsYmFjayhjb25zdCBTdHJpbmcmLCBk
b3VibGUsIGJvb2wsIHVpbnQ2NF90KTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2
b2lkIGdlc3R1cmVDYWxsYmFjayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1
aW50MzJfdCwgdWludDMyX3QsIHVpbnQ2NF90KTsKKyAgICB2b2lkIHRvdWNoZXNDYWxsYmFjayhj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDY0X3QpOwor
ICAgIHZvaWQgYXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2soY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkZsb2F0UmVjdD4mLCBjb25zdCBTdHJpbmcmLCBmbG9hdCwgdWludDY0X3QsIHVpbnQ2NF90KTsK
KyAgICB2b2lkIGF1dG9jb3JyZWN0aW9uQ29udGV4dENhbGxiYWNrKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90LCB1aW50
NjRfdCwgdWludDY0X3QpOworICAgIHZvaWQgc2VsZWN0aW9uQ29udGV4dENhbGxiYWNrKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90KTsKKyAgICB2
b2lkIGludGVycHJldEtleUV2ZW50KGNvbnN0IEVkaXRvclN0YXRlJiwgYm9vbCBpc0NoYXJFdmVu
dCwgYm9vbCYgaGFuZGxlZCk7CisgICAgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoYm9v
bCBoYXNWaWRlbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZWxlbWVudFJlY3QpOworICAgIHZv
aWQgc2VsZWN0aW9uUmVjdHNDYWxsYmFjayhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9u
UmVjdD4mLCB1aW50NjRfdCk7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgdm9pZCBw
cmludEZpbmlzaGVkQ2FsbGJhY2soY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIHVpbnQ2
NF90KTsKKyNlbmRpZgorCisgICAgdm9pZCBmb2N1c2VkRnJhbWVDaGFuZ2VkKHVpbnQ2NF90IGZy
YW1lSUQpOworICAgIHZvaWQgZnJhbWVTZXRMYXJnZXN0RnJhbWVDaGFuZ2VkKHVpbnQ2NF90IGZy
YW1lSUQpOworCisgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UodWlu
dDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCB1
aW50NjRfdCBjaGFsbGVuZ2VJRCk7CisKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdEYXRhRm9y
Q3VzdG9tQ29udGVudFByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgdm9p
ZCBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRJZGVudGlmaWVyLCBib29sIHBsdWdpbkhhc0ZvY3VzQW5kV2luZG93SGFzRm9jdXMp
OworICAgIHZvaWQgc2V0UGx1Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlKHVpbnQ2NF90IHBsdWdp
bkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCB1aW50NjRfdCBjb21wbGV4VGV4dElucHV0U3Rh
dGUpOworI2VuZGlmCisKKyAgICBib29sIG1heWJlSW5pdGlhbGl6ZVNhbmRib3hFeHRlbnNpb25I
YW5kbGUoY29uc3QgV2ViQ29yZTo6VVJMJiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CisK
KyNpZiBVU0UoQVVUT01BVElDX1RFWFRfUkVQTEFDRU1FTlQpCisgICAgdm9pZCB0b2dnbGVTbWFy
dEluc2VydERlbGV0ZSgpOworICAgIHZvaWQgdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRp
b24oKTsKKyAgICB2b2lkIHRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb24oKTsKKyAgICB2b2lk
IHRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb24oKTsKKyAgICB2b2lkIHRvZ2dsZUF1dG9t
YXRpY1RleHRSZXBsYWNlbWVudCgpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
dm9pZCBzdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoYm9vbCYpOworICAgIHZvaWQgc2hvd0Nv
cnJlY3Rpb25QYW5lbChpbnQzMl90IHBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgdm9pZCBkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKGludDMyX3QgcmVhc29uKTsKKyAgICB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWxTb29uKGludDMyX3QgcmVhc29uLCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdm9pZCByZWNvcmRB
dXRvY29ycmVjdGlvblJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKKworI2lm
IFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQorICAgIHZvaWQgc2hvd0RpY3RhdGlvbkFsdGVy
bmF0aXZlVUkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mRGljdGF0ZWRU
ZXh0LCB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKKyAgICB2b2lkIHJlbW92ZURpY3RhdGlv
bkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0KTsKKyAgICB2b2lkIGRpY3Rh
dGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0LCBWZWN0b3I8U3RyaW5n
PiYgcmVzdWx0KTsKKyNlbmRpZgorCisgICAgdm9pZCBzZXRFZGl0YWJsZUVsZW1lbnRJc0ZvY3Vz
ZWQoYm9vbCk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisjaWYgUExBVEZPUk0oSU9TKQor
ICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBzY3JlZW5TaXplKCk7CisgICAgV2ViQ29yZTo6RmxvYXRT
aXplIGF2YWlsYWJsZVNjcmVlblNpemUoKTsKKyAgICBmbG9hdCB0ZXh0QXV0b3NpemluZ1dpZHRo
KCk7CisKKyAgICB2b2lkIGR5bmFtaWNWaWV3cG9ydFVwZGF0ZUNoYW5nZWRUYXJnZXQoZG91Ymxl
IG5ld1RhcmdldFNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBuZXdTY3JvbGxQb3Np
dGlvbiwgdWludDY0X3QgZHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZUlEKTsKKyAgICB2b2lkIGNv
dWxkTm90UmVzdG9yZVBhZ2VTdGF0ZSgpOworICAgIHZvaWQgcmVzdG9yZVBhZ2VTdGF0ZShzdGQ6
Om9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UG9pbnQ+IHNjcm9sbFBvc2l0aW9uLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiBzY3JvbGxPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
b2JzY3VyZWRJbnNldE9uU2F2ZSwgZG91YmxlIHNjYWxlKTsKKyAgICB2b2lkIHJlc3RvcmVQYWdl
Q2VudGVyQW5kU2NhbGUoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGbG9hdFBvaW50PiwgZG91Ymxl
IHNjYWxlKTsKKworICAgIHZvaWQgZGlkR2V0VGFwSGlnaGxpZ2h0R2VvbWV0cmllcyh1aW50NjRf
dCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvciwgY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkZsb2F0UXVhZD4mIGdlb21ldHJpZXMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRv
cExlZnRSYWRpdXMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBib3R0b21SaWdodFJhZGl1cyk7CisKKyAgICB2b2lkIHN0YXJ0QXNzaXN0aW5nTm9kZShj
b25zdCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYsIGJvb2wgdXNlcklzSW50ZXJhY3RpbmcsIGJv
b2wgYmx1clByZXZpb3VzTm9kZSwgY29uc3QgVXNlckRhdGEmKTsKKyAgICB2b2lkIHN0b3BBc3Np
c3RpbmdOb2RlKCk7CisKKyAgICB2b2lkIHNob3dJbnNwZWN0b3JIaWdobGlnaHQoY29uc3QgV2Vi
Q29yZTo6SGlnaGxpZ2h0Jik7CisgICAgdm9pZCBoaWRlSW5zcGVjdG9ySGlnaGxpZ2h0KCk7CisK
KyAgICB2b2lkIHNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCk7CisgICAgdm9pZCBoaWRlSW5zcGVj
dG9ySW5kaWNhdGlvbigpOworCisgICAgdm9pZCBlbmFibGVJbnNwZWN0b3JOb2RlU2VhcmNoKCk7
CisgICAgdm9pZCBkaXNhYmxlSW5zcGVjdG9yTm9kZVNlYXJjaCgpOworI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKKworI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKyAgICBSZXRhaW5QdHI8TlNB
cnJheT4gbV9kYXRhRGV0ZWN0aW9uUmVzdWx0czsKKyNlbmRpZgorCisgICAgdm9pZCBjbGVhckxv
YWREZXBlbmRlbnRDYWxsYmFja3MoKTsKKworICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVy
QWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSYsIGNvbnN0IFN0
cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBj
b25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYpOworCisgICAgdm9pZCB1cGRhdGVC
YWNraW5nU3RvcmVEaXNjYXJkYWJsZVN0YXRlKCk7CisKKyAgICB2b2lkIHNldFJlbmRlclRyZWVT
aXplKHVpbnQ2NF90IHRyZWVTaXplKSB7IG1fcmVuZGVyVHJlZVNpemUgPSB0cmVlU2l6ZTsgfQor
CisjaWYgUExVR0lOX0FSQ0hJVEVDVFVSRShYMTEpCisgICAgdm9pZCBjcmVhdGVQbHVnaW5Db250
YWluZXIodWludDY0X3QmIHdpbmRvd0lEKTsKKyAgICB2b2lkIHdpbmRvd2VkUGx1Z2luR2VvbWV0
cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZnJhbWVSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgdWludDY0X3Qgd2luZG93SUQpOworICAgIHZvaWQgd2lu
ZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlLCB1aW50NjRfdCB3
aW5kb3dJRCk7CisjZW5kaWYKKworICAgIHZvaWQgcHJvY2Vzc05leHRRdWV1ZWRXaGVlbEV2ZW50
KCk7CisgICAgdm9pZCBzZW5kV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jik7CisKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHZvaWQgdXBkYXRlVG91Y2hFdmVudFRyYWNraW5n
KGNvbnN0IFdlYlRvdWNoRXZlbnQmKTsKKyAgICBXZWJDb3JlOjpUcmFja2luZ1R5cGUgdG91Y2hF
dmVudFRyYWNraW5nVHlwZShjb25zdCBXZWJUb3VjaEV2ZW50JikgY29uc3Q7CisjZW5kaWYKKwor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIHZvaWQgZmluZFBsdWdpbihjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCB1aW50MzJfdCBwcm9jZXNzVHlwZSwgY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFn
ZVVSTFN0cmluZywgYm9vbCBhbGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMsIHVpbnQ2NF90JiBw
bHVnaW5Qcm9jZXNzVG9rZW4sIFN0cmluZyYgbmV3TUlNRVR5cGUsIHVpbnQzMl90JiBwbHVnaW5M
b2FkUG9saWN5LCBTdHJpbmcmIHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24pOworI2VuZGlmCisK
KyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICB2b2lkIGRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0Rv
Y3VtZW50SW5NYWluRnJhbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiB1
dGkpOworICAgIHZvaWQgZGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJh
bWUoY29uc3QgUXVpY2tMb29rRG9jdW1lbnREYXRhJik7CisgICAgdm9pZCBkaWRSZXF1ZXN0UGFz
c3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9GSUxURVJJTkcpCisgICAgdm9pZCBj
b250ZW50RmlsdGVyRGlkQmxvY2tMb2FkRm9yRnJhbWUoY29uc3QgV2ViQ29yZTo6Q29udGVudEZp
bHRlclVuYmxvY2tIYW5kbGVyJiwgdWludDY0X3QgZnJhbWVJRCk7CisjZW5kaWYKKworICAgIHVp
bnQ2NF90IGdlbmVyYXRlTmF2aWdhdGlvbklEKCk7CisKKyAgICBXZWJQcmVmZXJlbmNlc1N0b3Jl
IHByZWZlcmVuY2VzU3RvcmUoKSBjb25zdDsKKworICAgIHZvaWQgZGlzcGF0Y2hBY3Rpdml0eVN0
YXRlQ2hhbmdlKCk7CisgICAgdm9pZCB2aWV3RGlkTGVhdmVXaW5kb3coKTsKKyAgICB2b2lkIHZp
ZXdEaWRFbnRlcldpbmRvdygpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZGlkUGVy
Zm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3QoY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmLCBi
b29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIGNvbnN0IFVzZXJEYXRhJik7CisjZW5kaWYKKwor
ICAgIHZvaWQgdXNlRml4ZWRMYXlvdXREaWRDaGFuZ2UoYm9vbCB1c2VGaXhlZExheW91dCkgeyBt
X3VzZUZpeGVkTGF5b3V0ID0gdXNlRml4ZWRMYXlvdXQ7IH0KKyAgICB2b2lkIGZpeGVkTGF5b3V0
U2l6ZURpZENoYW5nZShXZWJDb3JlOjpJbnRTaXplIGZpeGVkTGF5b3V0U2l6ZSkgeyBtX2ZpeGVk
TGF5b3V0U2l6ZSA9IGZpeGVkTGF5b3V0U2l6ZTsgfQorCisgICAgdm9pZCBpbWFnZU9yTWVkaWFE
b2N1bWVudFNpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyNpZiBFTkFCTEUo
VklERU8pCisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICB2b2lkIHJlcXVlc3RJbnN0YWxsTWlzc2lu
Z01lZGlhUGx1Z2lucyhjb25zdCBTdHJpbmcmIGRldGFpbHMsIGNvbnN0IFN0cmluZyYgZGVzY3Jp
cHRpb24pOworI2VuZGlmCisjZW5kaWYKKworICAgIHZvaWQgc3RhcnRVUkxTY2hlbWVIYW5kbGVy
VGFzayh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlm
aWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHN0b3BVUkxT
Y2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgcmVz
b3VyY2VJZGVudGlmaWVyKTsKKworICAgIHZvaWQgaGFuZGxlQXV0b0ZpbGxCdXR0b25DbGljayhj
b25zdCBVc2VyRGF0YSYpOworCisgICAgdm9pZCBmaW5pc2hJbml0aWFsaXppbmdXZWJQYWdlQWZ0
ZXJQcm9jZXNzTGF1bmNoKCk7CisKKyAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VC
b2R5KTsKKyAgICB2b2lkIGhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgbWVzc2FnZUJvZHks
IFVzZXJEYXRhJiByZXR1cm5Vc2VyRGF0YSk7CisKKyAgICBQYWdlQ2xpZW50JiBtX3BhZ2VDbGll
bnQ7CisgICAgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+IG1fY29uZmlndXJhdGlvbjsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxvYWRlckNsaWVudD4gbV9sb2FkZXJDbGllbnQ7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6UG9saWN5Q2xpZW50PiBtX3BvbGljeUNsaWVudDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpOYXZpZ2F0aW9uQ2xpZW50PiBtX25hdmlnYXRpb25DbGll
bnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6SGlzdG9yeUNsaWVudD4gbV9oaXN0b3J5Q2xp
ZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okljb25Mb2FkaW5nQ2xpZW50PiBtX2ljb25M
b2FkaW5nQ2xpZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkZvcm1DbGllbnQ+IG1fZm9y
bUNsaWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpVSUNsaWVudD4gbV91aUNsaWVudDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpGaW5kQ2xpZW50PiBtX2ZpbmRDbGllbnQ7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6RmluZE1hdGNoZXNDbGllbnQ+IG1fZmluZE1hdGNoZXNDbGll
bnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ+IG1f
ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ7CisjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCisgICAg
c3RkOjp1bmlxdWVfcHRyPEFQSTo6Q29udGV4dE1lbnVDbGllbnQ+IG1fY29udGV4dE1lbnVDbGll
bnQ7CisjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViUGFnZUluamVjdGVkQnVuZGxlQ2xp
ZW50PiBtX2luamVjdGVkQnVuZGxlQ2xpZW50OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYk5h
dmlnYXRpb25TdGF0ZT4gbV9uYXZpZ2F0aW9uU3RhdGU7CisgICAgU3RyaW5nIG1fZmFpbGluZ1By
b3Zpc2lvbmFsTG9hZFVSTDsKKyAgICBib29sIG1faXNMb2FkaW5nQWx0ZXJuYXRlSFRNTFN0cmlu
Z0ZvckZhaWxpbmdQcm92aXNpb25hbExvYWQgeyBmYWxzZSB9OworCisgICAgc3RkOjp1bmlxdWVf
cHRyPERyYXdpbmdBcmVhUHJveHk+IG1fZHJhd2luZ0FyZWE7CisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eT4gbV9zY3JvbGxpbmdDb29yZGluYXRvclByb3h5OworI2VuZGlmCisKKyAgICBSZWY8V2Vi
UHJvY2Vzc1Byb3h5PiBtX3Byb2Nlc3M7CisgICAgUmVmPFdlYlBhZ2VHcm91cD4gbV9wYWdlR3Jv
dXA7CisgICAgUmVmPFdlYlByZWZlcmVuY2VzPiBtX3ByZWZlcmVuY2VzOworCisgICAgV2ViUHJv
Y2Vzc0xpZmV0aW1lVHJhY2tlciBtX3dlYlByb2Nlc3NMaWZldGltZVRyYWNrZXIgeyAqdGhpcyB9
OworCisgICAgUmVmPFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5PiBtX3VzZXJDb250ZW50
Q29udHJvbGxlcjsKKyAgICBSZWY8VmlzaXRlZExpbmtTdG9yZT4gbV92aXNpdGVkTGlua1N0b3Jl
OworICAgIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNpdGVEYXRhU3RvcmU7CisKKyAgICBS
ZWZQdHI8V2ViRnJhbWVQcm94eT4gbV9tYWluRnJhbWU7CisgICAgUmVmUHRyPFdlYkZyYW1lUHJv
eHk+IG1fZm9jdXNlZEZyYW1lOworICAgIFJlZlB0cjxXZWJGcmFtZVByb3h5PiBtX2ZyYW1lU2V0
TGFyZ2VzdEZyYW1lOworCisgICAgU3RyaW5nIG1fdXNlckFnZW50OworICAgIFN0cmluZyBtX2Fw
cGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDsKKyAgICBTdHJpbmcgbV9jdXN0b21Vc2VyQWdlbnQ7
CisgICAgU3RyaW5nIG1fY3VzdG9tVGV4dEVuY29kaW5nTmFtZTsKKyAgICBTdHJpbmcgbV9vdmVy
cmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeTsKKworICAgIGJvb2wgbV90cmVhdHNTSEExQ2VydGlm
aWNhdGVzQXNJbnNlY3VyZTsKKworICAgIFJlZlB0cjxXZWJJbnNwZWN0b3JQcm94eT4gbV9pbnNw
ZWN0b3I7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgUmVmUHRyPFdlYkZ1bGxT
Y3JlZW5NYW5hZ2VyUHJveHk+IG1fZnVsbFNjcmVlbk1hbmFnZXI7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEFQSTo6RnVsbHNjcmVlbkNsaWVudD4gbV9mdWxsc2NyZWVuQ2xpZW50OworI2VuZGlmCisj
aWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisgICAgUmVmUHRyPFdlYlBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eT4gbV9wbGF5YmFja1Nlc3Npb25NYW5hZ2VyOworICAgIFJlZlB0cjxX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHk+IG1fdmlkZW9GdWxsc2NyZWVuTWFuYWdlcjsK
KyNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJ
bmZvIG1fbGFzdFZpc2libGVDb250ZW50UmVjdFVwZGF0ZTsKKyAgICBib29sIG1faGFzUmVjZWl2
ZWRMYXllclRyZWVUcmFuc2FjdGlvbkFmdGVyRGlkQ29tbWl0TG9hZCB7IHRydWUgfTsKKyAgICB1
aW50NjRfdCBtX2ZpcnN0TGF5ZXJUcmVlVHJhbnNhY3Rpb25JZEFmdGVyRGlkQ29tbWl0TG9hZCB7
IDAgfTsKKyAgICBpbnQzMl90IG1fZGV2aWNlT3JpZW50YXRpb24geyAwIH07CisgICAgYm9vbCBt
X2R5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGVXYWl0aW5nRm9yVGFyZ2V0IHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fZHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZVdhaXRpbmdGb3JMYXllclRyZWVDb21t
aXQgeyBmYWxzZSB9OworICAgIHVpbnQ2NF90IG1fZHluYW1pY1ZpZXdwb3J0U2l6ZVVwZGF0ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uSUQgeyAwIH07CisgICAgdWludDY0X3QgbV9jdXJyZW50RHluYW1p
Y1ZpZXdwb3J0U2l6ZVVwZGF0ZUlEIHsgMCB9OworICAgIGJvb2wgbV9oYXNOZXR3b3JrUmVxdWVz
dHNPblN1c3BlbmRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzS2V5Ym9hcmRBbmltYXRpbmdJ
biB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzU2Nyb2xsaW5nT3Jab29taW5nIHsgZmFsc2UgfTsK
KyNlbmRpZgorCisjaWYgRU5BQkxFKFZJQlJBVElPTikKKyAgICBSZWZQdHI8V2ViVmlicmF0aW9u
UHJveHk+IG1fdmlicmF0aW9uOworI2VuZGlmCisKKyNpZiBFTkFCTEUoQVBQTEVfUEFZKQorICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eT4gbV9wYXltZW50Q29v
cmRpbmF0b3I7CisjZW5kaWYKKworICAgIENhbGxiYWNrTWFwIG1fY2FsbGJhY2tzOworICAgIEhh
c2hTZXQ8dWludDY0X3Q+IG1fbG9hZERlcGVuZGVudFN0cmluZ0NhbGxiYWNrSURzOworCisgICAg
SGFzaFNldDxXZWJFZGl0Q29tbWFuZFByb3h5Kj4gbV9lZGl0Q29tbWFuZFNldDsKKworI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2tub3duS2V5cHJlc3NDb21tYW5k
TmFtZXM7CisjZW5kaWYKKworICAgIFJlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gbV9hY3RpdmVQ
b3B1cE1lbnU7CisjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCisgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvbnRleHRNZW51UHJveHk+IG1fYWN0aXZlQ29udGV4dE1lbnU7CisgICAgQ29udGV4dE1l
bnVDb250ZXh0RGF0YSBtX2FjdGl2ZUNvbnRleHRNZW51Q29udGV4dERhdGE7CisjZW5kaWYKKyAg
ICBSZWZQdHI8QVBJOjpIaXRUZXN0UmVzdWx0PiBtX2xhc3RNb3VzZU1vdmVIaXRUZXN0UmVzdWx0
OworCisgICAgUmVmUHRyPFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk+IG1fb3BlblBh
bmVsUmVzdWx0TGlzdGVuZXI7CisgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXJQcm94eSBtX2dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOworICAgIE5vdGlm
aWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5IG1fbm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyOworCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk+IG1fdXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOworI2VuZGlmCisKKyAgICBXZWJDb3JlOjpB
Y3Rpdml0eVN0YXRlOjpGbGFncyBtX2FjdGl2aXR5U3RhdGU7CisgICAgYm9vbCBtX3ZpZXdXYXNF
dmVySW5XaW5kb3c7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIGJvb2wgbV9hbGxvd3NNZWRpYURv
Y3VtZW50SW5saW5lUGxheWJhY2sgeyBmYWxzZSB9OworICAgIGJvb2wgbV9hbHdheXNSdW5zQXRG
b3JlZ3JvdW5kUHJpb3JpdHk7CisgICAgUHJvY2Vzc1Rocm90dGxlcjo6Rm9yZWdyb3VuZEFjdGl2
aXR5VG9rZW4gbV9hY3Rpdml0eVRva2VuOworI2VuZGlmCisgICAgYm9vbCBtX2luaXRpYWxDYXBp
dGFsaXphdGlvbkVuYWJsZWQ7CisgICAgc3RkOjpvcHRpb25hbDxkb3VibGU+IG1fYmFja2dyb3Vu
ZENQVUxpbWl0OworICAgIFJlZjxXZWJCYWNrRm9yd2FyZExpc3Q+IG1fYmFja0ZvcndhcmRMaXN0
OworICAgICAgICAKKyAgICBib29sIG1fbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb247CisKKyAg
ICBib29sIG1fd2FpdHNGb3JQYWludEFmdGVyVmlld0RpZE1vdmVUb1dpbmRvdzsKKyAgICBib29s
IG1fc2hvdWxkU2tpcFdhaXRpbmdGb3JQYWludEFmdGVyTmV4dFZpZXdEaWRNb3ZlVG9XaW5kb3cg
eyBmYWxzZSB9OworCisgICAgU3RyaW5nIG1fdG9vbFRpcDsKKworICAgIEVkaXRvclN0YXRlIG1f
ZWRpdG9yU3RhdGU7CisgICAgYm9vbCBtX2lzRWRpdGFibGU7CisKKyAgICBkb3VibGUgbV90ZXh0
Wm9vbUZhY3RvcjsKKyAgICBkb3VibGUgbV9wYWdlWm9vbUZhY3RvcjsKKyAgICBkb3VibGUgbV9w
YWdlU2NhbGVGYWN0b3I7CisgICAgZG91YmxlIG1fcGx1Z2luWm9vbUZhY3RvcjsKKyAgICBkb3Vi
bGUgbV9wbHVnaW5TY2FsZUZhY3RvcjsKKyAgICBkb3VibGUgbV92aWV3U2NhbGVGYWN0b3IgeyAx
IH07CisgICAgZmxvYXQgbV9pbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBmbG9hdCBt
X2N1c3RvbURldmljZVNjYWxlRmFjdG9yOworICAgIGZsb2F0IG1fdG9wQ29udGVudEluc2V0Owor
CisgICAgTGF5ZXJIb3N0aW5nTW9kZSBtX2xheWVySG9zdGluZ01vZGU7CisKKyAgICBib29sIG1f
ZHJhd3NCYWNrZ3JvdW5kOworCisgICAgV2ViQ29yZTo6Q29sb3IgbV91bmRlcmxheUNvbG9yOwor
ICAgIFdlYkNvcmU6OkNvbG9yIG1fcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yOworCisgICAg
Ym9vbCBtX3VzZUZpeGVkTGF5b3V0OworICAgIFdlYkNvcmU6OkludFNpemUgbV9maXhlZExheW91
dFNpemU7CisKKyAgICBXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmVzIG1fb2JzZXJ2ZWRMYXlvdXRN
aWxlc3RvbmVzIHsgMCB9OworCisgICAgYm9vbCBtX3N1cHByZXNzU2Nyb2xsYmFyQW5pbWF0aW9u
czsKKworICAgIFdlYkNvcmU6OlBhZ2luYXRpb246Ok1vZGUgbV9wYWdpbmF0aW9uTW9kZTsKKyAg
ICBib29sIG1fcGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1uczsKKyAgICBkb3VibGUgbV9wYWdl
TGVuZ3RoOworICAgIGRvdWJsZSBtX2dhcEJldHdlZW5QYWdlczsKKyAgICBib29sIG1fcGFnaW5h
dGlvbkxpbmVHcmlkRW5hYmxlZDsKKyAgICAgICAgCisgICAgLy8gSWYgdGhlIHByb2Nlc3MgYmFj
a2luZyB0aGUgd2ViIHBhZ2UgaXMgYWxpdmUgYW5kIGtpY2tpbmcuCisgICAgYm9vbCBtX2lzVmFs
aWQ7CisKKyAgICAvLyBXaGV0aGVyIFdlYlBhZ2VQcm94eTo6Y2xvc2UoKSBoYXMgYmVlbiBjYWxs
ZWQgb24gdGhpcyBwYWdlLgorICAgIGJvb2wgbV9pc0Nsb3NlZDsKKworICAgIC8vIFdoZXRoZXIg
aXQgY2FuIHJ1biBtb2RhbCBjaGlsZCB3ZWIgcGFnZXMuCisgICAgYm9vbCBtX2NhblJ1bk1vZGFs
OworCisgICAgYm9vbCBtX25lZWRzVG9GaW5pc2hJbml0aWFsaXppbmdXZWJQYWdlQWZ0ZXJQcm9j
ZXNzTGF1bmNoIHsgZmFsc2UgfTsKKworICAgIGJvb2wgbV9pc0luUHJpbnRpbmdNb2RlOworICAg
IGJvb2wgbV9pc1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbjsKKworICAgIFJlZlB0cjxNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOjpEZWxh
eWVkUmVwbHk+IG1fbmF2aWdhdGlvbkFjdGlvblBvbGljeVJlcGx5OworICAgIHVpbnQ2NF90IG1f
bmV3TmF2aWdhdGlvbklEIHsgMCB9OworICAgIFJlZlB0cjxNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEZWNpZGVQb2xpY3lGb3JSZXNwb25zZVN5bmM6OkRlbGF5ZWRSZXBseT4gbV9yZXNwb25zZVBv
bGljeVJlcGx5OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2RlY2lkZVBvbGljeUZv
clJlc3BvbnNlUmVxdWVzdDsKKworICAgIGJvb2wgbV9zaG91bGRTdXBwcmVzc0FwcExpbmtzSW5O
ZXh0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uIHsgZmFsc2UgfTsKKworICAgIERlcXVlPE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQ+IG1fa2V5RXZlbnRRdWV1ZTsKKyAgICBEZXF1ZTxOYXRpdmVXZWJX
aGVlbEV2ZW50PiBtX3doZWVsRXZlbnRRdWV1ZTsKKyAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8
VmVjdG9yPE5hdGl2ZVdlYldoZWVsRXZlbnQ+Pj4gbV9jdXJyZW50bHlQcm9jZXNzZWRXaGVlbEV2
ZW50czsKKyNpZiBFTkFCTEUoTUFDX0dFU1RVUkVfRVZFTlRTKQorICAgIERlcXVlPE5hdGl2ZVdl
Ykdlc3R1cmVFdmVudD4gbV9nZXN0dXJlRXZlbnRRdWV1ZTsKKyNlbmRpZgorCisgICAgYm9vbCBt
X3Byb2Nlc3NpbmdNb3VzZU1vdmVFdmVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmF0aXZlV2Vi
TW91c2VFdmVudD4gbV9uZXh0TW91c2VNb3ZlRXZlbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5h
dGl2ZVdlYk1vdXNlRXZlbnQ+IG1fY3VycmVudGx5UHJvY2Vzc2VkTW91c2VEb3duRXZlbnQ7CisK
KyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHN0cnVjdCBUb3VjaEV2ZW50VHJhY2tpbmcg
eworICAgICAgICBXZWJDb3JlOjpUcmFja2luZ1R5cGUgdG91Y2hGb3JjZUNoYW5nZWRUcmFja2lu
ZyB7IFdlYkNvcmU6OlRyYWNraW5nVHlwZTo6Tm90VHJhY2tpbmcgfTsKKyAgICAgICAgV2ViQ29y
ZTo6VHJhY2tpbmdUeXBlIHRvdWNoU3RhcnRUcmFja2luZyB7IFdlYkNvcmU6OlRyYWNraW5nVHlw
ZTo6Tm90VHJhY2tpbmcgfTsKKyAgICAgICAgV2ViQ29yZTo6VHJhY2tpbmdUeXBlIHRvdWNoTW92
ZVRyYWNraW5nIHsgV2ViQ29yZTo6VHJhY2tpbmdUeXBlOjpOb3RUcmFja2luZyB9OworICAgICAg
ICBXZWJDb3JlOjpUcmFja2luZ1R5cGUgdG91Y2hFbmRUcmFja2luZyB7IFdlYkNvcmU6OlRyYWNr
aW5nVHlwZTo6Tm90VHJhY2tpbmcgfTsKKworICAgICAgICBib29sIGlzVHJhY2tpbmdBbnl0aGlu
ZygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0b3VjaEZvcmNlQ2hhbmdl
ZFRyYWNraW5nICE9IFdlYkNvcmU6OlRyYWNraW5nVHlwZTo6Tm90VHJhY2tpbmcKKyAgICAgICAg
ICAgICAgICB8fCB0b3VjaFN0YXJ0VHJhY2tpbmcgIT0gV2ViQ29yZTo6VHJhY2tpbmdUeXBlOjpO
b3RUcmFja2luZworICAgICAgICAgICAgICAgIHx8IHRvdWNoTW92ZVRyYWNraW5nICE9IFdlYkNv
cmU6OlRyYWNraW5nVHlwZTo6Tm90VHJhY2tpbmcKKyAgICAgICAgICAgICAgICB8fCB0b3VjaEVu
ZFRyYWNraW5nICE9IFdlYkNvcmU6OlRyYWNraW5nVHlwZTo6Tm90VHJhY2tpbmc7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHJlc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgdG91Y2hG
b3JjZUNoYW5nZWRUcmFja2luZyA9IFdlYkNvcmU6OlRyYWNraW5nVHlwZTo6Tm90VHJhY2tpbmc7
CisgICAgICAgICAgICB0b3VjaFN0YXJ0VHJhY2tpbmcgPSBXZWJDb3JlOjpUcmFja2luZ1R5cGU6
Ok5vdFRyYWNraW5nOworICAgICAgICAgICAgdG91Y2hNb3ZlVHJhY2tpbmcgPSBXZWJDb3JlOjpU
cmFja2luZ1R5cGU6Ok5vdFRyYWNraW5nOworICAgICAgICAgICAgdG91Y2hFbmRUcmFja2luZyA9
IFdlYkNvcmU6OlRyYWNraW5nVHlwZTo6Tm90VHJhY2tpbmc7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIFRvdWNoRXZlbnRUcmFja2luZyBtX3RvdWNoRXZlbnRUcmFja2luZzsKKyNlbmRpZgorI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpICYmICFFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBE
ZXF1ZTxRdWV1ZWRUb3VjaEV2ZW50cz4gbV90b3VjaEV2ZW50UXVldWU7CisjZW5kaWYKKworI2lm
IEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQorICAgIFJlZlB0cjxXZWJDb2xvclBpY2tlcj4gbV9j
b2xvclBpY2tlcjsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFJlZlB0cjxXZWJD
b3JlOjpWYWxpZGF0aW9uQnViYmxlPiBtX3ZhbGlkYXRpb25CdWJibGU7CisjZW5kaWYKKworICAg
IGNvbnN0IHVpbnQ2NF90IG1fcGFnZUlEOworICAgIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCBt
X3Nlc3Npb25JRDsKKworICAgIGJvb2wgbV9pc1BhZ2VTdXNwZW5kZWQ7CisgICAgYm9vbCBtX2Fk
ZHNWaXNpdGVkTGlua3M7CisKKyAgICBib29sIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbiB7IGZh
bHNlIH07CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBib29sIG1fYWxsb3dz
UmVtb3RlSW5zcGVjdGlvbjsKKyAgICBTdHJpbmcgbV9yZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJy
aWRlOworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIG1faXNTbWFydElu
c2VydERlbGV0ZUVuYWJsZWQ7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBTdHJp
bmcgbV9hY2Nlc3NpYmlsaXR5UGx1Z0lEOworICAgIFdlYkNvcmU6OkNvbG9yIG1fYmFja2dyb3Vu
ZENvbG9yOworI2VuZGlmCisKKyAgICBpbnQ2NF90IG1fc3BlbGxEb2N1bWVudFRhZzsKKyAgICBi
b29sIG1faGFzU3BlbGxEb2N1bWVudFRhZzsKKyAgICB1bnNpZ25lZCBtX3BlbmRpbmdMZWFybk9y
SWdub3JlV29yZE1lc3NhZ2VDb3VudDsKKworICAgIGJvb2wgbV9tYWluRnJhbWVIYXNDdXN0b21D
b250ZW50UHJvdmlkZXI7CisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorICAgIC8vIEN1cnJl
bnQgZHJhZyBkZXN0aW5hdGlvbiBkZXRhaWxzIGFyZSBkZWxpdmVyZWQgYXMgYW4gYXN5bmNocm9u
b3VzIHJlc3BvbnNlLAorICAgIC8vIHNvIHdlIHByZXNlcnZlIHRoZW0gdG8gYmUgdXNlZCB3aGVu
IHRoZSBuZXh0IGRyYWdnaW5nIGRlbGVnYXRlIGNhbGwgaXMgbWFkZS4KKyAgICBXZWJDb3JlOjpE
cmFnT3BlcmF0aW9uIG1fY3VycmVudERyYWdPcGVyYXRpb247CisgICAgYm9vbCBtX2N1cnJlbnRE
cmFnSXNPdmVyRmlsZUlucHV0OworICAgIHVuc2lnbmVkIG1fY3VycmVudERyYWdOdW1iZXJPZkZp
bGVzVG9CZUFjY2VwdGVkOworICAgIFdlYkNvcmU6OkludFJlY3QgbV9jdXJyZW50RHJhZ0NhcmV0
UmVjdDsKKyNlbmRpZgorCisgICAgUGFnZUxvYWRTdGF0ZSBtX3BhZ2VMb2FkU3RhdGU7CisgICAg
CisgICAgYm9vbCBtX2RlbGVnYXRlc1Njcm9sbGluZzsKKworICAgIGJvb2wgbV9tYWluRnJhbWVI
YXNIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgIGJvb2wgbV9tYWluRnJhbWVIYXNWZXJ0aWNhbFNj
cm9sbGJhcjsKKworICAgIC8vIFdoZXRoZXIgaG9yaXpvbnRhbCB3aGVlbCBldmVudHMgY2FuIGJl
IGhhbmRsZWQgZGlyZWN0bHkgZm9yIHN3aXBpbmcgcHVycG9zZXMuCisgICAgYm9vbCBtX2NhblNo
b3J0Q2lyY3VpdEhvcml6b250YWxXaGVlbEV2ZW50czsKKworICAgIGJvb2wgbV9tYWluRnJhbWVJ
c1Bpbm5lZFRvTGVmdFNpZGU7CisgICAgYm9vbCBtX21haW5GcmFtZUlzUGlubmVkVG9SaWdodFNp
ZGU7CisgICAgYm9vbCBtX21haW5GcmFtZUlzUGlubmVkVG9Ub3BTaWRlOworICAgIGJvb2wgbV9t
YWluRnJhbWVJc1Bpbm5lZFRvQm90dG9tU2lkZTsKKworICAgIGJvb2wgbV9zaG91bGRVc2VJbXBs
aWNpdFJ1YmJlckJhbmRDb250cm9sOworICAgIGJvb2wgbV9ydWJiZXJCYW5kc0F0TGVmdDsKKyAg
ICBib29sIG1fcnViYmVyQmFuZHNBdFJpZ2h0OworICAgIGJvb2wgbV9ydWJiZXJCYW5kc0F0VG9w
OworICAgIGJvb2wgbV9ydWJiZXJCYW5kc0F0Qm90dG9tOworICAgICAgICAKKyAgICBib29sIG1f
ZW5hYmxlVmVydGljYWxSdWJiZXJCYW5kaW5nOworICAgIGJvb2wgbV9lbmFibGVIb3Jpem9udGFs
UnViYmVyQmFuZGluZzsKKworICAgIGJvb2wgbV9iYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2U7
CisKKyAgICBib29sIG1fc2hvdWxkUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90czsKKyAgICBib29s
IG1faXNTaG93aW5nTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdDsKKworICAgIGJvb2wgbV9tYWlu
RnJhbWVQbHVnaW5IYW5kbGVzUGFnZVNjYWxlR2VzdHVyZSB7IGZhbHNlIH07CisKKyAgICB1bnNp
Z25lZCBtX3BhZ2VDb3VudDsKKworICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlU2Nyb2xs
ZXJUaHVtYlJlY3Q7CisKKyAgICB1aW50NjRfdCBtX3JlbmRlclRyZWVTaXplOworICAgIHVpbnQ2
NF90IG1fc2Vzc2lvblJlc3RvcmF0aW9uUmVuZGVyVHJlZVNpemU7CisgICAgYm9vbCBtX2hpdFJl
bmRlclRyZWVTaXplVGhyZXNob2xkOworCisgICAgYm9vbCBtX3N1cHByZXNzVmlzaWJpbGl0eVVw
ZGF0ZXM7CisgICAgYm9vbCBtX2F1dG9TaXppbmdTaG91bGRFeHBhbmRUb1ZpZXdIZWlnaHQ7Cisg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX21pbmltdW1MYXlvdXRTaXplOworCisgICAgLy8gVmlzdWFs
IHZpZXdwb3J0cworICAgIFdlYkNvcmU6OkxheW91dFNpemUgbV9iYXNlTGF5b3V0Vmlld3BvcnRT
aXplOworICAgIFdlYkNvcmU6OkxheW91dFBvaW50IG1fbWluU3RhYmxlTGF5b3V0Vmlld3BvcnRP
cmlnaW47CisgICAgV2ViQ29yZTo6TGF5b3V0UG9pbnQgbV9tYXhTdGFibGVMYXlvdXRWaWV3cG9y
dE9yaWdpbjsKKworICAgIGZsb2F0IG1fbWVkaWFWb2x1bWU7CisgICAgV2ViQ29yZTo6TWVkaWFQ
cm9kdWNlcjo6TXV0ZWRTdGF0ZUZsYWdzIG1fbXV0ZWRTdGF0ZSB7IFdlYkNvcmU6Ok1lZGlhUHJv
ZHVjZXI6Ok5vbmVNdXRlZCB9OworICAgIGJvb2wgbV9tYXlTdGFydE1lZGlhV2hlbkluV2luZG93
OworCisgICAgYm9vbCBtX3dhaXRpbmdGb3JEaWRVcGRhdGVBY3Rpdml0eVN0YXRlOworCisgICAg
Ym9vbCBtX3Nob3VsZFNjYWxlVmlld1RvRml0RG9jdW1lbnQgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9zdXBwcmVzc0F1dG9tYXRpY05hdmlnYXRpb25TbmFwc2hvdHRpbmcgeyBmYWxzZSB9OworCisj
aWYgUExBVEZPUk0oQ09DT0EpCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV90ZW1wb3Jh
cnlQREZGaWxlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UnVuTG9vcE9ic2VydmVy
PiBtX2FjdGl2aXR5U3RhdGVDaGFuZ2VEaXNwYXRjaGVyOworCisgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YT4gbV9zY3JvbGxpbmdQZXJm
b3JtYW5jZURhdGE7CisgICAgYm9vbCBtX3Njcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25F
bmFibGVkOworI2VuZGlmCisgICAgVXNlck9ic2VydmFibGVQYWdlQ291bnRlcjo6VG9rZW4gbV9w
YWdlSXNVc2VyT2JzZXJ2YWJsZUNvdW50OworICAgIFByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVk
VG9rZW4gbV9wcmV2ZW50UHJvY2Vzc1N1cHByZXNzaW9uQ291bnQ7CisgICAgSGlkZGVuUGFnZVRo
cm90dGxpbmdBdXRvSW5jcmVhc2VzQ291bnRlcjo6VG9rZW4gbV9oaWRkZW5QYWdlRE9NVGltZXJU
aHJvdHRsaW5nQXV0b0luY3JlYXNlc0NvdW50OworICAgIFZpc2libGVXZWJQYWdlVG9rZW4gbV92
aXNpYmxlUGFnZVRva2VuOworICAgICAgICAKKyAgICBXZWJDb3JlOjpTY3JvbGxQaW5uaW5nQmVo
YXZpb3IgbV9zY3JvbGxQaW5uaW5nQmVoYXZpb3I7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3Jl
OjpTY3JvbGxiYXJPdmVybGF5U3R5bGU+IG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxlOworCisgICAg
dWludDY0X3QgbV9uYXZpZ2F0aW9uSUQ7CisKKyAgICBXZWJQcmVmZXJlbmNlc1N0b3JlOjpWYWx1
ZU1hcCBtX2NvbmZpZ3VyYXRpb25QcmVmZXJlbmNlVmFsdWVzOworICAgIFdlYkNvcmU6OkFjdGl2
aXR5U3RhdGU6OkZsYWdzIG1fcG90ZW50aWFsbHlDaGFuZ2VkQWN0aXZpdHlTdGF0ZUZsYWdzOwor
ICAgIGJvb2wgbV9hY3Rpdml0eVN0YXRlQ2hhbmdlV2FudHNTeW5jaHJvbm91c1JlcGx5OworICAg
IFZlY3Rvcjx1aW50NjRfdD4gbV9uZXh0QWN0aXZpdHlTdGF0ZUNoYW5nZUNhbGxiYWNrczsKKwor
ICAgIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBtX21lZGlhU3RhdGUg
eyBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpJc05vdFBsYXlpbmcgfTsKKworICAgIGJvb2wgbV9p
c1Jlc291cmNlQ2FjaGluZ0Rpc2FibGVkIHsgZmFsc2UgfTsKKworICAgIGJvb2wgbV9oYXNIYWRT
ZWxlY3Rpb25DaGFuZ2VzRnJvbVVzZXJJbnRlcmFjdGlvbiB7IGZhbHNlIH07CisgICAgYm9vbCBt
X25lZWRzSGlkZGVuQ29udGVudEVkaXRhYmxlUXVpcmsgeyBmYWxzZSB9OworICAgIGJvb2wgbV9u
ZWVkc1BsYWluVGV4dFF1aXJrIHsgZmFsc2UgfTsKKworI2lmIEVOQUJMRShNRURJQV9TRVNTSU9O
KQorICAgIGJvb2wgbV9oYXNNZWRpYVNlc3Npb25XaXRoQWN0aXZlTWVkaWFFbGVtZW50cyB7IGZh
bHNlIH07CisjZW5kaWYKKworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYm
ICFQTEFURk9STShJT1MpCisgICAgYm9vbCBtX3JlcXVpcmVzVGFyZ2V0TW9uaXRvcmluZyB7IGZh
bHNlIH07CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBib29sIG1faGFzRGVmZXJy
ZWRTdGFydEFzc2lzdGluZ05vZGUgeyBmYWxzZSB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxOb2Rl
QXNzaXN0YW5jZUFyZ3VtZW50cz4gbV9kZWZlcnJlZE5vZGVBc3Npc3RhbmNlQXJndW1lbnRzOwor
ICAgIGJvb2wgbV9mb3JjZUFsd2F5c1VzZXJTY2FsYWJsZSB7IGZhbHNlIH07CisjZW5kaWYKKwor
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCisgICAgYm9vbCBtX2lzUG9pbnRlckxvY2tQZW5kaW5n
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNQb2ludGVyTG9ja2VkIHsgZmFsc2UgfTsKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKERPV05MT0FEX0FUVFJJQlVURSkKKyAgICBib29sIG1fc3luY05hdmln
YXRpb25BY3Rpb25IYXNEb3dubG9hZEF0dHJpYnV0ZSB7IGZhbHNlIH07CisjZW5kaWYKKworICAg
IGJvb2wgbV9pc1VzaW5nSGlnaFBlcmZvcm1hbmNlV2ViR0wgeyBmYWxzZSB9OworICAgICAgICAK
KyAgICBXZWFrUHRyRmFjdG9yeTxXZWJQYWdlUHJveHk+IG1fd2Vha1B0ckZhY3Rvcnk7CisKKyAg
ICBIYXNoTWFwPFN0cmluZywgUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+PiBtX3VybFNjaGVtZUhh
bmRsZXJzQnlTY2hlbWU7CisgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmPFdlYlVSTFNjaGVtZUhh
bmRsZXI+PiBtX3VybFNjaGVtZUhhbmRsZXJzQnlJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgppbmRleCBmNmM1NGM3MTYyNmJkNWZlMTgxMDNjNTUyMzFmYjc4MTk0YWY3
Yjg2Li44NDVkNDMwOTRlMTAwYmQwYjEwMmIxYzcyMDM1ODg1NWIwYmZlMzJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTQ5
NCw0ICs0OTQsNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogCiAgICAgU3RhcnRVUkxT
Y2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNv
dXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KQogICAgIFN0
b3BVUkxTY2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBsb2FkZXJJZGVudGlmaWVyLCB1aW50NjRf
dCByZXNvdXJjZUlkZW50aWZpZXIpCisKKyAgICBTZXRDbGlwVG9TYWZlQXJlYShib29sIGNsaXBU
b1NhZmVBcmVhKQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5oCmluZGV4IDUyMWUxZGQ4MWEyM2IyYjI5YWMyMjE4YzM3YTFhNThhNzZiMjhk
YWEuLjY5MTQyNmRkZjZjZjZiMjY5NDE4NzMzYjkwZjAwMWY3YjQ0MzU1Y2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKQEAgLTE5OCw2
ICsxOTgsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBoYW5kbGVBY3RpdmVOb3dQbGF5aW5nU2Vz
c2lvbkluZm9SZXNwb25zZShib29sIGhhc0FjdGl2ZVNlc3Npb24sIGNvbnN0IFN0cmluZyYgdGl0
bGUsIGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIGVsYXBzZWRUaW1lKSBvdmVycmlkZTsKIAorICAg
IHZvaWQgZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEoYm9vbCBjbGlwVG9TYWZlQXJlYSkgb3ZlcnJp
ZGU7CisKICNpZiBVU0UoUVVJQ0tfTE9PSykKICAgICB2b2lkIHJlcXVlc3RQYXNzd29yZEZvclF1
aWNrTG9va0RvY3VtZW50KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChjb25zdCBTdHJpbmcmKT4mJikgb3ZlcnJpZGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IGI5NmNkMmUyNzhm
MTU0MGNlNjFkNDk3NTVhZmM5OTFmYTE4YjcyZTAuLmQ4ZDViYjA5MzEzNTQxMDVhZTExMjlkYTNl
NDVlODg1NDE0NDMyNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
UGFnZUNsaWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtODIxLDYgKzgyMSwxMSBAQCB2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpyZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudChjb25zdCBTdHJpbmcmIGZp
bGVOYW1lLAogfQogI2VuZGlmCiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENoYW5nZUNsaXBU
b1NhZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpCit7CisgICAgW21fd2ViVmlldyBfc2NoZWR1
bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlldy5tbQppbmRleCBkN2M2MzkyMjMzMzZiYzIwZTRkYmQwODdkN2E1ZWQx
OTNjNWU3MTM2Li43NWY3MThiZGY5ZGI3OTUxZWQxODYyMjhmMDk1YTljOGUxYTgyOTM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC0zNjAs
NiArMzYwLDcgQEAgcHJpdmF0ZToKIAogICAgIFtfZml4ZWRDbGlwcGluZ1ZpZXcgc2V0Q2VudGVy
OmNsaXBwaW5nQm91bmRzLmxvY2F0aW9uKCldOyAvLyBOb3QgcmVhbGx5IHRoZSBjZW50ZXIgc2lu
Y2Ugd2Ugc2V0IGFuIGFuY2hvciBwb2ludC4KICAgICBbX2ZpeGVkQ2xpcHBpbmdWaWV3IHNldEJv
dW5kczpjbGlwcGluZ0JvdW5kc107CisgICAgW19maXhlZENsaXBwaW5nVmlldyBsYXllcl0ubWFz
a3NUb0JvdW5kcyA9IF9wYWdlLT5jbGlwVG9TYWZlQXJlYSgpOwogfQogCiAtICh2b2lkKV9kaWRF
eGl0U3RhYmxlU3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGwuaAppbmRleCAzY2I2Y2E4YWE2ZjNhMTlhZjU4Zjg0NTA3MGNhM2JmNWVlNDRiZDU5Li4w
ZjhlN2UzYmI5Y2FhN2UzMmI3MjViMzY4YmQ2ZGQ4NmJmMTI5MTMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCkBAIC0yNTEsNiArMjUxLDggQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkgb3ZlcnJpZGU7
CiAgICAgYm9vbCB3aW5kb3dJc0Zyb250V2luZG93VW5kZXJNb3VzZShjb25zdCBOYXRpdmVXZWJN
b3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBUb1NhZmVBcmVh
KGJvb2wgY2xpcFRvU2FmZUFyZWEpIG92ZXJyaWRlIHsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggOThhNWY4ODQyMDA3OTU5ZTdmNmVl
NzUxNGI1ZjAwODM3Nzc1MDhiMS4uMzU5M2Q5MDJiZDU3OWUxZDQ1NjQ4Mjc2N2JiZmI3NWNjODBi
YzAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTIyNyw0ICsxMjI3LDkgQEAgdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OmRpZEludmFsaWRhdGVEb2N1bWVudE1hcmtlclJlY3RzKCkKICAg
ICBtX3BhZ2UuZmluZENvbnRyb2xsZXIoKS5kaWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJrZXJSZWN0
cygpOwogfQogCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEo
Ym9vbCBjbGlwVG9TYWZlQXJlYSkKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTZXRDbGlwVG9TYWZlQXJlYShjbGlwVG9TYWZlQXJlYSkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcC5vcmlnIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwLm9yaWcKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOThhNWY4ODQyMDA3OTU5ZTdmNmVlNzUxNGI1ZjAwODM3Nzc1MDhiMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcC5vcmlnCkBAIC0wLDAgKzEsMTIzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDaHJvbWVDbGllbnQu
aCIKKworI2luY2x1ZGUgIkFQSUFycmF5LmgiCisjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4u
aCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgorI2luY2x1ZGUgIkhhbmdEZXRlY3Rpb25EaXNh
Ymxlci5oIgorI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlTmF2aWdhdGlvbkFjdGlvbi5oIgorI2lu
Y2x1ZGUgIkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5oIgorI2luY2x1ZGUgIk5hdmlnYXRpb25B
Y3Rpb25EYXRhLmgiCisjaW5jbHVkZSAiUGFnZUJhbm5lci5oIgorI2luY2x1ZGUgIlVzZXJEYXRh
LmgiCisjaW5jbHVkZSAiV2ViQ29sb3JDaG9vc2VyLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUxv
YWRlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyLmgiCisjaW5jbHVk
ZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKKyNpbmNsdWRlICJXZWJJbWFnZS5oIgorI2luY2x1
ZGUgIldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgor
I2luY2x1ZGUgIldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlBvcHVwTWVudS5oIgorI2luY2x1ZGUgIldl
YlByb2Nlc3MuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgiCisjaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJTZWFyY2hQb3B1cE1l
bnUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9BWE9iamVjdENhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvckNo
b29zZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RhdGFiYXNlVHJhY2tlci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVDaG9vc2Vy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlSWNvbkxvYWRlci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVMb2FkUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTElu
cHV0RWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9IVE1MUGFyc2VySWRpb21zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JY29uLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9NYWluRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9s
bGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5o
PgorCisjaWYgUExBVEZPUk0oSU9TKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9f
UFJFU0VOVEFUSU9OX01PREUpKQorI2luY2x1ZGUgIldlYlBsYXliYWNrU2Vzc2lvbk1hbmFnZXIu
aCIKKyNpbmNsdWRlICJXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCisjZW5kaWYKKworI2lm
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisjaW5jbHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCIKKyNlbmRpZgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3QuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1
ZGUgIlByaW50ZXJMaXN0R3RrLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3Rh
dGljIGRvdWJsZSBhcmVhKFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBJbnRTaXplIHNpemUgPSBm
cmFtZS0+dmlzaWJsZUNvbnRlbnRCb3VuZHNFeGNsdWRpbmdTY3JvbGxiYXJzKCkuc2l6ZSgpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHNpemUuaGVpZ2h0KCkpICogc2l6ZS53aWR0
aCgpOworfQorCitzdGF0aWMgV2ViRnJhbWUqIGZpbmRMYXJnZXN0RnJhbWVJbkZyYW1lU2V0KFdl
YlBhZ2UmIHBhZ2UpCit7CisgICAgLy8gQXBwcm94aW1hdGUgd2hhdCBhIHVzZXIgY291bGQgY29u
c2lkZXIgYSBkZWZhdWx0IHRhcmdldCBmcmFtZSBmb3IgYXBwbGljYXRpb24gbWVudSBvcGVyYXRp
b25zLgorCisgICAgV2ViRnJhbWUqIG1haW5GcmFtZSA9IHBhZ2UubWFpbldlYkZyYW1lKCk7Cisg
ICAgaWYgKCFtYWluRnJhbWUgfHwgIW1haW5GcmFtZS0+aXNGcmFtZVNldCgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIFdlYkZyYW1lKiBsYXJnZXN0U29GYXIgPSBudWxscHRyOwor
CisgICAgUmVmPEFQSTo6QXJyYXk+IGZyYW1lQ2hpbGRyZW4gPSBtYWluRnJhbWUtPmNoaWxkRnJh
bWVzKCk7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDaGlsZHJlbi0+c2l6ZSgpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBhdXRvKiBjaGlsZEZy
YW1lID0gZnJhbWVDaGlsZHJlbi0+YXQ8V2ViRnJhbWU+KGkpOworICAgICAgICBpZiAoIWxhcmdl
c3RTb0ZhciB8fCBhcmVhKGNoaWxkRnJhbWUpID4gYXJlYShsYXJnZXN0U29GYXIpKQorICAgICAg
ICAgICAgbGFyZ2VzdFNvRmFyID0gY2hpbGRGcmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gbGFy
Z2VzdFNvRmFyOworfQorCitXZWJDaHJvbWVDbGllbnQ6OldlYkNocm9tZUNsaWVudChXZWJQYWdl
JiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCit7Cit9CisKK2lubGluZSBXZWJDaHJvbWVDbGll
bnQ6On5XZWJDaHJvbWVDbGllbnQoKQoreworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6Y2hy
b21lRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiB3aW5kb3dGcmFtZSkKK3sKKyAg
ICBtX3BhZ2Uuc2VuZFNldFdpbmRvd0ZyYW1lKHdpbmRvd0ZyYW1lKTsKK30KKworRmxvYXRSZWN0
IFdlYkNocm9tZUNsaWVudDo6d2luZG93UmVjdCgpCit7CisjaWYgUExBVEZPUk0oSU9TKQorICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKKyNlbHNlCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmICht
X3BhZ2UuaGFzQ2FjaGVkV2luZG93RnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIG1fcGFnZS53aW5k
b3dGcmFtZUluVW5mbGlwcGVkU2NyZWVuQ29vcmRpbmF0ZXMoKTsKKyNlbmRpZgorCisgICAgRmxv
YXRSZWN0IG5ld1dpbmRvd0ZyYW1lOworCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpHZXRXaW5kb3dGcmFtZSgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dG
cmFtZTo6UmVwbHkobmV3V2luZG93RnJhbWUpLCBtX3BhZ2UucGFnZUlEKCkpKQorICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICByZXR1cm4gbmV3V2luZG93RnJhbWU7CisjZW5kaWYK
K30KKworRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6cGFnZVJlY3QoKQoreworICAgIHJldHVy
biBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX3BhZ2Uuc2l6ZSgpKTsKK30KKwordm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmZvY3VzKCkKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTZXRGb2N1cyh0cnVlKSk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojp1bmZv
Y3VzKCkKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRGb2N1
cyhmYWxzZSkpOworfQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKK3ZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjplbGVtZW50RGlkRm9jdXMoRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBtX3BhZ2UuZWxl
bWVudERpZEZvY3VzKCZlbGVtZW50KTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVsZW1l
bnREaWRCbHVyKEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgbV9wYWdlLmVsZW1lbnREaWRCbHVy
KCZlbGVtZW50KTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1ha2VGaXJzdFJlc3BvbmRl
cigpCit7CisgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TWFrZUZpcnN0
UmVzcG9uZGVyKCkpOworfQorCisjZW5kaWYgICAgCisKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50Ojpj
YW5UYWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnRha2VGb2N1cyhGb2N1
c0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6VGFrZUZvY3VzKGRpcmVjdGlvbikpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVu
dDo6Zm9jdXNlZEVsZW1lbnRDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaWYgKCFp
czxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSFRN
TElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
KmVsZW1lbnQpOworICAgIGlmICghaW5wdXRFbGVtZW50LmlzVGV4dCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgq
ZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKKyAgICBBU1NFUlQod2ViRnJhbWUpOworICAg
IG1fcGFnZS5pbmplY3RlZEJ1bmRsZUZvcm1DbGllbnQoKS5kaWRGb2N1c1RleHRGaWVsZCgmbV9w
YWdlLCAmaW5wdXRFbGVtZW50LCB3ZWJGcmFtZSk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50
Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBXZWJGcmFtZSogd2Vi
RnJhbWUgPSBmcmFtZSA/IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpmcmFtZSkgOiBudWxscHRy
OworCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpGb2N1c2VkRnJhbWVDaGFuZ2VkKHdlYkZy
YW1lID8gd2ViRnJhbWUtPmZyYW1lSUQoKSA6IDApLCBtX3BhZ2UucGFnZUlEKCkpOworfQorCitQ
YWdlKiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhGcmFtZSYgZnJhbWUsIGNvbnN0IEZy
YW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0
dXJlcywgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgbmF2aWdhdGlvbkFjdGlvbikKK3sKKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKGZyYW1lLmRvY3VtZW50KCkgJiYgZnJhbWUu
ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkpCisgICAgICAgIGZy
YW1lLmRvY3VtZW50KCktPndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTsKKyNlbmRpZgorCisgICAg
YXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOworCisgICAgV2ViRnJh
bWUqIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoZnJhbWUpOworCisgICAgTmF2
aWdhdGlvbkFjdGlvbkRhdGEgbmF2aWdhdGlvbkFjdGlvbkRhdGE7CisgICAgbmF2aWdhdGlvbkFj
dGlvbkRhdGEubmF2aWdhdGlvblR5cGUgPSBuYXZpZ2F0aW9uQWN0aW9uLnR5cGUoKTsKKyAgICBu
YXZpZ2F0aW9uQWN0aW9uRGF0YS5tb2RpZmllcnMgPSBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25B
Y3Rpb246Om1vZGlmaWVyc0Zvck5hdmlnYXRpb25BY3Rpb24obmF2aWdhdGlvbkFjdGlvbik7Cisg
ICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEubW91c2VCdXR0b24gPSBJbmplY3RlZEJ1bmRsZU5hdmln
YXRpb25BY3Rpb246Om1vdXNlQnV0dG9uRm9yTmF2aWdhdGlvbkFjdGlvbihuYXZpZ2F0aW9uQWN0
aW9uKTsKKyAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5zeW50aGV0aWNDbGlja1R5cGUgPSBJbmpl
Y3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb246OnN5bnRoZXRpY0NsaWNrVHlwZUZvck5hdmlnYXRp
b25BY3Rpb24obmF2aWdhdGlvbkFjdGlvbik7CisgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEudXNl
ckdlc3R1cmVUb2tlbklkZW50aWZpZXIgPSB3ZWJQcm9jZXNzLnVzZXJHZXN0dXJlVG9rZW5JZGVu
dGlmaWVyKG5hdmlnYXRpb25BY3Rpb24udXNlckdlc3R1cmVUb2tlbigpKTsKKyAgICBuYXZpZ2F0
aW9uQWN0aW9uRGF0YS5jYW5IYW5kbGVSZXF1ZXN0ID0gbV9wYWdlLmNhbkhhbmRsZVJlcXVlc3Qo
cmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSk7CisgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuc2hv
dWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSA9IG5hdmlnYXRpb25BY3Rpb24uc2hvdWxkT3BlbkV4
dGVybmFsVVJMc1BvbGljeSgpOworICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLmRvd25sb2FkQXR0
cmlidXRlID0gbmF2aWdhdGlvbkFjdGlvbi5kb3dubG9hZEF0dHJpYnV0ZSgpOworCisgICAgdWlu
dDY0X3QgbmV3UGFnZUlEID0gMDsKKyAgICBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFt
ZXRlcnM7CisgICAgaWYgKCF3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZU5ld1BhZ2Uod2ViRnJhbWUtPmZy
YW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoJmZyYW1lKSwgcmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKSwgd2luZG93RmVhdHVyZXMsIG5hdmlnYXRpb25BY3Rpb25EYXRhKSwg
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlTmV3UGFnZTo6UmVwbHkobmV3UGFnZUlELCBw
YXJhbWV0ZXJzKSwgbV9wYWdlLnBhZ2VJRCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBpZiAoIW5ld1BhZ2VJRCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB3ZWJQ
cm9jZXNzLmNyZWF0ZVdlYlBhZ2UobmV3UGFnZUlELCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAg
ICByZXR1cm4gd2ViUHJvY2Vzcy53ZWJQYWdlKG5ld1BhZ2VJRCktPmNvcmVQYWdlKCk7Cit9CisK
K3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzaG93KCkKK3sKKyAgICBtX3BhZ2Uuc2hvdygpOworfQor
Citib29sIFdlYkNocm9tZUNsaWVudDo6Y2FuUnVuTW9kYWwoKQoreworICAgIHJldHVybiBtX3Bh
Z2UuY2FuUnVuTW9kYWwoKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJ1bk1vZGFsKCkK
K3sKKyAgICBtX3BhZ2UucnVuTW9kYWwoKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJl
cG9ydFByb2Nlc3NDUFVUaW1lKGludDY0X3QgY3B1VGltZSwgQWN0aXZpdHlTdGF0ZUZvckNQVVNh
bXBsaW5nIGFjdGl2aXR5U3RhdGUpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vu
ZChNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlJlcG9ydFdlYkNvbnRlbnRDUFVUaW1lKGNwdVRp
bWUsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihhY3Rpdml0eVN0YXRlKSksIDApOworfQorCit2b2lk
IFdlYkNocm9tZUNsaWVudDo6c2V0VG9vbGJhcnNWaXNpYmxlKGJvb2wgdG9vbGJhcnNBcmVWaXNp
YmxlKQoreworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldFRvb2xi
YXJzQXJlVmlzaWJsZSh0b29sYmFyc0FyZVZpc2libGUpKTsKK30KKworYm9vbCBXZWJDaHJvbWVD
bGllbnQ6OnRvb2xiYXJzVmlzaWJsZSgpCit7CisgICAgQVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFn
ZVVJQ2xpZW50OjpVSUVsZW1lbnRWaXNpYmlsaXR5IHRvb2xiYXJzVmlzaWJpbGl0eSA9IG1fcGFn
ZS5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkudG9vbGJhcnNBcmVWaXNpYmxlKCZtX3BhZ2UpOwor
ICAgIGlmICh0b29sYmFyc1Zpc2liaWxpdHkgIT0gQVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZVVJ
Q2xpZW50OjpVSUVsZW1lbnRWaXNpYmlsaXR5OjpVbmtub3duKQorICAgICAgICByZXR1cm4gdG9v
bGJhcnNWaXNpYmlsaXR5ID09IEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VVSUNsaWVudDo6VUlF
bGVtZW50VmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICAKKyAgICBib29sIHRvb2xiYXJzQXJlVmlz
aWJsZSA9IHRydWU7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRUb29s
YmFyc0FyZVZpc2libGUoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0VG9vbGJhcnNBcmVW
aXNpYmxlOjpSZXBseSh0b29sYmFyc0FyZVZpc2libGUpLCBtX3BhZ2UucGFnZUlEKCkpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiB0b29sYmFyc0FyZVZpc2libGU7Cit9CisK
K3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wgc3RhdHVzQmFy
SXNWaXNpYmxlKQoreworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNl
dFN0YXR1c0JhcklzVmlzaWJsZShzdGF0dXNCYXJJc1Zpc2libGUpKTsKK30KKworYm9vbCBXZWJD
aHJvbWVDbGllbnQ6OnN0YXR1c2JhclZpc2libGUoKQoreworICAgIEFQSTo6SW5qZWN0ZWRCdW5k
bGU6OlBhZ2VVSUNsaWVudDo6VUlFbGVtZW50VmlzaWJpbGl0eSBzdGF0dXNiYXJWaXNpYmlsaXR5
ID0gbV9wYWdlLmluamVjdGVkQnVuZGxlVUlDbGllbnQoKS5zdGF0dXNCYXJJc1Zpc2libGUoJm1f
cGFnZSk7CisgICAgaWYgKHN0YXR1c2JhclZpc2liaWxpdHkgIT0gQVBJOjpJbmplY3RlZEJ1bmRs
ZTo6UGFnZVVJQ2xpZW50OjpVSUVsZW1lbnRWaXNpYmlsaXR5OjpVbmtub3duKQorICAgICAgICBy
ZXR1cm4gc3RhdHVzYmFyVmlzaWJpbGl0eSA9PSBBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlVUlD
bGllbnQ6OlVJRWxlbWVudFZpc2liaWxpdHk6OlZpc2libGU7CisKKyAgICBib29sIHN0YXR1c0Jh
cklzVmlzaWJsZSA9IHRydWU7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpH
ZXRTdGF0dXNCYXJJc1Zpc2libGUoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0U3RhdHVz
QmFySXNWaXNpYmxlOjpSZXBseShzdGF0dXNCYXJJc1Zpc2libGUpLCBtX3BhZ2UucGFnZUlEKCkp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBzdGF0dXNCYXJJc1Zpc2libGU7
Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRTY3JvbGxiYXJzVmlzaWJsZShib29sKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzY3Jv
bGxiYXJzVmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldE1lbnViYXJWaXNpYmxlKGJvb2wgbWVu
dUJhclZpc2libGUpCit7CisgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2V0TWVudUJhcklzVmlzaWJsZShtZW51QmFyVmlzaWJsZSkpOworfQorCitib29sIFdlYkNocm9t
ZUNsaWVudDo6bWVudWJhclZpc2libGUoKQoreworICAgIEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBh
Z2VVSUNsaWVudDo6VUlFbGVtZW50VmlzaWJpbGl0eSBtZW51YmFyVmlzaWJpbGl0eSA9IG1fcGFn
ZS5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkubWVudUJhcklzVmlzaWJsZSgmbV9wYWdlKTsKKyAg
ICBpZiAobWVudWJhclZpc2liaWxpdHkgIT0gQVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZVVJQ2xp
ZW50OjpVSUVsZW1lbnRWaXNpYmlsaXR5OjpVbmtub3duKQorICAgICAgICByZXR1cm4gbWVudWJh
clZpc2liaWxpdHkgPT0gQVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZVVJQ2xpZW50OjpVSUVsZW1l
bnRWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgIAorICAgIGJvb2wgbWVudUJhcklzVmlzaWJsZSA9
IHRydWU7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRNZW51QmFySXNW
aXNpYmxlKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldE1lbnVCYXJJc1Zpc2libGU6OlJl
cGx5KG1lbnVCYXJJc1Zpc2libGUpLCBtX3BhZ2UucGFnZUlEKCkpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHJldHVybiBtZW51QmFySXNWaXNpYmxlOworfQorCit2b2lkIFdlYkNocm9t
ZUNsaWVudDo6c2V0UmVzaXphYmxlKGJvb2wgcmVzaXphYmxlKQoreworICAgIG1fcGFnZS5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldElzUmVzaXphYmxlKHJlc2l6YWJsZSkpOworfQor
Cit2b2lkIFdlYkNocm9tZUNsaWVudDo6YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNl
IHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCkKK3sKKyAgICAvLyBOb3RpZnkgdGhlIGJ1bmRsZSBjbGllbnQuCisgICAgbV9wYWdlLmlu
amVjdGVkQnVuZGxlVUlDbGllbnQoKS53aWxsQWRkTWVzc2FnZVRvQ29uc29sZSgmbV9wYWdlLCBz
b3VyY2UsIGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJjZUlE
KTsKK30KKworYm9vbCBXZWJDaHJvbWVDbGllbnQ6OmNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbCgpCit7CisgICAgcmV0dXJuIG1fcGFnZS5jYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFu
ZWwoKTsKK30KKworYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEZyYW1lJiBmcmFtZSkKK3sKKyAgICBXZWJGcmFt
ZSogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZShmcmFtZSk7CisKKyAgICBib29s
IHNob3VsZENsb3NlID0gZmFsc2U7CisKKyAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0Rl
dGVjdGlvbkRpc2FibGVyOworCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpS
dW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwobWVzc2FnZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSks
IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbDo6UmVw
bHkoc2hvdWxkQ2xvc2UpLCBtX3BhZ2UucGFnZUlEKCksIFNlY29uZHM6OmluZmluaXR5KCksIElQ
Qzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNob3VsZENsb3NlOworfQorCit2b2lk
IFdlYkNocm9tZUNsaWVudDo6Y2xvc2VXaW5kb3dTb29uKCkKK3sKKyAgICAvLyBGSVhNRTogVGhp
cyBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgY2xpZW50IHdpbGwgcmVzcG9uZCB0byBhIGNsb3NlIHBh
Z2UKKyAgICAvLyBtZXNzYWdlIGJ5IGFjdHVhbGx5IGNsb3NpbmcgdGhlIHBhZ2UuIFNhZmFyaSBk
b2VzIHRoaXMsIGJ1dCB0aGVyZSBpcworICAgIC8vIG5vIGd1YXJhbnRlZSB0aGF0IG90aGVyIGFw
cGxpY2F0aW9ucyB3aWxsLCB3aGljaCB3aWxsIGxlYXZlIHRoaXMgcGFnZQorICAgIC8vIGhhbGYg
ZGV0YWNoZWQuIFRoaXMgYXBwcm9hY2ggaXMgYW4gaW5oZXJlbnQgbGltaXRhdGlvbiBtYWtpbmcg
cGFydHMgb2YKKyAgICAvLyBhIGNsb3NlIGV4ZWN1dGUgc3luY2hyb25vdXNseSBhcyBwYXJ0IG9m
IHdpbmRvdy5jbG9zZSwgYnV0IG90aGVyIHBhcnRzCisgICAgLy8gbGF0ZXIgb24uCisKKyAgICBt
X3BhZ2UuY29yZVBhZ2UoKS0+c2V0R3JvdXBOYW1lKFN0cmluZygpKTsKKworICAgIGlmIChXZWJG
cmFtZSogZnJhbWUgPSBtX3BhZ2UubWFpbldlYkZyYW1lKCkpIHsKKyAgICAgICAgaWYgKEZyYW1l
KiBjb3JlRnJhbWUgPSBmcmFtZS0+Y29yZUZyYW1lKCkpCisgICAgICAgICAgICBjb3JlRnJhbWUt
PmxvYWRlcigpLnN0b3BGb3JVc2VyQ2FuY2VsKCk7CisgICAgfQorCisgICAgbV9wYWdlLnNlbmRD
bG9zZSgpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRTdXBwcmVzc0phdmFTY3JpcHREaWFsb2dz
KEZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAoZnJhbWUubG9hZGVyKCkub3BlbmVyKCkgJiYgZnJh
bWUubG9hZGVyKCkuc3RhdGVNYWNoaW5lKCkuaXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1l
bnQoKSAmJiBmcmFtZS5sb2FkZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkNocm9t
ZUNsaWVudDo6cnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiBh
bGVydFRleHQpCit7CisgICAgaWYgKHNob3VsZFN1cHByZXNzSmF2YVNjcmlwdERpYWxvZ3MoZnJh
bWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBXZWJGcmFt
ZTo6ZnJvbUNvcmVGcmFtZShmcmFtZSk7CisgICAgQVNTRVJUKHdlYkZyYW1lKTsKKworICAgIC8v
IE5vdGlmeSB0aGUgYnVuZGxlIGNsaWVudC4KKyAgICBtX3BhZ2UuaW5qZWN0ZWRCdW5kbGVVSUNs
aWVudCgpLndpbGxSdW5KYXZhU2NyaXB0QWxlcnQoJm1fcGFnZSwgYWxlcnRUZXh0LCB3ZWJGcmFt
ZSk7CisKKyAgICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOwor
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0KHdlYkZy
YW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKCZmcmFtZSksIGFs
ZXJ0VGV4dCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6UmVw
bHkoKSwgbV9wYWdlLnBhZ2VJRCgpLCBTZWNvbmRzOjppbmZpbml0eSgpLCBJUEM6OlNlbmRTeW5j
T3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCk7Cit9CisKK2Jvb2wgV2Vi
Q2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybShGcmFtZSYgZnJhbWUsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoc2hvdWxkU3VwcHJlc3NKYXZhU2NyaXB0RGlhbG9n
cyhmcmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkZyYW1lKiB3ZWJGcmFt
ZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKGZyYW1lKTsKKyAgICBBU1NFUlQod2ViRnJhbWUp
OworCisgICAgLy8gTm90aWZ5IHRoZSBidW5kbGUgY2xpZW50LgorICAgIG1fcGFnZS5pbmplY3Rl
ZEJ1bmRsZVVJQ2xpZW50KCkud2lsbFJ1bkphdmFTY3JpcHRDb25maXJtKCZtX3BhZ2UsIG1lc3Nh
Z2UsIHdlYkZyYW1lKTsKKworICAgIEhhbmdEZXRlY3Rpb25EaXNhYmxlciBoYW5nRGV0ZWN0aW9u
RGlzYWJsZXI7CisKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIGlmICghV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm0od2ViRnJhbWUtPmZyYW1lSUQo
KSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoJmZyYW1lKSwgbWVzc2FnZSksIE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25maXJtOjpSZXBseShyZXN1bHQpLCBt
X3BhZ2UucGFnZUlEKCksIFNlY29uZHM6OmluZmluaXR5KCksIElQQzo6U2VuZFN5bmNPcHRpb246
OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkph
dmFTY3JpcHRQcm9tcHQoRnJhbWUmIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBpZiAoc2hvdWxk
U3VwcHJlc3NKYXZhU2NyaXB0RGlhbG9ncyhmcmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKGZyYW1l
KTsKKyAgICBBU1NFUlQod2ViRnJhbWUpOworCisgICAgLy8gTm90aWZ5IHRoZSBidW5kbGUgY2xp
ZW50LgorICAgIG1fcGFnZS5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkud2lsbFJ1bkphdmFTY3Jp
cHRQcm9tcHQoJm1fcGFnZSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCB3ZWJGcmFtZSk7CisKKyAg
ICBIYW5nRGV0ZWN0aW9uRGlzYWJsZXIgaGFuZ0RldGVjdGlvbkRpc2FibGVyOworCisgICAgaWYg
KCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1l
LT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKCZmcmFtZSksIG1lc3Nh
Z2UsIGRlZmF1bHRWYWx1ZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQ
cm9tcHQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZS5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHko
KSwgSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIXJlc3VsdC5pc051bGwoKTsK
K30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5n
JiBzdGF0dXNiYXJUZXh0KQoreworICAgIC8vIE5vdGlmeSB0aGUgYnVuZGxlIGNsaWVudC4KKyAg
ICBtX3BhZ2UuaW5qZWN0ZWRCdW5kbGVVSUNsaWVudCgpLndpbGxTZXRTdGF0dXNiYXJUZXh0KCZt
X3BhZ2UsIHN0YXR1c2JhclRleHQpOworCisgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6U2V0U3RhdHVzVGV4dChzdGF0dXNiYXJUZXh0KSk7Cit9CisKK0tleWJvYXJkVUlN
b2RlIFdlYkNocm9tZUNsaWVudDo6a2V5Ym9hcmRVSU1vZGUoKQoreworICAgIHJldHVybiBtX3Bh
Z2Uua2V5Ym9hcmRVSU1vZGUoKTsKK30KKworI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCisKK2Jv
b2wgV2ViQ2hyb21lQ2xpZW50OjpyZXF1ZXN0UG9pbnRlckxvY2soKQoreworICAgIG1fcGFnZS5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlcXVlc3RQb2ludGVyTG9jaygpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlcXVlc3RQb2ludGVyVW5s
b2NrKCkKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZXF1ZXN0
UG9pbnRlclVubG9jaygpKTsKK30KKworI2VuZGlmCisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpp
bnZhbGlkYXRlUm9vdFZpZXcoY29uc3QgSW50UmVjdCYpCit7CisgICAgLy8gRG8gbm90aGluZyBo
ZXJlLCB0aGVyZSdzIG5vIGNvbmNlcHQgb2YgaW52YWxpZGF0aW5nIHRoZSB3aW5kb3cgaW4gdGhl
IHdlYiBwcm9jZXNzLgorfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6aW52YWxpZGF0ZUNvbnRl
bnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoRG9jdW1lbnQq
IGRvY3VtZW50ID0gbV9wYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLmRvY3VtZW50KCkpIHsK
KyAgICAgICAgaWYgKGRvY3VtZW50LT5wcmludGluZygpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1fcGFnZS5kcmF3aW5nQXJlYSgpLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
cmVjdCk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjppbnZhbGlkYXRlQ29udGVudHNGb3JT
bG93U2Nyb2xsKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKERvY3VtZW50KiBkb2N1
bWVudCA9IG1fcGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpKSB7CisgICAg
ICAgIGlmIChkb2N1bWVudC0+cHJpbnRpbmcoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3BhZ2UucGFnZURpZFNjcm9sbCgpOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fcGFnZS5tYWluRnJhbWUoKS0+dmll
dygpOworICAgIGlmIChmcmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmco
KSkgeworICAgICAgICBtX3BhZ2UuZHJhd2luZ0FyZWEoKS0+c2Nyb2xsKHJlY3QsIEludFNpemUo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBtX3BhZ2UuZHJhd2luZ0Fy
ZWEoKS0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworfQorCit2b2lkIFdlYkNocm9tZUNs
aWVudDo6c2Nyb2xsKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiBz
Y3JvbGxSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBtX3BhZ2UucGFnZURp
ZFNjcm9sbCgpOworICAgIG1fcGFnZS5kcmF3aW5nQXJlYSgpLT5zY3JvbGwoaW50ZXJzZWN0aW9u
KHNjcm9sbFJlY3QsIGNsaXBSZWN0KSwgc2Nyb2xsRGVsdGEpOworfQorCisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRlbGVnYXRlZFNjcm9sbFJl
cXVlc3RlZChjb25zdCBJbnRQb2ludCYgc2Nyb2xsT2Zmc2V0KQoreworICAgIG1fcGFnZS5wYWdl
RGlkUmVxdWVzdFNjcm9sbChzY3JvbGxPZmZzZXQpOworfQorI2VuZGlmCisKK0ludFBvaW50IFdl
YkNocm9tZUNsaWVudDo6c2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS5zY3JlZW5Ub1Jvb3RWaWV3KHBvaW50KTsKK30KKwor
SW50UmVjdCBXZWJDaHJvbWVDbGllbnQ6OnJvb3RWaWV3VG9TY3JlZW4oY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLnJvb3RWaWV3VG9TY3JlZW4ocmVjdCk7
Cit9CisgICAgCisjaWYgUExBVEZPUk0oSU9TKQorSW50UG9pbnQgV2ViQ2hyb21lQ2xpZW50Ojph
Y2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcGFnZS5hY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhwb2lu
dCk7Cit9CisKK0ludFJlY3QgV2ViQ2hyb21lQ2xpZW50Ojpyb290Vmlld1RvQWNjZXNzaWJpbGl0
eVNjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2Uu
cm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4ocmVjdCk7Cit9CisjZW5kaWYKKworUGxhdGZv
cm1QYWdlQ2xpZW50IFdlYkNocm9tZUNsaWVudDo6cGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkNo
cm9tZUNsaWVudDo6Y29udGVudHNTaXplQ2hhbmdlZChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFNp
emUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3Mo
KS5mcmFtZUZsYXR0ZW5pbmdFbmFibGVkKCkpIHsKKyAgICAgICAgV2ViRnJhbWUqIGxhcmdlc3RG
cmFtZSA9IGZpbmRMYXJnZXN0RnJhbWVJbkZyYW1lU2V0KG1fcGFnZSk7CisgICAgICAgIGlmIChs
YXJnZXN0RnJhbWUgIT0gbV9jYWNoZWRGcmFtZVNldExhcmdlc3RGcmFtZS5nZXQoKSkgeworICAg
ICAgICAgICAgbV9jYWNoZWRGcmFtZVNldExhcmdlc3RGcmFtZSA9IGxhcmdlc3RGcmFtZTsKKyAg
ICAgICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkZyYW1lU2V0TGFy
Z2VzdEZyYW1lQ2hhbmdlZChsYXJnZXN0RnJhbWUgPyBsYXJnZXN0RnJhbWUtPmZyYW1lSUQoKSA6
IDApKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgmZnJhbWUucGFnZSgpLT5tYWluRnJh
bWUoKSAhPSAmZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkRpZENoYW5nZUNvbnRlbnRTaXplKHNpemUpKTsKKworICAgIG1f
cGFnZS5kcmF3aW5nQXJlYSgpLT5tYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoc2l6ZSk7CisK
KyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLnZpZXcoKTsKKyAgICBpZiAoZnJhbWVW
aWV3ICYmICFmcmFtZVZpZXctPmRlbGVnYXRlc1Njcm9sbGluZygpKSAgeworICAgICAgICBib29s
IGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxiYXIo
KTsKKyAgICAgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IGZyYW1lVmlldy0+dmVydGlj
YWxTY3JvbGxiYXIoKTsKKworICAgICAgICBpZiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhciAhPSBt
X2NhY2hlZE1haW5GcmFtZUhhc0hvcml6b250YWxTY3JvbGxiYXIgfHwgaGFzVmVydGljYWxTY3Jv
bGxiYXIgIT0gbV9jYWNoZWRNYWluRnJhbWVIYXNWZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAg
ICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ2hhbmdlU2Nyb2xs
YmFyc0Zvck1haW5GcmFtZShoYXNIb3Jpem9udGFsU2Nyb2xsYmFyLCBoYXNWZXJ0aWNhbFNjcm9s
bGJhcikpOworCisgICAgICAgICAgICBtX2NhY2hlZE1haW5GcmFtZUhhc0hvcml6b250YWxTY3Jv
bGxiYXIgPSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAgICAgICAgbV9jYWNoZWRNYWlu
RnJhbWVIYXNWZXJ0aWNhbFNjcm9sbGJhciA9IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2Nyb2xsUmVjdEludG9WaWV3
KGNvbnN0IEludFJlY3QmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jv
b2wgV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRv
bihSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gcGx1Z2lu
VW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0Cit7CisgICAgc3dpdGNoIChwbHVnaW5VbmF2YWls
YWJpbGl0eVJlYXNvbikgeworICAgIGNhc2UgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpbk1p
c3Npbmc6CisgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vODc5NDM5Nz4gV2Ugc2hv
dWxkIG9ubHkgcmV0dXJuIHRydWUgd2hlbiB0aGVyZSBpcyBhCisgICAgICAgIC8vIG1pc3NpbmdQ
bHVnaW5CdXR0b25DbGlja2VkIGNhbGxiYWNrIGRlZmluZWQgb24gdGhlIFBhZ2UgVUkgY2xpZW50
LgorICAgIGNhc2UgUmVuZGVyRW1iZWRkZWRPYmplY3Q6Okluc2VjdXJlUGx1Z2luVmVyc2lvbjoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKworICAgIGNhc2UgUmVuZGVyRW1iZWRkZWRPYmplY3Q6
OlBsdWdpbkNyYXNoZWQ6CisgICAgY2FzZSBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luQmxv
Y2tlZEJ5Q29udGVudFNlY3VyaXR5UG9saWN5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAg
IAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChF
bGVtZW50JiBlbGVtZW50LCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxp
dHlSZWFzb24gcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0Cit7CisjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgQVNTRVJUKGVsZW1lbnQuaGFzVGFnTmFtZShvYmpl
Y3RUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShlbWJlZFRhZykgfHwgZWxlbWVudC5oYXNUYWdO
YW1lKGFwcGxldFRhZykpOworICAgIEFTU0VSVChwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiA9
PSBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luTWlzc2luZyB8fCBwbHVnaW5VbmF2YWlsYWJp
bGl0eVJlYXNvbiA9PSBSZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5WZXJzaW9u
IHx8IHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKTsKKworICAgIGF1dG8mIHBsdWdpbkVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PihlbGVtZW50KTsKKworICAgIFN0
cmluZyBmcmFtZVVSTFN0cmluZyA9IHBsdWdpbkVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpLT5s
b2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZVVSTCgpLnN0cmluZygpOworICAgIFN0
cmluZyBwYWdlVVJMU3RyaW5nID0gbV9wYWdlLm1haW5GcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVu
dExvYWRlcigpLT5yZXNwb25zZVVSTCgpLnN0cmluZygpOworICAgIFN0cmluZyBwbHVnaW5VUkxT
dHJpbmcgPSBwbHVnaW5FbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwocGx1Z2luRWxlbWVu
dC51cmwoKSkuc3RyaW5nKCk7CisgICAgVVJMIHBsdWdpbnNwYWdlQXR0cmlidXRlVVJMID0gcGx1
Z2luRWxlbWVudC5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5n
SFRNTFNwYWNlcyhwbHVnaW5FbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
cGx1Z2luc3BhZ2VBdHRyKSkpOworICAgIGlmICghcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkwucHJv
dG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAgICAgICBwbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTCA9
IFVSTCgpOworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVuYXZhaWxh
YmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiwgcGx1Z2lu
RWxlbWVudC5zZXJ2aWNlVHlwZSgpLCBwbHVnaW5VUkxTdHJpbmcsIHBsdWdpbnNwYWdlQXR0cmli
dXRlVVJMLnN0cmluZygpLCBmcmFtZVVSTFN0cmluZywgcGFnZVVSTFN0cmluZykpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisgICAgVU5VU0VEX1BBUkFNKHBsdWdpblVuYXZh
aWxhYmlsaXR5UmVhc29uKTsKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
K30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6
bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3Vs
dCwgdW5zaWduZWQgbW9kaWZpZXJGbGFncykKK3sKKyAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IHVz
ZXJEYXRhOworCisgICAgLy8gTm90aWZ5IHRoZSBidW5kbGUgY2xpZW50LgorICAgIG1fcGFnZS5p
bmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoJm1fcGFnZSwg
aGl0VGVzdFJlc3VsdCwgc3RhdGljX2Nhc3Q8V2ViRXZlbnQ6Ok1vZGlmaWVycz4obW9kaWZpZXJG
bGFncyksIHVzZXJEYXRhKTsKKworICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgorICAgIFdl
YkhpdFRlc3RSZXN1bHREYXRhIHdlYkhpdFRlc3RSZXN1bHREYXRhKGhpdFRlc3RSZXN1bHQpOwor
ICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KHdlYkhpdFRlc3RSZXN1bHREYXRhLCBtb2RpZmllckZsYWdzLCBVc2VyRGF0YShXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdl
dCgpKS5nZXQoKSkpKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFRvb2xUaXAoY29u
c3QgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0aW9uKQoreworICAgIC8vIE9ubHkgc2VuZCBh
IHRvb2wgdGlwIHRvIHRoZSBXZWJQcm9jZXNzIGlmIGl0IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBs
YXN0IHRpbWUgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkLgorCisgICAgaWYgKHRvb2xUaXAgPT0g
bV9jYWNoZWRUb29sVGlwKQorICAgICAgICByZXR1cm47CisgICAgbV9jYWNoZWRUb29sVGlwID0g
dG9vbFRpcDsKKworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldFRv
b2xUaXAobV9jYWNoZWRUb29sVGlwKSk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpwcmlu
dChGcmFtZSYgZnJhbWUpCit7CisgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZy
b21Db3JlRnJhbWUoZnJhbWUpOworICAgIEFTU0VSVCh3ZWJGcmFtZSk7CisKKyNpZiBQTEFURk9S
TShHVEspICYmIEhBVkUoR1RLX1VOSVhfUFJJTlRJTkcpCisgICAgLy8gV2hlbiBwcmludGluZyBz
eW5jaHJvbm91c2x5IGluIEdUSysgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGEg
bGlzdCBvZiBQcmludGVycyBiZWZvcmUgc3RhcnRpbmcgdGhlIHByaW50IG9wZXJhdGlvbi4KKyAg
ICAvLyBHZXR0aW5nIHRoZSBsaXN0IG9mIHByaW50ZXJzIGlzIGRvbmUgc3luY2hyb25vdXNseSBi
eSBHVEsrLCBidXQgdXNpbmcgYSBuZXN0ZWQgbWFpbiBsb29wIHRoYXQgbWlnaHQgcHJvY2VzcyBJ
UEMgbWVzc2FnZXMKKyAgICAvLyBjb21taW5nIGZyb20gdGhlIFVJIHByb2Nlc3MgbGlrZSBFbmRQ
cmludGluZy4gV2hlbiB0aGUgRW5kUHJpdGluZyBtZXNzYWdlIGlzIHJlY2VpdmVkIHdoaWxlIHRo
ZSBwcmludGVyIGxpc3QgaXMgYmVpbmcgcG9wdWxhdGVkLAorICAgIC8vIHRoZSBwcmludCBvcGVy
YXRpb24gaXMgZmluaXNoZWQgdW5leHBlY3RlbHkgYW5kIHRoZSB3ZWIgcHJvY2VzcyBjcmFzaGVz
LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjk3OS4KKyAg
ICAvLyBUaGUgUHJpbnRlckxpc3RHdGsgY2xhc3MgZ2V0cyB0aGUgbGlzdCBvZiBwcmludGVycyBp
biB0aGUgY29uc3RydWN0b3Igc28gd2UganVzdCBuZWVkIHRvIGVuc3VyZSB0aGVyZSdzIGFuIGlu
c3RhbmNlIGFsaXZlCisgICAgLy8gZHVyaW5nIHRoZSBzeW5jaHJvbm91cyBwcmludCBvcGVyYXRp
b24uCisgICAgUmVmUHRyPFByaW50ZXJMaXN0R3RrPiBwcmludGVyTGlzdCA9IFByaW50ZXJMaXN0
R3RrOjpnZXRPckNyZWF0ZSgpOworICAgIGlmICghcHJpbnRlckxpc3QpIHsKKyAgICAgICAgLy8g
UHJpbnRlckxpc3RHdGs6OmdldE9yQ3JlYXRlKCkgcmV0dXJucyBudWxscHRyIHdoZW4gY2FsbGVk
IHdoaWxlIGEgcHJpbnRlcnMgZW51bWVyYXRpb24gaXMgb25nb2luZy4KKyAgICAgICAgLy8gVGhp
cyBjYW4gaGFwcGVuIGlmIGEgc3luY2hyb25vdXMgcHJpbnQgaXMgc3RhcnRlZCBieSBhIEphdmFT
Y3JpcHQgYW5kIGFub3RoZXIgb25lIGlzIGlubWVkaXRhbGV5IHN0YXJ0ZWQKKyAgICAgICAgLy8g
ZnJvbSBhIEphdmFTY3JpcHQgZXZlbnQgbGlzdGVuZXIuIFRoZSBzZWNvbmQgcHJpbnQgb3BlcmF0
aW9uIGlzIGhhbmRsZWQgYnkgdGhlIG5lc3RlZCBtYWluIGxvb3AgdXNlZCBieSBHVEsrCisgICAg
ICAgIC8vIHRvIGVudW1lcmF0ZSB0aGUgcHJpbnRlcnMsIGFuZCB3ZSBlbmQgdXAgaGVyZSB0cnlp
bmcgdG8gZ2V0IGEgcmVmZXJlbmNlIG9mIGFuIG9iamVjdCB0aGF0IGlzIGJlaW5nIGNvbnN0cnVj
dGVkLgorICAgICAgICAvLyBJdCdzIHZlcnkgdW5saWtlbHkgdGhhdCB0aGUgdXNlciB3YW50cyB0
byBwcmludCB0d2ljZSBpbiBhIHJvdywgYW5kIG90aGVyIGJyb3dzZXJzIGRvbid0IGRvIHR3byBw
cmludCBvcGVyYXRpb25zCisgICAgICAgIC8vIGluIHRoaXMgcGFydGljdWxhciBjYXNlIGVpdGhl
ci4gU28sIHRoZSBzYWZlc3Qgc29sdXRpb24gaXMgdG8gcmV0dXJuIGVhcmx5IGhlcmUgYW5kIGln
bm9yZSB0aGUgc2Vjb25kIHByaW50LgorICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTAzNQorICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKKyAgICBtX3BhZ2Uuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJpbnRG
cmFtZSh3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UHJpbnRG
cmFtZTo6UmVwbHkoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3luY09wdGlvbjo6
SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworfQorCit2b2lkIFdlYkNocm9tZUNs
aWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lJiBmcmFtZSwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZU5hbWUsIERhdGFiYXNlRGV0YWlscyBkZXRhaWxzKQoreworICAgIFdlYkZyYW1lKiB3
ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKGZyYW1lKTsKKyAgICBBU1NFUlQod2Vi
RnJhbWUpOworICAgIAorICAgIGF1dG8mIG9yaWdpbiA9IGZyYW1lLmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCk7CisgICAgYXV0byBvcmlnaW5EYXRhID0gU2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tU2VjdXJpdHlPcmlnaW4ob3JpZ2luKTsKKyAgICBhdXRvJiB0cmFja2VyID0gRGF0YWJhc2VU
cmFja2VyOjpzaW5nbGV0b24oKTsKKyAgICBhdXRvIGN1cnJlbnRRdW90YSA9IHRyYWNrZXIucXVv
dGEob3JpZ2luRGF0YSk7CisgICAgYXV0byBjdXJyZW50T3JpZ2luVXNhZ2UgPSB0cmFja2VyLnVz
YWdlKG9yaWdpbkRhdGEpOworICAgIHVpbnQ2NF90IG5ld1F1b3RhID0gMDsKKyAgICBSZWZQdHI8
QVBJOjpTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBBUEk6OlNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGUoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKFNlY3Vy
aXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKG9yaWdpbikuZGF0YWJhc2VJZGVudGlm
aWVyKCkpLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBuZXdRdW90YSA9IG1fcGFnZS5pbmplY3Rl
ZEJ1bmRsZVVJQ2xpZW50KCkuZGlkRXhjZWVkRGF0YWJhc2VRdW90YSgmbV9wYWdlLCBzZWN1cml0
eU9yaWdpbi5nZXQoKSwgZGF0YWJhc2VOYW1lLCBkZXRhaWxzLmRpc3BsYXlOYW1lKCksIGN1cnJl
bnRRdW90YSwgY3VycmVudE9yaWdpblVzYWdlLCBkZXRhaWxzLmN1cnJlbnRVc2FnZSgpLCBkZXRh
aWxzLmV4cGVjdGVkVXNhZ2UoKSk7CisKKyAgICBpZiAoIW5ld1F1b3RhKSB7CisgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KAorICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1
b3RhKHdlYkZyYW1lLT5mcmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5
T3JpZ2luKG9yaWdpbikuZGF0YWJhc2VJZGVudGlmaWVyKCksIGRhdGFiYXNlTmFtZSwgZGV0YWls
cy5kaXNwbGF5TmFtZSgpLCBjdXJyZW50UXVvdGEsIGN1cnJlbnRPcmlnaW5Vc2FnZSwgZGV0YWls
cy5jdXJyZW50VXNhZ2UoKSwgZGV0YWlscy5leHBlY3RlZFVzYWdlKCkpLAorICAgICAgICAgICAg
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1b3RhOjpSZXBseShuZXdR
dW90YSksIG1fcGFnZS5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpTZW5kU3lu
Y09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworICAgIH0KKworICAg
IHRyYWNrZXIuc2V0UXVvdGEob3JpZ2luRGF0YSwgbmV3UXVvdGEpOworfQorCit2b2lkIFdlYkNo
cm9tZUNsaWVudDo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkQXBwbGljYXRp
b25DYWNoZU9yaWdpblF1b3RhKFNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIGludDY0X3QgdG90YWxC
eXRlc05lZWRlZCkKK3sKKyAgICBSZWZQdHI8QVBJOjpTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4gPSBBUEk6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKG9yaWdpbi50b1N0
cmluZygpKTsKKyAgICBpZiAobV9wYWdlLmluamVjdGVkQnVuZGxlVUlDbGllbnQoKS5kaWRSZWFj
aEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSgmbV9wYWdlLCBzZWN1cml0eU9yaWdpbi5nZXQo
KSwgdG90YWxCeXRlc05lZWRlZCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGNhY2hl
U3RvcmFnZSA9IG1fcGFnZS5jb3JlUGFnZSgpLT5hcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpOwor
ICAgIGludDY0X3QgY3VycmVudFF1b3RhID0gMDsKKyAgICBpZiAoIWNhY2hlU3RvcmFnZS5jYWxj
dWxhdGVRdW90YUZvck9yaWdpbihvcmlnaW4sIGN1cnJlbnRRdW90YSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHVpbnQ2NF90IG5ld1F1b3RhID0gMDsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYygKKyAgICAgICAgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShTZWN1
cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbihvcmlnaW4pLmRhdGFiYXNlSWRlbnRp
ZmllcigpLCBjdXJyZW50UXVvdGEsIHRvdGFsQnl0ZXNOZWVkZWQpLAorICAgICAgICBNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpSZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhOjpSZXBs
eShuZXdRdW90YSksIG1fcGFnZS5wYWdlSUQoKSwgU2Vjb25kczo6aW5maW5pdHkoKSwgSVBDOjpT
ZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpOworCisgICAg
Y2FjaGVTdG9yYWdlLnN0b3JlVXBkYXRlZFF1b3RhRm9yT3JpZ2luKCZvcmlnaW4sIG5ld1F1b3Rh
KTsKK30KKworI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKwordm9pZCBXZWJDaHJvbWVD
bGllbnQ6OmFubm90YXRlZFJlZ2lvbnNDaGFuZ2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCisjZW5kaWYKKworYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNob3VsZFJlcGxhY2VXaXRo
R2VuZXJhdGVkRmlsZUZvclVwbG9hZChjb25zdCBTdHJpbmcmIHBhdGgsIFN0cmluZyYgZ2VuZXJh
dGVkRmlsZW5hbWUpCit7CisgICAgZ2VuZXJhdGVkRmlsZW5hbWUgPSBtX3BhZ2UuaW5qZWN0ZWRC
dW5kbGVVSUNsaWVudCgpLnNob3VsZEdlbmVyYXRlRmlsZUZvclVwbG9hZCgmbV9wYWdlLCBwYXRo
KTsKKyAgICByZXR1cm4gIWdlbmVyYXRlZEZpbGVuYW1lLmlzTnVsbCgpOworfQorCitTdHJpbmcg
V2ViQ2hyb21lQ2xpZW50OjpnZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgcmV0dXJuIG1fcGFnZS5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkuZ2VuZXJh
dGVGaWxlRm9yVXBsb2FkKCZtX3BhZ2UsIHBhdGgpOworfQorCisjaWYgRU5BQkxFKElOUFVUX1RZ
UEVfQ09MT1IpCisKK3N0ZDo6dW5pcXVlX3B0cjxDb2xvckNob29zZXI+IFdlYkNocm9tZUNsaWVu
dDo6Y3JlYXRlQ29sb3JDaG9vc2VyKENvbG9yQ2hvb3NlckNsaWVudCYgY2xpZW50LCBjb25zdCBD
b2xvciYgaW5pdGlhbENvbG9yKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNv
bG9yQ2hvb3Nlcj4oJm1fcGFnZSwgJmNsaWVudCwgaW5pdGlhbENvbG9yKTsKK30KKworI2VuZGlm
CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpydW5PcGVuUGFuZWwoRnJhbWUmIGZyYW1lLCBGaWxl
Q2hvb3NlciYgZmlsZUNob29zZXIpCit7CisgICAgaWYgKG1fcGFnZS5hY3RpdmVPcGVuUGFuZWxS
ZXN1bHRMaXN0ZW5lcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2Uuc2V0QWN0aXZl
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXIoV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6OmNyZWF0
ZSgmbV9wYWdlLCAmZmlsZUNob29zZXIpKTsKKworICAgIGF1dG8qIHdlYkZyYW1lID0gV2ViRnJh
bWU6OmZyb21Db3JlRnJhbWUoZnJhbWUpOworICAgIEFTU0VSVCh3ZWJGcmFtZSk7CisgICAgbV9w
YWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuT3BlblBhbmVsKHdlYkZyYW1lLT5m
cmFtZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbUZyYW1lKCZmcmFtZSksIGZpbGVDaG9v
c2VyLnNldHRpbmdzKCkpKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmxvYWRJY29uRm9y
RmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgRmlsZUljb25Mb2FkZXImIGxv
YWRlcikKK3sKKyAgICBsb2FkZXIuaWNvbkxvYWRlZChjcmVhdGVJY29uRm9yRmlsZXMoZmlsZW5h
bWVzKSk7Cit9CisKKyNpZiAhUExBVEZPUk0oSU9TKQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6
c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQoreworICAgIG1fcGFnZS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlNldEN1cnNvcihjdXJzb3IpKTsKK30KKwordm9pZCBXZWJDaHJv
bWVDbGllbnQ6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGls
TW91c2VNb3ZlcykKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpT
ZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKSk7Cit9
CisKK1JlZlB0cjxJY29uPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIHJldHVybiBJY29uOjpjcmVhdGVJ
Y29uRm9yRmlsZXMoZmlsZW5hbWVzKTsKK30KKworI2VuZGlmCisKKyNpZiAhVVNFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2NoZWR1bGVB
bmltYXRpb24oKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBtX3BhZ2Uu
ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlSG9zdCgpLT5zY2hlZHVsZUFuaW1hdGlvbigpOworI2Vu
ZGlmCit9CisKKyNlbmRpZgorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkQXNzb2NpYXRlRm9y
bUNvbnRyb2xzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RWxlbWVudD4+JiBlbGVtZW50cykKK3sKKyAg
ICByZXR1cm4gbV9wYWdlLmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLmRpZEFzc29jaWF0ZUZv
cm1Db250cm9scygmbV9wYWdlLCBlbGVtZW50cyk7Cit9CisKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50
OjpzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzKCkKK3sKKyAgICByZXR1cm4gbV9wYWdlLmluamVj
dGVkQnVuZGxlRm9ybUNsaWVudCgpLnNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXMoJm1fcGFnZSk7
Cit9CisKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzZWxlY3RJdGVtV3JpdGluZ0RpcmVjdGlvbklz
TmF0dXJhbCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYkNocm9tZUNsaWVu
dDo6c2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbigpCit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpoYXNPcGVuZWRQb3B1
cCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1JlZlB0cjxQb3B1cE1lbnU+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlUG9wdXBNZW51KFBv
cHVwTWVudUNsaWVudCYgY2xpZW50KSBjb25zdAoreworICAgIHJldHVybiBXZWJQb3B1cE1lbnU6
OmNyZWF0ZSgmbV9wYWdlLCAmY2xpZW50KTsKK30KKworUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4g
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVTZWFyY2hQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50JiBj
bGllbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlNlYXJjaFBvcHVwTWVudTo6Y3JlYXRlKCZt
X3BhZ2UsICZjbGllbnQpOworfQorCitHcmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hyb21lQ2xp
ZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZHJhd2lu
Z0FyZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVh
LT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOworICAgIHJldHVybiBudWxscHRyOworfQorCisjaWYg
VVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKworUmVmUHRyPERp
c3BsYXlSZWZyZXNoTW9uaXRvcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVEaXNwbGF5UmVmcmVz
aE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKSBjb25zdAoreworICAgIHJldHVy
biBtX3BhZ2UuZHJhd2luZ0FyZWEoKS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3Bs
YXlJRCk7Cit9CisKKyNlbmRpZgorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdy
YXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5
ZXIpCisgICAgICAgIG1fcGFnZS5lbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVy
KTsKKyAgICBlbHNlCisgICAgICAgIG1fcGFnZS5leGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhp
Y3NMYXllcihGcmFtZSYgZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7Cisg
ICAgaWYgKGF1dG8gZHJhd2luZ0FyZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEoKSkKKyAgICAgICAg
ZHJhd2luZ0FyZWEtPmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcigmZnJhbWUsIGdyYXBo
aWNzTGF5ZXIpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0TmVlZHNPbmVTaG90RHJh
d2luZ1N5bmNocm9uaXphdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkKK3sKKyAg
ICBpZiAobV9wYWdlLmRyYXdpbmdBcmVhKCkpCisgICAgICAgIG1fcGFnZS5kcmF3aW5nQXJlYSgp
LT5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCitib29sIFdlYkNocm9tZUNs
aWVudDo6YWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoTGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6
OkZsYWdzIGZsYWdzKQoreworICAgIHJldHVybiBtX3BhZ2UuZHJhd2luZ0FyZWEoKSAmJiBtX3Bh
Z2UuZHJhd2luZ0FyZWEoKS0+YWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoZmxhZ3MpOworfQor
Citib29sIFdlYkNocm9tZUNsaWVudDo6bGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigpIGNvbnN0Cit7
CisgICAgaWYgKG1fcGFnZS5kcmF3aW5nQXJlYSgpKQorICAgICAgICByZXR1cm4gbV9wYWdlLmRy
YXdpbmdBcmVhKCktPmxheWVyVHJlZVN0YXRlSXNGcm96ZW4oKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisKK1JlZlB0cjxTY3JvbGxpbmdD
b29yZGluYXRvcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVTY3JvbGxpbmdDb29yZGluYXRvcihQ
YWdlJiBwYWdlKSBjb25zdAoreworICAgIEFTU0VSVF9VTlVTRUQocGFnZSwgbV9wYWdlLmNvcmVQ
YWdlKCkgPT0gJnBhZ2UpOworICAgIGlmIChtX3BhZ2UuZHJhd2luZ0FyZWEoKS0+dHlwZSgpICE9
IERyYXdpbmdBcmVhVHlwZVJlbW90ZUxheWVyVHJlZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGUoJm1fcGFnZSk7
Cit9CisKKyNlbmRpZgorCisjaWYgKFBMQVRGT1JNKElPUykgJiYgSEFWRShBVktJVCkpIHx8IChQ
TEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkpCisKK2Jvb2wg
V2ViQ2hyb21lQ2xpZW50OjpzdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkKK3sKKyAgICByZXR1cm4gbV9wYWdlLnZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIoKS5zdXBwb3J0c1ZpZGVvRnVsbHNjcmVlbihtb2RlKTsKK30K
Kwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFVwUGxheWJhY2tDb250cm9sc01hbmFnZXIoSFRN
TE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KQoreworICAgIG1fcGFnZS5wbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKCkuc2V0VXBQbGF5YmFja0NvbnRyb2xzTWFuYWdlcihtZWRpYUVsZW1lbnQpOwor
fQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6Y2xlYXJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigp
Cit7CisgICAgbV9wYWdlLnBsYXliYWNrU2Vzc2lvbk1hbmFnZXIoKS5jbGVhclBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyKCk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjplbnRlclZpZGVvRnVs
bHNjcmVlbkZvclZpZGVvRWxlbWVudChIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsZW1lbnQsIEhU
TUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlKQoreworICAgIEFT
U0VSVChtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5v
bmUpOworICAgIG1fcGFnZS52aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyKCkuZW50ZXJWaWRlb0Z1bGxz
Y3JlZW5Gb3JWaWRlb0VsZW1lbnQodmlkZW9FbGVtZW50LCBtb2RlKTsKK30KKwordm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmV4aXRWaWRlb0Z1bGxzY3JlZW5Gb3JWaWRlb0VsZW1lbnQoSFRNTFZpZGVv
RWxlbWVudCYgdmlkZW9FbGVtZW50KQoreworICAgIG1fcGFnZS52aWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyKCkuZXhpdFZpZGVvRnVsbHNjcmVlbkZvclZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQpOwor
fQorCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhpdFZpZGVvRnVsbHNjcmVlblRv
TW9kZVdpdGhvdXRBbmltYXRpb24oSFRNTFZpZGVvRWxlbWVudCYgdmlkZW9FbGVtZW50LCBIVE1M
TWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgdGFyZ2V0TW9kZSkKK3sKKyAg
ICBtX3BhZ2UudmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpLmV4aXRWaWRlb0Z1bGxzY3JlZW5Ub01v
ZGVXaXRob3V0QW5pbWF0aW9uKHZpZGVvRWxlbWVudCwgdGFyZ2V0TW9kZSk7Cit9CisKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorCitib29sIFdlYkNocm9tZUNsaWVudDo6
c3VwcG9ydHNGdWxsU2NyZWVuRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiwgYm9vbCB3aXRoS2V5
Ym9hcmQpCit7CisgICAgcmV0dXJuIG1fcGFnZS5mdWxsU2NyZWVuTWFuYWdlcigpLT5zdXBwb3J0
c0Z1bGxTY3JlZW4od2l0aEtleWJvYXJkKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmVu
dGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBtX3BhZ2Uu
ZnVsbFNjcmVlbk1hbmFnZXIoKS0+ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCgmZWxlbWVudCk7
Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoRWxl
bWVudCogZWxlbWVudCkKK3sKKyAgICBtX3BhZ2UuZnVsbFNjcmVlbk1hbmFnZXIoKS0+ZXhpdEZ1
bGxTY3JlZW5Gb3JFbGVtZW50KGVsZW1lbnQpOworfQorCisjZW5kaWYKKworI2lmIFBMQVRGT1JN
KElPUykKKworRmxvYXRTaXplIFdlYkNocm9tZUNsaWVudDo6c2NyZWVuU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcGFnZS5zY3JlZW5TaXplKCk7Cit9CisKK0Zsb2F0U2l6ZSBXZWJDaHJv
bWVDbGllbnQ6OmF2YWlsYWJsZVNjcmVlblNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bh
Z2UuYXZhaWxhYmxlU2NyZWVuU2l6ZSgpOworfQorCisjZW5kaWYKKwordm9pZCBXZWJDaHJvbWVD
bGllbnQ6OmRpc3BhdGNoVmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKGNvbnN0IFZpZXdwb3J0
QXJndW1lbnRzJiB2aWV3cG9ydEFyZ3VtZW50cykgY29uc3QKK3sKKyAgICBtX3BhZ2Uudmlld3Bv
cnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKHZpZXdwb3J0QXJndW1lbnRzKTsKK30KKwordm9pZCBXZWJD
aHJvbWVDbGllbnQ6Om5vdGlmeVNjcm9sbGVyVGh1bWJJc1Zpc2libGVJblJlY3QoY29uc3QgSW50
UmVjdCYgc2Nyb2xsZXJUaHVtYikKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpOb3RpZnlTY3JvbGxlclRodW1iSXNWaXNpYmxlSW5SZWN0KHNjcm9sbGVyVGh1bWIp
KTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlY29tbWVuZGVkU2Nyb2xsYmFyU3R5bGVE
aWRDaGFuZ2UoU2Nyb2xsYmFyU3R5bGUgbmV3U3R5bGUpCit7CisgICAgbV9wYWdlLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UmVjb21tZW5kZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShz
dGF0aWNfY2FzdDxpbnQzMl90PihuZXdTdHlsZSkpKTsKK30KKworc3RkOjpvcHRpb25hbDxTY3Jv
bGxiYXJPdmVybGF5U3R5bGU+IFdlYkNocm9tZUNsaWVudDo6cHJlZmVycmVkU2Nyb2xsYmFyT3Zl
cmxheVN0eWxlKCkKK3sKKyAgICByZXR1cm4gbV9wYWdlLnNjcm9sbGJhck92ZXJsYXlTdHlsZSgp
OworfQorCitDb2xvciBXZWJDaHJvbWVDbGllbnQ6OnVuZGVybGF5Q29sb3IoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3BhZ2UudW5kZXJsYXlDb2xvcigpOworfQorCit2b2lkIFdlYkNocm9tZUNs
aWVudDo6cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yRGlkQ2hhbmdlKENvbG9yIGJhY2tncm91
bmRDb2xvcikgY29uc3QKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgbV9wYWdlLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yRGlkQ2hhbmdl
KGJhY2tncm91bmRDb2xvcikpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYmFja2dyb3VuZENv
bG9yKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6d2hlZWxFdmVudEhhbmRs
ZXJzQ2hhbmdlZChib29sIGhhc0hhbmRsZXJzKQoreworICAgIG1fcGFnZS53aGVlbEV2ZW50SGFu
ZGxlcnNDaGFuZ2VkKGhhc0hhbmRsZXJzKTsKK30KKworU3RyaW5nIFdlYkNocm9tZUNsaWVudDo6
cGx1Z0luU3RhcnRMYWJlbFRpdGxlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGFnZS5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkucGx1Z0luU3RhcnRMYWJl
bFRpdGxlKG1pbWVUeXBlKTsKK30KKworU3RyaW5nIFdlYkNocm9tZUNsaWVudDo6cGx1Z0luU3Rh
cnRMYWJlbFN1YnRpdGxlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcGFnZS5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkucGx1Z0luU3RhcnRMYWJlbFN1YnRp
dGxlKG1pbWVUeXBlKTsKK30KKworU3RyaW5nIFdlYkNocm9tZUNsaWVudDo6cGx1Z0luRXh0cmFT
dHlsZVNoZWV0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLmluamVjdGVkQnVuZGxlVUlD
bGllbnQoKS5wbHVnSW5FeHRyYVN0eWxlU2hlZXQoKTsKK30KKworU3RyaW5nIFdlYkNocm9tZUNs
aWVudDo6cGx1Z0luRXh0cmFTY3JpcHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UuaW5q
ZWN0ZWRCdW5kbGVVSUNsaWVudCgpLnBsdWdJbkV4dHJhU2NyaXB0KCk7Cit9CisKK3ZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjplbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpCit7CisgICAgbV9wYWdlLnNl
bmQoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6RW5hYmxlU3VkZGVuVGVybWluYXRpb24oKSk7
Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKQor
eworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkRpc2FibGVTdWRk
ZW5UZXJtaW5hdGlvbigpKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZEFkZEhlYWRl
ckxheWVyKEdyYXBoaWNzTGF5ZXImIGhlYWRlclBhcmVudCkKK3sKKyNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCisgICAgaWYgKFBhZ2VCYW5uZXIqIGJhbm5lciA9IG1fcGFnZS5oZWFkZXJQYWdl
QmFubmVyKCkpCisgICAgICAgIGJhbm5lci0+ZGlkQWRkUGFyZW50TGF5ZXIoJmhlYWRlclBhcmVu
dCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShoZWFkZXJQYXJlbnQpOworI2VuZGlmCit9CisK
K3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRBZGRGb290ZXJMYXllcihHcmFwaGljc0xheWVyJiBm
b290ZXJQYXJlbnQpCit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIGlmIChQYWdl
QmFubmVyKiBiYW5uZXIgPSBtX3BhZ2UuZm9vdGVyUGFnZUJhbm5lcigpKQorICAgICAgICBiYW5u
ZXItPmRpZEFkZFBhcmVudExheWVyKCZmb290ZXJQYXJlbnQpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oZm9vdGVyUGFyZW50KTsKKyNlbmRpZgorfQorCitib29sIFdlYkNocm9tZUNsaWVudDo6
c2hvdWxkVXNlVGlsZWRCYWNraW5nRm9yRnJhbWVWaWV3KGNvbnN0IEZyYW1lVmlldyYgZnJhbWVW
aWV3KSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UuZHJhd2luZ0FyZWEoKS0+c2hvdWxkVXNl
VGlsZWRCYWNraW5nRm9yRnJhbWVWaWV3KCZmcmFtZVZpZXcpOworfQorCit2b2lkIFdlYkNocm9t
ZUNsaWVudDo6aXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2UoTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0
ZUZsYWdzIHN0YXRlLCB1aW50NjRfdCBzb3VyY2VFbGVtZW50SUQpCit7CisgICAgbV9wYWdlLnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SXNQbGF5aW5nTWVkaWFEaWRDaGFuZ2Uoc3RhdGUs
IHNvdXJjZUVsZW1lbnRJRCkpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6aGFuZGxlQXV0
b3BsYXlFdmVudChBdXRvcGxheUV2ZW50IGV2ZW50KQoreworICAgIG1fcGFnZS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkhhbmRsZUF1dG9wbGF5RXZlbnQoc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGV2ZW50KSkpOworfQorCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCisKK3ZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpoYXNNZWRpYVNlc3Npb25XaXRoQWN0aXZlTWVkaWFFbGVtZW50c0RpZENo
YW5nZShib29sIHN0YXRlKQoreworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6Okhhc01lZGlhU2Vzc2lvbldpdGhBY3RpdmVNZWRpYUVsZW1lbnRzRGlkQ2hhbmdlKHN0YXRl
KSk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjptZWRpYVNlc3Npb25NZXRhZGF0YURpZENo
YW5nZShjb25zdCBNZWRpYVNlc3Npb25NZXRhZGF0YSYgbWV0YWRhdGEpCit7CisgICAgbV9wYWdl
LnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TWVkaWFTZXNzaW9uTWV0YWRhdGFEaWRDaGFu
Z2UobWV0YWRhdGEpKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmZvY3VzZWRDb250ZW50
TWVkaWFFbGVtZW50RGlkQ2hhbmdlKHVpbnQ2NF90IGVsZW1lbnRJRCkKK3sKKyAgICBtX3BhZ2Uu
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpGb2N1c2VkQ29udGVudE1lZGlhRWxlbWVudERp
ZENoYW5nZShlbGVtZW50SUQpKTsKK30KKworI2VuZGlmCisKKyNpZiBFTkFCTEUoU1VCVExFX0NS
WVBUTykKKworYm9vbCBXZWJDaHJvbWVDbGllbnQ6OndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSkgY29uc3QKK3sKKyAg
ICBib29sIHN1Y2NlZWRlZDsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Oldy
YXBDcnlwdG9LZXkoa2V5KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V3JhcENyeXB0b0tleTo6
UmVwbHkoc3VjY2VlZGVkLCB3cmFwcGVkS2V5KSwgbV9wYWdlLnBhZ2VJRCgpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdWNjZWVkZWQ7Cit9CisKK2Jvb2wgV2ViQ2hyb21l
Q2xpZW50Ojp1bndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFwcGVkS2V5
LCBWZWN0b3I8dWludDhfdD4mIGtleSkgY29uc3QKK3sKKyAgICBib29sIHN1Y2NlZWRlZDsKKyAg
ICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVud3JhcENyeXB0b0tleSh3cmFwcGVk
S2V5KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW53cmFwQ3J5cHRvS2V5OjpSZXBseShzdWNj
ZWVkZWQsIGtleSksIG1fcGFnZS5wYWdlSUQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gc3VjY2VlZGVkOworfQorCisjZW5kaWYKKworI2lmIEVOQUJMRShURUxFUEhPTkVf
TlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oTUFDKQorCit2b2lkIFdlYkNocm9tZUNsaWVu
dDo6aGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soY29uc3QgU3RyaW5nJiBudW1iZXIsIGNvbnN0
IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBtX3BhZ2UuaGFuZGxlVGVsZXBob25lTnVtYmVyQ2xp
Y2sobnVtYmVyLCBwb2ludCk7Cit9CisKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09O
VFJPTFMpCisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xp
Y2soRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHRlbGVw
aG9uZU51bWJlcnMsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBtX3BhZ2UuaGFuZGxl
U2VsZWN0aW9uU2VydmljZUNsaWNrKHNlbGVjdGlvbiwgdGVsZXBob25lTnVtYmVycywgcG9pbnQp
OworfQorCitib29sIFdlYkNocm9tZUNsaWVudDo6aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNl
cyhib29sIGlzVGV4dE9ubHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIChpc1RleHRPbmx5ICYmIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmhhc1NlbGVjdGlvblNlcnZpY2VzKCkpIHx8IFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmhhc1JpY2hDb250ZW50U2VydmljZXMoKTsKK30KKworI2VuZGlmCisK
K2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2Uuc2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VNb3Zl
RXZlbnRzKCk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpoYW5kbGVBdXRvRmlsbEJ1dHRv
bkNsaWNrKEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCkKK3sKKyAgICBSZWZQdHI8QVBJ
OjpPYmplY3Q+IHVzZXJEYXRhOworCisgICAgLy8gTm90aWZ5IHRoZSBidW5kbGUgY2xpZW50Lgor
ICAgIGF1dG8gbm9kZUhhbmRsZSA9IEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVh
dGUoaW5wdXRFbGVtZW50KTsKKyAgICBtX3BhZ2UuaW5qZWN0ZWRCdW5kbGVVSUNsaWVudCgpLmRp
ZENsaWNrQXV0b0ZpbGxCdXR0b24obV9wYWdlLCBub2RlSGFuZGxlLmdldCgpLCB1c2VyRGF0YSk7
CisKKyAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpIYW5kbGVBdXRvRmlsbEJ1dHRvbkNsaWNrKFVzZXJEYXRhKFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0
KCkpLmdldCgpKSkpOworfQorCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkg
JiYgIVBMQVRGT1JNKElPUykKKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmFkZFBsYXliYWNrVGFy
Z2V0UGlja2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2Uuc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBZGRQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChjb250
ZXh0SWQpKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlbW92ZVBsYXliYWNrVGFyZ2V0
UGlja2VyQ2xpZW50KHVpbnQ2NF90IGNvbnRleHRJZCkKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpSZW1vdmVQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudChjb250
ZXh0SWQpKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNob3dQbGF5YmFja1RhcmdldFBp
Y2tlcih1aW50NjRfdCBjb250ZXh0SWQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgYm9vbCBp
c1ZpZGVvKQoreworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLm1haW5GcmFtZSgp
LT52aWV3KCk7CisgICAgRmxvYXRSZWN0IHJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvUm9vdFZp
ZXcoZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHBvc2l0aW9uKSksIEZsb2F0U2l6ZSgpKTsK
KyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93UGxheWJhY2tUYXJn
ZXRQaWNrZXIoY29udGV4dElkLCByZWN0LCBpc1ZpZGVvKSk7Cit9CisKK3ZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpwbGF5YmFja1RhcmdldFBpY2tlckNsaWVudFN0YXRlRGlkQ2hhbmdlKHVpbnQ2NF90
IGNvbnRleHRJZCwgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIHN0YXRlKQoreworICAg
IG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlBsYXliYWNrVGFyZ2V0UGlja2Vy
Q2xpZW50U3RhdGVEaWRDaGFuZ2UoY29udGV4dElkLCBzdGF0ZSkpOworfQorCit2b2lkIFdlYkNo
cm9tZUNsaWVudDo6c2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRN
b2NrTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckVuYWJsZWQoZW5hYmxlZCkpOworfQorCit2b2lk
IFdlYkNocm9tZUNsaWVudDo6c2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJTdGF0ZShj
b25zdCBTdHJpbmcmIG5hbWUsIE1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0OjpTdGF0ZSBzdGF0
ZSkKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRNb2NrTWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlclN0YXRlKG5hbWUsIHN0YXRlKSk7Cit9CisKKyNlbmRpZgor
Cit2b2lkIFdlYkNocm9tZUNsaWVudDo6aW1hZ2VPck1lZGlhRG9jdW1lbnRTaXplQ2hhbmdlZChj
b25zdCBJbnRTaXplJiBuZXdTaXplKQoreworICAgIG1fcGFnZS5pbWFnZU9yTWVkaWFEb2N1bWVu
dFNpemVDaGFuZ2VkKG5ld1NpemUpOworfQorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NU
UkVBTUVSKQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVxdWVzdEluc3RhbGxNaXNzaW5nTWVk
aWFQbHVnaW5zKGNvbnN0IFN0cmluZyYgZGV0YWlscywgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlv
biwgTWVkaWFQbGF5ZXJSZXF1ZXN0SW5zdGFsbE1pc3NpbmdQbHVnaW5zQ2FsbGJhY2smIGNhbGxi
YWNrKQoreworICAgIG1fcGFnZS5yZXF1ZXN0SW5zdGFsbE1pc3NpbmdNZWRpYVBsdWdpbnMoZGV0
YWlscywgZGVzY3JpcHRpb24sIGNhbGxiYWNrKTsKK30KKworI2VuZGlmCisKK3ZvaWQgV2ViQ2hy
b21lQ2xpZW50OjpkaWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJrZXJSZWN0cygpCit7CisgICAgbV9w
YWdlLmZpbmRDb250cm9sbGVyKCkuZGlkSW52YWxpZGF0ZURvY3VtZW50TWFya2VyUmVjdHMoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCA3M2Y5
Y2MyYmNkZGYwMWQ2NDYxMjAwZjc2N2VhZWM2YzlkODFiZWJhLi41NzZjZDc5ZjFmNzc1YTY1MWE5
NWZkZDc3ZDAwZGRhNjkwMjBkNTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTM0Miw2ICsz
NDIsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJrZXJS
ZWN0cygpIGZpbmFsOwogCisgICAgdm9pZCBkaWRDaGFuZ2VDbGlwVG9TYWZlQXJlYShib29sKSBm
aW5hbDsKKwogICAgIFN0cmluZyBtX2NhY2hlZFRvb2xUaXA7CiAgICAgbXV0YWJsZSBSZWZQdHI8
V2ViRnJhbWU+IG1fY2FjaGVkRnJhbWVTZXRMYXJnZXN0RnJhbWU7CiAgICAgbXV0YWJsZSBib29s
IG1fY2FjaGVkTWFpbkZyYW1lSGFzSG9yaXpvbnRhbFNjcm9sbGJhciB7IGZhbHNlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oLm9yaWcgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oLm9yaWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzNmOWNjMmJjZGRmMDFkNjQ2MTIw
MGY3NjdlYWVjNmM5ZDgxYmViYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmgub3JpZwpAQCAtMCwwICsx
LDM1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8V2ViQ29yZS9DaHJvbWVDbGllbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2ViQ2hyb21lQ2xpZW50
IGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkNocm9tZUNsaWVudCB7CitwdWJsaWM6CisgICAgV2Vi
Q2hyb21lQ2xpZW50KFdlYlBhZ2UmKTsKKworICAgIFdlYlBhZ2UmIHBhZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3BhZ2U7IH0KKworcHJpdmF0ZToKKyAgICB+V2ViQ2hyb21lQ2xpZW50KCk7CisKKyAg
ICB2b2lkIGNocm9tZURlc3Ryb3llZCgpIGZpbmFsOworICAgIAorICAgIHZvaWQgc2V0V2luZG93
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3Qgd2luZG93UmVjdCgpIGZpbmFsOworICAgIAorICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBw
YWdlUmVjdCgpIGZpbmFsOworICAgIAorICAgIHZvaWQgZm9jdXMoKSBmaW5hbDsKKyAgICB2b2lk
IHVuZm9jdXMoKSBmaW5hbDsKKyAgICAKKyAgICBib29sIGNhblRha2VGb2N1cyhXZWJDb3JlOjpG
b2N1c0RpcmVjdGlvbikgZmluYWw7CisgICAgdm9pZCB0YWtlRm9jdXMoV2ViQ29yZTo6Rm9jdXNE
aXJlY3Rpb24pIGZpbmFsOworCisgICAgdm9pZCBmb2N1c2VkRWxlbWVudENoYW5nZWQoV2ViQ29y
ZTo6RWxlbWVudCopIGZpbmFsOworICAgIHZvaWQgZm9jdXNlZEZyYW1lQ2hhbmdlZChXZWJDb3Jl
OjpGcmFtZSopIGZpbmFsOworCisgICAgLy8gVGhlIEZyYW1lIHBvaW50ZXIgcHJvdmlkZXMgdGhl
IENocm9tZUNsaWVudCB3aXRoIGNvbnRleHQgYWJvdXQgd2hpY2gKKyAgICAvLyBGcmFtZSB3YW50
cyB0byBjcmVhdGUgdGhlIG5ldyBQYWdlLiAgQWxzbywgdGhlIG5ld2x5IGNyZWF0ZWQgd2luZG93
CisgICAgLy8gc2hvdWxkIG5vdCBiZSBzaG93biB0byB0aGUgdXNlciB1bnRpbCB0aGUgQ2hyb21l
Q2xpZW50IG9mIHRoZSBuZXdseQorICAgIC8vIGNyZWF0ZWQgUGFnZSBoYXMgaXRzIHNob3cgbWV0
aG9kIGNhbGxlZC4KKyAgICBXZWJDb3JlOjpQYWdlKiBjcmVhdGVXaW5kb3coV2ViQ29yZTo6RnJh
bWUmLCBjb25zdCBXZWJDb3JlOjpGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6V2lu
ZG93RmVhdHVyZXMmLCBjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0aW9uJikgZmluYWw7Cisg
ICAgdm9pZCBzaG93KCkgZmluYWw7CisgICAgCisgICAgYm9vbCBjYW5SdW5Nb2RhbCgpIGZpbmFs
OworICAgIHZvaWQgcnVuTW9kYWwoKSBmaW5hbDsKKworICAgIHZvaWQgcmVwb3J0UHJvY2Vzc0NQ
VVRpbWUoaW50NjRfdCwgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZUZvckNQVVNhbXBsaW5nKSBmaW5h
bDsKKyAgICAKKyAgICB2b2lkIHNldFRvb2xiYXJzVmlzaWJsZShib29sKSBmaW5hbDsKKyAgICBi
b29sIHRvb2xiYXJzVmlzaWJsZSgpIGZpbmFsOworICAgIAorICAgIHZvaWQgc2V0U3RhdHVzYmFy
VmlzaWJsZShib29sKSBmaW5hbDsKKyAgICBib29sIHN0YXR1c2JhclZpc2libGUoKSBmaW5hbDsK
KyAgICAKKyAgICB2b2lkIHNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpIGZpbmFsOworICAgIGJv
b2wgc2Nyb2xsYmFyc1Zpc2libGUoKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHNldE1lbnViYXJW
aXNpYmxlKGJvb2wpIGZpbmFsOworICAgIGJvb2wgbWVudWJhclZpc2libGUoKSBmaW5hbDsKKyAg
ICAKKyAgICB2b2lkIHNldFJlc2l6YWJsZShib29sKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoSlNDOjpNZXNzYWdlU291cmNlLCBKU0M6Ok1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1
bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpIGZpbmFsOworICAgIAorICAgIGJvb2wg
Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgZmluYWw7CisgICAgYm9vbCBydW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBXZWJDb3JlOjpGcmFt
ZSYpIGZpbmFsOworICAgIAorICAgIHZvaWQgY2xvc2VXaW5kb3dTb29uKCkgZmluYWw7CisgICAg
CisgICAgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBTdHJp
bmcmKSBmaW5hbDsKKyAgICBib29sIHJ1bkphdmFTY3JpcHRDb25maXJtKFdlYkNvcmU6OkZyYW1l
JiwgY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgYm9vbCBydW5KYXZhU2NyaXB0UHJvbXB0KFdl
YkNvcmU6OkZyYW1lJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1
bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpIGZpbmFsOworICAgIHZvaWQgc2V0U3RhdHVzYmFyVGV4
dChjb25zdCBTdHJpbmcmKSBmaW5hbDsKKworICAgIFdlYkNvcmU6OktleWJvYXJkVUlNb2RlIGtl
eWJvYXJkVUlNb2RlKCkgZmluYWw7CisKKyAgICAvLyBIb3N0V2luZG93IG1lbWJlciBmdW5jdGlv
biBmaW5hbHMuCisgICAgdm9pZCBpbnZhbGlkYXRlUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRz
Rm9yU2xvd1Njcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgZmluYWw7CisgICAgdm9pZCBz
Y3JvbGwoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KSBm
aW5hbDsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2b2lkIGRlbGVnYXRl
ZFNjcm9sbFJlcXVlc3RlZChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2Nyb2xsT2Zmc2V0KSBm
aW5hbDsKKyNlbmRpZgorCisgICAgV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuVG9Sb290Vmlldyhj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIFdlYkNvcmU6OkludFJl
Y3Qgcm9vdFZpZXdUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3QgZmluYWw7
CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgV2ViQ29yZTo6SW50UG9pbnQgYWNjZXNzaWJpbGl0
eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdCBmaW5hbDsK
KyAgICBXZWJDb3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCisgICAgUGxhdGZvcm1Q
YWdlQ2xpZW50IHBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY29u
dGVudHNTaXplQ2hhbmdlZChXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgY29uc3QgZmluYWw7IC8vIEN1cnJlbnRseSBvbmx5IE1hYyBoYXMgYSBub24g
ZW1wdHkgaW1wbGVtZW50YXRpb24uCisKKyAgICBib29sIHNob3VsZFVuYXZhaWxhYmxlUGx1Z2lu
TWVzc2FnZUJlQnV0dG9uKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2
YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgZmluYWw7CisgICAgdm9pZCB1bmF2YWlsYWJsZVBsdWdp
bkJ1dHRvbkNsaWNrZWQoV2ViQ29yZTo6RWxlbWVudCYsIFdlYkNvcmU6OlJlbmRlckVtYmVkZGVk
T2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgZmluYWw7CisKKyAgICB2
b2lkIHNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBtb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiwgdW5zaWdu
ZWQgbW9kaWZpZXJGbGFncykgZmluYWw7CisKKyAgICB2b2lkIHNldFRvb2xUaXAoY29uc3QgU3Ry
aW5nJiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbikgZmluYWw7CisgICAgCisgICAgdm9pZCBwcmlu
dChXZWJDb3JlOjpGcmFtZSYpIGZpbmFsOworCisgICAgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVv
dGEoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgV2ViQ29yZTo6
RGF0YWJhc2VEZXRhaWxzKSBmaW5hbDsKKworICAgIHZvaWQgcmVhY2hlZE1heEFwcENhY2hlU2l6
ZShpbnQ2NF90IHNwYWNlTmVlZGVkKSBmaW5hbDsKKyAgICB2b2lkIHJlYWNoZWRBcHBsaWNhdGlv
bkNhY2hlT3JpZ2luUXVvdGEoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mLCBpbnQ2NF90IHNwYWNl
TmVlZGVkKSBmaW5hbDsKKworI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKyAgICB2b2lk
IGFubm90YXRlZFJlZ2lvbnNDaGFuZ2VkKCkgZmluYWw7CisjZW5kaWYKKworICAgIGJvb2wgc2hv
dWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxlRm9yVXBsb2FkKGNvbnN0IFN0cmluZyYgcGF0aCwg
U3RyaW5nJiBnZW5lcmF0ZWRGaWxlbmFtZSkgZmluYWw7CisgICAgU3RyaW5nIGdlbmVyYXRlUmVw
bGFjZW1lbnRGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkgZmluYWw7CisgICAgCisjaWYgRU5BQkxF
KElOUFVUX1RZUEVfQ09MT1IpCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkNvbG9yQ2hv
b3Nlcj4gY3JlYXRlQ29sb3JDaG9vc2VyKFdlYkNvcmU6OkNvbG9yQ2hvb3NlckNsaWVudCYsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisjZW5kaWYKKworI2lmIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQorICAgIHZvaWQgZGlkUHJldmVudERlZmF1bHRGb3JFdmVudCgpIGZpbmFsOwor
I2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBkaWRSZWNlaXZlTW9iaWxlRG9j
VHlwZShib29sKSBmaW5hbDsKKyAgICB2b2lkIHNldE5lZWRzU2Nyb2xsTm90aWZpY2F0aW9ucyhX
ZWJDb3JlOjpGcmFtZSYsIGJvb2wpIGZpbmFsOworICAgIHZvaWQgb2JzZXJ2ZWRDb250ZW50Q2hh
bmdlKFdlYkNvcmU6OkZyYW1lJikgZmluYWw7CisgICAgdm9pZCBjbGVhckNvbnRlbnRDaGFuZ2VP
YnNlcnZlcnMoV2ViQ29yZTo6RnJhbWUmKSBmaW5hbDsKKyAgICB2b2lkIG5vdGlmeVJldmVhbGVk
U2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZShXZWJDb3JlOjpGcmFtZSYpIGZpbmFsOworICAgIGJv
b2wgaXNTdG9wcGluZygpIGZpbmFsOworCisgICAgdm9pZCBkaWRMYXlvdXQoTGF5b3V0VHlwZSA9
IE5vcm1hbExheW91dCkgZmluYWw7CisgICAgdm9pZCBkaWRTdGFydE92ZXJmbG93U2Nyb2xsKCkg
ZmluYWw7CisgICAgdm9pZCBkaWRFbmRPdmVyZmxvd1Njcm9sbCgpIGZpbmFsOworICAgIGJvb2wg
aGFzU3RhYmxlUGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgZmluYWw7CisKKyAgICAvLyBGSVhNRTog
U2VlIDxyZGFyOi8vcHJvYmxlbS81OTc1NTU5PgorICAgIHZvaWQgc3VwcHJlc3NGb3JtTm90aWZp
Y2F0aW9ucygpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZUZvcm1Ob3RpZmljYXRpb25zKCkgZmlu
YWw7CisKKyAgICB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoV2ViQ29yZTo6Tm9kZSos
IFBsYXRmb3JtTGF5ZXIqIHNjcm9sbGluZ0xheWVyLCBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xh
eWVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxTaXplLCBib29sIGFsbG93SG9yaXpv
bnRhbFNjcm9sbGJhciwgYm9vbCBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyKSBmaW5hbDsKKyAgICB2
b2lkIHJlbW92ZVNjcm9sbGluZ0xheWVyKFdlYkNvcmU6Ok5vZGUqLCBQbGF0Zm9ybUxheWVyKiBz
Y3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciogY29udGVudHNMYXllcikgZmluYWw7CisKKyAg
ICB2b2lkIHdlYkFwcE9yaWVudGF0aW9uc1VwZGF0ZWQoKSBmaW5hbDsKKyAgICB2b2lkIHNob3dQ
bGF5YmFja1RhcmdldFBpY2tlcihib29sIGhhc1ZpZGVvKSBmaW5hbDsKKworICAgIFNlY29uZHMg
ZXZlbnRUaHJvdHRsaW5nRGVsYXkoKSBmaW5hbDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE9SSUVO
VEFUSU9OX0VWRU5UUykKKyAgICBpbnQgZGV2aWNlT3JpZW50YXRpb24oKSBjb25zdCBmaW5hbDsK
KyNlbmRpZgorCisgICAgdm9pZCBydW5PcGVuUGFuZWwoV2ViQ29yZTo6RnJhbWUmLCBXZWJDb3Jl
OjpGaWxlQ2hvb3NlciYpIGZpbmFsOworICAgIHZvaWQgbG9hZEljb25Gb3JGaWxlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIFdlYkNvcmU6OkZpbGVJY29uTG9hZGVyJikgZmluYWw7CisKKyNpZiAh
UExBVEZPUk0oSU9TKQorICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYp
IGZpbmFsOworICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIGZp
bmFsOworI2VuZGlmCisKKyNpZiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQor
ICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBmaW5hbDsKKyNlbmRpZgorICAgIAorI2lmIEVO
QUJMRShQT0lOVEVSX0xPQ0spCisgICAgYm9vbCByZXF1ZXN0UG9pbnRlckxvY2soKSBmaW5hbDsK
KyAgICB2b2lkIHJlcXVlc3RQb2ludGVyVW5sb2NrKCkgZmluYWw7CisjZW5kaWYKKworICAgIHZv
aWQgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6
RWxlbWVudD4+JikgZmluYWw7CisgICAgYm9vbCBzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzKCkg
ZmluYWw7CisKKyAgICBib29sIHNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkg
ZmluYWw7CisgICAgYm9vbCBzZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGly
ZWN0aW9uKCkgZmluYWw7CisgICAgYm9vbCBoYXNPcGVuZWRQb3B1cCgpIGNvbnN0IGZpbmFsOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpQb3B1cE1lbnU+IGNyZWF0ZVBvcHVwTWVudShXZWJDb3JlOjpQ
b3B1cE1lbnVDbGllbnQmKSBjb25zdCBmaW5hbDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2VhcmNo
UG9wdXBNZW51PiBjcmVhdGVTZWFyY2hQb3B1cE1lbnUoV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50
JikgY29uc3QgZmluYWw7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3Jh
cGhpY3NMYXllckZhY3RvcnkoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKFdlYkNvcmU6OkZyYW1lJiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGZpbmFs
OworICAgIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1l
JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGZpbmFsOworICAgIHZvaWQgc2V0TmVlZHNPbmVT
aG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIGZpbmFsOworICAgIHZvaWQgc2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyRmx1c2goKSBmaW5hbDsKKyAgICBib29sIGFkanVzdExheWVyRmx1c2hUaHJv
dHRsaW5nKFdlYkNvcmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgZmluYWw7CisK
KyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQorICAgIFJl
ZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNo
TW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgZmluYWw7CisjZW5kaWYK
KworICAgIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJz
KCkgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3Np
dGluZ1RyaWdnZXJGbGFncz4oCisgICAgICAgICAgICBUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyIHwK
KyAgICAgICAgICAgIFZpZGVvVHJpZ2dlciB8CisgICAgICAgICAgICBQbHVnaW5UcmlnZ2VyfAor
ICAgICAgICAgICAgQ2FudmFzVHJpZ2dlciB8CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAg
ICAgQW5pbWF0ZWRPcGFjaXR5VHJpZ2dlciB8IC8vIEFsbG93IG9wYWNpdHkgYW5pbWF0aW9ucyB0
byB0cmlnZ2VyIGNvbXBvc2l0aW5nIG1vZGUgZm9yIGlQaG9uZTogPHJkYXI6Ly9wcm9ibGVtLzc4
MzA2Nzc+CisjZW5kaWYKKyAgICAgICAgICAgIEFuaW1hdGlvblRyaWdnZXIpOworICAgIH0KKwor
ICAgIGJvb2wgbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigpIGNvbnN0IGZpbmFsOworCisjaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRp
bmF0b3I+IGNyZWF0ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yKFdlYkNvcmU6OlBhZ2UmKSBjb25zdCBm
aW5hbDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgZWxlbWVudERpZFJl
Zm9jdXMoV2ViQ29yZTo6RWxlbWVudCYpIGZpbmFsOworI2VuZGlmCisKKyNpZiAoUExBVEZPUk0o
SU9TKSAmJiBIQVZFKEFWS0lUKSkgfHwgKFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKSkKKyAgICBib29sIHN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSkgZmluYWw7Cisg
ICAgdm9pZCBzZXRVcFBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQmKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyUGxheWJhY2tDb250cm9sc01hbmFnZXIoKSBm
aW5hbDsKKyAgICB2b2lkIGVudGVyVmlkZW9GdWxsc2NyZWVuRm9yVmlkZW9FbGVtZW50KFdlYkNv
cmU6OkhUTUxWaWRlb0VsZW1lbnQmLCBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGUpIGZpbmFsOworICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlbkZv
clZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50JikgZmluYWw7CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQor
ICAgIHZvaWQgZXhpdFZpZGVvRnVsbHNjcmVlblRvTW9kZVdpdGhvdXRBbmltYXRpb24oV2ViQ29y
ZTo6SFRNTFZpZGVvRWxlbWVudCYsIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2NyZWVuTW9kZSkgZmluYWw7CisjZW5kaWYKKworI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKKyAgICBib29sIHN1cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1lbnQoY29uc3QgV2ViQ29y
ZTo6RWxlbWVudCYsIGJvb2wgd2l0aEtleWJvYXJkKSBmaW5hbDsKKyAgICB2b2lkIGVudGVyRnVs
bFNjcmVlbkZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCYpIGZpbmFsOworICAgIHZvaWQgZXhp
dEZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqKSBmaW5hbDsKKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCBlbGVtZW50RGlkRm9jdXMoV2ViQ29yZTo6
RWxlbWVudCYpIGZpbmFsOworICAgIHZvaWQgZWxlbWVudERpZEJsdXIoV2ViQ29yZTo6RWxlbWVu
dCYpIGZpbmFsOworCisgICAgdm9pZCBtYWtlRmlyc3RSZXNwb25kZXIoKSBmaW5hbDsKKyNlbmRp
ZgorCisgICAgdm9pZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpIGZpbmFsOworICAgIHZvaWQg
ZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCkgZmluYWw7CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgV2ViQ29yZTo6RmxvYXRTaXplIHNjcmVlblNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBXZWJD
b3JlOjpGbG9hdFNpemUgYXZhaWxhYmxlU2NyZWVuU2l6ZSgpIGNvbnN0IGZpbmFsOworI2VuZGlm
CisKKyAgICB2b2lkIGRpc3BhdGNoVmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKGNvbnN0IFdl
YkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIG5vdGlm
eVNjcm9sbGVyVGh1bWJJc1Zpc2libGVJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGZp
bmFsOworICAgIHZvaWQgcmVjb21tZW5kZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShXZWJDb3Jl
OjpTY3JvbGxiYXJTdHlsZSBuZXdTdHlsZSkgZmluYWw7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHlsZT4gcHJlZmVycmVkU2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKCkgZmluYWw7CisKKyAgICBXZWJDb3JlOjpDb2xvciB1bmRlcmxheUNvbG9yKCkgY29uc3Qg
ZmluYWw7CisKKyAgICB2b2lkIHBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvckRpZENoYW5nZShX
ZWJDb3JlOjpDb2xvcikgY29uc3QgZmluYWw7CisgICAgCisgICAgdm9pZCB3aGVlbEV2ZW50SGFu
ZGxlcnNDaGFuZ2VkKGJvb2wpIGZpbmFsOworCisgICAgU3RyaW5nIHBsdWdJblN0YXJ0TGFiZWxU
aXRsZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdCBmaW5hbDsKKyAgICBTdHJpbmcgcGx1
Z0luU3RhcnRMYWJlbFN1YnRpdGxlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0IGZpbmFs
OworICAgIFN0cmluZyBwbHVnSW5FeHRyYVN0eWxlU2hlZXQoKSBjb25zdCBmaW5hbDsKKyAgICBT
dHJpbmcgcGx1Z0luRXh0cmFTY3JpcHQoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgZGlkQWRk
SGVhZGVyTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciYpIGZpbmFsOworICAgIHZvaWQgZGlk
QWRkRm9vdGVyTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciYpIGZpbmFsOworCisgICAgYm9v
bCBzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXcoY29uc3QgV2ViQ29yZTo6RnJhbWVW
aWV3JikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGlzUGxheWluZ01lZGlhRGlkQ2hhbmdlKFdl
YkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncywgdWludDY0X3QpIGZpbmFsOwor
ICAgIHZvaWQgaGFuZGxlQXV0b3BsYXlFdmVudChXZWJDb3JlOjpBdXRvcGxheUV2ZW50KSBmaW5h
bDsKKworI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKQorICAgIHZvaWQgaGFzTWVkaWFTZXNzaW9u
V2l0aEFjdGl2ZU1lZGlhRWxlbWVudHNEaWRDaGFuZ2UoYm9vbCkgZmluYWw7CisgICAgdm9pZCBt
ZWRpYVNlc3Npb25NZXRhZGF0YURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpNZWRpYVNlc3Npb25N
ZXRhZGF0YSYpIGZpbmFsOworICAgIHZvaWQgZm9jdXNlZENvbnRlbnRNZWRpYUVsZW1lbnREaWRD
aGFuZ2UodWludDY0X3QpIGZpbmFsOworI2VuZGlmCisKKyNpZiBFTkFCTEUoU1VCVExFX0NSWVBU
TykKKyAgICBib29sIHdyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgVmVjdG9y
PHVpbnQ4X3Q+JikgY29uc3QgZmluYWw7CisgICAgYm9vbCB1bndyYXBDcnlwdG9LZXkoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiwgVmVjdG9yPHVpbnQ4X3Q+JikgY29uc3QgZmluYWw7CisjZW5kaWYK
KworI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oTUFD
KQorICAgIHZvaWQgaGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soY29uc3QgU3RyaW5nJiBudW1i
ZXIsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgZmluYWw7CisjZW5kaWYKKworI2lmIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQorICAgIHZvaWQgaGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNr
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHRlbGVwaG9u
ZU51bWJlcnMsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgZmluYWw7CisgICAgYm9vbCBoYXNS
ZWxldmFudFNlbGVjdGlvblNlcnZpY2VzKGJvb2wgaXNUZXh0T25seSkgY29uc3QgZmluYWw7Cisj
ZW5kaWYKKworICAgIGJvb2wgc2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRzKCkgY29u
c3QgZmluYWw7CisKKyAgICB2b2lkIGhhbmRsZUF1dG9GaWxsQnV0dG9uQ2xpY2soV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudCYpIGZpbmFsOworCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNL
X1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykKKyAgICB2b2lkIGFkZFBsYXliYWNrVGFyZ2V0UGlj
a2VyQ2xpZW50KHVpbnQ2NF90IC8qY29udGV4dElkKi8pIGZpbmFsOworICAgIHZvaWQgcmVtb3Zl
UGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQodWludDY0X3QgLypjb250ZXh0SWQqLykgZmluYWw7
CisgICAgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIodWludDY0X3QgY29udGV4dElkLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wpIGZpbmFsOworICAgIHZvaWQgcGxheWJhY2tU
YXJnZXRQaWNrZXJDbGllbnRTdGF0ZURpZENoYW5nZSh1aW50NjRfdCwgV2ViQ29yZTo6TWVkaWFQ
cm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzKSBmaW5hbDsKKyAgICB2b2lkIHNldE1vY2tNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyRW5hYmxlZChib29sKSBmaW5hbDsKKyAgICB2b2lkIHNldE1vY2tN
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyU3RhdGUoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6TWVk
aWFQbGF5YmFja1RhcmdldENvbnRleHQ6OlN0YXRlKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9p
ZCBpbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KSBmaW5hbDsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpJY29uPiBjcmVhdGVJY29uRm9yRmlsZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykgZmluYWw7CisKKyNpZiBFTkFCTEUoVklE
RU8pICYmIFVTRShHU1RSRUFNRVIpCisgICAgdm9pZCByZXF1ZXN0SW5zdGFsbE1pc3NpbmdNZWRp
YVBsdWdpbnMoY29uc3QgU3RyaW5nJiAvKmRldGFpbHMqLywgY29uc3QgU3RyaW5nJiAvKmRlc2Ny
aXB0aW9uKi8sIFdlYkNvcmU6Ok1lZGlhUGxheWVyUmVxdWVzdEluc3RhbGxNaXNzaW5nUGx1Z2lu
c0NhbGxiYWNrJikgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgZGlkSW52YWxpZGF0ZURvY3Vt
ZW50TWFya2VyUmVjdHMoKSBmaW5hbDsKKworICAgIFN0cmluZyBtX2NhY2hlZFRvb2xUaXA7Cisg
ICAgbXV0YWJsZSBSZWZQdHI8V2ViRnJhbWU+IG1fY2FjaGVkRnJhbWVTZXRMYXJnZXN0RnJhbWU7
CisgICAgbXV0YWJsZSBib29sIG1fY2FjaGVkTWFpbkZyYW1lSGFzSG9yaXpvbnRhbFNjcm9sbGJh
ciB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBib29sIG1fY2FjaGVkTWFpbkZyYW1lSGFzVmVydGlj
YWxTY3JvbGxiYXIgeyBmYWxzZSB9OworCisgICAgV2ViUGFnZSYgbV9wYWdlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggMGFjN2I4M2YzYWViMzBmNDhkNzRlZDdmMDI2
MGFhYWU3NDE5ZDk5My4uNGIxMzVkMDRhMzM0MjBkMWI2YzNmNDg1MzFjY2JlNTU5YjgxN2E1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbQpAQCAtMzA0NSw2ICszMDQ1LDggQEAgdm9pZCBXZWJQYWdlOjp2aWV3cG9ydENvbmZp
Z3VyYXRpb25DaGFuZ2VkKCkKICAgICB1cGRhdGVWaWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVu
aXRzKCk7CiAKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9ICptYWluRnJhbWVWaWV3KCk7Cisg
ICAgZnJhbWVWaWV3LnNldENsaXBUb1NhZmVBcmVhKG1fdmlld3BvcnRDb25maWd1cmF0aW9uLmNs
aXBUb1NhZmVBcmVhKCkpOworCiAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBmcmFtZVZp
ZXcuc2Nyb2xsUG9zaXRpb24oKTsKICAgICBpZiAoIW1faGFzUmVjZWl2ZWRWaXNpYmxlQ29udGVu
dFJlY3RzQWZ0ZXJEaWRDb21taXRMb2FkKSB7CiAgICAgICAgIEZsb2F0U2l6ZSBtaW5pbXVtTGF5
b3V0U2l6ZUluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzID0gbV92aWV3cG9ydENvbmZpZ3VyYXRpb24u
bWluaW11bUxheW91dFNpemUoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCA2MzYxZWYyYmE3NWFjZmY1M2NkOTE2YTAyNDQxZTZiOTc1ZjYxNzc5
Li5kNWZjZDQzNWJhN2IwODY0YjhiZjIyNGIwMmNiY2ZjYzQ2YzFmYWZmIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIw
MTctMDQtMTcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUHJvdmlkZSBhIHZpZXdwb3J0IHBhcmFtZXRlciB0byBkaXNhYmxlIGNsaXBwaW5nIHRvIHRo
ZSBzYWZlIGFyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDc2NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE1NjQ2MzQ+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9p
b3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRy
b2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKToKKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL1VJ
U2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsOgorICAgICAgICAq
IFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6c2V0T2JzY3VyZWRJbnNldHMpOgor
ICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJv
bGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9T
Lm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0YXRlVG9D
b25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6c2V0
T2JzY3VyZWRJbnNldHMpOgorICAgICAgICBBZGQgYSBVSVNjcmlwdENvbnRyb2xsZXIgbWVjaGFu
aXNtIHRvIGluc3RhbGwgb2JzY3VyZWQgaW5zZXRzCisgICAgICAgIG9uIHRoZSB3ZWIgdmlldy4K
KwogMjAxNy0wNC0xNyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgd2Via2l0cHk6IENvcnJlY3QgcG9sbCB3aGVuIGtpbGxpbmcgU2VydmVyUHJvY2Vzcwpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklP
Uy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0K
aW5kZXggNDAzYjU5YjQxZDM1OTlkNThhMjM2NTk5Mzg4MjNmNjM3MzgyNTcyNi4uYjBlMDRkZDY2
YTkxM2Q2NmEwNGI5ZjhkMjhkMjc0ODU2NzFjZDZjNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCkBAIC0zMTYsNiArMzE2LDEwIEBA
IHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjphZGRWaWV3VG9XaW5kb3coSlNWYWx1ZVJlZikKIHsK
IH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9ic2N1cmVkSW5zZXRzKGRvdWJsZSwg
ZG91YmxlLCBkb3VibGUsIGRvdWJsZSkKK3sKK30KKwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQv
QmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQv
VUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKaW5kZXggZjY2
YWUxNTIyZjUxNjE3MDdjYzdmMWY4NGQ0Yzg4MWE5MmRjMmJmMS4uZGJhNDU2ZWJjYjFlM2Y5ODdk
ODliMjc4NmVlNTNmYmRjOWFlMmFiYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJl
ZC9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbAorKysgYi9U
b29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENv
bnRyb2xsZXIuaWRsCkBAIC0yMzIsNCArMjMyLDYgQEAgaW50ZXJmYWNlIFVJU2NyaXB0Q29udHJv
bGxlciB7CiAgICAgdm9pZCBhZGRWaWV3VG9XaW5kb3cob2JqZWN0IGNhbGxiYWNrKTsKIAogICAg
IHZvaWQgb3ZlcnJpZGVQcmVmZXJlbmNlKERPTVN0cmluZyBwcmVmZXJlbmNlLCBET01TdHJpbmcg
dmFsdWUpOworCisgICAgdm9pZCBzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3VibGUg
cmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KTsKIH07CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3Bw
IGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9s
bGVyLmNwcAppbmRleCA2MTJjOWUyOWYxZGEyNGUyMTg4NDY0MDVjODE0MjBlNmFiZGI4MjNmLi4w
ZjFmY2MxZDQ5ZjIxNmUzNWM3MWY4NmZhZjg4NmU4YWE0OTk3NTljIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29u
dHJvbGxlci5jcHAKQEAgLTM5OSw2ICszOTksMTAgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IFVJU2NyaXB0Q29udHJvbGxlcjo6YWNjZXNzaWJpbGl0eVNwZWFrU2VsZWN0aW9uQ29udGVudCgK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldE9i
c2N1cmVkSW5zZXRzKGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSwgZG91
YmxlIGxlZnQpCit7Cit9CisKICNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250
cm9sbGVyLmggYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlw
dENvbnRyb2xsZXIuaAppbmRleCA0NmMyOGIxNDAxZGQ0NjQxNzY0NGFhNzY2NzRjYWFjM2IxYmQ0
Y2E5Li42NjI3Mzg4N2I5ZTZhYjk5MTZiNTlhOTE4OWEyMjFiMTA4NGQ3YTMwIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xs
ZXIuaAorKysgYi9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlw
dENvbnRyb2xsZXIuaApAQCAtMTU2LDYgKzE1Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92
ZVZpZXdGcm9tV2luZG93KEpTVmFsdWVSZWYpOwogICAgIHZvaWQgYWRkVmlld1RvV2luZG93KEpT
VmFsdWVSZWYpOwogCisgICAgdm9pZCBzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3Vi
bGUgcmlnaHQsIGRvdWJsZSBib3R0b20sIGRvdWJsZSBsZWZ0KTsKKwogcHJpdmF0ZToKICAgICBV
SVNjcmlwdENvbnRyb2xsZXIoVUlTY3JpcHRDb250ZXh0Jik7CiAgICAgCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCmluZGV4IDdjMzUxZjgyZjg2
N2JkYjdlMmQxMDI5OTNkNmEwMWZmMzU4YjYwNDIuLmEwZDExMmY1NjMyNjQwYjRmNzJmMWU3MmZh
OGY2YmM2YjkwMGUyYjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rl
c3RDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RD
b250cm9sbGVySU9TLm1tCkBAIC04NSw2ICs4NSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgICAgIFtzY3JvbGxWaWV3
IF9yZW1vdmVBbGxBbmltYXRpb25zOllFU107CiAgICAgICAgIFtzY3JvbGxWaWV3IHNldFpvb21T
Y2FsZToxIGFuaW1hdGVkOk5PXTsKICAgICAgICAgW3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNl
dDpDR1BvaW50WmVyb107CisKKyAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBVSUVk
Z2VJbnNldHNaZXJvOworICAgICAgICB3ZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKS5fb2JzY3VyZWRJ
bnNldHMgPSBVSUVkZ2VJbnNldHNaZXJvOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IGNlNjdmNWU1
NDM5Zjg3Yzc1ZDljYTY1ZTI0NjRjZmVmZjZhMzhkZDYuLjU3YTE5NTQ5ZDlkODkzZjJlMmQ4MjQy
NjRjMTYwN2YzMGM1ZjJkYmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTY2OCw2ICs2NjgsMTQgQEAgdm9pZCBVSVNj
cmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtQ2xlYXJBbGxDYWxsYmFja3MoKQogICAgIHdlYlZpZXcu
ZGlkRW5kU2Nyb2xsaW5nQ2FsbGJhY2sgPSBuaWw7CiB9CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9s
bGVyOjpzZXRPYnNjdXJlZEluc2V0cyhkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBi
b3R0b20sIGRvdWJsZSBsZWZ0KQoreworICAgIFVJRWRnZUluc2V0cyBpbnNldHMgPSBVSUVkZ2VJ
bnNldHNNYWtlKHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCk7CisgICAgVGVzdFJ1bm5lcldLV2Vi
VmlldyAqd2ViVmlldyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygp
LT5wbGF0Zm9ybVZpZXcoKTsKKyAgICB3ZWJWaWV3LnNjcm9sbFZpZXcuY29udGVudEluc2V0ID0g
aW5zZXRzOworICAgIHdlYlZpZXcuX29ic2N1cmVkSW5zZXRzID0gaW5zZXRzOworfQorCiB9CiAK
ICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZTllMTdkMTVjNTMyNTA1ZDAzODlmNjUw
MTY5Yzk2YTNiMzY2OTRlZC4uZWI1NDA5MDM4NzNkZGExOTc1YzYxNmFkMThhODg1YWRiNGNhMGEy
ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE3LTA0LTE3ICBUaW0gSG9ydG9uICA8dGltb3Ro
eV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2aWV3cG9ydCBwYXJhbWV0
ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzMxNTY0NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEt
bm8tZ2V0cy1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0aWxl
ZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10
aWxlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1j
bGlwLXRvLXNhZmUtYXJlYS15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUt
YXJlYS15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbDogQWRkZWQuCisKIDIwMTctMDQtMTcg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIExheW91dFRlc3R3
ZWJydGMvYXVkaW8tcmVwbGFjZS10cmFjay5odG1sIGlzIGEgZmxha3kgZmFpbHVyZQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZl
LWFyZWEtbm8tZ2V0cy1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdGls
ZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEtbm8tZ2V0cy1tYXJnaW4t
dGlsZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3NTBiZDNkYTA3NDMyMjIxZDk0MGIxYzAx
MzhkYTFkMmY4ODJkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3
aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10aWxlcy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMyBAQAorKEdyYXBoaWNzTGF5ZXIKKyAgKGFuY2hvciAw
LjAwIDAuMDApCisgIChib3VuZHMgMzIwLjAwIDU0OC4wMCkKKyAgKHZpc2libGUgcmVjdCAwLjAw
LCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAgKGNvdmVyYWdlIHJlY3QgLTQwLjAwLCAtMTAuMDAg
MzIwLjAwIHggNTQ4LjAwKQorICAoaW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisgIChjb250
ZW50c1NjYWxlIDIuMDApCisgIChjaGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAg
IChib3VuZHMgMzIwLjAwIDU0OC4wMCkKKyAgICAgIChjb250ZW50c09wYXF1ZSAxKQorICAgICAg
KHZpc2libGUgcmVjdCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAgICAgIChjb3ZlcmFn
ZSByZWN0IC00MC4wMCwgLTEwLjAwIDU3Ni4wMCB4IDgwNC4wMCkKKyAgICAgIChpbnRlcnNlY3Rz
IGNvdmVyYWdlIHJlY3QgMSkKKyAgICAgIChjb250ZW50c1NjYWxlIDIuMDApCisgICAgICAodGls
ZSBjYWNoZSBjb3ZlcmFnZSAtNTEyLCAtNTEyIDEzNDQgeCAxNTcyKQorICAgICAgKHRpbGUgc2l6
ZSA1MTIgeCA1NDgpCisgICAgICAodG9wIGxlZnQgdGlsZSAtMSwgLTEgdGlsZXMgZ3JpZCAzIHgg
MykKKyAgICAgIChpbiB3aW5kb3cgMSkKKyAgICApCisgICkKKykKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEtbm8t
Z2V0cy1tYXJnaW4tdGlsZXMuaHRtbCBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3Zp
ZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGFhNTMyODQ4ZmRlMTAwMDdiZDdmYzI2YTgxZDBlZmY1MTJkOWZmZAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8t
c2FmZS1hcmVhLW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0bWwKQEAgLTAsMCArMSw0MyBAQAorPCFE
T0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGlibGVWaWV3cG9y
dD10cnVlIF0gLS0+CisKKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQi
IGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MSwgY2xpcC10by1zYWZlLWFyZWE9bm8iPgorICAgIDxz
Y3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIGdldFVJU2NyaXB0KCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICB1aUNvbnRyb2xsZXIuc2V0T2JzY3VyZWRJbnNldHMoMTAsIDIwLCAzMCwgNDApOworICAgICAg
ICAgICAgICAgIHVpQ29udHJvbGxlci5pbW1lZGlhdGVTY3JvbGxUb09mZnNldCgtNDAsIC0xMCk7
CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLmRvQWZ0ZXJWaXNpYmxlQ29udGVudFJlY3RV
cGRhdGUoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIudWlT
Y3JpcHRDb21wbGV0ZSgpOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9KSgpO2AK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAg
ICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRvVGVzdCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoZ2V0VUlTY3JpcHQoKSwg
ZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMp
IHsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheWVycycp
LmlubmVyVGV4dCA9IGludGVybmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuTEFZRVJfVFJFRV9JTkNMVURFU19WSVNJQkxFX1JF
Q1RTIHwgaW50ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVERVNfVElMRV9DQUNIRVMpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKwor
PGJvZHk+Cis8cHJlIGlkPSJsYXllcnMiPkxheWVyIHRyZWUgZ29lcyBoZXJlPC9wPgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmll
d3BvcnQtY2xpcC10by1zYWZlLWFyZWEteWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2Fm
ZS1hcmVhLXllcy1nZXRzLW5vLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzU0N2M5NTI5ZjgwOTkxMzcxODhmODdjMzhkNzBjZjkxMGEzZWJiZgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1h
cmVhLXllcy1nZXRzLW5vLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMyBA
QAorKEdyYXBoaWNzTGF5ZXIKKyAgKGFuY2hvciAwLjAwIDAuMDApCisgIChib3VuZHMgMzIwLjAw
IDU0OC4wMCkKKyAgKHZpc2libGUgcmVjdCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAg
KGNvdmVyYWdlIHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1MzguMDApCisgIChpbnRlcnNlY3Rz
IGNvdmVyYWdlIHJlY3QgMSkKKyAgKGNvbnRlbnRzU2NhbGUgMi4wMCkKKyAgKGNoaWxkcmVuIDEK
KyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKGJvdW5kcyAzMjAuMDAgNTQ4LjAwKQorICAgICAg
KGNvbnRlbnRzT3BhcXVlIDEpCisgICAgICAodmlzaWJsZSByZWN0IDAuMDAsIDAuMDAgMjgwLjAw
IHggNTM4LjAwKQorICAgICAgKGNvdmVyYWdlIHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1Mzgu
MDApCisgICAgICAoaW50ZXJzZWN0cyBjb3ZlcmFnZSByZWN0IDEpCisgICAgICAoY29udGVudHNT
Y2FsZSAyLjAwKQorICAgICAgKHRpbGUgY2FjaGUgY292ZXJhZ2UgMCwgMCAzMjAgeCA1NDgpCisg
ICAgICAodGlsZSBzaXplIDUxMiB4IDU0OCkKKyAgICAgICh0b3AgbGVmdCB0aWxlIDAsIDAgdGls
ZXMgZ3JpZCAxIHggMSkKKyAgICAgIChpbiB3aW5kb3cgMSkKKyAgICApCisgICkKKykKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1z
YWZlLWFyZWEteWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLmh0bWwgYi9MYXlvdXRUZXN0cy90aWxl
ZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS15ZXMtZ2V0cy1uby1tYXJn
aW4tdGlsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNmQxOTVhMzY0MzY4YTdkZDc0MzIwZjY5ODExYjA5
YWEzZDZkNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9p
b3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEteWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLmh0
bWwKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgdXNlRmxleGlibGVWaWV3cG9ydD10cnVlIF0gLS0+CisKKzxodG1sPgorPGhlYWQ+Cisg
ICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MSwgY2xpcC10
by1zYWZlLWFyZWE9eWVzIj4KKyAgICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBnZXRVSVNj
cmlwdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBgCisgICAgICAgICAgICAoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnNldE9ic2N1cmVkSW5zZXRz
KDEwLCAyMCwgMzAsIDQwKTsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuaW1tZWRpYXRl
U2Nyb2xsVG9PZmZzZXQoLTQwLCAtMTApOworICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5k
b0FmdGVyVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUoKTsKKyAgICAgICAgICAgICAg
ICB9KQorICAgICAgICAgICAgfSkoKTtgCisgICAgICAgIH0KKworICAgICAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAg
ICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiBkb1Rlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0UnVubmVyLnJ1
blVJU2NyaXB0KGdldFVJU2NyaXB0KCksIGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdsYXllcnMnKS5pbm5lclRleHQgPSBpbnRlcm5hbHMubGF5ZXJUcmVl
QXNUZXh0KGRvY3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLkxBWUVS
X1RSRUVfSU5DTFVERVNfVklTSUJMRV9SRUNUUyB8IGludGVybmFscy5MQVlFUl9UUkVFX0lOQ0xV
REVTX1RJTEVfQ0FDSEVTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0LCBmYWxzZSk7Cisg
ICAgPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorPHByZSBpZD0ibGF5ZXJzIj5MYXllciB0
cmVlIGdvZXMgaGVyZTwvcD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307281</attachid>
            <date>2017-04-17 10:52:11 -0700</date>
            <delta_ts>2017-04-17 13:18:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170766-20170417105210.patch</filename>
            <type>text/plain</type>
            <size>41468</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2FjOGVmN2IwZmZhYzhi
OTI4ODdmMzllMDY5OTQwMTk2MDBhNWJmYS4uYjI4MjEwZjFlZGU2Zjc0NmVmNjZlMGViM2I1MTVh
ZjlmZWJiODY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE3LTA0LTE3ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFByb3ZpZGUgYSB2
aWV3cG9ydCBwYXJhbWV0ZXIgdG8gZGlzYWJsZSBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA3NjYKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxNTY0NjM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9y
dC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10aWxlcy5odG1sLAorICAgICAgICAg
ICAgICAgdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEteWVzLWdl
dHMtbm8tbWFyZ2luLXRpbGVzLmh0bWwsCisKKyAgICAgICAgKiBkb20vVmlld3BvcnRBcmd1bWVu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OnJlc29sdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0Vmlld3BvcnRGZWF0dXJlKToKKyAgICAgICAgKiBkb20vVmll
d3BvcnRBcmd1bWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKiBwYWdlL1ZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWV3cG9ydENvbmZpZ3VyYXRpb246OnVwZGF0ZUNvbmZpZ3VyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpW
aWV3cG9ydENvbmZpZ3VyYXRpb246OmRlc2NyaXB0aW9uKToKKyAgICAgICAgKiBwYWdlL1ZpZXdw
b3J0Q29uZmlndXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRDb25maWd1cmF0
aW9uOjpQYXJhbWV0ZXJzOjpQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0
Q29uZmlndXJhdGlvbjo6Y2xpcFRvU2FmZUFyZWEpOgorICAgICAgICBBZGQgdmlld3BvcnQgcGFy
YW1ldGVyLgorCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5hYmxlU3BlY3VsYXRpdmVUaWxpbmdJZk5lZWRlZCk6CisgICAg
ICAgIElmIG5vdCBjbGlwcGluZyB0byB0aGUgc2FmZSBhcmVhLCBlbmFibGUgInNwZWN1bGF0aXZl
IiB0aWxpbmcgaW1tZWRpYXRlbHksCisgICAgICAgIGJlY2F1c2UgdGhlIG1hcmdpbiB0aWxlcyBj
YW4gYmUgdmlzaWJsZSBpbW1lZGlhdGVseS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpoYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3Ojp1cGRhdGVUaWxlc0ZvckV4dGVuZGVkQmFja2dyb3VuZE1vZGUpOgorICAg
ICAgICBEb24ndCBjaGVjayB0aGUgc2V0dGluZyBoZXJlOyBqdXN0IHJlc3BlY3QgdGhlIG1vZGUg
dGhhdCBpcyBjb21wdXRlZAorICAgICAgICBieSBjYWxjdWxhdGVFeHRlbmRlZEJhY2tncm91bmRN
b2RlLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFj
a2dyb3VuZE1vZGUpOgorICAgICAgICBJZiB0aGUgdmlld3BvcnQgcGFyYW1ldGVyIHdhcyBzZXQs
IGFkZCBtYXJnaW4gdGlsZXMgb24gYm90aCBheGVzLgorCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OnNldENsaXBUb1NhZmVBcmVhKToKKyAgICAgICAgTm90aWZ5IENocm9tZUNsaWVudCBv
ZiB0aGUgY2hhbmdlLCBhbmQgcmUtY29tcHV0ZSB0aGUgbWFyZ2luIHRpbGUgbW9kZS4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgRmFjdG9yIG91dCBjb2Rl
IHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRoZSBjb250ZW50IGxheWVyIGNsaXBzIHRvIGJvdW5kcywK
KyAgICAgICAgYW5kIG1ha2UgaXQgdGFrZSB0aGUgbmV3IHZpZXdwb3J0IHBhcmFtZXRlciBpbnRv
IGFjY291bnQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAg
ICAgRG9uJ3QgY2xpcCBSZW5kZXJWaWV3IHJlcGFpbnRzIHRvIFJlbmRlclZpZXcncyBHcmFwaGlj
c0xheWVyIGJvdW5kcyBpZgorICAgICAgICBjbGlwLXRvLXNhZmUtYXJlYSBpcyBvZmYsIGp1c3Qg
bGlrZSB3ZSBkbyBmb3Igc2xvdy1yZXBhaW50IG9iamVjdHMgaW4KKyAgICAgICAgZXh0ZW5kZWQg
YmFja2dyb3VuZCBtb2RlLgorCiAyMDE3LTA0LTE3ICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBlbnVtZXJhdGVEZXZpY2VzIHRvIGFsbG93IHNl
cGFyYXRlIENhcHR1cmVEZXZpY2VNYW5hZ2VycyBmb3IgYXVkaW8gYW5kIHZpZGVvLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IDUzNTI3ZmI2MjNiNzNjMzZhNDg4NTU4ZDU0NzAzNjJhOGZlZmUzYWMuLjI3YmQ4M2Vk
ZGZmNmNjOGRmZWE4NjQ2MzVjYjY5YzhlNTdhYjFiY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
NCBAQAorMjAxNy0wNC0xNyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
KworICAgICAgICBQcm92aWRlIGEgdmlld3BvcnQgcGFyYW1ldGVyIHRvIGRpc2FibGUgY2xpcHBp
bmcgdG8gdGhlIHNhZmUgYXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcwNzY2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlc2V0
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldENsaXBUb1NhZmVBcmVh
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6Y2xpcFRvU2FmZUFyZWEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6
OmRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1Bh
Z2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgIEZvcndhcmQgY2xpcC10by1zYWZlLWFyZWEgY2hh
bmdlcyBmcm9tIENocm9tZUNsaWVudCB0byBXS1dlYlZpZXcuCisgICAgICAgIFVwZGF0ZSB2aXNp
YmxlIGNvbnRlbnQgcmVjdHMgd2hlbiBpdCBjaGFuZ2VzLCB3aGljaCB3aWxsCisgICAgICAgIHJl
c3VsdCBpbiBhIGNhbGwgdG8gdXBkYXRlRml4ZWRDbGlwcGluZ1ZpZXcsIGFzIGJlbG93LgorICAg
ICAgICBLZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHN0YXRlIGluIHRoZSBVSSBwcm9jZXNzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2Vi
VmlldyBfY29udGVudE1heURyYXdJbk9ic2N1cmVkSW5zZXRzXSk6CisgICAgICAgIEV4cG9zZSB0
aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgY2xpcC10by1zYWZlLWFyZWEgYml0IGFzIFNQSS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyB1cGRhdGVGaXhlZENsaXBwaW5nVmlldzpdKToKKyAgICAgICAgRGlzYWJsZSBm
aXhlZCBjbGlwcGluZyB3aGVuIGNsaXAtdG8tc2FmZS1hcmVhIGlzIGRpc2FibGVkLgorICAgICAg
ICAKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnZpZXdwb3J0Q29uZmlndXJhdGlvbkNoYW5nZWQpOgorICAg
ICAgICBQdXNoIHRoZSB2aWV3cG9ydCdzIGNsaXAtdG8tc2FmZS1hcmVhIGJpdCBvbnRvIHRoZSBt
YWluIGZyYW1lJ3MgRnJhbWVWaWV3LgorCiAyMDE3LTA0LTE3ICBKZXJlbXkgSm9uZXMgIDxqZXJl
bXlqQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBlbnVtZXJhdGVEZXZpY2VzIHRvIGFs
bG93IHNlcGFyYXRlIENhcHR1cmVEZXZpY2VNYW5hZ2VycyBmb3IgYXVkaW8gYW5kIHZpZGVvLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHAKaW5kZXggMWU2OWI5MjZkYjFi
ZDY3MTMwYmFjZWU1MTM1MzQyMjI0ZDNiMzgwZC4uYzAwZGQ5MGQ1OGVlZjBhMDg5YTE2MGNmY2Fh
ODcwYTZlMWYxOTFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJn
dW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3Bw
CkBAIC0yNDYsNiArMjQ2LDcgQEAgVmlld3BvcnRBdHRyaWJ1dGVzIFZpZXdwb3J0QXJndW1lbnRz
OjpyZXNvbHZlKGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbFZpZXdwb3J0U2kKICAgICByZXN1bHQu
dXNlclNjYWxhYmxlID0gdXNlclpvb207CiAgICAgcmVzdWx0Lm9yaWVudGF0aW9uID0gb3JpZW50
YXRpb247CiAgICAgcmVzdWx0LnNocmlua1RvRml0ID0gc2hyaW5rVG9GaXQ7CisgICAgcmVzdWx0
LmNsaXBUb1NhZmVBcmVhID0gY2xpcFRvU2FmZUFyZWE7CiAKICAgICByZXR1cm4gcmVzdWx0Owog
fQpAQCAtMzYzLDIyICszNjQsMjEgQEAgc3RhdGljIGZsb2F0IGZpbmRTY2FsZVZhbHVlKERvY3Vt
ZW50JiBkb2N1bWVudCwgU3RyaW5nVmlldyBrZXksIFN0cmluZ1ZpZXcgdmFsdWUKICAgICByZXR1
cm4gbnVtZXJpY1ZhbHVlOwogfQogCi0vLyBGSVhNRTogSXQncyBraW5kIG9mIGJpemFycmUgdG8g
dXNlIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBvZiAxIGFuZCAwIHRvIHJlcHJlc2VudCB0cnVlIGFu
ZCBmYWxzZS4KLXN0YXRpYyBmbG9hdCBmaW5kQm9vbGVhblZhbHVlKERvY3VtZW50JiBkb2N1bWVu
dCwgU3RyaW5nVmlldyBrZXksIFN0cmluZ1ZpZXcgdmFsdWUpCitzdGF0aWMgYm9vbCBmaW5kQm9v
bGVhblZhbHVlKERvY3VtZW50JiBkb2N1bWVudCwgU3RyaW5nVmlldyBrZXksIFN0cmluZ1ZpZXcg
dmFsdWUpCiB7CiAgICAgLy8geWVzIGFuZCBubyBhcmUgdXNlZCBhcyBrZXl3b3Jkcy4KICAgICAv
LyBOdW1iZXJzID49IDEsIG51bWJlcnMgPD0gLTEsIGRldmljZS13aWR0aCBhbmQgZGV2aWNlLWhl
aWdodCBhcmUgbWFwcGVkIHRvIHllcy4KICAgICAvLyBOdW1iZXJzIGluIHRoZSByYW5nZSA8LTEs
IDE+LCBhbmQgdW5rbm93biB2YWx1ZXMsIGFyZSBtYXBwZWQgdG8gbm8uCiAKICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJ5ZXMiKSkKLSAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZSh2YWx1ZSwgIm5vIikpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAiZGV2
aWNlLXdpZHRoIikpCi0gICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJkZXZpY2UtaGVpZ2h0
IikpCi0gICAgICAgIHJldHVybiAxOwotICAgIHJldHVybiBzdGQ6OmFicyhudW1lcmljUHJlZml4
KGRvY3VtZW50LCBrZXksIHZhbHVlKSkgPj0gMSA/IDEgOiAwOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gc3RkOjphYnMobnVtZXJpY1ByZWZpeChkb2N1bWVudCwga2V5LCB2YWx1
ZSkpID49IDE7CiB9CiAKIHZvaWQgc2V0Vmlld3BvcnRGZWF0dXJlKFZpZXdwb3J0QXJndW1lbnRz
JiBhcmd1bWVudHMsIERvY3VtZW50JiBkb2N1bWVudCwgU3RyaW5nVmlldyBrZXksIFN0cmluZ1Zp
ZXcgdmFsdWUpCkBAIC00MDMsNiArNDAzLDggQEAgdm9pZCBzZXRWaWV3cG9ydEZlYXR1cmUoVmll
d3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cywgRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmcKICNl
bmRpZgogICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleSwgInNo
cmluay10by1maXQiKSkKICAgICAgICAgYXJndW1lbnRzLnNocmlua1RvRml0ID0gZmluZEJvb2xl
YW5WYWx1ZShkb2N1bWVudCwga2V5LCB2YWx1ZSk7CisgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2Uoa2V5LCAiY2xpcC10by1zYWZlLWFyZWEiKSkKKyAgICAgICAgYXJn
dW1lbnRzLmNsaXBUb1NhZmVBcmVhID0gZmluZEJvb2xlYW5WYWx1ZShkb2N1bWVudCwga2V5LCB2
YWx1ZSk7CiAgICAgZWxzZQogICAgICAgICByZXBvcnRWaWV3cG9ydFdhcm5pbmcoZG9jdW1lbnQs
IFVucmVjb2duaXplZFZpZXdwb3J0QXJndW1lbnRLZXlFcnJvciwga2V5KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmgKaW5kZXggNGU2OTA3ZjU4OWRiNzI2ZGJhOGFjMDlm
ODFkODc5NTdlNzZmODgyYi4uMWU4Y2MyM2I1NjRhZDkxN2FlZDMzYjM0ODI3YWY4OTY0ZGU1MDg1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmgKQEAgLTUxLDYgKzUxLDcg
QEAgc3RydWN0IFZpZXdwb3J0QXR0cmlidXRlcyB7CiAgICAgZmxvYXQgdXNlclNjYWxhYmxlOwog
ICAgIGZsb2F0IG9yaWVudGF0aW9uOwogICAgIGZsb2F0IHNocmlua1RvRml0OworICAgIGJvb2wg
Y2xpcFRvU2FmZUFyZWE7CiB9OwogCiBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHMgewpAQCAtOTQs
NiArOTUsNyBAQCBzdHJ1Y3QgVmlld3BvcnRBcmd1bWVudHMgewogICAgIGZsb2F0IHVzZXJab29t
IHsgVmFsdWVBdXRvIH07CiAgICAgZmxvYXQgb3JpZW50YXRpb24geyBWYWx1ZUF1dG8gfTsKICAg
ICBmbG9hdCBzaHJpbmtUb0ZpdCB7IFZhbHVlQXV0byB9OworICAgIGJvb2wgY2xpcFRvU2FmZUFy
ZWEgeyB0cnVlIH07CiAgICAgYm9vbCB3aWR0aFdhc0V4cGxpY2l0IHsgZmFsc2UgfTsKIAogICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYgb3RoZXIpIGNvbnN0CkBA
IC0xMTIsNiArMTE0LDcgQEAgc3RydWN0IFZpZXdwb3J0QXJndW1lbnRzIHsKICAgICAgICAgICAg
ICYmIHVzZXJab29tID09IG90aGVyLnVzZXJab29tCiAgICAgICAgICAgICAmJiBvcmllbnRhdGlv
biA9PSBvdGhlci5vcmllbnRhdGlvbgogICAgICAgICAgICAgJiYgc2hyaW5rVG9GaXQgPT0gb3Ro
ZXIuc2hyaW5rVG9GaXQKKyAgICAgICAgICAgICYmIGNsaXBUb1NhZmVBcmVhID09IG90aGVyLmNs
aXBUb1NhZmVBcmVhCiAgICAgICAgICAgICAmJiB3aWR0aFdhc0V4cGxpY2l0ID09IG90aGVyLndp
ZHRoV2FzRXhwbGljaXQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRl
eCA4NDgwZDkxM2U1NTA1MDkxMTZiZDFjNGE2YjhjYmJjZTNkNGE3ZmRmLi5iNmZkYzlhNTkyN2E2
MjcwY2ExNDZiYTI5NjA0ZjdjZmM1YzllZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgKQEAgLTQ2OCw2ICs0NjgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydFBy
b2Nlc3NDUFVUaW1lKGludDY0X3QsIEFjdGl2aXR5U3RhdGVGb3JDUFVTYW1wbGluZykgeyB9CiAg
ICAgdmlydHVhbCBSZWZQdHI8SWNvbj4gY3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiAvKiBmaWxlbmFtZXMgKi8pID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFu
Z2VDbGlwVG9TYWZlQXJlYShib29sKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkNo
cm9tZUNsaWVudCgpIHsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCAxNDgw
ODRiMmI4YTQxYTI0YmEyN2IxOWY2NDhiZGUzMjdlY2YzOTNlLi4zNjhjNmNkMGM4NDNjYjI5MGU4
YjBhZjBhNGViMjUzNzc4MTFmZDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0y
OTI5LDYgKzI5MjksMTAgQEAgdm9pZCBGcmFtZVZpZXc6OmVuYWJsZVNwZWN1bGF0aXZlVGlsaW5n
SWZOZWVkZWQoKQogICAgICAgICBtX3NwZWN1bGF0aXZlVGlsaW5nRW5hYmxlZCA9IHRydWU7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKCFtX2NsaXBUb1NhZmVBcmVhKSB7CisgICAg
ICAgIG1fc3BlY3VsYXRpdmVUaWxpbmdFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICBpZiAoIXNob3VsZEVuYWJsZVNwZWN1bGF0aXZlVGlsaW5nRHVyaW5nTG9hZGlu
ZygqdGhpcykpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzIzOCw5ICszMjQyLDYgQEAgdm9pZCBG
cmFtZVZpZXc6OnVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShjb25zdCBDb2xvciYgYmFja2dy
b3VuZENvbG9yLCBib29sIHQKIAogYm9vbCBGcmFtZVZpZXc6Omhhc0V4dGVuZGVkQmFja2dyb3Vu
ZFJlY3RGb3JQYWludGluZygpIGNvbnN0CiB7Ci0gICAgaWYgKCFmcmFtZSgpLnNldHRpbmdzKCku
YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCiAgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSB0aGlzLT50aWxlZEJhY2tpbmco
KTsKICAgICBpZiAoIXRpbGVkQmFja2luZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI1
OSwxMSArMzI2MCw4IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVFeHRlbmRCYWNrZ3JvdW5kSWZO
ZWNlc3NhcnkoKQogCiBGcmFtZVZpZXc6OkV4dGVuZGVkQmFja2dyb3VuZE1vZGUgRnJhbWVWaWV3
OjpjYWxjdWxhdGVFeHRlbmRlZEJhY2tncm91bmRNb2RlKCkgY29uc3QKIHsKLSAgICAvLyBKdXN0
IGJlY2F1c2UgU2V0dGluZ3M6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkgaXMg
dHJ1ZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuCi0gICAgLy8gdGhhdCB0aGUgYmFja2dyb3Vu
ZCByZWN0IG5lZWRzIHRvIGJlIGV4dGVuZGVkIGZvciBwYWludGluZy4gU2ltcGxlIGJhY2tncm91
bmRzIGNhbiBiZSBleHRlbmRlZAotICAgIC8vIGp1c3Qgd2l0aCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnNldFJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpLiBNb3JlIGNvbXBsaWNhdGVkIGJh
Y2tncm91bmRzLAotICAgIC8vIHN1Y2ggYXMgaW1hZ2VzLCByZXF1aXJlIGV4dGVuZGluZyB0aGUg
YmFja2dyb3VuZCByZWN0IHRvIGNvbnRpbnVlIHBhaW50aW5nIGludG8gdGhlIGV4dGVuZGVkCi0g
ICAgLy8gcmVnaW9uLiBUaGlzIGZ1bmN0aW9uIGZpbmRzIG91dCBpZiBpdCBpcyBuZWNlc3Nhcnkg
dG8gZXh0ZW5kIHRoZSBiYWNrZ3JvdW5kIHJlY3QgZm9yIHBhaW50aW5nLgorICAgIGlmICghbV9j
bGlwVG9TYWZlQXJlYSkKKyAgICAgICAgcmV0dXJuIEV4dGVuZGVkQmFja2dyb3VuZE1vZGVBbGw7
CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzE2MjAxMzczPgpA
QCAtMzI3Miw2ICszMjcwLDEyIEBAIEZyYW1lVmlldzo6RXh0ZW5kZWRCYWNrZ3JvdW5kTW9kZSBG
cmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFja2dyb3VuZE1vZGUoKSBjCiAgICAgaWYgKCFm
cmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSkKICAg
ICAgICAgcmV0dXJuIEV4dGVuZGVkQmFja2dyb3VuZE1vZGVOb25lOwogCisgICAgLy8gSnVzdCBi
ZWNhdXNlIFNldHRpbmdzOjpiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpIGlzIHRy
dWUgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbgorICAgIC8vIHRoYXQgdGhlIGJhY2tncm91bmQg
cmVjdCBuZWVkcyB0byBiZSBleHRlbmRlZCBmb3IgcGFpbnRpbmcuIFNpbXBsZSBiYWNrZ3JvdW5k
cyBjYW4gYmUgZXh0ZW5kZWQKKyAgICAvLyBqdXN0IHdpdGggUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpzZXRSb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKS4gTW9yZSBjb21wbGljYXRlZCBiYWNr
Z3JvdW5kcywKKyAgICAvLyBzdWNoIGFzIGltYWdlcywgcmVxdWlyZSBleHRlbmRpbmcgdGhlIGJh
Y2tncm91bmQgcmVjdCB0byBjb250aW51ZSBwYWludGluZyBpbnRvIHRoZSBleHRlbmRlZAorICAg
IC8vIHJlZ2lvbi4gVGhpcyBmdW5jdGlvbiBmaW5kcyBvdXQgaWYgaXQgaXMgbmVjZXNzYXJ5IHRv
IGV4dGVuZCB0aGUgYmFja2dyb3VuZCByZWN0IGZvciBwYWludGluZy4KKwogICAgIGlmICghZnJh
bWUoKS5pc01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm4gRXh0ZW5kZWRCYWNrZ3JvdW5kTW9k
ZU5vbmU7CiAKQEAgLTMzMDEsOSArMzMwNSw2IEBAIEZyYW1lVmlldzo6RXh0ZW5kZWRCYWNrZ3Jv
dW5kTW9kZSBGcmFtZVZpZXc6OmNhbGN1bGF0ZUV4dGVuZGVkQmFja2dyb3VuZE1vZGUoKSBjCiAK
IHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVUaWxlc0ZvckV4dGVuZGVkQmFja2dyb3VuZE1vZGUoRXh0
ZW5kZWRCYWNrZ3JvdW5kTW9kZSBtb2RlKQogewotICAgIGlmICghZnJhbWUoKS5zZXR0aW5ncygp
LmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCk7CiAgICAgaWYg
KCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm47CkBAIC0zMzQ4LDYgKzMzNDksMzAgQEAgSW50
UmVjdCBGcmFtZVZpZXc6OmV4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpIGNvbnN0
CiAgICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0KGV4dGVuZGVkUmVjdCk7CiB9CiAKK3ZvaWQgRnJh
bWVWaWV3OjpzZXRDbGlwVG9TYWZlQXJlYShib29sIGNsaXBUb1NhZmVBcmVhKQoreworICAgIGlm
ICghZnJhbWUoKS5pc01haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9j
bGlwVG9TYWZlQXJlYSA9PSBjbGlwVG9TYWZlQXJlYSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jbGlwVG9TYWZlQXJlYSA9IGNsaXBUb1NhZmVBcmVhOworCisgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBmcmFtZSgpLnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuZGlkQ2hh
bmdlQ2xpcFRvU2FmZUFyZWEoY2xpcFRvU2FmZUFyZWEpOworCisgICAgdXBkYXRlRXh0ZW5kQmFj
a2dyb3VuZElmTmVjZXNzYXJ5KCk7CisgICAgYWRqdXN0VGlsZWRCYWNraW5nQ292ZXJhZ2UoKTsK
KworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCk7CisgICAg
aWYgKCFyZW5kZXJWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJMYXllckNvbXBv
c2l0b3ImIGNvbXBvc2l0b3IgPSByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCk7CisgICAgY29tcG9z
aXRvci51cGRhdGVSb290Q29udGVudExheWVyQ2xpcHBpbmcoKTsKK30KKwogYm9vbCBGcmFtZVZp
ZXc6OnNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9z
aG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCmluZGV4IGIx
NGZlZjMzYjc0NjI2NjgyM2Q4MzQ1MDRiYjZhN2Q3NDU2MmYzNTkuLjBhMzI3NTMwMDQyNGNkY2I2
OWVlNmU5Y2EzZTgyMGU2OThhY2Y5NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApAQCAtMjEz
LDYgKzIxMyw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3RG
b3JQYWludGluZygpIGNvbnN0OwogICAgIEludFJlY3QgZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZv
clBhaW50aW5nKCkgY29uc3Q7CiAKKyAgICBib29sIGNsaXBUb1NhZmVBcmVhKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGlwVG9TYWZlQXJlYTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2xp
cFRvU2FmZUFyZWEoYm9vbCk7CisKICAgICBib29sIHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVu
KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRVcGRhdGVXaGlsZU9m
ZnNjcmVlbihib29sKTsKICAgICBib29sIHNob3VsZFVwZGF0ZSgpIGNvbnN0OwpAQCAtODEzLDYg
KzgxNiw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fbmVlZHNEZWZlcnJlZFNjcm9sbGJhcnNV
cGRhdGUgeyBmYWxzZSB9OwogCisgICAgYm9vbCBtX2NsaXBUb1NhZmVBcmVhIHsgdHJ1ZSB9Owor
CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fbWFpbnRhaW5TY3JvbGxQb3NpdGlvbkFuY2hv
cjsKIAogICAgIC8vIFJlbmRlcmVyIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uY3BwCmluZGV4IDgw
NWM2ZTBjY2U1N2RlOWRkZjdlOWNlZjIyNmQ4ZTEwMDg4OTFmZDUuLjIwNmYwMmI5N2QwZDMwY2Vk
NDlhZDAxNGE2YTI5MzgyNzM5OGM3NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Vmlld3BvcnRDb25maWd1cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdw
b3J0Q29uZmlndXJhdGlvbi5jcHAKQEAgLTMzNiw2ICszMzYsOSBAQCB2b2lkIFZpZXdwb3J0Q29u
ZmlndXJhdGlvbjo6dXBkYXRlQ29uZmlndXJhdGlvbigpCiAKICAgICBpZiAoYm9vbGVhblZpZXdw
b3J0QXJndW1lbnRJc1NldChtX3ZpZXdwb3J0QXJndW1lbnRzLnNocmlua1RvRml0KSkKICAgICAg
ICAgbV9jb25maWd1cmF0aW9uLmFsbG93c1Nocmlua1RvRml0ID0gbV92aWV3cG9ydEFyZ3VtZW50
cy5zaHJpbmtUb0ZpdCAhPSAwLjsKKworICAgIGlmIChib29sZWFuVmlld3BvcnRBcmd1bWVudElz
U2V0KG1fdmlld3BvcnRBcmd1bWVudHMuY2xpcFRvU2FmZUFyZWEpKQorICAgICAgICBtX2NvbmZp
Z3VyYXRpb24uY2xpcFRvU2FmZUFyZWEgPSBtX3ZpZXdwb3J0QXJndW1lbnRzLmNsaXBUb1NhZmVB
cmVhOwogfQogCiBkb3VibGUgVmlld3BvcnRDb25maWd1cmF0aW9uOjp2aWV3cG9ydEFyZ3VtZW50
c0xlbmd0aChkb3VibGUgbGVuZ3RoKSBjb25zdApAQCAtNDM5LDYgKzQ0Miw3IEBAIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFZpZXdwb3J0Q29uZmlndXJhdGlv
bjo6UGFyYW1ldGVycyYKICAgICB0cy5kdW1wUHJvcGVydHkoIm1heGltdW1TY2FsZSIsIHBhcmFt
ZXRlcnMubWF4aW11bVNjYWxlKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImFsbG93c1VzZXJTY2Fs
aW5nIiwgcGFyYW1ldGVycy5hbGxvd3NVc2VyU2NhbGluZyk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJhbGxvd3NTaHJpbmtUb0ZpdCIsIHBhcmFtZXRlcnMuYWxsb3dzU2hyaW5rVG9GaXQpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgiY2xpcFRvU2FmZUFyZWEiLCBwYXJhbWV0ZXJzLmNsaXBUb1NhZmVB
cmVhKTsKIAogICAgIHJldHVybiB0czsKIH0KQEAgLTQ3Miw2ICs0NzYsNyBAQCBDU3RyaW5nIFZp
ZXdwb3J0Q29uZmlndXJhdGlvbjo6ZGVzY3JpcHRpb24oKSBjb25zdAogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiY29tcHV0ZWQgbGF5b3V0IHNpemUiLCBsYXlvdXRTaXplKCkpOwogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiaWdub3JpbmcgaG9yaXpvbnRhbCBzY2FsaW5nIGNvbnN0cmFpbnRzIiwgc2hvdWxk
SWdub3JlSG9yaXpvbnRhbFNjYWxpbmdDb25zdHJhaW50cygpID8gInRydWUiIDogImZhbHNlIik7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpZ25vcmluZyB2ZXJ0aWNhbCBzY2FsaW5nIGNvbnN0cmFp
bnRzIiwgc2hvdWxkSWdub3JlVmVydGljYWxTY2FsaW5nQ29uc3RyYWludHMoKSA/ICJ0cnVlIiA6
ICJmYWxzZSIpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2xpcCB0byBzYWZlIGFyZWEiLCBjbGlw
VG9TYWZlQXJlYSgpID8gInRydWUiIDogImZhbHNlIik7CiAgICAgCiAgICAgdHMuZW5kR3JvdXAo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9WaWV3cG9ydENvbmZpZ3VyYXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVmlld3BvcnRDb25maWd1cmF0aW9uLmgKaW5kZXgg
YjcyYzBiZmE5ZDY3MDc5MWEyOTEyOWEzNTY1OWMwOGE2YzY0NzcyMS4uYmFkZDZlOGQ3YjlhN2Y4
YzE2YTJjNDg2NGMyNjFhMDEzZDc4OTM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9WaWV3cG9ydENvbmZpZ3VyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1ZpZXdw
b3J0Q29uZmlndXJhdGlvbi5oCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICwgbWF4aW11bVNjYWxlKDApCiAgICAgICAgICAgICAsIGFsbG93c1VzZXJTY2FsaW5nKGZhbHNl
KQogICAgICAgICAgICAgLCBhbGxvd3NTaHJpbmtUb0ZpdChmYWxzZSkKKyAgICAgICAgICAgICwg
Y2xpcFRvU2FmZUFyZWEodHJ1ZSkKICAgICAgICAgICAgICwgd2lkdGhJc1NldChmYWxzZSkKICAg
ICAgICAgICAgICwgaGVpZ2h0SXNTZXQoZmFsc2UpCiAgICAgICAgICAgICAsIGluaXRpYWxTY2Fs
ZUlzU2V0KGZhbHNlKQpAQCAtNjMsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSBt
YXhpbXVtU2NhbGU7CiAgICAgICAgIGJvb2wgYWxsb3dzVXNlclNjYWxpbmc7CiAgICAgICAgIGJv
b2wgYWxsb3dzU2hyaW5rVG9GaXQ7CisgICAgICAgIGJvb2wgY2xpcFRvU2FmZUFyZWE7CiAKICAg
ICAgICAgYm9vbCB3aWR0aElzU2V0OwogICAgICAgICBib29sIGhlaWdodElzU2V0OwpAQCAtOTUs
NiArOTcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhbGxvd3NVc2VyU2Nh
bGluZygpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWxsb3dzVXNlclNjYWxpbmdJ
Z25vcmluZ0Fsd2F5c1NjYWxhYmxlKCkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd3NTaHJpbmtUb0Zp
dCgpIGNvbnN0OworICAgIGJvb2wgY2xpcFRvU2FmZUFyZWEoKSBjb25zdCB7IHJldHVybiBtX2Nv
bmZpZ3VyYXRpb24uY2xpcFRvU2FmZUFyZWE7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBQYXJhbWV0ZXJzIHdlYnBhZ2VQYXJhbWV0ZXJzKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFBhcmFtZXRlcnMgdGV4dERvY3VtZW50UGFyYW1ldGVycygpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCAxODQ1Njdl
MmUwYjJkMzRjNWQ1NDkwOTM2MzY2NTJiYjJlNTA2NmIxLi5iZTBlYmRkZTJmOGFmODZkNmNjMjQx
MDNiMzdjYzE2YWVkYzdmNWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtOTc2LDYgKzk3NiwxMSBAQCBzdGF0aWMgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJGb3JDb21wb3NpdGluZ1Rlc3RzKGNvbnN0IFJl
bmRlckxheWVyJiBsYQogICAgIHJldHVybiAqcmVuZGVyZXI7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVSb290Q29udGVudExheWVyQ2xpcHBpbmcoKQoreworICAgIG1f
cm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyghbV9yZW5kZXJWaWV3LnNldHRpbmdz
KCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSAmJiBtX3JlbmRlclZpZXcuZnJh
bWVWaWV3KCkuY2xpcFRvU2FmZUFyZWEoKSk7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgQ29tcG9zaXRpbmdDaGFuZ2VS
ZXBhaW50IHNob3VsZFJlcGFpbnQsIEJhY2tpbmdSZXF1aXJlZCBiYWNraW5nUmVxdWlyZWQpCiB7
CiAgICAgYm9vbCBsYXllckNoYW5nZWQgPSBmYWxzZTsKQEAgLTEwMDcsOCArMTAxMiw3IEBAIGJv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKFJlbmRlckxheWVyJiBsYXll
ciwgQ29tcG9zaXRpbmdDaGFuZ2VSCiAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJGb3JIZWFk
ZXIocGFnZSgpLmhlYWRlckhlaWdodCgpKTsKICAgICAgICAgICAgICAgICB1cGRhdGVMYXllckZv
ckZvb3RlcihwYWdlKCkuZm9vdGVySGVpZ2h0KCkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAg
aWYgKG1fcmVuZGVyVmlldy5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQ
YWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NU
b0JvdW5kcyhmYWxzZSk7CisgICAgICAgICAgICAgICAgdXBkYXRlUm9vdENvbnRlbnRMYXllckNs
aXBwaW5nKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tp
bmcgPSBsYXllci5iYWNraW5nKCktPnRpbGVkQmFja2luZygpKQogICAgICAgICAgICAgICAgICAg
ICB0aWxlZEJhY2tpbmctPnNldFRvcENvbnRlbnRJbnNldChtX3JlbmRlclZpZXcuZnJhbWVWaWV3
KCkudG9wQ29udGVudEluc2V0KCkpOwpAQCAtMzM4Miw3ICszMzg2LDcgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXllcigpCiAjZW5kaWYKIAogICAgICAgICAvLyBO
ZWVkIHRvIGNsaXAgdG8gcHJldmVudCB0cmFuc2Zvcm1lZCBjb250ZW50IHNob3dpbmcgb3V0c2lk
ZSB0aGlzIGZyYW1lCi0gICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5k
cyh0cnVlKTsKKyAgICAgICAgdXBkYXRlUm9vdENvbnRlbnRMYXllckNsaXBwaW5nKCk7CiAgICAg
fQogCiAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsTGF5ZXIoZXhwZWN0ZWRBdHRhY2htZW50KSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmlu
ZGV4IDgyOGFlOWQxMjlhOGUxMDM1NjJjMzRjMjQ1YjQ4YWYwZTI5MTg3YWQuLjhhZmNkNWQ0M2Jk
ODFjZmNhODI2ODcwMWJiZTE3Nzc3ZDQzZjU5ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTMxMyw2ICszMTMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRSb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3Im
KTsKICAgICBjb25zdCBDb2xvciYgcm9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9yb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7IH0KIAorICAgIHZvaWQgdXBk
YXRlUm9vdENvbnRlbnRMYXllckNsaXBwaW5nKCk7CisKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQogICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KGNv
bnN0IEZyYW1lVmlldyYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCmluZGV4IDExNjlkOTJjZWY3ODg4ZTFlMmNkMWVlMTAzNzUwM2JjY2U5MjAwNDAu
LjA1ZThiYjEyYmY2Mzg1Y2FhZGQ0ZmU4MGIyOGJjZTc5MjFmZDY5MmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC04OTcsNiArODk3LDkgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OnJlcGFpbnRVc2luZ0NvbnRhaW5lcihjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiByZXBhaW50Q28KICAgICAgICAgICAgIHZpZXcucmVwYWludFZpZXdSZWN0YW5nbGUo
cmVjdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIXZp
ZXcuZnJhbWVWaWV3KCkuY2xpcFRvU2FmZUFyZWEoKSkKKyAgICAgICAgICAgIHNob3VsZENsaXBU
b0xheWVyID0gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKHZpZXcoKS51c2VzQ29tcG9zaXRpbmco
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5t
bQppbmRleCBlNWQ5NmU2MmM0M2YyNTY1OGUyM2I2NGQ0NmM2M2M2ODA2ZDAwMzhiLi5mOWUxYjM2
ODZjMzFjZGNjMmE2OWFmODAzNGFlZThiYzkzNTJkYTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtNDI2MCw2ICs0MjYwLDExIEBA
IHN0YXRpYyBpbmxpbmUgV2ViS2l0OjpGaW5kT3B0aW9ucyB0b0ZpbmRPcHRpb25zKF9XS0ZpbmRP
cHRpb25zIHdrRmluZE9wdGlvbnMpCiAgICAgcmV0dXJuIF9wYWdlLT5pc1Nob3dpbmdOYXZpZ2F0
aW9uR2VzdHVyZVNuYXBzaG90KCk7CiB9CiAKKy0gKEJPT0wpX2NvbnRlbnRNYXlEcmF3SW5PYnNj
dXJlZEluc2V0cworeworICAgIHJldHVybiAhX3BhZ2UtPmNsaXBUb1NhZmVBcmVhKCk7Cit9CisK
IC0gKF9XS0xheW91dE1vZGUpX2xheW91dE1vZGUKIHsKICNpZiBQTEFURk9STShNQUMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0
ZS5oCmluZGV4IGEwMjg0M2Y0YjI0YzczMmQxYzI0NjlhMWU0NDg5ZTcyYjQxOTY5MmEuLjhlODlh
MDY2N2Q5ZDQyZjcxZTczYTUxZTYyMWUwNDc5MGY3Mzc5YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCkBAIC0xNDQs
NiArMTQ0LDggQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLSW1tZWRpYXRlQWN0aW9u
VHlwZSkgewogLy8gRGVmaW5lIHRoZSBpbnNldCBvZiB0aGUgc2Nyb2xsdmlldyB1bnVzYWJsZSBi
eSB0aGUgd2ViIHBhZ2UuCiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRPYnNjdXJl
ZEluc2V0czopIFVJRWRnZUluc2V0cyBfb2JzY3VyZWRJbnNldHM7CiAKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgQk9PTCBfY29udGVudE1heURyYXdJbk9ic2N1cmVkSW5zZXRzOwor
CiAvLyBPdmVycmlkZSB0aGUgaW50ZXJmYWNlIG9yaWVudGF0aW9uLiBDbGllbnRzIHVzaW5nIF9i
ZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6IG11c3QgdXBkYXRlIHRoZSBpbnRlcmZhY2Ug
b3JpZW50YXRpb24KIC8vIGluIHRoZSB1cGRhdGUgYmxvY2suCiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRJbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlOikgVUlJbnRlcmZhY2VP
cmllbnRhdGlvbiBfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCmluZGV4IDhjNTc3NmYz
NDI4ZjZiYjBkMTk5YWFhZThlMDI2NjAwNzA0YWNlMTAuLmFkZDNmNjY1MjJkYzI1OTVkNzliMmU3
NTA0MDc3ZTNjOGRmMGY1ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuaApAQCAtMTQ2LDYgKzE0Niw4IEBAIHByaXZhdGU6CiAKICAg
ICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb24oKSBvdmVycmlkZSB7IHJldHVybiBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uOjpMVFI7IH0KIAorICAgIHZvaWQgZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEo
Ym9vbCkgb3ZlcnJpZGUgeyB9CisKICAgICAvLyBNZW1iZXJzIG9mIFBhZ2VDbGllbnRJbXBsIGNs
YXNzCiAgICAgR3RrV2lkZ2V0KiBtX3ZpZXdXaWRnZXQ7CiAgICAgRGVmYXVsdFVuZG9Db250cm9s
bGVyIG1fdW5kb0NvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApp
bmRleCBiNTZkZWJmNTNiMTViNjQ0ODBlYzY0OGU3Zjc3ZTY5OTE0YzA5MjRjLi4wZGRmZDQ2MjM1
NDQ1NDg2MzAyYzI4MTVmNTVlODMxMGZmZDA3OTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgKQEAgLTM4Niw2ICszODYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGRpZENvbmNsdWRlRWRpdERhdGFJbnRlcmFjdGlvbihzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3JEYXRhPikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VEYXRhSW50
ZXJhY3Rpb25DYXJldFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcHJldmlvdXNDYXJldFJl
Y3QsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNhcmV0UmVjdCkgPSAwOwogI2VuZGlmCisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEoYm9vbCBjbGlwVG9TYWZlQXJl
YSkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGQ3N2Q0MDcyMzIyMzNhNWNlOTg5ZjNmOWI0N2Rh
YWEyY2JlNDAwZGEuLmM4ODMzNTgyMTU0MmQ2MTQ0N2EyYjEyNmFmYzIxNzM5OTdiOGNkMzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC01NDU1LDYgKzU0
NTUsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZShSZXNldFN0YXRlUmVhc29uIHJl
c2V0U3RhdGVSZWFzb24pCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKICAgICByZXF1ZXN0UG9p
bnRlclVubG9jaygpOwogI2VuZGlmCisKKyAgICBtX2NsaXBUb1NhZmVBcmVhID0gdHJ1ZTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGVBZnRlclByb2Nlc3NFeGl0ZWQoKQpAQCAt
Njg4MCw0ICs2ODgyLDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdG9wVVJMU2NoZW1lSGFuZGxl
clRhc2sodWludDY0X3QgaGFuZGxlcklkZW50aWZpZXIsIHVpbnQ2NF90CiAgICAgaXRlcmF0b3It
PnZhbHVlLT5zdG9wVGFzaygqdGhpcywgcmVzb3VyY2VJZGVudGlmaWVyKTsKIH0KIAordm9pZCBX
ZWJQYWdlUHJveHk6OnNldENsaXBUb1NhZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpCit7Cisg
ICAgbV9jbGlwVG9TYWZlQXJlYSA9IGNsaXBUb1NhZmVBcmVhOworCisgICAgbV9wYWdlQ2xpZW50
LmRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGNsaXBUb1NhZmVBcmVhKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXgg
YjFjYjg0NjU2NTg5NWRlNTgyZmYyNDI4ZmZlM2ZjZTEyOGEwMjY4ZC4uMjdjZGZmZGM0MWMwYTEx
YzUzNjE2OGU3MWM1NDU0MTM3MTg2ZDQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaApAQCAtMTE5NSw2ICsxMTk1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY3JlYXRl
U2FuZGJveEV4dGVuc2lvbnNJZk5lZWRlZChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZXMsIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSYgZmlsZVJlYWRIYW5kbGUsIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZUFycmF5JiBmaWxlVXBsb2FkSGFuZGxlcyk7CiAjZW5kaWYKIAorICAgIHZvaWQgc2V0
Q2xpcFRvU2FmZUFyZWEoYm9vbCk7CisgICAgYm9vbCBjbGlwVG9TYWZlQXJlYSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2xpcFRvU2FmZUFyZWE7IH0KKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHko
UGFnZUNsaWVudCYsIFdlYlByb2Nlc3NQcm94eSYsIHVpbnQ2NF90IHBhZ2VJRCwgUmVmPEFQSTo6
UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7CkBA
IC0xOTgwLDcgKzE5ODMsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBib29sIG1faXNVc2lu
Z0hpZ2hQZXJmb3JtYW5jZVdlYkdMIHsgZmFsc2UgfTsKLSAgICAgICAgCisKKyAgICBib29sIG1f
Y2xpcFRvU2FmZUFyZWEgeyB0cnVlIH07CisKICAgICBXZWFrUHRyRmFjdG9yeTxXZWJQYWdlUHJv
eHk+IG1fd2Vha1B0ckZhY3Rvcnk7CiAKICAgICBIYXNoTWFwPFN0cmluZywgUmVmPFdlYlVSTFNj
aGVtZUhhbmRsZXI+PiBtX3VybFNjaGVtZUhhbmRsZXJzQnlTY2hlbWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBmNmM1NGM3
MTYyNmJkNWZlMTgxMDNjNTUyMzFmYjc4MTk0YWY3Yjg2Li44NDVkNDMwOTRlMTAwYmQwYjEwMmIx
YzcyMDM1ODg1NWIwYmZlMzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTQ5NCw0ICs0OTQsNiBAQCBtZXNzYWdlcyAtPiBX
ZWJQYWdlUHJveHkgewogCiAgICAgU3RhcnRVUkxTY2hlbWVIYW5kbGVyVGFzayh1aW50NjRfdCBs
b2FkZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCByZXF1ZXN0KQogICAgIFN0b3BVUkxTY2hlbWVIYW5kbGVyVGFzayh1aW50
NjRfdCBsb2FkZXJJZGVudGlmaWVyLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIpCisKKyAg
ICBTZXRDbGlwVG9TYWZlQXJlYShib29sIGNsaXBUb1NhZmVBcmVhKQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCmluZGV4IDUyMWUxZGQ4
MWEyM2IyYjI5YWMyMjE4YzM3YTFhNThhNzZiMjhkYWEuLjY5MTQyNmRkZjZjZjZiMjY5NDE4NzMz
YjkwZjAwMWY3YjQ0MzU1Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvUGFnZUNsaWVudEltcGxJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLmgKQEAgLTE5OCw2ICsxOTgsOCBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBoYW5kbGVBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm9SZXNwb25zZShib29sIGhhc0Fj
dGl2ZVNlc3Npb24sIGNvbnN0IFN0cmluZyYgdGl0bGUsIGRvdWJsZSBkdXJhdGlvbiwgZG91Ymxl
IGVsYXBzZWRUaW1lKSBvdmVycmlkZTsKIAorICAgIHZvaWQgZGlkQ2hhbmdlQ2xpcFRvU2FmZUFy
ZWEoYm9vbCBjbGlwVG9TYWZlQXJlYSkgb3ZlcnJpZGU7CisKICNpZiBVU0UoUVVJQ0tfTE9PSykK
ICAgICB2b2lkIHJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJikgb3ZlcnJp
ZGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLm1tCmluZGV4IGI5NmNkMmUyNzhmMTU0MGNlNjFkNDk3NTVhZmM5OTFmYTE4Yjcy
ZTAuLmQ4ZDViYjA5MzEzNTQxMDVhZTExMjlkYTNlNDVlODg1NDE0NDMyNjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtODIx
LDYgKzgyMSwxMSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0UGFzc3dvcmRGb3JRdWlj
a0xvb2tEb2N1bWVudChjb25zdCBTdHJpbmcmIGZpbGVOYW1lLAogfQogI2VuZGlmCiAKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFy
ZWEpCit7CisgICAgW21fd2ViVmlldyBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVd
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQppbmRleCBk
N2M2MzkyMjMzMzZiYzIwZTRkYmQwODdkN2E1ZWQxOTNjNWU3MTM2Li43NWY3MThiZGY5ZGI3OTUx
ZWQxODYyMjhmMDk1YTljOGUxYTgyOTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC0zNjAsNiArMzYwLDcgQEAgcHJpdmF0ZToKIAogICAg
IFtfZml4ZWRDbGlwcGluZ1ZpZXcgc2V0Q2VudGVyOmNsaXBwaW5nQm91bmRzLmxvY2F0aW9uKCld
OyAvLyBOb3QgcmVhbGx5IHRoZSBjZW50ZXIgc2luY2Ugd2Ugc2V0IGFuIGFuY2hvciBwb2ludC4K
ICAgICBbX2ZpeGVkQ2xpcHBpbmdWaWV3IHNldEJvdW5kczpjbGlwcGluZ0JvdW5kc107CisgICAg
W19maXhlZENsaXBwaW5nVmlldyBsYXllcl0ubWFza3NUb0JvdW5kcyA9IF9wYWdlLT5jbGlwVG9T
YWZlQXJlYSgpOwogfQogCiAtICh2b2lkKV9kaWRFeGl0U3RhYmxlU3RhdGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAppbmRleCAzY2I2Y2E4YWE2ZjNh
MTlhZjU4Zjg0NTA3MGNhM2JmNWVlNDRiZDU5Li4wZjhlN2UzYmI5Y2FhN2UzMmI3MjViMzY4YmQ2
ZGQ4NmJmMTI5MTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbC5oCkBAIC0yNTEsNiArMjUxLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkUmVz
dG9yZVNjcm9sbFBvc2l0aW9uKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCB3aW5kb3dJc0Zyb250V2lu
ZG93VW5kZXJNb3VzZShjb25zdCBOYXRpdmVXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGRpZENoYW5nZUNsaXBUb1NhZmVBcmVhKGJvb2wgY2xpcFRvU2FmZUFyZWEpIG92ZXJy
aWRlIHsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAKaW5kZXggOThhNWY4ODQyMDA3OTU5ZTdmNmVlNzUxNGI1ZjAwODM3Nzc1MDhiMS4uMzU5M2Q5
MDJiZDU3OWUxZDQ1NjQ4Mjc2N2JiZmI3NWNjODBiYzAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcApAQCAtMTIyNyw0ICsxMjI3LDkgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZEludmFs
aWRhdGVEb2N1bWVudE1hcmtlclJlY3RzKCkKICAgICBtX3BhZ2UuZmluZENvbnRyb2xsZXIoKS5k
aWRJbnZhbGlkYXRlRG9jdW1lbnRNYXJrZXJSZWN0cygpOwogfQogCit2b2lkIFdlYkNocm9tZUNs
aWVudDo6ZGlkQ2hhbmdlQ2xpcFRvU2FmZUFyZWEoYm9vbCBjbGlwVG9TYWZlQXJlYSkKK3sKKyAg
ICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRDbGlwVG9TYWZlQXJlYShj
bGlwVG9TYWZlQXJlYSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCmluZGV4IDczZjljYzJiY2RkZjAxZDY0NjEyMDBmNzY3ZWFlYzZjOWQ4MWJlYmEuLjU3
NmNkNzlmMWY3NzVhNjUxYTk1ZmRkNzdkMDBkZGE2OTAyMGQ1MDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaApAQCAtMzQyLDYgKzM0Miw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEludmFsaWRh
dGVEb2N1bWVudE1hcmtlclJlY3RzKCkgZmluYWw7CiAKKyAgICB2b2lkIGRpZENoYW5nZUNsaXBU
b1NhZmVBcmVhKGJvb2wpIGZpbmFsOworCiAgICAgU3RyaW5nIG1fY2FjaGVkVG9vbFRpcDsKICAg
ICBtdXRhYmxlIFJlZlB0cjxXZWJGcmFtZT4gbV9jYWNoZWRGcmFtZVNldExhcmdlc3RGcmFtZTsK
ICAgICBtdXRhYmxlIGJvb2wgbV9jYWNoZWRNYWluRnJhbWVIYXNIb3Jpem9udGFsU2Nyb2xsYmFy
IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbQppbmRleCAwYWM3YjgzZjNhZWIzMGY0OGQ3NGVkN2YwMjYwYWFhZTc0
MTlkOTkzLi40YjEzNWQwNGEzMzQyMGQxYjZjM2Y0ODUzMWNjYmU1NTliODE3YTViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CkBAIC0zMDQ1LDYgKzMwNDUsOCBAQCB2b2lkIFdlYlBhZ2U6OnZpZXdwb3J0Q29uZmlndXJhdGlv
bkNoYW5nZWQoKQogICAgIHVwZGF0ZVZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMoKTsK
IAogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gKm1haW5GcmFtZVZpZXcoKTsKKyAgICBmcmFt
ZVZpZXcuc2V0Q2xpcFRvU2FmZUFyZWEobV92aWV3cG9ydENvbmZpZ3VyYXRpb24uY2xpcFRvU2Fm
ZUFyZWEoKSk7CisKICAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy5zY3Jv
bGxQb3NpdGlvbigpOwogICAgIGlmICghbV9oYXNSZWNlaXZlZFZpc2libGVDb250ZW50UmVjdHNB
ZnRlckRpZENvbW1pdExvYWQpIHsKICAgICAgICAgRmxvYXRTaXplIG1pbmltdW1MYXlvdXRTaXpl
SW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMgPSBtX3ZpZXdwb3J0Q29uZmlndXJhdGlvbi5taW5pbXVt
TGF5b3V0U2l6ZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDYzNjFlZjJiYTc1YWNmZjUzY2Q5MTZhMDI0NDFlNmI5NzVmNjE3NzkuLmQ1ZmNk
NDM1YmE3YjA4NjRiOGJmMjI0YjAyY2JjZmNjNDZjMWZhZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxNy0wNC0x
NyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBQcm92
aWRlIGEgdmlld3BvcnQgcGFyYW1ldGVyIHRvIGRpc2FibGUgY2xpcHBpbmcgdG8gdGhlIHNhZmUg
YXJlYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcw
NzY2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTU2NDYzND4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2lvcy9VSVNj
cmlwdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6
c2V0T2JzY3VyZWRJbnNldHMpOgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRD
b250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGw6CisgICAgICAgICogVGVzdFJ1
bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJlZEluc2V0cyk6CisgICAgICAg
ICogVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmg6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW06Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJv
bGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjpzZXRPYnNjdXJl
ZEluc2V0cyk6CisgICAgICAgIEFkZCBhIFVJU2NyaXB0Q29udHJvbGxlciBtZWNoYW5pc20gdG8g
aW5zdGFsbCBvYnNjdXJlZCBpbnNldHMKKyAgICAgICAgb24gdGhlIHdlYiB2aWV3LgorCiAyMDE3
LTA0LTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICB3
ZWJraXRweTogQ29ycmVjdCBwb2xsIHdoZW4ga2lsbGluZyBTZXJ2ZXJQcm9jZXNzCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQppbmRleCA0
MDNiNTliNDFkMzU5OWQ1OGEyMzY1OTkzODgyM2Y2MzczODI1NzI2Li5iMGUwNGRkNjZhOTEzZDY2
YTA0YjlmOGQyOGQyNzQ4NTY3MWNkNmM1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTMxNiw2ICszMTYsMTAgQEAgdm9pZCBV
SVNjcmlwdENvbnRyb2xsZXI6OmFkZFZpZXdUb1dpbmRvdyhKU1ZhbHVlUmVmKQogewogfQogCit2
b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6c2V0T2JzY3VyZWRJbnNldHMoZG91YmxlLCBkb3VibGUs
IGRvdWJsZSwgZG91YmxlKQoreworfQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5n
cy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsIGIvVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlw
dENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbAppbmRleCBmNjZhZTE1MjJm
NTE2MTcwN2NjN2YxZjg0ZDRjODgxYTkyZGMyYmYxLi5kYmE0NTZlYmNiMWUzZjk4N2Q4OWIyNzg2
ZWU1M2ZiZGM5YWUyYWJiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2Ny
aXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCisrKyBiL1Rvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxl
ci5pZGwKQEAgLTIzMiw0ICsyMzIsNiBAQCBpbnRlcmZhY2UgVUlTY3JpcHRDb250cm9sbGVyIHsK
ICAgICB2b2lkIGFkZFZpZXdUb1dpbmRvdyhvYmplY3QgY2FsbGJhY2spOwogCiAgICAgdm9pZCBv
dmVycmlkZVByZWZlcmVuY2UoRE9NU3RyaW5nIHByZWZlcmVuY2UsIERPTVN0cmluZyB2YWx1ZSk7
CisKKyAgICB2b2lkIHNldE9ic2N1cmVkSW5zZXRzKGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwg
ZG91YmxlIGJvdHRvbSwgZG91YmxlIGxlZnQpOwogfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Ub29s
cy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3Bw
CmluZGV4IDYxMmM5ZTI5ZjFkYTI0ZTIxODg0NjQwNWM4MTQyMGU2YWJkYjgyM2YuLjBmMWZjYzFk
NDlmMjE2ZTM1YzcxZjg2ZmFmODg2ZThhYTQ5OTc1OWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIv
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVy
LmNwcApAQCAtMzk5LDYgKzM5OSwxMCBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gVUlTY3Jp
cHRDb250cm9sbGVyOjphY2Nlc3NpYmlsaXR5U3BlYWtTZWxlY3Rpb25Db250ZW50KAogICAgIHJl
dHVybiBudWxscHRyOwogfQogCit2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6c2V0T2JzY3VyZWRJ
bnNldHMoZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9tLCBkb3VibGUgbGVm
dCkKK3sKK30KKwogI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0UnVubmVyU2hhcmVkL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIu
aCBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJv
bGxlci5oCmluZGV4IDQ2YzI4YjE0MDFkZDQ2NDE3NjQ0YWE3NjY3NGNhYWMzYjFiZDRjYTkuLjY2
MjczODg3YjllNmFiOTkxNmI1OWE5MTg5YTIyMWIxMDg0ZDdhMzAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oCisr
KyBiL1Rvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJv
bGxlci5oCkBAIC0xNTYsNiArMTU2LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlVmlld0Zy
b21XaW5kb3coSlNWYWx1ZVJlZik7CiAgICAgdm9pZCBhZGRWaWV3VG9XaW5kb3coSlNWYWx1ZVJl
Zik7CiAKKyAgICB2b2lkIHNldE9ic2N1cmVkSW5zZXRzKGRvdWJsZSB0b3AsIGRvdWJsZSByaWdo
dCwgZG91YmxlIGJvdHRvbSwgZG91YmxlIGxlZnQpOworCiBwcml2YXRlOgogICAgIFVJU2NyaXB0
Q29udHJvbGxlcihVSVNjcmlwdENvbnRleHQmKTsKICAgICAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KaW5kZXggN2MzNTFmODJmODY3YmRiN2Uy
ZDEwMjk5M2Q2YTAxZmYzNThiNjA0Mi4uYTBkMTEyZjU2MzI2NDBiNGY3MmYxZTcyZmE4ZjZiYzZi
OTAwZTJiNyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRy
b2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xs
ZXJJT1MubW0KQEAgLTg1LDYgKzg1LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1S
ZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKCkKICAgICAgICAgW3Njcm9sbFZpZXcgX3JlbW92
ZUFsbEFuaW1hdGlvbnM6WUVTXTsKICAgICAgICAgW3Njcm9sbFZpZXcgc2V0Wm9vbVNjYWxlOjEg
YW5pbWF0ZWQ6Tk9dOwogICAgICAgICBbc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OkNHUG9p
bnRaZXJvXTsKKworICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IFVJRWRnZUluc2V0
c1plcm87CisgICAgICAgIHdlYlZpZXctPnBsYXRmb3JtVmlldygpLl9vYnNjdXJlZEluc2V0cyA9
IFVJRWRnZUluc2V0c1plcm87CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KaW5kZXggY2U2N2Y1ZTU0MzlmODdj
NzVkOWNhNjVlMjQ2NGNmZWZmNmEzOGRkNi4uNTdhMTk1NDlkOWQ4OTNmMmUyZDgyNDI2NGMxNjA3
ZjMwYzVmMmRiZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3Jp
cHRDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2Ny
aXB0Q29udHJvbGxlcklPUy5tbQpAQCAtNjY4LDYgKzY2OCwxNCBAQCB2b2lkIFVJU2NyaXB0Q29u
dHJvbGxlcjo6cGxhdGZvcm1DbGVhckFsbENhbGxiYWNrcygpCiAgICAgd2ViVmlldy5kaWRFbmRT
Y3JvbGxpbmdDYWxsYmFjayA9IG5pbDsKIH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNl
dE9ic2N1cmVkSW5zZXRzKGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSwg
ZG91YmxlIGxlZnQpCit7CisgICAgVUlFZGdlSW5zZXRzIGluc2V0cyA9IFVJRWRnZUluc2V0c01h
a2UodG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0KTsKKyAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3
ZWJWaWV3ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBsYXRm
b3JtVmlldygpOworICAgIHdlYlZpZXcuc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBpbnNldHM7
CisgICAgd2ViVmlldy5fb2JzY3VyZWRJbnNldHMgPSBpbnNldHM7Cit9CisKIH0KIAogI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlOWUxN2QxNWM1MzI1MDVkMDM4OWY2NTAxNjljOTZh
M2IzNjY5NGVkLi5lYjU0MDkwMzg3M2RkYTE5NzVjNjE2YWQxOGE4ODVhZGI0Y2EwYTJmIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMDQtMTcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUHJvdmlkZSBhIHZpZXdwb3J0IHBhcmFtZXRlciB0byBk
aXNhYmxlIGNsaXBwaW5nIHRvIHRoZSBzYWZlIGFyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDc2NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzE1NjQ2MzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB0aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRz
LW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRpbGVkLWRyYXdp
bmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLW5vLWdldHMtbWFyZ2luLXRpbGVzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHRpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8t
c2FmZS1hcmVhLXllcy1nZXRzLW5vLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHRpbGVkLWRyYXdpbmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLXll
cy1nZXRzLW5vLW1hcmdpbi10aWxlcy5odG1sOiBBZGRlZC4KKwogMjAxNy0wNC0xNyAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0VGVzdHdlYnJ0Yy9h
dWRpby1yZXBsYWNlLXRyYWNrLmh0bWwgaXMgYSBmbGFreSBmYWlsdXJlCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS1u
by1nZXRzLW1hcmdpbi10aWxlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3
aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1hcmdpbi10aWxlcy1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc1MGJkM2RhMDc0MzIyMjFkOTQwYjFjMDEzOGRhMWQy
Zjg4MmRkNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdpbmcvaW9z
L3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLW5vLWdldHMtbWFyZ2luLXRpbGVzLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDIzIEBACisoR3JhcGhpY3NMYXllcgorICAoYW5jaG9yIDAuMDAgMC4w
MCkKKyAgKGJvdW5kcyAzMjAuMDAgNTQ4LjAwKQorICAodmlzaWJsZSByZWN0IDAuMDAsIDAuMDAg
MjgwLjAwIHggNTM4LjAwKQorICAoY292ZXJhZ2UgcmVjdCAtNDAuMDAsIC0xMC4wMCAzMjAuMDAg
eCA1NDguMDApCisgIChpbnRlcnNlY3RzIGNvdmVyYWdlIHJlY3QgMSkKKyAgKGNvbnRlbnRzU2Nh
bGUgMi4wMCkKKyAgKGNoaWxkcmVuIDEKKyAgICAoR3JhcGhpY3NMYXllcgorICAgICAgKGJvdW5k
cyAzMjAuMDAgNTQ4LjAwKQorICAgICAgKGNvbnRlbnRzT3BhcXVlIDEpCisgICAgICAodmlzaWJs
ZSByZWN0IDAuMDAsIDAuMDAgMjgwLjAwIHggNTM4LjAwKQorICAgICAgKGNvdmVyYWdlIHJlY3Qg
LTQwLjAwLCAtMTAuMDAgNTc2LjAwIHggODA0LjAwKQorICAgICAgKGludGVyc2VjdHMgY292ZXJh
Z2UgcmVjdCAxKQorICAgICAgKGNvbnRlbnRzU2NhbGUgMi4wMCkKKyAgICAgICh0aWxlIGNhY2hl
IGNvdmVyYWdlIC01MTIsIC01MTIgMTM0NCB4IDE1NzIpCisgICAgICAodGlsZSBzaXplIDUxMiB4
IDU0OCkKKyAgICAgICh0b3AgbGVmdCB0aWxlIC0xLCAtMSB0aWxlcyBncmlkIDMgeCAzKQorICAg
ICAgKGluIHdpbmRvdyAxKQorICAgICkKKyAgKQorKQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS1uby1nZXRzLW1h
cmdpbi10aWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQt
Y2xpcC10by1zYWZlLWFyZWEtbm8tZ2V0cy1tYXJnaW4tdGlsZXMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
YWE1MzI4NDhmZGUxMDAwN2JkN2ZjMjZhODFkMGVmZjUxMmQ5ZmZkCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFy
ZWEtbm8tZ2V0cy1tYXJnaW4tdGlsZXMuaHRtbApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUg
aHRtbD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VGbGV4aWJsZVZpZXdwb3J0PXRydWUg
XSAtLT4KKworPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVu
dD0iaW5pdGlhbC1zY2FsZT0xLCBjbGlwLXRvLXNhZmUtYXJlYT1ubyI+CisgICAgPHNjcmlwdD4K
KyAgICAgICAgZnVuY3Rpb24gZ2V0VUlTY3JpcHQoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYAorICAgICAgICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHVpQ29u
dHJvbGxlci5zZXRPYnNjdXJlZEluc2V0cygxMCwgMjAsIDMwLCA0MCk7CisgICAgICAgICAgICAg
ICAgdWlDb250cm9sbGVyLmltbWVkaWF0ZVNjcm9sbFRvT2Zmc2V0KC00MCwgLTEwKTsKKyAgICAg
ICAgICAgICAgICB1aUNvbnRyb2xsZXIuZG9BZnRlclZpc2libGVDb250ZW50UmVjdFVwZGF0ZShm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci51aVNjcmlwdENv
bXBsZXRlKCk7CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIH0pKCk7YAorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICB0ZXN0
UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZG9UZXN0KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChnZXRVSVNjcmlwdCgpLCBmdW5jdGlv
bihyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykgeworICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5ZXJzJykuaW5uZXJU
ZXh0ID0gaW50ZXJuYWxzLmxheWVyVHJlZUFzVGV4dChkb2N1bWVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVybmFscy5MQVlFUl9UUkVFX0lOQ0xVREVTX1ZJU0lCTEVfUkVDVFMgfCBp
bnRlcm5hbHMuTEFZRVJfVFJFRV9JTkNMVURFU19USUxFX0NBQ0hFUyk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcign
bG9hZCcsIGRvVGVzdCwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4K
KzxwcmUgaWQ9ImxheWVycyI+TGF5ZXIgdHJlZSBnb2VzIGhlcmU8L3A+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1j
bGlwLXRvLXNhZmUtYXJlYS15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEt
eWVzLWdldHMtbm8tbWFyZ2luLXRpbGVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NTQ3Yzk1
MjlmODA5OTEzNzE4OGY4N2MzOGQ3MGNmOTEwYTNlYmJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvdGlsZWQtZHJhd2luZy9pb3Mvdmlld3BvcnQtY2xpcC10by1zYWZlLWFyZWEteWVz
LWdldHMtbm8tbWFyZ2luLXRpbGVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIzIEBACisoR3Jh
cGhpY3NMYXllcgorICAoYW5jaG9yIDAuMDAgMC4wMCkKKyAgKGJvdW5kcyAzMjAuMDAgNTQ4LjAw
KQorICAodmlzaWJsZSByZWN0IDAuMDAsIDAuMDAgMjgwLjAwIHggNTM4LjAwKQorICAoY292ZXJh
Z2UgcmVjdCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAgKGludGVyc2VjdHMgY292ZXJh
Z2UgcmVjdCAxKQorICAoY29udGVudHNTY2FsZSAyLjAwKQorICAoY2hpbGRyZW4gMQorICAgIChH
cmFwaGljc0xheWVyCisgICAgICAoYm91bmRzIDMyMC4wMCA1NDguMDApCisgICAgICAoY29udGVu
dHNPcGFxdWUgMSkKKyAgICAgICh2aXNpYmxlIHJlY3QgMC4wMCwgMC4wMCAyODAuMDAgeCA1Mzgu
MDApCisgICAgICAoY292ZXJhZ2UgcmVjdCAwLjAwLCAwLjAwIDI4MC4wMCB4IDUzOC4wMCkKKyAg
ICAgIChpbnRlcnNlY3RzIGNvdmVyYWdlIHJlY3QgMSkKKyAgICAgIChjb250ZW50c1NjYWxlIDIu
MDApCisgICAgICAodGlsZSBjYWNoZSBjb3ZlcmFnZSAwLCAwIDMyMCB4IDU0OCkKKyAgICAgICh0
aWxlIHNpemUgNTEyIHggNTQ4KQorICAgICAgKHRvcCBsZWZ0IHRpbGUgMCwgMCB0aWxlcyBncmlk
IDEgeCAxKQorICAgICAgKGluIHdpbmRvdyAxKQorICAgICkKKyAgKQorKQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3cG9ydC1jbGlwLXRvLXNhZmUtYXJl
YS15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbCBiL0xheW91dFRlc3RzL3RpbGVkLWRyYXdp
bmcvaW9zL3ZpZXdwb3J0LWNsaXAtdG8tc2FmZS1hcmVhLXllcy1nZXRzLW5vLW1hcmdpbi10aWxl
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE2ZDE5NWEzNjQzNjhhN2RkNzQzMjBmNjk4MTFiMDlhYTNkNmQ0
ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90aWxlZC1kcmF3aW5nL2lvcy92aWV3
cG9ydC1jbGlwLXRvLXNhZmUtYXJlYS15ZXMtZ2V0cy1uby1tYXJnaW4tdGlsZXMuaHRtbApAQCAt
MCwwICsxLDQzIEBACis8IURPQ1RZUEUgaHRtbD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyB1
c2VGbGV4aWJsZVZpZXdwb3J0PXRydWUgXSAtLT4KKworPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0
YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLCBjbGlwLXRvLXNhZmUt
YXJlYT15ZXMiPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIGdldFVJU2NyaXB0KCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIuc2V0T2JzY3VyZWRJbnNldHMoMTAsIDIw
LCAzMCwgNDApOworICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5pbW1lZGlhdGVTY3JvbGxU
b09mZnNldCgtNDAsIC0xMCk7CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLmRvQWZ0ZXJW
aXNpYmxlQ29udGVudFJlY3RVcGRhdGUoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAg
ICB1aUNvbnRyb2xsZXIudWlTY3JpcHRDb21wbGV0ZSgpOworICAgICAgICAgICAgICAgIH0pCisg
ICAgICAgICAgICB9KSgpO2AKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIGRvVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIucnVuVUlTY3Jp
cHQoZ2V0VUlTY3JpcHQoKSwgZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2xheWVycycpLmlubmVyVGV4dCA9IGludGVybmFscy5sYXllclRyZWVBc1RleHQo
ZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbHMuTEFZRVJfVFJFRV9J
TkNMVURFU19WSVNJQkxFX1JFQ1RTIHwgaW50ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVERVNfVElM
RV9DQUNIRVMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBkb1Rlc3QsIGZhbHNlKTsKKyAgICA8L3Nj
cmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8cHJlIGlkPSJsYXllcnMiPkxheWVyIHRyZWUgZ29l
cyBoZXJlPC9wPgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="328566"
          type_id="1"
          status="+"
          setter="bdakin"
    />
          </attachment>
      

    </bug>

</bugzilla>