<?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>211723</bug_id>
          
          <creation_ts>2020-05-11 06:14:29 -0700</creation_ts>
          <short_desc>[GTK] Rework drag and drop handling in preparation for GTK4</short_desc>
          <delta_ts>2020-05-12 12:27:55 -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>WebKitGTK</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>211511</dependson>
          <blocked>210100</blocked>
    
    <blocked>211779</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>bugs-noreply</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1651249</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-11 06:14:29 -0700</bug_when>
    <thetext>Make it easier to share the implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651255</commentid>
    <comment_count>1</comment_count>
      <attachid>399015</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-11 06:22:17 -0700</bug_when>
    <thetext>Created attachment 399015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651705</commentid>
    <comment_count>2</comment_count>
      <attachid>399122</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-12 05:49:58 -0700</bug_when>
    <thetext>Created attachment 399122
Patch

I forgot to add the gtk4 stubs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651758</commentid>
    <comment_count>3</comment_count>
      <attachid>399122</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-05-12 09:17:18 -0700</bug_when>
    <thetext>Comment on attachment 399122
Patch

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

&gt; Source/WebCore/platform/gtk/GtkUtilities.cpp:111
&gt; +        &amp;&amp; gdkAction &amp; GDK_ACTION_LINK)

It took me a while to understand why this is done in this way. IMO it&apos;s more
idiomatic to use a bitmastk to checl all flags at once: 

  static constexpr auto gdkEveryMask = GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK;
  if ((gdkAction &amp; gdkEveryMask) == gdkEveryMask)
      return DragOperationEvery;

...but it was already written this way before, so feel free to leave it as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1651860</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-05-12 12:27:55 -0700</bug_when>
    <thetext>Committed r261570: &lt;https://trac.webkit.org/changeset/261570&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399015</attachid>
            <date>2020-05-11 06:22:17 -0700</date>
            <delta_ts>2020-05-12 05:49:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkgtk-dnd.diff</filename>
            <type>text/plain</type>
            <size>68479</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlZjRkYmI4OTY0ZWUuLjQ5MzAyYzQ2YjhhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIyIEBACisyMDIwLTA1LTExICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZXdvcmsgZHJhZyBhbmQgZHJvcCBoYW5kbGlu
ZyBpbiBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjExNzIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlIFBhc3RlYm9hcmRIZWxwZXIgdGhhdCBpcyBubyBsb25n
ZXIgdXNlZCBhbmQgYWRkIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvIEd0a1V0aWxpdGllcy4KKwor
ICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Z2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpkcmFn
T3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpkcmFnT3BlcmF0
aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrVXRp
bGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmg6IFJlbW92
ZWQuCisKIDIwMjAtMDUtMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIFJld29yayBjbGlwYm9hcmQgaGFuZGxpbmcgaW4gcHJlcGFy
YXRpb24gZm9yIEdUSzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNWIzYTI3MTg2ZWYw
Li5hZDdhZGE1Y2RlZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC02MSw3ICs2MSw2
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBs
YXRmb3JtL2d0ay9HVW5pcXVlUHRyR3RrLmgKICAgICBwbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVz
LmgKICAgICBwbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCi0gICAgcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRIZWxwZXIuaAogICAgIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCiAg
ICAgcGxhdGZvcm0vZ3RrL1NlbGVjdGlvbkRhdGEuaAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4
IGE3NjA5Mjc3MGYwYi4uOGI2Njg2MmRiYzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtMTA5
LDcgKzEwOSw2IEBAIHBsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcAogcGxhdGZvcm0vZ3RrL0d0
a1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcAogcGxh
dGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCi1wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBl
ci5jcHAKIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwCiBwbGF0Zm9y
bS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2
ZW50R3RrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0
aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNw
cAppbmRleCBjZTQwNDY2MjMzYmYuLmFhYzc3MDI1ZGViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKQEAgLTEwMiw0ICsxMDIsNTEgQEAgdW5zaWdu
ZWQgc3RhdGVNb2RpZmllckZvckdka0J1dHRvbih1bnNpZ25lZCBidXR0b24pCiAgICAgcmV0dXJu
IDEgPDwgKDggKyBidXR0b24gLSAxKTsKIH0KIAorRHJhZ09wZXJhdGlvbiBnZGtEcmFnQWN0aW9u
VG9EcmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uKQoreworICAgIC8vIFdlIGhh
dmUgbm8gZ29vZCB3YXkgdG8gZGV0ZWN0IERyYWdPcGVyYXRpb25FdmVyeSBvdGhlciB0aGFuCisg
ICAgLy8gdG8gdXNlIGl0IHdoZW4gYWxsIGFwcGxpY2FibGUgZmxhZ3MgYXJlIG9uLgorICAgIGlm
IChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0NPUFkKKyAgICAgICAgJiYgZ2RrQWN0aW9uICYgR0RL
X0FDVElPTl9NT1ZFCisgICAgICAgICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fTElOSykKKyAg
ICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25FdmVyeTsKKworICAgIHVuc2lnbmVkIGFjdGlvbiA9
IERyYWdPcGVyYXRpb25Ob25lOworICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0NPUFkp
CisgICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uQ29weTsKKyAgICBpZiAoZ2RrQWN0aW9u
ICYgR0RLX0FDVElPTl9NT1ZFKQorICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvbk1vdmU7
CisgICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fTElOSykKKyAgICAgICAgYWN0aW9uIHw9
IERyYWdPcGVyYXRpb25MaW5rOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERyYWdPcGVyYXRp
b24+KGFjdGlvbik7Cit9CisKK0dka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0Fj
dGlvbnMoRHJhZ09wZXJhdGlvbiBjb3JlQWN0aW9uKQoreworICAgIHVuc2lnbmVkIGdka0FjdGlv
biA9IDA7CisgICAgaWYgKGNvcmVBY3Rpb24gPT0gRHJhZ09wZXJhdGlvbk5vbmUpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihnZGtBY3Rpb24pOworCisgICAgaWYg
KGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkKKyAgICAgICAgZ2RrQWN0aW9uIHw9IEdE
S19BQ1RJT05fQ09QWTsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Nb3ZlKQor
ICAgICAgICBnZGtBY3Rpb24gfD0gR0RLX0FDVElPTl9NT1ZFOworICAgIGlmIChjb3JlQWN0aW9u
ICYgRHJhZ09wZXJhdGlvbkxpbmspCisgICAgICAgIGdka0FjdGlvbiB8PSBHREtfQUNUSU9OX0xJ
Tks7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oZ2RrQWN0aW9uKTsK
K30KKworR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKERy
YWdPcGVyYXRpb24gY29yZUFjdGlvbikKK3sKKyAgICBpZiAoY29yZUFjdGlvbiA9PSBEcmFnT3Bl
cmF0aW9uRXZlcnkgfHwgY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Db3B5KQorICAgICAgICBy
ZXR1cm4gR0RLX0FDVElPTl9DT1BZOworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlv
bk1vdmUpCisgICAgICAgIHJldHVybiBHREtfQUNUSU9OX01PVkU7CisgICAgaWYgKGNvcmVBY3Rp
b24gJiBEcmFnT3BlcmF0aW9uTGluaykKKyAgICAgICAgcmV0dXJuIEdES19BQ1RJT05fTElOSzsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oMCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMu
aAppbmRleCBkNTJkOTM4NWM2ZmQuLjVmNWE1ZmI3MTUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuaApAQCAtMTgsNiArMTgsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkRyYWdBY3Rpb25zLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2lu
Y2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CkBA
IC00Nyw0ICs0OCw4IEBAIFN0cmluZyBkZWZhdWx0R3RrU3lzdGVtRm9udCgpOwogCiBXRUJDT1JF
X0VYUE9SVCB1bnNpZ25lZCBzdGF0ZU1vZGlmaWVyRm9yR2RrQnV0dG9uKHVuc2lnbmVkIGJ1dHRv
bik7CiAKK1dFQkNPUkVfRVhQT1JUIERyYWdPcGVyYXRpb24gZ2RrRHJhZ0FjdGlvblRvRHJhZ09w
ZXJhdGlvbihHZGtEcmFnQWN0aW9uKTsKK1dFQkNPUkVfRVhQT1JUIEdka0RyYWdBY3Rpb24gZHJh
Z09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoRHJhZ09wZXJhdGlvbik7CitXRUJDT1JFX0VYUE9S
VCBHZGtEcmFnQWN0aW9uIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24oRHJhZ09w
ZXJhdGlvbik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTFjOGQ5OGQyOGM2Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjM1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFydGluIFJvYmluc29uIDxtcm9i
aW5zb25Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgSWdhbGlhIFMuTC4KLSAqIENvcHly
aWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgotCi0jaWYg
IVVTRShHVEs0KQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJTZWxlY3Rp
b25EYXRhLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlx
dWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIEdka0F0b20gdGV4dFBsYWluQXRvbTsKLXN0YXRpYyBHZGtBdG9tIG1h
cmt1cEF0b207Ci1zdGF0aWMgR2RrQXRvbSBuZXRzY2FwZVVSTEF0b207Ci1zdGF0aWMgR2RrQXRv
bSB1cmlMaXN0QXRvbTsKLXN0YXRpYyBHZGtBdG9tIHNtYXJ0UGFzdGVBdG9tOwotc3RhdGljIEdk
a0F0b20gdW5rbm93bkF0b207Ci0KLXN0YXRpYyBjb25zdCBTdHJpbmcmIG1hcmt1cFByZWZpeCgp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gcHJlZml4KE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCI8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29u
dGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPiIpKTsKLSAgICByZXR1cm4gcHJlZml4
LmdldCgpOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVNYXJrdXBQcmVmaXgoU3RyaW5nJiBtYXJr
dXApCi17Ci0gICAgLy8gVGhlIG1hcmt1cCBwcmVmaXggaXMgbm90IGhhcm1mdWwsIGJ1dCB3ZSBy
ZW1vdmUgaXQgZnJvbSB0aGUgc3RyaW5nIGFueXdheSwgc28gdGhhdAotICAgIC8vIHdlIGNhbiBo
YXZlIGNvbnNpc3RlbnQgcmVzdWx0cyB3aXRoIG90aGVyIHBvcnRzIGR1cmluZyB0aGUgbGF5b3V0
IHRlc3RzLgotICAgIGlmIChtYXJrdXAuc3RhcnRzV2l0aChtYXJrdXBQcmVmaXgoKSkpCi0gICAg
ICAgIG1hcmt1cC5yZW1vdmUoMCwgbWFya3VwUHJlZml4KCkubGVuZ3RoKCkpOwotfQotCi1QYXN0
ZWJvYXJkSGVscGVyJiBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKQotewotICAgIHN0YXRp
YyBQYXN0ZWJvYXJkSGVscGVyIGhlbHBlcjsKLSAgICByZXR1cm4gaGVscGVyOwotfQotCi1QYXN0
ZWJvYXJkSGVscGVyOjpQYXN0ZWJvYXJkSGVscGVyKCkKLSAgICA6IG1fdGFyZ2V0TGlzdChhZG9w
dEdSZWYoZ3RrX3RhcmdldF9saXN0X25ldyhudWxscHRyLCAwKSkpCi17Ci0gICAgdGV4dFBsYWlu
QXRvbSA9IGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9
dXRmLTgiKTsKLSAgICBtYXJrdXBBdG9tID0gZ2RrX2F0b21faW50ZXJuX3N0YXRpY19zdHJpbmco
InRleHQvaHRtbCIpOwotICAgIG5ldHNjYXBlVVJMQXRvbSA9IGdka19hdG9tX2ludGVybl9zdGF0
aWNfc3RyaW5nKCJfTkVUU0NBUEVfVVJMIik7Ci0gICAgdXJpTGlzdEF0b20gPSBnZGtfYXRvbV9p
bnRlcm5fc3RhdGljX3N0cmluZygidGV4dC91cmktbGlzdCIpOwotICAgIHNtYXJ0UGFzdGVBdG9t
ID0gZ2RrX2F0b21faW50ZXJuX3N0YXRpY19zdHJpbmcoImFwcGxpY2F0aW9uL3ZuZC53ZWJraXRn
dGsuc21hcnRwYXN0ZSIpOwotICAgIHVua25vd25BdG9tID0gZ2RrX2F0b21faW50ZXJuX3N0YXRp
Y19zdHJpbmcoImFwcGxpY2F0aW9uL3ZuZC53ZWJraXRndGsudW5rbm93biIpOwotCi0gICAgZ3Rr
X3RhcmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMobV90YXJnZXRMaXN0LmdldCgpLCBQYXN0ZWJv
YXJkSGVscGVyOjpUYXJnZXRUeXBlVGV4dCk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X2FkZChtX3Rh
cmdldExpc3QuZ2V0KCksIG1hcmt1cEF0b20sIDAsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5
cGVNYXJrdXApOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdXJpX3RhcmdldHMobV90YXJnZXRM
aXN0LmdldCgpLCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlVVJJTGlzdCk7Ci0gICAgZ3Rr
X3RhcmdldF9saXN0X2FkZChtX3RhcmdldExpc3QuZ2V0KCksIG5ldHNjYXBlVVJMQXRvbSwgMCwg
UGFzdGVib2FyZEhlbHBlcjo6VGFyZ2V0VHlwZU5ldHNjYXBlVVJMKTsKLSAgICBndGtfdGFyZ2V0
X2xpc3RfYWRkX2ltYWdlX3RhcmdldHMobV90YXJnZXRMaXN0LmdldCgpLCBQYXN0ZWJvYXJkSGVs
cGVyOjpUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGQobV90
YXJnZXRMaXN0LmdldCgpLCB1bmtub3duQXRvbSwgMCwgUGFzdGVib2FyZEhlbHBlcjo6VGFyZ2V0
VHlwZVVua25vd24pOwotfQotCi1QYXN0ZWJvYXJkSGVscGVyOjp+UGFzdGVib2FyZEhlbHBlcigp
ID0gZGVmYXVsdDsKLQotR3RrVGFyZ2V0TGlzdCogUGFzdGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlz
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGFyZ2V0TGlzdC5nZXQoKTsKLX0KLQotc3RhdGlj
IFN0cmluZyBzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEp
Ci17Ci0gICAgaWYgKCFndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChkYXRhKSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgLy8gZ19zdHJuZHVwIGd1YXJkcyBhZ2FpbnN0IHNl
bGVjdGlvbiBkYXRhIHRoYXQgaXMgbm90IG51bGwtdGVybWluYXRlZC4KLSAgICBHVW5pcXVlUHRy
PGdjaGFyPiBtYXJrdXBTdHJpbmcoZ19zdHJuZHVwKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRhKSksIGd0a19zZWxlY3Rpb25fZGF0
YV9nZXRfbGVuZ3RoKGRhdGEpKSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgobWFya3Vw
U3RyaW5nLmdldCgpKTsKLX0KLQotR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBQYXN0ZWJvYXJkSGVs
cGVyOjp0YXJnZXRMaXN0Rm9yU2VsZWN0aW9uRGF0YShjb25zdCBTZWxlY3Rpb25EYXRhJiBzZWxl
Y3Rpb24pCi17Ci0gICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKGd0
a190YXJnZXRfbGlzdF9uZXcobnVsbHB0ciwgMCkpOwotCi0gICAgaWYgKHNlbGVjdGlvbi5oYXNU
ZXh0KCkpCi0gICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJnZXRzKGxpc3QuZ2V0
KCksIFRhcmdldFR5cGVUZXh0KTsKLQotICAgIGlmIChzZWxlY3Rpb24uaGFzTWFya3VwKCkpCi0g
ICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdC5nZXQoKSwgbWFya3VwQXRvbSwgMCwgVGFy
Z2V0VHlwZU1hcmt1cCk7Ci0KLSAgICBpZiAoc2VsZWN0aW9uLmhhc1VSSUxpc3QoKSkgewotICAg
ICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3VyaV90YXJnZXRzKGxpc3QuZ2V0KCksIFRhcmdldFR5
cGVVUklMaXN0KTsKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LmdldCgpLCBuZXRz
Y2FwZVVSTEF0b20sIDAsIFRhcmdldFR5cGVOZXRzY2FwZVVSTCk7Ci0gICAgfQotCi0gICAgaWYg
KHNlbGVjdGlvbi5oYXNJbWFnZSgpKQotICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdl
X3RhcmdldHMobGlzdC5nZXQoKSwgVGFyZ2V0VHlwZUltYWdlLCBUUlVFKTsKLQotICAgIGlmIChz
ZWxlY3Rpb24uaGFzVW5rbm93blR5cGVEYXRhKCkpCi0gICAgICAgIGd0a190YXJnZXRfbGlzdF9h
ZGQobGlzdC5nZXQoKSwgdW5rbm93bkF0b20sIDAsIFRhcmdldFR5cGVVbmtub3duKTsKLQotICAg
IGlmIChzZWxlY3Rpb24uY2FuU21hcnRSZXBsYWNlKCkpCi0gICAgICAgIGd0a190YXJnZXRfbGlz
dF9hZGQobGlzdC5nZXQoKSwgc21hcnRQYXN0ZUF0b20sIDAsIFRhcmdldFR5cGVTbWFydFBhc3Rl
KTsKLQotICAgIHJldHVybiBsaXN0OwotfQotCi12b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmZpbGxT
ZWxlY3Rpb25EYXRhKGNvbnN0IFNlbGVjdGlvbkRhdGEmIHNlbGVjdGlvbiwgdW5zaWduZWQgaW5m
bywgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSkKLXsKLSAgICBpZiAoaW5mbyA9PSBU
YXJnZXRUeXBlVGV4dCkKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KHNlbGVj
dGlvbkRhdGEsIHNlbGVjdGlvbi50ZXh0KCkudXRmOCgpLmRhdGEoKSwgLTEpOwotCi0gICAgZWxz
ZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlTWFya3VwKSB7Ci0gICAgICAgIC8vIFNvbWUgTGludXgg
YXBwbGljYXRpb25zIHJlZnVzZSB0byBhY2NlcHQgcGFzdGVkIG1hcmt1cCB1bmxlc3MgaXQgaXMK
LSAgICAgICAgLy8gcHJlZml4ZWQgYnkgYSBjb250ZW50LXR5cGUgbWV0YSB0YWcuCi0gICAgICAg
IENTdHJpbmcgbWFya3VwID0gbWFrZVN0cmluZyhtYXJrdXBQcmVmaXgoKSwgc2VsZWN0aW9uLm1h
cmt1cCgpKS51dGY4KCk7Ci0gICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9u
RGF0YSwgbWFya3VwQXRvbSwgOCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihtYXJr
dXAuZGF0YSgpKSwgbWFya3VwLmxlbmd0aCgpKTsKLQotICAgIH0gZWxzZSBpZiAoaW5mbyA9PSBU
YXJnZXRUeXBlVVJJTGlzdCkgewotICAgICAgICBDU3RyaW5nIHVyaUxpc3QgPSBzZWxlY3Rpb24u
dXJpTGlzdCgpLnV0ZjgoKTsKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rp
b25EYXRhLCB1cmlMaXN0QXRvbSwgOCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPih1
cmlMaXN0LmRhdGEoKSksIHVyaUxpc3QubGVuZ3RoKCkpOwotCi0gICAgfSBlbHNlIGlmIChpbmZv
ID09IFRhcmdldFR5cGVOZXRzY2FwZVVSTCAmJiBzZWxlY3Rpb24uaGFzVVJMKCkpIHsKLSAgICAg
ICAgU3RyaW5nIHVybChzZWxlY3Rpb24udXJsKCkpOwotICAgICAgICBTdHJpbmcgcmVzdWx0KHVy
bCk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7Ci0KLSAgICAgICAgaWYgKHNlbGVjdGlv
bi5oYXNUZXh0KCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHNlbGVjdGlvbi50ZXh0KCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVybCk7Ci0KLSAgICAg
ICAgR1VuaXF1ZVB0cjxnY2hhcj4gcmVzdWx0RGF0YShnX3N0cmR1cChyZXN1bHQudXRmOCgpLmRh
dGEoKSkpOwotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEsIG5l
dHNjYXBlVVJMQXRvbSwgOCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihyZXN1bHRE
YXRhLmdldCgpKSwgc3RybGVuKHJlc3VsdERhdGEuZ2V0KCkpKTsKLQotICAgIH0gZWxzZSBpZiAo
aW5mbyA9PSBUYXJnZXRUeXBlSW1hZ2UgJiYgc2VsZWN0aW9uLmhhc0ltYWdlKCkpIHsKLSAgICAg
ICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihzZWxlY3Rpb24uaW1hZ2Uo
KS0+Z2V0R2RrUGl4YnVmKCkpOwotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3BpeGJ1
ZihzZWxlY3Rpb25EYXRhLCBwaXhidWYuZ2V0KCkpOwotCi0gICAgfSBlbHNlIGlmIChpbmZvID09
IFRhcmdldFR5cGVTbWFydFBhc3RlKQotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3Rl
eHQoc2VsZWN0aW9uRGF0YSwgIiIsIC0xKTsKLQotICAgIGVsc2UgaWYgKGluZm8gPT0gVGFyZ2V0
VHlwZVVua25vd24pIHsKLSAgICAgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAg
IGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX0FSUkFZKTsK
LQotICAgICAgICBmb3IgKGF1dG8mIGl0IDogc2VsZWN0aW9uLnVua25vd25UeXBlcygpKSB7Ci0g
ICAgICAgICAgICBHVW5pcXVlUHRyPGdjaGFyPiBkaWN0SXRlbShnX3N0cmR1cF9wcmludGYoInsn
JXMnLCAnJXMnfSIsIGl0LmtleS51dGY4KCkuZGF0YSgpLCBpdC52YWx1ZS51dGY4KCkuZGF0YSgp
KSk7Ci0gICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGRfcGFyc2VkKCZidWlsZGVyLCBk
aWN0SXRlbS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiB2
YXJpYW50ID0gZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKTsKLSAgICAgICAgR1VuaXF1
ZVB0cjxnY2hhcj4gc2VyaWFsaXplZFZhcmlhbnQoZ192YXJpYW50X3ByaW50KHZhcmlhbnQuZ2V0
KCksIFRSVUUpKTsKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25EYXRh
LCB1bmtub3duQXRvbSwgMSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihzZXJpYWxp
emVkVmFyaWFudC5nZXQoKSksIHN0cmxlbihzZXJpYWxpemVkVmFyaWFudC5nZXQoKSkpOwotICAg
IH0KLX0KLQotdm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpmaWxsU2VsZWN0aW9uRGF0YShHdGtTZWxl
Y3Rpb25EYXRhKiBkYXRhLCB1bnNpZ25lZCAvKiBpbmZvICovLCBTZWxlY3Rpb25EYXRhJiBzZWxl
Y3Rpb24pCi17Ci0gICAgaWYgKGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfbGVuZ3RoKGRhdGEpIDwg
MCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR2RrQXRvbSB0YXJnZXQgPSBndGtfc2VsZWN0aW9u
X2RhdGFfZ2V0X3RhcmdldChkYXRhKTsKLSAgICBpZiAodGFyZ2V0ID09IHRleHRQbGFpbkF0b20p
Ci0gICAgICAgIHNlbGVjdGlvbi5zZXRUZXh0KHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0
YSkpOwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBtYXJrdXBBdG9tKSB7Ci0gICAgICAgIFN0cmlu
ZyBtYXJrdXAoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgICAgIHJlbW92
ZU1hcmt1cFByZWZpeChtYXJrdXApOwotICAgICAgICBzZWxlY3Rpb24uc2V0TWFya3VwKG1hcmt1
cCk7Ci0gICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gdXJpTGlzdEF0b20pIHsKLSAgICAgICAgc2Vs
ZWN0aW9uLnNldFVSSUxpc3Qoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Ci0gICAg
fSBlbHNlIGlmICh0YXJnZXQgPT0gbmV0c2NhcGVVUkxBdG9tKSB7Ci0gICAgICAgIFN0cmluZyB1
cmxXaXRoTGFiZWwoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgICAgIFZl
Y3RvcjxTdHJpbmc+IHBpZWNlcyA9IHVybFdpdGhMYWJlbC5zcGxpdCgnXG4nKTsKLQotICAgICAg
ICAvLyBHaXZlIHByZWZlcmVuY2UgdG8gdGV4dC91cmktbGlzdCBoZXJlLCBhcyBpdCBjYW4gaG9s
ZCBtb3JlCi0gICAgICAgIC8vIHRoYW4gb25lIFVSSSBidXQgc3RpbGwgdGFrZSAgdGhlIGxhYmVs
IGlmIHRoZXJlIGlzIG9uZS4KLSAgICAgICAgaWYgKCFzZWxlY3Rpb24uaGFzVVJJTGlzdCgpICYm
ICFwaWVjZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0aW9uLnNldFVSSUxpc3QocGll
Y2VzWzBdKTsKLSAgICAgICAgaWYgKHBpZWNlcy5zaXplKCkgPiAxKQotICAgICAgICAgICAgc2Vs
ZWN0aW9uLnNldFRleHQocGllY2VzWzFdKTsKLSAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSB1bmtu
b3duQXRvbSAmJiBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChkYXRhKSkgewotICAgICAg
ICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0gZ192YXJpYW50X25ld19wYXJzZWQocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRhKGRhdGEp
KSk7Ci0KLSAgICAgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4ga2V5OwotICAgICAgICBHVW5pcXVl
T3V0UHRyPGdjaGFyPiB2YWx1ZTsKLSAgICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7Ci0KLSAgICAg
ICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgdmFyaWFudC5nZXQoKSk7Ci0gICAgICAgIHdo
aWxlIChnX3ZhcmlhbnRfaXRlcl9uZXh0KCZpdGVyLCAie3NzfSIsICZrZXkub3V0UHRyKCksICZ2
YWx1ZS5vdXRQdHIoKSkpCi0gICAgICAgICAgICBzZWxlY3Rpb24uc2V0VW5rbm93blR5cGVEYXRh
KGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwotICAgIH0KLX0KLQotVmVjdG9yPEdka0F0b20+IFBh
c3RlYm9hcmRIZWxwZXI6OmRyb3BBdG9tc0ZvckNvbnRleHQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0RyYWdDb250ZXh0KiBjb250ZXh0KQotewotICAgIC8vIEFsd2F5cyBzZWFyY2ggZm9yIHRoZXNl
IGNvbW1vbiBhdG9tcy4KLSAgICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0b21zOwotICAgIGRyb3BB
dG9tcy5hcHBlbmQodGV4dFBsYWluQXRvbSk7Ci0gICAgZHJvcEF0b21zLmFwcGVuZChtYXJrdXBB
dG9tKTsKLSAgICBkcm9wQXRvbXMuYXBwZW5kKHVyaUxpc3RBdG9tKTsKLSAgICBkcm9wQXRvbXMu
YXBwZW5kKG5ldHNjYXBlVVJMQXRvbSk7Ci0gICAgZHJvcEF0b21zLmFwcGVuZCh1bmtub3duQXRv
bSk7Ci0KLSAgICAvLyBGb3IgaW1hZ2VzLCB0cnkgdG8gZmluZCB0aGUgbW9zdCBhcHBsaWNhYmxl
IGltYWdlIHR5cGUuCi0gICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0gYWRvcHRHUmVm
KGd0a190YXJnZXRfbGlzdF9uZXcoMCwgMCkpOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGRfaW1h
Z2VfdGFyZ2V0cyhsaXN0LmdldCgpLCBUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOwotICAgIEdka0F0
b20gYXRvbSA9IGd0a19kcmFnX2Rlc3RfZmluZF90YXJnZXQod2lkZ2V0LCBjb250ZXh0LCBsaXN0
LmdldCgpKTsKLSAgICBpZiAoYXRvbSAhPSBHREtfTk9ORSkKLSAgICAgICAgZHJvcEF0b21zLmFw
cGVuZChhdG9tKTsKLQotICAgIHJldHVybiBkcm9wQXRvbXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vICFVU0UoR1RLNCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDU1OWI2NjcwZTBiMC4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEx1Y2EgQnJ1bm8gPGxldGhhbG1hbjg4QGdtYWls
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcnRpbiBSb2JpbnNvbiA8bXJvYmluc29uQHdlYmtpdC5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICoKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmICFVU0UoR1RLNCkKLQotI2luY2x1ZGUgIkdS
ZWZQdHJHdGsuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgU2VsZWN0aW9uRGF0YTsKLQotY2xhc3MgUGFzdGVib2FyZEhlbHBlciB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFzdGVib2FyZEhlbHBlcik7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3RlYm9hcmRIZWxwZXImIHNpbmdsZXRvbigpOwotCi0gICAgR3RrVGFyZ2V0TGlz
dCogdGFyZ2V0TGlzdCgpIGNvbnN0OwotICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gdGFyZ2V0
TGlzdEZvclNlbGVjdGlvbkRhdGEoY29uc3QgU2VsZWN0aW9uRGF0YSYpOwotICAgIHZvaWQgZmls
bFNlbGVjdGlvbkRhdGEoY29uc3QgU2VsZWN0aW9uRGF0YSYsIHVuc2lnbmVkLCBHdGtTZWxlY3Rp
b25EYXRhKik7Ci0gICAgdm9pZCBmaWxsU2VsZWN0aW9uRGF0YShHdGtTZWxlY3Rpb25EYXRhKiwg
dW5zaWduZWQsIFNlbGVjdGlvbkRhdGEmKTsKLSAgICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0b21z
Rm9yQ29udGV4dChHdGtXaWRnZXQqLCBHZGtEcmFnQ29udGV4dCopOwotCi0gICAgZW51bSBQYXN0
ZWJvYXJkVGFyZ2V0VHlwZSB7IFRhcmdldFR5cGVNYXJrdXAsIFRhcmdldFR5cGVUZXh0LCBUYXJn
ZXRUeXBlSW1hZ2UsIFRhcmdldFR5cGVVUklMaXN0LCBUYXJnZXRUeXBlTmV0c2NhcGVVUkwsIFRh
cmdldFR5cGVTbWFydFBhc3RlLCBUYXJnZXRUeXBlVW5rbm93biB9OwotCi1wcml2YXRlOgotICAg
IFBhc3RlYm9hcmRIZWxwZXIoKTsKLSAgICB+UGFzdGVib2FyZEhlbHBlcigpOwotCi0gICAgR1Jl
ZlB0cjxHdGtUYXJnZXRMaXN0PiBtX3RhcmdldExpc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyAhVVNFKEdUSzQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQxN2Q3ZDMzNzM2Yy4u
YTNhZDQ3MzQ1YzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA1LTExICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBS
ZXdvcmsgZHJhZyBhbmQgZHJvcCBoYW5kbGluZyBpbiBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNzIzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgRHJhZ0Fu
ZERyb3BIZWxwZXIgY2xhc3MgaW50byBEcmFnU291cmNlIGFuZCBEcm9wVGFyZ2V0IGNsYXNzZXMu
IFRoaXMgc2VwYXJhdGVzIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisgICAgICAgIHBhcnRz
IG1ha2luZyBpdCBlYXNpZXIgdG8gZm9sbG93LiBUaGlzIHBhdGNoIGFsc28gYWRkcyBQYWdlQ2xp
ZW50OjpkaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oKSB0byBub3RpZnkKKyAgICAgICAg
YmFjayB0aGUgdmlldyB3aGVuIGFuIG9wZXJhdGlvbiBpcyBkb25lIHRvIHVwZGF0ZSB0aGUgcmVz
dWx0LgorCisgICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvRHJhZ1NvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9E
cmFnU291cmNlR3RrMy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEcmFnU291cmNlOjpE
cmFnU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6RHJhZ1NvdXJjZTo6fkRyYWdTb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpEcmFnU291cmNlOjpiZWdpbik6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvRHJvcFRhcmdldC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9Ecm9wVGFyZ2V0R3RrMy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEcm9wVGFyZ2V0
OjpEcm9wVGFyZ2V0KToKKyAgICAgICAgKFdlYktpdDo6RHJvcFRhcmdldDo6fkRyb3BUYXJnZXQp
OgorICAgICAgICAoV2ViS2l0OjpEcm9wVGFyZ2V0OjphY2NlcHQpOgorICAgICAgICAoV2ViS2l0
OjpEcm9wVGFyZ2V0OjplbnRlcik6CisgICAgICAgIChXZWJLaXQ6OkRyb3BUYXJnZXQ6OnVwZGF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OkRyb3BUYXJnZXQ6OmRhdGFSZWNlaXZlZCk6CisgICAgICAg
IChXZWJLaXQ6OkRyb3BUYXJnZXQ6OmRpZFBlcmZvcm1BY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpEcm9wVGFyZ2V0OjpsZWF2ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpEcm9wVGFy
Z2V0OjpsZWF2ZSk6CisgICAgICAgIChXZWJLaXQ6OkRyb3BUYXJnZXQ6OmRyb3ApOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UGFnZUNsaWVudEltcGw6OnN0YXJ0RHJhZyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpkaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VDb25z
dHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KToKKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKToKKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdCYXNlRGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvUGFnZUNsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50OjpkaWRQZXJmb3Jt
RHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhhbmRsZXIu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwOgorCiAyMDIw
LTA1LTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR1RLXSBSZXdvcmsgY2xpcGJvYXJkIGhhbmRsaW5nIGluIHByZXBhcmF0aW9uIGZvciBH
VEs0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzR1RLLnR4dAppbmRleCA2OGYwMDU4Nzc2YmUuLjc2ZjFlMDhjYTkzNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNHVEsudHh0CkBAIC0xOTQsNiArMTk0LDEwIEBAIFVJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJzaXRlRGF0YS5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXaW5kb3dQcm9wZXJ0aWVzLmNwcCBAbm8tdW5pZnkKIAorVUlQcm9jZXNzL0FQSS9ndGsvRHJh
Z1NvdXJjZUd0azMuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL0FQSS9ndGsvRHJhZ1NvdXJjZUd0
azQuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRhcmdldEd0azMuY3BwIEBu
by11bmlmeQorVUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRhcmdldEd0azQuY3BwIEBuby11bmlmeQog
VUlQcm9jZXNzL0FQSS9ndGsvSW5wdXRNZXRob2RGaWx0ZXJHdGsuY3BwIEBuby11bmlmeQogVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwIEBuby11bmlmeQpAQCAtMjU2LDcg
KzI2MCw2IEBAIFVJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVYMTEuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmQuY3BwCiBVSVByb2Nlc3MvZ3RrL0NsaXBi
b2FyZEd0azMuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGs0LmNwcCBA
bm8tdW5pZnkKLVVJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcAogVUlQcm9jZXNz
L2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9ndGsvSGFyZHdhcmVBY2NlbGVy
YXRpb25NYW5hZ2VyLmNwcAogVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJhZ1NvdXJjZS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9EcmFnU291cmNlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44YzZhNTRlOTY3NjkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL0RyYWdTb3VyY2UuaApAQCAt
MCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorCisjaW5jbHVkZSA8
V2ViQ29yZS9EcmFnQWN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCit0
eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKKworI2lmICFVU0UoR1RLNCkKK3R5
cGVkZWYgc3RydWN0IF9HZGtEcmFnQ29udGV4dCBHZGtEcmFnQ29udGV4dDsKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTZWxlY3Rpb25EYXRhOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgU2hhcmVhYmxlQml0bWFwOworCitjbGFzcyBEcmFnU291cmNlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEcmFnU291cmNlKTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisKKyAgICBleHBsaWNpdCBEcmFnU291cmNlKEd0a1dpZGdldCopOwor
ICAgIH5EcmFnU291cmNlKCk7CisKKyAgICB2b2lkIGJlZ2luKFJlZjxXZWJDb3JlOjpTZWxlY3Rp
b25EYXRhPiYmLCBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uLCBSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiYmKTsKKworcHJpdmF0ZToKKyAgICBHdGtXaWRnZXQqIG1fd2ViVmlldyB7IG51bGxwdHIgfTsK
KyNpZiAhVVNFKEdUSzQpCisgICAgR1JlZlB0cjxHZGtEcmFnQ29udGV4dD4gbV9kcmFnOworI2Vu
ZGlmCisgICAgUmVmUHRyPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+IG1fc2VsZWN0aW9uRGF0YTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQ
UE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJhZ1Nv
dXJjZUd0azMuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9EcmFnU291cmNl
R3RrMy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YzI2YWQy
YzBjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L0RyYWdTb3VyY2VHdGszLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJEcmFnU291cmNlLmgiCisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiAhVVNFKEdUSzQp
CisKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0dSZWZQdHJHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworZW51bSBEcmFnVGFyZ2V0VHlwZSB7IE1hcmt1cCwgVGV4dCwgSW1hZ2UsIFVS
SUxpc3QsIE5ldHNjYXBlVVJMLCBTbWFydFBhc3RlIH07CisKK0RyYWdTb3VyY2U6OkRyYWdTb3Vy
Y2UoR3RrV2lkZ2V0KiB3ZWJWaWV3KQorICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCit7CisgICAg
Z19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkcmFnLWRhdGEtZ2V0IiwgR19DQUxMQkFDSygr
W10oR3RrV2lkZ2V0KiwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEq
IGRhdGEsIGd1aW50IGluZm8sIGd1aW50LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBh
dXRvJiBkcmFnID0gKnN0YXRpY19jYXN0PERyYWdTb3VyY2UqPih1c2VyRGF0YSk7CisgICAgICAg
IGlmIChkcmFnLm1fZHJhZy5nZXQoKSAhPSBjb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHN3aXRjaCAoaW5mbykgeworICAgICAgICBjYXNlIERyYWdUYXJnZXRUeXBlOjpU
ZXh0OgorICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KGRhdGEsIGRyYWcu
bV9zZWxlY3Rpb25EYXRhLT50ZXh0KCkudXRmOCgpLmRhdGEoKSwgLTEpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRHJhZ1RhcmdldFR5cGU6Ok1hcmt1cDogeworICAgICAgICAg
ICAgQ1N0cmluZyBtYXJrdXAgPSBkcmFnLm1fc2VsZWN0aW9uRGF0YS0+bWFya3VwKCkudXRmOCgp
OworICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChkYXRhLCBnZGtfYXRvbV9pbnRl
cm5fc3RhdGljX3N0cmluZygidGV4dC9odG1sIiksIDgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Z3VjaGFyKj4obWFya3VwLmRhdGEoKSksIG1hcmt1cC5sZW5ndGgoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERyYWdUYXJnZXRUeXBlOjpVUklMaXN0OiB7
CisgICAgICAgICAgICBDU3RyaW5nIHVyaUxpc3QgPSBkcmFnLm1fc2VsZWN0aW9uRGF0YS0+dXJp
TGlzdCgpLnV0ZjgoKTsKKyAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQoZGF0YSwg
Z2RrX2F0b21faW50ZXJuX3N0YXRpY19zdHJpbmcoInRleHQvdXJpLWxpc3QiKSwgOCwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBndWNoYXIqPih1cmlMaXN0LmRhdGEoKSksIHVyaUxpc3QubGVuZ3Ro
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEcmFnVGFy
Z2V0VHlwZTo6TmV0c2NhcGVVUkw6IHsKKyAgICAgICAgICAgIENTdHJpbmcgdXJsU3RyaW5nID0g
ZHJhZy5tX3NlbGVjdGlvbkRhdGEtPnVybCgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICAgICAgICAg
IEdVbmlxdWVQdHI8Z2NoYXI+IHVybChnX3N0cmR1cF9wcmludGYoIiVzXG4lcyIsIHVybFN0cmlu
Zy5kYXRhKCksIGRyYWcubV9zZWxlY3Rpb25EYXRhLT5oYXNUZXh0KCkgPyBkcmFnLm1fc2VsZWN0
aW9uRGF0YS0+dGV4dCgpLnV0ZjgoKS5kYXRhKCkgOiB1cmxTdHJpbmcuZGF0YSgpKSk7CisgICAg
ICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KGRhdGEsIGdka19hdG9tX2ludGVybl9zdGF0
aWNfc3RyaW5nKCJfTkVUU0NBUEVfVVJMIiksIDgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ3Vj
aGFyKj4odXJsLmdldCgpKSwgc3RybGVuKHVybC5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEcmFnVGFyZ2V0VHlwZTo6SW1hZ2U6IHsKKyAgICAg
ICAgICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoZHJhZy5tX3NlbGVj
dGlvbkRhdGEtPmltYWdlKCktPmdldEdka1BpeGJ1ZigpKTsKKyAgICAgICAgICAgIGd0a19zZWxl
Y3Rpb25fZGF0YV9zZXRfcGl4YnVmKGRhdGEsIHBpeGJ1Zi5nZXQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERyYWdUYXJnZXRUeXBlOjpTbWFydFBhc3Rl
OgorICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KGRhdGEsICIiLCAtMSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0pLCB0aGlzKTsKKworICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZHJhZy1lbmQiLCBHX0NBTExCQUNLKCtbXShHdGtX
aWRnZXQqLCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAg
ICAgICAgYXV0byYgZHJhZyA9ICpzdGF0aWNfY2FzdDxEcmFnU291cmNlKj4odXNlckRhdGEpOwor
ICAgICAgICBpZiAoZHJhZy5tX2RyYWcuZ2V0KCkgIT0gY29udGV4dCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKCFkcmFnLm1fc2VsZWN0aW9uRGF0YSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBkcmFnLm1fc2VsZWN0aW9uRGF0YSA9IG51bGxwdHI7CisgICAgICAg
IGRyYWcubV9kcmFnID0gbnVsbHB0cjsKKworICAgICAgICBHZGtEZXZpY2UqIGRldmljZSA9IGdk
a19kcmFnX2NvbnRleHRfZ2V0X2RldmljZShjb250ZXh0KTsKKyAgICAgICAgaW50IHggPSAwOwor
ICAgICAgICBpbnQgeSA9IDA7CisgICAgICAgIGdka19kZXZpY2VfZ2V0X3dpbmRvd19hdF9wb3Np
dGlvbihkZXZpY2UsICZ4LCAmeSk7CisgICAgICAgIGludCB4Um9vdCA9IDA7CisgICAgICAgIGlu
dCB5Um9vdCA9IDA7CisgICAgICAgIGdka19kZXZpY2VfZ2V0X3Bvc2l0aW9uKGRldmljZSwgbnVs
bHB0ciwgJnhSb290LCAmeVJvb3QpOworCisgICAgICAgIGF1dG8qIHBhZ2UgPSB3ZWJraXRXZWJW
aWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UoZHJhZy5tX3dlYlZpZXcpKTsKKyAg
ICAgICAgQVNTRVJUKHBhZ2UpOworICAgICAgICBwYWdlLT5kcmFnRW5kZWQoeyB4LCB5IH0sIHsg
eFJvb3QsIHlSb290IH0sIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29u
dGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpKSk7CisgICAgfSksIHRoaXMpOworfQor
CitEcmFnU291cmNlOjp+RHJhZ1NvdXJjZSgpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9kYXRhKG1fd2ViVmlldywgdGhpcyk7Cit9CisKK3ZvaWQgRHJhZ1NvdXJjZTo6
YmVnaW4oUmVmPFNlbGVjdGlvbkRhdGE+JiYgc2VsZWN0aW9uRGF0YSwgRHJhZ09wZXJhdGlvbiBv
cGVyYXRpb24sIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYgaW1hZ2UpCit7CisgICAgaWYgKG1f
ZHJhZykgeworICAgICAgICBndGtfZHJhZ19jYW5jZWwobV9kcmFnLmdldCgpKTsKKyAgICAgICAg
bV9kcmFnID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBtX3NlbGVjdGlvbkRhdGEgPSBXVEZNb3Zl
KHNlbGVjdGlvbkRhdGEpOworCisgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0gYWRv
cHRHUmVmKGd0a190YXJnZXRfbGlzdF9uZXcobnVsbHB0ciwgMCkpOworICAgIGlmIChtX3NlbGVj
dGlvbkRhdGEtPmhhc1RleHQoKSkKKyAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF90ZXh0X3Rh
cmdldHMobGlzdC5nZXQoKSwgRHJhZ1RhcmdldFR5cGU6OlRleHQpOworICAgIGlmIChtX3NlbGVj
dGlvbkRhdGEtPmhhc01hcmt1cCgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3Qu
Z2V0KCksIGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0L2h0bWwiKSwgMCwgRHJh
Z1RhcmdldFR5cGU6Ok1hcmt1cCk7CisgICAgaWYgKG1fc2VsZWN0aW9uRGF0YS0+aGFzVVJJTGlz
dCgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3VyaV90YXJnZXRzKGxpc3QuZ2V0KCks
IERyYWdUYXJnZXRUeXBlOjpVUklMaXN0KTsKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhLT5oYXNV
UkwoKSkKKyAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LmdldCgpLCBnZGtfYXRvbV9p
bnRlcm5fc3RhdGljX3N0cmluZygiX05FVFNDQVBFX1VSTCIpLCAwLCBEcmFnVGFyZ2V0VHlwZTo6
TmV0c2NhcGVVUkwpOworICAgIGlmIChtX3NlbGVjdGlvbkRhdGEtPmhhc0ltYWdlKCkpCisgICAg
ICAgIGd0a190YXJnZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhsaXN0LmdldCgpLCBEcmFnVGFy
Z2V0VHlwZTo6SW1hZ2UsIFRSVUUpOworICAgIGlmIChtX3NlbGVjdGlvbkRhdGEtPmNhblNtYXJ0
UmVwbGFjZSgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QuZ2V0KCksIGdka19h
dG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJhcHBsaWNhdGlvbi92bmQud2Via2l0Z3RrLnNtYXJ0
cGFzdGUiKSwgMCwgRHJhZ1RhcmdldFR5cGU6OlNtYXJ0UGFzdGUpOworCisgICAgbV9kcmFnID0g
Z3RrX2RyYWdfYmVnaW5fd2l0aF9jb29yZGluYXRlcyhtX3dlYlZpZXcsIGxpc3QuZ2V0KCksIGRy
YWdPcGVyYXRpb25Ub0dka0RyYWdBY3Rpb25zKG9wZXJhdGlvbiksIEdES19CVVRUT05fUFJJTUFS
WSwgbnVsbHB0ciwgLTEsIC0xKTsKKyAgICBpZiAoaW1hZ2UpIHsKKyAgICAgICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlKGltYWdlLT5jcmVhdGVDYWlyb1N1cmZhY2UoKSk7
CisgICAgICAgIC8vIFVzZSB0aGUgY2VudGVyIG9mIHRoZSBkcmFnIGltYWdlIGFzIGhvdHNwb3Qu
CisgICAgICAgIGNhaXJvX3N1cmZhY2Vfc2V0X2RldmljZV9vZmZzZXQoaW1hZ2VTdXJmYWNlLmdl
dCgpLCAtY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2VTdXJmYWNlLmdldCgpKSAv
IDIsIC1jYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoaW1hZ2VTdXJmYWNlLmdldCgpKSAv
IDIpOworICAgICAgICBndGtfZHJhZ19zZXRfaWNvbl9zdXJmYWNlKG1fZHJhZy5nZXQoKSwgaW1h
Z2VTdXJmYWNlLmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ3RrX2RyYWdfc2V0X2ljb25f
ZGVmYXVsdChtX2RyYWcuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmICFVU0UoR1RLNCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRhcmdldC5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9Ecm9wVGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi44OWEwZDI4MTlkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL0Ryb3BUYXJnZXQuaApAQCAtMCwwICsxLDg3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorCisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnQWN0
aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBf
R3RrV2lkZ2V0IEd0a1dpZGdldDsKKworI2lmICFVU0UoR1RLNCkKK3R5cGVkZWYgc3RydWN0IF9H
ZGtEcmFnQ29udGV4dCBHZGtEcmFnQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9HdGtTZWxlY3Rp
b25EYXRhIEd0a1NlbGVjdGlvbkRhdGE7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgU2VsZWN0aW9uRGF0YTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNo
YXJlYWJsZUJpdG1hcDsKKworY2xhc3MgRHJvcFRhcmdldCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRHJvcFRhcmdldCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IGV4cGxpY2l0IERyb3BUYXJnZXQoR3RrV2lkZ2V0Kik7CisgICAgfkRyb3BUYXJnZXQoKTsKKwor
ICAgIHZvaWQgZGlkUGVyZm9ybUFjdGlvbigpOworCitwcml2YXRlOgorICAgIHZvaWQgYWNjZXB0
KHVuc2lnbmVkID0gMCk7CisgICAgdm9pZCBlbnRlcihXZWJDb3JlOjpJbnRQb2ludCYmLCB1bnNp
Z25lZCA9IDApOworICAgIHZvaWQgdXBkYXRlKFdlYkNvcmU6OkludFBvaW50JiYsIHVuc2lnbmVk
ID0gMCk7CisgICAgdm9pZCBsZWF2ZSgpOworICAgIHZvaWQgZHJvcChXZWJDb3JlOjpJbnRQb2lu
dCYmLCB1bnNpZ25lZCA9IDApOworCisjaWYgIVVTRShHVEs0KQorICAgIHZvaWQgZGF0YVJlY2Vp
dmVkKFdlYkNvcmU6OkludFBvaW50JiYsIEd0a1NlbGVjdGlvbkRhdGEqLCB1bnNpZ25lZCwgdW5z
aWduZWQpOworICAgIHZvaWQgbGVhdmVUaW1lckZpcmVkKCk7CisjZW5kaWYKKworICAgIEd0a1dp
ZGdldCogbV93ZWJWaWV3IHsgbnVsbHB0ciB9OworI2lmICFVU0UoR1RLNCkKKyAgICBHUmVmUHRy
PEdka0RyYWdDb250ZXh0PiBtX2Ryb3A7CisjZW5kaWYKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpJ
bnRQb2ludD4gbV9wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBtX2RhdGFSZXF1ZXN0Q291bnQgeyAw
IH07CisgICAgUmVmUHRyPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+IG1fc2VsZWN0aW9uRGF0YTsK
KyAgICBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uIG1fb3BlcmF0aW9uIHsgV2ViQ29yZTo6RHJhZ09w
ZXJhdGlvbk5vbmUgfTsKKyNpZiAhVVNFKEdUSzQpCisgICAgUnVuTG9vcDo6VGltZXI8RHJvcFRh
cmdldD4gbV9sZWF2ZVRpbWVyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL0Ryb3BUYXJnZXRHdGszLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRhcmdldEd0azMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uMzg4ZGVjMDdkYjJlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9Ecm9wVGFyZ2V0R3RrMy5jcHAKQEAgLTAsMCAr
MSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJvcFRhcmdldC5oIgorCisjaWYgRU5BQkxF
KERSQUdfU1VQUE9SVCkgJiYgIVVTRShHVEs0KQorCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvR1JlZlB0ckd0ay5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+Cisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZW51bSBEcm9w
VGFyZ2V0VHlwZSB7IE1hcmt1cCwgVGV4dCwgVVJJTGlzdCwgTmV0c2NhcGVVUkwsIFNtYXJ0UGFz
dGUgfTsKKworRHJvcFRhcmdldDo6RHJvcFRhcmdldChHdGtXaWRnZXQqIHdlYlZpZXcpCisgICAg
OiBtX3dlYlZpZXcod2ViVmlldykKKyAgICAsIG1fbGVhdmVUaW1lcihSdW5Mb29wOjptYWluKCks
IHRoaXMsICZEcm9wVGFyZ2V0OjpsZWF2ZVRpbWVyRmlyZWQpCit7CisgICAgR1JlZlB0cjxHdGtU
YXJnZXRMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKGd0a190YXJnZXRfbGlzdF9uZXcobnVsbHB0ciwg
MCkpOworICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJnZXRzKGxpc3QuZ2V0KCksIERy
b3BUYXJnZXRUeXBlOjpUZXh0KTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QuZ2V0KCks
IGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0L2h0bWwiKSwgMCwgRHJvcFRhcmdl
dFR5cGU6Ok1hcmt1cCk7CisgICAgZ3RrX3RhcmdldF9saXN0X2FkZF91cmlfdGFyZ2V0cyhsaXN0
LmdldCgpLCBEcm9wVGFyZ2V0VHlwZTo6VVJJTGlzdCk7CisgICAgZ3RrX3RhcmdldF9saXN0X2Fk
ZChsaXN0LmdldCgpLCBnZGtfYXRvbV9pbnRlcm5fc3RhdGljX3N0cmluZygiX05FVFNDQVBFX1VS
TCIpLCAwLCBEcm9wVGFyZ2V0VHlwZTo6TmV0c2NhcGVVUkwpOworICAgIGd0a190YXJnZXRfbGlz
dF9hZGQobGlzdC5nZXQoKSwgZ2RrX2F0b21faW50ZXJuX3N0YXRpY19zdHJpbmcoImFwcGxpY2F0
aW9uL3ZuZC53ZWJraXRndGsuc21hcnRwYXN0ZSIpLCAwLCBEcm9wVGFyZ2V0VHlwZTo6U21hcnRQ
YXN0ZSk7CisgICAgZ3RrX2RyYWdfZGVzdF9zZXQobV93ZWJWaWV3LCBzdGF0aWNfY2FzdDxHdGtE
ZXN0RGVmYXVsdHM+KDApLCBudWxscHRyLCAwLAorICAgICAgICBzdGF0aWNfY2FzdDxHZGtEcmFn
QWN0aW9uPihHREtfQUNUSU9OX0NPUFkgfCBHREtfQUNUSU9OX01PVkUgfCBHREtfQUNUSU9OX0xJ
TkspKTsKKyAgICBndGtfZHJhZ19kZXN0X3NldF90YXJnZXRfbGlzdChtX3dlYlZpZXcsIGxpc3Qu
Z2V0KCkpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkcmFnLW1vdGlvbiIs
IEdfQ0FMTEJBQ0soK1tdKEd0a1dpZGdldCosIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50
IHgsIGdpbnQgeSwgZ3VpbnQgdGltZSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsK
KyAgICAgICAgYXV0byYgZHJvcCA9ICpzdGF0aWNfY2FzdDxEcm9wVGFyZ2V0Kj4odXNlckRhdGEp
OworICAgICAgICBpZiAoIWRyb3AubV9kcm9wKSB7CisgICAgICAgICAgICBkcm9wLm1fZHJvcCA9
IGNvbnRleHQ7CisgICAgICAgICAgICBkcm9wLm1fcG9zaXRpb24gPSBJbnRQb2ludCh4LCB5KTsK
KyAgICAgICAgICAgIGRyb3AuYWNjZXB0KHRpbWUpOworICAgICAgICB9IGVsc2UgaWYgKGRyb3Au
bV9kcm9wID09IGNvbnRleHQpCisgICAgICAgICAgICBkcm9wLnVwZGF0ZSh7IHgsIHkgfSwgdGlt
ZSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0pLCB0aGlzKTsKKworICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAiZHJhZy1sZWF2ZSIsIEdfQ0FMTEJBQ0soK1tdKEd0a1dpZGdl
dCosIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBndWludCB0aW1lLCBncG9pbnRlciB1c2VyRGF0
YSkgeworICAgICAgICBhdXRvJiBkcm9wID0gKnN0YXRpY19jYXN0PERyb3BUYXJnZXQqPih1c2Vy
RGF0YSk7CisgICAgICAgIGlmIChkcm9wLm1fZHJvcCAhPSBjb250ZXh0KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBkcm9wLmxlYXZlKCk7CisgICAgfSksIHRoaXMpOworCisgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkcmFnLWRyb3AiLCBHX0NBTExCQUNLKCtbXShHdGtX
aWRnZXQqLCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIGd1aW50IHRp
bWUsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIGF1dG8mIGRyb3Ag
PSAqc3RhdGljX2Nhc3Q8RHJvcFRhcmdldCo+KHVzZXJEYXRhKTsKKyAgICAgICAgaWYgKGRyb3Au
bV9kcm9wICE9IGNvbnRleHQpIHsKKyAgICAgICAgICAgIGd0a19kcmFnX2ZpbmlzaChjb250ZXh0
LCBGQUxTRSwgRkFMU0UsIHRpbWUpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAg
IH0KKyAgICAgICAgZHJvcC5kcm9wKHsgeCwgeSB9LCB0aW1lKTsKKyAgICAgICAgcmV0dXJuIFRS
VUU7CisgICAgfSksIHRoaXMpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJk
cmFnLWRhdGEtcmVjZWl2ZWQiLCBHX0NBTExCQUNLKCtbXShHdGtXaWRnZXQqLCBHZGtEcmFnQ29u
dGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEsIGd1
aW50IGluZm8sIGd1aW50IHRpbWUsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8m
IGRyb3AgPSAqc3RhdGljX2Nhc3Q8RHJvcFRhcmdldCo+KHVzZXJEYXRhKTsKKyAgICAgICAgaWYg
KGRyb3AubV9kcm9wICE9IGNvbnRleHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRy
b3AuZGF0YVJlY2VpdmVkKHsgeCwgeSB9LCBkYXRhLCBpbmZvLCB0aW1lKTsKKyAgICB9KSwgdGhp
cyk7Cit9CisKK0Ryb3BUYXJnZXQ6On5Ecm9wVGFyZ2V0KCkKK3sKKyAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV93ZWJWaWV3LCB0aGlzKTsKK30KKwordm9pZCBEcm9w
VGFyZ2V0OjphY2NlcHQodW5zaWduZWQgdGltZSkKK3sKKyAgICBpZiAobV9sZWF2ZVRpbWVyLmlz
QWN0aXZlKCkpIHsKKyAgICAgICAgbV9sZWF2ZVRpbWVyLnN0b3AoKTsKKyAgICAgICAgbGVhdmVU
aW1lckZpcmVkKCk7CisgICAgfQorCisgICAgbV9kYXRhUmVxdWVzdENvdW50ID0gMDsKKyAgICBt
X3NlbGVjdGlvbkRhdGEgPSBTZWxlY3Rpb25EYXRhOjpjcmVhdGUoKTsKKworICAgIC8vIFdlYkNv
cmUgbmVlZHMgdGhlIHNlbGVjdGlvbiBkYXRhIHRvIGRlY2lkZSwgc28gd2UgbmVlZCB0byBwcmVs
b2FkIHRoZQorICAgIC8vIGRhdGEgb2YgdGFyZ2V0cyB3ZSBzdXBwb3J0LiBPbmNlIGFsbCBkYXRh
IHJlcXVlc3RzIGFyZSBkb25lIHdlIHN0YXJ0CisgICAgLy8gbm90aWZ5aW5nIHRoZSB3ZWIgcHJv
Y2VzcyBhYm91dCB0aGUgRE5EIGV2ZW50cy4KKyAgICBhdXRvKiBsaXN0ID0gZ2RrX2RyYWdfY29u
dGV4dF9saXN0X3RhcmdldHMobV9kcm9wLmdldCgpKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3Qgc3VwcG9ydGVkVGFyZ2V0c1tdID0geworICAgICAgICAidGV4dC9wbGFpbjtjaGFyc2V0
PXV0Zi04IiwKKyAgICAgICAgInRleHQvaHRtbCIsCisgICAgICAgICJfTkVUU0NBUEVfVVJMIiwK
KyAgICAgICAgInRleHQvdXJpLWxpc3QiLAorICAgICAgICAiYXBwbGljYXRpb24vdm5kLndlYmtp
dGd0ay5zbWFydHBhc3RlIgorICAgIH07CisgICAgVmVjdG9yPEdka0F0b20sIDQ+IHRhcmdldHM7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyhzdXBwb3J0ZWRUYXJn
ZXRzKTsgKytpKSB7CisgICAgICAgIEdka0F0b20gYXRvbSA9IGdka19hdG9tX2ludGVybl9zdGF0
aWNfc3RyaW5nKHN1cHBvcnRlZFRhcmdldHNbaV0pOworICAgICAgICBpZiAoZ19saXN0X2ZpbmQo
bGlzdCwgYXRvbSkpCisgICAgICAgICAgICB0YXJnZXRzLmFwcGVuZChhdG9tKTsKKyAgICAgICAg
ZWxzZSBpZiAoIWkpIHsKKyAgICAgICAgICAgIGF0b20gPSBnZGtfYXRvbV9pbnRlcm5fc3RhdGlj
X3N0cmluZygidGV4dC9wbGFpbiIpOworICAgICAgICAgICAgaWYgKGdfbGlzdF9maW5kKGxpc3Qs
IGF0b20pKQorICAgICAgICAgICAgICAgIHRhcmdldHMuYXBwZW5kKGF0b20pOworICAgICAgICB9
CisgICAgfQorCisgICAgbV9kYXRhUmVxdWVzdENvdW50ID0gdGFyZ2V0cy5zaXplKCk7CisgICAg
Zm9yIChhdXRvKiBhdG9tIDogdGFyZ2V0cykKKyAgICAgICAgZ3RrX2RyYWdfZ2V0X2RhdGEobV93
ZWJWaWV3LCBtX2Ryb3AuZ2V0KCksIGF0b20sIHRpbWUpOworfQorCit2b2lkIERyb3BUYXJnZXQ6
OmVudGVyKEludFBvaW50JiYgcG9zaXRpb24sIHVuc2lnbmVkIHRpbWUpCit7CisgICAgbV9wb3Np
dGlvbiA9IFdURk1vdmUocG9zaXRpb24pOworCisgICAgYXV0byogcGFnZSA9IHdlYmtpdFdlYlZp
ZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3dlYlZpZXcpKTsKKyAgICBBU1NF
UlQocGFnZSk7CisgICAgcGFnZS0+cmVzZXRDdXJyZW50RHJhZ0luZm9ybWF0aW9uKCk7CisKKyAg
ICBEcmFnRGF0YSBkcmFnRGF0YShtX3NlbGVjdGlvbkRhdGEuZ2V0KCksICptX3Bvc2l0aW9uLCBj
b252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fd2ViVmlldywgKm1fcG9zaXRpb24pLCBn
ZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMo
bV9kcm9wLmdldCgpKSkpOworICAgIHBhZ2UtPmRyYWdFbnRlcmVkKGRyYWdEYXRhKTsKK30KKwor
dm9pZCBEcm9wVGFyZ2V0Ojp1cGRhdGUoSW50UG9pbnQmJiBwb3NpdGlvbiwgdW5zaWduZWQgdGlt
ZSkKK3sKKyAgICBpZiAobV9kYXRhUmVxdWVzdENvdW50IHx8ICFtX3NlbGVjdGlvbkRhdGEpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fcG9zaXRpb24gPSBXVEZNb3ZlKHBvc2l0aW9uKTsKKwor
ICAgIGF1dG8qIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVX
X0JBU0UobV93ZWJWaWV3KSk7CisgICAgQVNTRVJUKHBhZ2UpOworCisgICAgRHJhZ0RhdGEgZHJh
Z0RhdGEobV9zZWxlY3Rpb25EYXRhLmdldCgpLCAqbV9wb3NpdGlvbiwgY29udmVydFdpZGdldFBv
aW50VG9TY3JlZW5Qb2ludChtX3dlYlZpZXcsICptX3Bvc2l0aW9uKSwgZ2RrRHJhZ0FjdGlvblRv
RHJhZ09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rpb25zKG1fZHJvcC5nZXQoKSkp
KTsKKyAgICBwYWdlLT5kcmFnVXBkYXRlZChkcmFnRGF0YSk7Cit9CisKK3ZvaWQgRHJvcFRhcmdl
dDo6ZGF0YVJlY2VpdmVkKEludFBvaW50JiYgcG9zaXRpb24sIEd0a1NlbGVjdGlvbkRhdGEqIGRh
dGEsIHVuc2lnbmVkIGluZm8sIHVuc2lnbmVkIHRpbWUpCit7CisgICAgc3dpdGNoIChpbmZvKSB7
CisgICAgY2FzZSBEcm9wVGFyZ2V0VHlwZTo6VGV4dDogeworICAgICAgICBHVW5pcXVlUHRyPGNo
YXI+IHRleHQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF90
ZXh0KGRhdGEpKSk7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0VGV4dChTdHJpbmc6OmZy
b21VVEY4KHRleHQuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRHJv
cFRhcmdldFR5cGU6Ok1hcmt1cDogeworICAgICAgICBnaW50IGxlbmd0aDsKKyAgICAgICAgY29u
c3QgYXV0byogbWFya3VwRGF0YSA9IGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YV93aXRoX2xl
bmd0aChkYXRhLCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKGxlbmd0aCkgeworICAgICAgICAgICAg
Ly8gSWYgZGF0YSBzdGFydHMgd2l0aCBVVEYtMTYgQk9NIGFzc3VtZSBpdCdzIFVURi0xNiwgb3Ro
ZXJ3aXNlIGFzc3VtZSBVVEYtOC4KKyAgICAgICAgICAgIGlmIChsZW5ndGggPj0gMiAmJiByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obWFya3VwRGF0YSlbMF0gPT0gMHhGRUZGKQorICAg
ICAgICAgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0TWFya3VwKFN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyKj4obWFya3VwRGF0YSkgKyAxLCAobGVuZ3RoIC8gMikgLSAxKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25EYXRhLT5zZXRN
YXJrdXAoU3RyaW5nOjpmcm9tVVRGOChtYXJrdXBEYXRhLCBsZW5ndGgpKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBEcm9wVGFyZ2V0VHlwZTo6VVJJTGlzdDog
eworICAgICAgICBnaW50IGxlbmd0aDsKKyAgICAgICAgY29uc3QgYXV0byogdXJpTGlzdERhdGEg
PSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGFfd2l0aF9sZW5ndGgoZGF0YSwgJmxlbmd0aCk7
CisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldFVS
SUxpc3QoU3RyaW5nOjpmcm9tVVRGOCh1cmlMaXN0RGF0YSwgbGVuZ3RoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIERyb3BUYXJnZXRUeXBlOjpOZXRzY2FwZVVSTDogeworICAg
ICAgICBnaW50IGxlbmd0aDsKKyAgICAgICAgY29uc3QgYXV0byogdXJsRGF0YSA9IGd0a19zZWxl
Y3Rpb25fZGF0YV9nZXRfZGF0YV93aXRoX2xlbmd0aChkYXRhLCAmbGVuZ3RoKTsKKyAgICAgICAg
aWYgKGxlbmd0aCkgeworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gdG9rZW5zID0gU3RyaW5n
Ojpmcm9tVVRGOCh1cmxEYXRhLCBsZW5ndGgpLnNwbGl0KCdcbicpOworICAgICAgICAgICAgVVJM
IHVybCh7IH0sIHRva2Vuc1swXSk7CisgICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldFVSTCh1cmwsIHRva2Vucy5zaXplKCkg
PiAxID8gdG9rZW5zWzFdIDogU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIERyb3BUYXJnZXRUeXBlOjpTbWFydFBhc3RlOgorICAgICAgICBtX3Nl
bGVjdGlvbkRhdGEtPnNldENhblNtYXJ0UmVwbGFjZSh0cnVlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgaWYgKC0tbV9kYXRhUmVxdWVzdENvdW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBlbnRlcihXVEZNb3ZlKHBvc2l0aW9uKSwgdGltZSk7Cit9CisKK3ZvaWQgRHJvcFRhcmdl
dDo6ZGlkUGVyZm9ybUFjdGlvbigpCit7CisgICAgaWYgKCFtX2Ryb3ApCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8qIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dF
Ql9WSUVXX0JBU0UobV93ZWJWaWV3KSk7CisgICAgQVNTRVJUKHBhZ2UpOworCisgICAgYXV0byBv
cGVyYXRpb24gPSBwYWdlLT5jdXJyZW50RHJhZ09wZXJhdGlvbigpOworICAgIGlmIChvcGVyYXRp
b24gPT0gbV9vcGVyYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fb3BlcmF0aW9uID0g
b3BlcmF0aW9uOworICAgIGdka19kcmFnX3N0YXR1cyhtX2Ryb3AuZ2V0KCksIGRyYWdPcGVyYXRp
b25Ub1NpbmdsZUdka0RyYWdBY3Rpb24obV9vcGVyYXRpb24pLCBHREtfQ1VSUkVOVF9USU1FKTsK
K30KKwordm9pZCBEcm9wVGFyZ2V0OjpsZWF2ZVRpbWVyRmlyZWQoKQoreworICAgIGF1dG8qIHBh
Z2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJW
aWV3KSk7CisgICAgQVNTRVJUKHBhZ2UpOworCisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEobV9zZWxl
Y3Rpb25EYXRhLmdldCgpLCAqbV9wb3NpdGlvbiwgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Q
b2ludChtX3dlYlZpZXcsICptX3Bvc2l0aW9uKSwgRHJhZ09wZXJhdGlvbk5vbmUpOworICAgIHBh
Z2UtPmRyYWdFeGl0ZWQoZHJhZ0RhdGEpOworICAgIHBhZ2UtPnJlc2V0Q3VycmVudERyYWdJbmZv
cm1hdGlvbigpOworCisgICAgbV9kcm9wID0gbnVsbHB0cjsKKyAgICBtX3Bvc2l0aW9uID0gV1RG
OjpudWxsb3B0OworICAgIG1fc2VsZWN0aW9uRGF0YSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgRHJv
cFRhcmdldDo6bGVhdmUoKQoreworICAgIC8vIEdUSyBlbWl0cyBkcmFnLWxlYXZlIGJlZm9yZSBk
cmFnLWRyb3AsIGJ1dCB3ZSBuZWVkIHRvIGtub3cgd2hldGhlciBhIGRyb3AKKyAgICAvLyBoYXBw
ZW5lZCB0byBub3RpZnkgdGhlIHdlYiBwcm9jZXNzIGFib3V0IHRoZSBkcmFnIGV4aXQuCisgICAg
bV9sZWF2ZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCit2b2lkIERyb3BUYXJnZXQ6OmRy
b3AoSW50UG9pbnQmJiBwb3NpdGlvbiwgdW5zaWduZWQgdGltZSkKK3sKKyAgICBpZiAobV9sZWF2
ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGVhdmVUaW1lci5zdG9wKCk7CisKKyAgICBh
dXRvKiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNF
KG1fd2ViVmlldykpOworICAgIEFTU0VSVChwYWdlKTsKKworICAgIHVpbnQzMl90IGZsYWdzID0g
MDsKKyAgICBpZiAoZ2RrX2RyYWdfY29udGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKG1fZHJvcC5n
ZXQoKSkgPT0gR0RLX0FDVElPTl9DT1BZKQorICAgICAgICBmbGFncyB8PSBEcmFnQXBwbGljYXRp
b25Jc0NvcHlLZXlEb3duOworICAgIERyYWdEYXRhIGRyYWdEYXRhKG1fc2VsZWN0aW9uRGF0YS5n
ZXQoKSwgcG9zaXRpb24sIGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQobV93ZWJWaWV3
LCBwb3NpdGlvbiksIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4
dF9nZXRfYWN0aW9ucyhtX2Ryb3AuZ2V0KCkpKSwgc3RhdGljX2Nhc3Q8RHJhZ0FwcGxpY2F0aW9u
RmxhZ3M+KGZsYWdzKSk7CisgICAgcGFnZS0+cGVyZm9ybURyYWdPcGVyYXRpb24oZHJhZ0RhdGEs
IHsgfSwgeyB9LCB7IH0pOworICAgIGd0a19kcmFnX2ZpbmlzaChtX2Ryb3AuZ2V0KCksIFRSVUUs
IEZBTFNFLCB0aW1lKTsKKworICAgIG1fZHJvcCA9IG51bGxwdHI7CisgICAgbV9wb3NpdGlvbiA9
IFdURjo6bnVsbG9wdDsKKyAgICBtX3NlbGVjdGlvbkRhdGEgPSBudWxscHRyOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmICFV
U0UoR1RLNCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFn
ZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xp
ZW50SW1wbC5jcHAKaW5kZXggNjhmZGExNzAyY2NlLi5hYWIwZjdlZDBhZDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCkBAIC0z
MzAsMTQgKzMzMCwxMiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDaGFuZ2VDb250ZW50U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpzdGFydERyYWcoUmVmPFNlbGVjdGlvbkRhdGE+JiYgc2VsZWN0aW9uLCBE
cmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24sIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYgZHJh
Z0ltYWdlKQogewotI2lmICFVU0UoR1RLNCkKLSAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCk7Ci0gICAgd2Via2l0V2ViVmll
d0Jhc2VEcmFnQW5kRHJvcEhhbmRsZXIod2ViVmlldykuc3RhcnREcmFnKFdURk1vdmUoc2VsZWN0
aW9uKSwgZHJhZ09wZXJhdGlvbiwgV1RGTW92ZShkcmFnSW1hZ2UpKTsKKyAgICB3ZWJraXRXZWJW
aWV3QmFzZVN0YXJ0RHJhZyhXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpLCBXVEZN
b3ZlKHNlbGVjdGlvbiksIGRyYWdPcGVyYXRpb24sIFdURk1vdmUoZHJhZ0ltYWdlKSk7Cit9CiAK
LSAgICAvLyBBIGRyYWcgc3RhcnRpbmcgc2hvdWxkIHByZXZlbnQgYSBkb3VibGUtY2xpY2sgZnJv
bSBoYXBwZW5pbmcuIFRoaXMgbWlnaHQKLSAgICAvLyBoYXBwZW4gaWYgYSBkcmFnIGlzIGZvbGxv
d2VkIHZlcnkgcXVpY2tseSBieSBhbm90aGVyIGNsaWNrIChsaWtlIGluIHRoZSBXVFIpLgotICAg
IHdlYmtpdFdlYlZpZXdCYXNlUmVzZXRDbGlja0NvdW50ZXIod2ViVmlldyk7Ci0jZW5kaWYKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OmRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbigpCit7Cisg
ICAgd2Via2l0V2ViVmlld0Jhc2VEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCmluZGV4IGNkZDdjZGRi
ZGM4MC4uNzI3MjczNDNkZTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9QYWdlQ2xpZW50SW1wbC5oCkBAIC0xMDEsNiArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8Vmlld1NuYXBzaG90PiB0YWtlVmlld1NuYXBzaG90KE9wdGlvbmFsPFdlYkNvcmU6Oklu
dFJlY3Q+JiYpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgdm9pZCBz
dGFydERyYWcoUmVmPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+JiYsIFdlYkNvcmU6OkRyYWdPcGVy
YXRpb24sIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYgZHJhZ0ltYWdlKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbigpIG92ZXJyaWRlOwogI2VuZGlm
CiAKICAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJU
cmVlQ29udGV4dCYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCAzNzU5OTExNmQzYzEuLmMzZTNh
NmM1ZTJhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTMxLDcgKzMxLDkgQEAKIAogI2luY2x1ZGUgIkFQSVBh
Z2VDb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAiQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUuaCIK
KyNpbmNsdWRlICJEcmFnU291cmNlLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUNvb3Jk
aW5hdGVkR3JhcGhpY3MuaCIKKyNpbmNsdWRlICJEcm9wVGFyZ2V0LmgiCiAjaW5jbHVkZSAiSW5w
dXRNZXRob2RGaWx0ZXIuaCIKICNpbmNsdWRlICJLZXlCaW5kaW5nVHJhbnNsYXRvci5oIgogI2lu
Y2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKQEAgLTU4LDcgKzYwLDYgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lv
bmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtRGlz
cGxheS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1JlZ2lvbi5oPgpAQCAtMjE5LDggKzIyMCw5IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlIHsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2NlbGVyYXRlZEJhY2tpbmdTdG9y
ZT4gYWNjZWxlcmF0ZWRCYWNraW5nU3RvcmU7CiAKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAm
JiAhVVNFKEdUSzQpCi0gICAgc3RkOjp1bmlxdWVfcHRyPERyYWdBbmREcm9wSGFuZGxlcj4gZHJh
Z0FuZERyb3BIYW5kbGVyOworI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgc3RkOjp1bmlx
dWVfcHRyPERyYWdTb3VyY2U+IGRyYWdTb3VyY2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPERyb3BU
YXJnZXQ+IGRyb3BUYXJnZXQ7CiAjZW5kaWYKIAogI2lmICFVU0UoR1RLNCkKQEAgLTE1NTQsMjcg
KzE1NTYsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VRdWVyeVRvb2x0aXAo
R3RrV2lkZ2V0KiB3aWRnZXQsIGdpbnQgLyogeCAqLywgZwogICAgIHJldHVybiBUUlVFOwogfQog
Ci0jaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgIVVTRShHVEs0KQotc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VEcmFnRGF0YUdldChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRl
eHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8s
IGd1aW50IC8qIHRpbWUgKi8pCi17Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2
ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdjsKLSAgICBBU1NFUlQocHJpdi0+
ZHJhZ0FuZERyb3BIYW5kbGVyKTsKLSAgICBwcml2LT5kcmFnQW5kRHJvcEhhbmRsZXItPmZpbGxE
cmFnRGF0YShjb250ZXh0LCBzZWxlY3Rpb25EYXRhLCBpbmZvKTsKLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VEcmFnRW5kKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4
dCogY29udGV4dCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSBXRUJL
SVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2OwotICAgIEFTU0VSVChwcml2LT5kcmFnQW5k
RHJvcEhhbmRsZXIpOwotICAgIHByaXYtPmRyYWdBbmREcm9wSGFuZGxlci0+ZmluaXNoRHJhZyhj
b250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2Vp
dmVkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCAvKiB4
ICovLCBnaW50IC8qIHkgKi8sIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50
IGluZm8sIGd1aW50IHRpbWUpCi17Ci0gICAgd2Via2l0V2ViVmlld0Jhc2VEcmFnQW5kRHJvcEhh
bmRsZXIoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KSkuZHJhZ0VudGVyZWQoY29udGV4dCwg
c2VsZWN0aW9uRGF0YSwgaW5mbywgdGltZSk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQ
UE9SVCkKLQogI2lmICFVU0UoR1RLNCkKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFz
ZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQpCiB7CkBAIC0xNjAxLDI4
ICsxNTgyLDYgQEAgc3RhdGljIEF0a09iamVjdCogd2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3Np
YmxlKEd0a1dpZGdldCogd2lkZ2V0KQogICAgIHJldHVybiBwcml2LT5hY2Nlc3NpYmxlLmdldCgp
OwogfQogCi0jaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgIVVTRShHVEs0KQotc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ01vdGlvbihHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBndWludCB0aW1lKQotewotICAg
IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0FuZERyb3BIYW5kbGVyKFdFQktJVF9XRUJfVklFV19CQVNF
KHdpZGdldCkpLmRyYWdNb3Rpb24oY29udGV4dCwgSW50UG9pbnQoeCwgeSksIHRpbWUpOwotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURyYWdMZWF2
ZShHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGd1aW50IC8qIHRp
bWUgKi8pCi17Ci0gICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dF
Ql9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdjsKLSAgICBBU1NFUlQocHJpdi0+ZHJhZ0FuZERyb3BI
YW5kbGVyKTsKLSAgICBwcml2LT5kcmFnQW5kRHJvcEhhbmRsZXItPmRyYWdMZWF2ZShjb250ZXh0
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0Ryb3AoR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgZ3Vp
bnQgdGltZSkKLXsKLSAgICBXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSBXRUJLSVRf
V0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2OwotICAgIEFTU0VSVChwcml2LT5kcmFnQW5kRHJv
cEhhbmRsZXIpOwotICAgIHJldHVybiBwcml2LT5kcmFnQW5kRHJvcEhhbmRsZXItPmRyb3AoY29u
dGV4dCwgSW50UG9pbnQoeCwgeSksIHRpbWUpOwotfQotI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NV
UFBPUlQpCi0KICNpZiAhVVNFKEdUSzQpCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUhp
ZXJhcmNoeUNoYW5nZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1dpZGdldCogb2xkVG9wbGV2ZWwp
CiB7CkBAIC0xNjczLDEwICsxNjMyLDggQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VD
b25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgcHJpdi0+cGFnZUNsaWVudCA9IG1ha2VV
bmlxdWU8UGFnZUNsaWVudEltcGw+KHZpZXdXaWRnZXQpOwogICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIodmlld1dpZGdldCksIHByaXYtPmtleUJpbmRpbmdUcmFuc2xhdG9yLndp
ZGdldCgpKTsKIAotI2lmICFVU0UoR1RLNCkKLSAgICBndGtfZHJhZ19kZXN0X3NldCh2aWV3V2lk
Z2V0LCBzdGF0aWNfY2FzdDxHdGtEZXN0RGVmYXVsdHM+KDApLCBudWxscHRyLCAwLAotICAgICAg
ICBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NPUFkgfCBHREtfQUNUSU9O
X01PVkUgfCBHREtfQUNUSU9OX0xJTksgfCBHREtfQUNUSU9OX1BSSVZBVEUpKTsKLSAgICBndGtf
ZHJhZ19kZXN0X3NldF90YXJnZXRfbGlzdCh2aWV3V2lkZ2V0LCBQYXN0ZWJvYXJkSGVscGVyOjpz
aW5nbGV0b24oKS50YXJnZXRMaXN0KCkpOworI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAg
cHJpdi0+ZHJvcFRhcmdldCA9IG1ha2VVbmlxdWU8RHJvcFRhcmdldD4odmlld1dpZGdldCk7CiAj
ZW5kaWYKIAogI2lmIFVTRShHVEs0KQpAQCAtMTc0NywxNCArMTcwNCw2IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyog
d2Via2l0V2ViVmllCiAgICAgd2lkZ2V0Q2xhc3MtPnRvdWNoX2V2ZW50ID0gd2Via2l0V2ViVmll
d0Jhc2VUb3VjaEV2ZW50OwogI2VuZGlmCiAgICAgd2lkZ2V0Q2xhc3MtPnF1ZXJ5X3Rvb2x0aXAg
PSB3ZWJraXRXZWJWaWV3QmFzZVF1ZXJ5VG9vbHRpcDsKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JU
KSAmJiAhVVNFKEdUSzQpCi0gICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZW5kID0gd2Via2l0V2ViVmll
d0Jhc2VEcmFnRW5kOwotICAgIHdpZGdldENsYXNzLT5kcmFnX2RhdGFfZ2V0ID0gd2Via2l0V2Vi
Vmlld0Jhc2VEcmFnRGF0YUdldDsKLSAgICB3aWRnZXRDbGFzcy0+ZHJhZ19tb3Rpb24gPSB3ZWJr
aXRXZWJWaWV3QmFzZURyYWdNb3Rpb247Ci0gICAgd2lkZ2V0Q2xhc3MtPmRyYWdfbGVhdmUgPSB3
ZWJraXRXZWJWaWV3QmFzZURyYWdMZWF2ZTsKLSAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kcm9wID0g
d2Via2l0V2ViVmlld0Jhc2VEcmFnRHJvcDsKLSAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kYXRhX3Jl
Y2VpdmVkID0gd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkOwotI2VuZGlmIC8vIEVO
QUJMRShEUkFHX1NVUFBPUlQpCiAjaWYgIVVTRShHVEs0KQogICAgIHdpZGdldENsYXNzLT5ldmVu
dCA9IHdlYmtpdFdlYlZpZXdCYXNlRXZlbnQ7CiAjZW5kaWYKQEAgLTE4MjksMTMgKzE3NzgsMjUg
QEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldFRvb2x0aXBBcmVhKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJWaWV3QmFzZSwgY29uc3QgSW50UmUKICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+dG9vbHRp
cEFyZWEgPSB0b29sdGlwQXJlYTsKIH0KIAotI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmICFV
U0UoR1RLNCkKLURyYWdBbmREcm9wSGFuZGxlciYgd2Via2l0V2ViVmlld0Jhc2VEcmFnQW5kRHJv
cEhhbmRsZXIoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlKQorI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKFdlYktpdFdlYlZpZXdC
YXNlKiB3ZWJWaWV3QmFzZSwgUmVmPFNlbGVjdGlvbkRhdGE+JiYgc2VsZWN0aW9uRGF0YSwgRHJh
Z09wZXJhdGlvbiBkcmFnT3BlcmF0aW9uLCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiYmIGltYWdl
KQogewogICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5w
cml2OwotICAgIGlmICghcHJpdi0+ZHJhZ0FuZERyb3BIYW5kbGVyKQotICAgICAgICBwcml2LT5k
cmFnQW5kRHJvcEhhbmRsZXIgPSBtYWtlVW5pcXVlPERyYWdBbmREcm9wSGFuZGxlcj4oKnByaXYt
PnBhZ2VQcm94eSk7Ci0gICAgcmV0dXJuICpwcml2LT5kcmFnQW5kRHJvcEhhbmRsZXI7CisgICAg
aWYgKCFwcml2LT5kcmFnU291cmNlKQorICAgICAgICBwcml2LT5kcmFnU291cmNlID0gbWFrZVVu
aXF1ZTxEcmFnU291cmNlPihHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CisKKyAgICBwcml2LT5k
cmFnU291cmNlLT5iZWdpbihXVEZNb3ZlKHNlbGVjdGlvbkRhdGEpLCBkcmFnT3BlcmF0aW9uLCBX
VEZNb3ZlKGltYWdlKSk7CisKKyNpZiAhVVNFKEdUSzQpCisgICAgLy8gQSBkcmFnIHN0YXJ0aW5n
IHNob3VsZCBwcmV2ZW50IGEgZG91YmxlLWNsaWNrIGZyb20gaGFwcGVuaW5nLiBUaGlzIG1pZ2h0
CisgICAgLy8gaGFwcGVuIGlmIGEgZHJhZyBpcyBmb2xsb3dlZCB2ZXJ5IHF1aWNrbHkgYnkgYW5v
dGhlciBjbGljayAobGlrZSBpbiB0aGUgV1RSKS4KKyAgICBwcml2LT5jbGlja0NvdW50ZXIucmVz
ZXQoKTsKKyNlbmRpZgorfQorCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkUGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sKKyAgICB3
ZWJWaWV3QmFzZS0+cHJpdi0+ZHJvcFRhcmdldC0+ZGlkUGVyZm9ybUFjdGlvbigpOwogfQogI2Vu
ZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCmluZGV4IGFk
ZmE2NzkwNzA3OS4uYTFkZGVkMzk5ZDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJHZXN0dXJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIklucHV0
TWV0aG9kU3RhdGUuaCIKICNpbmNsdWRlICJTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIgor
I2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIlZpZXdHZXN0dXJlQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCiAjaW5jbHVkZSAiV2ViQ29u
dGV4dE1lbnVQcm94eUd0ay5oIgpAQCAtMzksNiArNDAsOCBAQAogI2luY2x1ZGUgIldlYktpdElu
cHV0TWV0aG9kQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnQWN0aW9ucy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvU2VsZWN0aW9uRGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogCiBXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2VDcmVhdGUoY29uc3Qg
QVBJOjpQYWdlQ29uZmlndXJhdGlvbiYpOwpAQCAtNzgsOCArODEsOSBAQCB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlRGlkRXhpdFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2UqKTsKIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VEaWRSZWxhdW5jaFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2UqKTsK
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VQYWdlQ2xvc2VkKFdlYktpdFdlYlZpZXdCYXNlKik7CiAK
LSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiAhVVNFKEdUSzQpCi1XZWJLaXQ6OkRyYWdBbmRE
cm9wSGFuZGxlciYgd2Via2l0V2ViVmlld0Jhc2VEcmFnQW5kRHJvcEhhbmRsZXIoV2ViS2l0V2Vi
Vmlld0Jhc2UqKTsKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQordm9pZCB3ZWJraXRXZWJWaWV3
QmFzZVN0YXJ0RHJhZyhXZWJLaXRXZWJWaWV3QmFzZSosIFJlZjxXZWJDb3JlOjpTZWxlY3Rpb25E
YXRhPiYmLCBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uLCBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA+JiYpOwordm9pZCB3ZWJraXRXZWJWaWV3QmFzZURpZFBlcmZvcm1EcmFnQ29udHJvbGxl
ckFjdGlvbihXZWJLaXRXZWJWaWV3QmFzZSopOwogI2VuZGlmCiAKICNpZiAhVVNFKEdUSzQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggNTc2Nzg4NTJlMjVlLi45NThkMTli
NWU1NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKQEAgLTI1MCw2ICsyNTAs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpE
cmFnSXRlbSYsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJikgeyB9CiAjZW5kaWYKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybURyYWdPcGVyYXRpb24oYm9vbCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbigpIHsgfQogI2VuZGlmIC8v
IEVOQUJMRShEUkFHX1NVUFBPUlQpCiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0
IFdlYkNvcmU6OkN1cnNvciYpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCmluZGV4IDMzN2E4ZjA3MWI3MC4uNTdhY2MzODZhZDlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTI0NTEsNiArMjQ1MSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgZHJhZ09w
ZXJhdGlvbiwgV2ViQ29yCiAgICAgbV9jdXJyZW50RHJhZ051bWJlck9mRmlsZXNUb0JlQWNjZXB0
ZWQgPSBudW1iZXJPZkl0ZW1zVG9CZUFjY2VwdGVkOwogICAgIG1fY3VycmVudERyYWdDYXJldEVk
aXRhYmxlRWxlbWVudFJlY3QgPSBlZGl0YWJsZUVsZW1lbnRSZWN0OwogICAgIHNldERyYWdDYXJl
dFJlY3QoaW5zZXJ0aW9uUmVjdCk7CisgICAgcGFnZUNsaWVudCgpLmRpZFBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbigpOwogfQogCiAjaWYgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTJiODVmYjQzNjBiLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5M
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRHJhZ0FuZERyb3BI
YW5kbGVyLmgiCi0KLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiAhVVNFKEdUSzQpCi0KLSNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9HUmVmUHRyR3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HVW5pcXVl
UHRyR3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1EcmFnQW5kRHJv
cEhhbmRsZXI6OkRyYWdBbmREcm9wSGFuZGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCi0gICAgOiBt
X3BhZ2UocGFnZSkKLXsKLX0KLQotRHJhZ0FuZERyb3BIYW5kbGVyOjpEcm9wcGluZ0NvbnRleHQ6
OkRyb3BwaW5nQ29udGV4dChHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCwgY29uc3QgSW50UG9p
bnQmIHBvc2l0aW9uKQotICAgIDogZ2RrQ29udGV4dChnZGtDb250ZXh0KQotICAgICwgbGFzdE1v
dGlvblBvc2l0aW9uKHBvc2l0aW9uKQotICAgICwgc2VsZWN0aW9uRGF0YShTZWxlY3Rpb25EYXRh
OjpjcmVhdGUoKSkKLXsKLX0KLQotc3RhdGljIGlubGluZSBHZGtEcmFnQWN0aW9uIGRyYWdPcGVy
YXRpb25Ub0dka0RyYWdBY3Rpb25zKERyYWdPcGVyYXRpb24gY29yZUFjdGlvbikKLXsKLSAgICBH
ZGtEcmFnQWN0aW9uIGdka0FjdGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KDApOwot
ICAgIGlmIChjb3JlQWN0aW9uID09IERyYWdPcGVyYXRpb25Ob25lKQotICAgICAgICByZXR1cm4g
Z2RrQWN0aW9uOwotCi0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkKLSAg
ICAgICAgZ2RrQWN0aW9uID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9D
T1BZIHwgZ2RrQWN0aW9uKTsKLSAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Nb3Zl
KQotICAgICAgICBnZGtBY3Rpb24gPSBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNU
SU9OX01PVkUgfCBnZGtBY3Rpb24pOwotICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlv
bkxpbmspCi0gICAgICAgIGdka0FjdGlvbiA9IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdE
S19BQ1RJT05fTElOSyB8IGdka0FjdGlvbik7Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3Bl
cmF0aW9uUHJpdmF0ZSkKLSAgICAgICAgZ2RrQWN0aW9uID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0Fj
dGlvbj4oR0RLX0FDVElPTl9QUklWQVRFIHwgZ2RrQWN0aW9uKTsKLQotICAgIHJldHVybiBnZGtB
Y3Rpb247Ci19Ci0KLXN0YXRpYyBpbmxpbmUgR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9T
aW5nbGVHZGtEcmFnQWN0aW9uKERyYWdPcGVyYXRpb24gY29yZUFjdGlvbikKLXsKLSAgICBpZiAo
Y29yZUFjdGlvbiA9PSBEcmFnT3BlcmF0aW9uRXZlcnkgfHwgY29yZUFjdGlvbiAmIERyYWdPcGVy
YXRpb25Db3B5KQotICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9DT1BZOwotICAgIGlmIChjb3Jl
QWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCi0gICAgICAgIHJldHVybiBHREtfQUNUSU9OX01P
VkU7Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKLSAgICAgICAgcmV0
dXJuIEdES19BQ1RJT05fTElOSzsKLSAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Q
cml2YXRlKQotICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9QUklWQVRFOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKLX0KLQotc3RhdGljIGlubGluZSBEcmFnT3Bl
cmF0aW9uIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oR2RrRHJhZ0FjdGlvbiBnZGtBY3Rp
b24pCi17Ci0gICAgLy8gV2UgaGF2ZSBubyBnb29kIHdheSB0byBkZXRlY3QgRHJhZ09wZXJhdGlv
bkV2ZXJ5IG90aGVyIHRoYW4KLSAgICAvLyB0byB1c2UgaXQgd2hlbiBhbGwgYXBwbGljYWJsZSBm
bGFncyBhcmUgb24uCi0gICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fQ09QWQotICAgICAg
ICAmJiBnZGtBY3Rpb24gJiBHREtfQUNUSU9OX01PVkUKLSAgICAgICAgJiYgZ2RrQWN0aW9uICYg
R0RLX0FDVElPTl9MSU5LCi0gICAgICAgICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fUFJJVkFU
RSkKLSAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25FdmVyeTsKLQotICAgIHVuc2lnbmVkIGFj
dGlvbiA9IERyYWdPcGVyYXRpb25Ob25lOwotICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9O
X0NPUFkpCi0gICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uQ29weTsKLSAgICBpZiAoZ2Rr
QWN0aW9uICYgR0RLX0FDVElPTl9NT1ZFKQotICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlv
bk1vdmU7Ci0gICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fTElOSykKLSAgICAgICAgYWN0
aW9uIHw9IERyYWdPcGVyYXRpb25MaW5rOwotICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9O
X1BSSVZBVEUpCi0gICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uUHJpdmF0ZTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oYWN0aW9uKTsKLX0KLQotdm9pZCBEcmFn
QW5kRHJvcEhhbmRsZXI6OnN0YXJ0RHJhZyhSZWY8U2VsZWN0aW9uRGF0YT4mJiBzZWxlY3Rpb24s
IERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbiwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiBk
cmFnSW1hZ2UpCi17Ci0gICAgLy8gV2ViQ29yZTo6RXZlbnRIYW5kbGVyIGRvZXMgbm90IHN1cHBv
cnQgbW9yZSB0aGFuIG9uZSBEbkQgb3BlcmF0aW9uIGF0IHRoZSBzYW1lIHRpbWUgZm9yCi0gICAg
Ly8gYSBnaXZlbiBwYWdlLCBzbyB3ZSBzaG91bGQgY2FuY2VsIGFueSBwcmV2aW91cyBvcGVyYXRp
b24gd2hvc2UgY29udGV4dCB3ZSBtaWdodCBoYXZlCi0gICAgLy8gc3RvcmVkLCBzaG91bGQgd2Ug
cmVjZWl2ZSBhIG5ldyBzdGFydERyYWcgZXZlbnQgYmVmb3JlIGZpbmlzaGluZyBhIHByZXZpb3Vz
IERuRCBvcGVyYXRpb24uCi0gICAgaWYgKG1fZHJhZ0NvbnRleHQpIHsKLSAgICAgICAgZ3RrX2Ry
YWdfY2FuY2VsKG1fZHJhZ0NvbnRleHQuZ2V0KCkpOwotICAgICAgICBtX2RyYWdDb250ZXh0ID0g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBtX2RyYWdnaW5nU2VsZWN0aW9uRGF0YSA9IFdURk1vdmUo
c2VsZWN0aW9uKTsKLSAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IHRhcmdldExpc3QgPSBQYXN0
ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKS50YXJnZXRMaXN0Rm9yU2VsZWN0aW9uRGF0YSgqbV9k
cmFnZ2luZ1NlbGVjdGlvbkRhdGEpOwotCi0gICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gY3VycmVu
dEV2ZW50KGd0a19nZXRfY3VycmVudF9ldmVudCgpKTsKLSAgICBHZGtEcmFnQ29udGV4dCogY29u
dGV4dCA9IGd0a19kcmFnX2JlZ2luX3dpdGhfY29vcmRpbmF0ZXMobV9wYWdlLnZpZXdXaWRnZXQo
KSwgdGFyZ2V0TGlzdC5nZXQoKSwgZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoZHJhZ09w
ZXJhdGlvbiksCi0gICAgICAgIEdES19CVVRUT05fUFJJTUFSWSwgY3VycmVudEV2ZW50LmdldCgp
LCAtMSwgLTEpOwotCi0gICAgbV9kcmFnQ29udGV4dCA9IGNvbnRleHQ7Ci0KLSAgICBpZiAoZHJh
Z0ltYWdlKSB7Ci0gICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlKGRyYWdJbWFn
ZS0+Y3JlYXRlQ2Fpcm9TdXJmYWNlKCkpOwotICAgICAgICAvLyBVc2UgdGhlIGNlbnRlciBvZiB0
aGUgZHJhZyBpbWFnZSBhcyBob3RzcG90LgotICAgICAgICBjYWlyb19zdXJmYWNlX3NldF9kZXZp
Y2Vfb2Zmc2V0KGltYWdlLmdldCgpLCAtY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1h
Z2UuZ2V0KCkpIC8gMiwgLWNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChpbWFnZS5nZXQo
KSkgLyAyKTsKLSAgICAgICAgZ3RrX2RyYWdfc2V0X2ljb25fc3VyZmFjZShjb250ZXh0LCBpbWFn
ZS5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGd0a19kcmFnX3NldF9pY29uX2RlZmF1bHQo
Y29udGV4dCk7Ci19Ci0KLXZvaWQgRHJhZ0FuZERyb3BIYW5kbGVyOjpmaWxsRHJhZ0RhdGEoR2Rr
RHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIHVu
c2lnbmVkIGluZm8pCi17Ci0gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYXR0ZW1wdGluZyB0
byBjYWxsIGZpbmlzaCBkcmFnIGZyb20gd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YUdldCgpCi0g
ICAgLy8gZm9yIGEgb2Jzb2xldGUgRG5EIG9wZXJhdGlvbiB0aGF0IGdvdCBwcmV2aW91c2x5IGNh
bmNlbGxlZCBpbiBzdGFydERyYWcoKS4KLSAgICBpZiAobV9kcmFnQ29udGV4dC5nZXQoKSAhPSBj
b250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9kcmFnZ2luZ1NlbGVjdGlv
bkRhdGEpOwotICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLmZpbGxTZWxlY3Rpb25E
YXRhKCptX2RyYWdnaW5nU2VsZWN0aW9uRGF0YSwgaW5mbywgc2VsZWN0aW9uRGF0YSk7Ci19Ci0K
LXZvaWQgRHJhZ0FuZERyb3BIYW5kbGVyOjpmaW5pc2hEcmFnKEdka0RyYWdDb250ZXh0KiBjb250
ZXh0KQotewotICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGF0dGVtcHRpbmcgdG8gY2FsbCBm
aW5pc2ggZHJhZyBmcm9tIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0VuZCgpCi0gICAgLy8gZm9yIGEg
b2Jzb2xldGUgRG5EIG9wZXJhdGlvbiB0aGF0IGdvdCBwcmV2aW91c2x5IGNhbmNlbGxlZCBpbiBz
dGFydERyYWcoKS4KLSAgICBpZiAobV9kcmFnQ29udGV4dC5nZXQoKSAhPSBjb250ZXh0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fZHJhZ2dpbmdTZWxlY3Rpb25EYXRhKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2RyYWdDb250ZXh0ID0gbnVsbHB0cjsKLSAgICBtX2RyYWdnaW5n
U2VsZWN0aW9uRGF0YSA9IG51bGxwdHI7Ci0KLSAgICBHZGtEZXZpY2UqIGRldmljZSA9IGdka19k
cmFnX2NvbnRleHRfZ2V0X2RldmljZShjb250ZXh0KTsKLSAgICBpbnQgeCA9IDAsIHkgPSAwOwot
ICAgIGdka19kZXZpY2VfZ2V0X3dpbmRvd19hdF9wb3NpdGlvbihkZXZpY2UsICZ4LCAmeSk7Ci0g
ICAgaW50IHhSb290ID0gMCwgeVJvb3QgPSAwOwotICAgIGdka19kZXZpY2VfZ2V0X3Bvc2l0aW9u
KGRldmljZSwgbnVsbHB0ciwgJnhSb290LCAmeVJvb3QpOwotICAgIG1fcGFnZS5kcmFnRW5kZWQo
SW50UG9pbnQoeCwgeSksIEludFBvaW50KHhSb290LCB5Um9vdCksIGdka0RyYWdBY3Rpb25Ub0Ry
YWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQp
KSk7Ci19Ci0KLVNlbGVjdGlvbkRhdGEqIERyYWdBbmREcm9wSGFuZGxlcjo6ZHJvcERhdGFTZWxl
Y3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlv
bkRhdGEsIHVuc2lnbmVkIGluZm8sIEludFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBEcm9wcGlu
Z0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IG1fZHJvcHBpbmdDb250ZXh0cy5nZXQoY29udGV4
dCk7Ci0gICAgaWYgKCFkcm9wcGluZ0NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzLS07Ci0gICAgUGFzdGVi
b2FyZEhlbHBlcjo6c2luZ2xldG9uKCkuZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwg
aW5mbywgZHJvcHBpbmdDb250ZXh0LT5zZWxlY3Rpb25EYXRhKTsKLSAgICBpZiAoZHJvcHBpbmdD
b250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIC8vIFRoZSBjb29yZGluYXRlcyBwYXNzZWQgdG8gZHJhZy1kYXRhLXJlY2VpdmVkIHNpZ25h
bCBhcmUgc29tZXRpbWVzCi0gICAgLy8gaW5hY2N1cmF0ZSBpbiBXVFIsIHNvIHVzZSB0aGUgY29v
cmRpbmF0ZXMgb2YgdGhlIGxhc3QgbW90aW9uIGV2ZW50LgotICAgIHBvc2l0aW9uID0gZHJvcHBp
bmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8g
bW9yZSBwZW5kaW5nIHJlcXVlc3RzLCBzdGFydCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2Vi
Q29yZS4KLSAgICByZXR1cm4gZHJvcHBpbmdDb250ZXh0LT5zZWxlY3Rpb25EYXRhLnB0cigpOwot
fQotCi12b2lkIERyYWdBbmREcm9wSGFuZGxlcjo6ZHJhZ0VudGVyZWQoR2RrRHJhZ0NvbnRleHQq
IGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIHVuc2lnbmVkIGluZm8s
IHVuc2lnbmVkIHRpbWUpCi17Ci0gICAgSW50UG9pbnQgcG9zaXRpb247Ci0gICAgYXV0byogc2Vs
ZWN0aW9uID0gZHJvcERhdGFTZWxlY3Rpb24oY29udGV4dCwgc2VsZWN0aW9uRGF0YSwgaW5mbywg
cG9zaXRpb24pOwotICAgIGlmICghc2VsZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBE
cmFnRGF0YSBkcmFnRGF0YShzZWxlY3Rpb24sIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRU
b1NjcmVlblBvaW50KG1fcGFnZS52aWV3V2lkZ2V0KCksIHBvc2l0aW9uKSwgZ2RrRHJhZ0FjdGlv
blRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpKSk7
Ci0gICAgbV9wYWdlLnJlc2V0Q3VycmVudERyYWdJbmZvcm1hdGlvbigpOwotICAgIG1fcGFnZS5k
cmFnRW50ZXJlZChkcmFnRGF0YSk7Ci0gICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBtX3Bh
Z2UuY3VycmVudERyYWdPcGVyYXRpb24oKTsKLSAgICBnZGtfZHJhZ19zdGF0dXMoY29udGV4dCwg
ZHJhZ09wZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihvcGVyYXRpb24pLCB0aW1lKTsKLX0K
LQotU2VsZWN0aW9uRGF0YSogRHJhZ0FuZERyb3BIYW5kbGVyOjpkcmFnRGF0YVNlbGVjdGlvbihH
ZGtEcmFnQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCB1bnNpZ25l
ZCB0aW1lKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxEcm9wcGluZ0NvbnRleHQ+JiBkcm9wcGlu
Z0NvbnRleHQgPSBtX2Ryb3BwaW5nQ29udGV4dHMuYWRkKGNvbnRleHQsIG51bGxwdHIpLml0ZXJh
dG9yLT52YWx1ZTsKLSAgICBpZiAoIWRyb3BwaW5nQ29udGV4dCkgewotICAgICAgICBHdGtXaWRn
ZXQqIHdpZGdldCA9IG1fcGFnZS52aWV3V2lkZ2V0KCk7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4
dCA9IG1ha2VVbmlxdWU8RHJvcHBpbmdDb250ZXh0Pihjb250ZXh0LCBwb3NpdGlvbik7Ci0gICAg
ICAgIFZlY3RvcjxHZGtBdG9tPiBhY2NlcHRhYmxlVGFyZ2V0cyhQYXN0ZWJvYXJkSGVscGVyOjpz
aW5nbGV0b24oKS5kcm9wQXRvbXNGb3JDb250ZXh0KHdpZGdldCwgZHJvcHBpbmdDb250ZXh0LT5n
ZGtDb250ZXh0KSk7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0
cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsKLSAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQg
OiBhY2NlcHRhYmxlVGFyZ2V0cykKLSAgICAgICAgICAgIGd0a19kcmFnX2dldF9kYXRhKHdpZGdl
dCwgZHJvcHBpbmdDb250ZXh0LT5nZGtDb250ZXh0LCB0YXJnZXQsIHRpbWUpOwotICAgIH0gZWxz
ZQotICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbiA9IHBvc2l0aW9u
OwotCi0gICAgLy8gRG9uJ3Qgc2VuZCBhbnkgZHJhZyBpbmZvcm1hdGlvbiB0byBXZWJDb3JlIHVu
dGlsIHdlJ3ZlIHJldHJpZXZlZCBhbGwgdGhlIGRhdGEgZm9yIHRoaXMgZHJhZyBvcGVyYXRpb24u
Ci0gICAgLy8gT3RoZXJ3aXNlIHdlJ2QgaGF2ZSB0byBibG9jayB0byB3YWl0IGZvciB0aGUgZHJh
ZydzIGRhdGEuCi0gICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cyA+
IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGRyb3BwaW5nQ29udGV4
dC0+c2VsZWN0aW9uRGF0YS5wdHIoKTsKLX0KLQotdm9pZCBEcmFnQW5kRHJvcEhhbmRsZXI6OmRy
YWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlv
biwgdW5zaWduZWQgdGltZSkKLXsKLSAgICBhdXRvKiBzZWxlY3Rpb24gPSBkcmFnRGF0YVNlbGVj
dGlvbihjb250ZXh0LCBwb3NpdGlvbiwgdGltZSk7Ci0gICAgaWYgKCFzZWxlY3Rpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIERyYWdEYXRhIGRyYWdEYXRhKHNlbGVjdGlvbiwgcG9zaXRpb24s
IGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQobV9wYWdlLnZpZXdXaWRnZXQoKSwgcG9z
aXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0
X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBtX3BhZ2UuZHJhZ1VwZGF0ZWQoZHJhZ0RhdGEpOwot
ICAgIERyYWdPcGVyYXRpb24gb3BlcmF0aW9uID0gbV9wYWdlLmN1cnJlbnREcmFnT3BlcmF0aW9u
KCk7Ci0gICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdk
a0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7Ci19Ci0KLXZvaWQgRHJhZ0FuZERyb3BIYW5k
bGVyOjpkcmFnTGVhdmUoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgRHJvcHBpbmdD
b250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZ2V0KGNvbnRleHQp
OwotICAgIGlmICghZHJvcHBpbmdDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBE
dXJpbmcgYSBkcm9wIEdUSysgd2lsbCBmaXJlIGEgZHJhZy1sZWF2ZSBzaWduYWwgcmlnaHQgYmVm
b3JlIGZpcmluZwotICAgIC8vIHRoZSBkcmFnLWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rp
b25zIGZvciBkcmFnLWxlYXZlIHRvIGhhcHBlbiBhZnRlcgotICAgIC8vIHRob3NlIGZvciBkcmFn
LWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCi0g
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBjb250ZXh0LCBkcm9wcGluZ0NvbnRl
eHRdKCkgewotICAgICAgICBhdXRvIGl0ID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4
dCk7Ci0gICAgICAgIGlmIChpdCA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gSWYgdGhlIHZpZXcgZG9lc24ndCBrbm93IGFib3V0
IHRoZSBkcmFnIHlldCAodGhlcmUgYXJlIHN0aWxsIHBlbmRpbmcgZGF0YSByZXF1ZXN0cyksCi0g
ICAgICAgIC8vIGRvbid0IHVwZGF0ZSBpdCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcmFn
LgotICAgICAgICBpZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghZHJvcHBpbmdDb250ZXh0LT5kcm9wSGFw
cGVuZWQpIHsKLSAgICAgICAgICAgIC8vIERvbid0IGNhbGwgZHJhZ0V4aXRlZCBpZiB3ZSBoYXZl
IGp1c3QgcmVjZWl2ZWQgYSBkcmFnLWRyb3Agc2lnbmFsLiBUaGlzCi0gICAgICAgICAgICAvLyBo
YXBwZW5zIGluIHRoZSBjYXNlIG9mIGEgc3VjY2Vzc2Z1bCBkcm9wIG9udG8gdGhlIHZpZXcuCi0g
ICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24gPSBkcm9wcGluZ0NvbnRleHQtPmxh
c3RNb3Rpb25Qb3NpdGlvbjsKLSAgICAgICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyb3BwaW5n
Q29udGV4dC0+c2VsZWN0aW9uRGF0YS5wdHIoKSwgcG9zaXRpb24sIGNvbnZlcnRXaWRnZXRQb2lu
dFRvU2NyZWVuUG9pbnQobV9wYWdlLnZpZXdXaWRnZXQoKSwgcG9zaXRpb24pLCBEcmFnT3BlcmF0
aW9uTm9uZSk7Ci0gICAgICAgICAgICBtX3BhZ2UuZHJhZ0V4aXRlZChkcmFnRGF0YSk7Ci0gICAg
ICAgICAgICBtX3BhZ2UucmVzZXRDdXJyZW50RHJhZ0luZm9ybWF0aW9uKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBtX2Ryb3BwaW5nQ29udGV4dHMucmVtb3ZlKGl0KTsKLSAgICB9KTsKLX0KLQot
Ym9vbCBEcmFnQW5kRHJvcEhhbmRsZXI6OmRyb3AoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFBvaW50JiBwb3NpdGlvbiwgdW5zaWduZWQgdGltZSkKLXsKLSAgICBEcm9wcGluZ0Nv
bnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IG1fZHJvcHBpbmdDb250ZXh0cy5nZXQoY29udGV4dCk7
Ci0gICAgaWYgKCFkcm9wcGluZ0NvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVkID0gdHJ1ZTsKLQotICAgIHVpbnQzMl90IGZs
YWdzID0gMDsKLSAgICBpZiAoZ2RrX2RyYWdfY29udGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNv
bnRleHQpID09IEdES19BQ1RJT05fQ09QWSkKLSAgICAgICAgZmxhZ3MgfD0gV2ViQ29yZTo6RHJh
Z0FwcGxpY2F0aW9uSXNDb3B5S2V5RG93bjsKLSAgICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wcGlu
Z0NvbnRleHQtPnNlbGVjdGlvbkRhdGEucHRyKCksIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9p
bnRUb1NjcmVlblBvaW50KG1fcGFnZS52aWV3V2lkZ2V0KCksIHBvc2l0aW9uKSwgZ2RrRHJhZ0Fj
dGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQp
KSwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uRmxhZ3M+KGZsYWdzKSk7Ci0g
ICAgbV9wYWdlLnBlcmZvcm1EcmFnT3BlcmF0aW9uKGRyYWdEYXRhLCBTdHJpbmcoKSwgeyB9LCB7
IH0pOwotICAgIGd0a19kcmFnX2ZpbmlzaChjb250ZXh0LCBUUlVFLCBGQUxTRSwgdGltZSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
RU5BQkxFKERSQUdfU1VQUE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKaW5kZXggMDA4MGIwZGRjYzU1Li41ODUxNzI3M2JmMDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zOTQ3LDcgKzM5NDcs
NyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJv
bGxlckFjdGlvbiBhY3Rpb24sIGNvbnN0IEludAogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb246OlVwZGF0ZWQ6IHsKLSAgICAgICAgRHJhZ09wZXJh
dGlvbiByZXNvbHZlZERyYWdPcGVyYXRpb24gPSBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJh
Z0VudGVyZWQoZHJhZ0RhdGEpOworICAgICAgICBEcmFnT3BlcmF0aW9uIHJlc29sdmVkRHJhZ09w
ZXJhdGlvbiA9IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnVXBkYXRlZChkcmFnRGF0YSk7
CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250
cm9sbGVyQWN0aW9uKHJlc29sdmVkRHJhZ09wZXJhdGlvbiwgbV9wYWdlLT5kcmFnQ29udHJvbGxl
cigpLmRyYWdIYW5kbGluZ01ldGhvZCgpLCBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkubW91c2VJ
c092ZXJGaWxlSW5wdXQoKSwgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLm51bWJlck9mSXRlbXNU
b0JlQWNjZXB0ZWQoKSwgeyB9LCB7IH0pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcApp
bmRleCAxNTM5OTAxZTZjODYuLjRkMDk0M2MyNDg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcApAQCAtNDIsNyArNDIsNiBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5
Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGhlbWUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399122</attachid>
            <date>2020-05-12 05:49:58 -0700</date>
            <delta_ts>2020-05-12 09:17:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkgtk-dnd.diff</filename>
            <type>text/plain</type>
            <size>73126</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxOTU2NDA1N2JiMjcuLjg3M2I4MDk1MWRjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIyIEBACisyMDIwLTA1LTExICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZXdvcmsgZHJhZyBhbmQgZHJvcCBoYW5kbGlu
ZyBpbiBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjExNzIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlIFBhc3RlYm9hcmRIZWxwZXIgdGhhdCBpcyBubyBsb25n
ZXIgdXNlZCBhbmQgYWRkIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvIEd0a1V0aWxpdGllcy4KKwor
ICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Z2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpkcmFn
T3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpkcmFnT3BlcmF0
aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrVXRp
bGl0aWVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmg6IFJlbW92
ZWQuCisKIDIwMjAtMDUtMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIFJld29yayBjbGlwYm9hcmQgaGFuZGxpbmcgaW4gcHJlcGFy
YXRpb24gZm9yIEdUSzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNWIzYTI3MTg2ZWYw
Li5hZDdhZGE1Y2RlZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC02MSw3ICs2MSw2
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBs
YXRmb3JtL2d0ay9HVW5pcXVlUHRyR3RrLmgKICAgICBwbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVz
LmgKICAgICBwbGF0Zm9ybS9ndGsvR3RrVmVyc2lvbmluZy5oCi0gICAgcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRIZWxwZXIuaAogICAgIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCiAg
ICAgcGxhdGZvcm0vZ3RrL1NlbGVjdGlvbkRhdGEuaAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4
IGUxNmI3NjNmZjFiNy4uNGRjZmY3OTlmODhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtMTA3
LDcgKzEwNyw2IEBAIHBsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcAogcGxhdGZvcm0vZ3RrL0d0
a1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcAogcGxh
dGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCi1wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBl
ci5jcHAKIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwCiBwbGF0Zm9y
bS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1XaGVlbEV2
ZW50R3RrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0
aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmNw
cAppbmRleCBjZTQwNDY2MjMzYmYuLmFhYzc3MDI1ZGViYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5jcHAKQEAgLTEwMiw0ICsxMDIsNTEgQEAgdW5zaWdu
ZWQgc3RhdGVNb2RpZmllckZvckdka0J1dHRvbih1bnNpZ25lZCBidXR0b24pCiAgICAgcmV0dXJu
IDEgPDwgKDggKyBidXR0b24gLSAxKTsKIH0KIAorRHJhZ09wZXJhdGlvbiBnZGtEcmFnQWN0aW9u
VG9EcmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uKQoreworICAgIC8vIFdlIGhh
dmUgbm8gZ29vZCB3YXkgdG8gZGV0ZWN0IERyYWdPcGVyYXRpb25FdmVyeSBvdGhlciB0aGFuCisg
ICAgLy8gdG8gdXNlIGl0IHdoZW4gYWxsIGFwcGxpY2FibGUgZmxhZ3MgYXJlIG9uLgorICAgIGlm
IChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0NPUFkKKyAgICAgICAgJiYgZ2RrQWN0aW9uICYgR0RL
X0FDVElPTl9NT1ZFCisgICAgICAgICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fTElOSykKKyAg
ICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25FdmVyeTsKKworICAgIHVuc2lnbmVkIGFjdGlvbiA9
IERyYWdPcGVyYXRpb25Ob25lOworICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0NPUFkp
CisgICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uQ29weTsKKyAgICBpZiAoZ2RrQWN0aW9u
ICYgR0RLX0FDVElPTl9NT1ZFKQorICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvbk1vdmU7
CisgICAgaWYgKGdka0FjdGlvbiAmIEdES19BQ1RJT05fTElOSykKKyAgICAgICAgYWN0aW9uIHw9
IERyYWdPcGVyYXRpb25MaW5rOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERyYWdPcGVyYXRp
b24+KGFjdGlvbik7Cit9CisKK0dka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0Fj
dGlvbnMoRHJhZ09wZXJhdGlvbiBjb3JlQWN0aW9uKQoreworICAgIHVuc2lnbmVkIGdka0FjdGlv
biA9IDA7CisgICAgaWYgKGNvcmVBY3Rpb24gPT0gRHJhZ09wZXJhdGlvbk5vbmUpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihnZGtBY3Rpb24pOworCisgICAgaWYg
KGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkKKyAgICAgICAgZ2RrQWN0aW9uIHw9IEdE
S19BQ1RJT05fQ09QWTsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Nb3ZlKQor
ICAgICAgICBnZGtBY3Rpb24gfD0gR0RLX0FDVElPTl9NT1ZFOworICAgIGlmIChjb3JlQWN0aW9u
ICYgRHJhZ09wZXJhdGlvbkxpbmspCisgICAgICAgIGdka0FjdGlvbiB8PSBHREtfQUNUSU9OX0xJ
Tks7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oZ2RrQWN0aW9uKTsK
K30KKworR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKERy
YWdPcGVyYXRpb24gY29yZUFjdGlvbikKK3sKKyAgICBpZiAoY29yZUFjdGlvbiA9PSBEcmFnT3Bl
cmF0aW9uRXZlcnkgfHwgY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Db3B5KQorICAgICAgICBy
ZXR1cm4gR0RLX0FDVElPTl9DT1BZOworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlv
bk1vdmUpCisgICAgICAgIHJldHVybiBHREtfQUNUSU9OX01PVkU7CisgICAgaWYgKGNvcmVBY3Rp
b24gJiBEcmFnT3BlcmF0aW9uTGluaykKKyAgICAgICAgcmV0dXJuIEdES19BQ1RJT05fTElOSzsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oMCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMu
aAppbmRleCBkNTJkOTM4NWM2ZmQuLjVmNWE1ZmI3MTUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtVdGlsaXRpZXMuaApAQCAtMTgsNiArMTgsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkRyYWdBY3Rpb25zLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2lu
Y2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CkBA
IC00Nyw0ICs0OCw4IEBAIFN0cmluZyBkZWZhdWx0R3RrU3lzdGVtRm9udCgpOwogCiBXRUJDT1JF
X0VYUE9SVCB1bnNpZ25lZCBzdGF0ZU1vZGlmaWVyRm9yR2RrQnV0dG9uKHVuc2lnbmVkIGJ1dHRv
bik7CiAKK1dFQkNPUkVfRVhQT1JUIERyYWdPcGVyYXRpb24gZ2RrRHJhZ0FjdGlvblRvRHJhZ09w
ZXJhdGlvbihHZGtEcmFnQWN0aW9uKTsKK1dFQkNPUkVfRVhQT1JUIEdka0RyYWdBY3Rpb24gZHJh
Z09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoRHJhZ09wZXJhdGlvbik7CitXRUJDT1JFX0VYUE9S
VCBHZGtEcmFnQWN0aW9uIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24oRHJhZ09w
ZXJhdGlvbik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTFjOGQ5OGQyOGM2Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjM1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFydGluIFJvYmluc29uIDxtcm9i
aW5zb25Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgSWdhbGlhIFMuTC4KLSAqIENvcHly
aWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgotCi0jaWYg
IVVTRShHVEs0KQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJTZWxlY3Rp
b25EYXRhLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlx
dWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIEdka0F0b20gdGV4dFBsYWluQXRvbTsKLXN0YXRpYyBHZGtBdG9tIG1h
cmt1cEF0b207Ci1zdGF0aWMgR2RrQXRvbSBuZXRzY2FwZVVSTEF0b207Ci1zdGF0aWMgR2RrQXRv
bSB1cmlMaXN0QXRvbTsKLXN0YXRpYyBHZGtBdG9tIHNtYXJ0UGFzdGVBdG9tOwotc3RhdGljIEdk
a0F0b20gdW5rbm93bkF0b207Ci0KLXN0YXRpYyBjb25zdCBTdHJpbmcmIG1hcmt1cFByZWZpeCgp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gcHJlZml4KE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCI8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29u
dGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPiIpKTsKLSAgICByZXR1cm4gcHJlZml4
LmdldCgpOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVNYXJrdXBQcmVmaXgoU3RyaW5nJiBtYXJr
dXApCi17Ci0gICAgLy8gVGhlIG1hcmt1cCBwcmVmaXggaXMgbm90IGhhcm1mdWwsIGJ1dCB3ZSBy
ZW1vdmUgaXQgZnJvbSB0aGUgc3RyaW5nIGFueXdheSwgc28gdGhhdAotICAgIC8vIHdlIGNhbiBo
YXZlIGNvbnNpc3RlbnQgcmVzdWx0cyB3aXRoIG90aGVyIHBvcnRzIGR1cmluZyB0aGUgbGF5b3V0
IHRlc3RzLgotICAgIGlmIChtYXJrdXAuc3RhcnRzV2l0aChtYXJrdXBQcmVmaXgoKSkpCi0gICAg
ICAgIG1hcmt1cC5yZW1vdmUoMCwgbWFya3VwUHJlZml4KCkubGVuZ3RoKCkpOwotfQotCi1QYXN0
ZWJvYXJkSGVscGVyJiBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKQotewotICAgIHN0YXRp
YyBQYXN0ZWJvYXJkSGVscGVyIGhlbHBlcjsKLSAgICByZXR1cm4gaGVscGVyOwotfQotCi1QYXN0
ZWJvYXJkSGVscGVyOjpQYXN0ZWJvYXJkSGVscGVyKCkKLSAgICA6IG1fdGFyZ2V0TGlzdChhZG9w
dEdSZWYoZ3RrX3RhcmdldF9saXN0X25ldyhudWxscHRyLCAwKSkpCi17Ci0gICAgdGV4dFBsYWlu
QXRvbSA9IGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9
dXRmLTgiKTsKLSAgICBtYXJrdXBBdG9tID0gZ2RrX2F0b21faW50ZXJuX3N0YXRpY19zdHJpbmco
InRleHQvaHRtbCIpOwotICAgIG5ldHNjYXBlVVJMQXRvbSA9IGdka19hdG9tX2ludGVybl9zdGF0
aWNfc3RyaW5nKCJfTkVUU0NBUEVfVVJMIik7Ci0gICAgdXJpTGlzdEF0b20gPSBnZGtfYXRvbV9p
bnRlcm5fc3RhdGljX3N0cmluZygidGV4dC91cmktbGlzdCIpOwotICAgIHNtYXJ0UGFzdGVBdG9t
ID0gZ2RrX2F0b21faW50ZXJuX3N0YXRpY19zdHJpbmcoImFwcGxpY2F0aW9uL3ZuZC53ZWJraXRn
dGsuc21hcnRwYXN0ZSIpOwotICAgIHVua25vd25BdG9tID0gZ2RrX2F0b21faW50ZXJuX3N0YXRp
Y19zdHJpbmcoImFwcGxpY2F0aW9uL3ZuZC53ZWJraXRndGsudW5rbm93biIpOwotCi0gICAgZ3Rr
X3RhcmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMobV90YXJnZXRMaXN0LmdldCgpLCBQYXN0ZWJv
YXJkSGVscGVyOjpUYXJnZXRUeXBlVGV4dCk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X2FkZChtX3Rh
cmdldExpc3QuZ2V0KCksIG1hcmt1cEF0b20sIDAsIFBhc3RlYm9hcmRIZWxwZXI6OlRhcmdldFR5
cGVNYXJrdXApOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdXJpX3RhcmdldHMobV90YXJnZXRM
aXN0LmdldCgpLCBQYXN0ZWJvYXJkSGVscGVyOjpUYXJnZXRUeXBlVVJJTGlzdCk7Ci0gICAgZ3Rr
X3RhcmdldF9saXN0X2FkZChtX3RhcmdldExpc3QuZ2V0KCksIG5ldHNjYXBlVVJMQXRvbSwgMCwg
UGFzdGVib2FyZEhlbHBlcjo6VGFyZ2V0VHlwZU5ldHNjYXBlVVJMKTsKLSAgICBndGtfdGFyZ2V0
X2xpc3RfYWRkX2ltYWdlX3RhcmdldHMobV90YXJnZXRMaXN0LmdldCgpLCBQYXN0ZWJvYXJkSGVs
cGVyOjpUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGQobV90
YXJnZXRMaXN0LmdldCgpLCB1bmtub3duQXRvbSwgMCwgUGFzdGVib2FyZEhlbHBlcjo6VGFyZ2V0
VHlwZVVua25vd24pOwotfQotCi1QYXN0ZWJvYXJkSGVscGVyOjp+UGFzdGVib2FyZEhlbHBlcigp
ID0gZGVmYXVsdDsKLQotR3RrVGFyZ2V0TGlzdCogUGFzdGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlz
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGFyZ2V0TGlzdC5nZXQoKTsKLX0KLQotc3RhdGlj
IFN0cmluZyBzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEp
Ci17Ci0gICAgaWYgKCFndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChkYXRhKSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgLy8gZ19zdHJuZHVwIGd1YXJkcyBhZ2FpbnN0IHNl
bGVjdGlvbiBkYXRhIHRoYXQgaXMgbm90IG51bGwtdGVybWluYXRlZC4KLSAgICBHVW5pcXVlUHRy
PGdjaGFyPiBtYXJrdXBTdHJpbmcoZ19zdHJuZHVwKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRhKSksIGd0a19zZWxlY3Rpb25fZGF0
YV9nZXRfbGVuZ3RoKGRhdGEpKSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgobWFya3Vw
U3RyaW5nLmdldCgpKTsKLX0KLQotR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBQYXN0ZWJvYXJkSGVs
cGVyOjp0YXJnZXRMaXN0Rm9yU2VsZWN0aW9uRGF0YShjb25zdCBTZWxlY3Rpb25EYXRhJiBzZWxl
Y3Rpb24pCi17Ci0gICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKGd0
a190YXJnZXRfbGlzdF9uZXcobnVsbHB0ciwgMCkpOwotCi0gICAgaWYgKHNlbGVjdGlvbi5oYXNU
ZXh0KCkpCi0gICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJnZXRzKGxpc3QuZ2V0
KCksIFRhcmdldFR5cGVUZXh0KTsKLQotICAgIGlmIChzZWxlY3Rpb24uaGFzTWFya3VwKCkpCi0g
ICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdC5nZXQoKSwgbWFya3VwQXRvbSwgMCwgVGFy
Z2V0VHlwZU1hcmt1cCk7Ci0KLSAgICBpZiAoc2VsZWN0aW9uLmhhc1VSSUxpc3QoKSkgewotICAg
ICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3VyaV90YXJnZXRzKGxpc3QuZ2V0KCksIFRhcmdldFR5
cGVVUklMaXN0KTsKLSAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LmdldCgpLCBuZXRz
Y2FwZVVSTEF0b20sIDAsIFRhcmdldFR5cGVOZXRzY2FwZVVSTCk7Ci0gICAgfQotCi0gICAgaWYg
KHNlbGVjdGlvbi5oYXNJbWFnZSgpKQotICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdl
X3RhcmdldHMobGlzdC5nZXQoKSwgVGFyZ2V0VHlwZUltYWdlLCBUUlVFKTsKLQotICAgIGlmIChz
ZWxlY3Rpb24uaGFzVW5rbm93blR5cGVEYXRhKCkpCi0gICAgICAgIGd0a190YXJnZXRfbGlzdF9h
ZGQobGlzdC5nZXQoKSwgdW5rbm93bkF0b20sIDAsIFRhcmdldFR5cGVVbmtub3duKTsKLQotICAg
IGlmIChzZWxlY3Rpb24uY2FuU21hcnRSZXBsYWNlKCkpCi0gICAgICAgIGd0a190YXJnZXRfbGlz
dF9hZGQobGlzdC5nZXQoKSwgc21hcnRQYXN0ZUF0b20sIDAsIFRhcmdldFR5cGVTbWFydFBhc3Rl
KTsKLQotICAgIHJldHVybiBsaXN0OwotfQotCi12b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmZpbGxT
ZWxlY3Rpb25EYXRhKGNvbnN0IFNlbGVjdGlvbkRhdGEmIHNlbGVjdGlvbiwgdW5zaWduZWQgaW5m
bywgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSkKLXsKLSAgICBpZiAoaW5mbyA9PSBU
YXJnZXRUeXBlVGV4dCkKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KHNlbGVj
dGlvbkRhdGEsIHNlbGVjdGlvbi50ZXh0KCkudXRmOCgpLmRhdGEoKSwgLTEpOwotCi0gICAgZWxz
ZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlTWFya3VwKSB7Ci0gICAgICAgIC8vIFNvbWUgTGludXgg
YXBwbGljYXRpb25zIHJlZnVzZSB0byBhY2NlcHQgcGFzdGVkIG1hcmt1cCB1bmxlc3MgaXQgaXMK
LSAgICAgICAgLy8gcHJlZml4ZWQgYnkgYSBjb250ZW50LXR5cGUgbWV0YSB0YWcuCi0gICAgICAg
IENTdHJpbmcgbWFya3VwID0gbWFrZVN0cmluZyhtYXJrdXBQcmVmaXgoKSwgc2VsZWN0aW9uLm1h
cmt1cCgpKS51dGY4KCk7Ci0gICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9u
RGF0YSwgbWFya3VwQXRvbSwgOCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihtYXJr
dXAuZGF0YSgpKSwgbWFya3VwLmxlbmd0aCgpKTsKLQotICAgIH0gZWxzZSBpZiAoaW5mbyA9PSBU
YXJnZXRUeXBlVVJJTGlzdCkgewotICAgICAgICBDU3RyaW5nIHVyaUxpc3QgPSBzZWxlY3Rpb24u
dXJpTGlzdCgpLnV0ZjgoKTsKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rp
b25EYXRhLCB1cmlMaXN0QXRvbSwgOCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPih1
cmlMaXN0LmRhdGEoKSksIHVyaUxpc3QubGVuZ3RoKCkpOwotCi0gICAgfSBlbHNlIGlmIChpbmZv
ID09IFRhcmdldFR5cGVOZXRzY2FwZVVSTCAmJiBzZWxlY3Rpb24uaGFzVVJMKCkpIHsKLSAgICAg
ICAgU3RyaW5nIHVybChzZWxlY3Rpb24udXJsKCkpOwotICAgICAgICBTdHJpbmcgcmVzdWx0KHVy
bCk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7Ci0KLSAgICAgICAgaWYgKHNlbGVjdGlv
bi5oYXNUZXh0KCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHNlbGVjdGlvbi50ZXh0KCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVybCk7Ci0KLSAgICAg
ICAgR1VuaXF1ZVB0cjxnY2hhcj4gcmVzdWx0RGF0YShnX3N0cmR1cChyZXN1bHQudXRmOCgpLmRh
dGEoKSkpOwotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEsIG5l
dHNjYXBlVVJMQXRvbSwgOCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihyZXN1bHRE
YXRhLmdldCgpKSwgc3RybGVuKHJlc3VsdERhdGEuZ2V0KCkpKTsKLQotICAgIH0gZWxzZSBpZiAo
aW5mbyA9PSBUYXJnZXRUeXBlSW1hZ2UgJiYgc2VsZWN0aW9uLmhhc0ltYWdlKCkpIHsKLSAgICAg
ICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihzZWxlY3Rpb24uaW1hZ2Uo
KS0+Z2V0R2RrUGl4YnVmKCkpOwotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3BpeGJ1
ZihzZWxlY3Rpb25EYXRhLCBwaXhidWYuZ2V0KCkpOwotCi0gICAgfSBlbHNlIGlmIChpbmZvID09
IFRhcmdldFR5cGVTbWFydFBhc3RlKQotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3Rl
eHQoc2VsZWN0aW9uRGF0YSwgIiIsIC0xKTsKLQotICAgIGVsc2UgaWYgKGluZm8gPT0gVGFyZ2V0
VHlwZVVua25vd24pIHsKLSAgICAgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAg
IGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX0FSUkFZKTsK
LQotICAgICAgICBmb3IgKGF1dG8mIGl0IDogc2VsZWN0aW9uLnVua25vd25UeXBlcygpKSB7Ci0g
ICAgICAgICAgICBHVW5pcXVlUHRyPGdjaGFyPiBkaWN0SXRlbShnX3N0cmR1cF9wcmludGYoInsn
JXMnLCAnJXMnfSIsIGl0LmtleS51dGY4KCkuZGF0YSgpLCBpdC52YWx1ZS51dGY4KCkuZGF0YSgp
KSk7Ci0gICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGRfcGFyc2VkKCZidWlsZGVyLCBk
aWN0SXRlbS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiB2
YXJpYW50ID0gZ192YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKTsKLSAgICAgICAgR1VuaXF1
ZVB0cjxnY2hhcj4gc2VyaWFsaXplZFZhcmlhbnQoZ192YXJpYW50X3ByaW50KHZhcmlhbnQuZ2V0
KCksIFRSVUUpKTsKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25EYXRh
LCB1bmtub3duQXRvbSwgMSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihzZXJpYWxp
emVkVmFyaWFudC5nZXQoKSksIHN0cmxlbihzZXJpYWxpemVkVmFyaWFudC5nZXQoKSkpOwotICAg
IH0KLX0KLQotdm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpmaWxsU2VsZWN0aW9uRGF0YShHdGtTZWxl
Y3Rpb25EYXRhKiBkYXRhLCB1bnNpZ25lZCAvKiBpbmZvICovLCBTZWxlY3Rpb25EYXRhJiBzZWxl
Y3Rpb24pCi17Ci0gICAgaWYgKGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfbGVuZ3RoKGRhdGEpIDwg
MCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR2RrQXRvbSB0YXJnZXQgPSBndGtfc2VsZWN0aW9u
X2RhdGFfZ2V0X3RhcmdldChkYXRhKTsKLSAgICBpZiAodGFyZ2V0ID09IHRleHRQbGFpbkF0b20p
Ci0gICAgICAgIHNlbGVjdGlvbi5zZXRUZXh0KHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0
YSkpOwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBtYXJrdXBBdG9tKSB7Ci0gICAgICAgIFN0cmlu
ZyBtYXJrdXAoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgICAgIHJlbW92
ZU1hcmt1cFByZWZpeChtYXJrdXApOwotICAgICAgICBzZWxlY3Rpb24uc2V0TWFya3VwKG1hcmt1
cCk7Ci0gICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gdXJpTGlzdEF0b20pIHsKLSAgICAgICAgc2Vs
ZWN0aW9uLnNldFVSSUxpc3Qoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Ci0gICAg
fSBlbHNlIGlmICh0YXJnZXQgPT0gbmV0c2NhcGVVUkxBdG9tKSB7Ci0gICAgICAgIFN0cmluZyB1
cmxXaXRoTGFiZWwoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7Ci0gICAgICAgIFZl
Y3RvcjxTdHJpbmc+IHBpZWNlcyA9IHVybFdpdGhMYWJlbC5zcGxpdCgnXG4nKTsKLQotICAgICAg
ICAvLyBHaXZlIHByZWZlcmVuY2UgdG8gdGV4dC91cmktbGlzdCBoZXJlLCBhcyBpdCBjYW4gaG9s
ZCBtb3JlCi0gICAgICAgIC8vIHRoYW4gb25lIFVSSSBidXQgc3RpbGwgdGFrZSAgdGhlIGxhYmVs
IGlmIHRoZXJlIGlzIG9uZS4KLSAgICAgICAgaWYgKCFzZWxlY3Rpb24uaGFzVVJJTGlzdCgpICYm
ICFwaWVjZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0aW9uLnNldFVSSUxpc3QocGll
Y2VzWzBdKTsKLSAgICAgICAgaWYgKHBpZWNlcy5zaXplKCkgPiAxKQotICAgICAgICAgICAgc2Vs
ZWN0aW9uLnNldFRleHQocGllY2VzWzFdKTsKLSAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSB1bmtu
b3duQXRvbSAmJiBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChkYXRhKSkgewotICAgICAg
ICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0gZ192YXJpYW50X25ld19wYXJzZWQocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ3RrX3NlbGVjdGlvbl9kYXRhX2dldF9kYXRhKGRhdGEp
KSk7Ci0KLSAgICAgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4ga2V5OwotICAgICAgICBHVW5pcXVl
T3V0UHRyPGdjaGFyPiB2YWx1ZTsKLSAgICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7Ci0KLSAgICAg
ICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgdmFyaWFudC5nZXQoKSk7Ci0gICAgICAgIHdo
aWxlIChnX3ZhcmlhbnRfaXRlcl9uZXh0KCZpdGVyLCAie3NzfSIsICZrZXkub3V0UHRyKCksICZ2
YWx1ZS5vdXRQdHIoKSkpCi0gICAgICAgICAgICBzZWxlY3Rpb24uc2V0VW5rbm93blR5cGVEYXRh
KGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkpOwotICAgIH0KLX0KLQotVmVjdG9yPEdka0F0b20+IFBh
c3RlYm9hcmRIZWxwZXI6OmRyb3BBdG9tc0ZvckNvbnRleHQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0RyYWdDb250ZXh0KiBjb250ZXh0KQotewotICAgIC8vIEFsd2F5cyBzZWFyY2ggZm9yIHRoZXNl
IGNvbW1vbiBhdG9tcy4KLSAgICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0b21zOwotICAgIGRyb3BB
dG9tcy5hcHBlbmQodGV4dFBsYWluQXRvbSk7Ci0gICAgZHJvcEF0b21zLmFwcGVuZChtYXJrdXBB
dG9tKTsKLSAgICBkcm9wQXRvbXMuYXBwZW5kKHVyaUxpc3RBdG9tKTsKLSAgICBkcm9wQXRvbXMu
YXBwZW5kKG5ldHNjYXBlVVJMQXRvbSk7Ci0gICAgZHJvcEF0b21zLmFwcGVuZCh1bmtub3duQXRv
bSk7Ci0KLSAgICAvLyBGb3IgaW1hZ2VzLCB0cnkgdG8gZmluZCB0aGUgbW9zdCBhcHBsaWNhYmxl
IGltYWdlIHR5cGUuCi0gICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0gYWRvcHRHUmVm
KGd0a190YXJnZXRfbGlzdF9uZXcoMCwgMCkpOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGRfaW1h
Z2VfdGFyZ2V0cyhsaXN0LmdldCgpLCBUYXJnZXRUeXBlSW1hZ2UsIFRSVUUpOwotICAgIEdka0F0
b20gYXRvbSA9IGd0a19kcmFnX2Rlc3RfZmluZF90YXJnZXQod2lkZ2V0LCBjb250ZXh0LCBsaXN0
LmdldCgpKTsKLSAgICBpZiAoYXRvbSAhPSBHREtfTk9ORSkKLSAgICAgICAgZHJvcEF0b21zLmFw
cGVuZChhdG9tKTsKLQotICAgIHJldHVybiBkcm9wQXRvbXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vICFVU0UoR1RLNCkKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDU1OWI2NjcwZTBiMC4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEx1Y2EgQnJ1bm8gPGxldGhhbG1hbjg4QGdtYWls
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcnRpbiBSb2JpbnNvbiA8bXJvYmluc29uQHdlYmtpdC5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICoKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmICFVU0UoR1RLNCkKLQotI2luY2x1ZGUgIkdS
ZWZQdHJHdGsuaCIKLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgU2VsZWN0aW9uRGF0YTsKLQotY2xhc3MgUGFzdGVib2FyZEhlbHBlciB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFzdGVib2FyZEhlbHBlcik7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3RlYm9hcmRIZWxwZXImIHNpbmdsZXRvbigpOwotCi0gICAgR3RrVGFyZ2V0TGlz
dCogdGFyZ2V0TGlzdCgpIGNvbnN0OwotICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gdGFyZ2V0
TGlzdEZvclNlbGVjdGlvbkRhdGEoY29uc3QgU2VsZWN0aW9uRGF0YSYpOwotICAgIHZvaWQgZmls
bFNlbGVjdGlvbkRhdGEoY29uc3QgU2VsZWN0aW9uRGF0YSYsIHVuc2lnbmVkLCBHdGtTZWxlY3Rp
b25EYXRhKik7Ci0gICAgdm9pZCBmaWxsU2VsZWN0aW9uRGF0YShHdGtTZWxlY3Rpb25EYXRhKiwg
dW5zaWduZWQsIFNlbGVjdGlvbkRhdGEmKTsKLSAgICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0b21z
Rm9yQ29udGV4dChHdGtXaWRnZXQqLCBHZGtEcmFnQ29udGV4dCopOwotCi0gICAgZW51bSBQYXN0
ZWJvYXJkVGFyZ2V0VHlwZSB7IFRhcmdldFR5cGVNYXJrdXAsIFRhcmdldFR5cGVUZXh0LCBUYXJn
ZXRUeXBlSW1hZ2UsIFRhcmdldFR5cGVVUklMaXN0LCBUYXJnZXRUeXBlTmV0c2NhcGVVUkwsIFRh
cmdldFR5cGVTbWFydFBhc3RlLCBUYXJnZXRUeXBlVW5rbm93biB9OwotCi1wcml2YXRlOgotICAg
IFBhc3RlYm9hcmRIZWxwZXIoKTsKLSAgICB+UGFzdGVib2FyZEhlbHBlcigpOwotCi0gICAgR1Jl
ZlB0cjxHdGtUYXJnZXRMaXN0PiBtX3RhcmdldExpc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyAhVVNFKEdUSzQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGIzZjY2ODMxMWYwMy4u
NTk3YWM4ZDJiMjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA1LTExICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBS
ZXdvcmsgZHJhZyBhbmQgZHJvcCBoYW5kbGluZyBpbiBwcmVwYXJhdGlvbiBmb3IgR1RLNAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExNzIzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgRHJhZ0Fu
ZERyb3BIZWxwZXIgY2xhc3MgaW50byBEcmFnU291cmNlIGFuZCBEcm9wVGFyZ2V0IGNsYXNzZXMu
IFRoaXMgc2VwYXJhdGVzIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisgICAgICAgIHBhcnRz
IG1ha2luZyBpdCBlYXNpZXIgdG8gZm9sbG93LiBUaGlzIHBhdGNoIGFsc28gYWRkcyBQYWdlQ2xp
ZW50OjpkaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oKSB0byBub3RpZnkKKyAgICAgICAg
YmFjayB0aGUgdmlldyB3aGVuIGFuIG9wZXJhdGlvbiBpcyBkb25lIHRvIHVwZGF0ZSB0aGUgcmVz
dWx0LgorCisgICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvRHJhZ1NvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9E
cmFnU291cmNlR3RrMy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEcmFnU291cmNlOjpE
cmFnU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6RHJhZ1NvdXJjZTo6fkRyYWdTb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpEcmFnU291cmNlOjpiZWdpbik6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvRHJvcFRhcmdldC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9Ecm9wVGFyZ2V0R3RrMy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpEcm9wVGFyZ2V0
OjpEcm9wVGFyZ2V0KToKKyAgICAgICAgKFdlYktpdDo6RHJvcFRhcmdldDo6fkRyb3BUYXJnZXQp
OgorICAgICAgICAoV2ViS2l0OjpEcm9wVGFyZ2V0OjphY2NlcHQpOgorICAgICAgICAoV2ViS2l0
OjpEcm9wVGFyZ2V0OjplbnRlcik6CisgICAgICAgIChXZWJLaXQ6OkRyb3BUYXJnZXQ6OnVwZGF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OkRyb3BUYXJnZXQ6OmRhdGFSZWNlaXZlZCk6CisgICAgICAg
IChXZWJLaXQ6OkRyb3BUYXJnZXQ6OmRpZFBlcmZvcm1BY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpEcm9wVGFyZ2V0OjpsZWF2ZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpEcm9wVGFy
Z2V0OjpsZWF2ZSk6CisgICAgICAgIChXZWJLaXQ6OkRyb3BUYXJnZXQ6OmRyb3ApOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UGFnZUNsaWVudEltcGw6OnN0YXJ0RHJhZyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpkaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VDb25z
dHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KToKKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKToKKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdCYXNlRGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvUGFnZUNsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50OjpkaWRQZXJmb3Jt
RHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhhbmRsZXIu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwOgorCiAyMDIw
LTA1LTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR1RLXSBSZXdvcmsgY2xpcGJvYXJkIGhhbmRsaW5nIGluIHByZXBhcmF0aW9uIGZvciBH
VEs0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzR1RLLnR4dAppbmRleCA2OGYwMDU4Nzc2YmUuLjc2ZjFlMDhjYTkzNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNHVEsudHh0CkBAIC0xOTQsNiArMTk0LDEwIEBAIFVJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJzaXRlRGF0YS5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXaW5kb3dQcm9wZXJ0aWVzLmNwcCBAbm8tdW5pZnkKIAorVUlQcm9jZXNzL0FQSS9ndGsvRHJh
Z1NvdXJjZUd0azMuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL0FQSS9ndGsvRHJhZ1NvdXJjZUd0
azQuY3BwIEBuby11bmlmeQorVUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRhcmdldEd0azMuY3BwIEBu
by11bmlmeQorVUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRhcmdldEd0azQuY3BwIEBuby11bmlmeQog
VUlQcm9jZXNzL0FQSS9ndGsvSW5wdXRNZXRob2RGaWx0ZXJHdGsuY3BwIEBuby11bmlmeQogVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwIEBuby11bmlmeQpAQCAtMjU2LDcg
KzI2MCw2IEBAIFVJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVYMTEuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmQuY3BwCiBVSVByb2Nlc3MvZ3RrL0NsaXBi
b2FyZEd0azMuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9DbGlwYm9hcmRHdGs0LmNwcCBA
bm8tdW5pZnkKLVVJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcAogVUlQcm9jZXNz
L2d0ay9HZXN0dXJlQ29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9ndGsvSGFyZHdhcmVBY2NlbGVy
YXRpb25NYW5hZ2VyLmNwcAogVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJhZ1NvdXJjZS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9EcmFnU291cmNlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44YzZhNTRlOTY3NjkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL0RyYWdTb3VyY2UuaApAQCAt
MCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorCisjaW5jbHVkZSA8
V2ViQ29yZS9EcmFnQWN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCit0
eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKKworI2lmICFVU0UoR1RLNCkKK3R5
cGVkZWYgc3RydWN0IF9HZGtEcmFnQ29udGV4dCBHZGtEcmFnQ29udGV4dDsKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTZWxlY3Rpb25EYXRhOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgU2hhcmVhYmxlQml0bWFwOworCitjbGFzcyBEcmFnU291cmNlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEcmFnU291cmNlKTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisKKyAgICBleHBsaWNpdCBEcmFnU291cmNlKEd0a1dpZGdldCopOwor
ICAgIH5EcmFnU291cmNlKCk7CisKKyAgICB2b2lkIGJlZ2luKFJlZjxXZWJDb3JlOjpTZWxlY3Rp
b25EYXRhPiYmLCBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uLCBSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiYmKTsKKworcHJpdmF0ZToKKyAgICBHdGtXaWRnZXQqIG1fd2ViVmlldyB7IG51bGxwdHIgfTsK
KyNpZiAhVVNFKEdUSzQpCisgICAgR1JlZlB0cjxHZGtEcmFnQ29udGV4dD4gbV9kcmFnOworI2Vu
ZGlmCisgICAgUmVmUHRyPFdlYkNvcmU6OlNlbGVjdGlvbkRhdGE+IG1fc2VsZWN0aW9uRGF0YTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQ
UE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJhZ1Nv
dXJjZUd0azMuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9EcmFnU291cmNl
R3RrMy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YzI2YWQy
YzBjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L0RyYWdTb3VyY2VHdGszLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJEcmFnU291cmNlLmgiCisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiAhVVNFKEdUSzQp
CisKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0dSZWZQdHJHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworZW51bSBEcmFnVGFyZ2V0VHlwZSB7IE1hcmt1cCwgVGV4dCwgSW1hZ2UsIFVS
SUxpc3QsIE5ldHNjYXBlVVJMLCBTbWFydFBhc3RlIH07CisKK0RyYWdTb3VyY2U6OkRyYWdTb3Vy
Y2UoR3RrV2lkZ2V0KiB3ZWJWaWV3KQorICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCit7CisgICAg
Z19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkcmFnLWRhdGEtZ2V0IiwgR19DQUxMQkFDSygr
W10oR3RrV2lkZ2V0KiwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEq
IGRhdGEsIGd1aW50IGluZm8sIGd1aW50LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBh
dXRvJiBkcmFnID0gKnN0YXRpY19jYXN0PERyYWdTb3VyY2UqPih1c2VyRGF0YSk7CisgICAgICAg
IGlmIChkcmFnLm1fZHJhZy5nZXQoKSAhPSBjb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHN3aXRjaCAoaW5mbykgeworICAgICAgICBjYXNlIERyYWdUYXJnZXRUeXBlOjpU
ZXh0OgorICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KGRhdGEsIGRyYWcu
bV9zZWxlY3Rpb25EYXRhLT50ZXh0KCkudXRmOCgpLmRhdGEoKSwgLTEpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRHJhZ1RhcmdldFR5cGU6Ok1hcmt1cDogeworICAgICAgICAg
ICAgQ1N0cmluZyBtYXJrdXAgPSBkcmFnLm1fc2VsZWN0aW9uRGF0YS0+bWFya3VwKCkudXRmOCgp
OworICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChkYXRhLCBnZGtfYXRvbV9pbnRl
cm5fc3RhdGljX3N0cmluZygidGV4dC9odG1sIiksIDgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Z3VjaGFyKj4obWFya3VwLmRhdGEoKSksIG1hcmt1cC5sZW5ndGgoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERyYWdUYXJnZXRUeXBlOjpVUklMaXN0OiB7
CisgICAgICAgICAgICBDU3RyaW5nIHVyaUxpc3QgPSBkcmFnLm1fc2VsZWN0aW9uRGF0YS0+dXJp
TGlzdCgpLnV0ZjgoKTsKKyAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQoZGF0YSwg
Z2RrX2F0b21faW50ZXJuX3N0YXRpY19zdHJpbmcoInRleHQvdXJpLWxpc3QiKSwgOCwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBndWNoYXIqPih1cmlMaXN0LmRhdGEoKSksIHVyaUxpc3QubGVuZ3Ro
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEcmFnVGFy
Z2V0VHlwZTo6TmV0c2NhcGVVUkw6IHsKKyAgICAgICAgICAgIENTdHJpbmcgdXJsU3RyaW5nID0g
ZHJhZy5tX3NlbGVjdGlvbkRhdGEtPnVybCgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICAgICAgICAg
IEdVbmlxdWVQdHI8Z2NoYXI+IHVybChnX3N0cmR1cF9wcmludGYoIiVzXG4lcyIsIHVybFN0cmlu
Zy5kYXRhKCksIGRyYWcubV9zZWxlY3Rpb25EYXRhLT5oYXNUZXh0KCkgPyBkcmFnLm1fc2VsZWN0
aW9uRGF0YS0+dGV4dCgpLnV0ZjgoKS5kYXRhKCkgOiB1cmxTdHJpbmcuZGF0YSgpKSk7CisgICAg
ICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KGRhdGEsIGdka19hdG9tX2ludGVybl9zdGF0
aWNfc3RyaW5nKCJfTkVUU0NBUEVfVVJMIiksIDgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ3Vj
aGFyKj4odXJsLmdldCgpKSwgc3RybGVuKHVybC5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEcmFnVGFyZ2V0VHlwZTo6SW1hZ2U6IHsKKyAgICAg
ICAgICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoZHJhZy5tX3NlbGVj
dGlvbkRhdGEtPmltYWdlKCktPmdldEdka1BpeGJ1ZigpKTsKKyAgICAgICAgICAgIGd0a19zZWxl
Y3Rpb25fZGF0YV9zZXRfcGl4YnVmKGRhdGEsIHBpeGJ1Zi5nZXQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERyYWdUYXJnZXRUeXBlOjpTbWFydFBhc3Rl
OgorICAgICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KGRhdGEsICIiLCAtMSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0pLCB0aGlzKTsKKworICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZHJhZy1lbmQiLCBHX0NBTExCQUNLKCtbXShHdGtX
aWRnZXQqLCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAg
ICAgICAgYXV0byYgZHJhZyA9ICpzdGF0aWNfY2FzdDxEcmFnU291cmNlKj4odXNlckRhdGEpOwor
ICAgICAgICBpZiAoZHJhZy5tX2RyYWcuZ2V0KCkgIT0gY29udGV4dCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKCFkcmFnLm1fc2VsZWN0aW9uRGF0YSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBkcmFnLm1fc2VsZWN0aW9uRGF0YSA9IG51bGxwdHI7CisgICAgICAg
IGRyYWcubV9kcmFnID0gbnVsbHB0cjsKKworICAgICAgICBHZGtEZXZpY2UqIGRldmljZSA9IGdk
a19kcmFnX2NvbnRleHRfZ2V0X2RldmljZShjb250ZXh0KTsKKyAgICAgICAgaW50IHggPSAwOwor
ICAgICAgICBpbnQgeSA9IDA7CisgICAgICAgIGdka19kZXZpY2VfZ2V0X3dpbmRvd19hdF9wb3Np
dGlvbihkZXZpY2UsICZ4LCAmeSk7CisgICAgICAgIGludCB4Um9vdCA9IDA7CisgICAgICAgIGlu
dCB5Um9vdCA9IDA7CisgICAgICAgIGdka19kZXZpY2VfZ2V0X3Bvc2l0aW9uKGRldmljZSwgbnVs
bHB0ciwgJnhSb290LCAmeVJvb3QpOworCisgICAgICAgIGF1dG8qIHBhZ2UgPSB3ZWJraXRXZWJW
aWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UoZHJhZy5tX3dlYlZpZXcpKTsKKyAg
ICAgICAgQVNTRVJUKHBhZ2UpOworICAgICAgICBwYWdlLT5kcmFnRW5kZWQoeyB4LCB5IH0sIHsg
eFJvb3QsIHlSb290IH0sIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29u
dGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpKSk7CisgICAgfSksIHRoaXMpOworfQor
CitEcmFnU291cmNlOjp+RHJhZ1NvdXJjZSgpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9kYXRhKG1fd2ViVmlldywgdGhpcyk7Cit9CisKK3ZvaWQgRHJhZ1NvdXJjZTo6
YmVnaW4oUmVmPFNlbGVjdGlvbkRhdGE+JiYgc2VsZWN0aW9uRGF0YSwgRHJhZ09wZXJhdGlvbiBv
cGVyYXRpb24sIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYgaW1hZ2UpCit7CisgICAgaWYgKG1f
ZHJhZykgeworICAgICAgICBndGtfZHJhZ19jYW5jZWwobV9kcmFnLmdldCgpKTsKKyAgICAgICAg
bV9kcmFnID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBtX3NlbGVjdGlvbkRhdGEgPSBXVEZNb3Zl
KHNlbGVjdGlvbkRhdGEpOworCisgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0gYWRv
cHRHUmVmKGd0a190YXJnZXRfbGlzdF9uZXcobnVsbHB0ciwgMCkpOworICAgIGlmIChtX3NlbGVj
dGlvbkRhdGEtPmhhc1RleHQoKSkKKyAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF90ZXh0X3Rh
cmdldHMobGlzdC5nZXQoKSwgRHJhZ1RhcmdldFR5cGU6OlRleHQpOworICAgIGlmIChtX3NlbGVj
dGlvbkRhdGEtPmhhc01hcmt1cCgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3Qu
Z2V0KCksIGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0L2h0bWwiKSwgMCwgRHJh
Z1RhcmdldFR5cGU6Ok1hcmt1cCk7CisgICAgaWYgKG1fc2VsZWN0aW9uRGF0YS0+aGFzVVJJTGlz
dCgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3VyaV90YXJnZXRzKGxpc3QuZ2V0KCks
IERyYWdUYXJnZXRUeXBlOjpVUklMaXN0KTsKKyAgICBpZiAobV9zZWxlY3Rpb25EYXRhLT5oYXNV
UkwoKSkKKyAgICAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LmdldCgpLCBnZGtfYXRvbV9p
bnRlcm5fc3RhdGljX3N0cmluZygiX05FVFNDQVBFX1VSTCIpLCAwLCBEcmFnVGFyZ2V0VHlwZTo6
TmV0c2NhcGVVUkwpOworICAgIGlmIChtX3NlbGVjdGlvbkRhdGEtPmhhc0ltYWdlKCkpCisgICAg
ICAgIGd0a190YXJnZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhsaXN0LmdldCgpLCBEcmFnVGFy
Z2V0VHlwZTo6SW1hZ2UsIFRSVUUpOworICAgIGlmIChtX3NlbGVjdGlvbkRhdGEtPmNhblNtYXJ0
UmVwbGFjZSgpKQorICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QuZ2V0KCksIGdka19h
dG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJhcHBsaWNhdGlvbi92bmQud2Via2l0Z3RrLnNtYXJ0
cGFzdGUiKSwgMCwgRHJhZ1RhcmdldFR5cGU6OlNtYXJ0UGFzdGUpOworCisgICAgbV9kcmFnID0g
Z3RrX2RyYWdfYmVnaW5fd2l0aF9jb29yZGluYXRlcyhtX3dlYlZpZXcsIGxpc3QuZ2V0KCksIGRy
YWdPcGVyYXRpb25Ub0dka0RyYWdBY3Rpb25zKG9wZXJhdGlvbiksIEdES19CVVRUT05fUFJJTUFS
WSwgbnVsbHB0ciwgLTEsIC0xKTsKKyAgICBpZiAoaW1hZ2UpIHsKKyAgICAgICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlKGltYWdlLT5jcmVhdGVDYWlyb1N1cmZhY2UoKSk7
CisgICAgICAgIC8vIFVzZSB0aGUgY2VudGVyIG9mIHRoZSBkcmFnIGltYWdlIGFzIGhvdHNwb3Qu
CisgICAgICAgIGNhaXJvX3N1cmZhY2Vfc2V0X2RldmljZV9vZmZzZXQoaW1hZ2VTdXJmYWNlLmdl
dCgpLCAtY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2VTdXJmYWNlLmdldCgpKSAv
IDIsIC1jYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoaW1hZ2VTdXJmYWNlLmdldCgpKSAv
IDIpOworICAgICAgICBndGtfZHJhZ19zZXRfaWNvbl9zdXJmYWNlKG1fZHJhZy5nZXQoKSwgaW1h
Z2VTdXJmYWNlLmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ3RrX2RyYWdfc2V0X2ljb25f
ZGVmYXVsdChtX2RyYWcuZ2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmICFVU0UoR1RLNCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJhZ1NvdXJjZUd0azQuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9EcmFnU291cmNlR3RrNC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zMjdhNTBjNTIyOWIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL0RyYWdTb3VyY2VHdGs0LmNwcApA
QCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdTb3VyY2UuaCIKKworI2lm
IEVOQUJMRShEUkFHX1NVUFBPUlQpICYmIFVTRShHVEs0KQorCisjaW5jbHVkZSAiV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK0RyYWdTb3VyY2U6OkRyYWdTb3VyY2UoR3RrV2lkZ2V0KiB3ZWJWaWV3KQor
ICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCit7Cit9CisKK0RyYWdTb3VyY2U6On5EcmFnU291cmNl
KCkKK3sKK30KKwordm9pZCBEcmFnU291cmNlOjpiZWdpbihSZWY8U2VsZWN0aW9uRGF0YT4mJiwg
RHJhZ09wZXJhdGlvbiwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJikKK3sKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBVU0Uo
R1RLNCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRh
cmdldC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9Ecm9wVGFyZ2V0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44OWEwZDI4MTlkZjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL0Ryb3BUYXJnZXQu
aApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorCisjaW5j
bHVkZSA8V2ViQ29yZS9EcmFnQWN0aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQu
aD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5o
PgorCit0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKKworI2lmICFVU0UoR1RL
NCkKK3R5cGVkZWYgc3RydWN0IF9HZGtEcmFnQ29udGV4dCBHZGtEcmFnQ29udGV4dDsKK3R5cGVk
ZWYgc3RydWN0IF9HdGtTZWxlY3Rpb25EYXRhIEd0a1NlbGVjdGlvbkRhdGE7CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2VsZWN0aW9uRGF0YTsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFNoYXJlYWJsZUJpdG1hcDsKKworY2xhc3MgRHJvcFRhcmdldCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRHJvcFRhcmdldCk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IERyb3BUYXJnZXQoR3RrV2lkZ2V0Kik7Cisg
ICAgfkRyb3BUYXJnZXQoKTsKKworICAgIHZvaWQgZGlkUGVyZm9ybUFjdGlvbigpOworCitwcml2
YXRlOgorICAgIHZvaWQgYWNjZXB0KHVuc2lnbmVkID0gMCk7CisgICAgdm9pZCBlbnRlcihXZWJD
b3JlOjpJbnRQb2ludCYmLCB1bnNpZ25lZCA9IDApOworICAgIHZvaWQgdXBkYXRlKFdlYkNvcmU6
OkludFBvaW50JiYsIHVuc2lnbmVkID0gMCk7CisgICAgdm9pZCBsZWF2ZSgpOworICAgIHZvaWQg
ZHJvcChXZWJDb3JlOjpJbnRQb2ludCYmLCB1bnNpZ25lZCA9IDApOworCisjaWYgIVVTRShHVEs0
KQorICAgIHZvaWQgZGF0YVJlY2VpdmVkKFdlYkNvcmU6OkludFBvaW50JiYsIEd0a1NlbGVjdGlv
bkRhdGEqLCB1bnNpZ25lZCwgdW5zaWduZWQpOworICAgIHZvaWQgbGVhdmVUaW1lckZpcmVkKCk7
CisjZW5kaWYKKworICAgIEd0a1dpZGdldCogbV93ZWJWaWV3IHsgbnVsbHB0ciB9OworI2lmICFV
U0UoR1RLNCkKKyAgICBHUmVmUHRyPEdka0RyYWdDb250ZXh0PiBtX2Ryb3A7CisjZW5kaWYKKyAg
ICBPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4gbV9wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBt
X2RhdGFSZXF1ZXN0Q291bnQgeyAwIH07CisgICAgUmVmUHRyPFdlYkNvcmU6OlNlbGVjdGlvbkRh
dGE+IG1fc2VsZWN0aW9uRGF0YTsKKyAgICBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uIG1fb3BlcmF0
aW9uIHsgV2ViQ29yZTo6RHJhZ09wZXJhdGlvbk5vbmUgfTsKKyNpZiAhVVNFKEdUSzQpCisgICAg
UnVuTG9vcDo6VGltZXI8RHJvcFRhcmdldD4gbV9sZWF2ZVRpbWVyOworI2VuZGlmCit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL0Ryb3BUYXJnZXRHdGsz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRhcmdldEd0azMuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzg4ZGVjMDdkYjJlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9Ecm9wVGFy
Z2V0R3RrMy5jcHAKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJvcFRh
cmdldC5oIgorCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgIVVTRShHVEs0KQorCisjaW5j
bHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EcmFn
RGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR1JlZlB0ckd0ay5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvR3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9n
bGliL0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworZW51bSBEcm9wVGFyZ2V0VHlwZSB7IE1hcmt1cCwgVGV4dCwgVVJJTGlzdCwg
TmV0c2NhcGVVUkwsIFNtYXJ0UGFzdGUgfTsKKworRHJvcFRhcmdldDo6RHJvcFRhcmdldChHdGtX
aWRnZXQqIHdlYlZpZXcpCisgICAgOiBtX3dlYlZpZXcod2ViVmlldykKKyAgICAsIG1fbGVhdmVU
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZEcm9wVGFyZ2V0OjpsZWF2ZVRpbWVyRmlyZWQp
Cit7CisgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBsaXN0ID0gYWRvcHRHUmVmKGd0a190YXJn
ZXRfbGlzdF9uZXcobnVsbHB0ciwgMCkpOworICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90
YXJnZXRzKGxpc3QuZ2V0KCksIERyb3BUYXJnZXRUeXBlOjpUZXh0KTsKKyAgICBndGtfdGFyZ2V0
X2xpc3RfYWRkKGxpc3QuZ2V0KCksIGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0ZXh0
L2h0bWwiKSwgMCwgRHJvcFRhcmdldFR5cGU6Ok1hcmt1cCk7CisgICAgZ3RrX3RhcmdldF9saXN0
X2FkZF91cmlfdGFyZ2V0cyhsaXN0LmdldCgpLCBEcm9wVGFyZ2V0VHlwZTo6VVJJTGlzdCk7Cisg
ICAgZ3RrX3RhcmdldF9saXN0X2FkZChsaXN0LmdldCgpLCBnZGtfYXRvbV9pbnRlcm5fc3RhdGlj
X3N0cmluZygiX05FVFNDQVBFX1VSTCIpLCAwLCBEcm9wVGFyZ2V0VHlwZTo6TmV0c2NhcGVVUkwp
OworICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdC5nZXQoKSwgZ2RrX2F0b21faW50ZXJuX3N0
YXRpY19zdHJpbmcoImFwcGxpY2F0aW9uL3ZuZC53ZWJraXRndGsuc21hcnRwYXN0ZSIpLCAwLCBE
cm9wVGFyZ2V0VHlwZTo6U21hcnRQYXN0ZSk7CisgICAgZ3RrX2RyYWdfZGVzdF9zZXQobV93ZWJW
aWV3LCBzdGF0aWNfY2FzdDxHdGtEZXN0RGVmYXVsdHM+KDApLCBudWxscHRyLCAwLAorICAgICAg
ICBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NPUFkgfCBHREtfQUNUSU9O
X01PVkUgfCBHREtfQUNUSU9OX0xJTkspKTsKKyAgICBndGtfZHJhZ19kZXN0X3NldF90YXJnZXRf
bGlzdChtX3dlYlZpZXcsIGxpc3QuZ2V0KCkpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX3dl
YlZpZXcsICJkcmFnLW1vdGlvbiIsIEdfQ0FMTEJBQ0soK1tdKEd0a1dpZGdldCosIEdka0RyYWdD
b250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgZ3VpbnQgdGltZSwgZ3BvaW50ZXIgdXNl
ckRhdGEpIC0+IGdib29sZWFuIHsKKyAgICAgICAgYXV0byYgZHJvcCA9ICpzdGF0aWNfY2FzdDxE
cm9wVGFyZ2V0Kj4odXNlckRhdGEpOworICAgICAgICBpZiAoIWRyb3AubV9kcm9wKSB7CisgICAg
ICAgICAgICBkcm9wLm1fZHJvcCA9IGNvbnRleHQ7CisgICAgICAgICAgICBkcm9wLm1fcG9zaXRp
b24gPSBJbnRQb2ludCh4LCB5KTsKKyAgICAgICAgICAgIGRyb3AuYWNjZXB0KHRpbWUpOworICAg
ICAgICB9IGVsc2UgaWYgKGRyb3AubV9kcm9wID09IGNvbnRleHQpCisgICAgICAgICAgICBkcm9w
LnVwZGF0ZSh7IHgsIHkgfSwgdGltZSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0pLCB0
aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZHJhZy1sZWF2ZSIsIEdf
Q0FMTEJBQ0soK1tdKEd0a1dpZGdldCosIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBndWludCB0
aW1lLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvJiBkcm9wID0gKnN0YXRpY19j
YXN0PERyb3BUYXJnZXQqPih1c2VyRGF0YSk7CisgICAgICAgIGlmIChkcm9wLm1fZHJvcCAhPSBj
b250ZXh0KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkcm9wLmxlYXZlKCk7CisgICAg
fSksIHRoaXMpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkcmFnLWRyb3Ai
LCBHX0NBTExCQUNLKCtbXShHdGtXaWRnZXQqLCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2lu
dCB4LCBnaW50IHksIGd1aW50IHRpbWUsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7
CisgICAgICAgIGF1dG8mIGRyb3AgPSAqc3RhdGljX2Nhc3Q8RHJvcFRhcmdldCo+KHVzZXJEYXRh
KTsKKyAgICAgICAgaWYgKGRyb3AubV9kcm9wICE9IGNvbnRleHQpIHsKKyAgICAgICAgICAgIGd0
a19kcmFnX2ZpbmlzaChjb250ZXh0LCBGQUxTRSwgRkFMU0UsIHRpbWUpOworICAgICAgICAgICAg
cmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZHJvcC5kcm9wKHsgeCwgeSB9LCB0aW1l
KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfSksIHRoaXMpOworCisgICAgZ19zaWduYWxf
Y29ubmVjdChtX3dlYlZpZXcsICJkcmFnLWRhdGEtcmVjZWl2ZWQiLCBHX0NBTExCQUNLKCtbXShH
dGtXaWRnZXQqLCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIEd0a1Nl
bGVjdGlvbkRhdGEqIGRhdGEsIGd1aW50IGluZm8sIGd1aW50IHRpbWUsIGdwb2ludGVyIHVzZXJE
YXRhKSB7CisgICAgICAgIGF1dG8mIGRyb3AgPSAqc3RhdGljX2Nhc3Q8RHJvcFRhcmdldCo+KHVz
ZXJEYXRhKTsKKyAgICAgICAgaWYgKGRyb3AubV9kcm9wICE9IGNvbnRleHQpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGRyb3AuZGF0YVJlY2VpdmVkKHsgeCwgeSB9LCBkYXRhLCBpbmZv
LCB0aW1lKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK0Ryb3BUYXJnZXQ6On5Ecm9wVGFyZ2V0KCkK
K3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV93ZWJWaWV3LCB0
aGlzKTsKK30KKwordm9pZCBEcm9wVGFyZ2V0OjphY2NlcHQodW5zaWduZWQgdGltZSkKK3sKKyAg
ICBpZiAobV9sZWF2ZVRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9sZWF2ZVRpbWVyLnN0
b3AoKTsKKyAgICAgICAgbGVhdmVUaW1lckZpcmVkKCk7CisgICAgfQorCisgICAgbV9kYXRhUmVx
dWVzdENvdW50ID0gMDsKKyAgICBtX3NlbGVjdGlvbkRhdGEgPSBTZWxlY3Rpb25EYXRhOjpjcmVh
dGUoKTsKKworICAgIC8vIFdlYkNvcmUgbmVlZHMgdGhlIHNlbGVjdGlvbiBkYXRhIHRvIGRlY2lk
ZSwgc28gd2UgbmVlZCB0byBwcmVsb2FkIHRoZQorICAgIC8vIGRhdGEgb2YgdGFyZ2V0cyB3ZSBz
dXBwb3J0LiBPbmNlIGFsbCBkYXRhIHJlcXVlc3RzIGFyZSBkb25lIHdlIHN0YXJ0CisgICAgLy8g
bm90aWZ5aW5nIHRoZSB3ZWIgcHJvY2VzcyBhYm91dCB0aGUgRE5EIGV2ZW50cy4KKyAgICBhdXRv
KiBsaXN0ID0gZ2RrX2RyYWdfY29udGV4dF9saXN0X3RhcmdldHMobV9kcm9wLmdldCgpKTsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc3VwcG9ydGVkVGFyZ2V0c1tdID0geworICAgICAg
ICAidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IiwKKyAgICAgICAgInRleHQvaHRtbCIsCisgICAg
ICAgICJfTkVUU0NBUEVfVVJMIiwKKyAgICAgICAgInRleHQvdXJpLWxpc3QiLAorICAgICAgICAi
YXBwbGljYXRpb24vdm5kLndlYmtpdGd0ay5zbWFydHBhc3RlIgorICAgIH07CisgICAgVmVjdG9y
PEdka0F0b20sIDQ+IHRhcmdldHM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdfTl9F
TEVNRU5UUyhzdXBwb3J0ZWRUYXJnZXRzKTsgKytpKSB7CisgICAgICAgIEdka0F0b20gYXRvbSA9
IGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKHN1cHBvcnRlZFRhcmdldHNbaV0pOworICAg
ICAgICBpZiAoZ19saXN0X2ZpbmQobGlzdCwgYXRvbSkpCisgICAgICAgICAgICB0YXJnZXRzLmFw
cGVuZChhdG9tKTsKKyAgICAgICAgZWxzZSBpZiAoIWkpIHsKKyAgICAgICAgICAgIGF0b20gPSBn
ZGtfYXRvbV9pbnRlcm5fc3RhdGljX3N0cmluZygidGV4dC9wbGFpbiIpOworICAgICAgICAgICAg
aWYgKGdfbGlzdF9maW5kKGxpc3QsIGF0b20pKQorICAgICAgICAgICAgICAgIHRhcmdldHMuYXBw
ZW5kKGF0b20pOworICAgICAgICB9CisgICAgfQorCisgICAgbV9kYXRhUmVxdWVzdENvdW50ID0g
dGFyZ2V0cy5zaXplKCk7CisgICAgZm9yIChhdXRvKiBhdG9tIDogdGFyZ2V0cykKKyAgICAgICAg
Z3RrX2RyYWdfZ2V0X2RhdGEobV93ZWJWaWV3LCBtX2Ryb3AuZ2V0KCksIGF0b20sIHRpbWUpOwor
fQorCit2b2lkIERyb3BUYXJnZXQ6OmVudGVyKEludFBvaW50JiYgcG9zaXRpb24sIHVuc2lnbmVk
IHRpbWUpCit7CisgICAgbV9wb3NpdGlvbiA9IFdURk1vdmUocG9zaXRpb24pOworCisgICAgYXV0
byogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSht
X3dlYlZpZXcpKTsKKyAgICBBU1NFUlQocGFnZSk7CisgICAgcGFnZS0+cmVzZXRDdXJyZW50RHJh
Z0luZm9ybWF0aW9uKCk7CisKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShtX3NlbGVjdGlvbkRhdGEu
Z2V0KCksICptX3Bvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fd2Vi
VmlldywgKm1fcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFn
X2NvbnRleHRfZ2V0X2FjdGlvbnMobV9kcm9wLmdldCgpKSkpOworICAgIHBhZ2UtPmRyYWdFbnRl
cmVkKGRyYWdEYXRhKTsKK30KKwordm9pZCBEcm9wVGFyZ2V0Ojp1cGRhdGUoSW50UG9pbnQmJiBw
b3NpdGlvbiwgdW5zaWduZWQgdGltZSkKK3sKKyAgICBpZiAobV9kYXRhUmVxdWVzdENvdW50IHx8
ICFtX3NlbGVjdGlvbkRhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcG9zaXRpb24gPSBX
VEZNb3ZlKHBvc2l0aW9uKTsKKworICAgIGF1dG8qIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdl
dFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSk7CisgICAgQVNTRVJUKHBhZ2Up
OworCisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEobV9zZWxlY3Rpb25EYXRhLmdldCgpLCAqbV9wb3Np
dGlvbiwgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChtX3dlYlZpZXcsICptX3Bvc2l0
aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dldF9h
Y3Rpb25zKG1fZHJvcC5nZXQoKSkpKTsKKyAgICBwYWdlLT5kcmFnVXBkYXRlZChkcmFnRGF0YSk7
Cit9CisKK3ZvaWQgRHJvcFRhcmdldDo6ZGF0YVJlY2VpdmVkKEludFBvaW50JiYgcG9zaXRpb24s
IEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEsIHVuc2lnbmVkIGluZm8sIHVuc2lnbmVkIHRpbWUpCit7
CisgICAgc3dpdGNoIChpbmZvKSB7CisgICAgY2FzZSBEcm9wVGFyZ2V0VHlwZTo6VGV4dDogewor
ICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHRleHQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ3Rr
X3NlbGVjdGlvbl9kYXRhX2dldF90ZXh0KGRhdGEpKSk7CisgICAgICAgIG1fc2VsZWN0aW9uRGF0
YS0+c2V0VGV4dChTdHJpbmc6OmZyb21VVEY4KHRleHQuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgRHJvcFRhcmdldFR5cGU6Ok1hcmt1cDogeworICAgICAgICBnaW50
IGxlbmd0aDsKKyAgICAgICAgY29uc3QgYXV0byogbWFya3VwRGF0YSA9IGd0a19zZWxlY3Rpb25f
ZGF0YV9nZXRfZGF0YV93aXRoX2xlbmd0aChkYXRhLCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKGxl
bmd0aCkgeworICAgICAgICAgICAgLy8gSWYgZGF0YSBzdGFydHMgd2l0aCBVVEYtMTYgQk9NIGFz
c3VtZSBpdCdzIFVURi0xNiwgb3RoZXJ3aXNlIGFzc3VtZSBVVEYtOC4KKyAgICAgICAgICAgIGlm
IChsZW5ndGggPj0gMiAmJiByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obWFya3VwRGF0
YSlbMF0gPT0gMHhGRUZGKQorICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uRGF0YS0+c2V0TWFy
a3VwKFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obWFya3VwRGF0YSkgKyAx
LCAobGVuZ3RoIC8gMikgLSAxKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9zZWxlY3Rpb25EYXRhLT5zZXRNYXJrdXAoU3RyaW5nOjpmcm9tVVRGOChtYXJrdXBEYXRhLCBs
ZW5ndGgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBEcm9w
VGFyZ2V0VHlwZTo6VVJJTGlzdDogeworICAgICAgICBnaW50IGxlbmd0aDsKKyAgICAgICAgY29u
c3QgYXV0byogdXJpTGlzdERhdGEgPSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGFfd2l0aF9s
ZW5ndGgoZGF0YSwgJmxlbmd0aCk7CisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICBt
X3NlbGVjdGlvbkRhdGEtPnNldFVSSUxpc3QoU3RyaW5nOjpmcm9tVVRGOCh1cmlMaXN0RGF0YSwg
bGVuZ3RoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIERyb3BUYXJnZXRUeXBl
OjpOZXRzY2FwZVVSTDogeworICAgICAgICBnaW50IGxlbmd0aDsKKyAgICAgICAgY29uc3QgYXV0
byogdXJsRGF0YSA9IGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YV93aXRoX2xlbmd0aChkYXRh
LCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKGxlbmd0aCkgeworICAgICAgICAgICAgVmVjdG9yPFN0
cmluZz4gdG9rZW5zID0gU3RyaW5nOjpmcm9tVVRGOCh1cmxEYXRhLCBsZW5ndGgpLnNwbGl0KCdc
bicpOworICAgICAgICAgICAgVVJMIHVybCh7IH0sIHRva2Vuc1swXSk7CisgICAgICAgICAgICBp
ZiAodXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldFVS
TCh1cmwsIHRva2Vucy5zaXplKCkgPiAxID8gdG9rZW5zWzFdIDogU3RyaW5nKCkpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIERyb3BUYXJnZXRUeXBlOjpTbWFy
dFBhc3RlOgorICAgICAgICBtX3NlbGVjdGlvbkRhdGEtPnNldENhblNtYXJ0UmVwbGFjZSh0cnVl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKC0tbV9kYXRhUmVxdWVzdENvdW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBlbnRlcihXVEZNb3ZlKHBvc2l0aW9uKSwgdGltZSk7
Cit9CisKK3ZvaWQgRHJvcFRhcmdldDo6ZGlkUGVyZm9ybUFjdGlvbigpCit7CisgICAgaWYgKCFt
X2Ryb3ApCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHBhZ2UgPSB3ZWJraXRXZWJWaWV3
QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSk7CisgICAgQVNTRVJU
KHBhZ2UpOworCisgICAgYXV0byBvcGVyYXRpb24gPSBwYWdlLT5jdXJyZW50RHJhZ09wZXJhdGlv
bigpOworICAgIGlmIChvcGVyYXRpb24gPT0gbV9vcGVyYXRpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIG1fb3BlcmF0aW9uID0gb3BlcmF0aW9uOworICAgIGdka19kcmFnX3N0YXR1cyhtX2Ry
b3AuZ2V0KCksIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24obV9vcGVyYXRpb24p
LCBHREtfQ1VSUkVOVF9USU1FKTsKK30KKwordm9pZCBEcm9wVGFyZ2V0OjpsZWF2ZVRpbWVyRmly
ZWQoKQoreworICAgIGF1dG8qIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSk7CisgICAgQVNTRVJUKHBhZ2UpOworCisgICAgRHJh
Z0RhdGEgZHJhZ0RhdGEobV9zZWxlY3Rpb25EYXRhLmdldCgpLCAqbV9wb3NpdGlvbiwgY29udmVy
dFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChtX3dlYlZpZXcsICptX3Bvc2l0aW9uKSwgRHJhZ09w
ZXJhdGlvbk5vbmUpOworICAgIHBhZ2UtPmRyYWdFeGl0ZWQoZHJhZ0RhdGEpOworICAgIHBhZ2Ut
PnJlc2V0Q3VycmVudERyYWdJbmZvcm1hdGlvbigpOworCisgICAgbV9kcm9wID0gbnVsbHB0cjsK
KyAgICBtX3Bvc2l0aW9uID0gV1RGOjpudWxsb3B0OworICAgIG1fc2VsZWN0aW9uRGF0YSA9IG51
bGxwdHI7Cit9CisKK3ZvaWQgRHJvcFRhcmdldDo6bGVhdmUoKQoreworICAgIC8vIEdUSyBlbWl0
cyBkcmFnLWxlYXZlIGJlZm9yZSBkcmFnLWRyb3AsIGJ1dCB3ZSBuZWVkIHRvIGtub3cgd2hldGhl
ciBhIGRyb3AKKyAgICAvLyBoYXBwZW5lZCB0byBub3RpZnkgdGhlIHdlYiBwcm9jZXNzIGFib3V0
IHRoZSBkcmFnIGV4aXQuCisgICAgbV9sZWF2ZVRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQor
Cit2b2lkIERyb3BUYXJnZXQ6OmRyb3AoSW50UG9pbnQmJiBwb3NpdGlvbiwgdW5zaWduZWQgdGlt
ZSkKK3sKKyAgICBpZiAobV9sZWF2ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGVhdmVU
aW1lci5zdG9wKCk7CisKKyAgICBhdXRvKiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdl
KFdFQktJVF9XRUJfVklFV19CQVNFKG1fd2ViVmlldykpOworICAgIEFTU0VSVChwYWdlKTsKKwor
ICAgIHVpbnQzMl90IGZsYWdzID0gMDsKKyAgICBpZiAoZ2RrX2RyYWdfY29udGV4dF9nZXRfc2Vs
ZWN0ZWRfYWN0aW9uKG1fZHJvcC5nZXQoKSkgPT0gR0RLX0FDVElPTl9DT1BZKQorICAgICAgICBm
bGFncyB8PSBEcmFnQXBwbGljYXRpb25Jc0NvcHlLZXlEb3duOworICAgIERyYWdEYXRhIGRyYWdE
YXRhKG1fc2VsZWN0aW9uRGF0YS5nZXQoKSwgcG9zaXRpb24sIGNvbnZlcnRXaWRnZXRQb2ludFRv
U2NyZWVuUG9pbnQobV93ZWJWaWV3LCBwb3NpdGlvbiksIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVy
YXRpb24oZ2RrX2RyYWdfY29udGV4dF9nZXRfYWN0aW9ucyhtX2Ryb3AuZ2V0KCkpKSwgc3RhdGlj
X2Nhc3Q8RHJhZ0FwcGxpY2F0aW9uRmxhZ3M+KGZsYWdzKSk7CisgICAgcGFnZS0+cGVyZm9ybURy
YWdPcGVyYXRpb24oZHJhZ0RhdGEsIHsgfSwgeyB9LCB7IH0pOworICAgIGd0a19kcmFnX2Zpbmlz
aChtX2Ryb3AuZ2V0KCksIFRSVUUsIEZBTFNFLCB0aW1lKTsKKworICAgIG1fZHJvcCA9IG51bGxw
dHI7CisgICAgbV9wb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsKKyAgICBtX3NlbGVjdGlvbkRhdGEg
PSBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShEUkFHX1NVUFBPUlQpICYmICFVU0UoR1RLNCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvRHJvcFRhcmdldEd0azQuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9Ecm9wVGFyZ2V0R3RrNC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi43MTRlNjNmMWY0OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL0Ryb3BUYXJnZXRHdGs0LmNwcApAQCAtMCwwICsxLDgz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyb3BUYXJnZXQuaCIKKworI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpICYmIFVTRShHVEs0KQorCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2
YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
R3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nbGli
L0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworRHJvcFRhcmdldDo6RHJvcFRhcmdldChHdGtXaWRnZXQqIHdlYlZpZXcpCisgICAg
OiBtX3dlYlZpZXcod2ViVmlldykKK3sKK30KKworRHJvcFRhcmdldDo6fkRyb3BUYXJnZXQoKQor
eworfQorCit2b2lkIERyb3BUYXJnZXQ6OmFjY2VwdCh1bnNpZ25lZCkKK3sKK30KKwordm9pZCBE
cm9wVGFyZ2V0Ojpsb2FkRGF0YShjb25zdCBjaGFyKiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChH
UmVmUHRyPEdCeXRlcz4mJik+JiYpCit7Cit9CisKK3ZvaWQgRHJvcFRhcmdldDo6ZGlkTG9hZERh
dGEoKQoreworfQorCit2b2lkIERyb3BUYXJnZXQ6OmVudGVyKEludFBvaW50JiYsIHVuc2lnbmVk
KQoreworfQorCit2b2lkIERyb3BUYXJnZXQ6OnVwZGF0ZShJbnRQb2ludCYmLCB1bnNpZ25lZCkK
K3sKK30KKwordm9pZCBEcm9wVGFyZ2V0OjpkaWRQZXJmb3JtQWN0aW9uKCkKK3sKK30KKwordm9p
ZCBEcm9wVGFyZ2V0OjpsZWF2ZSgpCit7Cit9CisKK3ZvaWQgRHJvcFRhcmdldDo6ZHJvcChJbnRQ
b2ludCYmLCB1bnNpZ25lZCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBVU0UoR1RLNCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggNjhmZGExNzAy
Y2NlLi5hYWIwZjdlZDBhZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCkBAIC0zMzAsMTQgKzMzMCwxMiBAQCB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogI2lm
IEVOQUJMRShEUkFHX1NVUFBPUlQpCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzdGFydERyYWcoUmVm
PFNlbGVjdGlvbkRhdGE+JiYgc2VsZWN0aW9uLCBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24s
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYgZHJhZ0ltYWdlKQogewotI2lmICFVU0UoR1RLNCkK
LSAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFV19CQVNFKG1f
dmlld1dpZGdldCk7Ci0gICAgd2Via2l0V2ViVmlld0Jhc2VEcmFnQW5kRHJvcEhhbmRsZXIod2Vi
Vmlldykuc3RhcnREcmFnKFdURk1vdmUoc2VsZWN0aW9uKSwgZHJhZ09wZXJhdGlvbiwgV1RGTW92
ZShkcmFnSW1hZ2UpKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyhXRUJLSVRfV0VC
X1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpLCBXVEZNb3ZlKHNlbGVjdGlvbiksIGRyYWdPcGVyYXRp
b24sIFdURk1vdmUoZHJhZ0ltYWdlKSk7Cit9CiAKLSAgICAvLyBBIGRyYWcgc3RhcnRpbmcgc2hv
dWxkIHByZXZlbnQgYSBkb3VibGUtY2xpY2sgZnJvbSBoYXBwZW5pbmcuIFRoaXMgbWlnaHQKLSAg
ICAvLyBoYXBwZW4gaWYgYSBkcmFnIGlzIGZvbGxvd2VkIHZlcnkgcXVpY2tseSBieSBhbm90aGVy
IGNsaWNrIChsaWtlIGluIHRoZSBXVFIpLgotICAgIHdlYmtpdFdlYlZpZXdCYXNlUmVzZXRDbGlj
a0NvdW50ZXIod2ViVmlldyk7Ci0jZW5kaWYKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbigpCit7CisgICAgd2Via2l0V2ViVmlld0Jhc2VEaWRQZXJm
b3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0
KSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9Q
YWdlQ2xpZW50SW1wbC5oCmluZGV4IGNkZDdjZGRiZGM4MC4uNzI3MjczNDNkZTAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCkBAIC0x
MDEsNiArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Vmlld1NuYXBzaG90PiB0YWtlVmll
d1NuYXBzaG90KE9wdGlvbmFsPFdlYkNvcmU6OkludFJlY3Q+JiYpIG92ZXJyaWRlOwogI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCiAgICAgdm9pZCBzdGFydERyYWcoUmVmPFdlYkNvcmU6OlNlbGVj
dGlvbkRhdGE+JiYsIFdlYkNvcmU6OkRyYWdPcGVyYXRpb24sIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+JiYgZHJhZ0ltYWdlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbigpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2b2lkIGVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcAppbmRleCAzNzU5OTExNmQzYzEuLmMzZTNhNmM1ZTJhMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTMx
LDcgKzMxLDkgQEAKIAogI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCiAjaW5jbHVk
ZSAiQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJEcmFnU291cmNlLmgiCiAj
aW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKKyNpbmNsdWRl
ICJEcm9wVGFyZ2V0LmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RGaWx0ZXIuaCIKICNpbmNsdWRl
ICJLZXlCaW5kaW5nVHJhbnNsYXRvci5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZl
bnQuaCIKQEAgLTU4LDcgKzYwLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lvbmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtRGlzcGxheS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVmUHRyQ2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgpAQCAtMjE5LDggKzIy
MCw5IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZT4gYWNjZWxlcmF0ZWRCYWNraW5nU3RvcmU7
CiAKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiAhVVNFKEdUSzQpCi0gICAgc3RkOjp1bmlx
dWVfcHRyPERyYWdBbmREcm9wSGFuZGxlcj4gZHJhZ0FuZERyb3BIYW5kbGVyOworI2lmIEVOQUJM
RShEUkFHX1NVUFBPUlQpCisgICAgc3RkOjp1bmlxdWVfcHRyPERyYWdTb3VyY2U+IGRyYWdTb3Vy
Y2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPERyb3BUYXJnZXQ+IGRyb3BUYXJnZXQ7CiAjZW5kaWYK
IAogI2lmICFVU0UoR1RLNCkKQEAgLTE1NTQsMjcgKzE1NTYsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0V2ViVmlld0Jhc2VRdWVyeVRvb2x0aXAoR3RrV2lkZ2V0KiB3aWRnZXQsIGdpbnQgLyog
eCAqLywgZwogICAgIHJldHVybiBUUlVFOwogfQogCi0jaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkg
JiYgIVVTRShHVEs0KQotc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YUdldChH
dGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRh
dGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGd1aW50IC8qIHRpbWUgKi8pCi17Ci0gICAg
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lk
Z2V0KS0+cHJpdjsKLSAgICBBU1NFUlQocHJpdi0+ZHJhZ0FuZERyb3BIYW5kbGVyKTsKLSAgICBw
cml2LT5kcmFnQW5kRHJvcEhhbmRsZXItPmZpbGxEcmFnRGF0YShjb250ZXh0LCBzZWxlY3Rpb25E
YXRhLCBpbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRW5kKEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBXZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5w
cml2OwotICAgIEFTU0VSVChwcml2LT5kcmFnQW5kRHJvcEhhbmRsZXIpOwotICAgIHByaXYtPmRy
YWdBbmREcm9wSGFuZGxlci0+ZmluaXNoRHJhZyhjb250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtE
cmFnQ29udGV4dCogY29udGV4dCwgZ2ludCAvKiB4ICovLCBnaW50IC8qIHkgKi8sIEd0a1NlbGVj
dGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGd1aW50IHRpbWUpCi17Ci0gICAg
d2Via2l0V2ViVmlld0Jhc2VEcmFnQW5kRHJvcEhhbmRsZXIoV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
d2lkZ2V0KSkuZHJhZ0VudGVyZWQoY29udGV4dCwgc2VsZWN0aW9uRGF0YSwgaW5mbywgdGltZSk7
Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKLQogI2lmICFVU0UoR1RLNCkKIHN0
YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBH
ZGtFdmVudCogZXZlbnQpCiB7CkBAIC0xNjAxLDI4ICsxNTgyLDYgQEAgc3RhdGljIEF0a09iamVj
dCogd2Via2l0V2ViVmlld0Jhc2VHZXRBY2Nlc3NpYmxlKEd0a1dpZGdldCogd2lkZ2V0KQogICAg
IHJldHVybiBwcml2LT5hY2Nlc3NpYmxlLmdldCgpOwogfQogCi0jaWYgRU5BQkxFKERSQUdfU1VQ
UE9SVCkgJiYgIVVTRShHVEs0KQotc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJh
Z01vdGlvbihHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQg
eCwgZ2ludCB5LCBndWludCB0aW1lKQotewotICAgIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0FuZERy
b3BIYW5kbGVyKFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCkpLmRyYWdNb3Rpb24oY29udGV4
dCwgSW50UG9pbnQoeCwgeSksIHRpbWUpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZURyYWdMZWF2ZShHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJh
Z0NvbnRleHQqIGNvbnRleHQsIGd1aW50IC8qIHRpbWUgKi8pCi17Ci0gICAgV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdjsK
LSAgICBBU1NFUlQocHJpdi0+ZHJhZ0FuZERyb3BIYW5kbGVyKTsKLSAgICBwcml2LT5kcmFnQW5k
RHJvcEhhbmRsZXItPmRyYWdMZWF2ZShjb250ZXh0KTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdl
YmtpdFdlYlZpZXdCYXNlRHJhZ0Ryb3AoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0
KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgZ3VpbnQgdGltZSkKLXsKLSAgICBXZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpLT5wcml2
OwotICAgIEFTU0VSVChwcml2LT5kcmFnQW5kRHJvcEhhbmRsZXIpOwotICAgIHJldHVybiBwcml2
LT5kcmFnQW5kRHJvcEhhbmRsZXItPmRyb3AoY29udGV4dCwgSW50UG9pbnQoeCwgeSksIHRpbWUp
OwotfQotI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0KICNpZiAhVVNFKEdUSzQpCiBz
dGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUhpZXJhcmNoeUNoYW5nZWQoR3RrV2lkZ2V0KiB3
aWRnZXQsIEd0a1dpZGdldCogb2xkVG9wbGV2ZWwpCiB7CkBAIC0xNjczLDEwICsxNjMyLDggQEAg
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3Qp
CiAgICAgcHJpdi0+cGFnZUNsaWVudCA9IG1ha2VVbmlxdWU8UGFnZUNsaWVudEltcGw+KHZpZXdX
aWRnZXQpOwogICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIodmlld1dpZGdldCks
IHByaXYtPmtleUJpbmRpbmdUcmFuc2xhdG9yLndpZGdldCgpKTsKIAotI2lmICFVU0UoR1RLNCkK
LSAgICBndGtfZHJhZ19kZXN0X3NldCh2aWV3V2lkZ2V0LCBzdGF0aWNfY2FzdDxHdGtEZXN0RGVm
YXVsdHM+KDApLCBudWxscHRyLCAwLAotICAgICAgICBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9u
PihHREtfQUNUSU9OX0NPUFkgfCBHREtfQUNUSU9OX01PVkUgfCBHREtfQUNUSU9OX0xJTksgfCBH
REtfQUNUSU9OX1BSSVZBVEUpKTsKLSAgICBndGtfZHJhZ19kZXN0X3NldF90YXJnZXRfbGlzdCh2
aWV3V2lkZ2V0LCBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKS50YXJnZXRMaXN0KCkpOwor
I2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgcHJpdi0+ZHJvcFRhcmdldCA9IG1ha2VVbmlx
dWU8RHJvcFRhcmdldD4odmlld1dpZGdldCk7CiAjZW5kaWYKIAogI2lmIFVTRShHVEs0KQpAQCAt
MTc0NywxNCArMTcwNCw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNz
X2luaXQoV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyogd2Via2l0V2ViVmllCiAgICAgd2lkZ2V0Q2xh
c3MtPnRvdWNoX2V2ZW50ID0gd2Via2l0V2ViVmlld0Jhc2VUb3VjaEV2ZW50OwogI2VuZGlmCiAg
ICAgd2lkZ2V0Q2xhc3MtPnF1ZXJ5X3Rvb2x0aXAgPSB3ZWJraXRXZWJWaWV3QmFzZVF1ZXJ5VG9v
bHRpcDsKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiAhVVNFKEdUSzQpCi0gICAgd2lkZ2V0
Q2xhc3MtPmRyYWdfZW5kID0gd2Via2l0V2ViVmlld0Jhc2VEcmFnRW5kOwotICAgIHdpZGdldENs
YXNzLT5kcmFnX2RhdGFfZ2V0ID0gd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YUdldDsKLSAgICB3
aWRnZXRDbGFzcy0+ZHJhZ19tb3Rpb24gPSB3ZWJraXRXZWJWaWV3QmFzZURyYWdNb3Rpb247Ci0g
ICAgd2lkZ2V0Q2xhc3MtPmRyYWdfbGVhdmUgPSB3ZWJraXRXZWJWaWV3QmFzZURyYWdMZWF2ZTsK
LSAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kcm9wID0gd2Via2l0V2ViVmlld0Jhc2VEcmFnRHJvcDsK
LSAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kYXRhX3JlY2VpdmVkID0gd2Via2l0V2ViVmlld0Jhc2VE
cmFnRGF0YVJlY2VpdmVkOwotI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAjaWYgIVVT
RShHVEs0KQogICAgIHdpZGdldENsYXNzLT5ldmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlRXZlbnQ7
CiAjZW5kaWYKQEAgLTE4MjksMTMgKzE3NzgsMjUgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNl
dFRvb2x0aXBBcmVhKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgY29uc3QgSW50UmUK
ICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+dG9vbHRpcEFyZWEgPSB0b29sdGlwQXJlYTsKIH0KIAot
I2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmICFVU0UoR1RLNCkKLURyYWdBbmREcm9wSGFuZGxl
ciYgd2Via2l0V2ViVmlld0Jhc2VEcmFnQW5kRHJvcEhhbmRsZXIoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYlZpZXdCYXNlKQorI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCit2b2lkIHdlYmtpdFdlYlZp
ZXdCYXNlU3RhcnREcmFnKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgUmVmPFNlbGVj
dGlvbkRhdGE+JiYgc2VsZWN0aW9uRGF0YSwgRHJhZ09wZXJhdGlvbiBkcmFnT3BlcmF0aW9uLCBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiYmIGltYWdlKQogewogICAgIFdlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXdCYXNlLT5wcml2OwotICAgIGlmICghcHJpdi0+ZHJhZ0Fu
ZERyb3BIYW5kbGVyKQotICAgICAgICBwcml2LT5kcmFnQW5kRHJvcEhhbmRsZXIgPSBtYWtlVW5p
cXVlPERyYWdBbmREcm9wSGFuZGxlcj4oKnByaXYtPnBhZ2VQcm94eSk7Ci0gICAgcmV0dXJuICpw
cml2LT5kcmFnQW5kRHJvcEhhbmRsZXI7CisgICAgaWYgKCFwcml2LT5kcmFnU291cmNlKQorICAg
ICAgICBwcml2LT5kcmFnU291cmNlID0gbWFrZVVuaXF1ZTxEcmFnU291cmNlPihHVEtfV0lER0VU
KHdlYlZpZXdCYXNlKSk7CisKKyAgICBwcml2LT5kcmFnU291cmNlLT5iZWdpbihXVEZNb3ZlKHNl
bGVjdGlvbkRhdGEpLCBkcmFnT3BlcmF0aW9uLCBXVEZNb3ZlKGltYWdlKSk7CisKKyNpZiAhVVNF
KEdUSzQpCisgICAgLy8gQSBkcmFnIHN0YXJ0aW5nIHNob3VsZCBwcmV2ZW50IGEgZG91YmxlLWNs
aWNrIGZyb20gaGFwcGVuaW5nLiBUaGlzIG1pZ2h0CisgICAgLy8gaGFwcGVuIGlmIGEgZHJhZyBp
cyBmb2xsb3dlZCB2ZXJ5IHF1aWNrbHkgYnkgYW5vdGhlciBjbGljayAobGlrZSBpbiB0aGUgV1RS
KS4KKyAgICBwcml2LT5jbGlja0NvdW50ZXIucmVzZXQoKTsKKyNlbmRpZgorfQorCit2b2lkIHdl
YmtpdFdlYlZpZXdCYXNlRGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSkKK3sKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+ZHJvcFRhcmdl
dC0+ZGlkUGVyZm9ybUFjdGlvbigpOwogfQogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQp
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlUHJpdmF0ZS5oCmluZGV4IGFkZmE2NzkwNzA3OS4uYTFkZGVkMzk5ZDY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJHZXN0dXJl
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIklucHV0TWV0aG9kU3RhdGUuaCIKICNpbmNsdWRlICJT
YW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5o
IgogI2luY2x1ZGUgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlZpZXdTbmFw
c2hvdFN0b3JlLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oIgpAQCAtMzks
NiArNDAsOCBAQAogI2luY2x1ZGUgIldlYktpdElucHV0TWV0aG9kQ29udGV4dC5oIgogI2luY2x1
ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9EcmFnQWN0aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2VsZWN0aW9u
RGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBXZWJLaXRXZWJWaWV3QmFzZSog
d2Via2l0V2ViVmlld0Jhc2VDcmVhdGUoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYpOwpA
QCAtNzgsOCArODEsOSBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkRXhpdFdlYlByb2Nlc3Mo
V2ViS2l0V2ViVmlld0Jhc2UqKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEaWRSZWxhdW5jaFdl
YlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2UqKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VQYWdl
Q2xvc2VkKFdlYktpdFdlYlZpZXdCYXNlKik7CiAKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAm
JiAhVVNFKEdUSzQpCi1XZWJLaXQ6OkRyYWdBbmREcm9wSGFuZGxlciYgd2Via2l0V2ViVmlld0Jh
c2VEcmFnQW5kRHJvcEhhbmRsZXIoV2ViS2l0V2ViVmlld0Jhc2UqKTsKKyNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKQordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyhXZWJLaXRXZWJWaWV3
QmFzZSosIFJlZjxXZWJDb3JlOjpTZWxlY3Rpb25EYXRhPiYmLCBXZWJDb3JlOjpEcmFnT3BlcmF0
aW9uLCBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA+JiYpOwordm9pZCB3ZWJraXRXZWJW
aWV3QmFzZURpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihXZWJLaXRXZWJWaWV3QmFzZSop
OwogI2VuZGlmCiAKICNpZiAhVVNFKEdUSzQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50
LmgKaW5kZXggMzRkOTc0MWY2NTAwLi5jYmRhMmEzZjAxMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QYWdlQ2xpZW50LmgKQEAgLTI1MCw2ICsyNTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnSXRlbSYsIGNvbnN0IFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJikgeyB9CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybURy
YWdPcGVyYXRpb24oYm9vbCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbigpIHsgfQogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDY4MGM1NWNmNTA5Yy4u
MjZhNmQzNDY1MWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
QEAgLTI0MjQsNiArMjQyNCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRQZXJmb3JtRHJhZ0Nv
bnRyb2xsZXJBY3Rpb24odWludDY0X3QgZHJhZ09wZXJhdGlvbiwgV2ViQ29yCiAgICAgbV9jdXJy
ZW50RHJhZ051bWJlck9mRmlsZXNUb0JlQWNjZXB0ZWQgPSBudW1iZXJPZkl0ZW1zVG9CZUFjY2Vw
dGVkOwogICAgIG1fY3VycmVudERyYWdDYXJldEVkaXRhYmxlRWxlbWVudFJlY3QgPSBlZGl0YWJs
ZUVsZW1lbnRSZWN0OwogICAgIHNldERyYWdDYXJldFJlY3QoaW5zZXJ0aW9uUmVjdCk7CisgICAg
cGFnZUNsaWVudCgpLmRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbigpOwogfQogCiAjaWYg
UExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0Ry
YWdBbmREcm9wSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvRHJhZ0Fu
ZERyb3BIYW5kbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJiODVmYjQz
NjBiLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0RyYWdB
bmREcm9wSGFuZGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRHJhZ0FuZERyb3BIYW5kbGVyLmgiCi0KLSNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKSAmJiAhVVNFKEdUSzQpCi0KLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HUmVmUHRyR3Rr
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyR3RrLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9HdGtVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4K
LSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1EcmFnQW5kRHJvcEhhbmRsZXI6OkRyYWdBbmREcm9wSGFuZGxl
cihXZWJQYWdlUHJveHkmIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLXsKLX0KLQotRHJhZ0Fu
ZERyb3BIYW5kbGVyOjpEcm9wcGluZ0NvbnRleHQ6OkRyb3BwaW5nQ29udGV4dChHZGtEcmFnQ29u
dGV4dCogZ2RrQ29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQotICAgIDogZ2RrQ29u
dGV4dChnZGtDb250ZXh0KQotICAgICwgbGFzdE1vdGlvblBvc2l0aW9uKHBvc2l0aW9uKQotICAg
ICwgc2VsZWN0aW9uRGF0YShTZWxlY3Rpb25EYXRhOjpjcmVhdGUoKSkKLXsKLX0KLQotc3RhdGlj
IGlubGluZSBHZGtEcmFnQWN0aW9uIGRyYWdPcGVyYXRpb25Ub0dka0RyYWdBY3Rpb25zKERyYWdP
cGVyYXRpb24gY29yZUFjdGlvbikKLXsKLSAgICBHZGtEcmFnQWN0aW9uIGdka0FjdGlvbiA9IHN0
YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KDApOwotICAgIGlmIChjb3JlQWN0aW9uID09IERyYWdP
cGVyYXRpb25Ob25lKQotICAgICAgICByZXR1cm4gZ2RrQWN0aW9uOwotCi0gICAgaWYgKGNvcmVB
Y3Rpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkKLSAgICAgICAgZ2RrQWN0aW9uID0gc3RhdGljX2Nh
c3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9DT1BZIHwgZ2RrQWN0aW9uKTsKLSAgICBpZiAo
Y29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Nb3ZlKQotICAgICAgICBnZGtBY3Rpb24gPSBzdGF0
aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX01PVkUgfCBnZGtBY3Rpb24pOwotICAg
IGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbkxpbmspCi0gICAgICAgIGdka0FjdGlvbiA9
IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fTElOSyB8IGdka0FjdGlvbik7
Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uUHJpdmF0ZSkKLSAgICAgICAgZ2Rr
QWN0aW9uID0gc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9QUklWQVRFIHwg
Z2RrQWN0aW9uKTsKLQotICAgIHJldHVybiBnZGtBY3Rpb247Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
R2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKERyYWdPcGVy
YXRpb24gY29yZUFjdGlvbikKLXsKLSAgICBpZiAoY29yZUFjdGlvbiA9PSBEcmFnT3BlcmF0aW9u
RXZlcnkgfHwgY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Db3B5KQotICAgICAgICByZXR1cm4g
R0RLX0FDVElPTl9DT1BZOwotICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUp
Ci0gICAgICAgIHJldHVybiBHREtfQUNUSU9OX01PVkU7Ci0gICAgaWYgKGNvcmVBY3Rpb24gJiBE
cmFnT3BlcmF0aW9uTGluaykKLSAgICAgICAgcmV0dXJuIEdES19BQ1RJT05fTElOSzsKLSAgICBp
ZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Qcml2YXRlKQotICAgICAgICByZXR1cm4gR0RL
X0FDVElPTl9QUklWQVRFOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigw
KTsKLX0KLQotc3RhdGljIGlubGluZSBEcmFnT3BlcmF0aW9uIGdka0RyYWdBY3Rpb25Ub0RyYWdP
cGVyYXRpb24oR2RrRHJhZ0FjdGlvbiBnZGtBY3Rpb24pCi17Ci0gICAgLy8gV2UgaGF2ZSBubyBn
b29kIHdheSB0byBkZXRlY3QgRHJhZ09wZXJhdGlvbkV2ZXJ5IG90aGVyIHRoYW4KLSAgICAvLyB0
byB1c2UgaXQgd2hlbiBhbGwgYXBwbGljYWJsZSBmbGFncyBhcmUgb24uCi0gICAgaWYgKGdka0Fj
dGlvbiAmIEdES19BQ1RJT05fQ09QWQotICAgICAgICAmJiBnZGtBY3Rpb24gJiBHREtfQUNUSU9O
X01PVkUKLSAgICAgICAgJiYgZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9MSU5LCi0gICAgICAgICYm
IGdka0FjdGlvbiAmIEdES19BQ1RJT05fUFJJVkFURSkKLSAgICAgICAgcmV0dXJuIERyYWdPcGVy
YXRpb25FdmVyeTsKLQotICAgIHVuc2lnbmVkIGFjdGlvbiA9IERyYWdPcGVyYXRpb25Ob25lOwot
ICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0NPUFkpCi0gICAgICAgIGFjdGlvbiB8PSBE
cmFnT3BlcmF0aW9uQ29weTsKLSAgICBpZiAoZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9NT1ZFKQot
ICAgICAgICBhY3Rpb24gfD0gRHJhZ09wZXJhdGlvbk1vdmU7Ci0gICAgaWYgKGdka0FjdGlvbiAm
IEdES19BQ1RJT05fTElOSykKLSAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVyYXRpb25MaW5rOwot
ICAgIGlmIChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX1BSSVZBVEUpCi0gICAgICAgIGFjdGlvbiB8
PSBEcmFnT3BlcmF0aW9uUHJpdmF0ZTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RHJhZ09wZXJh
dGlvbj4oYWN0aW9uKTsKLX0KLQotdm9pZCBEcmFnQW5kRHJvcEhhbmRsZXI6OnN0YXJ0RHJhZyhS
ZWY8U2VsZWN0aW9uRGF0YT4mJiBzZWxlY3Rpb24sIERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlv
biwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiBkcmFnSW1hZ2UpCi17Ci0gICAgLy8gV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyIGRvZXMgbm90IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBEbkQgb3BlcmF0
aW9uIGF0IHRoZSBzYW1lIHRpbWUgZm9yCi0gICAgLy8gYSBnaXZlbiBwYWdlLCBzbyB3ZSBzaG91
bGQgY2FuY2VsIGFueSBwcmV2aW91cyBvcGVyYXRpb24gd2hvc2UgY29udGV4dCB3ZSBtaWdodCBo
YXZlCi0gICAgLy8gc3RvcmVkLCBzaG91bGQgd2UgcmVjZWl2ZSBhIG5ldyBzdGFydERyYWcgZXZl
bnQgYmVmb3JlIGZpbmlzaGluZyBhIHByZXZpb3VzIERuRCBvcGVyYXRpb24uCi0gICAgaWYgKG1f
ZHJhZ0NvbnRleHQpIHsKLSAgICAgICAgZ3RrX2RyYWdfY2FuY2VsKG1fZHJhZ0NvbnRleHQuZ2V0
KCkpOwotICAgICAgICBtX2RyYWdDb250ZXh0ID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBtX2Ry
YWdnaW5nU2VsZWN0aW9uRGF0YSA9IFdURk1vdmUoc2VsZWN0aW9uKTsKLSAgICBHUmVmUHRyPEd0
a1RhcmdldExpc3Q+IHRhcmdldExpc3QgPSBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKS50
YXJnZXRMaXN0Rm9yU2VsZWN0aW9uRGF0YSgqbV9kcmFnZ2luZ1NlbGVjdGlvbkRhdGEpOwotCi0g
ICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gY3VycmVudEV2ZW50KGd0a19nZXRfY3VycmVudF9ldmVu
dCgpKTsKLSAgICBHZGtEcmFnQ29udGV4dCogY29udGV4dCA9IGd0a19kcmFnX2JlZ2luX3dpdGhf
Y29vcmRpbmF0ZXMobV9wYWdlLnZpZXdXaWRnZXQoKSwgdGFyZ2V0TGlzdC5nZXQoKSwgZHJhZ09w
ZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoZHJhZ09wZXJhdGlvbiksCi0gICAgICAgIEdES19CVVRU
T05fUFJJTUFSWSwgY3VycmVudEV2ZW50LmdldCgpLCAtMSwgLTEpOwotCi0gICAgbV9kcmFnQ29u
dGV4dCA9IGNvbnRleHQ7Ci0KLSAgICBpZiAoZHJhZ0ltYWdlKSB7Ci0gICAgICAgIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IGltYWdlKGRyYWdJbWFnZS0+Y3JlYXRlQ2Fpcm9TdXJmYWNlKCkpOwot
ICAgICAgICAvLyBVc2UgdGhlIGNlbnRlciBvZiB0aGUgZHJhZyBpbWFnZSBhcyBob3RzcG90Lgot
ICAgICAgICBjYWlyb19zdXJmYWNlX3NldF9kZXZpY2Vfb2Zmc2V0KGltYWdlLmdldCgpLCAtY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2UuZ2V0KCkpIC8gMiwgLWNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChpbWFnZS5nZXQoKSkgLyAyKTsKLSAgICAgICAgZ3RrX2RyYWdf
c2V0X2ljb25fc3VyZmFjZShjb250ZXh0LCBpbWFnZS5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGd0a19kcmFnX3NldF9pY29uX2RlZmF1bHQoY29udGV4dCk7Ci19Ci0KLXZvaWQgRHJhZ0Fu
ZERyb3BIYW5kbGVyOjpmaWxsRHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1Nl
bGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIHVuc2lnbmVkIGluZm8pCi17Ci0gICAgLy8gVGhp
cyBjYW4gaGFwcGVuIHdoZW4gYXR0ZW1wdGluZyB0byBjYWxsIGZpbmlzaCBkcmFnIGZyb20gd2Vi
a2l0V2ViVmlld0Jhc2VEcmFnRGF0YUdldCgpCi0gICAgLy8gZm9yIGEgb2Jzb2xldGUgRG5EIG9w
ZXJhdGlvbiB0aGF0IGdvdCBwcmV2aW91c2x5IGNhbmNlbGxlZCBpbiBzdGFydERyYWcoKS4KLSAg
ICBpZiAobV9kcmFnQ29udGV4dC5nZXQoKSAhPSBjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQobV9kcmFnZ2luZ1NlbGVjdGlvbkRhdGEpOwotICAgIFBhc3RlYm9hcmRIZWxw
ZXI6OnNpbmdsZXRvbigpLmZpbGxTZWxlY3Rpb25EYXRhKCptX2RyYWdnaW5nU2VsZWN0aW9uRGF0
YSwgaW5mbywgc2VsZWN0aW9uRGF0YSk7Ci19Ci0KLXZvaWQgRHJhZ0FuZERyb3BIYW5kbGVyOjpm
aW5pc2hEcmFnKEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQotewotICAgIC8vIFRoaXMgY2FuIGhh
cHBlbiB3aGVuIGF0dGVtcHRpbmcgdG8gY2FsbCBmaW5pc2ggZHJhZyBmcm9tIHdlYmtpdFdlYlZp
ZXdCYXNlRHJhZ0VuZCgpCi0gICAgLy8gZm9yIGEgb2Jzb2xldGUgRG5EIG9wZXJhdGlvbiB0aGF0
IGdvdCBwcmV2aW91c2x5IGNhbmNlbGxlZCBpbiBzdGFydERyYWcoKS4KLSAgICBpZiAobV9kcmFn
Q29udGV4dC5nZXQoKSAhPSBjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1f
ZHJhZ2dpbmdTZWxlY3Rpb25EYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RyYWdDb250
ZXh0ID0gbnVsbHB0cjsKLSAgICBtX2RyYWdnaW5nU2VsZWN0aW9uRGF0YSA9IG51bGxwdHI7Ci0K
LSAgICBHZGtEZXZpY2UqIGRldmljZSA9IGdka19kcmFnX2NvbnRleHRfZ2V0X2RldmljZShjb250
ZXh0KTsKLSAgICBpbnQgeCA9IDAsIHkgPSAwOwotICAgIGdka19kZXZpY2VfZ2V0X3dpbmRvd19h
dF9wb3NpdGlvbihkZXZpY2UsICZ4LCAmeSk7Ci0gICAgaW50IHhSb290ID0gMCwgeVJvb3QgPSAw
OwotICAgIGdka19kZXZpY2VfZ2V0X3Bvc2l0aW9uKGRldmljZSwgbnVsbHB0ciwgJnhSb290LCAm
eVJvb3QpOwotICAgIG1fcGFnZS5kcmFnRW5kZWQoSW50UG9pbnQoeCwgeSksIEludFBvaW50KHhS
b290LCB5Um9vdCksIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4
dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpKSk7Ci19Ci0KLVNlbGVjdGlvbkRhdGEqIERy
YWdBbmREcm9wSGFuZGxlcjo6ZHJvcERhdGFTZWxlY3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNvbnRl
eHQsIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIHVuc2lnbmVkIGluZm8sIEludFBv
aW50JiBwb3NpdGlvbikKLXsKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9
IG1fZHJvcHBpbmdDb250ZXh0cy5nZXQoY29udGV4dCk7Ci0gICAgaWYgKCFkcm9wcGluZ0NvbnRl
eHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZHJvcHBpbmdDb250ZXh0LT5wZW5k
aW5nRGF0YVJlcXVlc3RzLS07Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkuZmls
bFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZHJvcHBpbmdDb250ZXh0LT5zZWxl
Y3Rpb25EYXRhKTsKLSAgICBpZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3Rz
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFRoZSBjb29yZGluYXRlcyBwYXNz
ZWQgdG8gZHJhZy1kYXRhLXJlY2VpdmVkIHNpZ25hbCBhcmUgc29tZXRpbWVzCi0gICAgLy8gaW5h
Y2N1cmF0ZSBpbiBXVFIsIHNvIHVzZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGxhc3QgbW90aW9u
IGV2ZW50LgotICAgIHBvc2l0aW9uID0gZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRp
b247Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nIHJlcXVlc3RzLCBzdGFy
dCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2ViQ29yZS4KLSAgICByZXR1cm4gZHJvcHBpbmdD
b250ZXh0LT5zZWxlY3Rpb25EYXRhLnB0cigpOwotfQotCi12b2lkIERyYWdBbmREcm9wSGFuZGxl
cjo6ZHJhZ0VudGVyZWQoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEq
IHNlbGVjdGlvbkRhdGEsIHVuc2lnbmVkIGluZm8sIHVuc2lnbmVkIHRpbWUpCi17Ci0gICAgSW50
UG9pbnQgcG9zaXRpb247Ci0gICAgYXV0byogc2VsZWN0aW9uID0gZHJvcERhdGFTZWxlY3Rpb24o
Y29udGV4dCwgc2VsZWN0aW9uRGF0YSwgaW5mbywgcG9zaXRpb24pOwotICAgIGlmICghc2VsZWN0
aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEcmFnRGF0YSBkcmFnRGF0YShzZWxlY3Rpb24s
IHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fcGFnZS52aWV3V2lk
Z2V0KCksIHBvc2l0aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19j
b250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpKSk7Ci0gICAgbV9wYWdlLnJlc2V0Q3VycmVudERy
YWdJbmZvcm1hdGlvbigpOwotICAgIG1fcGFnZS5kcmFnRW50ZXJlZChkcmFnRGF0YSk7Ci0gICAg
RHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBtX3BhZ2UuY3VycmVudERyYWdPcGVyYXRpb24oKTsK
LSAgICBnZGtfZHJhZ19zdGF0dXMoY29udGV4dCwgZHJhZ09wZXJhdGlvblRvU2luZ2xlR2RrRHJh
Z0FjdGlvbihvcGVyYXRpb24pLCB0aW1lKTsKLX0KLQotU2VsZWN0aW9uRGF0YSogRHJhZ0FuZERy
b3BIYW5kbGVyOjpkcmFnRGF0YVNlbGVjdGlvbihHZGtEcmFnQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UG9pbnQmIHBvc2l0aW9uLCB1bnNpZ25lZCB0aW1lKQotewotICAgIHN0ZDo6dW5pcXVl
X3B0cjxEcm9wcGluZ0NvbnRleHQ+JiBkcm9wcGluZ0NvbnRleHQgPSBtX2Ryb3BwaW5nQ29udGV4
dHMuYWRkKGNvbnRleHQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICBpZiAoIWRyb3Bw
aW5nQ29udGV4dCkgewotICAgICAgICBHdGtXaWRnZXQqIHdpZGdldCA9IG1fcGFnZS52aWV3V2lk
Z2V0KCk7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IG1ha2VVbmlxdWU8RHJvcHBpbmdDb250
ZXh0Pihjb250ZXh0LCBwb3NpdGlvbik7Ci0gICAgICAgIFZlY3RvcjxHZGtBdG9tPiBhY2NlcHRh
YmxlVGFyZ2V0cyhQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKS5kcm9wQXRvbXNGb3JDb250
ZXh0KHdpZGdldCwgZHJvcHBpbmdDb250ZXh0LT5nZGtDb250ZXh0KSk7Ci0gICAgICAgIGRyb3Bw
aW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNpemUo
KTsKLSAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiBhY2NlcHRhYmxlVGFyZ2V0cykKLSAgICAg
ICAgICAgIGd0a19kcmFnX2dldF9kYXRhKHdpZGdldCwgZHJvcHBpbmdDb250ZXh0LT5nZGtDb250
ZXh0LCB0YXJnZXQsIHRpbWUpOwotICAgIH0gZWxzZQotICAgICAgICBkcm9wcGluZ0NvbnRleHQt
Pmxhc3RNb3Rpb25Qb3NpdGlvbiA9IHBvc2l0aW9uOwotCi0gICAgLy8gRG9uJ3Qgc2VuZCBhbnkg
ZHJhZyBpbmZvcm1hdGlvbiB0byBXZWJDb3JlIHVudGlsIHdlJ3ZlIHJldHJpZXZlZCBhbGwgdGhl
IGRhdGEgZm9yIHRoaXMgZHJhZyBvcGVyYXRpb24uCi0gICAgLy8gT3RoZXJ3aXNlIHdlJ2QgaGF2
ZSB0byBibG9jayB0byB3YWl0IGZvciB0aGUgZHJhZydzIGRhdGEuCi0gICAgaWYgKGRyb3BwaW5n
Q29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cyA+IDApCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIGRyb3BwaW5nQ29udGV4dC0+c2VsZWN0aW9uRGF0YS5wdHIoKTsKLX0K
LQotdm9pZCBEcmFnQW5kRHJvcEhhbmRsZXI6OmRyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgdW5zaWduZWQgdGltZSkKLXsKLSAgICBh
dXRvKiBzZWxlY3Rpb24gPSBkcmFnRGF0YVNlbGVjdGlvbihjb250ZXh0LCBwb3NpdGlvbiwgdGlt
ZSk7Ci0gICAgaWYgKCFzZWxlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIERyYWdEYXRh
IGRyYWdEYXRhKHNlbGVjdGlvbiwgcG9zaXRpb24sIGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVu
UG9pbnQobV9wYWdlLnZpZXdXaWRnZXQoKSwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFn
T3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBt
X3BhZ2UuZHJhZ1VwZGF0ZWQoZHJhZ0RhdGEpOwotICAgIERyYWdPcGVyYXRpb24gb3BlcmF0aW9u
ID0gbV9wYWdlLmN1cnJlbnREcmFnT3BlcmF0aW9uKCk7Ci0gICAgZ2RrX2RyYWdfc3RhdHVzKGNv
bnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGlt
ZSk7Ci19Ci0KLXZvaWQgRHJhZ0FuZERyb3BIYW5kbGVyOjpkcmFnTGVhdmUoR2RrRHJhZ0NvbnRl
eHQqIGNvbnRleHQpCi17Ci0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBt
X2Ryb3BwaW5nQ29udGV4dHMuZ2V0KGNvbnRleHQpOwotICAgIGlmICghZHJvcHBpbmdDb250ZXh0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBmaXJl
IGEgZHJhZy1sZWF2ZSBzaWduYWwgcmlnaHQgYmVmb3JlIGZpcmluZwotICAgIC8vIHRoZSBkcmFn
LWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhhcHBl
biBhZnRlcgotICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8g
aGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt0aGlzLCBjb250ZXh0LCBkcm9wcGluZ0NvbnRleHRdKCkgewotICAgICAgICBhdXRvIGl0ID0g
bV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4dCk7Ci0gICAgICAgIGlmIChpdCA9PSBtX2Ry
b3BwaW5nQ29udGV4dHMuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8g
SWYgdGhlIHZpZXcgZG9lc24ndCBrbm93IGFib3V0IHRoZSBkcmFnIHlldCAodGhlcmUgYXJlIHN0
aWxsIHBlbmRpbmcgZGF0YSByZXF1ZXN0cyksCi0gICAgICAgIC8vIGRvbid0IHVwZGF0ZSBpdCB3
aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcmFnLgotICAgICAgICBpZiAoZHJvcHBpbmdDb250
ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGlmICghZHJvcHBpbmdDb250ZXh0LT5kcm9wSGFwcGVuZWQpIHsKLSAgICAgICAgICAgIC8vIERv
bid0IGNhbGwgZHJhZ0V4aXRlZCBpZiB3ZSBoYXZlIGp1c3QgcmVjZWl2ZWQgYSBkcmFnLWRyb3Ag
c2lnbmFsLiBUaGlzCi0gICAgICAgICAgICAvLyBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIGEgc3Vj
Y2Vzc2Z1bCBkcm9wIG9udG8gdGhlIHZpZXcuCi0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCYg
cG9zaXRpb24gPSBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbjsKLSAgICAgICAg
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyb3BwaW5nQ29udGV4dC0+c2VsZWN0aW9uRGF0YS5wdHIo
KSwgcG9zaXRpb24sIGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQobV9wYWdlLnZpZXdX
aWRnZXQoKSwgcG9zaXRpb24pLCBEcmFnT3BlcmF0aW9uTm9uZSk7Ci0gICAgICAgICAgICBtX3Bh
Z2UuZHJhZ0V4aXRlZChkcmFnRGF0YSk7Ci0gICAgICAgICAgICBtX3BhZ2UucmVzZXRDdXJyZW50
RHJhZ0luZm9ybWF0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2Ryb3BwaW5nQ29udGV4
dHMucmVtb3ZlKGl0KTsKLSAgICB9KTsKLX0KLQotYm9vbCBEcmFnQW5kRHJvcEhhbmRsZXI6OmRy
b3AoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgdW5z
aWduZWQgdGltZSkKLXsKLSAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IG1f
ZHJvcHBpbmdDb250ZXh0cy5nZXQoY29udGV4dCk7Ci0gICAgaWYgKCFkcm9wcGluZ0NvbnRleHQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBl
bmVkID0gdHJ1ZTsKLQotICAgIHVpbnQzMl90IGZsYWdzID0gMDsKLSAgICBpZiAoZ2RrX2RyYWdf
Y29udGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpID09IEdES19BQ1RJT05fQ09QWSkK
LSAgICAgICAgZmxhZ3MgfD0gV2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uSXNDb3B5S2V5RG93bjsK
LSAgICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wcGluZ0NvbnRleHQtPnNlbGVjdGlvbkRhdGEucHRy
KCksIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fcGFnZS52aWV3
V2lkZ2V0KCksIHBvc2l0aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJh
Z19jb250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpKSwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJh
Z0FwcGxpY2F0aW9uRmxhZ3M+KGZsYWdzKSk7Ci0gICAgbV9wYWdlLnBlcmZvcm1EcmFnT3BlcmF0
aW9uKGRyYWdEYXRhLCBTdHJpbmcoKSwgeyB9LCB7IH0pOwotICAgIGd0a19kcmFnX2ZpbmlzaChj
b250ZXh0LCBUUlVFLCBGQUxTRSwgdGltZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZjg5YmY2Mjdh
ODgzLi5mODJiN2Y5MGRhMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCkBAIC0zOTQzLDcgKzM5NDMsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1E
cmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24sIGNvbnN0IElu
dAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb246
OlVwZGF0ZWQ6IHsKLSAgICAgICAgRHJhZ09wZXJhdGlvbiByZXNvbHZlZERyYWdPcGVyYXRpb24g
PSBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoZHJhZ0RhdGEpOworICAgICAg
ICBEcmFnT3BlcmF0aW9uIHJlc29sdmVkRHJhZ09wZXJhdGlvbiA9IG1fcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKS5kcmFnVXBkYXRlZChkcmFnRGF0YSk7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHJlc29sdmVkRHJhZ09w
ZXJhdGlvbiwgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdIYW5kbGluZ01ldGhvZCgpLCBt
X3BhZ2UtPmRyYWdDb250cm9sbGVyKCkubW91c2VJc092ZXJGaWxlSW5wdXQoKSwgbV9wYWdlLT5k
cmFnQ29udHJvbGxlcigpLm51bWJlck9mSXRlbXNUb0JlQWNjZXB0ZWQoKSwgeyB9LCB7IH0pKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCAxNTM5OTAxZTZjODYuLjRkMDk0M2My
NDg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
YlBhZ2VHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9X
ZWJQYWdlR3RrLmNwcApAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9h
cmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyVGhlbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Cg==
</data>
<flag name="review"
          id="414543"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>