<?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>184042</bug_id>
          
          <creation_ts>2018-03-27 08:12:07 -0700</creation_ts>
          <short_desc>[GTK][WPE] Remove UpdateAtlas</short_desc>
          <delta_ts>2018-03-28 05:30:17 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Miguel Gomez">magomez</reporter>
          <assigned_to name="Miguel Gomez">magomez</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1409545</commentid>
    <comment_count>0</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2018-03-27 08:12:07 -0700</bug_when>
    <thetext>Stop using UpdateAtlas as a cache of buffers to draw cairo content, and allocate new buffers each time instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409547</commentid>
    <comment_count>1</comment_count>
      <attachid>336587</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2018-03-27 08:22:00 -0700</bug_when>
    <thetext>Created attachment 336587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409635</commentid>
    <comment_count>2</comment_count>
      <attachid>336587</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-03-27 12:38:52 -0700</bug_when>
    <thetext>Comment on attachment 336587
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:984
&gt; +            updateInfo.surfaceOffset = {0, 0};

This can be more spacious: &apos;surfaceOffset = { 0, 0 };

Or better yet, it can be removed, perhaps in a separate patch.

&gt; Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.h:78
&gt; +    void resetUpdateAtlasForTesting() override { };

Can we remove this as well? It&apos;s specific to coordgraphics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409815</commentid>
    <comment_count>3</comment_count>
      <attachid>336650</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2018-03-28 03:33:38 -0700</bug_when>
    <thetext>Created attachment 336650
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409820</commentid>
    <comment_count>4</comment_count>
      <attachid>336650</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-28 05:30:15 -0700</bug_when>
    <thetext>Comment on attachment 336650
Patch

Clearing flags on attachment: 336650

Committed r230028: &lt;https://trac.webkit.org/changeset/230028&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409821</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-28 05:30:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336587</attachid>
            <date>2018-03-27 08:22:00 -0700</date>
            <delta_ts>2018-03-28 03:33:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184042-20180327172158.patch</filename>
            <type>text/plain</type>
            <size>54237</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5OTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDk4ODhiMzE2Nzg0OWMy
