<?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>217711</bug_id>
          
          <creation_ts>2020-10-14 09:11:04 -0700</creation_ts>
          <short_desc>Refactor HighlightData</short_desc>
          <delta_ts>2020-10-14 13:43:21 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Megan Gardner">megan_gardner</reporter>
          <assigned_to name="Megan Gardner">megan_gardner</assigned_to>
          <cc>annulen</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1697735</commentid>
    <comment_count>0</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-10-14 09:11:04 -0700</bug_when>
    <thetext>Refactor HighlightData</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697738</commentid>
    <comment_count>1</comment_count>
      <attachid>411329</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-10-14 09:16:30 -0700</bug_when>
    <thetext>Created attachment 411329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697756</commentid>
    <comment_count>2</comment_count>
      <attachid>411338</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-10-14 09:55:17 -0700</bug_when>
    <thetext>Created attachment 411338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697765</commentid>
    <comment_count>3</comment_count>
      <attachid>411343</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-10-14 10:06:27 -0700</bug_when>
    <thetext>Created attachment 411343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697767</commentid>
    <comment_count>4</comment_count>
      <attachid>411345</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-10-14 10:14:20 -0700</bug_when>
    <thetext>Created attachment 411345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697774</commentid>
    <comment_count>5</comment_count>
      <attachid>411347</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-10-14 10:35:10 -0700</bug_when>
    <thetext>Created attachment 411347
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697804</commentid>
    <comment_count>6</comment_count>
      <attachid>411347</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-14 11:54:02 -0700</bug_when>
    <thetext>Comment on attachment 411347
Patch

This looks great. I have some additional ideas for refinement here; HighlightData itself can be simplified further; I’m not sure we even need the concept of RenderRange; we can probably just use SimpleRange instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697860</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-14 13:42:29 -0700</bug_when>
    <thetext>Committed r268484: &lt;https://trac.webkit.org/changeset/268484&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 411347.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697861</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-14 13:43:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/70306552&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411329</attachid>
            <date>2020-10-14 09:16:30 -0700</date>
            <delta_ts>2020-10-14 09:55:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217711-20201014091629.patch</filename>
            <type>text/plain</type>
            <size>62073</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE0MDAyN2UwYjY3MTg0
M2M1MWI2ZjZlNjljNTc3ZDRiZGVmMTVkZi4uM2QzYjdkMGE3NjIyMjc0MDFkYjc5ZjBlNzRlZjNm
ZTdmM2Y2N2NhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDIwLTEwLTE0ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3Ig
SGlnaGxpZ2h0RGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3NzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSGlnaGxpZ2h0RGF0YSB3YXMgcmVuYW1lZCB3aGVuIGl0IHdhcyB1c2VkIGZvciBtb3Jl
IHRoYXQgc2VsZWN0aW9ucywgYnV0CisgICAgICAgIG1vcmUgdGhhbiBoYWxmIHRoZSBmaWxlIHdh
cyBvbmx5IHN1cHBvc2VkIHRvIGJlIHVzZWQgdG8gZGVhbCB3aXRoIHRoZSBjdXJyZW50CisgICAg
ICAgIHNlbGVjdGlvbiwgc28gSSd2ZSBzcGxpdCBpdCBiYWNrIG91dCBpbnRvIGEgbW9yZSByZWFz
b25hYmxlIHNldCBvZiBmaWxlcy4KKyAgICAgICAgQWxzbyBtYWRlIG9mZnNldHMgbm8gbG9uZ2Vy
IG9wdGlvbmFsLCBhcyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBuZWVkLgorICAgICAgICBF
eHRlbmRlZCB0aGUgSGlnaGxpZ2h0RGF0YSBzZXRSZW5kZXJSYW5nZSBpbnRvIElubGluZVRleHRC
b3gsIGFzIGl0J3MgYSBiZXR0ZXIKKyAgICAgICAgd2F5IHRvIGNhbGN1bGF0ZSB0aGF0IGRvZXMg
bm90IHVzZSBkZXByZWNhdGVkIGZ1bmN0aW9ucy4gCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hh
bmdlLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Nh
cmV0Q29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWlu
dENvbnRlbnRzRm9yU25hcHNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlOjp+U2NvcGVkRnJh
bWVTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JS
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUmFuZ2VJdGVyYXRvcjo6UmVuZGVyUmFuZ2VJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSYW5nZUl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJhbmdlSXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmFuZ2VJdGVyYXRvcjo6Y2hlY2tGb3JTcGFubmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlbmRlcmVyQWZ0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0
YTo6aGlnaGxpZ2h0U3RhdGVGb3JSZW5kZXJlcik6CisgICAgICAgICgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6aXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb2xsZWN0U2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjpIaWdobGlnaHREYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNldFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpyZXBhaW50U2VsZWN0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OmNvbGxlY3RCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6YXBwbHlTZWxl
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9IaWdobGlnaHREYXRhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSYW5nZTo6UmVuZGVyUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmFuZ2U6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmFuZ2U6OnN0YXJ0
T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJhbmdlOjplbmRPZmZzZXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmFuZ2U6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6c3RhcnRPZmZzZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6ZW5kT2Zmc2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlOjpSZW5kZXJSYW5nZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6c3Rh
cnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6UmVu
ZGVyUmFuZ2U6OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGln
aHREYXRhOjpSZW5kZXJSYW5nZTo6c3RhcnRPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2U6OmVuZE9mZnNldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6
b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRE
YXRhOjpib3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0
RGF0YTo6Ym91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckhpZ2hsaWdodHMgY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsYWNlZDo6Y2FsY3VsYXRlSGlnaGxpZ2h0Q29sb3IgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NlbGVjdGlvbkRh
dGEuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0
YS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJlckFmdGVyT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OmlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdFNl
bGVjdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uRGF0YTo6U2VsZWN0aW9u
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25EYXRhOjpzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0aW9uRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uRGF0YTo6cmVwYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25EYXRh
Ojpjb2xsZWN0Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE6
OmFwcGx5KToKKyAgICAgICAgKiByZW5kZXJpbmcvU2VsZWN0aW9uRGF0YS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE6OmJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25EYXRhOjpib3VuZHNDbGlwcGVkVG9WaXNpYmxlQ29udGVudCBjb25z
dCk6CisKIDIwMjAtMTAtMTMgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBQYWludCBDU1MgaGlnaGxpZ2h0cyBvdmVyIGltYWdlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UKaW5kZXggNTdmODMyNGIwMTI1Y2FmZjFhZmUwZDNiYmU1NjY5M2VmNmViODlmZC4uMWYx
ZDE1YmRmMmYzODQyZDBiNzVkMWQyNGFkMjk1YmI4M2I2NGExOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CkBAIC0xNDM5LDYgKzE0MzksNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCiAgICAgcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guaAogICAgIHJlbmRlcmluZy9TY3JvbGxBbGlnbm1lbnQuaAorICAgIHJlbmRlcmluZy9T
ZWxlY3Rpb25EYXRhLmgKIAogICAgIHJlbmRlcmluZy9saW5lL0xpbmVXaWR0aC5oCiAgICAgcmVu
ZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggOTY1YWRjMTMw
ZjFkZjQzNjViMDgyOTlkMjY2ZDY4ZjlmY2Y4MWIxZC4uNjI0MWM0MGQyZGNkZjk0NWUzMDc3ZDYw
N2M0MDNkMzYyMTRhNTcyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIyMjEsNiArMjIyMSw3IEBAIHJl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKIHJlbmRl
cmluZy9Sb290SW5saW5lQm94LmNwcAogcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5jcHAKK3Jl
bmRlcmluZy9TZWxlY3Rpb25EYXRhLmNwcAogcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmNwcAogcmVu
ZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKIHJlbmRlcmluZy9UZXh0UGFpbnRTdHls
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA0YzA3NTc4MDk2ZjQ2Y2ZhMTdjNDgwZjMzNTM1ZDdlM2M0OGE5OWJkLi4yY2Rh
OThhOTdjNDEzMThkMWQwMDkyNTU0ZjEyMzRlMzA0ZmJiMjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTk3LDYgKzExOTcs
NyBAQAogCQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQxNTI5
MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDU3NzVFNTIwNDcyRjcz
MDA4RENFNUQgLyogTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ1Nzc1RTQyMDQ3MkY3MzAwOERDRTVE
IC8qIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDYzQ0Y2ODIyMTJGQTY4MDAxQTg1NzcgLyog
RGF0YURldGVjdG9yc0NvcmVTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDNzk0MUUyMUM1NkMyOTMwMEE0QzU4RSAvKiBEYXRhRGV0ZWN0
b3JzQ29yZVNvZnRMaW5rLm1tICovOyB9OworCQk0NDY1RDdCRDI1MzZEMDVFMDAxNjY2NkQgLyog
U2VsZWN0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDRCMzhCRjQyNTM2OTAxQTAwQTQ0NThEIC8qIFNlbGVjdGlvbkRhdGEuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDZEQzY0ODI0QTI5
REFCMDA2MUYzOTAgLyogUGxheWJhY2tUYXJnZXRDbGllbnRDb250ZXh0SWRlbnRpZmllci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ2REM2NDYyNEEy
OUQ5QjAwNjFGMzkwIC8qIFBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElkZW50aWZpZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDcxNzEw
RTIwNUFGOTQ1MDAwQTExNkUgLyogTWVkaWFRdWVyeVBhcnNlckNvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NzE3MTBDMjA1QUY5NDUwMDBB
MTE2RSAvKiBNZWRpYVF1ZXJ5UGFyc2VyQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0Nzk1ODA0MTY0M0I0OUEwMDFFMEE3RiAvKiBQ
YXJzZWRDb250ZW50VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDQ3OTU4MDMxNjQzQjQ3QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUwNDQs
NyArNTA0NSw2IEBACiAJCUU0N0MzOTMwMUZFNkUwRkQwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVp
bGRlckZpcnN0TGV0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJGaXJz
dExldHRlci5oICovOyB9OwogCQlFNDdDMzkzMTFGRTZFMTAyMDBCQkJDNkIgLyogUmVuZGVyVHJl
ZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyNTFGRTZFMERCMDBCQkJDNkIgLyogUmVuZGVyVHJlZVVw
ZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggKi87IH07CiAJCUU0N0MzOTMyMUZFNkUxMDUwMEJCQkM2
QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI4MUZFNkUwREQwMEJCQkM2QiAvKiBSZW5kZXJUcmVl
QnVpbGRlckxpc3QuaCAqLzsgfTsKLQkJRTQ3QzM5MzMxRkU2RTEwODAwQkJCQzZCIC8qIFJlbmRl
clRyZWVCdWlsZGVyTXVsdGlDb2x1bW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI3MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVp
bGRlck11bHRpQ29sdW1uLmggKi87IH07CiAJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBF
eHRlbnNpb25TdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ3RTI3NjQxNjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hl
ZXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RTQ4MTM3QjkxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODEzN0I4MURCM0I1MjYwMDVDNTlC
RiAvKiBTdHlsZVZhbGlkaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTQ4NjNDRkUyMzg0MkU5RTAwOTcyMTU4IC8qIFJ1bGVEYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg2M0NGRDIzODQy
RTlFMDA5NzIxNTggLyogUnVsZURhdGEuaCAqLzsgfTsKQEAgLTc5MjQsNiArNzkyNCw4IEBACiAJ
CTQ0QTIwREI4MEY4NDE2NkMwMEIzRTFGRSAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJT1MuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0QTI4QUFCMTJERkI4QUMwMEFFOTIzQiAvKiBN
YXRoTUxFbGVtZW50RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBN
YXRoTUxFbGVtZW50RmFjdG9yeS5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9NYXRo
TUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQk0NEEyOEFBRTEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1MTmFtZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gTWF0aE1MTmFtZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvTWF0aE1MTmFtZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKKwkJNDRCMzhCRjQyNTM2OTAxQTAwQTQ0NThEIC8qIFNlbGVjdGlvbkRhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0aW9uRGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0NEIzOEJGOTI1MzY5QTg4MDBBNDQ1OEQgLyogU2VsZWN0aW9uRGF0
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3Rpb25EYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRDOTkxODEwRjNEMUUwRDAwNTg2
NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gU2Nyb2xsYmFyVGhlbWVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ0Qzk5MTg1MEYzRDFFQkUwMDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJUaGVtZUlPUy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyogVGhl
bWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhlbWVJT1MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MjYwLDYgKzI5MjYyLDggQEAKIAkJCQlBOENG
RjVEQTBBMTU1QTA1MDAwQTQyMzQgLyogUm9vdElubGluZUJveC5oICovLAogCQkJCTVEOTI1QjY1
MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuY3BwICovLAogCQkJCTVEOTI1QjY2
MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuaCAqLywKKwkJCQk0NEIzOEJGOTI1
MzY5QTg4MDBBNDQ1OEQgLyogU2VsZWN0aW9uRGF0YS5jcHAgKi8sCisJCQkJNDRCMzhCRjQyNTM2
OTAxQTAwQTQ0NThEIC8qIFNlbGVjdGlvbkRhdGEuaCAqLywKIAkJCQlFMzFDRDc1MDIyOUY3NDk1
MDBGQkRBMTkgLyogVGFibGVMYXlvdXQuY3BwICovLAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBB
NDIzNCAvKiBUYWJsZUxheW91dC5oICovLAogCQkJCTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAv
KiBUZXh0QXV0b1NpemluZy5jcHAgKi8sCkBAIC0zMDY1NCw3ICszMDY1OCw2IEBACiAJCQkJNTE3
NDFEMEYwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tGb3J3YXJkQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0E4QzgxRTExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUExQjg3RDIwODdDNEMwMDA5NzlBNzUgLyogQmFja0Zv
cndhcmRJdGVtSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5NDcyMTcyNTMyM0My
MTAwRjE1M0M4IC8qIEJhY2tncm91bmRJbWFnZUdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzEyNEVFODBDMjY0MUNEMDA5RTIzNDkgLyogQmFyUHJvcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDYwQkI2MTYxRDBBMUJGMDAwMjIxODEyIC8qIEJhc2U2NFV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODMxOThGQkYyNEExNjBERDAwNDIwQjA1IC8qIEJhc2VBdWRpb0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzM2OTAsNyArMzM2OTMsNiBAQAogCQkJCTExOTM0MDk3MUZF
RDcxNTUwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTFDQjI3ODkyMDNCQTU3MDAwNEExREM5IC8qIFJlbmRlclRyZWVCdWlsZGVy
RnVsbFNjcmVlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5MzIxRkU2RTEwNTAwQkJCQzZC
IC8qIFJlbmRlclRyZWVCdWlsZGVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ3QzM5MzMx
RkU2RTEwODAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTXVsdGlDb2x1bW4uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTExOTM0MDhBMUZFQjM1NUQwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRl
clJ1YnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTExOTM0MDc5MUZFOEI5MjMwMDkzNUYxRSAvKiBS
ZW5kZXJUcmVlQnVpbGRlclRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxMTYzRjgyNDI0RTVE
NUFFMDAwQUI5NjAgLyogUmVuZGVyVHJlZU11dGF0aW9uRGlzYWxsb3dlZFNjb3BlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTMzODgyLDYgKzMzODg0LDcgQEAKIAkJCQk5NzREMkRBNTE0NkE1MzVEMDBE
NTFGOEIgLyogU2VjdXJpdHlQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENUJDNDI3MTZG
ODgyRUUwMDcwNDhEMCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0NDY1RDdCRDI1MzZEMDVFMDAxNjY2NkQgLyogU2VsZWN0aW9u
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkVBODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8qIFNl
bGVjdGlvblJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNDA1Qzg5MTkwQjAxNDQwMDc1NEY5
NCAvKiBTZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NEI0QkI0
MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA2ZWM5MWMwNmZhZTc0
ZjRkZjQzMjc1OWM2YmViNmYxYjkxNzZjYjdhLi43NzBkOGJmMDcwMDI3Y2U5Y2Q1Y2FhNjQxMzNl
OGM3YmExOWM1YmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cApAQCAtNDUxLDcgKzQ1MSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldE5lZWRzU2VsZWN0
aW9uVXBkYXRlKFJldmVhbFNlbGVjdGlvbkFmdGVyVXBkYXRlIHJldmVhbE1vCiAgICAgICAgIG1f
c2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKICAgICBt
X3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3
ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQotICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5j
bGVhclNlbGVjdGlvbigpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogfQog
CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhU
ZXh0U3RhdGVDaGFuZ2VJbnRlbnQmIGludGVudCkKQEAgLTUwNyw3ICs1MDcsNyBAQCB2b2lkIERy
YWdDYXJldENvbnRyb2xsZXI6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbm9kZS5kb2N1bWVudCgpLnJl
bmRlclZpZXcoKSkKLSAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsK
KyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIGNsZWFyKCk7CiB9CkBA
IC01NjYsNyArNTY2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBib28KIAogICAgIGlmIChjbGVh
clJlbmRlclRyZWVTZWxlY3Rpb24pIHsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBu
b2RlLmRvY3VtZW50KCkucmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5z
ZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOworICAgICAgICAgICAgcmVuZGVyVmlldy0+c2Vs
ZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgICAgICAgICAgLy8gVHJpZ2dlciBhIHNlbGVjdGlvbiB1
cGRhdGUgc28gdGhlIHNlbGVjdGlvbiB3aWxsIGJlIHNldCBhZ2Fpbi4KICAgICAgICAgICAgIG1f
c2VsZWN0aW9uUmV2ZWFsSW50ZW50ID0gQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKTsKQEAgLTE1
NzAsNyArMTU3MCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJh
bWUoKQogI2VuZGlmCiAKICAgICBpZiAoYXV0byogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZp
ZXcoKSkKLSAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAg
ICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIHNldFNlbGVjdGlvbldpdGhvdXRV
cGRhdGluZ0FwcGVhcmFuY2UoVmlzaWJsZVNlbGVjdGlvbigpLCBkZWZhdWx0U2V0U2VsZWN0aW9u
T3B0aW9ucygpLCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRleHRHcmFudWxhcml0eTo6
Q2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgIG1fcHJldmlvdXNDYXJldE5vZGUgPSBudWxscHRy
OwpAQCAtMjA1OCw3ICsyMDU4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0
aXZlU3RhdGVDaGFuZ2VkKCkKICAgICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8gd2UgaGF2ZSB0
byB1cGRhdGUgcGxhY2VzIHRob3NlIGNvbG9ycyB3ZXJlIHBhaW50ZWQuCiAgICAgaWYgKFJlbmRl
clZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHZpZXctPnNl
bGVjdGlvbigpLnJlcGFpbnRTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCku
cmVwYWludCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0aXZlIGZyYW1lLgog
ICAgIGlmIChhY3RpdmVBbmRGb2N1c2VkKQpAQCAtMjE1Myw3ICsyMTUzLDcgQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAjZW5kaWYKIAogICAgIGlmICghc2VsZWN0
aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlv
bigpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0yMTc4LDcgKzIxNzgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRh
dGVBcHBlYXJhbmNlKCkKICAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBv
cy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0g
ZW5kUG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgICAgIEFTU0VSVChzdGFydE9m
ZnNldCA+PSAwICYmIGVuZE9mZnNldCA+PSAwKTsKLSAgICAgICAgdmlldy0+c2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKHsgc3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0p
OworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5zZXQoeyBzdGFydFJlbmRlcmVyLCBlbmRSZW5k
ZXJlciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGVuZE9mZnNldCkgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKaW5kZXggZTFhODQwODk4NTdkMzlhMzNlNTBhMDdiMDRhMjYzNzQ1MGVkNmI5YS4uNjA5MzY4
YzhkMjcxNjdhOGQxOTUwZTNiNzI2OTdjMGU5OGQyYjhiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcApAQCAtNDM1MSw3ICs0MzUxLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVu
dHNGb3JTbmFwc2hvdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QKICAg
ICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb24gPT0gRXhjbHVkZVNlbGVjdGlvbikgewogICAgICAg
ICBmb3IgKGF1dG8qIGZyYW1lID0gbV9mcmFtZS5wdHIoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQobV9mcmFtZS5wdHIoKSkpIHsKICAgICAgICAgICAgIGlmIChh
dXRvKiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQotICAgICAgICAgICAg
ICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgICAg
ICAgICAgcmVuZGVyVmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKaW5kZXggNjMwZDQ2ZTJiNTdiNDBl
NGNmNGUzODA4NjVlNmNmMWE0OTE2M2NkOC4uN2I3M2I3NTBhN2Y2YTgwZTVjODRiNWM0MjY2ZjFl
YzM4MmY5NWE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNlbGVjdGlvbkRhdGEuaCIK
ICNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKIApA
QCAtMTQzLDEyICsxNDQsMTIgQEAgc3RydWN0IFNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUgewog
ICAgIHsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVy
ZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKHNlbGVjdGlvbik7Ci0gICAgICAgICAgICByZW5k
ZXJWaWV3LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLnZhbHVlKCksIEhpZ2hs
aWdodERhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5nKTsKKyAgICAgICAgICAgIHJlbmRlclZpZXct
PnNlbGVjdGlvbigpLnNldChzZWxlY3Rpb24udmFsdWUoKSwgU2VsZWN0aW9uRGF0YTo6UmVwYWlu
dE1vZGU6Ok5vdGhpbmcpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgY29uc3QgRnJhbWUmIGZy
YW1lOwotICAgIE9wdGlvbmFsPEhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlPiBzZWxlY3Rpb247
CisgICAgT3B0aW9uYWw8UmVuZGVyUmFuZ2U+IHNlbGVjdGlvbjsKIH07CiAKICNpZiAhUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKQEAgLTE4NSw3ICsxODYsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJv
bwogICAgIGludCBzdGFydE9mZnNldCA9IHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7
CiAgICAgaW50IGVuZE9mZnNldCA9IGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAg
IEFTU0VSVChzdGFydE9mZnNldCA+PSAwICYmIGVuZE9mZnNldCA+PSAwKTsKLSAgICB2aWV3LT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oeyBzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVu
ZE9mZnNldCkgfSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOworICAgIHZp
ZXctPnNlbGVjdGlvbigpLnNldCh7IHN0YXJ0UmVuZGVyZXIsIGVuZFJlbmRlcmVyLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zm
c2V0KSB9LCBTZWxlY3Rpb25EYXRhOjpSZXBhaW50TW9kZTo6Tm90aGluZyk7CiAgICAgLy8gV2Ug
Y2FwdHVyZSB1c2luZyBzbmFwc2hvdEZyYW1lUmVjdCgpIGJlY2F1c2Ugd2UgZmFrZSB1cCB0aGUg
c2VsZWN0aW9uIHVzaW5nCiAgICAgLy8gRnJhbWVWaWV3IGJ1dCBzbmFwc2hvdFNlbGVjdGlvbigp
IHVzZXMgdGhlIHNlbGVjdGlvbiBmcm9tIHRoZSBGcmFtZSBpdHNlbGYuCiAgICAgcmV0dXJuIGNy
ZWF0ZURyYWdJbWFnZUZyb21TbmFwc2hvdChzbmFwc2hvdEZyYW1lUmVjdChmcmFtZSwgdmlldy0+
c2VsZWN0aW9uKCkuYm91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQoKSwgb3B0aW9ucyksIG51
bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERh
dGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCmluZGV4
IDJiZGQ2OTc3Zjk1NzkzYzE2NTlmM2JjMTY3MzE2NjJhM2UzNjc0ZDcuLjY1ZTMyYTQ4NTBkNjdj
Y2QwMDRlMmE3NTZiMGYxYjdkNzhkMWJjYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9IaWdobGlnaHREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SGlnaGxpZ2h0RGF0YS5jcHAKQEAgLTQ2LDExNSArNDYsNDYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1uYW1lc3BhY2UgeyAvLyBTZWUgYnVnICMxNzc4MDguCiAKLXN0cnVjdCBTZWxlY3Rp
b25EYXRhIHsKLSAgICB1c2luZyBSZW5kZXJlck1hcCA9IEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+PjsKLSAgICB1c2luZyBSZW5kZXJC
bG9ja01hcCA9IEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyQmxvY2tTZWxlY3Rpb25JbmZvPj47CiAKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRP
ZmZzZXQ7Ci0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZE9mZnNldDsKLSAgICBSZW5kZXJlck1h
cCByZW5kZXJlcnM7Ci0gICAgUmVuZGVyQmxvY2tNYXAgYmxvY2tzOwotfTsKLQotY2xhc3MgSGln
aGxpZ2h0SXRlcmF0b3IgewotcHVibGljOgotICAgIEhpZ2hsaWdodEl0ZXJhdG9yKFJlbmRlck9i
amVjdCogc3RhcnQpCi0gICAgICAgIDogbV9jdXJyZW50KHN0YXJ0KQotICAgIHsKLSAgICAgICAg
Y2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgfQotICAgIAotICAgIFJlbmRlck9iamVjdCogY3VycmVu
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50OwotICAgIH0KLSAgICAK
LSAgICBSZW5kZXJPYmplY3QqIG5leHQoKQotICAgIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBj
dXJyZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBtX3NwYW5u
ZXJTdGFjay5sYXN0KCktPnNwYW5uZXIoKTsKLSAgICAgICAgbV9jdXJyZW50ID0gbV9jdXJyZW50
LT5uZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bhbik7Ci0gICAgICAgIGNoZWNrRm9yU3Bhbm5lcigp
OwotICAgICAgICBpZiAoIW1fY3VycmVudCAmJiBjdXJyZW50U3BhbikgewotICAgICAgICAgICAg
UmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lclN0YWNrLmxhc3QoKTsKLSAgICAg
ICAgICAgIG1fc3Bhbm5lclN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIG1fY3VycmVu
dCA9IHBsYWNlaG9sZGVyLT5uZXh0SW5QcmVPcmRlcigpOwotICAgICAgICAgICAgY2hlY2tGb3JT
cGFubmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fY3VycmVudDsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0ZvclNwYW5uZXIoKQotICAgIHsKLSAgICAgICAgaWYg
KCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obV9jdXJyZW50KSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIgPSBkb3duY2FzdDxS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKm1fY3VycmVudCk7Ci0gICAgICAg
IG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOwotICAgICAgICBtX2N1cnJlbnQg
PSBwbGFjZWhvbGRlci5zcGFubmVyKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyT2JqZWN0KiBtX2N1
cnJlbnQgeyBudWxscHRyIH07Ci0gICAgVmVjdG9yPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKLQotc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlck9mZnNldChjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyLCB1bnNpZ25lZCBvZmZzZXQpCitSZW5kZXJSYW5nZUl0ZXJhdG9y
OjpSZW5kZXJSYW5nZUl0ZXJhdG9yKFJlbmRlck9iamVjdCogc3RhcnQpCisgICAgOiBtX2N1cnJl
bnQoc3RhcnQpCiB7Ci0gICAgYXV0byogY2hpbGQgPSByZW5kZXJlci5jaGlsZEF0KG9mZnNldCk7
Ci0gICAgcmV0dXJuIGNoaWxkID8gY2hpbGQgOiByZW5kZXJlci5uZXh0SW5QcmVPcmRlckFmdGVy
Q2hpbGRyZW4oKTsKKyAgICBjaGVja0ZvclNwYW5uZXIoKTsKIH0KIAotc3RhdGljIGJvb2wgaXNW
YWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNv
bnN0IEhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlJiBzZWxlY3Rpb24pCitSZW5kZXJPYmplY3Qq
IFJlbmRlclJhbmdlSXRlcmF0b3I6OmN1cnJlbnQoKSBjb25zdAogewotICAgIHJldHVybiAocmVu
ZGVyZXIuY2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgJnJlbmRlcmVyID09IHNlbGVjdGlvbi5zdGFy
dCgpIHx8ICZyZW5kZXJlciA9PSBzZWxlY3Rpb24uZW5kKCkpCi0gICAgICAgICYmIHJlbmRlcmVy
LnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZQot
ICAgICAgICAmJiByZW5kZXJlci5jb250YWluaW5nQmxvY2soKTsKKyAgICByZXR1cm4gbV9jdXJy
ZW50OwogfQogCi1zdGF0aWMgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldyhj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJSYW5nZUl0
ZXJhdG9yOjpuZXh0KCkKIHsKLSAgICBhdXRvKiBjb250YWluaW5nQmxvY2sgPSByZW5kZXJlci5j
b250YWluaW5nQmxvY2soKTsKLSAgICByZXR1cm4gaXM8UmVuZGVyVmlldz4oY29udGFpbmluZ0Js
b2NrKSA/IG51bGxwdHIgOiBjb250YWluaW5nQmxvY2s7CisgICAgUmVuZGVyT2JqZWN0KiBjdXJy
ZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBtX3NwYW5uZXJT
dGFjay5sYXN0KCktPnNwYW5uZXIoKTsKKyAgICBtX2N1cnJlbnQgPSBtX2N1cnJlbnQtPm5leHRJ
blByZU9yZGVyKGN1cnJlbnRTcGFuKTsKKyAgICBjaGVja0ZvclNwYW5uZXIoKTsKKyAgICBpZiAo
IW1fY3VycmVudCAmJiBjdXJyZW50U3BhbikgeworICAgICAgICBSZW5kZXJPYmplY3QqIHBsYWNl
aG9sZGVyID0gbV9zcGFubmVyU3RhY2subGFzdCgpOworICAgICAgICBtX3NwYW5uZXJTdGFjay5y
ZW1vdmVMYXN0KCk7CisgICAgICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLT5uZXh0SW5QcmVP
cmRlcigpOworICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKKyAgICB9CisgICAgcmV0dXJuIG1f
Y3VycmVudDsKIH0KIAotc3RhdGljIFNlbGVjdGlvbkRhdGEgY29sbGVjdFNlbGVjdGlvbkRhdGEo
Y29uc3QgSGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2UmIHNlbGVjdGlvbiwgYm9vbCByZXBhaW50
RGlmZmVyZW5jZSkKK3ZvaWQgUmVuZGVyUmFuZ2VJdGVyYXRvcjo6Y2hlY2tGb3JTcGFubmVyKCkK
IHsKLSAgICBTZWxlY3Rpb25EYXRhIG9sZFNlbGVjdGlvbkRhdGEgeyBzZWxlY3Rpb24uc3RhcnRP
ZmZzZXQoKSwgc2VsZWN0aW9uLmVuZE9mZnNldCgpLCB7IH0sIHsgfSB9OwotICAgIC8vIEJsb2Nr
cyBjb250YWluIHNlbGVjdGVkIG9iamVjdHMgYW5kIGZpbGwgZ2FwcyBiZXR3ZWVuIHRoZW0sIGVp
dGhlciBvbiB0aGUgbGVmdCwgcmlnaHQsIG9yIGluIGJldHdlZW4gbGluZXMgYW5kIGJsb2Nrcy4K
LSAgICAvLyBJbiBvcmRlciB0byBnZXQgdGhlIHJlcGFpbnQgcmVjdCByaWdodCwgd2UgaGF2ZSB0
byBleGFtaW5lIGxlZnQsIG1pZGRsZSwgYW5kIHJpZ2h0IHJlY3RzIGluZGl2aWR1YWxseSwgc2lu
Y2Ugb3RoZXJ3aXNlCi0gICAgLy8gdGhlIHVuaW9uIG9mIHRob3NlIHJlY3RzIG1pZ2h0IHJlbWFp
biB0aGUgc2FtZSBldmVuIHdoZW4gY2hhbmdlcyBoYXZlIG9jY3VycmVkLgotICAgIGF1dG8qIHN0
YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gbnVsbHB0
cjsKLSAgICBpZiAoc2VsZWN0aW9uLmVuZCgpKQotICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRl
ck9mZnNldCgqc2VsZWN0aW9uLmVuZCgpLCBzZWxlY3Rpb24uZW5kT2Zmc2V0KCkudmFsdWUoKSk7
Ci0gICAgSGlnaGxpZ2h0SXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc3RhcnQpOwotICAgIHdo
aWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVuZGVy
ZXJGb3JTZWxlY3Rpb24oKnN0YXJ0LCBzZWxlY3Rpb24pKSB7Ci0gICAgICAgICAgICAvLyBCbG9j
a3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdpbiBnYXBz
LiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KLSAgICAgICAgICAgIG9sZFNlbGVjdGlv
bkRhdGEucmVuZGVyZXJzLnNldChzdGFydCwgbWFrZVVuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZv
Pigqc3RhcnQsIHRydWUpKTsKLSAgICAgICAgICAgIGlmIChyZXBhaW50RGlmZmVyZW5jZSkgewot
ICAgICAgICAgICAgICAgIGZvciAoYXV0byogYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1Zp
ZXcoKnN0YXJ0KTsgYmxvY2s7IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpibG9j
aykpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byYgYmxvY2tJbmZvID0gb2xkU2VsZWN0aW9u
RGF0YS5ibG9ja3MuYWRkKGJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gbWFrZVVuaXF1ZTxSZW5kZXJCbG9j
a1NlbGVjdGlvbkluZm8+KCpibG9jayk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHN0YXJ0ID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpOwot
ICAgIH0KLSAgICByZXR1cm4gb2xkU2VsZWN0aW9uRGF0YTsKKyAgICBpZiAoIWlzPFJlbmRlck11
bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPihtX2N1cnJlbnQpKQorICAgICAgICByZXR1cm47
CisgICAgYXV0byYgcGxhY2Vob2xkZXIgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNwYW5u
ZXJQbGFjZWhvbGRlcj4oKm1fY3VycmVudCk7CisgICAgbV9zcGFubmVyU3RhY2suYXBwZW5kKCZw
bGFjZWhvbGRlcik7CisgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXIuc3Bhbm5lcigpOwogfQog
Ci1IaWdobGlnaHREYXRhOjpIaWdobGlnaHREYXRhKFJlbmRlclZpZXcmIHZpZXcpCi0gICAgOiBt
X3JlbmRlclZpZXcodmlldykKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAsIG1f
c2VsZWN0aW9uUmVjdEdhdGhlcmVyKHZpZXcpCi0jZW5kaWYKK3N0YXRpYyBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgdW5zaWdu
ZWQgb2Zmc2V0KSAvLyA8TU1HPiB1c2VkIGluIGJvdGgsIG1pZ2h0IHNob3VsZCBub3QgYmUgc3Rh
dGljCiB7CisgICAgYXV0byogY2hpbGQgPSByZW5kZXJlci5jaGlsZEF0KG9mZnNldCk7CisgICAg
cmV0dXJuIGNoaWxkID8gY2hpbGQgOiByZW5kZXJlci5uZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRy
ZW4oKTsKIH0KIAogdm9pZCBIaWdobGlnaHREYXRhOjpzZXRSZW5kZXJSYW5nZShjb25zdCBSZW5k
ZXJSYW5nZSYgcmVuZGVyUmFuZ2UpCkBAIC0xOTgsOSArMTI5LDkgQEAgUmVuZGVyT2JqZWN0OjpI
aWdobGlnaHRTdGF0ZSBIaWdobGlnaHREYXRhOjpoaWdobGlnaHRTdGF0ZUZvclJlbmRlcmVyKGNv
bnN0IFJlbmQKICAgICBpZiAoJnJlbmRlcmVyID09IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQ7CiAKLSAgICBhdXRv
KiBoaWdobGlnaHRFbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCptX3JlbmRlclJhbmdlLmVuZCgp
LCBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpLnZhbHVlKCkpOworICAgIGF1dG8qIGhpZ2hsaWdo
dEVuZCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKm1fcmVuZGVyUmFuZ2UuZW5kKCksIG1fcmVuZGVy
UmFuZ2UuZW5kT2Zmc2V0KCkpOwogICAgIAotICAgIEhpZ2hsaWdodEl0ZXJhdG9yIGhpZ2hsaWdo
dEl0ZXJhdG9yKG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSk7CisgICAgUmVuZGVyUmFuZ2VJdGVyYXRv
ciBoaWdobGlnaHRJdGVyYXRvcihtX3JlbmRlclJhbmdlLnN0YXJ0KCkpOwogICAgIGZvciAoYXV0
byogY3VycmVudFJlbmRlcmVyID0gbV9yZW5kZXJSYW5nZS5zdGFydCgpOyBjdXJyZW50UmVuZGVy
ZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IGhpZ2hsaWdodEVuZDsgY3VycmVudFJlbmRlcmVyID0g
aGlnaGxpZ2h0SXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXIg
PT0gbV9yZW5kZXJSYW5nZS5zdGFydCgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0yMTIs
MjA3ICsxNDMsNCBAQCBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIEhpZ2hsaWdodERhdGE6
OmhpZ2hsaWdodFN0YXRlRm9yUmVuZGVyZXIoY29uc3QgUmVuZAogICAgIHJldHVybiBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwogfQogCi12b2lkIEhpZ2hsaWdodERhdGE6OnNl
dFNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBSZXBhaW50TW9kZSBibG9j
a1JlcGFpbnRNb2RlKQotewotICAgIGlmICgoc2VsZWN0aW9uLnN0YXJ0KCkgJiYgIXNlbGVjdGlv
bi5lbmQoKSkgfHwgKHNlbGVjdGlvbi5lbmQoKSAmJiAhc2VsZWN0aW9uLnN0YXJ0KCkpKQotICAg
ICAgICByZXR1cm47Ci0gICAgLy8gSnVzdCByZXR1cm4gaWYgdGhlIHNlbGVjdGlvbiBoYXNuJ3Qg
Y2hhbmdlZC4KLSAgICBhdXRvIGlzQ2FyZXQgPSBtX3JlbmRlclZpZXcuZnJhbWUoKS5zZWxlY3Rp
b24oKS5pc0NhcmV0KCk7Ci0gICAgaWYgKHNlbGVjdGlvbiA9PSBtX3JlbmRlclJhbmdlICYmIG1f
c2VsZWN0aW9uV2FzQ2FyZXQgPT0gaXNDYXJldCkKLSAgICAgICAgcmV0dXJuOwotI2lmIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQotICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IHJlY3RzIGFuZCBj
cmVhdGUgYSBub3RpZmllciBmb3IgdGhlIG5ldyByZWN0cyB3ZSBhcmUgYWJvdXQgdG8gZ2F0aGVy
LgotICAgIC8vIFRoZSBOb3RpZmllciB1cGRhdGVzIHRoZSBFZGl0b3Igd2hlbiBpdCBnb2VzIG91
dCBvZiBzY29wZSBhbmQgaXMgZGVzdHJveWVkLgotICAgIGF1dG8gcmVjdE5vdGlmaWVyID0gbV9z
ZWxlY3Rpb25SZWN0R2F0aGVyZXIuY2xlYXJBbmRDcmVhdGVOb3RpZmllcigpOwotI2VuZGlmCi0g
ICAgbV9zZWxlY3Rpb25XYXNDYXJldCA9IGlzQ2FyZXQ7Ci0gICAgYXBwbHlTZWxlY3Rpb24oc2Vs
ZWN0aW9uLCBibG9ja1JlcGFpbnRNb2RlKTsKLX0KLQotdm9pZCBIaWdobGlnaHREYXRhOjpjbGVh
clNlbGVjdGlvbigpCi17Ci0gICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPnJlcGFpbnRCbG9ja1Nl
bGVjdGlvbkdhcHMoKTsKLSAgICBzZXRTZWxlY3Rpb24oeyB9LCBIaWdobGlnaHREYXRhOjpSZXBh
aW50TW9kZTo6TmV3TWludXNPbGQpOwotfQotCi12b2lkIEhpZ2hsaWdodERhdGE6OnJlcGFpbnRT
ZWxlY3Rpb24oKSBjb25zdAotewotICAgIEhhc2hTZXQ8UmVuZGVyQmxvY2sqPiBwcm9jZXNzZWRC
bG9ja3M7Ci0gICAgUmVuZGVyT2JqZWN0KiBlbmQgPSBudWxscHRyOwotICAgIGlmIChtX3JlbmRl
clJhbmdlLmVuZCgpKQotICAgICAgICBlbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCptX3JlbmRl
clJhbmdlLmVuZCgpLCBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpLnZhbHVlKCkpOwotICAgIEhp
Z2hsaWdodEl0ZXJhdG9yIGhpZ2hsaWdodEl0ZXJhdG9yKG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSk7
Ci0gICAgZm9yIChhdXRvKiByZW5kZXJlciA9IGhpZ2hsaWdodEl0ZXJhdG9yLmN1cnJlbnQoKTsg
cmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0gZW5kOyByZW5kZXJlciA9IGhpZ2hsaWdodEl0ZXJhdG9y
Lm5leHQoKSkgewotICAgICAgICBpZiAoIXJlbmRlcmVyLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSAm
JiByZW5kZXJlciAhPSBtX3JlbmRlclJhbmdlLnN0YXJ0KCkgJiYgcmVuZGVyZXIgIT0gbV9yZW5k
ZXJSYW5nZS5lbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocmVuZGVy
ZXItPnNlbGVjdGlvblN0YXRlKCkgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9u
ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKCpy
ZW5kZXJlciwgdHJ1ZSkucmVwYWludCgpOwotICAgICAgICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNp
YmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdpbiBnYXBzLiBUaGV5IG11c3QgYmUg
ZXhhbWluZWQgYXMgd2VsbC4KLSAgICAgICAgZm9yIChhdXRvKiBibG9jayA9IGNvbnRhaW5pbmdC
bG9ja0JlbG93VmlldygqcmVuZGVyZXIpOyBibG9jazsgYmxvY2sgPSBjb250YWluaW5nQmxvY2tC
ZWxvd1ZpZXcoKmJsb2NrKSkgewotICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRCbG9ja3MuYWRk
KGJsb2NrKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
UmVuZGVyU2VsZWN0aW9uSW5mbygqYmxvY2ssIHRydWUpLnJlcGFpbnQoKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotSW50UmVjdCBIaWdobGlnaHREYXRhOjpjb2xsZWN0Qm91bmRzKENsaXBUb1Zp
c2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAotewotICAgIExPR19XSVRI
X1NUUkVBTShTZWxlY3Rpb24sIHN0cmVhbSA8PCAiSGlnaGxpZ2h0RGF0YTo6Y29sbGVjdEJvdW5k
cyAoY2xpcCB0byB2aXNpYmxlICIgPDwgKGNsaXBUb1Zpc2libGVDb250ZW50ID09IENsaXBUb1Zp
c2libGVDb250ZW50OjpZZXMgPyAieWVzIiA6ICJubyIpKTsKLQotICAgIFNlbGVjdGlvbkRhdGE6
OlJlbmRlcmVyTWFwIHJlbmRlcmVyczsKLSAgICBhdXRvKiBzdGFydCA9IG1fcmVuZGVyUmFuZ2Uu
c3RhcnQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOwotICAgIGlmIChtX3Jl
bmRlclJhbmdlLmVuZCgpKQotICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRlck9mZnNldCgqbV9y
ZW5kZXJSYW5nZS5lbmQoKSwgbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKLQot
ICAgIEhpZ2hsaWdodEl0ZXJhdG9yIGhpZ2hsaWdodEl0ZXJhdG9yKHN0YXJ0KTsKLSAgICB3aGls
ZSAoc3RhcnQgJiYgc3RhcnQgIT0gc3RvcCkgewotICAgICAgICBpZiAoKHN0YXJ0LT5jYW5CZVNl
bGVjdGlvbkxlYWYoKSB8fCBzdGFydCA9PSBtX3JlbmRlclJhbmdlLnN0YXJ0KCkgfHwgc3RhcnQg
PT0gbV9yZW5kZXJSYW5nZS5lbmQoKSkKLSAgICAgICAgICAgICYmIHN0YXJ0LT5zZWxlY3Rpb25T
dGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpIHsKLSAgICAgICAg
ICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQg
bWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgotICAgICAgICAgICAg
cmVuZGVyZXJzLnNldChzdGFydCwgbWFrZVVuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqc3Rh
cnQsIGNsaXBUb1Zpc2libGVDb250ZW50ID09IENsaXBUb1Zpc2libGVDb250ZW50OjpZZXMpKTsK
LSAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTZWxlY3Rpb24sIHN0cmVhbSA8PCAiIGFkZGVk
IHN0YXJ0ICIgPDwgKnN0YXJ0IDw8ICIgd2l0aCByZWN0ICIgPDwgcmVuZGVyZXJzLmdldChzdGFy
dCktPnJlY3QoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8qIGJsb2NrID0gc3RhcnQtPmNvbnRhaW5p
bmdCbG9jaygpOwotICAgICAgICAgICAgd2hpbGUgKGJsb2NrICYmICFpczxSZW5kZXJWaWV3Pigq
YmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3Ry
ZWFtIDw8ICIgYWRkZWQgYmxvY2sgIiA8PCAqYmxvY2spOwotICAgICAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gcmVuZGVyZXJzLmFk
ZChibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAgICAgICAgIGlmIChi
bG9ja0luZm8pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGJs
b2NrSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmJsb2NrLCBjbGlwVG9W
aXNpYmxlQ29udGVudCA9PSBDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKTsKLSAgICAgICAgICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0gPDwgIiBhZGRlZCBjb250YWlu
aW5nIGJsb2NrICIgPDwgKmJsb2NrIDw8ICIgd2l0aCByZWN0ICIgPDwgYmxvY2tJbmZvLT5yZWN0
KCkpOwotICAgICAgICAgICAgICAgIGJsb2NrID0gYmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN0YXJ0ID0gaGlnaGxpZ2h0SXRlcmF0
b3IubmV4dCgpOwotICAgIH0KLQotICAgIC8vIE5vdyBjcmVhdGUgYSBzaW5nbGUgYm91bmRpbmcg
Ym94IHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgd2hvbGUgc2VsZWN0aW9uLgotICAgIExheW91dFJl
Y3Qgc2VsZWN0aW9uUmVjdDsKLSAgICBmb3IgKGF1dG8mIGluZm8gOiByZW5kZXJlcnMudmFsdWVz
KCkpIHsKLSAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVjdCgpIGlzIGluIHRoZSBj
b29yZGluYXRlcyBvZiB0aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFwIHRvIHBhZ2UgY29vcmRp
bmF0ZXMuCi0gICAgICAgIExheW91dFJlY3QgY3VycmVudFJlY3QgPSBpbmZvLT5yZWN0KCk7Ci0g
ICAgICAgIGlmIChjdXJyZW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBpZiAoYXV0byogcmVwYWludENvbnRhaW5lciA9IGluZm8tPnJlcGFpbnRDb250
YWluZXIoKSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IGxvY2FsUmVjdCA9IGN1cnJlbnRSZWN0
OwotICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1YWQgPSByZXBhaW50Q29udGFpbmVyLT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCk7Ci0gICAgICAgICAgICBjdXJyZW50UmVjdCA9IGFi
c1F1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICAgICAgICAgIExPR19XSVRIX1NUUkVB
TShTZWxlY3Rpb24sIHN0cmVhbSA8PCAiIHJlY3QgIiA8PCBsb2NhbFJlY3QgPDwgIiBtYXBwZWQg
dG8gIiA8PCBjdXJyZW50UmVjdCA8PCAiIGluIGNvbnRhaW5lciAiIDw8ICpyZXBhaW50Q29udGFp
bmVyKTsKLSAgICAgICAgfQotICAgICAgICBzZWxlY3Rpb25SZWN0LnVuaXRlKGN1cnJlbnRSZWN0
KTsKLSAgICB9Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0gPDwgIiBm
aW5hbCByZWN0ICIgPDwgc2VsZWN0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0
KHNlbGVjdGlvblJlY3QpOwotfQotCi12b2lkIEhpZ2hsaWdodERhdGE6OmFwcGx5U2VsZWN0aW9u
KGNvbnN0IFJlbmRlclJhbmdlJiBuZXdTZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2NrUmVwYWlu
dE1vZGUpCi17Ci0gICAgYXV0byBvbGRTZWxlY3Rpb25EYXRhID0gY29sbGVjdFNlbGVjdGlvbkRh
dGEobV9yZW5kZXJSYW5nZSwgYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50TW9kZTo6TmV3WE9S
T2xkKTsKLSAgICAvLyBSZW1vdmUgY3VycmVudCBzZWxlY3Rpb24uCi0gICAgZm9yIChhdXRvKiBy
ZW5kZXJlciA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzLmtleXMoKSkKLSAgICAgICAgcmVu
ZGVyZXItPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRT
dGF0ZTo6Tm9uZSk7Ci0gICAgbV9yZW5kZXJSYW5nZSA9IG5ld1NlbGVjdGlvbjsKLSAgICBhdXRv
KiBzZWxlY3Rpb25TdGFydCA9IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKTsKLSAgICAvLyBVcGRhdGUg
dGhlIHNlbGVjdGlvbiBzdGF0dXMgb2YgYWxsIG9iamVjdHMgYmV0d2VlbiBzZWxlY3Rpb25TdGFy
dCBhbmQgc2VsZWN0aW9uRW5kCi0gICAgaWYgKHNlbGVjdGlvblN0YXJ0ICYmIHNlbGVjdGlvblN0
YXJ0ID09IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCi0gICAgICAgIHNlbGVjdGlvblN0YXJ0LT5zZXRT
ZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkJvdGgp
OwotICAgIGVsc2UgewotICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnQpCi0gICAgICAgICAgICBz
ZWxlY3Rpb25TdGFydC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlOjpTdGFydCk7Ci0gICAgICAgIGlmIChhdXRvKiBlbmQgPSBtX3JlbmRlclJh
bmdlLmVuZCgpKQotICAgICAgICAgICAgZW5kLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVuZCk7Ci0gICAgfQotCi0gICAgUmVuZGVyT2Jq
ZWN0KiBzZWxlY3Rpb25FbmQgPSBudWxscHRyOwotICAgIGF1dG8qIHNlbGVjdGlvbkRhdGFFbmQg
PSBtX3JlbmRlclJhbmdlLmVuZCgpOwotICAgIGlmIChzZWxlY3Rpb25EYXRhRW5kKQotICAgICAg
ICBzZWxlY3Rpb25FbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCpzZWxlY3Rpb25EYXRhRW5kLCBt
X3JlbmRlclJhbmdlLmVuZE9mZnNldCgpLnZhbHVlKCkpOwotICAgIEhpZ2hsaWdodEl0ZXJhdG9y
IHNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBmb3IgKGF1dG8qIGN1cnJl
bnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0OyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJl
bmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0
b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXIgPT0gc2VsZWN0aW9uU3Rh
cnQgfHwgY3VycmVudFJlbmRlcmVyID09IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmNhbkJlU2VsZWN0aW9u
TGVhZigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGN1cnJlbnRSZW5kZXJlci0+
c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpJ
bnNpZGUpOwotICAgIH0KLQotICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFpbnRNb2Rl
OjpOb3RoaW5nKQotICAgICAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVj
dGlvbkdhcHNCb3VuZHMoKTsKLQotICAgIC8vIE5vdyB0aGF0IHRoZSBzZWxlY3Rpb24gc3RhdGUg
aGFzIGJlZW4gdXBkYXRlZCBmb3IgdGhlIG5ldyBvYmplY3RzLCB3YWxrIHRoZW0gYWdhaW4gYW5k
Ci0gICAgLy8gcHV0IHRoZW0gaW4gdGhlIG5ldyBvYmplY3RzIGxpc3QuCi0gICAgU2VsZWN0aW9u
RGF0YTo6UmVuZGVyZXJNYXAgbmV3U2VsZWN0ZWRSZW5kZXJlcnM7Ci0gICAgU2VsZWN0aW9uRGF0
YTo6UmVuZGVyQmxvY2tNYXAgbmV3U2VsZWN0ZWRCbG9ja3M7Ci0gICAgc2VsZWN0aW9uSXRlcmF0
b3IgPSBIaWdobGlnaHRJdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7Ci0gICAgZm9yIChhdXRvKiBj
dXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJl
bnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0
ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoaXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9u
KCpjdXJyZW50UmVuZGVyZXIsIG1fcmVuZGVyUmFuZ2UpKSB7Ci0gICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4gc2VsZWN0aW9uSW5mbyA9IG1ha2VVbmlxdWU8
UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmN1cnJlbnRSZW5kZXJlciwgdHJ1ZSk7Ci0jaWYgRU5BQkxF
KFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBzZWxlY3Rp
b25JbmZvLT5jb2xsZWN0ZWRTZWxlY3Rpb25SZWN0cygpKQotICAgICAgICAgICAgICAgIG1fc2Vs
ZWN0aW9uUmVjdEdhdGhlcmVyLmFkZFJlY3Qoc2VsZWN0aW9uSW5mby0+cmVwYWludENvbnRhaW5l
cigpLCByZWN0KTsKLSAgICAgICAgICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5pc1RleHRPckxp
bmVCcmVhaygpKQotICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLnNldFRl
eHRPbmx5KGZhbHNlKTsKLSNlbmRpZgotICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5kZXJlcnMu
c2V0KGN1cnJlbnRSZW5kZXJlciwgV1RGTW92ZShzZWxlY3Rpb25JbmZvKSk7Ci0gICAgICAgICAg
ICBhdXRvKiBjb250YWluaW5nQmxvY2sgPSBjdXJyZW50UmVuZGVyZXItPmNvbnRhaW5pbmdCbG9j
aygpOwotICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jayAmJiAhaXM8UmVuZGVyVmll
dz4oKmNvbnRhaW5pbmdCbG9jaykpIHsKLSAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3Mu
YWRkKGNvbnRhaW5pbmdCbG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAg
ICAgICAgIGlmIChibG9ja0luZm8pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGJsb2NrSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZv
PigqY29udGFpbmluZ0Jsb2NrKTsKLSAgICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBj
b250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOwotI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQotICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmFkZEdhcFJl
Y3RzKGJsb2NrSW5mby0+cmVwYWludENvbnRhaW5lcigpLCBibG9ja0luZm8tPnJlY3RzKCkpOwot
I2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYmxvY2tS
ZXBhaW50TW9kZSA9PSBSZXBhaW50TW9kZTo6Tm90aGluZykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzIGNoYW5nZWQgY29tcGFy
ZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24/Ci0gICAgZm9yIChhdXRvJiBzZWxlY3RlZFJlbmRlcmVy
SW5mbyA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzKSB7Ci0gICAgICAgIGF1dG8qIHJlbmRl
cmVyID0gc2VsZWN0ZWRSZW5kZXJlckluZm8ua2V5OwotICAgICAgICBhdXRvKiBuZXdJbmZvID0g
bmV3U2VsZWN0ZWRSZW5kZXJlcnMuZ2V0KHJlbmRlcmVyKTsKLSAgICAgICAgYXV0byogb2xkSW5m
byA9IHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLmdldCgpOwotICAgICAgICBpZiAoIW5ld0lu
Zm8gfHwgb2xkSW5mby0+cmVjdCgpICE9IG5ld0luZm8tPnJlY3QoKSB8fCBvbGRJbmZvLT5zdGF0
ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkKLSAgICAgICAgICAgIHx8IChtX3JlbmRlclJhbmdlLnN0
YXJ0KCkgPT0gcmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9uRGF0YS5zdGFydE9mZnNldCAhPSBtX3Jl
bmRlclJhbmdlLnN0YXJ0T2Zmc2V0KCkpCi0gICAgICAgICAgICB8fCAobV9yZW5kZXJSYW5nZS5l
bmQoKSA9PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rpb25EYXRhLmVuZE9mZnNldCAhPSBtX3JlbmRl
clJhbmdlLmVuZE9mZnNldCgpKSkgewotICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwot
ICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKLSAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBh
aW50KCk7Ci0gICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5kZXJlcnMucmVtb3ZlKHJlbmRl
cmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFueSBuZXcg
b2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9iamVjdHMgZGlj
dCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIGZvciAoYXV0byYgc2VsZWN0
ZWRSZW5kZXJlckluZm8gOiBuZXdTZWxlY3RlZFJlbmRlcmVycykKLSAgICAgICAgc2VsZWN0ZWRS
ZW5kZXJlckluZm8udmFsdWUtPnJlcGFpbnQoKTsKLQotICAgIC8vIEhhdmUgYW55IG9mIHRoZSBv
bGQgYmxvY2tzIGNoYW5nZWQ/Ci0gICAgZm9yIChhdXRvJiBzZWxlY3RlZEJsb2NrSW5mbyA6IG9s
ZFNlbGVjdGlvbkRhdGEuYmxvY2tzKSB7Ci0gICAgICAgIGF1dG8qIGJsb2NrID0gc2VsZWN0ZWRC
bG9ja0luZm8ua2V5OwotICAgICAgICBhdXRvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3Mu
Z2V0KGJsb2NrKTsKLSAgICAgICAgYXV0byogb2xkSW5mbyA9IHNlbGVjdGVkQmxvY2tJbmZvLnZh
bHVlLmdldCgpOwotICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBu
ZXdJbmZvLT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkg
ewotICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgaWYgKG5ld0lu
Zm8pIHsKLSAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICAg
ICAgbmV3U2VsZWN0ZWRCbG9ja3MucmVtb3ZlKGJsb2NrKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90
IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBk
YXRlZC4KLSAgICBmb3IgKGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogbmV3U2VsZWN0ZWRCbG9j
a3MpCi0gICAgICAgIHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaWdobGlnaHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0
YS5oCmluZGV4IGU5N2JjZjRmZTZhYTQ2MDRhZWUzOTBmYjczNzVjMmVkYjg4YWVhNWQuLmU2ODEx
OGI3YzlmMGY4ZDY4OTU0MjgyNmVmYTEwZmQzNjQ5ZTY3YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpZ2hsaWdodERhdGEuaApAQCAtMzAsNzkgKzMwLDcwIEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiUmVuZGVyU2VsZWN0aW9uSW5mby5oIgotCi0jaWYgRU5BQkxFKFNFUlZJ
Q0VfQ09OVFJPTFMpCi0jaW5jbHVkZSAiU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmgiCi0jZW5kaWYK
KyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1
Y3QgSGlnaGxpZ2h0UmFuZ2VEYXRhOwotICAgIAotY2xhc3MgSGlnaGxpZ2h0RGF0YSB7CitjbGFz
cyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcjsKKworY2xhc3MgUmVuZGVyUmFu
Z2UgewogcHVibGljOgotICAgIEhpZ2hsaWdodERhdGEoUmVuZGVyVmlldyYpOwotICAgIAotICAg
IGNsYXNzIFJlbmRlclJhbmdlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlbmRlclJhbmdlKCkg
PSBkZWZhdWx0OwotICAgICAgICBSZW5kZXJSYW5nZShSZW5kZXJPYmplY3QqIHN0YXJ0LCBSZW5k
ZXJPYmplY3QqIGVuZCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkK
LSAgICAgICAgICAgIDogbV9zdGFydChtYWtlV2Vha1B0cihzdGFydCkpCi0gICAgICAgICAgICAs
IG1fZW5kKG1ha2VXZWFrUHRyKGVuZCkpCi0gICAgICAgICAgICAsIG1fc3RhcnRPZmZzZXQoc3Rh
cnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAgICAgICAg
ewotICAgICAgICB9CisgICAgUmVuZGVyUmFuZ2UoKSA9IGRlZmF1bHQ7CisgICAgUmVuZGVyUmFu
Z2UoUmVuZGVyT2JqZWN0KiBzdGFydCwgUmVuZGVyT2JqZWN0KiBlbmQsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDogbV9zdGFydChtYWtlV2Vha1B0
cihzdGFydCkpCisgICAgICAgICwgbV9lbmQobWFrZVdlYWtQdHIoZW5kKSkKKyAgICAgICAgLCBt
X3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQorICAgICAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNl
dCkKKyAgICB7CisgICAgfQogCi0gICAgICAgIFJlbmRlck9iamVjdCogc3RhcnQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXJ0LmdldCgpOyB9Ci0gICAgICAgIFJlbmRlck9iamVjdCogZW5kKCkgY29u
c3QgeyByZXR1cm4gbV9lbmQuZ2V0KCk7IH0KLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHN0
YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQotICAgICAgICBPcHRp
b25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0K
KyAgICBSZW5kZXJPYmplY3QqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC5nZXQoKTsg
fQorICAgIFJlbmRlck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQuZ2V0KCk7IH0K
KyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7
IH0KKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9mZnNldDsg
fQogCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5kZXJSYW5nZSYgb3RoZXIpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3N0YXJ0ID09IG90aGVyLm1fc3Rh
cnQgJiYgbV9lbmQgPT0gb3RoZXIubV9lbmQgJiYgbV9zdGFydE9mZnNldCA9PSBvdGhlci5tX3N0
YXJ0T2Zmc2V0ICYmIG1fZW5kT2Zmc2V0ID09IG90aGVyLm1fZW5kT2Zmc2V0OwotICAgICAgICB9
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlbmRlclJhbmdlJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3N0YXJ0ID09IG90aGVyLm1fc3RhcnQgJiYgbV9lbmQgPT0g
b3RoZXIubV9lbmQgJiYgbV9zdGFydE9mZnNldCA9PSBvdGhlci5tX3N0YXJ0T2Zmc2V0ICYmIG1f
ZW5kT2Zmc2V0ID09IG90aGVyLm1fZW5kT2Zmc2V0OworICAgIH0KIAotICAgIHByaXZhdGU6Ci0g
ICAgICAgIFdlYWtQdHI8UmVuZGVyT2JqZWN0PiBtX3N0YXJ0OwotICAgICAgICBXZWFrUHRyPFJl
bmRlck9iamVjdD4gbV9lbmQ7Ci0gICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3N0YXJ0T2Zm
c2V0OwotICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9lbmRPZmZzZXQ7Ci0gICAgfTsKK3By
aXZhdGU6CisgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fc3RhcnQ7CisgICAgV2Vha1B0cjxS
ZW5kZXJPYmplY3Q+IG1fZW5kOworICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQgeyAwIH07Cisg
ICAgdW5zaWduZWQgbV9lbmRPZmZzZXQgeyAwIH07Cit9OwogICAgIAorY2xhc3MgUmVuZGVyUmFu
Z2VJdGVyYXRvciB7CitwdWJsaWM6CisgICAgUmVuZGVyUmFuZ2VJdGVyYXRvcihSZW5kZXJPYmpl
Y3QqIHN0YXJ0KTsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQoKSBjb25zdDsKKyAgICBSZW5k
ZXJPYmplY3QqIG5leHQoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBjaGVja0ZvclNwYW5u
ZXIoKTsKKyAgICAKKyAgICBSZW5kZXJPYmplY3QqIG1fY3VycmVudCB7IG51bGxwdHIgfTsKKyAg
ICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBtX3NwYW5uZXJT
dGFjazsKK307CisKK2NsYXNzIEhpZ2hsaWdodERhdGEgeworcHVibGljOgogICAgIHZvaWQgc2V0
UmVuZGVyUmFuZ2UoY29uc3QgUmVuZGVyUmFuZ2UmKTsKICAgICBib29sIHNldFJlbmRlclJhbmdl
KGNvbnN0IEhpZ2hsaWdodFJhbmdlRGF0YSYpOyAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1
bC4KLSAgICAKLSAgICBlbnVtIGNsYXNzIFJlcGFpbnRNb2RlIHsgTmV3WE9ST2xkLCBOZXdNaW51
c09sZCwgTm90aGluZyB9OwotICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdl
JiwgUmVwYWludE1vZGUgPSBSZXBhaW50TW9kZTo6TmV3WE9ST2xkKTsKICAgICBjb25zdCBSZW5k
ZXJSYW5nZSYgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJSYW5nZTsgfQogCiAgICAgUmVu
ZGVyT2JqZWN0KiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKTsg
fQogICAgIFJlbmRlck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJSYW5nZS5l
bmQoKTsgfQogCi0gICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IEFTU0VSVChtX3Jl
bmRlclJhbmdlLnN0YXJ0T2Zmc2V0KCkpOyByZXR1cm4gbV9yZW5kZXJSYW5nZS5zdGFydE9mZnNl
dCgpLnZhbHVlT3IoMCk7IH0KLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IEFTU0VS
VChtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpKTsgcmV0dXJuIG1fcmVuZGVyUmFuZ2UuZW5kT2Zm
c2V0KCkudmFsdWVPcigwKTsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJSYW5nZS5zdGFydE9mZnNldCgpOyB9CisgICAgdW5zaWduZWQgZW5kT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKTsgfQogCi0gICAg
dm9pZCBjbGVhclNlbGVjdGlvbigpOwotICAgIEludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1
cm4gY29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudDo6Tm8pOyB9Ci0gICAgSW50UmVj
dCBib3VuZHNDbGlwcGVkVG9WaXNpYmxlQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGNvbGxlY3RC
b3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6Olllcyk7IH0KLSAgICB2b2lkIHJlcGFpbnRTZWxl
Y3Rpb24oKSBjb25zdDsKLSAgICAKICAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIGhp
Z2hsaWdodFN0YXRlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0Jik7CiAKLXByaXZhdGU6
Ci0gICAgZW51bSBjbGFzcyBDbGlwVG9WaXNpYmxlQ29udGVudCB7IFllcywgTm8gfTsKLSAgICBJ
bnRSZWN0IGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0OwotICAgIHZv
aWQgYXBwbHlTZWxlY3Rpb24oY29uc3QgUmVuZGVyUmFuZ2UmLCBSZXBhaW50TW9kZSk7Ci0KLSAg
ICBjb25zdCBSZW5kZXJWaWV3JiBtX3JlbmRlclZpZXc7Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09O
VFJPTFMpCi0gICAgU2VsZWN0aW9uUmVjdEdhdGhlcmVyIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVy
OwotI2VuZGlmCitwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyUmFuZ2UgbV9yZW5kZXJSYW5nZTsKLSAg
ICBib29sIG1fc2VsZWN0aW9uV2FzQ2FyZXQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmlu
ZGV4IDEyNjdmMDFmZDUxOTdhNTI5MGY2MjRhMjMxYmViZTA3NmQ2NDRiMDUuLmNiYzAzYTdkYjk4
YzExNTM2YjM3MTI3M2FmYThhMzUwMzZkMTY3NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTEwNTAsNiArMTA1MCw3IEBAIFZlY3RvcjxNYXJrZWRU
ZXh0PiBJbmxpbmVUZXh0Qm94Ojpjb2xsZWN0TWFya2VkVGV4dHNGb3JIaWdobGlnaHRzKFRleHRQ
YWludFBoYXNlCiAgICAgVmVjdG9yPE1hcmtlZFRleHQ+IG1hcmtlZFRleHRzOwogICAgIGF1dG8m
IHBhcmVudFJlbmRlcmVyID0gcGFyZW50KCktPnJlbmRlcmVyKCk7CiAgICAgYXV0byYgcGFyZW50
U3R5bGUgPSBwYXJlbnRSZW5kZXJlci5zdHlsZSgpOworICAgIEhpZ2hsaWdodERhdGEgaGlnaGxp
Z2h0RGF0YTsKICAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5oaWdobGlnaHRNYXAoKS5tYXAoKSkgewogICAgICAgICBhdXRvIHJlbmRlclN0eWxlID0gcGFy
ZW50UmVuZGVyZXIuZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpIaWdobGlnaHQs
IGhpZ2hsaWdodC5rZXkgfSwgJnBhcmVudFN0eWxlKTsKICAgICAgICAgaWYgKCFyZW5kZXJTdHls
ZSkKQEAgLTEwNTcsMjIgKzEwNTgsMTIgQEAgVmVjdG9yPE1hcmtlZFRleHQ+IElubGluZVRleHRC
b3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckhpZ2hsaWdodHMoVGV4dFBhaW50UGhhc2UKICAgICAg
ICAgaWYgKHJlbmRlclN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLmlzRW1wdHkoKSAm
JiBwaGFzZSA9PSBUZXh0UGFpbnRQaGFzZTo6RGVjb3JhdGlvbikKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBmb3IgKGF1dG8mIHJhbmdlRGF0YSA6IGhpZ2hsaWdodC52YWx1ZS0+cmFu
Z2VzRGF0YSgpKSB7Ci0gICAgICAgICAgICBpZiAocmFuZ2VEYXRhLT5zdGFydFBvc2l0aW9uICYm
IHJhbmdlRGF0YS0+ZW5kUG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICBQb3NpdGlvbiBzdGFy
dFBvc2l0aW9uID0gcmFuZ2VEYXRhLT5zdGFydFBvc2l0aW9uLnZhbHVlKCk7Ci0gICAgICAgICAg
ICAgICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSByYW5nZURhdGEtPmVuZFBvc2l0aW9uLnZhbHVl
KCk7Ci0gICAgICAgICAgICAgICAgYXV0byogc3RhcnRSZW5kZXJlciA9IHN0YXJ0UG9zaXRpb24u
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBz
dGFydE9mZnNldCA9IHN0YXJ0UG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAg
ICAgICAgICAgICAgICBhdXRvKiBlbmRSZW5kZXJlciA9IGVuZFBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0g
ZW5kUG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXN0YXJ0UmVuZGVyZXIgfHwgIWVuZFJlbmRlcmVyKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgICAgIGF1dG8gaGlnaGxpZ2h0RGF0YSA9IEhpZ2hsaWdo
dERhdGEocmVuZGVyZXIoKS52aWV3KCkpOwotICAgICAgICAgICAgICAgIGhpZ2hsaWdodERhdGEu
c2V0UmVuZGVyUmFuZ2UoeyBzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCB9KTsKLSAgICAgICAgICAgICAgICBhdXRvIFtoaWdobGlnaHRTdGFydCwgaGln
aGxpZ2h0RW5kXSA9IGhpZ2hsaWdodFN0YXJ0RW5kKGhpZ2hsaWdodERhdGEpOwotICAgICAgICAg
ICAgICAgIGlmIChoaWdobGlnaHRTdGFydCA8IGhpZ2hsaWdodEVuZCkKLSAgICAgICAgICAgICAg
ICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKHsgaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZCwg
TWFya2VkVGV4dDo6SGlnaGxpZ2h0LCBudWxscHRyLCBoaWdobGlnaHQua2V5IH0pOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFoaWdobGlnaHREYXRhLnNldFJlbmRlclJhbmdlKHJh
bmdlRGF0YSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGF1dG8gW2hpZ2hsaWdodFN0YXJ0LCBoaWdobGlnaHRFbmRdID0gaGlnaGxpZ2h0U3Rh
cnRFbmQoaGlnaGxpZ2h0RGF0YSk7CisgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0U3RhcnQgPCBo
aWdobGlnaHRFbmQpCisgICAgICAgICAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKHsgaGlnaGxp
Z2h0U3RhcnQsIGhpZ2hsaWdodEVuZCwgTWFya2VkVGV4dDo6SGlnaGxpZ2h0LCBudWxscHRyLCBo
aWdobGlnaHQua2V5IH0pOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBtYXJrZWRUZXh0
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCmluZGV4IDc3
YTY4ZTA2ZDZhODE1NWUwN2Q3ZjI1Zjg4NTJkMTg0NTJmMjc5ZjEuLjY3NzU5ZTIyMzdhNjI3NGRh
NDljMTM3MmE1OGE0ZjJmMmJmNzU3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcApAQCAtMTUyLDcgKzE1Miw3IEBAIGlubGluZSBzdGF0aWMgYm9vbCBk
cmFnZ2VkQ29udGVudENvbnRhaW5zUmVwbGFjZWRFbGVtZW50KGNvbnN0IFZlY3RvcjxSZW5kZXJl
ZERvCiAKIENvbG9yIFJlbmRlclJlcGxhY2VkOjpjYWxjdWxhdGVIaWdobGlnaHRDb2xvcigpIGNv
bnN0CiB7Ci0gICAgYXV0byBoaWdobGlnaHREYXRhID0gSGlnaGxpZ2h0RGF0YSh2aWV3KCkpOwor
ICAgIEhpZ2hsaWdodERhdGEgaGlnaGxpZ2h0RGF0YTsKICAgICBmb3IgKGF1dG8mIGhpZ2hsaWdo
dCA6IGRvY3VtZW50KCkuaGlnaGxpZ2h0TWFwKCkubWFwKCkpIHsKICAgICAgICAgZm9yIChhdXRv
JiByYW5nZURhdGEgOiBoaWdobGlnaHQudmFsdWUtPnJhbmdlc0RhdGEoKSkgewogICAgICAgICAg
ICAgaWYgKCFoaWdobGlnaHREYXRhLnNldFJlbmRlclJhbmdlKHJhbmdlRGF0YSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCBiY2ExYjFkZjBiYjdmYTMzMjEzM2E3NzM0
ZGMzZWVkMmM1OTY2NWQ0Li4wNDc4ZDI0YTRiOWQ0MDlhNWY1ZDk5OGI3NTk1ZGJjNWY0YWRlNTkx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTIyLDEwICsyMiwxMCBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIaWdo
bGlnaHREYXRhLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tG
bG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uRGF0
YS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgLy8g
UmV0dXJuIHRoZSByZW5kZXJlciB3aG9zZSBiYWNrZ3JvdW5kIHN0eWxlIGlzIHVzZWQgdG8gcGFp
bnQgdGhlIHJvb3QgYmFja2dyb3VuZC4KICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclJv
b3RCYWNrZ3JvdW5kKCkgY29uc3Q7CiAKLSAgICBIaWdobGlnaHREYXRhJiBzZWxlY3Rpb24oKSB7
IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIFNlbGVjdGlvbkRhdGEmIHNlbGVjdGlvbigpIHsg
cmV0dXJuIG1fc2VsZWN0aW9uOyB9CiAKICAgICBib29sIHByaW50aW5nKCkgY29uc3Q7CiAKQEAg
LTIyNCw3ICsyMjQsNyBAQCBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fcmVuZGVyZXJDb3VudCB7
IDEgfTsKIAogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFJlZ2lvbj4gbV9hY2N1bXVsYXRl
ZFJlcGFpbnRSZWdpb247Ci0gICAgSGlnaGxpZ2h0RGF0YSBtX3NlbGVjdGlvbjsKKyAgICBTZWxl
Y3Rpb25EYXRhIG1fc2VsZWN0aW9uOwogCiAgICAgV2Vha1B0cjxSZW5kZXJMYXllcj4gbV9zdHls
ZUNoYW5nZUxheWVyTXV0YXRpb25Sb290OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2VsZWN0aW9uRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2Vs
ZWN0aW9uRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjY5MzcxOWQzNDU0YTk0MDkyZTlmZTE2MWQ0MDM2
ZTk5YzVlNTg4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
ZWxlY3Rpb25EYXRhLmNwcApAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25EYXRhLmgiCisKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiSGlnaGxp
Z2h0UmFuZ2VHcm91cC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQb3NpdGlv
bi5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAi
VmlzaWJsZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgU2VsZWN0aW9uQ29u
dGV4dCB7CisgICAgCisgICAgdXNpbmcgUmVuZGVyZXJNYXAgPSBIYXNoTWFwPFJlbmRlck9iamVj
dCosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPj47CisgICAgdXNpbmcgUmVu
ZGVyQmxvY2tNYXAgPSBIYXNoTWFwPGNvbnN0IFJlbmRlckJsb2NrKiwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4+OworCisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7
CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0OworICAgIFJlbmRlcmVyTWFwIHJlbmRlcmVyczsKKyAg
ICBSZW5kZXJCbG9ja01hcCBibG9ja3M7Cit9OworCit9CisKK3N0YXRpYyBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgdW5zaWdu
ZWQgb2Zmc2V0KQoreworICAgIGF1dG8qIGNoaWxkID0gcmVuZGVyZXIuY2hpbGRBdChvZmZzZXQp
OworICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogcmVuZGVyZXIubmV4dEluUHJlT3JkZXJBZnRl
ckNoaWxkcmVuKCk7Cit9CisKK3N0YXRpYyBib29sIGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlv
bihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJSYW5nZSYgc2VsZWN0
aW9uKQoreworICAgIHJldHVybiAocmVuZGVyZXIuY2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgJnJl
bmRlcmVyID09IHNlbGVjdGlvbi5zdGFydCgpIHx8ICZyZW5kZXJlciA9PSBzZWxlY3Rpb24uZW5k
KCkpCisgICAgJiYgcmVuZGVyZXIuc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlOjpOb25lCisgICAgJiYgcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Cit9
CisKK3N0YXRpYyBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gcmVu
ZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7CisgICAgcmV0dXJuIGlzPFJlbmRlclZpZXc+KGNvbnRh
aW5pbmdCbG9jaykgPyBudWxscHRyIDogY29udGFpbmluZ0Jsb2NrOworfQorCitzdGF0aWMgU2Vs
ZWN0aW9uQ29udGV4dCBjb2xsZWN0U2VsZWN0aW9uRGF0YShjb25zdCBSZW5kZXJSYW5nZSYgc2Vs
ZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQoreworICAgIFNlbGVjdGlvbkNvbnRleHQg
b2xkU2VsZWN0aW9uRGF0YSB7IHNlbGVjdGlvbi5zdGFydE9mZnNldCgpLCBzZWxlY3Rpb24uZW5k
T2Zmc2V0KCksIHsgfSwgeyB9IH07CisgICAgLy8gQmxvY2tzIGNvbnRhaW4gc2VsZWN0ZWQgb2Jq
ZWN0cyBhbmQgZmlsbCBnYXBzIGJldHdlZW4gdGhlbSwgZWl0aGVyIG9uIHRoZSBsZWZ0LCByaWdo
dCwgb3IgaW4gYmV0d2VlbiBsaW5lcyBhbmQgYmxvY2tzLgorICAgIC8vIEluIG9yZGVyIHRvIGdl
dCB0aGUgcmVwYWludCByZWN0IHJpZ2h0LCB3ZSBoYXZlIHRvIGV4YW1pbmUgbGVmdCwgbWlkZGxl
LCBhbmQgcmlnaHQgcmVjdHMgaW5kaXZpZHVhbGx5LCBzaW5jZSBvdGhlcndpc2UKKyAgICAvLyB0
aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMgbWlnaHQgcmVtYWluIHRoZSBzYW1lIGV2ZW4gd2hlbiBj
aGFuZ2VzIGhhdmUgb2NjdXJyZWQuCisgICAgYXV0byogc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQo
KTsKKyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOworICAgIGlmIChzZWxlY3Rpb24u
ZW5kKCkpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCpzZWxlY3Rpb24uZW5k
KCksIHNlbGVjdGlvbi5lbmRPZmZzZXQoKSk7CisgICAgUmVuZGVyUmFuZ2VJdGVyYXRvciBzZWxl
Y3Rpb25JdGVyYXRvcihzdGFydCk7CisgICAgd2hpbGUgKHN0YXJ0ICYmIHN0YXJ0ICE9IHN0b3Ap
IHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbigqc3RhcnQsIHNlbGVj
dGlvbikpIHsKKyAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50
aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3
ZWxsLgorICAgICAgICAgICAgb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMuc2V0KHN0YXJ0LCBt
YWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpzdGFydCwgdHJ1ZSkpOworICAgICAgICAg
ICAgaWYgKHJlcGFpbnREaWZmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBi
bG9jayA9IGNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldygqc3RhcnQpOyBibG9jazsgYmxvY2sgPSBj
b250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKmJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBh
dXRvJiBibG9ja0luZm8gPSBvbGRTZWxlY3Rpb25EYXRhLmJsb2Nrcy5hZGQoYmxvY2ssIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBibG9j
a0luZm8gPSBtYWtlVW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmJsb2NrKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhcnQg
PSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCk7CisgICAgfQorICAgIHJldHVybiBvbGRTZWxlY3Rp
b25EYXRhOworfQorCitTZWxlY3Rpb25EYXRhOjpTZWxlY3Rpb25EYXRhKFJlbmRlclZpZXcmIHZp
ZXcpCisgICAgOiBtX3JlbmRlclZpZXcodmlldykKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9M
UykKKyAgICAsIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyKHZpZXcpCisjZW5kaWYKK3sKK30KKwor
dm9pZCBTZWxlY3Rpb25EYXRhOjpzZXQoY29uc3QgUmVuZGVyUmFuZ2UmIHNlbGVjdGlvbiwgUmVw
YWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKK3sKKyAgICBpZiAoKHNlbGVjdGlvbi5zdGFydCgp
ICYmICFzZWxlY3Rpb24uZW5kKCkpIHx8IChzZWxlY3Rpb24uZW5kKCkgJiYgIXNlbGVjdGlvbi5z
dGFydCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEp1c3QgcmV0dXJuIGlmIHRoZSBzZWxl
Y3Rpb24gaGFzbid0IGNoYW5nZWQuCisgICAgYXV0byBpc0NhcmV0ID0gbV9yZW5kZXJWaWV3LmZy
YW1lKCkuc2VsZWN0aW9uKCkuaXNDYXJldCgpOworICAgIGlmIChzZWxlY3Rpb24gPT0gbV9yZW5k
ZXJSYW5nZSAmJiBtX3NlbGVjdGlvbldhc0NhcmV0ID09IGlzQ2FyZXQpCisgICAgICAgIHJldHVy
bjsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAvLyBDbGVhciB0aGUgY3VycmVu
dCByZWN0cyBhbmQgY3JlYXRlIGEgbm90aWZpZXIgZm9yIHRoZSBuZXcgcmVjdHMgd2UgYXJlIGFi
b3V0IHRvIGdhdGhlci4KKyAgICAvLyBUaGUgTm90aWZpZXIgdXBkYXRlcyB0aGUgRWRpdG9yIHdo
ZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRlc3Ryb3llZC4KKyAgICBhdXRvIHJlY3RO
b3RpZmllciA9IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNsZWFyQW5kQ3JlYXRlTm90aWZpZXIo
KTsKKyNlbmRpZgorICAgIG1fc2VsZWN0aW9uV2FzQ2FyZXQgPSBpc0NhcmV0OworICAgIGFwcGx5
KHNlbGVjdGlvbiwgYmxvY2tSZXBhaW50TW9kZSk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uRGF0YTo6
Y2xlYXIoKQoreworICAgIG1fcmVuZGVyVmlldy5sYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rp
b25HYXBzKCk7CisgICAgc2V0KHsgfSwgU2VsZWN0aW9uRGF0YTo6UmVwYWludE1vZGU6Ok5ld01p
bnVzT2xkKTsKK30KKwordm9pZCBTZWxlY3Rpb25EYXRhOjpyZXBhaW50KCkgY29uc3QKK3sKKyAg
ICBIYXNoU2V0PFJlbmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOworICAgIFJlbmRlck9iamVj
dCogZW5kID0gbnVsbHB0cjsKKyAgICBpZiAobV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAg
ZW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgqbV9yZW5kZXJSYW5nZS5lbmQoKSwgbV9yZW5kZXJS
YW5nZS5lbmRPZmZzZXQoKSk7CisgICAgUmVuZGVyUmFuZ2VJdGVyYXRvciBoaWdobGlnaHRJdGVy
YXRvcihtX3JlbmRlclJhbmdlLnN0YXJ0KCkpOworICAgIGZvciAoYXV0byogcmVuZGVyZXIgPSBo
aWdobGlnaHRJdGVyYXRvci5jdXJyZW50KCk7IHJlbmRlcmVyICYmIHJlbmRlcmVyICE9IGVuZDsg
cmVuZGVyZXIgPSBoaWdobGlnaHRJdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFyZW5k
ZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgcmVuZGVyZXIgIT0gbV9yZW5kZXJSYW5nZS5z
dGFydCgpICYmIHJlbmRlcmVyICE9IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5zZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqcmVuZGVyZXIsIHRydWUpLnJlcGFpbnQoKTsKKyAg
ICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFu
ZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCisgICAgICAgIGZv
ciAoYXV0byogYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKnJlbmRlcmVyKTsgYmxv
Y2s7IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpibG9jaykpIHsKKyAgICAgICAg
ICAgIGlmICghcHJvY2Vzc2VkQmxvY2tzLmFkZChibG9jaykuaXNOZXdFbnRyeSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8oKmJsb2NrLCB0
cnVlKS5yZXBhaW50KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0ludFJlY3QgU2VsZWN0aW9u
RGF0YTo6Y29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29u
dGVudCkgY29uc3QKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0gPDwg
IlNlbGVjdGlvbkRhdGE6OmNvbGxlY3RCb3VuZHMgKGNsaXAgdG8gdmlzaWJsZSAiIDw8IChjbGlw
VG9WaXNpYmxlQ29udGVudCA9PSBDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzID8gInllcyIgOiAi
bm8iKSk7CisgICAgCisgICAgU2VsZWN0aW9uQ29udGV4dDo6UmVuZGVyZXJNYXAgcmVuZGVyZXJz
OworICAgIGF1dG8qIHN0YXJ0ID0gbV9yZW5kZXJSYW5nZS5zdGFydCgpOworICAgIFJlbmRlck9i
amVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKG1fcmVuZGVyUmFuZ2UuZW5kKCkpCisgICAg
ICAgIHN0b3AgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCptX3JlbmRlclJhbmdlLmVuZCgpLCBtX3Jl
bmRlclJhbmdlLmVuZE9mZnNldCgpKTsKKyAgICAKKyAgICBSZW5kZXJSYW5nZUl0ZXJhdG9yIHNl
bGVjdGlvbkl0ZXJhdG9yKHN0YXJ0KTsKKyAgICB3aGlsZSAoc3RhcnQgJiYgc3RhcnQgIT0gc3Rv
cCkgeworICAgICAgICBpZiAoKHN0YXJ0LT5jYW5CZVNlbGVjdGlvbkxlYWYoKSB8fCBzdGFydCA9
PSBtX3JlbmRlclJhbmdlLnN0YXJ0KCkgfHwgc3RhcnQgPT0gbV9yZW5kZXJSYW5nZS5lbmQoKSkK
KyAgICAgICAgICAgICYmIHN0YXJ0LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpIHsKKyAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9u
c2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBi
ZSBleGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICAgICAgcmVuZGVyZXJzLnNldChzdGFydCwgbWFr
ZVVuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqc3RhcnQsIGNsaXBUb1Zpc2libGVDb250ZW50
ID09IENsaXBUb1Zpc2libGVDb250ZW50OjpZZXMpKTsKKyAgICAgICAgICAgIExPR19XSVRIX1NU
UkVBTShTZWxlY3Rpb24sIHN0cmVhbSA8PCAiIGFkZGVkIHN0YXJ0ICIgPDwgKnN0YXJ0IDw8ICIg
d2l0aCByZWN0ICIgPDwgcmVuZGVyZXJzLmdldChzdGFydCktPnJlY3QoKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGF1dG8qIGJsb2NrID0gc3RhcnQtPmNvbnRhaW5pbmdCbG9jaygpOwor
ICAgICAgICAgICAgd2hpbGUgKGJsb2NrICYmICFpczxSZW5kZXJWaWV3PigqYmxvY2spKSB7Cisg
ICAgICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICIgYWRk
ZWQgYmxvY2sgIiA8PCAqYmxvY2spOworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gcmVuZGVyZXJzLmFkZChibG9jaywgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IG1h
a2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmJsb2NrLCBjbGlwVG9WaXNpYmxlQ29udGVu
dCA9PSBDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKTsKKyAgICAgICAgICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0gPDwgIiBhZGRlZCBjb250YWluaW5nIGJsb2NrICIg
PDwgKmJsb2NrIDw8ICIgd2l0aCByZWN0ICIgPDwgYmxvY2tJbmZvLT5yZWN0KCkpOworICAgICAg
ICAgICAgICAgIGJsb2NrID0gYmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHN0YXJ0ID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBOb3cgY3JlYXRlIGEgc2luZ2xlIGJvdW5kaW5nIGJveCByZWN0
IHRoYXQgZW5jbG9zZXMgdGhlIHdob2xlIHNlbGVjdGlvbi4KKyAgICBMYXlvdXRSZWN0IHNlbGVj
dGlvblJlY3Q7CisgICAgZm9yIChhdXRvJiBpbmZvIDogcmVuZGVyZXJzLnZhbHVlcygpKSB7Cisg
ICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBpbiB0aGUgY29vcmRpbmF0
ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdlIGNvb3JkaW5hdGVzLgor
ICAgICAgICBMYXlvdXRSZWN0IGN1cnJlbnRSZWN0ID0gaW5mby0+cmVjdCgpOworICAgICAgICBp
ZiAoY3VycmVudFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IAorICAgICAgICBpZiAoYXV0byogcmVwYWludENvbnRhaW5lciA9IGluZm8tPnJlcGFpbnRDb250
YWluZXIoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IGxvY2FsUmVjdCA9IGN1cnJlbnRSZWN0
OworICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1YWQgPSByZXBhaW50Q29udGFpbmVyLT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCk7CisgICAgICAgICAgICBjdXJyZW50UmVjdCA9IGFi
c1F1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgIExPR19XSVRIX1NUUkVB
TShTZWxlY3Rpb24sIHN0cmVhbSA8PCAiIHJlY3QgIiA8PCBsb2NhbFJlY3QgPDwgIiBtYXBwZWQg
dG8gIiA8PCBjdXJyZW50UmVjdCA8PCAiIGluIGNvbnRhaW5lciAiIDw8ICpyZXBhaW50Q29udGFp
bmVyKTsKKyAgICAgICAgfQorICAgICAgICBzZWxlY3Rpb25SZWN0LnVuaXRlKGN1cnJlbnRSZWN0
KTsKKyAgICB9CisgICAgCisgICAgTE9HX1dJVEhfU1RSRUFNKFNlbGVjdGlvbiwgc3RyZWFtIDw8
ICIgZmluYWwgcmVjdCAiIDw8IHNlbGVjdGlvblJlY3QpOworICAgIHJldHVybiBzbmFwcGVkSW50
UmVjdChzZWxlY3Rpb25SZWN0KTsKK30KKwordm9pZCBTZWxlY3Rpb25EYXRhOjphcHBseShjb25z
dCBSZW5kZXJSYW5nZSYgbmV3U2VsZWN0aW9uLCBSZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2Rl
KQoreworICAgIGF1dG8gb2xkU2VsZWN0aW9uRGF0YSA9IGNvbGxlY3RTZWxlY3Rpb25EYXRhKG1f
cmVuZGVyUmFuZ2UsIGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWludE1vZGU6Ok5ld1hPUk9sZCk7
CisgICAgLy8gUmVtb3ZlIGN1cnJlbnQgc2VsZWN0aW9uLgorICAgIGZvciAoYXV0byogcmVuZGVy
ZXIgOiBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVycy5rZXlzKCkpCisgICAgICAgIHJlbmRlcmVy
LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6
Ok5vbmUpOworICAgIG1fcmVuZGVyUmFuZ2UgPSBuZXdTZWxlY3Rpb247CisgICAgYXV0byogc2Vs
ZWN0aW9uU3RhcnQgPSBtX3JlbmRlclJhbmdlLnN0YXJ0KCk7CisgICAgLy8gVXBkYXRlIHRoZSBz
ZWxlY3Rpb24gc3RhdHVzIG9mIGFsbCBvYmplY3RzIGJldHdlZW4gc2VsZWN0aW9uU3RhcnQgYW5k
IHNlbGVjdGlvbkVuZAorICAgIGlmIChzZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25TdGFydCA9
PSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAgICAgICBzZWxlY3Rpb25TdGFydC0+c2V0U2VsZWN0
aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpCb3RoKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0KQorICAgICAgICAgICAgc2VsZWN0
aW9uU3RhcnQtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZTo6U3RhcnQpOworICAgICAgICBpZiAoYXV0byogZW5kID0gbV9yZW5kZXJSYW5nZS5l
bmQoKSkKKyAgICAgICAgICAgIGVuZC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQpOworICAgIH0KKyAgICAKKyAgICBSZW5kZXJPYmpl
Y3QqIHNlbGVjdGlvbkVuZCA9IG51bGxwdHI7CisgICAgYXV0byogc2VsZWN0aW9uRGF0YUVuZCA9
IG1fcmVuZGVyUmFuZ2UuZW5kKCk7CisgICAgaWYgKHNlbGVjdGlvbkRhdGFFbmQpCisgICAgICAg
IHNlbGVjdGlvbkVuZCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKnNlbGVjdGlvbkRhdGFFbmQsIG1f
cmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkpOworICAgIFJlbmRlclJhbmdlSXRlcmF0b3Igc2VsZWN0
aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOworICAgIGZvciAoYXV0byogY3VycmVudFJlbmRl
cmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIg
IT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0
KCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJlciA9PSBzZWxlY3Rpb25TdGFydCB8fCBj
dXJyZW50UmVuZGVyZXIgPT0gbV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY3VycmVudFJlbmRlcmVyLT5zZXRTZWxl
Y3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSk7
CisgICAgfQorICAgIAorICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFpbnRNb2RlOjpO
b3RoaW5nKQorICAgICAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVjdGlv
bkdhcHNCb3VuZHMoKTsKKyAgICAKKyAgICAvLyBOb3cgdGhhdCB0aGUgc2VsZWN0aW9uIHN0YXRl
IGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcgb2JqZWN0cywgd2FsayB0aGVtIGFnYWluIGFu
ZAorICAgIC8vIHB1dCB0aGVtIGluIHRoZSBuZXcgb2JqZWN0cyBsaXN0LgorICAgIFNlbGVjdGlv
bkNvbnRleHQ6OlJlbmRlcmVyTWFwIG5ld1NlbGVjdGVkUmVuZGVyZXJzOworICAgIFNlbGVjdGlv
bkNvbnRleHQ6OlJlbmRlckJsb2NrTWFwIG5ld1NlbGVjdGVkQmxvY2tzOworICAgIHNlbGVjdGlv
bkl0ZXJhdG9yID0gUmVuZGVyUmFuZ2VJdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7CisgICAgZm9y
IChhdXRvKiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVy
ICYmIGN1cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNl
bGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgeworICAgICAgICBpZiAoaXNWYWxpZFJlbmRlcmVyRm9y
U2VsZWN0aW9uKCpjdXJyZW50UmVuZGVyZXIsIG1fcmVuZGVyUmFuZ2UpKSB7CisgICAgICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4gc2VsZWN0aW9uSW5mbyA9IG1h
a2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmN1cnJlbnRSZW5kZXJlciwgdHJ1ZSk7Cisj
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgICAgICAgICBmb3IgKGF1dG8mIHJlY3Qg
OiBzZWxlY3Rpb25JbmZvLT5jb2xsZWN0ZWRTZWxlY3Rpb25SZWN0cygpKQorICAgICAgICAgICAg
ICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmFkZFJlY3Qoc2VsZWN0aW9uSW5mby0+cmVwYWlu
dENvbnRhaW5lcigpLCByZWN0KTsKKyAgICAgICAgICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5p
c1RleHRPckxpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhl
cmVyLnNldFRleHRPbmx5KGZhbHNlKTsKKyNlbmRpZgorICAgICAgICAgICAgbmV3U2VsZWN0ZWRS
ZW5kZXJlcnMuc2V0KGN1cnJlbnRSZW5kZXJlciwgV1RGTW92ZShzZWxlY3Rpb25JbmZvKSk7Cisg
ICAgICAgICAgICBhdXRvKiBjb250YWluaW5nQmxvY2sgPSBjdXJyZW50UmVuZGVyZXItPmNvbnRh
aW5pbmdCbG9jaygpOworICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jayAmJiAhaXM8
UmVuZGVyVmlldz4oKmNvbnRhaW5pbmdCbG9jaykpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2VsZWN0
ZWRCbG9ja3MuYWRkKGNvbnRhaW5pbmdCbG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwor
ICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVyQmxvY2tTZWxl
Y3Rpb25JbmZvPigqY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgICAgICAgICBjb250YWluaW5n
QmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOworI2lmIEVOQUJMRShT
RVJWSUNFX0NPTlRST0xTKQorICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVy
LmFkZEdhcFJlY3RzKGJsb2NrSW5mby0+cmVwYWludENvbnRhaW5lcigpLCBibG9ja0luZm8tPnJl
Y3RzKCkpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgaWYgKGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIHNlbGVjdGVkIG9iamVj
dHMgY2hhbmdlZCBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbj8KKyAgICBmb3IgKGF1dG8m
IHNlbGVjdGVkUmVuZGVyZXJJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMpIHsKKyAg
ICAgICAgYXV0byogcmVuZGVyZXIgPSBzZWxlY3RlZFJlbmRlcmVySW5mby5rZXk7CisgICAgICAg
IGF1dG8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZFJlbmRlcmVycy5nZXQocmVuZGVyZXIpOworICAg
ICAgICBhdXRvKiBvbGRJbmZvID0gc2VsZWN0ZWRSZW5kZXJlckluZm8udmFsdWUuZ2V0KCk7Cisg
ICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgp
IHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKQorICAgICAgICAgICAgfHwg
KG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSA9PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rpb25EYXRhLnN0
YXJ0T2Zmc2V0ICE9IG1fcmVuZGVyUmFuZ2Uuc3RhcnRPZmZzZXQoKSkKKyAgICAgICAgICAgIHx8
IChtX3JlbmRlclJhbmdlLmVuZCgpID09IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRhdGEuZW5k
T2Zmc2V0ICE9IG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkpKSB7CisgICAgICAgICAgICBvbGRJ
bmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICBpZiAobmV3SW5mbykgeworICAgICAgICAgICAg
ICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZFJlbmRl
cmVycy5yZW1vdmUocmVuZGVyZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIC8vIEFueSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBp
biB0aGUgb2xkIG9iamVjdHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgor
ICAgIGZvciAoYXV0byYgc2VsZWN0ZWRSZW5kZXJlckluZm8gOiBuZXdTZWxlY3RlZFJlbmRlcmVy
cykKKyAgICAgICAgc2VsZWN0ZWRSZW5kZXJlckluZm8udmFsdWUtPnJlcGFpbnQoKTsKKyAgICAK
KyAgICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIGJsb2NrcyBjaGFuZ2VkPworICAgIGZvciAoYXV0
byYgc2VsZWN0ZWRCbG9ja0luZm8gOiBvbGRTZWxlY3Rpb25EYXRhLmJsb2NrcykgeworICAgICAg
ICBhdXRvKiBibG9jayA9IHNlbGVjdGVkQmxvY2tJbmZvLmtleTsKKyAgICAgICAgYXV0byogbmV3
SW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmdldChibG9jayk7CisgICAgICAgIGF1dG8qIG9sZElu
Zm8gPSBzZWxlY3RlZEJsb2NrSW5mby52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKCFuZXdJbmZv
IHx8IG9sZEluZm8tPnJlY3RzKCkgIT0gbmV3SW5mby0+cmVjdHMoKSB8fCBvbGRJbmZvLT5zdGF0
ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkpIHsKKyAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQo
KTsKKyAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7CisgICAgICAgICAgICAgICAgbmV3SW5mby0+
cmVwYWludCgpOworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkQmxvY2tzLnJlbW92ZShibG9j
ayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gQW55IG5l
dyBibG9ja3MgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBibG9ja3MgZGlj
dCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgorICAgIGZvciAoYXV0byYgc2VsZWN0
ZWRCbG9ja0luZm8gOiBuZXdTZWxlY3RlZEJsb2NrcykKKyAgICAgICAgc2VsZWN0ZWRCbG9ja0lu
Zm8udmFsdWUtPnJlcGFpbnQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvbkRhdGEuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25EYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmVjYzA2MzU4OTBl
ODYwNTI5MDA2Nzk3MjMxZjEyYmY0YTUwMGM4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25EYXRhLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSGlnaGxpZ2h0RGF0YS5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNlbGVjdGlvbkluZm8uaCIKKworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRS
T0xTKQorI2luY2x1ZGUgIlNlbGVjdGlvblJlY3RHYXRoZXJlci5oIgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2VsZWN0aW9uRGF0YSA6IHB1YmxpYyBIaWdobGlnaHRE
YXRhIHsKK3B1YmxpYzoKKyAgICBTZWxlY3Rpb25EYXRhKFJlbmRlclZpZXcmKTsKKyAgICAKKyAg
ICBlbnVtIGNsYXNzIFJlcGFpbnRNb2RlIHsgTmV3WE9ST2xkLCBOZXdNaW51c09sZCwgTm90aGlu
ZyB9OworICAgIHZvaWQgc2V0KGNvbnN0IFJlbmRlclJhbmdlJiwgUmVwYWludE1vZGUgPSBSZXBh
aW50TW9kZTo6TmV3WE9ST2xkKTsKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCByZXBhaW50
KCkgY29uc3Q7CisgICAgCisgICAgSW50UmVjdCBib3VuZHMoKSBjb25zdCB7IHJldHVybiBjb2xs
ZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50OjpObyk7IH0KKyAgICBJbnRSZWN0IGJvdW5k
c0NsaXBwZWRUb1Zpc2libGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gY29sbGVjdEJvdW5kcyhD
bGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCBS
ZW5kZXJWaWV3JiBtX3JlbmRlclZpZXc7CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisg
ICAgU2VsZWN0aW9uUmVjdEdhdGhlcmVyIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyOworI2VuZGlm
CisgICAgYm9vbCBtX3NlbGVjdGlvbldhc0NhcmV0IHsgZmFsc2UgfTsKKyAgICBlbnVtIGNsYXNz
IENsaXBUb1Zpc2libGVDb250ZW50IHsgWWVzLCBObyB9OworICAgIEludFJlY3QgY29sbGVjdEJv
dW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3Q7CisgICAgdm9pZCBhcHBseShjb25zdCBS
ZW5kZXJSYW5nZSYsIFJlcGFpbnRNb2RlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411338</attachid>
            <date>2020-10-14 09:55:17 -0700</date>
            <delta_ts>2020-10-14 10:09:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217711-20201014095516.patch</filename>
            <type>text/plain</type>
            <size>47407</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE0MDAyN2UwYjY3MTg0
M2M1MWI2ZjZlNjljNTc3ZDRiZGVmMTVkZi4uM2QzYjdkMGE3NjIyMjc0MDFkYjc5ZjBlNzRlZjNm
ZTdmM2Y2N2NhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDIwLTEwLTE0ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3Ig
SGlnaGxpZ2h0RGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3NzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSGlnaGxpZ2h0RGF0YSB3YXMgcmVuYW1lZCB3aGVuIGl0IHdhcyB1c2VkIGZvciBtb3Jl
IHRoYXQgc2VsZWN0aW9ucywgYnV0CisgICAgICAgIG1vcmUgdGhhbiBoYWxmIHRoZSBmaWxlIHdh
cyBvbmx5IHN1cHBvc2VkIHRvIGJlIHVzZWQgdG8gZGVhbCB3aXRoIHRoZSBjdXJyZW50CisgICAg
ICAgIHNlbGVjdGlvbiwgc28gSSd2ZSBzcGxpdCBpdCBiYWNrIG91dCBpbnRvIGEgbW9yZSByZWFz
b25hYmxlIHNldCBvZiBmaWxlcy4KKyAgICAgICAgQWxzbyBtYWRlIG9mZnNldHMgbm8gbG9uZ2Vy
IG9wdGlvbmFsLCBhcyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBuZWVkLgorICAgICAgICBF
eHRlbmRlZCB0aGUgSGlnaGxpZ2h0RGF0YSBzZXRSZW5kZXJSYW5nZSBpbnRvIElubGluZVRleHRC
b3gsIGFzIGl0J3MgYSBiZXR0ZXIKKyAgICAgICAgd2F5IHRvIGNhbGN1bGF0ZSB0aGF0IGRvZXMg
bm90IHVzZSBkZXByZWNhdGVkIGZ1bmN0aW9ucy4gCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hh
bmdlLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Nh
cmV0Q29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWlu
dENvbnRlbnRzRm9yU25hcHNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlOjp+U2NvcGVkRnJh
bWVTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JS
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUmFuZ2VJdGVyYXRvcjo6UmVuZGVyUmFuZ2VJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSYW5nZUl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJhbmdlSXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmFuZ2VJdGVyYXRvcjo6Y2hlY2tGb3JTcGFubmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlbmRlcmVyQWZ0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0
YTo6aGlnaGxpZ2h0U3RhdGVGb3JSZW5kZXJlcik6CisgICAgICAgICgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6aXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb2xsZWN0U2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjpIaWdobGlnaHREYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNldFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpyZXBhaW50U2VsZWN0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OmNvbGxlY3RCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6YXBwbHlTZWxl
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9IaWdobGlnaHREYXRhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSYW5nZTo6UmVuZGVyUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmFuZ2U6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmFuZ2U6OnN0YXJ0
T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJhbmdlOjplbmRPZmZzZXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmFuZ2U6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6c3RhcnRPZmZzZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6ZW5kT2Zmc2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlOjpSZW5kZXJSYW5nZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6c3Rh
cnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6UmVu
ZGVyUmFuZ2U6OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGln
aHREYXRhOjpSZW5kZXJSYW5nZTo6c3RhcnRPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2U6OmVuZE9mZnNldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6
b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRE
YXRhOjpib3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0
RGF0YTo6Ym91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckhpZ2hsaWdodHMgY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsYWNlZDo6Y2FsY3VsYXRlSGlnaGxpZ2h0Q29sb3IgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NlbGVjdGlvbkRh
dGEuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0
YS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJlckFmdGVyT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OmlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdFNl
bGVjdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uRGF0YTo6U2VsZWN0aW9u
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25EYXRhOjpzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0aW9uRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uRGF0YTo6cmVwYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25EYXRh
Ojpjb2xsZWN0Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE6
OmFwcGx5KToKKyAgICAgICAgKiByZW5kZXJpbmcvU2VsZWN0aW9uRGF0YS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE6OmJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25EYXRhOjpib3VuZHNDbGlwcGVkVG9WaXNpYmxlQ29udGVudCBjb25z
dCk6CisKIDIwMjAtMTAtMTMgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBQYWludCBDU1MgaGlnaGxpZ2h0cyBvdmVyIGltYWdlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UKaW5kZXggNTdmODMyNGIwMTI1Y2FmZjFhZmUwZDNiYmU1NjY5M2VmNmViODlmZC4uMWYx
ZDE1YmRmMmYzODQyZDBiNzVkMWQyNGFkMjk1YmI4M2I2NGExOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CkBAIC0xNDM5LDYgKzE0MzksNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCiAgICAgcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guaAogICAgIHJlbmRlcmluZy9TY3JvbGxBbGlnbm1lbnQuaAorICAgIHJlbmRlcmluZy9T
ZWxlY3Rpb25EYXRhLmgKIAogICAgIHJlbmRlcmluZy9saW5lL0xpbmVXaWR0aC5oCiAgICAgcmVu
ZGVyaW5nL2xpbmUvVHJhaWxpbmdPYmplY3RzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggOTY1YWRjMTMw
ZjFkZjQzNjViMDgyOTlkMjY2ZDY4ZjlmY2Y4MWIxZC4uOTQ4MDUxMWM2OTc4MTk3ZWQ2ZjI1YjEx
YTg4ZTY5MDRiMGEzMjQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIyMjEsNiArMjIyMSw3IEBAIHJl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKIHJlbmRl
cmluZy9Sb290SW5saW5lQm94LmNwcAogcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5jcHAKK3Jl
bmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCiByZW5kZXJpbmcvVGFibGVMYXlvdXQuY3Bw
CiByZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcAogcmVuZGVyaW5nL1RleHRQYWlu
dFN0eWxlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDRjMDc1NzgwOTZmNDZjZmExN2M0ODBmMzM1MzVkN2UzYzQ4YTk5YmQu
LjE4MWQwOGI2YjhhZmM0ZDAxZDZjZjkzNDUyNTkyYjhlYjBiYmU3MjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExOTcsNiAr
MTE5Nyw3IEBACiAJCTQ0MTUyOTJFMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NDE1MjkyQzBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0NTc3NUU1MjA0
NzJGNzMwMDhEQ0U1RCAvKiBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDU3NzVFNDIwNDcyRjczMDA4
RENFNUQgLyogTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0NjNDRjY4MjIxMkZBNjgwMDFBODU3
NyAvKiBEYXRhRGV0ZWN0b3JzQ29yZVNvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M3OTQxRTIxQzU2QzI5MzAwQTRDNThFIC8qIERhdGFE
ZXRlY3RvcnNDb3JlU29mdExpbmsubW0gKi87IH07CisJCTQ0NjVEN0JEMjUzNkQwNUUwMDE2NjY2
RCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ0QjM4QkY0MjUzNjkwMUEwMEE0NDU4RCAvKiBTZWxlY3Rpb25SYW5n
ZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0NDZEQzY0ODI0QTI5REFCMDA2MUYzOTAgLyogUGxheWJhY2tUYXJnZXRDbGllbnRDb250ZXh0
SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDQ2REM2NDYyNEEyOUQ5QjAwNjFGMzkwIC8qIFBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4
dElkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk0NDcxNzEwRTIwNUFGOTQ1MDAwQTExNkUgLyogTWVkaWFRdWVyeVBhcnNlckNvbnRl
eHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NzE3
MTBDMjA1QUY5NDUwMDBBMTE2RSAvKiBNZWRpYVF1ZXJ5UGFyc2VyQ29udGV4dC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ0Nzk1ODA0MTY0M0I0
OUEwMDFFMEE3RiAvKiBQYXJzZWRDb250ZW50VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ3OTU4MDMxNjQzQjQ3QjAwMUUwQTdGIC8qIFBhcnNl
ZENvbnRlbnRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTUwNDQsNyArNTA0NSw2IEBACiAJCUU0N0MzOTMwMUZFNkUwRkQwMEJCQkM2QiAv
KiBSZW5kZXJUcmVlQnVpbGRlckZpcnN0TGV0dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyNjFGRTZFMERDMDBCQkJDNkIgLyogUmVuZGVy
VHJlZUJ1aWxkZXJGaXJzdExldHRlci5oICovOyB9OwogCQlFNDdDMzkzMTFGRTZFMTAyMDBCQkJD
NkIgLyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyNTFGRTZFMERCMDBCQkJDNkIg
LyogUmVuZGVyVHJlZVVwZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmggKi87IH07CiAJCUU0N0MzOTMy
MUZFNkUxMDUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI4MUZFNkUwREQwMEJCQkM2
QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCAqLzsgfTsKLQkJRTQ3QzM5MzMxRkU2RTEwODAw
QkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTXVsdGlDb2x1bW4uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI3MUZFNkUwREMwMEJCQkM2QiAv
KiBSZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmggKi87IH07CiAJCUU0N0UyNzY1MTYwMzZF
RDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3NjQxNjAzNkVEMjAwRUUyQUZCIC8qIEV4
dGVuc2lvblN0eWxlU2hlZXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTQ4MTM3QjkxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODEzN0I4
MURCM0I1MjYwMDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ4NjNDRkUyMzg0MkU5RTAwOTcyMTU4IC8q
IFJ1bGVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDg2M0NGRDIzODQyRTlFMDA5NzIxNTggLyogUnVsZURhdGEuaCAqLzsgfTsKQEAgLTc5MjQs
NiArNzkyNCw4IEBACiAJCTQ0QTIwREI4MEY4NDE2NkMwMEIzRTFGRSAvKiBXZWJDb3JlVVJMUmVz
cG9uc2VJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVVSTFJl
c3BvbnNlSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0QTI4QUFCMTJERkI4
QUMwMEFFOTIzQiAvKiBNYXRoTUxFbGVtZW50RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBNYXRoTUxFbGVtZW50RmFjdG9yeS5oOyBwYXRoID0gRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9NYXRoTUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQk0NEEyOEFBRTEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1MTmFtZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWF0aE1MTmFtZXMuaDsgcGF0aCA9
IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvTWF0aE1MTmFtZXMuaDsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKKwkJNDRCMzhCRjQyNTM2OTAxQTAwQTQ0NThEIC8qIFNlbGVjdGlv
blJhbmdlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3Rpb25S
YW5nZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDRCMzhCRjkyNTM2OUE4
ODAwQTQ0NThEIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTZWxlY3Rpb25SYW5nZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NEM5OTE4MTBGM0QxRTBEMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJ
T1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxiYXJU
aGVtZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRDOTkxODUwRjNEMUVC
RTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNjcm9sbGJhclRoZW1lSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ0Qzk5MTlEMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaGVtZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjkyNjAsNiArMjkyNjIsOCBAQAogCQkJCUE4Q0ZGNURBMEExNTVBMDUwMDBBNDIzNCAv
KiBSb290SW5saW5lQm94LmggKi8sCiAJCQkJNUQ5MjVCNjUwRjY0RDRERDAwQjg0N0YwIC8qIFNj
cm9sbEFsaWdubWVudC5jcHAgKi8sCiAJCQkJNUQ5MjVCNjYwRjY0RDRERDAwQjg0N0YwIC8qIFNj
cm9sbEFsaWdubWVudC5oICovLAorCQkJCTQ0QjM4QkY5MjUzNjlBODgwMEE0NDU4RCAvKiBTZWxl
Y3Rpb25SYW5nZURhdGEuY3BwICovLAorCQkJCTQ0QjM4QkY0MjUzNjkwMUEwMEE0NDU4RCAvKiBT
ZWxlY3Rpb25SYW5nZURhdGEuaCAqLywKIAkJCQlFMzFDRDc1MDIyOUY3NDk1MDBGQkRBMTkgLyog
VGFibGVMYXlvdXQuY3BwICovLAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIzNCAvKiBUYWJs
ZUxheW91dC5oICovLAogCQkJCTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1Np
emluZy5jcHAgKi8sCkBAIC0zMDY1NCw3ICszMDY1OCw2IEBACiAJCQkJNTE3NDFEMEYwQjA3MjU5
QTAwRUQ0NDJDIC8qIEJhY2tGb3J3YXJkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0E4
QzgxRTExRTNEMzY5MDA4MTJGQjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUExQjg3RDIwODdDNEMwMDA5NzlBNzUgLyogQmFja0ZvcndhcmRJdGVtSWRl
bnRpZmllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5NDcyMTcyNTMyM0MyMTAwRjE1M0M4IC8q
IEJhY2tncm91bmRJbWFnZUdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzEyNEVFODBD
MjY0MUNEMDA5RTIzNDkgLyogQmFyUHJvcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDYwQkI2MTYx
RDBBMUJGMDAwMjIxODEyIC8qIEJhc2U2NFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODMxOThGQkYyNEExNjBERDAwNDIwQjA1IC8qIEJhc2VBdWRpb0NvbnRleHQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzM2OTAsNyArMzM2OTMsNiBAQAogCQkJCTExOTM0MDk3MUZFRDcxNTUwMDkzNUYx
RSAvKiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTFDQjI3ODkyMDNCQTU3MDAwNEExREM5IC8qIFJlbmRlclRyZWVCdWlsZGVyRnVsbFNjcmVlbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3QzM5MzIxRkU2RTEwNTAwQkJCQzZCIC8qIFJlbmRlclRy
ZWVCdWlsZGVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQ3QzM5MzMxRkU2RTEwODAwQkJC
QzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTXVsdGlDb2x1bW4uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTExOTM0MDhBMUZFQjM1NUQwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlclJ1YnkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTExOTM0MDc5MUZFOEI5MjMwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVp
bGRlclRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxMTYzRjgyNDI0RTVENUFFMDAwQUI5NjAg
LyogUmVuZGVyVHJlZU11dGF0aW9uRGlzYWxsb3dlZFNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAg
LTMzODgyLDYgKzMzODg0LDcgQEAKIAkJCQk5NzREMkRBNTE0NkE1MzVEMDBENTFGOEIgLyogU2Vj
dXJpdHlQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENUJDNDI3MTZGODgyRUUwMDcwNDhE
MCAvKiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkMzREEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0NDY1RDdCRDI1MzZEMDVFMDAxNjY2NkQgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCRUE4MDdDOTBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9u
UmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0MDVDODkxOTBCMDE0NDAwNzU0Rjk0IC8qIFNl
bGVjdGlvblJlY3RHYXRoZXJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0QjRCQjQxNDE2NTBE
NzAwMkIxRDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDZlYzkxYzA2ZmFlNzRmNGRmNDMy
NzU5YzZiZWI2ZjFiOTE3NmNiN2EuLjc3MGQ4YmYwNzAwMjdjZTljZDVjYWE2NDEzM2U4YzdiYTE5
YzViZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC00
NTEsNyArNDUxLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRh
dGUoUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJVcGRhdGUgcmV2ZWFsTW8KICAgICAgICAgbV9zZWxlY3Rp
b25SZXZlYWxNb2RlID0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsOwogICAgIG1fcGVuZGlu
Z1NlbGVjdGlvblVwZGF0ZSA9IHRydWU7CiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2Rv
Y3VtZW50LT5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2Vs
ZWN0aW9uKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7CiB9CiAKIHZvaWQg
RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCYgaW50ZW50KQpAQCAtNTA3LDcgKzUwNyw3IEBAIHZvaWQgRHJhZ0NhcmV0
Q29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYgbm9kZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBub2RlLmRvY3VtZW50KCkucmVuZGVyVmll
dygpKQotICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOworICAgICAg
ICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgY2xlYXIoKTsKIH0KQEAgLTU2Niw3
ICs1NjYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXNwb25kVG9Ob2RlTW9kaWZpY2F0aW9u
KE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJlbW92ZWQsIGJvbwogCiAgICAgaWYgKGNsZWFyUmVuZGVy
VHJlZVNlbGVjdGlvbikgewogICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IG5vZGUuZG9j
dW1lbnQoKS5yZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlv
bigpLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24o
KS5jbGVhcigpOwogCiAgICAgICAgICAgICAvLyBUcmlnZ2VyIGEgc2VsZWN0aW9uIHVwZGF0ZSBz
byB0aGUgc2VsZWN0aW9uIHdpbGwgYmUgc2V0IGFnYWluLgogICAgICAgICAgICAgbV9zZWxlY3Rp
b25SZXZlYWxJbnRlbnQgPSBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgpOwpAQCAtMTU3MCw3ICsx
NTcwLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpCiAj
ZW5kaWYKIAogICAgIGlmIChhdXRvKiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmlldygpKQot
ICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOworICAgICAgICB2aWV3
LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgc2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0aW5n
QXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25z
KCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgVGV4dEdyYW51bGFyaXR5OjpDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CiAgICAgbV9wcmV2aW91c0NhcmV0Tm9kZSA9IG51bGxwdHI7CkBAIC0y
MDU4LDcgKzIwNTgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3RpdmVTdGF0
ZUNoYW5nZWQoKQogICAgIC8vIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2ZSwKICAgICAvLyB3ZSBoYXZlIHRvIHVwZGF0
ZSBwbGFjZXMgdGhvc2UgY29sb3JzIHdlcmUgcGFpbnRlZC4KICAgICBpZiAoUmVuZGVyVmlldyog
dmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKLSAgICAgICAgdmlldy0+c2VsZWN0aW9u
KCkucmVwYWludFNlbGVjdGlvbigpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5yZXBhaW50
KCk7CiAKICAgICAvLyBDYXJldCBhcHBlYXJzIGluIHRoZSBhY3RpdmUgZnJhbWUuCiAgICAgaWYg
KGFjdGl2ZUFuZEZvY3VzZWQpCkBAIC0yMTUzLDcgKzIxNTMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0
aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICNlbmRpZgogCiAgICAgaWYgKCFzZWxlY3Rpb24uaXNS
YW5nZSgpKSB7Ci0gICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7Cisg
ICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTIxNzgsNyArMjE3OCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVh
cmFuY2UoKQogICAgICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gZW5kUG9zLmRlcHJl
Y2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgICAgIGludCBlbmRPZmZzZXQgPSBlbmRQb3Mu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ID49
IDAgJiYgZW5kT2Zmc2V0ID49IDApOwotICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24oeyBzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCkgfSk7CisgICAg
ICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7IHN0YXJ0UmVuZGVyZXIsIGVuZFJlbmRlcmVyLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZW5kT2Zmc2V0KSB9KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRl
eCBlMWE4NDA4OTg1N2QzOWEzM2U1MGEwN2IwNGEyNjM3NDUwZWQ2YjlhLi42MDkzNjhjOGQyNzE2
N2E4ZDE5NTBlM2I3MjY5N2MwZTk4ZDJiOGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CkBAIC00MzUxLDcgKzQzNTEsNyBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50c0ZvclNu
YXBzaG90KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdAogICAgIGlmIChz
aG91bGRQYWludFNlbGVjdGlvbiA9PSBFeGNsdWRlU2VsZWN0aW9uKSB7CiAgICAgICAgIGZvciAo
YXV0byogZnJhbWUgPSBtX2ZyYW1lLnB0cigpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dChtX2ZyYW1lLnB0cigpKSkgewogICAgICAgICAgICAgaWYgKGF1dG8qIHJl
bmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgICAgICAgICAgcmVu
ZGVyVmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBy
ZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAppbmRleCBhY2MzZThlZDE2MTg5OGI4NjFjOWZmZDk2Njgy
ZWE0MjRhMmRiZWVmLi5mMWQxODZmMmJjNGMxMzZhMjUxN2E3Y2QyYTE0N2I3ZDc2Yjg3NmQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKQEAgLTQ5LDkgKzQ5LDkgQEAgdHlwZWRlZiB2
b2lkKiBEcmFnRGF0YVJlZjsKIHR5cGVkZWYgc3RydWN0IElEYXRhT2JqZWN0KiBEcmFnRGF0YVJl
ZjsKICNlbGlmIFBMQVRGT1JNKEdUSykKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFNlbGVj
dGlvbkRhdGE7CitjbGFzcyBTZWxlY3Rpb25SYW5nZURhdGE7CiB9Ci10eXBlZGVmIFdlYkNvcmU6
OlNlbGVjdGlvbkRhdGEqIERyYWdEYXRhUmVmOwordHlwZWRlZiBXZWJDb3JlOjpTZWxlY3Rpb25S
YW5nZURhdGEqIERyYWdEYXRhUmVmOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCogRHJhZ0RhdGFSZWY7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCmluZGV4IDYzMGQ0NmUy
YjU3YjQwZTRjZjRlMzgwODY1ZTZjZjFhNDkxNjNjZDguLjE5NTMyOTY3N2QxODIwZWRkYWMwYWYx
ZWM3Y2I4NzQyM2FmNjViYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Ry
YWdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVy
RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25S
YW5nZURhdGEuaCIKICNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRJbmRp
Y2F0b3IuaCIKIApAQCAtMTQzLDEyICsxNDQsMTIgQEAgc3RydWN0IFNjb3BlZEZyYW1lU2VsZWN0
aW9uU3RhdGUgewogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBmcmFtZS5j
b250ZW50UmVuZGVyZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKHNlbGVjdGlvbik7Ci0gICAg
ICAgICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLnZh
bHVlKCksIEhpZ2hsaWdodERhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5nKTsKKyAgICAgICAgICAg
IHJlbmRlclZpZXctPnNlbGVjdGlvbigpLnNldChzZWxlY3Rpb24udmFsdWUoKSwgU2VsZWN0aW9u
UmFuZ2VEYXRhOjpSZXBhaW50TW9kZTo6Tm90aGluZyk7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICBjb25zdCBGcmFtZSYgZnJhbWU7Ci0gICAgT3B0aW9uYWw8SGlnaGxpZ2h0RGF0YTo6UmVuZGVy
UmFuZ2U+IHNlbGVjdGlvbjsKKyAgICBPcHRpb25hbDxSZW5kZXJSYW5nZT4gc2VsZWN0aW9uOwog
fTsKIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTg1LDcgKzE4Niw3IEBAIERyYWdJ
bWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgYm9vCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKTsKICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCk7CiAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49
IDApOwotICAgIHZpZXctPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IHN0YXJ0UmVuZGVyZXIs
IGVuZFJlbmRlcmVyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSB9LCBIaWdobGlnaHREYXRhOjpSZXBhaW50TW9kZTo6
Tm90aGluZyk7CisgICAgdmlldy0+c2VsZWN0aW9uKCkuc2V0KHsgc3RhcnRSZW5kZXJlciwgZW5k
UmVuZGVyZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0sIFNlbGVjdGlvblJhbmdlRGF0YTo6UmVwYWludE1vZGU6
Ok5vdGhpbmcpOwogICAgIC8vIFdlIGNhcHR1cmUgdXNpbmcgc25hcHNob3RGcmFtZVJlY3QoKSBi
ZWNhdXNlIHdlIGZha2UgdXAgdGhlIHNlbGVjdGlvbiB1c2luZwogICAgIC8vIEZyYW1lVmlldyBi
dXQgc25hcHNob3RTZWxlY3Rpb24oKSB1c2VzIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgRnJhbWUg
aXRzZWxmLgogICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25hcHNob3Qoc25hcHNob3RG
cmFtZVJlY3QoZnJhbWUsIHZpZXctPnNlbGVjdGlvbigpLmJvdW5kc0NsaXBwZWRUb1Zpc2libGVD
b250ZW50KCksIG9wdGlvbnMpLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aWdobGlnaHREYXRhLmNwcAppbmRleCAyYmRkNjk3N2Y5NTc5M2MxNjU5ZjNiYzE2NzMxNjYyYTNl
MzY3NGQ3Li42NWUzMmE0ODUwZDY3Y2NkMDA0ZTJhNzU2YjBmMWI3ZDc4ZDFiY2E3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCkBAIC00NiwxMTUgKzQ2LDQ2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIHsgLy8gU2VlIGJ1ZyAjMTc3
ODA4LgogCi1zdHJ1Y3QgU2VsZWN0aW9uRGF0YSB7Ci0gICAgdXNpbmcgUmVuZGVyZXJNYXAgPSBI
YXNoTWFwPFJlbmRlck9iamVjdCosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZv
Pj47Ci0gICAgdXNpbmcgUmVuZGVyQmxvY2tNYXAgPSBIYXNoTWFwPGNvbnN0IFJlbmRlckJsb2Nr
Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4+OwogCi0gICAgT3B0
aW9uYWw8dW5zaWduZWQ+IHN0YXJ0T2Zmc2V0OwotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBlbmRP
ZmZzZXQ7Ci0gICAgUmVuZGVyZXJNYXAgcmVuZGVyZXJzOwotICAgIFJlbmRlckJsb2NrTWFwIGJs
b2NrczsKLX07Ci0KLWNsYXNzIEhpZ2hsaWdodEl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBIaWdo
bGlnaHRJdGVyYXRvcihSZW5kZXJPYmplY3QqIHN0YXJ0KQotICAgICAgICA6IG1fY3VycmVudChz
dGFydCkKLSAgICB7Ci0gICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOwotICAgIH0KLSAgICAKLSAg
ICBSZW5kZXJPYmplY3QqIGN1cnJlbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
Y3VycmVudDsKLSAgICB9Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0KiBuZXh0KCkKLSAgICB7Ci0g
ICAgICAgIFJlbmRlck9iamVjdCogY3VycmVudFNwYW4gPSBtX3NwYW5uZXJTdGFjay5pc0VtcHR5
KCkgPyBudWxscHRyIDogbV9zcGFubmVyU3RhY2subGFzdCgpLT5zcGFubmVyKCk7Ci0gICAgICAg
IG1fY3VycmVudCA9IG1fY3VycmVudC0+bmV4dEluUHJlT3JkZXIoY3VycmVudFNwYW4pOwotICAg
ICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnQgJiYgY3VycmVu
dFNwYW4pIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGxhY2Vob2xkZXIgPSBtX3NwYW5u
ZXJTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICBtX3NwYW5uZXJTdGFjay5yZW1vdmVMYXN0KCk7
Ci0gICAgICAgICAgICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci0+bmV4dEluUHJlT3JkZXIoKTsK
LSAgICAgICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBtX2N1cnJlbnQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQgY2hlY2tGb3JTcGFubmVy
KCkKLSAgICB7Ci0gICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vo
b2xkZXI+KG1fY3VycmVudCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8mIHBs
YWNlaG9sZGVyID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+
KCptX2N1cnJlbnQpOwotICAgICAgICBtX3NwYW5uZXJTdGFjay5hcHBlbmQoJnBsYWNlaG9sZGVy
KTsKLSAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXIuc3Bhbm5lcigpOwotICAgIH0KLQot
ICAgIFJlbmRlck9iamVjdCogbV9jdXJyZW50IHsgbnVsbHB0ciB9OwotICAgIFZlY3RvcjxSZW5k
ZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcio+IG1fc3Bhbm5lclN0YWNrOwotfTsKLQot
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
QWZ0ZXJPZmZzZXQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgdW5zaWduZWQgb2Zmc2V0
KQorUmVuZGVyUmFuZ2VJdGVyYXRvcjo6UmVuZGVyUmFuZ2VJdGVyYXRvcihSZW5kZXJPYmplY3Qq
IHN0YXJ0KQorICAgIDogbV9jdXJyZW50KHN0YXJ0KQogewotICAgIGF1dG8qIGNoaWxkID0gcmVu
ZGVyZXIuY2hpbGRBdChvZmZzZXQpOwotICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogcmVuZGVy
ZXIubmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKCk7CisgICAgY2hlY2tGb3JTcGFubmVyKCk7
CiB9CiAKLXN0YXRpYyBib29sIGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbihjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZSYgc2Vs
ZWN0aW9uKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJSYW5nZUl0ZXJhdG9yOjpjdXJyZW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gKHJlbmRlcmVyLmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8ICZyZW5k
ZXJlciA9PSBzZWxlY3Rpb24uc3RhcnQoKSB8fCAmcmVuZGVyZXIgPT0gc2VsZWN0aW9uLmVuZCgp
KQotICAgICAgICAmJiByZW5kZXJlci5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0U3RhdGU6Ok5vbmUKLSAgICAgICAgJiYgcmVuZGVyZXIuY29udGFpbmluZ0Jsb2Nr
KCk7CisgICAgcmV0dXJuIG1fY3VycmVudDsKIH0KIAotc3RhdGljIFJlbmRlckJsb2NrKiBjb250
YWluaW5nQmxvY2tCZWxvd1ZpZXcoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKK1JlbmRl
ck9iamVjdCogUmVuZGVyUmFuZ2VJdGVyYXRvcjo6bmV4dCgpCiB7Ci0gICAgYXV0byogY29udGFp
bmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgcmV0dXJuIGlzPFJl
bmRlclZpZXc+KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRyIDogY29udGFpbmluZ0Jsb2NrOwor
ICAgIFJlbmRlck9iamVjdCogY3VycmVudFNwYW4gPSBtX3NwYW5uZXJTdGFjay5pc0VtcHR5KCkg
PyBudWxscHRyIDogbV9zcGFubmVyU3RhY2subGFzdCgpLT5zcGFubmVyKCk7CisgICAgbV9jdXJy
ZW50ID0gbV9jdXJyZW50LT5uZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bhbik7CisgICAgY2hlY2tG
b3JTcGFubmVyKCk7CisgICAgaWYgKCFtX2N1cnJlbnQgJiYgY3VycmVudFNwYW4pIHsKKyAgICAg
ICAgUmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lclN0YWNrLmxhc3QoKTsKKyAg
ICAgICAgbV9zcGFubmVyU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICBtX2N1cnJlbnQgPSBw
bGFjZWhvbGRlci0+bmV4dEluUHJlT3JkZXIoKTsKKyAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7
CisgICAgfQorICAgIHJldHVybiBtX2N1cnJlbnQ7CiB9CiAKLXN0YXRpYyBTZWxlY3Rpb25EYXRh
IGNvbGxlY3RTZWxlY3Rpb25EYXRhKGNvbnN0IEhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlJiBz
ZWxlY3Rpb24sIGJvb2wgcmVwYWludERpZmZlcmVuY2UpCit2b2lkIFJlbmRlclJhbmdlSXRlcmF0
b3I6OmNoZWNrRm9yU3Bhbm5lcigpCiB7Ci0gICAgU2VsZWN0aW9uRGF0YSBvbGRTZWxlY3Rpb25E
YXRhIHsgc2VsZWN0aW9uLnN0YXJ0T2Zmc2V0KCksIHNlbGVjdGlvbi5lbmRPZmZzZXQoKSwgeyB9
LCB7IH0gfTsKLSAgICAvLyBCbG9ja3MgY29udGFpbiBzZWxlY3RlZCBvYmplY3RzIGFuZCBmaWxs
IGdhcHMgYmV0d2VlbiB0aGVtLCBlaXRoZXIgb24gdGhlIGxlZnQsIHJpZ2h0LCBvciBpbiBiZXR3
ZWVuIGxpbmVzIGFuZCBibG9ja3MuCi0gICAgLy8gSW4gb3JkZXIgdG8gZ2V0IHRoZSByZXBhaW50
IHJlY3QgcmlnaHQsIHdlIGhhdmUgdG8gZXhhbWluZSBsZWZ0LCBtaWRkbGUsIGFuZCByaWdodCBy
ZWN0cyBpbmRpdmlkdWFsbHksIHNpbmNlIG90aGVyd2lzZQotICAgIC8vIHRoZSB1bmlvbiBvZiB0
aG9zZSByZWN0cyBtaWdodCByZW1haW4gdGhlIHNhbWUgZXZlbiB3aGVuIGNoYW5nZXMgaGF2ZSBv
Y2N1cnJlZC4KLSAgICBhdXRvKiBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpOwotICAgIFJlbmRl
ck9iamVjdCogc3RvcCA9IG51bGxwdHI7Ci0gICAgaWYgKHNlbGVjdGlvbi5lbmQoKSkKLSAgICAg
ICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKnNlbGVjdGlvbi5lbmQoKSwgc2VsZWN0aW9u
LmVuZE9mZnNldCgpLnZhbHVlKCkpOwotICAgIEhpZ2hsaWdodEl0ZXJhdG9yIHNlbGVjdGlvbkl0
ZXJhdG9yKHN0YXJ0KTsKLSAgICB3aGlsZSAoc3RhcnQgJiYgc3RhcnQgIT0gc3RvcCkgewotICAg
ICAgICBpZiAoaXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKCpzdGFydCwgc2VsZWN0aW9uKSkg
ewotICAgICAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGlu
ZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCi0g
ICAgICAgICAgICBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVycy5zZXQoc3RhcnQsIG1ha2VVbmlx
dWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKnN0YXJ0LCB0cnVlKSk7Ci0gICAgICAgICAgICBpZiAo
cmVwYWludERpZmZlcmVuY2UpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGJsb2NrID0g
Y29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpzdGFydCk7IGJsb2NrOyBibG9jayA9IGNvbnRhaW5p
bmdCbG9ja0JlbG93VmlldygqYmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIGJs
b2NrSW5mbyA9IG9sZFNlbGVjdGlvbkRhdGEuYmxvY2tzLmFkZChibG9jaywgbnVsbHB0cikuaXRl
cmF0b3ItPnZhbHVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9
IG1ha2VVbmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPigqYmxvY2spOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzdGFydCA9IHNlbGVj
dGlvbkl0ZXJhdG9yLm5leHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9sZFNlbGVjdGlvbkRhdGE7
CisgICAgaWYgKCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obV9jdXJy
ZW50KSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHBsYWNlaG9sZGVyID0gZG93bmNhc3Q8
UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCptX2N1cnJlbnQpOworICAgIG1f
c3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOworICAgIG1fY3VycmVudCA9IHBsYWNl
aG9sZGVyLnNwYW5uZXIoKTsKIH0KIAotSGlnaGxpZ2h0RGF0YTo6SGlnaGxpZ2h0RGF0YShSZW5k
ZXJWaWV3JiB2aWV3KQotICAgIDogbV9yZW5kZXJWaWV3KHZpZXcpCi0jaWYgRU5BQkxFKFNFUlZJ
Q0VfQ09OVFJPTFMpCi0gICAgLCBtX3NlbGVjdGlvblJlY3RHYXRoZXJlcih2aWV3KQotI2VuZGlm
CitzdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckFmdGVyT2Zmc2V0KGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkIG9mZnNldCkgLy8gPE1NRz4gdXNlZCBpbiBib3RoLCBt
aWdodCBzaG91bGQgbm90IGJlIHN0YXRpYwogeworICAgIGF1dG8qIGNoaWxkID0gcmVuZGVyZXIu
Y2hpbGRBdChvZmZzZXQpOworICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogcmVuZGVyZXIubmV4
dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKCk7CiB9CiAKIHZvaWQgSGlnaGxpZ2h0RGF0YTo6c2V0
UmVuZGVyUmFuZ2UoY29uc3QgUmVuZGVyUmFuZ2UmIHJlbmRlclJhbmdlKQpAQCAtMTk4LDkgKzEy
OSw5IEBAIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgSGlnaGxpZ2h0RGF0YTo6aGlnaGxp
Z2h0U3RhdGVGb3JSZW5kZXJlcihjb25zdCBSZW5kCiAgICAgaWYgKCZyZW5kZXJlciA9PSBtX3Jl
bmRlclJhbmdlLmVuZCgpKQogICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRT
dGF0ZTo6RW5kOwogCi0gICAgYXV0byogaGlnaGxpZ2h0RW5kID0gcmVuZGVyZXJBZnRlck9mZnNl
dCgqbV9yZW5kZXJSYW5nZS5lbmQoKSwgbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgp
KTsKKyAgICBhdXRvKiBoaWdobGlnaHRFbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCptX3JlbmRl
clJhbmdlLmVuZCgpLCBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpKTsKICAgICAKLSAgICBIaWdo
bGlnaHRJdGVyYXRvciBoaWdobGlnaHRJdGVyYXRvcihtX3JlbmRlclJhbmdlLnN0YXJ0KCkpOwor
ICAgIFJlbmRlclJhbmdlSXRlcmF0b3IgaGlnaGxpZ2h0SXRlcmF0b3IobV9yZW5kZXJSYW5nZS5z
dGFydCgpKTsKICAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9IG1fcmVuZGVyUmFuZ2Uu
c3RhcnQoKTsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJlciAhPSBoaWdobGlnaHRF
bmQ7IGN1cnJlbnRSZW5kZXJlciA9IGhpZ2hsaWdodEl0ZXJhdG9yLm5leHQoKSkgewogICAgICAg
ICBpZiAoY3VycmVudFJlbmRlcmVyID09IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwpAQCAtMjEyLDIwNyArMTQzLDQgQEAgUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZSBIaWdobGlnaHREYXRhOjpoaWdobGlnaHRTdGF0ZUZvclJlbmRlcmVyKGNvbnN0IFJl
bmQKICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZTsKIH0KIAot
dm9pZCBIaWdobGlnaHREYXRhOjpzZXRTZWxlY3Rpb24oY29uc3QgUmVuZGVyUmFuZ2UmIHNlbGVj
dGlvbiwgUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKLXsKLSAgICBpZiAoKHNlbGVjdGlv
bi5zdGFydCgpICYmICFzZWxlY3Rpb24uZW5kKCkpIHx8IChzZWxlY3Rpb24uZW5kKCkgJiYgIXNl
bGVjdGlvbi5zdGFydCgpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEp1c3QgcmV0dXJuIGlm
IHRoZSBzZWxlY3Rpb24gaGFzbid0IGNoYW5nZWQuCi0gICAgYXV0byBpc0NhcmV0ID0gbV9yZW5k
ZXJWaWV3LmZyYW1lKCkuc2VsZWN0aW9uKCkuaXNDYXJldCgpOwotICAgIGlmIChzZWxlY3Rpb24g
PT0gbV9yZW5kZXJSYW5nZSAmJiBtX3NlbGVjdGlvbldhc0NhcmV0ID09IGlzQ2FyZXQpCi0gICAg
ICAgIHJldHVybjsKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAvLyBDbGVhciB0
aGUgY3VycmVudCByZWN0cyBhbmQgY3JlYXRlIGEgbm90aWZpZXIgZm9yIHRoZSBuZXcgcmVjdHMg
d2UgYXJlIGFib3V0IHRvIGdhdGhlci4KLSAgICAvLyBUaGUgTm90aWZpZXIgdXBkYXRlcyB0aGUg
RWRpdG9yIHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRlc3Ryb3llZC4KLSAgICBh
dXRvIHJlY3ROb3RpZmllciA9IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNsZWFyQW5kQ3JlYXRl
Tm90aWZpZXIoKTsKLSNlbmRpZgotICAgIG1fc2VsZWN0aW9uV2FzQ2FyZXQgPSBpc0NhcmV0Owot
ICAgIGFwcGx5U2VsZWN0aW9uKHNlbGVjdGlvbiwgYmxvY2tSZXBhaW50TW9kZSk7Ci19Ci0KLXZv
aWQgSGlnaGxpZ2h0RGF0YTo6Y2xlYXJTZWxlY3Rpb24oKQotewotICAgIG1fcmVuZGVyVmlldy5s
YXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7Ci0gICAgc2V0U2VsZWN0aW9uKHsg
fSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWludE1vZGU6Ok5ld01pbnVzT2xkKTsKLX0KLQotdm9pZCBI
aWdobGlnaHREYXRhOjpyZXBhaW50U2VsZWN0aW9uKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PFJl
bmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOwotICAgIFJlbmRlck9iamVjdCogZW5kID0gbnVs
bHB0cjsKLSAgICBpZiAobV9yZW5kZXJSYW5nZS5lbmQoKSkKLSAgICAgICAgZW5kID0gcmVuZGVy
ZXJBZnRlck9mZnNldCgqbV9yZW5kZXJSYW5nZS5lbmQoKSwgbV9yZW5kZXJSYW5nZS5lbmRPZmZz
ZXQoKS52YWx1ZSgpKTsKLSAgICBIaWdobGlnaHRJdGVyYXRvciBoaWdobGlnaHRJdGVyYXRvciht
X3JlbmRlclJhbmdlLnN0YXJ0KCkpOwotICAgIGZvciAoYXV0byogcmVuZGVyZXIgPSBoaWdobGln
aHRJdGVyYXRvci5jdXJyZW50KCk7IHJlbmRlcmVyICYmIHJlbmRlcmVyICE9IGVuZDsgcmVuZGVy
ZXIgPSBoaWdobGlnaHRJdGVyYXRvci5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCFyZW5kZXJlci0+
Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgcmVuZGVyZXIgIT0gbV9yZW5kZXJSYW5nZS5zdGFydCgp
ICYmIHJlbmRlcmVyICE9IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5zZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
UmVuZGVyU2VsZWN0aW9uSW5mbygqcmVuZGVyZXIsIHRydWUpLnJlcGFpbnQoKTsKLSAgICAgICAg
Ly8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJn
aW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCi0gICAgICAgIGZvciAoYXV0
byogYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKnJlbmRlcmVyKTsgYmxvY2s7IGJs
b2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpibG9jaykpIHsKLSAgICAgICAgICAgIGlm
ICghcHJvY2Vzc2VkQmxvY2tzLmFkZChibG9jaykuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8oKmJsb2NrLCB0cnVlKS5y
ZXBhaW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUludFJlY3QgSGlnaGxpZ2h0RGF0YTo6
Y29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udGVudCkg
Y29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0gPDwgIkhpZ2hs
aWdodERhdGE6OmNvbGxlY3RCb3VuZHMgKGNsaXAgdG8gdmlzaWJsZSAiIDw8IChjbGlwVG9WaXNp
YmxlQ29udGVudCA9PSBDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzID8gInllcyIgOiAibm8iKSk7
Ci0KLSAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJlck1hcCByZW5kZXJlcnM7Ci0gICAgYXV0byog
c3RhcnQgPSBtX3JlbmRlclJhbmdlLnN0YXJ0KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdG9wID0g
bnVsbHB0cjsKLSAgICBpZiAobV9yZW5kZXJSYW5nZS5lbmQoKSkKLSAgICAgICAgc3RvcCA9IHJl
bmRlcmVyQWZ0ZXJPZmZzZXQoKm1fcmVuZGVyUmFuZ2UuZW5kKCksIG1fcmVuZGVyUmFuZ2UuZW5k
T2Zmc2V0KCkudmFsdWUoKSk7Ci0KLSAgICBIaWdobGlnaHRJdGVyYXRvciBoaWdobGlnaHRJdGVy
YXRvcihzdGFydCk7Ci0gICAgd2hpbGUgKHN0YXJ0ICYmIHN0YXJ0ICE9IHN0b3ApIHsKLSAgICAg
ICAgaWYgKChzdGFydC0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgc3RhcnQgPT0gbV9yZW5kZXJS
YW5nZS5zdGFydCgpIHx8IHN0YXJ0ID09IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCi0gICAgICAgICAg
ICAmJiBzdGFydC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXRlOjpOb25lKSB7Ci0gICAgICAgICAgICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBw
YWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdpbiBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQg
YXMgd2VsbC4KLSAgICAgICAgICAgIHJlbmRlcmVycy5zZXQoc3RhcnQsIG1ha2VVbmlxdWU8UmVu
ZGVyU2VsZWN0aW9uSW5mbz4oKnN0YXJ0LCBjbGlwVG9WaXNpYmxlQ29udGVudCA9PSBDbGlwVG9W
aXNpYmxlQ29udGVudDo6WWVzKSk7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2VsZWN0
aW9uLCBzdHJlYW0gPDwgIiBhZGRlZCBzdGFydCAiIDw8ICpzdGFydCA8PCAiIHdpdGggcmVjdCAi
IDw8IHJlbmRlcmVycy5nZXQoc3RhcnQpLT5yZWN0KCkpOwotCi0gICAgICAgICAgICBhdXRvKiBi
bG9jayA9IHN0YXJ0LT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxlIChibG9j
ayAmJiAhaXM8UmVuZGVyVmlldz4oKmJsb2NrKSkgewotICAgICAgICAgICAgICAgIExPR19XSVRI
X1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiIGFkZGVkIGJsb2NrICIgPDwgKmJsb2NrKTsK
LSAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4mIGJs
b2NrSW5mbyA9IHJlbmRlcmVycy5hZGQoYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsK
LSAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlv
bkluZm8+KCpibG9jaywgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPT0gQ2xpcFRvVmlzaWJsZUNvbnRl
bnQ6Olllcyk7Ci0gICAgICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNlbGVjdGlvbiwgc3Ry
ZWFtIDw8ICIgYWRkZWQgY29udGFpbmluZyBibG9jayAiIDw8ICpibG9jayA8PCAiIHdpdGggcmVj
dCAiIDw8IGJsb2NrSW5mby0+cmVjdCgpKTsKLSAgICAgICAgICAgICAgICBibG9jayA9IGJsb2Nr
LT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBz
dGFydCA9IGhpZ2hsaWdodEl0ZXJhdG9yLm5leHQoKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cgY3Jl
YXRlIGEgc2luZ2xlIGJvdW5kaW5nIGJveCByZWN0IHRoYXQgZW5jbG9zZXMgdGhlIHdob2xlIHNl
bGVjdGlvbi4KLSAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3Q7Ci0gICAgZm9yIChhdXRvJiBp
bmZvIDogcmVuZGVyZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbklu
Zm86OnJlY3QoKSBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIs
IHNvIG1hcCB0byBwYWdlIGNvb3JkaW5hdGVzLgotICAgICAgICBMYXlvdXRSZWN0IGN1cnJlbnRS
ZWN0ID0gaW5mby0+cmVjdCgpOwotICAgICAgICBpZiAoY3VycmVudFJlY3QuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGF1dG8qIHJlcGFpbnRDb250YWlu
ZXIgPSBpbmZvLT5yZXBhaW50Q29udGFpbmVyKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBs
b2NhbFJlY3QgPSBjdXJyZW50UmVjdDsKLSAgICAgICAgICAgIEZsb2F0UXVhZCBhYnNRdWFkID0g
cmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChsb2NhbFJlY3QpOwotICAgICAg
ICAgICAgY3VycmVudFJlY3QgPSBhYnNRdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0gICAg
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0gPDwgIiByZWN0ICIgPDwg
bG9jYWxSZWN0IDw8ICIgbWFwcGVkIHRvICIgPDwgY3VycmVudFJlY3QgPDwgIiBpbiBjb250YWlu
ZXIgIiA8PCAqcmVwYWludENvbnRhaW5lcik7Ci0gICAgICAgIH0KLSAgICAgICAgc2VsZWN0aW9u
UmVjdC51bml0ZShjdXJyZW50UmVjdCk7Ci0gICAgfQotCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNl
bGVjdGlvbiwgc3RyZWFtIDw8ICIgZmluYWwgcmVjdCAiIDw8IHNlbGVjdGlvblJlY3QpOwotICAg
IHJldHVybiBzbmFwcGVkSW50UmVjdChzZWxlY3Rpb25SZWN0KTsKLX0KLQotdm9pZCBIaWdobGln
aHREYXRhOjphcHBseVNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYgbmV3U2VsZWN0aW9uLCBS
ZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQotewotICAgIGF1dG8gb2xkU2VsZWN0aW9uRGF0
YSA9IGNvbGxlY3RTZWxlY3Rpb25EYXRhKG1fcmVuZGVyUmFuZ2UsIGJsb2NrUmVwYWludE1vZGUg
PT0gUmVwYWludE1vZGU6Ok5ld1hPUk9sZCk7Ci0gICAgLy8gUmVtb3ZlIGN1cnJlbnQgc2VsZWN0
aW9uLgotICAgIGZvciAoYXV0byogcmVuZGVyZXIgOiBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVy
cy5rZXlzKCkpCi0gICAgICAgIHJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpOwotICAgIG1fcmVuZGVyUmFuZ2UgPSBu
ZXdTZWxlY3Rpb247Ci0gICAgYXV0byogc2VsZWN0aW9uU3RhcnQgPSBtX3JlbmRlclJhbmdlLnN0
YXJ0KCk7Ci0gICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24gc3RhdHVzIG9mIGFsbCBvYmplY3Rz
IGJldHdlZW4gc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZAotICAgIGlmIChzZWxlY3Rp
b25TdGFydCAmJiBzZWxlY3Rpb25TdGFydCA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQotICAgICAg
ICBzZWxlY3Rpb25TdGFydC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlOjpCb3RoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHNlbGVjdGlv
blN0YXJ0KQotICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQtPnNldFNlbGVjdGlvblN0YXRlSWZO
ZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQpOwotICAgICAgICBpZiAo
YXV0byogZW5kID0gbV9yZW5kZXJSYW5nZS5lbmQoKSkKLSAgICAgICAgICAgIGVuZC0+c2V0U2Vs
ZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQpOwot
ICAgIH0KLQotICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKLSAgICBh
dXRvKiBzZWxlY3Rpb25EYXRhRW5kID0gbV9yZW5kZXJSYW5nZS5lbmQoKTsKLSAgICBpZiAoc2Vs
ZWN0aW9uRGF0YUVuZCkKLSAgICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlck9mZnNl
dCgqc2VsZWN0aW9uRGF0YUVuZCwgbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgpKTsK
LSAgICBIaWdobGlnaHRJdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7
Ci0gICAgZm9yIChhdXRvKiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVu
dFJlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5k
ZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoY3VycmVudFJl
bmRlcmVyID09IHNlbGVjdGlvblN0YXJ0IHx8IGN1cnJlbnRSZW5kZXJlciA9PSBtX3JlbmRlclJh
bmdlLmVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghY3VycmVudFJl
bmRlcmVyLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBjdXJyZW50UmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlKTsKLSAgICB9Ci0KLSAgICBpZiAoYmxvY2tSZXBh
aW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykKLSAgICAgICAgbV9yZW5kZXJWaWV3Lmxh
eWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7Ci0KLSAgICAvLyBOb3cgdGhh
dCB0aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcgb2JqZWN0
cywgd2FsayB0aGVtIGFnYWluIGFuZAotICAgIC8vIHB1dCB0aGVtIGluIHRoZSBuZXcgb2JqZWN0
cyBsaXN0LgotICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlcmVyTWFwIG5ld1NlbGVjdGVkUmVuZGVy
ZXJzOwotICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlckJsb2NrTWFwIG5ld1NlbGVjdGVkQmxvY2tz
OwotICAgIHNlbGVjdGlvbkl0ZXJhdG9yID0gSGlnaGxpZ2h0SXRlcmF0b3Ioc2VsZWN0aW9uU3Rh
cnQpOwotICAgIGZvciAoYXV0byogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1
cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50
UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKLSAgICAgICAgaWYgKGlzVmFs
aWRSZW5kZXJlckZvclNlbGVjdGlvbigqY3VycmVudFJlbmRlcmVyLCBtX3JlbmRlclJhbmdlKSkg
ewotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+IHNlbGVj
dGlvbkluZm8gPSBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpjdXJyZW50UmVuZGVy
ZXIsIHRydWUpOwotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgICAgICAgICAgZm9y
IChhdXRvJiByZWN0IDogc2VsZWN0aW9uSW5mby0+Y29sbGVjdGVkU2VsZWN0aW9uUmVjdHMoKSkK
LSAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRSZWN0KHNlbGVjdGlv
bkluZm8tPnJlcGFpbnRDb250YWluZXIoKSwgcmVjdCk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJl
bnRSZW5kZXJlci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgICAgICBtX3NlbGVj
dGlvblJlY3RHYXRoZXJlci5zZXRUZXh0T25seShmYWxzZSk7Ci0jZW5kaWYKLSAgICAgICAgICAg
IG5ld1NlbGVjdGVkUmVuZGVyZXJzLnNldChjdXJyZW50UmVuZGVyZXIsIFdURk1vdmUoc2VsZWN0
aW9uSW5mbykpOwotICAgICAgICAgICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gY3VycmVudFJl
bmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxlIChjb250YWluaW5n
QmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKSB7Ci0gICAgICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5m
byA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjb250YWluaW5nQmxvY2ssIG51bGxwdHIpLml0ZXJh
dG9yLT52YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVlPFJl
bmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNvbnRhaW5pbmdCbG9jayk7Ci0gICAgICAgICAgICAg
ICAgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsK
LSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlv
blJlY3RHYXRoZXJlci5hZGRHYXBSZWN0cyhibG9ja0luZm8tPnJlcGFpbnRDb250YWluZXIoKSwg
YmxvY2tJbmZvLT5yZWN0cygpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWludE1vZGU6Ok5vdGhpbmcp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgc2VsZWN0ZWQg
b2JqZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uPwotICAgIGZvciAo
YXV0byYgc2VsZWN0ZWRSZW5kZXJlckluZm8gOiBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVycykg
ewotICAgICAgICBhdXRvKiByZW5kZXJlciA9IHNlbGVjdGVkUmVuZGVyZXJJbmZvLmtleTsKLSAg
ICAgICAgYXV0byogbmV3SW5mbyA9IG5ld1NlbGVjdGVkUmVuZGVyZXJzLmdldChyZW5kZXJlcik7
Ci0gICAgICAgIGF1dG8qIG9sZEluZm8gPSBzZWxlY3RlZFJlbmRlcmVySW5mby52YWx1ZS5nZXQo
KTsKLSAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3QoKSAhPSBuZXdJbmZvLT5y
ZWN0KCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpCi0gICAgICAgICAg
ICB8fCAobV9yZW5kZXJSYW5nZS5zdGFydCgpID09IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRh
dGEuc3RhcnRPZmZzZXQgIT0gbV9yZW5kZXJSYW5nZS5zdGFydE9mZnNldCgpKQotICAgICAgICAg
ICAgfHwgKG1fcmVuZGVyUmFuZ2UuZW5kKCkgPT0gcmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9uRGF0
YS5lbmRPZmZzZXQgIT0gbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKSkpIHsKLSAgICAgICAgICAg
IG9sZEluZm8tPnJlcGFpbnQoKTsKLSAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7Ci0gICAgICAg
ICAgICAgICAgbmV3SW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVk
UmVuZGVyZXJzLnJlbW92ZShyZW5kZXJlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBBbnkgbmV3IG9iamVjdHMgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQg
aW4gdGhlIG9sZCBvYmplY3RzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4K
LSAgICBmb3IgKGF1dG8mIHNlbGVjdGVkUmVuZGVyZXJJbmZvIDogbmV3U2VsZWN0ZWRSZW5kZXJl
cnMpCi0gICAgICAgIHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLT5yZXBhaW50KCk7Ci0KLSAg
ICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIGJsb2NrcyBjaGFuZ2VkPwotICAgIGZvciAoYXV0byYg
c2VsZWN0ZWRCbG9ja0luZm8gOiBvbGRTZWxlY3Rpb25EYXRhLmJsb2NrcykgewotICAgICAgICBh
dXRvKiBibG9jayA9IHNlbGVjdGVkQmxvY2tJbmZvLmtleTsKLSAgICAgICAgYXV0byogbmV3SW5m
byA9IG5ld1NlbGVjdGVkQmxvY2tzLmdldChibG9jayk7Ci0gICAgICAgIGF1dG8qIG9sZEluZm8g
PSBzZWxlY3RlZEJsb2NrSW5mby52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFuZXdJbmZvIHx8
IG9sZEluZm8tPnJlY3RzKCkgIT0gbmV3SW5mby0+cmVjdHMoKSB8fCBvbGRJbmZvLT5zdGF0ZSgp
ICE9IG5ld0luZm8tPnN0YXRlKCkpIHsKLSAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQoKTsK
LSAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7Ci0gICAgICAgICAgICAgICAgbmV3SW5mby0+cmVw
YWludCgpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkQmxvY2tzLnJlbW92ZShibG9jayk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbnkgbmV3IGJsb2Nr
cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIGJsb2NrcyBkaWN0LCBhbmQg
c28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCi0gICAgZm9yIChhdXRvJiBzZWxlY3RlZEJsb2Nr
SW5mbyA6IG5ld1NlbGVjdGVkQmxvY2tzKQotICAgICAgICBzZWxlY3RlZEJsb2NrSW5mby52YWx1
ZS0+cmVwYWludCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaAppbmRleCBlOTdiY2Y0ZmU2YWE0NjA0YWVlMzkwZmI3
Mzc1YzJlZGI4OGFlYTVkLi5lNjgxMThiN2M5ZjBmOGQ2ODk1NDI4MjZlZmExMGZkMzY0OWU2N2E4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmgKQEAgLTMwLDc5ICsz
MCw3MCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlJlbmRlclNlbGVjdGlvbkluZm8u
aCIKLQotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotI2luY2x1ZGUgIlNlbGVjdGlvblJl
Y3RHYXRoZXJlci5oIgotI2VuZGlmCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEhpZ2hsaWdodFJhbmdlRGF0YTsKLSAgICAKLWNsYXNz
IEhpZ2hsaWdodERhdGEgeworY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXI7CisKK2NsYXNzIFJlbmRlclJhbmdlIHsKIHB1YmxpYzoKLSAgICBIaWdobGlnaHREYXRhKFJl
bmRlclZpZXcmKTsKLSAgICAKLSAgICBjbGFzcyBSZW5kZXJSYW5nZSB7Ci0gICAgcHVibGljOgot
ICAgICAgICBSZW5kZXJSYW5nZSgpID0gZGVmYXVsdDsKLSAgICAgICAgUmVuZGVyUmFuZ2UoUmVu
ZGVyT2JqZWN0KiBzdGFydCwgUmVuZGVyT2JqZWN0KiBlbmQsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAgICAgICAgICA6IG1fc3RhcnQobWFrZVdlYWtQdHIo
c3RhcnQpKQotICAgICAgICAgICAgLCBtX2VuZChtYWtlV2Vha1B0cihlbmQpKQotICAgICAgICAg
ICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2VuZE9mZnNl
dChlbmRPZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgfQorICAgIFJlbmRlclJhbmdlKCkgPSBk
ZWZhdWx0OworICAgIFJlbmRlclJhbmdlKFJlbmRlck9iamVjdCogc3RhcnQsIFJlbmRlck9iamVj
dCogZW5kLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAg
ICA6IG1fc3RhcnQobWFrZVdlYWtQdHIoc3RhcnQpKQorICAgICAgICAsIG1fZW5kKG1ha2VXZWFr
UHRyKGVuZCkpCisgICAgICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKKyAgICAgICAg
LCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCisgICAgeworICAgIH0KIAotICAgICAgICBSZW5kZXJP
YmplY3QqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC5nZXQoKTsgfQotICAgICAgICBS
ZW5kZXJPYmplY3QqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLmdldCgpOyB9Ci0gICAgICAg
IE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRP
ZmZzZXQ7IH0KLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kT2Zmc2V0OyB9CisgICAgUmVuZGVyT2JqZWN0KiBzdGFydCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnQuZ2V0KCk7IH0KKyAgICBSZW5kZXJPYmplY3QqIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kLmdldCgpOyB9CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0KIAotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UmVuZGVyUmFuZ2UmIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zdGFydCA9PSBvdGhlci5tX3N0YXJ0ICYmIG1fZW5kID09IG90aGVyLm1fZW5kICYmIG1fc3Rh
cnRPZmZzZXQgPT0gb3RoZXIubV9zdGFydE9mZnNldCAmJiBtX2VuZE9mZnNldCA9PSBvdGhlci5t
X2VuZE9mZnNldDsKLSAgICAgICAgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5kZXJS
YW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydCA9PSBvdGhl
ci5tX3N0YXJ0ICYmIG1fZW5kID09IG90aGVyLm1fZW5kICYmIG1fc3RhcnRPZmZzZXQgPT0gb3Ro
ZXIubV9zdGFydE9mZnNldCAmJiBtX2VuZE9mZnNldCA9PSBvdGhlci5tX2VuZE9mZnNldDsKKyAg
ICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBXZWFrUHRyPFJlbmRlck9iamVjdD4gbV9zdGFy
dDsKLSAgICAgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fZW5kOwotICAgICAgICBPcHRpb25h
bDx1bnNpZ25lZD4gbV9zdGFydE9mZnNldDsKLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1f
ZW5kT2Zmc2V0OwotICAgIH07Citwcml2YXRlOgorICAgIFdlYWtQdHI8UmVuZGVyT2JqZWN0PiBt
X3N0YXJ0OworICAgIFdlYWtQdHI8UmVuZGVyT2JqZWN0PiBtX2VuZDsKKyAgICB1bnNpZ25lZCBt
X3N0YXJ0T2Zmc2V0IHsgMCB9OworICAgIHVuc2lnbmVkIG1fZW5kT2Zmc2V0IHsgMCB9OworfTsK
ICAgICAKK2NsYXNzIFJlbmRlclJhbmdlSXRlcmF0b3IgeworcHVibGljOgorICAgIFJlbmRlclJh
bmdlSXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBzdGFydCk7CisgICAgUmVuZGVyT2JqZWN0KiBjdXJy
ZW50KCkgY29uc3Q7CisgICAgUmVuZGVyT2JqZWN0KiBuZXh0KCk7CisgICAgCitwcml2YXRlOgor
ICAgIHZvaWQgY2hlY2tGb3JTcGFubmVyKCk7CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiBtX2N1
cnJlbnQgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Cit9OworCitjbGFzcyBIaWdobGlnaHREYXRhIHsK
K3B1YmxpYzoKICAgICB2b2lkIHNldFJlbmRlclJhbmdlKGNvbnN0IFJlbmRlclJhbmdlJik7CiAg
ICAgYm9vbCBzZXRSZW5kZXJSYW5nZShjb25zdCBIaWdobGlnaHRSYW5nZURhdGEmKTsgLy8gUmV0
dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwuCi0gICAgCi0gICAgZW51bSBjbGFzcyBSZXBhaW50TW9k
ZSB7IE5ld1hPUk9sZCwgTmV3TWludXNPbGQsIE5vdGhpbmcgfTsKLSAgICB2b2lkIHNldFNlbGVj
dGlvbihjb25zdCBSZW5kZXJSYW5nZSYsIFJlcGFpbnRNb2RlID0gUmVwYWludE1vZGU6Ok5ld1hP
Uk9sZCk7CiAgICAgY29uc3QgUmVuZGVyUmFuZ2UmIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVu
ZGVyUmFuZ2U7IH0KIAogICAgIFJlbmRlck9iamVjdCogc3RhcnQoKSBjb25zdCB7IHJldHVybiBt
X3JlbmRlclJhbmdlLnN0YXJ0KCk7IH0KICAgICBSZW5kZXJPYmplY3QqIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVuZGVyUmFuZ2UuZW5kKCk7IH0KIAotICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
KCkgY29uc3QgeyBBU1NFUlQobV9yZW5kZXJSYW5nZS5zdGFydE9mZnNldCgpKTsgcmV0dXJuIG1f
cmVuZGVyUmFuZ2Uuc3RhcnRPZmZzZXQoKS52YWx1ZU9yKDApOyB9Ci0gICAgdW5zaWduZWQgZW5k
T2Zmc2V0KCkgY29uc3QgeyBBU1NFUlQobV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKSk7IHJldHVy
biBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpLnZhbHVlT3IoMCk7IH0KKyAgICB1bnNpZ25lZCBz
dGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUmFuZ2Uuc3RhcnRPZmZzZXQoKTsg
fQorICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUmFuZ2Uu
ZW5kT2Zmc2V0KCk7IH0KIAotICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKLSAgICBJbnRSZWN0
IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRl
bnQ6Ok5vKTsgfQotICAgIEludFJlY3QgYm91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQoKSBj
b25zdCB7IHJldHVybiBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50OjpZZXMpOyB9
Ci0gICAgdm9pZCByZXBhaW50U2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAgCiAgICAgUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZSBoaWdobGlnaHRTdGF0ZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRl
ck9iamVjdCYpOwogCi1wcml2YXRlOgotICAgIGVudW0gY2xhc3MgQ2xpcFRvVmlzaWJsZUNvbnRl
bnQgeyBZZXMsIE5vIH07Ci0gICAgSW50UmVjdCBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVD
b250ZW50KSBjb25zdDsKLSAgICB2b2lkIGFwcGx5U2VsZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdl
JiwgUmVwYWludE1vZGUpOwotCi0gICAgY29uc3QgUmVuZGVyVmlldyYgbV9yZW5kZXJWaWV3Owot
I2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIFNlbGVjdGlvblJlY3RHYXRoZXJlciBt
X3NlbGVjdGlvblJlY3RHYXRoZXJlcjsKLSNlbmRpZgorcHJvdGVjdGVkOgogICAgIFJlbmRlclJh
bmdlIG1fcmVuZGVyUmFuZ2U7Ci0gICAgYm9vbCBtX3NlbGVjdGlvbldhc0NhcmV0IHsgZmFsc2Ug
fTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCAxMjY3ZjAxZmQ1MTk3YTUyOTBmNjI0YTIzMWJlYmUw
NzZkNjQ0YjA1Li5jYmMwM2E3ZGI5OGMxMTUzNmIzNzEyNzNhZmE4YTM1MDM2ZDE2NzU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC0xMDUwLDYgKzEw
NTAsNyBAQCBWZWN0b3I8TWFya2VkVGV4dD4gSW5saW5lVGV4dEJveDo6Y29sbGVjdE1hcmtlZFRl
eHRzRm9ySGlnaGxpZ2h0cyhUZXh0UGFpbnRQaGFzZQogICAgIFZlY3RvcjxNYXJrZWRUZXh0PiBt
YXJrZWRUZXh0czsKICAgICBhdXRvJiBwYXJlbnRSZW5kZXJlciA9IHBhcmVudCgpLT5yZW5kZXJl
cigpOwogICAgIGF1dG8mIHBhcmVudFN0eWxlID0gcGFyZW50UmVuZGVyZXIuc3R5bGUoKTsKKyAg
ICBIaWdobGlnaHREYXRhIGhpZ2hsaWdodERhdGE7CiAgICAgZm9yIChhdXRvJiBoaWdobGlnaHQg
OiByZW5kZXJlcigpLmRvY3VtZW50KCkuaGlnaGxpZ2h0TWFwKCkubWFwKCkpIHsKICAgICAgICAg
YXV0byByZW5kZXJTdHlsZSA9IHBhcmVudFJlbmRlcmVyLmdldFVuY2FjaGVkUHNldWRvU3R5bGUo
eyBQc2V1ZG9JZDo6SGlnaGxpZ2h0LCBoaWdobGlnaHQua2V5IH0sICZwYXJlbnRTdHlsZSk7CiAg
ICAgICAgIGlmICghcmVuZGVyU3R5bGUpCkBAIC0xMDU3LDIyICsxMDU4LDEyIEBAIFZlY3RvcjxN
YXJrZWRUZXh0PiBJbmxpbmVUZXh0Qm94Ojpjb2xsZWN0TWFya2VkVGV4dHNGb3JIaWdobGlnaHRz
KFRleHRQYWludFBoYXNlCiAgICAgICAgIGlmIChyZW5kZXJTdHlsZS0+dGV4dERlY29yYXRpb25z
SW5FZmZlY3QoKS5pc0VtcHR5KCkgJiYgcGhhc2UgPT0gVGV4dFBhaW50UGhhc2U6OkRlY29yYXRp
b24pCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChhdXRvJiByYW5nZURhdGEg
OiBoaWdobGlnaHQudmFsdWUtPnJhbmdlc0RhdGEoKSkgewotICAgICAgICAgICAgaWYgKHJhbmdl
RGF0YS0+c3RhcnRQb3NpdGlvbiAmJiByYW5nZURhdGEtPmVuZFBvc2l0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHJhbmdlRGF0YS0+c3RhcnRQb3NpdGlv
bi52YWx1ZSgpOwotICAgICAgICAgICAgICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uID0gcmFuZ2VE
YXRhLT5lbmRQb3NpdGlvbi52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGF1dG8qIHN0YXJ0UmVu
ZGVyZXIgPSBzdGFydFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzdGFydFBvc2l0aW9uLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byogZW5kUmVuZGVyZXIgPSBl
bmRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGVuZE9mZnNldCA9IGVuZFBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGFydFJlbmRlcmVyIHx8ICFlbmRSZW5kZXJlcikK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGhp
Z2hsaWdodERhdGEgPSBIaWdobGlnaHREYXRhKHJlbmRlcmVyKCkudmlldygpKTsKLSAgICAgICAg
ICAgICAgICBoaWdobGlnaHREYXRhLnNldFJlbmRlclJhbmdlKHsgc3RhcnRSZW5kZXJlciwgZW5k
UmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgfSk7Ci0gICAgICAgICAgICAgICAgYXV0
byBbaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZF0gPSBoaWdobGlnaHRTdGFydEVuZChoaWdo
bGlnaHREYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0U3RhcnQgPCBoaWdobGln
aHRFbmQpCi0gICAgICAgICAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZCh7IGhpZ2hsaWdo
dFN0YXJ0LCBoaWdobGlnaHRFbmQsIE1hcmtlZFRleHQ6OkhpZ2hsaWdodCwgbnVsbHB0ciwgaGln
aGxpZ2h0LmtleSB9KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaGlnaGxpZ2h0
RGF0YS5zZXRSZW5kZXJSYW5nZShyYW5nZURhdGEpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIFtoaWdobGlnaHRTdGFydCwgaGlnaGxp
Z2h0RW5kXSA9IGhpZ2hsaWdodFN0YXJ0RW5kKGhpZ2hsaWdodERhdGEpOworICAgICAgICAgICAg
aWYgKGhpZ2hsaWdodFN0YXJ0IDwgaGlnaGxpZ2h0RW5kKQorICAgICAgICAgICAgICAgIG1hcmtl
ZFRleHRzLmFwcGVuZCh7IGhpZ2hsaWdodFN0YXJ0LCBoaWdobGlnaHRFbmQsIE1hcmtlZFRleHQ6
OkhpZ2hsaWdodCwgbnVsbHB0ciwgaGlnaGxpZ2h0LmtleSB9KTsKICAgICAgICAgfQogICAgIH0K
ICAgICByZXR1cm4gbWFya2VkVGV4dHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxhY2VkLmNwcAppbmRleCA3N2E2OGUwNmQ2YTgxNTVlMDdkN2YyNWY4ODUyZDE4NDUyZjI3
OWYxLi42Nzc1OWUyMjM3YTYyNzRkYTQ5YzEzNzJhNThhNGYyZjJiZjc1NzkyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTE1Miw3ICsxNTIsNyBA
QCBpbmxpbmUgc3RhdGljIGJvb2wgZHJhZ2dlZENvbnRlbnRDb250YWluc1JlcGxhY2VkRWxlbWVu
dChjb25zdCBWZWN0b3I8UmVuZGVyZWREbwogCiBDb2xvciBSZW5kZXJSZXBsYWNlZDo6Y2FsY3Vs
YXRlSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAogewotICAgIGF1dG8gaGlnaGxpZ2h0RGF0YSA9IEhp
Z2hsaWdodERhdGEodmlldygpKTsKKyAgICBIaWdobGlnaHREYXRhIGhpZ2hsaWdodERhdGE7CiAg
ICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBkb2N1bWVudCgpLmhpZ2hsaWdodE1hcCgpLm1hcCgp
KSB7CiAgICAgICAgIGZvciAoYXV0byYgcmFuZ2VEYXRhIDogaGlnaGxpZ2h0LnZhbHVlLT5yYW5n
ZXNEYXRhKCkpIHsKICAgICAgICAgICAgIGlmICghaGlnaGxpZ2h0RGF0YS5zZXRSZW5kZXJSYW5n
ZShyYW5nZURhdGEpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggYmNh
MWIxZGYwYmI3ZmEzMzIxMzNhNzczNGRjM2VlZDJjNTk2NjVkNC4uNDc4MWU0ZjFkMjRlMDM5MGRl
MmJkMTE4MzE5OWM5ZjI4NWNkOWQ4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5oCkBAIC0yMiwxMCArMjIsMTAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCi0jaW5jbHVkZSAiSGlnaGxpZ2h0RGF0YS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgog
I2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgor
I2luY2x1ZGUgIlNlbGVjdGlvblJhbmdlRGF0YS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtODQs
NyArODQsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuIHRoZSByZW5kZXJlciB3aG9zZSBiYWNr
Z3JvdW5kIHN0eWxlIGlzIHVzZWQgdG8gcGFpbnQgdGhlIHJvb3QgYmFja2dyb3VuZC4KICAgICBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclJvb3RCYWNrZ3JvdW5kKCkgY29uc3Q7CiAKLSAgICBI
aWdobGlnaHREYXRhJiBzZWxlY3Rpb24oKSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQorICAgIFNl
bGVjdGlvblJhbmdlRGF0YSYgc2VsZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KIAog
ICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdDsKIApAQCAtMjI0LDcgKzIyNCw3IEBAIHByaXZhdGU6
CiAgICAgdWludDY0X3QgbV9yZW5kZXJlckNvdW50IHsgMSB9OwogCiAgICAgbXV0YWJsZSBzdGQ6
OnVuaXF1ZV9wdHI8UmVnaW9uPiBtX2FjY3VtdWxhdGVkUmVwYWludFJlZ2lvbjsKLSAgICBIaWdo
bGlnaHREYXRhIG1fc2VsZWN0aW9uOworICAgIFNlbGVjdGlvblJhbmdlRGF0YSBtX3NlbGVjdGlv
bjsKIAogICAgIFdlYWtQdHI8UmVuZGVyTGF5ZXI+IG1fc3R5bGVDaGFuZ2VMYXllck11dGF0aW9u
Um9vdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJh
bmdlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjNmMTBhZmZlOTdiYTg2MDUxMTgzYTU2NzJiYzNjYzdhNjYwZGYwYmIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VE
YXRhLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxB
UyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQor
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSGlnaGxpZ2h0RGF0YS5oIgorI2luY2x1ZGUgIlJlbmRlclNlbGVjdGlvbkluZm8u
aCIKKworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorI2luY2x1ZGUgIlNlbGVjdGlvblJl
Y3RHYXRoZXJlci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Vs
ZWN0aW9uUmFuZ2VEYXRhIDogcHVibGljIEhpZ2hsaWdodERhdGEgeworcHVibGljOgorICAgIFNl
bGVjdGlvblJhbmdlRGF0YShSZW5kZXJWaWV3Jik7CisgICAgCisgICAgZW51bSBjbGFzcyBSZXBh
aW50TW9kZSB7IE5ld1hPUk9sZCwgTmV3TWludXNPbGQsIE5vdGhpbmcgfTsKKyAgICB2b2lkIHNl
dChjb25zdCBSZW5kZXJSYW5nZSYsIFJlcGFpbnRNb2RlID0gUmVwYWludE1vZGU6Ok5ld1hPUk9s
ZCk7CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgcmVwYWludCgpIGNvbnN0OworICAgIAor
ICAgIEludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gY29sbGVjdEJvdW5kcyhDbGlwVG9W
aXNpYmxlQ29udGVudDo6Tm8pOyB9CisgICAgSW50UmVjdCBib3VuZHNDbGlwcGVkVG9WaXNpYmxl
Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRl
bnQ6Olllcyk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3QgUmVuZGVyVmlldyYgbV9yZW5k
ZXJWaWV3OworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgIFNlbGVjdGlvblJlY3RH
YXRoZXJlciBtX3NlbGVjdGlvblJlY3RHYXRoZXJlcjsKKyNlbmRpZgorICAgIGJvb2wgbV9zZWxl
Y3Rpb25XYXNDYXJldCB7IGZhbHNlIH07CisgICAgZW51bSBjbGFzcyBDbGlwVG9WaXNpYmxlQ29u
dGVudCB7IFllcywgTm8gfTsKKyAgICBJbnRSZWN0IGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJs
ZUNvbnRlbnQpIGNvbnN0OworICAgIHZvaWQgYXBwbHkoY29uc3QgUmVuZGVyUmFuZ2UmLCBSZXBh
aW50TW9kZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="commit-queue"
          id="427516"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411343</attachid>
            <date>2020-10-14 10:06:27 -0700</date>
            <delta_ts>2020-10-14 10:23:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217711-20201014100626.patch</filename>
            <type>text/plain</type>
            <size>47462</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE0MDAyN2UwYjY3MTg0
M2M1MWI2ZjZlNjljNTc3ZDRiZGVmMTVkZi4uODVjODVhOTQzYTYzMTllY2MzNjkyMGNiMjZmOGYw
ZThhZWY4YmEzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDIwLTEwLTE0ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3Ig
SGlnaGxpZ2h0RGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3NzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSGlnaGxpZ2h0RGF0YSB3YXMgcmVuYW1lZCB3aGVuIGl0IHdhcyB1c2VkIGZvciBtb3Jl
IHRoYXQgc2VsZWN0aW9ucywgYnV0CisgICAgICAgIG1vcmUgdGhhbiBoYWxmIHRoZSBmaWxlIHdh
cyBvbmx5IHN1cHBvc2VkIHRvIGJlIHVzZWQgdG8gZGVhbCB3aXRoIHRoZSBjdXJyZW50CisgICAg
ICAgIHNlbGVjdGlvbiwgc28gSSd2ZSBzcGxpdCBpdCBiYWNrIG91dCBpbnRvIGEgbW9yZSByZWFz
b25hYmxlIHNldCBvZiBmaWxlcy4KKyAgICAgICAgQWxzbyBtYWRlIG9mZnNldHMgbm8gbG9uZ2Vy
IG9wdGlvbmFsLCBhcyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBuZWVkLgorICAgICAgICBF
eHRlbmRlZCB0aGUgSGlnaGxpZ2h0RGF0YSBzZXRSZW5kZXJSYW5nZSBpbnRvIElubGluZVRleHRC
b3gsIGFzIGl0J3MgYSBiZXR0ZXIKKyAgICAgICAgd2F5IHRvIGNhbGN1bGF0ZSB0aGF0IGRvZXMg
bm90IHVzZSBkZXByZWNhdGVkIGZ1bmN0aW9ucy4gCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hh
bmdlLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Nh
cmV0Q29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWlu
dENvbnRlbnRzRm9yU25hcHNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlOjp+U2NvcGVkRnJh
bWVTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JS
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUmFuZ2VJdGVyYXRvcjo6UmVuZGVyUmFuZ2VJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSYW5nZUl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJhbmdlSXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmFuZ2VJdGVyYXRvcjo6Y2hlY2tGb3JTcGFubmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlbmRlcmVyQWZ0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0
YTo6aGlnaGxpZ2h0U3RhdGVGb3JSZW5kZXJlcik6CisgICAgICAgICgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6aXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb2xsZWN0U2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjpIaWdobGlnaHREYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNldFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpyZXBhaW50U2VsZWN0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OmNvbGxlY3RCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6YXBwbHlTZWxl
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9IaWdobGlnaHREYXRhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSYW5nZTo6UmVuZGVyUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmFuZ2U6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmFuZ2U6OnN0YXJ0
T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJhbmdlOjplbmRPZmZzZXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmFuZ2U6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6c3RhcnRPZmZzZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6ZW5kT2Zmc2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlOjpSZW5kZXJSYW5nZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6c3Rh
cnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6UmVu
ZGVyUmFuZ2U6OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGln
aHREYXRhOjpSZW5kZXJSYW5nZTo6c3RhcnRPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2U6OmVuZE9mZnNldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6
b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRE
YXRhOjpib3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0
RGF0YTo6Ym91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckhpZ2hsaWdodHMgY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsYWNlZDo6Y2FsY3VsYXRlSGlnaGxpZ2h0Q29sb3IgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NlbGVjdGlvblJh
bmdlRGF0YS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGln
aHREYXRhLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyQWZ0ZXJPZmZzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpjb2xs
ZWN0U2VsZWN0aW9uRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6
OlNlbGVjdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnJlcGFpbnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpjb2xsZWN0Qm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6YXBwbHkpOgorICAgICAgICAqIHJl
bmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3Rpb25SYW5nZURhdGE6OmJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25SYW5nZURhdGE6OmJvdW5kc0NsaXBwZWRUb1Zpc2libGVDb250ZW50IGNvbnN0KToKKwog
MjAyMC0xMC0xMyAgTWVnYW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFBhaW50IENTUyBoaWdobGlnaHRzIG92ZXIgaW1hZ2VzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpp
bmRleCA1N2Y4MzI0YjAxMjVjYWZmMWFmZTBkM2JiZTU2NjkzZWY2ZWI4OWZkLi4wYWRlN2Q4Yzhk
NGIyZjJkOThkNmQzOTBlOTM4YWIzM2ViNzQ1ODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0
MzksNiArMTQzOSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5o
CiAgICAgcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5oCisgICAgcmVuZGVyaW5nL1NlbGVjdGlv
blJhbmdlRGF0YS5oCiAKICAgICByZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAogICAgIHJlbmRl
cmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDk2NWFkYzEzMGYx
ZGY0MzY1YjA4Mjk5ZDI2NmQ2OGY5ZmNmODFiMWQuLjk0ODA1MTFjNjk3ODE5N2VkNmYyNWIxMWE4
OGU2OTA0YjBhMzI0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMjIxLDYgKzIyMjEsNyBAQCByZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAKIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCiByZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAKIHJlbmRlcmluZy9TY3JvbGxBbGlnbm1lbnQuY3BwCityZW5k
ZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcAogcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmNwcAog
cmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKIHJlbmRlcmluZy9UZXh0UGFpbnRT
dHlsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA0YzA3NTc4MDk2ZjQ2Y2ZhMTdjNDgwZjMzNTM1ZDdlM2M0OGE5OWJkLi4x
ODFkMDhiNmI4YWZjNGQwMWQ2Y2Y5MzQ1MjU5MmI4ZWIwYmJlNzI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTk3LDYgKzEx
OTcsNyBAQAogCQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQx
NTI5MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDU3NzVFNTIwNDcy
RjczMDA4RENFNUQgLyogTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ1Nzc1RTQyMDQ3MkY3MzAwOERD
RTVEIC8qIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDYzQ0Y2ODIyMTJGQTY4MDAxQTg1Nzcg
LyogRGF0YURldGVjdG9yc0NvcmVTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNzk0MUUyMUM1NkMyOTMwMEE0QzU4RSAvKiBEYXRhRGV0
ZWN0b3JzQ29yZVNvZnRMaW5rLm1tICovOyB9OworCQk0NDY1RDdCRDI1MzZEMDVFMDAxNjY2NkQg
LyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NEIzOEJGNDI1MzY5MDFBMDBBNDQ1OEQgLyogU2VsZWN0aW9uUmFuZ2VE
YXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDQ2REM2NDgyNEEyOURBQjAwNjFGMzkwIC8qIFBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElk
ZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ0NkRDNjQ2MjRBMjlEOUIwMDYxRjM5MCAvKiBQbGF5YmFja1RhcmdldENsaWVudENvbnRleHRJ
ZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDQ3MTcxMEUyMDVBRjk0NTAwMEExMTZFIC8qIE1lZGlhUXVlcnlQYXJzZXJDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDcxNzEw
QzIwNUFGOTQ1MDAwQTExNkUgLyogTWVkaWFRdWVyeVBhcnNlckNvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDc5NTgwNDE2NDNCNDlB
MDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Nzk1ODAzMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJzZWRD
b250ZW50VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01MDQ0LDcgKzUwNDUsNiBAQAogCQlFNDdDMzkzMDFGRTZFMEZEMDBCQkJDNkIgLyog
UmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QzM5MjYxRkU2RTBEQzAwQkJCQzZCIC8qIFJlbmRlclRy
ZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaCAqLzsgfTsKIAkJRTQ3QzM5MzExRkU2RTEwMjAwQkJCQzZC
IC8qIFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QzM5MjUxRkU2RTBEQjAwQkJCQzZCIC8q
IFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oICovOyB9OwogCQlFNDdDMzkzMjFG
RTZFMTA1MDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyODFGRTZFMEREMDBCQkJDNkIg
LyogUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmggKi87IH07Ci0JCUU0N0MzOTMzMUZFNkUxMDgwMEJC
QkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyNzFGRTZFMERDMDBCQkJDNkIgLyog
UmVuZGVyVHJlZUJ1aWxkZXJNdWx0aUNvbHVtbi5oICovOyB9OwogCQlFNDdFMjc2NTE2MDM2RUQy
MDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0UyNzY0MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRl
bnNpb25TdHlsZVNoZWV0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUU0ODEzN0I5MURCM0I1MjYwMDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDgxMzdCODFE
QjNCNTI2MDA1QzU5QkYgLyogU3R5bGVWYWxpZGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0ODYzQ0ZFMjM4NDJFOUUwMDk3MjE1OCAvKiBS
dWxlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ4NjNDRkQyMzg0MkU5RTAwOTcyMTU4IC8qIFJ1bGVEYXRhLmggKi87IH07CkBAIC03OTI0LDYg
Kzc5MjQsOCBAQAogCQk0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3Bv
bnNlSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNw
b25zZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEEyOEFBQjEyREZCOEFD
MDBBRTkyM0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTWF0aE1MRWxlbWVudEZhY3RvcnkuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvTWF0aE1MRWxlbWVudEZhY3RvcnkuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJNDRBMjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hdGhNTE5hbWVzLmg7IHBhdGggPSBE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL01hdGhNTE5hbWVzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CisJCTQ0QjM4QkY0MjUzNjkwMUEwMEE0NDU4RCAvKiBTZWxlY3Rpb25S
YW5nZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0aW9uUmFu
Z2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0QjM4QkY5MjUzNjlBODgw
MEE0NDU4RCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDRDOTkxODEwRjNEMUUwRDAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9T
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsYmFyVGhl
bWVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0Qzk5MTg1MEYzRDFFQkUw
MDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JvbGxiYXJUaGVtZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGhlbWVJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI5MjYwLDYgKzI5MjYyLDggQEAKIAkJCQlBOENGRjVEQTBBMTU1QTA1MDAwQTQyMzQgLyog
Um9vdElubGluZUJveC5oICovLAogCQkJCTVEOTI1QjY1MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3Jv
bGxBbGlnbm1lbnQuY3BwICovLAogCQkJCTVEOTI1QjY2MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3Jv
bGxBbGlnbm1lbnQuaCAqLywKKwkJCQk0NEIzOEJGOTI1MzY5QTg4MDBBNDQ1OEQgLyogU2VsZWN0
aW9uUmFuZ2VEYXRhLmNwcCAqLywKKwkJCQk0NEIzOEJGNDI1MzY5MDFBMDBBNDQ1OEQgLyogU2Vs
ZWN0aW9uUmFuZ2VEYXRhLmggKi8sCiAJCQkJRTMxQ0Q3NTAyMjlGNzQ5NTAwRkJEQTE5IC8qIFRh
YmxlTGF5b3V0LmNwcCAqLywKIAkJCQlBOENGRjA0QzBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVM
YXlvdXQuaCAqLywKIAkJCQkwRjU0RENFMzE4ODEwNTFEMDAzRUVEQkIgLyogVGV4dEF1dG9TaXpp
bmcuY3BwICovLApAQCAtMzA2NTQsNyArMzA2NTgsNiBAQAogCQkJCTUxNzQxRDBGMEIwNzI1OUEw
MEVENDQyQyAvKiBCYWNrRm9yd2FyZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBOEM4
MUUxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTFBMUI4N0QyMDg3QzRDMDAwOTc5QTc1IC8qIEJhY2tGb3J3YXJkSXRlbUlkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTQ3MjE3MjUzMjNDMjEwMEYxNTNDOCAvKiBC
YWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxMjRFRTgwQzI2
NDFDRDAwOUUyMzQ5IC8qIEJhclByb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MEJCNjE2MUQw
QTFCRjAwMDIyMTgxMiAvKiBCYXNlNjRVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTgz
MTk4RkJGMjRBMTYwREQwMDQyMEIwNSAvKiBCYXNlQXVkaW9Db250ZXh0LmggaW4gSGVhZGVycyAq
LywKQEAgLTMzNjkwLDcgKzMzNjkzLDYgQEAKIAkJCQkxMTkzNDA5NzFGRUQ3MTU1MDA5MzVGMUUg
LyogUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTEx
Q0IyNzg5MjAzQkE1NzAwMDRBMURDOSAvKiBSZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUU0N0MzOTMyMUZFNkUxMDUwMEJCQkM2QiAvKiBSZW5kZXJUcmVl
QnVpbGRlckxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0N0MzOTMzMUZFNkUxMDgwMEJCQkM2
QiAvKiBSZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
MTkzNDA4QTFGRUIzNTVEMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxMTkzNDA3OTFGRThCOTIzMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxk
ZXJUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE2M0Y4MjQyNEU1RDVBRTAwMEFCOTYwIC8q
IFJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
Mzg4Miw2ICszMzg4NCw3IEBACiAJCQkJOTc0RDJEQTUxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3Vy
aXR5UG9saWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDVCQzQyNzE2Rjg4MkVFMDA3MDQ4RDAg
LyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJD
M0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDQ2NUQ3QkQyNTM2RDA1RTAwMTY2NjZEIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkVBODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJl
Y3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNDA1Qzg5MTkwQjAxNDQwMDc1NEY5NCAvKiBTZWxl
Y3Rpb25SZWN0R2F0aGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NEI0QkI0MTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA2ZWM5MWMwNmZhZTc0ZjRkZjQzMjc1
OWM2YmViNmYxYjkxNzZjYjdhLi43NzBkOGJmMDcwMDI3Y2U5Y2Q1Y2FhNjQxMzNlOGM3YmExOWM1
YmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNDUx
LDcgKzQ1MSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRl
KFJldmVhbFNlbGVjdGlvbkFmdGVyVXBkYXRlIHJldmVhbE1vCiAgICAgICAgIG1fc2VsZWN0aW9u
UmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKICAgICBtX3BlbmRpbmdT
ZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1
bWVudC0+cmVuZGVyVmlldygpKQotICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVj
dGlvbigpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogfQogCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVD
aGFuZ2VJbnRlbnQmIGludGVudCkKQEAgLTUwNyw3ICs1MDcsNyBAQCB2b2lkIERyYWdDYXJldENv
bnRyb2xsZXI6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbm9kZS5kb2N1bWVudCgpLnJlbmRlclZpZXco
KSkKLSAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAg
dmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIGNsZWFyKCk7CiB9CkBAIC01NjYsNyAr
NTY2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihO
b2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBib28KIAogICAgIGlmIChjbGVhclJlbmRlclRy
ZWVTZWxlY3Rpb24pIHsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBub2RlLmRvY3Vt
ZW50KCkucmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24o
KS5jbGVhclNlbGVjdGlvbigpOworICAgICAgICAgICAgcmVuZGVyVmlldy0+c2VsZWN0aW9uKCku
Y2xlYXIoKTsKIAogICAgICAgICAgICAgLy8gVHJpZ2dlciBhIHNlbGVjdGlvbiB1cGRhdGUgc28g
dGhlIHNlbGVjdGlvbiB3aWxsIGJlIHNldCBhZ2Fpbi4KICAgICAgICAgICAgIG1fc2VsZWN0aW9u
UmV2ZWFsSW50ZW50ID0gQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKTsKQEAgLTE1NzAsNyArMTU3
MCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKQogI2Vu
ZGlmCiAKICAgICBpZiAoYXV0byogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKLSAg
ICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+
c2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIHNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0Fw
cGVhcmFuY2UoVmlzaWJsZVNlbGVjdGlvbigpLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygp
LCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVy
R3JhbnVsYXJpdHkpOwogICAgIG1fcHJldmlvdXNDYXJldE5vZGUgPSBudWxscHRyOwpAQCAtMjA1
OCw3ICsyMDU4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVD
aGFuZ2VkKCkKICAgICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8gd2UgaGF2ZSB0byB1cGRhdGUg
cGxhY2VzIHRob3NlIGNvbG9ycyB3ZXJlIHBhaW50ZWQuCiAgICAgaWYgKFJlbmRlclZpZXcqIHZp
ZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHZpZXctPnNlbGVjdGlvbigp
LnJlcGFpbnRTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWludCgp
OwogCiAgICAgLy8gQ2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0aXZlIGZyYW1lLgogICAgIGlmIChh
Y3RpdmVBbmRGb2N1c2VkKQpAQCAtMjE1Myw3ICsyMTUzLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAjZW5kaWYKIAogICAgIGlmICghc2VsZWN0aW9uLmlzUmFu
Z2UoKSkgewotICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOworICAg
ICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0yMTc4LDcgKzIxNzgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJh
bmNlKCkKICAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kUG9zLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgICAgIEFTU0VSVChzdGFydE9mZnNldCA+PSAw
ICYmIGVuZE9mZnNldCA+PSAwKTsKLSAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKHsgc3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0pOworICAgICAg
ICB2aWV3LT5zZWxlY3Rpb24oKS5zZXQoeyBzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVu
ZE9mZnNldCkgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXgg
ZTFhODQwODk4NTdkMzlhMzNlNTBhMDdiMDRhMjYzNzQ1MGVkNmI5YS4uNjA5MzY4YzhkMjcxNjdh
OGQxOTUwZTNiNzI2OTdjMGU5OGQyYjhiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApA
QCAtNDM1MSw3ICs0MzUxLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHNGb3JTbmFw
c2hvdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QKICAgICBpZiAoc2hv
dWxkUGFpbnRTZWxlY3Rpb24gPT0gRXhjbHVkZVNlbGVjdGlvbikgewogICAgICAgICBmb3IgKGF1
dG8qIGZyYW1lID0gbV9mcmFtZS5wdHIoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQobV9mcmFtZS5wdHIoKSkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiByZW5k
ZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHJlbmRl
clZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgcmVu
ZGVyVmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0RyYWdEYXRhLmgKaW5kZXggYWNjM2U4ZWQxNjE4OThiODYxYzlmZmQ5NjY4MmVh
NDI0YTJkYmVlZi4uZjFkMTg2ZjJiYzRjMTM2YTI1MTdhN2NkMmExNDdiN2Q3NmI4NzZkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCkBAIC00OSw5ICs0OSw5IEBAIHR5cGVkZWYgdm9p
ZCogRHJhZ0RhdGFSZWY7CiB0eXBlZGVmIHN0cnVjdCBJRGF0YU9iamVjdCogRHJhZ0RhdGFSZWY7
CiAjZWxpZiBQTEFURk9STShHVEspCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBTZWxlY3Rp
b25EYXRhOworY2xhc3MgU2VsZWN0aW9uUmFuZ2VEYXRhOwogfQotdHlwZWRlZiBXZWJDb3JlOjpT
ZWxlY3Rpb25EYXRhKiBEcmFnRGF0YVJlZjsKK3R5cGVkZWYgV2ViQ29yZTo6U2VsZWN0aW9uUmFu
Z2VEYXRhKiBEcmFnRGF0YVJlZjsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIERyYWdEYXRhUmVmOwog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRleCA2MzBkNDZlMmI1
N2I0MGU0Y2Y0ZTM4MDg2NWU2Y2YxYTQ5MTYzY2Q4Li4xOTUzMjk2NzdkMTgyMGVkZGFjMGFmMWVj
N2NiODc0MjNhZjY1YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFn
SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlckVs
ZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uUmFu
Z2VEYXRhLmgiCiAjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0SW5kaWNh
dG9yLmgiCiAKQEAgLTE0MywxMiArMTQ0LDEyIEBAIHN0cnVjdCBTY29wZWRGcmFtZVNlbGVjdGlv
blN0YXRlIHsKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuY29u
dGVudFJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rpb24pOwotICAgICAg
ICAgICAgcmVuZGVyVmlldy0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbi52YWx1
ZSgpLCBIaWdobGlnaHREYXRhOjpSZXBhaW50TW9kZTo6Tm90aGluZyk7CisgICAgICAgICAgICBy
ZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5zZXQoc2VsZWN0aW9uLnZhbHVlKCksIFNlbGVjdGlvblJh
bmdlRGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
Y29uc3QgRnJhbWUmIGZyYW1lOwotICAgIE9wdGlvbmFsPEhpZ2hsaWdodERhdGE6OlJlbmRlclJh
bmdlPiBzZWxlY3Rpb247CisgICAgT3B0aW9uYWw8UmVuZGVyUmFuZ2U+IHNlbGVjdGlvbjsKIH07
CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTE4NSw3ICsxODYsNyBAQCBEcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UsIGJvbwogICAgIGludCBzdGFydE9mZnNldCA9IHN0YXJ0LmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCk7CiAgICAgaW50IGVuZE9mZnNldCA9IGVuZC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpOwogICAgIEFTU0VSVChzdGFydE9mZnNldCA+PSAwICYmIGVuZE9mZnNldCA+PSAw
KTsKLSAgICB2aWV3LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oeyBzdGFydFJlbmRlcmVyLCBl
bmRSZW5kZXJlciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGVuZE9mZnNldCkgfSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWludE1vZGU6Ok5v
dGhpbmcpOworICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7IHN0YXJ0UmVuZGVyZXIsIGVuZFJl
bmRlcmVyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZW5kT2Zmc2V0KSB9LCBTZWxlY3Rpb25SYW5nZURhdGE6OlJlcGFpbnRNb2RlOjpO
b3RoaW5nKTsKICAgICAvLyBXZSBjYXB0dXJlIHVzaW5nIHNuYXBzaG90RnJhbWVSZWN0KCkgYmVj
YXVzZSB3ZSBmYWtlIHVwIHRoZSBzZWxlY3Rpb24gdXNpbmcKICAgICAvLyBGcmFtZVZpZXcgYnV0
IHNuYXBzaG90U2VsZWN0aW9uKCkgdXNlcyB0aGUgc2VsZWN0aW9uIGZyb20gdGhlIEZyYW1lIGl0
c2VsZi4KICAgICByZXR1cm4gY3JlYXRlRHJhZ0ltYWdlRnJvbVNuYXBzaG90KHNuYXBzaG90RnJh
bWVSZWN0KGZyYW1lLCB2aWV3LT5zZWxlY3Rpb24oKS5ib3VuZHNDbGlwcGVkVG9WaXNpYmxlQ29u
dGVudCgpLCBvcHRpb25zKSwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGln
aGxpZ2h0RGF0YS5jcHAKaW5kZXggMmJkZDY5NzdmOTU3OTNjMTY1OWYzYmMxNjczMTY2MmEzZTM2
NzRkNy4uNjVlMzJhNDg1MGQ2N2NjZDAwNGUyYTc1NmIwZjFiN2Q3OGQxYmNhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcApAQCAtNDYsMTE1ICs0Niw0NiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSB7IC8vIFNlZSBidWcgIzE3Nzgw
OC4KIAotc3RydWN0IFNlbGVjdGlvbkRhdGEgewotICAgIHVzaW5nIFJlbmRlcmVyTWFwID0gSGFz
aE1hcDxSZW5kZXJPYmplY3QqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4+
OwotICAgIHVzaW5nIFJlbmRlckJsb2NrTWFwID0gSGFzaE1hcDxjb25zdCBSZW5kZXJCbG9jayos
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+PjsKIAotICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldDsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zm
c2V0OwotICAgIFJlbmRlcmVyTWFwIHJlbmRlcmVyczsKLSAgICBSZW5kZXJCbG9ja01hcCBibG9j
a3M7Ci19OwotCi1jbGFzcyBIaWdobGlnaHRJdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgSGlnaGxp
Z2h0SXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBzdGFydCkKLSAgICAgICAgOiBtX2N1cnJlbnQoc3Rh
cnQpCi0gICAgewotICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICB9Ci0gICAgCi0gICAg
UmVuZGVyT2JqZWN0KiBjdXJyZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2N1
cnJlbnQ7Ci0gICAgfQotICAgIAotICAgIFJlbmRlck9iamVjdCogbmV4dCgpCi0gICAgewotICAg
ICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnRTcGFuID0gbV9zcGFubmVyU3RhY2suaXNFbXB0eSgp
ID8gbnVsbHB0ciA6IG1fc3Bhbm5lclN0YWNrLmxhc3QoKS0+c3Bhbm5lcigpOwotICAgICAgICBt
X2N1cnJlbnQgPSBtX2N1cnJlbnQtPm5leHRJblByZU9yZGVyKGN1cnJlbnRTcGFuKTsKLSAgICAg
ICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgICAgIGlmICghbV9jdXJyZW50ICYmIGN1cnJlbnRT
cGFuKSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyID0gbV9zcGFubmVy
U3RhY2subGFzdCgpOwotICAgICAgICAgICAgbV9zcGFubmVyU3RhY2sucmVtb3ZlTGFzdCgpOwot
ICAgICAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXItPm5leHRJblByZU9yZGVyKCk7Ci0g
ICAgICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
bV9jdXJyZW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNoZWNrRm9yU3Bhbm5lcigp
Ci0gICAgewotICAgICAgICBpZiAoIWlzPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9s
ZGVyPihtX2N1cnJlbnQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRvJiBwbGFj
ZWhvbGRlciA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigq
bV9jdXJyZW50KTsKLSAgICAgICAgbV9zcGFubmVyU3RhY2suYXBwZW5kKCZwbGFjZWhvbGRlcik7
Ci0gICAgICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKLSAgICB9Ci0KLSAg
ICBSZW5kZXJPYmplY3QqIG1fY3VycmVudCB7IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8UmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBtX3NwYW5uZXJTdGFjazsKLX07Ci0KLX0g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1zdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckFm
dGVyT2Zmc2V0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkIG9mZnNldCkK
K1JlbmRlclJhbmdlSXRlcmF0b3I6OlJlbmRlclJhbmdlSXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBz
dGFydCkKKyAgICA6IG1fY3VycmVudChzdGFydCkKIHsKLSAgICBhdXRvKiBjaGlsZCA9IHJlbmRl
cmVyLmNoaWxkQXQob2Zmc2V0KTsKLSAgICByZXR1cm4gY2hpbGQgPyBjaGlsZCA6IHJlbmRlcmVy
Lm5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOworICAgIGNoZWNrRm9yU3Bhbm5lcigpOwog
fQogCi1zdGF0aWMgYm9vbCBpc1ZhbGlkUmVuZGVyZXJGb3JTZWxlY3Rpb24oY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlciwgY29uc3QgSGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2UmIHNlbGVj
dGlvbikKK1JlbmRlck9iamVjdCogUmVuZGVyUmFuZ2VJdGVyYXRvcjo6Y3VycmVudCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIChyZW5kZXJlci5jYW5CZVNlbGVjdGlvbkxlYWYoKSB8fCAmcmVuZGVy
ZXIgPT0gc2VsZWN0aW9uLnN0YXJ0KCkgfHwgJnJlbmRlcmVyID09IHNlbGVjdGlvbi5lbmQoKSkK
LSAgICAgICAgJiYgcmVuZGVyZXIuc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlOjpOb25lCi0gICAgICAgICYmIHJlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygp
OworICAgIHJldHVybiBtX2N1cnJlbnQ7CiB9CiAKLXN0YXRpYyBSZW5kZXJCbG9jayogY29udGFp
bmluZ0Jsb2NrQmVsb3dWaWV3KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCitSZW5kZXJP
YmplY3QqIFJlbmRlclJhbmdlSXRlcmF0b3I6Om5leHQoKQogewotICAgIGF1dG8qIGNvbnRhaW5p
bmdCbG9jayA9IHJlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpOwotICAgIHJldHVybiBpczxSZW5k
ZXJWaWV3Pihjb250YWluaW5nQmxvY2spID8gbnVsbHB0ciA6IGNvbnRhaW5pbmdCbG9jazsKKyAg
ICBSZW5kZXJPYmplY3QqIGN1cnJlbnRTcGFuID0gbV9zcGFubmVyU3RhY2suaXNFbXB0eSgpID8g
bnVsbHB0ciA6IG1fc3Bhbm5lclN0YWNrLmxhc3QoKS0+c3Bhbm5lcigpOworICAgIG1fY3VycmVu
dCA9IG1fY3VycmVudC0+bmV4dEluUHJlT3JkZXIoY3VycmVudFNwYW4pOworICAgIGNoZWNrRm9y
U3Bhbm5lcigpOworICAgIGlmICghbV9jdXJyZW50ICYmIGN1cnJlbnRTcGFuKSB7CisgICAgICAg
IFJlbmRlck9iamVjdCogcGxhY2Vob2xkZXIgPSBtX3NwYW5uZXJTdGFjay5sYXN0KCk7CisgICAg
ICAgIG1fc3Bhbm5lclN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9jdXJyZW50ID0gcGxh
Y2Vob2xkZXItPm5leHRJblByZU9yZGVyKCk7CisgICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOwor
ICAgIH0KKyAgICByZXR1cm4gbV9jdXJyZW50OwogfQogCi1zdGF0aWMgU2VsZWN0aW9uRGF0YSBj
b2xsZWN0U2VsZWN0aW9uRGF0YShjb25zdCBIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZSYgc2Vs
ZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQordm9pZCBSZW5kZXJSYW5nZUl0ZXJhdG9y
OjpjaGVja0ZvclNwYW5uZXIoKQogewotICAgIFNlbGVjdGlvbkRhdGEgb2xkU2VsZWN0aW9uRGF0
YSB7IHNlbGVjdGlvbi5zdGFydE9mZnNldCgpLCBzZWxlY3Rpb24uZW5kT2Zmc2V0KCksIHsgfSwg
eyB9IH07Ci0gICAgLy8gQmxvY2tzIGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBn
YXBzIGJldHdlZW4gdGhlbSwgZWl0aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2Vl
biBsaW5lcyBhbmQgYmxvY2tzLgotICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCBy
ZWN0IHJpZ2h0LCB3ZSBoYXZlIHRvIGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVj
dHMgaW5kaXZpZHVhbGx5LCBzaW5jZSBvdGhlcndpc2UKLSAgICAvLyB0aGUgdW5pb24gb2YgdGhv
c2UgcmVjdHMgbWlnaHQgcmVtYWluIHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2Nj
dXJyZWQuCi0gICAgYXV0byogc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBSZW5kZXJP
YmplY3QqIHN0b3AgPSBudWxscHRyOwotICAgIGlmIChzZWxlY3Rpb24uZW5kKCkpCi0gICAgICAg
IHN0b3AgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCpzZWxlY3Rpb24uZW5kKCksIHNlbGVjdGlvbi5l
bmRPZmZzZXQoKS52YWx1ZSgpKTsKLSAgICBIaWdobGlnaHRJdGVyYXRvciBzZWxlY3Rpb25JdGVy
YXRvcihzdGFydCk7Ci0gICAgd2hpbGUgKHN0YXJ0ICYmIHN0YXJ0ICE9IHN0b3ApIHsKLSAgICAg
ICAgaWYgKGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbigqc3RhcnQsIHNlbGVjdGlvbikpIHsK
LSAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUg
Z2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgotICAg
ICAgICAgICAgb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMuc2V0KHN0YXJ0LCBtYWtlVW5pcXVl
PFJlbmRlclNlbGVjdGlvbkluZm8+KCpzdGFydCwgdHJ1ZSkpOwotICAgICAgICAgICAgaWYgKHJl
cGFpbnREaWZmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvKiBibG9jayA9IGNv
bnRhaW5pbmdCbG9ja0JlbG93Vmlldygqc3RhcnQpOyBibG9jazsgYmxvY2sgPSBjb250YWluaW5n
QmxvY2tCZWxvd1ZpZXcoKmJsb2NrKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBibG9j
a0luZm8gPSBvbGRTZWxlY3Rpb25EYXRhLmJsb2Nrcy5hZGQoYmxvY2ssIG51bGxwdHIpLml0ZXJh
dG9yLT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBt
YWtlVW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmJsb2NrKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3RhcnQgPSBzZWxlY3Rp
b25JdGVyYXRvci5uZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiBvbGRTZWxlY3Rpb25EYXRhOwor
ICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KG1fY3VycmVu
dCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBwbGFjZWhvbGRlciA9IGRvd25jYXN0PFJl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqbV9jdXJyZW50KTsKKyAgICBtX3Nw
YW5uZXJTdGFjay5hcHBlbmQoJnBsYWNlaG9sZGVyKTsKKyAgICBtX2N1cnJlbnQgPSBwbGFjZWhv
bGRlci5zcGFubmVyKCk7CiB9CiAKLUhpZ2hsaWdodERhdGE6OkhpZ2hsaWdodERhdGEoUmVuZGVy
VmlldyYgdmlldykKLSAgICA6IG1fcmVuZGVyVmlldyh2aWV3KQotI2lmIEVOQUJMRShTRVJWSUNF
X0NPTlRST0xTKQotICAgICwgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIodmlldykKLSNlbmRpZgor
c3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlck9mZnNldChjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyLCB1bnNpZ25lZCBvZmZzZXQpIC8vIDxNTUc+IHVzZWQgaW4gYm90aCwgbWln
aHQgc2hvdWxkIG5vdCBiZSBzdGF0aWMKIHsKKyAgICBhdXRvKiBjaGlsZCA9IHJlbmRlcmVyLmNo
aWxkQXQob2Zmc2V0KTsKKyAgICByZXR1cm4gY2hpbGQgPyBjaGlsZCA6IHJlbmRlcmVyLm5leHRJ
blByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOwogfQogCiB2b2lkIEhpZ2hsaWdodERhdGE6OnNldFJl
bmRlclJhbmdlKGNvbnN0IFJlbmRlclJhbmdlJiByZW5kZXJSYW5nZSkKQEAgLTE5OCw5ICsxMjks
OSBAQCBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIEhpZ2hsaWdodERhdGE6OmhpZ2hsaWdo
dFN0YXRlRm9yUmVuZGVyZXIoY29uc3QgUmVuZAogICAgIGlmICgmcmVuZGVyZXIgPT0gbV9yZW5k
ZXJSYW5nZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3Rh
dGU6OkVuZDsKIAotICAgIGF1dG8qIGhpZ2hsaWdodEVuZCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQo
Km1fcmVuZGVyUmFuZ2UuZW5kKCksIG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkudmFsdWUoKSk7
CisgICAgYXV0byogaGlnaGxpZ2h0RW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgqbV9yZW5kZXJS
YW5nZS5lbmQoKSwgbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKSk7CiAgICAgCi0gICAgSGlnaGxp
Z2h0SXRlcmF0b3IgaGlnaGxpZ2h0SXRlcmF0b3IobV9yZW5kZXJSYW5nZS5zdGFydCgpKTsKKyAg
ICBSZW5kZXJSYW5nZUl0ZXJhdG9yIGhpZ2hsaWdodEl0ZXJhdG9yKG1fcmVuZGVyUmFuZ2Uuc3Rh
cnQoKSk7CiAgICAgZm9yIChhdXRvKiBjdXJyZW50UmVuZGVyZXIgPSBtX3JlbmRlclJhbmdlLnN0
YXJ0KCk7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gaGlnaGxpZ2h0RW5k
OyBjdXJyZW50UmVuZGVyZXIgPSBoaWdobGlnaHRJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAg
aWYgKGN1cnJlbnRSZW5kZXJlciA9PSBtX3JlbmRlclJhbmdlLnN0YXJ0KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTIxMiwyMDcgKzE0Myw0IEBAIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhdGUgSGlnaGxpZ2h0RGF0YTo6aGlnaGxpZ2h0U3RhdGVGb3JSZW5kZXJlcihjb25zdCBSZW5k
CiAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmU7CiB9CiAKLXZv
aWQgSGlnaGxpZ2h0RGF0YTo6c2V0U2VsZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdlJiBzZWxlY3Rp
b24sIFJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUpCi17Ci0gICAgaWYgKChzZWxlY3Rpb24u
c3RhcnQoKSAmJiAhc2VsZWN0aW9uLmVuZCgpKSB8fCAoc2VsZWN0aW9uLmVuZCgpICYmICFzZWxl
Y3Rpb24uc3RhcnQoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBKdXN0IHJldHVybiBpZiB0
aGUgc2VsZWN0aW9uIGhhc24ndCBjaGFuZ2VkLgotICAgIGF1dG8gaXNDYXJldCA9IG1fcmVuZGVy
Vmlldy5mcmFtZSgpLnNlbGVjdGlvbigpLmlzQ2FyZXQoKTsKLSAgICBpZiAoc2VsZWN0aW9uID09
IG1fcmVuZGVyUmFuZ2UgJiYgbV9zZWxlY3Rpb25XYXNDYXJldCA9PSBpc0NhcmV0KQotICAgICAg
ICByZXR1cm47Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgLy8gQ2xlYXIgdGhl
IGN1cnJlbnQgcmVjdHMgYW5kIGNyZWF0ZSBhIG5vdGlmaWVyIGZvciB0aGUgbmV3IHJlY3RzIHdl
IGFyZSBhYm91dCB0byBnYXRoZXIuCi0gICAgLy8gVGhlIE5vdGlmaWVyIHVwZGF0ZXMgdGhlIEVk
aXRvciB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlIGFuZCBpcyBkZXN0cm95ZWQuCi0gICAgYXV0
byByZWN0Tm90aWZpZXIgPSBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5jbGVhckFuZENyZWF0ZU5v
dGlmaWVyKCk7Ci0jZW5kaWYKLSAgICBtX3NlbGVjdGlvbldhc0NhcmV0ID0gaXNDYXJldDsKLSAg
ICBhcHBseVNlbGVjdGlvbihzZWxlY3Rpb24sIGJsb2NrUmVwYWludE1vZGUpOwotfQotCi12b2lk
IEhpZ2hsaWdodERhdGE6OmNsZWFyU2VsZWN0aW9uKCkKLXsKLSAgICBtX3JlbmRlclZpZXcubGF5
ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotICAgIHNldFNlbGVjdGlvbih7IH0s
IEhpZ2hsaWdodERhdGE6OlJlcGFpbnRNb2RlOjpOZXdNaW51c09sZCk7Ci19Ci0KLXZvaWQgSGln
aGxpZ2h0RGF0YTo6cmVwYWludFNlbGVjdGlvbigpIGNvbnN0Ci17Ci0gICAgSGFzaFNldDxSZW5k
ZXJCbG9jayo+IHByb2Nlc3NlZEJsb2NrczsKLSAgICBSZW5kZXJPYmplY3QqIGVuZCA9IG51bGxw
dHI7Ci0gICAgaWYgKG1fcmVuZGVyUmFuZ2UuZW5kKCkpCi0gICAgICAgIGVuZCA9IHJlbmRlcmVy
QWZ0ZXJPZmZzZXQoKm1fcmVuZGVyUmFuZ2UuZW5kKCksIG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0
KCkudmFsdWUoKSk7Ci0gICAgSGlnaGxpZ2h0SXRlcmF0b3IgaGlnaGxpZ2h0SXRlcmF0b3IobV9y
ZW5kZXJSYW5nZS5zdGFydCgpKTsKLSAgICBmb3IgKGF1dG8qIHJlbmRlcmVyID0gaGlnaGxpZ2h0
SXRlcmF0b3IuY3VycmVudCgpOyByZW5kZXJlciAmJiByZW5kZXJlciAhPSBlbmQ7IHJlbmRlcmVy
ID0gaGlnaGxpZ2h0SXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmNh
bkJlU2VsZWN0aW9uTGVhZigpICYmIHJlbmRlcmVyICE9IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSAm
JiByZW5kZXJlciAhPSBtX3JlbmRlclJhbmdlLmVuZCgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmIChyZW5kZXJlci0+c2VsZWN0aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlOjpOb25lKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJl
bmRlclNlbGVjdGlvbkluZm8oKnJlbmRlcmVyLCB0cnVlKS5yZXBhaW50KCk7Ci0gICAgICAgIC8v
IEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2lu
IGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgotICAgICAgICBmb3IgKGF1dG8q
IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpyZW5kZXJlcik7IGJsb2NrOyBibG9j
ayA9IGNvbnRhaW5pbmdCbG9ja0JlbG93VmlldygqYmxvY2spKSB7Ci0gICAgICAgICAgICBpZiAo
IXByb2Nlc3NlZEJsb2Nrcy5hZGQoYmxvY2spLmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKCpibG9jaywgdHJ1ZSkucmVw
YWludCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1JbnRSZWN0IEhpZ2hsaWdodERhdGE6OmNv
bGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNv
bnN0Ci17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNlbGVjdGlvbiwgc3RyZWFtIDw8ICJIaWdobGln
aHREYXRhOjpjb2xsZWN0Qm91bmRzIChjbGlwIHRvIHZpc2libGUgIiA8PCAoY2xpcFRvVmlzaWJs
ZUNvbnRlbnQgPT0gQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6OlllcyA/ICJ5ZXMiIDogIm5vIikpOwot
Ci0gICAgU2VsZWN0aW9uRGF0YTo6UmVuZGVyZXJNYXAgcmVuZGVyZXJzOwotICAgIGF1dG8qIHN0
YXJ0ID0gbV9yZW5kZXJSYW5nZS5zdGFydCgpOwotICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51
bGxwdHI7Ci0gICAgaWYgKG1fcmVuZGVyUmFuZ2UuZW5kKCkpCi0gICAgICAgIHN0b3AgPSByZW5k
ZXJlckFmdGVyT2Zmc2V0KCptX3JlbmRlclJhbmdlLmVuZCgpLCBtX3JlbmRlclJhbmdlLmVuZE9m
ZnNldCgpLnZhbHVlKCkpOwotCi0gICAgSGlnaGxpZ2h0SXRlcmF0b3IgaGlnaGxpZ2h0SXRlcmF0
b3Ioc3RhcnQpOwotICAgIHdoaWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7Ci0gICAgICAg
IGlmICgoc3RhcnQtPmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8IHN0YXJ0ID09IG1fcmVuZGVyUmFu
Z2Uuc3RhcnQoKSB8fCBzdGFydCA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQotICAgICAgICAgICAg
JiYgc3RhcnQtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZTo6Tm9uZSkgewotICAgICAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFp
bnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFz
IHdlbGwuCi0gICAgICAgICAgICByZW5kZXJlcnMuc2V0KHN0YXJ0LCBtYWtlVW5pcXVlPFJlbmRl
clNlbGVjdGlvbkluZm8+KCpzdGFydCwgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPT0gQ2xpcFRvVmlz
aWJsZUNvbnRlbnQ6OlllcykpOwotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNlbGVjdGlv
biwgc3RyZWFtIDw8ICIgYWRkZWQgc3RhcnQgIiA8PCAqc3RhcnQgPDwgIiB3aXRoIHJlY3QgIiA8
PCByZW5kZXJlcnMuZ2V0KHN0YXJ0KS0+cmVjdCgpKTsKLQotICAgICAgICAgICAgYXV0byogYmxv
Y2sgPSBzdGFydC0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICB3aGlsZSAoYmxvY2sg
JiYgIWlzPFJlbmRlclZpZXc+KCpibG9jaykpIHsKLSAgICAgICAgICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIiBhZGRlZCBibG9jayAiIDw8ICpibG9jayk7Ci0g
ICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+JiBibG9j
a0luZm8gPSByZW5kZXJlcnMuYWRkKGJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0g
ICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gbWFrZVVuaXF1ZTxSZW5kZXJTZWxlY3Rpb25J
bmZvPigqYmxvY2ssIGNsaXBUb1Zpc2libGVDb250ZW50ID09IENsaXBUb1Zpc2libGVDb250ZW50
OjpZZXMpOwotICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTZWxlY3Rpb24sIHN0cmVh
bSA8PCAiIGFkZGVkIGNvbnRhaW5pbmcgYmxvY2sgIiA8PCAqYmxvY2sgPDwgIiB3aXRoIHJlY3Qg
IiA8PCBibG9ja0luZm8tPnJlY3QoKSk7Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSBibG9jay0+
Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3Rh
cnQgPSBoaWdobGlnaHRJdGVyYXRvci5uZXh0KCk7Ci0gICAgfQotCi0gICAgLy8gTm93IGNyZWF0
ZSBhIHNpbmdsZSBib3VuZGluZyBib3ggcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSB3aG9sZSBzZWxl
Y3Rpb24uCi0gICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0OwotICAgIGZvciAoYXV0byYgaW5m
byA6IHJlbmRlcmVycy52YWx1ZXMoKSkgewotICAgICAgICAvLyBSZW5kZXJTZWxlY3Rpb25JbmZv
OjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29udGFpbmVyLCBz
byBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4KLSAgICAgICAgTGF5b3V0UmVjdCBjdXJyZW50UmVj
dCA9IGluZm8tPnJlY3QoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChhdXRvKiByZXBhaW50Q29udGFpbmVy
ID0gaW5mby0+cmVwYWludENvbnRhaW5lcigpKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgbG9j
YWxSZWN0ID0gY3VycmVudFJlY3Q7Ci0gICAgICAgICAgICBGbG9hdFF1YWQgYWJzUXVhZCA9IHJl
cGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQobG9jYWxSZWN0KTsKLSAgICAgICAg
ICAgIGN1cnJlbnRSZWN0ID0gYWJzUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgICAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKFNlbGVjdGlvbiwgc3RyZWFtIDw8ICIgcmVjdCAiIDw8IGxv
Y2FsUmVjdCA8PCAiIG1hcHBlZCB0byAiIDw8IGN1cnJlbnRSZWN0IDw8ICIgaW4gY29udGFpbmVy
ICIgPDwgKnJlcGFpbnRDb250YWluZXIpOwotICAgICAgICB9Ci0gICAgICAgIHNlbGVjdGlvblJl
Y3QudW5pdGUoY3VycmVudFJlY3QpOwotICAgIH0KLQotICAgIExPR19XSVRIX1NUUkVBTShTZWxl
Y3Rpb24sIHN0cmVhbSA8PCAiIGZpbmFsIHJlY3QgIiA8PCBzZWxlY3Rpb25SZWN0KTsKLSAgICBy
ZXR1cm4gc25hcHBlZEludFJlY3Qoc2VsZWN0aW9uUmVjdCk7Ci19Ci0KLXZvaWQgSGlnaGxpZ2h0
RGF0YTo6YXBwbHlTZWxlY3Rpb24oY29uc3QgUmVuZGVyUmFuZ2UmIG5ld1NlbGVjdGlvbiwgUmVw
YWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKLXsKLSAgICBhdXRvIG9sZFNlbGVjdGlvbkRhdGEg
PSBjb2xsZWN0U2VsZWN0aW9uRGF0YShtX3JlbmRlclJhbmdlLCBibG9ja1JlcGFpbnRNb2RlID09
IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOwotICAgIC8vIFJlbW92ZSBjdXJyZW50IHNlbGVjdGlv
bi4KLSAgICBmb3IgKGF1dG8qIHJlbmRlcmVyIDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMu
a2V5cygpKQotICAgICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKTsKLSAgICBtX3JlbmRlclJhbmdlID0gbmV3
U2VsZWN0aW9uOwotICAgIGF1dG8qIHNlbGVjdGlvblN0YXJ0ID0gbV9yZW5kZXJSYW5nZS5zdGFy
dCgpOwotICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uIHN0YXR1cyBvZiBhbGwgb2JqZWN0cyBi
ZXR3ZWVuIHNlbGVjdGlvblN0YXJ0IGFuZCBzZWxlY3Rpb25FbmQKLSAgICBpZiAoc2VsZWN0aW9u
U3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQgPT0gbV9yZW5kZXJSYW5nZS5lbmQoKSkKLSAgICAgICAg
c2VsZWN0aW9uU3RhcnQtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpI
aWdobGlnaHRTdGF0ZTo6Qm90aCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25T
dGFydCkKLSAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVl
ZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0KTsKLSAgICAgICAgaWYgKGF1
dG8qIGVuZCA9IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCi0gICAgICAgICAgICBlbmQtPnNldFNlbGVj
dGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kKTsKLSAg
ICB9Ci0KLSAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCA9IG51bGxwdHI7Ci0gICAgYXV0
byogc2VsZWN0aW9uRGF0YUVuZCA9IG1fcmVuZGVyUmFuZ2UuZW5kKCk7Ci0gICAgaWYgKHNlbGVj
dGlvbkRhdGFFbmQpCi0gICAgICAgIHNlbGVjdGlvbkVuZCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQo
KnNlbGVjdGlvbkRhdGFFbmQsIG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkudmFsdWUoKSk7Ci0g
ICAgSGlnaGxpZ2h0SXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOwot
ICAgIGZvciAoYXV0byogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRS
ZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVy
ZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnRSZW5k
ZXJlciA9PSBzZWxlY3Rpb25TdGFydCB8fCBjdXJyZW50UmVuZGVyZXIgPT0gbV9yZW5kZXJSYW5n
ZS5lbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWN1cnJlbnRSZW5k
ZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgY3VycmVudFJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSk7Ci0gICAgfQotCi0gICAgaWYgKGJsb2NrUmVwYWlu
dE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpCi0gICAgICAgIG1fcmVuZGVyVmlldy5sYXll
cigpLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotCi0gICAgLy8gTm93IHRoYXQg
dGhlIHNlbGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVjdHMs
IHdhbGsgdGhlbSBhZ2FpbiBhbmQKLSAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVjdHMg
bGlzdC4KLSAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJlck1hcCBuZXdTZWxlY3RlZFJlbmRlcmVy
czsKLSAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJCbG9ja01hcCBuZXdTZWxlY3RlZEJsb2NrczsK
LSAgICBzZWxlY3Rpb25JdGVyYXRvciA9IEhpZ2hsaWdodEl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0
KTsKLSAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0OyBjdXJy
ZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3VycmVudFJl
bmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmIChpc1ZhbGlk
UmVuZGVyZXJGb3JTZWxlY3Rpb24oKmN1cnJlbnRSZW5kZXJlciwgbV9yZW5kZXJSYW5nZSkpIHsK
LSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiBzZWxlY3Rp
b25JbmZvID0gbWFrZVVuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqY3VycmVudFJlbmRlcmVy
LCB0cnVlKTsKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAgICAgICAgIGZvciAo
YXV0byYgcmVjdCA6IHNlbGVjdGlvbkluZm8tPmNvbGxlY3RlZFNlbGVjdGlvblJlY3RzKCkpCi0g
ICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuYWRkUmVjdChzZWxlY3Rpb25J
bmZvLT5yZXBhaW50Q29udGFpbmVyKCksIHJlY3QpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50
UmVuZGVyZXItPmlzVGV4dE9yTGluZUJyZWFrKCkpCi0gICAgICAgICAgICAgICAgbV9zZWxlY3Rp
b25SZWN0R2F0aGVyZXIuc2V0VGV4dE9ubHkoZmFsc2UpOwotI2VuZGlmCi0gICAgICAgICAgICBu
ZXdTZWxlY3RlZFJlbmRlcmVycy5zZXQoY3VycmVudFJlbmRlcmVyLCBXVEZNb3ZlKHNlbGVjdGlv
bkluZm8pKTsKLSAgICAgICAgICAgIGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9IGN1cnJlbnRSZW5k
ZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICB3aGlsZSAoY29udGFpbmluZ0Js
b2NrICYmICFpczxSZW5kZXJWaWV3PigqY29udGFpbmluZ0Jsb2NrKSkgewotICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8g
PSBuZXdTZWxlY3RlZEJsb2Nrcy5hZGQoY29udGFpbmluZ0Jsb2NrLCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gbWFrZVVuaXF1ZTxSZW5k
ZXJCbG9ja1NlbGVjdGlvbkluZm8+KCpjb250YWluaW5nQmxvY2spOwotICAgICAgICAgICAgICAg
IGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0j
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25S
ZWN0R2F0aGVyZXIuYWRkR2FwUmVjdHMoYmxvY2tJbmZvLT5yZXBhaW50Q29udGFpbmVyKCksIGJs
b2NrSW5mby0+cmVjdHMoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnRNb2RlOjpOb3RoaW5nKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIHNlbGVjdGVkIG9i
amVjdHMgY2hhbmdlZCBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbj8KLSAgICBmb3IgKGF1
dG8mIHNlbGVjdGVkUmVuZGVyZXJJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMpIHsK
LSAgICAgICAgYXV0byogcmVuZGVyZXIgPSBzZWxlY3RlZFJlbmRlcmVySW5mby5rZXk7Ci0gICAg
ICAgIGF1dG8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZFJlbmRlcmVycy5nZXQocmVuZGVyZXIpOwot
ICAgICAgICBhdXRvKiBvbGRJbmZvID0gc2VsZWN0ZWRSZW5kZXJlckluZm8udmFsdWUuZ2V0KCk7
Ci0gICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVj
dCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKQotICAgICAgICAgICAg
fHwgKG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSA9PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rpb25EYXRh
LnN0YXJ0T2Zmc2V0ICE9IG1fcmVuZGVyUmFuZ2Uuc3RhcnRPZmZzZXQoKSkKLSAgICAgICAgICAg
IHx8IChtX3JlbmRlclJhbmdlLmVuZCgpID09IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRhdGEu
ZW5kT2Zmc2V0ICE9IG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkpKSB7Ci0gICAgICAgICAgICBv
bGRJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICBpZiAobmV3SW5mbykgewotICAgICAgICAg
ICAgICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKLSAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZFJl
bmRlcmVycy5yZW1vdmUocmVuZGVyZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gQW55IG5ldyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGlu
IHRoZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCi0g
ICAgZm9yIChhdXRvJiBzZWxlY3RlZFJlbmRlcmVySW5mbyA6IG5ld1NlbGVjdGVkUmVuZGVyZXJz
KQotICAgICAgICBzZWxlY3RlZFJlbmRlcmVySW5mby52YWx1ZS0+cmVwYWludCgpOwotCi0gICAg
Ly8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KLSAgICBmb3IgKGF1dG8mIHNl
bGVjdGVkQmxvY2tJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5ibG9ja3MpIHsKLSAgICAgICAgYXV0
byogYmxvY2sgPSBzZWxlY3RlZEJsb2NrSW5mby5rZXk7Ci0gICAgICAgIGF1dG8qIG5ld0luZm8g
PSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOwotICAgICAgICBhdXRvKiBvbGRJbmZvID0g
c2VsZWN0ZWRCbG9ja0luZm8udmFsdWUuZ2V0KCk7Ci0gICAgICAgIGlmICghbmV3SW5mbyB8fCBv
bGRJbmZvLT5yZWN0cygpICE9IG5ld0luZm8tPnJlY3RzKCkgfHwgb2xkSW5mby0+c3RhdGUoKSAh
PSBuZXdJbmZvLT5zdGF0ZSgpKSB7Ci0gICAgICAgICAgICBvbGRJbmZvLT5yZXBhaW50KCk7Ci0g
ICAgICAgICAgICBpZiAobmV3SW5mbykgewotICAgICAgICAgICAgICAgIG5ld0luZm8tPnJlcGFp
bnQoKTsKLSAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZEJsb2Nrcy5yZW1vdmUoYmxvY2spOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQW55IG5ldyBibG9ja3Mg
dGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBibG9ja3MgZGljdCwgYW5kIHNv
IHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIGZvciAoYXV0byYgc2VsZWN0ZWRCbG9ja0lu
Zm8gOiBuZXdTZWxlY3RlZEJsb2NrcykKLSAgICAgICAgc2VsZWN0ZWRCbG9ja0luZm8udmFsdWUt
PnJlcGFpbnQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9IaWdobGlnaHREYXRhLmgKaW5kZXggZTk3YmNmNGZlNmFhNDYwNGFlZTM5MGZiNzM3
NWMyZWRiODhhZWE1ZC4uZTY4MTE4YjdjOWYwZjhkNjg5NTQyODI2ZWZhMTBmZDM2NDllNjdhOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5oCkBAIC0zMCw3OSArMzAs
NzAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJSZW5kZXJTZWxlY3Rpb25JbmZvLmgi
Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSNpbmNsdWRlICJTZWxlY3Rpb25SZWN0
R2F0aGVyZXIuaCIKLSNlbmRpZgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBIaWdobGlnaHRSYW5nZURhdGE7Ci0gICAgCi1jbGFzcyBI
aWdobGlnaHREYXRhIHsKK2NsYXNzIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVy
OworCitjbGFzcyBSZW5kZXJSYW5nZSB7CiBwdWJsaWM6Ci0gICAgSGlnaGxpZ2h0RGF0YShSZW5k
ZXJWaWV3Jik7Ci0gICAgCi0gICAgY2xhc3MgUmVuZGVyUmFuZ2UgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgUmVuZGVyUmFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgICAgIFJlbmRlclJhbmdlKFJlbmRl
ck9iamVjdCogc3RhcnQsIFJlbmRlck9iamVjdCogZW5kLCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICAgICAgOiBtX3N0YXJ0KG1ha2VXZWFrUHRyKHN0
YXJ0KSkKLSAgICAgICAgICAgICwgbV9lbmQobWFrZVdlYWtQdHIoZW5kKSkKLSAgICAgICAgICAg
ICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKLSAgICAgICAgICAgICwgbV9lbmRPZmZzZXQo
ZW5kT2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgIH0KKyAgICBSZW5kZXJSYW5nZSgpID0gZGVm
YXVsdDsKKyAgICBSZW5kZXJSYW5nZShSZW5kZXJPYmplY3QqIHN0YXJ0LCBSZW5kZXJPYmplY3Qq
IGVuZCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKKyAgICAgICAg
OiBtX3N0YXJ0KG1ha2VXZWFrUHRyKHN0YXJ0KSkKKyAgICAgICAgLCBtX2VuZChtYWtlV2Vha1B0
cihlbmQpKQorICAgICAgICAsIG1fc3RhcnRPZmZzZXQoc3RhcnRPZmZzZXQpCisgICAgICAgICwg
bV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQorICAgIHsKKyAgICB9CiAKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQuZ2V0KCk7IH0KLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZC5nZXQoKTsgfQotICAgICAgICBP
cHRpb25hbDx1bnNpZ25lZD4gc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zm
c2V0OyB9Ci0gICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBlbmRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2VuZE9mZnNldDsgfQorICAgIFJlbmRlck9iamVjdCogc3RhcnQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXJ0LmdldCgpOyB9CisgICAgUmVuZGVyT2JqZWN0KiBlbmQoKSBjb25zdCB7IHJl
dHVybiBtX2VuZC5nZXQoKTsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kT2Zmc2V0OyB9CiAKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJl
bmRlclJhbmdlJiBvdGhlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
c3RhcnQgPT0gb3RoZXIubV9zdGFydCAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZCAmJiBtX3N0YXJ0
T2Zmc2V0ID09IG90aGVyLm1fc3RhcnRPZmZzZXQgJiYgbV9lbmRPZmZzZXQgPT0gb3RoZXIubV9l
bmRPZmZzZXQ7Ci0gICAgICAgIH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVuZGVyUmFu
Z2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhcnQgPT0gb3RoZXIu
bV9zdGFydCAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZCAmJiBtX3N0YXJ0T2Zmc2V0ID09IG90aGVy
Lm1fc3RhcnRPZmZzZXQgJiYgbV9lbmRPZmZzZXQgPT0gb3RoZXIubV9lbmRPZmZzZXQ7CisgICAg
fQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fc3RhcnQ7
Ci0gICAgICAgIFdlYWtQdHI8UmVuZGVyT2JqZWN0PiBtX2VuZDsKLSAgICAgICAgT3B0aW9uYWw8
dW5zaWduZWQ+IG1fc3RhcnRPZmZzZXQ7Ci0gICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX2Vu
ZE9mZnNldDsKLSAgICB9OworcHJpdmF0ZToKKyAgICBXZWFrUHRyPFJlbmRlck9iamVjdD4gbV9z
dGFydDsKKyAgICBXZWFrUHRyPFJlbmRlck9iamVjdD4gbV9lbmQ7CisgICAgdW5zaWduZWQgbV9z
dGFydE9mZnNldCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2VuZE9mZnNldCB7IDAgfTsKK307CiAg
ICAgCitjbGFzcyBSZW5kZXJSYW5nZUl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJSYW5n
ZUl0ZXJhdG9yKFJlbmRlck9iamVjdCogc3RhcnQpOworICAgIFJlbmRlck9iamVjdCogY3VycmVu
dCgpIGNvbnN0OworICAgIFJlbmRlck9iamVjdCogbmV4dCgpOworICAgIAorcHJpdmF0ZToKKyAg
ICB2b2lkIGNoZWNrRm9yU3Bhbm5lcigpOworICAgIAorICAgIFJlbmRlck9iamVjdCogbV9jdXJy
ZW50IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlcio+IG1fc3Bhbm5lclN0YWNrOworfTsKKworY2xhc3MgSGlnaGxpZ2h0RGF0YSB7Citw
dWJsaWM6CiAgICAgdm9pZCBzZXRSZW5kZXJSYW5nZShjb25zdCBSZW5kZXJSYW5nZSYpOwogICAg
IGJvb2wgc2V0UmVuZGVyUmFuZ2UoY29uc3QgSGlnaGxpZ2h0UmFuZ2VEYXRhJik7IC8vIFJldHVy
bnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLgotICAgIAotICAgIGVudW0gY2xhc3MgUmVwYWludE1vZGUg
eyBOZXdYT1JPbGQsIE5ld01pbnVzT2xkLCBOb3RoaW5nIH07Ci0gICAgdm9pZCBzZXRTZWxlY3Rp
b24oY29uc3QgUmVuZGVyUmFuZ2UmLCBSZXBhaW50TW9kZSA9IFJlcGFpbnRNb2RlOjpOZXdYT1JP
bGQpOwogICAgIGNvbnN0IFJlbmRlclJhbmdlJiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
clJhbmdlOyB9CiAKICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJSYW5nZS5zdGFydCgpOyB9CiAgICAgUmVuZGVyT2JqZWN0KiBlbmQoKSBjb25zdCB7IHJl
dHVybiBtX3JlbmRlclJhbmdlLmVuZCgpOyB9CiAKLSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgp
IGNvbnN0IHsgQVNTRVJUKG1fcmVuZGVyUmFuZ2Uuc3RhcnRPZmZzZXQoKSk7IHJldHVybiBtX3Jl
bmRlclJhbmdlLnN0YXJ0T2Zmc2V0KCkudmFsdWVPcigwKTsgfQotICAgIHVuc2lnbmVkIGVuZE9m
ZnNldCgpIGNvbnN0IHsgQVNTRVJUKG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkpOyByZXR1cm4g
bV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKS52YWx1ZU9yKDApOyB9CisgICAgdW5zaWduZWQgc3Rh
cnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclJhbmdlLnN0YXJ0T2Zmc2V0KCk7IH0K
KyAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclJhbmdlLmVu
ZE9mZnNldCgpOyB9CiAKLSAgICB2b2lkIGNsZWFyU2VsZWN0aW9uKCk7Ci0gICAgSW50UmVjdCBi
b3VuZHMoKSBjb25zdCB7IHJldHVybiBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50
OjpObyk7IH0KLSAgICBJbnRSZWN0IGJvdW5kc0NsaXBwZWRUb1Zpc2libGVDb250ZW50KCkgY29u
c3QgeyByZXR1cm4gY29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKTsgfQot
ICAgIHZvaWQgcmVwYWludFNlbGVjdGlvbigpIGNvbnN0OwotICAgIAogICAgIFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0U3RhdGUgaGlnaGxpZ2h0U3RhdGVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJP
YmplY3QmKTsKIAotcHJpdmF0ZToKLSAgICBlbnVtIGNsYXNzIENsaXBUb1Zpc2libGVDb250ZW50
IHsgWWVzLCBObyB9OwotICAgIEludFJlY3QgY29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29u
dGVudCkgY29uc3Q7Ci0gICAgdm9pZCBhcHBseVNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYs
IFJlcGFpbnRNb2RlKTsKLQotICAgIGNvbnN0IFJlbmRlclZpZXcmIG1fcmVuZGVyVmlldzsKLSNp
ZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICBTZWxlY3Rpb25SZWN0R2F0aGVyZXIgbV9z
ZWxlY3Rpb25SZWN0R2F0aGVyZXI7Ci0jZW5kaWYKK3Byb3RlY3RlZDoKICAgICBSZW5kZXJSYW5n
ZSBtX3JlbmRlclJhbmdlOwotICAgIGJvb2wgbV9zZWxlY3Rpb25XYXNDYXJldCB7IGZhbHNlIH07
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAKaW5kZXggMTI2N2YwMWZkNTE5N2E1MjkwZjYyNGEyMzFiZWJlMDc2
ZDY0NGIwNS4uY2JjMDNhN2RiOThjMTE1MzZiMzcxMjczYWZhOGEzNTAzNmQxNjc1NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtMTA1MCw2ICsxMDUw
LDcgQEAgVmVjdG9yPE1hcmtlZFRleHQ+IElubGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0
c0ZvckhpZ2hsaWdodHMoVGV4dFBhaW50UGhhc2UKICAgICBWZWN0b3I8TWFya2VkVGV4dD4gbWFy
a2VkVGV4dHM7CiAgICAgYXV0byYgcGFyZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVyZXIo
KTsKICAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CisgICAg
SGlnaGxpZ2h0RGF0YSBoaWdobGlnaHREYXRhOwogICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDog
cmVuZGVyZXIoKS5kb2N1bWVudCgpLmhpZ2hsaWdodE1hcCgpLm1hcCgpKSB7CiAgICAgICAgIGF1
dG8gcmVuZGVyU3R5bGUgPSBwYXJlbnRSZW5kZXJlci5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsg
UHNldWRvSWQ6OkhpZ2hsaWdodCwgaGlnaGxpZ2h0LmtleSB9LCAmcGFyZW50U3R5bGUpOwogICAg
ICAgICBpZiAoIXJlbmRlclN0eWxlKQpAQCAtMTA1NywyMiArMTA1OCwxMiBAQCBWZWN0b3I8TWFy
a2VkVGV4dD4gSW5saW5lVGV4dEJveDo6Y29sbGVjdE1hcmtlZFRleHRzRm9ySGlnaGxpZ2h0cyhU
ZXh0UGFpbnRQaGFzZQogICAgICAgICBpZiAocmVuZGVyU3R5bGUtPnRleHREZWNvcmF0aW9uc0lu
RWZmZWN0KCkuaXNFbXB0eSgpICYmIHBoYXNlID09IFRleHRQYWludFBoYXNlOjpEZWNvcmF0aW9u
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGZvciAoYXV0byYgcmFuZ2VEYXRhIDog
aGlnaGxpZ2h0LnZhbHVlLT5yYW5nZXNEYXRhKCkpIHsKLSAgICAgICAgICAgIGlmIChyYW5nZURh
dGEtPnN0YXJ0UG9zaXRpb24gJiYgcmFuZ2VEYXRhLT5lbmRQb3NpdGlvbikgewotICAgICAgICAg
ICAgICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSByYW5nZURhdGEtPnN0YXJ0UG9zaXRpb24u
dmFsdWUoKTsKLSAgICAgICAgICAgICAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IHJhbmdlRGF0
YS0+ZW5kUG9zaXRpb24udmFsdWUoKTsKLSAgICAgICAgICAgICAgICBhdXRvKiBzdGFydFJlbmRl
cmVyID0gc3RhcnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gc3RhcnRQb3NpdGlvbi5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpOwotICAgICAgICAgICAgICAgIGF1dG8qIGVuZFJlbmRlcmVyID0gZW5k
UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBlbmRPZmZzZXQgPSBlbmRQb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
OwotICAgICAgICAgICAgICAgIGlmICghc3RhcnRSZW5kZXJlciB8fCAhZW5kUmVuZGVyZXIpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgYXV0byBoaWdo
bGlnaHREYXRhID0gSGlnaGxpZ2h0RGF0YShyZW5kZXJlcigpLnZpZXcoKSk7Ci0gICAgICAgICAg
ICAgICAgaGlnaGxpZ2h0RGF0YS5zZXRSZW5kZXJSYW5nZSh7IHN0YXJ0UmVuZGVyZXIsIGVuZFJl
bmRlcmVyLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IH0pOwotICAgICAgICAgICAgICAgIGF1dG8g
W2hpZ2hsaWdodFN0YXJ0LCBoaWdobGlnaHRFbmRdID0gaGlnaGxpZ2h0U3RhcnRFbmQoaGlnaGxp
Z2h0RGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFN0YXJ0IDwgaGlnaGxpZ2h0
RW5kKQotICAgICAgICAgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmQoeyBoaWdobGlnaHRT
dGFydCwgaGlnaGxpZ2h0RW5kLCBNYXJrZWRUZXh0OjpIaWdobGlnaHQsIG51bGxwdHIsIGhpZ2hs
aWdodC5rZXkgfSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWhpZ2hsaWdodERh
dGEuc2V0UmVuZGVyUmFuZ2UocmFuZ2VEYXRhKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byBbaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdo
dEVuZF0gPSBoaWdobGlnaHRTdGFydEVuZChoaWdobGlnaHREYXRhKTsKKyAgICAgICAgICAgIGlm
IChoaWdobGlnaHRTdGFydCA8IGhpZ2hsaWdodEVuZCkKKyAgICAgICAgICAgICAgICBtYXJrZWRU
ZXh0cy5hcHBlbmQoeyBoaWdobGlnaHRTdGFydCwgaGlnaGxpZ2h0RW5kLCBNYXJrZWRUZXh0OjpI
aWdobGlnaHQsIG51bGxwdHIsIGhpZ2hsaWdodC5rZXkgfSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgcmV0dXJuIG1hcmtlZFRleHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZXBsYWNlZC5jcHAKaW5kZXggNzdhNjhlMDZkNmE4MTU1ZTA3ZDdmMjVmODg1MmQxODQ1MmYyNzlm
MS4uNjc3NTllMjIzN2E2Mjc0ZGE0OWMxMzcyYTU4YTRmMmYyYmY3NTc5MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAg
aW5saW5lIHN0YXRpYyBib29sIGRyYWdnZWRDb250ZW50Q29udGFpbnNSZXBsYWNlZEVsZW1lbnQo
Y29uc3QgVmVjdG9yPFJlbmRlcmVkRG8KIAogQ29sb3IgUmVuZGVyUmVwbGFjZWQ6OmNhbGN1bGF0
ZUhpZ2hsaWdodENvbG9yKCkgY29uc3QKIHsKLSAgICBhdXRvIGhpZ2hsaWdodERhdGEgPSBIaWdo
bGlnaHREYXRhKHZpZXcoKSk7CisgICAgSGlnaGxpZ2h0RGF0YSBoaWdobGlnaHREYXRhOwogICAg
IGZvciAoYXV0byYgaGlnaGxpZ2h0IDogZG9jdW1lbnQoKS5oaWdobGlnaHRNYXAoKS5tYXAoKSkg
ewogICAgICAgICBmb3IgKGF1dG8mIHJhbmdlRGF0YSA6IGhpZ2hsaWdodC52YWx1ZS0+cmFuZ2Vz
RGF0YSgpKSB7CiAgICAgICAgICAgICBpZiAoIWhpZ2hsaWdodERhdGEuc2V0UmVuZGVyUmFuZ2Uo
cmFuZ2VEYXRhKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IGJjYTFi
MWRmMGJiN2ZhMzMyMTMzYTc3MzRkYzNlZWQyYzU5NjY1ZDQuLjQ3ODFlNGYxZDI0ZTAzOTBkZTJi
ZDExODMxOTljOWYyODVjZDlkOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aApAQCAtMjIsMTAgKzIyLDEwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgotI2luY2x1ZGUgIkhpZ2hsaWdodERhdGEuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKICNp
bmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKyNp
bmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KQEAgLTg0LDcg
Kzg0LDcgQEAgcHVibGljOgogICAgIC8vIFJldHVybiB0aGUgcmVuZGVyZXIgd2hvc2UgYmFja2dy
b3VuZCBzdHlsZSBpcyB1c2VkIHRvIHBhaW50IHRoZSByb290IGJhY2tncm91bmQuCiAgICAgUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXJGb3JSb290QmFja2dyb3VuZCgpIGNvbnN0OwogCi0gICAgSGln
aGxpZ2h0RGF0YSYgc2VsZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICBTZWxl
Y3Rpb25SYW5nZURhdGEmIHNlbGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CiAKICAg
ICBib29sIHByaW50aW5nKCkgY29uc3Q7CiAKQEAgLTIyNCw3ICsyMjQsNyBAQCBwcml2YXRlOgog
ICAgIHVpbnQ2NF90IG1fcmVuZGVyZXJDb3VudCB7IDEgfTsKIAogICAgIG11dGFibGUgc3RkOjp1
bmlxdWVfcHRyPFJlZ2lvbj4gbV9hY2N1bXVsYXRlZFJlcGFpbnRSZWdpb247Ci0gICAgSGlnaGxp
Z2h0RGF0YSBtX3NlbGVjdGlvbjsKKyAgICBTZWxlY3Rpb25SYW5nZURhdGEgbV9zZWxlY3Rpb247
CiAKICAgICBXZWFrUHRyPFJlbmRlckxheWVyPiBtX3N0eWxlQ2hhbmdlTGF5ZXJNdXRhdGlvblJv
b3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5n
ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zZjEwYWZmZTk3YmE4NjA1MTE4M2E1NjcyYmMzY2M3YTY2MGRmMGJiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0
YS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMg
SVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAq
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkhpZ2hsaWdodERhdGEuaCIKKyNpbmNsdWRlICJSZW5kZXJTZWxlY3Rpb25JbmZvLmgi
CisKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyNpbmNsdWRlICJTZWxlY3Rpb25SZWN0
R2F0aGVyZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlbGVj
dGlvblJhbmdlRGF0YSA6IHB1YmxpYyBIaWdobGlnaHREYXRhIHsKK3B1YmxpYzoKKyAgICBTZWxl
Y3Rpb25SYW5nZURhdGEoUmVuZGVyVmlldyYpOworICAgIAorICAgIGVudW0gY2xhc3MgUmVwYWlu
dE1vZGUgeyBOZXdYT1JPbGQsIE5ld01pbnVzT2xkLCBOb3RoaW5nIH07CisgICAgdm9pZCBzZXQo
Y29uc3QgUmVuZGVyUmFuZ2UmLCBSZXBhaW50TW9kZSA9IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQp
OworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHJlcGFpbnQoKSBjb25zdDsKKyAgICAKKyAg
ICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlz
aWJsZUNvbnRlbnQ6Ok5vKTsgfQorICAgIEludFJlY3QgYm91bmRzQ2xpcHBlZFRvVmlzaWJsZUNv
bnRlbnQoKSBjb25zdCB7IHJldHVybiBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50
OjpZZXMpOyB9CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IFJlbmRlclZpZXcmIG1fcmVuZGVy
VmlldzsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICBTZWxlY3Rpb25SZWN0R2F0
aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXI7CisjZW5kaWYKKyAgICBib29sIG1fc2VsZWN0
aW9uV2FzQ2FyZXQgeyBmYWxzZSB9OworICAgIGVudW0gY2xhc3MgQ2xpcFRvVmlzaWJsZUNvbnRl
bnQgeyBZZXMsIE5vIH07CisgICAgSW50UmVjdCBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVD
b250ZW50KSBjb25zdDsKKyAgICB2b2lkIGFwcGx5KGNvbnN0IFJlbmRlclJhbmdlJiwgUmVwYWlu
dE1vZGUpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="commit-queue"
          id="427522"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411345</attachid>
            <date>2020-10-14 10:14:20 -0700</date>
            <delta_ts>2020-10-14 10:44:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217711-20201014101419.patch</filename>
            <type>text/plain</type>
            <size>46878</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE0MDAyN2UwYjY3MTg0
M2M1MWI2ZjZlNjljNTc3ZDRiZGVmMTVkZi4uODVjODVhOTQzYTYzMTllY2MzNjkyMGNiMjZmOGYw
ZThhZWY4YmEzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDIwLTEwLTE0ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3Ig
SGlnaGxpZ2h0RGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3NzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSGlnaGxpZ2h0RGF0YSB3YXMgcmVuYW1lZCB3aGVuIGl0IHdhcyB1c2VkIGZvciBtb3Jl
IHRoYXQgc2VsZWN0aW9ucywgYnV0CisgICAgICAgIG1vcmUgdGhhbiBoYWxmIHRoZSBmaWxlIHdh
cyBvbmx5IHN1cHBvc2VkIHRvIGJlIHVzZWQgdG8gZGVhbCB3aXRoIHRoZSBjdXJyZW50CisgICAg
ICAgIHNlbGVjdGlvbiwgc28gSSd2ZSBzcGxpdCBpdCBiYWNrIG91dCBpbnRvIGEgbW9yZSByZWFz
b25hYmxlIHNldCBvZiBmaWxlcy4KKyAgICAgICAgQWxzbyBtYWRlIG9mZnNldHMgbm8gbG9uZ2Vy
IG9wdGlvbmFsLCBhcyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBuZWVkLgorICAgICAgICBF
eHRlbmRlZCB0aGUgSGlnaGxpZ2h0RGF0YSBzZXRSZW5kZXJSYW5nZSBpbnRvIElubGluZVRleHRC
b3gsIGFzIGl0J3MgYSBiZXR0ZXIKKyAgICAgICAgd2F5IHRvIGNhbGN1bGF0ZSB0aGF0IGRvZXMg
bm90IHVzZSBkZXByZWNhdGVkIGZ1bmN0aW9ucy4gCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hh
bmdlLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Nh
cmV0Q29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWlu
dENvbnRlbnRzRm9yU25hcHNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlOjp+U2NvcGVkRnJh
bWVTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JS
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUmFuZ2VJdGVyYXRvcjo6UmVuZGVyUmFuZ2VJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSYW5nZUl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJhbmdlSXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmFuZ2VJdGVyYXRvcjo6Y2hlY2tGb3JTcGFubmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlbmRlcmVyQWZ0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0
YTo6aGlnaGxpZ2h0U3RhdGVGb3JSZW5kZXJlcik6CisgICAgICAgICgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6aXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb2xsZWN0U2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjpIaWdobGlnaHREYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNldFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpyZXBhaW50U2VsZWN0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OmNvbGxlY3RCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6YXBwbHlTZWxl
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9IaWdobGlnaHREYXRhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSYW5nZTo6UmVuZGVyUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmFuZ2U6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmFuZ2U6OnN0YXJ0
T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJhbmdlOjplbmRPZmZzZXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmFuZ2U6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6c3RhcnRPZmZzZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6ZW5kT2Zmc2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlOjpSZW5kZXJSYW5nZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6c3Rh
cnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6UmVu
ZGVyUmFuZ2U6OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGln
aHREYXRhOjpSZW5kZXJSYW5nZTo6c3RhcnRPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2U6OmVuZE9mZnNldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6
b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRE
YXRhOjpib3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0
RGF0YTo6Ym91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckhpZ2hsaWdodHMgY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsYWNlZDo6Y2FsY3VsYXRlSGlnaGxpZ2h0Q29sb3IgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NlbGVjdGlvblJh
bmdlRGF0YS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGln
aHREYXRhLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyQWZ0ZXJPZmZzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpjb2xs
ZWN0U2VsZWN0aW9uRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6
OlNlbGVjdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnJlcGFpbnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpjb2xsZWN0Qm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6YXBwbHkpOgorICAgICAgICAqIHJl
bmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3Rpb25SYW5nZURhdGE6OmJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25SYW5nZURhdGE6OmJvdW5kc0NsaXBwZWRUb1Zpc2libGVDb250ZW50IGNvbnN0KToKKwog
MjAyMC0xMC0xMyAgTWVnYW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFBhaW50IENTUyBoaWdobGlnaHRzIG92ZXIgaW1hZ2VzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpp
bmRleCA1N2Y4MzI0YjAxMjVjYWZmMWFmZTBkM2JiZTU2NjkzZWY2ZWI4OWZkLi4wYWRlN2Q4Yzhk
NGIyZjJkOThkNmQzOTBlOTM4YWIzM2ViNzQ1ODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0
MzksNiArMTQzOSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5o
CiAgICAgcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5oCisgICAgcmVuZGVyaW5nL1NlbGVjdGlv
blJhbmdlRGF0YS5oCiAKICAgICByZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAogICAgIHJlbmRl
cmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDk2NWFkYzEzMGYx
ZGY0MzY1YjA4Mjk5ZDI2NmQ2OGY5ZmNmODFiMWQuLjk0ODA1MTFjNjk3ODE5N2VkNmYyNWIxMWE4
OGU2OTA0YjBhMzI0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMjIxLDYgKzIyMjEsNyBAQCByZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAKIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCiByZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAKIHJlbmRlcmluZy9TY3JvbGxBbGlnbm1lbnQuY3BwCityZW5k
ZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcAogcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmNwcAog
cmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKIHJlbmRlcmluZy9UZXh0UGFpbnRT
dHlsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA0YzA3NTc4MDk2ZjQ2Y2ZhMTdjNDgwZjMzNTM1ZDdlM2M0OGE5OWJkLi4x
ODFkMDhiNmI4YWZjNGQwMWQ2Y2Y5MzQ1MjU5MmI4ZWIwYmJlNzI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTk3LDYgKzEx
OTcsNyBAQAogCQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQx
NTI5MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDU3NzVFNTIwNDcy
RjczMDA4RENFNUQgLyogTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ1Nzc1RTQyMDQ3MkY3MzAwOERD
RTVEIC8qIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDYzQ0Y2ODIyMTJGQTY4MDAxQTg1Nzcg
LyogRGF0YURldGVjdG9yc0NvcmVTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNzk0MUUyMUM1NkMyOTMwMEE0QzU4RSAvKiBEYXRhRGV0
ZWN0b3JzQ29yZVNvZnRMaW5rLm1tICovOyB9OworCQk0NDY1RDdCRDI1MzZEMDVFMDAxNjY2NkQg
LyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NEIzOEJGNDI1MzY5MDFBMDBBNDQ1OEQgLyogU2VsZWN0aW9uUmFuZ2VE
YXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDQ2REM2NDgyNEEyOURBQjAwNjFGMzkwIC8qIFBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElk
ZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ0NkRDNjQ2MjRBMjlEOUIwMDYxRjM5MCAvKiBQbGF5YmFja1RhcmdldENsaWVudENvbnRleHRJ
ZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDQ3MTcxMEUyMDVBRjk0NTAwMEExMTZFIC8qIE1lZGlhUXVlcnlQYXJzZXJDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDcxNzEw
QzIwNUFGOTQ1MDAwQTExNkUgLyogTWVkaWFRdWVyeVBhcnNlckNvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDc5NTgwNDE2NDNCNDlB
MDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Nzk1ODAzMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJzZWRD
b250ZW50VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01MDQ0LDcgKzUwNDUsNiBAQAogCQlFNDdDMzkzMDFGRTZFMEZEMDBCQkJDNkIgLyog
UmVuZGVyVHJlZUJ1aWxkZXJGaXJzdExldHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QzM5MjYxRkU2RTBEQzAwQkJCQzZCIC8qIFJlbmRlclRy
ZWVCdWlsZGVyRmlyc3RMZXR0ZXIuaCAqLzsgfTsKIAkJRTQ3QzM5MzExRkU2RTEwMjAwQkJCQzZC
IC8qIFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QzM5MjUxRkU2RTBEQjAwQkJCQzZCIC8q
IFJlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5oICovOyB9OwogCQlFNDdDMzkzMjFG
RTZFMTA1MDBCQkJDNkIgLyogUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyODFGRTZFMEREMDBCQkJDNkIg
LyogUmVuZGVyVHJlZUJ1aWxkZXJMaXN0LmggKi87IH07Ci0JCUU0N0MzOTMzMUZFNkUxMDgwMEJC
QkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdDMzkyNzFGRTZFMERDMDBCQkJDNkIgLyog
UmVuZGVyVHJlZUJ1aWxkZXJNdWx0aUNvbHVtbi5oICovOyB9OwogCQlFNDdFMjc2NTE2MDM2RUQy
MDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0UyNzY0MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRl
bnNpb25TdHlsZVNoZWV0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUU0ODEzN0I5MURCM0I1MjYwMDVDNTlCRiAvKiBTdHlsZVZhbGlkaXR5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDgxMzdCODFE
QjNCNTI2MDA1QzU5QkYgLyogU3R5bGVWYWxpZGl0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0ODYzQ0ZFMjM4NDJFOUUwMDk3MjE1OCAvKiBS
dWxlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ4NjNDRkQyMzg0MkU5RTAwOTcyMTU4IC8qIFJ1bGVEYXRhLmggKi87IH07CkBAIC03OTI0LDYg
Kzc5MjQsOCBAQAogCQk0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJlc3Bv
bnNlSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNw
b25zZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEEyOEFBQjEyREZCOEFD
MDBBRTkyM0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTWF0aE1MRWxlbWVudEZhY3RvcnkuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvTWF0aE1MRWxlbWVudEZhY3RvcnkuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJNDRBMjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hdGhNTE5hbWVzLmg7IHBhdGggPSBE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL01hdGhNTE5hbWVzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CisJCTQ0QjM4QkY0MjUzNjkwMUEwMEE0NDU4RCAvKiBTZWxlY3Rpb25S
YW5nZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0aW9uUmFu
Z2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0QjM4QkY5MjUzNjlBODgw
MEE0NDU4RCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDRDOTkxODEwRjNEMUUwRDAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9T
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsYmFyVGhl
bWVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0Qzk5MTg1MEYzRDFFQkUw
MDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JvbGxiYXJUaGVtZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGhlbWVJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI5MjYwLDYgKzI5MjYyLDggQEAKIAkJCQlBOENGRjVEQTBBMTU1QTA1MDAwQTQyMzQgLyog
Um9vdElubGluZUJveC5oICovLAogCQkJCTVEOTI1QjY1MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3Jv
bGxBbGlnbm1lbnQuY3BwICovLAogCQkJCTVEOTI1QjY2MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3Jv
bGxBbGlnbm1lbnQuaCAqLywKKwkJCQk0NEIzOEJGOTI1MzY5QTg4MDBBNDQ1OEQgLyogU2VsZWN0
aW9uUmFuZ2VEYXRhLmNwcCAqLywKKwkJCQk0NEIzOEJGNDI1MzY5MDFBMDBBNDQ1OEQgLyogU2Vs
ZWN0aW9uUmFuZ2VEYXRhLmggKi8sCiAJCQkJRTMxQ0Q3NTAyMjlGNzQ5NTAwRkJEQTE5IC8qIFRh
YmxlTGF5b3V0LmNwcCAqLywKIAkJCQlBOENGRjA0QzBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVM
YXlvdXQuaCAqLywKIAkJCQkwRjU0RENFMzE4ODEwNTFEMDAzRUVEQkIgLyogVGV4dEF1dG9TaXpp
bmcuY3BwICovLApAQCAtMzA2NTQsNyArMzA2NTgsNiBAQAogCQkJCTUxNzQxRDBGMEIwNzI1OUEw
MEVENDQyQyAvKiBCYWNrRm9yd2FyZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBOEM4
MUUxMUUzRDM2OTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTFBMUI4N0QyMDg3QzRDMDAwOTc5QTc1IC8qIEJhY2tGb3J3YXJkSXRlbUlkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTQ3MjE3MjUzMjNDMjEwMEYxNTNDOCAvKiBC
YWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxMjRFRTgwQzI2
NDFDRDAwOUUyMzQ5IC8qIEJhclByb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MEJCNjE2MUQw
QTFCRjAwMDIyMTgxMiAvKiBCYXNlNjRVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTgz
MTk4RkJGMjRBMTYwREQwMDQyMEIwNSAvKiBCYXNlQXVkaW9Db250ZXh0LmggaW4gSGVhZGVycyAq
LywKQEAgLTMzNjkwLDcgKzMzNjkzLDYgQEAKIAkJCQkxMTkzNDA5NzFGRUQ3MTU1MDA5MzVGMUUg
LyogUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTEx
Q0IyNzg5MjAzQkE1NzAwMDRBMURDOSAvKiBSZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUU0N0MzOTMyMUZFNkUxMDUwMEJCQkM2QiAvKiBSZW5kZXJUcmVl
QnVpbGRlckxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0N0MzOTMzMUZFNkUxMDgwMEJCQkM2
QiAvKiBSZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
MTkzNDA4QTFGRUIzNTVEMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJSdWJ5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxMTkzNDA3OTFGRThCOTIzMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxk
ZXJUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE2M0Y4MjQyNEU1RDVBRTAwMEFCOTYwIC8q
IFJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
Mzg4Miw2ICszMzg4NCw3IEBACiAJCQkJOTc0RDJEQTUxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3Vy
aXR5UG9saWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDVCQzQyNzE2Rjg4MkVFMDA3MDQ4RDAg
LyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJD
M0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDQ2NUQ3QkQyNTM2RDA1RTAwMTY2NjZEIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkVBODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJl
Y3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNDA1Qzg5MTkwQjAxNDQwMDc1NEY5NCAvKiBTZWxl
Y3Rpb25SZWN0R2F0aGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NEI0QkI0MTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA2ZWM5MWMwNmZhZTc0ZjRkZjQzMjc1
OWM2YmViNmYxYjkxNzZjYjdhLi43NzBkOGJmMDcwMDI3Y2U5Y2Q1Y2FhNjQxMzNlOGM3YmExOWM1
YmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNDUx
LDcgKzQ1MSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRl
KFJldmVhbFNlbGVjdGlvbkFmdGVyVXBkYXRlIHJldmVhbE1vCiAgICAgICAgIG1fc2VsZWN0aW9u
UmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKICAgICBtX3BlbmRpbmdT
ZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1
bWVudC0+cmVuZGVyVmlldygpKQotICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVj
dGlvbigpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogfQogCiB2b2lkIEZy
YW1lU2VsZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVD
aGFuZ2VJbnRlbnQmIGludGVudCkKQEAgLTUwNyw3ICs1MDcsNyBAQCB2b2lkIERyYWdDYXJldENv
bnRyb2xsZXI6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbm9kZS5kb2N1bWVudCgpLnJlbmRlclZpZXco
KSkKLSAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAg
dmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIGNsZWFyKCk7CiB9CkBAIC01NjYsNyAr
NTY2LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihO
b2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBib28KIAogICAgIGlmIChjbGVhclJlbmRlclRy
ZWVTZWxlY3Rpb24pIHsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBub2RlLmRvY3Vt
ZW50KCkucmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24o
KS5jbGVhclNlbGVjdGlvbigpOworICAgICAgICAgICAgcmVuZGVyVmlldy0+c2VsZWN0aW9uKCku
Y2xlYXIoKTsKIAogICAgICAgICAgICAgLy8gVHJpZ2dlciBhIHNlbGVjdGlvbiB1cGRhdGUgc28g
dGhlIHNlbGVjdGlvbiB3aWxsIGJlIHNldCBhZ2Fpbi4KICAgICAgICAgICAgIG1fc2VsZWN0aW9u
UmV2ZWFsSW50ZW50ID0gQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKTsKQEAgLTE1NzAsNyArMTU3
MCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKQogI2Vu
ZGlmCiAKICAgICBpZiAoYXV0byogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKLSAg
ICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+
c2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIHNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0Fw
cGVhcmFuY2UoVmlzaWJsZVNlbGVjdGlvbigpLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygp
LCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVy
R3JhbnVsYXJpdHkpOwogICAgIG1fcHJldmlvdXNDYXJldE5vZGUgPSBudWxscHRyOwpAQCAtMjA1
OCw3ICsyMDU4LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVD
aGFuZ2VkKCkKICAgICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8gd2UgaGF2ZSB0byB1cGRhdGUg
cGxhY2VzIHRob3NlIGNvbG9ycyB3ZXJlIHBhaW50ZWQuCiAgICAgaWYgKFJlbmRlclZpZXcqIHZp
ZXcgPSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHZpZXctPnNlbGVjdGlvbigp
LnJlcGFpbnRTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkucmVwYWludCgp
OwogCiAgICAgLy8gQ2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0aXZlIGZyYW1lLgogICAgIGlmIChh
Y3RpdmVBbmRGb2N1c2VkKQpAQCAtMjE1Myw3ICsyMTUzLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAjZW5kaWYKIAogICAgIGlmICghc2VsZWN0aW9uLmlzUmFu
Z2UoKSkgewotICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOworICAg
ICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0yMTc4LDcgKzIxNzgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJh
bmNlKCkKICAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kUG9zLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgICAgIEFTU0VSVChzdGFydE9mZnNldCA+PSAw
ICYmIGVuZE9mZnNldCA+PSAwKTsKLSAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKHsgc3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0pOworICAgICAg
ICB2aWV3LT5zZWxlY3Rpb24oKS5zZXQoeyBzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVu
ZE9mZnNldCkgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXgg
ZTFhODQwODk4NTdkMzlhMzNlNTBhMDdiMDRhMjYzNzQ1MGVkNmI5YS4uNjA5MzY4YzhkMjcxNjdh
OGQxOTUwZTNiNzI2OTdjMGU5OGQyYjhiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApA
QCAtNDM1MSw3ICs0MzUxLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHNGb3JTbmFw
c2hvdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QKICAgICBpZiAoc2hv
dWxkUGFpbnRTZWxlY3Rpb24gPT0gRXhjbHVkZVNlbGVjdGlvbikgewogICAgICAgICBmb3IgKGF1
dG8qIGZyYW1lID0gbV9mcmFtZS5wdHIoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQobV9mcmFtZS5wdHIoKSkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiByZW5k
ZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHJlbmRl
clZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgcmVu
ZGVyVmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKaW5kZXggNjMwZDQ2ZTJiNTdiNDBlNGNmNGUzODA4
NjVlNmNmMWE0OTE2M2NkOC4uMTk1MzI5Njc3ZDE4MjBlZGRhYzBhZjFlYzdjYjg3NDIzYWY2NWJi
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNlbGVjdGlvblJhbmdlRGF0YS5oIgogI2lu
Y2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dEluZGljYXRvci5oIgogCkBAIC0x
NDMsMTIgKzE0NCwxMiBAQCBzdHJ1Y3QgU2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSB7CiAgICAg
ewogICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigp
KSB7CiAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0aW9uKTsKLSAgICAgICAgICAgIHJlbmRlclZp
ZXctPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24udmFsdWUoKSwgSGlnaGxpZ2h0
RGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOworICAgICAgICAgICAgcmVuZGVyVmlldy0+c2Vs
ZWN0aW9uKCkuc2V0KHNlbGVjdGlvbi52YWx1ZSgpLCBTZWxlY3Rpb25SYW5nZURhdGE6OlJlcGFp
bnRNb2RlOjpOb3RoaW5nKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGNvbnN0IEZyYW1lJiBm
cmFtZTsKLSAgICBPcHRpb25hbDxIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZT4gc2VsZWN0aW9u
OworICAgIE9wdGlvbmFsPFJlbmRlclJhbmdlPiBzZWxlY3Rpb247CiB9OwogCiAjaWYgIVBMQVRG
T1JNKElPU19GQU1JTFkpCkBAIC0xODUsNyArMTg2LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURy
YWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBi
b28KICAgICBpbnQgc3RhcnRPZmZzZXQgPSBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
OwogICAgIGludCBlbmRPZmZzZXQgPSBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAg
ICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7Ci0gICAgdmlldy0+
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHsgc3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihl
bmRPZmZzZXQpIH0sIEhpZ2hsaWdodERhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5nKTsKKyAgICB2
aWV3LT5zZWxlY3Rpb24oKS5zZXQoeyBzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9m
ZnNldCkgfSwgU2VsZWN0aW9uUmFuZ2VEYXRhOjpSZXBhaW50TW9kZTo6Tm90aGluZyk7CiAgICAg
Ly8gV2UgY2FwdHVyZSB1c2luZyBzbmFwc2hvdEZyYW1lUmVjdCgpIGJlY2F1c2Ugd2UgZmFrZSB1
cCB0aGUgc2VsZWN0aW9uIHVzaW5nCiAgICAgLy8gRnJhbWVWaWV3IGJ1dCBzbmFwc2hvdFNlbGVj
dGlvbigpIHVzZXMgdGhlIHNlbGVjdGlvbiBmcm9tIHRoZSBGcmFtZSBpdHNlbGYuCiAgICAgcmV0
dXJuIGNyZWF0ZURyYWdJbWFnZUZyb21TbmFwc2hvdChzbmFwc2hvdEZyYW1lUmVjdChmcmFtZSwg
dmlldy0+c2VsZWN0aW9uKCkuYm91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQoKSwgb3B0aW9u
cyksIG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hs
aWdodERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3Bw
CmluZGV4IDJiZGQ2OTc3Zjk1NzkzYzE2NTlmM2JjMTY3MzE2NjJhM2UzNjc0ZDcuLjY1ZTMyYTQ4
NTBkNjdjY2QwMDRlMmE3NTZiMGYxYjdkNzhkMWJjYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKQEAgLTQ2LDExNSArNDYsNDYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1uYW1lc3BhY2UgeyAvLyBTZWUgYnVnICMxNzc4MDguCiAKLXN0cnVjdCBT
ZWxlY3Rpb25EYXRhIHsKLSAgICB1c2luZyBSZW5kZXJlck1hcCA9IEhhc2hNYXA8UmVuZGVyT2Jq
ZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+PjsKLSAgICB1c2luZyBS
ZW5kZXJCbG9ja01hcCA9IEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPj47CiAKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4g
c3RhcnRPZmZzZXQ7Ci0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZE9mZnNldDsKLSAgICBSZW5k
ZXJlck1hcCByZW5kZXJlcnM7Ci0gICAgUmVuZGVyQmxvY2tNYXAgYmxvY2tzOwotfTsKLQotY2xh
c3MgSGlnaGxpZ2h0SXRlcmF0b3IgewotcHVibGljOgotICAgIEhpZ2hsaWdodEl0ZXJhdG9yKFJl
bmRlck9iamVjdCogc3RhcnQpCi0gICAgICAgIDogbV9jdXJyZW50KHN0YXJ0KQotICAgIHsKLSAg
ICAgICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgfQotICAgIAotICAgIFJlbmRlck9iamVjdCog
Y3VycmVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50OwotICAgIH0K
LSAgICAKLSAgICBSZW5kZXJPYmplY3QqIG5leHQoKQotICAgIHsKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBjdXJyZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBt
X3NwYW5uZXJTdGFjay5sYXN0KCktPnNwYW5uZXIoKTsKLSAgICAgICAgbV9jdXJyZW50ID0gbV9j
dXJyZW50LT5uZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bhbik7Ci0gICAgICAgIGNoZWNrRm9yU3Bh
bm5lcigpOwotICAgICAgICBpZiAoIW1fY3VycmVudCAmJiBjdXJyZW50U3BhbikgewotICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lclN0YWNrLmxhc3QoKTsK
LSAgICAgICAgICAgIG1fc3Bhbm5lclN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIG1f
Y3VycmVudCA9IHBsYWNlaG9sZGVyLT5uZXh0SW5QcmVPcmRlcigpOwotICAgICAgICAgICAgY2hl
Y2tGb3JTcGFubmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fY3VycmVudDsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0ZvclNwYW5uZXIoKQotICAgIHsKLSAgICAg
ICAgaWYgKCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obV9jdXJyZW50
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIgPSBkb3du
Y2FzdDxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKm1fY3VycmVudCk7Ci0g
ICAgICAgIG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOwotICAgICAgICBtX2N1
cnJlbnQgPSBwbGFjZWhvbGRlci5zcGFubmVyKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyT2JqZWN0
KiBtX2N1cnJlbnQgeyBudWxscHRyIH07Ci0gICAgVmVjdG9yPFJlbmRlck11bHRpQ29sdW1uU3Bh
bm5lclBsYWNlaG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Ci19OwotCi19IC8vIGFub255bW91cyBu
YW1lc3BhY2UKLQotc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlck9mZnNldChjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCB1bnNpZ25lZCBvZmZzZXQpCitSZW5kZXJSYW5nZUl0
ZXJhdG9yOjpSZW5kZXJSYW5nZUl0ZXJhdG9yKFJlbmRlck9iamVjdCogc3RhcnQpCisgICAgOiBt
X2N1cnJlbnQoc3RhcnQpCiB7Ci0gICAgYXV0byogY2hpbGQgPSByZW5kZXJlci5jaGlsZEF0KG9m
ZnNldCk7Ci0gICAgcmV0dXJuIGNoaWxkID8gY2hpbGQgOiByZW5kZXJlci5uZXh0SW5QcmVPcmRl
ckFmdGVyQ2hpbGRyZW4oKTsKKyAgICBjaGVja0ZvclNwYW5uZXIoKTsKIH0KIAotc3RhdGljIGJv
b2wgaXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
ZXIsIGNvbnN0IEhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlJiBzZWxlY3Rpb24pCitSZW5kZXJP
YmplY3QqIFJlbmRlclJhbmdlSXRlcmF0b3I6OmN1cnJlbnQoKSBjb25zdAogewotICAgIHJldHVy
biAocmVuZGVyZXIuY2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgJnJlbmRlcmVyID09IHNlbGVjdGlv
bi5zdGFydCgpIHx8ICZyZW5kZXJlciA9PSBzZWxlY3Rpb24uZW5kKCkpCi0gICAgICAgICYmIHJl
bmRlcmVyLnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
Tm9uZQotICAgICAgICAmJiByZW5kZXJlci5jb250YWluaW5nQmxvY2soKTsKKyAgICByZXR1cm4g
bV9jdXJyZW50OwogfQogCi1zdGF0aWMgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9ja0JlbG93
Vmlldyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJS
YW5nZUl0ZXJhdG9yOjpuZXh0KCkKIHsKLSAgICBhdXRvKiBjb250YWluaW5nQmxvY2sgPSByZW5k
ZXJlci5jb250YWluaW5nQmxvY2soKTsKLSAgICByZXR1cm4gaXM8UmVuZGVyVmlldz4oY29udGFp
bmluZ0Jsb2NrKSA/IG51bGxwdHIgOiBjb250YWluaW5nQmxvY2s7CisgICAgUmVuZGVyT2JqZWN0
KiBjdXJyZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBtX3Nw
YW5uZXJTdGFjay5sYXN0KCktPnNwYW5uZXIoKTsKKyAgICBtX2N1cnJlbnQgPSBtX2N1cnJlbnQt
Pm5leHRJblByZU9yZGVyKGN1cnJlbnRTcGFuKTsKKyAgICBjaGVja0ZvclNwYW5uZXIoKTsKKyAg
ICBpZiAoIW1fY3VycmVudCAmJiBjdXJyZW50U3BhbikgeworICAgICAgICBSZW5kZXJPYmplY3Qq
IHBsYWNlaG9sZGVyID0gbV9zcGFubmVyU3RhY2subGFzdCgpOworICAgICAgICBtX3NwYW5uZXJT
dGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLT5uZXh0
SW5QcmVPcmRlcigpOworICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fY3VycmVudDsKIH0KIAotc3RhdGljIFNlbGVjdGlvbkRhdGEgY29sbGVjdFNlbGVjdGlv
bkRhdGEoY29uc3QgSGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2UmIHNlbGVjdGlvbiwgYm9vbCBy
ZXBhaW50RGlmZmVyZW5jZSkKK3ZvaWQgUmVuZGVyUmFuZ2VJdGVyYXRvcjo6Y2hlY2tGb3JTcGFu
bmVyKCkKIHsKLSAgICBTZWxlY3Rpb25EYXRhIG9sZFNlbGVjdGlvbkRhdGEgeyBzZWxlY3Rpb24u
c3RhcnRPZmZzZXQoKSwgc2VsZWN0aW9uLmVuZE9mZnNldCgpLCB7IH0sIHsgfSB9OwotICAgIC8v
IEJsb2NrcyBjb250YWluIHNlbGVjdGVkIG9iamVjdHMgYW5kIGZpbGwgZ2FwcyBiZXR3ZWVuIHRo
ZW0sIGVpdGhlciBvbiB0aGUgbGVmdCwgcmlnaHQsIG9yIGluIGJldHdlZW4gbGluZXMgYW5kIGJs
b2Nrcy4KLSAgICAvLyBJbiBvcmRlciB0byBnZXQgdGhlIHJlcGFpbnQgcmVjdCByaWdodCwgd2Ug
aGF2ZSB0byBleGFtaW5lIGxlZnQsIG1pZGRsZSwgYW5kIHJpZ2h0IHJlY3RzIGluZGl2aWR1YWxs
eSwgc2luY2Ugb3RoZXJ3aXNlCi0gICAgLy8gdGhlIHVuaW9uIG9mIHRob3NlIHJlY3RzIG1pZ2h0
IHJlbWFpbiB0aGUgc2FtZSBldmVuIHdoZW4gY2hhbmdlcyBoYXZlIG9jY3VycmVkLgotICAgIGF1
dG8qIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdG9wID0g
bnVsbHB0cjsKLSAgICBpZiAoc2VsZWN0aW9uLmVuZCgpKQotICAgICAgICBzdG9wID0gcmVuZGVy
ZXJBZnRlck9mZnNldCgqc2VsZWN0aW9uLmVuZCgpLCBzZWxlY3Rpb24uZW5kT2Zmc2V0KCkudmFs
dWUoKSk7Ci0gICAgSGlnaGxpZ2h0SXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc3RhcnQpOwot
ICAgIHdoaWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7Ci0gICAgICAgIGlmIChpc1ZhbGlk
UmVuZGVyZXJGb3JTZWxlY3Rpb24oKnN0YXJ0LCBzZWxlY3Rpb24pKSB7Ci0gICAgICAgICAgICAv
LyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdp
biBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KLSAgICAgICAgICAgIG9sZFNl
bGVjdGlvbkRhdGEucmVuZGVyZXJzLnNldChzdGFydCwgbWFrZVVuaXF1ZTxSZW5kZXJTZWxlY3Rp
b25JbmZvPigqc3RhcnQsIHRydWUpKTsKLSAgICAgICAgICAgIGlmIChyZXBhaW50RGlmZmVyZW5j
ZSkgewotICAgICAgICAgICAgICAgIGZvciAoYXV0byogYmxvY2sgPSBjb250YWluaW5nQmxvY2tC
ZWxvd1ZpZXcoKnN0YXJ0KTsgYmxvY2s7IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3
KCpibG9jaykpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byYgYmxvY2tJbmZvID0gb2xkU2Vs
ZWN0aW9uRGF0YS5ibG9ja3MuYWRkKGJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCi0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gbWFrZVVuaXF1ZTxSZW5k
ZXJCbG9ja1NlbGVjdGlvbkluZm8+KCpibG9jayk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN0YXJ0ID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4
dCgpOwotICAgIH0KLSAgICByZXR1cm4gb2xkU2VsZWN0aW9uRGF0YTsKKyAgICBpZiAoIWlzPFJl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPihtX2N1cnJlbnQpKQorICAgICAgICBy
ZXR1cm47CisgICAgYXV0byYgcGxhY2Vob2xkZXIgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVt
blNwYW5uZXJQbGFjZWhvbGRlcj4oKm1fY3VycmVudCk7CisgICAgbV9zcGFubmVyU3RhY2suYXBw
ZW5kKCZwbGFjZWhvbGRlcik7CisgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXIuc3Bhbm5lcigp
OwogfQogCi1IaWdobGlnaHREYXRhOjpIaWdobGlnaHREYXRhKFJlbmRlclZpZXcmIHZpZXcpCi0g
ICAgOiBtX3JlbmRlclZpZXcodmlldykKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAg
ICAsIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyKHZpZXcpCi0jZW5kaWYKK3N0YXRpYyBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyQWZ0ZXJPZmZzZXQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwg
dW5zaWduZWQgb2Zmc2V0KSAvLyA8TU1HPiB1c2VkIGluIGJvdGgsIG1pZ2h0IHNob3VsZCBub3Qg
YmUgc3RhdGljCiB7CisgICAgYXV0byogY2hpbGQgPSByZW5kZXJlci5jaGlsZEF0KG9mZnNldCk7
CisgICAgcmV0dXJuIGNoaWxkID8gY2hpbGQgOiByZW5kZXJlci5uZXh0SW5QcmVPcmRlckFmdGVy
Q2hpbGRyZW4oKTsKIH0KIAogdm9pZCBIaWdobGlnaHREYXRhOjpzZXRSZW5kZXJSYW5nZShjb25z
dCBSZW5kZXJSYW5nZSYgcmVuZGVyUmFuZ2UpCkBAIC0xOTgsOSArMTI5LDkgQEAgUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZSBIaWdobGlnaHREYXRhOjpoaWdobGlnaHRTdGF0ZUZvclJlbmRl
cmVyKGNvbnN0IFJlbmQKICAgICBpZiAoJnJlbmRlcmVyID09IG1fcmVuZGVyUmFuZ2UuZW5kKCkp
CiAgICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQ7CiAKLSAg
ICBhdXRvKiBoaWdobGlnaHRFbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCptX3JlbmRlclJhbmdl
LmVuZCgpLCBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpLnZhbHVlKCkpOworICAgIGF1dG8qIGhp
Z2hsaWdodEVuZCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKm1fcmVuZGVyUmFuZ2UuZW5kKCksIG1f
cmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkpOwogICAgIAotICAgIEhpZ2hsaWdodEl0ZXJhdG9yIGhp
Z2hsaWdodEl0ZXJhdG9yKG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSk7CisgICAgUmVuZGVyUmFuZ2VJ
dGVyYXRvciBoaWdobGlnaHRJdGVyYXRvcihtX3JlbmRlclJhbmdlLnN0YXJ0KCkpOwogICAgIGZv
ciAoYXV0byogY3VycmVudFJlbmRlcmVyID0gbV9yZW5kZXJSYW5nZS5zdGFydCgpOyBjdXJyZW50
UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IGhpZ2hsaWdodEVuZDsgY3VycmVudFJlbmRl
cmVyID0gaGlnaGxpZ2h0SXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIGlmIChjdXJyZW50UmVu
ZGVyZXIgPT0gbV9yZW5kZXJSYW5nZS5zdGFydCgpKQogICAgICAgICAgICAgY29udGludWU7CkBA
IC0yMTIsMjA3ICsxNDMsNCBAQCBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIEhpZ2hsaWdo
dERhdGE6OmhpZ2hsaWdodFN0YXRlRm9yUmVuZGVyZXIoY29uc3QgUmVuZAogICAgIHJldHVybiBS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwogfQogCi12b2lkIEhpZ2hsaWdodERh
dGE6OnNldFNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBSZXBhaW50TW9k
ZSBibG9ja1JlcGFpbnRNb2RlKQotewotICAgIGlmICgoc2VsZWN0aW9uLnN0YXJ0KCkgJiYgIXNl
bGVjdGlvbi5lbmQoKSkgfHwgKHNlbGVjdGlvbi5lbmQoKSAmJiAhc2VsZWN0aW9uLnN0YXJ0KCkp
KQotICAgICAgICByZXR1cm47Ci0gICAgLy8gSnVzdCByZXR1cm4gaWYgdGhlIHNlbGVjdGlvbiBo
YXNuJ3QgY2hhbmdlZC4KLSAgICBhdXRvIGlzQ2FyZXQgPSBtX3JlbmRlclZpZXcuZnJhbWUoKS5z
ZWxlY3Rpb24oKS5pc0NhcmV0KCk7Ci0gICAgaWYgKHNlbGVjdGlvbiA9PSBtX3JlbmRlclJhbmdl
ICYmIG1fc2VsZWN0aW9uV2FzQ2FyZXQgPT0gaXNDYXJldCkKLSAgICAgICAgcmV0dXJuOwotI2lm
IEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IHJlY3Rz
IGFuZCBjcmVhdGUgYSBub3RpZmllciBmb3IgdGhlIG5ldyByZWN0cyB3ZSBhcmUgYWJvdXQgdG8g
Z2F0aGVyLgotICAgIC8vIFRoZSBOb3RpZmllciB1cGRhdGVzIHRoZSBFZGl0b3Igd2hlbiBpdCBn
b2VzIG91dCBvZiBzY29wZSBhbmQgaXMgZGVzdHJveWVkLgotICAgIGF1dG8gcmVjdE5vdGlmaWVy
ID0gbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuY2xlYXJBbmRDcmVhdGVOb3RpZmllcigpOwotI2Vu
ZGlmCi0gICAgbV9zZWxlY3Rpb25XYXNDYXJldCA9IGlzQ2FyZXQ7Ci0gICAgYXBwbHlTZWxlY3Rp
b24oc2VsZWN0aW9uLCBibG9ja1JlcGFpbnRNb2RlKTsKLX0KLQotdm9pZCBIaWdobGlnaHREYXRh
OjpjbGVhclNlbGVjdGlvbigpCi17Ci0gICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPnJlcGFpbnRC
bG9ja1NlbGVjdGlvbkdhcHMoKTsKLSAgICBzZXRTZWxlY3Rpb24oeyB9LCBIaWdobGlnaHREYXRh
OjpSZXBhaW50TW9kZTo6TmV3TWludXNPbGQpOwotfQotCi12b2lkIEhpZ2hsaWdodERhdGE6OnJl
cGFpbnRTZWxlY3Rpb24oKSBjb25zdAotewotICAgIEhhc2hTZXQ8UmVuZGVyQmxvY2sqPiBwcm9j
ZXNzZWRCbG9ja3M7Ci0gICAgUmVuZGVyT2JqZWN0KiBlbmQgPSBudWxscHRyOwotICAgIGlmICht
X3JlbmRlclJhbmdlLmVuZCgpKQotICAgICAgICBlbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCpt
X3JlbmRlclJhbmdlLmVuZCgpLCBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpLnZhbHVlKCkpOwot
ICAgIEhpZ2hsaWdodEl0ZXJhdG9yIGhpZ2hsaWdodEl0ZXJhdG9yKG1fcmVuZGVyUmFuZ2Uuc3Rh
cnQoKSk7Ci0gICAgZm9yIChhdXRvKiByZW5kZXJlciA9IGhpZ2hsaWdodEl0ZXJhdG9yLmN1cnJl
bnQoKTsgcmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0gZW5kOyByZW5kZXJlciA9IGhpZ2hsaWdodEl0
ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoIXJlbmRlcmVyLT5jYW5CZVNlbGVjdGlvbkxl
YWYoKSAmJiByZW5kZXJlciAhPSBtX3JlbmRlclJhbmdlLnN0YXJ0KCkgJiYgcmVuZGVyZXIgIT0g
bV9yZW5kZXJSYW5nZS5lbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAo
cmVuZGVyZXItPnNlbGVjdGlvblN0YXRlKCkgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZTo6Tm9uZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZW5kZXJTZWxlY3Rpb25J
bmZvKCpyZW5kZXJlciwgdHJ1ZSkucmVwYWludCgpOwotICAgICAgICAvLyBCbG9ja3MgYXJlIHJl
c3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdpbiBnYXBzLiBUaGV5IG11
c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KLSAgICAgICAgZm9yIChhdXRvKiBibG9jayA9IGNvbnRh
aW5pbmdCbG9ja0JlbG93VmlldygqcmVuZGVyZXIpOyBibG9jazsgYmxvY2sgPSBjb250YWluaW5n
QmxvY2tCZWxvd1ZpZXcoKmJsb2NrKSkgewotICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRCbG9j
a3MuYWRkKGJsb2NrKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqYmxvY2ssIHRydWUpLnJlcGFpbnQoKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotSW50UmVjdCBIaWdobGlnaHREYXRhOjpjb2xsZWN0Qm91bmRzKENs
aXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAotewotICAgIExP
R19XSVRIX1NUUkVBTShTZWxlY3Rpb24sIHN0cmVhbSA8PCAiSGlnaGxpZ2h0RGF0YTo6Y29sbGVj
dEJvdW5kcyAoY2xpcCB0byB2aXNpYmxlICIgPDwgKGNsaXBUb1Zpc2libGVDb250ZW50ID09IENs
aXBUb1Zpc2libGVDb250ZW50OjpZZXMgPyAieWVzIiA6ICJubyIpKTsKLQotICAgIFNlbGVjdGlv
bkRhdGE6OlJlbmRlcmVyTWFwIHJlbmRlcmVyczsKLSAgICBhdXRvKiBzdGFydCA9IG1fcmVuZGVy
UmFuZ2Uuc3RhcnQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOwotICAgIGlm
IChtX3JlbmRlclJhbmdlLmVuZCgpKQotICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRlck9mZnNl
dCgqbV9yZW5kZXJSYW5nZS5lbmQoKSwgbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgp
KTsKLQotICAgIEhpZ2hsaWdodEl0ZXJhdG9yIGhpZ2hsaWdodEl0ZXJhdG9yKHN0YXJ0KTsKLSAg
ICB3aGlsZSAoc3RhcnQgJiYgc3RhcnQgIT0gc3RvcCkgewotICAgICAgICBpZiAoKHN0YXJ0LT5j
YW5CZVNlbGVjdGlvbkxlYWYoKSB8fCBzdGFydCA9PSBtX3JlbmRlclJhbmdlLnN0YXJ0KCkgfHwg
c3RhcnQgPT0gbV9yZW5kZXJSYW5nZS5lbmQoKSkKLSAgICAgICAgICAgICYmIHN0YXJ0LT5zZWxl
Y3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpIHsKLSAg
ICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2Fw
cyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgotICAgICAg
ICAgICAgcmVuZGVyZXJzLnNldChzdGFydCwgbWFrZVVuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZv
Pigqc3RhcnQsIGNsaXBUb1Zpc2libGVDb250ZW50ID09IENsaXBUb1Zpc2libGVDb250ZW50OjpZ
ZXMpKTsKLSAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTZWxlY3Rpb24sIHN0cmVhbSA8PCAi
IGFkZGVkIHN0YXJ0ICIgPDwgKnN0YXJ0IDw8ICIgd2l0aCByZWN0ICIgPDwgcmVuZGVyZXJzLmdl
dChzdGFydCktPnJlY3QoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8qIGJsb2NrID0gc3RhcnQtPmNv
bnRhaW5pbmdCbG9jaygpOwotICAgICAgICAgICAgd2hpbGUgKGJsb2NrICYmICFpczxSZW5kZXJW
aWV3PigqYmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGlu
Zywgc3RyZWFtIDw8ICIgYWRkZWQgYmxvY2sgIiA8PCAqYmxvY2spOwotICAgICAgICAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gcmVuZGVy
ZXJzLmFkZChibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAgICAgICAg
IGlmIChibG9ja0luZm8pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGJsb2NrSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmJsb2NrLCBj
bGlwVG9WaXNpYmxlQ29udGVudCA9PSBDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKTsKLSAgICAg
ICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0gPDwgIiBhZGRlZCBj
b250YWluaW5nIGJsb2NrICIgPDwgKmJsb2NrIDw8ICIgd2l0aCByZWN0ICIgPDwgYmxvY2tJbmZv
LT5yZWN0KCkpOwotICAgICAgICAgICAgICAgIGJsb2NrID0gYmxvY2stPmNvbnRhaW5pbmdCbG9j
aygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN0YXJ0ID0gaGlnaGxpZ2h0
SXRlcmF0b3IubmV4dCgpOwotICAgIH0KLQotICAgIC8vIE5vdyBjcmVhdGUgYSBzaW5nbGUgYm91
bmRpbmcgYm94IHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgd2hvbGUgc2VsZWN0aW9uLgotICAgIExh
eW91dFJlY3Qgc2VsZWN0aW9uUmVjdDsKLSAgICBmb3IgKGF1dG8mIGluZm8gOiByZW5kZXJlcnMu
dmFsdWVzKCkpIHsKLSAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVjdCgpIGlzIGlu
IHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFwIHRvIHBhZ2Ug
Y29vcmRpbmF0ZXMuCi0gICAgICAgIExheW91dFJlY3QgY3VycmVudFJlY3QgPSBpbmZvLT5yZWN0
KCk7Ci0gICAgICAgIGlmIChjdXJyZW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBpZiAoYXV0byogcmVwYWludENvbnRhaW5lciA9IGluZm8tPnJlcGFp
bnRDb250YWluZXIoKSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IGxvY2FsUmVjdCA9IGN1cnJl
bnRSZWN0OwotICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1YWQgPSByZXBhaW50Q29udGFpbmVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCk7Ci0gICAgICAgICAgICBjdXJyZW50UmVj
dCA9IGFic1F1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICAgICAgICAgIExPR19XSVRI
X1NUUkVBTShTZWxlY3Rpb24sIHN0cmVhbSA8PCAiIHJlY3QgIiA8PCBsb2NhbFJlY3QgPDwgIiBt
YXBwZWQgdG8gIiA8PCBjdXJyZW50UmVjdCA8PCAiIGluIGNvbnRhaW5lciAiIDw8ICpyZXBhaW50
Q29udGFpbmVyKTsKLSAgICAgICAgfQotICAgICAgICBzZWxlY3Rpb25SZWN0LnVuaXRlKGN1cnJl
bnRSZWN0KTsKLSAgICB9Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0g
PDwgIiBmaW5hbCByZWN0ICIgPDwgc2VsZWN0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIHNuYXBwZWRJ
bnRSZWN0KHNlbGVjdGlvblJlY3QpOwotfQotCi12b2lkIEhpZ2hsaWdodERhdGE6OmFwcGx5U2Vs
ZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdlJiBuZXdTZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2Nr
UmVwYWludE1vZGUpCi17Ci0gICAgYXV0byBvbGRTZWxlY3Rpb25EYXRhID0gY29sbGVjdFNlbGVj
dGlvbkRhdGEobV9yZW5kZXJSYW5nZSwgYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50TW9kZTo6
TmV3WE9ST2xkKTsKLSAgICAvLyBSZW1vdmUgY3VycmVudCBzZWxlY3Rpb24uCi0gICAgZm9yIChh
dXRvKiByZW5kZXJlciA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzLmtleXMoKSkKLSAgICAg
ICAgcmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZTo6Tm9uZSk7Ci0gICAgbV9yZW5kZXJSYW5nZSA9IG5ld1NlbGVjdGlvbjsKLSAg
ICBhdXRvKiBzZWxlY3Rpb25TdGFydCA9IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKTsKLSAgICAvLyBV
cGRhdGUgdGhlIHNlbGVjdGlvbiBzdGF0dXMgb2YgYWxsIG9iamVjdHMgYmV0d2VlbiBzZWxlY3Rp
b25TdGFydCBhbmQgc2VsZWN0aW9uRW5kCi0gICAgaWYgKHNlbGVjdGlvblN0YXJ0ICYmIHNlbGVj
dGlvblN0YXJ0ID09IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCi0gICAgICAgIHNlbGVjdGlvblN0YXJ0
LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6
OkJvdGgpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnQpCi0gICAgICAg
ICAgICBzZWxlY3Rpb25TdGFydC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpTdGFydCk7Ci0gICAgICAgIGlmIChhdXRvKiBlbmQgPSBtX3Jl
bmRlclJhbmdlLmVuZCgpKQotICAgICAgICAgICAgZW5kLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVl
ZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVuZCk7Ci0gICAgfQotCi0gICAgUmVu
ZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQgPSBudWxscHRyOwotICAgIGF1dG8qIHNlbGVjdGlvbkRh
dGFFbmQgPSBtX3JlbmRlclJhbmdlLmVuZCgpOwotICAgIGlmIChzZWxlY3Rpb25EYXRhRW5kKQot
ICAgICAgICBzZWxlY3Rpb25FbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCpzZWxlY3Rpb25EYXRh
RW5kLCBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpLnZhbHVlKCkpOwotICAgIEhpZ2hsaWdodEl0
ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBmb3IgKGF1dG8q
IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0OyBjdXJyZW50UmVuZGVyZXIgJiYgY3Vy
cmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9u
SXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXIgPT0gc2VsZWN0
aW9uU3RhcnQgfHwgY3VycmVudFJlbmRlcmVyID09IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmNhbkJlU2Vs
ZWN0aW9uTGVhZigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGN1cnJlbnRSZW5k
ZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXRlOjpJbnNpZGUpOwotICAgIH0KLQotICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFp
bnRNb2RlOjpOb3RoaW5nKQotICAgICAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y2xlYXJCbG9j
a1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKLQotICAgIC8vIE5vdyB0aGF0IHRoZSBzZWxlY3Rpb24g
c3RhdGUgaGFzIGJlZW4gdXBkYXRlZCBmb3IgdGhlIG5ldyBvYmplY3RzLCB3YWxrIHRoZW0gYWdh
aW4gYW5kCi0gICAgLy8gcHV0IHRoZW0gaW4gdGhlIG5ldyBvYmplY3RzIGxpc3QuCi0gICAgU2Vs
ZWN0aW9uRGF0YTo6UmVuZGVyZXJNYXAgbmV3U2VsZWN0ZWRSZW5kZXJlcnM7Ci0gICAgU2VsZWN0
aW9uRGF0YTo6UmVuZGVyQmxvY2tNYXAgbmV3U2VsZWN0ZWRCbG9ja3M7Ci0gICAgc2VsZWN0aW9u
SXRlcmF0b3IgPSBIaWdobGlnaHRJdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7Ci0gICAgZm9yIChh
dXRvKiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYm
IGN1cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVj
dGlvbkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoaXNWYWxpZFJlbmRlcmVyRm9yU2Vs
ZWN0aW9uKCpjdXJyZW50UmVuZGVyZXIsIG1fcmVuZGVyUmFuZ2UpKSB7Ci0gICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4gc2VsZWN0aW9uSW5mbyA9IG1ha2VV
bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmN1cnJlbnRSZW5kZXJlciwgdHJ1ZSk7Ci0jaWYg
RU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBz
ZWxlY3Rpb25JbmZvLT5jb2xsZWN0ZWRTZWxlY3Rpb25SZWN0cygpKQotICAgICAgICAgICAgICAg
IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmFkZFJlY3Qoc2VsZWN0aW9uSW5mby0+cmVwYWludENv
bnRhaW5lcigpLCByZWN0KTsKLSAgICAgICAgICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5pc1Rl
eHRPckxpbmVCcmVhaygpKQotICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVy
LnNldFRleHRPbmx5KGZhbHNlKTsKLSNlbmRpZgotICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5k
ZXJlcnMuc2V0KGN1cnJlbnRSZW5kZXJlciwgV1RGTW92ZShzZWxlY3Rpb25JbmZvKSk7Ci0gICAg
ICAgICAgICBhdXRvKiBjb250YWluaW5nQmxvY2sgPSBjdXJyZW50UmVuZGVyZXItPmNvbnRhaW5p
bmdCbG9jaygpOwotICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jayAmJiAhaXM8UmVu
ZGVyVmlldz4oKmNvbnRhaW5pbmdCbG9jaykpIHsKLSAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2VsZWN0ZWRC
bG9ja3MuYWRkKGNvbnRhaW5pbmdCbG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAg
ICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rp
b25JbmZvPigqY29udGFpbmluZ0Jsb2NrKTsKLSAgICAgICAgICAgICAgICBjb250YWluaW5nQmxv
Y2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOwotI2lmIEVOQUJMRShTRVJW
SUNFX0NPTlRST0xTKQotICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmFk
ZEdhcFJlY3RzKGJsb2NrSW5mby0+cmVwYWludENvbnRhaW5lcigpLCBibG9ja0luZm8tPnJlY3Rz
KCkpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
YmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50TW9kZTo6Tm90aGluZykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzIGNoYW5nZWQg
Y29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24/Ci0gICAgZm9yIChhdXRvJiBzZWxlY3RlZFJl
bmRlcmVySW5mbyA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzKSB7Ci0gICAgICAgIGF1dG8q
IHJlbmRlcmVyID0gc2VsZWN0ZWRSZW5kZXJlckluZm8ua2V5OwotICAgICAgICBhdXRvKiBuZXdJ
bmZvID0gbmV3U2VsZWN0ZWRSZW5kZXJlcnMuZ2V0KHJlbmRlcmVyKTsKLSAgICAgICAgYXV0byog
b2xkSW5mbyA9IHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLmdldCgpOwotICAgICAgICBpZiAo
IW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdCgpICE9IG5ld0luZm8tPnJlY3QoKSB8fCBvbGRJbmZv
LT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkKLSAgICAgICAgICAgIHx8IChtX3JlbmRlclJh
bmdlLnN0YXJ0KCkgPT0gcmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9uRGF0YS5zdGFydE9mZnNldCAh
PSBtX3JlbmRlclJhbmdlLnN0YXJ0T2Zmc2V0KCkpCi0gICAgICAgICAgICB8fCAobV9yZW5kZXJS
YW5nZS5lbmQoKSA9PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rpb25EYXRhLmVuZE9mZnNldCAhPSBt
X3JlbmRlclJhbmdlLmVuZE9mZnNldCgpKSkgewotICAgICAgICAgICAgb2xkSW5mby0+cmVwYWlu
dCgpOwotICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKLSAgICAgICAgICAgICAgICBuZXdJbmZv
LT5yZXBhaW50KCk7Ci0gICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5kZXJlcnMucmVtb3Zl
KHJlbmRlcmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFu
eSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9iamVj
dHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIGZvciAoYXV0byYg
c2VsZWN0ZWRSZW5kZXJlckluZm8gOiBuZXdTZWxlY3RlZFJlbmRlcmVycykKLSAgICAgICAgc2Vs
ZWN0ZWRSZW5kZXJlckluZm8udmFsdWUtPnJlcGFpbnQoKTsKLQotICAgIC8vIEhhdmUgYW55IG9m
IHRoZSBvbGQgYmxvY2tzIGNoYW5nZWQ/Ci0gICAgZm9yIChhdXRvJiBzZWxlY3RlZEJsb2NrSW5m
byA6IG9sZFNlbGVjdGlvbkRhdGEuYmxvY2tzKSB7Ci0gICAgICAgIGF1dG8qIGJsb2NrID0gc2Vs
ZWN0ZWRCbG9ja0luZm8ua2V5OwotICAgICAgICBhdXRvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRC
bG9ja3MuZ2V0KGJsb2NrKTsKLSAgICAgICAgYXV0byogb2xkSW5mbyA9IHNlbGVjdGVkQmxvY2tJ
bmZvLnZhbHVlLmdldCgpOwotICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMo
KSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3Rh
dGUoKSkgewotICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgaWYg
KG5ld0luZm8pIHsKLSAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAg
ICAgICAgICAgbmV3U2VsZWN0ZWRCbG9ja3MucmVtb3ZlKGJsb2NrKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdl
cmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8g
YmUgdXBkYXRlZC4KLSAgICBmb3IgKGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogbmV3U2VsZWN0
ZWRCbG9ja3MpCi0gICAgICAgIHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9IaWdobGlnaHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxp
Z2h0RGF0YS5oCmluZGV4IGU5N2JjZjRmZTZhYTQ2MDRhZWUzOTBmYjczNzVjMmVkYjg4YWVhNWQu
LmU2ODExOGI3YzlmMGY4ZDY4OTU0MjgyNmVmYTEwZmQzNjQ5ZTY3YTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaApAQCAtMzAsNzkgKzMwLDcwIEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiUmVuZGVyU2VsZWN0aW9uSW5mby5oIgotCi0jaWYgRU5BQkxF
KFNFUlZJQ0VfQ09OVFJPTFMpCi0jaW5jbHVkZSAiU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmgiCi0j
ZW5kaWYKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdHJ1Y3QgSGlnaGxpZ2h0UmFuZ2VEYXRhOwotICAgIAotY2xhc3MgSGlnaGxpZ2h0RGF0YSB7
CitjbGFzcyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcjsKKworY2xhc3MgUmVu
ZGVyUmFuZ2UgewogcHVibGljOgotICAgIEhpZ2hsaWdodERhdGEoUmVuZGVyVmlldyYpOwotICAg
IAotICAgIGNsYXNzIFJlbmRlclJhbmdlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlbmRlclJh
bmdlKCkgPSBkZWZhdWx0OwotICAgICAgICBSZW5kZXJSYW5nZShSZW5kZXJPYmplY3QqIHN0YXJ0
LCBSZW5kZXJPYmplY3QqIGVuZCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9m
ZnNldCkKLSAgICAgICAgICAgIDogbV9zdGFydChtYWtlV2Vha1B0cihzdGFydCkpCi0gICAgICAg
ICAgICAsIG1fZW5kKG1ha2VXZWFrUHRyKGVuZCkpCi0gICAgICAgICAgICAsIG1fc3RhcnRPZmZz
ZXQoc3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAg
ICAgICAgewotICAgICAgICB9CisgICAgUmVuZGVyUmFuZ2UoKSA9IGRlZmF1bHQ7CisgICAgUmVu
ZGVyUmFuZ2UoUmVuZGVyT2JqZWN0KiBzdGFydCwgUmVuZGVyT2JqZWN0KiBlbmQsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgIDogbV9zdGFydChtYWtl
V2Vha1B0cihzdGFydCkpCisgICAgICAgICwgbV9lbmQobWFrZVdlYWtQdHIoZW5kKSkKKyAgICAg
ICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQorICAgICAgICAsIG1fZW5kT2Zmc2V0KGVu
ZE9mZnNldCkKKyAgICB7CisgICAgfQogCi0gICAgICAgIFJlbmRlck9iamVjdCogc3RhcnQoKSBj
b25zdCB7IHJldHVybiBtX3N0YXJ0LmdldCgpOyB9Ci0gICAgICAgIFJlbmRlck9iamVjdCogZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9lbmQuZ2V0KCk7IH0KLSAgICAgICAgT3B0aW9uYWw8dW5zaWdu
ZWQ+IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQotICAgICAg
ICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmRPZmZz
ZXQ7IH0KKyAgICBSZW5kZXJPYmplY3QqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC5n
ZXQoKTsgfQorICAgIFJlbmRlck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQuZ2V0
KCk7IH0KKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRP
ZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9m
ZnNldDsgfQogCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5kZXJSYW5nZSYgb3Ro
ZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3N0YXJ0ID09IG90aGVy
Lm1fc3RhcnQgJiYgbV9lbmQgPT0gb3RoZXIubV9lbmQgJiYgbV9zdGFydE9mZnNldCA9PSBvdGhl
ci5tX3N0YXJ0T2Zmc2V0ICYmIG1fZW5kT2Zmc2V0ID09IG90aGVyLm1fZW5kT2Zmc2V0OwotICAg
ICAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlbmRlclJhbmdlJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXJ0ID09IG90aGVyLm1fc3RhcnQgJiYgbV9l
bmQgPT0gb3RoZXIubV9lbmQgJiYgbV9zdGFydE9mZnNldCA9PSBvdGhlci5tX3N0YXJ0T2Zmc2V0
ICYmIG1fZW5kT2Zmc2V0ID09IG90aGVyLm1fZW5kT2Zmc2V0OworICAgIH0KIAotICAgIHByaXZh
dGU6Ci0gICAgICAgIFdlYWtQdHI8UmVuZGVyT2JqZWN0PiBtX3N0YXJ0OwotICAgICAgICBXZWFr
UHRyPFJlbmRlck9iamVjdD4gbV9lbmQ7Ci0gICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3N0
YXJ0T2Zmc2V0OwotICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9lbmRPZmZzZXQ7Ci0gICAg
fTsKK3ByaXZhdGU6CisgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fc3RhcnQ7CisgICAgV2Vh
a1B0cjxSZW5kZXJPYmplY3Q+IG1fZW5kOworICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQgeyAw
IH07CisgICAgdW5zaWduZWQgbV9lbmRPZmZzZXQgeyAwIH07Cit9OwogICAgIAorY2xhc3MgUmVu
ZGVyUmFuZ2VJdGVyYXRvciB7CitwdWJsaWM6CisgICAgUmVuZGVyUmFuZ2VJdGVyYXRvcihSZW5k
ZXJPYmplY3QqIHN0YXJ0KTsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQoKSBjb25zdDsKKyAg
ICBSZW5kZXJPYmplY3QqIG5leHQoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBjaGVja0Zv
clNwYW5uZXIoKTsKKyAgICAKKyAgICBSZW5kZXJPYmplY3QqIG1fY3VycmVudCB7IG51bGxwdHIg
fTsKKyAgICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBtX3Nw
YW5uZXJTdGFjazsKK307CisKK2NsYXNzIEhpZ2hsaWdodERhdGEgeworcHVibGljOgogICAgIHZv
aWQgc2V0UmVuZGVyUmFuZ2UoY29uc3QgUmVuZGVyUmFuZ2UmKTsKICAgICBib29sIHNldFJlbmRl
clJhbmdlKGNvbnN0IEhpZ2hsaWdodFJhbmdlRGF0YSYpOyAvLyBSZXR1cm5zIHRydWUgaWYgc3Vj
Y2Vzc2Z1bC4KLSAgICAKLSAgICBlbnVtIGNsYXNzIFJlcGFpbnRNb2RlIHsgTmV3WE9ST2xkLCBO
ZXdNaW51c09sZCwgTm90aGluZyB9OwotICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFJlbmRl
clJhbmdlJiwgUmVwYWludE1vZGUgPSBSZXBhaW50TW9kZTo6TmV3WE9ST2xkKTsKICAgICBjb25z
dCBSZW5kZXJSYW5nZSYgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJSYW5nZTsgfQogCiAg
ICAgUmVuZGVyT2JqZWN0KiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUmFuZ2Uuc3Rh
cnQoKTsgfQogICAgIFJlbmRlck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJS
YW5nZS5lbmQoKTsgfQogCi0gICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IEFTU0VS
VChtX3JlbmRlclJhbmdlLnN0YXJ0T2Zmc2V0KCkpOyByZXR1cm4gbV9yZW5kZXJSYW5nZS5zdGFy
dE9mZnNldCgpLnZhbHVlT3IoMCk7IH0KLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7
IEFTU0VSVChtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpKTsgcmV0dXJuIG1fcmVuZGVyUmFuZ2Uu
ZW5kT2Zmc2V0KCkudmFsdWVPcigwKTsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9yZW5kZXJSYW5nZS5zdGFydE9mZnNldCgpOyB9CisgICAgdW5zaWduZWQg
ZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKTsgfQog
Ci0gICAgdm9pZCBjbGVhclNlbGVjdGlvbigpOwotICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gY29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudDo6Tm8pOyB9Ci0gICAg
SW50UmVjdCBib3VuZHNDbGlwcGVkVG9WaXNpYmxlQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGNv
bGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6Olllcyk7IH0KLSAgICB2b2lkIHJlcGFp
bnRTZWxlY3Rpb24oKSBjb25zdDsKLSAgICAKICAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXRlIGhpZ2hsaWdodFN0YXRlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0Jik7CiAKLXBy
aXZhdGU6Ci0gICAgZW51bSBjbGFzcyBDbGlwVG9WaXNpYmxlQ29udGVudCB7IFllcywgTm8gfTsK
LSAgICBJbnRSZWN0IGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Owot
ICAgIHZvaWQgYXBwbHlTZWxlY3Rpb24oY29uc3QgUmVuZGVyUmFuZ2UmLCBSZXBhaW50TW9kZSk7
Ci0KLSAgICBjb25zdCBSZW5kZXJWaWV3JiBtX3JlbmRlclZpZXc7Ci0jaWYgRU5BQkxFKFNFUlZJ
Q0VfQ09OVFJPTFMpCi0gICAgU2VsZWN0aW9uUmVjdEdhdGhlcmVyIG1fc2VsZWN0aW9uUmVjdEdh
dGhlcmVyOwotI2VuZGlmCitwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyUmFuZ2UgbV9yZW5kZXJSYW5n
ZTsKLSAgICBib29sIG1fc2VsZWN0aW9uV2FzQ2FyZXQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCmluZGV4IDEyNjdmMDFmZDUxOTdhNTI5MGY2MjRhMjMxYmViZTA3NmQ2NDRiMDUuLmNiYzAz
YTdkYjk4YzExNTM2YjM3MTI3M2FmYThhMzUwMzZkMTY3NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTEwNTAsNiArMTA1MCw3IEBAIFZlY3RvcjxN
YXJrZWRUZXh0PiBJbmxpbmVUZXh0Qm94Ojpjb2xsZWN0TWFya2VkVGV4dHNGb3JIaWdobGlnaHRz
KFRleHRQYWludFBoYXNlCiAgICAgVmVjdG9yPE1hcmtlZFRleHQ+IG1hcmtlZFRleHRzOwogICAg
IGF1dG8mIHBhcmVudFJlbmRlcmVyID0gcGFyZW50KCktPnJlbmRlcmVyKCk7CiAgICAgYXV0byYg
cGFyZW50U3R5bGUgPSBwYXJlbnRSZW5kZXJlci5zdHlsZSgpOworICAgIEhpZ2hsaWdodERhdGEg
aGlnaGxpZ2h0RGF0YTsKICAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5oaWdobGlnaHRNYXAoKS5tYXAoKSkgewogICAgICAgICBhdXRvIHJlbmRlclN0eWxl
ID0gcGFyZW50UmVuZGVyZXIuZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpIaWdo
bGlnaHQsIGhpZ2hsaWdodC5rZXkgfSwgJnBhcmVudFN0eWxlKTsKICAgICAgICAgaWYgKCFyZW5k
ZXJTdHlsZSkKQEAgLTEwNTcsMjIgKzEwNTgsMTIgQEAgVmVjdG9yPE1hcmtlZFRleHQ+IElubGlu
ZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckhpZ2hsaWdodHMoVGV4dFBhaW50UGhhc2UK
ICAgICAgICAgaWYgKHJlbmRlclN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLmlzRW1w
dHkoKSAmJiBwaGFzZSA9PSBUZXh0UGFpbnRQaGFzZTo6RGVjb3JhdGlvbikKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBmb3IgKGF1dG8mIHJhbmdlRGF0YSA6IGhpZ2hsaWdodC52YWx1
ZS0+cmFuZ2VzRGF0YSgpKSB7Ci0gICAgICAgICAgICBpZiAocmFuZ2VEYXRhLT5zdGFydFBvc2l0
aW9uICYmIHJhbmdlRGF0YS0+ZW5kUG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICBQb3NpdGlv
biBzdGFydFBvc2l0aW9uID0gcmFuZ2VEYXRhLT5zdGFydFBvc2l0aW9uLnZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSByYW5nZURhdGEtPmVuZFBvc2l0aW9u
LnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgYXV0byogc3RhcnRSZW5kZXJlciA9IHN0YXJ0UG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCA9IHN0YXJ0UG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KTsKLSAgICAgICAgICAgICAgICBhdXRvKiBlbmRSZW5kZXJlciA9IGVuZFBvc2l0aW9uLmRlcHJl
Y2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgZW5kT2Zm
c2V0ID0gZW5kUG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIXN0YXJ0UmVuZGVyZXIgfHwgIWVuZFJlbmRlcmVyKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIGF1dG8gaGlnaGxpZ2h0RGF0YSA9IEhp
Z2hsaWdodERhdGEocmVuZGVyZXIoKS52aWV3KCkpOwotICAgICAgICAgICAgICAgIGhpZ2hsaWdo
dERhdGEuc2V0UmVuZGVyUmFuZ2UoeyBzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCB9KTsKLSAgICAgICAgICAgICAgICBhdXRvIFtoaWdobGlnaHRTdGFy
dCwgaGlnaGxpZ2h0RW5kXSA9IGhpZ2hsaWdodFN0YXJ0RW5kKGhpZ2hsaWdodERhdGEpOwotICAg
ICAgICAgICAgICAgIGlmIChoaWdobGlnaHRTdGFydCA8IGhpZ2hsaWdodEVuZCkKLSAgICAgICAg
ICAgICAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKHsgaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdo
dEVuZCwgTWFya2VkVGV4dDo6SGlnaGxpZ2h0LCBudWxscHRyLCBoaWdobGlnaHQua2V5IH0pOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFoaWdobGlnaHREYXRhLnNldFJlbmRlclJh
bmdlKHJhbmdlRGF0YSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGF1dG8gW2hpZ2hsaWdodFN0YXJ0LCBoaWdobGlnaHRFbmRdID0gaGlnaGxp
Z2h0U3RhcnRFbmQoaGlnaGxpZ2h0RGF0YSk7CisgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0U3Rh
cnQgPCBoaWdobGlnaHRFbmQpCisgICAgICAgICAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKHsg
aGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZCwgTWFya2VkVGV4dDo6SGlnaGxpZ2h0LCBudWxs
cHRyLCBoaWdobGlnaHQua2V5IH0pOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBtYXJr
ZWRUZXh0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBs
YWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCmlu
ZGV4IDc3YTY4ZTA2ZDZhODE1NWUwN2Q3ZjI1Zjg4NTJkMTg0NTJmMjc5ZjEuLjY3NzU5ZTIyMzdh
NjI3NGRhNDljMTM3MmE1OGE0ZjJmMmJmNzU3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtMTUyLDcgKzE1Miw3IEBAIGlubGluZSBzdGF0aWMg
Ym9vbCBkcmFnZ2VkQ29udGVudENvbnRhaW5zUmVwbGFjZWRFbGVtZW50KGNvbnN0IFZlY3RvcjxS
ZW5kZXJlZERvCiAKIENvbG9yIFJlbmRlclJlcGxhY2VkOjpjYWxjdWxhdGVIaWdobGlnaHRDb2xv
cigpIGNvbnN0CiB7Ci0gICAgYXV0byBoaWdobGlnaHREYXRhID0gSGlnaGxpZ2h0RGF0YSh2aWV3
KCkpOworICAgIEhpZ2hsaWdodERhdGEgaGlnaGxpZ2h0RGF0YTsKICAgICBmb3IgKGF1dG8mIGhp
Z2hsaWdodCA6IGRvY3VtZW50KCkuaGlnaGxpZ2h0TWFwKCkubWFwKCkpIHsKICAgICAgICAgZm9y
IChhdXRvJiByYW5nZURhdGEgOiBoaWdobGlnaHQudmFsdWUtPnJhbmdlc0RhdGEoKSkgewogICAg
ICAgICAgICAgaWYgKCFoaWdobGlnaHREYXRhLnNldFJlbmRlclJhbmdlKHJhbmdlRGF0YSkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCBiY2ExYjFkZjBiYjdmYTMzMjEz
M2E3NzM0ZGMzZWVkMmM1OTY2NWQ0Li40NzgxZTRmMWQyNGUwMzkwZGUyYmQxMTgzMTk5YzlmMjg1
Y2Q5ZDhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTIyLDEwICsy
MiwxMCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRl
ICJIaWdobGlnaHREYXRhLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVy
QmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCisjaW5jbHVkZSAiU2VsZWN0
aW9uUmFuZ2VEYXRhLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CkBAIC04NCw3ICs4NCw3IEBAIHB1Ymxp
YzoKICAgICAvLyBSZXR1cm4gdGhlIHJlbmRlcmVyIHdob3NlIGJhY2tncm91bmQgc3R5bGUgaXMg
dXNlZCB0byBwYWludCB0aGUgcm9vdCBiYWNrZ3JvdW5kLgogICAgIFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyRm9yUm9vdEJhY2tncm91bmQoKSBjb25zdDsKIAotICAgIEhpZ2hsaWdodERhdGEmIHNl
bGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CisgICAgU2VsZWN0aW9uUmFuZ2VEYXRh
JiBzZWxlY3Rpb24oKSB7IHJldHVybiBtX3NlbGVjdGlvbjsgfQogCiAgICAgYm9vbCBwcmludGlu
ZygpIGNvbnN0OwogCkBAIC0yMjQsNyArMjI0LDcgQEAgcHJpdmF0ZToKICAgICB1aW50NjRfdCBt
X3JlbmRlcmVyQ291bnQgeyAxIH07CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZWdp
b24+IG1fYWNjdW11bGF0ZWRSZXBhaW50UmVnaW9uOwotICAgIEhpZ2hsaWdodERhdGEgbV9zZWxl
Y3Rpb247CisgICAgU2VsZWN0aW9uUmFuZ2VEYXRhIG1fc2VsZWN0aW9uOwogCiAgICAgV2Vha1B0
cjxSZW5kZXJMYXllcj4gbV9zdHlsZUNoYW5nZUxheWVyTXV0YXRpb25Sb290OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Yx
MGFmZmU5N2JhODYwNTExODNhNTY3MmJjM2NjN2E2NjBkZjBiYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuaApAQCAtMCwwICsx
LDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAq
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJIaWdobGln
aHREYXRhLmgiCisjaW5jbHVkZSAiUmVuZGVyU2VsZWN0aW9uSW5mby5oIgorCisjaWYgRU5BQkxF
KFNFUlZJQ0VfQ09OVFJPTFMpCisjaW5jbHVkZSAiU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmgiCisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZWxlY3Rpb25SYW5nZURhdGEg
OiBwdWJsaWMgSGlnaGxpZ2h0RGF0YSB7CitwdWJsaWM6CisgICAgU2VsZWN0aW9uUmFuZ2VEYXRh
KFJlbmRlclZpZXcmKTsKKyAgICAKKyAgICBlbnVtIGNsYXNzIFJlcGFpbnRNb2RlIHsgTmV3WE9S
T2xkLCBOZXdNaW51c09sZCwgTm90aGluZyB9OworICAgIHZvaWQgc2V0KGNvbnN0IFJlbmRlclJh
bmdlJiwgUmVwYWludE1vZGUgPSBSZXBhaW50TW9kZTo6TmV3WE9ST2xkKTsKKyAgICB2b2lkIGNs
ZWFyKCk7CisgICAgdm9pZCByZXBhaW50KCkgY29uc3Q7CisgICAgCisgICAgSW50UmVjdCBib3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50OjpO
byk7IH0KKyAgICBJbnRSZWN0IGJvdW5kc0NsaXBwZWRUb1Zpc2libGVDb250ZW50KCkgY29uc3Qg
eyByZXR1cm4gY29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKTsgfQorICAg
IAorcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJWaWV3JiBtX3JlbmRlclZpZXc7CisjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgU2VsZWN0aW9uUmVjdEdhdGhlcmVyIG1fc2VsZWN0
aW9uUmVjdEdhdGhlcmVyOworI2VuZGlmCisgICAgYm9vbCBtX3NlbGVjdGlvbldhc0NhcmV0IHsg
ZmFsc2UgfTsKKyAgICBlbnVtIGNsYXNzIENsaXBUb1Zpc2libGVDb250ZW50IHsgWWVzLCBObyB9
OworICAgIEludFJlY3QgY29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3Q7
CisgICAgdm9pZCBhcHBseShjb25zdCBSZW5kZXJSYW5nZSYsIFJlcGFpbnRNb2RlKTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="commit-queue"
          id="427525"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411347</attachid>
            <date>2020-10-14 10:35:10 -0700</date>
            <delta_ts>2020-10-14 13:42:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217711-20201014103509.patch</filename>
            <type>text/plain</type>
            <size>59987</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE0MDAyN2UwYjY3MTg0
M2M1MWI2ZjZlNjljNTc3ZDRiZGVmMTVkZi4uODVjODVhOTQzYTYzMTllY2MzNjkyMGNiMjZmOGYw
ZThhZWY4YmEzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDIwLTEwLTE0ICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3Ig
SGlnaGxpZ2h0RGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE3NzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSGlnaGxpZ2h0RGF0YSB3YXMgcmVuYW1lZCB3aGVuIGl0IHdhcyB1c2VkIGZvciBtb3Jl
IHRoYXQgc2VsZWN0aW9ucywgYnV0CisgICAgICAgIG1vcmUgdGhhbiBoYWxmIHRoZSBmaWxlIHdh
cyBvbmx5IHN1cHBvc2VkIHRvIGJlIHVzZWQgdG8gZGVhbCB3aXRoIHRoZSBjdXJyZW50CisgICAg
ICAgIHNlbGVjdGlvbiwgc28gSSd2ZSBzcGxpdCBpdCBiYWNrIG91dCBpbnRvIGEgbW9yZSByZWFz
b25hYmxlIHNldCBvZiBmaWxlcy4KKyAgICAgICAgQWxzbyBtYWRlIG9mZnNldHMgbm8gbG9uZ2Vy
IG9wdGlvbmFsLCBhcyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBuZWVkLgorICAgICAgICBF
eHRlbmRlZCB0aGUgSGlnaGxpZ2h0RGF0YSBzZXRSZW5kZXJSYW5nZSBpbnRvIElubGluZVRleHRC
b3gsIGFzIGl0J3MgYSBiZXR0ZXIKKyAgICAgICAgd2F5IHRvIGNhbGN1bGF0ZSB0aGF0IGRvZXMg
bm90IHVzZSBkZXByZWNhdGVkIGZ1bmN0aW9ucy4gCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hh
bmdlLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6c2V0TmVlZHNTZWxlY3Rpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Nh
cmV0Q29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWlu
dENvbnRlbnRzRm9yU25hcHNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlOjp+U2NvcGVkRnJh
bWVTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JS
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUmFuZ2VJdGVyYXRvcjo6UmVuZGVyUmFuZ2VJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSYW5nZUl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJhbmdlSXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmFuZ2VJdGVyYXRvcjo6Y2hlY2tGb3JTcGFubmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlbmRlcmVyQWZ0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0
YTo6aGlnaGxpZ2h0U3RhdGVGb3JSZW5kZXJlcik6CisgICAgICAgICgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6aXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb2xsZWN0U2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjpIaWdobGlnaHREYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNldFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpyZXBhaW50U2VsZWN0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OmNvbGxlY3RCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6YXBwbHlTZWxl
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9IaWdobGlnaHREYXRhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSYW5nZTo6UmVuZGVyUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmFuZ2U6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmFuZ2U6OnN0YXJ0
T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJhbmdlOjplbmRPZmZzZXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmFuZ2U6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6c3RhcnRPZmZzZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6ZW5kT2Zmc2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlOjpSZW5kZXJSYW5nZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6c3Rh
cnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6UmVu
ZGVyUmFuZ2U6OmVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGln
aHREYXRhOjpSZW5kZXJSYW5nZTo6c3RhcnRPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2U6OmVuZE9mZnNldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6
b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHRE
YXRhOjpib3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0
RGF0YTo6Ym91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckhpZ2hsaWdodHMgY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsYWNlZDo6Y2FsY3VsYXRlSGlnaGxpZ2h0Q29sb3IgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NlbGVjdGlvblJh
bmdlRGF0YS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGln
aHREYXRhLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyQWZ0ZXJPZmZzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpjb2xs
ZWN0U2VsZWN0aW9uRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6
OlNlbGVjdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnJlcGFpbnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpjb2xsZWN0Qm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6YXBwbHkpOgorICAgICAgICAqIHJl
bmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3Rpb25SYW5nZURhdGE6OmJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25SYW5nZURhdGE6OmJvdW5kc0NsaXBwZWRUb1Zpc2libGVDb250ZW50IGNvbnN0KToKKwog
MjAyMC0xMC0xMyAgTWVnYW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFBhaW50IENTUyBoaWdobGlnaHRzIG92ZXIgaW1hZ2VzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpp
bmRleCA1N2Y4MzI0YjAxMjVjYWZmMWFmZTBkM2JiZTU2NjkzZWY2ZWI4OWZkLi4wYWRlN2Q4Yzhk
NGIyZjJkOThkNmQzOTBlOTM4YWIzM2ViNzQ1ODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0
MzksNiArMTQzOSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5o
CiAgICAgcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5oCisgICAgcmVuZGVyaW5nL1NlbGVjdGlv
blJhbmdlRGF0YS5oCiAKICAgICByZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAogICAgIHJlbmRl
cmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDk2NWFkYzEzMGYx
ZGY0MzY1YjA4Mjk5ZDI2NmQ2OGY5ZmNmODFiMWQuLjk0ODA1MTFjNjk3ODE5N2VkNmYyNWIxMWE4
OGU2OTA0YjBhMzI0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMjIxLDYgKzIyMjEsNyBAQCByZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAKIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCiByZW5kZXJp
bmcvUm9vdElubGluZUJveC5jcHAKIHJlbmRlcmluZy9TY3JvbGxBbGlnbm1lbnQuY3BwCityZW5k
ZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcAogcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmNwcAog
cmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKIHJlbmRlcmluZy9UZXh0UGFpbnRT
dHlsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA0YzA3NTc4MDk2ZjQ2Y2ZhMTdjNDgwZjMzNTM1ZDdlM2M0OGE5OWJkLi4x
YmZiN2JiOTViMWJhYjI0NGNlMzgxMjE4ZTc2MTVjMDQzMTRiNjM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTk3LDYgKzEx
OTcsNyBAQAogCQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQx
NTI5MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDU3NzVFNTIwNDcy
RjczMDA4RENFNUQgLyogTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ1Nzc1RTQyMDQ3MkY3MzAwOERD
RTVEIC8qIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDYzQ0Y2ODIyMTJGQTY4MDAxQTg1Nzcg
LyogRGF0YURldGVjdG9yc0NvcmVTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNzk0MUUyMUM1NkMyOTMwMEE0QzU4RSAvKiBEYXRhRGV0
ZWN0b3JzQ29yZVNvZnRMaW5rLm1tICovOyB9OworCQk0NDY1RDdCRDI1MzZEMDVFMDAxNjY2NkQg
LyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NEIzOEJGNDI1MzY5MDFBMDBBNDQ1OEQgLyogU2VsZWN0aW9uUmFuZ2VE
YXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDQ2REM2NDgyNEEyOURBQjAwNjFGMzkwIC8qIFBsYXliYWNrVGFyZ2V0Q2xpZW50Q29udGV4dElk
ZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ0NkRDNjQ2MjRBMjlEOUIwMDYxRjM5MCAvKiBQbGF5YmFja1RhcmdldENsaWVudENvbnRleHRJ
ZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDQ3MTcxMEUyMDVBRjk0NTAwMEExMTZFIC8qIE1lZGlhUXVlcnlQYXJzZXJDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDcxNzEw
QzIwNUFGOTQ1MDAwQTExNkUgLyogTWVkaWFRdWVyeVBhcnNlckNvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDc5NTgwNDE2NDNCNDlB
MDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Nzk1ODAzMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJzZWRD
b250ZW50VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC03OTI0LDYgKzc5MjUsOCBAQAogCQk0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyog
V2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkNvcmVVUkxSZXNwb25zZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NEEyOEFBQjEyREZCOEFDMDBBRTkyM0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWF0aE1MRWxlbWVudEZhY3RvcnkuaDsgcGF0aCA9
IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvTWF0aE1MRWxlbWVudEZhY3RvcnkuaDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNDRBMjhBQUUxMkRGQjhCRjAwQUU5MjNCIC8q
IE1hdGhNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hdGhNTE5h
bWVzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL01hdGhNTE5hbWVzLmg7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTQ0QjM4QkY0MjUzNjkwMUEwMEE0NDU4
RCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2VsZWN0aW9uUmFuZ2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0
QjM4QkY5MjUzNjlBODgwMEE0NDU4RCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRDOTkxODEwRjNEMUUwRDAwNTg2NjcwIC8qIFNj
cm9sbGJhclRoZW1lSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gU2Nyb2xsYmFyVGhlbWVJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
Qzk5MTg1MEYzRDFFQkUwMDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJUaGVtZUlPUy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhlbWVJT1MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MjYwLDYgKzI5MjYzLDggQEAKIAkJCQlBOENGRjVEQTBBMTU1
QTA1MDAwQTQyMzQgLyogUm9vdElubGluZUJveC5oICovLAogCQkJCTVEOTI1QjY1MEY2NEQ0REQw
MEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuY3BwICovLAogCQkJCTVEOTI1QjY2MEY2NEQ0REQw
MEI4NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuaCAqLywKKwkJCQk0NEIzOEJGOTI1MzY5QTg4MDBB
NDQ1OEQgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcCAqLywKKwkJCQk0NEIzOEJGNDI1MzY5MDFB
MDBBNDQ1OEQgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggKi8sCiAJCQkJRTMxQ0Q3NTAyMjlGNzQ5
NTAwRkJEQTE5IC8qIFRhYmxlTGF5b3V0LmNwcCAqLywKIAkJCQlBOENGRjA0QzBBMTU0RjA5MDAw
QTQyMzQgLyogVGFibGVMYXlvdXQuaCAqLywKIAkJCQkwRjU0RENFMzE4ODEwNTFEMDAzRUVEQkIg
LyogVGV4dEF1dG9TaXppbmcuY3BwICovLApAQCAtMzM4ODIsNiArMzM4ODcsNyBAQAogCQkJCTk3
NEQyREE1MTQ2QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBvbGljeS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQ1QkM0MjcxNkY4ODJFRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5VmlvbGF0aW9u
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJGMEQwMDZDMUQwMEVGNkYyNiAvKiBT
ZWdtZW50ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0NjVEN0JEMjUzNkQwNUUwMDE2
NjY2RCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJFQTgwN0M5
MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTQwNUM4OTE5MEIwMTQ0MDA3NTRGOTQgLyogU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDRCNEJCNDE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2Vy
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKaW5kZXggNmVjOTFjMDZmYWU3NGY0ZGY0MzI3NTljNmJlYjZmMWI5MTc2Y2I3YS4uNzcwZDhi
ZjA3MDAyN2NlOWNkNWNhYTY0MTMzZThjN2JhMTljNWJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZShSZXZlYWxTZWxlY3Rpb25BZnRlclVwZGF0
ZSByZXZlYWxNbwogICAgICAgICBtX3NlbGVjdGlvblJldmVhbE1vZGUgPSBTZWxlY3Rpb25SZXZl
YWxNb2RlOjpSZXZlYWw7CiAgICAgbV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRlID0gdHJ1ZTsKICAg
ICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKLSAgICAg
ICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2Vs
ZWN0aW9uKCkuY2xlYXIoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2
ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCkBAIC01
MDcsNyArNTA3LDcgQEAgdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpub2RlV2lsbEJlUmVtb3Zl
ZChOb2RlJiBub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoUmVuZGVyVmlldyogdmll
dyA9IG5vZGUuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHZpZXctPnNlbGVjdGlv
bigpLmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7
CiAKICAgICBjbGVhcigpOwogfQpAQCAtNTY2LDcgKzU2Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9kZSYgbm9kZSwgYm9vbCBiYXNlUmVtb3Zl
ZCwgYm9vCiAKICAgICBpZiAoY2xlYXJSZW5kZXJUcmVlU2VsZWN0aW9uKSB7CiAgICAgICAgIGlm
IChhdXRvKiByZW5kZXJWaWV3ID0gbm9kZS5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSkgewotICAg
ICAgICAgICAgcmVuZGVyVmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAg
ICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICAgICAgICAgIC8v
IFRyaWdnZXIgYSBzZWxlY3Rpb24gdXBkYXRlIHNvIHRoZSBzZWxlY3Rpb24gd2lsbCBiZSBzZXQg
YWdhaW4uCiAgICAgICAgICAgICBtX3NlbGVjdGlvblJldmVhbEludGVudCA9IEFYVGV4dFN0YXRl
Q2hhbmdlSW50ZW50KCk7CkBAIC0xNTcwLDcgKzE1NzAsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCkKICNlbmRpZgogCiAgICAgaWYgKGF1dG8qIHZpZXcg
PSBtX2RvY3VtZW50LT5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNs
ZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAg
ICBzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKFZpc2libGVTZWxlY3Rpb24o
KSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSwgQWxpZ25DdXJzb3JPblNjcm9sbElmTmVl
ZGVkLCBUZXh0R3JhbnVsYXJpdHk6OkNoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICBtX3ByZXZp
b3VzQ2FyZXROb2RlID0gbnVsbHB0cjsKQEAgLTIwNTgsNyArMjA1OCw3IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8gUmVuZGVyT2Jq
ZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0
aXZlLAogICAgIC8vIHdlIGhhdmUgdG8gdXBkYXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBw
YWludGVkLgogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+cmVuZGVyVmll
dygpKQotICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5yZXBhaW50U2VsZWN0aW9uKCk7CisgICAg
ICAgIHZpZXctPnNlbGVjdGlvbigpLnJlcGFpbnQoKTsKIAogICAgIC8vIENhcmV0IGFwcGVhcnMg
aW4gdGhlIGFjdGl2ZSBmcmFtZS4KICAgICBpZiAoYWN0aXZlQW5kRm9jdXNlZCkKQEAgLTIxNTMs
NyArMjE1Myw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogI2Vu
ZGlmCiAKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAgICAgdmlldy0+c2Vs
ZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xl
YXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjE3OCw3ICsyMTc4LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgICAgIFJlbmRlck9iamVj
dCogZW5kUmVuZGVyZXIgPSBlbmRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwog
ICAgICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7Ci0gICAg
ICAgIHZpZXctPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7IHN0YXJ0UmVuZGVyZXIsIGVuZFJl
bmRlcmVyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZW5kT2Zmc2V0KSB9KTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuc2V0KHsg
c3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9m
ZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0pOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGUxYTg0MDg5ODU3ZDM5YTMzZTUwYTA3YjA0
YTI2Mzc0NTBlZDZiOWEuLjYwOTM2OGM4ZDI3MTY3YThkMTk1MGUzYjcyNjk3YzBlOThkMmI4YmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQzNTEsNyArNDM1MSw3IEBAIHZvaWQg
RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0CiAgICAgaWYgKHNob3VsZFBhaW50U2VsZWN0aW9uID09IEV4Y2x1
ZGVTZWxlY3Rpb24pIHsKICAgICAgICAgZm9yIChhdXRvKiBmcmFtZSA9IG1fZnJhbWUucHRyKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUucHRyKCkp
KSB7CiAgICAgICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IGZyYW1lLT5jb250ZW50UmVu
ZGVyZXIoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5jbGVhclNl
bGVjdGlvbigpOworICAgICAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLmNsZWFy
KCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RyYWdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3Bw
CmluZGV4IDYzMGQ0NmUyYjU3YjQwZTRjZjRlMzgwODY1ZTZjZjFhNDkxNjNjZDguLjE5NTMyOTY3
N2QxODIwZWRkYWMwYWYxZWM3Y2I4NzQyM2FmNjViYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RHJhZ0ltYWdlLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAj
aW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNs
dWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKICNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgogI2lu
Y2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKIApAQCAtMTQzLDEyICsxNDQsMTIgQEAgc3RydWN0IFNj
b3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUgewogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRl
clZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKHNl
bGVjdGlvbik7Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24oc2VsZWN0aW9uLnZhbHVlKCksIEhpZ2hsaWdodERhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5n
KTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLnNldChzZWxlY3Rpb24udmFs
dWUoKSwgU2VsZWN0aW9uUmFuZ2VEYXRhOjpSZXBhaW50TW9kZTo6Tm90aGluZyk7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICBjb25zdCBGcmFtZSYgZnJhbWU7Ci0gICAgT3B0aW9uYWw8SGlnaGxp
Z2h0RGF0YTo6UmVuZGVyUmFuZ2U+IHNlbGVjdGlvbjsKKyAgICBPcHRpb25hbDxSZW5kZXJSYW5n
ZT4gc2VsZWN0aW9uOwogfTsKIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTg1LDcg
KzE4Niw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYgZnJh
bWUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0g
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5k
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ID49IDAg
JiYgZW5kT2Zmc2V0ID49IDApOwotICAgIHZpZXctPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbih7
IHN0YXJ0UmVuZGVyZXIsIGVuZFJlbmRlcmVyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRP
ZmZzZXQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSB9LCBIaWdobGlnaHREYXRh
OjpSZXBhaW50TW9kZTo6Tm90aGluZyk7CisgICAgdmlldy0+c2VsZWN0aW9uKCkuc2V0KHsgc3Rh
cnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNl
dCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0sIFNlbGVjdGlvblJhbmdlRGF0
YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOwogICAgIC8vIFdlIGNhcHR1cmUgdXNpbmcgc25hcHNo
b3RGcmFtZVJlY3QoKSBiZWNhdXNlIHdlIGZha2UgdXAgdGhlIHNlbGVjdGlvbiB1c2luZwogICAg
IC8vIEZyYW1lVmlldyBidXQgc25hcHNob3RTZWxlY3Rpb24oKSB1c2VzIHRoZSBzZWxlY3Rpb24g
ZnJvbSB0aGUgRnJhbWUgaXRzZWxmLgogICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25h
cHNob3Qoc25hcHNob3RGcmFtZVJlY3QoZnJhbWUsIHZpZXctPnNlbGVjdGlvbigpLmJvdW5kc0Ns
aXBwZWRUb1Zpc2libGVDb250ZW50KCksIG9wdGlvbnMpLCBudWxscHRyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcAppbmRleCAyYmRkNjk3N2Y5NTc5M2MxNjU5
ZjNiYzE2NzMxNjYyYTNlMzY3NGQ3Li42NWUzMmE0ODUwZDY3Y2NkMDA0ZTJhNzU2YjBmMWI3ZDc4
ZDFiY2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCkBA
IC00NiwxMTUgKzQ2LDQ2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIHsg
Ly8gU2VlIGJ1ZyAjMTc3ODA4LgogCi1zdHJ1Y3QgU2VsZWN0aW9uRGF0YSB7Ci0gICAgdXNpbmcg
UmVuZGVyZXJNYXAgPSBIYXNoTWFwPFJlbmRlck9iamVjdCosIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTZWxlY3Rpb25JbmZvPj47Ci0gICAgdXNpbmcgUmVuZGVyQmxvY2tNYXAgPSBIYXNoTWFwPGNv
bnN0IFJlbmRlckJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5m
bz4+OwogCi0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0T2Zmc2V0OwotICAgIE9wdGlvbmFs
PHVuc2lnbmVkPiBlbmRPZmZzZXQ7Ci0gICAgUmVuZGVyZXJNYXAgcmVuZGVyZXJzOwotICAgIFJl
bmRlckJsb2NrTWFwIGJsb2NrczsKLX07Ci0KLWNsYXNzIEhpZ2hsaWdodEl0ZXJhdG9yIHsKLXB1
YmxpYzoKLSAgICBIaWdobGlnaHRJdGVyYXRvcihSZW5kZXJPYmplY3QqIHN0YXJ0KQotICAgICAg
ICA6IG1fY3VycmVudChzdGFydCkKLSAgICB7Ci0gICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOwot
ICAgIH0KLSAgICAKLSAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fY3VycmVudDsKLSAgICB9Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0KiBu
ZXh0KCkKLSAgICB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogY3VycmVudFNwYW4gPSBtX3NwYW5u
ZXJTdGFjay5pc0VtcHR5KCkgPyBudWxscHRyIDogbV9zcGFubmVyU3RhY2subGFzdCgpLT5zcGFu
bmVyKCk7Ci0gICAgICAgIG1fY3VycmVudCA9IG1fY3VycmVudC0+bmV4dEluUHJlT3JkZXIoY3Vy
cmVudFNwYW4pOwotICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICAgICAgaWYgKCFtX2N1
cnJlbnQgJiYgY3VycmVudFNwYW4pIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGxhY2Vo
b2xkZXIgPSBtX3NwYW5uZXJTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICBtX3NwYW5uZXJTdGFj
ay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci0+bmV4
dEluUHJlT3JkZXIoKTsKLSAgICAgICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQg
Y2hlY2tGb3JTcGFubmVyKCkKLSAgICB7Ci0gICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1
bW5TcGFubmVyUGxhY2Vob2xkZXI+KG1fY3VycmVudCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGF1dG8mIHBsYWNlaG9sZGVyID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXI+KCptX2N1cnJlbnQpOwotICAgICAgICBtX3NwYW5uZXJTdGFjay5hcHBl
bmQoJnBsYWNlaG9sZGVyKTsKLSAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXIuc3Bhbm5l
cigpOwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCogbV9jdXJyZW50IHsgbnVsbHB0ciB9Owot
ICAgIFZlY3RvcjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcio+IG1fc3Bhbm5l
clN0YWNrOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXN0YXRpYyBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyQWZ0ZXJPZmZzZXQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwg
dW5zaWduZWQgb2Zmc2V0KQorUmVuZGVyUmFuZ2VJdGVyYXRvcjo6UmVuZGVyUmFuZ2VJdGVyYXRv
cihSZW5kZXJPYmplY3QqIHN0YXJ0KQorICAgIDogbV9jdXJyZW50KHN0YXJ0KQogewotICAgIGF1
dG8qIGNoaWxkID0gcmVuZGVyZXIuY2hpbGRBdChvZmZzZXQpOwotICAgIHJldHVybiBjaGlsZCA/
IGNoaWxkIDogcmVuZGVyZXIubmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKCk7CisgICAgY2hl
Y2tGb3JTcGFubmVyKCk7CiB9CiAKLXN0YXRpYyBib29sIGlzVmFsaWRSZW5kZXJlckZvclNlbGVj
dGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBIaWdobGlnaHREYXRhOjpS
ZW5kZXJSYW5nZSYgc2VsZWN0aW9uKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJSYW5nZUl0ZXJhdG9y
OjpjdXJyZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHJlbmRlcmVyLmNhbkJlU2VsZWN0aW9u
TGVhZigpIHx8ICZyZW5kZXJlciA9PSBzZWxlY3Rpb24uc3RhcnQoKSB8fCAmcmVuZGVyZXIgPT0g
c2VsZWN0aW9uLmVuZCgpKQotICAgICAgICAmJiByZW5kZXJlci5zZWxlY3Rpb25TdGF0ZSgpICE9
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUKLSAgICAgICAgJiYgcmVuZGVyZXIu
Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgcmV0dXJuIG1fY3VycmVudDsKIH0KIAotc3RhdGljIFJl
bmRlckJsb2NrKiBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJlcikKK1JlbmRlck9iamVjdCogUmVuZGVyUmFuZ2VJdGVyYXRvcjo6bmV4dCgpCiB7Ci0g
ICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgcmV0dXJuIGlzPFJlbmRlclZpZXc+KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRyIDogY29u
dGFpbmluZ0Jsb2NrOworICAgIFJlbmRlck9iamVjdCogY3VycmVudFNwYW4gPSBtX3NwYW5uZXJT
dGFjay5pc0VtcHR5KCkgPyBudWxscHRyIDogbV9zcGFubmVyU3RhY2subGFzdCgpLT5zcGFubmVy
KCk7CisgICAgbV9jdXJyZW50ID0gbV9jdXJyZW50LT5uZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bh
bik7CisgICAgY2hlY2tGb3JTcGFubmVyKCk7CisgICAgaWYgKCFtX2N1cnJlbnQgJiYgY3VycmVu
dFNwYW4pIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lclN0
YWNrLmxhc3QoKTsKKyAgICAgICAgbV9zcGFubmVyU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAg
ICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci0+bmV4dEluUHJlT3JkZXIoKTsKKyAgICAgICAgY2hl
Y2tGb3JTcGFubmVyKCk7CisgICAgfQorICAgIHJldHVybiBtX2N1cnJlbnQ7CiB9CiAKLXN0YXRp
YyBTZWxlY3Rpb25EYXRhIGNvbGxlY3RTZWxlY3Rpb25EYXRhKGNvbnN0IEhpZ2hsaWdodERhdGE6
OlJlbmRlclJhbmdlJiBzZWxlY3Rpb24sIGJvb2wgcmVwYWludERpZmZlcmVuY2UpCit2b2lkIFJl
bmRlclJhbmdlSXRlcmF0b3I6OmNoZWNrRm9yU3Bhbm5lcigpCiB7Ci0gICAgU2VsZWN0aW9uRGF0
YSBvbGRTZWxlY3Rpb25EYXRhIHsgc2VsZWN0aW9uLnN0YXJ0T2Zmc2V0KCksIHNlbGVjdGlvbi5l
bmRPZmZzZXQoKSwgeyB9LCB7IH0gfTsKLSAgICAvLyBCbG9ja3MgY29udGFpbiBzZWxlY3RlZCBv
YmplY3RzIGFuZCBmaWxsIGdhcHMgYmV0d2VlbiB0aGVtLCBlaXRoZXIgb24gdGhlIGxlZnQsIHJp
Z2h0LCBvciBpbiBiZXR3ZWVuIGxpbmVzIGFuZCBibG9ja3MuCi0gICAgLy8gSW4gb3JkZXIgdG8g
Z2V0IHRoZSByZXBhaW50IHJlY3QgcmlnaHQsIHdlIGhhdmUgdG8gZXhhbWluZSBsZWZ0LCBtaWRk
bGUsIGFuZCByaWdodCByZWN0cyBpbmRpdmlkdWFsbHksIHNpbmNlIG90aGVyd2lzZQotICAgIC8v
IHRoZSB1bmlvbiBvZiB0aG9zZSByZWN0cyBtaWdodCByZW1haW4gdGhlIHNhbWUgZXZlbiB3aGVu
IGNoYW5nZXMgaGF2ZSBvY2N1cnJlZC4KLSAgICBhdXRvKiBzdGFydCA9IHNlbGVjdGlvbi5zdGFy
dCgpOwotICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7Ci0gICAgaWYgKHNlbGVjdGlv
bi5lbmQoKSkKLSAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKnNlbGVjdGlvbi5l
bmQoKSwgc2VsZWN0aW9uLmVuZE9mZnNldCgpLnZhbHVlKCkpOwotICAgIEhpZ2hsaWdodEl0ZXJh
dG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHN0YXJ0KTsKLSAgICB3aGlsZSAoc3RhcnQgJiYgc3RhcnQg
IT0gc3RvcCkgewotICAgICAgICBpZiAoaXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKCpzdGFy
dCwgc2VsZWN0aW9uKSkgewotICAgICAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBm
b3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1p
bmVkIGFzIHdlbGwuCi0gICAgICAgICAgICBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVycy5zZXQo
c3RhcnQsIG1ha2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKnN0YXJ0LCB0cnVlKSk7Ci0g
ICAgICAgICAgICBpZiAocmVwYWludERpZmZlcmVuY2UpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8qIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpzdGFydCk7IGJsb2NrOyBi
bG9jayA9IGNvbnRhaW5pbmdCbG9ja0JlbG93VmlldygqYmxvY2spKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGF1dG8mIGJsb2NrSW5mbyA9IG9sZFNlbGVjdGlvbkRhdGEuYmxvY2tzLmFkZChibG9j
aywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2tJbmZvKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGJsb2NrSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPigqYmxv
Y2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBzdGFydCA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG9s
ZFNlbGVjdGlvbkRhdGE7CisgICAgaWYgKCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlcj4obV9jdXJyZW50KSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHBsYWNlaG9s
ZGVyID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCptX2N1
cnJlbnQpOworICAgIG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOworICAgIG1f
Y3VycmVudCA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKIH0KIAotSGlnaGxpZ2h0RGF0YTo6SGln
aGxpZ2h0RGF0YShSZW5kZXJWaWV3JiB2aWV3KQotICAgIDogbV9yZW5kZXJWaWV3KHZpZXcpCi0j
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgLCBtX3NlbGVjdGlvblJlY3RHYXRoZXJl
cih2aWV3KQotI2VuZGlmCitzdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckFmdGVyT2Zmc2V0
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkIG9mZnNldCkgLy8gPE1NRz4g
dXNlZCBpbiBib3RoLCBtaWdodCBzaG91bGQgbm90IGJlIHN0YXRpYwogeworICAgIGF1dG8qIGNo
aWxkID0gcmVuZGVyZXIuY2hpbGRBdChvZmZzZXQpOworICAgIHJldHVybiBjaGlsZCA/IGNoaWxk
IDogcmVuZGVyZXIubmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKCk7CiB9CiAKIHZvaWQgSGln
aGxpZ2h0RGF0YTo6c2V0UmVuZGVyUmFuZ2UoY29uc3QgUmVuZGVyUmFuZ2UmIHJlbmRlclJhbmdl
KQpAQCAtMTk4LDkgKzEyOSw5IEBAIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgSGlnaGxp
Z2h0RGF0YTo6aGlnaGxpZ2h0U3RhdGVGb3JSZW5kZXJlcihjb25zdCBSZW5kCiAgICAgaWYgKCZy
ZW5kZXJlciA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQogICAgICAgICByZXR1cm4gUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kOwogCi0gICAgYXV0byogaGlnaGxpZ2h0RW5kID0gcmVu
ZGVyZXJBZnRlck9mZnNldCgqbV9yZW5kZXJSYW5nZS5lbmQoKSwgbV9yZW5kZXJSYW5nZS5lbmRP
ZmZzZXQoKS52YWx1ZSgpKTsKKyAgICBhdXRvKiBoaWdobGlnaHRFbmQgPSByZW5kZXJlckFmdGVy
T2Zmc2V0KCptX3JlbmRlclJhbmdlLmVuZCgpLCBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpKTsK
ICAgICAKLSAgICBIaWdobGlnaHRJdGVyYXRvciBoaWdobGlnaHRJdGVyYXRvcihtX3JlbmRlclJh
bmdlLnN0YXJ0KCkpOworICAgIFJlbmRlclJhbmdlSXRlcmF0b3IgaGlnaGxpZ2h0SXRlcmF0b3Io
bV9yZW5kZXJSYW5nZS5zdGFydCgpKTsKICAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9
IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKTsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJl
ciAhPSBoaWdobGlnaHRFbmQ7IGN1cnJlbnRSZW5kZXJlciA9IGhpZ2hsaWdodEl0ZXJhdG9yLm5l
eHQoKSkgewogICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVyID09IG1fcmVuZGVyUmFuZ2Uuc3Rh
cnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjEyLDIwNyArMTQzLDQgQEAgUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBIaWdobGlnaHREYXRhOjpoaWdobGlnaHRTdGF0ZUZvclJl
bmRlcmVyKGNvbnN0IFJlbmQKICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZTo6Tm9uZTsKIH0KIAotdm9pZCBIaWdobGlnaHREYXRhOjpzZXRTZWxlY3Rpb24oY29uc3QgUmVu
ZGVyUmFuZ2UmIHNlbGVjdGlvbiwgUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKLXsKLSAg
ICBpZiAoKHNlbGVjdGlvbi5zdGFydCgpICYmICFzZWxlY3Rpb24uZW5kKCkpIHx8IChzZWxlY3Rp
b24uZW5kKCkgJiYgIXNlbGVjdGlvbi5zdGFydCgpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8v
IEp1c3QgcmV0dXJuIGlmIHRoZSBzZWxlY3Rpb24gaGFzbid0IGNoYW5nZWQuCi0gICAgYXV0byBp
c0NhcmV0ID0gbV9yZW5kZXJWaWV3LmZyYW1lKCkuc2VsZWN0aW9uKCkuaXNDYXJldCgpOwotICAg
IGlmIChzZWxlY3Rpb24gPT0gbV9yZW5kZXJSYW5nZSAmJiBtX3NlbGVjdGlvbldhc0NhcmV0ID09
IGlzQ2FyZXQpCi0gICAgICAgIHJldHVybjsKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykK
LSAgICAvLyBDbGVhciB0aGUgY3VycmVudCByZWN0cyBhbmQgY3JlYXRlIGEgbm90aWZpZXIgZm9y
IHRoZSBuZXcgcmVjdHMgd2UgYXJlIGFib3V0IHRvIGdhdGhlci4KLSAgICAvLyBUaGUgTm90aWZp
ZXIgdXBkYXRlcyB0aGUgRWRpdG9yIHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRl
c3Ryb3llZC4KLSAgICBhdXRvIHJlY3ROb3RpZmllciA9IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVy
LmNsZWFyQW5kQ3JlYXRlTm90aWZpZXIoKTsKLSNlbmRpZgotICAgIG1fc2VsZWN0aW9uV2FzQ2Fy
ZXQgPSBpc0NhcmV0OwotICAgIGFwcGx5U2VsZWN0aW9uKHNlbGVjdGlvbiwgYmxvY2tSZXBhaW50
TW9kZSk7Ci19Ci0KLXZvaWQgSGlnaGxpZ2h0RGF0YTo6Y2xlYXJTZWxlY3Rpb24oKQotewotICAg
IG1fcmVuZGVyVmlldy5sYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7Ci0gICAg
c2V0U2VsZWN0aW9uKHsgfSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWludE1vZGU6Ok5ld01pbnVzT2xk
KTsKLX0KLQotdm9pZCBIaWdobGlnaHREYXRhOjpyZXBhaW50U2VsZWN0aW9uKCkgY29uc3QKLXsK
LSAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOwotICAgIFJlbmRlck9i
amVjdCogZW5kID0gbnVsbHB0cjsKLSAgICBpZiAobV9yZW5kZXJSYW5nZS5lbmQoKSkKLSAgICAg
ICAgZW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgqbV9yZW5kZXJSYW5nZS5lbmQoKSwgbV9yZW5k
ZXJSYW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKLSAgICBIaWdobGlnaHRJdGVyYXRvciBoaWdo
bGlnaHRJdGVyYXRvcihtX3JlbmRlclJhbmdlLnN0YXJ0KCkpOwotICAgIGZvciAoYXV0byogcmVu
ZGVyZXIgPSBoaWdobGlnaHRJdGVyYXRvci5jdXJyZW50KCk7IHJlbmRlcmVyICYmIHJlbmRlcmVy
ICE9IGVuZDsgcmVuZGVyZXIgPSBoaWdobGlnaHRJdGVyYXRvci5uZXh0KCkpIHsKLSAgICAgICAg
aWYgKCFyZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgcmVuZGVyZXIgIT0gbV9yZW5k
ZXJSYW5nZS5zdGFydCgpICYmIHJlbmRlcmVyICE9IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5zZWxlY3Rpb25TdGF0ZSgp
ID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqcmVuZGVyZXIsIHRydWUpLnJlcGFp
bnQoKTsKLSAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGlu
ZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCi0g
ICAgICAgIGZvciAoYXV0byogYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKnJlbmRl
cmVyKTsgYmxvY2s7IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpibG9jaykpIHsK
LSAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkQmxvY2tzLmFkZChibG9jaykuaXNOZXdFbnRyeSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8o
KmJsb2NrLCB0cnVlKS5yZXBhaW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUludFJlY3Qg
SGlnaGxpZ2h0RGF0YTo6Y29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9W
aXNpYmxlQ29udGVudCkgY29uc3QKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2VsZWN0aW9uLCBz
dHJlYW0gPDwgIkhpZ2hsaWdodERhdGE6OmNvbGxlY3RCb3VuZHMgKGNsaXAgdG8gdmlzaWJsZSAi
IDw8IChjbGlwVG9WaXNpYmxlQ29udGVudCA9PSBDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzID8g
InllcyIgOiAibm8iKSk7Ci0KLSAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJlck1hcCByZW5kZXJl
cnM7Ci0gICAgYXV0byogc3RhcnQgPSBtX3JlbmRlclJhbmdlLnN0YXJ0KCk7Ci0gICAgUmVuZGVy
T2JqZWN0KiBzdG9wID0gbnVsbHB0cjsKLSAgICBpZiAobV9yZW5kZXJSYW5nZS5lbmQoKSkKLSAg
ICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKm1fcmVuZGVyUmFuZ2UuZW5kKCksIG1f
cmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkudmFsdWUoKSk7Ci0KLSAgICBIaWdobGlnaHRJdGVyYXRv
ciBoaWdobGlnaHRJdGVyYXRvcihzdGFydCk7Ci0gICAgd2hpbGUgKHN0YXJ0ICYmIHN0YXJ0ICE9
IHN0b3ApIHsKLSAgICAgICAgaWYgKChzdGFydC0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgc3Rh
cnQgPT0gbV9yZW5kZXJSYW5nZS5zdGFydCgpIHx8IHN0YXJ0ID09IG1fcmVuZGVyUmFuZ2UuZW5k
KCkpCi0gICAgICAgICAgICAmJiBzdGFydC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKSB7Ci0gICAgICAgICAgICAvLyBCbG9ja3MgYXJlIHJl
c3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdpbiBnYXBzLiBUaGV5IG11
c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KLSAgICAgICAgICAgIHJlbmRlcmVycy5zZXQoc3RhcnQs
IG1ha2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKnN0YXJ0LCBjbGlwVG9WaXNpYmxlQ29u
dGVudCA9PSBDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKSk7Ci0gICAgICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0gPDwgIiBhZGRlZCBzdGFydCAiIDw8ICpzdGFydCA8
PCAiIHdpdGggcmVjdCAiIDw8IHJlbmRlcmVycy5nZXQoc3RhcnQpLT5yZWN0KCkpOwotCi0gICAg
ICAgICAgICBhdXRvKiBibG9jayA9IHN0YXJ0LT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAg
ICAgIHdoaWxlIChibG9jayAmJiAhaXM8UmVuZGVyVmlldz4oKmJsb2NrKSkgewotICAgICAgICAg
ICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiIGFkZGVkIGJsb2Nr
ICIgPDwgKmJsb2NrKTsKLSAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2Vs
ZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IHJlbmRlcmVycy5hZGQoYmxvY2ssIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVl
PFJlbmRlclNlbGVjdGlvbkluZm8+KCpibG9jaywgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPT0gQ2xp
cFRvVmlzaWJsZUNvbnRlbnQ6Olllcyk7Ci0gICAgICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KFNlbGVjdGlvbiwgc3RyZWFtIDw8ICIgYWRkZWQgY29udGFpbmluZyBibG9jayAiIDw8ICpibG9j
ayA8PCAiIHdpdGggcmVjdCAiIDw8IGJsb2NrSW5mby0+cmVjdCgpKTsKLSAgICAgICAgICAgICAg
ICBibG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBzdGFydCA9IGhpZ2hsaWdodEl0ZXJhdG9yLm5leHQoKTsKLSAgICB9Ci0K
LSAgICAvLyBOb3cgY3JlYXRlIGEgc2luZ2xlIGJvdW5kaW5nIGJveCByZWN0IHRoYXQgZW5jbG9z
ZXMgdGhlIHdob2xlIHNlbGVjdGlvbi4KLSAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3Q7Ci0g
ICAgZm9yIChhdXRvJiBpbmZvIDogcmVuZGVyZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIC8vIFJl
bmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJl
cGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdlIGNvb3JkaW5hdGVzLgotICAgICAgICBMYXlv
dXRSZWN0IGN1cnJlbnRSZWN0ID0gaW5mby0+cmVjdCgpOwotICAgICAgICBpZiAoY3VycmVudFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGF1dG8q
IHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBhaW50Q29udGFpbmVyKCkpIHsKLSAgICAgICAg
ICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QgPSBjdXJyZW50UmVjdDsKLSAgICAgICAgICAgIEZsb2F0
UXVhZCBhYnNRdWFkID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChsb2Nh
bFJlY3QpOwotICAgICAgICAgICAgY3VycmVudFJlY3QgPSBhYnNRdWFkLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0g
PDwgIiByZWN0ICIgPDwgbG9jYWxSZWN0IDw8ICIgbWFwcGVkIHRvICIgPDwgY3VycmVudFJlY3Qg
PDwgIiBpbiBjb250YWluZXIgIiA8PCAqcmVwYWludENvbnRhaW5lcik7Ci0gICAgICAgIH0KLSAg
ICAgICAgc2VsZWN0aW9uUmVjdC51bml0ZShjdXJyZW50UmVjdCk7Ci0gICAgfQotCi0gICAgTE9H
X1dJVEhfU1RSRUFNKFNlbGVjdGlvbiwgc3RyZWFtIDw8ICIgZmluYWwgcmVjdCAiIDw8IHNlbGVj
dGlvblJlY3QpOwotICAgIHJldHVybiBzbmFwcGVkSW50UmVjdChzZWxlY3Rpb25SZWN0KTsKLX0K
LQotdm9pZCBIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYg
bmV3U2VsZWN0aW9uLCBSZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQotewotICAgIGF1dG8g
b2xkU2VsZWN0aW9uRGF0YSA9IGNvbGxlY3RTZWxlY3Rpb25EYXRhKG1fcmVuZGVyUmFuZ2UsIGJs
b2NrUmVwYWludE1vZGUgPT0gUmVwYWludE1vZGU6Ok5ld1hPUk9sZCk7Ci0gICAgLy8gUmVtb3Zl
IGN1cnJlbnQgc2VsZWN0aW9uLgotICAgIGZvciAoYXV0byogcmVuZGVyZXIgOiBvbGRTZWxlY3Rp
b25EYXRhLnJlbmRlcmVycy5rZXlzKCkpCi0gICAgICAgIHJlbmRlcmVyLT5zZXRTZWxlY3Rpb25T
dGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpOwotICAgIG1f
cmVuZGVyUmFuZ2UgPSBuZXdTZWxlY3Rpb247Ci0gICAgYXV0byogc2VsZWN0aW9uU3RhcnQgPSBt
X3JlbmRlclJhbmdlLnN0YXJ0KCk7Ci0gICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24gc3RhdHVz
IG9mIGFsbCBvYmplY3RzIGJldHdlZW4gc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZAot
ICAgIGlmIChzZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25TdGFydCA9PSBtX3JlbmRlclJhbmdl
LmVuZCgpKQotICAgICAgICBzZWxlY3Rpb25TdGFydC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRl
ZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpCb3RoKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgaWYgKHNlbGVjdGlvblN0YXJ0KQotICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQtPnNldFNl
bGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQp
OwotICAgICAgICBpZiAoYXV0byogZW5kID0gbV9yZW5kZXJSYW5nZS5lbmQoKSkKLSAgICAgICAg
ICAgIGVuZC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdo
dFN0YXRlOjpFbmQpOwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0g
bnVsbHB0cjsKLSAgICBhdXRvKiBzZWxlY3Rpb25EYXRhRW5kID0gbV9yZW5kZXJSYW5nZS5lbmQo
KTsKLSAgICBpZiAoc2VsZWN0aW9uRGF0YUVuZCkKLSAgICAgICAgc2VsZWN0aW9uRW5kID0gcmVu
ZGVyZXJBZnRlck9mZnNldCgqc2VsZWN0aW9uRGF0YUVuZCwgbV9yZW5kZXJSYW5nZS5lbmRPZmZz
ZXQoKS52YWx1ZSgpKTsKLSAgICBIaWdobGlnaHRJdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihz
ZWxlY3Rpb25TdGFydCk7Ci0gICAgZm9yIChhdXRvKiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rp
b25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25F
bmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAg
ICBpZiAoY3VycmVudFJlbmRlcmVyID09IHNlbGVjdGlvblN0YXJ0IHx8IGN1cnJlbnRSZW5kZXJl
ciA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmICghY3VycmVudFJlbmRlcmVyLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBjdXJyZW50UmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRlSWZO
ZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlKTsKLSAgICB9Ci0KLSAg
ICBpZiAoYmxvY2tSZXBhaW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykKLSAgICAgICAg
bV9yZW5kZXJWaWV3LmxheWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7Ci0K
LSAgICAvLyBOb3cgdGhhdCB0aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQgZm9y
IHRoZSBuZXcgb2JqZWN0cywgd2FsayB0aGVtIGFnYWluIGFuZAotICAgIC8vIHB1dCB0aGVtIGlu
IHRoZSBuZXcgb2JqZWN0cyBsaXN0LgotICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlcmVyTWFwIG5l
d1NlbGVjdGVkUmVuZGVyZXJzOwotICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlckJsb2NrTWFwIG5l
d1NlbGVjdGVkQmxvY2tzOwotICAgIHNlbGVjdGlvbkl0ZXJhdG9yID0gSGlnaGxpZ2h0SXRlcmF0
b3Ioc2VsZWN0aW9uU3RhcnQpOwotICAgIGZvciAoYXV0byogY3VycmVudFJlbmRlcmVyID0gc2Vs
ZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0
aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKLSAg
ICAgICAgaWYgKGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbigqY3VycmVudFJlbmRlcmVyLCBt
X3JlbmRlclJhbmdlKSkgewotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVj
dGlvbkluZm8+IHNlbGVjdGlvbkluZm8gPSBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+
KCpjdXJyZW50UmVuZGVyZXIsIHRydWUpOwotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQot
ICAgICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogc2VsZWN0aW9uSW5mby0+Y29sbGVjdGVkU2Vs
ZWN0aW9uUmVjdHMoKSkKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5h
ZGRSZWN0KHNlbGVjdGlvbkluZm8tPnJlcGFpbnRDb250YWluZXIoKSwgcmVjdCk7Ci0gICAgICAg
ICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKLSAgICAgICAg
ICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5zZXRUZXh0T25seShmYWxzZSk7Ci0jZW5k
aWYKLSAgICAgICAgICAgIG5ld1NlbGVjdGVkUmVuZGVyZXJzLnNldChjdXJyZW50UmVuZGVyZXIs
IFdURk1vdmUoc2VsZWN0aW9uSW5mbykpOwotICAgICAgICAgICAgYXV0byogY29udGFpbmluZ0Js
b2NrID0gY3VycmVudFJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdo
aWxlIChjb250YWluaW5nQmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2sp
KSB7Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9u
SW5mbz4mIGJsb2NrSW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjb250YWluaW5nQmxvY2ss
IG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZv
KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBibG9ja0luZm8g
PSBtYWtlVW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNvbnRhaW5pbmdCbG9jayk7
Ci0gICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250
YWluaW5nQmxvY2soKTsKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAgICAgICAg
ICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRHYXBSZWN0cyhibG9ja0luZm8tPnJlcGFp
bnRDb250YWluZXIoKSwgYmxvY2tJbmZvLT5yZWN0cygpKTsKLSNlbmRpZgotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWlu
dE1vZGU6Ok5vdGhpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEhhdmUgYW55IG9mIHRo
ZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0
aW9uPwotICAgIGZvciAoYXV0byYgc2VsZWN0ZWRSZW5kZXJlckluZm8gOiBvbGRTZWxlY3Rpb25E
YXRhLnJlbmRlcmVycykgewotICAgICAgICBhdXRvKiByZW5kZXJlciA9IHNlbGVjdGVkUmVuZGVy
ZXJJbmZvLmtleTsKLSAgICAgICAgYXV0byogbmV3SW5mbyA9IG5ld1NlbGVjdGVkUmVuZGVyZXJz
LmdldChyZW5kZXJlcik7Ci0gICAgICAgIGF1dG8qIG9sZEluZm8gPSBzZWxlY3RlZFJlbmRlcmVy
SW5mby52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3Qo
KSAhPSBuZXdJbmZvLT5yZWN0KCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0
ZSgpCi0gICAgICAgICAgICB8fCAobV9yZW5kZXJSYW5nZS5zdGFydCgpID09IHJlbmRlcmVyICYm
IG9sZFNlbGVjdGlvbkRhdGEuc3RhcnRPZmZzZXQgIT0gbV9yZW5kZXJSYW5nZS5zdGFydE9mZnNl
dCgpKQotICAgICAgICAgICAgfHwgKG1fcmVuZGVyUmFuZ2UuZW5kKCkgPT0gcmVuZGVyZXIgJiYg
b2xkU2VsZWN0aW9uRGF0YS5lbmRPZmZzZXQgIT0gbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKSkp
IHsKLSAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQoKTsKLSAgICAgICAgICAgIGlmIChuZXdJ
bmZvKSB7Ci0gICAgICAgICAgICAgICAgbmV3SW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAg
ICAgIG5ld1NlbGVjdGVkUmVuZGVyZXJzLnJlbW92ZShyZW5kZXJlcik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbnkgbmV3IG9iamVjdHMgdGhhdCByZW1haW4g
d2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBvYmplY3RzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQg
dG8gYmUgdXBkYXRlZC4KLSAgICBmb3IgKGF1dG8mIHNlbGVjdGVkUmVuZGVyZXJJbmZvIDogbmV3
U2VsZWN0ZWRSZW5kZXJlcnMpCi0gICAgICAgIHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLT5y
ZXBhaW50KCk7Ci0KLSAgICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIGJsb2NrcyBjaGFuZ2VkPwot
ICAgIGZvciAoYXV0byYgc2VsZWN0ZWRCbG9ja0luZm8gOiBvbGRTZWxlY3Rpb25EYXRhLmJsb2Nr
cykgewotICAgICAgICBhdXRvKiBibG9jayA9IHNlbGVjdGVkQmxvY2tJbmZvLmtleTsKLSAgICAg
ICAgYXV0byogbmV3SW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmdldChibG9jayk7Ci0gICAgICAg
IGF1dG8qIG9sZEluZm8gPSBzZWxlY3RlZEJsb2NrSW5mby52YWx1ZS5nZXQoKTsKLSAgICAgICAg
aWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3RzKCkgIT0gbmV3SW5mby0+cmVjdHMoKSB8fCBv
bGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkpIHsKLSAgICAgICAgICAgIG9sZElu
Zm8tPnJlcGFpbnQoKTsKLSAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7Ci0gICAgICAgICAgICAg
ICAgbmV3SW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkQmxvY2tz
LnJlbW92ZShibG9jayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBBbnkgbmV3IGJsb2NrcyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIGJs
b2NrcyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCi0gICAgZm9yIChhdXRv
JiBzZWxlY3RlZEJsb2NrSW5mbyA6IG5ld1NlbGVjdGVkQmxvY2tzKQotICAgICAgICBzZWxlY3Rl
ZEJsb2NrSW5mby52YWx1ZS0+cmVwYWludCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaAppbmRleCBlOTdiY2Y0ZmU2
YWE0NjA0YWVlMzkwZmI3Mzc1YzJlZGI4OGFlYTVkLi5lNjgxMThiN2M5ZjBmOGQ2ODk1NDI4MjZl
ZmExMGZkMzY0OWU2N2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGln
aGxpZ2h0RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRh
LmgKQEAgLTMwLDc5ICszMCw3MCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlJlbmRl
clNlbGVjdGlvbkluZm8uaCIKLQotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotI2luY2x1
ZGUgIlNlbGVjdGlvblJlY3RHYXRoZXJlci5oIgotI2VuZGlmCisjaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEhpZ2hsaWdodFJhbmdlRGF0
YTsKLSAgICAKLWNsYXNzIEhpZ2hsaWdodERhdGEgeworY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5T
cGFubmVyUGxhY2Vob2xkZXI7CisKK2NsYXNzIFJlbmRlclJhbmdlIHsKIHB1YmxpYzoKLSAgICBI
aWdobGlnaHREYXRhKFJlbmRlclZpZXcmKTsKLSAgICAKLSAgICBjbGFzcyBSZW5kZXJSYW5nZSB7
Ci0gICAgcHVibGljOgotICAgICAgICBSZW5kZXJSYW5nZSgpID0gZGVmYXVsdDsKLSAgICAgICAg
UmVuZGVyUmFuZ2UoUmVuZGVyT2JqZWN0KiBzdGFydCwgUmVuZGVyT2JqZWN0KiBlbmQsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAgICAgICAgICA6IG1fc3Rh
cnQobWFrZVdlYWtQdHIoc3RhcnQpKQotICAgICAgICAgICAgLCBtX2VuZChtYWtlV2Vha1B0cihl
bmQpKQotICAgICAgICAgICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQotICAgICAgICAg
ICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgfQorICAgIFJl
bmRlclJhbmdlKCkgPSBkZWZhdWx0OworICAgIFJlbmRlclJhbmdlKFJlbmRlck9iamVjdCogc3Rh
cnQsIFJlbmRlck9iamVjdCogZW5kLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0KQorICAgICAgICA6IG1fc3RhcnQobWFrZVdlYWtQdHIoc3RhcnQpKQorICAgICAgICAs
IG1fZW5kKG1ha2VXZWFrUHRyKGVuZCkpCisgICAgICAgICwgbV9zdGFydE9mZnNldChzdGFydE9m
ZnNldCkKKyAgICAgICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCisgICAgeworICAgIH0KIAot
ICAgICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC5nZXQo
KTsgfQotICAgICAgICBSZW5kZXJPYmplY3QqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLmdl
dCgpOyB9Ci0gICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kT2Zmc2V0OyB9CisgICAgUmVuZGVyT2JqZWN0KiBz
dGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQuZ2V0KCk7IH0KKyAgICBSZW5kZXJPYmplY3Qq
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLmdldCgpOyB9CisgICAgdW5zaWduZWQgc3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CisgICAgdW5zaWduZWQgZW5k
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0KIAotICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUmVuZGVyUmFuZ2UmIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9zdGFydCA9PSBvdGhlci5tX3N0YXJ0ICYmIG1fZW5kID09IG90aGVy
Lm1fZW5kICYmIG1fc3RhcnRPZmZzZXQgPT0gb3RoZXIubV9zdGFydE9mZnNldCAmJiBtX2VuZE9m
ZnNldCA9PSBvdGhlci5tX2VuZE9mZnNldDsKLSAgICAgICAgfQorICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBSZW5kZXJSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9zdGFydCA9PSBvdGhlci5tX3N0YXJ0ICYmIG1fZW5kID09IG90aGVyLm1fZW5kICYmIG1fc3Rh
cnRPZmZzZXQgPT0gb3RoZXIubV9zdGFydE9mZnNldCAmJiBtX2VuZE9mZnNldCA9PSBvdGhlci5t
X2VuZE9mZnNldDsKKyAgICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBXZWFrUHRyPFJlbmRl
ck9iamVjdD4gbV9zdGFydDsKLSAgICAgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fZW5kOwot
ICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zdGFydE9mZnNldDsKLSAgICAgICAgT3B0aW9u
YWw8dW5zaWduZWQ+IG1fZW5kT2Zmc2V0OwotICAgIH07Citwcml2YXRlOgorICAgIFdlYWtQdHI8
UmVuZGVyT2JqZWN0PiBtX3N0YXJ0OworICAgIFdlYWtQdHI8UmVuZGVyT2JqZWN0PiBtX2VuZDsK
KyAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0IHsgMCB9OworICAgIHVuc2lnbmVkIG1fZW5kT2Zm
c2V0IHsgMCB9OworfTsKICAgICAKK2NsYXNzIFJlbmRlclJhbmdlSXRlcmF0b3IgeworcHVibGlj
OgorICAgIFJlbmRlclJhbmdlSXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBzdGFydCk7CisgICAgUmVu
ZGVyT2JqZWN0KiBjdXJyZW50KCkgY29uc3Q7CisgICAgUmVuZGVyT2JqZWN0KiBuZXh0KCk7Cisg
ICAgCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tGb3JTcGFubmVyKCk7CisgICAgCisgICAgUmVu
ZGVyT2JqZWN0KiBtX2N1cnJlbnQgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFJlbmRlck11bHRp
Q29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Cit9OworCitjbGFzcyBI
aWdobGlnaHREYXRhIHsKK3B1YmxpYzoKICAgICB2b2lkIHNldFJlbmRlclJhbmdlKGNvbnN0IFJl
bmRlclJhbmdlJik7CiAgICAgYm9vbCBzZXRSZW5kZXJSYW5nZShjb25zdCBIaWdobGlnaHRSYW5n
ZURhdGEmKTsgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwuCi0gICAgCi0gICAgZW51bSBj
bGFzcyBSZXBhaW50TW9kZSB7IE5ld1hPUk9sZCwgTmV3TWludXNPbGQsIE5vdGhpbmcgfTsKLSAg
ICB2b2lkIHNldFNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYsIFJlcGFpbnRNb2RlID0gUmVw
YWludE1vZGU6Ok5ld1hPUk9sZCk7CiAgICAgY29uc3QgUmVuZGVyUmFuZ2UmIGdldCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVuZGVyUmFuZ2U7IH0KIAogICAgIFJlbmRlck9iamVjdCogc3RhcnQoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlclJhbmdlLnN0YXJ0KCk7IH0KICAgICBSZW5kZXJPYmplY3Qq
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUmFuZ2UuZW5kKCk7IH0KIAotICAgIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBBU1NFUlQobV9yZW5kZXJSYW5nZS5zdGFydE9mZnNl
dCgpKTsgcmV0dXJuIG1fcmVuZGVyUmFuZ2Uuc3RhcnRPZmZzZXQoKS52YWx1ZU9yKDApOyB9Ci0g
ICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyBBU1NFUlQobV9yZW5kZXJSYW5nZS5lbmRP
ZmZzZXQoKSk7IHJldHVybiBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpLnZhbHVlT3IoMCk7IH0K
KyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUmFuZ2Uu
c3RhcnRPZmZzZXQoKTsgfQorICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCk7IH0KIAotICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24o
KTsKLSAgICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGNvbGxlY3RCb3VuZHMoQ2xp
cFRvVmlzaWJsZUNvbnRlbnQ6Ok5vKTsgfQotICAgIEludFJlY3QgYm91bmRzQ2xpcHBlZFRvVmlz
aWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVD
b250ZW50OjpZZXMpOyB9Ci0gICAgdm9pZCByZXBhaW50U2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAg
CiAgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBoaWdobGlnaHRTdGF0ZUZvclJlbmRl
cmVyKGNvbnN0IFJlbmRlck9iamVjdCYpOwogCi1wcml2YXRlOgotICAgIGVudW0gY2xhc3MgQ2xp
cFRvVmlzaWJsZUNvbnRlbnQgeyBZZXMsIE5vIH07Ci0gICAgSW50UmVjdCBjb2xsZWN0Qm91bmRz
KENsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdDsKLSAgICB2b2lkIGFwcGx5U2VsZWN0aW9uKGNv
bnN0IFJlbmRlclJhbmdlJiwgUmVwYWludE1vZGUpOwotCi0gICAgY29uc3QgUmVuZGVyVmlldyYg
bV9yZW5kZXJWaWV3OwotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIFNlbGVjdGlv
blJlY3RHYXRoZXJlciBtX3NlbGVjdGlvblJlY3RHYXRoZXJlcjsKLSNlbmRpZgorcHJvdGVjdGVk
OgogICAgIFJlbmRlclJhbmdlIG1fcmVuZGVyUmFuZ2U7Ci0gICAgYm9vbCBtX3NlbGVjdGlvbldh
c0NhcmV0IHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCAxMjY3ZjAxZmQ1MTk3YTUy
OTBmNjI0YTIzMWJlYmUwNzZkNjQ0YjA1Li5jYmMwM2E3ZGI5OGMxMTUzNmIzNzEyNzNhZmE4YTM1
MDM2ZDE2NzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CkBAIC0xMDUwLDYgKzEwNTAsNyBAQCBWZWN0b3I8TWFya2VkVGV4dD4gSW5saW5lVGV4dEJveDo6
Y29sbGVjdE1hcmtlZFRleHRzRm9ySGlnaGxpZ2h0cyhUZXh0UGFpbnRQaGFzZQogICAgIFZlY3Rv
cjxNYXJrZWRUZXh0PiBtYXJrZWRUZXh0czsKICAgICBhdXRvJiBwYXJlbnRSZW5kZXJlciA9IHBh
cmVudCgpLT5yZW5kZXJlcigpOwogICAgIGF1dG8mIHBhcmVudFN0eWxlID0gcGFyZW50UmVuZGVy
ZXIuc3R5bGUoKTsKKyAgICBIaWdobGlnaHREYXRhIGhpZ2hsaWdodERhdGE7CiAgICAgZm9yIChh
dXRvJiBoaWdobGlnaHQgOiByZW5kZXJlcigpLmRvY3VtZW50KCkuaGlnaGxpZ2h0TWFwKCkubWFw
KCkpIHsKICAgICAgICAgYXV0byByZW5kZXJTdHlsZSA9IHBhcmVudFJlbmRlcmVyLmdldFVuY2Fj
aGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6SGlnaGxpZ2h0LCBoaWdobGlnaHQua2V5IH0sICZw
YXJlbnRTdHlsZSk7CiAgICAgICAgIGlmICghcmVuZGVyU3R5bGUpCkBAIC0xMDU3LDIyICsxMDU4
LDEyIEBAIFZlY3RvcjxNYXJrZWRUZXh0PiBJbmxpbmVUZXh0Qm94Ojpjb2xsZWN0TWFya2VkVGV4
dHNGb3JIaWdobGlnaHRzKFRleHRQYWludFBoYXNlCiAgICAgICAgIGlmIChyZW5kZXJTdHlsZS0+
dGV4dERlY29yYXRpb25zSW5FZmZlY3QoKS5pc0VtcHR5KCkgJiYgcGhhc2UgPT0gVGV4dFBhaW50
UGhhc2U6OkRlY29yYXRpb24pCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChh
dXRvJiByYW5nZURhdGEgOiBoaWdobGlnaHQudmFsdWUtPnJhbmdlc0RhdGEoKSkgewotICAgICAg
ICAgICAgaWYgKHJhbmdlRGF0YS0+c3RhcnRQb3NpdGlvbiAmJiByYW5nZURhdGEtPmVuZFBvc2l0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHJhbmdlRGF0
YS0+c3RhcnRQb3NpdGlvbi52YWx1ZSgpOwotICAgICAgICAgICAgICAgIFBvc2l0aW9uIGVuZFBv
c2l0aW9uID0gcmFuZ2VEYXRhLT5lbmRQb3NpdGlvbi52YWx1ZSgpOwotICAgICAgICAgICAgICAg
IGF1dG8qIHN0YXJ0UmVuZGVyZXIgPSBzdGFydFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBzdGFydFBv
c2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byog
ZW5kUmVuZGVyZXIgPSBlbmRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IGVuZFBvc2l0aW9uLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGFydFJlbmRlcmVyIHx8
ICFlbmRSZW5kZXJlcikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgICAgICBhdXRvIGhpZ2hsaWdodERhdGEgPSBIaWdobGlnaHREYXRhKHJlbmRlcmVyKCkudmll
dygpKTsKLSAgICAgICAgICAgICAgICBoaWdobGlnaHREYXRhLnNldFJlbmRlclJhbmdlKHsgc3Rh
cnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgfSk7Ci0gICAg
ICAgICAgICAgICAgYXV0byBbaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZF0gPSBoaWdobGln
aHRTdGFydEVuZChoaWdobGlnaHREYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0
U3RhcnQgPCBoaWdobGlnaHRFbmQpCi0gICAgICAgICAgICAgICAgICAgIG1hcmtlZFRleHRzLmFw
cGVuZCh7IGhpZ2hsaWdodFN0YXJ0LCBoaWdobGlnaHRFbmQsIE1hcmtlZFRleHQ6OkhpZ2hsaWdo
dCwgbnVsbHB0ciwgaGlnaGxpZ2h0LmtleSB9KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICghaGlnaGxpZ2h0RGF0YS5zZXRSZW5kZXJSYW5nZShyYW5nZURhdGEpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIFtoaWdobGln
aHRTdGFydCwgaGlnaGxpZ2h0RW5kXSA9IGhpZ2hsaWdodFN0YXJ0RW5kKGhpZ2hsaWdodERhdGEp
OworICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFN0YXJ0IDwgaGlnaGxpZ2h0RW5kKQorICAgICAg
ICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZCh7IGhpZ2hsaWdodFN0YXJ0LCBoaWdobGlnaHRF
bmQsIE1hcmtlZFRleHQ6OkhpZ2hsaWdodCwgbnVsbHB0ciwgaGlnaGxpZ2h0LmtleSB9KTsKICAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbWFya2VkVGV4dHM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRleCA3N2E2OGUwNmQ2YTgxNTVlMDdkN2Yy
NWY4ODUyZDE4NDUyZjI3OWYxLi42Nzc1OWUyMjM3YTYyNzRkYTQ5YzEzNzJhNThhNGYyZjJiZjc1
NzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAg
LTE1Miw3ICsxNTIsNyBAQCBpbmxpbmUgc3RhdGljIGJvb2wgZHJhZ2dlZENvbnRlbnRDb250YWlu
c1JlcGxhY2VkRWxlbWVudChjb25zdCBWZWN0b3I8UmVuZGVyZWREbwogCiBDb2xvciBSZW5kZXJS
ZXBsYWNlZDo6Y2FsY3VsYXRlSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAogewotICAgIGF1dG8gaGln
aGxpZ2h0RGF0YSA9IEhpZ2hsaWdodERhdGEodmlldygpKTsKKyAgICBIaWdobGlnaHREYXRhIGhp
Z2hsaWdodERhdGE7CiAgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBkb2N1bWVudCgpLmhpZ2hs
aWdodE1hcCgpLm1hcCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgcmFuZ2VEYXRhIDogaGlnaGxp
Z2h0LnZhbHVlLT5yYW5nZXNEYXRhKCkpIHsKICAgICAgICAgICAgIGlmICghaGlnaGxpZ2h0RGF0
YS5zZXRSZW5kZXJSYW5nZShyYW5nZURhdGEpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgKaW5kZXggYmNhMWIxZGYwYmI3ZmEzMzIxMzNhNzczNGRjM2VlZDJjNTk2NjVkNC4uNDc4
MWU0ZjFkMjRlMDM5MGRlMmJkMTE4MzE5OWM5ZjI4NWNkOWQ4ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCkBAIC0yMiwxMCArMjIsMTAgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSGlnaGxpZ2h0RGF0YS5oIgogI2luY2x1
ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgogI2luY2x1ZGUgIlJl
bmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlNlbGVjdGlvblJhbmdlRGF0YS5oIgogI2luY2x1ZGUg
PG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFz
aFNldC5oPgpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuIHRoZSByZW5k
ZXJlciB3aG9zZSBiYWNrZ3JvdW5kIHN0eWxlIGlzIHVzZWQgdG8gcGFpbnQgdGhlIHJvb3QgYmFj
a2dyb3VuZC4KICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclJvb3RCYWNrZ3JvdW5kKCkg
Y29uc3Q7CiAKLSAgICBIaWdobGlnaHREYXRhJiBzZWxlY3Rpb24oKSB7IHJldHVybiBtX3NlbGVj
dGlvbjsgfQorICAgIFNlbGVjdGlvblJhbmdlRGF0YSYgc2VsZWN0aW9uKCkgeyByZXR1cm4gbV9z
ZWxlY3Rpb247IH0KIAogICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdDsKIApAQCAtMjI0LDcgKzIy
NCw3IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9yZW5kZXJlckNvdW50IHsgMSB9OwogCiAg
ICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVnaW9uPiBtX2FjY3VtdWxhdGVkUmVwYWludFJl
Z2lvbjsKLSAgICBIaWdobGlnaHREYXRhIG1fc2VsZWN0aW9uOworICAgIFNlbGVjdGlvblJhbmdl
RGF0YSBtX3NlbGVjdGlvbjsKIAogICAgIFdlYWtQdHI8UmVuZGVyTGF5ZXI+IG1fc3R5bGVDaGFu
Z2VMYXllck11dGF0aW9uUm9vdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NlbGVjdGlvblJhbmdlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2Vs
ZWN0aW9uUmFuZ2VEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDk3MTY5ZTI3YmQ0YTcyMDcxNjM3ZjYw
YzBkMWZmOTFhNTcxNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NlbGVjdGlvblJhbmdlRGF0YS5jcHAKQEAgLTAsMCArMSwzMjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uUmFuZ2VEYXRhLmgi
CisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisj
aW5jbHVkZSAiSGlnaGxpZ2h0UmFuZ2VHcm91cC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJQb3NpdGlvbi5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworCitzdHJ1
Y3QgU2VsZWN0aW9uQ29udGV4dCB7CisgICAgCisgICAgdXNpbmcgUmVuZGVyZXJNYXAgPSBIYXNo
TWFwPFJlbmRlck9iamVjdCosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPj47
CisgICAgdXNpbmcgUmVuZGVyQmxvY2tNYXAgPSBIYXNoTWFwPGNvbnN0IFJlbmRlckJsb2NrKiwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4+OworCisgICAgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0OworICAgIFJlbmRlcmVyTWFw
IHJlbmRlcmVyczsKKyAgICBSZW5kZXJCbG9ja01hcCBibG9ja3M7Cit9OworCit9CisKK3N0YXRp
YyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyQWZ0ZXJPZmZzZXQoY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJlciwgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIGF1dG8qIGNoaWxkID0gcmVuZGVyZXIu
Y2hpbGRBdChvZmZzZXQpOworICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogcmVuZGVyZXIubmV4
dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKCk7Cit9CisKK3N0YXRpYyBib29sIGlzVmFsaWRSZW5k
ZXJlckZvclNlbGVjdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJSYW5nZSYgc2VsZWN0aW9uKQoreworICAgIHJldHVybiAocmVuZGVyZXIuY2FuQmVTZWxlY3Rp
b25MZWFmKCkgfHwgJnJlbmRlcmVyID09IHNlbGVjdGlvbi5zdGFydCgpIHx8ICZyZW5kZXJlciA9
PSBzZWxlY3Rpb24uZW5kKCkpCisgICAgJiYgcmVuZGVyZXIuc2VsZWN0aW9uU3RhdGUoKSAhPSBS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lCisgICAgJiYgcmVuZGVyZXIuY29udGFp
bmluZ0Jsb2NrKCk7Cit9CisKK3N0YXRpYyBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrQmVs
b3dWaWV3KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgYXV0byogY29udGFp
bmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7CisgICAgcmV0dXJuIGlzPFJl
bmRlclZpZXc+KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRyIDogY29udGFpbmluZ0Jsb2NrOwor
fQorCitzdGF0aWMgU2VsZWN0aW9uQ29udGV4dCBjb2xsZWN0U2VsZWN0aW9uRGF0YShjb25zdCBS
ZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQoreworICAgIFNl
bGVjdGlvbkNvbnRleHQgb2xkU2VsZWN0aW9uRGF0YSB7IHNlbGVjdGlvbi5zdGFydE9mZnNldCgp
LCBzZWxlY3Rpb24uZW5kT2Zmc2V0KCksIHsgfSwgeyB9IH07CisgICAgLy8gQmxvY2tzIGNvbnRh
aW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBnYXBzIGJldHdlZW4gdGhlbSwgZWl0aGVyIG9u
IHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2VlbiBsaW5lcyBhbmQgYmxvY2tzLgorICAgIC8v
IEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCByZWN0IHJpZ2h0LCB3ZSBoYXZlIHRvIGV4YW1p
bmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVjdHMgaW5kaXZpZHVhbGx5LCBzaW5jZSBvdGhl
cndpc2UKKyAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMgbWlnaHQgcmVtYWluIHRoZSBz
YW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQuCisgICAgYXV0byogc3RhcnQgPSBz
ZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOworICAg
IGlmIChzZWxlY3Rpb24uZW5kKCkpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyT2Zmc2V0
KCpzZWxlY3Rpb24uZW5kKCksIHNlbGVjdGlvbi5lbmRPZmZzZXQoKSk7CisgICAgUmVuZGVyUmFu
Z2VJdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7CisgICAgd2hpbGUgKHN0YXJ0ICYm
IHN0YXJ0ICE9IHN0b3ApIHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlv
bigqc3RhcnQsIHNlbGVjdGlvbikpIHsKKyAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9u
c2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBi
ZSBleGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICAgICAgb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJl
cnMuc2V0KHN0YXJ0LCBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpzdGFydCwgdHJ1
ZSkpOworICAgICAgICAgICAgaWYgKHJlcGFpbnREaWZmZXJlbmNlKSB7CisgICAgICAgICAgICAg
ICAgZm9yIChhdXRvKiBibG9jayA9IGNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldygqc3RhcnQpOyBi
bG9jazsgYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKmJsb2NrKSkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBibG9ja0luZm8gPSBvbGRTZWxlY3Rpb25EYXRhLmJsb2Nrcy5h
ZGQoYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGJsb2NrSW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5m
bz4oKmJsb2NrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCk7CisgICAgfQorICAgIHJl
dHVybiBvbGRTZWxlY3Rpb25EYXRhOworfQorCitTZWxlY3Rpb25SYW5nZURhdGE6OlNlbGVjdGlv
blJhbmdlRGF0YShSZW5kZXJWaWV3JiB2aWV3KQorICAgIDogbV9yZW5kZXJWaWV3KHZpZXcpCisj
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgLCBtX3NlbGVjdGlvblJlY3RHYXRoZXJl
cih2aWV3KQorI2VuZGlmCit7Cit9CisKK3ZvaWQgU2VsZWN0aW9uUmFuZ2VEYXRhOjpzZXQoY29u
c3QgUmVuZGVyUmFuZ2UmIHNlbGVjdGlvbiwgUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkK
K3sKKyAgICBpZiAoKHNlbGVjdGlvbi5zdGFydCgpICYmICFzZWxlY3Rpb24uZW5kKCkpIHx8IChz
ZWxlY3Rpb24uZW5kKCkgJiYgIXNlbGVjdGlvbi5zdGFydCgpKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIC8vIEp1c3QgcmV0dXJuIGlmIHRoZSBzZWxlY3Rpb24gaGFzbid0IGNoYW5nZWQuCisgICAg
YXV0byBpc0NhcmV0ID0gbV9yZW5kZXJWaWV3LmZyYW1lKCkuc2VsZWN0aW9uKCkuaXNDYXJldCgp
OworICAgIGlmIChzZWxlY3Rpb24gPT0gbV9yZW5kZXJSYW5nZSAmJiBtX3NlbGVjdGlvbldhc0Nh
cmV0ID09IGlzQ2FyZXQpCisgICAgICAgIHJldHVybjsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05U
Uk9MUykKKyAgICAvLyBDbGVhciB0aGUgY3VycmVudCByZWN0cyBhbmQgY3JlYXRlIGEgbm90aWZp
ZXIgZm9yIHRoZSBuZXcgcmVjdHMgd2UgYXJlIGFib3V0IHRvIGdhdGhlci4KKyAgICAvLyBUaGUg
Tm90aWZpZXIgdXBkYXRlcyB0aGUgRWRpdG9yIHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUgYW5k
IGlzIGRlc3Ryb3llZC4KKyAgICBhdXRvIHJlY3ROb3RpZmllciA9IG1fc2VsZWN0aW9uUmVjdEdh
dGhlcmVyLmNsZWFyQW5kQ3JlYXRlTm90aWZpZXIoKTsKKyNlbmRpZgorICAgIG1fc2VsZWN0aW9u
V2FzQ2FyZXQgPSBpc0NhcmV0OworICAgIGFwcGx5KHNlbGVjdGlvbiwgYmxvY2tSZXBhaW50TW9k
ZSk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uUmFuZ2VEYXRhOjpjbGVhcigpCit7CisgICAgbV9yZW5k
ZXJWaWV3LmxheWVyKCktPnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKKyAgICBzZXQoeyB9
LCBTZWxlY3Rpb25SYW5nZURhdGE6OlJlcGFpbnRNb2RlOjpOZXdNaW51c09sZCk7Cit9CisKK3Zv
aWQgU2VsZWN0aW9uUmFuZ2VEYXRhOjpyZXBhaW50KCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFJl
bmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOworICAgIFJlbmRlck9iamVjdCogZW5kID0gbnVs
bHB0cjsKKyAgICBpZiAobV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgZW5kID0gcmVuZGVy
ZXJBZnRlck9mZnNldCgqbV9yZW5kZXJSYW5nZS5lbmQoKSwgbV9yZW5kZXJSYW5nZS5lbmRPZmZz
ZXQoKSk7CisgICAgUmVuZGVyUmFuZ2VJdGVyYXRvciBoaWdobGlnaHRJdGVyYXRvcihtX3JlbmRl
clJhbmdlLnN0YXJ0KCkpOworICAgIGZvciAoYXV0byogcmVuZGVyZXIgPSBoaWdobGlnaHRJdGVy
YXRvci5jdXJyZW50KCk7IHJlbmRlcmVyICYmIHJlbmRlcmVyICE9IGVuZDsgcmVuZGVyZXIgPSBo
aWdobGlnaHRJdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+Y2FuQmVT
ZWxlY3Rpb25MZWFmKCkgJiYgcmVuZGVyZXIgIT0gbV9yZW5kZXJSYW5nZS5zdGFydCgpICYmIHJl
bmRlcmVyICE9IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKHJlbmRlcmVyLT5zZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRlck9iamVjdDo6SGln
aGxpZ2h0U3RhdGU6Ok5vbmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUmVuZGVy
U2VsZWN0aW9uSW5mbygqcmVuZGVyZXIsIHRydWUpLnJlcGFpbnQoKTsKKyAgICAgICAgLy8gQmxv
Y2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fw
cy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCisgICAgICAgIGZvciAoYXV0byogYmxv
Y2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKnJlbmRlcmVyKTsgYmxvY2s7IGJsb2NrID0g
Y29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpibG9jaykpIHsKKyAgICAgICAgICAgIGlmICghcHJv
Y2Vzc2VkQmxvY2tzLmFkZChibG9jaykuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8oKmJsb2NrLCB0cnVlKS5yZXBhaW50
KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0ludFJlY3QgU2VsZWN0aW9uUmFuZ2VEYXRhOjpj
b2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBj
b25zdAoreworICAgIExPR19XSVRIX1NUUkVBTShTZWxlY3Rpb24sIHN0cmVhbSA8PCAiU2VsZWN0
aW9uRGF0YTo6Y29sbGVjdEJvdW5kcyAoY2xpcCB0byB2aXNpYmxlICIgPDwgKGNsaXBUb1Zpc2li
bGVDb250ZW50ID09IENsaXBUb1Zpc2libGVDb250ZW50OjpZZXMgPyAieWVzIiA6ICJubyIpKTsK
KyAgICAKKyAgICBTZWxlY3Rpb25Db250ZXh0OjpSZW5kZXJlck1hcCByZW5kZXJlcnM7CisgICAg
YXV0byogc3RhcnQgPSBtX3JlbmRlclJhbmdlLnN0YXJ0KCk7CisgICAgUmVuZGVyT2JqZWN0KiBz
dG9wID0gbnVsbHB0cjsKKyAgICBpZiAobV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgc3Rv
cCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKm1fcmVuZGVyUmFuZ2UuZW5kKCksIG1fcmVuZGVyUmFu
Z2UuZW5kT2Zmc2V0KCkpOworICAgIAorICAgIFJlbmRlclJhbmdlSXRlcmF0b3Igc2VsZWN0aW9u
SXRlcmF0b3Ioc3RhcnQpOworICAgIHdoaWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7Cisg
ICAgICAgIGlmICgoc3RhcnQtPmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8IHN0YXJ0ID09IG1fcmVu
ZGVyUmFuZ2Uuc3RhcnQoKSB8fCBzdGFydCA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAgICAg
ICAgICAgJiYgc3RhcnQtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZTo6Tm9uZSkgeworICAgICAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBm
b3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1p
bmVkIGFzIHdlbGwuCisgICAgICAgICAgICByZW5kZXJlcnMuc2V0KHN0YXJ0LCBtYWtlVW5pcXVl
PFJlbmRlclNlbGVjdGlvbkluZm8+KCpzdGFydCwgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPT0gQ2xp
cFRvVmlzaWJsZUNvbnRlbnQ6OlllcykpOworICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNl
bGVjdGlvbiwgc3RyZWFtIDw8ICIgYWRkZWQgc3RhcnQgIiA8PCAqc3RhcnQgPDwgIiB3aXRoIHJl
Y3QgIiA8PCByZW5kZXJlcnMuZ2V0KHN0YXJ0KS0+cmVjdCgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYXV0byogYmxvY2sgPSBzdGFydC0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAg
ICAgICB3aGlsZSAoYmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpibG9jaykpIHsKKyAgICAgICAg
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIiBhZGRlZCBibG9j
ayAiIDw8ICpibG9jayk7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNl
bGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSByZW5kZXJlcnMuYWRkKGJsb2NrLCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gbWFrZVVuaXF1
ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqYmxvY2ssIGNsaXBUb1Zpc2libGVDb250ZW50ID09IENs
aXBUb1Zpc2libGVDb250ZW50OjpZZXMpOworICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVB
TShTZWxlY3Rpb24sIHN0cmVhbSA8PCAiIGFkZGVkIGNvbnRhaW5pbmcgYmxvY2sgIiA8PCAqYmxv
Y2sgPDwgIiB3aXRoIHJlY3QgIiA8PCBibG9ja0luZm8tPnJlY3QoKSk7CisgICAgICAgICAgICAg
ICAgYmxvY2sgPSBibG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCk7CisgICAgfQor
ICAgIAorICAgIC8vIE5vdyBjcmVhdGUgYSBzaW5nbGUgYm91bmRpbmcgYm94IHJlY3QgdGhhdCBl
bmNsb3NlcyB0aGUgd2hvbGUgc2VsZWN0aW9uLgorICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVj
dDsKKyAgICBmb3IgKGF1dG8mIGluZm8gOiByZW5kZXJlcnMudmFsdWVzKCkpIHsKKyAgICAgICAg
Ly8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVjdCgpIGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0
aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFwIHRvIHBhZ2UgY29vcmRpbmF0ZXMuCisgICAgICAg
IExheW91dFJlY3QgY3VycmVudFJlY3QgPSBpbmZvLT5yZWN0KCk7CisgICAgICAgIGlmIChjdXJy
ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChhdXRvKiByZXBhaW50Q29udGFpbmVyID0gaW5mby0+cmVwYWludENvbnRhaW5lcigp
KSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0ID0gY3VycmVudFJlY3Q7CisgICAg
ICAgICAgICBGbG9hdFF1YWQgYWJzUXVhZCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNv
bHV0ZVF1YWQobG9jYWxSZWN0KTsKKyAgICAgICAgICAgIGN1cnJlbnRSZWN0ID0gYWJzUXVhZC5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNlbGVj
dGlvbiwgc3RyZWFtIDw8ICIgcmVjdCAiIDw8IGxvY2FsUmVjdCA8PCAiIG1hcHBlZCB0byAiIDw8
IGN1cnJlbnRSZWN0IDw8ICIgaW4gY29udGFpbmVyICIgPDwgKnJlcGFpbnRDb250YWluZXIpOwor
ICAgICAgICB9CisgICAgICAgIHNlbGVjdGlvblJlY3QudW5pdGUoY3VycmVudFJlY3QpOworICAg
IH0KKyAgICAKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2VsZWN0aW9uLCBzdHJlYW0gPDwgIiBmaW5h
bCByZWN0ICIgPDwgc2VsZWN0aW9uUmVjdCk7CisgICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0KHNl
bGVjdGlvblJlY3QpOworfQorCit2b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6YXBwbHkoY29uc3Qg
UmVuZGVyUmFuZ2UmIG5ld1NlbGVjdGlvbiwgUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkK
K3sKKyAgICBhdXRvIG9sZFNlbGVjdGlvbkRhdGEgPSBjb2xsZWN0U2VsZWN0aW9uRGF0YShtX3Jl
bmRlclJhbmdlLCBibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOwor
ICAgIC8vIFJlbW92ZSBjdXJyZW50IHNlbGVjdGlvbi4KKyAgICBmb3IgKGF1dG8qIHJlbmRlcmVy
IDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMua2V5cygpKQorICAgICAgICByZW5kZXJlci0+
c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpO
b25lKTsKKyAgICBtX3JlbmRlclJhbmdlID0gbmV3U2VsZWN0aW9uOworICAgIGF1dG8qIHNlbGVj
dGlvblN0YXJ0ID0gbV9yZW5kZXJSYW5nZS5zdGFydCgpOworICAgIC8vIFVwZGF0ZSB0aGUgc2Vs
ZWN0aW9uIHN0YXR1cyBvZiBhbGwgb2JqZWN0cyBiZXR3ZWVuIHNlbGVjdGlvblN0YXJ0IGFuZCBz
ZWxlY3Rpb25FbmQKKyAgICBpZiAoc2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQgPT0g
bV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgc2VsZWN0aW9uU3RhcnQtPnNldFNlbGVjdGlv
blN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Qm90aCk7CisgICAg
ZWxzZSB7CisgICAgICAgIGlmIChzZWxlY3Rpb25TdGFydCkKKyAgICAgICAgICAgIHNlbGVjdGlv
blN0YXJ0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhdGU6OlN0YXJ0KTsKKyAgICAgICAgaWYgKGF1dG8qIGVuZCA9IG1fcmVuZGVyUmFuZ2UuZW5k
KCkpCisgICAgICAgICAgICBlbmQtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kKTsKKyAgICB9CisgICAgCisgICAgUmVuZGVyT2JqZWN0
KiBzZWxlY3Rpb25FbmQgPSBudWxscHRyOworICAgIGF1dG8qIHNlbGVjdGlvbkRhdGFFbmQgPSBt
X3JlbmRlclJhbmdlLmVuZCgpOworICAgIGlmIChzZWxlY3Rpb25EYXRhRW5kKQorICAgICAgICBz
ZWxlY3Rpb25FbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCpzZWxlY3Rpb25EYXRhRW5kLCBtX3Jl
bmRlclJhbmdlLmVuZE9mZnNldCgpKTsKKyAgICBSZW5kZXJSYW5nZUl0ZXJhdG9yIHNlbGVjdGlv
bkl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0KTsKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJl
ciA9IHNlbGVjdGlvblN0YXJ0OyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9
IHNlbGVjdGlvbkVuZDsgY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgp
KSB7CisgICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXIgPT0gc2VsZWN0aW9uU3RhcnQgfHwgY3Vy
cmVudFJlbmRlcmVyID09IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0
aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpJbnNpZGUpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90
aGluZykKKyAgICAgICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzKCk7CisgICAgCisgICAgLy8gTm93IHRoYXQgdGhlIHNlbGVjdGlvbiBzdGF0ZSBo
YXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVjdHMsIHdhbGsgdGhlbSBhZ2FpbiBhbmQK
KyAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVjdHMgbGlzdC4KKyAgICBTZWxlY3Rpb25D
b250ZXh0OjpSZW5kZXJlck1hcCBuZXdTZWxlY3RlZFJlbmRlcmVyczsKKyAgICBTZWxlY3Rpb25D
b250ZXh0OjpSZW5kZXJCbG9ja01hcCBuZXdTZWxlY3RlZEJsb2NrczsKKyAgICBzZWxlY3Rpb25J
dGVyYXRvciA9IFJlbmRlclJhbmdlSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOworICAgIGZvciAo
YXV0byogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAm
JiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxl
Y3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZW5kZXJlckZvclNl
bGVjdGlvbigqY3VycmVudFJlbmRlcmVyLCBtX3JlbmRlclJhbmdlKSkgeworICAgICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+IHNlbGVjdGlvbkluZm8gPSBtYWtl
VW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpjdXJyZW50UmVuZGVyZXIsIHRydWUpOworI2lm
IEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgICAgICAgICAgZm9yIChhdXRvJiByZWN0IDog
c2VsZWN0aW9uSW5mby0+Y29sbGVjdGVkU2VsZWN0aW9uUmVjdHMoKSkKKyAgICAgICAgICAgICAg
ICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRSZWN0KHNlbGVjdGlvbkluZm8tPnJlcGFpbnRD
b250YWluZXIoKSwgcmVjdCk7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+aXNU
ZXh0T3JMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJl
ci5zZXRUZXh0T25seShmYWxzZSk7CisjZW5kaWYKKyAgICAgICAgICAgIG5ld1NlbGVjdGVkUmVu
ZGVyZXJzLnNldChjdXJyZW50UmVuZGVyZXIsIFdURk1vdmUoc2VsZWN0aW9uSW5mbykpOworICAg
ICAgICAgICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gY3VycmVudFJlbmRlcmVyLT5jb250YWlu
aW5nQmxvY2soKTsKKyAgICAgICAgICAgIHdoaWxlIChjb250YWluaW5nQmxvY2sgJiYgIWlzPFJl
bmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKSB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5ld1NlbGVjdGVk
QmxvY2tzLmFkZChjb250YWluaW5nQmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0
aW9uSW5mbz4oKmNvbnRhaW5pbmdCbG9jayk7CisgICAgICAgICAgICAgICAgY29udGFpbmluZ0Js
b2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsKKyNpZiBFTkFCTEUoU0VS
VklDRV9DT05UUk9MUykKKyAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5h
ZGRHYXBSZWN0cyhibG9ja0luZm8tPnJlcGFpbnRDb250YWluZXIoKSwgYmxvY2tJbmZvLT5yZWN0
cygpKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAg
IGlmIChibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnRNb2RlOjpOb3RoaW5nKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3Rz
IGNoYW5nZWQgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24/CisgICAgZm9yIChhdXRvJiBz
ZWxlY3RlZFJlbmRlcmVySW5mbyA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzKSB7CisgICAg
ICAgIGF1dG8qIHJlbmRlcmVyID0gc2VsZWN0ZWRSZW5kZXJlckluZm8ua2V5OworICAgICAgICBh
dXRvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRSZW5kZXJlcnMuZ2V0KHJlbmRlcmVyKTsKKyAgICAg
ICAgYXV0byogb2xkSW5mbyA9IHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLmdldCgpOworICAg
ICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdCgpICE9IG5ld0luZm8tPnJlY3QoKSB8
fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkKKyAgICAgICAgICAgIHx8ICht
X3JlbmRlclJhbmdlLnN0YXJ0KCkgPT0gcmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9uRGF0YS5zdGFy
dE9mZnNldCAhPSBtX3JlbmRlclJhbmdlLnN0YXJ0T2Zmc2V0KCkpCisgICAgICAgICAgICB8fCAo
bV9yZW5kZXJSYW5nZS5lbmQoKSA9PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rpb25EYXRhLmVuZE9m
ZnNldCAhPSBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpKSkgeworICAgICAgICAgICAgb2xkSW5m
by0+cmVwYWludCgpOworICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKKyAgICAgICAgICAgICAg
ICBuZXdJbmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5kZXJl
cnMucmVtb3ZlKHJlbmRlcmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICAvLyBBbnkgbmV3IG9iamVjdHMgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4g
dGhlIG9sZCBvYmplY3RzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KKyAg
ICBmb3IgKGF1dG8mIHNlbGVjdGVkUmVuZGVyZXJJbmZvIDogbmV3U2VsZWN0ZWRSZW5kZXJlcnMp
CisgICAgICAgIHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLT5yZXBhaW50KCk7CisgICAgCisg
ICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KKyAgICBmb3IgKGF1dG8m
IHNlbGVjdGVkQmxvY2tJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5ibG9ja3MpIHsKKyAgICAgICAg
YXV0byogYmxvY2sgPSBzZWxlY3RlZEJsb2NrSW5mby5rZXk7CisgICAgICAgIGF1dG8qIG5ld0lu
Zm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOworICAgICAgICBhdXRvKiBvbGRJbmZv
ID0gc2VsZWN0ZWRCbG9ja0luZm8udmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICghbmV3SW5mbyB8
fCBvbGRJbmZvLT5yZWN0cygpICE9IG5ld0luZm8tPnJlY3RzKCkgfHwgb2xkSW5mby0+c3RhdGUo
KSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7CisgICAgICAgICAgICBvbGRJbmZvLT5yZXBhaW50KCk7
CisgICAgICAgICAgICBpZiAobmV3SW5mbykgeworICAgICAgICAgICAgICAgIG5ld0luZm8tPnJl
cGFpbnQoKTsKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZEJsb2Nrcy5yZW1vdmUoYmxvY2sp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEFueSBuZXcg
YmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tzIGRpY3Qs
IGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KKyAgICBmb3IgKGF1dG8mIHNlbGVjdGVk
QmxvY2tJbmZvIDogbmV3U2VsZWN0ZWRCbG9ja3MpCisgICAgICAgIHNlbGVjdGVkQmxvY2tJbmZv
LnZhbHVlLT5yZXBhaW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjEw
YWZmZTk3YmE4NjA1MTE4M2E1NjcyYmMzY2M3YTY2MGRmMGJiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5oCkBAIC0wLDAgKzEs
NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICog
ICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkhpZ2hsaWdo
dERhdGEuaCIKKyNpbmNsdWRlICJSZW5kZXJTZWxlY3Rpb25JbmZvLmgiCisKKyNpZiBFTkFCTEUo
U0VSVklDRV9DT05UUk9MUykKKyNpbmNsdWRlICJTZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCIKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlbGVjdGlvblJhbmdlRGF0YSA6
IHB1YmxpYyBIaWdobGlnaHREYXRhIHsKK3B1YmxpYzoKKyAgICBTZWxlY3Rpb25SYW5nZURhdGEo
UmVuZGVyVmlldyYpOworICAgIAorICAgIGVudW0gY2xhc3MgUmVwYWludE1vZGUgeyBOZXdYT1JP
bGQsIE5ld01pbnVzT2xkLCBOb3RoaW5nIH07CisgICAgdm9pZCBzZXQoY29uc3QgUmVuZGVyUmFu
Z2UmLCBSZXBhaW50TW9kZSA9IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOworICAgIHZvaWQgY2xl
YXIoKTsKKyAgICB2b2lkIHJlcGFpbnQoKSBjb25zdDsKKyAgICAKKyAgICBJbnRSZWN0IGJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6Ok5v
KTsgfQorICAgIEludFJlY3QgYm91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50OjpZZXMpOyB9CisgICAg
Citwcml2YXRlOgorICAgIGNvbnN0IFJlbmRlclZpZXcmIG1fcmVuZGVyVmlldzsKKyNpZiBFTkFC
TEUoU0VSVklDRV9DT05UUk9MUykKKyAgICBTZWxlY3Rpb25SZWN0R2F0aGVyZXIgbV9zZWxlY3Rp
b25SZWN0R2F0aGVyZXI7CisjZW5kaWYKKyAgICBib29sIG1fc2VsZWN0aW9uV2FzQ2FyZXQgeyBm
YWxzZSB9OworICAgIGVudW0gY2xhc3MgQ2xpcFRvVmlzaWJsZUNvbnRlbnQgeyBZZXMsIE5vIH07
CisgICAgSW50UmVjdCBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdDsK
KyAgICB2b2lkIGFwcGx5KGNvbnN0IFJlbmRlclJhbmdlJiwgUmVwYWludE1vZGUpOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>