NDhlMTk1ZjIxMmQ0MmJjMjBiYTEyOGU3OS4uYjE2MDRhNjBjY2NiMDQxMTE3MzUxNzNmNWU0ZDgw
ZDM0Y2M1NWIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE4LTAzLTI3ICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBSZW1v
dmUgVXBkYXRlQXRsYXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4NDA0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJlbW92ZSBVcGRhdGVBdGxhcyBhbmQgQXJlYUFsbG9jYXRvciBjbGFzc2VzLiBJbnN0
ZWFkIG9mIHVzaW5nIFVwZGF0ZUF0bGFzIGFzIGEgY2FjaGUKKyAgICAgICAgb2YgYnVmZmVycyB0
byByZW5kZXIgdGlsZXMgd2l0aCBjYWlybywgYWxsb2NhdGUgYSBuZXcgYnVmZmVyIGZvciBlYWNo
IHRpbGUgaW5zdGVhZC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0ZW50IHRlc3RzLgorCisg
ICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxv
Y2F0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmg6CisgICAgICAgICgpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9V
cGRhdGVBdGxhcy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmg6IFJlbW92ZWQuCisKIDIwMTgtMDMtMjcgIEVy
aWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBBVkZv
dW5kYXRpb25FbmFibGVkIHByZWZlcmVuY2UgYXZhaWxhYmxlIG9uIGlPUwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAy
NjVhYjhiNjExZGY4OTIwN2I3MWQ3NTA2MWYzNTRhM2Q3YWVkYzhhLi4yNTZlYWZjOWFhNTQ3MjI1
ZWU2MDVkZmQzNGFiMjcxOGViYjI5Y2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE4
LTAzLTI3ICBNaWd1ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S11bV1BFXSBSZW1vdmUgVXBkYXRlQXRsYXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4NDA0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZSBhbGwgdGhlIGNvZGUgcmVsYXRlZCB0byBVcGRhdGVB
dGxhcyBoYW5kbGluZy4KKworICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0U2NlbmVTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VHTFJlc291cmNlcyk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY1VwZGF0ZUF0bGFzZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0
ZVVwZGF0ZUF0bGFzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpyZW1vdmVVcGRhdGVBdGxhcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVsZWFzZVVwZGF0ZUF0bGFzZXMpOiBEZWxldGVk
LgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5oOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVk
Y29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaHJl
YWRlZENvbXBvc2l0b3I6OnJlbmRlckxheWVyVHJlZSk6CisgICAgICAgIChXZWJLaXQ6OlRocmVh
ZGVkQ29tcG9zaXRvcjo6cmVsZWFzZVVwZGF0ZUF0bGFzZXMpOiBEZWxldGVkLgorICAgICAgICAq
IFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENv
bXBvc2l0b3IuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnJl
c2V0VXBkYXRlQXRsYXNGb3JUZXN0aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQ
ZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6Y2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRpbmdDb29yZGluYXRvcjo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29t
cG9zaXRpbmdDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRsYXMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVVcGRhdGVBdGxh
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Omdl
dENvb3JkaW5hdGVkQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0
aXZlQXRsYXNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUF0bGFzZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjbGVhclVwZGF0
ZUF0bGFzZXMpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNsZWFyVXBk
YXRlQXRsYXNlcyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6cmVsZWFzZVVwZGF0ZUF0bGFzZXMpOiBEZWxldGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhv
c3QuaDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJsZSk6
CisKIDIwMTgtMDMtMjcgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFrZSBBVkZvdW5kYXRpb25FbmFibGVkIHByZWZlcmVuY2UgYXZhaWxhYmxlIG9u
IGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKaW5kZXgg
NWE0ZTk1N2E5ZmVhNzk3NGFiZGI5N2QzYjg4MjgzM2NlMmEwMzZmZi4uZWE5MjZjZWUyMWIzODZh
NDY5YmUzNDdhODI5YTk4NWUxNTQ0ZWJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlCkBAIC0zNiwxMiArMzYsMTAgQEAgaWYgKFVTRV9DT09SRElOQVRF
RF9HUkFQSElDUykKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5jcHAKIAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvVGlsZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL1RpbGVkQmFja2luZ1N0b3JlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwCiAgICAgKQogCiAgICAgIyBG
SVhNRTogTW92ZSB0aGlzIGludG8gTmljb3NpYS5jbWFrZSBvbmNlIHRoZSBjb21wb25lbnQgaXMg
c2V0IGZvciBsb25nLXRlcm0gdXNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0
b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWRhYzVkNTczNzdmMDBlMzhh
OTBiNDkxZGVmMTkxODIyMjlmZGQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQXJlYUFsbG9jYXRvcjo6QXJl
YUFsbG9jYXRvcihjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9zaXplKHNpemUpCi0gICAg
LCBtX21pbkFsbG9jKDEsIDEpCi0gICAgLCBtX21hcmdpbigwLCAwKQotewotfQotCi1BcmVhQWxs
b2NhdG9yOjp+QXJlYUFsbG9jYXRvcigpCi17Ci19Ci0KLXZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhw
YW5kKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgbV9zaXplID0gbV9zaXplLmV4cGFuZGVk
VG8oc2l6ZSk7Ci19Ci0KLXZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kQnkoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUgKz0gc2l6ZTsKLX0KLQotdm9pZCBBcmVhQWxsb2NhdG9y
OjpyZWxlYXNlKGNvbnN0IEludFJlY3QmKQotewotfQotCi1pbnQgQXJlYUFsbG9jYXRvcjo6b3Zl
cmhlYWQoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1JbnRTaXplIEFyZWFBbGxvY2F0
b3I6OnJvdW5kQWxsb2NhdGlvbihjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAotewotICAgIGlu
dCB3aWR0aCA9IHNpemUud2lkdGgoKSArIG1fbWFyZ2luLndpZHRoKCk7Ci0gICAgaW50IGhlaWdo
dCA9IHNpemUuaGVpZ2h0KCkgKyBtX21hcmdpbi5oZWlnaHQoKTsKLSAgICBpbnQgZXh0cmEgPSB3
aWR0aCAlIG1fbWluQWxsb2Mud2lkdGgoKTsKLSAgICBpZiAoZXh0cmEpCi0gICAgICAgIHdpZHRo
ICs9IG1fbWluQWxsb2Mud2lkdGgoKSAtIGV4dHJhOwotICAgIGV4dHJhID0gaGVpZ2h0ICUgbV9t
aW5BbGxvYy5oZWlnaHQoKTsKLSAgICBpZiAoZXh0cmEpCi0gICAgICAgIGhlaWdodCArPSBtX21p
bkFsbG9jLmhlaWdodCgpIC0gZXh0cmE7Ci0KLSAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKLX0KLQotR2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVyYWxBcmVhQWxsb2NhdG9yKGNv
bnN0IEludFNpemUmIHNpemUpCi0gICAgOiBBcmVhQWxsb2NhdG9yKG5leHRQb3dlck9mVHdvKHNp
emUpKQotewotICAgIG1fcm9vdCA9IG5ldyBOb2RlKCk7Ci0gICAgbV9yb290LT5yZWN0ID0gSW50
UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBtX3Jvb3Qt
Pmxhcmdlc3RGcmVlID0gbV9zaXplOwotICAgIG1fbm9kZUNvdW50ID0gMTsKLSAgICBzZXRNaW5p
bXVtQWxsb2NhdGlvbihJbnRTaXplKDgsIDgpKTsKLX0KLQotR2VuZXJhbEFyZWFBbGxvY2F0b3I6
On5HZW5lcmFsQXJlYUFsbG9jYXRvcigpCi17Ci0gICAgZnJlZU5vZGUobV9yb290KTsKLX0KLQot
dm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJlZU5vZGUoTm9kZSogbm9kZSkKLXsKLSAgICBp
ZiAobm9kZSkgewotICAgICAgICBmcmVlTm9kZShub2RlLT5sZWZ0KTsKLSAgICAgICAgZnJlZU5v
ZGUobm9kZS0+cmlnaHQpOwotICAgIH0KLSAgICBkZWxldGUgbm9kZTsKLX0KLQotdm9pZCBHZW5l
cmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgQXJl
YUFsbG9jYXRvcjo6ZXhwYW5kKG5leHRQb3dlck9mVHdvKHNpemUpKTsKLQotICAgIGlmIChtX3Jv
b3QtPnJlY3Quc2l6ZSgpID09IG1fc2l6ZSkKLSAgICAgICAgcmV0dXJuOyAvLyBObyBjaGFuZ2Uu
Ci0KLSAgICBpZiAoIW1fcm9vdC0+bGVmdCAmJiBtX3Jvb3QtPmxhcmdlc3RGcmVlLndpZHRoKCkg
PiAwKSB7Ci0gICAgICAgIC8vIE5vIGFsbG9jYXRpb25zIGhhdmUgb2NjdXJyZWQsIHNvIGp1c3Qg
YWRqdXN0IHRoZSByb290IHNpemUuCi0gICAgICAgIG1fcm9vdC0+cmVjdCA9IEludFJlY3QoMCwg
MCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1fcm9vdC0+bGFy
Z2VzdEZyZWUgPSBtX3NpemU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBZGQg
ZXh0cmEgbm9kZXMgYWJvdmUgdGhlIGN1cnJlbnQgcm9vdCB0byBleHBhbmQgdGhlIHRyZWUuCi0g
ICAgTm9kZSogb2xkUm9vdCA9IG1fcm9vdDsKLSAgICBTcGxpdCBzcGxpdDsKLSAgICBpZiAobV9z
aXplLndpZHRoKCkgPj0gbV9zaXplLmhlaWdodCgpKQotICAgICAgICBzcGxpdCA9IFNwbGl0T25Y
OwotICAgIGVsc2UKLSAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLQotICAgIHdoaWxlIChtX3Jv
b3QtPnJlY3Quc2l6ZSgpICE9IG1fc2l6ZSkgewotICAgICAgICBpZiAobV9yb290LT5yZWN0Lndp
ZHRoKCkgPT0gbV9zaXplLndpZHRoKCkpCi0gICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwot
ICAgICAgICBlbHNlIGlmIChtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkgPT0gbV9zaXplLmhlaWdodCgp
KQotICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAgICAgICAgTm9kZSogcGFyZW50ID0g
bmV3IE5vZGUoKTsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOwotICAgICAgICBt
X25vZGVDb3VudCArPSAyOwotICAgICAgICBtX3Jvb3QtPnBhcmVudCA9IHBhcmVudDsKLSAgICAg
ICAgcGFyZW50LT5wYXJlbnQgPSBudWxscHRyOwotICAgICAgICBwYXJlbnQtPmxlZnQgPSBtX3Jv
b3Q7Ci0gICAgICAgIHBhcmVudC0+cmlnaHQgPSByaWdodDsKLSAgICAgICAgcGFyZW50LT5sYXJn
ZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5zaXplKCk7Ci0gICAgICAgIHJpZ2h0LT5wYXJlbnQgPSBw
YXJlbnQ7Ci0gICAgICAgIHJpZ2h0LT5sZWZ0ID0gbnVsbHB0cjsKLSAgICAgICAgcmlnaHQtPnJp
Z2h0ID0gbnVsbHB0cjsKLSAgICAgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0
LnNpemUoKTsKLSAgICAgICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7Ci0gICAgICAgICAgICBw
YXJlbnQtPnJlY3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCks
Ci0gICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCkgKiAyLCBtX3Jvb3QtPnJlY3Qu
aGVpZ2h0KCkpOwotICAgICAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVj
dC54KCkgKyBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LnkoKSwKLSAgICAgICAg
ICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcmVudC0+cmVjdCA9IEludFJlY3QobV9yb290
LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICBtX3Jvb3QtPnJl
Y3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpICogMik7Ci0gICAgICAgICAgICByaWdo
dC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSArIG1f
cm9vdC0+cmVjdC53aWR0aCgpLAotICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgp
LCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHNwbGl0ID0gKHNw
bGl0ID09IFNwbGl0T25YID8gU3BsaXRPblkgOiBTcGxpdE9uWCk7Ci0gICAgICAgIG1fcm9vdCA9
IHBhcmVudDsKLSAgICB9Ci0gICAgdXBkYXRlTGFyZ2VzdEZyZWUob2xkUm9vdCk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBmaXRzV2l0aGluKGNvbnN0IEludFNpemUmIHNpemUxLCBjb25zdCBJ
bnRTaXplJiBzaXplMikKLXsKLSAgICByZXR1cm4gc2l6ZTEud2lkdGgoKSA8PSBzaXplMi53aWR0
aCgpICYmIHNpemUxLmhlaWdodCgpIDw9IHNpemUyLmhlaWdodCgpOwotfQotCi1JbnRSZWN0IEdl
bmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAg
IEludFNpemUgcm91bmRlZCA9IHJvdW5kQWxsb2NhdGlvbihzaXplKTsKLSAgICByb3VuZGVkID0g
bmV4dFBvd2VyT2ZUd28ocm91bmRlZCk7Ci0gICAgaWYgKHJvdW5kZWQud2lkdGgoKSA8PSAwIHx8
IHJvdW5kZWQud2lkdGgoKSA+IG1fc2l6ZS53aWR0aCgpCi0gICAgICAgIHx8IHJvdW5kZWQuaGVp
Z2h0KCkgPD0gMCB8fCByb3VuZGVkLmhlaWdodCgpID4gbV9zaXplLmhlaWdodCgpKQotICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgSW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21O
b2RlKHJvdW5kZWQsIG1fcm9vdCk7Ci0gICAgaWYgKHBvaW50LngoKSA+PSAwKQotICAgICAgICBy
ZXR1cm4gSW50UmVjdChwb2ludCwgc2l6ZSk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQot
SW50UG9pbnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgTm9kZSogbm9kZSkKLXsKLSAgICAvLyBGaW5kIHRoZSBiZXN0IG5vZGUgdG8g
aW5zZXJ0IGludG8sIHdoaWNoIHNob3VsZCBiZQotICAgIC8vIGEgbm9kZSB3aXRoIHRoZSBsZWFz
dCBhbW91bnQgb2YgdW51c2VkIHNwYWNlIHRoYXQgaXMKLSAgICAvLyBiaWcgZW5vdWdoIHRvIGNv
bnRhaW4gdGhlIHJlcXVlc3RlZCBzaXplLgotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIC8v
IEdvIGRvd24gYSBsZXZlbCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBsZWZ0IG9yIHJpZ2h0Ci0gICAg
ICAgIC8vIHN1Yi10cmVlIGNvbnRhaW5zIHRoZSBiZXN0IGNoYW5jZSBvZiBhbGxvY2F0aW9uLgot
ICAgICAgICBOb2RlKiBsZWZ0ID0gbm9kZS0+bGVmdDsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBu
b2RlLT5yaWdodDsKLSAgICAgICAgaWYgKGxlZnQgJiYgZml0c1dpdGhpbihzaXplLCBsZWZ0LT5s
YXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUs
IHJpZ2h0LT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+bGFyZ2Vz
dEZyZWUud2lkdGgoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS53aWR0aCgpCi0gICAgICAgICAgICAg
ICAgICAgIHx8IGxlZnQtPmxhcmdlc3RGcmVlLmhlaWdodCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVl
LmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXJnZXN0RnJlZSB2YWx1
ZXMgbWF5IGJlIGEgbGl0dGxlIG92ZXJzaXplZCwKLSAgICAgICAgICAgICAgICAgICAgLy8gc28g
dHJ5IHRoZSBsZWZ0IHN1Yi10cmVlIGFuZCB0aGVuIHRoZSByaWdodCBzdWItdHJlZS4KLSAgICAg
ICAgICAgICAgICAgICAgSW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIGxl
ZnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnQueCgpID49IDApCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcG9pbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBh
bGxvY2F0ZUZyb21Ob2RlKHNpemUsIHJpZ2h0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgbm9kZSA9IHJpZ2h0OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgbm9kZSA9IGxlZnQ7Ci0gICAgICAgIH0gZWxzZSBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihz
aXplLCByaWdodC0+bGFyZ2VzdEZyZWUpKQotICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OwotICAg
ICAgICBlbHNlIGlmIChsZWZ0IHx8IHJpZ2h0KSB7Ci0gICAgICAgICAgICAvLyBOZWl0aGVyIHN1
Yi1ub2RlIGhhcyBlbm91Z2ggc3BhY2UgdG8gYWxsb2NhdGUgZnJvbS4KLSAgICAgICAgICAgIHJl
dHVybiBJbnRQb2ludCgtMSwgLTEpOwotICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oc2l6
ZSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAgICAgICAgICAvLyBEbyB3ZSBuZWVkIHRvIHNw
bGl0IHRoaXMgbm9kZSBpbnRvIHNtYWxsZXIgcGllY2VzPwotICAgICAgICAgICAgU3BsaXQgc3Bs
aXQ7Ci0gICAgICAgICAgICBpZiAoZml0c1dpdGhpbihJbnRTaXplKHNpemUud2lkdGgoKSAqIDIs
IHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gU3BsaXQgaW4gZWl0aGVyIGRpcmVjdGlvbjogY2hvb3NlIHRoZSBpbnZlcnNlIG9mCi0g
ICAgICAgICAgICAgICAgLy8gdGhlIHBhcmVudCBub2RlJ3Mgc3BsaXQgZGlyZWN0aW9uIHRvIHRy
eSB0byBiYWxhbmNlCi0gICAgICAgICAgICAgICAgLy8gb3V0IHRoZSB3YXN0ZWQgc3BhY2UgYXMg
ZnVydGhlciBzdWJkaXZpc2lvbnMgaGFwcGVuLgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5w
YXJlbnQKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0Lngo
KSA9PSBub2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0LngoKSkKLSAgICAgICAgICAgICAgICAgICAg
c3BsaXQgPSBTcGxpdE9uWDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5wYXJlbnQp
Ci0gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+cmVjdC53aWR0aCgpID49IG5vZGUtPnJlY3QuaGVpZ2h0KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChmaXRzV2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSks
IG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRo
ZSBYIGRpcmVjdGlvbi4KLSAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAgICAgICAgICAgICAgIC8vIFNw
bGl0IGFsb25nIHRoZSBZIGRpcmVjdGlvbi4KLSAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0
T25ZOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3Bs
aXQgZnVydGhlciAtIGFsbG9jYXRlIHRoaXMgbm9kZS4KLSAgICAgICAgICAgICAgICBub2RlLT5s
YXJnZXN0RnJlZSA9IEludFNpemUoMCwgMCk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2Vz
dEZyZWUobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnJlY3QubG9jYXRpb24o
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIG5vZGUsIHRoZW4g
Z28gYXJvdW5kIGFnYWluIHVzaW5nIHRoZSBsZWZ0IHN1Yi10cmVlLgotICAgICAgICAgICAgbm9k
ZSA9IHNwbGl0Tm9kZShub2RlLCBzcGxpdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBDYW5ub3QgcG9zc2libHkgZml0IGludG8gdGhpcyBub2RlLgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIEludFBvaW50KC0xLCAtMSk7Ci19Ci0K
LUdlbmVyYWxBcmVhQWxsb2NhdG9yOjpOb2RlKiBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6c3BsaXRO
b2RlKE5vZGUqIG5vZGUsIFNwbGl0IHNwbGl0KQotewotICAgIE5vZGUqIGxlZnQgPSBuZXcgTm9k
ZSgpOwotICAgIGxlZnQtPnBhcmVudCA9IG5vZGU7Ci0gICAgTm9kZSogcmlnaHQgPSBuZXcgTm9k
ZSgpOwotICAgIHJpZ2h0LT5wYXJlbnQgPSBub2RlOwotICAgIG5vZGUtPmxlZnQgPSBsZWZ0Owot
ICAgIG5vZGUtPnJpZ2h0ID0gcmlnaHQ7Ci0gICAgbV9ub2RlQ291bnQgKz0gMjsKLQotICAgIGlm
IChzcGxpdCA9PSBTcGxpdE9uWCkgewotICAgICAgICBsZWZ0LT5yZWN0ID0gSW50UmVjdChub2Rl
LT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCksCi0gICAgICAgICAgICBub2RlLT5yZWN0LndpZHRo
KCkgLyAyLCBub2RlLT5yZWN0LmhlaWdodCgpKTsKLSAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRS
ZWN0KGxlZnQtPnJlY3QubWF4WCgpLCBub2RlLT5yZWN0LnkoKSwKLSAgICAgICAgICAgIG5vZGUt
PnJlY3Qud2lkdGgoKSAvIDIsIG5vZGUtPnJlY3QuaGVpZ2h0KCkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGxlZnQtPnJlY3QgPSBJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0Lnko
KSwKLSAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAv
IDIpOwotICAgICAgICByaWdodC0+cmVjdCA9IEludFJlY3Qobm9kZS0+cmVjdC54KCksIGxlZnQt
PnJlY3QubWF4WSgpLAotICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0
LmhlaWdodCgpIC8gMik7Ci0gICAgfQotCi0gICAgbGVmdC0+bGFyZ2VzdEZyZWUgPSBsZWZ0LT5y
ZWN0LnNpemUoKTsKLSAgICByaWdodC0+bGFyZ2VzdEZyZWUgPSByaWdodC0+cmVjdC5zaXplKCk7
Ci0gICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSByaWdodC0+bGFyZ2VzdEZyZWU7Ci0gICAgcmV0dXJu
IGxlZnQ7Ci19Ci0KLXZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVl
KE5vZGUqIG5vZGUpCi17Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZS0+cGFyZW50KSkgewotICAg
ICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IEludFNpemUoCi0gICAgICAgICAgICBzdGQ6Om1heChu
b2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS53aWR0aCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUu
d2lkdGgoKSksCi0gICAgICAgICAgICBzdGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS5o
ZWlnaHQoKSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgpKQotICAgICAgICAgICAg
KTsKLSAgICB9Ci19Ci0KLXZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBMb2NhdGUgdGhlIG5vZGUgdGhhdCBjb250YWlucyB0
aGUgYWxsb2NhdGVkIHJlZ2lvbi4KLSAgICBOb2RlKiBub2RlID0gbV9yb290OwotICAgIEludFBv
aW50IHBvaW50ID0gcmVjdC5sb2NhdGlvbigpOwotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAg
IGlmIChub2RlLT5sZWZ0ICYmIG5vZGUtPmxlZnQtPnJlY3QuY29udGFpbnMocG9pbnQpKQotICAg
ICAgICAgICAgbm9kZSA9IG5vZGUtPmxlZnQ7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPnJpZ2h0
ICYmIG5vZGUtPnJpZ2h0LT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIG5vZGUg
PSBub2RlLT5yaWdodDsKLSAgICAgICAgZWxzZSBpZiAobm9kZS0+cmVjdC5jb250YWlucyhwb2lu
dCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJu
OyAvLyBQb2ludCBpcyBjb21wbGV0ZWx5IG91dHNpZGUgdGhlIHRyZWUuCi0gICAgfQotICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWFyayB0aGUgbm9kZSBhcyBmcmVl
IGFuZCB0aGVuIHdvcmsgdXB3YXJkcyB0aHJvdWdoIHRoZSB0cmVlCi0gICAgLy8gcmVjb21iaW5p
bmcgYW5kIGRlbGV0aW5nIG5vZGVzIHVudGlsIHdlIHJlYWNoIGEgc2libGluZwotICAgIC8vIHRo
YXQgaXMgc3RpbGwgYWxsb2NhdGVkLgotICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVj
dC5zaXplKCk7Ci0gICAgd2hpbGUgKG5vZGUtPnBhcmVudCkgewotICAgICAgICBpZiAobm9kZS0+
cGFyZW50LT5sZWZ0ID09IG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPnJp
Z2h0LT5sYXJnZXN0RnJlZSAhPSBub2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0LnNpemUoKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChu
b2RlLT5wYXJlbnQtPmxlZnQtPmxhcmdlc3RGcmVlICE9IG5vZGUtPnBhcmVudC0+bGVmdC0+cmVj
dC5zaXplKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbm9k
ZSA9IG5vZGUtPnBhcmVudDsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+bGVmdCk7Ci0gICAgICAg
IGZyZWVOb2RlKG5vZGUtPnJpZ2h0KTsKLSAgICAgICAgbV9ub2RlQ291bnQgLT0gMjsKLSAgICAg
ICAgbm9kZS0+bGVmdCA9IG51bGxwdHI7Ci0gICAgICAgIG5vZGUtPnJpZ2h0ID0gbnVsbHB0cjsK
LSAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0LnNpemUoKTsKLSAgICB9Ci0K
LSAgICAvLyBNYWtlIHRoZSByZXN0IG9mIG91ciBhbmNlc3RvcnMgaGF2ZSB0aGUgY29ycmVjdCAi
bGFyZ2VzdCBmcmVlIHNpemUiLgotICAgIHVwZGF0ZUxhcmdlc3RGcmVlKG5vZGUpOwotfQotCi1p
bnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6Om92ZXJoZWFkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9ub2RlQ291bnQgKiBzaXplb2YoTm9kZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9BcmVhQWxsb2NhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZGM4Zjc2
NWVjNGJjMGYxMzQzYjRlOWY2YTJmYjQ4ZDM5OTNjMDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEx
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAi
SW50UG9pbnQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWlubGluZSBpbnQgbmV4dFBvd2VyT2ZUd28oaW50IG51
bWJlcikKLXsKLSAgICAvLyBUaGlzIGlzIGEgZmFzdCB0cmljayB0byBnZXQgbmV4dFBvd2VyT2ZU
d28gZm9yIGFuIGludGVnZXIuCi0gICAgLS1udW1iZXI7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+
PiAxOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gMjsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+
IDQ7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiA4OwotICAgIG51bWJlciB8PSBudW1iZXIgPj4g
MTY7Ci0gICAgbnVtYmVyKys7Ci0gICAgcmV0dXJuIG51bWJlcjsKLX0KLQotaW5saW5lIEludFNp
emUgbmV4dFBvd2VyT2ZUd28oY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gSW50
U2l6ZShuZXh0UG93ZXJPZlR3byhzaXplLndpZHRoKCkpLCBuZXh0UG93ZXJPZlR3byhzaXplLmhl
aWdodCgpKSk7Ci19Ci0KLWNsYXNzIEFyZWFBbGxvY2F0b3IgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IEFyZWFBbGxvY2F0b3IoY29uc3QgSW50
U2l6ZSYpOwotICAgIHZpcnR1YWwgfkFyZWFBbGxvY2F0b3IoKTsKLQotICAgIEludFNpemUgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAgSW50U2l6ZSBtaW5pbXVtQWxsb2Nh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluQWxsb2M7IH0KLSAgICB2b2lkIHNldE1pbmltdW1B
bGxvY2F0aW9uKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9taW5BbGxvYyA9IHNpemU7IH0KLQot
ICAgIEludFNpemUgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0KLSAgICB2b2lk
IHNldE1hcmdpbihjb25zdCBJbnRTaXplICZtYXJnaW4pIHsgbV9tYXJnaW4gPSBtYXJnaW47IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBleHBhbmQoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgZXhw
YW5kQnkoY29uc3QgSW50U2l6ZSYpOwotCi0gICAgdmlydHVhbCBJbnRSZWN0IGFsbG9jYXRlKGNv
bnN0IEludFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2UoY29uc3QgSW50UmVj
dCYpOwotCi0gICAgdmlydHVhbCBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgot
ICAgIEludFNpemUgbV9zaXplOwotICAgIEludFNpemUgbV9taW5BbGxvYzsKLSAgICBJbnRTaXpl
IG1fbWFyZ2luOwotCi0gICAgSW50U2l6ZSByb3VuZEFsbG9jYXRpb24oY29uc3QgSW50U2l6ZSYp
IGNvbnN0OwotfTsKLQotY2xhc3MgR2VuZXJhbEFyZWFBbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMg
QXJlYUFsbG9jYXRvciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgR2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3QgSW50U2l6ZSYpOwotICAgIHZp
cnR1YWwgfkdlbmVyYWxBcmVhQWxsb2NhdG9yKCk7Ci0KLSAgICB2b2lkIGV4cGFuZChjb25zdCBJ
bnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBhbGxvY2F0ZShjb25zdCBJbnRTaXplJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCByZWxlYXNlKGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAg
ICBpbnQgb3ZlcmhlYWQoKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBlbnVtIFNw
bGl0IHsgU3BsaXRPblgsIFNwbGl0T25ZIH07Ci0KLSAgICBzdHJ1Y3QgTm9kZSB7Ci0gICAgICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgSW50UmVjdCBy
ZWN0OwotICAgICAgICBJbnRTaXplIGxhcmdlc3RGcmVlOwotICAgICAgICBOb2RlKiBwYXJlbnQg
eyBudWxscHRyIH07Ci0gICAgICAgIE5vZGUqIGxlZnQgeyBudWxscHRyIH07Ci0gICAgICAgIE5v
ZGUqIHJpZ2h0IHsgbnVsbHB0ciB9OwotICAgIH07Ci0KLSAgICBOb2RlKiBtX3Jvb3Q7Ci0gICAg
aW50IG1fbm9kZUNvdW50OwotCi0gICAgc3RhdGljIHZvaWQgZnJlZU5vZGUoTm9kZSopOwotICAg
IEludFBvaW50IGFsbG9jYXRlRnJvbU5vZGUoY29uc3QgSW50U2l6ZSYsIE5vZGUqKTsKLSAgICBO
b2RlKiBzcGxpdE5vZGUoTm9kZSosIFNwbGl0KTsKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVMYXJn
ZXN0RnJlZShOb2RlKik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDE4ZGQwZmUzMjE3NTJkYWRj
M2FmN2Q1YzEzMTJiM2I0NzcxMjMwNmEuLjQyNWYwMTczMDVhNDFhMTRhMjQ2Njc4MjhlNzY4ZjJh
Y2E5YzNhYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC05NzcsMjAgKzk3NywxOCBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQogICAgICAgICAgICAgYXV0byYg
dGlsZVJlY3QgPSB0aWxlLnJlY3QoKTsKICAgICAgICAgICAgIGF1dG8mIGRpcnR5UmVjdCA9IHRp
bGUuZGlydHlSZWN0KCk7CiAKKyAgICAgICAgICAgIGF1dG8gY29vcmRpbmF0ZWRCdWZmZXIgPSBO
aWNvc2lhOjpCdWZmZXI6OmNyZWF0ZShkaXJ0eVJlY3Quc2l6ZSgpLCBjb250ZW50c09wYXF1ZSgp
ID8gTmljb3NpYTo6QnVmZmVyOjpOb0ZsYWdzIDogTmljb3NpYTo6QnVmZmVyOjpTdXBwb3J0c0Fs
cGhhKTsKICAgICAgICAgICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87Ci0gICAgICAg
ICAgICBJbnRSZWN0IHRhcmdldFJlY3Q7Ci0gICAgICAgICAgICBhdXRvIGNvb3JkaW5hdGVkQnVm
ZmVyID0gbV9jb29yZGluYXRvci0+Z2V0Q29vcmRpbmF0ZWRCdWZmZXIoZGlydHlSZWN0LnNpemUo
KSwKLSAgICAgICAgICAgICAgICBjb250ZW50c09wYXF1ZSgpID8gTmljb3NpYTo6QnVmZmVyOjpO
b0ZsYWdzIDogTmljb3NpYTo6QnVmZmVyOjpTdXBwb3J0c0FscGhhLAotICAgICAgICAgICAgICAg
IHVwZGF0ZUluZm8uYXRsYXNJRCwgdGFyZ2V0UmVjdCk7CisgICAgICAgICAgICB1cGRhdGVJbmZv
LnVwZGF0ZVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgICAgICB1cGRhdGVJbmZvLnVwZGF0ZVJl
Y3QubW92ZSgtdGlsZVJlY3QueCgpLCAtdGlsZVJlY3QueSgpKTsKKyAgICAgICAgICAgIHVwZGF0
ZUluZm8uc3VyZmFjZU9mZnNldCA9IHswLCAwfTsKKyAgICAgICAgICAgIHVwZGF0ZUluZm8uYnVm
ZmVyID0gY29vcmRpbmF0ZWRCdWZmZXIuY29weVJlZigpOwogCiAgICAgICAgICAgICBpZiAoIW1f
Y29vcmRpbmF0b3ItPnBhaW50aW5nRW5naW5lKCkucGFpbnQoKnRoaXMsIFdURk1vdmUoY29vcmRp
bmF0ZWRCdWZmZXIpLAogICAgICAgICAgICAgICAgIGRpcnR5UmVjdCwgbV9tYWluQmFja2luZ1N0
b3JlLT5tYXBUb0NvbnRlbnRzKGRpcnR5UmVjdCksCi0gICAgICAgICAgICAgICAgdGFyZ2V0UmVj
dCwgbV9tYWluQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkpKQorICAgICAgICAgICAgICAg
IEludFJlY3QgeyB7MCwgMH0sIGRpcnR5UmVjdC5zaXplKCkgfSwgbV9tYWluQmFja2luZ1N0b3Jl
LT5jb250ZW50c1NjYWxlKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQgPSB0YXJnZXRSZWN0LmxvY2F0aW9uKCk7Ci0g
ICAgICAgICAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgICAgICAg
ICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3QubW92ZSgtdGlsZVJlY3QueCgpLCAtdGlsZVJlY3QueSgp
KTsKICAgICAgICAgICAgIHVwZGF0ZVRpbGUodGlsZS50aWxlSUQoKSwgdXBkYXRlSW5mbywgdGls
ZVJlY3QpOwogCiAgICAgICAgICAgICB0aWxlLm1hcmtDbGVhbigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IDRmYzY4MWVi
NTliYjYwNzc5OWNiNzEyN2JkNTM2MGU3OGYyMWE0YjYuLmU2Y2E4NjUyNDBkYmFlNjNiNDBiMGVl
ZDY0ZTJmNjY3NjM1NGJhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTUxLDcgKzUxLDYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBSZWY8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVl
ZGVkKEltYWdlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBSZWY8Tmljb3NpYTo6QnVmZmVyPiBn
ZXRDb29yZGluYXRlZEJ1ZmZlcihjb25zdCBJbnRTaXplJiwgTmljb3NpYTo6QnVmZmVyOjpGbGFn
cywgdWludDMyX3QmLCBJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgTmljb3NpYTo6UGFpbnRp
bmdFbmdpbmUmIHBhaW50aW5nRW5naW5lKCkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGUmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlLmgKaW5kZXggNzFhNDQzMDRlMDA2MTg2ZWI0OTk4MTdiZmQyNTU0YjFlNWRkOGJk
MC4uYzNkYjEwNjFlZjUyYWRlNzY3NDQ4OTJiOTAyN2VkYWNhZmRkNjM5OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaApAQCAtMTg5
LDggKzE4OSw2IEBAIHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgewogICAgIFZlY3Rv
cjxDb29yZGluYXRlZEltYWdlQmFja2luZ0lEPiBpbWFnZXNUb1JlbW92ZTsKICAgICBWZWN0b3I8
c3RkOjpwYWlyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxOaWNvc2lhOjpCdWZm
ZXI+Pj4gaW1hZ2VzVG9VcGRhdGU7CiAgICAgVmVjdG9yPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQ+IGltYWdlc1RvQ2xlYXI7Ci0KLSAgICBWZWN0b3I8c3RkOjpwYWlyPHVpbnQzMl90IC8qIGF0
bGFzSUQgKi8sIFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+Pj4gdXBkYXRlQXRsYXNlc1RvQ3JlYXRl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZv
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
U3VyZmFjZVVwZGF0ZUluZm8uaAppbmRleCAwZTc0OWJlOTNiYWFjYTI4OGFhNmEwZmMzNmQwNzI2
ZDEyNWNhOGY3Li41ZmMzNjA5MDk3OTU2ZWZhYzU2ZjhjODdkNDcwNWFkNDM1MzczN2JiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaApAQCAtMjMsNiArMjMs
NyBAQAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJOaWNvc2lhQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzQsMTEgKzM1LDExIEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcmVjdCB0byBiZSB1cGRhdGVk
LgogICAgIEludFJlY3QgdXBkYXRlUmVjdDsKIAotICAgIC8vIFRoZSBpZCBvZiB0aGUgdXBkYXRl
IGF0bGFzIGluY2x1ZGluZyB0aGUgc2hhcmVhYmxlIGJpdG1hcCBjb250YWluaW5nIHRoZSB1cGRh
dGVzLgotICAgIHVpbnQzMl90IGF0bGFzSUQgeyAwIH07Ci0KICAgICAvLyBUaGUgb2Zmc2V0IGlu
IHRoZSBiaXRtYXAgd2hlcmUgdGhlIHJlbmRlcmVkIGNvbnRlbnRzIGFyZS4KICAgICBJbnRQb2lu
dCBzdXJmYWNlT2Zmc2V0OworCisgICAgLy8gVGhlIGJ1ZmZlciB3aGVyZSB0aGUgdGlsZSBoYXMg
YmVlbiByZW5kZXJlZAorICAgIFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+IGJ1ZmZlcjsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWM1NjgyYmVkMjViYjBhYzMwMDQ1
ZGExM2UzNzY3MjAyNjkzZjJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9VcGRhdGVBdGxhcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgot
IENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLSBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLQotIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVwZGF0ZUF0
bGFzLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJDb29y
ZGluYXRlZEdyYXBoaWNzU3RhdGUuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKENsaWVudCYgY2xpZW50LCBj
b25zdCBJbnRTaXplJiBzaXplLCBOaWNvc2lhOjpCdWZmZXI6OkZsYWdzIGZsYWdzKQotICAgIDog
bV9jbGllbnQoY2xpZW50KQotICAgICwgbV9idWZmZXIoTmljb3NpYTo6QnVmZmVyOjpjcmVhdGUo
c2l6ZSwgZmxhZ3MpKQotewotICAgIHN0YXRpYyBJRCBzX25leHRJRCB7IDAgfTsKLSAgICBtX2lk
ID0gKytzX25leHRJRDsKLQotICAgIG1fY2xpZW50LmNyZWF0ZVVwZGF0ZUF0bGFzKG1faWQsIG1f
YnVmZmVyLmNvcHlSZWYoKSk7Ci19Ci0KLVVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMoKQotewot
ICAgIG1fY2xpZW50LnJlbW92ZVVwZGF0ZUF0bGFzKG1faWQpOwotfQotCi12b2lkIFVwZGF0ZUF0
bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9hcmVhQWxsb2NhdG9yKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9hcmVhQWxsb2NhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxH
ZW5lcmFsQXJlYUFsbG9jYXRvcj4oc2l6ZSgpKTsKLSAgICBtX2FyZWFBbGxvY2F0b3ItPnNldE1p
bmltdW1BbGxvY2F0aW9uKEludFNpemUoMzIsIDMyKSk7Ci19Ci0KLXZvaWQgVXBkYXRlQXRsYXM6
OmRpZFN3YXBCdWZmZXJzKCkKLXsKLSAgICBtX2FyZWFBbGxvY2F0b3IgPSBudWxscHRyOwotfQot
Ci1SZWZQdHI8Tmljb3NpYTo6QnVmZmVyPiBVcGRhdGVBdGxhczo6Z2V0Q29vcmRpbmF0ZWRCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgdWludDMyX3QmIGF0bGFzSUQsIEludFJlY3QmIGFsbG9j
YXRlZFJlY3QpCi17Ci0gICAgbV9pbmFjdGl2aXR5SW5TZWNvbmRzID0gMDsKLSAgICBidWlsZExh
eW91dElmTmVlZGVkKCk7Ci0gICAgYWxsb2NhdGVkUmVjdCA9IG1fYXJlYUFsbG9jYXRvci0+YWxs
b2NhdGUoc2l6ZSk7Ci0KLSAgICBpZiAoYWxsb2NhdGVkUmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXRsYXNJRCA9IG1faWQ7Ci0gICAgcmV0dXJuIG1fYnVm
ZmVyLmNvcHlSZWYoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVkNTA1NzliZWYzM2MyOTU1YzYyNjQx
ODc2NzlhMmNhZGE2NDQwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvVXBkYXRlQXRsYXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gQ29w
eXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgotCi0gVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFyZWFBbGxvY2F0b3IuaCIK
LSNpbmNsdWRlICJOaWNvc2lhQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwotCi1jbGFzcyBVcGRhdGVBdGxhcyB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRl
QXRsYXMpOwotcHVibGljOgotICAgIHVzaW5nIElEID0gdWludDMyX3Q7Ci0KLSAgICBjbGFzcyBD
bGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0
bGFzKElELCBSZWY8Tmljb3NpYTo6QnVmZmVyPiYmKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVVcGRhdGVBdGxhcyhJRCkgPSAwOwotICAgIH07Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBVcGRhdGVBdGxhcyhDbGllbnQmLCBjb25zdCBJbnRTaXplJiwgTmljb3NpYTo6QnVmZmVyOjpG
bGFncyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgflVwZGF0ZUF0bGFzKCk7Ci0KLSAgICBjb25zdCBJ
bnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXItPnNpemUoKTsgfQotCi0gICAg
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5pY29zaWE6OkJ1ZmZlcj4gZ2V0Q29vcmRpbmF0ZWRCdWZm
ZXIoY29uc3QgSW50U2l6ZSYsIHVpbnQzMl90JiwgSW50UmVjdCYpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZGlkU3dhcEJ1ZmZlcnMoKTsKLSAgICBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25z
dCB7IHJldHVybiBtX2J1ZmZlci0+c3VwcG9ydHNBbHBoYSgpOyB9Ci0KLSAgICB2b2lkIGFkZFRp
bWVJbmFjdGl2ZShkb3VibGUgc2Vjb25kcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNJblVz
ZSgpKTsKLSAgICAgICAgbV9pbmFjdGl2aXR5SW5TZWNvbmRzICs9IHNlY29uZHM7Ci0gICAgfQot
ICAgIGJvb2wgaXNJbmFjdGl2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBjb25zdCBkb3VibGUg
aW5hY3RpdmVTZWNvbmRzVG9sZXJhbmNlID0gMzsKLSAgICAgICAgcmV0dXJuIG1faW5hY3Rpdml0
eUluU2Vjb25kcyA+IGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZTsKLSAgICB9Ci0gICAgYm9vbCBp
c0luVXNlKCkgY29uc3QgeyByZXR1cm4gISFtX2FyZWFBbGxvY2F0b3I7IH0KLQotcHJpdmF0ZToK
LSAgICB2b2lkIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKLQotICAgIElEIG1faWQgeyAwIH07Ci0g
ICAgQ2xpZW50JiBtX2NsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJhbEFyZWFBbGxv
Y2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKLSAgICBSZWY8Tmljb3NpYTo6QnVmZmVyPiBtX2J1ZmZl
cjsKLSAgICBkb3VibGUgbV9pbmFjdGl2aXR5SW5TZWNvbmRzIHsgMCB9OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCmluZGV4IDk4YzI1ZDM2YzQ2
YTc3YTUyMjdjYjQxZWMzNDFmNTFiZWFhOWVlNzYuLjk1NDNmYzFhZjcxODA2MDFjMmQxZTU5M2M5
Mzg2NjMyMjllMTMwMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5j
cHAKQEAgLTM4MCwzOCArMzgwLDExIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1
cGRhdGVUaWxlc0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIGNvCiAgICAgZm9y
IChhdXRvJiB0aWxlIDogc3RhdGUudGlsZXNUb1VwZGF0ZSkgewogICAgICAgICBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYgc3VyZmFjZVVwZGF0ZUluZm8gPSB0aWxlLnVwZGF0ZUluZm87CiAKLSAg
ICAgICAgYXV0byBzdXJmYWNlSXQgPSBtX3N1cmZhY2VzLmZpbmQoc3VyZmFjZVVwZGF0ZUluZm8u
YXRsYXNJRCk7Ci0gICAgICAgIEFTU0VSVChzdXJmYWNlSXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7
Ci0KLSAgICAgICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGUudGlsZUlELCBzdXJmYWNl
VXBkYXRlSW5mby51cGRhdGVSZWN0LCB0aWxlLnRpbGVSZWN0LCBzdXJmYWNlSXQtPnZhbHVlLmNv
cHlSZWYoKSwgc3VyZmFjZVVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCk7CisgICAgICAgIGJhY2tp
bmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlLnRpbGVJRCwgc3VyZmFjZVVwZGF0ZUluZm8udXBkYXRl
UmVjdCwgdGlsZS50aWxlUmVjdCwgc3VyZmFjZVVwZGF0ZUluZm8uYnVmZmVyLmNvcHlSZWYoKSwg
c3VyZmFjZVVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCk7CiAgICAgICAgIGNvbW1pdFNjb3BlLmJh
Y2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiAgICAgfQog
fQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY1VwZGF0ZUF0bGFzZXMoY29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKLXsKLSAgICBmb3IgKGF1dG8mIGF0
bGFzIDogc3RhdGUudXBkYXRlQXRsYXNlc1RvQ3JlYXRlKQotICAgICAgICBjcmVhdGVVcGRhdGVB
dGxhcyhhdGxhcy5maXJzdCwgYXRsYXMuc2Vjb25kLmNvcHlSZWYoKSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lE
LCBSZWZQdHI8Tmljb3NpYTo6QnVmZmVyPiYmIGJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoIW1fc3Vy
ZmFjZXMuY29udGFpbnMoYXRsYXNJRCkpOwotICAgIG1fc3VyZmFjZXMuYWRkKGF0bGFzSUQsIFdU
Rk1vdmUoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1v
dmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQotewotICAgIEFTU0VSVChtX3N1cmZhY2Vz
LmNvbnRhaW5zKGF0bGFzSUQpKTsKLSAgICBtX3N1cmZhY2VzLnJlbW92ZShhdGxhc0lEKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbGVhc2VVcGRhdGVBdGxhc2VzKGNv
bnN0IFZlY3Rvcjx1aW50MzJfdD4mIGF0bGFzZXNUb1JlbW92ZSkKLXsKLSAgICBmb3IgKGF1dG8m
IGF0bGFzIDogYXRsYXNlc1RvUmVtb3ZlKQotICAgICAgICByZW1vdmVVcGRhdGVBdGxhcyhhdGxh
cyk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jSW1hZ2VCYWNraW5n
cyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlLCBDb21taXRTY29wZSYgY29t
bWl0U2NvcGUpCiB7CiAgICAgZm9yIChhdXRvJiBpbWFnZSA6IHN0YXRlLmltYWdlc1RvUmVtb3Zl
KQpAQCAtNDk1LDcgKzQ2OCw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21t
aXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYKICAgICAgICAgc2V0
Um9vdExheWVySUQoc3RhdGUucm9vdENvbXBvc2l0aW5nTGF5ZXIpOwogCiAgICAgc3luY0ltYWdl
QmFja2luZ3Moc3RhdGUsIGNvbW1pdFNjb3BlKTsKLSAgICBzeW5jVXBkYXRlQXRsYXNlcyhzdGF0
ZSk7CiAKICAgICBmb3IgKGF1dG8mIGxheWVyIDogc3RhdGUubGF5ZXJzVG9VcGRhdGUpCiAgICAg
ICAgIHNldExheWVyU3RhdGUobGF5ZXIuZmlyc3QsIGxheWVyLnNlY29uZCwgY29tbWl0U2NvcGUp
OwpAQCAtNTMxLDcgKzUwMyw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwdXJn
ZUdMUmVzb3VyY2VzKCkKICAgICAgICAgcHJveHktPmludmFsaWRhdGUoKTsKICAgICBtX3BsYXRm
b3JtTGF5ZXJQcm94aWVzLmNsZWFyKCk7CiAjZW5kaWYKLSAgICBtX3N1cmZhY2VzLmNsZWFyKCk7
CiAKICAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7CiAgICAgbV9yb290TGF5ZXJJRCA9IEludmFs
aWRDb29yZGluYXRlZExheWVySUQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUu
aAppbmRleCBhZDRjODE1NjczMjBhYTM0YzVmODQyZjNlYzNkNjZiZDAyMDk5YjcwLi4yNjU5Zjc4
MjIxZmEyZTMzYjNhNjY0N2IyODIyMjk3YzFjYmVkNzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lLmgKQEAgLTg3LDggKzg3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
Vmlld0JhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpIHsgbV92aWV3
QmFja2dyb3VuZENvbG9yID0gY29sb3I7IH0KICAgICBXZWJDb3JlOjpDb2xvciB2aWV3QmFja2dy
b3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV92aWV3QmFja2dyb3VuZENvbG9yOyB9CiAKLSAg
ICB2b2lkIHJlbGVhc2VVcGRhdGVBdGxhc2VzKGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mKTsKLQog
cHJpdmF0ZToKICAgICBzdHJ1Y3QgQ29tbWl0U2NvcGUgewogICAgICAgICBDb21taXRTY29wZSgp
ID0gZGVmYXVsdDsKQEAgLTExMiwxMCArMTEwLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN5bmNQ
bGF0Zm9ybUxheWVySWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgY29uc3Qg
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKICAgICB2b2lkIHNldExh
eWVyUmVwYWludENvdW50SWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgY29u
c3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKIAotICAgIHZvaWQg
c3luY1VwZGF0ZUF0bGFzZXMoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRl
Jik7Ci0gICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBSZWZQdHI8
Tmljb3NpYTo6QnVmZmVyPiYmKTsKLSAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90
IGF0bGFzSUQpOwotCiAgICAgdm9pZCBzeW5jSW1hZ2VCYWNraW5ncyhjb25zdCBXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUmLCBDb21taXRTY29wZSYpOwogICAgIHZvaWQgY3JlYXRl
SW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZv
aWQgdXBkYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQs
IFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+JiYsIENvbW1pdFNjb3BlJik7CkBAIC0xNTksOCArMTUz
LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcios
IFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Pj4gbV9wbGF0
Zm9ybUxheWVyUHJveGllczsKICNlbmRpZgogCi0gICAgSGFzaE1hcDx1aW50MzJfdCAvKiBhdGxh
c0lEICovLCBSZWZQdHI8Tmljb3NpYTo6QnVmZmVyPj4gbV9zdXJmYWNlczsKLQogICAgIC8vIEJl
bG93IHR3byBtZW1iZXJzIGFyZSBhY2Nlc3NlZCBieSBvbmx5IHRoZSBtYWluIHRocmVhZC4gVGhl
IHBhaW50aW5nIHRocmVhZCBtdXN0IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRvIGFjY2VzcyBib3Ro
IG1lbWJlcnMuCiAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50KiBtX2NsaWVudDsK
ICAgICBib29sIG1faXNBY3RpdmUgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRD
b21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
dGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKaW5kZXggOWQ3NjdhODhh
NjJjZTI5OTgyNDA4Mjk3ZDFmZjhmMjViNzRkZTNjZS4uNzg4MjRkNDgzMTg0MDY1ODFkOGMyZmI5
YTE1MmE1YmFkMzlmMDUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29t
cG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwCkBAIC0xOTUsNyArMTk1LDYgQEAgdm9pZCBU
aHJlYWRlZENvbXBvc2l0b3I6OnJlbmRlckxheWVyVHJlZSgpCiAgICAgYm9vbCBkcmF3c0JhY2tn
cm91bmQ7CiAgICAgYm9vbCBuZWVkc1Jlc2l6ZTsKICAgICBWZWN0b3I8V2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlPiBzdGF0ZXM7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBhdGxhc2Vz
VG9SZW1vdmU7CiAKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYXR0cmlidXRl
cy5sb2NrKTsKQEAgLTIwNiw3ICsyMDUsNiBAQCB2b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6cmVu
ZGVyTGF5ZXJUcmVlKCkKICAgICAgICAgbmVlZHNSZXNpemUgPSBtX2F0dHJpYnV0ZXMubmVlZHNS
ZXNpemU7CiAKICAgICAgICAgc3RhdGVzID0gV1RGTW92ZShtX2F0dHJpYnV0ZXMuc3RhdGVzKTsK
LSAgICAgICAgYXRsYXNlc1RvUmVtb3ZlID0gV1RGTW92ZShtX2F0dHJpYnV0ZXMuYXRsYXNlc1Rv
UmVtb3ZlKTsKIAogICAgICAgICBpZiAoIXN0YXRlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IC8vIENsaWVudCBoYXMgdG8gYmUgbm90aWZpZWQgdXBvbiBmaW5pc2hpbmcgdGhpcyBzY2VuZSB1
cGRhdGUuCkBAIC0yNDEsNyArMjM5LDYgQEAgdm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OnJlbmRl
ckxheWVyVHJlZSgpCiAgICAgfQogCiAgICAgbV9zY2VuZS0+YXBwbHlTdGF0ZUNoYW5nZXMoc3Rh
dGVzKTsKLSAgICBtX3NjZW5lLT5yZWxlYXNlVXBkYXRlQXRsYXNlcyhhdGxhc2VzVG9SZW1vdmUp
OwogICAgIG1fc2NlbmUtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHZpZXdwb3J0VHJhbnNmb3Jt
LCAxLCBGbG9hdFJlY3QgeyBGbG9hdFBvaW50IHsgfSwgdmlld3BvcnRTaXplIH0sCiAgICAgICAg
IENvbG9yOjp0cmFuc3BhcmVudCwgIWRyYXdzQmFja2dyb3VuZCwgc2Nyb2xsUG9zaXRpb24sIG1f
cGFpbnRGbGFncyk7CiAKQEAgLTI5MywxMyArMjkwLDYgQEAgdm9pZCBUaHJlYWRlZENvbXBvc2l0
b3I6OnVwZGF0ZVNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0
ZSkKICAgICBtX2NvbXBvc2l0aW5nUnVuTG9vcC0+c2NoZWR1bGVVcGRhdGUoKTsKIH0KIAotdm9p
ZCBUaHJlYWRlZENvbXBvc2l0b3I6OnJlbGVhc2VVcGRhdGVBdGxhc2VzKGNvbnN0IFZlY3Rvcjx1
aW50MzJfdD4mIGF0bGFzZXNUb1JlbW92ZSkKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2F0
dHJpYnV0ZXMubG9jayk7Ci0gICAgbV9hdHRyaWJ1dGVzLmF0bGFzZXNUb1JlbW92ZS5hcHBlbmRW
ZWN0b3IoYXRsYXNlc1RvUmVtb3ZlKTsKLSAgICBtX2NvbXBvc2l0aW5nUnVuTG9vcC0+c2NoZWR1
bGVVcGRhdGUoKTsKLX0KLQogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZ
X01PTklUT1IpCiBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBUaHJlYWRl
ZENvbXBvc2l0b3I6OmRpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhy
ZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3Np
dG9yLmgKaW5kZXggY2YzMDQyZTBkMDY3Y2E1YzAyZGQwM2M2NzZmNjc4M2NjMjdjMjUzZi4uZmUz
N2IyMTgwODcxZDliNTkzZmI4YzIxNDllOWFjODgxNzhhZTgzZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhy
ZWFkZWRDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmgKQEAgLTc2LDcg
Kzc2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wpOwogCiAg
ICAgdm9pZCB1cGRhdGVTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZSYpOwotICAgIHZvaWQgcmVsZWFzZVVwZGF0ZUF0bGFzZXMoY29uc3QgVmVjdG9yPHVp
bnQzMl90PiYpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAKQEAgLTEyMSw3ICsxMjAsNiBA
QCBwcml2YXRlOgogICAgICAgICBib29sIG5lZWRzUmVzaXplIHsgZmFsc2UgfTsKIAogICAgICAg
ICBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlPiBzdGF0ZXM7Ci0gICAg
ICAgIFZlY3Rvcjx1aW50MzJfdD4gYXRsYXNlc1RvUmVtb3ZlOwogCiAgICAgICAgIGJvb2wgY2xp
ZW50UmVuZGVyc05leHRGcmFtZSB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgY29vcmRpbmF0ZVVw
ZGF0ZUNvbXBsZXRpb25XaXRoQ2xpZW50IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAK
aW5kZXggNmJmZWJmYjdiY2RmYjE5YzM3NTI3ZGM5Y2I0ODllMmVkY2I5YzQ5NS4uNDQ1MThkNDRh
MTYyMTVlODI3ZGE3ODViNmQ1OTU3YzAwNGM0YTU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAK
QEAgLTM4MywxNiArMzgzLDYgQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCkKICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
dm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpyZXNldFVwZGF0ZUF0bGFzRm9yVGVzdGluZygp
Ci17Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3QgfHwgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xheWVyVHJlZUhvc3Qt
PmNsZWFyVXBkYXRlQXRsYXNlcygpOwotfQotI2VuZGlmCi0KIHZvaWQgQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlTm93KCkKIHsKICAgICBBU1NF
UlQoIW1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmgKaW5kZXggM2I2
NDk0NzJkNGFjNzBiNzI1ZDg4MTcxM2I0MmJiYzc1MzAzZmZiYy4uNWUwYWY1NmExZTI5NGM2MmVl
YTA4MWNlMzcxN2JkZWJlNWE4MTM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaApAQCAtNzUsNyArNzUs
NyBAQCBwcm90ZWN0ZWQ6CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgdm9p
ZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVz
JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzZXRVcGRhdGVBdGxhc0ZvclRlc3RpbmcoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHJlc2V0VXBkYXRlQXRsYXNGb3JUZXN0aW5nKCkgb3ZlcnJpZGUgeyB9
OwogI2VuZGlmCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJF
X01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29v
cmRpbmF0b3IuY3BwCmluZGV4IDc4ODY2MmU5NjlmMDBjMGQxMWYyODc1ZDRiOGRmMmUzMjBmZGRl
YjguLjE5MTgyNDQ5NDExMzMyMTFmMWZlZTMzOTY1NjY4MWRhNGIwNmJiMjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAt
NTEsMTEgKzUxLDcgQEAgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q29tcG9zaXRpbmdDb29yZGlu
YXRvcihQYWdlKiBwYWdlLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG8KICAgICA6IG1fcGFnZShwYWdl
KQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9wYWludGluZ0VuZ2luZShOaWNvc2lh
OjpQYWludGluZ0VuZ2luZTo6Y3JlYXRlKCkpCi0gICAgLCBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFz
ZXNUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpy
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZCkKIHsKLSNpZiBVU0UoR0xJQl9FVkVOVF9M
T09QKQotICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnNldFByaW9yaXR5KFJ1bkxv
b3BTb3VyY2VQcmlvcml0eTo6UmVsZWFzZVVudXNlZFJlc291cmNlc1RpbWVyKTsKLSNlbmRpZgog
fQogCiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp+Q29tcG9zaXRpbmdDb29yZGluYXRvcigpCkBA
IC0xMzgsMTAgKzEzNCw2IEBAIGJvb2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzKCkKIAogICAgICAgICBtX2NsaWVudC5jb21taXRTY2VuZVN0YXRlKG1f
c3RhdGUpOwogCi0gICAgICAgIGlmICghbV9hdGxhc2VzVG9SZW1vdmUuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgbV9jbGllbnQucmVsZWFzZVVwZGF0ZUF0bGFzZXMobV9hdGxhc2VzVG9SZW1vdmUp
OwotICAgICAgICBtX2F0bGFzZXNUb1JlbW92ZS5jbGVhcigpOwotCiAgICAgICAgIGNsZWFyUGVu
ZGluZ1N0YXRlQ2hhbmdlcygpOwogICAgICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOwog
ICAgIH0KQEAgLTE3OSw4ICsxNzEsNiBAQCB2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNs
ZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpCiAgICAgbV9zdGF0ZS5pbWFnZXNUb1JlbW92ZS5jbGVh
cigpOwogICAgIG1fc3RhdGUuaW1hZ2VzVG9VcGRhdGUuY2xlYXIoKTsKICAgICBtX3N0YXRlLmlt
YWdlc1RvQ2xlYXIuY2xlYXIoKTsKLQotICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvQ3JlYXRl
LmNsZWFyKCk7CiB9CiAKIHZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6aW5pdGlhbGl6ZVJv
b3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQpAQCAtMjg1LDE4ICsyNzUsNiBAQCBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NMYXllcj4gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3Jh
cGhpY3NMYXllcihHcmFwaAogICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NMYXll
cj4obGF5ZXIpOwogfQogCi12b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0
ZUF0bGFzKFVwZGF0ZUF0bGFzOjpJRCBpZCwgUmVmPE5pY29zaWE6OkJ1ZmZlcj4mJiBidWZmZXIp
Ci17Ci0gICAgbV9zdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKGlkLCBXVEZNb3ZlKGJ1ZmZlcikpKTsKLX0KLQotdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpyZW1vdmVVcGRhdGVBdGxhcyhVcGRhdGVBdGxhczo6SUQgaWQpCi17Ci0gICAgaWYgKG1f
aXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0gICAgbV9hdGxhc2VzVG9SZW1vdmUuYXBwZW5k
KGlkKTsKLX0KLQogRmxvYXRSZWN0IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnZpc2libGVDb250
ZW50c1JlY3QoKSBjb25zdAogewogICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7CkBA
IC0zNTYsOCArMzM0LDYgQEAgdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hMYXll
cihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogCiB2b2lkIENvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSgpCiB7Ci0gICAgZm9yIChhdXRvJiBhdGxhcyA6IG1f
dXBkYXRlQXRsYXNlcykKLSAgICAgICAgYXRsYXMtPmRpZFN3YXBCdWZmZXJzKCk7CiB9CiAKIHZv
aWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKQEAgLTM2OCwy
OCArMzQ0LDYgQEAgdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9y
ZXMoKQogICAgICAgICByZWdpc3RlcmVkTGF5ZXItPnB1cmdlQmFja2luZ1N0b3JlcygpOwogCiAg
ICAgbV9pbWFnZUJhY2tpbmdzLmNsZWFyKCk7Ci0gICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7
Ci19Ci0KLVJlZjxOaWNvc2lhOjpCdWZmZXI+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmdldENv
b3JkaW5hdGVkQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUsIE5pY29zaWE6OkJ1ZmZlcjo6Rmxh
Z3MgZmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRSZWN0JiBhbGxvY2F0ZWRSZWN0KQotewot
ICAgIGZvciAoYXV0byYgYXRsYXMgOiBtX3VwZGF0ZUF0bGFzZXMpIHsKLSAgICAgICAgaWYgKGF0
bGFzLT5zdXBwb3J0c0FscGhhKCkgPT0gKGZsYWdzICYgTmljb3NpYTo6QnVmZmVyOjpTdXBwb3J0
c0FscGhhKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gYnVmZmVyID0gYXRsYXMtPmdldENvb3Jk
aW5hdGVkQnVmZmVyKHNpemUsIGF0bGFzSUQsIGFsbG9jYXRlZFJlY3QpKQotICAgICAgICAgICAg
ICAgIHJldHVybiAqYnVmZmVyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0
IEludFNpemUgc19hdGxhc1NpemUgeyAxMDI0LCAxMDI0IH07IC8vIFRoaXMgc2hvdWxkIGJlIGEg
c3F1YXJlLgotICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxVcGRh
dGVBdGxhcz4oKnRoaXMsIHNfYXRsYXNTaXplLCBmbGFncykpOwotICAgIHNjaGVkdWxlUmVsZWFz
ZUluYWN0aXZlQXRsYXNlcygpOwotCi0gICAgLy8gU3BlY2lmaWVkIHNpemUgc2hvdWxkIGFsd2F5
cyBmaXQgaW50byBhIG5ld2x5LWNyZWF0ZWQgVXBkYXRlQXRsYXMgYW5kIGEgbm9uLW51bGwKLSAg
ICAvLyBDb29yZGluYXRlZEJ1ZmZlciB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgZnJvbSBVcGRh
dGVBdGxhczo6Z2V0Q29vcmRpbmF0ZWRCdWZmZXIoKS4KLSAgICAvLyBXZSB1c2UgYSBSRUxFQVNF
X0FTU0VSVCgpIHRvIHN0b3AgYW55IG1hbGZ1bmN0aW9uaW5nIGF0IHRoZSBlYXJsaWVzdCBwb2lu
dC4KLSAgICBhdXRvIGJ1ZmZlciA9IG1fdXBkYXRlQXRsYXNlcy5sYXN0KCktPmdldENvb3JkaW5h
dGVkQnVmZmVyKHNpemUsIGF0bGFzSUQsIGFsbG9jYXRlZFJlY3QpOwotICAgIFJFTEVBU0VfQVNT
RVJUKGJ1ZmZlcik7Ci0gICAgcmV0dXJuICpidWZmZXI7CiB9CiAKIE5pY29zaWE6OlBhaW50aW5n
RW5naW5lJiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpwYWludGluZ0VuZ2luZSgpCkBAIC0zOTcs
NjQgKzM1MSw2IEBAIE5pY29zaWE6OlBhaW50aW5nRW5naW5lJiBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpwYWludGluZ0VuZ2luZSgpCiAgICAgcmV0dXJuICptX3BhaW50aW5nRW5naW5lOwogfQog
Ci1jb25zdCBTZWNvbmRzIHJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsIHsgNTAw
X21zIH07Ci0KLXZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2NoZWR1bGVSZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzKCkKLXsKLSAgICBpZiAoIW1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0YXJ0
UmVwZWF0aW5nKHJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFsKTsKLX0KLQotdm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJl
ZCgpCi17Ci0gICAgcmVsZWFzZUF0bGFzZXMoTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5nbGV0
b24oKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKSA/IFJlbGVhc2VVbnVzZWQgOiBSZWxlYXNlSW5h
Y3RpdmUpOwotfQotCi12b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbGVhc2VBdGxhc2Vz
KFJlbGVhc2VBdGxhc1BvbGljeSBwb2xpY3kpCi17Ci0gICAgLy8gV2UgYWx3YXlzIHdhbnQgdG8g
a2VlcCBvbmUgYXRsYXMgZm9yIHJvb3QgY29udGVudHMgbGF5ZXIuCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFVwZGF0ZUF0bGFzPiBhdGxhc1RvS2VlcEFueXdheTsKLSAgICBib29sIGZvdW5kQWN0aXZl
QXRsYXNGb3JSb290Q29udGVudHNMYXllciA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSBtX3Vw
ZGF0ZUF0bGFzZXMuc2l6ZSgpIC0gMTsgIGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIFVwZGF0ZUF0
bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAgICAgICAgYm9vbCBpblVz
ZSA9IGF0bGFzLT5pc0luVXNlKCk7Ci0gICAgICAgIGlmICghaW5Vc2UpCi0gICAgICAgICAgICBh
dGxhcy0+YWRkVGltZUluYWN0aXZlKHJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFs
LnZhbHVlKCkpOwotICAgICAgICBib29sIHVzYWJsZUZvclJvb3RDb250ZW50c0xheWVyID0gIWF0
bGFzLT5zdXBwb3J0c0FscGhhKCk7Ci0gICAgICAgIGlmIChhdGxhcy0+aXNJbmFjdGl2ZSgpIHx8
ICghaW5Vc2UgJiYgcG9saWN5ID09IFJlbGVhc2VVbnVzZWQpKSB7Ci0gICAgICAgICAgICBpZiAo
IWZvdW5kQWN0aXZlQXRsYXNGb3JSb290Q29udGVudHNMYXllciAmJiAhYXRsYXNUb0tlZXBBbnl3
YXkgJiYgdXNhYmxlRm9yUm9vdENvbnRlbnRzTGF5ZXIpCi0gICAgICAgICAgICAgICAgYXRsYXNU
b0tlZXBBbnl3YXkgPSBXVEZNb3ZlKG1fdXBkYXRlQXRsYXNlc1tpXSk7Ci0gICAgICAgICAgICBt
X3VwZGF0ZUF0bGFzZXMucmVtb3ZlKGkpOwotICAgICAgICB9IGVsc2UgaWYgKHVzYWJsZUZvclJv
b3RDb250ZW50c0xheWVyKQotICAgICAgICAgICAgZm91bmRBY3RpdmVBdGxhc0ZvclJvb3RDb250
ZW50c0xheWVyID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JS
b290Q29udGVudHNMYXllciAmJiBhdGxhc1RvS2VlcEFueXdheSkKLSAgICAgICAgbV91cGRhdGVB
dGxhc2VzLmFwcGVuZChhdGxhc1RvS2VlcEFueXdheS5yZWxlYXNlKCkpOwotCi0gICAgbV91cGRh
dGVBdGxhc2VzLnNocmlua1RvRml0KCk7Ci0KLSAgICBpZiAobV91cGRhdGVBdGxhc2VzLnNpemUo
KSA8PSAxKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdG9wKCk7Ci0K
LSAgICBpZiAoIW1fYXRsYXNlc1RvUmVtb3ZlLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jbGllbnQu
cmVsZWFzZVVwZGF0ZUF0bGFzZXMobV9hdGxhc2VzVG9SZW1vdmUpOwotICAgIG1fYXRsYXNlc1Rv
UmVtb3ZlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJV
cGRhdGVBdGxhc2VzKCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0b3AoKTsKLSAgICBtX3VwZGF0
ZUF0bGFzZXMuY2xlYXIoKTsKLQotICAgIGlmICghbV9hdGxhc2VzVG9SZW1vdmUuaXNFbXB0eSgp
KQotICAgICAgICBtX2NsaWVudC5yZWxlYXNlVXBkYXRlQXRsYXNlcyhtX2F0bGFzZXNUb1JlbW92
ZSk7Ci0gICAgbV9hdGxhc2VzVG9SZW1vdmUuY2xlYXIoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCmluZGV4IDY2OTU0
ZmY1ODE3Y2FiZjRjZTg4ZWUxNjZhODEwNjk1OGExN2EwMWUuLjYxYTJiNjI2MDRiYmEyNGQwODBk
YWM2NDAxMjdmMTA5NWQyZjdmMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29tcG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvTmljb3NpYUJ1ZmZlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
VXBkYXRlQXRsYXMuaD4KIAogbmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgUGFpbnRpbmdFbmdp
bmU7CkBAIC01NCw3ICs1Myw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQ29tcG9zaXRp
bmdDb29yZGluYXRvciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50
CiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CiAg
ICAgLCBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAotICAg
ICwgcHVibGljIFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjpDbGllbnQKICAgICAsIHB1YmxpYyBXZWJD
b3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29t
cG9zaXRpbmdDb29yZGluYXRvcik7CiBwdWJsaWM6CkBAIC02MywxNCArNjEsMTIgQEAgcHVibGlj
OgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lk
IG5vdGlmeUZsdXNoUmVxdWlyZWQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRT
Y2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpID0gMDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VVcGRhdGVBdGxhc2VzKGNvbnN0IFZlY3Rvcjx1
aW50MzJfdD4mKSA9IDA7CiAgICAgfTsKIAogICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IoV2Vi
Q29yZTo6UGFnZSosIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCYpOwogICAgIHZpcnR1
YWwgfkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwot
ICAgIHZvaWQgY2xlYXJVcGRhdGVBdGxhc2VzKCk7CiAKICAgICB2b2lkIHNldFJvb3RDb21wb3Np
dGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKICAgICB2b2lkIHNldFZpZXdPdmVy
bGF5Um9vdExheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKQEAgLTk1LDExICs5MSw2IEBA
IHB1YmxpYzoKICAgICBkb3VibGUgbmV4dEFuaW1hdGlvblNlcnZpY2VUaW1lKCkgY29uc3Q7CiAK
IHByaXZhdGU6Ci0gICAgZW51bSBSZWxlYXNlQXRsYXNQb2xpY3kgewotICAgICAgICBSZWxlYXNl
SW5hY3RpdmUsCi0gICAgICAgIFJlbGVhc2VVbnVzZWQKLSAgICB9OwotCiAgICAgLy8gR3JhcGhp
Y3NMYXllckNsaWVudAogICAgIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Io
KSBjb25zdCBvdmVycmlkZTsKQEAgLTExNiwxNCArMTA3LDkgQEAgcHJpdmF0ZToKICAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0IG92ZXJyaWRlOwogICAg
IFJlZjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5n
SWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2UmKSBvdmVycmlkZTsKICAgICB2b2lkIGRldGFjaExheWVy
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwotICAgIFJlZjxO
aWNvc2lhOjpCdWZmZXI+IGdldENvb3JkaW5hdGVkQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBOaWNvc2lhOjpCdWZmZXI6OkZsYWdzLCB1aW50MzJfdCYsIFdlYkNvcmU6OkludFJlY3Qm
KSBvdmVycmlkZTsKICAgICBOaWNvc2lhOjpQYWludGluZ0VuZ2luZSYgcGFpbnRpbmdFbmdpbmUo
KSBvdmVycmlkZTsKICAgICB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKSBvdmVycmlk
ZTsKIAotICAgIC8vIFVwZGF0ZUF0bGFzOjpDbGllbnQKLSAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0
bGFzKFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjpJRCwgUmVmPE5pY29zaWE6OkJ1ZmZlcj4mJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyhXZWJDb3JlOjpVcGRhdGVBdGxhczo6
SUQpIG92ZXJyaWRlOwotCiAgICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyOjpUeXBlLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Jikg
b3ZlcnJpZGU7CiAKQEAgLTEzMywxMCArMTE5LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHVy
Z2VCYWNraW5nU3RvcmVzKCk7CiAKLSAgICB2b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRs
YXNlcygpOwotICAgIHZvaWQgcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoKTsKLSAg
ICB2b2lkIHJlbGVhc2VBdGxhc2VzKFJlbGVhc2VBdGxhc1BvbGljeSk7Ci0KICAgICBkb3VibGUg
dGltZXN0YW1wKCkgY29uc3Q7CiAKICAgICBXZWJDb3JlOjpQYWdlKiBtX3BhZ2U7CkBAIC0xNTIs
OCArMTM0LDYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQsIFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4+IG1f
aW1hZ2VCYWNraW5nczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxOaWNvc2lhOjpQYWludGluZ0Vu
Z2luZT4gbV9wYWludGluZ0VuZ2luZTsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlVwZGF0ZUF0bGFzPj4gbV91cGRhdGVBdGxhc2VzOwotICAgIFZlY3Rvcjx1aW50MzJfdD4g
bV9hdGxhc2VzVG9SZW1vdmU7CiAKICAgICAvLyBXZSBkb24ndCBzZW5kIHRoZSBtZXNzYWdlcyBy
ZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8gcmVuZGVyZXIgZHVyaW5nIHB1cmdpbmcs
IGJlY2F1c2UgcmVuZGVyZXIgYWxyZWFkeSBoYWQgcmVtb3ZlZCBhbGwgcmVzb3VyY2VzLgogICAg
IGJvb2wgbV9pc0Rlc3RydWN0aW5nIHsgZmFsc2UgfTsKQEAgLTE2Myw3ICsxNDMsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgeyBmYWxz
ZSB9OwogCiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAg
ICBSdW5Mb29wOjpUaW1lcjxDb21wb3NpdGluZ0Nvb3JkaW5hdG9yPiBtX3JlbGVhc2VJbmFjdGl2
ZUF0bGFzZXNUaW1lcjsKIAogICAgIGRvdWJsZSBtX2xhc3RBbmltYXRpb25TZXJ2aWNlVGltZSB7
IDAgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggM2YxMDVjOGEwZGU0NjU4MjYzOTU1ZGVjNDliYTVjOTY1
MWJiZmJhOS4uMDkyYWEzODVjOTAzZGY0YjY0NTA4NjYzZTViYjMyMWM1MjQ4MGY0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmNwcApAQCAtMjM2LDEwICsyMzYsNSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
c2NoZWR1bGVBbmltYXRpb24oKQogICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgx
X3MgKiBtX2Nvb3JkaW5hdG9yLm5leHRBbmltYXRpb25TZXJ2aWNlVGltZSgpKTsKIH0KIAotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNsZWFyVXBkYXRlQXRsYXNlcygpCi17Ci0gICAg
bV9jb29yZGluYXRvci5jbGVhclVwZGF0ZUF0bGFzZXMoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggZDYz
MDZjY2EzYzQzYmMxYzFiOWRmNTlhN2NiZjRjNjQ4MTc1NDRhZS4uOTE1OWI2ODQwOWVjMjcxMzhj
Y2ZmNmVhNWFlNWEzNTc5MDkxNzE1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC01Nyw4ICs1Nyw2IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIG92ZXJyaWRlOwog
ICAgIHZvaWQgcGFnZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCkgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIGNsZWFyVXBkYXRlQXRsYXNlcygpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBzZXRW
aXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKTsKICAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogCkBAIC03Miw3
ICs3MCw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRpZEZsdXNoUm9vdExheWVyKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KSBvdmVycmlkZTsKICAgICB2b2lk
IG5vdGlmeUZsdXNoUmVxdWlyZWQoKSBvdmVycmlkZSB7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9
OwogICAgIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzU3RhdGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbGVhc2VVcGRhdGVBdGxhc2VzKGNv
bnN0IFZlY3Rvcjx1aW50MzJfdD4mKSBvdmVycmlkZSB7IH07CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBsYXllckZsdXNoVGltZXJGaXJlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCBh
NGMxNzc0NDkyNDVkOGExMjMzZTg2NTZkMDQ1OGYzMDQzODI0OGI2Li5kMGM0YzI2YTc4NGRjZWMy
ZTA3N2M2MzAxMWEzZjc3YmU3NGIzMGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAt
MjQ4LDExICsyNDgsNiBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
b21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpYwogICAgIG1fY29tcG9zaXRv
ci0+dXBkYXRlU2NlbmVTdGF0ZShzdGF0ZSk7CiB9CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VVcGRhdGVBdGxhc2VzKGNvbnN0IFZlY3Rvcjx1aW50MzJf
dD4mIGF0bGFzZXNUb1JlbW92ZSkKLXsKLSAgICBtX2NvbXBvc2l0b3ItPnJlbGVhc2VVcGRhdGVB
dGxhc2VzKGF0bGFzZXNUb1JlbW92ZSk7Ci19Ci0KIHZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnNldElzRGlzY2FyZGFibGUoYm9vbCBkaXNjYXJkYWJsZSkKIHsKICAgICBt
X2lzRGlzY2FyZGFibGUgPSBkaXNjYXJkYWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaAppbmRleCA5
ZWFmYmRiZDNkMTcyZTk4MjY1NThlNGJmY2FhODM0MjI3NGE2ODlhLi42MjlkZGFmNjFhNzAyODFm
YjA4OGViYzFjZmY0ZmM2OGFhZWU3MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0xMTMs
NyArMTEzLDYgQEAgcHJpdmF0ZToKICAgICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGll
bnQKICAgICB2b2lkIGRpZEZsdXNoUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IG92ZXJyaWRlIHsgfQogICAgIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShjb25zdCBXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbGVhc2VVcGRh
dGVBdGxhc2VzKGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mKSBvdmVycmlkZTsKIAogI2lmIFVTRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCiAgICAgUmVmUHRyPFdlYkNv
cmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAppbmRleCBlMmMwNzMzMzk0MjM5YjM4
NGMwNjVjODc5ZGQxYTg1YmI0OGFhZDYxLi44NWRkNDU4ZTAxODAwMzExYzM4YjU2ZGEwMGZkMjAx
OTA5MGQyMDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5oCkBAIC04OSw3ICs4OSw2IEBAIHB1YmxpYzoKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRJc0Rpc2NhcmRhYmxlKGJvb2wpIHsgfTsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJVcGRhdGVBdGxhc2VzKCkgPSAwOwogI2VuZGlmCiAKICNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKEdUSykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336650</attachid>
            <date>2018-03-28 03:33:38 -0700</date>
            <delta_ts>2018-03-28 05:30:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184042-20180328123336.patch</filename>
            <type>text/plain</type>
            <size>58231</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwMDI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTlhODkyM2M0YjI3Yzc3
ZGY5OGQ5MTNiMWNmNDhkMzRiNTliZTRiMi4uMmE0YzJlMWQ0ZDU5NmJlNDBmNTVmMGFiNzRkMjYz
YTUzZjc5MzNjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE4LTAzLTI4ICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBSZW1v
dmUgVXBkYXRlQXRsYXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4NDA0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJlbW92ZSBVcGRhdGVBdGxhcyBhbmQgQXJlYUFsbG9jYXRvciBjbGFzc2VzLiBJbnN0
ZWFkIG9mIHVzaW5nIFVwZGF0ZUF0bGFzIGFzIGEgY2FjaGUKKyAgICAgICAgb2YgYnVmZmVycyB0
byByZW5kZXIgdGlsZXMgd2l0aCBjYWlybywgYWxsb2NhdGUgYSBuZXcgYnVmZmVyIGZvciBlYWNo
IHRpbGUgaW5zdGVhZC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0ZW50IHRlc3RzLgorCisg
ICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xp
ZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0FyZWFBbGxvY2F0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmg6CisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9VcGRhdGVBdGxhcy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmg6IFJlbW92ZWQuCisgICAgICAg
ICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpy
ZXNldFRvQ29uc2lzdGVudFN0YXRlKToKKwogMjAxOC0wMy0yNyAgTWljaGFlbCBDYXRhbnphcm8g
IDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjIzMDAwOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNGJiYzVkNTVkMjdjYjE5ZmFhM2M2MzUxNTIzNWUxZTEw
YmY5M2EzMC4uMDcyYjRiYWZlOTdjNzAzNjZjMDQ0MDIxMTY5Mzk0YTQ0ZTRkMmM4YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw1NyBAQAorMjAxOC0wMy0yOCAgTWlndWVsIEdvbWV6ICA8bWFnb21lekBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gUmVtb3ZlIFVwZGF0ZUF0bGFzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQwNDIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgYWxsIHRo
ZSBjb2RlIHJlbGF0ZWQgdG8gVXBkYXRlQXRsYXMgaGFuZGxpbmcuCisKKyAgICAgICAgKiBTaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZVRpbGVzSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNj
ZW5lU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnB1
cmdlR0xSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnN5bmNVcGRhdGVBdGxhc2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVVcGRhdGVBdGxhcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVXBkYXRlQXRsYXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbGVh
c2VVcGRhdGVBdGxhc2VzKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaDoKKyAgICAgICAgKiBTaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb21wb3NpdG9yOjpyZW5kZXJMYXllclRyZWUp
OgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRlZENvbXBvc2l0b3I6OnJlbGVhc2VVcGRhdGVBdGxh
c2VzKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJl
YWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDaHJvbWVDbGllbnQ6OmRlbGVnYXRlZFNjcm9sbFJlcXVlc3RlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNocm9tZUNsaWVudDo6cmVzZXRVcGRhdGVBdGxhc0ZvclRlc3RpbmcpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpyZXNldFVwZGF0ZUF0
bGFzRm9yVGVzdGluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Fj
Y2VsZXJhdGVkRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q29tcG9zaXRpbmdDb29yZGluYXRvcik6Cisg
ICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVy
Q2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNsZWFy
UGVuZGluZ1N0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpnZXRDb29yZGluYXRl
ZEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxl
YXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbGVhc2VBdGxhc2VzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y2xlYXJVcGRhdGVBdGxhc2VzKTog
RGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjbGVhclVwZGF0ZUF0bGFzZXMp
OiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnJlbGVhc2VVcGRhdGVBdGxhc2VzKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3Q6OnNldElzRGlzY2FyZGFibGUpOgorCiAyMDE4LTAzLTI3ICBNaWNoYWVs
IENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBmaXggdHlwbyBpbiB2YXJpYWJsZSBuYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmgKaW5kZXggNWM2MDZhMWE2YmZjMTNlODg0ZmU2YzMzNDI3N2Y4Njg3YzM1NzkxZC4uZjUyOTNl
MzRjNzhkNjM1NjgzYzcyNTJkNzM3NmQ4MzE3NDYzNmFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaApAQCAtMTA4LDcgKzEwOCw2IEBAIGNsYXNzIEVtcHR5Q2hyb21lQ2xpZW50
IDogcHVibGljIENocm9tZUNsaWVudCB7CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CiAgICAgdm9pZCBkZWxlZ2F0ZWRTY3JvbGxSZXF1ZXN0ZWQoY29uc3QgSW50UG9pbnQmKSBmaW5h
bCB7IH0KLSAgICB2b2lkIHJlc2V0VXBkYXRlQXRsYXNGb3JUZXN0aW5nKCkgZmluYWwgeyB9CiAj
ZW5kaWYKIAogICAgIEludFBvaW50IHNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHAp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHA7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmlu
ZGV4IDI3NWZhZWFiMDVkMjE1OWJkODc5MThhM2E1ZWQwZjNjZWI2OGZlMmUuLjU0NzdlY2JjOTUy
ZDhiMmY4ZjVlMDNhMzFiYWI0OWU4MzdiZDQxM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaApAQCAtMTY2LDcgKzE2Niw2IEBAIHB1YmxpYzoKIAogI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKICAgICB2aXJ0dWFsIHZvaWQgZGVsZWdhdGVkU2Nyb2xsUmVxdWVzdGVkKGNvbnN0
IEludFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXNldFVwZGF0ZUF0bGFzRm9yVGVz
dGluZygpID0gMDsKICNlbmRpZgogCiAgICAgdmlydHVhbCBJbnRQb2ludCBzY3JlZW5Ub1Jvb3RW
aWV3KGNvbnN0IEludFBvaW50JikgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RleHR1cmVNYXBwZXIuY21ha2UKaW5kZXggNWE0ZTk1N2E5ZmVhNzk3NGFiZGI5N2QzYjg4Mjgz
M2NlMmEwMzZmZi4uZWE5MjZjZWUyMWIzODZhNDY5YmUzNDdhODI5YTk4NWUxNTQ0ZWJmMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCkBAIC0zNiwxMiAr
MzYsMTAgQEAgaWYgKFVTRV9DT09SRElOQVRFRF9HUkFQSElDUykKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eS5jcHAKIAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
QXJlYUFsbG9jYXRvci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVGlsZS5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1RpbGVkQmFja2luZ1N0b3Jl
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRl
QXRsYXMuY3BwCiAgICAgKQogCiAgICAgIyBGSVhNRTogTW92ZSB0aGlzIGludG8gTmljb3NpYS5j
bWFrZSBvbmNlIHRoZSBjb21wb25lbnQgaXMgc2V0IGZvciBsb25nLXRlcm0gdXNlLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0FyZWFBbGxvY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5OWRhYzVkNTczNzdmMDBlMzhhOTBiNDkxZGVmMTkxODIyMjlmZGQ1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcmVhQWxsb2Nh
dG9yLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotQXJlYUFsbG9jYXRvcjo6QXJlYUFsbG9jYXRvcihjb25zdCBJbnRTaXplJiBzaXpl
KQotICAgIDogbV9zaXplKHNpemUpCi0gICAgLCBtX21pbkFsbG9jKDEsIDEpCi0gICAgLCBtX21h
cmdpbigwLCAwKQotewotfQotCi1BcmVhQWxsb2NhdG9yOjp+QXJlYUFsbG9jYXRvcigpCi17Ci19
Ci0KLXZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0g
ICAgbV9zaXplID0gbV9zaXplLmV4cGFuZGVkVG8oc2l6ZSk7Ci19Ci0KLXZvaWQgQXJlYUFsbG9j
YXRvcjo6ZXhwYW5kQnkoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUgKz0gc2l6
ZTsKLX0KLQotdm9pZCBBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IEludFJlY3QmKQotewot
fQotCi1pbnQgQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25zdAotewotICAgIHJldHVybiAw
OwotfQotCi1JbnRTaXplIEFyZWFBbGxvY2F0b3I6OnJvdW5kQWxsb2NhdGlvbihjb25zdCBJbnRT
aXplJiBzaXplKSBjb25zdAotewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKSArIG1fbWFy
Z2luLndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCkgKyBtX21hcmdpbi5o
ZWlnaHQoKTsKLSAgICBpbnQgZXh0cmEgPSB3aWR0aCAlIG1fbWluQWxsb2Mud2lkdGgoKTsKLSAg
ICBpZiAoZXh0cmEpCi0gICAgICAgIHdpZHRoICs9IG1fbWluQWxsb2Mud2lkdGgoKSAtIGV4dHJh
OwotICAgIGV4dHJhID0gaGVpZ2h0ICUgbV9taW5BbGxvYy5oZWlnaHQoKTsKLSAgICBpZiAoZXh0
cmEpCi0gICAgICAgIGhlaWdodCArPSBtX21pbkFsbG9jLmhlaWdodCgpIC0gZXh0cmE7Ci0KLSAg
ICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLX0KLQotR2VuZXJhbEFyZWFBbGxvY2F0
b3I6OkdlbmVyYWxBcmVhQWxsb2NhdG9yKGNvbnN0IEludFNpemUmIHNpemUpCi0gICAgOiBBcmVh
QWxsb2NhdG9yKG5leHRQb3dlck9mVHdvKHNpemUpKQotewotICAgIG1fcm9vdCA9IG5ldyBOb2Rl
KCk7Ci0gICAgbV9yb290LT5yZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpKTsKLSAgICBtX3Jvb3QtPmxhcmdlc3RGcmVlID0gbV9zaXplOwotICAgIG1f
bm9kZUNvdW50ID0gMTsKLSAgICBzZXRNaW5pbXVtQWxsb2NhdGlvbihJbnRTaXplKDgsIDgpKTsK
LX0KLQotR2VuZXJhbEFyZWFBbGxvY2F0b3I6On5HZW5lcmFsQXJlYUFsbG9jYXRvcigpCi17Ci0g
ICAgZnJlZU5vZGUobV9yb290KTsKLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJl
ZU5vZGUoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAobm9kZSkgewotICAgICAgICBmcmVlTm9kZShu
b2RlLT5sZWZ0KTsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOwotICAgIH0KLSAgICBk
ZWxldGUgbm9kZTsKLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0
IEludFNpemUmIHNpemUpCi17Ci0gICAgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKG5leHRQb3dlck9m
VHdvKHNpemUpKTsKLQotICAgIGlmIChtX3Jvb3QtPnJlY3Quc2l6ZSgpID09IG1fc2l6ZSkKLSAg
ICAgICAgcmV0dXJuOyAvLyBObyBjaGFuZ2UuCi0KLSAgICBpZiAoIW1fcm9vdC0+bGVmdCAmJiBt
X3Jvb3QtPmxhcmdlc3RGcmVlLndpZHRoKCkgPiAwKSB7Ci0gICAgICAgIC8vIE5vIGFsbG9jYXRp
b25zIGhhdmUgb2NjdXJyZWQsIHNvIGp1c3QgYWRqdXN0IHRoZSByb290IHNpemUuCi0gICAgICAg
IG1fcm9vdC0+cmVjdCA9IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSk7Ci0gICAgICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBBZGQgZXh0cmEgbm9kZXMgYWJvdmUgdGhlIGN1cnJlbnQg
cm9vdCB0byBleHBhbmQgdGhlIHRyZWUuCi0gICAgTm9kZSogb2xkUm9vdCA9IG1fcm9vdDsKLSAg
ICBTcGxpdCBzcGxpdDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9zaXplLmhlaWdodCgp
KQotICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgIGVsc2UKLSAgICAgICAgc3BsaXQgPSBT
cGxpdE9uWTsKLQotICAgIHdoaWxlIChtX3Jvb3QtPnJlY3Quc2l6ZSgpICE9IG1fc2l6ZSkgewot
ICAgICAgICBpZiAobV9yb290LT5yZWN0LndpZHRoKCkgPT0gbV9zaXplLndpZHRoKCkpCi0gICAg
ICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAgICBlbHNlIGlmIChtX3Jvb3QtPnJlY3Qu
aGVpZ2h0KCkgPT0gbV9zaXplLmhlaWdodCgpKQotICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9u
WDsKLSAgICAgICAgTm9kZSogcGFyZW50ID0gbmV3IE5vZGUoKTsKLSAgICAgICAgTm9kZSogcmln
aHQgPSBuZXcgTm9kZSgpOwotICAgICAgICBtX25vZGVDb3VudCArPSAyOwotICAgICAgICBtX3Jv
b3QtPnBhcmVudCA9IHBhcmVudDsKLSAgICAgICAgcGFyZW50LT5wYXJlbnQgPSBudWxscHRyOwot
ICAgICAgICBwYXJlbnQtPmxlZnQgPSBtX3Jvb3Q7Ci0gICAgICAgIHBhcmVudC0+cmlnaHQgPSBy
aWdodDsKLSAgICAgICAgcGFyZW50LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5zaXplKCk7
Ci0gICAgICAgIHJpZ2h0LT5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgICAgIHJpZ2h0LT5sZWZ0ID0g
bnVsbHB0cjsKLSAgICAgICAgcmlnaHQtPnJpZ2h0ID0gbnVsbHB0cjsKLSAgICAgICAgcmlnaHQt
Pmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsKLSAgICAgICAgaWYgKHNwbGl0ID09
IFNwbGl0T25YKSB7Ci0gICAgICAgICAgICBwYXJlbnQtPnJlY3QgPSBJbnRSZWN0KG1fcm9vdC0+
cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCksCi0gICAgICAgICAgICAgICAgbV9yb290LT5yZWN0
LndpZHRoKCkgKiAyLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgcmlnaHQt
PnJlY3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCkgKyBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwg
bV9yb290LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwg
bV9yb290LT5yZWN0LmhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBh
cmVudC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSwK
LSAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdo
dCgpICogMik7Ci0gICAgICAgICAgICByaWdodC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0
LngoKSwgbV9yb290LT5yZWN0LnkoKSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLAotICAgICAgICAg
ICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOwotICAg
ICAgICB9Ci0gICAgICAgIHNwbGl0ID0gKHNwbGl0ID09IFNwbGl0T25YID8gU3BsaXRPblkgOiBT
cGxpdE9uWCk7Ci0gICAgICAgIG1fcm9vdCA9IHBhcmVudDsKLSAgICB9Ci0gICAgdXBkYXRlTGFy
Z2VzdEZyZWUob2xkUm9vdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBmaXRzV2l0aGluKGNv
bnN0IEludFNpemUmIHNpemUxLCBjb25zdCBJbnRTaXplJiBzaXplMikKLXsKLSAgICByZXR1cm4g
c2l6ZTEud2lkdGgoKSA8PSBzaXplMi53aWR0aCgpICYmIHNpemUxLmhlaWdodCgpIDw9IHNpemUy
LmhlaWdodCgpOwotfQotCi1JbnRSZWN0IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZShj
b25zdCBJbnRTaXplJiBzaXplKQotewotICAgIEludFNpemUgcm91bmRlZCA9IHJvdW5kQWxsb2Nh
dGlvbihzaXplKTsKLSAgICByb3VuZGVkID0gbmV4dFBvd2VyT2ZUd28ocm91bmRlZCk7Ci0gICAg
aWYgKHJvdW5kZWQud2lkdGgoKSA8PSAwIHx8IHJvdW5kZWQud2lkdGgoKSA+IG1fc2l6ZS53aWR0
aCgpCi0gICAgICAgIHx8IHJvdW5kZWQuaGVpZ2h0KCkgPD0gMCB8fCByb3VuZGVkLmhlaWdodCgp
ID4gbV9zaXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgSW50
UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHJvdW5kZWQsIG1fcm9vdCk7Ci0gICAgaWYg
KHBvaW50LngoKSA+PSAwKQotICAgICAgICByZXR1cm4gSW50UmVjdChwb2ludCwgc2l6ZSk7Ci0g
ICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotSW50UG9pbnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6
OmFsbG9jYXRlRnJvbU5vZGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgTm9kZSogbm9kZSkKLXsKLSAg
ICAvLyBGaW5kIHRoZSBiZXN0IG5vZGUgdG8gaW5zZXJ0IGludG8sIHdoaWNoIHNob3VsZCBiZQot
ICAgIC8vIGEgbm9kZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQgb2YgdW51c2VkIHNwYWNlIHRoYXQg
aXMKLSAgICAvLyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIHJlcXVlc3RlZCBzaXplLgotICAg
IHdoaWxlIChub2RlKSB7Ci0gICAgICAgIC8vIEdvIGRvd24gYSBsZXZlbCBhbmQgZGV0ZXJtaW5l
IGlmIHRoZSBsZWZ0IG9yIHJpZ2h0Ci0gICAgICAgIC8vIHN1Yi10cmVlIGNvbnRhaW5zIHRoZSBi
ZXN0IGNoYW5jZSBvZiBhbGxvY2F0aW9uLgotICAgICAgICBOb2RlKiBsZWZ0ID0gbm9kZS0+bGVm
dDsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5yaWdodDsKLSAgICAgICAgaWYgKGxlZnQg
JiYgZml0c1dpdGhpbihzaXplLCBsZWZ0LT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgIGlm
IChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJpZ2h0LT5sYXJnZXN0RnJlZSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAobGVmdC0+bGFyZ2VzdEZyZWUud2lkdGgoKSA8IHJpZ2h0LT5sYXJnZXN0
RnJlZS53aWR0aCgpCi0gICAgICAgICAgICAgICAgICAgIHx8IGxlZnQtPmxhcmdlc3RGcmVlLmhl
aWdodCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFRoZSBsYXJnZXN0RnJlZSB2YWx1ZXMgbWF5IGJlIGEgbGl0dGxlIG92ZXJzaXplZCwK
LSAgICAgICAgICAgICAgICAgICAgLy8gc28gdHJ5IHRoZSBsZWZ0IHN1Yi10cmVlIGFuZCB0aGVu
IHRoZSByaWdodCBzdWItdHJlZS4KLSAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQgcG9pbnQg
PSBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIGxlZnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cG9pbnQueCgpID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnQ7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIHJpZ2h0KTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OwotICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbm9kZSA9IGxlZnQ7Ci0gICAgICAgIH0gZWxz
ZSBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2VzdEZyZWUpKQotICAg
ICAgICAgICAgbm9kZSA9IHJpZ2h0OwotICAgICAgICBlbHNlIGlmIChsZWZ0IHx8IHJpZ2h0KSB7
Ci0gICAgICAgICAgICAvLyBOZWl0aGVyIHN1Yi1ub2RlIGhhcyBlbm91Z2ggc3BhY2UgdG8gYWxs
b2NhdGUgZnJvbS4KLSAgICAgICAgICAgIHJldHVybiBJbnRQb2ludCgtMSwgLTEpOwotICAgICAg
ICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oc2l6ZSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAg
ICAgICAgICAvLyBEbyB3ZSBuZWVkIHRvIHNwbGl0IHRoaXMgbm9kZSBpbnRvIHNtYWxsZXIgcGll
Y2VzPwotICAgICAgICAgICAgU3BsaXQgc3BsaXQ7Ci0gICAgICAgICAgICBpZiAoZml0c1dpdGhp
bihJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFy
Z2VzdEZyZWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3BsaXQgaW4gZWl0aGVyIGRpcmVjdGlv
bjogY2hvb3NlIHRoZSBpbnZlcnNlIG9mCi0gICAgICAgICAgICAgICAgLy8gdGhlIHBhcmVudCBu
b2RlJ3Mgc3BsaXQgZGlyZWN0aW9uIHRvIHRyeSB0byBiYWxhbmNlCi0gICAgICAgICAgICAgICAg
Ly8gb3V0IHRoZSB3YXN0ZWQgc3BhY2UgYXMgZnVydGhlciBzdWJkaXZpc2lvbnMgaGFwcGVuLgot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgJiYg
bm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LngoKSA9PSBub2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0
LngoKSkKLSAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5wYXJlbnQpCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0g
U3BsaXRPblk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+cmVjdC53aWR0aCgpID49
IG5vZGUtPnJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRP
blg7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNw
bGl0T25ZOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKEludFNpemUoc2l6ZS53
aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSksIG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAgICAg
ICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBYIGRpcmVjdGlvbi4KLSAgICAgICAgICAgICAg
ICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKElu
dFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RGcmVl
KSkgewotICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBZIGRpcmVjdGlvbi4KLSAg
ICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3BsaXQgZnVydGhlciAtIGFsbG9jYXRlIHRoaXMgbm9k
ZS4KLSAgICAgICAgICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IEludFNpemUoMCwgMCk7Ci0g
ICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9kZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGUtPnJlY3QubG9jYXRpb24oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gU3BsaXQgdGhlIG5vZGUsIHRoZW4gZ28gYXJvdW5kIGFnYWluIHVzaW5nIHRoZSBsZWZ0
IHN1Yi10cmVlLgotICAgICAgICAgICAgbm9kZSA9IHNwbGl0Tm9kZShub2RlLCBzcGxpdCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBDYW5ub3QgcG9zc2libHkgZml0IGludG8g
dGhpcyBub2RlLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIEludFBvaW50KC0xLCAtMSk7Ci19Ci0KLUdlbmVyYWxBcmVhQWxsb2NhdG9yOjpOb2RlKiBH
ZW5lcmFsQXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlKE5vZGUqIG5vZGUsIFNwbGl0IHNwbGl0KQot
ewotICAgIE5vZGUqIGxlZnQgPSBuZXcgTm9kZSgpOwotICAgIGxlZnQtPnBhcmVudCA9IG5vZGU7
Ci0gICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOwotICAgIHJpZ2h0LT5wYXJlbnQgPSBub2Rl
OwotICAgIG5vZGUtPmxlZnQgPSBsZWZ0OwotICAgIG5vZGUtPnJpZ2h0ID0gcmlnaHQ7Ci0gICAg
bV9ub2RlQ291bnQgKz0gMjsKLQotICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkgewotICAgICAg
ICBsZWZ0LT5yZWN0ID0gSW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCksCi0g
ICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0LmhlaWdodCgpKTsK
LSAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KGxlZnQtPnJlY3QubWF4WCgpLCBub2RlLT5y
ZWN0LnkoKSwKLSAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSAvIDIsIG5vZGUtPnJlY3Qu
aGVpZ2h0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxlZnQtPnJlY3QgPSBJbnRSZWN0KG5v
ZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKLSAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lk
dGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAvIDIpOwotICAgICAgICByaWdodC0+cmVjdCA9IElu
dFJlY3Qobm9kZS0+cmVjdC54KCksIGxlZnQtPnJlY3QubWF4WSgpLAotICAgICAgICAgICAgbm9k
ZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7Ci0gICAgfQotCi0gICAg
bGVmdC0+bGFyZ2VzdEZyZWUgPSBsZWZ0LT5yZWN0LnNpemUoKTsKLSAgICByaWdodC0+bGFyZ2Vz
dEZyZWUgPSByaWdodC0+cmVjdC5zaXplKCk7Ci0gICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSByaWdo
dC0+bGFyZ2VzdEZyZWU7Ci0gICAgcmV0dXJuIGxlZnQ7Ci19Ci0KLXZvaWQgR2VuZXJhbEFyZWFB
bGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKE5vZGUqIG5vZGUpCi17Ci0gICAgd2hpbGUgKChu
b2RlID0gbm9kZS0+cGFyZW50KSkgewotICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IEludFNp
emUoCi0gICAgICAgICAgICBzdGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS53aWR0aCgp
LCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUud2lkdGgoKSksCi0gICAgICAgICAgICBzdGQ6Om1h
eChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RG
cmVlLmhlaWdodCgpKQotICAgICAgICAgICAgKTsKLSAgICB9Ci19Ci0KLXZvaWQgR2VuZXJhbEFy
ZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBMb2Nh
dGUgdGhlIG5vZGUgdGhhdCBjb250YWlucyB0aGUgYWxsb2NhdGVkIHJlZ2lvbi4KLSAgICBOb2Rl
KiBub2RlID0gbV9yb290OwotICAgIEludFBvaW50IHBvaW50ID0gcmVjdC5sb2NhdGlvbigpOwot
ICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlmIChub2RlLT5sZWZ0ICYmIG5vZGUtPmxlZnQt
PnJlY3QuY29udGFpbnMocG9pbnQpKQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmxlZnQ7Ci0g
ICAgICAgIGVsc2UgaWYgKG5vZGUtPnJpZ2h0ICYmIG5vZGUtPnJpZ2h0LT5yZWN0LmNvbnRhaW5z
KHBvaW50KSkKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT5yaWdodDsKLSAgICAgICAgZWxzZSBp
ZiAobm9kZS0+cmVjdC5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuOyAvLyBQb2ludCBpcyBjb21wbGV0ZWx5IG91dHNp
ZGUgdGhlIHRyZWUuCi0gICAgfQotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gTWFyayB0aGUgbm9kZSBhcyBmcmVlIGFuZCB0aGVuIHdvcmsgdXB3YXJkcyB0aHJvdWdo
IHRoZSB0cmVlCi0gICAgLy8gcmVjb21iaW5pbmcgYW5kIGRlbGV0aW5nIG5vZGVzIHVudGlsIHdl
IHJlYWNoIGEgc2libGluZwotICAgIC8vIHRoYXQgaXMgc3RpbGwgYWxsb2NhdGVkLgotICAgIG5v
ZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVjdC5zaXplKCk7Ci0gICAgd2hpbGUgKG5vZGUtPnBh
cmVudCkgewotICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0ID09IG5vZGUpIHsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5wYXJlbnQtPnJpZ2h0LT5sYXJnZXN0RnJlZSAhPSBub2RlLT5wYXJl
bnQtPnJpZ2h0LT5yZWN0LnNpemUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQtPmxhcmdlc3RGcmVl
ICE9IG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC5zaXplKCkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKLSAgICAgICAgZnJl
ZU5vZGUobm9kZS0+bGVmdCk7Ci0gICAgICAgIGZyZWVOb2RlKG5vZGUtPnJpZ2h0KTsKLSAgICAg
ICAgbV9ub2RlQ291bnQgLT0gMjsKLSAgICAgICAgbm9kZS0+bGVmdCA9IG51bGxwdHI7Ci0gICAg
ICAgIG5vZGUtPnJpZ2h0ID0gbnVsbHB0cjsKLSAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBu
b2RlLT5yZWN0LnNpemUoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHRoZSByZXN0IG9mIG91ciBh
bmNlc3RvcnMgaGF2ZSB0aGUgY29ycmVjdCAibGFyZ2VzdCBmcmVlIHNpemUiLgotICAgIHVwZGF0
ZUxhcmdlc3RGcmVlKG5vZGUpOwotfQotCi1pbnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6Om92ZXJo
ZWFkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ub2RlQ291bnQgKiBzaXplb2YoTm9kZSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNmZGM4Zjc2NWVjNGJjMGYxMzQzYjRlOWY2YTJmYjQ4ZDM5OTNj
MDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0
b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlICJJbnRSZWN0
LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWlubGlu
ZSBpbnQgbmV4dFBvd2VyT2ZUd28oaW50IG51bWJlcikKLXsKLSAgICAvLyBUaGlzIGlzIGEgZmFz
dCB0cmljayB0byBnZXQgbmV4dFBvd2VyT2ZUd28gZm9yIGFuIGludGVnZXIuCi0gICAgLS1udW1i
ZXI7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiAxOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4g
MjsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDQ7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiA4
OwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTY7Ci0gICAgbnVtYmVyKys7Ci0gICAgcmV0dXJu
IG51bWJlcjsKLX0KLQotaW5saW5lIEludFNpemUgbmV4dFBvd2VyT2ZUd28oY29uc3QgSW50U2l6
ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShuZXh0UG93ZXJPZlR3byhzaXplLndpZHRo
KCkpLCBuZXh0UG93ZXJPZlR3byhzaXplLmhlaWdodCgpKSk7Ci19Ci0KLWNsYXNzIEFyZWFBbGxv
Y2F0b3IgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxp
Y2l0IEFyZWFBbGxvY2F0b3IoY29uc3QgSW50U2l6ZSYpOwotICAgIHZpcnR1YWwgfkFyZWFBbGxv
Y2F0b3IoKTsKLQotICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQot
Ci0gICAgSW50U2l6ZSBtaW5pbXVtQWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluQWxs
b2M7IH0KLSAgICB2b2lkIHNldE1pbmltdW1BbGxvY2F0aW9uKGNvbnN0IEludFNpemUmIHNpemUp
IHsgbV9taW5BbGxvYyA9IHNpemU7IH0KLQotICAgIEludFNpemUgbWFyZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXJnaW47IH0KLSAgICB2b2lkIHNldE1hcmdpbihjb25zdCBJbnRTaXplICZtYXJn
aW4pIHsgbV9tYXJnaW4gPSBtYXJnaW47IH0KLQotICAgIHZpcnR1YWwgdm9pZCBleHBhbmQoY29u
c3QgSW50U2l6ZSYpOwotICAgIHZvaWQgZXhwYW5kQnkoY29uc3QgSW50U2l6ZSYpOwotCi0gICAg
dmlydHVhbCBJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IEludFNpemUmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbGVhc2UoY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCBpbnQgb3Zlcmhl
YWQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIEludFNpemUgbV9zaXplOwotICAgIEludFNp
emUgbV9taW5BbGxvYzsKLSAgICBJbnRTaXplIG1fbWFyZ2luOwotCi0gICAgSW50U2l6ZSByb3Vu
ZEFsbG9jYXRpb24oY29uc3QgSW50U2l6ZSYpIGNvbnN0OwotfTsKLQotY2xhc3MgR2VuZXJhbEFy
ZWFBbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgQXJlYUFsbG9jYXRvciB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgR2VuZXJhbEFyZWFBbGxvY2F0
b3IoY29uc3QgSW50U2l6ZSYpOwotICAgIHZpcnR1YWwgfkdlbmVyYWxBcmVhQWxsb2NhdG9yKCk7
Ci0KLSAgICB2b2lkIGV4cGFuZChjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgSW50UmVj
dCBhbGxvY2F0ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWxlYXNlKGNv
bnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICBpbnQgb3ZlcmhlYWQoKSBjb25zdCBvdmVycmlk
ZTsKLQotcHJpdmF0ZToKLSAgICBlbnVtIFNwbGl0IHsgU3BsaXRPblgsIFNwbGl0T25ZIH07Ci0K
LSAgICBzdHJ1Y3QgTm9kZSB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
IHB1YmxpYzoKLSAgICAgICAgSW50UmVjdCByZWN0OwotICAgICAgICBJbnRTaXplIGxhcmdlc3RG
cmVlOwotICAgICAgICBOb2RlKiBwYXJlbnQgeyBudWxscHRyIH07Ci0gICAgICAgIE5vZGUqIGxl
ZnQgeyBudWxscHRyIH07Ci0gICAgICAgIE5vZGUqIHJpZ2h0IHsgbnVsbHB0ciB9OwotICAgIH07
Ci0KLSAgICBOb2RlKiBtX3Jvb3Q7Ci0gICAgaW50IG1fbm9kZUNvdW50OwotCi0gICAgc3RhdGlj
IHZvaWQgZnJlZU5vZGUoTm9kZSopOwotICAgIEludFBvaW50IGFsbG9jYXRlRnJvbU5vZGUoY29u
c3QgSW50U2l6ZSYsIE5vZGUqKTsKLSAgICBOb2RlKiBzcGxpdE5vZGUoTm9kZSosIFNwbGl0KTsK
LSAgICBzdGF0aWMgdm9pZCB1cGRhdGVMYXJnZXN0RnJlZShOb2RlKik7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwCmluZGV4IDE4ZGQwZmUzMjE3NTJkYWRjM2FmN2Q1YzEzMTJiM2I0NzcxMjMwNmEuLmFjMTdh
MzZiYzViNjhiNjU1NzVmMjhhZTFlMDA1YzQ1ZTFkZDNjNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC05NzcsMjAg
Kzk3NywxNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1
ZmZlcnMoKQogICAgICAgICAgICAgYXV0byYgdGlsZVJlY3QgPSB0aWxlLnJlY3QoKTsKICAgICAg
ICAgICAgIGF1dG8mIGRpcnR5UmVjdCA9IHRpbGUuZGlydHlSZWN0KCk7CiAKKyAgICAgICAgICAg
IGF1dG8gY29vcmRpbmF0ZWRCdWZmZXIgPSBOaWNvc2lhOjpCdWZmZXI6OmNyZWF0ZShkaXJ0eVJl
Y3Quc2l6ZSgpLCBjb250ZW50c09wYXF1ZSgpID8gTmljb3NpYTo6QnVmZmVyOjpOb0ZsYWdzIDog
Tmljb3NpYTo6QnVmZmVyOjpTdXBwb3J0c0FscGhhKTsKICAgICAgICAgICAgIFN1cmZhY2VVcGRh
dGVJbmZvIHVwZGF0ZUluZm87Ci0gICAgICAgICAgICBJbnRSZWN0IHRhcmdldFJlY3Q7Ci0gICAg
ICAgICAgICBhdXRvIGNvb3JkaW5hdGVkQnVmZmVyID0gbV9jb29yZGluYXRvci0+Z2V0Q29vcmRp
bmF0ZWRCdWZmZXIoZGlydHlSZWN0LnNpemUoKSwKLSAgICAgICAgICAgICAgICBjb250ZW50c09w
YXF1ZSgpID8gTmljb3NpYTo6QnVmZmVyOjpOb0ZsYWdzIDogTmljb3NpYTo6QnVmZmVyOjpTdXBw
b3J0c0FscGhhLAotICAgICAgICAgICAgICAgIHVwZGF0ZUluZm8uYXRsYXNJRCwgdGFyZ2V0UmVj
dCk7CisgICAgICAgICAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAg
ICAgICAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3QubW92ZSgtdGlsZVJlY3QueCgpLCAtdGlsZVJl
Y3QueSgpKTsKKyAgICAgICAgICAgIHVwZGF0ZUluZm8uYnVmZmVyID0gY29vcmRpbmF0ZWRCdWZm
ZXIuY29weVJlZigpOwogCiAgICAgICAgICAgICBpZiAoIW1fY29vcmRpbmF0b3ItPnBhaW50aW5n
RW5naW5lKCkucGFpbnQoKnRoaXMsIFdURk1vdmUoY29vcmRpbmF0ZWRCdWZmZXIpLAogICAgICAg
ICAgICAgICAgIGRpcnR5UmVjdCwgbV9tYWluQmFja2luZ1N0b3JlLT5tYXBUb0NvbnRlbnRzKGRp
cnR5UmVjdCksCi0gICAgICAgICAgICAgICAgdGFyZ2V0UmVjdCwgbV9tYWluQmFja2luZ1N0b3Jl
LT5jb250ZW50c1NjYWxlKCkpKQorICAgICAgICAgICAgICAgIEludFJlY3QgeyB7IDAsIDAgfSwg
ZGlydHlSZWN0LnNpemUoKSB9LCBtX21haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIHVwZGF0ZUluZm8uc3Vy
ZmFjZU9mZnNldCA9IHRhcmdldFJlY3QubG9jYXRpb24oKTsKLSAgICAgICAgICAgIHVwZGF0ZUlu
Zm8udXBkYXRlUmVjdCA9IGRpcnR5UmVjdDsKLSAgICAgICAgICAgIHVwZGF0ZUluZm8udXBkYXRl
UmVjdC5tb3ZlKC10aWxlUmVjdC54KCksIC10aWxlUmVjdC55KCkpOwogICAgICAgICAgICAgdXBk
YXRlVGlsZSh0aWxlLnRpbGVJRCgpLCB1cGRhdGVJbmZvLCB0aWxlUmVjdCk7CiAKICAgICAgICAg
ICAgIHRpbGUubWFya0NsZWFuKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggNGZjNjgxZWI1OWJiNjA3Nzk5Y2I3MTI3YmQ1
MzYwZTc4ZjIxYTRiNi4uZTZjYTg2NTI0MGRiYWU2M2I0MGIwZWVkNjRlMmY2Njc2MzU0YmEzNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuaApAQCAtNTEsNyArNTEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgdmlz
aWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFJlZjxDb29yZGluYXRl
ZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopID0g
MDsKLSAgICB2aXJ0dWFsIFJlZjxOaWNvc2lhOjpCdWZmZXI+IGdldENvb3JkaW5hdGVkQnVmZmVy
KGNvbnN0IEludFNpemUmLCBOaWNvc2lhOjpCdWZmZXI6OkZsYWdzLCB1aW50MzJfdCYsIEludFJl
Y3QmKSA9IDA7CiAgICAgdmlydHVhbCBOaWNvc2lhOjpQYWludGluZ0VuZ2luZSYgcGFpbnRpbmdF
bmdpbmUoKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0
ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaAppbmRleCA3
MWE0NDMwNGUwMDYxODZlYjQ5OTgxN2JmZDI1NTRiMWU1ZGQ4YmQwLi5jM2RiMTA2MWVmNTJhZGU3
Njc0NDg5MmI5MDI3ZWRhY2FmZGQ2Mzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oCkBAIC0xODksOCArMTg5LDYgQEAgc3RydWN0
IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSB7CiAgICAgVmVjdG9yPENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQ+IGltYWdlc1RvUmVtb3ZlOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPE5pY29zaWE6OkJ1ZmZlcj4+PiBpbWFnZXNUb1VwZGF0
ZTsKICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4gaW1hZ2VzVG9DbGVhcjsK
LQotICAgIFZlY3RvcjxzdGQ6OnBhaXI8dWludDMyX3QgLyogYXRsYXNJRCAqLywgUmVmUHRyPE5p
Y29zaWE6OkJ1ZmZlcj4+PiB1cGRhdGVBdGxhc2VzVG9DcmVhdGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5o
CmluZGV4IDBlNzQ5YmU5M2JhYWNhMjg4YWE2YTBmYzM2ZDA3MjZkMTI1Y2E4ZjcuLmM2NzQ5ODk1
MGI3NjdiY2Q3Y2ZkYWM3NmY1NTczOTFhNjNhMmQ5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5m
by5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk5pY29z
aWFCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCwxMSArMzUsOCBAQCBw
dWJsaWM6CiAgICAgLy8gVGhlIHJlY3QgdG8gYmUgdXBkYXRlZC4KICAgICBJbnRSZWN0IHVwZGF0
ZVJlY3Q7CiAKLSAgICAvLyBUaGUgaWQgb2YgdGhlIHVwZGF0ZSBhdGxhcyBpbmNsdWRpbmcgdGhl
IHNoYXJlYWJsZSBiaXRtYXAgY29udGFpbmluZyB0aGUgdXBkYXRlcy4KLSAgICB1aW50MzJfdCBh
dGxhc0lEIHsgMCB9OwotCi0gICAgLy8gVGhlIG9mZnNldCBpbiB0aGUgYml0bWFwIHdoZXJlIHRo
ZSByZW5kZXJlZCBjb250ZW50cyBhcmUuCi0gICAgSW50UG9pbnQgc3VyZmFjZU9mZnNldDsKKyAg
ICAvLyBUaGUgYnVmZmVyIHdoZXJlIHRoZSB0aWxlIGhhcyBiZWVuIHJlbmRlcmVkCisgICAgUmVm
UHRyPE5pY29zaWE6OkJ1ZmZlcj4gYnVmZmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDMxYzU2ODJiZWQyNWJiMGFjMzAwNDVkYTEzZTM3NjcyMDI2OTNmMmQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIENvcHlyaWdodCAo
QykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKLQotI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5o
IgotI2luY2x1ZGUgIkludFJlY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1VcGRhdGVB
dGxhczo6VXBkYXRlQXRsYXMoQ2xpZW50JiBjbGllbnQsIGNvbnN0IEludFNpemUmIHNpemUsIE5p
Y29zaWE6OkJ1ZmZlcjo6RmxhZ3MgZmxhZ3MpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAg
LCBtX2J1ZmZlcihOaWNvc2lhOjpCdWZmZXI6OmNyZWF0ZShzaXplLCBmbGFncykpCi17Ci0gICAg
c3RhdGljIElEIHNfbmV4dElEIHsgMCB9OwotICAgIG1faWQgPSArK3NfbmV4dElEOwotCi0gICAg
bV9jbGllbnQuY3JlYXRlVXBkYXRlQXRsYXMobV9pZCwgbV9idWZmZXIuY29weVJlZigpKTsKLX0K
LQotVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCi17Ci0gICAgbV9jbGllbnQucmVtb3ZlVXBk
YXRlQXRsYXMobV9pZCk7Ci19Ci0KLXZvaWQgVXBkYXRlQXRsYXM6OmJ1aWxkTGF5b3V0SWZOZWVk
ZWQoKQotewotICAgIGlmIChtX2FyZWFBbGxvY2F0b3IpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2FyZWFBbGxvY2F0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEdlbmVyYWxBcmVhQWxsb2NhdG9yPihz
aXplKCkpOwotICAgIG1fYXJlYUFsbG9jYXRvci0+c2V0TWluaW11bUFsbG9jYXRpb24oSW50U2l6
ZSgzMiwgMzIpKTsKLX0KLQotdm9pZCBVcGRhdGVBdGxhczo6ZGlkU3dhcEJ1ZmZlcnMoKQotewot
ICAgIG1fYXJlYUFsbG9jYXRvciA9IG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxOaWNvc2lhOjpCdWZm
ZXI+IFVwZGF0ZUF0bGFzOjpnZXRDb29yZGluYXRlZEJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXpl
LCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UmVjdCYgYWxsb2NhdGVkUmVjdCkKLXsKLSAgICBtX2lu
YWN0aXZpdHlJblNlY29uZHMgPSAwOwotICAgIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKLSAgICBh
bGxvY2F0ZWRSZWN0ID0gbV9hcmVhQWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplKTsKLQotICAgIGlm
IChhbGxvY2F0ZWRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBhdGxhc0lEID0gbV9pZDsKLSAgICByZXR1cm4gbV9idWZmZXIuY29weVJlZigpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2ZWQ1MDU3OWJlZjMzYzI5NTVjNjI2NDE4NzY3OWEyY2FkYTY0NDA0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChDKSAy
MDEyIENvbXBhbnkgMTAwLCBJbmMuCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiQXJlYUFsbG9jYXRvci5oIgotI2luY2x1ZGUgIk5pY29zaWFCdWZm
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50UmVjdDsKLWNsYXNzIElu
dFNpemU7Ci0KLWNsYXNzIFVwZGF0ZUF0bGFzIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGVBdGxhcyk7Ci1wdWJsaWM6Ci0gICAg
dXNpbmcgSUQgPSB1aW50MzJfdDsKLQotICAgIGNsYXNzIENsaWVudCB7Ci0gICAgcHVibGljOgot
ICAgICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoSUQsIFJlZjxOaWNvc2lhOjpC
dWZmZXI+JiYpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKElE
KSA9IDA7Ci0gICAgfTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFVwZGF0ZUF0bGFzKENsaWVudCYs
IGNvbnN0IEludFNpemUmLCBOaWNvc2lhOjpCdWZmZXI6OkZsYWdzKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB+VXBkYXRlQXRsYXMoKTsKLQotICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlci0+c2l6ZSgpOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
Tmljb3NpYTo6QnVmZmVyPiBnZXRDb29yZGluYXRlZEJ1ZmZlcihjb25zdCBJbnRTaXplJiwgdWlu
dDMyX3QmLCBJbnRSZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaWRTd2FwQnVmZmVy
cygpOwotICAgIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLT5z
dXBwb3J0c0FscGhhKCk7IH0KLQotICAgIHZvaWQgYWRkVGltZUluYWN0aXZlKGRvdWJsZSBzZWNv
bmRzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFpc0luVXNlKCkpOwotICAgICAgICBtX2luYWN0
aXZpdHlJblNlY29uZHMgKz0gc2Vjb25kczsKLSAgICB9Ci0gICAgYm9vbCBpc0luYWN0aXZlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBpbmFjdGl2ZVNlY29uZHNUb2xlcmFu
Y2UgPSAzOwotICAgICAgICByZXR1cm4gbV9pbmFjdGl2aXR5SW5TZWNvbmRzID4gaW5hY3RpdmVT
ZWNvbmRzVG9sZXJhbmNlOwotICAgIH0KLSAgICBib29sIGlzSW5Vc2UoKSBjb25zdCB7IHJldHVy
biAhIW1fYXJlYUFsbG9jYXRvcjsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgYnVpbGRMYXlvdXRJ
Zk5lZWRlZCgpOwotCi0gICAgSUQgbV9pZCB7IDAgfTsKLSAgICBDbGllbnQmIG1fY2xpZW50Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHZW5lcmFsQXJlYUFsbG9jYXRvcj4gbV9hcmVhQWxsb2NhdG9y
OwotICAgIFJlZjxOaWNvc2lhOjpCdWZmZXI+IG1fYnVmZmVyOwotICAgIGRvdWJsZSBtX2luYWN0
aXZpdHlJblNlY29uZHMgeyAwIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKaW5kZXggNjBlOGRhNTA0OTkxMjA1YmViY2NhYWFlMjczNmI3OTlmMGRmOTNhYy4u
OTc4NTk2YjBlNmRkNTE4YzhiN2Y3ZDRlYmUwZjczOTVhODY4N2Q3YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNDMxLDcgKzQzMSw2IEBAIHZvaWQgSW50ZXJuYWxzOjpy
ZXNldFRvQ29uc2lzdGVudFN0YXRlKFBhZ2UmIHBhZ2UpCiAgICAgICAgIG1haW5GcmFtZVZpZXct
PnNldEZpeGVkTGF5b3V0U2l6ZShJbnRTaXplKCkpOwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKICAgICAgICAgbWFpbkZyYW1lVmlldy0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3Qo
SW50UmVjdCgpKTsKLSAgICAgICAgcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5yZXNldFVwZGF0ZUF0
bGFzRm9yVGVzdGluZygpOwogI2VuZGlmCiAgICAgICAgIGlmIChhdXRvKiBiYWNraW5nID0gbWFp
bkZyYW1lVmlldy0+dGlsZWRCYWNraW5nKCkpCiAgICAgICAgICAgICBiYWNraW5nLT5zZXRUaWxl
U2l6ZVVwZGF0ZURlbGF5RGlzYWJsZWRGb3JUZXN0aW5nKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCA5OGMyNWQzNmM0NmE3N2E1MjI3Y2I0MWVj
MzQxZjUxYmVhYTllZTc2Li4yYTM4NzY3ZDVjNzZiZDI0NjNmNmUyMDUxNTFmZTk5ZGRiZmNlNDBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCkBAIC0zODAsMzgg
KzM4MCwxMSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZXNJZk5l
ZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjbwogICAgIGZvciAoYXV0byYgdGlsZSA6
IHN0YXRlLnRpbGVzVG9VcGRhdGUpIHsKICAgICAgICAgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
IHN1cmZhY2VVcGRhdGVJbmZvID0gdGlsZS51cGRhdGVJbmZvOwogCi0gICAgICAgIGF1dG8gc3Vy
ZmFjZUl0ID0gbV9zdXJmYWNlcy5maW5kKHN1cmZhY2VVcGRhdGVJbmZvLmF0bGFzSUQpOwotICAg
ICAgICBBU1NFUlQoc3VyZmFjZUl0ICE9IG1fc3VyZmFjZXMuZW5kKCkpOwotCi0gICAgICAgIGJh
Y2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlLnRpbGVJRCwgc3VyZmFjZVVwZGF0ZUluZm8udXBk
YXRlUmVjdCwgdGlsZS50aWxlUmVjdCwgc3VyZmFjZUl0LT52YWx1ZS5jb3B5UmVmKCksIHN1cmZh
Y2VVcGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpOworICAgICAgICBiYWNraW5nU3RvcmUtPnVwZGF0
ZVRpbGUodGlsZS50aWxlSUQsIHN1cmZhY2VVcGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGUudGls
ZVJlY3QsIHN1cmZhY2VVcGRhdGVJbmZvLmJ1ZmZlci5jb3B5UmVmKCksIHsgMCwgMCB9KTsKICAg
ICAgICAgY29tbWl0U2NvcGUuYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFj
a2luZ1N0b3JlKTsKICAgICB9CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpz
eW5jVXBkYXRlQXRsYXNlcyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQot
ewotICAgIGZvciAoYXV0byYgYXRsYXMgOiBzdGF0ZS51cGRhdGVBdGxhc2VzVG9DcmVhdGUpCi0g
ICAgICAgIGNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzLmZpcnN0LCBhdGxhcy5zZWNvbmQuY29weVJl
ZigpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQsIFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+JiYgYnVmZmVyKQot
ewotICAgIEFTU0VSVCghbV9zdXJmYWNlcy5jb250YWlucyhhdGxhc0lEKSk7Ci0gICAgbV9zdXJm
YWNlcy5hZGQoYXRsYXNJRCwgV1RGTW92ZShidWZmZXIpKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0g
ICAgQVNTRVJUKG1fc3VyZmFjZXMuY29udGFpbnMoYXRsYXNJRCkpOwotICAgIG1fc3VyZmFjZXMu
cmVtb3ZlKGF0bGFzSUQpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVs
ZWFzZVVwZGF0ZUF0bGFzZXMoY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgYXRsYXNlc1RvUmVtb3Zl
KQotewotICAgIGZvciAoYXV0byYgYXRsYXMgOiBhdGxhc2VzVG9SZW1vdmUpCi0gICAgICAgIHJl
bW92ZVVwZGF0ZUF0bGFzKGF0bGFzKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnN5bmNJbWFnZUJhY2tpbmdzKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3Rh
dGUsIENvbW1pdFNjb3BlJiBjb21taXRTY29wZSkKIHsKICAgICBmb3IgKGF1dG8mIGltYWdlIDog
c3RhdGUuaW1hZ2VzVG9SZW1vdmUpCkBAIC00OTUsNyArNDY4LDYgQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlJgogICAgICAgICBzZXRSb290TGF5ZXJJRChzdGF0ZS5yb290Q29tcG9zaXRpbmdMYXll
cik7CiAKICAgICBzeW5jSW1hZ2VCYWNraW5ncyhzdGF0ZSwgY29tbWl0U2NvcGUpOwotICAgIHN5
bmNVcGRhdGVBdGxhc2VzKHN0YXRlKTsKIAogICAgIGZvciAoYXV0byYgbGF5ZXIgOiBzdGF0ZS5s
YXllcnNUb1VwZGF0ZSkKICAgICAgICAgc2V0TGF5ZXJTdGF0ZShsYXllci5maXJzdCwgbGF5ZXIu
c2Vjb25kLCBjb21taXRTY29wZSk7CkBAIC01MzEsNyArNTAzLDYgQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnB1cmdlR0xSZXNvdXJjZXMoKQogICAgICAgICBwcm94eS0+aW52YWxp
ZGF0ZSgpOwogICAgIG1fcGxhdGZvcm1MYXllclByb3hpZXMuY2xlYXIoKTsKICNlbmRpZgotICAg
IG1fc3VyZmFjZXMuY2xlYXIoKTsKIAogICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKICAgICBt
X3Jvb3RMYXllcklEID0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4IGFkNGM4MTU2NzMyMGFhMzRjNWY4NDJmM2VjM2Q2
NmJkMDIwOTliNzAuLjI2NTlmNzgyMjFmYTJlMzNiM2E2NjQ3YjI4MjIyOTdjMWNiZWQ3M2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaApAQCAtODcsOCArODcsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRWaWV3QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNv
bG9yJiBjb2xvcikgeyBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsgfQogICAgIFdlYkNv
cmU6OkNvbG9yIHZpZXdCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdCYWNr
Z3JvdW5kQ29sb3I7IH0KIAotICAgIHZvaWQgcmVsZWFzZVVwZGF0ZUF0bGFzZXMoY29uc3QgVmVj
dG9yPHVpbnQzMl90PiYpOwotCiBwcml2YXRlOgogICAgIHN0cnVjdCBDb21taXRTY29wZSB7CiAg
ICAgICAgIENvbW1pdFNjb3BlKCkgPSBkZWZhdWx0OwpAQCAtMTEyLDEwICsxMTAsNiBAQCBwcml2
YXRlOgogICAgIHZvaWQgc3luY1BsYXRmb3JtTGF5ZXJJZk5lZWRlZChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0
ZSYpOwogICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnRJZk5lZWRlZChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJT
dGF0ZSYpOwogCi0gICAgdm9pZCBzeW5jVXBkYXRlQXRsYXNlcyhjb25zdCBXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKLSAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQz
Ml90IGF0bGFzSUQsIFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+JiYpOwotICAgIHZvaWQgcmVtb3Zl
VXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0KICAgICB2b2lkIHN5bmNJbWFnZUJhY2tp
bmdzKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYsIENvbW1pdFNjb3Bl
Jik7CiAgICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCk7CiAgICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPE5pY29zaWE6OkJ1ZmZlcj4mJiwgQ29tbWl0U2Nv
cGUmKTsKQEAgLTE1OSw4ICsxNTMsNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyKiwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHk+PiBtX3BsYXRmb3JtTGF5ZXJQcm94aWVzOwogI2VuZGlmCiAKLSAgICBIYXNo
TWFwPHVpbnQzMl90IC8qIGF0bGFzSUQgKi8sIFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+PiBtX3N1
cmZhY2VzOwotCiAgICAgLy8gQmVsb3cgdHdvIG1lbWJlcnMgYXJlIGFjY2Vzc2VkIGJ5IG9ubHkg
dGhlIG1haW4gdGhyZWFkLiBUaGUgcGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUgbWFpbiB0
aHJlYWQgdG8gYWNjZXNzIGJvdGggbWVtYmVycy4KICAgICBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmVDbGllbnQqIG1fY2xpZW50OwogICAgIGJvb2wgbV9pc0FjdGl2ZSB7IGZhbHNlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVk
Y29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9y
LmNwcAppbmRleCA5ZDc2N2E4OGE2MmNlMjk5ODI0MDgyOTdkMWZmOGYyNWI3NGRlM2NlLi43ODgy
NGQ0ODMxODQwNjU4MWQ4YzJmYjlhMTUyYTViYWQzOWYwNTNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJl
YWRlZENvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKQEAgLTE5
NSw3ICsxOTUsNiBAQCB2b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6cmVuZGVyTGF5ZXJUcmVlKCkK
ICAgICBib29sIGRyYXdzQmFja2dyb3VuZDsKICAgICBib29sIG5lZWRzUmVzaXplOwogICAgIFZl
Y3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGU+IHN0YXRlczsKLSAgICBWZWN0
b3I8dWludDMyX3Q+IGF0bGFzZXNUb1JlbW92ZTsKIAogICAgIHsKICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9hdHRyaWJ1dGVzLmxvY2spOwpAQCAtMjA2LDcgKzIwNSw2IEBAIHZvaWQgVGhy
ZWFkZWRDb21wb3NpdG9yOjpyZW5kZXJMYXllclRyZWUoKQogICAgICAgICBuZWVkc1Jlc2l6ZSA9
IG1fYXR0cmlidXRlcy5uZWVkc1Jlc2l6ZTsKIAogICAgICAgICBzdGF0ZXMgPSBXVEZNb3ZlKG1f
YXR0cmlidXRlcy5zdGF0ZXMpOwotICAgICAgICBhdGxhc2VzVG9SZW1vdmUgPSBXVEZNb3ZlKG1f
YXR0cmlidXRlcy5hdGxhc2VzVG9SZW1vdmUpOwogCiAgICAgICAgIGlmICghc3RhdGVzLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgLy8gQ2xpZW50IGhhcyB0byBiZSBub3RpZmllZCB1cG9uIGZp
bmlzaGluZyB0aGlzIHNjZW5lIHVwZGF0ZS4KQEAgLTI0MSw3ICsyMzksNiBAQCB2b2lkIFRocmVh
ZGVkQ29tcG9zaXRvcjo6cmVuZGVyTGF5ZXJUcmVlKCkKICAgICB9CiAKICAgICBtX3NjZW5lLT5h
cHBseVN0YXRlQ2hhbmdlcyhzdGF0ZXMpOwotICAgIG1fc2NlbmUtPnJlbGVhc2VVcGRhdGVBdGxh
c2VzKGF0bGFzZXNUb1JlbW92ZSk7CiAgICAgbV9zY2VuZS0+cGFpbnRUb0N1cnJlbnRHTENvbnRl
eHQodmlld3BvcnRUcmFuc2Zvcm0sIDEsIEZsb2F0UmVjdCB7IEZsb2F0UG9pbnQgeyB9LCB2aWV3
cG9ydFNpemUgfSwKICAgICAgICAgQ29sb3I6OnRyYW5zcGFyZW50LCAhZHJhd3NCYWNrZ3JvdW5k
LCBzY3JvbGxQb3NpdGlvbiwgbV9wYWludEZsYWdzKTsKIApAQCAtMjkzLDEzICsyOTAsNiBAQCB2
b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6dXBkYXRlU2NlbmVTdGF0ZShjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQogICAgIG1fY29tcG9zaXRpbmdSdW5Mb29wLT5zY2hlZHVs
ZVVwZGF0ZSgpOwogfQogCi12b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6cmVsZWFzZVVwZGF0ZUF0
bGFzZXMoY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgYXRsYXNlc1RvUmVtb3ZlKQotewotICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fYXR0cmlidXRlcy5sb2NrKTsKLSAgICBtX2F0dHJpYnV0ZXMuYXRs
YXNlc1RvUmVtb3ZlLmFwcGVuZFZlY3RvcihhdGxhc2VzVG9SZW1vdmUpOwotICAgIG1fY29tcG9z
aXRpbmdSdW5Mb29wLT5zY2hlZHVsZVVwZGF0ZSgpOwotfQotCiAjaWYgVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVm
cmVzaE1vbml0b3I+IFRocmVhZGVkQ29tcG9zaXRvcjo6ZGlzcGxheVJlZnJlc2hNb25pdG9yKFBs
YXRmb3JtRGlzcGxheUlEKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9z
aXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaAppbmRleCBjZjMwNDJlMGQwNjdjYTVjMDJkZDAzYzY3
NmY2NzgzY2MyN2MyNTNmLi5mZTM3YjIxODA4NzFkOWI1OTNmYjhjMjE0OWU5YWM4ODE3OGFlODNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3Ro
cmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENv
bXBvc2l0b3IuaApAQCAtNzYsNyArNzYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREcmF3c0Jh
Y2tncm91bmQoYm9vbCk7CiAKICAgICB2b2lkIHVwZGF0ZVNjZW5lU3RhdGUoY29uc3QgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJik7Ci0gICAgdm9pZCByZWxlYXNlVXBkYXRlQXRs
YXNlcyhjb25zdCBWZWN0b3I8dWludDMyX3Q+Jik7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsK
IApAQCAtMTIxLDcgKzEyMCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgbmVlZHNSZXNpemUg
eyBmYWxzZSB9OwogCiAgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
U3RhdGU+IHN0YXRlczsKLSAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBhdGxhc2VzVG9SZW1vdmU7
CiAKICAgICAgICAgYm9vbCBjbGllbnRSZW5kZXJzTmV4dEZyYW1lIHsgZmFsc2UgfTsKICAgICAg
ICAgYm9vbCBjb29yZGluYXRlVXBkYXRlQ29tcGxldGlvbldpdGhDbGllbnQgeyBmYWxzZSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCBkNGVlZTMyYzlkYjkxNzJjZmM5MDRiMGVmNGRiNjRi
MzY2MjRkMDFiLi5hNzZjMjczMWYwNmY3YTA1ZDZiMGIxZmFiZDk5YzA4YjgwOTI2YTExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtNTU0LDExICs1NTQsNiBAQCB2b2lkIFdlYkNocm9tZUNs
aWVudDo6ZGVsZWdhdGVkU2Nyb2xsUmVxdWVzdGVkKGNvbnN0IEludFBvaW50JiBzY3JvbGxPZmZz
ZXQpCiB7CiAgICAgbV9wYWdlLnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKHNjcm9sbE9mZnNldCk7CiB9
Ci0KLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZXNldFVwZGF0ZUF0bGFzRm9yVGVzdGluZygpCi17
Ci0gICAgbV9wYWdlLmRyYXdpbmdBcmVhKCktPnJlc2V0VXBkYXRlQXRsYXNGb3JUZXN0aW5nKCk7
Ci19CiAjZW5kaWYKIAogSW50UG9pbnQgV2ViQ2hyb21lQ2xpZW50OjpzY3JlZW5Ub1Jvb3RWaWV3
KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCAyMjUy
YzUxNDgwOTgxOGU3NmZlNzg0MzA0NmNmYmI1YWMyZWY0MzlhLi42NjA0OWViZjZlNzQ3MTAxNjgx
MzdlMDNlMzQ3ODEyODljNjYwMzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0xMTEsNyArMTEx
LDYgQEAgcHJpdmF0ZToKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICB2b2lk
IGRlbGVnYXRlZFNjcm9sbFJlcXVlc3RlZChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2Nyb2xs
T2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHJlc2V0VXBkYXRlQXRsYXNGb3JUZXN0aW5nKCkgZmlu
YWw7CiAjZW5kaWYKIAogICAgIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvUm9vdFZpZXcoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAK
aW5kZXggNmJmZWJmYjdiY2RmYjE5YzM3NTI3ZGM5Y2I0ODllMmVkY2I5YzQ5NS4uNDQ1MThkNDRh
MTYyMTVlODI3ZGE3ODViNmQ1OTU3YzAwNGM0YTU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAK
QEAgLTM4MywxNiArMzgzLDYgQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCkKICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
dm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpyZXNldFVwZGF0ZUF0bGFzRm9yVGVzdGluZygp
Ci17Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3QgfHwgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xheWVyVHJlZUhvc3Qt
PmNsZWFyVXBkYXRlQXRsYXNlcygpOwotfQotI2VuZGlmCi0KIHZvaWQgQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlTm93KCkKIHsKICAgICBBU1NF
UlQoIW1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmgKaW5kZXggM2I2
NDk0NzJkNGFjNzBiNzI1ZDg4MTcxM2I0MmJiYzc1MzAzZmZiYy4uZWZjNjUwZTlkYjFlM2Q2ZTgy
NWY4ZWRkMjQ5ZDAyNmIyOGVhMjViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaApAQCAtNzUsNyArNzUs
NiBAQCBwcm90ZWN0ZWQ6CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgdm9p
ZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVz
JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzZXRVcGRhdGVBdGxhc0ZvclRlc3RpbmcoKSBvdmVy
cmlkZTsKICNlbmRpZgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoVEVY
VFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLmNwcAppbmRleCA3ODg2NjJlOTY5ZjAwYzBkMTFmMjg3NWQ0YjhkZjJlMzIw
ZmRkZWI4Li4xOTE4MjQ0OTQxMTMzMjExZjFmZWUzMzk2NTY2ODFkYTRiMDZiYjI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAK
QEAgLTUxLDExICs1MSw3IEBAIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3IoUGFnZSogcGFnZSwgQ29tcG9zaXRpbmdDb29yZGluYXRvCiAgICAgOiBtX3BhZ2Uo
cGFnZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fcGFpbnRpbmdFbmdpbmUoTmlj
b3NpYTo6UGFpbnRpbmdFbmdpbmU6OmNyZWF0ZSgpKQotICAgICwgbV9yZWxlYXNlSW5hY3RpdmVB
dGxhc2VzVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCiB7Ci0jaWYgVVNFKEdMSUJfRVZF
TlRfTE9PUCkKLSAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zZXRQcmlvcml0eShS
dW5Mb29wU291cmNlUHJpb3JpdHk6OlJlbGVhc2VVbnVzZWRSZXNvdXJjZXNUaW1lcik7Ci0jZW5k
aWYKIH0KIAogQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6fkNvbXBvc2l0aW5nQ29vcmRpbmF0b3Io
KQpAQCAtMTM4LDEwICsxMzQsNiBAQCBib29sIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlcygpCiAKICAgICAgICAgbV9jbGllbnQuY29tbWl0U2NlbmVTdGF0
ZShtX3N0YXRlKTsKIAotICAgICAgICBpZiAoIW1fYXRsYXNlc1RvUmVtb3ZlLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIG1fY2xpZW50LnJlbGVhc2VVcGRhdGVBdGxhc2VzKG1fYXRsYXNlc1RvUmVt
b3ZlKTsKLSAgICAgICAgbV9hdGxhc2VzVG9SZW1vdmUuY2xlYXIoKTsKLQogICAgICAgICBjbGVh
clBlbmRpbmdTdGF0ZUNoYW5nZXMoKTsKICAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxz
ZTsKICAgICB9CkBAIC0xNzksOCArMTcxLDYgQEAgdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKQogICAgIG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUu
Y2xlYXIoKTsKICAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmNsZWFyKCk7CiAgICAgbV9zdGF0
ZS5pbWFnZXNUb0NsZWFyLmNsZWFyKCk7Ci0KLSAgICBtX3N0YXRlLnVwZGF0ZUF0bGFzZXNUb0Ny
ZWF0ZS5jbGVhcigpOwogfQogCiB2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmluaXRpYWxp
emVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCkKQEAgLTI4NSwxOCArMjc1LDYgQEAgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0
ZUdyYXBoaWNzTGF5ZXIoR3JhcGgKICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
TGF5ZXI+KGxheWVyKTsKIH0KIAotdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVV
cGRhdGVBdGxhcyhVcGRhdGVBdGxhczo6SUQgaWQsIFJlZjxOaWNvc2lhOjpCdWZmZXI+JiYgYnVm
ZmVyKQotewotICAgIG1fc3RhdGUudXBkYXRlQXRsYXNlc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1h
a2VfcGFpcihpZCwgV1RGTW92ZShidWZmZXIpKSk7Ci19Ci0KLXZvaWQgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMoVXBkYXRlQXRsYXM6OklEIGlkKQotewotICAgIGlm
IChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fYXRsYXNlc1RvUmVtb3ZlLmFw
cGVuZChpZCk7Ci19Ci0KIEZsb2F0UmVjdCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjp2aXNpYmxl
Q29udGVudHNSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0
OwpAQCAtMzU2LDggKzMzNCw2IEBAIHZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6ZGV0YWNo
TGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllcikKIAogdm9pZCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJhbWUoKQogewotICAgIGZvciAoYXV0byYgYXRsYXMg
OiBtX3VwZGF0ZUF0bGFzZXMpCi0gICAgICAgIGF0bGFzLT5kaWRTd2FwQnVmZmVycygpOwogfQog
CiB2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCkBAIC0z
NjgsMjggKzM0NCw2IEBAIHZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5n
U3RvcmVzKCkKICAgICAgICAgcmVnaXN0ZXJlZExheWVyLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsK
IAogICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwotICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVh
cigpOwotfQotCi1SZWY8Tmljb3NpYTo6QnVmZmVyPiBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpn
ZXRDb29yZGluYXRlZEJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBOaWNvc2lhOjpCdWZmZXI6
OkZsYWdzIGZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UmVjdCYgYWxsb2NhdGVkUmVjdCkK
LXsKLSAgICBmb3IgKGF1dG8mIGF0bGFzIDogbV91cGRhdGVBdGxhc2VzKSB7Ci0gICAgICAgIGlm
IChhdGxhcy0+c3VwcG9ydHNBbHBoYSgpID09IChmbGFncyAmIE5pY29zaWE6OkJ1ZmZlcjo6U3Vw
cG9ydHNBbHBoYSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIGJ1ZmZlciA9IGF0bGFzLT5nZXRD
b29yZGluYXRlZEJ1ZmZlcihzaXplLCBhdGxhc0lELCBhbGxvY2F0ZWRSZWN0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gKmJ1ZmZlcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBj
b25zdCBJbnRTaXplIHNfYXRsYXNTaXplIHsgMTAyNCwgMTAyNCB9OyAvLyBUaGlzIHNob3VsZCBi
ZSBhIHNxdWFyZS4KLSAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8
VXBkYXRlQXRsYXM+KCp0aGlzLCBzX2F0bGFzU2l6ZSwgZmxhZ3MpKTsKLSAgICBzY2hlZHVsZVJl
bGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKLQotICAgIC8vIFNwZWNpZmllZCBzaXplIHNob3VsZCBh
bHdheXMgZml0IGludG8gYSBuZXdseS1jcmVhdGVkIFVwZGF0ZUF0bGFzIGFuZCBhIG5vbi1udWxs
Ci0gICAgLy8gQ29vcmRpbmF0ZWRCdWZmZXIgdmFsdWUgc2hvdWxkIGJlIHJldHVybmVkIGZyb20g
VXBkYXRlQXRsYXM6OmdldENvb3JkaW5hdGVkQnVmZmVyKCkuCi0gICAgLy8gV2UgdXNlIGEgUkVM
RUFTRV9BU1NFUlQoKSB0byBzdG9wIGFueSBtYWxmdW5jdGlvbmluZyBhdCB0aGUgZWFybGllc3Qg
cG9pbnQuCi0gICAgYXV0byBidWZmZXIgPSBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLT5nZXRDb29y
ZGluYXRlZEJ1ZmZlcihzaXplLCBhdGxhc0lELCBhbGxvY2F0ZWRSZWN0KTsKLSAgICBSRUxFQVNF
X0FTU0VSVChidWZmZXIpOwotICAgIHJldHVybiAqYnVmZmVyOwogfQogCiBOaWNvc2lhOjpQYWlu
dGluZ0VuZ2luZSYgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFpbnRpbmdFbmdpbmUoKQpAQCAt
Mzk3LDY0ICszNTEsNiBAQCBOaWNvc2lhOjpQYWludGluZ0VuZ2luZSYgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6cGFpbnRpbmdFbmdpbmUoKQogICAgIHJldHVybiAqbV9wYWludGluZ0VuZ2luZTsK
IH0KIAotY29uc3QgU2Vjb25kcyByZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCB7
IDUwMF9tcyB9OwotCi12b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFz
ZUluYWN0aXZlQXRsYXNlcygpCi17Ci0gICAgaWYgKCFtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNU
aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5z
dGFydFJlcGVhdGluZyhyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Ci19Ci0K
LXZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
RmlyZWQoKQotewotICAgIHJlbGVhc2VBdGxhc2VzKE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2lu
Z2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCkgPyBSZWxlYXNlVW51c2VkIDogUmVsZWFz
ZUluYWN0aXZlKTsKLX0KLQotdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpyZWxlYXNlQXRs
YXNlcyhSZWxlYXNlQXRsYXNQb2xpY3kgcG9saWN5KQotewotICAgIC8vIFdlIGFsd2F5cyB3YW50
IHRvIGtlZXAgb25lIGF0bGFzIGZvciByb290IGNvbnRlbnRzIGxheWVyLgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxVcGRhdGVBdGxhcz4gYXRsYXNUb0tlZXBBbnl3YXk7Ci0gICAgYm9vbCBmb3VuZEFj
dGl2ZUF0bGFzRm9yUm9vdENvbnRlbnRzTGF5ZXIgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0g
bV91cGRhdGVBdGxhc2VzLnNpemUoKSAtIDE7ICBpID49IDA7IC0taSkgewotICAgICAgICBVcGRh
dGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGJvb2wg
aW5Vc2UgPSBhdGxhcy0+aXNJblVzZSgpOwotICAgICAgICBpZiAoIWluVXNlKQotICAgICAgICAg
ICAgYXRsYXMtPmFkZFRpbWVJbmFjdGl2ZShyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRl
cnZhbC52YWx1ZSgpKTsKLSAgICAgICAgYm9vbCB1c2FibGVGb3JSb290Q29udGVudHNMYXllciA9
ICFhdGxhcy0+c3VwcG9ydHNBbHBoYSgpOwotICAgICAgICBpZiAoYXRsYXMtPmlzSW5hY3RpdmUo
KSB8fCAoIWluVXNlICYmIHBvbGljeSA9PSBSZWxlYXNlVW51c2VkKSkgewotICAgICAgICAgICAg
aWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yUm9vdENvbnRlbnRzTGF5ZXIgJiYgIWF0bGFzVG9LZWVw
QW55d2F5ICYmIHVzYWJsZUZvclJvb3RDb250ZW50c0xheWVyKQotICAgICAgICAgICAgICAgIGF0
bGFzVG9LZWVwQW55d2F5ID0gV1RGTW92ZShtX3VwZGF0ZUF0bGFzZXNbaV0pOwotICAgICAgICAg
ICAgbV91cGRhdGVBdGxhc2VzLnJlbW92ZShpKTsKLSAgICAgICAgfSBlbHNlIGlmICh1c2FibGVG
b3JSb290Q29udGVudHNMYXllcikKLSAgICAgICAgICAgIGZvdW5kQWN0aXZlQXRsYXNGb3JSb290
Q29udGVudHNMYXllciA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFz
Rm9yUm9vdENvbnRlbnRzTGF5ZXIgJiYgYXRsYXNUb0tlZXBBbnl3YXkpCi0gICAgICAgIG1fdXBk
YXRlQXRsYXNlcy5hcHBlbmQoYXRsYXNUb0tlZXBBbnl3YXkucmVsZWFzZSgpKTsKLQotICAgIG1f
dXBkYXRlQXRsYXNlcy5zaHJpbmtUb0ZpdCgpOwotCi0gICAgaWYgKG1fdXBkYXRlQXRsYXNlcy5z
aXplKCkgPD0gMSkKLSAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuc3RvcCgp
OwotCi0gICAgaWYgKCFtX2F0bGFzZXNUb1JlbW92ZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fY2xp
ZW50LnJlbGVhc2VVcGRhdGVBdGxhc2VzKG1fYXRsYXNlc1RvUmVtb3ZlKTsKLSAgICBtX2F0bGFz
ZXNUb1JlbW92ZS5jbGVhcigpOwotfQotCi12b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNs
ZWFyVXBkYXRlQXRsYXNlcygpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdG9wKCk7Ci0gICAgbV91
cGRhdGVBdGxhc2VzLmNsZWFyKCk7Ci0KLSAgICBpZiAoIW1fYXRsYXNlc1RvUmVtb3ZlLmlzRW1w
dHkoKSkKLSAgICAgICAgbV9jbGllbnQucmVsZWFzZVVwZGF0ZUF0bGFzZXMobV9hdGxhc2VzVG9S
ZW1vdmUpOwotICAgIG1fYXRsYXNlc1RvUmVtb3ZlLmNsZWFyKCk7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaAppbmRleCA2
Njk1NGZmNTgxN2NhYmY0Y2U4OGVlMTY2YTgxMDY5NThhMTdhMDFlLi42MWEyYjYyNjA0YmJhMjRk
MDgwZGFjNjQwMTI3ZjEwOTVkMmY3ZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJl
Y3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05pY29zaWFCdWZmZXIuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1VwZGF0ZUF0bGFzLmg+CiAKIG5hbWVzcGFjZSBOaWNvc2lhIHsKIGNsYXNzIFBhaW50aW5n
RW5naW5lOwpAQCAtNTQsNyArNTMsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3IgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNs
aWVudAogICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dAogICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDbGllbnQK
LSAgICAsIHB1YmxpYyBXZWJDb3JlOjpVcGRhdGVBdGxhczo6Q2xpZW50CiAgICAgLCBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOwogcHVibGljOgpAQCAtNjMsMTQgKzYxLDEyIEBAIHB1
YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZsdXNoUm9vdExheWVyKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KSA9IDA7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0U2NlbmVTdGF0ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlVXBkYXRlQXRsYXNlcyhjb25zdCBWZWN0
b3I8dWludDMyX3Q+JikgPSAwOwogICAgIH07CiAKICAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
KFdlYkNvcmU6OlBhZ2UqLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQmKTsKICAgICB2
aXJ0dWFsIH5Db21wb3NpdGluZ0Nvb3JkaW5hdG9yKCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUo
KTsKLSAgICB2b2lkIGNsZWFyVXBkYXRlQXRsYXNlcygpOwogCiAgICAgdm9pZCBzZXRSb290Q29t
cG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAgICAgdm9pZCBzZXRWaWV3
T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CkBAIC05NSwxMSArOTEs
NiBAQCBwdWJsaWM6CiAgICAgZG91YmxlIG5leHRBbmltYXRpb25TZXJ2aWNlVGltZSgpIGNvbnN0
OwogCiBwcml2YXRlOgotICAgIGVudW0gUmVsZWFzZUF0bGFzUG9saWN5IHsKLSAgICAgICAgUmVs
ZWFzZUluYWN0aXZlLAotICAgICAgICBSZWxlYXNlVW51c2VkCi0gICAgfTsKLQogICAgIC8vIEdy
YXBoaWNzTGF5ZXJDbGllbnQKICAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogICAgIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMTYsMTQgKzEwNyw5IEBAIHByaXZhdGU6CiAgICAg
V2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCBvdmVycmlkZTsK
ICAgICBSZWY8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFj
a2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXRhY2hM
YXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKLSAgICBS
ZWY8Tmljb3NpYTo6QnVmZmVyPiBnZXRDb29yZGluYXRlZEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgTmljb3NpYTo6QnVmZmVyOjpGbGFncywgdWludDMyX3QmLCBXZWJDb3JlOjpJbnRS
ZWN0Jikgb3ZlcnJpZGU7CiAgICAgTmljb3NpYTo6UGFpbnRpbmdFbmdpbmUmIHBhaW50aW5nRW5n
aW5lKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJikgb3Zl
cnJpZGU7CiAKLSAgICAvLyBVcGRhdGVBdGxhczo6Q2xpZW50Ci0gICAgdm9pZCBjcmVhdGVVcGRh
dGVBdGxhcyhXZWJDb3JlOjpVcGRhdGVBdGxhczo6SUQsIFJlZjxOaWNvc2lhOjpCdWZmZXI+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoV2ViQ29yZTo6VXBkYXRlQXRs
YXM6OklEKSBvdmVycmlkZTsKLQogICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIo
V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6VHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVu
dCYpIG92ZXJyaWRlOwogCkBAIC0xMzMsMTAgKzExOSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHB1cmdlQmFja2luZ1N0b3JlcygpOwogCi0gICAgdm9pZCBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2
ZUF0bGFzZXMoKTsKLSAgICB2b2lkIHJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKCk7
Ci0gICAgdm9pZCByZWxlYXNlQXRsYXNlcyhSZWxlYXNlQXRsYXNQb2xpY3kpOwotCiAgICAgZG91
YmxlIHRpbWVzdGFtcCgpIGNvbnN0OwogCiAgICAgV2ViQ29yZTo6UGFnZSogbV9wYWdlOwpAQCAt
MTUyLDggKzEzNCw2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lELCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+
PiBtX2ltYWdlQmFja2luZ3M7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3NpYTo6UGFpbnRp
bmdFbmdpbmU+IG1fcGFpbnRpbmdFbmdpbmU7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpVcGRhdGVBdGxhcz4+IG1fdXBkYXRlQXRsYXNlczsKLSAgICBWZWN0b3I8dWludDMy
X3Q+IG1fYXRsYXNlc1RvUmVtb3ZlOwogCiAgICAgLy8gV2UgZG9uJ3Qgc2VuZCB0aGUgbWVzc2Fn
ZXMgcmVsYXRlZCB0byByZWxlYXNpbmcgcmVzb3VyY2VzIHRvIHJlbmRlcmVyIGR1cmluZyBwdXJn
aW5nLCBiZWNhdXNlIHJlbmRlcmVyIGFscmVhZHkgaGFkIHJlbW92ZWQgYWxsIHJlc291cmNlcy4K
ICAgICBib29sIG1faXNEZXN0cnVjdGluZyB7IGZhbHNlIH07CkBAIC0xNjMsNyArMTQzLDYgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyIHsg
ZmFsc2UgfTsKIAogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7
Ci0gICAgUnVuTG9vcDo6VGltZXI8Q29tcG9zaXRpbmdDb29yZGluYXRvcj4gbV9yZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzVGltZXI7CiAKICAgICBkb3VibGUgbV9sYXN0QW5pbWF0aW9uU2VydmljZVRp
bWUgeyAwIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IDNmMTA1YzhhMGRlNDY1ODI2Mzk1NWRlYzQ5YmE1
Yzk2NTFiYmZiYTkuLjA5MmFhMzg1YzkwM2RmNGI2NDUwODY2M2U1YmIzMjFjNTI0ODBmNGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5jcHAKQEAgLTIzNiwxMCArMjM2LDUgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnNjaGVkdWxlQW5pbWF0aW9uKCkKICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNo
b3QoMV9zICogbV9jb29yZGluYXRvci5uZXh0QW5pbWF0aW9uU2VydmljZVRpbWUoKSk7CiB9CiAK
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjbGVhclVwZGF0ZUF0bGFzZXMoKQotewot
ICAgIG1fY29vcmRpbmF0b3IuY2xlYXJVcGRhdGVBdGxhc2VzKCk7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4
IGQ2MzA2Y2NhM2M0M2JjMWMxYjlkZjU5YTdjYmY0YzY0ODE3NTQ0YWUuLjkxNTliNjg0MDllYzI3
MTM4Y2NmZjZlYTVhZTVhMzU3OTA5MTcxNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtNTcsOCArNTcsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBvdmVycmlk
ZTsKICAgICB2b2lkIHBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgpIG92ZXJyaWRl
OwogCi0gICAgdm9pZCBjbGVhclVwZGF0ZUF0bGFzZXMoKSBvdmVycmlkZTsKLQogICAgIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKIApAQCAt
NzIsNyArNzAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkaWRGbHVzaFJvb3RMYXllcihjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkgb3ZlcnJpZGUgeyBzY2hlZHVsZUxheWVyRmx1c2go
KTsgfTsKICAgICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWxlYXNlVXBkYXRlQXRsYXNl
cyhjb25zdCBWZWN0b3I8dWludDMyX3Q+Jikgb3ZlcnJpZGUgeyB9OwogCiBwcml2YXRlOgogICAg
IHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5k
ZXggYTRjMTc3NDQ5MjQ1ZDhhMTIzM2U4NjU2ZDA0NThmMzA0MzgyNDhiNi4uZDBjNGMyNmE3ODRk
Y2VjMmUwNzdjNjMwMTFhM2Y3N2JlNzRiMzBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAK
QEAgLTI0OCwxMSArMjQ4LDYgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Y29tbWl0U2NlbmVTdGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWMKICAgICBtX2NvbXBv
c2l0b3ItPnVwZGF0ZVNjZW5lU3RhdGUoc3RhdGUpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlVXBkYXRlQXRsYXNlcyhjb25zdCBWZWN0b3I8dWlu
dDMyX3Q+JiBhdGxhc2VzVG9SZW1vdmUpCi17Ci0gICAgbV9jb21wb3NpdG9yLT5yZWxlYXNlVXBk
YXRlQXRsYXNlcyhhdGxhc2VzVG9SZW1vdmUpOwotfQotCiB2b2lkIFRocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKGJvb2wgZGlzY2FyZGFibGUpCiB7CiAg
ICAgbV9pc0Rpc2NhcmRhYmxlID0gZGlzY2FyZGFibGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5k
ZXggOWVhZmJkYmQzZDE3MmU5ODI2NTU4ZTRiZmNhYTgzNDIyNzRhNjg5YS4uNjI5ZGRhZjYxYTcw
MjgxZmIwODhlYmMxY2ZmNGZjNjhhYWVlNzFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAt
MTEzLDcgKzExMyw2IEBAIHByaXZhdGU6CiAgICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
Q2xpZW50CiAgICAgdm9pZCBkaWRGbHVzaFJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWxlYXNl
VXBkYXRlQXRsYXNlcyhjb25zdCBWZWN0b3I8dWludDMyX3Q+Jikgb3ZlcnJpZGU7CiAKICNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQogICAgIFJlZlB0cjxX
ZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRv
cihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCBiNjUzZTM1ZDI3MjI5YWFl
Yjg2NDM0NDgxZTJmNTc5ZTFhZjdjNzQwLi5kMmUyNTQxYzUxMTFlNWJkMmQxZDViNjUxZDlkZWYy
OTZkMTZiY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhLmgKQEAgLTEzOCw3ICsxMzgsNiBAQCBwdWJsaWM6CiAKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRl
cyhXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZXNldFVwZGF0ZUF0bGFzRm9yVGVzdGluZygpID0gMDsKICNlbmRpZgogCiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKaW5kZXggZTJjMDczMzM5NDIz
OWIzODRjMDY1Yzg3OWRkMWE4NWJiNDhhYWQ2MS4uODVkZDQ1OGUwMTgwMDMxMWMzOGI1NmRhMDBm
ZDIwMTkwOTBkMjA3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QuaApAQCAtODksNyArODksNiBAQCBwdWJsaWM6CiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNEaXNjYXJkYWJsZShib29sKSB7IH07Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyVXBkYXRlQXRsYXNlcygpID0gMDsKICNlbmRpZgogCiAjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKSAmJiBQTEFURk9STShHVEspCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>