<?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>88161</bug_id>
          
          <creation_ts>2012-06-02 00:00:20 -0700</creation_ts>
          <short_desc>[Qt] Remove Qt 4 specific code paths</short_desc>
          <delta_ts>2012-08-07 05:12:53 -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>Platform</component>
          <version>528+ (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>
          <dependson>91730</dependson>
          <blocked>60842</blocked>
    
    <blocked>88162</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Simon Hausmann">hausmann</assigned_to>
          <cc>bruno.abinader</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>girish</cc>
    
    <cc>gustavo</cc>
    
    <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mrobinson</cc>
    
    <cc>noam</cc>
    
    <cc>ossy</cc>
    
    <cc>pnormand</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>639972</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-06-02 00:00:20 -0700</bug_when>
    <thetext>The maintenance of the Qt 4 and Qt 5 code paths in trunk is becoming expensive and we would like to do changes that will be even more difficult to maintain across two major versions, such as the introduction of the QtWebKitWidgets modules. Therefore this bug tracks the removal of the Qt 4 specific code paths in trunk based on the proposal and discussion at

    http://lists.webkit.org/pipermail/webkit-qt/2012-May/thread.html#2732</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640017</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-06-02 06:25:29 -0700</bug_when>
    <thetext>Can we now change our signals and slots to the new Qt5 syntax? :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658417</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-06-27 00:36:03 -0700</bug_when>
    <thetext>I&apos;m going to tackle this a bit later, unless somebody beats me to it. Prioritizing the Qt beta and my vacation first :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673441</commentid>
    <comment_count>3</comment_count>
      <attachid>153244</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-19 06:33:51 -0700</bug_when>
    <thetext>Created attachment 153244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673443</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-19 06:34:44 -0700</bug_when>
    <thetext>This patch is not for immediate landing, it will need to be synchronized with updates to build.webkit.org. But let&apos;s start here and let the EWS chew on it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673452</commentid>
    <comment_count>5</comment_count>
      <attachid>153244</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-19 06:46:50 -0700</bug_when>
    <thetext>Comment on attachment 153244
Patch

Attachment 153244 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13270896</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675547</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-07-23 01:56:16 -0700</bug_when>
    <thetext>When will we plan dropping Qt 4 build support for trunk?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675552</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-23 02:00:40 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; When will we plan dropping Qt 4 build support for trunk?

What&apos;s a good time for you? Next week? Let&apos;s talk on IRC how we could do this with regards to the bots.

At the least I guess we have to wait for the test rebasing to finish.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675621</commentid>
    <comment_count>8</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-07-23 04:44:21 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; When will we plan dropping Qt 4 build support for trunk?
&gt; 
&gt; What&apos;s a good time for you? Next week? Let&apos;s talk on IRC how we could do this with regards to the bots.
&gt; 
&gt; At the least I guess we have to wait for the test rebasing to finish.

And also to stick with a version on Qt5. I really don&apos;t have time to take care of the bot every week to update the sha. I&apos;d rather stick with a beta or something like that, with a guarantee that sanity checks were run on Mac OS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675646</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-23 05:32:41 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; When will we plan dropping Qt 4 build support for trunk?
&gt; &gt; 
&gt; &gt; What&apos;s a good time for you? Next week? Let&apos;s talk on IRC how we could do this with regards to the bots.
&gt; &gt; 
&gt; &gt; At the least I guess we have to wait for the test rebasing to finish.
&gt; 
&gt; And also to stick with a version on Qt5. I really don&apos;t have time to take care of the bot every week to update the sha. 

If maintenance of the mac bot is a time problem, is there somebody else in your team who could help with it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675650</commentid>
    <comment_count>10</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-07-23 05:41:42 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; When will we plan dropping Qt 4 build support for trunk?
&gt; &gt; &gt; 
&gt; &gt; &gt; What&apos;s a good time for you? Next week? Let&apos;s talk on IRC how we could do this with regards to the bots.
&gt; &gt; &gt; 
&gt; &gt; &gt; At the least I guess we have to wait for the test rebasing to finish.
&gt; &gt; 
&gt; &gt; And also to stick with a version on Qt5. I really don&apos;t have time to take care of the bot every week to update the sha. 
&gt; 
&gt; If maintenance of the mac bot is a time problem, is there somebody else in your team who could help with it?

Well it&apos;s just that we have a crappy MacBook Pro and it&apos;s slow to &quot;try&quot; things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685254</commentid>
    <comment_count>11</comment_count>
      <attachid>156049</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-02 05:37:36 -0700</bug_when>
    <thetext>Created attachment 156049
Patch

Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685497</commentid>
    <comment_count>12</comment_count>
      <attachid>156049</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-02 09:45:18 -0700</bug_when>
    <thetext>Comment on attachment 156049
Patch

r=me, nice stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689055</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-07 05:12:53 -0700</bug_when>
    <thetext>Committed r124879: &lt;http://trac.webkit.org/changeset/124879&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153244</attachid>
            <date>2012-07-19 06:33:51 -0700</date>
            <delta_ts>2012-08-02 05:37:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88161-20120719153406.patch</filename>
            <type>text/plain</type>
            <size>219235</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDNkOTY2NDZjMWNlMjgxN2ViY2ZlZTBk
NTkyYjQ5MDQ2MDU1NzNmNjUuLjMwNTQxZDA1M2FjMzNjOTRjZTU2OThmZWU4NDIyYjM5N2FhMDAy
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDctMTkgIFNpbW9uIEhhdXNtYW5uICA8c2lt
b24uaGF1c21hbm5Abm9raWEuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3ZlIFF0IDQgc3BlY2lm
aWMgY29kZSBwYXRocworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODgxNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdURi5wcmk6CisgICAgICAgICogV1RGLnBybzoKKyAgICAgICAgKiB3dGYvcXQvU3Ry
aW5nUXQuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OlN0cmluZyk6CisgICAgICAgIChXVEY6
OlN0cmluZzo6b3BlcmF0b3IgUVN0cmluZyk6CisgICAgICAgICogd3RmL3F0L1V0aWxzUXQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvcXQvY29tcGF0L1FHdWlBcHBsaWNhdGlvbjogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3dGYvcXQvY29tcGF0L3FndWlhcHBsaWNhdGlvbi5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJ
bXBsOjp+U3RyaW5nSW1wbCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0
cmluZ0ltcGwuaDoKKyAgICAgICAgKFN0cmluZ0ltcGwpOgorCiAyMDEyLTA3LTE4ICBZb25nIExp
ICA8eW9saUByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBJbXBsZW1lbnQgY3VycmVu
dFRpbWUoKSBhbmQgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgZm9yIE9TKFFOWCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBiZmU3MTJlMDMzMGVkYTlhZTZkNWFmMjY2YzQ1NDc0OTVkZmZiN2E0Li45MmVl
OTYyNzc5MWFhYzEwNzMwYzk1NDFhYjFhMTAxMGYyMTBiNDNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsODAgQEAKIDIwMTItMDctMTkgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9r
aWEuY29tPgogCisgICAgICAgIFtRdF0gUmVtb3ZlIFF0IDQgc3BlY2lmaWMgY29kZSBwYXRocwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgxNjEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRhcmdldC5w
cmk6CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2NsYXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KToK
KyAgICAgICAgKiBicmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6UXRJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpRdEluc3RhbmNlOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpR
dEZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50
aW1lLmg6CisgICAgICAgIChRdENvbm5lY3Rpb25PYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9x
dC9xdF9ydW50aW1lX3F0NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZWRpdGluZy9xdC9TbWFy
dFJlcGxhY2VRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9xdC9FdmVudEhhbmRsZXJR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnRhYnNUb0FsbEZvcm1Db250
cm9scyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRQcm9jQWRkcmVzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvT3Bl
bkdMU2hpbXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZv
cm1WaWRlb1dpbmRvd1ByaXZhdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvd1F0LmNwcDoKKyAgICAgICAgKEZ1bGxTY3JlZW5WaWRl
b1dpbmRvdzo6RnVsbFNjcmVlblZpZGVvV2luZG93KToKKyAgICAgICAgKEZ1bGxTY3JlZW5WaWRl
b1dpbmRvdzo6a2V5UHJlc3NFdmVudCk6CisgICAgICAgIChGdWxsU2NyZWVuVmlkZW9XaW5kb3c6
OmV2ZW50KToKKyAgICAgICAgKEZ1bGxTY3JlZW5WaWRlb1dpbmRvdzo6c2hvd0Z1bGxTY3JlZW4p
OgorICAgICAgICAoUGxhdGZvcm1WaWRlb1dpbmRvdzo6UGxhdGZvcm1WaWRlb1dpbmRvdyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsaXRNdWx0aXNhbXBs
ZUZyYW1lYnVmZmVyQW5kUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ3VycmVudElmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVGb250
RGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUlu
aXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6Omdl
dEN1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0RldmljZU1vdGlvblBy
b3ZpZGVyUXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9EZXZpY2VPcmllbnRhdGlvblByb3Zp
ZGVyUXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9LVVJMUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6S1VSTDo6b3BlcmF0b3IgUVVybCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUGxhdGZv
cm1TY3JlZW5RdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAg
IChXZWJDb3JlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpz
Y3JlZW5Jc01vbm9jaHJvbWUpOgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JlZW5BdmFpbGFibGVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9RV2ViUGFnZUNsaWVudC5oOgorICAgICAgICAoUVdlYlBhZ2VDbGllbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQv
cXQvVGV4dEJyZWFrSXRlcmF0b3JRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGx1Z2lucy9x
dC9QbHVnaW5Db250YWluZXJRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGx1Z2lucy9xdC9Q
bHVnaW5Db250YWluZXJRdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2lu
UGFja2FnZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmlzUGx1Z2lu
QmxhY2tsaXN0ZWQpOgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldEZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBhaW50VXNpbmdYUGl4bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNo
YXJlZFhFdmVudEZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdp
bmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudFZp
c2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRWaXN1YWxBbmRDb2xvcm1hcCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3
V2luLmNwcDoKKyAgICAgICAgKHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQpOgorCisyMDEyLTA3
LTE5ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KKwogICAgICAg
ICBbUXRdIFJlbW92ZSBzdXBwb3J0IGZvciBRdCB2ZXJzaW9ucyBiZWZvcmUgNC44LjAKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNzMwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggZDI0OWNmOGI0NmVmMjJiMmM3MzgyNGIyMWJjNmVmYjYxM2I3OGM2OS4uOGYzNGM1YjBk
OTI3NmIxOWYyYThjNmFjODg4Y2IzYTg3NDFlM2I3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxMi0wNy0xOSAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+
CisKKyAgICAgICAgW1F0XSBSZW1vdmUgUXQgNCBzcGVjaWZpYyBjb2RlIHBhdGhzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODE2MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0LnByaToKKyAg
ICAgICAgKiBXZWJLaXQxLnByaToKKyAgICAgICAgKiBXZWJLaXQxLnBybzoKKwogMjAxMi0wNy0x
OCAgWW9uZyBMaSAgPHlvbGlAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gTW92ZSBh
Ym91dDogVVJMIGhhbmRsaW5nIG91dCBvZiBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDVkYzkw
MmRkNDkxMDQ5Mjc3Yzc3YzA2NjRhNTVmZjQ0ZTVjY2M0MDAuLjY2MWY3MzU5ZTdkYjYyMjk5YWEy
ZTZjYTc3NmY2MDRlNDYxYzk0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTMgQEAKIDIw
MTItMDctMTkgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCisg
ICAgICAgIFtRdF0gUmVtb3ZlIFF0IDQgc3BlY2lmaWMgY29kZSBwYXRocworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgxNjEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFwaS9xZ3JhcGhpY3N3ZWJ2aWV3
LmNwcDoKKyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXc6OnNjZW5lRXZlbnQpOgorICAgICAgICAq
IEFwaS9xZ3JhcGhpY3N3ZWJ2aWV3Lmg6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6Cisg
ICAgICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWVfcC5oOgor
ICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6ZXZlbnQpOgor
ICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIEFwaS9xd2Vic2V0dGluZ3MuY3Bw
OgorICAgICAgICAoUVdlYlNldHRpbmdzOjplbmFibGVQZXJzaXN0ZW50U3RvcmFnZSk6CisgICAg
ICAgICogQXBpL3F3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFXZWJWaWV3OjpRV2ViVmlldyk6Cisg
ICAgICAgIChRV2ViVmlldzo6ZXZlbnQpOgorICAgICAgICAqIEFwaS9xd2Vidmlldy5oOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudFF0OjpzZXRUb29sVGlwKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvR2VvbG9j
YXRpb25DbGllbnRRdC5jcHA6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25D
bGllbnRRdC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHA6Cisg
ICAgICAgIChjcmVhdGVQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNERnJvbVdpZGdldCk6CisgICAg
ICAgIChRV2ViUGFnZUNsaWVudDo6b3duZXJXaW5kb3cpOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkV2ZW50Q29udmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRQbGF0
Zm9ybVRvdWNoRXZlbnQ6OldlYktpdFBsYXRmb3JtVG91Y2hFdmVudCk6CisgICAgICAgICogZGVj
bGFyYXRpdmUvZGVjbGFyYXRpdmUucHJvOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3BsdWdpbi5j
cHA6CisgICAgICAgICogZGVjbGFyYXRpdmUvcHVibGljLnByaToKKyAgICAgICAgKiBleGFtcGxl
cy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwOgorICAgICAgICAoV2ViUGx1Z2luOjpjcmVh
dGVFeHRlbnNpb24pOgorICAgICAgICAqIGV4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdp
bi5oOgorICAgICAgICAoV2ViUGx1Z2luKToKKyAgICAgICAgKiBleGFtcGxlcy9wbGF0Zm9ybXBs
dWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm86CisgICAgICAgICogdGVzdHMvcW9iamVjdGJyaWRnZS90
c3RfcW9iamVjdGJyaWRnZS5jcHA6CisgICAgICAgICh0c3RfUU9iamVjdEJyaWRnZTo6YXJyYXlP
YmplY3RFbnVtZXJhYmxlKToKKyAgICAgICAgKHRzdF9RT2JqZWN0QnJpZGdlOjpvd25lcnNoaXAp
OgorICAgICAgICAodHN0X1FPYmplY3RCcmlkZ2U6OnFPYmplY3RXcmFwcGVyV2l0aFNhbWVJZGVu
dGl0eSk6CisgICAgICAgICogdGVzdHMvdGVzdHMucHJpOgorICAgICAgICAqIHRlc3RzL3V0aWwu
aDoKKworMjAxMi0wNy0xOSAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5j
b20+CisKICAgICAgICAgW1F0XSBSZW1vdmUgc3VwcG9ydCBmb3IgUXQgdmVyc2lvbnMgYmVmb3Jl
IDQuOC4wCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MTczMAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzUyOTcyMmViOWE0ZDY3NmU0ZjU2MjZjYjk4ODU0ZGY4YzZl
ZGMzOS4uZmU0ZmJmZDM2Y2EyN2JjZWYyOGJkNjQyMTA0NzFlZGFmOWM3MTlmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA3LTE5ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhh
dXNtYW5uQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFJlbW92ZSBRdCA0IHNwZWNpZmljIGNv
ZGUgcGF0aHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4MTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcHVibGljYXBpL3RzdF9wdWJsaWNhcGkuY3BwOgorICAgICAgICAoZ2F0
aGVyQVBJKToKKyAgICAgICAgKiBXZWJLaXQyLnByaToKKwogMjAxMi0wNy0xOSAgWm9sdGFuIE55
dWwgIDx6b2x0YW4ubnl1bEBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBVc2luZyBk
aWZmZXJlbnQgY2FjaGUgZGlyZWN0b3J5IGZvciBlYWNoIFdUUiBwcm9jZXNzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL1dURi5wcmkgYi9Tb3VyY2UvV1RGL1dURi5wcmkKaW5kZXggMDI0YzdmNjlm
NDM3NzVhOGEzNGI5ZGYzODg3MzNlOWY3ZDlhNmI3Yi4uMmNmYjZmODJiYmUyNzgxYTRhYjYxNGEy
ZDA1MmVmNTAwNWVmOTU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYucHJpCisrKyBiL1Nv
dXJjZS9XVEYvV1RGLnByaQpAQCAtOCwxOSArOCwxNyBAQAogIyBBbGwgZXh0ZXJuYWwgbW9kdWxl
cyBzaG91bGQgaW5jbHVkZSBXVEYgaGVhZGVycyBieSBwcmVmaXhpbmcgd2l0aCAid3RmIiAoI2lu
Y2x1ZGUgPHd0Zi9zb21lL3RoaW5nLmg+KS4KIElOQ0xVREVQQVRIICs9ICQkUFdECiAKLWhhdmVR
dCg1KSB7Ci0gICAgbWFjIHsKLSAgICAgICAgIyBNYWMgT1MgZG9lcyBzaGlwIGxpYmljdSBidXQg
bm90IHRoZSBhc3NvY2lhdGVkIGhlYWRlciBmaWxlcy4KLSAgICAgICAgIyBUaGVyZWZvcmUgV2Vi
S2l0IHByb3ZpZGVzIGFkZXF1YXRlIGhlYWRlciBmaWxlcy4KLSAgICAgICAgSU5DTFVERVBBVEgg
Kz0gJCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV1RGL2ljdQotICAgICAgICBMSUJTICs9IC1s
aWN1Y29yZQorbWFjIHsKKyAgICAjIE1hYyBPUyBkb2VzIHNoaXAgbGliaWN1IGJ1dCBub3QgdGhl
IGFzc29jaWF0ZWQgaGVhZGVyIGZpbGVzLgorICAgICMgVGhlcmVmb3JlIFdlYktpdCBwcm92aWRl
cyBhZGVxdWF0ZSBoZWFkZXIgZmlsZXMuCisgICAgSU5DTFVERVBBVEggKz0gJCR7Uk9PVF9XRUJL
SVRfRElSfS9Tb3VyY2UvV1RGL2ljdQorICAgIExJQlMgKz0gLWxpY3Vjb3JlCit9IGVsc2Ugewor
ICAgIGNvbnRhaW5zKFFUX0NPTkZJRyxpY3UpIHsKKyAgICAgICAgd2luMzI6IExJQlMgKz0gLWxp
Y3VpbiAtbGljdXVjIC1saWN1ZHQKKyAgICAgICAgZWxzZTogTElCUyArPSAtbGljdWkxOG4gLWxp
Y3V1YyAtbGljdWRhdGEKICAgICB9IGVsc2UgewotICAgICAgICBjb250YWlucyhRVF9DT05GSUcs
aWN1KSB7Ci0gICAgICAgICAgICB3aW4zMjogTElCUyArPSAtbGljdWluIC1saWN1dWMgLWxpY3Vk
dAotICAgICAgICAgICAgZWxzZTogTElCUyArPSAtbGljdWkxOG4gLWxpY3V1YyAtbGljdWRhdGEK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm9yKCJUbyBidWlsZCBRdFdlYktpdCB3
aXRoIFF0IDUgeW91IG5lZWQgSUNVIikKLSAgICAgICAgfQorICAgICAgICBlcnJvcigiVG8gYnVp
bGQgUXRXZWJLaXQgd2l0aCBRdCA1IHlvdSBuZWVkIElDVSIpCiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL1dURi5wcm8gYi9Tb3VyY2UvV1RGL1dURi5wcm8KaW5kZXggNGJjYjBm
ZjBhNjE1MGM5MmQ2MWVhY2EwMDQ0MDlmZDE3OWQ3OGU3Yy4uY2I1Yjk3OGFmZGFiMWVjYWNlYjA5
YWJkNTA3NmY2Y2M4MzI2MTU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYucHJvCisrKyBi
L1NvdXJjZS9XVEYvV1RGLnBybwpAQCAtMTA4LDcgKzEwOCw2IEBAIEhFQURFUlMgKz0gXAogICAg
IFBhc3NUcmFpdHMuaCBcCiAgICAgUGxhdGZvcm0uaCBcCiAgICAgUG9zc2libHlOdWxsLmggXAot
ICAgIHF0L1V0aWxzUXQuaCBcCiAgICAgUmFuZG9tTnVtYmVyLmggXAogICAgIFJhbmRvbU51bWJl
clNlZWQuaCBcCiAgICAgUmVkQmxhY2tUcmVlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvcXQvU3RyaW5nUXQuY3BwIGIvU291cmNlL1dURi93dGYvcXQvU3RyaW5nUXQuY3BwCmluZGV4
IDQzYzRmODFmMDI4Yzc3NWJmYTllNmFiZmI5NjM4OWM1YzQ3ZDk2ZWUuLmFkODhjMDNmN2RmNGIx
MWQwZWI3YmQwZjUwYmY3NmMxZjE0ZWVlYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3F0
L1N0cmluZ1F0LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9xdC9TdHJpbmdRdC5jcHAKQEAgLTM3
LDExICszNyw3IEBAIFN0cmluZzo6U3RyaW5nKGNvbnN0IFFTdHJpbmcmIHFzdHIpCiB7CiAgICAg
aWYgKHFzdHIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLSNpZiBIQVZFKFFUNSkKICAgICBt
X2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChjb25zdF9jYXN0PFFTdHJpbmcmPihxc3RyKS5kYXRh
X3B0cigpKTsKLSNlbHNlCi0gICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPGNvbnN0IFVDaGFyKj4ocXN0ci5jb25zdERhdGEoKSksIHFzdHIubGVuZ3Ro
KCkpOwotI2VuZGlmCiB9CiAKIFN0cmluZzo6U3RyaW5nKGNvbnN0IFFTdHJpbmdSZWYmIHJlZikK
QEAgLTU2LDcgKzUyLDYgQEAgU3RyaW5nOjpvcGVyYXRvciBRU3RyaW5nKCkgY29uc3QKICAgICBp
ZiAoIW1faW1wbCkKICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKIAotI2lmIEhBVkUoUVQ1KQog
ICAgIGlmIChRU3RyaW5nRGF0YSogcVN0cmluZ0RhdGEgPSBtX2ltcGwtPnFTdHJpbmdEYXRhKCkp
IHsKICAgICAgICAgLy8gVGhlIFdURiBzdHJpbmcgd2FzIGFkb3B0ZWQgZnJvbSBhIFFTdHJpbmcg
YXQgc29tZSBwb2ludCwgc28gd2UKICAgICAgICAgLy8gY2FuIGp1c3QgYWRvcHQgdGhlIFFTdHJp
bmdEYXRhIGxpa2UgYSByZWd1bGFyIFFTdHJpbmcgY29weS4KQEAgLTY0LDcgKzU5LDcgQEAgU3Ry
aW5nOjpvcGVyYXRvciBRU3RyaW5nKCkgY29uc3QKICAgICAgICAgUVN0cmluZ0RhdGFQdHIgcVN0
cmluZ0RhdGFQb2ludGVyID0geyBxU3RyaW5nRGF0YSB9OwogICAgICAgICByZXR1cm4gUVN0cmlu
ZyhxU3RyaW5nRGF0YVBvaW50ZXIpOwogICAgIH0KLSNlbmRpZgorCiAgICAgaWYgKGlzOEJpdCgp
ICYmICFtX2ltcGwtPmhhczE2Qml0U2hhZG93KCkpIHsKICAgICAgICAgLy8gQXNraW5nIGZvciBj
aGFyYWN0ZXJzKCkgb2YgYW4gOC1iaXQgc3RyaW5nIHdpbGwgbWFrZSBhIDE2LWJpdCBjb3B5IGlu
dGVybmFsbHkKICAgICAgICAgLy8gaW4gV1RGOjpTdHJpbmcuIFNpbmNlIHdlJ3JlIGdvaW5nIHRv
IGNvcHkgdGhlIGRhdGEgdG8gUVN0cmluZ0RhdGEgYW55d2F5cywgd2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3F0L1V0aWxzUXQuaCBiL1NvdXJjZS9XVEYvd3RmL3F0L1V0aWxzUXQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFjOWUzMmMxNTY0YTI3MmZkZTkzYmMyZGE3
OWMzMTkwN2E1ZjM0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9xdC9VdGlsc1F0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyAr
MCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIFdURl9VdGlsc1F0X2gKLSNkZWZp
bmUgV1RGX1V0aWxzUXRfaAotCi0jaW5jbHVkZSA8UVN0cmluZz4KLSNpZiAhSEFWRShRVDUpCi0j
aW5jbHVkZSA8UVRleHREb2N1bWVudD4KLSNlbmRpZgotCi1pbmxpbmUgUVN0cmluZyBlc2NhcGVI
dG1sKGNvbnN0IFFTdHJpbmcmIHN0cmluZykKLXsKLSNpZiBIQVZFKFFUNSkKLSAgICByZXR1cm4g
c3RyaW5nLnRvSHRtbEVzY2FwZWQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIFF0Ojplc2NhcGUoc3Ry
aW5nKTsKLSNlbmRpZgotfQotCi0jZW5kaWYgLy8gV1RGX1V0aWxzUXRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvcXQvY29tcGF0L1FHdWlBcHBsaWNhdGlvbiBiL1NvdXJjZS9XVEYvd3Rm
L3F0L2NvbXBhdC9RR3VpQXBwbGljYXRpb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAzMzdlMjUyNjUzZGQwNzU5MDBlYjMxNGE0OTUxMWIzYzAxZjA1NmQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvcXQvY29tcGF0
L1FHdWlBcHBsaWNhdGlvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICJx
Z3VpYXBwbGljYXRpb24uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3F0L2NvbXBhdC9x
Z3VpYXBwbGljYXRpb24uaCBiL1NvdXJjZS9XVEYvd3RmL3F0L2NvbXBhdC9xZ3VpYXBwbGljYXRp
b24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyZmMyM2NiMWFkNmEzNTMxYWQ5
OTdlNWQ2ZjVmY2QxNTE4ZjVjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9xdC9jb21wYXQvcWd1aWFwcGxpY2F0aW9uLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVm
IHFndWlhcHBsaWNhdGlvbl9oCi0jZGVmaW5lIHFndWlhcHBsaWNhdGlvbl9oCi0KLSNpbmNsdWRl
IDxRQXBwbGljYXRpb24+Ci0KLXN0cnVjdCBRR3VpQXBwbGljYXRpb24gOiBwdWJsaWMgUUFwcGxp
Y2F0aW9uCi17Ci0gICAgLy8gU3R5bGUgaGludHMgaW4gUXQgNSBjb250YWluIHN0dWZmIHRoYXQg
anVzdCB1c2VkIHRvIGJlIGluIFFBcHBsaWNhdGlvbiBpbiBRdCA0LCBoZW5jZQotICAgIC8vIHRo
aXMgaGFjay4KLSAgICBzdGF0aWMgUUFwcGxpY2F0aW9uKiBzdHlsZUhpbnRzKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBxQXBwOwotICAgIH0KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nSW1wbC5jcHAKaW5kZXggYzQzNTljMTEzMzg5ODRmZWRhMjVmODcwZjM3NmM4N2YwOWFjMDk1
OC4uZTdhOGY0NGQ4NjdjNjE4YTkzYjgyYTMxMTMzZTYyYzM3NDJmOTg1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC02OSw3ICs2OSw3IEBAIFN0cmluZ0ltcGw6On5TdHJpbmdJ
bXBsKCkKICAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDxMQ2hhcio+KG1fZGF0YTgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSNpZiBQTEFURk9STShRVCkgJiYgSEFWRShRVDUpCisjaWYg
UExBVEZPUk0oUVQpCiAgICAgaWYgKG93bmVyc2hpcCA9PSBCdWZmZXJBZG9wdGVkUVN0cmluZykg
ewogICAgICAgICBpZiAoIW1fcVN0cmluZ0RhdGEtPnJlZi5kZXJlZigpKQogICAgICAgICAgICAg
UVN0cmluZ0RhdGE6OmRlYWxsb2NhdGUobV9xU3RyaW5nRGF0YSk7CkBAIC0xNjUxLDcgKzE2NTEs
NyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmFkb3B0KFN0cmluZ0J1ZmZl
cjxVQ2hhcj4mIGJ1ZmZlcikKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwoYnVm
ZmVyLnJlbGVhc2UoKSwgbGVuZ3RoKSk7CiB9CiAKLSNpZiBQTEFURk9STShRVCkgJiYgSEFWRShR
VDUpCisjaWYgUExBVEZPUk0oUVQpCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6
OmFkb3B0KFFTdHJpbmdEYXRhKiBxU3RyaW5nRGF0YSkKIHsKICAgICBBU1NFUlQocVN0cmluZ0Rh
dGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCBkMDA2MGM0NzAyNjQ2YmY4OGQ4Yzhi
NWUwNDQ2OWI5ZjIzMjQ2OWU4Li5kYTg1MTJkOGRmZjExNjI0NDNlZWUwY2M4MGEzZjg0YTQ1Y2Ni
MDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKLSNp
ZiBQTEFURk9STShRVCkgJiYgSEFWRShRVDUpCisjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8
UVN0cmluZz4KICNlbmRpZgogCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIEJ1
ZmZlckludGVybmFsLAogICAgICAgICBCdWZmZXJPd25lZCwKICAgICAgICAgQnVmZmVyU3Vic3Ry
aW5nLAotI2lmIFBMQVRGT1JNKFFUKSAmJiBIQVZFKFFUNSkKKyNpZiBQTEFURk9STShRVCkKICAg
ICAgICAgQnVmZmVyQWRvcHRlZFFTdHJpbmcKICNlbmRpZgogICAgICAgICAvLyBOT1RFOiBBZGRp
bmcgbW9yZSBvd25lcnNoaXAgdHlwZXMgbmVlZHMgdG8gZXh0ZW5kIG1faGFzaEFuZEZsYWdzIGFz
IHdlJ3JlIGF0IGNhcGFjaXR5CkBAIC0yMjMsNyArMjIzLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9oYXNoQW5kRmxhZ3MgPSBoYXNoIHwgQnVmZmVySW50ZXJuYWw7CiAgICAgfQogCi0jaWYgUExB
VEZPUk0oUVQpICYmIEhBVkUoUVQ1KQorI2lmIFBMQVRGT1JNKFFUKQogICAgIC8vIFVzZWQgdG8g
Y3JlYXRlIG5ldyBzdHJpbmdzIHRoYXQgYWRvcHQgYW4gZXhpc3RpbmcgUVN0cmluZydzIGRhdGEK
ICAgICBlbnVtIENvbnN0cnVjdEFkb3B0ZWRRU3RyaW5nVGFnIHsgQ29uc3RydWN0QWRvcHRlZFFT
dHJpbmcgfTsKICAgICBTdHJpbmdJbXBsKFFTdHJpbmdEYXRhKiBxU3RyaW5nRGF0YSwgQ29uc3Ry
dWN0QWRvcHRlZFFTdHJpbmdUYWcpCkBAIC0zMzksNyArMzM5LDcgQEAgcHVibGljOgogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZG9wdChTdHJp
bmdCdWZmZXI8VUNoYXI+Jik7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IGFkb3B0KFN0cmluZ0J1ZmZlcjxMQ2hhcj4mKTsKIAotI2lmIFBMQVRG
T1JNKFFUKSAmJiBIQVZFKFFUNSkKKyNpZiBQTEFURk9STShRVCkKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBhZG9wdChRU3RyaW5nRGF0YSopOwogI2VuZGlmCiAKQEAgLTQwMiw3
ICs0MDIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2hhc2hBbmRGbGFncyAmPSB+c19oYXNo
RmxhZ0lzQXRvbWljOwogICAgIH0KIAotI2lmIFBMQVRGT1JNKFFUKSAmJiBIQVZFKFFUNSkKKyNp
ZiBQTEFURk9STShRVCkKICAgICBRU3RyaW5nRGF0YSogcVN0cmluZ0RhdGEoKSB7IHJldHVybiBi
dWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJBZG9wdGVkUVN0cmluZyA/IG1fcVN0cmluZ0RhdGEg
OiAwOyB9CiAjZW5kaWYKIApAQCAtNjMwLDcgKzYzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZv
aWQqIG1fYnVmZmVyOwogICAgICAgICBTdHJpbmdJbXBsKiBtX3N1YnN0cmluZ0J1ZmZlcjsKICAg
ICAgICAgbXV0YWJsZSBVQ2hhciogbV9jb3B5RGF0YTE2OwotI2lmIFBMQVRGT1JNKFFUKSAmJiBI
QVZFKFFUNSkKKyNpZiBQTEFURk9STShRVCkKICAgICAgICAgUVN0cmluZ0RhdGEqIG1fcVN0cmlu
Z0RhdGE7CiAjZW5kaWYKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMzI0NGJiYzA0MDQ3ZjU4NWEx
OGI2MWI4ODkxYzE0MjMyNGZhOGQyMi4uNWM4ZjU4ZDY0OTE1MGI5MmJmY2NjNDFkODM3MmI5MTRj
ZjExYTE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0xNiwxMCArMTYsNiBAQCBDT05GSUcgKz0gc3RhdGlj
bGliCiAKIERFRklORVMgKz0gUVRfTUFLRURMTAogCi0haGF2ZVF0KDUpIHsKLSAgICBJTkNMVURF
UEFUSCArPSAkJFBXRC8uLi9XVEYvd3RmL3F0L2NvbXBhdAotfQotCiBSRVNPVVJDRVMgKz0gXAog
ICAgICQkUFdEL1dlYkNvcmUucXJjCiAKQEAgLTIyNiwxNyArMjIyLDEzIEBAIFNPVVJDRVMgKz0g
XAogICAgICBicmlkZ2UvcXQvcXRfY2xhc3MuY3BwIFwKICAgICAgYnJpZGdlL3F0L3F0X2luc3Rh
bmNlLmNwcCBcCiAgICAgIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcCBcCisgICAgIGJy
aWRnZS9xdC9xdF9ydW50aW1lLmNwcCBcCiAgICAgIGJyaWRnZS9ydW50aW1lX2FycmF5LmNwcCBc
CiAgICAgIGJyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAgXAogICAgICBicmlkZ2UvcnVudGltZV9v
YmplY3QuY3BwIFwKICAgICAgYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAgXAogICAgICB0ZXN0aW5n
L2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKIAotaGF2ZVF0KDUpIHsKLSAgICBTT1VSQ0VTICs9
IGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAotfSBlbHNlIHsKLSAgICBTT1VSQ0VTICs9IGJyaWRn
ZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAKLX0KIAogU09VUkNFUyArPSBcCiAgICAgTW9kdWxlcy9m
aWxlc3lzdGVtL0RPTUZpbGVQYXRoLmNwcCBcCkBAIC0yNzk1LDE4ICsyNzg3LDEzIEBAIG1hYyB7
CiAgICAgICAgIHBsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAogfQogCi1oYXZlUXQo
NSkgewotICAgIGNvbnRhaW5zKFFUX0NPTkZJRyxpY3UpfG1hYzogU09VUkNFUyArPSBwbGF0Zm9y
bS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAotICAgIG1hYyB7Ci0gICAgICAgICMgRm9y
IE1hYyB3ZSB1c2UgdGhlIHNhbWUgU21hcnRSZXBsYWNlIGltcGxlbWVudGF0aW9uIGFzIHRoZSBB
cHBsZSBwb3J0LgotICAgICAgICBTT1VSQ0VTICs9IGVkaXRpbmcvU21hcnRSZXBsYWNlQ0YuY3Bw
Ci0gICAgICAgIElOQ0xVREVQQVRIICs9ICQkUFdEL2ljdQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IFNPVVJDRVMgKz0gZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwCi0gICAgfQorY29udGFpbnMo
UVRfQ09ORklHLGljdSl8bWFjOiBTT1VSQ0VTICs9IHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3JJQ1UuY3BwCittYWMgeworICAgICMgRm9yIE1hYyB3ZSB1c2UgdGhlIHNhbWUgU21hcnRS
ZXBsYWNlIGltcGxlbWVudGF0aW9uIGFzIHRoZSBBcHBsZSBwb3J0LgorICAgIFNPVVJDRVMgKz0g
ZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKKyAgICBJTkNMVURFUEFUSCArPSAkJFBXRC9pY3UK
IH0gZWxzZSB7Ci0gICAgU09VUkNFUyArPSBwbGF0Zm9ybS90ZXh0L3F0L1RleHRCcmVha0l0ZXJh
dG9yUXQuY3BwIFwKLSAgICAgICAgICAgICAgIGVkaXRpbmcvcXQvU21hcnRSZXBsYWNlUXQuY3Bw
CisgICAgU09VUkNFUyArPSBlZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAKIH0KIAogY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9MSkgewpAQCAtMjgyNSwxMSAr
MjgxMiw2IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJPTEp
IHsKICAgICAgICAgICAgIFNPVVJDRVMgKz0gXAogICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQv
UGx1Z2luUGFja2FnZVF0LmNwcCBcCiAgICAgICAgICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5W
aWV3UXQuY3BwCi0KLSAgICAgICAgICAgIGhhdmVRdCg0KSB7Ci0gICAgICAgICAgICAgICAgU09V
UkNFUyArPSBwbHVnaW5zL3F0L1BsdWdpbkNvbnRhaW5lclF0LmNwcAotICAgICAgICAgICAgICAg
IEhFQURFUlMgKz0gcGx1Z2lucy9xdC9QbHVnaW5Db250YWluZXJRdC5oCi0gICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKaW5kZXggNDk1MjJmMzA0MjYxOTYyZWJi
NWQzOTBjNGM0MjIxYzU0MmYxMjZlMC4uYmUzNTgxMTY5N2YyYjlmYjEzMGQ0NGIwYmY0YmFhOTg3
Zjg0NTE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKQEAgLTcsOCArNyw3IEBACiAKIFNPVVJDRV9ESVIgPSAk
JHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJDb3JlCiAKLVFUICo9IG5ldHdvcmsgc3FsCi1o
YXZlUXQoNSk6IFFUICo9IGNvcmUtcHJpdmF0ZSBndWktcHJpdmF0ZQorUVQgKj0gbmV0d29yayBz
cWwgY29yZS1wcml2YXRlIGd1aS1wcml2YXRlCiAKIFdFQkNPUkVfR0VORVJBVEVEX1NPVVJDRVNf
RElSID0gJCR7Uk9PVF9CVUlMRF9ESVJ9L1NvdXJjZS9XZWJDb3JlLyQke0dFTkVSQVRFRF9TT1VS
Q0VTX0RFU1RESVJ9CiAKQEAgLTE1MCwxOCArMTQ5LDggQEAgY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9MSkgewogICAgIH0KIH0KIAotY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX0dFT0xPQ0FUSU9OPTEpIHsKLSAgICBDT05GSUcgKj0gbW9iaWxpdHkKLSAgICBN
T0JJTElUWSAqPSBsb2NhdGlvbgotfQotCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfT1JJRU5U
QVRJT05fRVZFTlRTPTEpfGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJ
T049MSkgewotICAgIGhhdmVRdCg1KSB7Ci0gICAgICAgIFFUICs9IHNlbnNvcnMKLSAgICB9IGVs
c2UgewotICAgICAgICBDT05GSUcgKj0gbW9iaWxpdHkKLSAgICAgICAgTU9CSUxJVFkgKj0gc2Vu
c29ycwotICAgIH0KKyAgICBRVCArPSBzZW5zb3JzCiB9CiAKIGNvbnRhaW5zKERFRklORVMsIFdU
Rl9VU0VfUVRfTU9CSUxJVFlfU1lTVEVNSU5GTz0xKSB7CkBAIC0xOTQsNyArMTgzLDcgQEAgY29u
dGFpbnMoREVGSU5FUywgV1RGX1VTRV8zRF9HUkFQSElDUz0xKSB7CiAgICAgbWFjOiBMSUJTICs9
IC1mcmFtZXdvcmsgSU9TdXJmYWNlIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24KICAgICBsaW51
eC0qOmNvbnRhaW5zKERFRklORVMsIEhBVkVfWENPTVBPU0lURT0xKTogTElCUyArPSAtbFhjb21w
b3NpdGUKICAgICAjIE9ubHkgV2ViS2l0MSBuZWVkcyB0aGUgb3BlbmdsIG1vZHVsZSwgc28gaXQn
cyBvcHRpb25hbCBmb3IgUXQ1LgotICAgIGhhdmVRdCg0KXxjb250YWlucyhRVF9DT05GSUcsIG9w
ZW5nbCk6IFFUICo9IG9wZW5nbAorICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKTogUVQg
Kj0gb3BlbmdsCiB9CiAKICFzeXN0ZW0tc3FsaXRlOmV4aXN0cyggJCR7U1FMSVRFM1NSQ0RJUn0v
c3FsaXRlMy5jICkgewpAQCAtMjA1LDI5ICsxOTQsMjIgQEAgY29udGFpbnMoREVGSU5FUywgV1RG
X1VTRV8zRF9HUkFQSElDUz0xKSB7CiAgICAgTElCUyArPSAtbHNxbGl0ZTMKIH0KIAotaGF2ZVF0
KDUpIHsKLSAgICAjIFF0NSBhbGxvd3MgdXMgdG8gdXNlIGNvbmZpZyB0ZXN0cyB0byBjaGVjayBm
b3IgdGhlIHByZXNlbmNlIG9mIHRoZXNlIGxpYnJhcmllcwotICAgIGNvbmZpZ19saWJqcGVnIHsK
LSAgICAgICAgREVGSU5FUyArPSBXVEZfVVNFX0xJQkpQRUc9MQotICAgICAgICBMSUJTICs9IC1s
anBlZwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdhcm5pbmcoIkpQRUcgbGlicmFyeSBub3QgZm91
bmQhIFFJbWFnZURlY29kZXIgd2lsbCBkZWNvZGUgSlBFRyBpbWFnZXMuIikKLSAgICB9Ci0gICAg
Y29uZmlnX2xpYnBuZyB7Ci0gICAgICAgIERFRklORVMgKz0gV1RGX1VTRV9MSUJQTkc9MQotICAg
ICAgICBMSUJTICs9IC1scG5nCi0gICAgfSBlbHNlIHsKLSAgICAgICAgd2FybmluZygiUE5HIGxp
YnJhcnkgbm90IGZvdW5kISBRSW1hZ2VEZWNvZGVyIHdpbGwgZGVjb2RlIFBORyBpbWFnZXMuIikK
LSAgICB9Ci0gICAgY29uZmlnX2xpYndlYnAgewotICAgICAgICBERUZJTkVTICs9IFdURl9VU0Vf
V0VCUD0xCi0gICAgICAgIExJQlMgKz0gLWx3ZWJwCi0gICAgfQorIyBRdDUgYWxsb3dzIHVzIHRv
IHVzZSBjb25maWcgdGVzdHMgdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGVzZSBsaWJy
YXJpZXMKK2NvbmZpZ19saWJqcGVnIHsKKyAgICBERUZJTkVTICs9IFdURl9VU0VfTElCSlBFRz0x
CisgICAgTElCUyArPSAtbGpwZWcKIH0gZWxzZSB7Ci0gICAgIXdpbjMyLSo6IW1hYyB7Ci0gICAg
ICAgIERFRklORVMgKz0gV1RGX1VTRV9MSUJKUEVHPTEgV1RGX1VTRV9MSUJQTkc9MQotICAgICAg
ICBMSUJTICs9IC1sanBlZyAtbHBuZwotICAgIH0KKyAgICB3YXJuaW5nKCJKUEVHIGxpYnJhcnkg
bm90IGZvdW5kISBRSW1hZ2VEZWNvZGVyIHdpbGwgZGVjb2RlIEpQRUcgaW1hZ2VzLiIpCit9Citj
b25maWdfbGlicG5nIHsKKyAgICBERUZJTkVTICs9IFdURl9VU0VfTElCUE5HPTEKKyAgICBMSUJT
ICs9IC1scG5nCit9IGVsc2UgeworICAgIHdhcm5pbmcoIlBORyBsaWJyYXJ5IG5vdCBmb3VuZCEg
UUltYWdlRGVjb2RlciB3aWxsIGRlY29kZSBQTkcgaW1hZ2VzLiIpCit9Citjb25maWdfbGlid2Vi
cCB7CisgICAgREVGSU5FUyArPSBXVEZfVVNFX1dFQlA9MQorICAgIExJQlMgKz0gLWx3ZWJwCiB9
CiAKIHdpbjMyLSp8d2luY2UqIHsKQEAgLTI3Nyw4ICsyNTksNyBAQCB1bml4OiFtYWM6Ki1nKysq
OlFNQUtFX0xGTEFHUyArPSAtV2wsLS1nYy1zZWN0aW9ucwogbGludXgqLWcrKyo6UU1BS0VfTEZM
QUdTICs9ICQkUU1BS0VfTEZMQUdTX05PVU5ERUYKIAogdW5peHx3aW4zMi1nKysqIHsKLSAgICBR
TUFLRV9QS0dDT05GSUdfUkVRVUlSRVMgPSBRdENvcmUgUXRHdWkgUXROZXR3b3JrCi0gICAgaGF2
ZVF0KDUpOiBRTUFLRV9QS0dDT05GSUdfUkVRVUlSRVMgKz0gUXRXaWRnZXRzCisgICAgUU1BS0Vf
UEtHQ09ORklHX1JFUVVJUkVTID0gUXRDb3JlIFF0R3VpIFF0TmV0d29yayBRdFdpZGdldHMKIH0K
IAogIyBEaXNhYmxlIEMrKzB4IG1vZGUgaW4gV2ViQ29yZSBmb3IgdGhvc2Ugd2hvIGVuYWJsZWQg
aXQgaW4gdGhlaXIgUXQncyBta3NwZWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9xdC9xdF9jbGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3Bw
CmluZGV4IDAwY2QxYzQ5YWYwOTIyMjFiNjI5ZmRhYzhkYmUxMzVmYWQ0OTc1NDUuLmVlMjJhNjg2
MWJjNTFhZWI3NThjN2U4YTY5YThmMmI5YjM0Y2ExYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0
L3F0X2NsYXNzLmNwcApAQCAtOTksMTYgKzk5LDcgQEAgSlNWYWx1ZSBRdENsYXNzOjpmYWxsYmFj
a09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEluc3RhbmNlKiBpbnN0LCBQcm9wZXJ0eU5hbWUgaWQK
ICAgICAgICAgaWYgKG0uYWNjZXNzKCkgPT0gUU1ldGFNZXRob2Q6OlByaXZhdGUpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotI2lmICFIQVZFKFFUNSkKLSAgICAgICAgaW50IGl0ZXIgPSAwOwot
ICAgICAgICBjb25zdCBjaGFyKiBzaWduYXR1cmUgPSBtLnNpZ25hdHVyZSgpOwotICAgICAgICB3
aGlsZSAoc2lnbmF0dXJlW2l0ZXJdICYmIHNpZ25hdHVyZVtpdGVyXSAhPSAnKCcpCi0gICAgICAg
ICAgICArK2l0ZXI7Ci0KLSAgICAgICAgaWYgKG5vcm1hbCA9PSBRQnl0ZUFycmF5Ojpmcm9tUmF3
RGF0YShzaWduYXR1cmUsIGl0ZXIpKSB7Ci0jZWxzZQogICAgICAgICBpZiAobm9ybWFsID09IG0u
bmFtZSgpKSB7Ci0jZW5kaWYKICAgICAgICAgICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHZhbCA9
IFF0UnVudGltZU1ldGFNZXRob2Q6OmNyZWF0ZShleGVjLCB1c3RyaW5nLCBzdGF0aWNfY2FzdDxR
dEluc3RhbmNlKj4oaW5zdCksIGluZGV4LCBub3JtYWwsIGZhbHNlKTsKICAgICAgICAgICAgIHF0
aW5zdC0+bV9tZXRob2RzLmluc2VydChuYW1lLCB2YWwpOwogICAgICAgICAgICAgcmV0dXJuIHZh
bDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCmluZGV4IDZiNWU2YTc1
YTQ5NGU2Nzk5ZDkzMTU2ZTIyYjYxZGJlMzIwYTdjYTUuLjRhMDg3NTUwNmQ3ZWZhY2NiYjI0Njkx
MGU1NzY3YzEwYzAxNTZlOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9x
dF9pbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmNwcApAQCAtMjIzLDEyICsyMjMsOCBAQCB2b2lkIFF0SW5zdGFuY2U6OmdldFByb3BlcnR5TmFt
ZXMoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXkpCiAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBtZXRob2RDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBRTWV0YU1ldGhv
ZCBtZXRob2QgPSBtZXRhLT5tZXRob2QoaSk7CiAgICAgICAgICAgICBpZiAobWV0aG9kLmFjY2Vz
cygpICE9IFFNZXRhTWV0aG9kOjpQcml2YXRlKSB7Ci0jaWYgSEFWRShRVDUpCiAgICAgICAgICAg
ICAgICAgUUJ5dGVBcnJheSBzaWcgPSBtZXRob2QubWV0aG9kU2lnbmF0dXJlKCk7CiAgICAgICAg
ICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhzaWcuY29uc3REYXRh
KCksIHNpZy5sZW5ndGgoKSkpKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgYXJyYXkuYWRkKElk
ZW50aWZpZXIoZXhlYywgbWV0aG9kLnNpZ25hdHVyZSgpKSk7Ci0jZW5kaWYKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KQEAgLTI3NSw3ICsyNzEsNiBAQCBKU1ZhbHVlIFF0SW5zdGFu
Y2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAgIC8vIENo
ZWNrIHRvIHNlZSBob3cgbXVjaCB3ZSBjYW4gY2FsbCBpdAogICAgICAgICAgICAgaWYgKG0uYWNj
ZXNzKCkgIT0gUU1ldGFNZXRob2Q6OlByaXZhdGUKICAgICAgICAgICAgICAgICAmJiBtLm1ldGhv
ZFR5cGUoKSAhPSBRTWV0YU1ldGhvZDo6U2lnbmFsCi0jaWYgSEFWRShRVDUpCiAgICAgICAgICAg
ICAgICAgJiYgbS5wYXJhbWV0ZXJDb3VudCgpID09IDAKICAgICAgICAgICAgICAgICAmJiBtLnJl
dHVyblR5cGUoKSAhPSBRTWV0YVR5cGU6OlZvaWQpIHsKICAgICAgICAgICAgICAgICBRVmFyaWFu
dCByZXQobS5yZXR1cm5UeXBlKCksICh2b2lkKikwKTsKQEAgLTI4NiwyMCArMjgxLDYgQEAgSlNW
YWx1ZSBRdEluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChyZXQuaXNWYWxpZCgpICYmIHJldC5jYW5Db252ZXJ0KFFWYXJp
YW50OjpTdHJpbmcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSByZXQudG9TdHJp
bmcoKS50b0xhdGluMSgpLmNvbnN0RGF0YSgpOyAvLyAjIyMgTGF0aW4gMT8gQXNjaWk/CiAgICAg
ICAgICAgICAgICAgICAgICAgICB1c2VEZWZhdWx0ID0gZmFsc2U7Ci0jZWxzZQotICAgICAgICAg
ICAgICAgICYmIG0ucGFyYW1ldGVyVHlwZXMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiByZXRzaWcgPSBtLnR5cGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHJldHNpZyAmJiAqcmV0c2lnKSB7Ci0gICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IHJldChR
TWV0YVR5cGU6OnR5cGUocmV0c2lnKSwgKHZvaWQqKTApOwotICAgICAgICAgICAgICAgICAgICB2
b2lkICogcWFyZ3NbMV07Ci0gICAgICAgICAgICAgICAgICAgIHFhcmdzWzBdID0gcmV0LmRhdGEo
KTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoUU1ldGFPYmplY3Q6Om1ldGFjYWxsKG9iaiwg
UU1ldGFPYmplY3Q6Okludm9rZU1ldGFNZXRob2QsIGluZGV4LCBxYXJncykgPCAwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocmV0LmlzVmFsaWQoKSAmJiByZXQuY2FuQ29udmVydChR
VmFyaWFudDo6U3RyaW5nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IHJl
dC50b1N0cmluZygpLnRvTGF0aW4xKCkuY29uc3REYXRhKCk7IC8vICMjIyBMYXRpbiAxPyBBc2Np
aT8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VEZWZhdWx0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM4OSwxMSArMzcwLDcgQEAgdm9pZCBR
dEZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5j
ZSogaW5zdCwgSlNWYWx1ZQogICAgIGlmIChvYmopIHsKICAgICAgICAgUU1ldGFUeXBlOjpUeXBl
IGFyZ3R5cGUgPSBRTWV0YVR5cGU6OlZvaWQ7CiAgICAgICAgIGlmIChtX3R5cGUgPT0gTWV0YVBy
b3BlcnR5KQotI2lmIEhBVkUoUVQ1KQogICAgICAgICAgICAgYXJndHlwZSA9IChRTWV0YVR5cGU6
OlR5cGUpIG1fcHJvcGVydHkudXNlclR5cGUoKTsKLSNlbHNlCi0gICAgICAgICAgICBhcmd0eXBl
ID0gKFFNZXRhVHlwZTo6VHlwZSkgUU1ldGFUeXBlOjp0eXBlKG1fcHJvcGVydHkudHlwZU5hbWUo
KSk7Ci0jZW5kaWYKIAogICAgICAgICAvLyBkeW5hbWljIHByb3BlcnRpZXMganVzdCBnZXQgYW55
IFFWYXJpYW50CiAgICAgICAgIFFWYXJpYW50IHZhbCA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQo
ZXhlYywgYVZhbHVlLCBhcmd0eXBlLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9ydW50aW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGlt
ZS5oCmluZGV4IGFjMmNmMmUwMTc5YjRkZTkyZWJlNjhjZjk0MTFiOTg3YzFhYzllNDMuLjNjNjk0
ZGU4MmNlMDY0ODdlOTU2YThjNWE2ZDg5YmFmNmQyNDU4ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X3J1bnRpbWUuaApAQCAtMjM4LDIxICsyMzgsMTEgQEAgcHJpdmF0ZToKIC8vIHdpdGgg
dGhlIGFwcHJvcHJpYXRlIHNpZ25hbCBvZiAnc2VuZGVyJy4gV2hlbiBleGVjdXRlKCkgaXMgY2Fs
bGVkLCBpdCB3aWxsIGNhbGwgSlMgJ3JlY2VpdmVyRnVuY3Rpb24nLgogY2xhc3MgUXRDb25uZWN0
aW9uT2JqZWN0IDogcHVibGljIFFPYmplY3QKIHsKLSNpZiBIQVZFKFFUNSkKICAgICBRX09CSkVD
VF9GQUtFCi0jZW5kaWYKIHB1YmxpYzoKICAgICBRdENvbm5lY3Rpb25PYmplY3QoSlNDb250ZXh0
UmVmLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IHNlbmRlckluc3RhbmNlLCBpbnQgc2lnbmFsSW5k
ZXgsIEpTT2JqZWN0UmVmIHJlY2VpdmVyLCBKU09iamVjdFJlZiByZWNlaXZlckZ1bmN0aW9uKTsK
ICAgICB+UXRDb25uZWN0aW9uT2JqZWN0KCk7CiAKLSNpZiAhSEFWRShRVDUpCi0gICAgLy8gRXhw
bGljaXRseSBkZWZpbmUgdGhlc2UgYmVjYXVzZSB3YW50IGEgY3VzdG9tIHF0X21ldGFjYWxsKCks
IHNvIHdlIGNhbid0IHVzZSBRX09CSkVDVCBtYWNyby4KLSAgICBzdGF0aWMgY29uc3QgUU1ldGFP
YmplY3Qgc3RhdGljTWV0YU9iamVjdDsKLSAgICB2aXJ0dWFsIGNvbnN0IFFNZXRhT2JqZWN0ICpt
ZXRhT2JqZWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkICpxdF9tZXRhY2FzdChjb25zdCBj
aGFyICopOwotICAgIHZpcnR1YWwgaW50IHF0X21ldGFjYWxsKFFNZXRhT2JqZWN0OjpDYWxsLCBp
bnQsIHZvaWQgKiphcmd2KTsKLSNlbmRpZgotCiAgICAgdm9pZCBleGVjdXRlKHZvaWQgKiphcmd2
KTsKIAogICAgIGJvb2wgbWF0Y2goSlNDb250ZXh0UmVmLCBRT2JqZWN0KiBzZW5kZXIsIGludCBz
aWduYWxJbmRleCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNPYmplY3RSZWYgZnVuY09iamVj
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZV9xdDQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY4MmYxNGVjMzFhYzYwOWI5NDkwZDRiZmYxMDNmZjZj
ZWRmZmEyYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZV9xdDQuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTkzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJxdF9ydW50aW1l
LmgiCi0KLSNpbmNsdWRlICJBUElDYXN0LmgiCi0jaW5jbHVkZSAiQm9vbGVhbk9iamVjdC5oIgot
I2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgotI2luY2x1ZGUgIkRhdGVQcm90b3R5cGUuaCIKLSNp
bmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0j
aW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTQ29udGV4dFJlZlByaXZhdGUuaCIKLSNp
bmNsdWRlICJKU0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVk
ZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRlIDxKU0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0hUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNM
b2NrLmgiCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJKU1JldGFpblB0ci5oIgot
I2luY2x1ZGUgIkpTVWludDhDbGFtcGVkQXJyYXkuaCIKLSNpbmNsdWRlICJPYmplY3RQcm90b3R5
cGUuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgotI2luY2x1ZGUgIlJlZ0V4cENv
bnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCi0jaW5jbHVkZSAicWRhdGV0
aW1lLmgiCi0jaW5jbHVkZSAicWRlYnVnLmgiCi0jaW5jbHVkZSAicW1ldGFvYmplY3QuaCIKLSNp
bmNsdWRlICJxbWV0YXR5cGUuaCIKLSNpbmNsdWRlICJxb2JqZWN0LmgiCi0jaW5jbHVkZSAicXN0
cmluZ2xpc3QuaCIKLSNpbmNsdWRlICJxdF9pbnN0YW5jZS5oIgotI2luY2x1ZGUgInF0X3BpeG1h
cHJ1bnRpbWUuaCIKLSNpbmNsdWRlICJxdmFybGVuZ3RoYXJyYXkuaCIKLQotI2luY2x1ZGUgPHd0
Zi9EYXRlTWF0aC5oPgotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9F
cnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWVfYXJyYXkuaD4KLSNpbmNsdWRlIDxydW50aW1lX29i
amVjdC5oPgotCi0vLyBRdFNjcmlwdCBoYXMgdGhlc2UKLVFfREVDTEFSRV9NRVRBVFlQRShRT2Jq
ZWN0TGlzdCk7Ci1RX0RFQ0xBUkVfTUVUQVRZUEUoUUxpc3Q8aW50Pik7Ci1RX0RFQ0xBUkVfTUVU
QVRZUEUoUVZhcmlhbnQpOwotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNl
IEpTQyB7Ci1uYW1lc3BhY2UgQmluZGluZ3MgewotCi0vLyBEZWJ1Z2dpbmcKLS8vI2RlZmluZSBR
VFdLX1JVTlRJTUVfQ09OVkVSU0lPTl9ERUJVRwotLy8jZGVmaW5lIFFUV0tfUlVOVElNRV9NQVRD
SF9ERUJVRwotCi1jbGFzcyBRV0tOb0RlYnVnCi17Ci1wdWJsaWM6Ci0gICAgaW5saW5lIFFXS05v
RGVidWcoKXt9Ci0gICAgaW5saW5lIH5RV0tOb0RlYnVnKCl7fQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBpbmxpbmUgUVdLTm9EZWJ1ZyAmb3BlcmF0b3I8PChjb25zdCBUICYpIHsg
cmV0dXJuICp0aGlzOyB9Ci19OwotCi0jaWZkZWYgUVRXS19SVU5USU1FX0NPTlZFUlNJT05fREVC
VUcKLSNkZWZpbmUgcUNvbnZEZWJ1ZygpIHFEZWJ1ZygpCi0jZWxzZQotI2RlZmluZSBxQ29udkRl
YnVnKCkgUVdLTm9EZWJ1ZygpCi0jZW5kaWYKLQotI2lmZGVmIFFUV0tfUlVOVElNRV9NQVRDSF9E
RUJVRwotI2RlZmluZSBxTWF0Y2hEZWJ1ZygpIHFEZWJ1ZygpCi0jZWxzZQotI2RlZmluZSBxTWF0
Y2hEZWJ1ZygpIFFXS05vRGVidWcoKQotI2VuZGlmCi0KLXR5cGVkZWYgZW51bSB7Ci0gICAgVmFy
aWFudCA9IDAsCi0gICAgTnVtYmVyLAotICAgIEJvb2xlYW4sCi0gICAgU3RyaW5nLAotICAgIERh
dGUsCi0gICAgUmVnRXhwLAotICAgIEFycmF5LAotICAgIFFPYmosCi0gICAgT2JqZWN0LAotICAg
IE51bGwsCi0gICAgUlRBcnJheSwKLSAgICBKU1VpbnQ4Q2xhbXBlZEFycmF5VHlwZQotfSBKU1Jl
YWxUeXBlOwotCi0jaWYgZGVmaW5lZChRVFdLX1JVTlRJTUVfQ09OVkVSU0lPTl9ERUJVRykgfHwg
ZGVmaW5lZChRVFdLX1JVTlRJTUVfTUFUQ0hfREVCVUcpCi1RRGVidWcgb3BlcmF0b3I8PChRRGVi
dWcgZGJnLCBjb25zdCBKU1JlYWxUeXBlICZjKQotewotICAgICBjb25zdCBjaGFyICptYXBbXSA9
IHsgIlZhcmlhbnQiLCAiTnVtYmVyIiwgIkJvb2xlYW4iLCAiU3RyaW5nIiwgIkRhdGUiLAotICAg
ICAgICAgIlJlZ0V4cCIsICJBcnJheSIsICJSVE9iamVjdCIsICJPYmplY3QiLCAiTnVsbCIsICJS
VEFycmF5In07Ci0KLSAgICAgZGJnLm5vc3BhY2UoKSA8PCAiSlNUeXBlKCIgPDwgKChpbnQpYykg
PDwgIiwgIiA8PCAgbWFwW2NdIDw8ICIpIjsKLQotICAgICByZXR1cm4gZGJnLnNwYWNlKCk7Ci19
Ci0jZW5kaWYKLQotc3RydWN0IFJ1bnRpbWVDb252ZXJzaW9uIHsKLSAgICBDb252ZXJ0VG9KU1Zh
bHVlRnVuY3Rpb24gdG9KU1ZhbHVlRnVuYzsKLSAgICBDb252ZXJ0VG9WYXJpYW50RnVuY3Rpb24g
dG9WYXJpYW50RnVuYzsKLX07Ci0KLXR5cGVkZWYgUUhhc2g8aW50LCBSdW50aW1lQ29udmVyc2lv
bj4gUnVudGltZUNvbnZlcnNpb25UYWJsZTsKLVFfR0xPQkFMX1NUQVRJQyhSdW50aW1lQ29udmVy
c2lvblRhYmxlLCBjdXN0b21SdW50aW1lQ29udmVyc2lvbnMpCi0KLXZvaWQgcmVnaXN0ZXJDdXN0
b21UeXBlKGludCBxdE1ldGFUeXBlSWQsIENvbnZlcnRUb1ZhcmlhbnRGdW5jdGlvbiB0b1Zhcmlh
bnRGdW5jLCBDb252ZXJ0VG9KU1ZhbHVlRnVuY3Rpb24gdG9KU1ZhbHVlRnVuYykKLXsKLSAgICBS
dW50aW1lQ29udmVyc2lvbiBjb252ZXJzaW9uOwotICAgIGNvbnZlcnNpb24udG9KU1ZhbHVlRnVu
YyA9IHRvSlNWYWx1ZUZ1bmM7Ci0gICAgY29udmVyc2lvbi50b1ZhcmlhbnRGdW5jID0gdG9WYXJp
YW50RnVuYzsKLSAgICBjdXN0b21SdW50aW1lQ29udmVyc2lvbnMoKS0+aW5zZXJ0KHF0TWV0YVR5
cGVJZCwgY29udmVyc2lvbik7Ci19Ci0KLXN0YXRpYyBib29sIGlzSlNVaW50OENsYW1wZWRBcnJh
eShKU1ZhbHVlIHZhbCkKLXsKLSAgICByZXR1cm4gdmFsLmlzQ2VsbCgpICYmIHZhbC5pbmhlcml0
cygmSlNVaW50OENsYW1wZWRBcnJheTo6c19pbmZvKTsKLX0KLQotc3RhdGljIEpTUmVhbFR5cGUg
dmFsdWVSZWFsVHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsKQotewotICAgIGlmICh2
YWwuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIE51bWJlcjsKLSAgICBlbHNlIGlmICh2YWwu
aXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZzsKLSAgICBlbHNlIGlmICh2YWwuaXNC
b29sZWFuKCkpCi0gICAgICAgIHJldHVybiBCb29sZWFuOwotICAgIGVsc2UgaWYgKHZhbC5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIE51bGw7Ci0gICAgZWxzZSBpZiAoaXNKU1VpbnQ4Q2xhbXBl
ZEFycmF5KHZhbCkpCi0gICAgICAgIHJldHVybiBKU1VpbnQ4Q2xhbXBlZEFycmF5VHlwZTsKLSAg
ICBlbHNlIGlmICh2YWwuaXNPYmplY3QoKSkgewotICAgICAgICBKU09iamVjdCAqb2JqZWN0ID0g
dmFsLnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmUnVudGlt
ZUFycmF5OjpzX2luZm8pKSAgLy8gUnVudGltZUFycmF5ICdpbmhlcml0cycgZnJvbSBBcnJheSwg
YnV0IG5vdCBpbiBDKysKLSAgICAgICAgICAgIHJldHVybiBSVEFycmF5OwotICAgICAgICBlbHNl
IGlmIChvYmplY3QtPmluaGVyaXRzKCZKU0FycmF5OjpzX2luZm8pKQotICAgICAgICAgICAgcmV0
dXJuIEFycmF5OwotICAgICAgICBlbHNlIGlmIChvYmplY3QtPmluaGVyaXRzKCZEYXRlSW5zdGFu
Y2U6OnNfaW5mbykpCi0gICAgICAgICAgICByZXR1cm4gRGF0ZTsKLSAgICAgICAgZWxzZSBpZiAo
b2JqZWN0LT5pbmhlcml0cygmUmVnRXhwT2JqZWN0OjpzX2luZm8pKQotICAgICAgICAgICAgcmV0
dXJuIFJlZ0V4cDsKLSAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmUnVudGltZU9i
amVjdDo6c19pbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBRT2JqOwotICAgICAgICByZXR1cm4g
T2JqZWN0OwotICAgIH0KLQotICAgIHJldHVybiBTdHJpbmc7IC8vIEkgZG9uJ3Qga25vdy4KLX0K
LQotUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBR
TWV0YVR5cGU6OlR5cGUsIGludCosIEhhc2hTZXQ8SlNPYmplY3QqPiosIGludCk7Ci0KLXN0YXRp
YyBRVmFyaWFudE1hcCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50TWFwKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9iamVjdCwgSGFzaFNldDxKU09iamVjdCo+KiB2aXNpdGVkT2JqZWN0cywgaW50
IHJlY3Vyc2lvbkxpbWl0KQotewotICAgIFFfQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7
Ci0KLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMpOwotICAgIG9iamVjdC0+
bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMs
IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwotICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25z
dF9pdGVyYXRvciBpdCA9IHByb3BlcnRpZXMuYmVnaW4oKTsKLSAgICBRVmFyaWFudE1hcCByZXN1
bHQ7Ci0gICAgaW50IG9iamRpc3QgPSAwOwotCi0gICAgd2hpbGUgKGl0ICE9IHByb3BlcnRpZXMu
ZW5kKCkpIHsKLSAgICAgICAgaWYgKG9iamVjdC0+cHJvcGVydHlJc0VudW1lcmFibGUoZXhlYywg
Kml0KSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBvYmplY3QtPmdldChleGVjLCAqaXQp
OwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBRVmFyaWFudCB2ID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRh
VHlwZTo6Vm9pZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG9iamRpc3QgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBV
U3RyaW5nIHVzdHJpbmcgPSAoKml0KS51c3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIFFT
dHJpbmcgaWQgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3Rl
cnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pbnNl
cnQoaWQsIHYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICArK2l0OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1RVmFyaWFudCBj
b252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1l
dGFUeXBlOjpUeXBlIGhpbnQsIGludCAqZGlzdGFuY2UsIEhhc2hTZXQ8SlNPYmplY3QqPiogdmlz
aXRlZE9iamVjdHMsIGludCByZWN1cnNpb25MaW1pdCkKLXsKLSAgICAtLXJlY3Vyc2lvbkxpbWl0
OwotCi0gICAgaWYgKCF2YWx1ZSB8fCAhcmVjdXJzaW9uTGltaXQpCi0gICAgICAgIHJldHVybiBR
VmFyaWFudCgpOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IDA7Ci0gICAgaWYgKHZhbHVlLmlz
T2JqZWN0KCkpIHsKLSAgICAgICAgb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAg
ICAgIGlmICh2aXNpdGVkT2JqZWN0cy0+Y29udGFpbnMob2JqZWN0KSkKLSAgICAgICAgICAgIHJl
dHVybiBRVmFyaWFudCgpOwotCi0gICAgICAgIHZpc2l0ZWRPYmplY3RzLT5hZGQob2JqZWN0KTsK
LSAgICB9Ci0KLSAgICAvLyBjaGVjayBtYWdpYyBwb2ludGVyIHZhbHVlcyBiZWZvcmUgZGVyZWZl
cmVuY2luZyB2YWx1ZQotICAgIGlmICh2YWx1ZSA9PSBqc05hTigpCi0gICAgICAgIHx8ICh2YWx1
ZSA9PSBqc1VuZGVmaW5lZCgpCi0gICAgICAgICAgICAmJiBoaW50ICE9IFFNZXRhVHlwZTo6UVN0
cmluZwotICAgICAgICAgICAgJiYgaGludCAhPSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJ
ZDxRVmFyaWFudD4oKSkpIHsKLSAgICAgICAgaWYgKGRpc3RhbmNlKQotICAgICAgICAgICAgKmRp
c3RhbmNlID0gLTE7Ci0gICAgICAgIHJldHVybiBRVmFyaWFudCgpOwotICAgIH0KLQotICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIEpTUmVhbFR5cGUgdHlwZSA9IHZhbHVlUmVhbFR5
cGUoZXhlYywgdmFsdWUpOwotICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6Vm9pZCkgewotICAg
ICAgICBzd2l0Y2godHlwZSkgewotICAgICAgICAgICAgY2FzZSBOdW1iZXI6Ci0gICAgICAgICAg
ICAgICAgaGludCA9IFFNZXRhVHlwZTo6RG91YmxlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBCb29sZWFuOgotICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5
cGU6OkJvb2w7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0cmlu
ZzoKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlw
ZTo6UVN0cmluZzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRGF0
ZToKLSAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRRGF0ZVRpbWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlZ0V4cDoKLSAgICAgICAgICAgICAg
ICBoaW50ID0gUU1ldGFUeXBlOjpRUmVnRXhwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBPYmplY3Q6Ci0gICAgICAgICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJp
dHMoJk51bWJlck9iamVjdDo6c19pbmZvKSkKLSAgICAgICAgICAgICAgICAgICAgaGludCA9IFFN
ZXRhVHlwZTo6RG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVjdC0+aW5oZXJp
dHMoJkJvb2xlYW5PYmplY3Q6OnNfaW5mbykpCi0gICAgICAgICAgICAgICAgICAgIGhpbnQgPSBR
TWV0YVR5cGU6OkJvb2w7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBoaW50ID0gUU1ldGFUeXBlOjpRVmFyaWFudE1hcDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgUU9iajoKLSAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBl
OjpRT2JqZWN0U3RhcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
SlNVaW50OENsYW1wZWRBcnJheVR5cGU6Ci0gICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlw
ZTo6UUJ5dGVBcnJheTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIFJUQXJyYXk6Ci0gICAgICAgICAgICAgICAgaGludCA9
IFFNZXRhVHlwZTo6UVZhcmlhbnRMaXN0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcUNvbnZEZWJ1ZygpIDw8ICJjb252ZXJ0VmFsdWVUb1FWYXJpYW50
OiBqc3R5cGUgaXMgIiA8PCB0eXBlIDw8ICIsIGhpbnQgaXMiIDw8IGhpbnQ7Ci0KLSAgICBpZiAo
dmFsdWUgPT0ganNOdWxsKCkKLSAgICAgICAgJiYgaGludCAhPSBRTWV0YVR5cGU6OlFPYmplY3RT
dGFyCi0gICAgICAgICYmIGhpbnQgIT0gUU1ldGFUeXBlOjpWb2lkU3RhcgotICAgICAgICAmJiBo
aW50ICE9IFFNZXRhVHlwZTo6UVN0cmluZwotICAgICAgICAmJiBoaW50ICE9IChRTWV0YVR5cGU6
OlR5cGUpIHFNZXRhVHlwZUlkPFFWYXJpYW50PigpKSB7Ci0gICAgICAgIGlmIChkaXN0YW5jZSkK
LSAgICAgICAgICAgICpkaXN0YW5jZSA9IC0xOwotICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsK
LSAgICB9Ci0KLSAgICBRVmFyaWFudCByZXQ7Ci0gICAgaW50IGRpc3QgPSAtMTsKLSAgICBzd2l0
Y2ggKGhpbnQpIHsKLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkJvb2w6Ci0gICAgICAgICAgICBp
ZiAodHlwZSA9PSBPYmplY3QgJiYgb2JqZWN0LT5pbmhlcml0cygmQm9vbGVhbk9iamVjdDo6c19p
bmZvKSkKLSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChhc0Jvb2xlYW5PYmplY3QodmFs
dWUpLT5pbnRlcm5hbFZhbHVlKCkudG9Cb29sZWFuKCkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHZhbHVlLnRvQm9vbGVhbigpKTsKLSAgICAgICAg
ICAgIGlmICh0eXBlID09IEJvb2xlYW4pCi0gICAgICAgICAgICAgICAgZGlzdCA9IDA7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkludDoKLSAgICAgICAgY2FzZSBRTWV0YVR5
cGU6OlVJbnQ6Ci0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpMb25nOgotICAgICAgICBjYXNlIFFN
ZXRhVHlwZTo6VUxvbmc6Ci0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpMb25nTG9uZzoKLSAgICAg
ICAgY2FzZSBRTWV0YVR5cGU6OlVMb25nTG9uZzoKLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlNo
b3J0OgotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6VVNob3J0OgotICAgICAgICBjYXNlIFFNZXRh
VHlwZTo6RmxvYXQ6Ci0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpEb3VibGU6Ci0gICAgICAgICAg
ICByZXQgPSBRVmFyaWFudCh2YWx1ZS50b051bWJlcihleGVjKSk7Ci0gICAgICAgICAgICByZXQu
Y29udmVydCgoUVZhcmlhbnQ6OlR5cGUpaGludCk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBO
dW1iZXIpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGhpbnQpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIFFNZXRhVHlwZTo6RG91YmxlOgotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5
cGU6OkZsb2F0OgotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkxvbmdMb25nOgot
ICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVTG9uZ0xvbmc6Ci0gICAgICAgICAgICAg
ICAgICAgIGRpc3QgPSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBjYXNlIFFNZXRhVHlwZTo6TG9uZzoKLSAgICAgICAgICAgICAgICBjYXNlIFFNZXRhVHlw
ZTo6VUxvbmc6Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAzOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6SW50OgotICAgICAg
ICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVSW50OgotICAgICAgICAgICAgICAgICAgICBkaXN0
ID0gNDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBR
TWV0YVR5cGU6OlNob3J0OgotICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVU2hvcnQ6
Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGRpc3QgPSAxMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgUU1ldGFUeXBlOjpRQ2hhcjoKLSAgICAgICAgICAgIGlmICh0eXBlID09IE51bWJl
ciB8fCB0eXBlID09IEJvb2xlYW4pIHsKLSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChR
Q2hhcigodXNob3J0KXZhbHVlLnRvTnVtYmVyKGV4ZWMpKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHR5cGUgPT0gQm9vbGVhbikKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDM7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNjsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyBzdHIgPSB2YWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUUNoYXIo
c3RyLmxlbmd0aCgpID8gKihjb25zdCB1c2hvcnQqKXN0ci5pbXBsKCktPmNoYXJhY3RlcnMoKSA6
IDApKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBTdHJpbmcpCi0gICAgICAgICAgICAg
ICAgICAgIGRpc3QgPSAzOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgZGlzdCA9IDEwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBRTWV0YVR5cGU6OlFTdHJpbmc6IHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlKQotICAgICAg
ICAgICAgICAgICAgICAqZGlzdGFuY2UgPSAxOwotICAgICAgICAgICAgICAgIHJldHVybiBRU3Ry
aW5nKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0
cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgICAgICAg
ICByZXQgPSBRVmFyaWFudChRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNo
YXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSkpOwotICAgICAgICAgICAgICAgIGlmICh0eXBl
ID09IFN0cmluZykKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDA7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpR
VmFyaWFudE1hcDoKLSAgICAgICAgICAgIGlmICh0eXBlID09IE9iamVjdCB8fCB0eXBlID09IEFy
cmF5IHx8IHR5cGUgPT0gUlRBcnJheSkgewotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50
KGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnRNYXAoZXhlYywgb2JqZWN0LCB2aXNpdGVkT2JqZWN0cywg
cmVjdXJzaW9uTGltaXQpKTsKLSAgICAgICAgICAgICAgICAvLyBUaG9zZSB0eXBlcyBjYW4gc3Rp
bGwgaGF2ZSBwZXJmZWN0IG1hdGNoZXMsIGUuZy4gJ2Jvb2wnIGlmIHZhbHVlIGlzIGEgQm9vbGVh
biBPYmplY3QuCi0gICAgICAgICAgICAgICAgZGlzdCA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UVZhcmlhbnRMaXN0Ogot
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gUlRBcnJheSkgewotICAgICAgICAgICAgICAgIFJ1bnRp
bWVBcnJheSogcnRhcnJheSA9IHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7Ci0K
LSAgICAgICAgICAgICAgICBRVmFyaWFudExpc3QgcmVzdWx0OwotICAgICAgICAgICAgICAgIGlu
dCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBpbnQgb2JqZGlz
dCA9IDA7Ci0gICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjb252ZXJ0aW5nIGEgIiA8
PCBsZW4gPDwgIiBsZW5ndGggQXJyYXkiOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBydGFy
cmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFN
ZXRhVHlwZTo6Vm9pZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAob2JqZGlzdCA9PSAtMSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJGYWlsZWQgY29udmVydGluZyBlbGVtZW50IGF0
IGluZGV4ICIgPDwgaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBGYWlsZWQg
Y29udmVydGluZyBhIGxpc3QgZW50cnksIHNvIGZhaWwgdGhlIGFycmF5Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG9iamRpc3Qg
IT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIGlmICh0eXBlID09IEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBzdGF0aWNfY2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAg
IFFWYXJpYW50TGlzdCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgaW50IGxlbiA9IGFycmF5LT5s
ZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBpbnQgb2JqZGlzdCA9IDA7Ci0gICAgICAgICAgICAg
ICAgcUNvbnZEZWJ1ZygpIDw8ICJjb252ZXJ0aW5nIGEgIiA8PCBsZW4gPDwgIiBsZW5ndGggQXJy
YXkiOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhl
YywgdmFsLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJz
aW9uTGltaXQpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9iamRpc3QgPT0gLTEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiRmFpbGVkIGNvbnZlcnRpbmcg
ZWxlbWVudCBhdCBpbmRleCAiIDw8IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsg
Ly8gRmFpbGVkIGNvbnZlcnRpbmcgYSBsaXN0IGVudHJ5LCBzbyBmYWlsIHRoZSBhcnJheQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChvYmpkaXN0ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OwotICAgICAg
ICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFrZSBhIHNpbmdsZSBs
ZW5ndGggYXJyYXkKLSAgICAgICAgICAgICAgICBpbnQgb2JqZGlzdDsKLSAgICAgICAgICAgICAg
ICBxQ29udkRlYnVnKCkgPDwgIm1ha2luZyBhIHNpbmdsZSBsZW5ndGggdmFyaWFudGxpc3QiOwot
ICAgICAgICAgICAgICAgIFFWYXJpYW50IHZhciA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhl
YywgdmFsdWUsIFFNZXRhVHlwZTo6Vm9pZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1
cnNpb25MaW1pdCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9iamRpc3QgIT0gLTEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgUVZhcmlhbnRMaXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0IDw8IHZhcjsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQocmVzdWx0
KTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiZmFpbGVkIG1ha2luZyBz
aW5nbGUgbGVuZ3RoIHZhcmxpc3QiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRU3RyaW5nTGlz
dDogewotICAgICAgICAgICAgaWYgKHR5cGUgPT0gUlRBcnJheSkgewotICAgICAgICAgICAgICAg
IFJ1bnRpbWVBcnJheSogcnRhcnJheSA9IHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVj
dCk7Ci0KLSAgICAgICAgICAgICAgICBRU3RyaW5nTGlzdCByZXN1bHQ7Ci0gICAgICAgICAgICAg
ICAgaW50IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0aCgpOwotICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhlYywgaSk7Ci0gICAg
ICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmco
KGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0
aCgpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHFzdHJpbmcpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAg
ICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09
IEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxK
U0FycmF5Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAgIFFTdHJpbmdMaXN0IHJlc3VsdDsK
LSAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOwotICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICBV
U3RyaW5nIHVzdHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAg
ICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0
cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChxc3RyaW5nKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQo
cmVzdWx0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFrZSBh
IHNpbmdsZSBsZW5ndGggYXJyYXkKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgICAgICAgICAgUVN0cmlu
ZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0
ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIFFTdHJpbmdMaXN0IHJl
c3VsdDsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHFzdHJpbmcpOwotICAgICAgICAg
ICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgZGlzdCA9IDEw
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlIFFNZXRhVHlwZTo6UUJ5dGVBcnJheTogewotICAgICAgICAgICAgaWYgKHR5cGUgPT0g
SlNVaW50OENsYW1wZWRBcnJheVR5cGUpIHsKLSAgICAgICAgICAgICAgICBXVEY6OlVpbnQ4Q2xh
bXBlZEFycmF5KiBhcnIgPSB0b1VpbnQ4Q2xhbXBlZEFycmF5KHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICByZXQgPSBRVmFyaWFudChRQnl0ZUFycmF5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGFyci0+ZGF0YSgpKSwgYXJyLT5sZW5ndGgoKSkpOwotICAgICAgICAgICAgICAgIGRpc3Qg
PSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJp
bmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgICAgICAgICAg
cmV0ID0gUVZhcmlhbnQoUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFy
YWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpLnRvTGF0aW4xKCkpOwotICAgICAgICAgICAgICAg
IGlmICh0eXBlID09IFN0cmluZykKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgUU1l
dGFUeXBlOjpRRGF0ZVRpbWU6Ci0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRRGF0ZToKLSAgICAg
ICAgY2FzZSBRTWV0YVR5cGU6OlFUaW1lOgotICAgICAgICAgICAgaWYgKHR5cGUgPT0gRGF0ZSkg
ewotICAgICAgICAgICAgICAgIERhdGVJbnN0YW5jZSogZGF0ZSA9IHN0YXRpY19jYXN0PERhdGVJ
bnN0YW5jZSo+KG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ2R0
OwotICAgICAgICAgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShleGVjLCBkYXRlLT5pbnRl
cm5hbE51bWJlcigpLCB0cnVlLCBnZHQpOwotICAgICAgICAgICAgICAgIGlmIChoaW50ID09IFFN
ZXRhVHlwZTo6UURhdGVUaW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFEYXRlVGlt
ZShRRGF0ZShnZHQueWVhciArIDE5MDAsIGdkdC5tb250aCArIDEsIGdkdC5tb250aERheSksIFFU
aW1lKGdkdC5ob3VyLCBnZHQubWludXRlLCBnZHQuc2Vjb25kKSwgUXQ6OlVUQyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGRpc3QgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9
PSBRTWV0YVR5cGU6OlFEYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFEYXRlKGdk
dC55ZWFyICsgMTkwMCwgZ2R0Lm1vbnRoICsgMSwgZ2R0Lm1vbnRoRGF5KTsKLSAgICAgICAgICAg
ICAgICAgICAgZGlzdCA9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0ID0gUVRpbWUoZ2R0LmhvdXIgKyAxOTAwLCBnZHQubWludXRlLCBnZHQuc2Vj
b25kKTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDI7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IE51bWJlcikgewotICAgICAgICAgICAgICAg
IGRvdWJsZSBiID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgR3JlZ29y
aWFuRGF0ZVRpbWUgZ2R0OwotICAgICAgICAgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShl
eGVjLCBiLCB0cnVlLCBnZHQpOwotICAgICAgICAgICAgICAgIGlmIChoaW50ID09IFFNZXRhVHlw
ZTo6UURhdGVUaW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFEYXRlVGltZShRRGF0
ZShnZHQueWVhciArIDE5MDAsIGdkdC5tb250aCArIDEsIGdkdC5tb250aERheSksIFFUaW1lKGdk
dC5ob3VyLCBnZHQubWludXRlLCBnZHQuc2Vjb25kKSwgUXQ6OlVUQyk7Ci0gICAgICAgICAgICAg
ICAgICAgIGRpc3QgPSA2OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSBRTWV0
YVR5cGU6OlFEYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFEYXRlKGdkdC55ZWFy
ICsgMTkwMCwgZ2R0Lm1vbnRoICsgMSwgZ2R0Lm1vbnRoRGF5KTsKLSAgICAgICAgICAgICAgICAg
ICAgZGlzdCA9IDg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gUVRpbWUoZ2R0LmhvdXIsIGdkdC5taW51dGUsIGdkdC5zZWNvbmQpOwotICAgICAg
ICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAgfQotI2lmbmRlZiBRVF9O
T19EQVRFU1RSSU5HCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gU3RyaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNv
bnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgp
KTsKLQotICAgICAgICAgICAgICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGVUaW1lKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFFEYXRlVGltZSBkdCA9IFFEYXRlVGltZTo6ZnJvbVN0cmlu
Zyhxc3RyaW5nLCBRdDo6SVNPRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNW
YWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZVRpbWU6OmZyb21TdHJp
bmcocXN0cmluZywgUXQ6OlRleHREYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkdC5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFEYXRlVGltZTo6ZnJvbVN0
cmluZyhxc3RyaW5nLCBRdDo6U3lzdGVtTG9jYWxlRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghZHQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZVRp
bWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OkxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoZHQuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBk
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAyOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgUURhdGUgZHQgPSBRRGF0ZTo6ZnJvbVN0cmluZyhxc3Ry
aW5nLCBRdDo6SVNPRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZTo6ZnJvbVN0cmluZyhxc3RyaW5n
LCBRdDo6VGV4dERhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUURhdGU6OmZyb21TdHJpbmcocXN0cmluZywg
UXQ6OlN5c3RlbUxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFs
aWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUURhdGU6OmZyb21TdHJpbmcocXN0
cmluZywgUXQ6OkxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZHQuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBkdDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRpc3QgPSAzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUVRpbWUgZHQgPSBRVGltZTo6ZnJvbVN0
cmluZyhxc3RyaW5nLCBRdDo6SVNPRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHQu
aXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRVGltZTo6ZnJvbVN0cmlu
Zyhxc3RyaW5nLCBRdDo6VGV4dERhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWR0Lmlz
VmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUVRpbWU6OmZyb21TdHJpbmco
cXN0cmluZywgUXQ6OlN5c3RlbUxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IWR0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUVRpbWU6OmZyb21T
dHJpbmcocXN0cmluZywgUXQ6OkxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
ZHQuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBkdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRpc3QgPSAzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotI2VuZGlmIC8vIFFUX05PX0RBVEVTVFJJTkcKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRUmVnRXhwOgot
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gUmVnRXhwKSB7Ci0vKgotICAgICAgICAgICAgICAgIFJl
Z0V4cE9iamVjdCAqcmUgPSBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPihvYmplY3QpOwotKi8K
LSAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGNvbnZlcnQuLiBhIGJpdCByaXNreQotICAg
ICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25z
dCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7
Ci0KLSAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG9mIHRoZSBmb3JtICcveHh4eHh4L2knCi0g
ICAgICAgICAgICAgICAgaW50IGZpcnN0U2xhc2ggPSBxc3RyaW5nLmluZGV4T2YoUUxhdGluMUNo
YXIoJy8nKSk7Ci0gICAgICAgICAgICAgICAgaW50IGxhc3RTbGFzaCA9IHFzdHJpbmcubGFzdElu
ZGV4T2YoUUxhdGluMUNoYXIoJy8nKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0U2xhc2gg
Pj0wICYmIGxhc3RTbGFzaCA+IGZpcnN0U2xhc2gpIHsKLSAgICAgICAgICAgICAgICAgICAgUVJl
Z0V4cCByZWFsUmU7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVhbFJlLnNldFBhdHRlcm4ocXN0
cmluZy5taWQoZmlyc3RTbGFzaCArIDEsIGxhc3RTbGFzaCAtIGZpcnN0U2xhc2ggLSAxKSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHFzdHJpbmcubWlkKGxhc3RTbGFzaCArIDEpLmNvbnRh
aW5zKFFMYXRpbjFDaGFyKCdpJykpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVhbFJlLnNl
dENhc2VTZW5zaXRpdml0eShRdDo6Q2FzZUluc2Vuc2l0aXZlKTsKLQotICAgICAgICAgICAgICAg
ICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlYWxSZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGRpc3QgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHFDb252RGVidWcoKSA8PCAiY291bGRuJ3QgcGFyc2UgYSBKUyByZWdleHAiOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBTdHJpbmcpIHsKLSAg
ICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29u
c3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkp
OwotCi0gICAgICAgICAgICAgICAgUVJlZ0V4cCByZShxc3RyaW5nKTsKLSAgICAgICAgICAgICAg
ICBpZiAocmUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50
Ojpmcm9tVmFsdWUocmUpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBRTWV0YVR5cGU6OlFPYmplY3RTdGFyOgotICAgICAgICAgICAgaWYgKHR5cGUgPT0gUU9i
aikgewotICAgICAgICAgICAgICAgIFF0SW5zdGFuY2UqIHF0aW5zdCA9IFF0SW5zdGFuY2U6Omdl
dEluc3RhbmNlKG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHF0aW5zdCkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAocXRpbnN0LT5nZXRPYmplY3QoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJmb3VuZCBpbnN0YW5jZSwgd2l0aCBvYmplY3Q6IiA8
PCAodm9pZCopIHF0aW5zdC0+Z2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHF0aW5zdC0+Z2V0T2JqZWN0KCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8IHJldDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRpc3QgPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjYW4ndCBjb252ZXJ0IGRlbGV0ZWQgcW9iamVj
dCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgIndhc24ndCBhIHF0aW5zdGFuY2UiOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBOdWxsKSB7
Ci0gICAgICAgICAgICAgICAgUU9iamVjdCogbnVsbG9iaiA9IDA7Ci0gICAgICAgICAgICAgICAg
cmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShudWxsb2JqKTsKLSAgICAgICAgICAgICAgICBkaXN0
ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcUNvbnZEZWJ1Zygp
IDw8ICJwcmV2aW91cyB0eXBlIHdhcyBub3QgYW4gb2JqZWN0OiIgPDwgdHlwZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpWb2lk
U3RhcjoKLSAgICAgICAgICAgIGlmICh0eXBlID09IFFPYmopIHsKLSAgICAgICAgICAgICAgICBR
dEluc3RhbmNlKiBxdGluc3QgPSBRdEluc3RhbmNlOjpnZXRJbnN0YW5jZShvYmplY3QpOwotICAg
ICAgICAgICAgICAgIGlmIChxdGluc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHF0aW5z
dC0+Z2V0T2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8
PCAiZm91bmQgaW5zdGFuY2UsIHdpdGggb2JqZWN0OiIgPDwgKHZvaWQqKSBxdGluc3QtPmdldE9i
amVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1
ZSgodm9pZCAqKXF0aW5zdC0+Z2V0T2JqZWN0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cUNvbnZEZWJ1ZygpIDw8IHJldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAwOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcUNv
bnZEZWJ1ZygpIDw8ICJjYW4ndCBjb252ZXJ0IGRlbGV0ZWQgcW9iamVjdCI7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBxQ29udkRlYnVnKCkgPDwgIndhc24ndCBhIHF0aW5zdGFuY2UiOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBOdWxsKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZSgodm9pZCopMCk7Ci0gICAgICAgICAgICAgICAg
ZGlzdCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gTnVtYmVyKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gSSBkb24ndCB0aGluayB0aGF0IGNvbnZlcnRpbmcgYSBkb3VibGUgdG8g
YSBwb2ludGVyIGlzIGEgd2lzZQotICAgICAgICAgICAgICAgIC8vIG1vdmUuICBFeGNlcHQgbWF5
YmUgMC4KLSAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImdvdCBudW1iZXIgZm9yIHZv
aWQgKiAtIG5vdCBjb252ZXJ0aW5nLCBzZWVtcyB1bnNhZmU6IiA8PCB2YWx1ZS50b051bWJlcihl
eGVjKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcUNvbnZEZWJ1Zygp
IDw8ICJ2b2lkKiAtIHVuaGFuZGxlZCB0eXBlIiA8PCB0eXBlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIE5vbiBj
b25zdCB0eXBlIGlkcwotICAgICAgICAgICAgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkg
cU1ldGFUeXBlSWQ8UU9iamVjdExpc3Q+KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gUlRBcnJheSkgewotICAgICAgICAgICAgICAgICAgICBSdW50aW1lQXJy
YXkqIHJ0YXJyYXkgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwotCi0gICAg
ICAgICAgICAgICAgICAgIFFPYmplY3RMaXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlIHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVtZGlzdCA9IC0xOwotICAgICAgICAgICAg
ICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywg
dmFsLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFyLCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzLCBy
ZWN1cnNpb25MaW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0g
MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8
UU9iamVjdCo+KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmYWlsIGNvbnZlcnNpb24KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5jb3VudCgpID09IGxlbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJv
bVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBKU0Fy
cmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpTQXJyYXkgKj4ob2JqZWN0KTsKLSAgICAgICAgICAg
ICAgICAgICAgUU9iamVjdExpc3QgcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBpbnQgbGVu
ID0gYXJyYXktPmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFy
cmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3Qg
PSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFs
dWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0
LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGl0ZW1kaXN0ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChpdGVtLnZhbHVlPFFPYmplY3QqPigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmFpbCBjb252ZXJz
aW9uCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY291bnQoKSA9PSBsZW4pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBh
IHNpbmdsZSBsZW5ndGggYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgUU9iamVjdExpc3QgcmVz
dWx0OwotICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKLSAgICAgICAgICAg
ICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFs
dWUsIFFNZXRhVHlwZTo6UU9iamVjdFN0YXIsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJl
Y3Vyc2lvbkxpbWl0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxRT2JqZWN0
Kj4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBl
SWQ8UUxpc3Q8aW50PiA+KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBSVEFycmF5
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVBcnJheSogcnRhcnJheSA9IHN0YXRpY19j
YXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgUUxpc3Q8
aW50PiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRM
ZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsr
aSkgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBydGFycmF5LT5nZXRD
b25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaXRlbWRpc3QgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0
ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpJbnQsICZp
dGVtZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxpbnQ+KCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmYWlsIGNvbnZl
cnNpb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb3VudCgpID09IGxlbikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxKU0FycmF5ICo+KG9iamVj
dCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgUUxpc3Q8aW50PiByZXN1bHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBsZW4gPSBhcnJheS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWUgdmFsID0gYXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpdGVtZGlzdCA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQg
aXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OkludCwg
Jml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPGludD4oKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZhaWwgY29u
dmVyc2lvbgotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50KCkgPT0gbGVuKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1h
a2UgYSBzaW5nbGUgbGVuZ3RoIGFycmF5Ci0gICAgICAgICAgICAgICAgICAgIFFMaXN0PGludD4g
cmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKLSAgICAgICAg
ICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywg
dmFsdWUsIFFNZXRhVHlwZTo6SW50LCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNp
b25MaW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8aW50PigpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoUXRQaXhtYXBJbnN0YW5jZTo6Y2FuSGFuZGxlKHN0YXRpY19jYXN0PFFNZXRh
VHlwZTo6VHlwZT4oaGludCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUXRQaXhtYXBJbnN0
YW5jZTo6dmFyaWFudEZyb21PYmplY3Qob2JqZWN0LCBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5
cGU+KGhpbnQpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VzdG9tUnVudGltZUNvbnZlcnNp
b25zKCktPmNvbnRhaW5zKGhpbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gY3VzdG9tUnVu
dGltZUNvbnZlcnNpb25zKCktPnZhbHVlKGhpbnQpLnRvVmFyaWFudEZ1bmMob2JqZWN0LCAmZGlz
dCwgdmlzaXRlZE9iamVjdHMpOwotICAgICAgICAgICAgICAgIGlmIChkaXN0ID09IDApCi0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IChR
TWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFWYXJpYW50PigpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGRpc3RhbmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgKmRpc3RhbmNlID0gMTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gT2JqZWN0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBoYXZlbid0IHJlYWxseSB2aXNpdGVkIHRoaXMg
b2JqZWN0IHlldCwgd2UgcmVtb3ZlIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVk
T2JqZWN0cy0+cmVtb3ZlKG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAvLyBBbmQgdGhlbiByZWN1cnNlIHdpdGggdGhlIGF1dG9kZXRlY3QgZmxh
ZwotICAgICAgICAgICAgICAgICAgICByZXQgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMs
IHZhbHVlLCBRTWV0YVR5cGU6OlZvaWQsIGRpc3RhbmNlLCB2aXNpdGVkT2JqZWN0cywgcmVjdXJz
aW9uTGltaXQpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIXJldC5p
c1ZhbGlkKCkpCi0gICAgICAgIGRpc3QgPSAtMTsKLSAgICBpZiAoZGlzdGFuY2UpCi0gICAgICAg
ICpkaXN0YW5jZSA9IGRpc3Q7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1RVmFyaWFudCBjb252
ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFU
eXBlOjpUeXBlIGhpbnQsIGludCAqZGlzdGFuY2UpCi17Ci0gICAgY29uc3QgaW50IHJlY3Vyc2lv
bkxpbWl0ID0gMjAwOwotICAgIEhhc2hTZXQ8SlNPYmplY3QqPiB2aXNpdGVkT2JqZWN0czsKLSAg
ICByZXR1cm4gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWx1ZSwgaGludCwgZGlzdGFu
Y2UsICZ2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwotfQotCi1KU1ZhbHVlIGNvbnZl
cnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
IHJvb3QsIGNvbnN0IFFWYXJpYW50JiB2YXJpYW50KQotewotICAgIC8vIFZhcmlhbnRzIHdpdGgg
UU9iamVjdCAqIGNhbiBiZSBpc051bGwgYnV0IG5vdCBhIG51bGwgcG9pbnRlcgotICAgIC8vIEFu
IGVtcHR5IFFTdHJpbmcgdmFyaWFudCBpcyBhbHNvIG51bGwKLSAgICBRTWV0YVR5cGU6OlR5cGUg
dHlwZSA9IChRTWV0YVR5cGU6OlR5cGUpIHZhcmlhbnQudXNlclR5cGUoKTsKLQotICAgIHFDb252
RGVidWcoKSA8PCAiY29udmVydFFWYXJpYW50VG9WYWx1ZTogbWV0YXR5cGU6IiA8PCB0eXBlIDw8
ICIsIGlzbnVsbDogIiA8PCB2YXJpYW50LmlzTnVsbCgpOwotICAgIGlmICh2YXJpYW50LmlzTnVs
bCgpICYmCi0gICAgICAgIHR5cGUgIT0gUU1ldGFUeXBlOjpRT2JqZWN0U3RhciAmJgotICAgICAg
ICB0eXBlICE9IFFNZXRhVHlwZTo6Vm9pZFN0YXIgJiYKLSAgICAgICAgdHlwZSAhPSBRTWV0YVR5
cGU6OlFXaWRnZXRTdGFyICYmCi0gICAgICAgIHR5cGUgIT0gUU1ldGFUeXBlOjpRU3RyaW5nKSB7
Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICB9Ci0KLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKLQotICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6Qm9vbCkKLSAgICAgICAgcmV0
dXJuIGpzQm9vbGVhbih2YXJpYW50LnRvQm9vbCgpKTsKLQotICAgIGlmICh0eXBlID09IFFNZXRh
VHlwZTo6SW50IHx8Ci0gICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpVSW50IHx8Ci0gICAgICAg
IHR5cGUgPT0gUU1ldGFUeXBlOjpMb25nIHx8Ci0gICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpV
TG9uZyB8fAotICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6TG9uZ0xvbmcgfHwKLSAgICAgICAg
dHlwZSA9PSBRTWV0YVR5cGU6OlVMb25nTG9uZyB8fAotICAgICAgICB0eXBlID09IFFNZXRhVHlw
ZTo6U2hvcnQgfHwKLSAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OlVTaG9ydCB8fAotICAgICAg
ICB0eXBlID09IFFNZXRhVHlwZTo6RmxvYXQgfHwKLSAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6
OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhcmlhbnQudG9Eb3VibGUoKSk7Ci0K
LSAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFSZWdFeHApIHsKLSAgICAgICAgUVJlZ0V4cCBy
ZSA9IHZhcmlhbnQudmFsdWU8UVJlZ0V4cD4oKTsKLQotICAgICAgICBpZiAocmUuaXNWYWxpZCgp
KSB7Ci0gICAgICAgICAgICBVU3RyaW5nIHBhdHRlcm4oKFVDaGFyKilyZS5wYXR0ZXJuKCkudXRm
MTYoKSwgcmUucGF0dGVybigpLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIFJlZ0V4cEZsYWdzIGZs
YWdzID0gKHJlLmNhc2VTZW5zaXRpdml0eSgpID09IFF0OjpDYXNlSW5zZW5zaXRpdmUpID8gRmxh
Z0lnbm9yZUNhc2UgOiBOb0ZsYWdzOwotCi0gICAgICAgICAgICBKU0M6OlJlZ0V4cCogcmVnRXhw
ID0gSlNDOjpSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdz
KTsKLSAgICAgICAgICAgIGlmIChyZWdFeHAtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdF
eHApOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUgfHwKLSAgICAgICAgdHlwZSA9PSBR
TWV0YVR5cGU6OlFEYXRlIHx8Ci0gICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpRVGltZSkgewot
Ci0gICAgICAgIFFEYXRlIGRhdGUgPSBRRGF0ZTo6Y3VycmVudERhdGUoKTsKLSAgICAgICAgUVRp
bWUgdGltZSgwLDAsMCk7IC8vIG1pZG5pZ2h0Ci0KLSAgICAgICAgaWYgKHR5cGUgPT0gUU1ldGFU
eXBlOjpRRGF0ZSkKLSAgICAgICAgICAgIGRhdGUgPSB2YXJpYW50LnZhbHVlPFFEYXRlPigpOwot
ICAgICAgICBlbHNlIGlmICh0eXBlID09IFFNZXRhVHlwZTo6UVRpbWUpCi0gICAgICAgICAgICB0
aW1lID0gdmFyaWFudC52YWx1ZTxRVGltZT4oKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBRRGF0ZVRpbWUgZHQgPSB2YXJpYW50LnZhbHVlPFFEYXRlVGltZT4oKS50b0xvY2FsVGltZSgp
OwotICAgICAgICAgICAgZGF0ZSA9IGR0LmRhdGUoKTsKLSAgICAgICAgICAgIHRpbWUgPSBkdC50
aW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEYXRlcyBzcGVjaWZpZWQgdGhpcyB3YXkg
YXJlIGluIGxvY2FsIHRpbWUgKHdlIGNvbnZlcnQgRGF0ZVRpbWVzIGFib3ZlKQotICAgICAgICBH
cmVnb3JpYW5EYXRlVGltZSBkdDsKLSAgICAgICAgZHQueWVhciA9IGRhdGUueWVhcigpIC0gMTkw
MDsKLSAgICAgICAgZHQubW9udGggPSBkYXRlLm1vbnRoKCkgLSAxOwotICAgICAgICBkdC5tb250
aERheSA9IGRhdGUuZGF5KCk7Ci0gICAgICAgIGR0LmhvdXIgPSB0aW1lLmhvdXIoKTsKLSAgICAg
ICAgZHQubWludXRlID0gdGltZS5taW51dGUoKTsKLSAgICAgICAgZHQuc2Vjb25kID0gdGltZS5z
ZWNvbmQoKTsKLSAgICAgICAgZHQuaXNEU1QgPSAtMTsKLSAgICAgICAgZG91YmxlIG1zID0gZ3Jl
Z29yaWFuRGF0ZVRpbWVUb01TKGV4ZWMsIGR0LCB0aW1lLm1zZWMoKSwgLyppbnB1dElzVVRDKi8g
ZmFsc2UpOwotCi0gICAgICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdHJ1bmMobXMpKTsKLSAg
ICB9Ci0KLSAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFCeXRlQXJyYXkpIHsKLSAgICAgICAg
UUJ5dGVBcnJheSBxdEJ5dGVBcnJheSA9IHZhcmlhbnQudmFsdWU8UUJ5dGVBcnJheT4oKTsKLSAg
ICAgICAgV1RGOjpSZWZQdHI8V1RGOjpVaW50OENsYW1wZWRBcnJheT4gd3RmQnl0ZUFycmF5ID0g
V1RGOjpVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChxdEJ5dGVBcnJheS5s
ZW5ndGgoKSk7Ci0gICAgICAgIG1lbWNweSh3dGZCeXRlQXJyYXktPmRhdGEoKSwgcXRCeXRlQXJy
YXkuY29uc3REYXRhKCksIHF0Qnl0ZUFycmF5Lmxlbmd0aCgpKTsKLSAgICAgICAgcmV0dXJuIHRv
SlMoZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLCB3dGZCeXRlQXJyYXkuZ2V0KCkpOwotICAgIH0KLQotICAgIGlmICh0eXBl
ID09IFFNZXRhVHlwZTo6UU9iamVjdFN0YXIgfHwgdHlwZSA9PSBRTWV0YVR5cGU6OlFXaWRnZXRT
dGFyKSB7Ci0gICAgICAgIFFPYmplY3QqIG9iaiA9IHZhcmlhbnQudmFsdWU8UU9iamVjdCo+KCk7
Ci0gICAgICAgIGlmICghb2JqKQotICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgICAg
ICByZXR1cm4gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShvYmosIHJvb3QsIFF0SW5zdGFuY2U6
OlF0T3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKLSAgICB9Ci0KLSAgICBp
ZiAoUXRQaXhtYXBJbnN0YW5jZTo6Y2FuSGFuZGxlKHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlw
ZT4odmFyaWFudC50eXBlKCkpKSkKLSAgICAgICAgcmV0dXJuIFF0UGl4bWFwSW5zdGFuY2U6OmNy
ZWF0ZVBpeG1hcFJ1bnRpbWVPYmplY3QoZXhlYywgcm9vdCwgdmFyaWFudCk7Ci0KLSAgICBpZiAo
Y3VzdG9tUnVudGltZUNvbnZlcnNpb25zKCktPmNvbnRhaW5zKHR5cGUpKSB7Ci0gICAgICAgIGlm
ICghcm9vdC0+Z2xvYmFsT2JqZWN0KCktPmluaGVyaXRzKCZKU0RPTVdpbmRvdzo6c19pbmZvKSkK
LSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IChzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KHJvb3QtPmdsb2JhbE9iamVjdCgp
KSktPmltcGwoKS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICByZXR1cm4gY3VzdG9tUnVudGltZUNv
bnZlcnNpb25zKCktPnZhbHVlKHR5cGUpLnRvSlNWYWx1ZUZ1bmMoZXhlYywgdG9KU0RPTUdsb2Jh
bE9iamVjdChkb2N1bWVudCwgZXhlYyksIHZhcmlhbnQpOwotICAgIH0KLQotICAgIGlmICh0eXBl
ID09IFFNZXRhVHlwZTo6UVZhcmlhbnRNYXApIHsKLSAgICAgICAgLy8gY3JlYXRlIGEgbmV3IG9i
amVjdCwgYW5kIHN0dWZmIHByb3BlcnRpZXMgaW50byBpdAotICAgICAgICBKU09iamVjdCogcmV0
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgICAgIFFWYXJpYW50TWFwIG1hcCA9
IHZhcmlhbnQudmFsdWU8UVZhcmlhbnRNYXA+KCk7Ci0gICAgICAgIFFWYXJpYW50TWFwOjpjb25z
dF9pdGVyYXRvciBpID0gbWFwLmNvbnN0QmVnaW4oKTsKLSAgICAgICAgd2hpbGUgKGkgIT0gbWFw
LmNvbnN0RW5kKCkpIHsKLSAgICAgICAgICAgIFFTdHJpbmcgcyA9IGkua2V5KCk7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHZhbCA9IGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoZXhlYywgcm9vdC5nZXQo
KSwgaS52YWx1ZSgpKTsKLSAgICAgICAgICAgIGlmICh2YWwpIHsKLSAgICAgICAgICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgICAgICAgICByZXQtPm1ldGhvZFRhYmxlKCkt
PnB1dChyZXQsIGV4ZWMsIElkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8Y29uc3QgVUNoYXIgKj4ocy5jb25zdERhdGEoKSksIHMubGVuZ3RoKCkpLCB2
YWwsIHNsb3QpOwotICAgICAgICAgICAgICAgIC8vICMjIyBlcnJvciBjYXNlPwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgKytpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldDsK
LSAgICB9Ci0KLSAgICAvLyBMaXN0IHR5cGVzCi0gICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpR
VmFyaWFudExpc3QpIHsKLSAgICAgICAgUVZhcmlhbnRMaXN0IHZsID0gdmFyaWFudC50b0xpc3Qo
KTsKLSAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJnb3QgYSAiIDw8IHZsLmNvdW50KCkgPDwgIiBs
ZW5ndGggbGlzdDoiIDw8IHZsOwotICAgICAgICByZXR1cm4gUnVudGltZUFycmF5OjpjcmVhdGUo
ZXhlYywgbmV3IFF0QXJyYXk8UVZhcmlhbnQ+KHZsLCBRTWV0YVR5cGU6OlZvaWQsIHJvb3QpKTsK
LSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRU3RyaW5nTGlzdCkgewotICAgICAg
ICBRU3RyaW5nTGlzdCBzbCA9IHZhcmlhbnQudmFsdWU8UVN0cmluZ0xpc3Q+KCk7Ci0gICAgICAg
IHJldHVybiBSdW50aW1lQXJyYXk6OmNyZWF0ZShleGVjLCBuZXcgUXRBcnJheTxRU3RyaW5nPihz
bCwgUU1ldGFUeXBlOjpRU3RyaW5nLCByb290KSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IChR
TWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFPYmplY3RMaXN0PigpKSB7Ci0gICAgICAgIFFP
YmplY3RMaXN0IG9sPSB2YXJpYW50LnZhbHVlPFFPYmplY3RMaXN0PigpOwotICAgICAgICByZXR1
cm4gUnVudGltZUFycmF5OjpjcmVhdGUoZXhlYywgbmV3IFF0QXJyYXk8UU9iamVjdCo+KG9sLCBR
TWV0YVR5cGU6OlFPYmplY3RTdGFyLCByb290KSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IChR
TWV0YVR5cGU6OlR5cGUpcU1ldGFUeXBlSWQ8UUxpc3Q8aW50PiA+KCkpIHsKLSAgICAgICAgUUxp
c3Q8aW50PiBpbD0gdmFyaWFudC52YWx1ZTxRTGlzdDxpbnQ+ID4oKTsKLSAgICAgICAgcmV0dXJu
IFJ1bnRpbWVBcnJheTo6Y3JlYXRlKGV4ZWMsIG5ldyBRdEFycmF5PGludD4oaWwsIFFNZXRhVHlw
ZTo6SW50LCByb290KSk7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gKFFNZXRhVHlwZTo6VHlw
ZSlxTWV0YVR5cGVJZDxRVmFyaWFudD4oKSkgewotICAgICAgICBRVmFyaWFudCByZWFsID0gdmFy
aWFudC52YWx1ZTxRVmFyaWFudD4oKTsKLSAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJyZWFsIHZh
cmlhbnQgaXM6IiA8PCByZWFsOwotICAgICAgICByZXR1cm4gY29udmVydFFWYXJpYW50VG9WYWx1
ZShleGVjLCByb290LCByZWFsKTsKLSAgICB9Ci0KLSAgICBxQ29udkRlYnVnKCkgPDwgImZhbGxi
YWNrIHBhdGggZm9yIiA8PCB2YXJpYW50IDw8IHZhcmlhbnQudXNlclR5cGUoKTsKLQotICAgIFFT
dHJpbmcgc3RyaW5nID0gdmFyaWFudC50b1N0cmluZygpOwotICAgIFVTdHJpbmcgdXN0cmluZygo
VUNoYXIqKXN0cmluZy51dGYxNigpLCBzdHJpbmcubGVuZ3RoKCkpOwotICAgIHJldHVybiBqc1N0
cmluZyhleGVjLCB1c3RyaW5nKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09Ci0KLS8vIFF0LWxp
a2UgbWFjcm9zCi0jZGVmaW5lIFFXX0QoQ2xhc3MpIENsYXNzIyNEYXRhKiBkID0gZF9mdW5jKCkK
LSNkZWZpbmUgUVdfRFMoQ2xhc3MsSW5zdGFuY2UpIENsYXNzIyNEYXRhKiBkID0gSW5zdGFuY2Ut
PmRfZnVuYygpCi0KLWNvbnN0IENsYXNzSW5mbyBRdFJ1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsg
IlF0UnVudGltZU1ldGhvZCIsICZJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8sIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoUXRSdW50aW1lTWV0aG9kKSB9OwotCi1RdFJ1bnRpbWVNZXRob2Q6OlF0
UnVudGltZU1ldGhvZChRdFJ1bnRpbWVNZXRob2REYXRhKiBkZCwgRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgaWRlbnRpZmllcikKLSAgICA6IElu
dGVybmFsRnVuY3Rpb24oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUpCi0g
ICAgLCBkX3B0cihkZCkKLXsKLX0KLQotdm9pZCBRdFJ1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgaWRlbnRpZmllciwgUGFzc1JlZlB0
cjxRdEluc3RhbmNlPiBpbnN0YW5jZSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVj
LT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXIpOwotICAgIFFXX0QoUXRSdW50aW1lTWV0aG9kKTsK
LSAgICBkLT5tX2luc3RhbmNlID0gaW5zdGFuY2U7Ci0gICAgZC0+bV9maW5hbGl6ZXIgPSBQYXNz
V2VhazxRdFJ1bnRpbWVNZXRob2Q+KHRoaXMsIGQpOwotfQotCi1RdFJ1bnRpbWVNZXRob2Q6On5R
dFJ1bnRpbWVNZXRob2QoKQotewotICAgIGRlbGV0ZSBkX3B0cjsKLX0KLQotdm9pZCBRdFJ1bnRp
bWVNZXRob2Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PFF0UnVu
dGltZU1ldGhvZCo+KGNlbGwpLT5RdFJ1bnRpbWVNZXRob2Q6On5RdFJ1bnRpbWVNZXRob2QoKTsK
LX0KLQotLy8gPT09PT09PT09PT09PT09Ci0KLVF0UnVudGltZU1ldGhvZERhdGE6On5RdFJ1bnRp
bWVNZXRob2REYXRhKCkKLXsKLX0KLQotdm9pZCBRdFJ1bnRpbWVNZXRob2REYXRhOjpmaW5hbGl6
ZShIYW5kbGU8VW5rbm93bj4sIHZvaWQqKQotewotICAgIG1faW5zdGFuY2UtPnJlbW92ZVVudXNl
ZE1ldGhvZHMoKTsKLX0KLQotUXRSdW50aW1lTWV0YU1ldGhvZERhdGE6On5RdFJ1bnRpbWVNZXRh
TWV0aG9kRGF0YSgpCi17Ci0KLX0KLQotUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGE6On5R
dFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSgpCi17Ci0KLX0KLQotLy8gPT09PT09PT09PT09
PT09Ci0KLS8vIFR5cGUgY29udmVyc2lvbiBtZXRhZGF0YSAoZnJvbSBRdFNjcmlwdCBvcmlnaW5h
bGx5KQotY2xhc3MgUXRNZXRob2RNYXRjaFR5cGUKLXsKLXB1YmxpYzoKLSAgICBlbnVtIEtpbmQg
ewotICAgICAgICBJbnZhbGlkLAotICAgICAgICBWYXJpYW50LAotICAgICAgICBNZXRhVHlwZSwK
LSAgICAgICAgVW5yZXNvbHZlZCwKLSAgICAgICAgTWV0YUVudW0KLSAgICB9OwotCi0KLSAgICBR
dE1ldGhvZE1hdGNoVHlwZSgpCi0gICAgICAgIDogbV9raW5kKEludmFsaWQpIHsgfQotCi0gICAg
S2luZCBraW5kKCkgY29uc3QKLSAgICB7IHJldHVybiBtX2tpbmQ7IH0KLQotICAgIFFNZXRhVHlw
ZTo6VHlwZSB0eXBlSWQoKSBjb25zdDsKLQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0Ci0gICAg
eyByZXR1cm4gKG1fa2luZCAhPSBJbnZhbGlkKTsgfQotCi0gICAgYm9vbCBpc1ZhcmlhbnQoKSBj
b25zdAotICAgIHsgcmV0dXJuIChtX2tpbmQgPT0gVmFyaWFudCk7IH0KLQotICAgIGJvb2wgaXNN
ZXRhVHlwZSgpIGNvbnN0Ci0gICAgeyByZXR1cm4gKG1fa2luZCA9PSBNZXRhVHlwZSk7IH0KLQot
ICAgIGJvb2wgaXNVbnJlc29sdmVkKCkgY29uc3QKLSAgICB7IHJldHVybiAobV9raW5kID09IFVu
cmVzb2x2ZWQpOyB9Ci0KLSAgICBib29sIGlzTWV0YUVudW0oKSBjb25zdAotICAgIHsgcmV0dXJu
IChtX2tpbmQgPT0gTWV0YUVudW0pOyB9Ci0KLSAgICBRQnl0ZUFycmF5IG5hbWUoKSBjb25zdDsK
LQotICAgIGludCBlbnVtZXJhdG9ySW5kZXgoKSBjb25zdAotICAgIHsgUV9BU1NFUlQoaXNNZXRh
RW51bSgpKTsgcmV0dXJuIG1fdHlwZUlkOyB9Ci0KLSAgICBzdGF0aWMgUXRNZXRob2RNYXRjaFR5
cGUgdmFyaWFudCgpCi0gICAgeyByZXR1cm4gUXRNZXRob2RNYXRjaFR5cGUoVmFyaWFudCk7IH0K
LQotICAgIHN0YXRpYyBRdE1ldGhvZE1hdGNoVHlwZSBtZXRhVHlwZShpbnQgdHlwZUlkLCBjb25z
dCBRQnl0ZUFycmF5ICZuYW1lKQotICAgIHsgcmV0dXJuIFF0TWV0aG9kTWF0Y2hUeXBlKE1ldGFU
eXBlLCB0eXBlSWQsIG5hbWUpOyB9Ci0KLSAgICBzdGF0aWMgUXRNZXRob2RNYXRjaFR5cGUgbWV0
YUVudW0oaW50IGVudW1JbmRleCwgY29uc3QgUUJ5dGVBcnJheSAmbmFtZSkKLSAgICB7IHJldHVy
biBRdE1ldGhvZE1hdGNoVHlwZShNZXRhRW51bSwgZW51bUluZGV4LCBuYW1lKTsgfQotCi0gICAg
c3RhdGljIFF0TWV0aG9kTWF0Y2hUeXBlIHVucmVzb2x2ZWQoY29uc3QgUUJ5dGVBcnJheSAmbmFt
ZSkKLSAgICB7IHJldHVybiBRdE1ldGhvZE1hdGNoVHlwZShVbnJlc29sdmVkLCAvKnR5cGVJZD0q
LzAsIG5hbWUpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUXRNZXRob2RNYXRjaFR5cGUoS2luZCBraW5k
LCBpbnQgdHlwZUlkID0gMCwgY29uc3QgUUJ5dGVBcnJheSAmbmFtZSA9IFFCeXRlQXJyYXkoKSkK
LSAgICAgICAgOiBtX2tpbmQoa2luZCksIG1fdHlwZUlkKHR5cGVJZCksIG1fbmFtZShuYW1lKSB7
IH0KLQotICAgIEtpbmQgbV9raW5kOwotICAgIGludCBtX3R5cGVJZDsKLSAgICBRQnl0ZUFycmF5
IG1fbmFtZTsKLX07Ci0KLVFNZXRhVHlwZTo6VHlwZSBRdE1ldGhvZE1hdGNoVHlwZTo6dHlwZUlk
KCkgY29uc3QKLXsKLSAgICBpZiAoaXNWYXJpYW50KCkpCi0gICAgICAgIHJldHVybiAoUU1ldGFU
eXBlOjpUeXBlKSBRTWV0YVR5cGU6OnR5cGUoIlFWYXJpYW50Iik7Ci0gICAgcmV0dXJuIChRTWV0
YVR5cGU6OlR5cGUpIChpc01ldGFFbnVtKCkgPyBRTWV0YVR5cGU6OkludCA6IG1fdHlwZUlkKTsK
LX0KLQotUUJ5dGVBcnJheSBRdE1ldGhvZE1hdGNoVHlwZTo6bmFtZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX25hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9uYW1lOwotICAgIGVsc2Ug
aWYgKG1fa2luZCA9PSBWYXJpYW50KQotICAgICAgICByZXR1cm4gIlFWYXJpYW50IjsKLSAgICBy
ZXR1cm4gUUJ5dGVBcnJheSgpOwotfQotCi1zdHJ1Y3QgUXRNZXRob2RNYXRjaERhdGEKLXsKLSAg
ICBpbnQgbWF0Y2hEaXN0YW5jZTsKLSAgICBpbnQgaW5kZXg7Ci0gICAgUVZlY3RvcjxRdE1ldGhv
ZE1hdGNoVHlwZT4gdHlwZXM7Ci0gICAgUVZhckxlbmd0aEFycmF5PFFWYXJpYW50LCAxMD4gYXJn
czsKLQotICAgIFF0TWV0aG9kTWF0Y2hEYXRhKGludCBkaXN0LCBpbnQgaWR4LCBRVmVjdG9yPFF0
TWV0aG9kTWF0Y2hUeXBlPiB0eXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEwPiAmYXMpCi0gICAgICAgIDogbWF0Y2hE
aXN0YW5jZShkaXN0KSwgaW5kZXgoaWR4KSwgdHlwZXModHlwcyksIGFyZ3MoYXMpIHsgfQotICAg
IFF0TWV0aG9kTWF0Y2hEYXRhKCkKLSAgICAgICAgOiBpbmRleCgtMSkgeyB9Ci0KLSAgICBib29s
IGlzVmFsaWQoKSBjb25zdAotICAgIHsgcmV0dXJuIChpbmRleCAhPSAtMSk7IH0KLQotICAgIGlu
dCBmaXJzdFVucmVzb2x2ZWRJbmRleCgpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKGludCBp
PTA7IGkgPCB0eXBlcy5jb3VudCgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh0eXBlcy5hdChp
KS5pc1VucmVzb2x2ZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfTsKLQotc3RhdGljIGludCBpbmRleE9mTWV0YUVu
dW0oY29uc3QgUU1ldGFPYmplY3QgKm1ldGEsIGNvbnN0IFFCeXRlQXJyYXkgJnN0cikKLXsKLSAg
ICBRQnl0ZUFycmF5IHNjb3BlOwotICAgIFFCeXRlQXJyYXkgbmFtZTsKLSAgICBpbnQgc2NvcGVJ
ZHggPSBzdHIuaW5kZXhPZigiOjoiKTsKLSAgICBpZiAoc2NvcGVJZHggIT0gLTEpIHsKLSAgICAg
ICAgc2NvcGUgPSBzdHIubGVmdChzY29wZUlkeCk7Ci0gICAgICAgIG5hbWUgPSBzdHIubWlkKHNj
b3BlSWR4ICsgMik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbmFtZSA9IHN0cjsKLSAgICB9Ci0g
ICAgZm9yIChpbnQgaSA9IG1ldGEtPmVudW1lcmF0b3JDb3VudCgpIC0gMTsgaSA+PSAwOyAtLWkp
IHsKLSAgICAgICAgUU1ldGFFbnVtIG0gPSBtZXRhLT5lbnVtZXJhdG9yKGkpOwotICAgICAgICBp
ZiAoKG0ubmFtZSgpID09IG5hbWUpLyogJiYgKHNjb3BlLmlzRW1wdHkoKSB8fCAobS5zY29wZSgp
ID09IHNjb3BlKSkqLykKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLSAgICByZXR1cm4g
LTE7Ci19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVzb2x2aW5nIG1ldGhvZHMKLS8vIExh
cmdlbHkgYmFzZWQgb24gY29kZSBpbiBRdFNjcmlwdCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25z
Ci1zdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4ZWMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRTWV0YU9iamVjdCogbWV0YSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFCeXRlQXJyYXkmIHNpZ25hdHVyZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYWxsb3dQcml2YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUVZhckxlbmd0aEFycmF5PFFWYXJpYW50LCAxMD4gJnZhcnMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkKiogdnZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBKU09i
amVjdCAqKnBFcnJvcikKLXsKLSAgICBRTGlzdDxpbnQ+IG1hdGNoaW5nSW5kaWNlczsKLQotICAg
IGJvb2wgb3ZlcmxvYWRzID0gIXNpZ25hdHVyZS5jb250YWlucygnKCcpOwotCi0gICAgaW50IGNv
dW50ID0gbWV0YS0+bWV0aG9kQ291bnQoKTsKLSAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBp
ID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBRTWV0YU1ldGhvZCBtID0gbWV0YS0+bWV0aG9k
KGkpOwotCi0gICAgICAgIC8vIERvbid0IGNob29zZSBwcml2YXRlIG1ldGhvZHMKLSAgICAgICAg
aWYgKG0uYWNjZXNzKCkgPT0gUU1ldGFNZXRob2Q6OlByaXZhdGUgJiYgIWFsbG93UHJpdmF0ZSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIHRyeSBhbmQgZmluZCBhbGwgbWF0
Y2hpbmcgbmFtZWQgbWV0aG9kcwotICAgICAgICBpZiAobS5zaWduYXR1cmUoKSA9PSBzaWduYXR1
cmUpCi0gICAgICAgICAgICBtYXRjaGluZ0luZGljZXMuYXBwZW5kKGkpOwotICAgICAgICBlbHNl
IGlmIChvdmVybG9hZHMpIHsKLSAgICAgICAgICAgIFFCeXRlQXJyYXkgcmF3c2lnbmF0dXJlID0g
bS5zaWduYXR1cmUoKTsKLSAgICAgICAgICAgIHJhd3NpZ25hdHVyZS50cnVuY2F0ZShyYXdzaWdu
YXR1cmUuaW5kZXhPZignKCcpKTsKLSAgICAgICAgICAgIGlmIChyYXdzaWduYXR1cmUgPT0gc2ln
bmF0dXJlKQotICAgICAgICAgICAgICAgIG1hdGNoaW5nSW5kaWNlcy5hcHBlbmQoaSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgY2hvc2VuSW5kZXggPSAtMTsKLSAgICAqcEVycm9yID0g
MDsKLSAgICBRVmVjdG9yPFF0TWV0aG9kTWF0Y2hUeXBlPiBjaG9zZW5UeXBlczsKLQotICAgIFFW
YXJMZW5ndGhBcnJheTxRVmFyaWFudCwgMTA+IGFyZ3M7Ci0gICAgUVZlY3RvcjxRdE1ldGhvZE1h
dGNoRGF0YT4gY2FuZGlkYXRlczsKLSAgICBRVmVjdG9yPFF0TWV0aG9kTWF0Y2hEYXRhPiB1bnJl
c29sdmVkOwotICAgIFFWZWN0b3I8aW50PiB0b29GZXdBcmdzOwotICAgIFFWZWN0b3I8aW50PiBj
b252ZXJzaW9uRmFpbGVkOwotCi0gICAgZm9yZWFjaChpbnQgaW5kZXgsIG1hdGNoaW5nSW5kaWNl
cykgewotICAgICAgICBRTWV0YU1ldGhvZCBtZXRob2QgPSBtZXRhLT5tZXRob2QoaW5kZXgpOwot
Ci0gICAgICAgIFFWZWN0b3I8UXRNZXRob2RNYXRjaFR5cGU+IHR5cGVzOwotICAgICAgICBib29s
IHVucmVzb2x2ZWRUeXBlcyA9IGZhbHNlOwotCi0gICAgICAgIC8vIHJlc29sdmUgcmV0dXJuIHR5
cGUKLSAgICAgICAgUUJ5dGVBcnJheSByZXR1cm5UeXBlTmFtZSA9IG1ldGhvZC50eXBlTmFtZSgp
OwotICAgICAgICBpbnQgcnR5cGUgPSBRTWV0YVR5cGU6OnR5cGUocmV0dXJuVHlwZU5hbWUpOwot
ICAgICAgICBpZiAoKHJ0eXBlID09IDApICYmICFyZXR1cm5UeXBlTmFtZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIGlmIChyZXR1cm5UeXBlTmFtZSA9PSAiUVZhcmlhbnQiKSB7Ci0gICAgICAg
ICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjp2YXJpYW50KCkpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChyZXR1cm5UeXBlTmFtZS5lbmRzV2l0aCgnKicpKSB7Ci0gICAg
ICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjptZXRhVHlwZShRTWV0
YVR5cGU6OlZvaWRTdGFyLCByZXR1cm5UeXBlTmFtZSkpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBpbnQgZW51bUluZGV4ID0gaW5kZXhPZk1ldGFFbnVtKG1ldGEsIHJl
dHVyblR5cGVOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAoZW51bUluZGV4ICE9IC0xKQotICAg
ICAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6Om1ldGFFbnVt
KGVudW1JbmRleCwgcmV0dXJuVHlwZU5hbWUpKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgdW5yZXNvbHZlZFR5cGVzID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjp1bnJlc29sdmVkKHJldHVyblR5
cGVOYW1lKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaWYgKHJldHVyblR5cGVOYW1lID09ICJRVmFyaWFudCIpCi0gICAg
ICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjp2YXJpYW50KCkpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1h
dGNoVHlwZTo6bWV0YVR5cGUocnR5cGUsIHJldHVyblR5cGVOYW1lKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyByZXNvbHZlIGFyZ3VtZW50IHR5cGVzCi0gICAgICAgIFFMaXN0PFFCeXRlQXJy
YXk+IHBhcmFtZXRlclR5cGVOYW1lcyA9IG1ldGhvZC5wYXJhbWV0ZXJUeXBlcygpOwotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlclR5cGVOYW1lcy5jb3VudCgpOyArK2kpIHsK
LSAgICAgICAgICAgIFFCeXRlQXJyYXkgYXJnVHlwZU5hbWUgPSBwYXJhbWV0ZXJUeXBlTmFtZXMu
YXQoaSk7Ci0gICAgICAgICAgICBpbnQgYXR5cGUgPSBRTWV0YVR5cGU6OnR5cGUoYXJnVHlwZU5h
bWUpOwotICAgICAgICAgICAgaWYgKGF0eXBlID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAo
YXJnVHlwZU5hbWUgPT0gIlFWYXJpYW50IikgewotICAgICAgICAgICAgICAgICAgICB0eXBlcy5h
cHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6OnZhcmlhbnQoKSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGVudW1JbmRleCA9IGluZGV4T2ZNZXRhRW51
bShtZXRhLCBhcmdUeXBlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbnVtSW5kZXgg
IT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRj
aFR5cGU6Om1ldGFFbnVtKGVudW1JbmRleCwgYXJnVHlwZU5hbWUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnJlc29sdmVkVHlwZXMgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hU
eXBlOjp1bnJlc29sdmVkKGFyZ1R5cGVOYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlm
IChhcmdUeXBlTmFtZSA9PSAiUVZhcmlhbnQiKQotICAgICAgICAgICAgICAgICAgICB0eXBlcy5h
cHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6OnZhcmlhbnQoKSk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6Om1l
dGFUeXBlKGF0eXBlLCBhcmdUeXBlTmFtZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gSWYgdGhlIG5hdGl2ZSBtZXRob2QgcmVxdWlyZXMgbW9yZSBhcmd1bWVudHMg
dGhhbiB3aGF0IHdhcyBwYXNzZWQgZnJvbSBKYXZhU2NyaXB0Ci0gICAgICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgKyAxIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGVzLmNvdW50KCkp
KSB7Ci0gICAgICAgICAgICBxTWF0Y2hEZWJ1ZygpIDw8ICJNYXRjaDp0b28gZmV3IGFyZ3MgZm9y
IiA8PCBtZXRob2Quc2lnbmF0dXJlKCk7Ci0gICAgICAgICAgICB0b29GZXdBcmdzLmFwcGVuZChp
bmRleCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1
bnJlc29sdmVkVHlwZXMpIHsKLSAgICAgICAgICAgIHFNYXRjaERlYnVnKCkgPDwgIk1hdGNoOnVu
cmVzb2x2ZWQgYXJnIHR5cGVzIGZvciIgPDwgbWV0aG9kLnNpZ25hdHVyZSgpOwotICAgICAgICAg
ICAgLy8gcmVtZW1iZXIgaXQgc28gd2UgY2FuIGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBsYXRlciwg
aWYgbmVjZXNzYXJ5Ci0gICAgICAgICAgICB1bnJlc29sdmVkLmFwcGVuZChRdE1ldGhvZE1hdGNo
RGF0YSgvKm1hdGNoRGlzdGFuY2U9Ki9JTlRfTUFYLCBpbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLCBRVmFyTGVuZ3RoQXJyYXk8
UVZhcmlhbnQsIDEwPigpKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIE5vdyBjb252ZXJ0IGFyZ3VtZW50cwotICAgICAgICBpZiAoYXJncy5jb3VudCgp
ICE9IHR5cGVzLmNvdW50KCkpCi0gICAgICAgICAgICBhcmdzLnJlc2l6ZSh0eXBlcy5jb3VudCgp
KTsKLQotICAgICAgICBRdE1ldGhvZE1hdGNoVHlwZSByZXRUeXBlID0gdHlwZXNbMF07Ci0gICAg
ICAgIGFyZ3NbMF0gPSBRVmFyaWFudChyZXRUeXBlLnR5cGVJZCgpLCAodm9pZCAqKTApOyAvLyB0
aGUgcmV0dXJuIHZhbHVlCi0KLSAgICAgICAgYm9vbCBjb252ZXJ0ZWQgPSB0cnVlOwotICAgICAg
ICBpbnQgbWF0Y2hEaXN0YW5jZSA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGNv
bnZlcnRlZCAmJiBpICsgMSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlcy5jb3VudCgpKTsg
KytpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGFyZyA9IGkgPCBleGVjLT5hcmd1bWVudENvdW50
KCkgPyBleGVjLT5hcmd1bWVudChpKSA6IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgIGlu
dCBhcmdkaXN0YW5jZSA9IC0xOwotICAgICAgICAgICAgUVZhcmlhbnQgdiA9IGNvbnZlcnRWYWx1
ZVRvUVZhcmlhbnQoZXhlYywgYXJnLCB0eXBlcy5hdChpKzEpLnR5cGVJZCgpLCAmYXJnZGlzdGFu
Y2UpOwotICAgICAgICAgICAgaWYgKGFyZ2Rpc3RhbmNlID49IDApIHsKLSAgICAgICAgICAgICAg
ICBtYXRjaERpc3RhbmNlICs9IGFyZ2Rpc3RhbmNlOwotICAgICAgICAgICAgICAgIGFyZ3NbaSsx
XSA9IHY7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHFNYXRjaERlYnVn
KCkgPDwgImZhaWxlZCB0byBjb252ZXJ0IGFyZ3VtZW50ICIgPDwgaSA8PCAidHlwZSIgPDwgdHlw
ZXMuYXQoaSsxKS50eXBlSWQoKSA8PCBRTWV0YVR5cGU6OnR5cGVOYW1lKHR5cGVzLmF0KGkrMSku
dHlwZUlkKCkpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcU1hdGNoRGVidWcoKSA8PCAiTWF0Y2g6ICIgPDwg
bWV0aG9kLnNpZ25hdHVyZSgpIDw8IChjb252ZXJ0ZWQgPyAiY29udmVydGVkIjoiZmFpbGVkIHRv
IGNvbnZlcnQiKSA8PCAiZGlzdGFuY2UgIiA8PCBtYXRjaERpc3RhbmNlOwotCi0gICAgICAgIGlm
IChjb252ZXJ0ZWQpIHsKLSAgICAgICAgICAgIGlmICgoZXhlYy0+YXJndW1lbnRDb3VudCgpICsg
MSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZXMuY291bnQoKSkpCi0gICAgICAgICAgICAg
ICAgJiYgKG1hdGNoRGlzdGFuY2UgPT0gMCkpIHsKLSAgICAgICAgICAgICAgICAvLyBwZXJmZWN0
IG1hdGNoLCB1c2UgdGhpcyBvbmUKLSAgICAgICAgICAgICAgICBjaG9zZW5JbmRleCA9IGluZGV4
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBRdE1ldGhvZE1hdGNoRGF0YSBjdXJyZW50TWF0Y2gobWF0Y2hEaXN0YW5jZSwgaW5k
ZXgsIHR5cGVzLCBhcmdzKTsKLSAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoY3VycmVudE1hdGNo
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBRdE1ldGhv
ZE1hdGNoRGF0YSBiZXN0TWF0Y2hTb0ZhciA9IGNhbmRpZGF0ZXMuYXQoMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICgoYXJncy5jb3VudCgpID4gYmVzdE1hdGNoU29GYXIuYXJncy5jb3VudCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChhcmdzLmNvdW50KCkgPT0gYmVzdE1hdGNo
U29GYXIuYXJncy5jb3VudCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtYXRj
aERpc3RhbmNlIDw9IGJlc3RNYXRjaFNvRmFyLm1hdGNoRGlzdGFuY2UpKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wcmVwZW5kKGN1cnJlbnRNYXRjaCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVz
LmFwcGVuZChjdXJyZW50TWF0Y2gpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29u
dmVyc2lvbkZhaWxlZC5hcHBlbmQoaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFv
dmVybG9hZHMpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoY2hvc2VuSW5k
ZXggPT0gLTEgJiYgY2FuZGlkYXRlcy5jb3VudCgpID09IDApIHsKLSAgICAgICAgLy8gTm8gdmFs
aWQgZnVuY3Rpb25zIGF0IGFsbCAtIGZvcm1hdCBhbiBlcnJvciBtZXNzYWdlCi0gICAgICAgIGlm
ICghY29udmVyc2lvbkZhaWxlZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFFTdHJpbmcgbWVz
c2FnZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoImluY29tcGF0aWJsZSB0eXBlIG9mIGFyZ3VtZW50
KHMpIGluIGNhbGwgdG8gJTAoKTsgY2FuZGlkYXRlcyB3ZXJlXG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHNpZ25hdHVyZSkpOwotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb252ZXJzaW9uRmFpbGVkLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9
IFFMYXRpbjFTdHJpbmcoIlxuIik7Ci0gICAgICAgICAgICAgICAgUU1ldGFNZXRob2QgbXRkID0g
bWV0YS0+bWV0aG9kKGNvbnZlcnNpb25GYWlsZWQuYXQoaSkpOwotICAgICAgICAgICAgICAgIG1l
c3NhZ2UgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiICAgICUwIikuYXJnKFFTdHJpbmc6OmZyb21M
YXRpbjEobXRkLnNpZ25hdHVyZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqcEVy
cm9yID0gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZS50b0xh
dGluMSgpLmNvbnN0RGF0YSgpKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXVucmVzb2x2ZWQuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBRdE1ldGhvZE1hdGNoRGF0YSBhcmdzSW5zdGFuY2UgPSB1
bnJlc29sdmVkLmZpcnN0KCk7Ci0gICAgICAgICAgICBpbnQgdW5yZXNvbHZlZEluZGV4ID0gYXJn
c0luc3RhbmNlLmZpcnN0VW5yZXNvbHZlZEluZGV4KCk7Ci0gICAgICAgICAgICBRX0FTU0VSVCh1
bnJlc29sdmVkSW5kZXggIT0gLTEpOwotICAgICAgICAgICAgUXRNZXRob2RNYXRjaFR5cGUgdW5y
ZXNvbHZlZFR5cGUgPSBhcmdzSW5zdGFuY2UudHlwZXMuYXQodW5yZXNvbHZlZEluZGV4KTsKLSAg
ICAgICAgICAgIFFTdHJpbmcgbWVzc2FnZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoImNhbm5vdCBj
YWxsICUwKCk6IHVua25vd24gdHlwZSBgJTEnIikKLSAgICAgICAgICAgICAgICAuYXJnKFFTdHJp
bmc6OmZyb21MYXRpbjEoc2lnbmF0dXJlKSkKLSAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFT
dHJpbmcodW5yZXNvbHZlZFR5cGUubmFtZSgpKSk7Ci0gICAgICAgICAgICAqcEVycm9yID0gdGhy
b3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZS50b0xhdGluMSgpLmNv
bnN0RGF0YSgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBRU3RyaW5nIG1lc3Nh
Z2UgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJ0b28gZmV3IGFyZ3VtZW50cyBpbiBjYWxsIHRvICUw
KCk7IGNhbmRpZGF0ZXMgYXJlXG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFy
ZyhRTGF0aW4xU3RyaW5nKHNpZ25hdHVyZSkpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB0b29GZXdBcmdzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPiAw
KQotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFFMYXRpbjFTdHJpbmcoIlxuIik7Ci0g
ICAgICAgICAgICAgICAgUU1ldGFNZXRob2QgbXRkID0gbWV0YS0+bWV0aG9kKHRvb0Zld0FyZ3Mu
YXQoaSkpOwotICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgi
ICAgICUwIikuYXJnKFFTdHJpbmc6OmZyb21MYXRpbjEobXRkLnNpZ25hdHVyZSgpKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAqcEVycm9yID0gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVT
eW50YXhFcnJvcihleGVjLCBtZXNzYWdlLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChjaG9zZW5JbmRleCA9PSAtMSAmJiBjYW5kaWRhdGVzLmNv
dW50KCkgPiAwKSB7Ci0gICAgICAgIFF0TWV0aG9kTWF0Y2hEYXRhIGJlc3RNYXRjaCA9IGNhbmRp
ZGF0ZXMuYXQoMCk7Ci0gICAgICAgIGlmICgoY2FuZGlkYXRlcy5zaXplKCkgPiAxKQotICAgICAg
ICAgICAgJiYgKGJlc3RNYXRjaC5hcmdzLmNvdW50KCkgPT0gY2FuZGlkYXRlcy5hdCgxKS5hcmdz
LmNvdW50KCkpCi0gICAgICAgICAgICAmJiAoYmVzdE1hdGNoLm1hdGNoRGlzdGFuY2UgPT0gY2Fu
ZGlkYXRlcy5hdCgxKS5tYXRjaERpc3RhbmNlKSkgewotICAgICAgICAgICAgLy8gYW1iaWd1b3Vz
IGNhbGwKLSAgICAgICAgICAgIFFTdHJpbmcgbWVzc2FnZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEo
ImFtYmlndW91cyBjYWxsIG9mIG92ZXJsb2FkZWQgZnVuY3Rpb24gJTAoKTsgY2FuZGlkYXRlcyB3
ZXJlXG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJp
bmcoc2lnbmF0dXJlKSk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbmRpZGF0
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAvLyBPbmx5IGNhbmRpZGF0ZSBmb3Ig
b3ZlcmxvYWQgaWYgYXJndW1lbnQgY291bnQgYW5kIG1hdGNoIGRpc3RhbmNlIGlzIHNhbWUgYXMg
YmVzdCBtYXRjaAotICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzLmF0KGkpLmFyZ3MuY291
bnQoKSA9PSBiZXN0TWF0Y2guYXJncy5jb3VudCgpCi0gICAgICAgICAgICAgICAgICAgIHx8IGNh
bmRpZGF0ZXMuYXQoaSkubWF0Y2hEaXN0YW5jZSA9PSBiZXN0TWF0Y2gubWF0Y2hEaXN0YW5jZSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlICs9IFFMYXRpbjFTdHJpbmcoIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIFFN
ZXRhTWV0aG9kIG10ZCA9IG1ldGEtPm1ldGhvZChjYW5kaWRhdGVzLmF0KGkpLmluZGV4KTsKLSAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIgICAgJTAi
KS5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShtdGQuc2lnbmF0dXJlKCkpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqcEVycm9yID0gdGhyb3dFcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZS50b0xhdGluMSgpLmNvbnN0RGF0YSgp
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjaG9zZW5JbmRleCA9IGJlc3RNYXRj
aC5pbmRleDsKLSAgICAgICAgICAgIGFyZ3MgPSBiZXN0TWF0Y2guYXJnczsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChjaG9zZW5JbmRleCAhPSAtMSkgewotICAgICAgICAvKiBDb3B5IHRo
ZSBzdHVmZiBvdmVyICovCi0gICAgICAgIGludCBpOwotICAgICAgICB2YXJzLnJlc2l6ZShhcmdz
LmNvdW50KCkpOwotICAgICAgICBmb3IgKGk9MDsgaSA8IGFyZ3MuY291bnQoKTsgaSsrKSB7Ci0g
ICAgICAgICAgICB2YXJzW2ldID0gYXJnc1tpXTsKLSAgICAgICAgICAgIHZ2YXJzW2ldID0gdmFy
c1tpXS5kYXRhKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY2hvc2VuSW5kZXg7
Ci19Ci0KLS8vIFNpZ25hbHMgYXJlIG5vdCBmdXp6eSBtYXRjaGVkIGFzIG11Y2ggYXMgbWV0aG9k
cwotc3RhdGljIGludCBmaW5kU2lnbmFsSW5kZXgoY29uc3QgUU1ldGFPYmplY3QqIG1ldGEsIGlu
dCBpbml0aWFsSW5kZXgsIFFCeXRlQXJyYXkgc2lnbmF0dXJlKQotewotICAgIGludCBpbmRleCA9
IGluaXRpYWxJbmRleDsKLSAgICBRTWV0YU1ldGhvZCBtZXRob2QgPSBtZXRhLT5tZXRob2QoaW5k
ZXgpOwotICAgIGJvb2wgb3ZlcmxvYWRzID0gIXNpZ25hdHVyZS5jb250YWlucygnKCcpOwotICAg
IGlmIChvdmVybG9hZHMgJiYgKG1ldGhvZC5hdHRyaWJ1dGVzKCkgJiBRTWV0YU1ldGhvZDo6Q2xv
bmVkKSkgewotICAgICAgICAvLyBmaW5kIHRoZSBtb3N0IGdlbmVyYWwgbWV0aG9kCi0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIG1ldGhvZCA9IG1ldGEtPm1ldGhvZCgtLWluZGV4KTsKLSAgICAg
ICAgfSB3aGlsZSAobWV0aG9kLmF0dHJpYnV0ZXMoKSAmIFFNZXRhTWV0aG9kOjpDbG9uZWQpOwot
ICAgIH0KLSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KLWNvbnN0IENsYXNzSW5mbyBRdFJ1bnRpbWVN
ZXRhTWV0aG9kOjpzX2luZm8gPSB7ICJRdFJ1bnRpbWVNZXRob2QiLCAmQmFzZTo6c19pbmZvLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFF0UnVudGltZU1ldGFNZXRob2QpIH07Ci0KLVF0UnVu
dGltZU1ldGFNZXRob2Q6OlF0UnVudGltZU1ldGFNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgaWRlbnRpZmllcikKLSAgICA6IFF0UnVu
dGltZU1ldGhvZCAobmV3IFF0UnVudGltZU1ldGFNZXRob2REYXRhKCksIGV4ZWMsIHN0cnVjdHVy
ZSwgaWRlbnRpZmllcikKLXsKLX0KLQotdm9pZCBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIGlkZW50aWZpZXIsIFBhc3NS
ZWZQdHI8UXRJbnN0YW5jZT4gaW5zdGFuY2UsIGludCBpbmRleCwgY29uc3QgUUJ5dGVBcnJheSYg
c2lnbmF0dXJlLCBib29sIGFsbG93UHJpdmF0ZSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihleGVjLCBpZGVudGlmaWVyLCBpbnN0YW5jZSk7Ci0gICAgUVdfRChRdFJ1bnRpbWVNZXRhTWV0
aG9kKTsKLSAgICBkLT5tX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTsKLSAgICBkLT5tX2luZGV4ID0g
aW5kZXg7Ci0gICAgZC0+bV9hbGxvd1ByaXZhdGUgPSBhbGxvd1ByaXZhdGU7Ci19Ci0KLXZvaWQg
UXRSdW50aW1lTWV0YU1ldGhvZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQotewotICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhvZCo+KGNlbGwpOwotICAgIFF0UnVudGltZU1ldGhvZDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICBRdFJ1bnRpbWVNZXRhTWV0
aG9kRGF0YSogZCA9IHRoaXNPYmplY3QtPmRfZnVuYygpOwotICAgIGlmIChkLT5tX2Nvbm5lY3Qp
Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkLT5tX2Nvbm5lY3QpOwotICAgIGlmIChkLT5tX2Rp
c2Nvbm5lY3QpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkLT5tX2Rpc2Nvbm5lY3QpOwotfQot
Ci1FbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSogZCA9IHN0YXRpY19jYXN0PFF0UnVu
dGltZU1ldGFNZXRob2QgKj4oZXhlYy0+Y2FsbGVlKCkpLT5kX2Z1bmMoKTsKLQotICAgIC8vIFdl
J3JlIGxpbWl0ZWQgdG8gMTAgYXJncwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAx
MCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQotICAg
IC8vIFdlIGhhdmUgdG8gcGljayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMuLgotICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwotCi0gICAgUU9iamVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0
T2JqZWN0KCk7Ci0gICAgaWYgKG9iaikgewotICAgICAgICBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlh
bnQsIDEwPiB2YXJnczsKLSAgICAgICAgdm9pZCAqcWFyZ3NbMTFdOwotCi0gICAgICAgIGludCBt
ZXRob2RJbmRleDsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yT2JqID0gMDsKLSAgICAgICAgaWYg
KChtZXRob2RJbmRleCA9IGZpbmRNZXRob2RJbmRleChleGVjLCBvYmotPm1ldGFPYmplY3QoKSwg
ZC0+bV9zaWduYXR1cmUsIGQtPm1fYWxsb3dQcml2YXRlLCB2YXJncywgKHZvaWQgKiopcWFyZ3Ms
ICZlcnJvck9iaikpICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAoUU1ldGFPYmplY3Q6Om1ldGFj
YWxsKG9iaiwgUU1ldGFPYmplY3Q6Okludm9rZU1ldGFNZXRob2QsIG1ldGhvZEluZGV4LCBxYXJn
cykgPj0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotCi0gICAgICAgICAgICBpZiAodmFyZ3NbMF0uaXNWYWxpZCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29udmVydFFWYXJpYW50VG9WYWx1ZShleGVj
LCBkLT5tX2luc3RhbmNlLT5yb290T2JqZWN0KCksIHZhcmdzWzBdKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoZXJyb3JPYmopCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGVycm9yT2JqKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJjYW5ub3QgY2FsbCBmdW5jdGlvbiBvZiBkZWxldGVkIFFP
YmplY3QiKSk7Ci0gICAgfQotCi0gICAgLy8gdm9pZCBmdW5jdGlvbnMgcmV0dXJuIHVuZGVmaW5l
ZAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUNhbGxU
eXBlIFF0UnVudGltZU1ldGFNZXRob2Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBj
YWxsRGF0YSkKLXsKLSAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsOwotICAgIHJl
dHVybiBDYWxsVHlwZUhvc3Q7Ci19Ci0KLWJvb2wgUXRSdW50aW1lTWV0YU1ldGhvZDo6Z2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgUXRSdW50aW1lTWV0YU1l
dGhvZCogdGhpc09iamVjdCA9IGpzQ2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9kKj4oY2VsbCk7Ci0g
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBJZGVudGlmaWVyKGV4ZWMsICJjb25uZWN0IikpIHsKLSAg
ICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+Y29ubmVjdEdldHRl
cik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAocHJvcGVydHlOYW1lID09
IElkZW50aWZpZXIoZXhlYywgImRpc2Nvbm5lY3QiKSkgewotICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5kaXNjb25uZWN0R2V0dGVyKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlz
T2JqZWN0LT5sZW5ndGhHZXR0ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gUXRSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotYm9vbCBRdFJ1bnRpbWVNZXRhTWV0aG9k
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCi17Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdGhpc09iamVjdCA9IGpzQ2FzdDxR
dFJ1bnRpbWVNZXRhTWV0aG9kKj4ob2JqZWN0KTsKLSAgICBpZiAocHJvcGVydHlOYW1lID09IElk
ZW50aWZpZXIoZXhlYywgImNvbm5lY3QiKSkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsK
LSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgY29ubmVjdEdldHRlcik7Ci0gICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5
TmFtZSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBJZGVudGlmaWVyKGV4ZWMs
ICJkaXNjb25uZWN0IikpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNs
b3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGRpc2Nvbm5lY3RHZXR0ZXIpOwotICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpc09iamVjdCwgbGVuZ3RoR2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gUXRSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQotdm9pZCBRdFJ1bnRpbWVN
ZXRhTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQotewotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpIHsK
LSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCAiY29ubmVjdCIpKTsK
LSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCAiZGlzY29ubmVjdCIp
KTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCk7Ci0gICAgfQotCi0gICAgUXRSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLUpTVmFsdWUgUXRSdW50aW1l
TWV0YU1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFt
ZSkKLXsKLSAgICAvLyBRdFNjcmlwdCBhbHdheXMgcmV0dXJucyAwCi0gICAgcmV0dXJuIGpzTnVt
YmVyKDApOwotfQotCi1KU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmNvbm5lY3RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5hbWUgaWRlbnQpCi17
Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdGhpc09iaiA9IHN0YXRpY19jYXN0PFF0UnVudGlt
ZU1ldGFNZXRob2QqPihhc09iamVjdChzbG90QmFzZSkpOwotICAgIFFXX0RTKFF0UnVudGltZU1l
dGFNZXRob2QsIHRoaXNPYmopOwotCi0gICAgaWYgKCFkLT5tX2Nvbm5lY3QpCi0gICAgICAgIGQt
Pm1fY29ubmVjdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqLCBRdFJ1bnRpbWVDb25u
ZWN0aW9uTWV0aG9kOjpjcmVhdGUoZXhlYywgaWRlbnQucHVibGljTmFtZSgpLCB0cnVlLCBkLT5t
X2luc3RhbmNlLCBkLT5tX2luZGV4LCBkLT5tX3NpZ25hdHVyZSkpOwotICAgIHJldHVybiBkLT5t
X2Nvbm5lY3QuZ2V0KCk7Ci19Ci0KLUpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6ZGlzY29u
bmVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIFByb3BlcnR5TmFt
ZSBpZGVudCkKLXsKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8UXRSdW50aW1lTWV0YU1ldGhvZCo+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgUVdfRFMo
UXRSdW50aW1lTWV0YU1ldGhvZCwgdGhpc09iaik7Ci0KLSAgICBpZiAoIWQtPm1fZGlzY29ubmVj
dCkKLSAgICAgICAgZC0+bV9kaXNjb25uZWN0LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNP
YmosIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNyZWF0ZShleGVjLCBpZGVudC5wdWJsaWNO
YW1lKCksIGZhbHNlLCBkLT5tX2luc3RhbmNlLCBkLT5tX2luZGV4LCBkLT5tX3NpZ25hdHVyZSkp
OwotICAgIHJldHVybiBkLT5tX2Rpc2Nvbm5lY3QuZ2V0KCk7Ci19Ci0KLS8vID09PT09PT09PT09
PT09PQotCi1RTXVsdGlNYXA8UU9iamVjdCosIFF0Q29ubmVjdGlvbk9iamVjdCo+IFF0UnVudGlt
ZUNvbm5lY3Rpb25NZXRob2Q6OmNvbm5lY3Rpb25zOwotCi1jb25zdCBDbGFzc0luZm8gUXRSdW50
aW1lQ29ubmVjdGlvbk1ldGhvZDo6c19pbmZvID0geyAiUXRSdW50aW1lTWV0aG9kIiwgJkJhc2U6
OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShRdFJ1bnRpbWVDb25uZWN0aW9uTWV0
aG9kKSB9OwotCi1RdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpRdFJ1bnRpbWVDb25uZWN0aW9u
TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJp
bmcmIGlkZW50aWZpZXIpCi0gICAgOiBRdFJ1bnRpbWVNZXRob2QgKG5ldyBRdFJ1bnRpbWVDb25u
ZWN0aW9uTWV0aG9kRGF0YSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpCi17Ci19Ci0K
LXZvaWQgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBVU3RyaW5nJiBpZGVudGlmaWVyLCBib29sIGlzQ29ubmVjdCwgUGFzc1Jl
ZlB0cjxRdEluc3RhbmNlPiBpbnN0YW5jZSwgaW50IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5JiBz
aWduYXR1cmUpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYywgaWRlbnRpZmllciwg
aW5zdGFuY2UpOwotICAgIFFXX0QoUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCk7Ci0KLSAgICBk
LT5tX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTsKLSAgICBkLT5tX2luZGV4ID0gaW5kZXg7Ci0gICAg
ZC0+bV9pc0Nvbm5lY3QgPSBpc0Nvbm5lY3Q7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIFF0UnVudGlt
ZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFF0UnVudGlt
ZUNvbm5lY3Rpb25NZXRob2REYXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlv
bk1ldGhvZCAqPihleGVjLT5jYWxsZWUoKSktPmRfZnVuYygpOwotCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7Ci0KLSAgICBRT2JqZWN0KiBzZW5kZXIgPSBkLT5tX2luc3RhbmNlLT5nZXRP
YmplY3QoKTsKLQotICAgIGlmIChzZW5kZXIpIHsKLQotICAgICAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bWV0aG9kVGFibGUoKS0+dG9UaGlz
T2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYyk7Ci0gICAgICAgIEpTT2Jq
ZWN0KiBmdW5jT2JqZWN0ID0gMDsKLQotICAgICAgICAvLyBRdFNjcmlwdCBjaGVja3Mgc2lnbmFs
bmVzcyBmaXJzdCwgYXJndW1lbnRzIHNlY29uZAotICAgICAgICBpbnQgc2lnbmFsSW5kZXggPSAt
MTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGluaXRpYWwgaW5kZXggaXMgYSBzaWduYWwK
LSAgICAgICAgUU1ldGFNZXRob2QgbSA9IHNlbmRlci0+bWV0YU9iamVjdCgpLT5tZXRob2QoZC0+
bV9pbmRleCk7Ci0gICAgICAgIGlmIChtLm1ldGhvZFR5cGUoKSA9PSBRTWV0YU1ldGhvZDo6U2ln
bmFsKQotICAgICAgICAgICAgc2lnbmFsSW5kZXggPSBmaW5kU2lnbmFsSW5kZXgoc2VuZGVyLT5t
ZXRhT2JqZWN0KCksIGQtPm1faW5kZXgsIGQtPm1fc2lnbmF0dXJlKTsKLQotICAgICAgICBpZiAo
c2lnbmFsSW5kZXggIT0gLTEpIHsKLSAgICAgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPT0gMSkgewotICAgICAgICAgICAgICAgIGZ1bmNPYmplY3QgPSBleGVjLT5hcmd1bWVudCgw
KS50b09iamVjdChleGVjKTsKLSAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAg
ICAgICAgICAgICAgICBpZiAoZnVuY09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEo
ZnVuY09iamVjdCwgY2FsbERhdGEpID09IENhbGxUeXBlTm9uZSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmNv
bm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiB0YXJnZXQgaXMg
bm90IGEgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewotICAgICAgICAgICAgICAgIGlmIChl
eGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXNP
YmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLQotICAgICAgICAgICAg
ICAgICAgICAvLyBHZXQgdGhlIGFjdHVhbCBmdW5jdGlvbiB0byBjYWxsCi0gICAgICAgICAgICAg
ICAgICAgIEpTT2JqZWN0ICphc09iaiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvT2JqZWN0KGV4ZWMp
OwotICAgICAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGFzT2JqLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShhc09iaiwgY2FsbERh
dGEpICE9IENhbGxUeXBlTm9uZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnVuY3Rp
b24gdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY09iamVjdCA9IGFzT2JqOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q29udmVydCBpdCB0byBhIHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgVVN0cmluZyBm
dW5jTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgZnVuY0lkZW50KGV4ZWMsIGZ1bmNO
YW1lKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gIyMjIERyb3BBbGxMb2NrcwotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyByZXNvbHZlZCBhdCB0aGlzIHBvaW50IGlu
IFF0U2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IHRoaXNPYmpl
Y3QtPmdldChleGVjLCBmdW5jSWRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmpl
Y3QqIGFzRnVuY09iaiA9IHZhbC50b09iamVjdChleGVjKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFzRnVuY09iai0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoYXNGdW5jT2Jq
LCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuY09iamVjdCA9IGFzRnVuY09iajsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQtPm1faXNDb25uZWN0KQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IHRhcmdldCBpcyBub3Qg
YSBmdW5jdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBh
IGZ1bmN0aW9uIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGQtPm1faXNDb25uZWN0KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5jb25uZWN0OiB0
aGlzT2JqZWN0IGlzIG5vdCBhbiBvYmplY3QiKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGhpc09iamVjdCBpcyBu
b3QgYW4gb2JqZWN0IikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGQtPm1faXNDb25uZWN0KQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRo
b2QuY29ubmVjdDogbm8gYXJndW1lbnRzIGdpdmVuIikpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IG5vIGFyZ3VtZW50cyBnaXZlbiIpKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGQtPm1faXNDb25uZWN0KSB7Ci0gICAg
ICAgICAgICAgICAgLy8gdG8gY29ubmVjdCwgd2UgbmVlZDoKLSAgICAgICAgICAgICAgICAvLyAg
dGFyZ2V0IG9iamVjdCBbZnJvbSBjdG9yXQotICAgICAgICAgICAgICAgIC8vICB0YXJnZXQgc2ln
bmFsIGluZGV4IGV0Yy4gW2Zyb20gY3Rvcl0KLSAgICAgICAgICAgICAgICAvLyAgcmVjZWl2ZXIg
ZnVuY3Rpb24gW2Zyb20gYXJndW1lbnRzXQotICAgICAgICAgICAgICAgIC8vICByZWNlaXZlciB0
aGlzIG9iamVjdCBbZnJvbSBhcmd1bWVudHNdCi0KLSAgICAgICAgICAgICAgICBRdENvbm5lY3Rp
b25PYmplY3QqIGNvbm4gPSBRdENvbm5lY3Rpb25PYmplY3Q6OmNyZWF0ZVdpdGhJbnRlcm5hbEpT
QyhleGVjLCBkLT5tX2luc3RhbmNlLCBzaWduYWxJbmRleCwgdGhpc09iamVjdCwgZnVuY09iamVj
dCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBvayA9IFFNZXRhT2JqZWN0Ojpjb25uZWN0KHNlbmRl
ciwgc2lnbmFsSW5kZXgsIGNvbm4sIGNvbm4tPm1ldGFPYmplY3QoKS0+bWV0aG9kT2Zmc2V0KCkp
OwotICAgICAgICAgICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IGNvbm47Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbXNnID0gUVN0cmluZyhRTGF0aW4x
U3RyaW5nKCJRdE1ldGFNZXRob2QuY29ubmVjdDogZmFpbGVkIHRvIGNvbm5lY3QgdG8gJTE6OiUy
KCkiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoc2Vu
ZGVyLT5tZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoZC0+bV9zaWduYXR1cmUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBtc2cudG9M
YXRpbjEoKS5jb25zdERhdGEoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmUgY29ubmVjdGlvbgotICAgICAg
ICAgICAgICAgICAgICBjb25uZWN0aW9ucy5pbnNlcnQoc2VuZGVyLCBjb25uKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIE5vdyB0
byBmaW5kIG91ciBwcmV2aW91cyBjb25uZWN0aW9uIG9iamVjdC4gSG1tLgotICAgICAgICAgICAg
ICAgIFFMaXN0PFF0Q29ubmVjdGlvbk9iamVjdCo+IGNvbm5zID0gY29ubmVjdGlvbnMudmFsdWVz
KHNlbmRlcik7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXQgPSBmYWxzZTsKLQotICAgICAgICAg
ICAgICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gOjp0b1JlZihleGVjKTsKLSAgICAgICAgICAg
ICAgICBKU09iamVjdFJlZiByZWNlaXZlciA9IDo6dG9SZWYodGhpc09iamVjdCk7Ci0gICAgICAg
ICAgICAgICAgSlNPYmplY3RSZWYgcmVjZWl2ZXJGdW5jdGlvbiA9IDo6dG9SZWYoZnVuY09iamVj
dCk7Ci0KLSAgICAgICAgICAgICAgICBmb3JlYWNoKFF0Q29ubmVjdGlvbk9iamVjdCogY29ubiwg
Y29ubnMpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhpcyB0aGUgcmlnaHQgY29ubmVj
dGlvbj8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbm4tPm1hdGNoKGNvbnRleHQsIHNlbmRl
ciwgc2lnbmFsSW5kZXgsIHJlY2VpdmVyLCByZWNlaXZlckZ1bmN0aW9uKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gWWVwLCBkaXNjb25uZWN0IGl0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBRTWV0YU9iamVjdDo6ZGlzY29ubmVjdChzZW5kZXIsIHNpZ25hbEluZGV4LCBjb25uLCBj
b25uLT5tZXRhT2JqZWN0KCktPm1ldGhvZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSBjb25uOyAvLyB0aGlzIHdpbGwgYWxzbyByZW1vdmUgaXQgZnJvbSB0aGUgbWFw
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIXJldCkgewotICAgICAgICAgICAgICAgICAgICBRU3RyaW5n
IG1zZyA9IFFTdHJpbmcoUUxhdGluMVN0cmluZygiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IGZh
aWxlZCB0byBkaXNjb25uZWN0IGZyb20gJTE6OiUyKCkiKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoc2VuZGVyLT5tZXRhT2JqZWN0KCktPmNsYXNzTmFt
ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoZC0+
bV9zaWduYXR1cmUpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVFcnJvcihleGVjLCBtc2cudG9MYXRpbjEoKS5jb25zdERhdGEoKSkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIFFTdHJpbmcgbXNnID0gUVN0cmluZyhRTGF0aW4xU3RyaW5nKCJRdE1ldGFNZXRob2QuJTE6
ICUyOjolMygpIGlzIG5vdCBhIHNpZ25hbCIpKQotICAgICAgICAgICAgICAgICAgICAuYXJnKFFM
YXRpbjFTdHJpbmcoZC0+bV9pc0Nvbm5lY3QgPyAiY29ubmVjdCI6ICJkaXNjb25uZWN0IikpCi0g
ICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhzZW5kZXItPm1ldGFPYmplY3Qo
KS0+Y2xhc3NOYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmco
ZC0+bV9zaWduYXR1cmUpKTsKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1zZy50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZUVycm9yKGV4ZWMsICJjYW5ub3QgY2FsbCBmdW5jdGlvbiBvZiBkZWxldGVkIFFPYmplY3Qi
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LX0KLQotQ2FsbFR5cGUgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0Q2FsbERhdGEoSlND
ZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQotewotICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlv
biA9IGNhbGw7Ci0gICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKLX0KLQotYm9vbCBRdFJ1bnRpbWVD
b25uZWN0aW9uTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
LXsKLSAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFF0
UnVudGltZUNvbm5lY3Rpb25NZXRob2QqPihjZWxsKTsKLSAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpc09iamVjdCwgdGhpc09iamVjdC0+bGVuZ3RoR2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIFF0UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLWJvb2wgUXRS
dW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQotewotICAgIFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCo+KG9i
amVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBRdFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotfQotCi12b2lkIFF0UnVudGltZUNv
bm5lY3Rpb25NZXRob2Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCi17Ci0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCk7Ci0KLSAgICBRdFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotSlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0
aW9uTWV0aG9kOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUHJvcGVydHlOYW1l
KQotewotICAgIC8vIHdlIGhhdmUgb25lIGZvcm1hbCBhcmd1bWVudCwgYW5kIG9uZSBvcHRpb25h
bAotICAgIHJldHVybiBqc051bWJlcigxKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09Ci0KLVF0
Q29ubmVjdGlvbk9iamVjdDo6UXRDb25uZWN0aW9uT2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0
LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IHNlbmRlckluc3RhbmNlLCBpbnQgc2lnbmFsSW5kZXgs
IEpTT2JqZWN0UmVmIHJlY2VpdmVyLCBKU09iamVjdFJlZiByZWNlaXZlckZ1bmN0aW9uKQotICAg
IDogUU9iamVjdChzZW5kZXJJbnN0YW5jZS0+Z2V0T2JqZWN0KCkpCi0gICAgLCBtX2NvbnRleHQo
SlNDb250ZXh0R2V0R2xvYmFsQ29udGV4dChjb250ZXh0KSkKLSAgICAsIG1fc2VuZGVySW5zdGFu
Y2Uoc2VuZGVySW5zdGFuY2UpCi0gICAgLCBtX29yaWdpbmFsU2VuZGVyKG1fc2VuZGVySW5zdGFu
Y2UtPmdldE9iamVjdCgpKQotICAgICwgbV9zaWduYWxJbmRleChzaWduYWxJbmRleCkKLSAgICAs
IG1fcmVjZWl2ZXIocmVjZWl2ZXIpCi0gICAgLCBtX3JlY2VpdmVyRnVuY3Rpb24ocmVjZWl2ZXJG
dW5jdGlvbikKLXsKLSAgICBKU1ZhbHVlUHJvdGVjdChtX2NvbnRleHQsIG1fcmVjZWl2ZXIpOwot
ICAgIEpTVmFsdWVQcm90ZWN0KG1fY29udGV4dCwgbV9yZWNlaXZlckZ1bmN0aW9uKTsKLX0KLQot
UXRDb25uZWN0aW9uT2JqZWN0Ojp+UXRDb25uZWN0aW9uT2JqZWN0KCkKLXsKLSAgICAvLyBXZSBj
YW4gc2FmZWx5IHVzZSBtX29yaWdpbmFsU2VuZGVyIGJlY2F1c2UgY29ubmVjdGlvbiBvYmplY3Qg
d2lsbCBuZXZlciBvdXRsaXZlIHRoZSBzZW5kZXIsCi0gICAgLy8gd2hpY2ggaXMgaXRzIFFPYmpl
Y3QgcGFyZW50LgotICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNvbm5lY3Rpb25zLnJl
bW92ZShtX29yaWdpbmFsU2VuZGVyLCB0aGlzKTsKLQotICAgIEpTVmFsdWVVbnByb3RlY3QobV9j
b250ZXh0LCBtX3JlY2VpdmVyKTsKLSAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9y
ZWNlaXZlckZ1bmN0aW9uKTsKLX0KLQotc3RhdGljIGNvbnN0IHVpbnQgcXRfbWV0YV9kYXRhX1F0
Q29ubmVjdGlvbk9iamVjdFtdID0gewotCi0gLy8gY29udGVudDoKLSAgICAgICAxLCAgICAgICAv
LyByZXZpc2lvbgotICAgICAgIDAsICAgICAgIC8vIGNsYXNzbmFtZQotICAgICAgIDAsICAgIDAs
IC8vIGNsYXNzaW5mbwotICAgICAgIDEsICAgMTAsIC8vIG1ldGhvZHMKLSAgICAgICAwLCAgICAw
LCAvLyBwcm9wZXJ0aWVzCi0gICAgICAgMCwgICAgMCwgLy8gZW51bXMvc2V0cwotCi0gLy8gc2xv
dHM6IHNpZ25hdHVyZSwgcGFyYW1ldGVycywgdHlwZSwgdGFnLCBmbGFncwotICAgICAgMjgsICAg
MjcsICAgMjcsICAgMjcsIDB4MGEsCi0KLSAgICAgICAwICAgICAgICAvLyBlb2QKLX07Ci0KLXN0
YXRpYyBjb25zdCBjaGFyIHF0X21ldGFfc3RyaW5nZGF0YV9RdENvbm5lY3Rpb25PYmplY3RbXSA9
IHsKLSAgICAiSlNDOjpCaW5kaW5nczo6UXRDb25uZWN0aW9uT2JqZWN0XDBcMGV4ZWN1dGUoKVww
IgotfTsKLQotY29uc3QgUU1ldGFPYmplY3QgUXRDb25uZWN0aW9uT2JqZWN0OjpzdGF0aWNNZXRh
T2JqZWN0ID0gewotICAgIHsgJlFPYmplY3Q6OnN0YXRpY01ldGFPYmplY3QsIHF0X21ldGFfc3Ry
aW5nZGF0YV9RdENvbm5lY3Rpb25PYmplY3QsCi0gICAgICBxdF9tZXRhX2RhdGFfUXRDb25uZWN0
aW9uT2JqZWN0LCAwIH0KLX07Ci0KLWNvbnN0IFFNZXRhT2JqZWN0ICpRdENvbm5lY3Rpb25PYmpl
Y3Q6Om1ldGFPYmplY3QoKSBjb25zdAotewotICAgIHJldHVybiAmc3RhdGljTWV0YU9iamVjdDsK
LX0KLQotdm9pZCAqUXRDb25uZWN0aW9uT2JqZWN0OjpxdF9tZXRhY2FzdChjb25zdCBjaGFyICpf
Y2xuYW1lKQotewotICAgIGlmICghX2NsbmFtZSkgcmV0dXJuIDA7Ci0gICAgaWYgKCFzdHJjbXAo
X2NsbmFtZSwgcXRfbWV0YV9zdHJpbmdkYXRhX1F0Q29ubmVjdGlvbk9iamVjdCkpCi0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDxRdENvbm5lY3Rpb25PYmplY3Qq
Pih0aGlzKSk7Ci0gICAgcmV0dXJuIFFPYmplY3Q6OnF0X21ldGFjYXN0KF9jbG5hbWUpOwotfQot
Ci0vLyBUaGlzIGlzIHdoYXQgbW9jIHdvdWxkIGdlbmVyYXRlIGV4Y2VwdCBieSB0aGUgZmFjdCB0
aGF0IHdlIHBhc3MgYWxsIGFyZ3VtZW50cyB0byBvdXIgZXhlY3V0ZSgpIHNsb3QuCi1pbnQgUXRD
b25uZWN0aW9uT2JqZWN0OjpxdF9tZXRhY2FsbChRTWV0YU9iamVjdDo6Q2FsbCBfYywgaW50IF9p
ZCwgdm9pZCAqKl9hKQotewotICAgIF9pZCA9IFFPYmplY3Q6OnF0X21ldGFjYWxsKF9jLCBfaWQs
IF9hKTsKLSAgICBpZiAoX2lkIDwgMCkKLSAgICAgICAgcmV0dXJuIF9pZDsKLSAgICBpZiAoX2Mg
PT0gUU1ldGFPYmplY3Q6Okludm9rZU1ldGFNZXRob2QpIHsKLSAgICAgICAgc3dpdGNoIChfaWQp
IHsKLSAgICAgICAgY2FzZSAwOiBleGVjdXRlKF9hKTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgX2lkIC09IDE7Ci0gICAgfQotICAgIHJldHVybiBfaWQ7Ci19Ci0KLXN0YXRpYyBib29sIGlz
SmF2YVNjcmlwdEZ1bmN0aW9uKEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKLSAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7Ci0gICAgcmV0
dXJuIGpzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShqc09iamVjdCwgY2FsbERh
dGEpID09IENhbGxUeXBlSlM7Ci19Ci0KLXZvaWQgUXRDb25uZWN0aW9uT2JqZWN0OjpleGVjdXRl
KHZvaWQqKiBhcmd2KQotewotICAgIFFPYmplY3QqIHNlbmRlciA9IG1fc2VuZGVySW5zdGFuY2Ut
PmdldE9iamVjdCgpOwotICAgIGlmICghc2VuZGVyKSB7Ci0gICAgICAgIHFXYXJuaW5nKCkgPDwg
InNlbmRlciBkZWxldGVkLCBjYW5ub3QgZGVsaXZlciBzaWduYWwiOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKHNlbmRlciA9PSBtX29yaWdpbmFsU2VuZGVyKTsKLQotICAg
IGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhID0gc2VuZGVyLT5tZXRhT2JqZWN0KCk7Ci0gICAgY29u
c3QgUU1ldGFNZXRob2QgbWV0aG9kID0gbWV0YS0+bWV0aG9kKG1fc2lnbmFsSW5kZXgpOwotCi0g
ICAgUUxpc3Q8UUJ5dGVBcnJheT4gcGFyYW1ldGVyVHlwZXMgPSBtZXRob2QucGFyYW1ldGVyVHlw
ZXMoKTsKLQotICAgIEpTVmFsdWVSZWYqIGlnbm9yZWRFeGNlcHRpb24gPSAwOwotICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBsZW5ndGhQcm9wZXJ0eShKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygibGVuZ3RoIikpOwotICAgIGludCByZWNlaXZlckxlbmd0aCA9IGludChKU1ZhbHVl
VG9OdW1iZXIobV9jb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5KG1fY29udGV4dCwgbV9yZWNl
aXZlckZ1bmN0aW9uLCBsZW5ndGhQcm9wZXJ0eS5nZXQoKSwgaWdub3JlZEV4Y2VwdGlvbiksIGln
bm9yZWRFeGNlcHRpb24pKTsKLSAgICBpbnQgYXJnYyA9IHFNYXgocGFyYW1ldGVyVHlwZXMuY291
bnQoKSwgcmVjZWl2ZXJMZW5ndGgpOwotICAgIFdURjo6VmVjdG9yPEpTVmFsdWVSZWY+IGFyZ3Mo
YXJnYyk7Ci0KLSAgICAvLyBUT0RPOiByZW1vdmUgb25jZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB1
c2UgSlNDIEFQSS4KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSA6OnRvSlMobV9jb250ZXh0KTsKLSAg
ICBSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IG1fc2VuZGVySW5zdGFuY2UtPnJvb3RP
YmplY3QoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAg
IGludCBhcmdUeXBlID0gUU1ldGFUeXBlOjp0eXBlKHBhcmFtZXRlclR5cGVzLmF0KGkpKTsKLSAg
ICAgICAgYXJnc1tpXSA9IDo6dG9SZWYoZXhlYywgY29udmVydFFWYXJpYW50VG9WYWx1ZShleGVj
LCByb290T2JqZWN0LCBRVmFyaWFudChhcmdUeXBlLCBhcmd2W2krMV0pKSk7Ci0gICAgfQotCi0g
ICAgY29uc3QgYm9vbCB1cGRhdGVRdFNlbmRlciA9IGlzSmF2YVNjcmlwdEZ1bmN0aW9uKG1fcmVj
ZWl2ZXJGdW5jdGlvbik7Ci0gICAgaWYgKHVwZGF0ZVF0U2VuZGVyKQotICAgICAgICBRdEluc3Rh
bmNlOjpxdFNlbmRlclN0YWNrKCktPnB1c2goUU9iamVjdDo6c2VuZGVyKCkpOwotCi0gICAgSlNP
YmplY3RDYWxsQXNGdW5jdGlvbihtX2NvbnRleHQsIG1fcmVjZWl2ZXJGdW5jdGlvbiwgbV9yZWNl
aXZlciwgYXJnYywgYXJncy5kYXRhKCksIDApOwotCi0gICAgaWYgKHVwZGF0ZVF0U2VuZGVyKQot
ICAgICAgICBRdEluc3RhbmNlOjpxdFNlbmRlclN0YWNrKCktPnBvcCgpOwotfQotCi1ib29sIFF0
Q29ubmVjdGlvbk9iamVjdDo6bWF0Y2goSlNDb250ZXh0UmVmIGNvbnRleHQsIFFPYmplY3QqIHNl
bmRlciwgaW50IHNpZ25hbEluZGV4LCBKU09iamVjdFJlZiByZWNlaXZlciwgSlNPYmplY3RSZWYg
cmVjZWl2ZXJGdW5jdGlvbikKLXsKLSAgICBpZiAoc2VuZGVyICE9IG1fb3JpZ2luYWxTZW5kZXIg
fHwgc2lnbmFsSW5kZXggIT0gbV9zaWduYWxJbmRleCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIEpTVmFsdWVSZWYqIGlnbm9yZWRFeGNlcHRpb24gPSAwOwotICAgIGNvbnN0IGJvb2wgcmVj
ZWl2ZXJNYXRjaCA9ICghcmVjZWl2ZXIgJiYgIW1fcmVjZWl2ZXIpIHx8IEpTVmFsdWVJc0VxdWFs
KGNvbnRleHQsIHJlY2VpdmVyLCBtX3JlY2VpdmVyLCBpZ25vcmVkRXhjZXB0aW9uKTsKLSAgICBy
ZXR1cm4gcmVjZWl2ZXJNYXRjaCAmJiBKU1ZhbHVlSXNFcXVhbChjb250ZXh0LCByZWNlaXZlckZ1
bmN0aW9uLCBtX3JlY2VpdmVyRnVuY3Rpb24sIGlnbm9yZWRFeGNlcHRpb24pOwotfQotCi1RdENv
bm5lY3Rpb25PYmplY3QqIFF0Q29ubmVjdGlvbk9iamVjdDo6Y3JlYXRlV2l0aEludGVybmFsSlND
KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBzZW5kZXJJbnN0YW5jZSwg
aW50IHNpZ25hbEluZGV4LCBKU09iamVjdCogcmVjZWl2ZXIsIEpTT2JqZWN0KiByZWNlaXZlckZ1
bmN0aW9uKQotewotICAgIHJldHVybiBuZXcgUXRDb25uZWN0aW9uT2JqZWN0KDo6dG9SZWYoZXhl
YyksIHNlbmRlckluc3RhbmNlLCBzaWduYWxJbmRleCwgOjp0b1JlZihyZWNlaXZlciksIDo6dG9S
ZWYocmVjZWl2ZXJGdW5jdGlvbikpOwotfQotCi0vLyA9PT09PT09PT09PT09PT0KLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IFF0QXJyYXk8VD46OlF0QXJyYXkoUUxpc3Q8VD4gbGlzdCwgUU1ldGFU
eXBlOjpUeXBlIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkKLSAgICA6
IEFycmF5KHJvb3RPYmplY3QpCi0gICAgLCBtX2xpc3QobGlzdCkKLSAgICAsIG1fdHlwZSh0eXBl
KQotewotICAgIG1fbGVuZ3RoID0gbV9saXN0LmNvdW50KCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBRdEFycmF5PFQ+Ojp+UXRBcnJheSAoKQotewotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gUm9vdE9iamVjdCogUXRBcnJheTxUPjo6cm9vdE9iamVjdCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcm9vdE9iamVjdCAmJiBtX3Jvb3RPYmplY3QtPmlzVmFsaWQoKSA/IG1fcm9vdE9i
amVjdC5nZXQoKSA6IDA7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFF0QXJyYXk8
VD46OnNldFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSBh
VmFsdWUpIGNvbnN0Ci17Ci0gICAgLy8gUXRTY3JpcHQgc2V0cyB0aGUgdmFsdWUsIGJ1dCBkb2Vz
bid0IGZvcndhcmQgaXQgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZQotICAgIC8vIChlLmcuIGlmIHlv
dSBkbyAnb2JqZWN0LmludExpc3RbNV0gPSA2JywgdGhlIG9iamVjdCBpcyBub3QgdXBkYXRlZCwg
YnV0IHRoZQotICAgIC8vIGNvcHkgb2YgdGhlIGxpc3QgaXMpLgotICAgIGludCBkaXN0ID0gLTE7
Ci0gICAgUVZhcmlhbnQgdmFsID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCBhVmFsdWUs
IG1fdHlwZSwgJmRpc3QpOwotCi0gICAgaWYgKGRpc3QgPj0gMCkgewotICAgICAgICBtX2xpc3Rb
aW5kZXhdID0gdmFsLnZhbHVlPFQ+KCk7Ci0gICAgfQotfQotCi0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBKU1ZhbHVlIFF0QXJyYXk8VD46OnZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25l
ZCBpbnQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgaWYgKGluZGV4IDwgbV9sZW5ndGgpIHsKLSAgICAg
ICAgVCB2YWwgPSBtX2xpc3QuYXQoaW5kZXgpOwotICAgICAgICByZXR1cm4gY29udmVydFFWYXJp
YW50VG9WYWx1ZShleGVjLCByb290T2JqZWN0KCksIFFWYXJpYW50Ojpmcm9tVmFsdWUodmFsKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLS8vID09PT09PT09PT09
PT09PQotCi19IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvcXQvU21hcnRS
ZXBsYWNlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9xdC9TbWFydFJlcGxhY2VRdC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYmI4MmMyZTg2YjgyMTRlMTU0MjUy
ZjlkMjI2ZjM3MjE5ODViNTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9xdC9TbWFydFJlcGxhY2VRdC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFJv
YmVydCBIb2dhbiA8cm9iZXJ0QHJvYmVydGhvZ2FuLm5ldD4uICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA3LDIwMDgsMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpZiBVU0UoUVQ0X1VOSUNPREUpCi0j
aW5jbHVkZSAiU21hcnRSZXBsYWNlLmgiCi0jaW5jbHVkZSA8UUNoYXI+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotYm9vbCBpc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdChVQ2hhcjMyIGMs
IGJvb2wgaXNQcmV2aW91c0NoYXJhY3RlcikKLXsKLSAgICBRQ2hhciBkKGMpOwotICAgIGlmIChk
LmlzU3BhY2UoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFpc1ByZXZpb3VzQ2hh
cmFjdGVyICYmIGQuaXNQdW5jdCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgo
YyA+PSAweDExMDAgJiYgYyA8PSAoMHgxMTAwICsgMjU2KSkgLy8gSGFuZ3VsIEphbW8gKDB4MTEw
MCAtIDB4MTFGRikKLSAgICAgICAgfHwgKGMgPj0gMHgyRTgwICYmIGMgPD0gKDB4MkU4MCArIDM1
MikpIC8vIENKSyAmIEthbmd4aSBSYWRpY2FscyAoMHgyRTgwIC0gMHgyRkRGKQotICAgICAgICB8
fCAoYyA+PSAweDJGRjAgJiYgYyA8PSAoMHgyRkYwICsgNDY0KSkgLy8gSWRlb2dyYXBoIERlc2Vy
aXB0aW9ucywgQ0pLIFN5bWJvbHMsIEhpcmFnYW5hLCBLYXRha2FuYSwgQm9wb21vZm8sIEhhbmd1
bCBDb21wYXRpYmlsaXR5IEphbW8sIEthbmJ1biwgJiBCb3BvbW9mbyBFeHQgKDB4MkZGMCAtIDB4
MzFCRikKLSAgICAgICAgfHwgKGMgPj0gMHgzMjAwICYmIGMgPD0gKDB4MzIwMCArIDI5MzkyKSkg
Ly8gRW5jbG9zZWQgQ0pLLCBDSksgSWRlb2dyYXBocyAoVW5pIEhhbiAmIEV4dCBBKSwgJiBZaSAo
MHgzMjAwIC0gMHhBNENGKQotICAgICAgICB8fCAoYyA+PSAweEFDMDAgJiYgYyA8PSAoMHhBQzAw
ICsgMTExODMpKSAvLyBIYW5ndWwgU3lsbGFibGVzICgweEFDMDAgLSAweEQ3QUYpCi0gICAgICAg
IHx8IChjID49IDB4RjkwMCAmJiBjIDw9ICgweEY5MDAgKyAzNTIpKSAvLyBDSksgQ29tcGF0aWJp
bGl0eSBJZGVvZ3JhcGhzICgweEY5MDAgLSAweEZBNUYpCi0gICAgICAgIHx8IChjID49IDB4RkUz
MCAmJiBjIDw9ICgweEZFMzAgKyAzMikpIC8vIENKSyBDb21wYXRpYmlsaXR5IEZyb20gKDB4RkUz
MCAtIDB4RkU0RikKLSAgICAgICAgfHwgKGMgPj0gMHhGRjAwICYmIGMgPD0gKDB4RkYwMCArIDI0
MCkpIC8vIEhhbGYvRnVsbCBXaWR0aCBGb3JtICgweEZGMDAgLSAweEZGRUYpCi0gICAgICAgIHx8
IChjID49IDB4MjAwMDAgJiYgYyA8PSAoMHgyMDAwMCArIDB4QTZENykpIC8vIENKSyBJZGVvZ3Jh
cGggRXhudGVuc2lvbiBCCi0gICAgICAgIHx8IChjID49IDB4MkY4MDAgJiYgYyA8PSAoMHgyRjgw
MCArIDB4MDIxRSkpKSAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzICgweDJGODAwIC0g
MHgyRkExRCkKLSAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNvbnN0IGNoYXIgcHJldltdID0g
IihbXCJcJyMkLy1ge1wwIjsKLSAgICBjb25zdCBjaGFyIG5leHRbXSA9ICIpXS4sOzo/XCchXCIl
Ki0vfVwwIjsKLSAgICBjb25zdCBjaGFyKiBzdHIgPSAoaXNQcmV2aW91c0NoYXJhY3RlcikgPyBw
cmV2IDogbmV4dDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmxlbihzdHIpOyArK2kpIHsK
LSAgICAgICAgaWYgKHN0cltpXSA9PSBjKQotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
cXQvRXZlbnRIYW5kbGVyUXQuY3BwCmluZGV4IGQ1MjIyMjk1MDBhYzE1ZTM4YTY0MTg2MzFlODZl
ZWNlOGU3ODM3YTYuLmFiNzU5NDk2ZjFiMzA1NjlhMTU0ZGRkN2QwOTU4MDczNWFmYzc0NDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCkBAIC01MCwxMiArNTAs
NiBAQAogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgog
Ci0jaWYgIUhBVkUoUVQ1KQotUVRfQkVHSU5fTkFNRVNQQUNFCi1RX0dVSV9FWFBPUlQgZXh0ZXJu
IGJvb2wgcXRfdGFiX2FsbF93aWRnZXRzOyAvLyBmcm9tIHFhcHBsaWNhdGlvbi5jcHAKLVFUX0VO
RF9OQU1FU1BBQ0UKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBkZWZpbmVk
KFFfV1NfTUFDKQpAQCAtNjYsMTEgKzYwLDcgQEAgY29uc3QgZG91YmxlIEV2ZW50SGFuZGxlcjo6
VGV4dERyYWdEZWxheSA9IDAuMDsKIAogYm9vbCBFdmVudEhhbmRsZXI6OnRhYnNUb0FsbEZvcm1D
b250cm9scyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKIHsKLSNpZiBIQVZFKFFUNSkKICAg
ICByZXR1cm4gIWlzS2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpOwotI2Vsc2UKLSAgICByZXR1cm4g
KGlzS2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpID8gIXF0X3RhYl9hbGxfd2lkZ2V0cyA6IHF0X3Rh
Yl9hbGxfd2lkZ2V0cyk7Ci0jZW5kaWYKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9j
dW1lbnRWaWV3KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDc0MzNkZjYyNmY0Y2FiMmFjYzZjYTA5OGE2MjgwZDQ4
ZDQ5YTJiMTkuLjE0YmM0YjI1ZmY4YjE1ZjI2NmI0YWM4YWU2MjQ3MjYxYjYzZWRjMzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaApAQCAtNjgsMTQgKzY4LDkgQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgR0x1aW50OwogI2lm
IFBMQVRGT1JNKE1BQykKIHR5cGVkZWYgQ0dMQ29udGV4dE9iaiBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEOwogI2VsaWYgUExBVEZPUk0oUVQpCi0jaWYgSEFWRShRVDUpCiB0eXBlZGVmIFFPcGVu
R0xDb250ZXh0KiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOwogdHlwZWRlZiBRU3VyZmFjZSog
UGxhdGZvcm1HcmFwaGljc1N1cmZhY2UzRDsKICNlbHNlCi10eXBlZGVmIFFHTENvbnRleHQqIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7Ci10eXBlZGVmIFFHTFdpZGdldCogUGxhdGZvcm1HcmFw
aGljc1N1cmZhY2UzRDsKLSNlbmRpZgotI2Vsc2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9PcGVuR0xTaGltcy5jcHAKaW5kZXggODJjYzIxYzZkMTVjMTk1NzI3OWY4NWZmYzQ1
YzkzNGU1NmJkOWU1Ny4uOGU1NGVlNDUyYjkzZThjNDdkZTc1ZDRjOWQwMjMzMGIxMmE5YjFhMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmNw
cApAQCAtNDIsMTEgKzQyLDcgQEAgT3BlbkdMRnVuY3Rpb25UYWJsZSogb3BlbkdMRnVuY3Rpb25U
YWJsZSgpCiAjaWYgUExBVEZPUk0oUVQpCiBzdGF0aWMgdm9pZCogZ2V0UHJvY0FkZHJlc3MoY29u
c3QgY2hhciogcHJvY05hbWUpCiB7Ci0jaWYgSEFWRShRVDUpCiAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpLT5nZXRQcm9j
QWRkcmVzcyhwcm9jTmFtZSkpOwotI2Vsc2UKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oUUdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKS0+Z2V0UHJvY0FkZHJlc3MoUVN0cmlu
Zzo6ZnJvbUxhdGluMShwcm9jTmFtZSkpKTsKLSNlbmRpZgogfQogI2Vsc2UKIHR5cGVkZWYgdm9p
ZCogKCpnbEdldFByb2NBZGRyZXNzVHlwZSkgKGNvbnN0IGNoYXIqIHByb2NOYW1lKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5oCmluZGV4IDcwNmYx
N2Q5YmE2N2MxNjk2ZjVmYjcyNzNiOTU2Mjg3ZTc3ZDVlYmMuLmZmZmE1MDJlNWY2ZjVjMjE5OTNk
MGM4MTBmMWRiNDlhZTY0ZmU4NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL09wZW5HTFNoaW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvT3BlbkdMU2hpbXMuaApAQCAtMjIsMTQgKzIyLDEwIEBACiAKICNpZiBQTEFURk9STShR
VCkKICNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci0jaWYgSEFWRShRVDUpCiAjaW5jbHVkZSA8cW9wZW5n
bGZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgogI2luY2x1ZGUgPFFTdXJm
YWNlPgogI2Vsc2UKLSNpbmNsdWRlIDxRR0xDb250ZXh0PgotI2VuZGlmCi0jZWxzZQogI2luY2x1
ZGUgPEdML2dsLmg+CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3dQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRv
d1ByaXZhdGUuaAppbmRleCBiOTI5ZTkwZTQ5ZjQxMDBjNGY5N2ZjZTk3NjM3YmJlMDFhYWY0MDll
Li40MjNkMGNiZjNmZjc4M2IxODY4Zjc3MzkzY2VhZjRmODExM2U4Yjc5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dp
bmRvd1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvd1ByaXZhdGUuaApAQCAtMjMsMjMgKzIzLDEzIEBACiAj
aW5jbHVkZSA8UUV2ZW50PgogI2luY2x1ZGUgPFFUaW1lcj4KIAotI2lmIGRlZmluZWQoSEFWRV9R
VDUpICYmIEhBVkVfUVQ1CiAjaW5jbHVkZSA8UVdpbmRvdz4KLSNlbHNlCi0jaW5jbHVkZSA8UVdp
ZGdldD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxWaWRlb0Vs
ZW1lbnQ7CiAKLSNpZiBkZWZpbmVkKEhBVkVfUVQ1KSAmJiBIQVZFX1FUNQotdHlwZWRlZiBRV2lu
ZG93IEJhc2U7Ci0jZWxzZQotdHlwZWRlZiBRV2lkZ2V0IEJhc2U7Ci0jZW5kaWYKLQotY2xhc3Mg
RnVsbFNjcmVlblZpZGVvV2luZG93OiBwdWJsaWMgQmFzZSB7CitjbGFzcyBGdWxsU2NyZWVuVmlk
ZW9XaW5kb3c6IHB1YmxpYyBRV2luZG93IHsKIFFfT0JKRUNUCiBwdWJsaWM6CiAgICAgRnVsbFNj
cmVlblZpZGVvV2luZG93KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvd1F0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9ybVZpZGVvV2luZG93UXQuY3Bw
CmluZGV4IDNlNDMxZjI0MTdjOTM2ZDc5M2YzMDhiZWEzMDNmNDNjMmZiZTQ0NzcuLjk3N2ZhM2Ey
NDQ1MjI0MmE1MmZkZDYwNWM4ZjViMTAxNDdjNDBlNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9ybVZpZGVvV2luZG93UXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9y
bVZpZGVvV2luZG93UXQuY3BwCkBAIC0zOCwxMSArMzgsNiBAQCBzdGF0aWMgY29uc3QgaW50IGdI
aWRlTW91c2VDdXJzb3JEZWxheSA9IDMwMDA7CiBGdWxsU2NyZWVuVmlkZW9XaW5kb3c6OkZ1bGxT
Y3JlZW5WaWRlb1dpbmRvdygpCiAgICAgOiBtX21lZGlhRWxlbWVudCgwKQogewotI2lmICFIQVZF
KFFUNSkKLSAgICBzZXRBdHRyaWJ1dGUoUXQ6OldBX05hdGl2ZVdpbmRvdyk7Ci0gICAgc2V0QXR0
cmlidXRlKFF0OjpXQV9Ob1N5c3RlbUJhY2tncm91bmQsIHRydWUpOwotICAgIHNldEF0dHJpYnV0
ZShRdDo6V0FfUGFpbnRPblNjcmVlbiwgdHJ1ZSk7Ci0jZW5kaWYKICAgICBzZXRXaW5kb3dNb2Rh
bGl0eShRdDo6QXBwbGljYXRpb25Nb2RhbCk7CiAKICNpZm5kZWYgUVRfTk9fQ1VSU09SCkBAIC02
NSw3ICs2MCw3IEBAIHZvaWQgRnVsbFNjcmVlblZpZGVvV2luZG93OjprZXlQcmVzc0V2ZW50KFFL
ZXlFdmVudCogZXYpCiAgICAgICAgICAgICBtX21lZGlhRWxlbWVudC0+cGxheSgpOwogICAgIH0g
ZWxzZSBpZiAoZXYtPmtleSgpID09IFF0OjpLZXlfRXNjYXBlKQogICAgICAgICBlbWl0IGNsb3Nl
ZCgpOwotICAgIEJhc2U6OmtleVByZXNzRXZlbnQoZXYpOworICAgIFFXaW5kb3c6OmtleVByZXNz
RXZlbnQoZXYpOwogfQogCiBib29sIEZ1bGxTY3JlZW5WaWRlb1dpbmRvdzo6ZXZlbnQoUUV2ZW50
KiBldikKQEAgLTgzLDEwICs3OCw2IEBAIGJvb2wgRnVsbFNjcmVlblZpZGVvV2luZG93OjpldmVu
dChRRXZlbnQqIGV2KQogI2lmbmRlZiBRVF9OT19DVVJTT1IKICAgICAgICAgbV9jdXJzb3JUaW1l
ci5zdG9wKCk7CiAjZW5kaWYKLSNpZiAhSEFWRShRVDUpCi0gICAgICAgIHNldE1vdXNlVHJhY2tp
bmcoZmFsc2UpOwotICAgICAgICByZWxlYXNlTW91c2UoKTsKLSNlbmRpZgogI2lmbmRlZiBRVF9O
T19DVVJTT1IKICAgICAgICAgUUd1aUFwcGxpY2F0aW9uOjpyZXN0b3JlT3ZlcnJpZGVDdXJzb3Io
KTsKICNlbmRpZgpAQCAtOTQsMTkgKzg1LDEzIEBAIGJvb2wgRnVsbFNjcmVlblZpZGVvV2luZG93
OjpldmVudChRRXZlbnQqIGV2KQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICByZXR1cm4gQmFzZTo6ZXZlbnQoZXYpOworICAgIHJldHVybiBRV2luZG93OjpldmVudChl
dik7CiB9CiAKIHZvaWQgRnVsbFNjcmVlblZpZGVvV2luZG93OjpzaG93RnVsbFNjcmVlbigpCiB7
Ci0gICAgQmFzZTo6c2hvd0Z1bGxTY3JlZW4oKTsKLSNpZiAhSEFWRShRVDUpCi0gICAgc2V0TW91
c2VUcmFja2luZyh0cnVlKTsKLSNlbmRpZgorICAgIFFXaW5kb3c6OnNob3dGdWxsU2NyZWVuKCk7
CiAgICAgcmFpc2UoKTsKLSNpZiAhSEFWRShRVDUpCi0gICAgc2V0Rm9jdXMoKTsKLSNlbmRpZgog
ICAgIGhpZGVDdXJzb3IoKTsKIH0KIApAQCAtMTI4LDE2ICsxMTMsMTAgQEAgdm9pZCBGdWxsU2Ny
ZWVuVmlkZW9XaW5kb3c6OnNob3dDdXJzb3IoKQogCiBQbGF0Zm9ybVZpZGVvV2luZG93OjpQbGF0
Zm9ybVZpZGVvV2luZG93KCkKIHsKLSAgICBCYXNlKiB3aW4gPSBuZXcgRnVsbFNjcmVlblZpZGVv
V2luZG93KCk7CisgICAgUVdpbmRvdyogd2luID0gbmV3IEZ1bGxTY3JlZW5WaWRlb1dpbmRvdygp
OwogICAgIG1fd2luZG93ID0gd2luOwogICAgIHdpbi0+c2V0V2luZG93RmxhZ3Mod2luLT53aW5k
b3dGbGFncygpIHwgUXQ6OkZyYW1lbGVzc1dpbmRvd0hpbnQpOwogICAgIC8vIEZJWE1FOiBQb3J0
IHRvIFF0IDUuCi0jaWYgIUhBVkUoUVQ1KQotICAgIFFQYWxldHRlIHA7Ci0gICAgcC5zZXRDb2xv
cihRUGFsZXR0ZTo6QmFzZSwgUXQ6OmJsYWNrKTsKLSAgICBwLnNldENvbG9yKFFQYWxldHRlOjpX
aW5kb3csIFF0OjpibGFjayk7Ci0gICAgd2luLT5zZXRQYWxldHRlKHApOwotI2VuZGlmCiAgICAg
d2luLT5zaG93RnVsbFNjcmVlbigpOwogICAgIG1fdmlkZW9XaW5kb3dJZCA9IHdpbi0+d2luSWQo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggODk1Zjc2Njg4MDM5ZTgxZjJmNzBiZmFk
ODAwNWYwNzdiZGU1MWQxOC4uY2I4MjRmNjNjMGM4YjBiYmM2ODk5MmM5ZmI4YjkwNDM5OTJiMjNk
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTM0LDEwICszNCw4IEBACiAjaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKICNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgogI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgotI2lmIEhBVkUoUVQ1KQogI2luY2x1ZGUgPFFXaW5kb3c+CiAjaW5jbHVk
ZSA8cXBhL3FwbGF0Zm9ybXBpeG1hcC5oPgotI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC0yNTUsNyArMjUzLDYg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsaXRNdWx0aXNhbXBsZUZyYW1lYnVm
ZmVyQW5kUmVzdG9yZUNvbnRleHQoKSBjb24KICAgICBpZiAoIW1fY29udGV4dC0+bV9hdHRycy5h
bnRpYWxpYXMpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEhBVkUoUVQ1KQogICAgIGNvbnN0IFFP
cGVuR0xDb250ZXh0KiBjdXJyZW50Q29udGV4dCA9IFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29u
dGV4dCgpOwogICAgIFFTdXJmYWNlKiBjdXJyZW50U3VyZmFjZSA9IDA7CiAgICAgaWYgKGN1cnJl
bnRDb250ZXh0ICE9IG1fcGxhdGZvcm1Db250ZXh0KSB7CkBAIC0yNjUsMzUgKzI2MiwxNCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YmxpdE11bHRpc2FtcGxlRnJhbWVidWZmZXJB
bmRSZXN0b3JlQ29udGV4dCgpIGNvbgogICAgIGJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyKCk7
CiAgICAgaWYgKGN1cnJlbnRTdXJmYWNlKQogICAgICAgICBjb25zdF9jYXN0PFFPcGVuR0xDb250
ZXh0Kj4oY3VycmVudENvbnRleHQpLT5tYWtlQ3VycmVudChjdXJyZW50U3VyZmFjZSk7Ci0jZWxz
ZQotICAgIGNvbnN0IFFHTENvbnRleHQqIGN1cnJlbnRDb250ZXh0ID0gUUdMQ29udGV4dDo6Y3Vy
cmVudENvbnRleHQoKTsKLSAgICBjb25zdCBRR0xDb250ZXh0KiB3aWRnZXRDb250ZXh0ID0gbV9z
dXJmYWNlLT5jb250ZXh0KCk7Ci0gICAgaWYgKGN1cnJlbnRDb250ZXh0ICE9IHdpZGdldENvbnRl
eHQpCi0gICAgICAgIG1fc3VyZmFjZS0+bWFrZUN1cnJlbnQoKTsKLSAgICBibGl0TXVsdGlzYW1w
bGVGcmFtZWJ1ZmZlcigpOwotICAgIGlmIChjdXJyZW50Q29udGV4dCkgewotICAgICAgICBpZiAo
Y3VycmVudENvbnRleHQgIT0gd2lkZ2V0Q29udGV4dCkKLSAgICAgICAgICAgIGNvbnN0X2Nhc3Q8
UUdMQ29udGV4dCo+KGN1cnJlbnRDb250ZXh0KS0+bWFrZUN1cnJlbnQoKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgbV9zdXJmYWNlLT5kb25lQ3VycmVudCgpOwotI2VuZGlmCiB9CiAKIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ3VycmVudElmTmVlZGVkKCkgY29uc3QKIHsKLSNp
ZiBIQVZFKFFUNSkKICAgICBjb25zdCBRT3BlbkdMQ29udGV4dCogY3VycmVudENvbnRleHQgPSBR
T3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKTsKICAgICBpZiAoY3VycmVudENvbnRleHQg
PT0gbV9wbGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBt
X3BsYXRmb3JtQ29udGV4dC0+bWFrZUN1cnJlbnQobV9zdXJmYWNlKTsKLSNlbHNlCi0gICAgY29u
c3QgUUdMQ29udGV4dCogY3VycmVudENvbnRleHQgPSBRR0xDb250ZXh0OjpjdXJyZW50Q29udGV4
dCgpOwotICAgIGNvbnN0IFFHTENvbnRleHQqIHdpZGdldENvbnRleHQgPSBtX3N1cmZhY2UtPmNv
bnRleHQoKTsKLSAgICBpZiAoY3VycmVudENvbnRleHQgIT0gd2lkZ2V0Q29udGV4dCkKLSAgICAg
ICAgbV9zdXJmYWNlLT5tYWtlQ3VycmVudCgpOwotCi0gICAgcmV0dXJuIFFHTENvbnRleHQ6OmN1
cnJlbnRDb250ZXh0KCkgPT0gd2lkZ2V0Q29udGV4dDsKLSNlbmRpZgogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXpl
JiBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCmluZGV4IDZhM2VmZmFjYmI1YTIzM2RhNjFlNDgxMTQ2
MmY3M2E4MjFkNzVjNjIuLjAzNmY5ODNjOWNlNDFlZDc4OGUzMDQ1NWM2M2UzMTc0NmQxMmFiM2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTY2LDcgKzY2LDcgQEAKICNpbmNsdWRlIDxRVmVjdG9y
PgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKLSNpZiBPUyhXSU5ET1dTKSAmJiBIQVZF
KFFUNSkKKyNpZiBPUyhXSU5ET1dTKQogUV9HVUlfRVhQT1JUIFFQaXhtYXAgcXRfcGl4bWFwRnJv
bVdpbkhCSVRNQVAoSEJJVE1BUCwgaW50IGhiaXRtYXBGb3JtYXQgPSAwKTsKIAogZW51bSBIQml0
bWFwRm9ybWF0IHsKQEAgLTE0NzAsMTEgKzE0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJv
bwogICAgICAgICAgICAgR2V0T2JqZWN0KGJpdG1hcCwgc2l6ZW9mKGluZm8pLCAmaW5mbyk7CiAg
ICAgICAgICAgICBBU1NFUlQoaW5mby5ibUJpdHNQaXhlbCA9PSAzMik7CiAKLSNpZiBIQVZFKFFU
NSkKICAgICAgICAgICAgIFFQaXhtYXAgcGl4bWFwID0gcXRfcGl4bWFwRnJvbVdpbkhCSVRNQVAo
Yml0bWFwLCBzdXBwb3J0QWxwaGFCbGVuZCA/IEhCaXRtYXBQcmVtdWx0aXBsaWVkQWxwaGEgOiBI
Qml0bWFwTm9BbHBoYSk7Ci0jZWxzZQotICAgICAgICAgICAgUVBpeG1hcCBwaXhtYXAgPSBRUGl4
bWFwOjpmcm9tV2luSEJJVE1BUChiaXRtYXAsIHN1cHBvcnRBbHBoYUJsZW5kID8gUVBpeG1hcDo6
UHJlbXVsdGlwbGllZEFscGhhIDogUVBpeG1hcDo6Tm9BbHBoYSk7Ci0jZW5kaWYKICAgICAgICAg
ICAgIG1fZGF0YS0+cCgpLT5kcmF3UGl4bWFwKGRzdFJlY3QsIHBpeG1hcCk7CiAKICAgICAgICAg
ICAgIDo6RGVsZXRlT2JqZWN0KGJpdG1hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCmluZGV4IDEwZmUxZmViNmU4N2Y0ZjZhNjgyYzJlZWM0
ZWUwN2M3ZWJhZmQwM2EuLjE2MzMwYTQwZmJiMTBiYzRmOWM5MjA4ZDEwZDZmNjllYzA0NmU3ODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3Bw
CkBAIC01Miw3ICs1Miw3IEBACiAKICNpbmNsdWRlIDxtYXRoLmg+CiAKLSNpZiBPUyhXSU5ET1dT
KSAmJiBIQVZFKFFUNSkKKyNpZiBPUyhXSU5ET1dTKQogUV9HVUlfRVhQT1JUIFFQaXhtYXAgcXRf
cGl4bWFwRnJvbVdpbkhCSVRNQVAoSEJJVE1BUCwgaW50IGhiaXRtYXBGb3JtYXQgPSAwKTsKICNl
bmRpZgogCkBAIC0yOTksMTEgKzI5OSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29s
aWRDb2xvcigpCiAjaWYgT1MoV0lORE9XUykKIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IEJpdG1h
cEltYWdlOjpjcmVhdGUoSEJJVE1BUCBoQml0bWFwKQogewotI2lmIEhBVkUoUVQ1KQogICAgIFFJ
bWFnZSogbmF0aXZlSW1hZ2UgPSBuZXcgUUltYWdlKHF0X3BpeG1hcEZyb21XaW5IQklUTUFQKGhC
aXRtYXApLnRvSW1hZ2UoKSk7Ci0jZWxzZQotICAgIFFJbWFnZSogbmF0aXZlSW1hZ2UgPSBuZXcg
UUltYWdlKFFQaXhtYXA6OmZyb21XaW5IQklUTUFQKGhCaXRtYXApLnRvSW1hZ2UoKSk7Ci0jZW5k
aWYKIAogICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKG5hdGl2ZUltYWdlKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZvbnRE
YXRhUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9u
dERhdGFRdC5jcHAKaW5kZXggNGMwMWYxZGFjYTg4YTBjZDU4YTI3NDJlOWFjNzk2OWJkMzAxOTE5
My4uNTc5MDg2NTZlZDUzYTc0ODNmZjEyMmRiY2YxNDIxYTk5NWIzOTAyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFR
dC5jcHAKQEAgLTE0OCwxMiArMTQ4LDYgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1J
bml0KCkKICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm0ud2lkdGgoUUxhdGluMUNoYXIoJyAnKSk7
CiAjZW5kaWYKIAotI2lmICFIQVZFKFFUNSkKLSAgICAvLyBRdCBzdWJ0cmFjdHMgMSBmcm9tIHRo
ZSBkZXNjZW50IHRvIGFjY291bnQgZm9yIHRoZSBiYXNlbGluZSwKLSAgICAvLyB3ZSBhZGQgaXQg
YmFjayBoZXJlIHRvIGdldCBjb3JyZWN0IG1ldHJpY3MgZm9yIFdlYktpdC4KLSAgICBkZXNjZW50
ICs9IDE7Ci0jZW5kaWYKLQogICAgIC8vIFRoZSBsaW5lIHNwYWNpbmcgc2hvdWxkIGFsd2F5cyBi
ZSA+PSAoYXNjZW50ICsgZGVzY2VudCksIGJ1dCB0aGlzCiAgICAgLy8gbWF5IGJlIGZhbHNlIGlu
IHNvbWUgY2FzZXMgZHVlIHRvIG1pc2JlaGF2aW5nIHBsYXRmb3JtIGxpYnJhcmllcy4KICAgICAv
LyBXb3JrYXJvdW5kIGZyb20gU2ltcGxlRm9udFBhbmdvLmNwcCBhbmQgU2ltcGxlRm9udEZyZWVU
eXBlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggNzc5M2Y3MGFkZWI0Nzc0ZTAwMWFmMjc5YTI2Yjc4
ZDNmYjcwOTcwYi4uM2Q5NDUyYjc2MGNkNDA1ZGU5ODFkNTQyMGZjNmZhZWYyZjAzMGIzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlci5oCkBAIC0yNCwxMSArMjQsOCBAQAogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5j
bHVkZSA8cWdsb2JhbC5oPgotCi0jaWYgZGVmaW5lZChRVF9PUEVOR0xfTElCKSB8fCBIQVZFKFFU
NSkKLSAgICAjaWYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikgJiYgIWRlZmluZWQoVEVYTUFQX09Q
RU5HTF9FU18yKQotICAgICAgICAjZGVmaW5lIFRFWE1BUF9PUEVOR0xfRVNfMgotICAgICNlbmRp
ZgorI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpICYmICFkZWZpbmVkKFRFWE1BUF9PUEVOR0xf
RVNfMikKKyAgICAjZGVmaW5lIFRFWE1BUF9PUEVOR0xfRVNfMgogI2VuZGlmCiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA2ODhlMjZmNGU4OWZmZjEzZGU1YjNkNTc5YzgyMGE5
MzVlZjkxNzJjLi5mNGRlZWMyM2Y5MzJjNjk1NGEzNWQ5NmRhM2FhMDI2ODE1Y2FmYTM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMzksMTEgKzM5LDcgQEAKIAogI2lmIFBMQVRGT1JNKFFU
KQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlUXQuaCIKLSNpZiBIQVZFKFFUNSkKICNpbmNsdWRlIDxR
T3BlbkdMQ29udGV4dD4KLSNlbHNlCi0jaW5jbHVkZSA8UUdMQ29udGV4dD4KLSNlbmRpZiAvLyBR
VF9WRVJTSU9OCiAjZWxpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbGlm
IE9TKE1BQ19PU19YKQpAQCAtNTcsMTkgKzUzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0
cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICBzdHJ1Y3QgU2hhcmVkR0xEYXRhIDogcHVi
bGljIFJlZkNvdW50ZWQ8U2hhcmVkR0xEYXRhPiB7CiAjaWYgUExBVEZPUk0oUVQpCi0jaWYgUVRf
VkVSU0lPTiA+PSAweDA1MDAwMAogICAgICAgICB0eXBlZGVmIFFPcGVuR0xDb250ZXh0KiBHTENv
bnRleHQ7CiAgICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4dCgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRl
eHQoKTsKICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgdHlwZWRlZiBjb25zdCBRR0xDb250ZXh0
KiBHTENvbnRleHQ7Ci0gICAgICAgIHN0YXRpYyBHTENvbnRleHQgZ2V0Q3VycmVudEdMQ29udGV4
dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBRR0xDb250ZXh0OjpjdXJyZW50Q29u
dGV4dCgpOwotICAgICAgICB9Ci0jZW5kaWYKICNlbGlmIE9TKFdJTkRPV1MpCiAgICAgICAgIHR5
cGVkZWYgSEdMUkMgR0xDb250ZXh0OwogICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJl
bnRHTENvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRGV2
aWNlTW90aW9uUHJvdmlkZXJRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRGV2aWNl
TW90aW9uUHJvdmlkZXJRdC5oCmluZGV4IDIxZDk3ODY3NGE5Mzc3M2FiNTJiNTM4NGNlMjZiMmVj
OGU1Y2Q0Y2EuLjI0MzYwMDM4MzUyODlhMGJhMmEwZDA4ZDk3MzkwODBhMmViMzQ4MzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RldmljZU1vdGlvblByb3ZpZGVyUXQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EZXZpY2VNb3Rpb25Qcm92aWRlclF0
LmgKQEAgLTI1LDEyICsyNSw2IEBACiAjaW5jbHVkZSA8UUFjY2VsZXJvbWV0ZXJGaWx0ZXI+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi0jaWYgIUhBVkUoUVQ1KQotdXNpbmcgUVRNX05BTUVT
UEFDRTo6UUFjY2VsZXJvbWV0ZXI7Ci11c2luZyBRVE1fTkFNRVNQQUNFOjpRQWNjZWxlcm9tZXRl
ckZpbHRlcjsKLXVzaW5nIFFUTV9OQU1FU1BBQ0U6OlFBY2NlbGVyb21ldGVyUmVhZGluZzsKLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERldmljZU1vdGlvbkNvbnRyb2xs
ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EZXZpY2VPcmllbnRh
dGlvblByb3ZpZGVyUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RldmljZU9yaWVu
dGF0aW9uUHJvdmlkZXJRdC5oCmluZGV4IGM0YTIyZjc0ZTJkMThlNjdkMTU1NTFlODM3MzdkYTZh
OTk1NzI5YTEuLjM1MDI5ODQ0OTk2Zjk1ZjZlZWY0ODNiOWZlNDUyN2Q3MzUwZTliYTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RldmljZU9yaWVudGF0aW9uUHJvdmlk
ZXJRdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RldmljZU9yaWVudGF0aW9u
UHJvdmlkZXJRdC5oCkBAIC0yNSwxMiArMjUsNiBAQAogI2luY2x1ZGUgPFFSb3RhdGlvbkZpbHRl
cj4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNpZiAhSEFWRShRVDUpCi11c2luZyBRVE1f
TkFNRVNQQUNFOjpRUm90YXRpb25GaWx0ZXI7Ci11c2luZyBRVE1fTkFNRVNQQUNFOjpRUm90YXRp
b25SZWFkaW5nOwotdXNpbmcgUVRNX05BTUVTUEFDRTo6UVJvdGF0aW9uU2Vuc29yOwotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGV2aWNlT3JpZW50YXRpb25Qcm92aWRl
clF0IDogcHVibGljIFFSb3RhdGlvbkZpbHRlciB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9LVVJMUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvS1VS
TFF0LmNwcAppbmRleCA4NmU0YWI3YjYyY2YyYTBjZTZiYmIwMTQyMjA4NzdiYWE5ODdkZDJlLi4z
ZGNhNGVlZTBiZGRlYjI0Y2Y4OTMxMTE2ZmZmMDA4MjQ0YTZhODZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9LVVJMUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L0tVUkxRdC5jcHAKQEAgLTM0LDE1ICszNCw3IEBAIEtVUkw6OktVUkwoY29uc3Qg
UVVybCYgdXJsKQogCiBLVVJMOjpvcGVyYXRvciBRVXJsKCkgY29uc3QKIHsKLSNpZiAhSEFWRShR
VDUpCi0gICAgUVN0cmluZyBzdHIgPSBRU3RyaW5nOjpmcm9tUmF3RGF0YShyZWludGVycHJldF9j
YXN0PGNvbnN0IFFDaGFyKj4obV9zdHJpbmcuY2hhcmFjdGVycygpKSwgbV9zdHJpbmcubGVuZ3Ro
KCkpOwotICAgIFFCeXRlQXJyYXkgYmEgPSBzdHIudG9VdGY4KCk7Ci0KLSAgICBRVXJsIHVybCA9
IFFVcmw6OmZyb21FbmNvZGVkKGJhKTsKLSAgICByZXR1cm4gdXJsOwotI2Vsc2UKICAgICByZXR1
cm4gUVVybChtX3N0cmluZyk7Ci0jZW5kaWYKIH0KIAogU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1Q
YXRoKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRm
b3JtU2NyZWVuUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3Jl
ZW5RdC5jcHAKaW5kZXggZjMwNDcyYTBiOTRmNTQxNWRmNDQ4MDA5MGE5ZmI5YmRkMWMxMmQzOS4u
ZmEyZTgzN2VhZjhkZDM3MjViOWYxZWI3YjRmN2QxNTZkZTlkMzA1MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAKQEAgLTM4LDEzICszOCw4
IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKICNp
bmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgotI2lmIEhBVkUoUVQ1KQogI2luY2x1ZGUgPFFHdWlB
cHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRU2NyZWVuPgotI2Vsc2UKLSNpbmNsdWRlIDxRQXBwbGlj
YXRpb24+Ci0jaW5jbHVkZSA8UURlc2t0b3BXaWRnZXQ+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC03MSwzMSArNjYsMTQgQEAgc3RhdGljIGludCBzY3JlZW5OdW1iZXIoV2lk
Z2V0KiB3KQogCiBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3KQogewotI2lmIEhBVkUoUVQ1KQog
ICAgIHJldHVybiBRR3VpQXBwbGljYXRpb246OnNjcmVlbnMoKS52YWx1ZShzY3JlZW5OdW1iZXIo
dykpLT5kZXB0aCgpOwotI2Vsc2UKLSAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCkt
PnNjcmVlbihzY3JlZW5OdW1iZXIodykpLT5kZXB0aCgpOwotI2VuZGlmCiB9CiAKIGludCBzY3Jl
ZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqIHcpCiB7Ci0jaWYgSEFWRShRVDUpCiAgICAgaW50
IGRlcHRoID0gUUd1aUFwcGxpY2F0aW9uOjpwcmltYXJ5U2NyZWVuKCktPmRlcHRoKCk7CiAgICAg
Ly8gRklYTUU6IFVzZSB3aWRnZXQncyBzY3JlZW4KICAgICBRX1VOVVNFRCh3KTsKLSNlbHNlCi0g
ICAgaW50IGRlcHRoID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbigwKS0+ZGVwdGgo
KTsKLSAgICBpZiAodykgewotICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0gdy0+cm9v
dCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotCi0gICAgICAgIGlmIChj
bGllbnQpIHsKLSAgICAgICAgICAgIFFXaWRnZXQqIHZpZXcgPSBjbGllbnQtPm93bmVyV2lkZ2V0
KCk7Ci0gICAgICAgICAgICBpZiAodmlldykKLSAgICAgICAgICAgICAgICBkZXB0aCA9IHZpZXct
PmRlcHRoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKICAgICAvLyBBbiBpbnRlcmZhY2Ug
dG8gZXN0YWJsaXNoIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJpdHMgcGVyIGNvbG9yCiAgICAgLy8g
ZG9lc24ndCBleGlzdCBpbiBRdCwgb3IgcHJvYmFibHkgYXQgYWxsLCBzbyB1c2UgY29tbW9uLXNl
bnNlCiAgICAgLy8gdmFsdWVzIGZvciBlYWNoIHNjcmVlbiBkZXB0aCBhbmQgYXNzdW1lIFJHQi9S
R0JBIHdoZXJlIGFwcHJvcHJpYXRlLgpAQCAtMTE0LDMyICs5MiwyMCBAQCBpbnQgc2NyZWVuRGVw
dGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3KQogCiBib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRn
ZXQqIHcpCiB7Ci0jaWYgSEFWRShRVDUpCiAgICAgUV9VTlVTRUQodyk7CiAgICAgLy8gRklYTUU6
IEluIFF0IDUgY29sb3JDb3VudCgpIGlzbid0IGV2ZW4gaW1wbGVtZW50ZWQgYmV5b25kIHJldHVy
bmluZyAyNTYgOikKICAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBRQXBwbGlj
YXRpb246OmRlc2t0b3AoKS0+c2NyZWVuKHNjcmVlbk51bWJlcih3KSktPmNvbG9yQ291bnQoKSA9
PSAyOwotI2VuZGlmCiB9CiAKIEZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQog
ewotI2lmIEhBVkUoUVQ1KQogICAgIFFSZWN0IHIgPSBRR3VpQXBwbGljYXRpb246OnNjcmVlbnMo
KS52YWx1ZShzY3JlZW5OdW1iZXIod2lkZ2V0KSktPmdlb21ldHJ5KCk7Ci0jZWxzZQotICAgIFFS
ZWN0IHIgPSBRQXBwbGljYXRpb246OmRlc2t0b3AoKS0+c2NyZWVuR2VvbWV0cnkoc2NyZWVuTnVt
YmVyKHdpZGdldCkpOwotI2VuZGlmCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyLngoKSwgci55KCks
IHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiB9CiAKIEZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVS
ZWN0KFdpZGdldCogd2lkZ2V0KQogewotI2lmIEhBVkUoUVQ1KQogICAgIFFSZWN0IHIgPSBRR3Vp
QXBwbGljYXRpb246OnNjcmVlbnMoKS52YWx1ZShzY3JlZW5OdW1iZXIod2lkZ2V0KSktPmF2YWls
YWJsZUdlb21ldHJ5KCk7Ci0jZWxzZQotICAgIFFSZWN0IHIgPSBRQXBwbGljYXRpb246OmRlc2t0
b3AoKS0+YXZhaWxhYmxlR2VvbWV0cnkoc2NyZWVuTnVtYmVyKHdpZGdldCkpOwotI2VuZGlmCiAg
ICAgcmV0dXJuIEZsb2F0UmVjdChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCmluZGV4
IDA3ODk5OWRjMjQ3Y2Q4MWUxZGJhMmNhYTk5NzYxNzQ5MTQ5MDI4NmEuLmFkZWY3ZmZkNGY2NGEx
ZWQzNmEzYjQyYWVjMDViMDBiYTdiZTk1ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUVdlYlBhZ2VDbGllbnQuaApAQCAtMTEwLDkgKzExMCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRChQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQbGF0Zm9ybUdyYXBoaWNzU3VyZmFjZTNEKikgPSAwOwogI2VuZGlmCi0jaWYgSEFWRShR
VDUpCiAgICAgdmlydHVhbCBRV2luZG93KiBvd25lcldpbmRvdygpIGNvbnN0OwotI2VuZGlmCiAK
IHByb3RlY3RlZDoKICNpZm5kZWYgUVRfTk9fQ1VSU09SCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCmluZGV4IGI3NDRmZTBiYWFjZTRiODE5ZTM2NzZlNjY0
MGNmNmFlODEwYzdiOTcuLjJhY2EyZGU0MWIxYTYwOGZkYmQyY2Q2N2I1MGEwYjY2MDYyY2M5NmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCkBAIC02
Niw5ICs2Niw3IEBACiAjaW5jbHVkZSA8UUZpbGU+CiAjaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgog
Ci0jaWYgUVRfVkVSU0lPTiA+PSAweDA1MDAwMAogI2luY2x1ZGUgPFFTdHlsZUhpbnRzPgotI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9xdC9UZXh0QnJlYWtJdGVyYXRvclF0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvcXQvVGV4dEJyZWFrSXRlcmF0b3JRdC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDBkOWQ0OGRiZTUxYTI5MWY4OGFiNDEyYmNhMTZhNmIzOTE3YTliY2Iu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9xdC9UZXh0QnJlYWtJdGVyYXRvclF0LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IExhcnMgS25v
bGwgPGxhcnNAdHJvbGx0ZWNoLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXh0QnJlYWtJdGVyYXRvci5oIgotCi0jaW5jbHVkZSA8UXRDb3JlL3F0ZXh0Ym91bmRhcnlm
aW5kZXIuaD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8cWRlYnVnLmg+Ci0jaW5j
bHVkZSA8d3RmL0F0b21pY3MuaD4KLQotLy8gI2RlZmluZSBERUJVR19URVhUX0lURVJBVE9SUwot
I2lmZGVmIERFQlVHX1RFWFRfSVRFUkFUT1JTCi0jZGVmaW5lIERFQlVHIHFEZWJ1ZwotI2Vsc2UK
LSNkZWZpbmUgREVCVUcgaWYgKDEpIHt9IGVsc2UgcURlYnVnCi0jZW5kaWYKLQotdXNpbmcgbmFt
ZXNwYWNlIFdURjsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotICAgIGNsYXNzIFRleHRCcmVha0l0ZXJhdG9yIDogcHVibGljIFFUZXh0Qm91bmRhcnlGaW5k
ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IoUVRleHRCb3VuZGFy
eUZpbmRlcjo6Qm91bmRhcnlUeXBlIHR5cGUsIGNvbnN0IFFTdHJpbmcmIHN0cmluZykKLSAgICAg
ICAgICAgIDogUVRleHRCb3VuZGFyeUZpbmRlcih0eXBlLCBzdHJpbmcpCi0gICAgICAgIHsgfQot
ICAgICAgICBUZXh0QnJlYWtJdGVyYXRvcigpCi0gICAgICAgICAgICA6IFFUZXh0Qm91bmRhcnlG
aW5kZXIoKQotICAgICAgICB7IH0KLSAgICB9OwotCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIHNl
dFVwSXRlcmF0b3IoVGV4dEJyZWFrSXRlcmF0b3ImIGl0ZXJhdG9yLCBRVGV4dEJvdW5kYXJ5Rmlu
ZGVyOjpCb3VuZGFyeVR5cGUgdHlwZSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgpCi0gICAgewotICAgICAgICBpZiAoIWNoYXJhY3RlcnMgfHwgIWxlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotCi0gICAgICAgIGlmIChpdGVyYXRvci5pc1ZhbGlkKCkgJiYgdHlwZSA9
PSBpdGVyYXRvci50eXBlKCkgJiYgaXRlcmF0b3Iuc3RyaW5nKCkgPT0gUVN0cmluZzo6ZnJvbVJh
d0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgp
KSB7Ci0gICAgICAgICAgICBpdGVyYXRvci50b1N0YXJ0KCk7Ci0gICAgICAgICAgICByZXR1cm4g
Jml0ZXJhdG9yOwotICAgICAgICB9Ci0KLSAgICAgICAgaXRlcmF0b3IgPSBUZXh0QnJlYWtJdGVy
YXRvcih0eXBlLCBRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihjaGFyYWN0
ZXJzKSwgbGVuZ3RoKSk7Ci0gICAgICAgIHJldHVybiAmaXRlcmF0b3I7Ci0gICAgfQotCi0gICAg
VGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcs
IGludCBsZW5ndGgpCi0gICAgewotICAgICAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3Igc3Rh
dGljV29yZEJyZWFrSXRlcmF0b3I7Ci0gICAgICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKHN0YXRp
Y1dvcmRCcmVha0l0ZXJhdG9yLCBRVGV4dEJvdW5kYXJ5RmluZGVyOjpXb3JkLCBzdHJpbmcsIGxl
bmd0aCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBub25TaGFyZWRD
aGFyYWN0ZXJCcmVha0l0ZXJhdG9yOwotCi0gICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVy
YXRvcjo6Tm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogYnVmZmVy
LCBpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgbV9pdGVyYXRvciA9IG5vblNoYXJlZENoYXJh
Y3RlckJyZWFrSXRlcmF0b3I7Ci0gICAgICAgIGJvb2wgY3JlYXRlZEl0ZXJhdG9yID0gbV9pdGVy
YXRvciAmJiB3ZWFrQ29tcGFyZUFuZFN3YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZub25T
aGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKSwgbV9pdGVyYXRvciwgMCk7Ci0gICAgICAgIGlm
ICghY3JlYXRlZEl0ZXJhdG9yKQotICAgICAgICAgICAgbV9pdGVyYXRvciA9IG5ldyBUZXh0QnJl
YWtJdGVyYXRvcigpOwotICAgICAgICBpZiAoIXNldFVwSXRlcmF0b3IoKm1faXRlcmF0b3IsIFFU
ZXh0Qm91bmRhcnlGaW5kZXI6OkdyYXBoZW1lLCBidWZmZXIsIGxlbmd0aCkpIHsKLSAgICAgICAg
ICAgIGRlbGV0ZSBtX2l0ZXJhdG9yOwotICAgICAgICAgICAgbV9pdGVyYXRvciA9IDA7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBOb25TaGFyZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOjp+Tm9u
U2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcigpCi0gICAgewotICAgICAgICBpZiAoIXdlYWtD
b21wYXJlQW5kU3dhcChyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm5vblNoYXJlZENoYXJhY3Rl
ckJyZWFrSXRlcmF0b3IpLCAwLCBtX2l0ZXJhdG9yKSkKLSAgICAgICAgICAgIGRlbGV0ZSBtX2l0
ZXJhdG9yOwotICAgIH0KLQotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBjdXJzb3JNb3ZlbWVudEl0
ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCi0gICAgewotICAgICAgICBz
dGF0aWMgVGV4dEJyZWFrSXRlcmF0b3Igc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvcjsKLSAg
ICAgICAgcmV0dXJuIHNldFVwSXRlcmF0b3Ioc3RhdGljQ3Vyc29yTW92ZW1lbnRJdGVyYXRvciwg
UVRleHRCb3VuZGFyeUZpbmRlcjo6R3JhcGhlbWUsIHN0cmluZywgbGVuZ3RoKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yOwot
Ci0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGFjcXVpcmVMaW5lQnJlYWtJdGVyYXRvcihjb25zdCBV
Q2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoLCBjb25zdCBBdG9taWNTdHJpbmcmKQotICAgIHsKLSAg
ICAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGxpbmVCcmVha0l0ZXJhdG9yID0gMDsKLSAgICAgICAg
aWYgKHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBzZXRVcEl0ZXJhdG9y
KCpzdGF0aWNMaW5lQnJlYWtJdGVyYXRvciwgUVRleHRCb3VuZGFyeUZpbmRlcjo6TGluZSwgc3Ry
aW5nLCBsZW5ndGgpOwotICAgICAgICAgICAgc3RkOjpzd2FwKHN0YXRpY0xpbmVCcmVha0l0ZXJh
dG9yLCBsaW5lQnJlYWtJdGVyYXRvcik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWxpbmVC
cmVha0l0ZXJhdG9yICYmIHN0cmluZyAmJiBsZW5ndGgpCi0gICAgICAgICAgICBsaW5lQnJlYWtJ
dGVyYXRvciA9IG5ldyBUZXh0QnJlYWtJdGVyYXRvcihRVGV4dEJvdW5kYXJ5RmluZGVyOjpMaW5l
LCBRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihzdHJpbmcpLCBsZW5ndGgp
KTsKLQotICAgICAgICByZXR1cm4gbGluZUJyZWFrSXRlcmF0b3I7Ci0gICAgfQotCi0gICAgdm9p
ZCByZWxlYXNlTGluZUJyZWFrSXRlcmF0b3IoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJhdG9yKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGl0ZXJhdG9yKTsKLQotICAgICAgICBpZiAoIXN0YXRpY0xp
bmVCcmVha0l0ZXJhdG9yKQotICAgICAgICAgICAgc3RhdGljTGluZUJyZWFrSXRlcmF0b3IgPSBp
dGVyYXRvcjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVsZXRlIGl0ZXJhdG9yOwotICAg
IH0KLQotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3Qg
VUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBUZXh0QnJl
YWtJdGVyYXRvciBzdGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3I7Ci0gICAgICAgIHJldHVybiBz
ZXRVcEl0ZXJhdG9yKHN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvciwgUVRleHRCb3VuZGFyeUZp
bmRlcjo6U2VudGVuY2UsIHN0cmluZywgbGVuZ3RoKTsKLQotICAgIH0KLQotICAgIGludCB0ZXh0
QnJlYWtGaXJzdChUZXh0QnJlYWtJdGVyYXRvciogYmkpCi0gICAgewotICAgICAgICBiaS0+dG9T
dGFydCgpOwotICAgICAgICBERUJVRygpIDw8ICJ0ZXh0QnJlYWtGaXJzdCIgPDwgYmktPnBvc2l0
aW9uKCk7Ci0gICAgICAgIHJldHVybiBiaS0+cG9zaXRpb24oKTsKLSAgICB9Ci0KLSAgICBpbnQg
dGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRvciogYmkpCi0gICAgewotICAgICAgICBpbnQg
cG9zID0gYmktPnRvTmV4dEJvdW5kYXJ5KCk7Ci0gICAgICAgIERFQlVHKCkgPDwgInRleHRCcmVh
a05leHQiIDw8IHBvczsKLSAgICAgICAgcmV0dXJuIHBvczsKLSAgICB9Ci0KLSAgICBpbnQgdGV4
dEJyZWFrUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKLSAgICB7Ci0g
ICAgICAgIGJpLT5zZXRQb3NpdGlvbihwb3MpOwotICAgICAgICBpbnQgbmV3cG9zID0gYmktPnRv
UHJldmlvdXNCb3VuZGFyeSgpOwotICAgICAgICBERUJVRygpIDw8ICJ0ZXh0QnJlYWtQcmVjZWRp
bmciIDw8IHBvcyA8PCBuZXdwb3M7Ci0gICAgICAgIHJldHVybiBuZXdwb3M7Ci0gICAgfQotCi0g
ICAgaW50IHRleHRCcmVha0ZvbGxvd2luZyhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3Mp
Ci0gICAgewotICAgICAgICBiaS0+c2V0UG9zaXRpb24ocG9zKTsKLSAgICAgICAgaW50IG5ld3Bv
cyA9IGJpLT50b05leHRCb3VuZGFyeSgpOwotICAgICAgICBERUJVRygpIDw8ICJ0ZXh0QnJlYWtG
b2xsb3dpbmciIDw8IHBvcyA8PCBuZXdwb3M7Ci0gICAgICAgIHJldHVybiBuZXdwb3M7Ci0gICAg
fQotCi0gICAgaW50IHRleHRCcmVha0N1cnJlbnQoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGJpLT5wb3NpdGlvbigpOwotICAgIH0KLQotICAgIGJvb2wgaXNU
ZXh0QnJlYWsoVGV4dEJyZWFrSXRlcmF0b3IqLCBpbnQpCi0gICAgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIGlzV29yZFRleHRCcmVhayhUZXh0QnJlYWtJdGVyYXRv
ciopCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5Db250YWluZXJRdC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDg0ODYxODAyNjVlN2MwODRjODA1Zjc2OWI5ZTE4NjlkMGI2OGYwYTku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5Db250YWluZXJRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxNTAgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlBsdWdpbkNvbnRhaW5lclF0LmgiCi0KLSNpbmNsdWRlICJGb2N1c0NvbnRyb2xs
ZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1
ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVk
ZSA8UUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFYMTFJbmZvPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotUGx1Z2luQ2xpZW50V3JhcHBlcjo6UGx1Z2luQ2xpZW50V3JhcHBlcihRV2lk
Z2V0KiBwYXJlbnQsIFdJZCBjbGllbnQpCi0gICAgOiBRV2lkZ2V0KDAsIFF0OjpQb3B1cCkKLXsK
LSAgICAvLyBjcmVhdGUgYSBRV2lkZ2V0IHRoYXQgYWRvcHRzIHRoZSBwbHVnaW4gd2luZG93IGlk
LCBkbyBub3QgZ2l2ZSBpdAotICAgIC8vIGEgcGFyZW50IHNvIHRoYXQgd2UgZG9uJ3QgZW5kIHVw
IGhhbmRsaW5nIGV2ZW50cyBzdXBwb3NlZCB0byBiZQotICAgIC8vIGhhbmRsZWQgYnkgdGhlIFFY
MTFFbWJlZENvbnRhaW5lci4KLQotICAgIC8vIHdpdGhvdXQgdGhlIHBhcmVudCB0aGlzIHdpbGwg
YmUgY29uc2lkZXJlZCBhIHRvcGxldmVsIHdpZGdldCwKLSAgICAvLyBhbmQgdGh1cyBtYWtlIFF0
IG5vdCBxdWl0IHRoZSBldmVudCBsb29wIGFmdGVyIHRoZSBsYXN0IHdpbmRvdwotICAgIC8vIGhh
cyBiZWVuIGNsb3NlZC4gSW4gb3JkZXIgdG8gd29yayBhcm91bmQgdGhpcywgd2Ugc2V0IHRoZSB3
aW5kb3cKLSAgICAvLyB0eXBlIHRvIFF0OjpQb3B1cC4KLQotICAgIGNyZWF0ZShjbGllbnQsIGZh
bHNlLCB0cnVlKTsKLSAgICBtX3BhcmVudCA9IHBhcmVudDsKLX0KLQotUGx1Z2luQ2xpZW50V3Jh
cHBlcjo6flBsdWdpbkNsaWVudFdyYXBwZXIoKQotewotICAgIGRlc3Ryb3koZmFsc2UsIGZhbHNl
KTsKLX0KLQotYm9vbCBQbHVnaW5DbGllbnRXcmFwcGVyOjp4MTFFdmVudChYRXZlbnQqIGV2ZW50
KQotewotICAgIC8vIG1vZGlmeSB0aGUgZXZlbnQgd2luZG93IGlkIGFuZCBpbnNlcnQgaXQgaW50
byB0aGUgUXQgZXZlbnQgc3lzdGVtLgotICAgIGV2ZW50LT54YW55LndpbmRvdyA9IG1fcGFyZW50
LT5lZmZlY3RpdmVXaW5JZCgpOwotICAgIHN0YXRpY19jYXN0PFFBcHBsaWNhdGlvbio+KFFBcHBs
aWNhdGlvbjo6aW5zdGFuY2UoKSktPngxMVByb2Nlc3NFdmVudChldmVudCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLVBsdWdpbkNvbnRhaW5lclF0OjpQbHVnaW5Db250YWluZXJRdChQbHVnaW5W
aWV3KiB2aWV3LCBRV2lkZ2V0KiBwYXJlbnQpCi0gICAgOiBRWDExRW1iZWRDb250YWluZXIocGFy
ZW50KQotICAgICwgbV9wbHVnaW5WaWV3KHZpZXcpCi0gICAgLCBtX2NsaWVudFdyYXBwZXIoMCkK
LXsKLSAgICBjb25uZWN0KHRoaXMsIFNJR05BTChjbGllbnRDbG9zZWQoKSksIHRoaXMsIFNMT1Qo
b25fY2xpZW50Q2xvc2VkKCkpKTsKLSAgICBjb25uZWN0KHRoaXMsIFNJR05BTChjbGllbnRJc0Vt
YmVkZGVkKCkpLCB0aGlzLCBTTE9UKG9uX2NsaWVudElzRW1iZWRkZWQoKSkpOwotfQotCi1QbHVn
aW5Db250YWluZXJRdDo6flBsdWdpbkNvbnRhaW5lclF0KCkKLXsKLSAgICBkZWxldGUgbV9jbGll
bnRXcmFwcGVyOwotICAgIG1fcGx1Z2luVmlldy0+c2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQoMCk7
Ci19Ci0KLXZvaWQgUGx1Z2luQ29udGFpbmVyUXQ6Om9uX2NsaWVudENsb3NlZCgpCi17Ci0gICAg
ZGVsZXRlIG1fY2xpZW50V3JhcHBlcjsKLSAgICBtX2NsaWVudFdyYXBwZXIgPSAwOwotfQotCi12
b2lkIFBsdWdpbkNvbnRhaW5lclF0Ojpvbl9jbGllbnRJc0VtYmVkZGVkKCkKLXsKLSAgICBkZWxl
dGUgbV9jbGllbnRXcmFwcGVyOwotICAgIG1fY2xpZW50V3JhcHBlciA9IDA7Ci0KLSAgICAvLyBP
bmx5IGNyZWF0ZSBhIFFXaWRnZXQgd3JhcHBlciBmb3IgdGhlIHBsdWdpbiBpbiB0aGUgY2FzZSBp
dCBpc24ndCBpbiB0aGUKLSAgICAvLyBRdCB3aW5kb3cgbWFwcGVyLCBhbmQgdGh1cyByZWNlaXZp
bmcgZXZlbnRzIGZyb20gdGhlIFF0IGV2ZW50IHN5c3RlbS4KLSAgICAvLyBUaGlzIHdheSB0aGUg
UGx1Z2luQ2xpZW50V3JhcHBlciByZWNlaXZlcyB0aGUgc2Nyb2xsIGV2ZW50cyBhbmQgcGFzc2Vz
Ci0gICAgLy8gdGhlbSB0byB0aGUgcGFyZW50LiBOT1RJQ0U6IE5hdGl2ZSBRdCBiYXNlZCBwbHVn
aW5zIHJ1bm5pbmcgaW4gcHJvY2VzcywKLSAgICAvLyB3aWxsIGFscmVhZHkgYmUgaW4gdGhlIHdp
bmRvdyBtYXBwZXIsIGFuZCB0aHVzIGNyZWF0aW5nIGEgd3JhcHBlciwgc3RvcHMKLSAgICAvLyB0
aGVtIGZyb20gZ2V0dGluZyBldmVudHMgZnJvbSBRdCwgYXMgdGhleSBhcmUgcmVkaXJlY3RlZCB0
byB0aGUgd3JhcHBlci4KLSAgICBpZiAoIVFXaWRnZXQ6OmZpbmQoY2xpZW50V2luSWQoKSkpCi0g
ICAgICAgIG1fY2xpZW50V3JhcHBlciA9IG5ldyBQbHVnaW5DbGllbnRXcmFwcGVyKHRoaXMsIGNs
aWVudFdpbklkKCkpOwotfQotCi12b2lkIFBsdWdpbkNvbnRhaW5lclF0OjpyZWRpcmVjdFdoZWVs
RXZlbnRzVG9QYXJlbnQoYm9vbCBlbmFibGUpCi17Ci0gICAgLy8gc3RlYWwgd2hlZWwgZXZlbnRz
IGZyb20gdGhlIHBsdWdpbiBhcyB3ZSB3YW50IHRvIGhhbmRsZSBpdC4gV2hlbiBkb2luZyB0aGlz
Ci0gICAgLy8gYWxsIGJ1dHRvbiA0LCA1LCA2LCBhbmQgNywgQnV0dG9uUHJlc3MgYW5kIEJ1dHRv
blJlbGVhc2UgZXZlbnRzIGFyZSBwYXNzZWQKLSAgICAvLyB0byB0aGUgeDExRXZlbnQgaGFuZGxl
ciBvZiB0aGUgUGx1Z2luQ2xpZW50V3JhcHBlciwgd2hpY2ggdGhlbiBjaGFuZ2VzIHRoZQotICAg
IC8vIHdpbmRvdyBpZCBvZiB0aGUgZXZlbnQgdG8gdGhlIHBhcmVudCBvZiBQbHVnaW5Db250YWlu
ZXIgYW5kIHB1dHMgdGhlIGV2ZW50Ci0gICAgLy8gYmFjayBpbnRvIHRoZSBRdCBldmVudCBsb29w
LCBzbyB0aGF0IHdlIHdpbGwgYWN0dWFsbHkgc2Nyb2xsIHRoZSBwYXJlbnQKLSAgICAvLyBmcmFt
ZS4KLSAgICBmb3IgKGludCBidXR0b25ObyA9IDQ7IGJ1dHRvbk5vIDwgODsgYnV0dG9uTm8rKykg
ewotICAgICAgICBpZiAoZW5hYmxlKQotICAgICAgICAgICAgWEdyYWJCdXR0b24oeDExSW5mbygp
LmRpc3BsYXkoKSwgYnV0dG9uTm8sIEFueU1vZGlmaWVyLCBjbGllbnRXaW5JZCgpLAotICAgICAg
ICAgICAgICAgIGZhbHNlLCBCdXR0b25QcmVzc01hc2ssIEdyYWJNb2RlQXN5bmMsIEdyYWJNb2Rl
QXN5bmMsIDBMLCAwTCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFhVbmdyYWJCdXR0b24o
eDExSW5mbygpLmRpc3BsYXkoKSwgYnV0dG9uTm8sIEFueU1vZGlmaWVyLCBjbGllbnRXaW5JZCgp
KTsKLSAgICB9Ci19Ci0KLWJvb2wgUGx1Z2luQ29udGFpbmVyUXQ6OngxMUV2ZW50KFhFdmVudCog
ZXZlbnQpCi17Ci0gICAgc3dpdGNoIChldmVudC0+dHlwZSkgewotICAgIGNhc2UgRW50ZXJOb3Rp
Znk6Ci0gICAgICAgIC8vIGlmIHRoZSBwbHVnaW4gd2luZG93IGRvZXNuJ3QgaGF2ZSBmb2N1cyB3
ZSBkbyBub3Qgd2FudCB0byBzZW5kIHdoZWVsCi0gICAgICAgIC8vIGV2ZW50cyB0byBpdCwgYnV0
IHRvIHRoZSBwYXJlbnQgZnJhbWUsIHNvIGxldCdzIHJlZGlyZWN0IGhlcmUuCi0gICAgICAgIHJl
ZGlyZWN0V2hlZWxFdmVudHNUb1BhcmVudCghaGFzRm9jdXMoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgTGVhdmVOb3RpZnk6Ci0gICAgICAgIC8vIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHVu
Z3JhYiB3aGVlbCBldmVudHMgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZQotICAgICAgICAvLyBw
bHVnaW4gd2luZG93LgotICAgICAgICByZWRpcmVjdFdoZWVsRXZlbnRzVG9QYXJlbnQoZmFsc2Up
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gUVgxMUVtYmVkQ29udGFpbmVy
Ojp4MTFFdmVudChldmVudCk7Ci19Ci0KLXZvaWQgUGx1Z2luQ29udGFpbmVyUXQ6OmZvY3VzSW5F
dmVudChRRm9jdXNFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gd2UgZ290IGZvY3VzLCBzdG9wIHJl
ZGlyZWN0aW5nIHRoZSB3aGVlbCBldmVudHMKLSAgICByZWRpcmVjdFdoZWVsRXZlbnRzVG9QYXJl
bnQoZmFsc2UpOwotCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BsdWdpblZpZXctPnBhcmVudEZy
YW1lKCktPnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2
ZSh0cnVlKTsKLQotICAgIG1fcGx1Z2luVmlldy0+Zm9jdXNQbHVnaW5FbGVtZW50KCk7Ci19Ci0K
LXZvaWQgUGx1Z2luQ29udGFpbmVyUXQ6OmZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKQotewot
ICAgIGlmIChQYWdlKiBwYWdlID0gbV9wbHVnaW5WaWV3LT5wYXJlbnRGcmFtZSgpLT5wYWdlKCkp
Ci0gICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUoZmFsc2UpOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5Db250YWluZXJRdC5o
IGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5Db250YWluZXJRdC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTI4OTZkM2Y2OTNhYWNiMjc4OGI3ZGJjMzBjNDUzOGUw
NDNjOTY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDYzICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0jaWZuZGVmIFBsdWdpbkNvbnRh
aW5lclF0X2gKLSNkZWZpbmUgUGx1Z2luQ29udGFpbmVyUXRfaAotCi0jaW5jbHVkZSA8UVgxMUVt
YmVkQ29udGFpbmVyPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBQbHVnaW5W
aWV3OwotCi0gICAgY2xhc3MgUGx1Z2luQ29udGFpbmVyUXQgOiBwdWJsaWMgUVgxMUVtYmVkQ29u
dGFpbmVyCi0gICAgewotICAgICAgICBRX09CSkVDVAotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1
Z2luQ29udGFpbmVyUXQoUGx1Z2luVmlldyosIFFXaWRnZXQqIHBhcmVudCk7Ci0gICAgICAgIH5Q
bHVnaW5Db250YWluZXJRdCgpOwotCi0gICAgICAgIHZvaWQgcmVkaXJlY3RXaGVlbEV2ZW50c1Rv
UGFyZW50KGJvb2wgZW5hYmxlID0gdHJ1ZSk7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCB4MTFFdmVudChYRXZlbnQqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGZvY3Vz
SW5FdmVudChRRm9jdXNFdmVudCopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVu
dChRRm9jdXNFdmVudCopOwotCi0gICAgcHVibGljIHNsb3RzOgotICAgICAgICB2b2lkIG9uX2Ns
aWVudENsb3NlZCgpOwotICAgICAgICB2b2lkIG9uX2NsaWVudElzRW1iZWRkZWQoKTsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIFBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsKLSAgICAgICAgUVdp
ZGdldCogbV9jbGllbnRXcmFwcGVyOwotICAgIH07Ci0KLSAgICBjbGFzcyBQbHVnaW5DbGllbnRX
cmFwcGVyIDogcHVibGljIFFXaWRnZXQKLSAgICB7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVn
aW5DbGllbnRXcmFwcGVyKFFXaWRnZXQqIHBhcmVudCwgV0lkIGNsaWVudCk7Ci0gICAgICAgIH5Q
bHVnaW5DbGllbnRXcmFwcGVyKCk7Ci0gICAgICAgIGJvb2wgeDExRXZlbnQoWEV2ZW50Kik7Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBRV2lkZ2V0KiBtX3BhcmVudDsKLSAgICB9OwotfQotCi0j
ZW5kaWYgLy8gUGx1Z2luQ29udGFpbmVyUXRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9x
dC9QbHVnaW5QYWNrYWdlUXQuY3BwCmluZGV4IGZiYWM1MjlhYzVlYjBmMGU2MjU1NDk3ZTlhYjA2
OGFjNTlkY2E3MzEuLmRkYWI0NzViYTkxMTI0MDM0YjgzMmNiYTlkMzZhZjQyOWFiYWFmNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblBhY2thZ2VRdC5jcHAKQEAgLTEz
Miw3ICsxMzIsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplR3RrKFFMaWJyYXJ5KiBtb2R1bGUg
PSAwKQogCiBib29sIFBsdWdpblBhY2thZ2U6OmlzUGx1Z2luQmxhY2tsaXN0ZWQoKQogewotI2lm
IEhBVkUoUVQ1KQogICAgIC8vIFRPRE86IGVudW1lcmF0ZSBhbGwgcGx1Z2lucyB0aGF0IGFyZSBp
bmNvbXBhdGlibGUgd2l0aCBRdDUuCiAgICAgY29uc3QgUUxhdGluMVN0cmluZyBwbHVnaW5CbGFj
a2xpc3RbXSA9IHsKICAgICAgICAgUUxhdGluMVN0cmluZygic2t5cGVidXR0b25zIikKQEAgLTE0
Myw3ICsxNDIsNiBAQCBib29sIFBsdWdpblBhY2thZ2U6OmlzUGx1Z2luQmxhY2tsaXN0ZWQoKQog
ICAgICAgICBpZiAoYmFzZU5hbWUgPT0gcGx1Z2luQmxhY2tsaXN0W2ldKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQotI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAKaW5kZXggODkxZDQyYjk3ODli
YmNkOGJiNzllNTk2YzdkMmI3ZWE2MTk1MWM4Ni4uMDRkNzEwZWEyOGU1ZDc4NDUzMDA4MWI1MmVk
N2JjNzhkODBjNzkwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVn
aW5WaWV3UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0
LmNwcApAQCAtNzksMjAgKzc5LDEwIEBACiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNp
bmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4KIAotI2lmIEhBVkUoUVQ1KQogI2luY2x1ZGUgIlF0
WDExSW1hZ2VDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSA8UUd1aUFwcGxpY2F0aW9uPgogI2luY2x1
ZGUgPHFwYS9xcGxhdGZvcm1uYXRpdmVpbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxRV2luZG93Pgot
I2Vsc2UKLSNpbmNsdWRlICJQbHVnaW5Db250YWluZXJRdC5oIgotI2luY2x1ZGUgPFFBcHBsaWNh
dGlvbj4KLSNpbmNsdWRlIDxRRGVza3RvcFdpZGdldD4KLSNpbmNsdWRlIDxRR3JhcGhpY3NXaWRn
ZXQ+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtPgotI2luY2x1ZGUgPFFXaWRn
ZXQ+Ci0jaW5jbHVkZSA8UVgxMUluZm8+Ci0jZW5kaWYKIAogdXNpbmcgSlNDOjpFeGVjU3RhdGU7
CiAjaWYgVVNFKEpTQykKQEAgLTE5OSwxMyArMTg5LDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojp1cGRh
dGVQbHVnaW5XaWRnZXQoKQogCiB2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJvb2wgZm9jdXNl
ZCkKIHsKLSNpZiAhSEFWRShRVDUpIC8vIFdpbmRvd2VkIG1vZGUgaXMgbm90IHN1cHBvcnRlZCB3
aXRoIFF0NSB5ZXQgKHNvIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgaXMgYWx3YXlzIG51bGwpLgot
ICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSB7Ci0gICAgICAgIGlmIChmb2N1c2VkKQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UVdpZGdldCo+KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkp
LT5zZXRGb2N1cyhRdDo6T3RoZXJGb2N1c1JlYXNvbik7Ci0gICAgfSBlbHNlCi0jZW5kaWYKLSAg
ICAgICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKKyAgICBXaWRnZXQ6OnNldEZvY3VzKGZv
Y3VzZWQpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnNob3coKQpAQCAtMjM4LDY1ICsyMjIsMTYg
QEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludFVzaW5nWFBpeG1hcChRUGFpbnRlciogcGFpbnRlciwg
Y29uc3QgUVJlY3QgJmV4cG9zZWRSZWN0KQogICAgIGJvb2wgc2hvdWxkU3luY1ggPSBtX3BsdWdp
bkRpc3BsYXkgJiYgbV9wbHVnaW5EaXNwbGF5ICE9IHgxMURpc3BsYXkoKTsKICAgICBYRXZlbnQg
eGV2ZW50OwogCi0jaWYgSEFWRShRVDUpCiAgICAgc2V0dXBHcmFwaGljc0V4cG9zZUV2ZW50KG1f
ZHJhd2FibGUsIGV4cG9zZWRSZWN0LCB4ZXZlbnQpOwotI2Vsc2UKLSAgICBRUGl4bWFwIHF0RHJh
d2FibGUgPSBRUGl4bWFwOjpmcm9tWDExUGl4bWFwKG1fZHJhd2FibGUsIFFQaXhtYXA6OkV4cGxp
Y2l0bHlTaGFyZWQpOwotICAgIGNvbnN0IGludCBkcmF3YWJsZURlcHRoID0gKChOUFNldFdpbmRv
d0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT5kZXB0aDsKLSAgICBBU1NFUlQo
ZHJhd2FibGVEZXB0aCA9PSBxdERyYXdhYmxlLmRlcHRoKCkpOwotCi0gICAgLy8gV2hlbiBwcmlu
dGluZywgUXQgdXNlcyBhIFFQaWN0dXJlIHRvIGNhcHR1cmUgdGhlIG91dHB1dCBpbiBwcmV2aWV3
IG1vZGUuIFRoZQotICAgIC8vIFFQaWN0dXJlIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBYIFBp
eG1hcC4gQXMgYSByZXN1bHQsIHRoZSBwcmludCBwcmV2aWV3IHdvdWxkCi0gICAgLy8gdXBkYXRl
IGl0c2VsZiB3aGVuIHRoZSBYIFBpeG1hcCBjaGFuZ2VzLiBUbyBwcmV2ZW50IHRoaXMsIHdlIGNy
ZWF0ZSBhIGNvcHkuCi0gICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSkK
LSAgICAgICAgcXREcmF3YWJsZSA9IHF0RHJhd2FibGUuY29weSgpOwotCi0gICAgaWYgKG1faXNU
cmFuc3BhcmVudCAmJiBkcmF3YWJsZURlcHRoICE9IDMyKSB7Ci0gICAgICAgIC8vIEF0dGVtcHQg
Y29udGVudCBwcm9wYWdhdGlvbiBmb3IgZHJhd2FibGUgd2l0aCBubyBhbHBoYSBieSBjb3B5aW5n
IG92ZXIgZnJvbSB0aGUgYmFja2luZyBzdG9yZQotICAgICAgICBRUG9pbnQgb2Zmc2V0OwotICAg
ICAgICBRUGFpbnREZXZpY2UqIGJhY2tpbmdTdG9yZURldmljZSA9ICBRUGFpbnRlcjo6cmVkaXJl
Y3RlZChwYWludGVyLT5kZXZpY2UoKSwgJm9mZnNldCk7Ci0gICAgICAgIG9mZnNldCA9IC1vZmZz
ZXQ7IC8vIG5lZ2F0aW5nIHRoZSBvZmZzZXQgZ2l2ZXMgdXMgdGhlIG9mZnNldCBvZiB0aGUgdmll
dyB3aXRoaW4gdGhlIGJhY2tpbmcgc3RvcmUgcGl4bWFwCi0KLSAgICAgICAgY29uc3QgYm9vbCBo
YXNWYWxpZEJhY2tpbmdTdG9yZSA9IGJhY2tpbmdTdG9yZURldmljZSAmJiBiYWNraW5nU3RvcmVE
ZXZpY2UtPmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6OlBpeG1hcDsKLSAgICAgICAgUVBpeG1hcCog
YmFja2luZ1N0b3JlUGl4bWFwID0gc3RhdGljX2Nhc3Q8UVBpeG1hcCo+KGJhY2tpbmdTdG9yZURl
dmljZSk7Ci0KLSAgICAgICAgLy8gV2UgY2Fubm90IGdyYWIgY29udGVudHMgZnJvbSB0aGUgYmFj
a2luZyBzdG9yZSB3aGVuIHBhaW50aW5nIG9uIFFHcmFwaGljc1ZpZXcgaXRlbXMKLSAgICAgICAg
Ly8gKGJlY2F1c2UgYmFja2luZyBzdG9yZSBjb250ZW50cyBhcmUgYWxyZWFkeSB0cmFuc2Zvcm1l
ZCkuIFdoYXQgd2UgcmVhbGx5IG1lYW4gdG8gZG8gCi0gICAgICAgIC8vIGhlcmUgaXMgdG8gY2hl
Y2sgaWYgd2UgYXJlIHBhaW50aW5nIG9uIFFXZWJWaWV3LCBidXQgbGV0J3MgYmUgYSBsaXR0bGUg
cGVybWlzc2l2ZSA6KQotICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0gcGxhdGZvcm1Q
YWdlQ2xpZW50KCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgYmFja2luZ1N0b3JlSGFzVW50cmFuc2Zv
cm1lZENvbnRlbnRzID0gY2xpZW50ICYmIHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4oY2xpZW50LT5w
bHVnaW5QYXJlbnQoKSk7Ci0KLSAgICAgICAgaWYgKGhhc1ZhbGlkQmFja2luZ1N0b3JlICYmIGJh
Y2tpbmdTdG9yZVBpeG1hcC0+ZGVwdGgoKSA9PSBkcmF3YWJsZURlcHRoIAotICAgICAgICAgICAg
JiYgYmFja2luZ1N0b3JlSGFzVW50cmFuc2Zvcm1lZENvbnRlbnRzKSB7Ci0gICAgICAgICAgICBH
QyBnYyA9IFhEZWZhdWx0R0MoUVgxMUluZm86OmRpc3BsYXkoKSwgUVgxMUluZm86OmFwcFNjcmVl
bigpKTsKLSAgICAgICAgICAgIFhDb3B5QXJlYShRWDExSW5mbzo6ZGlzcGxheSgpLCBiYWNraW5n
U3RvcmVQaXhtYXAtPmhhbmRsZSgpLCBtX2RyYXdhYmxlLCBnYywKLSAgICAgICAgICAgICAgICBv
ZmZzZXQueCgpICsgbV93aW5kb3dSZWN0LngoKSArIGV4cG9zZWRSZWN0LngoKSwgb2Zmc2V0Lnko
KSArIG1fd2luZG93UmVjdC55KCkgKyBleHBvc2VkUmVjdC55KCksCi0gICAgICAgICAgICAgICAg
ZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCksIGV4cG9zZWRSZWN0Lngo
KSwgZXhwb3NlZFJlY3QueSgpKTsKLSAgICAgICAgfSBlbHNlIHsgLy8gbm8gYmFja2luZyBzdG9y
ZSwgY2xlYW4gdGhlIHBpeG1hcCBiZWNhdXNlIHRoZSBwbHVnaW4gdGhpbmtzIGl0cyB0cmFuc3Bh
cmVudAotICAgICAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcXREcmF3YWJsZSk7Ci0gICAgICAg
ICAgICBwYWludGVyLmZpbGxSZWN0KGV4cG9zZWRSZWN0LCBRdDo6d2hpdGUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHNob3VsZFN5bmNYKQotICAgICAgICAgICAgc3luY1goKTsKLSAgICB9
Ci0KLSAgICBzZXR1cEdyYXBoaWNzRXhwb3NlRXZlbnQocXREcmF3YWJsZS5oYW5kbGUoKSwgZXhw
b3NlZFJlY3QsIHhldmVudCk7Ci0jZW5kaWYKLQogICAgIGRpc3BhdGNoTlBFdmVudCh4ZXZlbnQp
OwogCiAgICAgaWYgKHNob3VsZFN5bmNYKQogICAgICAgICBYU3luYyhtX3BsdWdpbkRpc3BsYXks
IGZhbHNlKTsgLy8gc3luYyBjaGFuZ2VzIGJ5IHBsdWdpbgogCi0jaWYgSEFWRShRVDUpCiAgICAg
WEltYWdlKiB4SW1hZ2UgPSBYR2V0SW1hZ2UoeDExRGlzcGxheSgpLCBtX2RyYXdhYmxlLCBleHBv
c2VkUmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHBvc2VkUmVjdC53aWR0aCgpLCBleHBvc2VkUmVjdC5oZWlnaHQoKSwgVUxPTkdfTUFY
LCBaUGl4bWFwKTsKICAgICBwYWludGVyLT5kcmF3SW1hZ2UoUVBvaW50KGV4cG9zZWRSZWN0Lngo
KSwgZXhwb3NlZFJlY3QueSgpKSwgcWltYWdlRnJvbVhJbWFnZSh4SW1hZ2UpLCBleHBvc2VkUmVj
dCk7CiAgICAgWERlc3Ryb3lJbWFnZSh4SW1hZ2UpOwotI2Vsc2UKLSAgICBwYWludGVyLT5kcmF3
UGl4bWFwKFFQb2ludChleHBvc2VkUmVjdC54KCksIGV4cG9zZWRSZWN0LnkoKSksIHF0RHJhd2Fi
bGUsIGV4cG9zZWRSZWN0KTsKLSNlbmRpZgogfQogCiB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTM2OSwxMyAr
MzA0LDggQEAgdm9pZCBzZXRTaGFyZWRYRXZlbnRGaWVsZHMoWEV2ZW50KiB4RXZlbnQsIFFXZWJQ
YWdlQ2xpZW50KiBwYWdlQ2xpZW50KQogICAgIC8vIE5PVEU6IGV2ZW50LT54YW55LndpbmRvdyBk
b2Vzbid0IGFsd2F5cyByZXNwb25kIHRvIHRoZSAud2luZG93IHByb3BlcnR5IG9mIG90aGVyIFhF
dmVudCdzCiAgICAgLy8gYnV0IGRvZXMgaW4gdGhlIGNhc2Ugb2YgS2V5UHJlc3MsIEtleVJlbGVh
c2UsIEJ1dHRvblByZXNzLCBCdXR0b25SZWxlYXNlLCBhbmQgTW90aW9uTm90aWZ5CiAgICAgLy8g
ZXZlbnRzOyB0aHVzLCB0aGlzIGlzIHJpZ2h0OgotI2lmIEhBVkUoUVQ1KQogICAgIFFXaW5kb3cq
IHdpbmRvdyA9IHBhZ2VDbGllbnQgPyBwYWdlQ2xpZW50LT5vd25lcldpbmRvdygpIDogMDsKICAg
ICB4RXZlbnQtPnhhbnkud2luZG93ID0gd2luZG93ID8gd2luZG93LT53aW5JZCgpIDogMDsKLSNl
bHNlCi0gICAgUVdpZGdldCogb3duZXJXaWRnZXQgPSBwYWdlQ2xpZW50ID8gcGFnZUNsaWVudC0+
b3duZXJXaWRnZXQoKSA6IDA7Ci0gICAgeEV2ZW50LT54YW55LndpbmRvdyA9IG93bmVyV2lkZ2V0
ID8gb3duZXJXaWRnZXQtPndpbmRvdygpLT53aW5JZCgpIDogMDsKLSNlbmRpZgogfQogCiB2b2lk
IFBsdWdpblZpZXc6OmluaXRYRXZlbnQoWEV2ZW50KiB4RXZlbnQpCkBAIC02MDYsMzIgKzUzNiw4
IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSA9IGZhbHNlOwogCi0jaWYgIUhBVkUo
UVQ1KSAvLyBXaW5kb3dlZCBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBRdDUgeWV0Ci0gICAg
aWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBRV2lkZ2V0KiB3aWRnZXQgPSBzdGF0aWNfY2Fz
dDxRV2lkZ2V0Kj4ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgICAgIHdpZGdldC0+c2V0
R2VvbWV0cnkobV93aW5kb3dSZWN0KTsKLQotICAgICAgICAvLyBDdXQgb3V0IGFyZWFzIG9mIHRo
ZSBwbHVnaW4gb2NjbHVkZWQgYnkgaWZyYW1lIHNoaW1zCi0gICAgICAgIFZlY3RvcjxJbnRSZWN0
PiBjdXRPdXRSZWN0czsKLSAgICAgICAgUVJlZ2lvbiBjbGlwUmVnaW9uID0gUVJlZ2lvbihtX2Ns
aXBSZWN0KTsKLSAgICAgICAgZ2V0UGx1Z2luT2NjbHVzaW9ucyhtX2VsZW1lbnQsIHRoaXMtPnBh
cmVudCgpLCBmcmFtZVJlY3QoKSwgY3V0T3V0UmVjdHMpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGN1dE91dFJlY3RzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBjdXRPdXRS
ZWN0c1tpXS5tb3ZlKC1mcmFtZVJlY3QoKS54KCksIC1mcmFtZVJlY3QoKS55KCkpOwotICAgICAg
ICAgICAgY2xpcFJlZ2lvbiA9IGNsaXBSZWdpb24uc3VidHJhY3RlZChRUmVnaW9uKGN1dE91dFJl
Y3RzW2ldKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gaWYgc2V0TWFzayBpcyBzZXQgd2l0aCBh
biBlbXB0eSBRUmVnaW9uLCBubyBjbGlwcGluZyB3aWxsCi0gICAgICAgIC8vIGJlIHBlcmZvcm1l
ZCwgc28gaW4gdGhhdCBjYXNlIHdlIGhpZGUgdGhlIHBsdWdpbiB2aWV3Ci0gICAgICAgIHdpZGdl
dC0+c2V0VmlzaWJsZSghY2xpcFJlZ2lvbi5pc0VtcHR5KCkpOwotICAgICAgICB3aWRnZXQtPnNl
dE1hc2soY2xpcFJlZ2lvbik7Ci0KLSAgICAgICAgbV9ucFdpbmRvdy54ID0gbV93aW5kb3dSZWN0
LngoKTsKLSAgICAgICAgbV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKLSAgICB9IGVs
c2UKLSNlbmRpZgotICAgIHsKLSAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKLSAgICAgICAgbV9u
cFdpbmRvdy55ID0gMDsKLSAgICB9CisgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICBtX25wV2lu
ZG93LnkgPSAwOwogCiAgICAgLy8gSWYgdGhlIHdpZHRoIG9yIGhlaWdodCBhcmUgbnVsbCwgc2V0
IHRoZSBjbGlwUmVjdCB0byBudWxsLCBpbmRpY2F0aW5nIHRoYXQKICAgICAvLyB0aGUgcGx1Z2lu
IGlzIG5vdCB2aXNpYmxlL3Njcm9sbGVkIG91dC4KQEAgLTY3NiwxMSArNTgyLDYgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOwotCi0jaWYgIUhBVkUo
UVQ1KSAvLyBXaW5kb3dlZCBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBRdDUgeWV0LgotICAg
IGlmIChpc1NlbGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKLSAgICAgICAg
c3RhdGljX2Nhc3Q8UVdpZGdldCo+KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT5zZXRWaXNpYmxl
KHZpc2libGUpOwotI2VuZGlmCiB9CiAKIE5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJl
YWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1
ZikKQEAgLTc1MSwxMiArNjUyLDggQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVl
KE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmUKIAogICAgIGNh
c2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CiAgICAgICAgIFFXZWJQYWdlQ2xpZW50KiBjbGllbnQg
PSBwbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSNpZiBIQVZFKFFUNSkKICAgICAgICAgUVdpbmRvdyog
d2luZG93ID0gY2xpZW50ID8gY2xpZW50LT5vd25lcldpbmRvdygpIDogMDsKICAgICAgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8WElEKj4odmFsdWUpID0gd2luZG93ID8gd2luZG93LT53aW5JZCgpIDog
MDsKLSNlbHNlCi0gICAgICAgICpyZWludGVycHJldF9jYXN0PFhJRCo+KHZhbHVlKSA9IGNsaWVu
dCA/IGNsaWVudC0+b3duZXJXaWRnZXQoKS0+d2luZG93KCktPndpbklkKCkgOiAwOwotI2VuZGlm
CiAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtNzc2LDE5ICs2NzMsNiBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0
VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZQogCiB2
b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0j
aWYgIUhBVkUoUVQ1KSAvLyBXaW5kb3dlZCBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBRdDUg
eWV0LgotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0
KCkpIHsKLSAgICAgICAgICAgIC8vIHVwZGF0ZSgpIHdpbGwgc2NoZWR1bGUgYSByZXBhaW50IG9m
IHRoZSB3aWRnZXQgc28gZW5zdXJlCi0gICAgICAgICAgICAvLyBpdHMga25vd2xlZGdlIG9mIGl0
cyBwb3NpdGlvbiBvbiB0aGUgcGFnZSBpcyB1cCB0byBkYXRlLgotICAgICAgICAgICAgUVdpZGdl
dCogdyA9IHN0YXRpY19jYXN0PFFXaWRnZXQqPihwbGF0Zm9ybVdpZGdldCgpKTsKLSAgICAgICAg
ICAgIHctPnNldEdlb21ldHJ5KG1fd2luZG93UmVjdCk7Ci0gICAgICAgICAgICB3LT51cGRhdGUo
cmVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCiAgICAg
aW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOwogfQogCkBAIC04NDksMTIgKzcz
Myw3IEBAIHN0YXRpYyBib29sIGdldFZpc3VhbEFuZENvbG9ybWFwKGludCBkZXB0aCwgVmlzdWFs
KiYgdmlzdWFsLCBDb2xvcm1hcCYgY29sb3JtYXAsCiAgICAgdmlzdWFsID0gMDsKICAgICBjb2xv
cm1hcCA9IDA7CiAKLSNpZiAhSEFWRShRVDUpICYmICFkZWZpbmVkKFFUX05PX1hSRU5ERVIpCi0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgdXNlWFJlbmRlciA9IHFnZXRlbnYoIlFUX1gxMV9OT19YUkVO
REVSIikuaXNOdWxsKCk7IC8vIFNob3VsZCBhbHNvIGNoZWNrIGZvciBYUmVuZGVyID49IDAuNQot
I2Vsc2UKLSAgICBzdGF0aWMgY29uc3QgYm9vbCB1c2VYUmVuZGVyID0gZmFsc2U7Ci0jZW5kaWYK
LSAgICBpZiAoIXVzZVhSZW5kZXIgJiYgZm9yY2VBUkdCMzIpCisgICAgaWYgKGZvcmNlQVJHQjMy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpbnQgbnZpOwpAQCAtODY3LDIyICs3NDYs
NyBAQCBzdGF0aWMgYm9vbCBnZXRWaXN1YWxBbmRDb2xvcm1hcChpbnQgZGVwdGgsIFZpc3VhbCom
IHZpc3VhbCwgQ29sb3JtYXAmIGNvbG9ybWFwLAogICAgIGlmICgheHZpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSNpZiAhSEFWRShRVDUpICYmICFkZWZpbmVkKFFUX05PX1hSRU5ERVIpCi0g
ICAgaWYgKGZvcmNlQVJHQjMyKSB7Ci0gICAgICAgIGZvciAoaW50IGlkeCA9IDA7IGlkeCA8IG52
aTsgKytpZHgpIHsKLSAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVu
ZGVyRmluZFZpc3VhbEZvcm1hdCh4MTFEaXNwbGF5KCksIHh2aVtpZHhdLnZpc3VhbCk7Ci0gICAg
ICAgICAgICBpZiAoZm9ybWF0LT50eXBlID09IFBpY3RUeXBlRGlyZWN0ICYmIGZvcm1hdC0+ZGly
ZWN0LmFscGhhTWFzaykgewotICAgICAgICAgICAgICAgICB2aXN1YWwgPSB4dmlbaWR4XS52aXN1
YWw7Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGlmICghdmlzdWFsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxz
ZQotI2VuZGlmCi0gICAgewotICAgICAgICB2aXN1YWwgPSB4dmlbMF0udmlzdWFsOwotICAgIH0K
KyAgICB2aXN1YWwgPSB4dmlbMF0udmlzdWFsOwogICAgIEFTU0VSVCh2aXN1YWwpOwogCiAgICAg
WEZyZWUoeHZpKTsKQEAgLTg5OCw1MCArNzYyLDE4IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZv
cm1TdGFydCgpCiAKICAgICBpZiAoIXgxMUVudmlyb25tZW50LmRpc3BsYXkpIHsKICAgICAgICAg
RGlzcGxheSogZGlzcGxheTsKLSNpZiBIQVZFKFFUNSkKICAgICAgICAgZGlzcGxheSA9IHN0YXRp
Y19jYXN0PERpc3BsYXkqPihRR3VpQXBwbGljYXRpb246OnBsYXRmb3JtTmF0aXZlSW50ZXJmYWNl
KCktPm5hdGl2ZVJlc291cmNlRm9yV2luZG93KCJkaXNwbGF5IiwgMCkpOwotI2Vsc2UKLSAgICAg
ICAgZGlzcGxheSA9IFFYMTFJbmZvOjpkaXNwbGF5KCk7Ci0jZW5kaWYKICAgICAgICAgeDExRW52
aXJvbm1lbnQuZGlzcGxheSA9IGRpc3BsYXk7CiAgICAgICAgIHgxMUVudmlyb25tZW50LnNjcmVl
bklEID0gWERlZmF1bHRTY3JlZW4oZGlzcGxheSk7CiAgICAgICAgIHgxMUVudmlyb25tZW50LmRp
c3BsYXlEZXB0aCA9IFhEZWZhdWx0RGVwdGgoZGlzcGxheSwgeDExRW52aXJvbm1lbnQuc2NyZWVu
SUQpOwogICAgICAgICB4MTFFbnZpcm9ubWVudC5yb290V2luZG93SUQgPSBYRGVmYXVsdFJvb3RX
aW5kb3coZGlzcGxheSk7CiAgICAgfQogCi0jaWYgSEFWRShRVDUpCiAgICAgLy8gV2luZG93ZWQg
bW9kZSBpcyBub3Qgc3VwcG9ydGVkIHdpdGggUXQ1IHlldC4KICAgICBpZiAobV9pc1dpbmRvd2Vk
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIGlmIChtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+Z2V0dmFsdWUpIHsKLSAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcodGhpcyk7Ci0jaWYgVVNFKEpTQykKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
Ci0jZW5kaWYKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hF
bWJlZCwgJm1fbmVlZHNYRW1iZWQpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
LSAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0gICAgfQotCi0g
ICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0g
cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgICAgIGlmIChtX25lZWRzWEVtYmVkICYmIGNsaWVu
dCkgewotICAgICAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQobmV3IFBsdWdpbkNvbnRhaW5lclF0
KHRoaXMsIGNsaWVudC0+b3duZXJXaWRnZXQoKSkpOwotICAgICAgICAgICAgLy8gc3luYyBvdXIg
WEVtYmVkIGNvbnRhaW5lciB3aW5kb3cgY3JlYXRpb24gYmVmb3JlIHNlbmRpbmcgdGhlIHhpZCB0
byBwbHVnaW5zLgotICAgICAgICAgICAgUUFwcGxpY2F0aW9uOjpzeW5jWCgpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgICAgIG1fc3Rh
dHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotI2VuZGlmIC8vIEhBVkUoUVQ1KQotICAgIHsK
LSAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7Ci0gICAgICAgIG1fcGx1Z2luRGlzcGxheSA9
IGdldFBsdWdpbkRpc3BsYXkoKTsKLSAgICB9CisgICAgc2V0UGxhdGZvcm1XaWRnZXQoMCk7Cisg
ICAgbV9wbHVnaW5EaXNwbGF5ID0gZ2V0UGx1Z2luRGlzcGxheSgpOwogCiAgICAgLy8gSWYgdGhl
IHdpZHRoIGFuZCB0aGUgaGVpZ2h0IGFyZSBub3QgemVybyB3ZSBzaG93IHRoZSBQbHVnaW5WaWV3
LgogICAgIGlmICghZnJhbWVSZWN0KCkuaXNFbXB0eSgpKQpAQCAtOTUwLDQ3ICs3ODIsMjEgQEAg
Ym9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICBOUFNldFdpbmRvd0NhbGxiYWNr
U3RydWN0KiB3c2kgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOwogICAgIHdzaS0+
dHlwZSA9IDA7CiAKLSNpZiAhSEFWRShRVDUpCi0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAg
ICAgICBjb25zdCBRWDExSW5mbyogeDExSW5mbyA9ICZzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4ocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSktPngxMUluZm8oKTsKLQotICAgICAgICB3c2ktPmRpc3BsYXkg
PSB4MTFJbmZvLT5kaXNwbGF5KCk7Ci0gICAgICAgIHdzaS0+dmlzdWFsID0gKFZpc3VhbCopeDEx
SW5mby0+dmlzdWFsKCk7Ci0gICAgICAgIHdzaS0+ZGVwdGggPSB4MTFJbmZvLT5kZXB0aCgpOwot
ICAgICAgICB3c2ktPmNvbG9ybWFwID0geDExSW5mby0+Y29sb3JtYXAoKTsKLQotICAgICAgICBt
X25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7Ci0gICAgICAgIG1fbnBXaW5kb3cu
d2luZG93ID0gKHZvaWQqKXN0YXRpY19jYXN0PFFXaWRnZXQqPihwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKS0+d2luSWQoKTsKLSAgICAgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOwotICAgICAgICBt
X25wV2luZG93LmhlaWdodCA9IC0xOwotICAgIH0gZWxzZQotI2VuZGlmCi0gICAgewotI2lmICFI
QVZFKFFUNSkKLSAgICAgICAgY29uc3QgUVgxMUluZm8qIHgxMUluZm8gPSAmUUFwcGxpY2F0aW9u
OjpkZXNrdG9wKCktPngxMUluZm8oKTsKLSAgICAgICAgaWYgKCh4MTFJbmZvLT5kZXB0aCgpID09
IDMyIHx8ICFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZXF1aXJlc0Rl
ZmF1bHRTY3JlZW5EZXB0aCkpCi0gICAgICAgICAgICAgJiYgZ2V0VmlzdWFsQW5kQ29sb3JtYXAo
MzIsIG1fdmlzdWFsLCBtX2NvbG9ybWFwLCAvKiBmb3JjZUFSR0IzMiA9ICovIHRydWUpKQotICAg
ICAgICAgICAgd3NpLT5kZXB0aCA9IDMyOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAg
ewotICAgICAgICAgICAgaW50IGRlcHRoID0gZGlzcGxheURlcHRoKCk7Ci0gICAgICAgICAgICBi
b29sIGZvdW5kID0gZ2V0VmlzdWFsQW5kQ29sb3JtYXAoZGVwdGgsIG1fdmlzdWFsLCBtX2NvbG9y
bWFwLCAvKiBmb3JjZUFSR0IzMiA9ICovIGZhbHNlKTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQoZm91bmQsIGZvdW5kKTsKLSAgICAgICAgICAgIHdzaS0+ZGVwdGggPSBkZXB0aDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHdzaS0+ZGlzcGxheSA9IHgxMURpc3BsYXkoKTsKLSAgICAgICAgd3Np
LT52aXN1YWwgPSBtX3Zpc3VhbDsKLSAgICAgICAgd3NpLT5jb2xvcm1hcCA9IG1fY29sb3JtYXA7
Ci0KLSAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0gICAg
ICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/Ci0gICAgICAgIG1fbnBXaW5k
b3cueCA9IDA7Ci0gICAgICAgIG1fbnBXaW5kb3cueSA9IDA7Ci0gICAgICAgIG1fbnBXaW5kb3cu
d2lkdGggPSAtMTsKLSAgICAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKLSAgICB9CisgICAg
aW50IGRlcHRoID0gZGlzcGxheURlcHRoKCk7CisgICAgYm9vbCBmb3VuZCA9IGdldFZpc3VhbEFu
ZENvbG9ybWFwKGRlcHRoLCBtX3Zpc3VhbCwgbV9jb2xvcm1hcCwgLyogZm9yY2VBUkdCMzIgPSAq
LyBmYWxzZSk7CisgICAgQVNTRVJUX1VOVVNFRChmb3VuZCwgZm91bmQpOworICAgIHdzaS0+ZGVw
dGggPSBkZXB0aDsKKworICAgIHdzaS0+ZGlzcGxheSA9IHgxMURpc3BsYXkoKTsKKyAgICB3c2kt
PnZpc3VhbCA9IG1fdmlzdWFsOworICAgIHdzaS0+Y29sb3JtYXAgPSBtX2NvbG9ybWFwOworCisg
ICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgbV9ucFdpbmRv
dy53aW5kb3cgPSAwOyAvLyBOb3QgdXNlZD8KKyAgICBtX25wV2luZG93LnggPSAwOworICAgIG1f
bnBXaW5kb3cueSA9IDA7CisgICAgbV9ucFdpbmRvdy53aWR0aCA9IC0xOworICAgIG1fbnBXaW5k
b3cuaGVpZ2h0ID0gLTE7CiAKICAgICBtX25wV2luZG93LndzX2luZm8gPSB3c2k7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKaW5kZXggYWRmZDJkMzZi
NDFhNDE2NzZmM2U5ZDYwM2EyZmJhNmM3YWIxZWI5Ny4uMTQyZmE4MzA1ODBkMDNhZmUxMTI0NzEy
M2JjYTA5MWI2MDQ1YzU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luVmlld1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
Vmlld1dpbi5jcHAKQEAgLTkzLDExICs5Myw3IEBACiAKICNpZiBQTEFURk9STShRVCkKICNpbmNs
dWRlICJRV2ViUGFnZUNsaWVudC5oIgotI2lmIEhBVkUoUVQ1KQogI2luY2x1ZGUgPFFXaW5kb3c+
Ci0jZWxzZQotI2luY2x1ZGUgPFFXaWRnZXQ+Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oV1gpCkBAIC0xMTYsMTMgKzExMiw4IEBAIHN0YXRpYyBpbmxpbmUgSFdORCB3aW5kb3dIYW5k
bGVGb3JQYWdlQ2xpZW50KFBsYXRmb3JtUGFnZUNsaWVudCBjbGllbnQpCiAjZWxpZiBQTEFURk9S
TShRVCkKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIDA7Ci0jaWYgSEFWRShRVDUp
CiAgICAgaWYgKFFXaW5kb3cqIHdpbmRvdyA9IGNsaWVudC0+b3duZXJXaW5kb3coKSkKICAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SFdORD4od2luZG93LT53aW5JZCgpKTsKLSNlbHNl
Ci0gICAgaWYgKFFXaWRnZXQqIHBsdWdpblBhcmVudCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0Kj4o
Y2xpZW50LT5wbHVnaW5QYXJlbnQoKSkpCi0gICAgICAgIHJldHVybiBwbHVnaW5QYXJlbnQtPndp
bklkKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKICNlbGlmIFBMQVRGT1JNKFdYKQogICAgIGlm
ICghY2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQucHJpIGIvU291cmNl
L1dlYktpdC9XZWJLaXQucHJpCmluZGV4IGEyZDlkNGJkZjVmNDU2YTE0OWU4MWI2ZGYxZWQxYTQ3
OWFlZWY1OTQuLjVhOGY0ZGZlMzM3MTM1YTJjM2FmMjRjYjAwYzIzYTU1M2ZjNTQ1OGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC5wcmkKQEAgLTM3LDcgKzM3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgJCRQV0QvcXQvQXBpL3F3
ZWJwbHVnaW5kYXRhYmFzZV9wLmggXAogICAgICQkUFdEL3F0L0FwaS9xaHR0cGhlYWRlcl9wLmgK
IAotaGF2ZVF0KDUpOiBjb250YWlucyhDT05GSUcsIGFjY2Vzc2liaWxpdHkpIHsKK2NvbnRhaW5z
KENPTkZJRywgYWNjZXNzaWJpbGl0eSkgewogICAgIFNPVVJDRVMgKz0gJCRQV0QvcXQvQXBpL3F3
ZWJ2aWV3YWNjZXNzaWJsZS5jcHAKICAgICBIRUFERVJTICs9ICQkUFdEL3F0L0FwaS9xd2Vidmll
d2FjY2Vzc2libGVfcC5oCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJp
IGIvU291cmNlL1dlYktpdC9XZWJLaXQxLnByaQppbmRleCBjZjViMmJlODg0ZGMzYTFmNTk1MGRk
MmEwOGJiYTU4NzM2YWVhNGVhLi5hN2M4MjVjMzliMWM2MmM2ZTIxN2M5NmZlYWVhYmU2OWJkNDZh
ZDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJpCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0MS5wcmkKQEAgLTI4LDIyICsyOCwxNiBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfVklERU89MSk6Y29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9RVEtJVD0xKSB7CiB9CiAK
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT049MSl8Y29udGFpbnMo
REVGSU5FUywgRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUz0xKSB7Ci0gICAgaGF2ZVF0KDUpIHsK
LSAgICAgICAgUVQgKz0gc2Vuc29ycwotICAgIH0gZWxzZSB7Ci0gICAgICAgIENPTkZJRyAqPSBt
b2JpbGl0eQotICAgICAgICBNT0JJTElUWSAqPSBzZW5zb3JzCi0gICAgfQorICAgIFFUICs9IHNl
bnNvcnMKIH0KIAotY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0dFT0xPQ0FUSU9OPTEpOmhhdmVR
dCg1KTogUVQgKz0gbG9jYXRpb24KK2NvbnRhaW5zKERFRklORVMsIEVOQUJMRV9HRU9MT0NBVElP
Tj0xKTogUVQgKz0gbG9jYXRpb24KIAogY29udGFpbnMoQ09ORklHLCB0ZXhtYXApOiBERUZJTkVT
ICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVI9MQogCiBwbHVnaW5fYmFja2VuZF94bGliOiBQS0dD
T05GSUcgKz0geDExCiAKLVFUICs9IG5ldHdvcmsKLWhhdmVRdCg1KTogUVQgKz0gd2lkZ2V0cyBw
cmludHN1cHBvcnQgcXVpY2sKK1FUICs9IG5ldHdvcmsgd2lkZ2V0cyBwcmludHN1cHBvcnQgcXVp
Y2sKIAogY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9URVhUVVJFX01BUFBFUl9HTD0xKXxjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9MSkgewogICAgIFFUICo9IG9wZW5nbApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnBybyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5w
cm8KaW5kZXggOGIwMzBiZmM5NGFjYWU4MWMyZmY3YmEyZjc0NmUwYWFiZGY2NmEyMC4uODJjZDBj
ZDBjMWQyYjEyMTg4NTcyMmFiYmRjNjg0MGY1ZDljZTdmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJLaXQxLnBybworKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdDEucHJvCkBAIC05NCw3
ICs5NCw3IEBAIEhFQURFUlMgKz0gXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc1F0LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1dlYkV2ZW50
Q29udmVyc2lvbi5oCiAKLWhhdmVRdCg1KTogY29udGFpbnMoUVRfQ09ORklHLGFjY2Vzc2liaWxp
dHkpIHsKK2NvbnRhaW5zKFFUX0NPTkZJRyxhY2Nlc3NpYmlsaXR5KSB7CiAgICAgU09VUkNFUyAr
PSAkJFBXRC9xdC9BcGkvcXdlYnZpZXdhY2Nlc3NpYmxlLmNwcAogICAgIEhFQURFUlMgKz0gJCRQ
V0QvcXQvQXBpL3F3ZWJ2aWV3YWNjZXNzaWJsZV9wLmggCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3FncmFwaGljc3dlYnZpZXcuY3BwCmluZGV4IDM0M2MyYTE2NjFmMGI2YWRjZjFjZmI4NTYwYzNj
ODdlYjM4NGEwZmIuLjNlOGFiYmFkOWQ4MTg5YmY2YzlhMmIzZmRiMDNjOWY5Zjg2YTAyYTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCkBAIC0zMDksOSArMzA5
LDcgQEAgYm9vbCBRR3JhcGhpY3NXZWJWaWV3OjpzY2VuZUV2ZW50KFFFdmVudCogZXZlbnQpCiAg
ICAgaWYgKGQtPnBhZ2UgJiYgKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpUb3VjaEJlZ2luCiAg
ICAgICAgICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlRvdWNoRW5kCiAgICAg
ICAgICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlRvdWNoVXBkYXRlCi0jaWYg
SEFWRShRVDUpCiAgICAgICAgICAgICAgICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlRv
dWNoQ2FuY2VsCi0jZW5kaWYKICAgICAgICApKSB7CiAgICAgICAgIGQtPnBhZ2UtPmV2ZW50KGV2
ZW50KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmll
dy5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5oCmluZGV4IDE1ZmUw
ODdkNjE5NzBhMWFiYjEzYzY0YjI0N2Y4YzVhOTk3MTU0YTAuLjBmOWYxN2I0ODM4NDU4YjIyMDIy
MjA3ZGI0MjQ1NjBjODBhYjc2MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3Fn
cmFwaGljc3dlYnZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2
aWV3LmgKQEAgLTIzLDExICsyMyw3IEBACiAjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgogI2lu
Y2x1ZGUgInF3ZWJwYWdlLmgiCiAjaW5jbHVkZSA8UXRDb3JlL3F1cmwuaD4KLSNpZiBRVF9WRVJT
SU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkKICNpbmNsdWRlIDxRdFdpZGdldHMvcWdy
YXBoaWNzd2lkZ2V0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPFF0R3VpL3FncmFwaGljc3dpZGdldC5o
PgotI2VuZGlmCiAjaW5jbHVkZSA8UXRHdWkvcWV2ZW50Lmg+CiAjaW5jbHVkZSA8UXRHdWkvcWlj
b24uaD4KICNpbmNsdWRlIDxRdEd1aS9xcGFpbnRlci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5jcHAKaW5kZXggZGFjNDE2NWU5NjI1ZjdiNzMzY2M3NGE5ZWFhNjMyMTQ1OGMzYmYxNy4uODAy
NmYzNWQ2MGVlNmExNTNjZjA1ODY1ZDljNDFlYzMwNDZjZDMwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2ViZnJhbWUuY3BwCkBAIC05NywxMCArOTcsNiBAQAogI2luY2x1ZGUgPHFyZWdpb24uaD4KICNp
bmNsdWRlIDxxbmV0d29ya3JlcXVlc3QuaD4KIAotI2lmIEVOQUJMRShPUklFTlRBVElPTl9FVkVO
VFMpICYmICFIQVZFKFFUNSkKLVFUTV9VU0VfTkFNRVNQQUNFCi0jZW5kaWYKLQogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIC8vIGZyb20gdGV4dC9xZm9udC5jcHAKQEAgLTY1MCwxMSArNjQ2
LDcgQEAgUVdlYkZyYW1lOjp+UVdlYkZyYW1lKCkKIAogICAgIFRoZSBvd25lcnNoaXAgb2YgXGEg
b2JqZWN0IGlzIHNwZWNpZmllZCB1c2luZyBcYSBvd24uCiAqLwotI2lmIFFUX1ZFUlNJT04gPj0g
UVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQogdm9pZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlw
dFdpbmRvd09iamVjdChjb25zdCBRU3RyaW5nICZuYW1lLCBRT2JqZWN0ICpvYmplY3QsIFZhbHVl
T3duZXJzaGlwIG93bmVyc2hpcCkKLSNlbHNlCi12b2lkIFFXZWJGcmFtZTo6YWRkVG9KYXZhU2Ny
aXB0V2luZG93T2JqZWN0KGNvbnN0IFFTdHJpbmcgJm5hbWUsIFFPYmplY3QgKm9iamVjdCwgUVNj
cmlwdEVuZ2luZTo6VmFsdWVPd25lcnNoaXAgb3duZXJzaGlwKQotI2VuZGlmCiB7CiAgICAgaWYg
KCFwYWdlKCktPnNldHRpbmdzKCktPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2Ny
aXB0RW5hYmxlZCkpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZS5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKaW5k
ZXggNmQ0ODZkNTBlY2FiNjhkZDcwODllMTJkMmExODMzYzI3YmUxZTgzNi4uY2E5NjY2MWUzNWNh
YzUyNjZkNTVmMGY0MTg3M2M1NjY3MGRjMzk5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYmZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgK
QEAgLTI4LDEwICsyOCw2IEBACiAjaW5jbHVkZSA8UXROZXR3b3JrL3FuZXR3b3JrYWNjZXNzbWFu
YWdlci5oPgogI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKIAotI2lmIFFUX1ZFUlNJT04gPCBR
VF9WRVJTSU9OX0NIRUNLKDUsIDAsIDApCi0jaW5jbHVkZSA8UXRTY3JpcHQvcXNjcmlwdGVuZ2lu
ZS5oPgotI2VuZGlmCi0KIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3MgUVJlY3Q7CiBjbGFzcyBR
UG9pbnQ7CkBAIC0xMjQsMTMgKzEyMCwxMSBAQCBwcml2YXRlOgogICAgIH5RV2ViRnJhbWUoKTsK
IAogcHVibGljOgotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQog
ICAgIGVudW0gVmFsdWVPd25lcnNoaXAgewogICAgICAgICBRdE93bmVyc2hpcCwKICAgICAgICAg
U2NyaXB0T3duZXJzaGlwLAogICAgICAgICBBdXRvT3duZXJzaGlwCiAgICAgfTsKLSNlbmRpZgog
CiAgICAgUVdlYlBhZ2UgKnBhZ2UoKSBjb25zdDsKIApAQCAtMTM5LDExICsxMzMsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRIdG1sKGNvbnN0IFFTdHJpbmcgJmh0bWwsIGNvbnN0IFFVcmwgJmJh
c2VVcmwgPSBRVXJsKCkpOwogICAgIHZvaWQgc2V0Q29udGVudChjb25zdCBRQnl0ZUFycmF5ICZk
YXRhLCBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSA9IFFTdHJpbmcoKSwgY29uc3QgUVVybCAmYmFz
ZVVybCA9IFFVcmwoKSk7CiAKLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwg
MCwgMCkKICAgICB2b2lkIGFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdChjb25zdCBRU3RyaW5n
ICZuYW1lLCBRT2JqZWN0ICpvYmplY3QsIFZhbHVlT3duZXJzaGlwIG93bmVyc2hpcCA9IFF0T3du
ZXJzaGlwKTsKLSNlbHNlCi0gICAgdm9pZCBhZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoY29u
c3QgUVN0cmluZyAmbmFtZSwgUU9iamVjdCAqb2JqZWN0LCBRU2NyaXB0RW5naW5lOjpWYWx1ZU93
bmVyc2hpcCBvd25lcnNoaXAgPSBRU2NyaXB0RW5naW5lOjpRdE93bmVyc2hpcCk7Ci0jZW5kaWYK
ICAgICBRU3RyaW5nIHRvSHRtbCgpIGNvbnN0OwogICAgIFFTdHJpbmcgdG9QbGFpblRleHQoKSBj
b25zdDsKICAgICBRU3RyaW5nIHJlbmRlclRyZWVEdW1wKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmZyYW1lX3AuaAppbmRleCAyNzYyYzJiZTc3ZWM5NDVlZmFlNjljMDQyM2U1ZTI3NDJlNDc5
NjE1Li40MjQ3M2ExODFmMjBlMmZkZTEwODFkYjliZTMxYjA3ZmIxYTNjNzBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZV9wLmgKQEAgLTMwLDkgKzMwLDYgQEAKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgogI2lmIEVOQUJMRShPUklFTlRBVElPTl9FVkVOVFMpCiAjaW5jbHVkZSAicW9y
aWVudGF0aW9uc2Vuc29yLmgiCi0jaWYgUVRfVkVSU0lPTiA8IFFUX1ZFUlNJT05fQ0hFQ0soNSwg
MCwgMCkKLXVzaW5nIFFUTV9OQU1FU1BBQ0U6OlFPcmllbnRhdGlvblNlbnNvcjsKLSNlbmRpZgog
I2VuZGlmIC8vIEVOQUJMRShPUklFTlRBVElPTl9FVkVOVFMpLgogI2luY2x1ZGUgInF3ZWJlbGVt
ZW50LmgiCiAjaW5jbHVkZSAid3RmL1JlZlB0ci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3Bw
CmluZGV4IDEzMzA4NzBkYTI4M2E1MGVjYmQ3NzI1MDM3MWMzMTlkYjkyYWVjMmMuLmQwNTFjZGY0
NTU5YzBjY2Y4ZjI2ZTM5MmMzNTVkNjdjNDk4NzE0ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5jcHAKQEAgLTExMyw3ICsxMTMsNiBAQAogI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKICNlbmRp
ZiAvLyBRX09TX1dJTjMyCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVXRp
bHNRdC5oIgogI2luY2x1ZGUgIldlYkV2ZW50Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIldpbmRv
d0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCkBAIC0zMTQ4LDkgKzMxNDcs
NyBAQCBib29sIFFXZWJQYWdlOjpldmVudChRRXZlbnQgKmV2KQogICAgIGNhc2UgUUV2ZW50OjpU
b3VjaEJlZ2luOgogICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToKICAgICBjYXNlIFFFdmVu
dDo6VG91Y2hFbmQ6Ci0jaWYgSEFWRShRVDUpCiAgICAgY2FzZSBRRXZlbnQ6OlRvdWNoQ2FuY2Vs
OgotI2VuZGlmCiAgICAgICAgIC8vIFJldHVybiB3aGV0aGVyIHRoZSBkZWZhdWx0IGFjdGlvbiB3
YXMgY2FuY2VsbGVkIGluIHRoZSBKUyBldmVudCBoYW5kbGVyCiAgICAgICAgIHJldHVybiBkLT50
b3VjaEV2ZW50KHN0YXRpY19jYXN0PFFUb3VjaEV2ZW50Kj4oZXYpKTsKICNpZm5kZWYgUVRfTk9f
UFJPUEVSVElFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaCBi
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKaW5kZXggMGJmMzVlMjQ3MWYxY2MzYmQ0
NDdjMTNjYjBmODg4YTUyZjRkNGExOC4uNjZmODk2MDliMDAzODRjYmFmOWE5MGUxNjBkOWQ3YjE3
MGQwZDA1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCkBAIC0yNiwxMSArMjYsNyBAQAogCiAj
aW5jbHVkZSA8UXRDb3JlL3FvYmplY3QuaD4KICNpbmNsdWRlIDxRdENvcmUvcXVybC5oPgotI2lm
IFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQogI2luY2x1ZGUgPFF0V2lk
Z2V0cy9xd2lkZ2V0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPFF0R3VpL3F3aWRnZXQuaD4KLSNlbmRp
ZgogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFOZXR3b3JrUHJveHk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnNldHRpbmdzLmNwcAppbmRleCA5NmUyYjBjNGQyNmVjZjA3Y2RiMDYyMWVlYTcw
YzUxYjM1YTc5ZjI1Li4xNTYwYTNlNWQyYzU0ZTdiNTU5N2E1ZDllYjQ0Zjk0OWZjYmVkYWMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKQEAgLTQ2LDExICs0Niw3IEBACiAj
aW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogCiAjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotI2lmIEhB
VkUoUVQ1KQogI2luY2x1ZGUgPFFTdGFuZGFyZFBhdGhzPgotI2Vsc2UKLSNpbmNsdWRlIDxRRGVz
a3RvcFNlcnZpY2VzPgotI2VuZGlmCiAjaW5jbHVkZSA8UURpcj4KICNpbmNsdWRlIDxRSGFzaD4K
ICNpbmNsdWRlIDxRU2hhcmVkRGF0YT4KQEAgLTExNDEsMTEgKzExMzcsNyBAQCB2b2lkIFFXZWJT
ZXR0aW5nczo6ZW5hYmxlUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUVN0cmluZyYgcGF0aCkKIAog
ICAgIGlmIChwYXRoLmlzRW1wdHkoKSkgewogCi0jaWYgSEFWRShRVDUpCiAgICAgICAgIHN0b3Jh
Z2VQYXRoID0gUVN0YW5kYXJkUGF0aHM6OndyaXRhYmxlTG9jYXRpb24oUVN0YW5kYXJkUGF0aHM6
OkRhdGFMb2NhdGlvbik7Ci0jZWxzZQotICAgICAgICBzdG9yYWdlUGF0aCA9IFFEZXNrdG9wU2Vy
dmljZXM6OnN0b3JhZ2VMb2NhdGlvbihRRGVza3RvcFNlcnZpY2VzOjpEYXRhTG9jYXRpb24pOwot
I2VuZGlmCiAgICAgICAgIGlmIChzdG9yYWdlUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBz
dG9yYWdlUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChRRGlyOjpob21l
UGF0aCgpLCBRQ29yZUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvbk5hbWUoKSk7CiAgICAgfSBlbHNl
CkBAIC0xMTY0LDExICsxMTU2LDcgQEAgdm9pZCBRV2ViU2V0dGluZ3M6OmVuYWJsZVBlcnNpc3Rl
bnRTdG9yYWdlKGNvbnN0IFFTdHJpbmcmIHBhdGgpCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9NRVRBREFUQV9DQUNIRSkKICAgICAvLyBBbGwgYXBwbGljYXRpb25zIGNhbiBzaGFyZSB0aGUg
Y29tbW9uIFF0V2Via2l0IGNhY2hlIGZpbGUocykuCiAgICAgLy8gUGF0aCBpcyBub3QgY29uZmln
dXJhYmxlIGFuZCB1c2VzIFFEZXNrdG9wU2VydmljZXM6OkNhY2hlTG9jYXRpb24gYnkgZGVmYXVs
dC4KLSNpZiBIQVZFKFFUNSkKICAgICBRU3RyaW5nIGNhY2hlUGF0aCA9IFFTdGFuZGFyZFBhdGhz
Ojp3cml0YWJsZUxvY2F0aW9uKFFTdGFuZGFyZFBhdGhzOjpDYWNoZUxvY2F0aW9uKTsKLSNlbHNl
Ci0gICAgUVN0cmluZyBjYWNoZVBhdGggPSBRRGVza3RvcFNlcnZpY2VzOjpzdG9yYWdlTG9jYXRp
b24oUURlc2t0b3BTZXJ2aWNlczo6Q2FjaGVMb2NhdGlvbik7Ci0jZW5kaWYKICAgICBXZWJDb3Jl
OjptYWtlQWxsRGlyZWN0b3JpZXMoY2FjaGVQYXRoKTsKIAogICAgIFFGaWxlSW5mbyBpbmZvKGNh
Y2hlUGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5jcHAKaW5kZXggYTYwODJjZjYzMjhkMTY1
MDZmZThiOWU3ZWE2ZGIyODA4OTBkODI2ZC4uZjkwNzkwZjBjNGI3YjRmOTFmZWNkNmVmNDMzMGU1
N2Q0Y2EzYWQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3LmNwcApAQCAtMzQsMTAgKzM0LDgg
QEAKICNpbmNsdWRlICJxZGlyLmgiCiAjaW5jbHVkZSAicWZpbGUuaCIKICNpZm5kZWYgUVRfTk9f
QUNDRVNTSUJJTElUWQotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAw
KQogI2luY2x1ZGUgInF3ZWJ2aWV3YWNjZXNzaWJsZV9wLmgiCiAjZW5kaWYKLSNlbmRpZgogCiBj
bGFzcyBRV2ViVmlld1ByaXZhdGUgewogcHVibGljOgpAQCAtMTU0LDcgKzE1Miw2IEBAIHZvaWQg
UVdlYlZpZXdQcml2YXRlOjpfcV9wYWdlRGVzdHJveWVkKCkKICovCiAKICNpZm5kZWYgUVRfTk9f
QUNDRVNTSUJJTElUWQotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAw
KQogc3RhdGljIFFBY2Nlc3NpYmxlSW50ZXJmYWNlKiBhY2Nlc3NpYmxlSW50ZXJmYWNlRmFjdG9y
eShjb25zdCBRU3RyaW5nJiBrZXksIFFPYmplY3QqIG9iamVjdCkKIHsKICAgICBRX1VOVVNFRChr
ZXkpCkBAIC0xNjgsNyArMTY1LDYgQEAgc3RhdGljIFFBY2Nlc3NpYmxlSW50ZXJmYWNlKiBhY2Nl
c3NpYmxlSW50ZXJmYWNlRmFjdG9yeShjb25zdCBRU3RyaW5nJiBrZXksIFFPYmoKICAgICByZXR1
cm4gMDsKIH0KICNlbmRpZgotI2VuZGlmCiAKIC8qIQogICAgIENvbnN0cnVjdHMgYW4gZW1wdHkg
UVdlYlZpZXcgd2l0aCBwYXJlbnQgXGEgcGFyZW50LgpAQCAtMTkxLDEwICsxODcsOCBAQCBRV2Vi
Vmlldzo6UVdlYlZpZXcoUVdpZGdldCAqcGFyZW50KQogICAgIHNldEZvY3VzUG9saWN5KFF0OjpX
aGVlbEZvY3VzKTsKIAogI2lmbmRlZiBRVF9OT19BQ0NFU1NJQklMSVRZCi0jaWYgUVRfVkVSU0lP
TiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDAsIDApCiAgICAgUUFjY2Vzc2libGU6Omluc3RhbGxG
YWN0b3J5KGFjY2Vzc2libGVJbnRlcmZhY2VGYWN0b3J5KTsKICNlbmRpZgotI2VuZGlmCiB9CiAK
IC8qIQpAQCAtNzMyLDkgKzcyNiw3IEBAIGJvb2wgUVdlYlZpZXc6OmV2ZW50KFFFdmVudCAqZSkK
ICAgICAgICAgfSBlbHNlIGlmIChlLT50eXBlKCkgPT0gUUV2ZW50OjpUb3VjaEJlZ2luIAogICAg
ICAgICAgICAgICAgICAgIHx8IGUtPnR5cGUoKSA9PSBRRXZlbnQ6OlRvdWNoRW5kIAogICAgICAg
ICAgICAgICAgICAgIHx8IGUtPnR5cGUoKSA9PSBRRXZlbnQ6OlRvdWNoVXBkYXRlCi0jaWYgSEFW
RShRVDUpCiAgICAgICAgICAgICAgICAgICAgfHwgZS0+dHlwZSgpID09IFFFdmVudDo6VG91Y2hD
YW5jZWwKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICBkLT5wYWdl
LT5ldmVudChlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcu
aCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3LmgKaW5kZXggOTBkMGE4ZTNiMjA3MTRl
Y2ViMWUxODIzMmI5NDAwYWRjNDM1NzM0MC4uZDRiNGRkOTE3NWYwZDE4MWNmMmJkOGI1Y2RhMTgx
OThhNTEyN2YxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5oCkBAIC0yMywxMSArMjMsNyBAQAog
CiAjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgogI2luY2x1ZGUgInF3ZWJwYWdlLmgiCi0jaWYg
UVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDAsIDApCiAjaW5jbHVkZSA8UXRXaWRn
ZXRzL3F3aWRnZXQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8UXRHdWkvcXdpZGdldC5oPgotI2VuZGlm
CiAjaW5jbHVkZSA8UXRHdWkvcWljb24uaD4KICNpbmNsdWRlIDxRdEd1aS9xcGFpbnRlci5oPgog
I2luY2x1ZGUgPFF0Q29yZS9xdXJsLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCmluZGV4IGIyMWNlOWU5ODAxNDE4NjY2MTQxMTE5
NThjNTFhNWExMTk4OGU5NDkuLjg2ZWYzODA0NDRhM2JkOWViYTFmNzg4NTI4MmYxMGFkNDYyZTdk
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50UXQuY3BwCkBAIC03Myw3ICs3Myw2IEBACiAjaW5jbHVkZSA8cWV2ZW50bG9vcC5oPgogI2lu
Y2x1ZGUgPHF0b29sdGlwLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9xdC9VdGlsc1F0Lmg+CiAKICNpZiBFTkFCTEUoVklERU8pICYmICgoVVNFKEdTVFJFQU1FUikg
JiYgIWRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpKSB8fCBVU0UoUVRfTVVMVElNRURJQSkgfHwg
VVNFKFFUS0lUKSkKICNpbmNsdWRlICJGdWxsU2NyZWVuVmlkZW9RdC5oIgpAQCAtNTEzLDcgKzUx
Miw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nICZ0aXAs
IFRleHREaXJlY3Rpb24pCiAgICAgICAgIHZpZXctPnNldFRvb2xUaXAoUVN0cmluZygpKTsKICAg
ICAgICAgUVRvb2xUaXA6OmhpZGVUZXh0KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUVN0cmlu
ZyBkdGlwID0gUUxhdGluMVN0cmluZygiPHA+IikgKyBlc2NhcGVIdG1sKHRpcCkgKyBRTGF0aW4x
U3RyaW5nKCI8L3A+Iik7CisgICAgICAgIFFTdHJpbmcgZHRpcCA9IFFMYXRpbjFTdHJpbmcoIjxw
PiIpICsgUVN0cmluZyh0aXApLnRvSHRtbEVzY2FwZWQoKSArIFFMYXRpbjFTdHJpbmcoIjwvcD4i
KTsKICAgICAgICAgdmlldy0+c2V0VG9vbFRpcChkdGlwKTsKICAgICB9CiAjZWxzZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRR
dC5jcHAKaW5kZXggYTJjM2NiMjEwNDVjMTA0ZGMwMDBlNTY4Y2Q1MWZkM2FiYzFmZGM3MC4uNGEx
NDcyYzVhNTc3NTExMWZjOTM1MDRjMTRiZjM3MGEzNmNhYTJhMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCkBA
IC0xNjA0LDIyICsxNjA0LDEzIEBAIFBhc3NSZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlckNsaWVu
dFF0OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwKICAgICAgICAgVmVj
dG9yPFN0cmluZz4gcGFyYW1zID0gcGFyYW1OYW1lczsKICAgICAgICAgVmVjdG9yPFN0cmluZz4g
dmFsdWVzID0gcGFyYW1WYWx1ZXM7CiAgICAgICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRp
b24veC1zaG9ja3dhdmUtZmxhc2giKSB7Ci0jaWYgSEFWRShRVDUpCi0gICAgICAgICAgICBjb25z
dCBib29sIHNob3VsZEluamVjdFdtb2RlID0gdHJ1ZTsKLSNlbHNlCiAgICAgICAgICAgICAvLyBJ
bmplY3Qgd21vZGU9b3BhcXVlIHdoZW4gdGhlcmUgaXMgbm8gY2xpZW50IG9yIHRoZSBjbGllbnQg
aXMgbm90IGEgUVdlYlZpZXcuCi0gICAgICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50ID0g
bV93ZWJGcmFtZS0+cGFnZSgpLT5kLT5jbGllbnQuZ2V0KCk7Ci0gICAgICAgICAgICBjb25zdCBi
b29sIHNob3VsZEluamVjdFdtb2RlID0gIShjbGllbnQgJiYgcW9iamVjdF9jYXN0PFFXaWRnZXQq
PihjbGllbnQtPnBsdWdpblBhcmVudCgpKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChzaG91
bGRJbmplY3RXbW9kZSkgewotICAgICAgICAgICAgICAgIC8vIEluamVjdCB3bW9kZT1vcGFxdWUg
d2hlbiB0aGVyZSBpcyBubyBjbGllbnQgb3IgdGhlIGNsaWVudCBpcyBub3QgYSBRV2ViVmlldy4K
LSAgICAgICAgICAgICAgICBzaXplX3Qgd21vZGVJbmRleCA9IHBhcmFtcy5maW5kKCJ3bW9kZSIp
OwotICAgICAgICAgICAgICAgIGlmICh3bW9kZUluZGV4ID09IFdURjo6bm90Rm91bmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmFwcGVuZCgid21vZGUiKTsKLSAgICAgICAgICAgICAg
ICAgICAgdmFsdWVzLmFwcGVuZCgib3BhcXVlIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZXNbd21vZGVJbmRleF0sICJ3aW5kb3ciKSkKLSAgICAg
ICAgICAgICAgICAgICAgdmFsdWVzW3dtb2RlSW5kZXhdID0gIm9wYXF1ZSI7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBzaXplX3Qgd21vZGVJbmRleCA9IHBhcmFtcy5maW5kKCJ3bW9kZSIp
OworICAgICAgICAgICAgaWYgKHdtb2RlSW5kZXggPT0gV1RGOjpub3RGb3VuZCkgeworICAgICAg
ICAgICAgICAgIHBhcmFtcy5hcHBlbmQoIndtb2RlIik7CisgICAgICAgICAgICAgICAgdmFsdWVz
LmFwcGVuZCgib3BhcXVlIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKHZhbHVlc1t3bW9kZUluZGV4XSwgIndpbmRvdyIpKQorICAgICAgICAgICAgICAgIHZhbHVl
c1t3bW9kZUluZGV4XSA9ICJvcGFxdWUiOwogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPFBs
dWdpblZpZXc+IHBsdWdpblZpZXcgPSBQbHVnaW5WaWV3OjpjcmVhdGUobV9mcmFtZSwgcGx1Z2lu
U2l6ZSwgZWxlbWVudCwgdXJsLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAKaW5kZXggMjBiYTM1M2JkMDk0MzIyZmQ1
NmFmOTg3Y2I2NTNkNjdiNTJlNGExYS4uYjZiNGQ3MGJkMTBhODdjODMxOWZlMTk3OGM3NjlkMTJi
Njk5OTM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvbkNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0dlb2xvY2F0aW9uQ2xpZW50UXQuY3BwCkBAIC0zOCwxMSArMzgsNyBAQAogI2luY2x1ZGUgInF3
ZWJwYWdlLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgogCi0jaWYgIUhBVkUoUVQ1KQotI2lu
Y2x1ZGUgPFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2U+Ci0jZWxpZiBIQVZFKFFUNSkKICNpbmNsdWRl
IDxRdExvY2F0aW9uL1FHZW9Qb3NpdGlvbkluZm9Tb3VyY2U+Ci0jZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0dlb2xvY2F0aW9uQ2xpZW50UXQuaCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
R2VvbG9jYXRpb25DbGllbnRRdC5oCmluZGV4IDk0YjBmNjUzMWZmZDU0OTljMjEyMzMyOTFjOTdj
NjdjYjNmYTk5YzUuLjBiMTIyZjJiMjhjOWIyMWRmNWQxODliYjIxNDAyZTkxNzUxZDY5YTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGll
bnRRdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25D
bGllbnRRdC5oCkBAIC0zMSwxNiArMzEsOCBAQAogI2luY2x1ZGUgPFFPYmplY3Q+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCi0jaWYgIUhBVkUoUVQ1KQotI2luY2x1ZGUgPFFHZW9Qb3NpdGlv
bkluZm8+Ci1uYW1lc3BhY2UgUXRNb2JpbGl0eSB7Ci1jbGFzcyBRR2VvUG9zaXRpb25JbmZvU291
cmNlOwotfTsKLXVzaW5nIG5hbWVzcGFjZSBRdE1vYmlsaXR5OwotI2VsaWYgSEFWRShRVDUpCiAj
aW5jbHVkZSA8UXRMb2NhdGlvbi9RR2VvUG9zaXRpb25JbmZvPgogY2xhc3MgUUdlb1Bvc2l0aW9u
SW5mb1NvdXJjZTsKLSNlbmRpZgogCiAKIGNsYXNzIFFXZWJQYWdlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIGIvU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4IDk5MDE3OTkwNjU0
ZWQyMWM1MDc1MWFhMjBiNWFmMTYyMGViNDkxYzAuLjAwOTMxODdhZjVlYzRlMTk3MjI2NDU4YWZh
NDkyYjYwODQ3ODgyM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUGFnZUNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTMzLDkgKzMzLDcgQEAKICNlbmRpZgogCiAjaWYgVVNFKDNE
X0dSQVBISUNTKQotI2lmIEhBVkUoUVQ1KQogI2luY2x1ZGUgPFFXaW5kb3c+Ci0jZW5kaWYKIAog
c3RhdGljIHZvaWQgY3JlYXRlUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzREZyb21XaWRnZXQoUVdp
ZGdldCogd2lkZ2V0LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1H
cmFwaGljc1N1cmZhY2UzRCogc3VyZmFjZSkKQEAgLTU0LDEzICs1Miw4IEBAIHN0YXRpYyB2b2lk
IGNyZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RGcm9tV2lkZ2V0KFFXaWRnZXQqIHdpZGdl
dCwgUGxhdGZvcm1HCiAgICAgaWYgKGdsV2lkZ2V0LT5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8g
R2VvbWV0cnkgY2FuIGJlIHNldCB0byB6ZXJvIGJlY2F1c2UgbV9nbFdpZGdldCBpcyB1c2VkIG9u
bHkgZm9yIGl0cyBRR0xDb250ZXh0LgogICAgICAgICBnbFdpZGdldC0+c2V0R2VvbWV0cnkoMCwg
MCwgMCwgMCk7Ci0jaWYgSEFWRShRVDUpCiAgICAgICAgICpzdXJmYWNlID0gZ2xXaWRnZXQtPndp
bmRvd0hhbmRsZSgpOwogICAgICAgICAqY29udGV4dCA9IGdsV2lkZ2V0LT5jb250ZXh0KCktPmNv
bnRleHRIYW5kbGUoKTsKLSNlbHNlCi0gICAgICAgICpzdXJmYWNlID0gZ2xXaWRnZXQ7Ci0gICAg
ICAgICpjb250ZXh0ID0gY29uc3RfY2FzdDxRR0xDb250ZXh0Kj4oZ2xXaWRnZXQtPmNvbnRleHQo
KSk7Ci0jZW5kaWYKICAgICB9IGVsc2UgewogICAgICAgICBkZWxldGUgZ2xXaWRnZXQ7CiAgICAg
ICAgIGdsV2lkZ2V0ID0gMDsKQEAgLTc0LDcgKzY3LDYgQEAgc3RhdGljIHZvaWQgY3JlYXRlUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzREZyb21XaWRnZXQoUVdpZGdldCogd2lkZ2V0LCBQbGF0Zm9y
bUcKICNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgiCiAjZW5kaWYKIAotI2lm
IEhBVkUoUVQ1KQogUVdpbmRvdyogUVdlYlBhZ2VDbGllbnQ6Om93bmVyV2luZG93KCkgY29uc3QK
IHsKICAgICBRV2lkZ2V0KiB3aWRnZXQgPSBvd25lcldpZGdldCgpOwpAQCAtODYsNyArNzgsNiBA
QCBRV2luZG93KiBRV2ViUGFnZUNsaWVudDo6b3duZXJXaW5kb3coKSBjb25zdAogICAgICAgICBy
ZXR1cm4gbmF0aXZlUGFyZW50LT53aW5kb3dIYW5kbGUoKTsKICAgICByZXR1cm4gMDsKIH0KLSNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAppbmRleCAwYjczMmE0Y2Vk
MWRmNGZiNDlhOTIxZTkyY2Q0Yzg4MTI2ZGZhMzIwLi4yMjI2NzY2MjA5MDE5ZDk3MDg2MWQyMDNm
YTVjZWMxZDU4NTM1NDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9XZWJFdmVudENvbnZlcnNpb24uY3BwCkBAIC0yNDMsMTEgKzI0Myw5IEBAIFdlYktp
dFBsYXRmb3JtVG91Y2hFdmVudDo6V2ViS2l0UGxhdGZvcm1Ub3VjaEV2ZW50KFFUb3VjaEV2ZW50
KiBldmVudCkKICAgICBjYXNlIFFFdmVudDo6VG91Y2hFbmQ6CiAgICAgICAgIG1fdHlwZSA9IFBs
YXRmb3JtRXZlbnQ6OlRvdWNoRW5kOwogICAgICAgICBicmVhazsKLSNpZiBIQVZFKFFUNSkKICAg
ICBjYXNlIFFFdmVudDo6VG91Y2hDYW5jZWw6CiAgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZl
bnQ6OlRvdWNoQ2FuY2VsOwogICAgICAgICBicmVhazsKLSNlbmRpZgogICAgIH0KIAogICAgIGNv
bnN0IFFMaXN0PFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50PiYgcG9pbnRzID0gZXZlbnQtPnRvdWNo
UG9pbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2RlY2xh
cmF0aXZlLnBybyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZGVjbGFyYXRpdmUucHJv
CmluZGV4IDczNzkyODMzODY4YzIzMWZhOTRkYjY4YjU2MmY3NmVmNTAwZjE0YzcuLjA0ZjIyOThk
MGU4MjFiZmY4YTNiNGNhZmNmYWJmZGQ3NzkxNGIyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvcXQvZGVjbGFyYXRpdmUvZGVjbGFyYXRpdmUucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQv
ZGVjbGFyYXRpdmUvZGVjbGFyYXRpdmUucHJvCkBAIC0xMSw3ICsxMSw3IEBAIHB1YmxpY19hcGku
ZmlsZSA9IHB1YmxpYy5wcmkKIHB1YmxpY19hcGkubWFrZWZpbGUgPSBNYWtlZmlsZS5kZWNsYXJh
dGl2ZS5wdWJsaWMKIFNVQkRJUlMgKz0gcHVibGljX2FwaQogCi1oYXZlUXQoNSk6IW5vX3dlYmtp
dDIgeworIW5vX3dlYmtpdDIgewogICAgIGV4cGVyaW1lbnRhbF9hcGkuZmlsZSA9IGV4cGVyaW1l
bnRhbC9leHBlcmltZW50YWwucHJpCiAgICAgZXhwZXJpbWVudGFsX2FwaS5tYWtlZmlsZSA9IE1h
a2VmaWxlLmRlY2xhcmF0aXZlLmV4cGVyaW1lbnRhbAogICAgIFNVQkRJUlMgKz0gZXhwZXJpbWVu
dGFsX2FwaQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4u
Y3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCmluZGV4IDFkNDRi
ZTIzZmY1MDdhY2IzNjU4OTAzYjY4NDRkNjA4MTE5NDlmZWIuLmRiNzQ4OTUyYWI1MzA4Nzk4MGQ5
NDliYWE1NTY5N2MxZTQ4MjdjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFy
YXRpdmUvcGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdp
bi5jcHAKQEAgLTI1LDEzICsyNSw4IEBACiAjaW5jbHVkZSAicWRlY2xhcmF0aXZld2Vidmlld19w
LmgiCiAjZW5kaWYKIAotI2lmIChIQVZFKFFUNSkpCiAjaW5jbHVkZSA8UXRRbWwvcXFtbC5oPgog
I2luY2x1ZGUgPFF0UW1sL3FxbWxleHRlbnNpb25wbHVnaW4uaD4KLSNlbHNlCi0jaW5jbHVkZSA8
UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmUuaD4KLSNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3Fk
ZWNsYXJhdGl2ZWV4dGVuc2lvbnBsdWdpbi5oPgotI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBVkVf
V0VCS0lUMikKICNpbmNsdWRlICJwcml2YXRlL3FxdWlja3dlYnBhZ2VfcC5oIgpAQCAtNDYsMTIg
KzQxLDggQEAKIAogUVRfQkVHSU5fTkFNRVNQQUNFCiAKLSNpZiBRVF9WRVJTSU9OID49IDB4MDUw
MDAwCiBjbGFzcyBXZWJLaXRRbWxQbHVnaW4gOiBwdWJsaWMgUVFtbEV4dGVuc2lvblBsdWdpbiB7
CiAgICAgUV9QTFVHSU5fTUVUQURBVEEoSUlEICJvcmcucXQtcHJvamVjdC5RdC5RUW1sRXh0ZW5z
aW9uSW50ZXJmYWNlIiBGSUxFICJwbHVnaW4uanNvbiIpCi0jZWxzZQotY2xhc3MgV2ViS2l0UW1s
UGx1Z2luIDogcHVibGljIFFEZWNsYXJhdGl2ZUV4dGVuc2lvblBsdWdpbiB7Ci0jZW5kaWYKICAg
ICBRX09CSkVDVAogcHVibGljOgogI2lmIGRlZmluZWQoSEFWRV9XRUJLSVQyKQpAQCAtODgsNyAr
NzksMyBAQCBwdWJsaWM6CiBRVF9FTkRfTkFNRVNQQUNFCiAKICNpbmNsdWRlICJwbHVnaW4ubW9j
IgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDUwMDAwCi1RX0VYUE9SVF9QTFVHSU4yKHFtbHdlYmtp
dHBsdWdpbiwgUVRfUFJFUEVORF9OQU1FU1BBQ0UoV2ViS2l0UW1sUGx1Z2luKSk7Ci0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaSBiL1Nv
dXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaQppbmRleCAzNGM2NjM5OWY3OGI4
OTllZmMwM2YxZjRjOWNlOTZkYmUxNTk1YTQ2Li5lNWM0M2RiMDY1ZmJlMjkyZTVlZGNkYzRkYTky
MDdlZjVhODM0NDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3B1
YmxpYy5wcmkKKysrIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpCkBA
IC0yNCw5ICsyNCw3IEBAIGNvbnRhaW5zKFFUX0NPTkZJRywgcmVkdWNlX2V4cG9ydHMpOkNPTkZJ
RyArPSBoaWRlX3N5bWJvbHMKIAogd2luY2UqOkxJQlMgKz0gJCRRTUFLRV9MSUJTX0dVSQogCi1R
VCArPSB3ZWJraXQgd2Via2l0LXByaXZhdGUKLWhhdmVRdCg0KTogUVQgKz0gZGVjbGFyYXRpdmUK
LWhhdmVRdCg1KTogUVQgKz0gd2lkZ2V0cyBxdWljayBxdWljay1wcml2YXRlCitRVCArPSB3ZWJr
aXQgd2Via2l0LXByaXZhdGUgd2lkZ2V0cyBxdWljayBxdWljay1wcml2YXRlCiAKIGNvbnRhaW5z
KERFRklORVMsIEhBVkVfUVFVSUNLMT0xKSB7CiAgICAgU09VUkNFUyArPSBxZGVjbGFyYXRpdmV3
ZWJ2aWV3LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9y
bXBsdWdpbi9XZWJQbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9y
bXBsdWdpbi9XZWJQbHVnaW4uY3BwCmluZGV4IGZkZDk5MGY1N2Q4OWMwZjBjZjJkMzMyODhmZGNh
MjJiYTI5Njk5ZmEuLmM3MTc1MTE3N2NjYmRiY2FmZjQ0OTc1OWMwMzc0Y2IwZTk3N2YwYjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1
Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dl
YlBsdWdpbi5jcHAKQEAgLTMxNCw3ICszMTQsMyBAQCBRT2JqZWN0KiBXZWJQbHVnaW46OmNyZWF0
ZUV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiB9Ci0KLSNpZiBRVF9WRVJTSU9OIDwgUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQot
UV9FWFBPUlRfUExVR0lOMihwbGF0Zm9ybXBsdWdpbiwgV2ViUGx1Z2luKQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdp
bi5oIGIvU291cmNlL1dlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4u
aAppbmRleCA3NGJjMmVjY2MzYWRiYTlhZmE3MTk5ZDg1NjcxNGRiYTBmZWVlYzk4Li42M2E3NDlk
YWIzY2YyMjI5MGNlZTkyZWNkNjlhNGQwZTAwMjQ5OWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgKQEAgLTEzNyw5ICsx
MzcsNyBAQCBjbGFzcyBXZWJQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJLaXRQ
bGF0Zm9ybVBsdWdpbgogewogICAgIFFfT0JKRUNUCiAgICAgUV9JTlRFUkZBQ0VTKFFXZWJLaXRQ
bGF0Zm9ybVBsdWdpbikKLSNpZiBRVF9WRVJTSU9OID49IDB4MDUwMDAwCiAgICAgUV9QTFVHSU5f
TUVUQURBVEEoSUlEICJvcmcucXQtcHJvamVjdC5RdFdlYktpdC5QbGF0Zm9ybVBsdWdpbkludGVy
ZmFjZSIpCi0jZW5kaWYKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNp
b24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3Q7CiAgICAgdmlydHVhbCBRT2JqZWN0KiBjcmVh
dGVFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybyBi
L1NvdXJjZS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4u
cHJvCmluZGV4IGI1ZGE3MWNhMGFhYmE2NGYyYzYwMDJjZmMzZWZlZDg1OTE5NTA4M2UuLmZjNTMz
ZDNiYjUzNjlmOWU4NTQ3NmI5NTIyNzYyMDRiYjgwYzYxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4u
cHJvCkBAIC0xLDggKzEsNyBAQAogVEVNUExBVEUgPSBsaWIKIFRBUkdFVCA9IHBsYXRmb3JtcGx1
Z2luCiAKLVFUICs9IGNvcmUgZ3VpCi1oYXZlUXQoNSk6IFFUICs9IHdpZGdldHMKK1FUICs9IGNv
cmUgZ3VpIHdpZGdldHMKIENPTkZJRyArPSBwbHVnaW4KIAogIyMgbG9hZCBtb2JpbGl0eWNvbmZp
ZyBpZiBtb2JpbGl0eSBpcyBhdmFpbGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
dGVzdHMvcW9iamVjdGJyaWRnZS90c3RfcW9iamVjdGJyaWRnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3F0L3Rlc3RzL3FvYmplY3RicmlkZ2UvdHN0X3FvYmplY3RicmlkZ2UuY3BwCmluZGV4IDI5MWY5
YjI5NGM0OTgwY2U3YWQ2ZGNiZGRlZDNkZWUxZDVhNTdjNzcuLmNiMGZkYjkxZTIzNTMzN2Y0M2M0
Mjc5OTI4MzgzMWYyZTg2MWJmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMv
cW9iamVjdGJyaWRnZS90c3RfcW9iamVjdGJyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9x
dC90ZXN0cy9xb2JqZWN0YnJpZGdlL3RzdF9xb2JqZWN0YnJpZGdlLmNwcApAQCAtMzcsMTIgKzM3
LDYgQEAgUV9ERUNMQVJFX01FVEFUWVBFKFF0OjpCcnVzaFN0eWxlKQogUV9ERUNMQVJFX01FVEFU
WVBFKFFWYXJpYW50TGlzdCkKIFFfREVDTEFSRV9NRVRBVFlQRShRVmFyaWFudE1hcCkKIAotI2lm
IFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQotI2RlZmluZSBPd25lcnNo
aXBDbGFzcyBRV2ViRnJhbWUKLSNlbHNlCi0jZGVmaW5lIE93bmVyc2hpcENsYXNzIFFTY3JpcHRF
bmdpbmUKLSNlbmRpZgotCiBjbGFzcyBNeVFPYmplY3QgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAg
UV9PQkpFQ1QKIApAQCAtMjAwMCw3ICsxOTk0LDcgQEAgdm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6
YXJyYXlPYmplY3RFbnVtZXJhYmxlKCkKICAgICBRV2ViUGFnZSBwYWdlOwogICAgIFFXZWJGcmFt
ZSogZnJhbWUgPSBwYWdlLm1haW5GcmFtZSgpOwogICAgIFFPYmplY3QqIHFvYmplY3QgPSBuZXcg
U3RyaW5nTGlzdFRlc3RPYmplY3QoKTsKLSAgICBmcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93
T2JqZWN0KCJ0ZXN0IiwgcW9iamVjdCwgT3duZXJzaGlwQ2xhc3M6OlNjcmlwdE93bmVyc2hpcCk7
CisgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIHFvYmplY3Qs
IFFXZWJGcmFtZTo6U2NyaXB0T3duZXJzaGlwKTsKIAogICAgIGNvbnN0IFFTdHJpbmcgc2NyaXB0
KCJ2YXIgc3RyaW5nQXJyYXkgPSB0ZXN0LnN0cmluZ0xpc3QoKTsiCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgInZhciByZXN1bHQgPSAnJzsiCkBAIC0yMDQxLDcgKzIwMzUsNyBAQCB2b2lkIHRz
dF9RT2JqZWN0QnJpZGdlOjpvd25lcnNoaXAoKQogICAgICAgICB7CiAgICAgICAgICAgICBRV2Vi
UGFnZSBwYWdlOwogICAgICAgICAgICAgUVdlYkZyYW1lKiBmcmFtZSA9IHBhZ2UubWFpbkZyYW1l
KCk7Ci0gICAgICAgICAgICBmcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJ0ZXN0
IiwgcHRyLmRhdGEoKSwgT3duZXJzaGlwQ2xhc3M6OlNjcmlwdE93bmVyc2hpcCk7CisgICAgICAg
ICAgICBmcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJ0ZXN0IiwgcHRyLmRhdGEo
KSwgUVdlYkZyYW1lOjpTY3JpcHRPd25lcnNoaXApOwogICAgICAgICB9CiAgICAgICAgIFFWRVJJ
RlkoIXB0cik7CiAgICAgfQpAQCAtMjA1Miw3ICsyMDQ2LDcgQEAgdm9pZCB0c3RfUU9iamVjdEJy
aWRnZTo6b3duZXJzaGlwKCkKICAgICAgICAgewogICAgICAgICAgICAgUVdlYlBhZ2UgcGFnZTsK
ICAgICAgICAgICAgIFFXZWJGcmFtZSogZnJhbWUgPSBwYWdlLm1haW5GcmFtZSgpOwotICAgICAg
ICAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIHB0ci5kYXRh
KCksIE93bmVyc2hpcENsYXNzOjpRdE93bmVyc2hpcCk7CisgICAgICAgICAgICBmcmFtZS0+YWRk
VG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJ0ZXN0IiwgcHRyLmRhdGEoKSwgUVdlYkZyYW1lOjpR
dE93bmVyc2hpcCk7CiAgICAgICAgIH0KICAgICAgICAgUVZFUklGWShwdHIuZGF0YSgpID09IGJl
Zm9yZSk7CiAgICAgICAgIGRlbGV0ZSBwdHIuZGF0YSgpOwpAQCAtMjA2Miw3ICsyMDU2LDcgQEAg
dm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6b3duZXJzaGlwKCkKICAgICAgICAgUU9iamVjdCogY2hp
bGQgPSBuZXcgUU9iamVjdChwYXJlbnQpOwogICAgICAgICBRV2ViUGFnZSBwYWdlOwogICAgICAg
ICBRV2ViRnJhbWUqIGZyYW1lID0gcGFnZS5tYWluRnJhbWUoKTsKLSAgICAgICAgZnJhbWUtPmFk
ZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIGNoaWxkLCBPd25lcnNoaXBDbGFzczo6
UXRPd25lcnNoaXApOworICAgICAgICBmcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0
KCJ0ZXN0IiwgY2hpbGQsIFFXZWJGcmFtZTo6UXRPd25lcnNoaXApOwogICAgICAgICBRVmFyaWFu
dCB2ID0gZnJhbWUtPmV2YWx1YXRlSmF2YVNjcmlwdCgidGVzdCIpOwogICAgICAgICBRQ09NUEFS
RShxdmFyaWFudF9jYXN0PFFPYmplY3QqPih2KSwgY2hpbGQpOwogICAgICAgICBkZWxldGUgcGFy
ZW50OwpAQCAtMjA3NSw3ICsyMDY5LDcgQEAgdm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6b3duZXJz
aGlwKCkKICAgICAgICAgewogICAgICAgICAgICAgUVdlYlBhZ2UgcGFnZTsKICAgICAgICAgICAg
IFFXZWJGcmFtZSogZnJhbWUgPSBwYWdlLm1haW5GcmFtZSgpOwotICAgICAgICAgICAgZnJhbWUt
PmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIHB0ci5kYXRhKCksIE93bmVyc2hp
cENsYXNzOjpBdXRvT3duZXJzaGlwKTsKKyAgICAgICAgICAgIGZyYW1lLT5hZGRUb0phdmFTY3Jp
cHRXaW5kb3dPYmplY3QoInRlc3QiLCBwdHIuZGF0YSgpLCBRV2ViRnJhbWU6OkF1dG9Pd25lcnNo
aXApOwogICAgICAgICB9CiAgICAgICAgIC8vIG5vIHBhcmVudCwgc28gaXQgc2hvdWxkIGJlIGxp
a2UgU2NyaXB0T3duZXJzaGlwCiAgICAgICAgIFFWRVJJRlkoIXB0cik7CkBAIC0yMDg3LDcgKzIw
ODEsNyBAQCB2b2lkIHRzdF9RT2JqZWN0QnJpZGdlOjpvd25lcnNoaXAoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBRV2ViUGFnZSBwYWdlOwogICAgICAgICAgICAgUVdlYkZyYW1lKiBmcmFtZSA9
IHBhZ2UubWFpbkZyYW1lKCk7Ci0gICAgICAgICAgICBmcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2lu
ZG93T2JqZWN0KCJ0ZXN0IiwgY2hpbGQuZGF0YSgpLCBPd25lcnNoaXBDbGFzczo6QXV0b093bmVy
c2hpcCk7CisgICAgICAgICAgICBmcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJ0
ZXN0IiwgY2hpbGQuZGF0YSgpLCBRV2ViRnJhbWU6OkF1dG9Pd25lcnNoaXApOwogICAgICAgICB9
CiAgICAgICAgIC8vIGhhcyBwYXJlbnQsIHNvIGl0IHNob3VsZCBiZSBsaWtlIFF0T3duZXJzaGlw
CiAgICAgICAgIFFWRVJJRlkoY2hpbGQpOwpAQCAtMjEyOSw3ICsyMTIzLDcgQEAgdm9pZCB0c3Rf
UU9iamVjdEJyaWRnZTo6cU9iamVjdFdyYXBwZXJXaXRoU2FtZUlkZW50aXR5KCkKICAgICBRV2Vi
RnJhbWUqIG1haW5GcmFtZSA9IG1fdmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKTsKICAgICBRQ09N
UEFSRShtYWluRnJhbWUtPnRvUGxhaW5UZXh0KCksIFFTdHJpbmcoInRlc3QiKSk7CiAKLSAgICBt
YWluRnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIG5ldyBUZXN0RmFj
dG9yeSwgT3duZXJzaGlwQ2xhc3M6OlNjcmlwdE93bmVyc2hpcCk7CisgICAgbWFpbkZyYW1lLT5h
ZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoInRlc3QiLCBuZXcgVGVzdEZhY3RvcnksIFFXZWJG
cmFtZTo6U2NyaXB0T3duZXJzaGlwKTsKIAogICAgIG1haW5GcmFtZS0+ZXZhbHVhdGVKYXZhU2Ny
aXB0KCJ0cmlnZ2VyQnVnKCk7Iik7CiAgICAgUUNPTVBBUkUobWFpbkZyYW1lLT50b1BsYWluVGV4
dCgpLCBRU3RyaW5nKCJ0ZXN0MSIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVz
dHMvdGVzdHMucHJpIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy90ZXN0cy5wcmkKaW5kZXggOTBj
NjFmMDkzZTllNDY5MWEwMjliNDNiYmQxNWJhOGJmMjZhZjc0MS4uNTQzN2JhYWNjOWNhYmFjNjEz
ZDU3NDkxN2YyNDM0MGQ4MzJiYmFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC90ZXN0
cy90ZXN0cy5wcmkKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy90ZXN0cy5wcmkKQEAgLTE2
LDEwICsxNiw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFBXRCBcCiAgICAgJCRQV0QvLi4v
QXBpCiAKLVFUICs9IHRlc3RsaWIgbmV0d29yayB3ZWJraXQKLWhhdmVRdCg1KTogUVQgKz0gd2lk
Z2V0cwotCi1oYXZlUXQoNCk6IGhhdmVRdE1vZHVsZShkZWNsYXJhdGl2ZSk6IFFUICs9IGRlY2xh
cmF0aXZlCitRVCArPSB0ZXN0bGliIG5ldHdvcmsgd2Via2l0IHdpZGdldHMKIAogIyBUaGlzIGRl
ZmluZSBpcyB1c2VkIGJ5IHNvbWUgdGVzdHMgdG8gbG9vayB1cCByZXNvdXJjZXMgaW4gdGhlIHNv
dXJjZSB0cmVlCiBERUZJTkVTICs9IFRFU1RTX1NPVVJDRV9ESVI9XFxcIiQkUFdEL1xcXCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvdXRpbC5oIGIvU291cmNlL1dlYktpdC9x
dC90ZXN0cy91dGlsLmgKaW5kZXggY2ZhMjJlYjA4MzA5ZWY4MGI3ZTMxN2RkZDNlNjc0N2VjNTNi
M2MwOC4uMjg2OTQ0MGNiYzlmMzE2MTYyOGIxZWU0YTg5MzBhMjI3YTczYmVkOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC90ZXN0cy91dGlsLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC90
ZXN0cy91dGlsLmgKQEAgLTUzLDM3ICs1Myw0IEBAIHN0YXRpYyBib29sIHdhaXRGb3JTaWduYWwo
UU9iamVjdCogb2JqLCBjb25zdCBjaGFyKiBzaWduYWwsIGludCB0aW1lb3V0ID0gMTAwMDApCiAg
ICAgcmV0dXJuIHRpbWVvdXRTcHkuaXNFbXB0eSgpOwogfQogCi0jaWYgIShkZWZpbmVkKEhBVkVf
UVQ1KSAmJiBIQVZFX1FUNSkKLS8vIFdpbGwgdHJ5IHRvIHdhaXQgZm9yIHRoZSBjb25kaXRpb24g
d2hpbGUgYWxsb3dpbmcgZXZlbnQgcHJvY2Vzc2luZwotI2RlZmluZSBRVFJZX1ZFUklGWShfX2V4
cHIpIFwKLSAgICBkbyB7IFwKLSAgICAgICAgY29uc3QgaW50IF9fc3RlcCA9IDUwOyBcCi0gICAg
ICAgIGNvbnN0IGludCBfX3RpbWVvdXQgPSA1MDAwOyBcCi0gICAgICAgIGlmICghKF9fZXhwcikp
IHsgXAotICAgICAgICAgICAgUVRlc3Q6OnFXYWl0KDApOyBcCi0gICAgICAgIH0gXAotICAgICAg
ICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3RpbWVvdXQgJiYgIShfX2V4cHIpOyBfX2krPV9f
c3RlcCkgeyBcCi0gICAgICAgICAgICBRVGVzdDo6cVdhaXQoX19zdGVwKTsgXAotICAgICAgICB9
IFwKLSAgICAgICAgUVZFUklGWShfX2V4cHIpOyBcCi0gICAgfSB3aGlsZSgwKQotCi0vLyBXaWxs
IHRyeSB0byB3YWl0IGZvciB0aGUgY29uZGl0aW9uIHdoaWxlIGFsbG93aW5nIGV2ZW50IHByb2Nl
c3NpbmcKLSNkZWZpbmUgUVRSWV9DT01QQVJFKF9fZXhwciwgX19leHBlY3RlZCkgXAotICAgIGRv
IHsgXAotICAgICAgICBjb25zdCBpbnQgX19zdGVwID0gNTA7IFwKLSAgICAgICAgY29uc3QgaW50
IF9fdGltZW91dCA9IDUwMDA7IFwKLSAgICAgICAgaWYgKChfX2V4cHIpICE9IChfX2V4cGVjdGVk
KSkgeyBcCi0gICAgICAgICAgICBRVGVzdDo6cVdhaXQoMCk7IFwKLSAgICAgICAgfSBcCi0gICAg
ICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fdGltZW91dCAmJiAoKF9fZXhwcikgIT0gKF9f
ZXhwZWN0ZWQpKTsgX19pKz1fX3N0ZXApIHsgXAotICAgICAgICAgICAgUVRlc3Q6OnFXYWl0KF9f
c3RlcCk7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIFFDT01QQVJFKF9fZXhwciwgX19leHBlY3Rl
ZCk7IFwKLSAgICB9IHdoaWxlKDApCi0KLS8vIENvbXBhdGliaWxpdHkgZm9yIFF0NQotI2RlZmlu
ZSBXX1FTS0lQKGEsIGIpIFFTS0lQKGEsIGIpCi0jZWxzZQogI2RlZmluZSBXX1FTS0lQKGEsIGIp
IFFTS0lQKGEpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IDFiYTAyOGYyM2M1ZmQ0ZDhhNTEwMDI0MjdiMTc2OGI4
YzkwOGE3NDUuLjFmZTAyMzA5NDQxYzA2YzNjNTgxMzU5NDc0MjEzYzlmNDdmOTlmYjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApA
QCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFuZGxlci5oIgogI2lu
Y2x1ZGUgIlF0V2ViUGFnZUxvYWRDbGllbnQuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VQb2xpY3lD
bGllbnQuaCIKLSNpbmNsdWRlICJVdGlsc1F0LmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRM
aXN0LmgiCiAjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKICNpbmNsdWRlICJXZWJJbnNw
ZWN0b3JTZXJ2ZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvdGVzdHMvcHVibGljYXBpL3RzdF9wdWJsaWNhcGkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9wdWJsaWNhcGkvdHN0X3B1YmxpY2FwaS5jcHAKaW5kZXggMGUz
YjMzY2Y3MDA5ZGJlYWRmMjU1NGFjNDE0YTQwYzAwNTVlMGI0NS4uMTJlMGFiOTAzNmFmNjllMTNl
MmM0NGFhNWJlZWY4ZTdlM2I4ZjUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC90ZXN0cy9wdWJsaWNhcGkvdHN0X3B1YmxpY2FwaS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9wdWJsaWNhcGkvdHN0X3B1YmxpY2FwaS5j
cHAKQEAgLTE0NCwxMSArMTQ0LDcgQEAgc3RhdGljIHZvaWQgZ2F0aGVyQVBJKGNvbnN0IFFTdHJp
bmcmIHByZWZpeCwgY29uc3QgUU1ldGFNZXRob2QmIG1ldGhvZCwgUVN0cmluZ0wKIHsKICAgICBp
ZiAobWV0aG9kLmFjY2VzcygpICE9IFFNZXRhTWV0aG9kOjpQcml2YXRlKSB7CiAgICAgICAgIGNv
bnN0IGNoYXIqIG1ldGhvZFR5cGVOYW1lID0gISFzdHJsZW4obWV0aG9kLnR5cGVOYW1lKCkpID8g
bWV0aG9kLnR5cGVOYW1lKCkgOiAidm9pZCI7Ci0jaWYgSEFWRShRVDUpCiAgICAgICAgICpvdXRw
dXQgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiJTElMiAtLT4gJTMiKS5hcmcocHJlZml4KS5hcmco
UVN0cmluZzo6ZnJvbUxhdGluMShtZXRob2QubWV0aG9kU2lnbmF0dXJlKCkpKS5hcmcoUVN0cmlu
Zzo6ZnJvbUxhdGluMShtZXRob2RUeXBlTmFtZSkpOwotI2Vsc2UKLSAgICAgICAgKm91dHB1dCA8
PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIlMSUyIC0tPiAlMyIpLmFyZyhwcmVmaXgpLmFyZyhtZXRo
b2Quc2lnbmF0dXJlKCkpLmFyZyhtZXRob2RUeXBlTmFtZSk7Ci0jZW5kaWYKIAogICAgICAgICBj
aGVja0tub3duVHlwZShtZXRob2RUeXBlTmFtZSk7CiAgICAgICAgIGZvcmVhY2ggKFFCeXRlQXJy
YXkgcGFyYW1UeXBlLCBtZXRob2QucGFyYW1ldGVyVHlwZXMoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKaW5kZXgg
MTdkNTQ5M2IwYWIzYWU5NDg0YzRiYWIwOGZkN2Y4YWI1M2JhY2Y3NC4uNjEyOGRiNGNmY2I5MThh
NzQ4N2I2ZjkyMWQ0ZTI4N2I0ZjBiMmM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKQEAgLTc2LDQgKzc2LDQg
QEAgbGludXgtKjogewogCiBRVCArPSBxbWwgcXVpY2sKIAotY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX0dFT0xPQ0FUSU9OPTEpOmhhdmVRdCg1KTogUVQgKz0gbG9jYXRpb24KK2NvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9HRU9MT0NBVElPTj0xKTogUVQgKz0gbG9jYXRpb24KZGlmZiAtLWdpdCBh
L1NvdXJjZS9hcGkucHJpIGIvU291cmNlL2FwaS5wcmkKaW5kZXggNjE5ODRkMjQ0NzZmMWQ4NDky
M2I3YTAxYzJkYjlkNDU0MzkxMTEzYy4uN2U1M2NjOTlkNGExYjg3MTA1MTBiZGRjYWU1NWI3ZDJi
MWVmZjk4NSAxMDA2NDQKLS0tIGEvU291cmNlL2FwaS5wcmkKKysrIGIvU291cmNlL2FwaS5wcmkK
QEAgLTksNzEgKzksNjQgQEAgVEFSR0VUID0gUXRXZWJLaXQKIAogV0VCS0lUX0RFU1RESVIgPSAk
JHtST09UX0JVSUxEX0RJUn0vbGliCiAKLWhhdmVRdCg1KSB7Ci0gICAgIyBVc2UgUXQ1J3MgbW9k
dWxlIHN5c3RlbQotICAgIGxvYWQocXRfYnVpbGRfY29uZmlnKQotICAgIE1PRFVMRSA9IHdlYmtp
dAotICAgIE1PRFVMRV9QUkkgPSAuLi9Ub29scy9xbWFrZS9xdF93ZWJraXQucHJpCi0KLSAgICAj
IC0tLS0tLS0tLS0tLS0tLS0gQ3VzdG9tIGRldmVsb3Blci1idWlsZCBoYW5kbGluZyAtLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgIwotICAgICMgVGhlIGFzc3VtcHRpb24gZm9yIFF0IGRldmVsb3Bl
ciBidWlsZHMgaXMgdGhhdCB0aGUgbW9kdWxlIGZpbGUKLSAgICAjIHdpbGwgYmUgcHV0IGludG8g
cXRiYXNlL21rc3BlY3MvbW9kdWxlcywgYW5kIHRoZSBsaWJyYXJpZXMgaW50bwotICAgICMgcXRi
YXNlL2xpYiwgd2l0aCBycGF0aC9pbnN0YWxsX25hbWUgc2V0IHRvIHRoZSBRdCBsaWIgZGlyLgot
ICAgICMKLSAgICAjIEZvciBXZWJLaXQgd2UgZG9uJ3Qgd2FudCB0aGF0IGJlaGF2aW9yIGZvciB0
aGUgbGlicmFyaWVzLCBhcyB3ZSB3YW50Ci0gICAgIyB0aGVtIHRvIGJlIHNlbGYtY29udGFpbmVk
IGluIHRoZSBXZWJLaXQgYnVpbGQgZGlyLgotICAgICMKLSAgICBDT05GSUcgKz0gZm9yY2VfaW5k
ZXBlbmRlbnQKLQotICAgIEJBU0VfVEFSR0VUID0gJCRUQVJHRVQKLQotICAgIGxvYWQocXRfbW9k
dWxlX2NvbmZpZykKLQotICAgICMgTWFrZSBzdXJlIHRoZSBtb2R1bGUgY29uZmlnIGRvZXNuJ3Qg
b3ZlcnJpZGUgb3VyIHByZWZlcnJlZCBidWlsZCBjb25maWcuCi0gICAgZGVidWdfYW5kX3JlbGVh
c2U6aWYoIWRlYnVnfCFyZWxlYXNlKSB7Ci0gICAgICAgICMgUmVtb3ZpbmcgZGVidWdfYW5kX3Jl
bGVhc2UgY2F1c2VzIGlzc3VlcyB3aXRoIGxpYiBzdWZmaXhlcyB3aGVuIGJ1aWxkaW5nIGRlYnVn
IG9uIFdpbmRvd3MuCi0gICAgICAgICMgV29yayBhcm91bmQgaXQgYnkgb25seSByZW1vdmluZyBi
dWlsZF9hbGwsIGFuZCBzdGlsbCBjcmVhdGUgdGhlIE1ha2VmaWxlcyBmb3IgYm90aCBjb25maWd1
cmF0aW9ucy4KLSAgICAgICAgd2luMzIqOiBDT05GSUcgLT0gYnVpbGRfYWxsCi0gICAgICAgIGVs
c2U6IENPTkZJRyAtPSBkZWJ1Z19hbmRfcmVsZWFzZQotICAgIH0KKyMgVXNlIFF0NSdzIG1vZHVs
ZSBzeXN0ZW0KK2xvYWQocXRfYnVpbGRfY29uZmlnKQorTU9EVUxFID0gd2Via2l0CitNT0RVTEVf
UFJJID0gLi4vVG9vbHMvcW1ha2UvcXRfd2Via2l0LnByaQogCi0gICAgIyBBbGxvdyBkb2luZyBh
IGRlYnVnLW9ubHkgYnVpbGQgb2YgV2ViS2l0IChub3Qgc3VwcG9ydGVkIGJ5IFF0KQotICAgIG1h
Y3g6IWRlYnVnX2FuZF9yZWxlYXNlOmRlYnVnOiBUQVJHRVQgPSAkJEJBU0VfVEFSR0VUCi0KLSAg
ICAjIE1ha2Ugc3VyZSB0aGUgaW5zdGFsbF9uYW1lIG9mIHRoZSBRdFdlYktpdCBsaWJyYXJ5IHBv
aW50IHRvIHdlYmtpdAotICAgIG1hY3ggewotICAgICAgICAjIFdlIGRvIG91ciBvd24gYWJzb2x1
dGUgcGF0aCBzbyB0aGF0IHdlIGNhbiB0cmljayBxbWFrZSBpbnRvCi0gICAgICAgICMgdXNpbmcg
dGhlIHdlYmtpdCBidWlsZCBwYXRoIGluc3RlYWQgb2YgdGhlIFF0IGluc3RhbGwgcGF0aC4KLSAg
ICAgICAgQ09ORklHIC09IGFic29sdXRlX2xpYnJhcnlfc29uYW1lCi0gICAgICAgIFFNQUtFX0xG
TEFHU19TT05BTUUgPSAkJFFNQUtFX0xGTEFHU19TT05BTUUkJFdFQktJVF9ERVNURElSLwotCi0g
ICAgICAgICFkZWJ1Z19hbmRfcmVsZWFzZXxidWlsZF9wYXNzIHsKLSAgICAgICAgICAgICMgV2Ug
YWxzbyBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgaW5zdGFsbF9uYW1lIGlzIGNvcnJlY3Qgd2hlbgot
ICAgICAgICAgICAgIyB0aGUgbGlicmFyeSBpcyBpbnN0YWxsZWQuCi0gICAgICAgICAgICBjaGFu
Z2VfaW5zdGFsbF9uYW1lLmRlcGVuZHMgPSBpbnN0YWxsX3RhcmdldAotCi0gICAgICAgICAgICAj
IFRoZSBpbnN0YWxsIHJ1bGVzIGdlbmVyYXRlZCBieSBxbWFrZSBmb3IgZnJhbWV3b3JrcyBhcmUg
YnVzdGVkIGluCi0gICAgICAgICAgICAjIHRoYXQgYm90aCB0aGUgZGVidWcgYW5kIHRoZSByZWxl
YXNlIG1ha2VmaWxlIGNvcHkgUXRXZWJLaXQuZnJhbWV3b3JrCi0gICAgICAgICAgICAjIGludG8g
dGhlIGluc3RhbGwgZGlyLCBzbyB3aGF0ZXZlciBjaGFuZ2VzIHdlIGRpZCB0byB0aGUgcmVsZWFz
ZSBsaWJyYXJ5Ci0gICAgICAgICAgICAjIHdpbGwgZ2V0IG92ZXJ3cml0dGVuIHdoZW4gdGhlIGRl
YnVnIGxpYnJhcnkgaXMgaW5zdGFsbGVkLiBXZSB3b3JrIGFyb3VuZAotICAgICAgICAgICAgIyB0
aGF0IGJ5IHJ1bm5pbmcgaW5zdGFsbF9uYW1lIG9uIGJvdGgsIGZvciBib3RoIGNvbmZpZ3MuCi0g
ICAgICAgICAgICBjaGFuZ2VfaW5zdGFsbF9uYW1lLmNvbW1hbmRzID0gZnJhbWV3b3JrX2Rpcj1c
JFwkKGRpcm5hbWUgJChUQVJHRVREKSk7IFwKLSAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBc
JFwkKGxzICQkW1FUX0lOU1RBTExfTElCU10vXCRcJGZyYW1ld29ya19kaXIvJCRCQVNFX1RBUkdF
VCopOyBkbyBcCi0gICAgICAgICAgICAgICAgICAgIGluc3RhbGxfbmFtZV90b29sIC1pZCBcJFwk
ZmlsZSBcJFwkZmlsZTsgXAotICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgIGRlZmF1
bHRfaW5zdGFsbF90YXJnZXQudGFyZ2V0ID0gaW5zdGFsbAotICAgICAgICAgICAgZGVmYXVsdF9p
bnN0YWxsX3RhcmdldC5kZXBlbmRzICs9IGNoYW5nZV9pbnN0YWxsX25hbWUKLQotICAgICAgICAg
ICAgUU1BS0VfRVhUUkFfVEFSR0VUUyArPSBjaGFuZ2VfaW5zdGFsbF9uYW1lIGRlZmF1bHRfaW5z
dGFsbF90YXJnZXQKLSAgICAgICAgfQotICAgIH0KLX0gZWxzZSB7Ci0gICAgVkVSU0lPTiA9ICQk
UVRfVkVSU0lPTgotICAgIERFU1RESVIgPSAkJFdFQktJVF9ERVNURElSCisjIC0tLS0tLS0tLS0t
LS0tLS0gQ3VzdG9tIGRldmVsb3Blci1idWlsZCBoYW5kbGluZyAtLS0tLS0tLS0tLS0tLS0tLS0t
CisjCisjIFRoZSBhc3N1bXB0aW9uIGZvciBRdCBkZXZlbG9wZXIgYnVpbGRzIGlzIHRoYXQgdGhl
IG1vZHVsZSBmaWxlCisjIHdpbGwgYmUgcHV0IGludG8gcXRiYXNlL21rc3BlY3MvbW9kdWxlcywg
YW5kIHRoZSBsaWJyYXJpZXMgaW50bworIyBxdGJhc2UvbGliLCB3aXRoIHJwYXRoL2luc3RhbGxf
bmFtZSBzZXQgdG8gdGhlIFF0IGxpYiBkaXIuCisjCisjIEZvciBXZWJLaXQgd2UgZG9uJ3Qgd2Fu
dCB0aGF0IGJlaGF2aW9yIGZvciB0aGUgbGlicmFyaWVzLCBhcyB3ZSB3YW50CisjIHRoZW0gdG8g
YmUgc2VsZi1jb250YWluZWQgaW4gdGhlIFdlYktpdCBidWlsZCBkaXIuCisjCitDT05GSUcgKz0g
Zm9yY2VfaW5kZXBlbmRlbnQKKworQkFTRV9UQVJHRVQgPSAkJFRBUkdFVAorCitsb2FkKHF0X21v
ZHVsZV9jb25maWcpCisKKyMgTWFrZSBzdXJlIHRoZSBtb2R1bGUgY29uZmlnIGRvZXNuJ3Qgb3Zl
cnJpZGUgb3VyIHByZWZlcnJlZCBidWlsZCBjb25maWcuCitkZWJ1Z19hbmRfcmVsZWFzZTppZigh
ZGVidWd8IXJlbGVhc2UpIHsKKyAgICAjIFJlbW92aW5nIGRlYnVnX2FuZF9yZWxlYXNlIGNhdXNl
cyBpc3N1ZXMgd2l0aCBsaWIgc3VmZml4ZXMgd2hlbiBidWlsZGluZyBkZWJ1ZyBvbiBXaW5kb3dz
LgorICAgICMgV29yayBhcm91bmQgaXQgYnkgb25seSByZW1vdmluZyBidWlsZF9hbGwsIGFuZCBz
dGlsbCBjcmVhdGUgdGhlIE1ha2VmaWxlcyBmb3IgYm90aCBjb25maWd1cmF0aW9ucy4KKyAgICB3
aW4zMio6IENPTkZJRyAtPSBidWlsZF9hbGwKKyAgICBlbHNlOiBDT05GSUcgLT0gZGVidWdfYW5k
X3JlbGVhc2UKIH0KIAotcnVuU3luY1F0KCkgIyBHZW5lcmF0ZSBmb3J3YXJkaW5nIGhlYWRlcnMg
Zm9yIHRoZSBRdFdlYktpdCBBUEkKKyMgQWxsb3cgZG9pbmcgYSBkZWJ1Zy1vbmx5IGJ1aWxkIG9m
IFdlYktpdCAobm90IHN1cHBvcnRlZCBieSBRdCkKK21hY3g6IWRlYnVnX2FuZF9yZWxlYXNlOmRl
YnVnOiBUQVJHRVQgPSAkJEJBU0VfVEFSR0VUCisKKyMgTWFrZSBzdXJlIHRoZSBpbnN0YWxsX25h
bWUgb2YgdGhlIFF0V2ViS2l0IGxpYnJhcnkgcG9pbnQgdG8gd2Via2l0CittYWN4IHsKKyAgICAj
IFdlIGRvIG91ciBvd24gYWJzb2x1dGUgcGF0aCBzbyB0aGF0IHdlIGNhbiB0cmljayBxbWFrZSBp
bnRvCisgICAgIyB1c2luZyB0aGUgd2Via2l0IGJ1aWxkIHBhdGggaW5zdGVhZCBvZiB0aGUgUXQg
aW5zdGFsbCBwYXRoLgorICAgIENPTkZJRyAtPSBhYnNvbHV0ZV9saWJyYXJ5X3NvbmFtZQorICAg
IFFNQUtFX0xGTEFHU19TT05BTUUgPSAkJFFNQUtFX0xGTEFHU19TT05BTUUkJFdFQktJVF9ERVNU
RElSLworCisgICAgIWRlYnVnX2FuZF9yZWxlYXNlfGJ1aWxkX3Bhc3MgeworICAgICAgICAjIFdl
IGFsc28gaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGluc3RhbGxfbmFtZSBpcyBjb3JyZWN0IHdoZW4K
KyAgICAgICAgIyB0aGUgbGlicmFyeSBpcyBpbnN0YWxsZWQuCisgICAgICAgIGNoYW5nZV9pbnN0
YWxsX25hbWUuZGVwZW5kcyA9IGluc3RhbGxfdGFyZ2V0CisKKyAgICAgICAgIyBUaGUgaW5zdGFs
bCBydWxlcyBnZW5lcmF0ZWQgYnkgcW1ha2UgZm9yIGZyYW1ld29ya3MgYXJlIGJ1c3RlZCBpbgor
ICAgICAgICAjIHRoYXQgYm90aCB0aGUgZGVidWcgYW5kIHRoZSByZWxlYXNlIG1ha2VmaWxlIGNv
cHkgUXRXZWJLaXQuZnJhbWV3b3JrCisgICAgICAgICMgaW50byB0aGUgaW5zdGFsbCBkaXIsIHNv
IHdoYXRldmVyIGNoYW5nZXMgd2UgZGlkIHRvIHRoZSByZWxlYXNlIGxpYnJhcnkKKyAgICAgICAg
IyB3aWxsIGdldCBvdmVyd3JpdHRlbiB3aGVuIHRoZSBkZWJ1ZyBsaWJyYXJ5IGlzIGluc3RhbGxl
ZC4gV2Ugd29yayBhcm91bmQKKyAgICAgICAgIyB0aGF0IGJ5IHJ1bm5pbmcgaW5zdGFsbF9uYW1l
IG9uIGJvdGgsIGZvciBib3RoIGNvbmZpZ3MuCisgICAgICAgIGNoYW5nZV9pbnN0YWxsX25hbWUu
Y29tbWFuZHMgPSBmcmFtZXdvcmtfZGlyPVwkXCQoZGlybmFtZSAkKFRBUkdFVEQpKTsgXAorICAg
ICAgICAgICAgZm9yIGZpbGUgaW4gXCRcJChscyAkJFtRVF9JTlNUQUxMX0xJQlNdL1wkXCRmcmFt
ZXdvcmtfZGlyLyQkQkFTRV9UQVJHRVQqKTsgZG8gXAorICAgICAgICAgICAgICAgIGluc3RhbGxf
bmFtZV90b29sIC1pZCBcJFwkZmlsZSBcJFwkZmlsZTsgXAorICAgICAgICAgICAgZG9uZQorICAg
ICAgICBkZWZhdWx0X2luc3RhbGxfdGFyZ2V0LnRhcmdldCA9IGluc3RhbGwKKyAgICAgICAgZGVm
YXVsdF9pbnN0YWxsX3RhcmdldC5kZXBlbmRzICs9IGNoYW5nZV9pbnN0YWxsX25hbWUKKworICAg
ICAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IGNoYW5nZV9pbnN0YWxsX25hbWUgZGVmYXVsdF9p
bnN0YWxsX3RhcmdldAorICAgIH0KK30KIAogV0VCS0lUICs9IHd0ZgogCkBAIC05MSw1MiArODQs
MyBAQCBXRUJLSVQgKz0gd2ViY29yZQogfQogCiAhbm9fd2Via2l0MTogV0VCS0lUICs9IHdlYmtp
dDEKLQotIyAtLS0tLS0tLS0tLS0tIEluc3RhbGwgcnVsZXMgLS0tLS0tLS0tLS0tLQotCi1oYXZl
UXQoNSkgewotICAgICMgSW5zdGFsbCBydWxlcyBoYW5kbGVkIGJ5IFF0J3MgbW9kdWxlIHN5c3Rl
bQotfSBlbHNlIHsKLSAgICAjIEZvciBRdDQgd2UgaGF2ZSB0byBzZXQgdXAgaW5zdGFsbCBydWxl
cyBtYW51YWxseQotCi0gICAgIyBTeW5jcXQgaGFzIGFscmVhZHkgcnVuIGF0IHRoaXMgcG9pbnQs
IHNvIHdlIGNhbiB1c2UgaGVhZGVycy5wcmkKLSAgICAjIGFzIGEgYmFzaXMgZm9yIG91ciBpbnN0
YWxsLXJ1bGVzCi0gICAgSEVBREVSU19QUkkgPSAkJHtST09UX0JVSUxEX0RJUn0vaW5jbHVkZS8k
JHtRVC53ZWJraXQubmFtZX0vaGVhZGVycy5wcmkKLSAgICAhaW5jbHVkZSgkJEhFQURFUlNfUFJJ
KTogZXJyb3IoRmFpbGVkIHRvIHJlc29sdmUgaW5zdGFsbCBoZWFkZXJzKQotCi0gICAgaGVhZGVy
cy5maWxlcyA9ICQkU1lOQ1FULkhFQURFUl9GSUxFUyAkJFNZTkNRVC5IRUFERVJfQ0xBU1NFUwot
ICAgICFpc0VtcHR5KElOU1RBTExfSEVBREVSUyk6IGhlYWRlcnMucGF0aCA9ICQkSU5TVEFMTF9I
RUFERVJTLyQke1RBUkdFVH0KLSAgICBlbHNlOiBoZWFkZXJzLnBhdGggPSAkJFtRVF9JTlNUQUxM
X0hFQURFUlNdLyQke1RBUkdFVH0KLSAgICBJTlNUQUxMUyArPSBoZWFkZXJzCi0KLSAgICAhaXNF
bXB0eShJTlNUQUxMX0xJQlMpOiB0YXJnZXQucGF0aCA9ICQkSU5TVEFMTF9MSUJTCi0gICAgZWxz
ZTogdGFyZ2V0LnBhdGggPSAkJFtRVF9JTlNUQUxMX0xJQlNdCi0gICAgSU5TVEFMTFMgKz0gdGFy
Z2V0Ci0KLSAgICB1bml4IHsKLSAgICAgICAgQ09ORklHICs9IGNyZWF0ZV9wYyBjcmVhdGVfcHJs
Ci0gICAgICAgIFFNQUtFX1BLR0NPTkZJR19MSUJESVIgPSAkJHRhcmdldC5wYXRoCi0gICAgICAg
IFFNQUtFX1BLR0NPTkZJR19JTkNESVIgPSAkJGhlYWRlcnMucGF0aAotICAgICAgICBRTUFLRV9Q
S0dDT05GSUdfREVTVERJUiA9IHBrZ2NvbmZpZwotICAgICAgICBsaWJfcmVwbGFjZS5tYXRjaCA9
ICQkcmVfZXNjYXBlKCQkREVTVERJUikKLSAgICAgICAgbGliX3JlcGxhY2UucmVwbGFjZSA9ICQk
W1FUX0lOU1RBTExfTElCU10KLSAgICAgICAgUU1BS0VfUEtHQ09ORklHX0lOU1RBTExfUkVQTEFD
RSArPSBsaWJfcmVwbGFjZQotICAgIH0KLQotICAgIG1hYyB7Ci0gICAgICAgICFzdGF0aWM6Y29u
dGFpbnMoUVRfQ09ORklHLCBxdF9mcmFtZXdvcmspIHsKLSAgICAgICAgICAgICMgQnVpbGQgUXRX
ZWJLaXQgYXMgYSBmcmFtZXdvcmssIHRvIG1hdGNoIGhvdyBRdCB3YXMgYnVpbHQKLSAgICAgICAg
ICAgIENPTkZJRyArPSBsaWJfYnVuZGxlIHF0X25vX2ZyYW1ld29ya19kaXJlY3RfaW5jbHVkZXMg
cXRfZnJhbWV3b3JrCi0KLSAgICAgICAgICAgICMgRm9yIGRlYnVnX2FuZF9yZWxlYXNlIGNvbmZp
Z3MsIG9ubHkgY29weSBoZWFkZXJzIGluIHJlbGVhc2UKLSAgICAgICAgICAgICFkZWJ1Z19hbmRf
cmVsZWFzZXxpZihidWlsZF9wYXNzOkNPTkZJRyhyZWxlYXNlLCBkZWJ1Z3xyZWxlYXNlKSkgewot
ICAgICAgICAgICAgICAgIEZSQU1FV09SS19IRUFERVJTLnZlcnNpb24gPSBWZXJzaW9ucwotICAg
ICAgICAgICAgICAgIEZSQU1FV09SS19IRUFERVJTLmZpbGVzID0gJCR7aGVhZGVycy5maWxlc30K
LSAgICAgICAgICAgICAgICBGUkFNRVdPUktfSEVBREVSUy5wYXRoID0gSGVhZGVycwotICAgICAg
ICAgICAgICAgIFFNQUtFX0JVTkRMRV9EQVRBICs9IEZSQU1FV09SS19IRUFERVJTCi0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBRTUFLRV9MRkxBR1NfU09OQU1FID0gIiQke1FN
QUtFX0xGTEFHU19TT05BTUV9JCR7REVTVERJUn0kJHtRTUFLRV9ESVJfU0VQfSIKLSAgICB9Ci19
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWIw
Mjg0MTVlN2U3MTBjNjIyYWI4NmZmZjlmZWZhMDlkNDAwNTgwMy4uNTg1YzliMzEzYWYwOGM0Yjdk
OTEwMmE4MDBjNWYyMjFiMWFjZGNlYSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM0IEBACiAyMDEyLTA3LTE5ICBTaW1vbiBIYXVz
bWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAorICAgICAgICBbUXRdIFJlbW92ZSBR
dCA0IHNwZWNpZmljIGNvZGUgcGF0aHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4MTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm86Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5jcHA6CisgICAgICAgIChF
dmVudFNlbmRlcjo6dG91Y2hDYW5jZWwpOgorICAgICAgICAoRXZlbnRTZW5kZXI6OnNlbmRUb3Vj
aEV2ZW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9FdmVudFNlbmRlclF0Lmg6Cisg
ICAgICAgIChFdmVudFNlbmRlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvSW1hZ2VE
aWZmLnBybzoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcDoKKyAgICAgICAg
KG1haW4pOgorICAgICAgICAqIFF0VGVzdEJyb3dzZXIvUXRUZXN0QnJvd3Nlci5wcm86CisgICAg
ICAgICogUXRUZXN0QnJvd3Nlci9jb29raWVqYXIuY3BwOgorICAgICAgICAoVGVzdEJyb3dzZXJD
b29raWVKYXI6OlRlc3RCcm93c2VyQ29va2llSmFyKToKKyAgICAgICAgKiBRdFRlc3RCcm93c2Vy
L2xhdW5jaGVyd2luZG93LmNwcDoKKyAgICAgICAgKExhdW5jaGVyV2luZG93OjpzZXREaXNrQ2Fj
aGUpOgorICAgICAgICAqIHFtYWtlL2NvbmZpZ3VyZS5wcmk6CisgICAgICAgICogcW1ha2UvbWtz
cGVjcy9mZWF0dXJlcy9kZWZhdWx0X3Bvc3QucHJmOgorICAgICAgICAqIHFtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvZGVmYXVsdF9wcmUucHJmOgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvZmVhdHVyZXMucHJmOgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZnVuY3Rp
b25zLnByZjoKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3F0d2Via2l0LnByZjog
UmVtb3ZlZC4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3VuaXgvZGVmYXVsdF9w
cmUucHJmOgorCisyMDEyLTA3LTE5ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5v
a2lhLmNvbT4KKwogICAgICAgICBbUXRdIFJlbW92ZSBzdXBwb3J0IGZvciBRdCB2ZXJzaW9ucyBi
ZWZvcmUgNC44LjAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkxNzMwCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5k
ZXJUcmVlLnBybyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybwpp
bmRleCBmNDdmYjQzNDRiOWVmODNhNWFhNDZiYjU2ODNkOTIzMTQ5NGFhMTI1Li45YjY4NjY2ZmFi
N2ZiNzg5NzFmZjk5MjU5MzcxYTcwM2NiMTExODZhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWUucHJvCkBAIC0xNyw5ICsxNyw4IEBAIElOQ0xVREVQQVRIICs9IFwK
ICAgICAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQg
XAogICAgICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dURgogCi1RVCA9IGNvcmUgZ3VpIG5l
dHdvcmsgdGVzdGxpYiB3ZWJraXQKK1FUID0gY29yZSBndWkgbmV0d29yayB0ZXN0bGliIHdlYmtp
dCB3aWRnZXRzIHByaW50c3VwcG9ydAogbWFjeDogUVQgKz0geG1sCi1oYXZlUXQoNSk6IFFUICs9
IHdpZGdldHMgcHJpbnRzdXBwb3J0CiAKIGNvbnRhaW5zKERFRklORVMsIEhBVkVfRk9OVENPTkZJ
Rz0xKTogUEtHQ09ORklHICs9IGZvbnRjb25maWcKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9F
dmVudFNlbmRlclF0LmNwcAppbmRleCBjMDUwNmVmZTJkZTMxYWQwZWRmOWMyZGM4OTBiNjQ2ZmE2
ODY2ZGViLi4xY2FhNGFjZTdlMzk1NjZhN2I3NzE1NjhmYTI5ZmJiN2UyZGVkZWNmIDEwMDY0NAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9FdmVudFNlbmRlclF0LmNwcAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9FdmVudFNlbmRlclF0LmNwcApAQCAtNDc3LDEzICs0NzcsMTEg
QEAgdm9pZCBFdmVudFNlbmRlcjo6dG91Y2hFbmQoKQogICAgIG1fdG91Y2hBY3RpdmUgPSBmYWxz
ZTsKIH0KIAotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNTAwMDAKIHZvaWQgRXZlbnRTZW5kZXI6OnRv
dWNoQ2FuY2VsKCkKIHsKICAgICBzZW5kVG91Y2hFdmVudChRRXZlbnQ6OlRvdWNoQ2FuY2VsKTsK
ICAgICBtX3RvdWNoQWN0aXZlID0gZmFsc2U7CiB9Ci0jZW5kaWYKIAogdm9pZCBFdmVudFNlbmRl
cjo6Y2xlYXJUb3VjaFBvaW50cygpCiB7CkBAIC01MTEsNyArNTA5LDYgQEAgdm9pZCBFdmVudFNl
bmRlcjo6Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCiAKIHZvaWQgRXZlbnRTZW5kZXI6OnNl
bmRUb3VjaEV2ZW50KFFFdmVudDo6VHlwZSB0eXBlKQogewotI2lmIEhBVkUoUVQ1KQogICAgIHN0
YXRpYyBRVG91Y2hEZXZpY2UqIGRldmljZSA9IDA7CiAgICAgaWYgKCFkZXZpY2UpIHsKICAgICAg
ICAgZGV2aWNlID0gbmV3IFFUb3VjaERldmljZTsKQEAgLTUyMCw5ICs1MTcsNiBAQCB2b2lkIEV2
ZW50U2VuZGVyOjpzZW5kVG91Y2hFdmVudChRRXZlbnQ6OlR5cGUgdHlwZSkKICAgICB9CiAKICAg
ICBRVG91Y2hFdmVudCBldmVudCh0eXBlLCBkZXZpY2UsIG1fdG91Y2hNb2RpZmllcnMpOwotI2Vs
c2UKLSAgICBRVG91Y2hFdmVudCBldmVudCh0eXBlLCBRVG91Y2hFdmVudDo6VG91Y2hTY3JlZW4s
IG1fdG91Y2hNb2RpZmllcnMpOwotI2VuZGlmCiAgICAgZXZlbnQuc2V0VG91Y2hQb2ludHMobV90
b3VjaFBvaW50cyk7CiAgICAgc2VuZEV2ZW50KG1fcGFnZSwgJmV2ZW50KTsKICAgICBRTGlzdDxR
VG91Y2hFdmVudDo6VG91Y2hQb2ludD46Okl0ZXJhdG9yIGl0ID0gbV90b3VjaFBvaW50cy5iZWdp
bigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5oCmluZGV4IDJjYTFiMTE4
NDkwOWQ0YzRkYzRhOWI2YzUzZTI2YzI4MDFkY2M4YTguLjRlYzZmOTJiYjY0Y2MyOGRlNjcyNGQw
YmZkMzIyYzQ3ZDk0MzYxYzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0V2
ZW50U2VuZGVyUXQuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9FdmVudFNlbmRlclF0
LmgKQEAgLTc0LDkgKzc0LDcgQEAgcHVibGljIHNsb3RzOgogICAgIHZvaWQgdG91Y2hTdGFydCgp
OwogICAgIHZvaWQgdG91Y2hNb3ZlKCk7CiAgICAgdm9pZCB0b3VjaEVuZCgpOwotI2lmIFFUX1ZF
UlNJT04gPj0gMHgwNTAwMDAKICAgICB2b2lkIHRvdWNoQ2FuY2VsKCk7Ci0jZW5kaWYKICAgICB2
b2lkIHpvb21QYWdlSW4oKTsKICAgICB2b2lkIHpvb21QYWdlT3V0KCk7CiAgICAgdm9pZCB0ZXh0
Wm9vbUluKCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9JbWFnZURpZmYu
cHJvIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvSW1hZ2VEaWZmLnBybwppbmRleCA3MjllYzI1
OWFmMGQ3ODQ1YmQ5MzMwOGUwODhiMTE1ZDIyM2NiMjljLi40MGJjZGZiM2MxZjFhNTY5OTEwOTNh
NTc4MmI5MWY0NDQ1MTNiNWE0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9J
bWFnZURpZmYucHJvCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0ltYWdlRGlmZi5wcm8K
QEAgLTksNyArOSw2IEBAIFRFTVBMQVRFID0gYXBwCiBUQVJHRVQgPSBJbWFnZURpZmYKIERFU1RE
SVIgPSAkJFJPT1RfQlVJTERfRElSL2JpbgogCi1RVCA9IGNvcmUgZ3VpCi1oYXZlUXQoNSk6IFFU
ICs9IHdpZGdldHMKK1FUID0gY29yZSBndWkgd2lkZ2V0cwogCiBTT1VSQ0VTID0gSW1hZ2VEaWZm
LmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcAppbmRleCA4MTg4ZjE4MTZmZmFiYTA1MGZmYTk0
MDIyMjYzYjRkOTcxZjIxYTFhLi4xNTk1ZjhjMjM2ZTJmN2E5ZTIzNTEyODI0Y2JkYmY0NDkxZWNh
MjgzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcApAQCAtMTUyLDI3ICsxNTIsNyBAQCBpbnQg
bWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIFFBcHBsaWNhdGlvbiBhcHAoYXJnYywg
YXJndik7CiAgICAgYXBwLnNldFF1aXRPbkxhc3RXaW5kb3dDbG9zZWQoZmFsc2UpOwogCi0jaWYg
SEFWRShRVDUpCiAgICAgUUNvcmVBcHBsaWNhdGlvbjo6c2V0QXR0cmlidXRlKFF0OjpBQV9Vc2U5
NkRwaSwgdHJ1ZSk7Ci0jZWxzZQotI2lmZGVmIFFfV1NfWDExCi0gICAgUVgxMUluZm86OnNldEFw
cERwaVkoMCwgOTYpOwotICAgIFFYMTFJbmZvOjpzZXRBcHBEcGlYKDAsIDk2KTsKLSNlbmRpZgot
Ci0gICAvKgotICAgICogUUFwcGxpY2F0aW9uIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBh
cHBsaWNhdGlvbiBmb250IGJhc2VkCi0gICAgKiBvbiB0aGUgYXBwbGljYXRpb24gRFBJIGF0IGNv
bnN0cnVjdGlvbiB0aW1lLCB3aGljaCBtaWdodCBiZQotICAgICogZGlmZmVyZW50IGZyb20gdGhl
IERQSSB3ZSBleHBsaWNpdGx5IHNldCB1c2luZyBRWDExSW5mbyBhYm92ZS4KLSAgICAqIFNlZTog
aHR0cHM6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctMjE2MDMKLSAgICAq
Ci0gICAgKiBUbyBlbnN1cmUgdGhhdCB0aGUgYXBwbGljYXRpb24gZm9udCBEUEkgbWF0Y2hlcyB0
aGUgYXBwbGljYXRpb24KLSAgICAqIERQSSwgd2Ugb3ZlcnJpZGUgdGhlIGFwcGxpY2F0aW9uIGZv
bnQgdXNpbmcgdGhlIGZvbnQgd2UgZ2V0IGZyb20KLSAgICAqIGEgUVdpZGdldCwgd2hpY2ggaGFz
IGFscmVhZHkgYmVlbiByZXNvbHZlZCBhZ2FpbnN0IHRoZSBleGlzdGluZwotICAgICogZGVmYXVs
dCBmb250LCBidXQgd2l0aCB0aGUgY29ycmVjdCBwYWludC1kZXZpY2UgRFBJLgotICAgKi8KLSAg
ICBRQXBwbGljYXRpb246OnNldEZvbnQoUVdpZGdldCgpLmZvbnQoKSk7Ci0jZW5kaWYKIAogI2lm
IEhBVkUoU0lHTkFMX0gpCiAgICAgc2V0dXBTaWduYWxIYW5kbGVycygmY3Jhc2hIYW5kbGVyKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvUXRUZXN0QnJvd3Nlci5wcm8gYi9Ub29s
cy9RdFRlc3RCcm93c2VyL1F0VGVzdEJyb3dzZXIucHJvCmluZGV4IDZjOTM1MmNiYzk1NWQ2YzA4
ZDI3MjkyYWUyNzJlZGIwYWY4ZGE5MDguLjVjMTIzZjkwZjhhMzQ5MTQxOWY5OWZlNGI3ZmQwYTQ4
ZTExMTY4MjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvUXRUZXN0QnJvd3Nlci5w
cm8KKysrIGIvVG9vbHMvUXRUZXN0QnJvd3Nlci9RdFRlc3RCcm93c2VyLnBybwpAQCAtNDIsMTAg
KzQyLDkgQEAgV0VCS0lUICs9IHd0ZiB3ZWJjb3JlCiAKIERFU1RESVIgPSAkJFJPT1RfQlVJTERf
RElSL2JpbgogCi1RVCArPSBuZXR3b3JrIHdlYmtpdAorUVQgKz0gbmV0d29yayB3ZWJraXQgcHJp
bnRzdXBwb3J0IHdpZGdldHMKIAogbWFjeDpRVCArPSB4bWwKLWhhdmVRdCg1KTogUVQgKz0gcHJp
bnRzdXBwb3J0IHdpZGdldHMKIAogY29udGFpbnMoREVGSU5FUywgSEFWRV9GT05UQ09ORklHPTEp
OiBQS0dDT05GSUcgKz0gZm9udGNvbmZpZwogCmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RCcm93
c2VyL2Nvb2tpZWphci5jcHAgYi9Ub29scy9RdFRlc3RCcm93c2VyL2Nvb2tpZWphci5jcHAKaW5k
ZXggYjhlZDdkMDAzOWRhMTRjMThjMzEwOTZiMTk1NzU1NTMzYzAyMGFlNC4uY2ExYjg0NjM3OWQ1
ZTVkMDE1YjQyNTc4ZjdkMzAzZDdiYzcyNTZmOSAxMDA2NDQKLS0tIGEvVG9vbHMvUXRUZXN0QnJv
d3Nlci9jb29raWVqYXIuY3BwCisrKyBiL1Rvb2xzL1F0VGVzdEJyb3dzZXIvY29va2llamFyLmNw
cApAQCAtMjksMTEgKzI5LDcgQEAKIAogI2luY2x1ZGUgImNvb2tpZWphci5oIgogCi0jaWYgSEFW
RShRVDUpCiAjaW5jbHVkZSA8UVN0YW5kYXJkUGF0aHM+Ci0jZWxzZQotI2luY2x1ZGUgPFFEZXNr
dG9wU2VydmljZXM+Ci0jZW5kaWYKICNpbmNsdWRlIDxRRGlyPgogI2luY2x1ZGUgPFFUZXh0U3Ry
ZWFtPgogCkBAIC00OCwxMiArNDQsOCBAQCBUZXN0QnJvd3NlckNvb2tpZUphcjo6VGVzdEJyb3dz
ZXJDb29raWVKYXIoUU9iamVjdCogcGFyZW50KQogICAgIGNvbm5lY3QoJm1fdGltZXIsIFNJR05B
TCh0aW1lb3V0KCkpLCB0aGlzLCBTTE9UKHNhdmVUb0Rpc2soKSkpOwogCiAjaWZuZGVmIFFUX05P
X0RFU0tUT1BTRVJWSUNFUwotI2lmIEhBVkUoUVQ1KQogICAgIFFTdHJpbmcgcGF0aCA9IFFTdGFu
ZGFyZFBhdGhzOjp3cml0YWJsZUxvY2F0aW9uKFFTdGFuZGFyZFBhdGhzOjpDYWNoZUxvY2F0aW9u
KTsKICNlbHNlCi0gICAgUVN0cmluZyBwYXRoID0gUURlc2t0b3BTZXJ2aWNlczo6c3RvcmFnZUxv
Y2F0aW9uKFFEZXNrdG9wU2VydmljZXM6OkNhY2hlTG9jYXRpb24pOwotI2VuZGlmCi0jZWxzZQog
ICAgIFFTdHJpbmcgcGF0aCA9IFFEaXI6OmhvbWVQYXRoKCkgKyAiLy5RdFRlc3RCcm93c2VyIjsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93
LmNwcCBiL1Rvb2xzL1F0VGVzdEJyb3dzZXIvbGF1bmNoZXJ3aW5kb3cuY3BwCmluZGV4IGU0YWU0
NTZkYmMwNDhlNzAwM2Y5N2I4MDJmYWYyZWE4OGJkNDhiMDAuLjRmYzkwZDcwMmM0NGE0ODk5NTI1
ZTQ5MWJmOGZjMzc0Yjg5YjgyYTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvbGF1
bmNoZXJ3aW5kb3cuY3BwCisrKyBiL1Rvb2xzL1F0VGVzdEJyb3dzZXIvbGF1bmNoZXJ3aW5kb3cu
Y3BwCkBAIC02NiwxMSArNjYsNyBAQAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChRVF9OT19ORVRX
T1JLRElTS0NBQ0hFKSAmJiAhZGVmaW5lZChRVF9OT19ERVNLVE9QU0VSVklDRVMpCi0jaWYgSEFW
RShRVDUpCiAjaW5jbHVkZSA8UVN0YW5kYXJkUGF0aHM+Ci0jZWxzZQotI2luY2x1ZGUgPFFEZXNr
dG9wU2VydmljZXM+Ci0jZW5kaWYKICNpbmNsdWRlIDxRdE5ldHdvcmsvUU5ldHdvcmtEaXNrQ2Fj
aGU+CiAjZW5kaWYKIApAQCAtODA4LDExICs4MDQsNyBAQCB2b2lkIExhdW5jaGVyV2luZG93Ojpz
ZXREaXNrQ2FjaGUoYm9vbCBlbmFibGUpCiAgICAgUU5ldHdvcmtEaXNrQ2FjaGUqIGNhY2hlID0g
MDsKICAgICBpZiAoZW5hYmxlKSB7CiAgICAgICAgIGNhY2hlID0gbmV3IFFOZXR3b3JrRGlza0Nh
Y2hlKCk7Ci0jaWYgSEFWRShRVDUpCiAgICAgICAgIFFTdHJpbmcgY2FjaGVMb2NhdGlvbiA9IFFT
dGFuZGFyZFBhdGhzOjp3cml0YWJsZUxvY2F0aW9uKFFTdGFuZGFyZFBhdGhzOjpDYWNoZUxvY2F0
aW9uKTsKLSNlbHNlCi0gICAgICAgIFFTdHJpbmcgY2FjaGVMb2NhdGlvbiA9IFFEZXNrdG9wU2Vy
dmljZXM6OnN0b3JhZ2VMb2NhdGlvbihRRGVza3RvcFNlcnZpY2VzOjpDYWNoZUxvY2F0aW9uKTsK
LSNlbmRpZgogICAgICAgICBjYWNoZS0+c2V0Q2FjaGVEaXJlY3RvcnkoY2FjaGVMb2NhdGlvbik7
CiAgICAgfQogICAgIHBhZ2UoKS0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+c2V0Q2FjaGUoY2Fj
aGUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvY29uZmlndXJlLnByaSBiL1Rvb2xzL3FtYWtl
L2NvbmZpZ3VyZS5wcmkKaW5kZXggNTc1ZGViODgwYmVjYjc3NTZlYTg1MTgyMzQ5YWI0NjJhMjE4
NDUwZi4uZjljYzU1N2RiYzMwMzY1ZGEwYmM0MWY3MjFjMjFiNGMzZjJkZDliNCAxMDA2NDQKLS0t
IGEvVG9vbHMvcW1ha2UvY29uZmlndXJlLnByaQorKysgYi9Ub29scy9xbWFrZS9jb25maWd1cmUu
cHJpCkBAIC01LDcgKzUsNyBAQAogIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92
ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1oYXZlUXQoNSk6IXF1
aWNrX2NoZWNrIHsKKyFxdWlja19jaGVjayB7CiAgICAgbG9hZChjb25maWd1cmUpCiAgICAgUU1B
S0VfQ09ORklHX1RFU1RTX0RJUiA9ICQkUFdEL2NvbmZpZy50ZXN0cwogCmRpZmYgLS1naXQgYS9U
b29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYgYi9Ub29scy9xbWFr
ZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9zdC5wcmYKaW5kZXggNzhhMGE4MmI0ZDhiMTYx
ODFkOGUyZTZkMWM1NDQ0MjYxZWQ2NzM5OC4uZDg4ODg0ZjY5ZWYyYzg4MzkzMDk3ZTk2MjQyNjU0
YWM4MjVkMjcyYiAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZh
dWx0X3Bvc3QucHJmCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZGVmYXVsdF9w
b3N0LnByZgpAQCAtMTksOCArMTksNiBAQCBpc0VtcHR5KE9CSkVDVFNfRElSKTogT0JKRUNUU19E
SVIgPSBvYmovJCRhY3RpdmVCdWlsZENvbmZpZygpCiBERUZJTkVTICs9IFwKICAgICBCVUlMRElO
R19RVF9fPTEKIAotaGF2ZVF0KDUpOiBERUZJTkVTICs9IEhBVkVfUVQ1PTEKLQogQ09ORklHKHJl
bGVhc2UsIGRlYnVnfHJlbGVhc2UpOiBERUZJTkVTICo9IE5ERUJVRwogCiBDT05GSUcgKz0gZGVw
ZW5kX2luY2x1ZGVwYXRoCkBAIC0xNDgsMTEgKzE0Niw2IEBAIGNvbnRhaW5zKFRFTVBMQVRFLCBs
aWIpIHsKIH0KIAogY29udGFpbnMoUVQsIHdlYmtpdCkgewotICAgIGhhdmVRdCg0KSB7Ci0gICAg
ICAgICMgUXQgNCBzdGlsbCB1c2VzIGN1c3RvbSBydWxlcyB0byBkZXBlbmQgb24gUXRXZWJLaXQK
LSAgICAgICAgbG9hZChxdHdlYmtpdCkKLSAgICB9Ci0KICAgICAjIEluIGFkZGl0aW9uIHRvIHRo
ZSBtYWluIHNoYXJlZCBRdFdlYktpdCBsaWJyYXJ5IHdlIGFsc28KICAgICAjIG5lZWQgdG8gbGlu
ayB0byBhbnkgaW50ZXJtZWRpYXRlIHNoYXJlZCBsaWJyYXJpZXMuCiAgICAgZm9yY2Vfc3RhdGlj
X2xpYnNfYXNfc2hhcmVkIHsKQEAgLTIzOCw0MyArMjMxLDYgQEAgZm9yKHN1YmRpciwgU1VCRElS
UykgewogICAgIH0KIH0KIAotIyBEb2luZyAnJChNQUtFKSBxbWFrZScgc2hvdWxkIHJlY3Vyc2Ug
dGhyb3VnaCBhbGwgc3ViZGlycy4gSW4gUXQ1LCB0aGlzIGlzCi0jIGF1dG9tYXRpYyAoZm9yICdx
bWFrZV9hbGwnLCB3aGlsZSAncW1ha2UnIGRvZXMgbm90IGVudGVyIHN1YmRpcnMgYXQgYWxsKS4K
LWhhdmVRdCg0KTpjb250YWlucyhURU1QTEFURSwgc3ViZGlycyk6IW5vX3JlY3Vyc2l2ZV9xbWFr
ZSB7Ci0gICAgcmVjdXJzaXZlX3FtYWtlLnRhcmdldCA9IHFtYWtlX2FsbAotCi0gICAgIyBXZSBj
b3VsZCBkbyB0aGlzIHVzaW5nIENPTkZJRyArPSByZWN1cnNlIGJ1dCB0aGF0IGFkZHMKLSAgICAj
IGEgZGVwZW5kZW5jeSBmb3IgZWFjaCByZWN1cnNpdmUgdGFyZ2V0IG9uIGl0cyBtYWtlZmlsZSwK
LSAgICAjIHdoaWxlIHdlIHdhbnQgaXQgdG8gZGVwZW5kIG9uICotcW1ha2VfYWxsLCBzbyB0aGF0
IHdlCi0gICAgIyBkb24ndCBlbmQgdXAgcnVubmluZyBxbWFrZSB0d2ljZS4KLQotICAgIGZvcihz
dWJkaXIsIFNVQkRJUlMpIHsKLSAgICAgICAgY29udGFpbnMoTk9fUkVDVVJTSVZFX1FNQUtFX1NV
QkRJUlMsICQke3N1YmRpcn0pIHsKLSAgICAgICAgICAgIGRlYnVnKDEsIFNraXBwaW5nIHJlY3Vy
c2l2ZSBxbWFrZSBmb3IgJCR7c3ViZGlyfSkKLSAgICAgICAgICAgIG5leHQoKQotICAgICAgICB9
Ci0KLSAgICAgICAgc3ViZGlyX2NvbmZpZyA9ICQkZXZhbCgkJHtzdWJkaXJ9LkNPTkZJRykKLSAg
ICAgICAgY29udGFpbnMoc3ViZGlyX2NvbmZpZywgbm9fZGVmYXVsdF90YXJnZXQpOm5leHQoKQot
Ci0gICAgICAgIGRlYnVnKDEsICJNYWtpbmcgcW1ha2UgcmVjdXJzaXZlIGZvciAkJHN1YmRpciIp
Ci0KLSAgICAgICAgdmFyaWFibGVzID0gJCRjb21wdXRlU3ViZGlyVmFyaWFibGVzKCQke3N1YmRp
cn0pCi0KLSAgICAgICAgdGFyZ2V0X25hbWUgPSAkJGV2YWwoJCR7dmFyaWFibGVzfS50YXJnZXQp
LXJlY3Vyc2l2ZV9xbWFrZQotCi0gICAgICAgIGV2YWwoJCR7dGFyZ2V0X25hbWV9LnRhcmdldCA9
ICQkdGFyZ2V0X25hbWUpCi0gICAgICAgIGV2YWwoJCR7dGFyZ2V0X25hbWV9LmRlcGVuZHMgPSAk
JGV2YWwoJCR7dmFyaWFibGVzfS50YXJnZXQpLXFtYWtlX2FsbCkKLSAgICAgICAgY29tbWFuZHMg
PSAkJGV2YWwoJCR7dmFyaWFibGVzfS5zdWJkaXJfY29tbWFuZCkgJChNQUtFKSAtZiAkJGV2YWwo
JCR7dmFyaWFibGVzfS5tYWtlZmlsZSkgcW1ha2UKLSAgICAgICAgZXZhbCgkJHt0YXJnZXRfbmFt
ZX0uY29tbWFuZHMgPSAkJGNvbW1hbmRzKQotCi0gICAgICAgIFFNQUtFX0VYVFJBX1RBUkdFVFMg
Kz0gJCR7dGFyZ2V0X25hbWV9Ci0gICAgICAgIHJlY3Vyc2l2ZV9xbWFrZS5kZXBlbmRzICs9ICQk
e3RhcmdldF9uYW1lfQotICAgIH0KLQotICAgICFpc0VtcHR5KHJlY3Vyc2l2ZV9xbWFrZS5kZXBl
bmRzKTogUU1BS0VfRVhUUkFfVEFSR0VUUyArPSByZWN1cnNpdmVfcW1ha2UKLX0KLQogaW5jcmVt
ZW50YWwudGFyZ2V0ID0gaW5jcmVtZW50YWwKIGluY3JlbWVudGFsLmNvbW1hbmRzID0gJChNQUtF
KSAtZiAkKE1BS0VGSUxFKSBxbWFrZV9hbGwgJiYgJChNQUtFKSAtZiAkKE1BS0VGSUxFKQogUU1B
S0VfRVhUUkFfVEFSR0VUUyArPSBpbmNyZW1lbnRhbApAQCAtMzEyLDkgKzI2OCw0IEBAIGZvcih0
YXJnZXQsICQkbGlzdCgkJHVuaXF1ZShERUZBVUxUX1RBUkdFVFMpKSkgewogIyByZWxhdGl2ZS4K
IERFU1RESVIgPSAkJHJlcGxhY2UoREVTVERJUiwgXiQke1JPT1RfQlVJTERfRElSfSwgJCR7QlVJ
TERfUk9PVF9SRUxBVElWRV9UT19PVVRfUFdEfSkKIAotIyBTaW5jZSB3ZSBsb2FkZWQgb3VyIG93
biBydWxlcyBmb3IgZGVwZW5kaW5nIG9uIFF0V2ViS2l0LCBhbmQgd2UKLSMgaGF2ZSBubyBtb3Jl
IGxvZ2ljIHRoYXQgY2hlY2tzIGNvbnRhaW5zKFFULCB3ZWJraXQpLCB3ZSB1bnNldCBpdAotIyBo
ZXJlIHNvIHRoYXQgUXQgd2lsbCBub3QgYWRkIGl0cyBvd24gaW5jbHVkZSBhbmQgbGlicmFyeSBw
YXRocy4KLWhhdmVRdCg0KTogUVQgLT0gd2Via2l0IHdlYmtpdC1wcml2YXRlCi0KIGxvYWQoZGVm
YXVsdF9wb3N0KSAjIExvYWQgUXQncyBkZWZhdWx0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2Uv
bWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3ByZS5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2Zl
YXR1cmVzL2RlZmF1bHRfcHJlLnByZgppbmRleCBhOGJiNzU4MzA3M2VkMTMyYmI3Y2ViNzJjNmUw
YTY0M2E0YzI3NDFlLi4xZjk0YTNiZDUyMTRlMDU1NmJkMjI0YmYxZDIwYzEyOWRhOGI3YWMzIDEw
MDY0NAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcHJlLnByZgor
KysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcHJlLnByZgpAQCAtNjYs
MTIgKzY2LDYgQEAgd2luMzIqIHsKICAgICBpc0VtcHR5KHB3ZF9zdGFydHNfd2l0aF9zbGFzaCk6
IENPTkZJRyArPSB3aW5fY21kX3NoZWxsCiB9CiAKLWhhdmVRdCg0KSB7Ci0gICAgIyBNYWtlIHN1
cmUgUU1BS0VQQVRIIGlzIHNldCBmb3IgcmVjdXJzaXZlIHRhcmdldHMKLSAgICB3aW5fY21kX3No
ZWxsOiBRTUFLRV9RTUFLRSA9IFwoc2V0IFFNQUtFUEFUSD0kJChRTUFLRVBBVEgpXCkgJiYgJCRR
TUFLRV9RTUFLRQotICAgIGVsc2U6IFFNQUtFX1FNQUtFID0gUU1BS0VQQVRIPSQkKFFNQUtFUEFU
SCkgJCRRTUFLRV9RTUFLRQotfQotCiAjIERlZmF1bHQgbG9jYXRpb24gb2YgZ2VuZXJhdGVkIHNv
dXJjZXMKIEdFTkVSQVRFRF9TT1VSQ0VTX0RFU1RESVIgPSBnZW5lcmF0ZWQKIApAQCAtOTIsNDIg
Kzg2LDI0IEBAIHdpbjMyLW1zdmMqOiBNQUtFRklMRV9OT09QX0NPTU1BTkQgPSBAZWNobyA+TlVM
CiBzY3JhdGNoYm94OiBQWVRIT04gPSBweXRob24yLjYKIGVsc2U6IFBZVEhPTiA9IHB5dGhvbgog
Ci0haGF2ZVF0KDQsIDgpOiFoYXZlUXQoNSk6IXJlY3Vyc2l2ZV9pbmNsdWRlOiBlcnJvcigiQnVp
bGRpbmcgV2ViS2l0IHdpdGggUXQgdmVyc2lvbnMgb2xkZXIgdGhhbiA0LjggaXMgbm90IHN1cHBv
cnRlZC4iKQotCi0haGF2ZVF0KDUpOiFub193ZWJraXQyIHsKLSAgICByb290X3Byb2plY3RfZmls
ZSB7Ci0gICAgICAgIG1lc3NhZ2UoIkJ1aWxkaW5nIFdlYktpdDIgd2l0aCBRdCB2ZXJzaW9ucyBv
bGRlciB0aGFuIDUuMCBpcyBub3Qgc3VwcG9ydGVkLiBEaXNhYmxpbmcgV2ViS2l0Mi4iKQotICAg
ICAgICBtZXNzYWdlKCJSZWFkIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS93ZWJraXQtcXRA
bGlzdHMud2Via2l0Lm9yZy9tc2cwMTY3NC5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpCi0g
ICAgfQotICAgIENPTkZJRyArPSBub193ZWJraXQyCi19CishaGF2ZVF0KDUpOiFyZWN1cnNpdmVf
aW5jbHVkZTogZXJyb3IoIkJ1aWxkaW5nIFdlYktpdCB3aXRoIFF0IHZlcnNpb25zIG9sZGVyIHRo
YW4gNS4wIGlzIG5vdCBzdXBwb3J0ZWQuIikKIAotaGF2ZVF0KDUpOiB7Ci0gICAgIWhhdmVRdE1v
ZHVsZSh3aWRnZXRzKXwhaGF2ZVF0TW9kdWxlKHByaW50c3VwcG9ydCkgewotICAgICAgICByb290
X3Byb2plY3RfZmlsZTogbWVzc2FnZSgiV2ViS2l0MSByZXF1aXJlcyB0aGUgUXRXaWRnZXRzIGFu
ZCBRdFByaW50U3VwcG9ydCBtb2R1bGVzLiBEaXNhYmxpbmcgV2ViS2l0MS4iKQotICAgICAgICBD
T05GSUcgKz0gbm9fd2Via2l0MQotICAgIH0KKyFoYXZlUXRNb2R1bGUod2lkZ2V0cyl8IWhhdmVR
dE1vZHVsZShwcmludHN1cHBvcnQpIHsKKyAgICByb290X3Byb2plY3RfZmlsZTogbWVzc2FnZSgi
V2ViS2l0MSByZXF1aXJlcyB0aGUgUXRXaWRnZXRzIGFuZCBRdFByaW50U3VwcG9ydCBtb2R1bGVz
LiBEaXNhYmxpbmcgV2ViS2l0MS4iKQorICAgIENPTkZJRyArPSBub193ZWJraXQxCiB9CiAKICMg
V2UgdXNlIHByaXZhdGVfdGVzdHMgdG8gZGV0ZWN0IGRldmVsb3BlciBidWlsZCwgc2luY2UgdGhl
IGRlc3RkaXIgd2lsbAogIyBhbHdheXMgYmUgb3VyIHdlYmtpdCBidWlsZCBkaXIuIFRoaXMgbWln
aHQgY2hhbmdlIGFzIGNvbmZpZ3VyZSBjaGFuZ2VzLgogY29udGFpbnMoUVRfQ09ORklHLCBwcml2
YXRlX3Rlc3RzKTogQ09ORklHICs9IHF0X2RldmVsb3Blcl9idWlsZAogCi1oYXZlUXQoNCkgewot
ICAgICMgUXQ1IHdpbGwgYXV0b21hdGljYWxseSBsb2FkIHRoZSBtb2R1bGUgZmlsZXMgZm9yIHVz
LCBidXQgZm9yIFF0NAotICAgICMgd2UgaGF2ZSB0byBkbyBpdCBtYW51YWxseSBzbyB0aGF0IHRo
ZSB2YXJpb3VzIFFULndlYmtpdC5mb28gbmFtZXMKLSAgICAjIGFyZSBhdmFpbGFibGUuCi0gICAg
aW5jbHVkZSgkJHtST09UX1dFQktJVF9ESVJ9L1Rvb2xzL3FtYWtlL3F0X3dlYmtpdC5wcmkpCi19
Ci0KICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIHNwZWNpZmljIHBsYXRmb3JtcwogQ09ORklHICs9
IGluY2x1ZGVfd2ViaW5zcGVjdG9yCiAKICMgVHJ5IHRvIGxvY2F0ZSBzcWxpdGUzIHNvdXJjZSAo
Zm9yIFdlYkNvcmUpCiBTUUxJVEUzU1JDRElSID0gJCQoU1FMSVRFM1NSQ0RJUikKIGlzRW1wdHko
U1FMSVRFM1NSQ0RJUikgewotICAgIGhhdmVRdCg1KTogU1FMSVRFM1NSQ0RJUiA9ICQkUVQuY29y
ZS5zb3VyY2VzLy4uLzNyZHBhcnR5L3NxbGl0ZS8KLSAgICBlbHNlOiBTUUxJVEUzU1JDRElSID0g
JCRbUVRfSU5TVEFMTF9QUkVGSVhdL3NyYy8zcmRwYXJ0eS9zcWxpdGUvCisgICAgU1FMSVRFM1NS
Q0RJUiA9ICQkUVQuY29yZS5zb3VyY2VzLy4uLzNyZHBhcnR5L3NxbGl0ZS8KIH0KIAogIyAtLS0t
LS0tLS0gTWFrZSBmZWF0dXJlcyBhdmFpbGFibGUgdG8gSlNDIC0tLS0tLS0tLS0tLQpkaWZmIC0t
Z2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYgYi9Ub29scy9x
bWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgppbmRleCBhN2IwMDg2OWU1YjhjMDlj
NTg0NWIyNzc1Yzc2MDlkMzUzMWE4YTUzLi5iOWRkMGIxYjA1YjA1MTFhNGYyNjg1MjVlOTdmMjc3
ZDE5ZWVkNTlkIDEwMDY0NAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1
cmVzLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpA
QCAtMzEsMzAgKzMxLDE3IEBAIGxvYWQobW9iaWxpdHljb25maWcsIHRydWUpCiAjIGJ5IGhhdmlu
ZyB0aGUgZmVhdHVyZSBkaXNhYmxlZCBpbiBmZWF0dXJlcy5wcmkuIE5vciBkbyB5b3UgaGF2ZSB0
bwogIyB1bnNldCB0aGUgb3Bwb3NpdGUgdmFsdWUsIHRoYXQncyBoYW5kbGVkIGF1dG9tYXRpY2Fs
bHkgZm9yIHlvdS4KIAotIyBGb3IgTWFjIHdlIGRvIG5vdCByZWx5IG9uIFFUX0NPTkZJRywgYmVj
YXVzZSBpY3UgaXMgbm90IG9mZmljaWFsbHkgc3VwcG9ydGVkIGZvciBhbGwgb2YgcXQuCi1oYXZl
UXQoNSk6aWYoY29udGFpbnMoUVRfQ09ORklHLGljdSl8bWFjKSB7Ci0gICAgREVGSU5FUyArPSBX
VEZfVVNFX0lDVV9VTklDT0RFPTEKLSAgICBERUZJTkVTIC09IFdURl9VU0VfUVQ0X1VOSUNPREU9
MQotfSBlbHNlIHsKLSAgICBERUZJTkVTICs9IFdURl9VU0VfUVQ0X1VOSUNPREU9MQotICAgIERF
RklORVMgLT0gV1RGX1VTRV9JQ1VfVU5JQ09ERT0xCi19CitERUZJTkVTICs9IFdURl9VU0VfSUNV
X1VOSUNPREU9MQorREVGSU5FUyAtPSBXVEZfVVNFX1FUNF9VTklDT0RFPTEKIAogIWNvbnRhaW5z
KERFRklORVMsIEhBVkVfUVJBV0ZPTlQ9LikgewogICAgICMgVXNlIG9mIFFSYXdGb250IGluIFF0
IDU6Ci0gICAgaGF2ZVF0KDUpOiBERUZJTkVTICs9IEhBVkVfUVJBV0ZPTlQ9MQorICAgIERFRklO
RVMgKz0gSEFWRV9RUkFXRk9OVD0xCiB9CiAKICMgV2UgbmVlZCBmb250Y29uZmlnIHRvIHNldCB1
cCB0aGUgdGVzdCBmb250cyBmb3IgRHVtcFJlbmRlclRyZWUgYW5kIFdlYktpdFRlc3RSdW5uZXIu
Ci1oYXZlUXQoNSkgewotICAgIGNvbmZpZ19mb250Y29uZmlnOiFtYWMgewotICAgICAgICBERUZJ
TkVTICs9IEhBVkVfRk9OVENPTkZJRz0xCi0gICAgfQotfSBlbHNlIHsKLSAgICAjIFF0IDQKLSAg
ICB1bml4OiFtYWM6IWVtYmVkZGVkIHsKLSAgICAgICAgREVGSU5FUyArPSBIQVZFX0ZPTlRDT05G
SUc9MQotICAgIH0KK2NvbmZpZ19mb250Y29uZmlnOiFtYWMgeworICAgIERFRklORVMgKz0gSEFW
RV9GT05UQ09ORklHPTEKIH0KIAogIyBXZSBuZWVkIGxpYnhtbDIgY29uZmlnIHRlc3QgdG8gZGV0
ZXJtaW5lIHRvIHVzZSBsaWJ4bWwyIG9yIG5vdApAQCAtODAsNyArNjcsNyBAQCBoYXZlUXQoNSkg
ewogCiAjIE5lc2NhcGUgcGx1Z2lucyBzdXBwb3J0IChOUEFQSSkKICFjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0uKSB7Ci0gICAgaGF2ZVF0KDUpOnhsaWJBdmFp
bGFibGUoKSB7CisgICAgeGxpYkF2YWlsYWJsZSgpIHsKICAgICAgICAgREVGSU5FUyArPSBFTkFC
TEVfTkVUU0NBUEVfUExVR0lOX0FQST0xCiAgICAgICAgIENPTkZJRyArPSBwbHVnaW5fYmFja2Vu
ZF94bGliCiAgICAgfSBlbHNlOiB1bml4fHdpbjMyLSo6IWVtYmVkZGVkOiF3aW5jZSogewpAQCAt
MTA1LDcgKzkyLDcgQEAgaGF2ZVF0KDUpIHsKIH0KIAogIyBRU3R5bGUgZGV0ZWN0aW9uCi1oYXZl
UXQoNCl8aGF2ZVF0TW9kdWxlKHdpZGdldHMpOiBERUZJTkVTICs9IEhBVkVfUVNUWUxFPTEKK2hh
dmVRdE1vZHVsZSh3aWRnZXRzKTogREVGSU5FUyArPSBIQVZFX1FTVFlMRT0xCiAKICMgV2ViR0wg
c3VwcG9ydAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0uKSB7CkBAIC0xMjgsMTcg
KzExNSw5IEBAIGhhdmVRdCg0KXxoYXZlUXRNb2R1bGUod2lkZ2V0cyk6IERFRklORVMgKz0gSEFW
RV9RU1RZTEU9MQogfQogCiAjIG9yaWVudGF0aW9uIHN1cHBvcnQKLWhhdmVRdCg1KSB7Ci0gICAg
aGF2ZVF0TW9kdWxlKHNlbnNvcnMpIHsKLSAgICAgICAgIWNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9PUklFTlRBVElPTl9FVkVOVFM9Lik6IERFRklORVMgKz0gRU5BQkxFX09SSUVOVEFUSU9OX0VW
RU5UUz0xCi0gICAgICAgICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfREVWSUNFX09SSUVOVEFU
SU9OPS4pOiBERUZJTkVTICs9IEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT049MQotICAgIH0KLX0g
ZWxzZSB7Ci0gICAgIyBRdCA0IHdpdGggUXQgTW9iaWxpdHkKLSAgICBjb250YWlucyhNT0JJTElU
WV9DT05GSUcsIHNlbnNvcnMpIHsKLSAgICAgICAgIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9P
UklFTlRBVElPTl9FVkVOVFM9Lik6IERFRklORVMgKz0gRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5U
Uz0xCi0gICAgICAgICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9O
PS4pOiBERUZJTkVTICs9IEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT049MQotICAgIH0KK2hhdmVR
dE1vZHVsZShzZW5zb3JzKSB7CisgICAgIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9PUklFTlRB
VElPTl9FVkVOVFM9Lik6IERFRklORVMgKz0gRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUz0xCisg
ICAgIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT049Lik6IERFRklO
RVMgKz0gRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTj0xCiB9CiAKICMgSFRNTDUgTWVkaWEgU3Vw
cG9ydApAQCAtMTYzLDIzICsxNDIsMTQgQEAgaGF2ZVF0KDUpIHsKICAgICAhbm9fd2Via2l0Mjog
REVGSU5FUyArPSBFTkFCTEVfRlVMTFNDUkVFTl9BUEk9MQogfQogCi1oYXZlUXQoNCkgewotICAg
IGhhdmVRdE1vZHVsZShkZWNsYXJhdGl2ZSk6IERFRklORVMgKz0gSEFWRV9RUVVJQ0sxPTEKLX0g
ZWxzZSB7Ci0gICAgIyBGSVhNRTogQWRkIFF0IDUgUVF1aWNrMSBzdXBwb3J0IG9uY2UgUURlY2xh
cmF0aXZlRW5naW5lIGluIFFRdWljazIKLSAgICAjIGlzIGNhbGxlZCBRbWxFbmdpbmUgYW5kIGl0
IGlzIHNhZmUgZm9yIHVzIHRvIHVzZSBRUXVpY2sxIGFnYWluLgotfQotCiAjIFhjb21wb3NpdGUg
U3VwcG9ydAotaGF2ZVF0KDUpOmxpbnV4LSo6Y29uZmlnX2xpYlhjb21wb3NpdGU6IERFRklORVMg
Kz0gSEFWRV9YQ09NUE9TSVRFPTEKK2xpbnV4LSo6Y29uZmlnX2xpYlhjb21wb3NpdGU6IERFRklO
RVMgKz0gSEFWRV9YQ09NUE9TSVRFPTEKIAogIyBTdXBwb3J0IGZvciBHcmFwaGljcyBTdXJmYWNl
CiAhY29udGFpbnMoREVGSU5FUywgV1RGX1VTRV9HUkFQSElDU19TVVJGQUNFPS4pIHsKLSAgICBo
YXZlUXQoNSkgewotICAgICAgICBtYWM6IERFRklORVMgKz0gV1RGX1VTRV9HUkFQSElDU19TVVJG
QUNFPTEKLSAgICAgICAgIyBPbiBsaW51eCB3ZSByZXF1aXJlIGxpYlhjb21wb3NpdGUgdG8gZW5h
YmxlIGdyYXBoaWNzIHN1cmZhY2UuCi0gICAgICAgIGxpbnV4LSo6Y29udGFpbnMoREVGSU5FUywg
SEFWRV9YQ09NUE9TSVRFPTEpOiBERUZJTkVTICs9IFdURl9VU0VfR1JBUEhJQ1NfU1VSRkFDRT0x
Ci0gICAgfQorICAgIG1hYzogREVGSU5FUyArPSBXVEZfVVNFX0dSQVBISUNTX1NVUkZBQ0U9MQor
ICAgICMgT24gbGludXggd2UgcmVxdWlyZSBsaWJYY29tcG9zaXRlIHRvIGVuYWJsZSBncmFwaGlj
cyBzdXJmYWNlLgorICAgIGxpbnV4LSo6Y29udGFpbnMoREVGSU5FUywgSEFWRV9YQ09NUE9TSVRF
PTEpOiBERUZJTkVTICs9IFdURl9VU0VfR1JBUEhJQ1NfU1VSRkFDRT0xCiB9CiAKICMgLS0tLS0t
LS0tLS0tLS0gRmlsbCBpbiBzdGF0aWMgZGVmYXVsdHMgLS0tLS0tLS0tLS0tLS0KQEAgLTIyNSwx
MCArMTk1LDcgQEAgZm9yKGRlZmluZSwgREVGSU5FUykgewogIWNvbnRhaW5zKERFRklORVMsIFdU
Rl9VU0VfM0RfR1JBUEhJQ1M9LikgewogICAgICMgRGlzYWJsZSBVU0UoM0RfR1JBUEhJQ1MpIG9u
IFdpbmRvd3MgdGVtcG9yYXJpbHksIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTA4NTAgZm9yIGRldGFpbHMuCiAgICAgIXdpbjMyLSogewotICAgICAgICBoYXZl
UXQoNSl8Y29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wpOiBERUZJTkVTICs9IFdURl9VU0VfM0Rf
R1JBUEhJQ1M9MQorICAgICAgICBERUZJTkVTICs9IFdURl9VU0VfM0RfR1JBUEhJQ1M9MQogICAg
IH0KIH0KIAotaGF2ZVF0KDQpOmNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKTpjb250
YWlucyhERUZJTkVTLCBXVEZfVVNFXzNEX0dSQVBISUNTPTApIHsKLSAgICBlcnJvcigiV2ViR0wg
cmVxdWlyZXMgUXQgdG8gYmUgY29uZmlndXJlZCB3aXRoIE9wZW5HTC4gUGxlYXNlIHJlY29uZmln
dXJlIFF0IHdpdGggT3BlbkdMLCBvciBidWlsZCBXZWJLaXQgd2l0aG91dCBXZWJHTC4iKQotfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mdW5jdGlvbnMucHJmIGIv
VG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mdW5jdGlvbnMucHJmCmluZGV4IGEwODZlNzY5
YmJhNjY5Mzk4MjljODZhZmE0NmRkNTZiZWM1NTkzYmQuLjk3MmEyMDc5ZjI4N2UxYmRkNjYwNjcx
MjBhMDY1ODUwZGRjNTllNmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvZnVuY3Rpb25zLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2Z1bmN0
aW9ucy5wcmYKQEAgLTEzNyw1MSArMTM3LDE2IEBAIGRlZmluZVRlc3QoYWRkU3RyaWN0U3ViZGly
T3JkZXJCZXR3ZWVuKSB7CiAgICAgZmlyc3RfYmFzZV90YXJnZXQgPSBzdWItJCRyZXBsYWNlKGZp
cnN0U3ViZGlyRmlsZSwgW15hLXpBLVowLTlfXSwgLSkKICAgICBzZWNvbmRfYmFzZV90YXJnZXQg
PSBzdWItJCRyZXBsYWNlKHNlY29uZFN1YmRpckZpbGUsIFteYS16QS1aMC05X10sIC0pCiAKLSAg
ICBoYXZlUXQoNCkgewotICAgICAgICAjIFVzZSBhIGN1c3RvbSB0YXJnZXQgZm9yIG1ha2luZyB0
aGUgZGVyaXZlZCBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgb25lcywKLSAgICAgICAg
IyBhcyB0aGUgZGVmYXVsdCBvbmVzIGRlcGVuZCBvbiAkKE1BS0VGSUxFKSwgd2hpbGUgd2Ugd2Fu
dCB0byBkZXBlbmQgb24gKnFtYWtlX2FsbC4KLSAgICAgICAgIyBXaXRob3V0IHRoaXMgcnVsZSB3
ZSBlbmQgdXAgcnVubmluZyBxbWFrZSB0d2ljZSBmb3IgdGhlIGRlcml2ZWQgc291cmNlcywgYXMg
d2VsbCBhcwotICAgICAgICAjIGludHJvZHVjaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgd2Ug
cnVuICJxbWFrZSAtbyBNYWtlZmlsZS5EZXJpdmVkU291cmNlcyIgYXQgdGhlCi0gICAgICAgICMg
c2FtZSB0aW1lIGFzIHdlIHJ1biAibWFrZSAtZiBNYWtlZmlsZS5EZXJpdmVkU291cmNlcyIsIHJl
c3VsdGluZyBpbiBtYWtlIHJlYWRpbmcgYQotICAgICAgICAjIGhhbGYtd3JpdHRlbiBtYWtlZmls
ZS4KLSAgICAgICAgZGVyaXZlZF9tYWtlX2Zvcl9xbWFrZS50YXJnZXQgPSAkJHtmaXJzdF9iYXNl
X3RhcmdldH0tbWFrZV9mb3JfcW1ha2UKLSAgICAgICAgZGVyaXZlZF9tYWtlX2Zvcl9xbWFrZS5k
ZXBlbmRzID0gJCR7Zmlyc3RfYmFzZV90YXJnZXR9LXFtYWtlX2FsbAotICAgICAgICBkZXJpdmVk
X21ha2VfZm9yX3FtYWtlLmNvbW1hbmRzID0gJChNQUtFKSAtZiAkJGV2YWwoJCR7Zmlyc3RTdWJk
aXJ9Lm1ha2VmaWxlKQotICAgICAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IGRlcml2ZWRfbWFr
ZV9mb3JfcW1ha2UKLQotICAgICAgICAjIFRoaXMgdGFyZ2V0IGVuc3VyZXMgdGhhdCBydW5uaW5n
ICJtYWtlIHFtYWtlIiB3aWxsIGZvcmNlIGJvdGggcW1ha2UgYW5kIG1ha2UKLSAgICAgICAgIyB0
byBiZSBydW4gb24gdGhlIGRlcml2ZWQgc291cmNlcyBiZWZvcmUgcnVubmluZyBxbWFrZSBvbiB0
aGUgdGFyZ2V0LCBzbyB0aGF0Ci0gICAgICAgICMgcW1ha2UgY2FuIHBpY2sgdXAgdGhlIHJpZ2h0
IGRlcGVuZGVuY2llcyBmb3IgdGhlIHRhcmdldCBiYXNlZCBvbiB0aGUgZGVyaXZlZAotICAgICAg
ICAjIHNvdXJjZXMgdGhhdCB3ZXJlIGdlbmVyYXRlZC4KLSAgICAgICAgdGFyZ2V0X21ha2VfcW1h
a2UudGFyZ2V0ID0gJCR7c2Vjb25kX2Jhc2VfdGFyZ2V0fS1xbWFrZV9hbGwKLSAgICAgICAgdGFy
Z2V0X21ha2VfcW1ha2UuZGVwZW5kcyA9ICQke2Rlcml2ZWRfbWFrZV9mb3JfcW1ha2UudGFyZ2V0
fQotICAgICAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IHRhcmdldF9tYWtlX3FtYWtlCi0KLSAg
ICAgICAgR05VbWFrZSB7Ci0gICAgICAgICAgICAjIFRoaXMgdGFyZ2V0IGVuc3VyZXMgdGhhdCBy
dW5uaW5nIG1ha2UgYmVmb3JlIGFueSBtYWtlZmlsZXMgaGF2ZSBiZWVuIGNyZWF0ZWQKLSAgICAg
ICAgICAgICMgd2lsbCBzdGlsbCBmb3JjZSBxbWFrZSBhbmQgbWFrZSB0byBiZSBydW4gb24gdGhl
IGRlcml2ZWQgc291cmNlcyBmaXJzdC4KLSAgICAgICAgICAgIHRhcmdldF9tYWtlLnRhcmdldCA9
ICQkZXZhbCgkJHtzZWNvbmRTdWJkaXJ9Lm1ha2VmaWxlKQotCi0gICAgICAgICAgICAjIFdlIHVz
ZSBvcmRlci1vbmx5LXByZXJlcXVpc2l0ZXMgc28gdGhhdCB3ZSBjYW4gcnVuIG1ha2Ugb24gdGhl
IGRlcml2ZWQgc291cmNlcwotICAgICAgICAgICAgIyB3aXRob3V0IHRyaWdnZXJpbmcgYSBxbWFr
ZSBydW4gb24gdGhlIHRhcmdldCBkdWUgdG8gdXBkYXRlZCBkZXBlbmRlbmNpZXMuCi0gICAgICAg
ICAgICB0YXJnZXRfbWFrZS5kZXBlbmRzID0gInwgJCR7Zmlyc3RfYmFzZV90YXJnZXR9LW1ha2Vf
ZGVmYXVsdC1vcmRlcmVkIgotCi0gICAgICAgICAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IHRh
cmdldF9tYWtlCi0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAjIFF0NSdzIHFtYWtl
IGRvZXMgbW9zdCBvZiB0aGUgYWJvdmUgZm9yIHVzIGFscmVhZHkuCi0KLSAgICAgICAgIyBUaGlz
IHRhcmdldCBlbnN1cmVzIHRoYXQgcnVubmluZyAibWFrZSBxbWFrZV9hbGwiIHdpbGwgZm9yY2Ug
Ym90aCBxbWFrZSBhbmQgbWFrZQotICAgICAgICAjIHRvIGJlIHJ1biBvbiB0aGUgZGVyaXZlZCBz
b3VyY2VzIGJlZm9yZSBydW5uaW5nIHFtYWtlIG9uIHRoZSB0YXJnZXQsIHNvIHRoYXQKLSAgICAg
ICAgIyBxbWFrZSBjYW4gcGljayB1cCB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzIGZvciB0aGUgdGFy
Z2V0IGJhc2VkIG9uIHRoZSBkZXJpdmVkCi0gICAgICAgICMgc291cmNlcyB0aGF0IHdlcmUgZ2Vu
ZXJhdGVkLiBKdXN0ICJtYWtlIHFtYWtlIiBpcyBub24tcmVjdXJzaXZlIGFueXdheS4KLSAgICAg
ICAgdGFyZ2V0X21ha2VfcW1ha2UudGFyZ2V0ID0gJCR7c2Vjb25kX2Jhc2VfdGFyZ2V0fS1xbWFr
ZV9hbGwKLSAgICAgICAgdGFyZ2V0X21ha2VfcW1ha2UuZGVwZW5kcyA9ICQke2ZpcnN0X2Jhc2Vf
dGFyZ2V0fQotICAgICAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IHRhcmdldF9tYWtlX3FtYWtl
Ci0KLSAgICAgICAgIyBNYWtlIHRoaW5ncyB3b3JrIGV2ZW4gaWYgcW1ha2UgLXIgaXMgdXNlZC4K
LSAgICAgICAgQ09ORklHICs9IGRvbnRfcmVjdXJzZQotICAgIH0KKyAgICAjIFRoaXMgdGFyZ2V0
IGVuc3VyZXMgdGhhdCBydW5uaW5nICJtYWtlIHFtYWtlX2FsbCIgd2lsbCBmb3JjZSBib3RoIHFt
YWtlIGFuZCBtYWtlCisgICAgIyB0byBiZSBydW4gb24gdGhlIGRlcml2ZWQgc291cmNlcyBiZWZv
cmUgcnVubmluZyBxbWFrZSBvbiB0aGUgdGFyZ2V0LCBzbyB0aGF0CisgICAgIyBxbWFrZSBjYW4g
cGljayB1cCB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzIGZvciB0aGUgdGFyZ2V0IGJhc2VkIG9uIHRo
ZSBkZXJpdmVkCisgICAgIyBzb3VyY2VzIHRoYXQgd2VyZSBnZW5lcmF0ZWQuIEp1c3QgIm1ha2Ug
cW1ha2UiIGlzIG5vbi1yZWN1cnNpdmUgYW55d2F5LgorICAgIHRhcmdldF9tYWtlX3FtYWtlLnRh
cmdldCA9ICQke3NlY29uZF9iYXNlX3RhcmdldH0tcW1ha2VfYWxsCisgICAgdGFyZ2V0X21ha2Vf
cW1ha2UuZGVwZW5kcyA9ICQke2ZpcnN0X2Jhc2VfdGFyZ2V0fQorICAgIFFNQUtFX0VYVFJBX1RB
UkdFVFMgKz0gdGFyZ2V0X21ha2VfcW1ha2UKKworICAgICMgTWFrZSB0aGluZ3Mgd29yayBldmVu
IGlmIHFtYWtlIC1yIGlzIHVzZWQuCisgICAgQ09ORklHICs9IGRvbnRfcmVjdXJzZQogCiAgICAg
ZXhwb3J0KFNVQkRJUlMpCiAgICAgZXhwb3J0KE5PX1JFQ1VSU0lWRV9RTUFLRV9TVUJESVJTKQpA
QCAtMjIzLDcgKzE4OCw2IEBAIGRlZmluZVRlc3QoaGF2ZVF0TW9kdWxlKSB7CiAgICAgdW5zZXQo
bW9kdWxlKQogICAgIG1vZHVsZSA9ICQkMQogCi0gICAgaGF2ZVF0KDQpOmNvbnRhaW5zKFFUX0NP
TkZJRywgJCR7bW9kdWxlfSk6IHJldHVybih0cnVlKQogICAgIGhhdmVRdCg1KTohaXNFbXB0eShR
VC4kJHttb2R1bGV9Lm5hbWUpOiByZXR1cm4odHJ1ZSkKICAgICByZXR1cm4oZmFsc2UpCiB9CkBA
IC0zMTAsNDggKzI3NCwxMCBAQCBkZWZpbmVUZXN0KGxpbmtBZ2FpbnN0TGlicmFyeSkgewogICAg
IHJldHVybih0cnVlKQogfQogCi1kZWZpbmVUZXN0KHJ1blN5bmNRdCkgewotCi0gICAgYnVpbGRf
cGFzczpyZXR1cm4odHJ1ZSkKLQotICAgIGhhdmVRdCg1KSB7Ci0gICAgICAgICMgUXQgNSB3aWxs
IHJ1biBzeW5xdCBhcyBwYXJ0IG9mIGRlZmF1bHRzX3ByZSwgc28gbm8gbmVlZCB0byBkbyBhbnl0
aGluZwotICAgIH0gZWxzZSB7Ci0gICAgICAgICMgVXNlIG91ciBvd24gY29weSBvZiBzeW5jcXQg
ZnJvbSBRdCA0LjggdG8gZ2VuZXJhdGUgZm9yd2FyZGluZyBoZWFkZXJzCi0gICAgICAgIHN5bmNx
dCA9ICQkdG9TeXN0ZW1QYXRoKCQke1JPT1RfV0VCS0lUX0RJUn0vVG9vbHMvcW1ha2Uvc3luY3F0
LTQuOCkKLSAgICAgICAgY29tbWFuZCA9ICQkc3luY3F0Ci0gICAgICAgIHdpbjMyLW1zdmMqOiBj
b21tYW5kID0gJCRjb21tYW5kIC13aW5kb3dzCi0KLSAgICAgICAgb3V0ZGlyID0gJCR0b1N5c3Rl
bVBhdGgoJCR7Uk9PVF9CVUlMRF9ESVJ9KQotCi0gICAgICAgICMgVGhlIG1vZHVsZSByb290IGhh
cyB0byBiZSB0aGUgc2FtZSBhcyBkaXJlY3Rvcnkgb2YgdGhlIHByby1maWxlIHRoYXQgZ2VuZXJh
dGVzCi0gICAgICAgICMgdGhlIGluc3RhbGwgcnVsZXMgKGFwaS5wcmkpLCBvdGhlcndpc2UgdGhl
IHJlbGF0aXZlIHBhdGhzIGluIHRoZSBnZW5lcmF0ZWQKLSAgICAgICAgIyBoZWFkZXJzLnByaSB3
aWxsIGJlIGluY29ycmVjdC4KLSAgICAgICAgbW9kdWxlX3Jvb3RkaXIgPSAkJHRvU3lzdGVtUGF0
aCgkJHtfUFJPX0ZJTEVfUFdEX30pCi0KLSAgICAgICAgbW9kdWxlID0gJCR7VEFSR0VUfSQke0RJ
UkxJU1RfU0VQQVJBVE9SfSQke21vZHVsZV9yb290ZGlyfSQke0RJUkxJU1RfU0VQQVJBVE9SfSQk
dG9TeXN0ZW1QYXRoKFdlYktpdC9xdC9BcGkpCi0gICAgICAgIGNvbW1hbmQgPSBwZXJsICQke2Nv
bW1hbmR9IC1vdXRkaXIgJCR7b3V0ZGlyfSAtc2VwYXJhdGUtbW9kdWxlICQke21vZHVsZX0KLSAg
ICAgICAgbWVzc2FnZShSdW5uaW5nICQkY29tbWFuZCkKLSAgICAgICAgIXN5c3RlbSgkJGNvbW1h
bmQpIHsKLSAgICAgICAgICAgIGVycm9yKEZhaWxlZCB0byBydW4gJCR7Y29tbWFuZH0pCi0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4odHJ1ZSkKLX0KLQogZGVmaW5lVGVzdCh4bGliQXZh
aWxhYmxlKSB7Ci0gICAgaGF2ZVF0KDUpIHsKLSAgICAgICAgY29udGFpbnMoUVRfQ09ORklHLCB4
Y2IteGxpYikgewotICAgICAgICAgICAgcmV0dXJuKHRydWUpCi0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICByZXR1cm4oZmFsc2UpCi0gICAgICAgIH0KKyAgICBjb250YWlucyhRVF9DT05G
SUcsIHhjYi14bGliKSB7CisgICAgICAgIHJldHVybih0cnVlKQogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHVuaXg6IW1hYzohZW1iZWRkZWQgewotICAgICAgICAgICAgcmV0dXJuKHRydWUpCi0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4oZmFsc2UpCi0gICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuKGZhbHNlKQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvcXR3ZWJraXQucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9x
dHdlYmtpdC5wcmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZTBiOGI2OTMwZjNj
ZWEwMDdlNzQwMzNiZTg0M2RlMmQzMGE5NGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9xdHdlYmtpdC5w
cmYKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhpcyBm
aWxlIGlzIHVzZWQgYnkgdG9vbHMgdGhhdCByZWx5IG9uIHRoZSBRdFdlYktpdCBsaWJyYXJ5Ci0j
Ci0jIEl0IGlzIG9ubHkgdXNlZCBmb3IgUXQ0LCB3aGljaCBkb2VzIG5vdCBoYXZlIGEgbW9kdWxl
IHN5c3RlbS4KLSMKLSMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBv
ZiB0aGUgYnVpbGQgc3lzdGVtCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaGF2ZVF0KDQpIHsKLSAgICBRTUFL
RV9MSUJESVIgPSAkJFJPT1RfQlVJTERfRElSL2xpYiAkJFFNQUtFX0xJQkRJUgotICAgIFFUV0VC
S0lUTElCTkFNRSA9IFF0V2ViS2l0Ci0gICAgbWFjOiFzdGF0aWM6Y29udGFpbnMoUVRfQ09ORklH
LCBxdF9mcmFtZXdvcmspOiFDT05GSUcod2Via2l0X25vX2ZyYW1ld29yaykgewotICAgICAgICBM
SUJTICs9IC1mcmFtZXdvcmsgJCRRVFdFQktJVExJQk5BTUUKLSAgICAgICAgUU1BS0VfRlJBTUVX
T1JLUEFUSCA9ICQkUk9PVF9CVUlMRF9ESVIvbGliICQkUU1BS0VfRlJBTUVXT1JLUEFUSAotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGJ1aWxkX3Bhc3M6IHdpbjMyLSp8d2luY2UqIHsKLSAgICAgICAg
ICAgICFDT05GSUcocmVsZWFzZSwgZGVidWd8cmVsZWFzZSk6IFFUV0VCS0lUTElCTkFNRSA9ICQk
e1FUV0VCS0lUTElCTkFNRX1kCi0gICAgICAgICAgICBRVFdFQktJVExJQk5BTUUgPSAkJHtRVFdF
QktJVExJQk5BTUV9JCR7UVRfTUFKT1JfVkVSU0lPTn0KLSAgICAgICAgICAgIHdpbjMyLWcrKyo6
IExJQlMgKz0gLWwkJFFUV0VCS0lUTElCTkFNRQotICAgICAgICAgICAgZWxzZTogTElCUyArPSAk
JHtRVFdFQktJVExJQk5BTUV9LmxpYgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTElC
UyArPSAtbFF0V2ViS2l0Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBERVBFTkRQQVRIICs9ICQk
Uk9PVF9XRUJLSVRfRElSL1NvdXJjZS9XZWJLaXQvcXQvQXBpCi0gICAgSU5DTFVERVBBVEggKz0g
JCR7Uk9PVF9CVUlMRF9ESVJ9L2luY2x1ZGUvUXRXZWJLaXQKLX0gZWxzZSB7Ci0gICAgZXJyb3Io
UmVseWluZyBvbiAkJF9GSUxFXyBmb3IgUXQ1IGJ1aWxkcyBhcmUgbm90IHN1cHBvcnRlZCkKLX0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvdW5peC9kZWZhdWx0X3By
ZS5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3VuaXgvZGVmYXVsdF9wcmUucHJm
CmluZGV4IGMyMzcxMzUyMGI0OGZhOWZkN2FjMWUxNTAzMzE4YTQ2NDllODk5NTMuLjgzYjdjYzRh
OWRmM2MxNmM2MDA5NTVjZDhjNWRkNmZhNmYwM2VlNWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtl
L21rc3BlY3MvZmVhdHVyZXMvdW5peC9kZWZhdWx0X3ByZS5wcmYKKysrIGIvVG9vbHMvcW1ha2Uv
bWtzcGVjcy9mZWF0dXJlcy91bml4L2RlZmF1bHRfcHJlLnByZgpAQCAtNiw3ICs2LDcgQEAKIAog
bG9hZChmdW5jdGlvbnMpCiAKLWhhdmVRdCg1KTogQ09ORklHICs9IG9iamVjdF9wYXJhbGxlbF90
b19zb3VyY2UKK0NPTkZJRyArPSBvYmplY3RfcGFyYWxsZWxfdG9fc291cmNlCiAKICMgRXhwb3Nl
IGlmIHdlIGFyZSBidWlsZGluZyBpbnNpZGUgU2NyYXRjaGJveAogU0JPWF9DSEVDSyA9ICQkKF9T
Qk9YX0RJUikKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyMjVhMDU5
NzdkMDUzOWZlMzVmODNlMzk0YWE5MjY4N2FlMjg1MGFmLi40YjRiMmMwNDk4ODJkMjI2NmFkNTNk
OTBjOTVmNWNhN2U1NGYxYzg5IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDctMTkgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1
c21hbm5Abm9raWEuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3ZlIFF0IDQgc3BlY2lmaWMgY29k
ZSBwYXRocworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODgxNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNvdXJjZS9hcGkucHJpOgorICAgICAgICAqIFdlYktpdC5wcm86CisKIDIwMTItMDctMTkgIE1h
cmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
IEVuYWJsZSBNSFRNTCBzdXBwb3J0IGJ5IGRlZmF1bHQgYXQgYnVpbGQgdGltZQpkaWZmIC0tZ2l0
IGEvV2ViS2l0LnBybyBiL1dlYktpdC5wcm8KaW5kZXggZWYyNWVhNTExZTM4ZWNjN2E2ZTAxYzEw
ZWFhNzRkZTFmYmQ2Yjg0ZC4uOGY3N2Y2M2U3OGMyMzMzY2VlZjc2Y2VlZDE0YzNlZDE2OTRmZDIy
MiAxMDA2NDQKLS0tIGEvV2ViS2l0LnBybworKysgYi9XZWJLaXQucHJvCkBAIC01LDE0ICs1LDYg
QEAKICMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVp
bGQgc3lzdGVtCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaGF2ZVF0KDQpIHsKLSAgICBRTUFLRVBBVEggPSAk
JChRTUFLRVBBVEgpCi0gICAgaXNFbXB0eShRTUFLRVBBVEgpfCFleGlzdHMoJCR7UU1BS0VQQVRI
fS9ta3NwZWNzKSB7Ci0gICAgICAgIGVycm9yKCJUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUU1B
S0VQQVRIIG5lZWRzIHRvIHBvaW50IHRvICRXRUJLSVRTUkMvVG9vbHMvcW1ha2UiKQotICAgICAg
ICAjIE90aGVyd2lzZSB3ZSB3b24ndCBwaWNrIHVwIHRoZSBmZWF0dXJlIHByZiBmaWxlcyBuZWVk
ZWQgZm9yIHRoZSBidWlsZAotICAgIH0KLX0KLQogVEVNUExBVEUgPSBzdWJkaXJzCiBDT05GSUcg
Kz0gb3JkZXJlZAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156049</attachid>
            <date>2012-08-02 05:37:36 -0700</date>
            <delta_ts>2012-08-02 09:45:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88161-20120802143802.patch</filename>
            <type>text/plain</type>
            <size>219590</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGIzNDkyYmZiNDIyYzZlMGJhYjljMjIy
MjA3NjRlOWZkYjgwMGMzZmYuLjI1YzBhZmJiOGE4M2ZiZWQwZTdkNThmMGI2NDJiOTA3MWFjNjFi
ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTItMDctMTkgIFNpbW9uIEhhdXNtYW5uICA8c2lt
b24uaGF1c21hbm5Abm9raWEuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3ZlIFF0IDQgc3BlY2lm
aWMgY29kZSBwYXRocworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODgxNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdURi5wcmk6CisgICAgICAgICogV1RGLnBybzoKKyAgICAgICAgKiB3dGYvcXQvU3Ry
aW5nUXQuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OlN0cmluZyk6CisgICAgICAgIChXVEY6
OlN0cmluZzo6b3BlcmF0b3IgUVN0cmluZyk6CisgICAgICAgICogd3RmL3F0L1V0aWxzUXQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvcXQvY29tcGF0L1FHdWlBcHBsaWNhdGlvbjogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3dGYvcXQvY29tcGF0L3FndWlhcHBsaWNhdGlvbi5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJ
bXBsOjp+U3RyaW5nSW1wbCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0
cmluZ0ltcGwuaDoKKyAgICAgICAgKFN0cmluZ0ltcGwpOgorCiAyMDEyLTA4LTAxICBQYXRyaWNr
IEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlcGxhY2UgV1RGOjpn
ZXRDdXJyZW50TG9jYWxUaW1lKCkgd2l0aCBHcmVnb3JpYW5EYXRlVGltZTo6c2V0VG9DdXJyZW50
TG9jYWxUaW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NzgzZDBhYTQwY2VmN2JkYjI4NWFhMmNlMjIyMTgy
YWQ0ZGJkMTU0Li44YTIyYTc4N2ZhMGQ4ZTFlOGYzOGY2MzkzOTRlODQxZjljYzliYzA5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMTItMDgtMDIgIFNpbW9uIEhhdXNtYW5uICA8c2lt
b24uaGF1c21hbm5Abm9raWEuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3ZlIFF0IDQgc3BlY2lm
aWMgY29kZSBwYXRocworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODgxNjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICogYnJp
ZGdlL3F0L3F0X2NsYXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0Q2xhc3M6OmZh
bGxiYWNrT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpRdEZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UpOgorICAgICAgICAqIGJy
aWRnZS9xdC9xdF9ydW50aW1lLmg6CisgICAgICAgIChRdENvbm5lY3Rpb25PYmplY3QpOgorICAg
ICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
ZWRpdGluZy9xdC9TbWFydFJlcGxhY2VRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9x
dC9FdmVudEhhbmRsZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnRh
YnNUb0FsbEZvcm1Db250cm9scyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRQcm9jQWRkcmVzcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvd1ByaXZhdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvd1F0LmNwcDoKKyAgICAgICAg
KEZ1bGxTY3JlZW5WaWRlb1dpbmRvdzo6RnVsbFNjcmVlblZpZGVvV2luZG93KToKKyAgICAgICAg
KEZ1bGxTY3JlZW5WaWRlb1dpbmRvdzo6a2V5UHJlc3NFdmVudCk6CisgICAgICAgIChGdWxsU2Ny
ZWVuVmlkZW9XaW5kb3c6OmV2ZW50KToKKyAgICAgICAgKEZ1bGxTY3JlZW5WaWRlb1dpbmRvdzo6
c2hvd0Z1bGxTY3JlZW4pOgorICAgICAgICAoUGxhdGZvcm1WaWRlb1dpbmRvdzo6UGxhdGZvcm1W
aWRlb1dpbmRvdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQW5kUmVzdG9yZUNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ3VycmVudElmTmVlZGVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpT
aGFyZWRHTERhdGE6OmdldEN1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L0RldmljZU1vdGlvblByb3ZpZGVyUXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9EZXZpY2VP
cmllbnRhdGlvblByb3ZpZGVyUXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9LVVJMUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6b3BlcmF0b3IgUVVybCk6CisgICAgICAgICogcGxh
dGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5E
ZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUpOgorICAgICAgICAoV2ViQ29yZTo6c2Ny
ZWVuUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5BdmFpbGFibGVSZWN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oOgorICAgICAgICAoUVdlYlBhZ2VDbGll
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvcXQvVGV4dEJyZWFrSXRlcmF0b3JRdC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGx1Z2lucy9xdC9QbHVnaW5Db250YWluZXJRdC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcGx1Z2lucy9xdC9QbHVnaW5Db250YWluZXJRdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
dWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2U6OmlzUGx1Z2luQmxhY2tsaXN0ZWQpOgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2lu
Vmlld1F0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldEZvY3VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50VXNpbmdYUGl4bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldFNoYXJlZFhFdmVudEZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnNldFBhcmVudFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxh
dGZvcm1HZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRWaXN1YWxBbmRDb2xvcm1hcCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKiBwbHVnaW5z
L3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKHdpbmRvd0hhbmRsZUZvclBhZ2VDbGll
bnQpOgorCiAyMDEyLTA4LTAyICBab2x0YW4gSGVyY3plZyAgPHpoZXJjemVnQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgQWxpZ25tZW50IGlzc3VlIGZvciByZWFkVGltZSBpbiBQbHVnaW5EYXRhYmFz
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggMTk5OTRkMWU2NGUyZmQ4N2ZmZmQ2NWVkYzgyZTI2YmE3OTMxYmE4
Ny4uMzg0MDE1MDI1NWY3OTdmYTc3OTliYjI4MGRkMzNlYTM0NjdjMjkwOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxMi0wNy0xOSAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFu
bkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBSZW1vdmUgUXQgNCBzcGVjaWZpYyBjb2RlIHBh
dGhzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODE2
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
S2l0LnByaToKKyAgICAgICAgKiBXZWJLaXQxLnByaToKKyAgICAgICAgKiBXZWJLaXQxLnBybzoK
KwogMjAxMi0wNy0zMCAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCBRdC9NYWMgYnVpbGQgZml4OiBVc2UgbGliV2ViS2l0U3lz
dGVtSW50ZXJmYWNlTW91bnRhaW5MaW9uLmEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNjBmZDM1MGYyMzBj
MDgxMzI1Y2FhMWFkOTIzZWEwMmMyNGM0NWRkNy4uYWZhMzFjODYzMjU0NjRhNWZmNmRjZGY1ZjI3
YzA0NGJjNDA3OTUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMi0wOC0w
MiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CisKKyAgICAgICAg
W1F0XSBSZW1vdmUgUXQgNCBzcGVjaWZpYyBjb2RlIHBhdGhzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODE2MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwOgor
ICAgICAgICAoUUdyYXBoaWNzV2ViVmlldzo6c2NlbmVFdmVudCk6CisgICAgICAgICogQXBpL3Fn
cmFwaGljc3dlYnZpZXcuaDoKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAg
KiBBcGkvcXdlYmZyYW1lLmg6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZV9wLmg6CisgICAgICAg
ICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjpldmVudCk6CisgICAgICAg
ICogQXBpL3F3ZWJwYWdlLmg6CisgICAgICAgICogQXBpL3F3ZWJzZXR0aW5ncy5jcHA6CisgICAg
ICAgIChRV2ViU2V0dGluZ3M6OmVuYWJsZVBlcnNpc3RlbnRTdG9yYWdlKToKKyAgICAgICAgKiBB
cGkvcXdlYnZpZXcuY3BwOgorICAgICAgICAoUVdlYlZpZXc6OlFXZWJWaWV3KToKKyAgICAgICAg
KFFXZWJWaWV3OjpldmVudCk6CisgICAgICAgICogQXBpL3F3ZWJ2aWV3Lmg6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21lQ2xpZW50UXQ6OnNldFRvb2xUaXApOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRR
dDo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNs
aWVudFF0LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0
Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcDoKKyAgICAgICAg
KGNyZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RGcm9tV2lkZ2V0KToKKyAgICAgICAgKFFX
ZWJQYWdlQ2xpZW50Ojpvd25lcldpbmRvdyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RXZlbnRDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFBsYXRmb3JtVG91
Y2hFdmVudDo6V2ViS2l0UGxhdGZvcm1Ub3VjaEV2ZW50KToKKyAgICAgICAgKiBkZWNsYXJhdGl2
ZS9kZWNsYXJhdGl2ZS5wcm86CisgICAgICAgICogZGVjbGFyYXRpdmUvcGx1Z2luLmNwcDoKKyAg
ICAgICAgKiBkZWNsYXJhdGl2ZS9wdWJsaWMucHJpOgorICAgICAgICAqIGV4YW1wbGVzL3BsYXRm
b3JtcGx1Z2luL1dlYlBsdWdpbi5jcHA6CisgICAgICAgIChXZWJQbHVnaW46OmNyZWF0ZUV4dGVu
c2lvbik6CisgICAgICAgICogZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmg6Cisg
ICAgICAgIChXZWJQbHVnaW4pOgorICAgICAgICAqIGV4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3Bs
YXRmb3JtcGx1Z2luLnBybzoKKyAgICAgICAgKiB0ZXN0cy9xb2JqZWN0YnJpZGdlL3RzdF9xb2Jq
ZWN0YnJpZGdlLmNwcDoKKyAgICAgICAgKHRzdF9RT2JqZWN0QnJpZGdlOjphcnJheU9iamVjdEVu
dW1lcmFibGUpOgorICAgICAgICAodHN0X1FPYmplY3RCcmlkZ2U6Om93bmVyc2hpcCk6CisgICAg
ICAgICh0c3RfUU9iamVjdEJyaWRnZTo6cU9iamVjdFdyYXBwZXJXaXRoU2FtZUlkZW50aXR5KToK
KyAgICAgICAgKiB0ZXN0cy90ZXN0cy5wcmk6CisgICAgICAgICogdGVzdHMvdXRpbC5oOgorCiAy
MDEyLTA4LTAxICBaZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgogCiAgICAgICAgIFtR
dF1SRUdSRVNTSU9OKHIxMjM3ODYpOiBJdCBtYWRlIDMgZmFzdC9hbmltYXRpb24gdGVzdHMgZmFp
bC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCBkYmY2N2Y3NWQ1MDllYTg1ZjNhZTM1MmE0NTM2YTJmMTA5Njc2MTNk
Li40NjA4MWE5ZWRhZmExNmM2OTJiMjMwMTRiYzkwNzIyYmUzZmE5NTVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTItMDctMTkgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21h
bm5Abm9raWEuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3ZlIFF0IDQgc3BlY2lmaWMgY29kZSBw
YXRocworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgx
NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy9wdWJsaWNhcGkvdHN0X3B1YmxpY2FwaS5jcHA6CisgICAgICAgIChnYXRoZXJB
UEkpOgorICAgICAgICAqIFdlYktpdDIucHJpOgorCiAyMDEyLTA4LTAxICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBTbWFsbCBwYXJ0IG9mICJPdXQtb2YtcHJv
Y2VzcyBwbHVnLWlucyBzaG91bGQgc3VwcG9ydCBhc3luY2hyb25vdXMgaW5pdGlhbGl6YXRpb24u
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYucHJpIGIvU291cmNlL1dURi9XVEYucHJpCmlu
ZGV4IDAyNGM3ZjY5ZjQzNzc1YThhMzRiOWRmMzg4NzMzZTlmN2Q5YTZiN2IuLjJjZmI2ZjgyYmJl
Mjc4MWE0YWI2MTRhMmQwNTJlZjUwMDVlZjk1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RG
LnByaQorKysgYi9Tb3VyY2UvV1RGL1dURi5wcmkKQEAgLTgsMTkgKzgsMTcgQEAKICMgQWxsIGV4
dGVybmFsIG1vZHVsZXMgc2hvdWxkIGluY2x1ZGUgV1RGIGhlYWRlcnMgYnkgcHJlZml4aW5nIHdp
dGggInd0ZiIgKCNpbmNsdWRlIDx3dGYvc29tZS90aGluZy5oPikuCiBJTkNMVURFUEFUSCArPSAk
JFBXRAogCi1oYXZlUXQoNSkgewotICAgIG1hYyB7Ci0gICAgICAgICMgTWFjIE9TIGRvZXMgc2hp
cCBsaWJpY3UgYnV0IG5vdCB0aGUgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMuCi0gICAgICAgICMg
VGhlcmVmb3JlIFdlYktpdCBwcm92aWRlcyBhZGVxdWF0ZSBoZWFkZXIgZmlsZXMuCi0gICAgICAg
IElOQ0xVREVQQVRIICs9ICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dURi9pY3UKLSAgICAg
ICAgTElCUyArPSAtbGljdWNvcmUKK21hYyB7CisgICAgIyBNYWMgT1MgZG9lcyBzaGlwIGxpYmlj
dSBidXQgbm90IHRoZSBhc3NvY2lhdGVkIGhlYWRlciBmaWxlcy4KKyAgICAjIFRoZXJlZm9yZSBX
ZWJLaXQgcHJvdmlkZXMgYWRlcXVhdGUgaGVhZGVyIGZpbGVzLgorICAgIElOQ0xVREVQQVRIICs9
ICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dURi9pY3UKKyAgICBMSUJTICs9IC1saWN1Y29y
ZQorfSBlbHNlIHsKKyAgICBjb250YWlucyhRVF9DT05GSUcsaWN1KSB7CisgICAgICAgIHdpbjMy
OiBMSUJTICs9IC1saWN1aW4gLWxpY3V1YyAtbGljdWR0CisgICAgICAgIGVsc2U6IExJQlMgKz0g
LWxpY3VpMThuIC1saWN1dWMgLWxpY3VkYXRhCiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGFp
bnMoUVRfQ09ORklHLGljdSkgewotICAgICAgICAgICAgd2luMzI6IExJQlMgKz0gLWxpY3VpbiAt
bGljdXVjIC1saWN1ZHQKLSAgICAgICAgICAgIGVsc2U6IExJQlMgKz0gLWxpY3VpMThuIC1saWN1
dWMgLWxpY3VkYXRhCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlcnJvcigiVG8gYnVp
bGQgUXRXZWJLaXQgd2l0aCBRdCA1IHlvdSBuZWVkIElDVSIpCi0gICAgICAgIH0KKyAgICAgICAg
ZXJyb3IoIlRvIGJ1aWxkIFF0V2ViS2l0IHdpdGggUXQgNSB5b3UgbmVlZCBJQ1UiKQogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYucHJvIGIvU291cmNlL1dURi9XVEYucHJv
CmluZGV4IDAwZGVlNTRiNTllMWZlOTkzNjk3MjFhNTg2YWI1NTY2ZGFhNTRmMjYuLmQ2NmUyOTU2
MGViMmI5NTAwMjlhNmZjODVkN2QwNjVlNjUzZDJmZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
V1RGLnBybworKysgYi9Tb3VyY2UvV1RGL1dURi5wcm8KQEAgLTExMCw3ICsxMTAsNiBAQCBIRUFE
RVJTICs9IFwKICAgICBQYXNzVHJhaXRzLmggXAogICAgIFBsYXRmb3JtLmggXAogICAgIFBvc3Np
Ymx5TnVsbC5oIFwKLSAgICBxdC9VdGlsc1F0LmggXAogICAgIFJhbmRvbU51bWJlci5oIFwKICAg
ICBSYW5kb21OdW1iZXJTZWVkLmggXAogICAgIFJlZEJsYWNrVHJlZS5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3F0L1N0cmluZ1F0LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3F0L1N0cmlu
Z1F0LmNwcAppbmRleCA0M2M0ZjgxZjAyOGM3NzViZmE5ZTZhYmZiOTYzODljNWM0N2Q5NmVlLi5h
ZDg4YzAzZjdkZjRiMTFkMGViN2JkMGY1MGJmNzZjMWYxNGVlZWJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9xdC9TdHJpbmdRdC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvcXQvU3RyaW5n
UXQuY3BwCkBAIC0zNywxMSArMzcsNyBAQCBTdHJpbmc6OlN0cmluZyhjb25zdCBRU3RyaW5nJiBx
c3RyKQogewogICAgIGlmIChxc3RyLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47Ci0jaWYgSEFW
RShRVDUpCiAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6YWRvcHQoY29uc3RfY2FzdDxRU3RyaW5n
Jj4ocXN0cikuZGF0YV9wdHIoKSk7Ci0jZWxzZQotICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZShyZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBVQ2hhcio+KHFzdHIuY29uc3REYXRhKCkp
LCBxc3RyLmxlbmd0aCgpKTsKLSNlbmRpZgogfQogCiBTdHJpbmc6OlN0cmluZyhjb25zdCBRU3Ry
aW5nUmVmJiByZWYpCkBAIC01Niw3ICs1Miw2IEBAIFN0cmluZzo6b3BlcmF0b3IgUVN0cmluZygp
IGNvbnN0CiAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CiAKLSNp
ZiBIQVZFKFFUNSkKICAgICBpZiAoUVN0cmluZ0RhdGEqIHFTdHJpbmdEYXRhID0gbV9pbXBsLT5x
U3RyaW5nRGF0YSgpKSB7CiAgICAgICAgIC8vIFRoZSBXVEYgc3RyaW5nIHdhcyBhZG9wdGVkIGZy
b20gYSBRU3RyaW5nIGF0IHNvbWUgcG9pbnQsIHNvIHdlCiAgICAgICAgIC8vIGNhbiBqdXN0IGFk
b3B0IHRoZSBRU3RyaW5nRGF0YSBsaWtlIGEgcmVndWxhciBRU3RyaW5nIGNvcHkuCkBAIC02NCw3
ICs1OSw3IEBAIFN0cmluZzo6b3BlcmF0b3IgUVN0cmluZygpIGNvbnN0CiAgICAgICAgIFFTdHJp
bmdEYXRhUHRyIHFTdHJpbmdEYXRhUG9pbnRlciA9IHsgcVN0cmluZ0RhdGEgfTsKICAgICAgICAg
cmV0dXJuIFFTdHJpbmcocVN0cmluZ0RhdGFQb2ludGVyKTsKICAgICB9Ci0jZW5kaWYKKwogICAg
IGlmIChpczhCaXQoKSAmJiAhbV9pbXBsLT5oYXMxNkJpdFNoYWRvdygpKSB7CiAgICAgICAgIC8v
IEFza2luZyBmb3IgY2hhcmFjdGVycygpIG9mIGFuIDgtYml0IHN0cmluZyB3aWxsIG1ha2UgYSAx
Ni1iaXQgY29weSBpbnRlcm5hbGx5CiAgICAgICAgIC8vIGluIFdURjo6U3RyaW5nLiBTaW5jZSB3
ZSdyZSBnb2luZyB0byBjb3B5IHRoZSBkYXRhIHRvIFFTdHJpbmdEYXRhIGFueXdheXMsIHdlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9xdC9VdGlsc1F0LmggYi9Tb3VyY2UvV1RGL3d0Zi9x
dC9VdGlsc1F0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYzllMzJjMTU2NGEy
NzJmZGU5M2JjMmRhNzljMzE5MDdhNWYzNDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvcXQvVXRpbHNRdC5oCisrKyAvZGV2L251
bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBXVEZfVXRp
bHNRdF9oCi0jZGVmaW5lIFdURl9VdGlsc1F0X2gKLQotI2luY2x1ZGUgPFFTdHJpbmc+Ci0jaWYg
IUhBVkUoUVQ1KQotI2luY2x1ZGUgPFFUZXh0RG9jdW1lbnQ+Ci0jZW5kaWYKLQotaW5saW5lIFFT
dHJpbmcgZXNjYXBlSHRtbChjb25zdCBRU3RyaW5nJiBzdHJpbmcpCi17Ci0jaWYgSEFWRShRVDUp
Ci0gICAgcmV0dXJuIHN0cmluZy50b0h0bWxFc2NhcGVkKCk7Ci0jZWxzZQotICAgIHJldHVybiBR
dDo6ZXNjYXBlKHN0cmluZyk7Ci0jZW5kaWYKLX0KLQotI2VuZGlmIC8vIFdURl9VdGlsc1F0X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3F0L2NvbXBhdC9RR3VpQXBwbGljYXRpb24gYi9T
b3VyY2UvV1RGL3d0Zi9xdC9jb21wYXQvUUd1aUFwcGxpY2F0aW9uCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMzM3ZTI1MjY1M2RkMDc1OTAwZWIzMTRhNDk1MTFiM2MwMWYwNTZkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYv
d3RmL3F0L2NvbXBhdC9RR3VpQXBwbGljYXRpb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBA
Ci0jaW5jbHVkZSAicWd1aWFwcGxpY2F0aW9uLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9xdC9jb21wYXQvcWd1aWFwcGxpY2F0aW9uLmggYi9Tb3VyY2UvV1RGL3d0Zi9xdC9jb21wYXQv
cWd1aWFwcGxpY2F0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMmZjMjNj
YjFhZDZhMzUzMWFkOTk3ZTVkNmY1ZmNkMTUxOGY1YzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvcXQvY29tcGF0L3FndWlhcHBs
aWNhdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2lmbmRlZiBxZ3VpYXBwbGljYXRpb25faAotI2RlZmluZSBxZ3VpYXBwbGljYXRpb25f
aAotCi0jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgotCi1zdHJ1Y3QgUUd1aUFwcGxpY2F0aW9uIDog
cHVibGljIFFBcHBsaWNhdGlvbgotewotICAgIC8vIFN0eWxlIGhpbnRzIGluIFF0IDUgY29udGFp
biBzdHVmZiB0aGF0IGp1c3QgdXNlZCB0byBiZSBpbiBRQXBwbGljYXRpb24gaW4gUXQgNCwgaGVu
Y2UKLSAgICAvLyB0aGlzIGhhY2suCi0gICAgc3RhdGljIFFBcHBsaWNhdGlvbiogc3R5bGVIaW50
cygpCi0gICAgewotICAgICAgICByZXR1cm4gcUFwcDsKLSAgICB9Ci19OwotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCmluZGV4IDQyNWU3NzNlZWJhMmU2NmUwZTc1NTE0MTlh
Nzk0ZjQ3NzZjMDIyZjYuLmQxY2E5NzkzMWI3MDhlMzBmZDljNTRiM2RjZmFiNDg5ODNiNDlhZjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcApAQCAtNjksNyArNjksNyBAQCBTdHJpbmdJ
bXBsOjp+U3RyaW5nSW1wbCgpCiAgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8TENoYXIqPiht
X2RhdGE4KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jaWYgUExBVEZPUk0oUVQpICYmIEhB
VkUoUVQ1KQorI2lmIFBMQVRGT1JNKFFUKQogICAgIGlmIChvd25lcnNoaXAgPT0gQnVmZmVyQWRv
cHRlZFFTdHJpbmcpIHsKICAgICAgICAgaWYgKCFtX3FTdHJpbmdEYXRhLT5yZWYuZGVyZWYoKSkK
ICAgICAgICAgICAgIFFTdHJpbmdEYXRhOjpkZWFsbG9jYXRlKG1fcVN0cmluZ0RhdGEpOwpAQCAt
MTY1Nyw3ICsxNjU3LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjphZG9w
dChTdHJpbmdCdWZmZXI8VUNoYXI+JiBidWZmZXIpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
dHJpbmdJbXBsKGJ1ZmZlci5yZWxlYXNlKCksIGxlbmd0aCkpOwogfQogCi0jaWYgUExBVEZPUk0o
UVQpICYmIEhBVkUoUVQ1KQorI2lmIFBMQVRGT1JNKFFUKQogUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjphZG9wdChRU3RyaW5nRGF0YSogcVN0cmluZ0RhdGEpCiB7CiAgICAgQVNT
RVJUKHFTdHJpbmdEYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggZDdiZDUyZWNm
MGM0YmNkZmRhODA1ZDgyMmViN2UxOTkwMjVkZGQyZC4uY2Q5NGJhMzQxYjA1Zjk2NjlmM2U2Mzk3
NmNmZjgzZjExZDM2MTFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTMxLDcgKzMx
LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5p
Y29kZS5oPgogCi0jaWYgUExBVEZPUk0oUVQpICYmIEhBVkUoUVQ1KQorI2lmIFBMQVRGT1JNKFFU
KQogI2luY2x1ZGUgPFFTdHJpbmc+CiAjZW5kaWYKIApAQCAtODgsNyArODgsNyBAQCBwcml2YXRl
OgogICAgICAgICBCdWZmZXJJbnRlcm5hbCwKICAgICAgICAgQnVmZmVyT3duZWQsCiAgICAgICAg
IEJ1ZmZlclN1YnN0cmluZywKLSNpZiBQTEFURk9STShRVCkgJiYgSEFWRShRVDUpCisjaWYgUExB
VEZPUk0oUVQpCiAgICAgICAgIEJ1ZmZlckFkb3B0ZWRRU3RyaW5nCiAjZW5kaWYKICAgICAgICAg
Ly8gTk9URTogQWRkaW5nIG1vcmUgb3duZXJzaGlwIHR5cGVzIG5lZWRzIHRvIGV4dGVuZCBtX2hh
c2hBbmRGbGFncyBhcyB3ZSdyZSBhdCBjYXBhY2l0eQpAQCAtMjI1LDcgKzIyNSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIG1faGFzaEFuZEZsYWdzID0gaGFzaCB8IEJ1ZmZlckludGVybmFsOwogICAg
IH0KIAotI2lmIFBMQVRGT1JNKFFUKSAmJiBIQVZFKFFUNSkKKyNpZiBQTEFURk9STShRVCkKICAg
ICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFkb3B0IGFuIGV4aXN0aW5nIFFT
dHJpbmcncyBkYXRhCiAgICAgZW51bSBDb25zdHJ1Y3RBZG9wdGVkUVN0cmluZ1RhZyB7IENvbnN0
cnVjdEFkb3B0ZWRRU3RyaW5nIH07CiAgICAgU3RyaW5nSW1wbChRU3RyaW5nRGF0YSogcVN0cmlu
Z0RhdGEsIENvbnN0cnVjdEFkb3B0ZWRRU3RyaW5nVGFnKQpAQCAtMzUxLDcgKzM1MSw3IEBAIHB1
YmxpYzoKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gYWRvcHQoU3RyaW5nQnVmZmVyPFVDaGFyPiYpOwogICAgIFdURl9FWFBPUlRfU1RSSU5H
X0FQSSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZG9wdChTdHJpbmdCdWZmZXI8TENo
YXI+Jik7CiAKLSNpZiBQTEFURk9STShRVCkgJiYgSEFWRShRVDUpCisjaWYgUExBVEZPUk0oUVQp
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRvcHQoUVN0cmluZ0RhdGEqKTsK
ICNlbmRpZgogCkBAIC00MTYsNyArNDE2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9oYXNo
QW5kRmxhZ3MgJj0gfnNfaGFzaEZsYWdJc0F0b21pYzsKICAgICB9CiAKLSNpZiBQTEFURk9STShR
VCkgJiYgSEFWRShRVDUpCisjaWYgUExBVEZPUk0oUVQpCiAgICAgUVN0cmluZ0RhdGEqIHFTdHJp
bmdEYXRhKCkgeyByZXR1cm4gYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyQWRvcHRlZFFTdHJp
bmcgPyBtX3FTdHJpbmdEYXRhIDogMDsgfQogI2VuZGlmCiAKQEAgLTY0NCw3ICs2NDQsNyBAQCBw
cml2YXRlOgogICAgICAgICB2b2lkKiBtX2J1ZmZlcjsKICAgICAgICAgU3RyaW5nSW1wbCogbV9z
dWJzdHJpbmdCdWZmZXI7CiAgICAgICAgIG11dGFibGUgVUNoYXIqIG1fY29weURhdGExNjsKLSNp
ZiBQTEFURk9STShRVCkgJiYgSEFWRShRVDUpCisjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFFT
dHJpbmdEYXRhKiBtX3FTdHJpbmdEYXRhOwogI2VuZGlmCiAgICAgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4
IDZiN2VhMzc2MDU1ZjFlMzE5MDU1NGJhZTc4Y2IyNGZhZjA0ZWMwNWMuLmU5ZDYwY2ExMWY1OWYw
YjdkNDg0NmVhZTczYmYwOGE4MDVjNGEzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTYsMTAgKzE2LDYg
QEAgQ09ORklHICs9IHN0YXRpY2xpYgogCiBERUZJTkVTICs9IFFUX01BS0VETEwKIAotIWhhdmVR
dCg1KSB7Ci0gICAgSU5DTFVERVBBVEggKz0gJCRQV0QvLi4vV1RGL3d0Zi9xdC9jb21wYXQKLX0K
LQogUkVTT1VSQ0VTICs9IFwKICAgICAkJFBXRC9XZWJDb3JlLnFyYwogCkBAIC0yMjksMTcgKzIy
NSwxMyBAQCBTT1VSQ0VTICs9IFwKICAgICAgYnJpZGdlL3F0L3F0X2NsYXNzLmNwcCBcCiAgICAg
IGJyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAgXAogICAgICBicmlkZ2UvcXQvcXRfcGl4bWFwcnVu
dGltZS5jcHAgXAorICAgICBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHAgXAogICAgICBicmlkZ2Uv
cnVudGltZV9hcnJheS5jcHAgXAogICAgICBicmlkZ2UvcnVudGltZV9tZXRob2QuY3BwIFwKICAg
ICAgYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcCBcCiAgICAgIGJyaWRnZS9ydW50aW1lX3Jvb3Qu
Y3BwIFwKICAgICAgdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCiAKLWhhdmVRdCg1
KSB7Ci0gICAgU09VUkNFUyArPSBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKLX0gZWxzZSB7Ci0g
ICAgU09VUkNFUyArPSBicmlkZ2UvcXQvcXRfcnVudGltZV9xdDQuY3BwCi19CiAKIFNPVVJDRVMg
Kz0gXAogICAgIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlUGF0aC5jcHAgXApAQCAtMjgxMiwx
OCArMjgwNCwxMyBAQCBtYWMgewogICAgICAgICBwbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxD
Ri5jcHAKIH0KIAotaGF2ZVF0KDUpIHsKLSAgICBjb250YWlucyhRVF9DT05GSUcsaWN1KXxtYWM6
IFNPVVJDRVMgKz0gcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAKLSAgICBt
YWMgewotICAgICAgICAjIEZvciBNYWMgd2UgdXNlIHRoZSBzYW1lIFNtYXJ0UmVwbGFjZSBpbXBs
ZW1lbnRhdGlvbiBhcyB0aGUgQXBwbGUgcG9ydC4KLSAgICAgICAgU09VUkNFUyArPSBlZGl0aW5n
L1NtYXJ0UmVwbGFjZUNGLmNwcAotICAgICAgICBJTkNMVURFUEFUSCArPSAkJFBXRC9pY3UKLSAg
ICB9IGVsc2UgewotICAgICAgICBTT1VSQ0VTICs9IGVkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNw
cAotICAgIH0KK2NvbnRhaW5zKFFUX0NPTkZJRyxpY3UpfG1hYzogU09VUkNFUyArPSBwbGF0Zm9y
bS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAorbWFjIHsKKyAgICAjIEZvciBNYWMgd2Ug
dXNlIHRoZSBzYW1lIFNtYXJ0UmVwbGFjZSBpbXBsZW1lbnRhdGlvbiBhcyB0aGUgQXBwbGUgcG9y
dC4KKyAgICBTT1VSQ0VTICs9IGVkaXRpbmcvU21hcnRSZXBsYWNlQ0YuY3BwCisgICAgSU5DTFVE
RVBBVEggKz0gJCRQV0QvaWN1CiB9IGVsc2UgewotICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vdGV4
dC9xdC9UZXh0QnJlYWtJdGVyYXRvclF0LmNwcCBcCi0gICAgICAgICAgICAgICBlZGl0aW5nL3F0
L1NtYXJ0UmVwbGFjZVF0LmNwcAorICAgIFNPVVJDRVMgKz0gZWRpdGluZy9TbWFydFJlcGxhY2VJ
Q1UuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJ
PTEpIHsKQEAgLTI4NDIsMTEgKzI4MjksNiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTkVU
U0NBUEVfUExVR0lOX0FQST0xKSB7CiAgICAgICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAg
ICAgICAgICBwbHVnaW5zL3F0L1BsdWdpblBhY2thZ2VRdC5jcHAgXAogICAgICAgICAgICAgICAg
IHBsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAotCi0gICAgICAgICAgICBoYXZlUXQoNCkgewot
ICAgICAgICAgICAgICAgIFNPVVJDRVMgKz0gcGx1Z2lucy9xdC9QbHVnaW5Db250YWluZXJRdC5j
cHAKLSAgICAgICAgICAgICAgICBIRUFERVJTICs9IHBsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVy
UXQuaAotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4
IGMwYTYzMzVlYzA5ZTFmYzM4ZmRhNTA1NTIzZDY0ZTZlOGNiMTMyOTguLjk3YjAxYjMyY2M5MjFi
OTkyMDVlOTY5YWM4OGNhYzUwNDhiMzIyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCkBAIC03LDggKzcsNyBA
QAogCiBTT1VSQ0VfRElSID0gJCR7Uk9PVF9XRUJLSVRfRElSfS9Tb3VyY2UvV2ViQ29yZQogCi1R
VCAqPSBuZXR3b3JrIHNxbAotaGF2ZVF0KDUpOiBRVCAqPSBjb3JlLXByaXZhdGUgZ3VpLXByaXZh
dGUKK1FUICo9IG5ldHdvcmsgc3FsIGNvcmUtcHJpdmF0ZSBndWktcHJpdmF0ZQogCiBXRUJDT1JF
X0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiA9ICQke1JPT1RfQlVJTERfRElSfS9Tb3VyY2UvV2ViQ29y
ZS8kJHtHRU5FUkFURURfU09VUkNFU19ERVNURElSfQogCkBAIC0xNTEsMTggKzE1MCw4IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJPTEpIHsKICAgICB9CiB9
CiAKLWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9HRU9MT0NBVElPTj0xKSB7Ci0gICAgQ09ORklH
ICo9IG1vYmlsaXR5Ci0gICAgTU9CSUxJVFkgKj0gbG9jYXRpb24KLX0KLQogY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX09SSUVOVEFUSU9OX0VWRU5UUz0xKXxjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfREVWSUNFX09SSUVOVEFUSU9OPTEpIHsKLSAgICBoYXZlUXQoNSkgewotICAgICAgICBRVCAr
PSBzZW5zb3JzCi0gICAgfSBlbHNlIHsKLSAgICAgICAgQ09ORklHICo9IG1vYmlsaXR5Ci0gICAg
ICAgIE1PQklMSVRZICo9IHNlbnNvcnMKLSAgICB9CisgICAgUVQgKz0gc2Vuc29ycwogfQogCiBj
b250YWlucyhERUZJTkVTLCBXVEZfVVNFX1FUX01PQklMSVRZX1NZU1RFTUlORk89MSkgewpAQCAt
MTk0LDcgKzE4Myw2IEBAIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9MSkg
ewogICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKTogTElCUyArPSAtbEVHTAogICAg
IG1hYzogTElCUyArPSAtZnJhbWV3b3JrIElPU3VyZmFjZSAtZnJhbWV3b3JrIENvcmVGb3VuZGF0
aW9uCiAgICAgbGludXgtKjpjb250YWlucyhERUZJTkVTLCBIQVZFX1hDT01QT1NJVEU9MSk6IExJ
QlMgKz0gLWxYY29tcG9zaXRlCi0gICAgaGF2ZVF0KDQpOiBRVCAqPSBvcGVuZ2wKIH0KIAogIXN5
c3RlbS1zcWxpdGU6ZXhpc3RzKCAkJHtTUUxJVEUzU1JDRElSfS9zcWxpdGUzLmMgKSB7CkBAIC0y
MDUsMjkgKzE5MywyMiBAQCBjb250YWlucyhERUZJTkVTLCBXVEZfVVNFXzNEX0dSQVBISUNTPTEp
IHsKICAgICBMSUJTICs9IC1sc3FsaXRlMwogfQogCi1oYXZlUXQoNSkgewotICAgICMgUXQ1IGFs
bG93cyB1cyB0byB1c2UgY29uZmlnIHRlc3RzIHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2Yg
dGhlc2UgbGlicmFyaWVzCi0gICAgY29uZmlnX2xpYmpwZWcgewotICAgICAgICBERUZJTkVTICs9
IFdURl9VU0VfTElCSlBFRz0xCi0gICAgICAgIExJQlMgKz0gLWxqcGVnCi0gICAgfSBlbHNlIHsK
LSAgICAgICAgd2FybmluZygiSlBFRyBsaWJyYXJ5IG5vdCBmb3VuZCEgUUltYWdlRGVjb2RlciB3
aWxsIGRlY29kZSBKUEVHIGltYWdlcy4iKQotICAgIH0KLSAgICBjb25maWdfbGlicG5nIHsKLSAg
ICAgICAgREVGSU5FUyArPSBXVEZfVVNFX0xJQlBORz0xCi0gICAgICAgIExJQlMgKz0gLWxwbmcK
LSAgICB9IGVsc2UgewotICAgICAgICB3YXJuaW5nKCJQTkcgbGlicmFyeSBub3QgZm91bmQhIFFJ
bWFnZURlY29kZXIgd2lsbCBkZWNvZGUgUE5HIGltYWdlcy4iKQotICAgIH0KLSAgICBjb25maWdf
bGlid2VicCB7Ci0gICAgICAgIERFRklORVMgKz0gV1RGX1VTRV9XRUJQPTEKLSAgICAgICAgTElC
UyArPSAtbHdlYnAKLSAgICB9CisjIFF0NSBhbGxvd3MgdXMgdG8gdXNlIGNvbmZpZyB0ZXN0cyB0
byBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZXNlIGxpYnJhcmllcworY29uZmlnX2xpYmpw
ZWcgeworICAgIERFRklORVMgKz0gV1RGX1VTRV9MSUJKUEVHPTEKKyAgICBMSUJTICs9IC1sanBl
ZwogfSBlbHNlIHsKLSAgICAhd2luMzItKjohbWFjIHsKLSAgICAgICAgREVGSU5FUyArPSBXVEZf
VVNFX0xJQkpQRUc9MSBXVEZfVVNFX0xJQlBORz0xCi0gICAgICAgIExJQlMgKz0gLWxqcGVnIC1s
cG5nCi0gICAgfQorICAgIHdhcm5pbmcoIkpQRUcgbGlicmFyeSBub3QgZm91bmQhIFFJbWFnZURl
Y29kZXIgd2lsbCBkZWNvZGUgSlBFRyBpbWFnZXMuIikKK30KK2NvbmZpZ19saWJwbmcgeworICAg
IERFRklORVMgKz0gV1RGX1VTRV9MSUJQTkc9MQorICAgIExJQlMgKz0gLWxwbmcKK30gZWxzZSB7
CisgICAgd2FybmluZygiUE5HIGxpYnJhcnkgbm90IGZvdW5kISBRSW1hZ2VEZWNvZGVyIHdpbGwg
ZGVjb2RlIFBORyBpbWFnZXMuIikKK30KK2NvbmZpZ19saWJ3ZWJwIHsKKyAgICBERUZJTkVTICs9
IFdURl9VU0VfV0VCUD0xCisgICAgTElCUyArPSAtbHdlYnAKIH0KIAogd2luMzItKnx3aW5jZSog
ewpAQCAtMjc3LDggKzI1OCw3IEBAIHVuaXg6IW1hYzoqLWcrKyo6UU1BS0VfTEZMQUdTICs9IC1X
bCwtLWdjLXNlY3Rpb25zCiBsaW51eCotZysrKjpRTUFLRV9MRkxBR1MgKz0gJCRRTUFLRV9MRkxB
R1NfTk9VTkRFRgogCiB1bml4fHdpbjMyLWcrKyogewotICAgIFFNQUtFX1BLR0NPTkZJR19SRVFV
SVJFUyA9IFF0Q29yZSBRdEd1aSBRdE5ldHdvcmsKLSAgICBoYXZlUXQoNSk6IFFNQUtFX1BLR0NP
TkZJR19SRVFVSVJFUyArPSBRdFdpZGdldHMKKyAgICBRTUFLRV9QS0dDT05GSUdfUkVRVUlSRVMg
PSBRdENvcmUgUXRHdWkgUXROZXR3b3JrIFF0V2lkZ2V0cwogfQogCiAjIERpc2FibGUgQysrMHgg
bW9kZSBpbiBXZWJDb3JlIGZvciB0aG9zZSB3aG8gZW5hYmxlZCBpdCBpbiB0aGVpciBRdCdzIG1r
c3BlYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAKaW5kZXggMDBjZDFjNDlhZjA5
MjIyMWI2MjlmZGFjOGRiZTEzNWZhZDQ5NzU0NS4uZWUyMmE2ODYxYmM1MWFlYjc1OGM3ZThhNjlh
OGYyYjliMzRjYTFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2Ns
YXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwCkBAIC05
OSwxNiArOTksNyBAQCBKU1ZhbHVlIFF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSW5zdGFuY2UqIGluc3QsIFByb3BlcnR5TmFtZSBpZAogICAgICAgICBpZiAobS5hY2Nl
c3MoKSA9PSBRTWV0YU1ldGhvZDo6UHJpdmF0ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0j
aWYgIUhBVkUoUVQ1KQotICAgICAgICBpbnQgaXRlciA9IDA7Ci0gICAgICAgIGNvbnN0IGNoYXIq
IHNpZ25hdHVyZSA9IG0uc2lnbmF0dXJlKCk7Ci0gICAgICAgIHdoaWxlIChzaWduYXR1cmVbaXRl
cl0gJiYgc2lnbmF0dXJlW2l0ZXJdICE9ICcoJykKLSAgICAgICAgICAgICsraXRlcjsKLQotICAg
ICAgICBpZiAobm9ybWFsID09IFFCeXRlQXJyYXk6OmZyb21SYXdEYXRhKHNpZ25hdHVyZSwgaXRl
cikpIHsKLSNlbHNlCiAgICAgICAgIGlmIChub3JtYWwgPT0gbS5uYW1lKCkpIHsKLSNlbmRpZgog
ICAgICAgICAgICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdmFsID0gUXRSdW50aW1lTWV0YU1ldGhv
ZDo6Y3JlYXRlKGV4ZWMsIHVzdHJpbmcsIHN0YXRpY19jYXN0PFF0SW5zdGFuY2UqPihpbnN0KSwg
aW5kZXgsIG5vcm1hbCwgZmFsc2UpOwogICAgICAgICAgICAgcXRpbnN0LT5tX21ldGhvZHMuaW5z
ZXJ0KG5hbWUsIHZhbCk7CiAgICAgICAgICAgICByZXR1cm4gdmFsOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKaW5kZXggNmI1ZTZhNzVhNDk0ZTY3OTlkOTMxNTZlMjJi
NjFkYmUzMjBhN2NhNS4uNGEwODc1NTA2ZDdlZmFjY2JiMjQ2OTEwZTU3NjdjMTBjMDE1NmU4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCkBAIC0yMjMsMTIgKzIy
Myw4IEBAIHZvaWQgUXRJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSkKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1ldGhv
ZENvdW50OyBpKyspIHsKICAgICAgICAgICAgIFFNZXRhTWV0aG9kIG1ldGhvZCA9IG1ldGEtPm1l
dGhvZChpKTsKICAgICAgICAgICAgIGlmIChtZXRob2QuYWNjZXNzKCkgIT0gUU1ldGFNZXRob2Q6
OlByaXZhdGUpIHsKLSNpZiBIQVZFKFFUNSkKICAgICAgICAgICAgICAgICBRQnl0ZUFycmF5IHNp
ZyA9IG1ldGhvZC5tZXRob2RTaWduYXR1cmUoKTsKICAgICAgICAgICAgICAgICBhcnJheS5hZGQo
SWRlbnRpZmllcihleGVjLCBVU3RyaW5nKHNpZy5jb25zdERhdGEoKSwgc2lnLmxlbmd0aCgpKSkp
OwotI2Vsc2UKLSAgICAgICAgICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcihleGVjLCBtZXRo
b2Quc2lnbmF0dXJlKCkpKTsKLSNlbmRpZgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQpAQCAtMjc1LDcgKzI3MSw2IEBAIEpTVmFsdWUgUXRJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGhvdyBtdWNo
IHdlIGNhbiBjYWxsIGl0CiAgICAgICAgICAgICBpZiAobS5hY2Nlc3MoKSAhPSBRTWV0YU1ldGhv
ZDo6UHJpdmF0ZQogICAgICAgICAgICAgICAgICYmIG0ubWV0aG9kVHlwZSgpICE9IFFNZXRhTWV0
aG9kOjpTaWduYWwKLSNpZiBIQVZFKFFUNSkKICAgICAgICAgICAgICAgICAmJiBtLnBhcmFtZXRl
ckNvdW50KCkgPT0gMAogICAgICAgICAgICAgICAgICYmIG0ucmV0dXJuVHlwZSgpICE9IFFNZXRh
VHlwZTo6Vm9pZCkgewogICAgICAgICAgICAgICAgIFFWYXJpYW50IHJldChtLnJldHVyblR5cGUo
KSwgKHZvaWQqKTApOwpAQCAtMjg2LDIwICsyODEsNiBAQCBKU1ZhbHVlIFF0SW5zdGFuY2U6OnN0
cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAgICAgICAgICAgaWYg
KHJldC5pc1ZhbGlkKCkgJiYgcmV0LmNhbkNvbnZlcnQoUVZhcmlhbnQ6OlN0cmluZykpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IHJldC50b1N0cmluZygpLnRvTGF0aW4xKCkuY29u
c3REYXRhKCk7IC8vICMjIyBMYXRpbiAxPyBBc2NpaT8KICAgICAgICAgICAgICAgICAgICAgICAg
IHVzZURlZmF1bHQgPSBmYWxzZTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgJiYgbS5wYXJhbWV0
ZXJUeXBlcygpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJldHNp
ZyA9IG0udHlwZU5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0c2lnICYmICpyZXRzaWcp
IHsKLSAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgcmV0KFFNZXRhVHlwZTo6dHlwZShyZXRz
aWcpLCAodm9pZCopMCk7Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgKiBxYXJnc1sxXTsKLSAg
ICAgICAgICAgICAgICAgICAgcWFyZ3NbMF0gPSByZXQuZGF0YSgpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChRTWV0YU9iamVjdDo6bWV0YWNhbGwob2JqLCBRTWV0YU9iamVjdDo6SW52b2tl
TWV0YU1ldGhvZCwgaW5kZXgsIHFhcmdzKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZXQuaXNWYWxpZCgpICYmIHJldC5jYW5Db252ZXJ0KFFWYXJpYW50OjpTdHJpbmcpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gcmV0LnRvU3RyaW5nKCkudG9MYXRp
bjEoKS5jb25zdERhdGEoKTsgLy8gIyMjIExhdGluIDE/IEFzY2lpPwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZURlZmF1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpAQCAtMzg5LDExICszNzAsNyBAQCB2b2lkIFF0RmllbGQ6OnNldFZhbHVlVG9J
bnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpbnN0LCBKU1ZhbHVlCiAg
ICAgaWYgKG9iaikgewogICAgICAgICBRTWV0YVR5cGU6OlR5cGUgYXJndHlwZSA9IFFNZXRhVHlw
ZTo6Vm9pZDsKICAgICAgICAgaWYgKG1fdHlwZSA9PSBNZXRhUHJvcGVydHkpCi0jaWYgSEFWRShR
VDUpCiAgICAgICAgICAgICBhcmd0eXBlID0gKFFNZXRhVHlwZTo6VHlwZSkgbV9wcm9wZXJ0eS51
c2VyVHlwZSgpOwotI2Vsc2UKLSAgICAgICAgICAgIGFyZ3R5cGUgPSAoUU1ldGFUeXBlOjpUeXBl
KSBRTWV0YVR5cGU6OnR5cGUobV9wcm9wZXJ0eS50eXBlTmFtZSgpKTsKLSNlbmRpZgogCiAgICAg
ICAgIC8vIGR5bmFtaWMgcHJvcGVydGllcyBqdXN0IGdldCBhbnkgUVZhcmlhbnQKICAgICAgICAg
UVZhcmlhbnQgdmFsID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCBhVmFsdWUsIGFyZ3R5
cGUsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUu
aCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmgKaW5kZXggYWMyY2YyZTAx
NzliNGRlOTJlYmU2OGNmOTQxMWI5ODdjMWFjOWU0My4uM2M2OTRkZTgyY2UwNjQ4N2U5NTZhOGM1
YTZkODliYWY2ZDI0NThlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5oCkBA
IC0yMzgsMjEgKzIzOCwxMSBAQCBwcml2YXRlOgogLy8gd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2ln
bmFsIG9mICdzZW5kZXInLiBXaGVuIGV4ZWN1dGUoKSBpcyBjYWxsZWQsIGl0IHdpbGwgY2FsbCBK
UyAncmVjZWl2ZXJGdW5jdGlvbicuCiBjbGFzcyBRdENvbm5lY3Rpb25PYmplY3QgOiBwdWJsaWMg
UU9iamVjdAogewotI2lmIEhBVkUoUVQ1KQogICAgIFFfT0JKRUNUX0ZBS0UKLSNlbmRpZgogcHVi
bGljOgogICAgIFF0Q29ubmVjdGlvbk9iamVjdChKU0NvbnRleHRSZWYsIFBhc3NSZWZQdHI8UXRJ
bnN0YW5jZT4gc2VuZGVySW5zdGFuY2UsIGludCBzaWduYWxJbmRleCwgSlNPYmplY3RSZWYgcmVj
ZWl2ZXIsIEpTT2JqZWN0UmVmIHJlY2VpdmVyRnVuY3Rpb24pOwogICAgIH5RdENvbm5lY3Rpb25P
YmplY3QoKTsKIAotI2lmICFIQVZFKFFUNSkKLSAgICAvLyBFeHBsaWNpdGx5IGRlZmluZSB0aGVz
ZSBiZWNhdXNlIHdhbnQgYSBjdXN0b20gcXRfbWV0YWNhbGwoKSwgc28gd2UgY2FuJ3QgdXNlIFFf
T0JKRUNUIG1hY3JvLgotICAgIHN0YXRpYyBjb25zdCBRTWV0YU9iamVjdCBzdGF0aWNNZXRhT2Jq
ZWN0OwotICAgIHZpcnR1YWwgY29uc3QgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgKnF0X21ldGFjYXN0KGNvbnN0IGNoYXIgKik7Ci0gICAgdmlydHVh
bCBpbnQgcXRfbWV0YWNhbGwoUU1ldGFPYmplY3Q6OkNhbGwsIGludCwgdm9pZCAqKmFyZ3YpOwot
I2VuZGlmCi0KICAgICB2b2lkIGV4ZWN1dGUodm9pZCAqKmFyZ3YpOwogCiAgICAgYm9vbCBtYXRj
aChKU0NvbnRleHRSZWYsIFFPYmplY3QqIHNlbmRlciwgaW50IHNpZ25hbEluZGV4LCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBKU09iamVjdFJlZiBmdW5jT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcnVudGltZV9xdDQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlOWU2ZjVhZmQyNDQ4NmE2OTQ2MWVjOTExODcxZTM1N2E4MzNlZjlkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInF0X3J1bnRpbWUuaCIKLQotI2luY2x1ZGUgIkFQ
SUNhc3QuaCIKLSNpbmNsdWRlICJCb29sZWFuT2JqZWN0LmgiCi0jaW5jbHVkZSAiRGF0ZUluc3Rh
bmNlLmgiCi0jaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgotI2luY2x1ZGUgIkZ1bmN0aW9uUHJv
dG90eXBlLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5Lmgi
Ci0jaW5jbHVkZSAiSlNDb250ZXh0UmVmUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkpTRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgot
I2luY2x1ZGUgPEpTRnVuY3Rpb24uaD4KLSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgotI2lu
Y2x1ZGUgIkpTSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0xvY2suaCIKLSNpbmNsdWRlICJK
U09iamVjdC5oIgotI2luY2x1ZGUgIkpTUmV0YWluUHRyLmgiCi0jaW5jbHVkZSAiSlNVaW50OENs
YW1wZWRBcnJheS5oIgotI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgotI2luY2x1ZGUgIlBy
b3BlcnR5TmFtZUFycmF5LmgiCi0jaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0b3IuaCIKLSNpbmNs
dWRlICJSZWdFeHBPYmplY3QuaCIKLSNpbmNsdWRlICJxZGF0ZXRpbWUuaCIKLSNpbmNsdWRlICJx
ZGVidWcuaCIKLSNpbmNsdWRlICJxbWV0YW9iamVjdC5oIgotI2luY2x1ZGUgInFtZXRhdHlwZS5o
IgotI2luY2x1ZGUgInFvYmplY3QuaCIKLSNpbmNsdWRlICJxc3RyaW5nbGlzdC5oIgotI2luY2x1
ZGUgInF0X2luc3RhbmNlLmgiCi0jaW5jbHVkZSAicXRfcGl4bWFwcnVudGltZS5oIgotI2luY2x1
ZGUgInF2YXJsZW5ndGhhcnJheS5oIgotCi0jaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+Ci0KLSNp
bmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8
cnVudGltZV9hcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWVfb2JqZWN0Lmg+Ci0KLS8vIFF0U2Ny
aXB0IGhhcyB0aGVzZQotUV9ERUNMQVJFX01FVEFUWVBFKFFPYmplY3RMaXN0KTsKLVFfREVDTEFS
RV9NRVRBVFlQRShRTGlzdDxpbnQ+KTsKLVFfREVDTEFSRV9NRVRBVFlQRShRVmFyaWFudCk7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgSlNDIHsKLW5hbWVzcGFjZSBC
aW5kaW5ncyB7Ci0KLS8vIERlYnVnZ2luZwotLy8jZGVmaW5lIFFUV0tfUlVOVElNRV9DT05WRVJT
SU9OX0RFQlVHCi0vLyNkZWZpbmUgUVRXS19SVU5USU1FX01BVENIX0RFQlVHCi0KLWNsYXNzIFFX
S05vRGVidWcKLXsKLXB1YmxpYzoKLSAgICBpbmxpbmUgUVdLTm9EZWJ1Zygpe30KLSAgICBpbmxp
bmUgflFXS05vRGVidWcoKXt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGlu
ZSBRV0tOb0RlYnVnICZvcGVyYXRvcjw8KGNvbnN0IFQgJikgeyByZXR1cm4gKnRoaXM7IH0KLX07
Ci0KLSNpZmRlZiBRVFdLX1JVTlRJTUVfQ09OVkVSU0lPTl9ERUJVRwotI2RlZmluZSBxQ29udkRl
YnVnKCkgcURlYnVnKCkKLSNlbHNlCi0jZGVmaW5lIHFDb252RGVidWcoKSBRV0tOb0RlYnVnKCkK
LSNlbmRpZgotCi0jaWZkZWYgUVRXS19SVU5USU1FX01BVENIX0RFQlVHCi0jZGVmaW5lIHFNYXRj
aERlYnVnKCkgcURlYnVnKCkKLSNlbHNlCi0jZGVmaW5lIHFNYXRjaERlYnVnKCkgUVdLTm9EZWJ1
ZygpCi0jZW5kaWYKLQotdHlwZWRlZiBlbnVtIHsKLSAgICBWYXJpYW50ID0gMCwKLSAgICBOdW1i
ZXIsCi0gICAgQm9vbGVhbiwKLSAgICBTdHJpbmcsCi0gICAgRGF0ZSwKLSAgICBSZWdFeHAsCi0g
ICAgQXJyYXksCi0gICAgUU9iaiwKLSAgICBPYmplY3QsCi0gICAgTnVsbCwKLSAgICBSVEFycmF5
LAotICAgIEpTVWludDhDbGFtcGVkQXJyYXlUeXBlCi19IEpTUmVhbFR5cGU7Ci0KLSNpZiBkZWZp
bmVkKFFUV0tfUlVOVElNRV9DT05WRVJTSU9OX0RFQlVHKSB8fCBkZWZpbmVkKFFUV0tfUlVOVElN
RV9NQVRDSF9ERUJVRykKLVFEZWJ1ZyBvcGVyYXRvcjw8KFFEZWJ1ZyBkYmcsIGNvbnN0IEpTUmVh
bFR5cGUgJmMpCi17Ci0gICAgIGNvbnN0IGNoYXIgKm1hcFtdID0geyAiVmFyaWFudCIsICJOdW1i
ZXIiLCAiQm9vbGVhbiIsICJTdHJpbmciLCAiRGF0ZSIsCi0gICAgICAgICAiUmVnRXhwIiwgIkFy
cmF5IiwgIlJUT2JqZWN0IiwgIk9iamVjdCIsICJOdWxsIiwgIlJUQXJyYXkifTsKLQotICAgICBk
Ymcubm9zcGFjZSgpIDw8ICJKU1R5cGUoIiA8PCAoKGludCljKSA8PCAiLCAiIDw8ICBtYXBbY10g
PDwgIikiOwotCi0gICAgIHJldHVybiBkYmcuc3BhY2UoKTsKLX0KLSNlbmRpZgotCi1zdHJ1Y3Qg
UnVudGltZUNvbnZlcnNpb24gewotICAgIENvbnZlcnRUb0pTVmFsdWVGdW5jdGlvbiB0b0pTVmFs
dWVGdW5jOwotICAgIENvbnZlcnRUb1ZhcmlhbnRGdW5jdGlvbiB0b1ZhcmlhbnRGdW5jOwotfTsK
LQotdHlwZWRlZiBRSGFzaDxpbnQsIFJ1bnRpbWVDb252ZXJzaW9uPiBSdW50aW1lQ29udmVyc2lv
blRhYmxlOwotUV9HTE9CQUxfU1RBVElDKFJ1bnRpbWVDb252ZXJzaW9uVGFibGUsIGN1c3RvbVJ1
bnRpbWVDb252ZXJzaW9ucykKLQotdm9pZCByZWdpc3RlckN1c3RvbVR5cGUoaW50IHF0TWV0YVR5
cGVJZCwgQ29udmVydFRvVmFyaWFudEZ1bmN0aW9uIHRvVmFyaWFudEZ1bmMsIENvbnZlcnRUb0pT
VmFsdWVGdW5jdGlvbiB0b0pTVmFsdWVGdW5jKQotewotICAgIFJ1bnRpbWVDb252ZXJzaW9uIGNv
bnZlcnNpb247Ci0gICAgY29udmVyc2lvbi50b0pTVmFsdWVGdW5jID0gdG9KU1ZhbHVlRnVuYzsK
LSAgICBjb252ZXJzaW9uLnRvVmFyaWFudEZ1bmMgPSB0b1ZhcmlhbnRGdW5jOwotICAgIGN1c3Rv
bVJ1bnRpbWVDb252ZXJzaW9ucygpLT5pbnNlcnQocXRNZXRhVHlwZUlkLCBjb252ZXJzaW9uKTsK
LX0KLQotc3RhdGljIGJvb2wgaXNKU1VpbnQ4Q2xhbXBlZEFycmF5KEpTVmFsdWUgdmFsKQotewot
ICAgIHJldHVybiB2YWwuaXNDZWxsKCkgJiYgdmFsLmluaGVyaXRzKCZKU1VpbnQ4Q2xhbXBlZEFy
cmF5OjpzX2luZm8pOwotfQotCi1zdGF0aWMgSlNSZWFsVHlwZSB2YWx1ZVJlYWxUeXBlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWwpCi17Ci0gICAgaWYgKHZhbC5pc051bWJlcigpKQotICAg
ICAgICByZXR1cm4gTnVtYmVyOwotICAgIGVsc2UgaWYgKHZhbC5pc1N0cmluZygpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nOwotICAgIGVsc2UgaWYgKHZhbC5pc0Jvb2xlYW4oKSkKLSAgICAgICAg
cmV0dXJuIEJvb2xlYW47Ci0gICAgZWxzZSBpZiAodmFsLmlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gTnVsbDsKLSAgICBlbHNlIGlmIChpc0pTVWludDhDbGFtcGVkQXJyYXkodmFsKSkKLSAgICAg
ICAgcmV0dXJuIEpTVWludDhDbGFtcGVkQXJyYXlUeXBlOwotICAgIGVsc2UgaWYgKHZhbC5pc09i
amVjdCgpKSB7Ci0gICAgICAgIEpTT2JqZWN0ICpvYmplY3QgPSB2YWwudG9PYmplY3QoZXhlYyk7
Ci0gICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZSdW50aW1lQXJyYXk6OnNfaW5mbykpICAv
LyBSdW50aW1lQXJyYXkgJ2luaGVyaXRzJyBmcm9tIEFycmF5LCBidXQgbm90IGluIEMrKwotICAg
ICAgICAgICAgcmV0dXJuIFJUQXJyYXk7Ci0gICAgICAgIGVsc2UgaWYgKG9iamVjdC0+aW5oZXJp
dHMoJkpTQXJyYXk6OnNfaW5mbykpCi0gICAgICAgICAgICByZXR1cm4gQXJyYXk7Ci0gICAgICAg
IGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKLSAgICAg
ICAgICAgIHJldHVybiBEYXRlOwotICAgICAgICBlbHNlIGlmIChvYmplY3QtPmluaGVyaXRzKCZS
ZWdFeHBPYmplY3Q6OnNfaW5mbykpCi0gICAgICAgICAgICByZXR1cm4gUmVnRXhwOwotICAgICAg
ICBlbHNlIGlmIChvYmplY3QtPmluaGVyaXRzKCZSdW50aW1lT2JqZWN0OjpzX2luZm8pKQotICAg
ICAgICAgICAgcmV0dXJuIFFPYmo7Ci0gICAgICAgIHJldHVybiBPYmplY3Q7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFN0cmluZzsgLy8gSSBkb24ndCBrbm93LgotfQotCi1RVmFyaWFudCBjb252ZXJ0
VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFFNZXRhVHlwZTo6VHlwZSwgaW50
KiwgSGFzaFNldDxKU09iamVjdCo+KiwgaW50KTsKLQotc3RhdGljIFFWYXJpYW50TWFwIGNvbnZl
cnRWYWx1ZVRvUVZhcmlhbnRNYXAoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBI
YXNoU2V0PEpTT2JqZWN0Kj4qIHZpc2l0ZWRPYmplY3RzLCBpbnQgcmVjdXJzaW9uTGltaXQpCi17
Ci0gICAgUV9BU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKLQotICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnRpZXMoZXhlYyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQ
cm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRXhjbHVkZURvbnRFbnVtUHJv
cGVydGllcyk7Ci0gICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJv
cGVydGllcy5iZWdpbigpOwotICAgIFFWYXJpYW50TWFwIHJlc3VsdDsKLSAgICBpbnQgb2JqZGlz
dCA9IDA7Ci0KLSAgICB3aGlsZSAoaXQgIT0gcHJvcGVydGllcy5lbmQoKSkgewotICAgICAgICBp
ZiAob2JqZWN0LT5wcm9wZXJ0eUlzRW51bWVyYWJsZShleGVjLCAqaXQpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHZhbCA9IG9iamVjdC0+Z2V0KGV4ZWMsICppdCk7Ci0gICAgICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFFWYXJpYW50IHYgPSBj
b252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpWb2lkLCAmb2JqZGlz
dCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKLSAgICAgICAgICAgICAgICBpZiAo
b2JqZGlzdCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9ICgq
aXQpLnVzdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBpZCA9IFFTdHJpbmco
KGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0
aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmluc2VydChpZCwgdik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICsraXQ7Ci0gICAg
fQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlh
bnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBRTWV0YVR5cGU6OlR5cGUgaGludCwg
aW50ICpkaXN0YW5jZSwgSGFzaFNldDxKU09iamVjdCo+KiB2aXNpdGVkT2JqZWN0cywgaW50IHJl
Y3Vyc2lvbkxpbWl0KQotewotICAgIC0tcmVjdXJzaW9uTGltaXQ7Ci0KLSAgICBpZiAoIXZhbHVl
IHx8ICFyZWN1cnNpb25MaW1pdCkKLSAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0KLSAgICBK
U09iamVjdCogb2JqZWN0ID0gMDsKLSAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkgewotICAgICAg
ICBvYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKLSAgICAgICAgaWYgKHZpc2l0ZWRPYmpl
Y3RzLT5jb250YWlucyhvYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0K
LSAgICAgICAgdmlzaXRlZE9iamVjdHMtPmFkZChvYmplY3QpOwotICAgIH0KLQotICAgIC8vIGNo
ZWNrIG1hZ2ljIHBvaW50ZXIgdmFsdWVzIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHZhbHVlCi0gICAg
aWYgKHZhbHVlID09IGpzTmFOKCkKLSAgICAgICAgfHwgKHZhbHVlID09IGpzVW5kZWZpbmVkKCkK
LSAgICAgICAgICAgICYmIGhpbnQgIT0gUU1ldGFUeXBlOjpRU3RyaW5nCi0gICAgICAgICAgICAm
JiBoaW50ICE9IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFWYXJpYW50PigpKSkgewot
ICAgICAgICBpZiAoZGlzdGFuY2UpCi0gICAgICAgICAgICAqZGlzdGFuY2UgPSAtMTsKLSAgICAg
ICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0gICAgfQotCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7Ci0gICAgSlNSZWFsVHlwZSB0eXBlID0gdmFsdWVSZWFsVHlwZShleGVjLCB2YWx1ZSk7Ci0g
ICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpWb2lkKSB7Ci0gICAgICAgIHN3aXRjaCh0eXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIE51bWJlcjoKLSAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFU
eXBlOjpEb3VibGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJv
b2xlYW46Ci0gICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6Qm9vbDsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU3RyaW5nOgotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRU3RyaW5nOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEYXRlOgotICAgICAgICAgICAgICAg
IGhpbnQgPSBRTWV0YVR5cGU6OlFEYXRlVGltZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgUmVnRXhwOgotICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6
OlFSZWdFeHA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE9iamVj
dDoKLSAgICAgICAgICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmTnVtYmVyT2JqZWN0Ojpz
X2luZm8pKQotICAgICAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpEb3VibGU7Ci0g
ICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmQm9vbGVhbk9iamVjdDo6
c19pbmZvKSkKLSAgICAgICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6Qm9vbDsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6
OlFWYXJpYW50TWFwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBR
T2JqOgotICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OlFPYmplY3RTdGFyOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBKU1VpbnQ4Q2xhbXBlZEFycmF5
VHlwZToKLSAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRQnl0ZUFycmF5OwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBBcnJheToKLSAgICAgICAgICAg
IGNhc2UgUlRBcnJheToKLSAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRVmFyaWFu
dExpc3Q7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBx
Q29udkRlYnVnKCkgPDwgImNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQ6IGpzdHlwZSBpcyAiIDw8IHR5
cGUgPDwgIiwgaGludCBpcyIgPDwgaGludDsKLQotICAgIGlmICh2YWx1ZSA9PSBqc051bGwoKQot
ICAgICAgICAmJiBoaW50ICE9IFFNZXRhVHlwZTo6UU9iamVjdFN0YXIKLSAgICAgICAgJiYgaGlu
dCAhPSBRTWV0YVR5cGU6OlZvaWRTdGFyCi0gICAgICAgICYmIGhpbnQgIT0gUU1ldGFUeXBlOjpR
U3RyaW5nCi0gICAgICAgICYmIGhpbnQgIT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8
UVZhcmlhbnQ+KCkpIHsKLSAgICAgICAgaWYgKGRpc3RhbmNlKQotICAgICAgICAgICAgKmRpc3Rh
bmNlID0gLTE7Ci0gICAgICAgIHJldHVybiBRVmFyaWFudCgpOwotICAgIH0KLQotICAgIFFWYXJp
YW50IHJldDsKLSAgICBpbnQgZGlzdCA9IC0xOwotICAgIHN3aXRjaCAoaGludCkgewotICAgICAg
ICBjYXNlIFFNZXRhVHlwZTo6Qm9vbDoKLSAgICAgICAgICAgIGlmICh0eXBlID09IE9iamVjdCAm
JiBvYmplY3QtPmluaGVyaXRzKCZCb29sZWFuT2JqZWN0OjpzX2luZm8pKQotICAgICAgICAgICAg
ICAgIHJldCA9IFFWYXJpYW50KGFzQm9vbGVhbk9iamVjdCh2YWx1ZSktPmludGVybmFsVmFsdWUo
KS50b0Jvb2xlYW4oKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0ID0g
UVZhcmlhbnQodmFsdWUudG9Cb29sZWFuKCkpOwotICAgICAgICAgICAgaWYgKHR5cGUgPT0gQm9v
bGVhbikKLSAgICAgICAgICAgICAgICBkaXN0ID0gMDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IFFNZXRhVHlwZTo6SW50OgotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6VUludDoKLSAgICAgICAg
Y2FzZSBRTWV0YVR5cGU6Okxvbmc6Ci0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVTG9uZzoKLSAg
ICAgICAgY2FzZSBRTWV0YVR5cGU6OkxvbmdMb25nOgotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6
VUxvbmdMb25nOgotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6U2hvcnQ6Ci0gICAgICAgIGNhc2Ug
UU1ldGFUeXBlOjpVU2hvcnQ6Ci0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpGbG9hdDoKLSAgICAg
ICAgY2FzZSBRTWV0YVR5cGU6OkRvdWJsZToKLSAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHZh
bHVlLnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgICAgIHJldC5jb252ZXJ0KChRVmFyaWFudDo6
VHlwZSloaW50KTsKLSAgICAgICAgICAgIGlmICh0eXBlID09IE51bWJlcikgewotICAgICAgICAg
ICAgICAgIHN3aXRjaCAoaGludCkgewotICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpE
b3VibGU6Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAwOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6RmxvYXQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGRpc3QgPSAxOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6TG9uZ0xvbmc6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBRTWV0YVR5cGU6OlVMb25nTG9uZzoKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDI7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBl
OjpMb25nOgotICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVTG9uZzoKLSAgICAgICAg
ICAgICAgICAgICAgZGlzdCA9IDM7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpJbnQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0
YVR5cGU6OlVJbnQ6Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSA0OwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6U2hvcnQ6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlVTaG9ydDoKLSAgICAgICAgICAgICAgICAg
ICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6
OlFDaGFyOgotICAgICAgICAgICAgaWYgKHR5cGUgPT0gTnVtYmVyIHx8IHR5cGUgPT0gQm9vbGVh
bikgewotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFDaGFyKCh1c2hvcnQpdmFsdWUu
dG9OdW1iZXIoZXhlYykpKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBCb29sZWFuKQot
ICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMzsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGRpc3QgPSA2OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBVU3RyaW5nIHN0ciA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRQ2hhcihzdHIubGVuZ3RoKCkgPyAqKGNv
bnN0IHVzaG9ydCopc3RyLmltcGwoKS0+Y2hhcmFjdGVycygpIDogMCkpOwotICAgICAgICAgICAg
ICAgIGlmICh0eXBlID09IFN0cmluZykKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDM7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6
UVN0cmluZzogewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UpCi0gICAgICAgICAgICAgICAgICAgICpkaXN0
YW5jZSA9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFT
dHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5n
Lmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKQotICAgICAg
ICAgICAgICAgICAgICBkaXN0ID0gMDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGRpc3QgPSAxMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFWYXJpYW50TWFwOgotICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gT2JqZWN0IHx8IHR5cGUgPT0gQXJyYXkgfHwgdHlwZSA9PSBSVEFy
cmF5KSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoY29udmVydFZhbHVlVG9RVmFy
aWFudE1hcChleGVjLCBvYmplY3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCkpOwot
ICAgICAgICAgICAgICAgIC8vIFRob3NlIHR5cGVzIGNhbiBzdGlsbCBoYXZlIHBlcmZlY3QgbWF0
Y2hlcywgZS5nLiAnYm9vbCcgaWYgdmFsdWUgaXMgYSBCb29sZWFuIE9iamVjdC4KLSAgICAgICAg
ICAgICAgICBkaXN0ID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRVmFyaWFudExpc3Q6Ci0gICAgICAgICAgICBpZiAodHlw
ZSA9PSBSVEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgUnVudGltZUFycmF5KiBydGFycmF5ID0g
c3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAgIFFW
YXJpYW50TGlzdCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXktPmdl
dExlbmd0aCgpOwotICAgICAgICAgICAgICAgIGludCBvYmpkaXN0ID0gMDsKLSAgICAgICAgICAg
ICAgICBxQ29udkRlYnVnKCkgPDwgImNvbnZlcnRpbmcgYSAiIDw8IGxlbiA8PCAiIGxlbmd0aCBB
cnJheSI7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewot
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRlQXJy
YXkoKS0+dmFsdWVBdChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpWb2lkLCAmb2Jq
ZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChvYmpkaXN0ID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxQ29udkRl
YnVnKCkgPDwgIkZhaWxlZCBjb252ZXJ0aW5nIGVsZW1lbnQgYXQgaW5kZXggIiA8PCBpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIEZhaWxlZCBjb252ZXJ0aW5nIGEgbGlzdCBl
bnRyeSwgc28gZmFpbCB0aGUgYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAob2JqZGlzdCAhPSAtMSkgewotICAgICAgICAg
ICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQo
cmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUg
PT0gQXJyYXkpIHsKLSAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0
PEpTQXJyYXkqPihvYmplY3QpOwotCi0gICAgICAgICAgICAgICAgUVZhcmlhbnRMaXN0IHJlc3Vs
dDsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOwotICAgICAgICAg
ICAgICAgIGludCBvYmpkaXN0ID0gMDsKLSAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwg
ImNvbnZlcnRpbmcgYSAiIDw8IGxlbiA8PCAiIGxlbmd0aCBBcnJheSI7Ci0gICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlIHZhbCA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6
Vm9pZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCkpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAob2JqZGlzdCA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcUNvbnZEZWJ1ZygpIDw8ICJGYWlsZWQgY29udmVydGluZyBlbGVtZW50IGF0IGluZGV4ICIg
PDwgaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBGYWlsZWQgY29udmVydGlu
ZyBhIGxpc3QgZW50cnksIHNvIGZhaWwgdGhlIGFycmF5Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG9iamRpc3QgIT0gLTEpIHsK
LSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9
IFFWYXJpYW50KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQotICAgICAg
ICAgICAgICAgIGludCBvYmpkaXN0OwotICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAi
bWFraW5nIGEgc2luZ2xlIGxlbmd0aCB2YXJpYW50bGlzdCI7Ci0gICAgICAgICAgICAgICAgUVZh
cmlhbnQgdmFyID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWx1ZSwgUU1ldGFUeXBl
OjpWb2lkLCAmb2JqZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKLSAgICAg
ICAgICAgICAgICBpZiAob2JqZGlzdCAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBRVmFy
aWFudExpc3QgcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPDwgdmFyOwotICAg
ICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAgICAgICAgICAgICAg
ICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJmYWlsZWQgbWFraW5nIHNpbmdsZSBsZW5ndGggdmFybGlz
dCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFTdHJpbmdMaXN0OiB7Ci0gICAgICAgICAgICBp
ZiAodHlwZSA9PSBSVEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgUnVudGltZUFycmF5KiBydGFy
cmF5ID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAg
ICAgIFFTdHJpbmdMaXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gcnRhcnJh
eS0+Z2V0TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47
ICsraSkgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IHJ0YXJyYXktPmdldENv
bmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgVVN0
cmluZyB1c3RyaW5nID0gdmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAg
ICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJp
bmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocXN0cmluZyk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJl
c3VsdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKLSAgICAgICAg
ICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpTQXJyYXkqPihvYmplY3QpOwot
Ci0gICAgICAgICAgICAgICAgUVN0cmluZ0xpc3QgcmVzdWx0OwotICAgICAgICAgICAgICAgIGlu
dCBsZW4gPSBhcnJheS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5
LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZh
bC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJp
bmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFj
dGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHFzdHJpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkaXN0
ID0gNTsKLSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJh
eQotICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5n
KChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgICAgICAgICAgICAgUVN0cmluZ0xpc3QgcmVzdWx0OwotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQocXN0cmluZyk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlh
bnQocmVzdWx0KTsKLSAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpR
Qnl0ZUFycmF5OiB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBKU1VpbnQ4Q2xhbXBlZEFycmF5
VHlwZSkgewotICAgICAgICAgICAgICAgIFdURjo6VWludDhDbGFtcGVkQXJyYXkqIGFyciA9IHRv
VWludDhDbGFtcGVkQXJyYXkodmFsdWUpOwotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50
KFFCeXRlQXJyYXkocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYXJyLT5kYXRhKCkpLCBh
cnItPmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgZGlzdCA9IDA7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRU3Ry
aW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5s
ZW5ndGgoKSkudG9MYXRpbjEoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5n
KQotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFEYXRlVGltZToK
LSAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFEYXRlOgotICAgICAgICBjYXNlIFFNZXRhVHlwZTo6
UVRpbWU6Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBEYXRlKSB7Ci0gICAgICAgICAgICAgICAg
RGF0ZUluc3RhbmNlKiBkYXRlID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4ob2JqZWN0KTsK
LSAgICAgICAgICAgICAgICBHcmVnb3JpYW5EYXRlVGltZSBnZHQ7Ci0gICAgICAgICAgICAgICAg
bXNUb0dyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIGRhdGUtPmludGVybmFsTnVtYmVyKCksIHRydWUs
IGdkdCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUURhdGVUaW1lKFFEYXRlKGdkdC55ZWFyKCks
IGdkdC5tb250aCgpICsgMSwgZ2R0Lm1vbnRoRGF5KCkpLCBRVGltZShnZHQuaG91cigpLCBnZHQu
bWludXRlKCksIGdkdC5zZWNvbmQoKSksIFF0OjpVVEMpOwotICAgICAgICAgICAgICAgICAgICBk
aXN0ID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpR
RGF0ZSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSBRRGF0ZShnZHQueWVhcigpLCBnZHQu
bW9udGgoKSArIDEsIGdkdC5tb250aERheSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9
IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0g
UVRpbWUoZ2R0LmhvdXIoKSwgZ2R0Lm1pbnV0ZSgpLCBnZHQuc2Vjb25kKCkpOwotICAgICAgICAg
ICAgICAgICAgICBkaXN0ID0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGIgPSB2YWx1
ZS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBHcmVnb3JpYW5EYXRlVGltZSBnZHQ7
Ci0gICAgICAgICAgICAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIGIsIHRydWUsIGdk
dCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUURhdGVUaW1lKFFEYXRlKGdkdC55ZWFyKCksIGdk
dC5tb250aCgpICsgMSwgZ2R0Lm1vbnRoRGF5KCkpLCBRVGltZShnZHQuaG91cigpLCBnZHQubWlu
dXRlKCksIGdkdC5zZWNvbmQoKSksIFF0OjpVVEMpOwotICAgICAgICAgICAgICAgICAgICBkaXN0
ID0gNjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0
ZSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSBRRGF0ZShnZHQueWVhcigpLCBnZHQubW9u
dGgoKSArIDEsIGdkdC5tb250aERheSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDg7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVRp
bWUoZ2R0LmhvdXIoKSwgZ2R0Lm1pbnV0ZSgpLCBnZHQuc2Vjb25kKCkpOwotICAgICAgICAgICAg
ICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAgfQotI2lmbmRlZiBRVF9OT19EQVRF
U1RSSU5HCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gU3RyaW5nKSB7Ci0gICAgICAg
ICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwotICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFD
aGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKLQot
ICAgICAgICAgICAgICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGVUaW1lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIFFEYXRlVGltZSBkdCA9IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhxc3Ry
aW5nLCBRdDo6SVNPRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcocXN0
cmluZywgUXQ6OlRleHREYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhx
c3RyaW5nLCBRdDo6U3lzdGVtTG9jYWxlRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
ZHQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZVRpbWU6OmZy
b21TdHJpbmcocXN0cmluZywgUXQ6OkxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoZHQuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBkdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAyOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgUURhdGUgZHQgPSBRRGF0ZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBR
dDo6SVNPRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6
VGV4dERhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGR0ID0gUURhdGU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlN5
c3RlbUxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUURhdGU6OmZyb21TdHJpbmcocXN0cmluZywg
UXQ6OkxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZHQuaXNWYWxpZCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBkdDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRpc3QgPSAzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUVRpbWUgZHQgPSBRVGltZTo6ZnJvbVN0cmluZyhx
c3RyaW5nLCBRdDo6SVNPRGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxp
ZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRVGltZTo6ZnJvbVN0cmluZyhxc3Ry
aW5nLCBRdDo6VGV4dERhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUVRpbWU6OmZyb21TdHJpbmcocXN0cmlu
ZywgUXQ6OlN5c3RlbUxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWR0Lmlz
VmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUVRpbWU6OmZyb21TdHJpbmco
cXN0cmluZywgUXQ6OkxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZHQuaXNW
YWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBkdDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRpc3QgPSAzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotI2VuZGlmIC8vIFFUX05PX0RBVEVTVFJJTkcKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRUmVnRXhwOgotICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gUmVnRXhwKSB7Ci0vKgotICAgICAgICAgICAgICAgIFJlZ0V4cE9i
amVjdCAqcmUgPSBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPihvYmplY3QpOwotKi8KLSAgICAg
ICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGNvbnZlcnQuLiBhIGJpdCByaXNreQotICAgICAgICAg
ICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hh
ciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyB0aGlzIGlzIG9mIHRoZSBmb3JtICcveHh4eHh4L2knCi0gICAgICAg
ICAgICAgICAgaW50IGZpcnN0U2xhc2ggPSBxc3RyaW5nLmluZGV4T2YoUUxhdGluMUNoYXIoJy8n
KSk7Ci0gICAgICAgICAgICAgICAgaW50IGxhc3RTbGFzaCA9IHFzdHJpbmcubGFzdEluZGV4T2Yo
UUxhdGluMUNoYXIoJy8nKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0U2xhc2ggPj0wICYm
IGxhc3RTbGFzaCA+IGZpcnN0U2xhc2gpIHsKLSAgICAgICAgICAgICAgICAgICAgUVJlZ0V4cCBy
ZWFsUmU7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVhbFJlLnNldFBhdHRlcm4ocXN0cmluZy5t
aWQoZmlyc3RTbGFzaCArIDEsIGxhc3RTbGFzaCAtIGZpcnN0U2xhc2ggLSAxKSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHFzdHJpbmcubWlkKGxhc3RTbGFzaCArIDEpLmNvbnRhaW5zKFFM
YXRpbjFDaGFyKCdpJykpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVhbFJlLnNldENhc2VT
ZW5zaXRpdml0eShRdDo6Q2FzZUluc2Vuc2l0aXZlKTsKLQotICAgICAgICAgICAgICAgICAgICBy
ZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlYWxSZSk7Ci0gICAgICAgICAgICAgICAgICAgIGRp
c3QgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHFD
b252RGVidWcoKSA8PCAiY291bGRuJ3QgcGFyc2UgYSBKUyByZWdleHAiOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBTdHJpbmcpIHsKLSAgICAgICAg
ICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNo
YXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpOwotCi0g
ICAgICAgICAgICAgICAgUVJlZ0V4cCByZShxc3RyaW5nKTsKLSAgICAgICAgICAgICAgICBpZiAo
cmUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9t
VmFsdWUocmUpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBR
TWV0YVR5cGU6OlFPYmplY3RTdGFyOgotICAgICAgICAgICAgaWYgKHR5cGUgPT0gUU9iaikgewot
ICAgICAgICAgICAgICAgIFF0SW5zdGFuY2UqIHF0aW5zdCA9IFF0SW5zdGFuY2U6OmdldEluc3Rh
bmNlKG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHF0aW5zdCkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAocXRpbnN0LT5nZXRPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcUNvbnZEZWJ1ZygpIDw8ICJmb3VuZCBpbnN0YW5jZSwgd2l0aCBvYmplY3Q6IiA8PCAodm9p
ZCopIHF0aW5zdC0+Z2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBR
VmFyaWFudDo6ZnJvbVZhbHVlKHF0aW5zdC0+Z2V0T2JqZWN0KCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8IHJldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRp
c3QgPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjYW4ndCBjb252ZXJ0IGRlbGV0ZWQgcW9iamVjdCI7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgIndhc24ndCBhIHF0aW5zdGFuY2UiOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBOdWxsKSB7Ci0gICAg
ICAgICAgICAgICAgUU9iamVjdCogbnVsbG9iaiA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0ID0g
UVZhcmlhbnQ6OmZyb21WYWx1ZShudWxsb2JqKTsKLSAgICAgICAgICAgICAgICBkaXN0ID0gMDsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJw
cmV2aW91cyB0eXBlIHdhcyBub3QgYW4gb2JqZWN0OiIgPDwgdHlwZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpWb2lkU3RhcjoK
LSAgICAgICAgICAgIGlmICh0eXBlID09IFFPYmopIHsKLSAgICAgICAgICAgICAgICBRdEluc3Rh
bmNlKiBxdGluc3QgPSBRdEluc3RhbmNlOjpnZXRJbnN0YW5jZShvYmplY3QpOwotICAgICAgICAg
ICAgICAgIGlmIChxdGluc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHF0aW5zdC0+Z2V0
T2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiZm91
bmQgaW5zdGFuY2UsIHdpdGggb2JqZWN0OiIgPDwgKHZvaWQqKSBxdGluc3QtPmdldE9iamVjdCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZSgodm9p
ZCAqKXF0aW5zdC0+Z2V0T2JqZWN0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZE
ZWJ1ZygpIDw8IHJldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAwOwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1
ZygpIDw8ICJjYW4ndCBjb252ZXJ0IGRlbGV0ZWQgcW9iamVjdCI7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBxQ29u
dkRlYnVnKCkgPDwgIndhc24ndCBhIHF0aW5zdGFuY2UiOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBOdWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0
ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZSgodm9pZCopMCk7Ci0gICAgICAgICAgICAgICAgZGlzdCA9
IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gTnVtYmVyKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSSBkb24ndCB0aGluayB0aGF0IGNvbnZlcnRpbmcgYSBkb3VibGUgdG8gYSBwb2lu
dGVyIGlzIGEgd2lzZQotICAgICAgICAgICAgICAgIC8vIG1vdmUuICBFeGNlcHQgbWF5YmUgMC4K
LSAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImdvdCBudW1iZXIgZm9yIHZvaWQgKiAt
IG5vdCBjb252ZXJ0aW5nLCBzZWVtcyB1bnNhZmU6IiA8PCB2YWx1ZS50b051bWJlcihleGVjKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJ2
b2lkKiAtIHVuaGFuZGxlZCB0eXBlIiA8PCB0eXBlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIE5vbiBjb25zdCB0
eXBlIGlkcwotICAgICAgICAgICAgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFU
eXBlSWQ8UU9iamVjdExpc3Q+KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KHR5cGUgPT0gUlRBcnJheSkgewotICAgICAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkqIHJ0
YXJyYXkgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwotCi0gICAgICAgICAg
ICAgICAgICAgIFFPYmplY3RMaXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxl
biA9IHJ0YXJyYXktPmdldExlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZh
bCA9IHJ0YXJyYXktPmdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpdGVtZGlzdCA9IC0xOwotICAgICAgICAgICAgICAgICAg
ICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBR
TWV0YVR5cGU6OlFPYmplY3RTdGFyLCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNp
b25MaW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8UU9iamVj
dCo+KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIElmIHdlIGRpZG4ndCBmYWlsIGNvbnZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdC5jb3VudCgpID09IGxlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlz
dCA9IDU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVl
KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IHZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBKU0FycmF5KiBh
cnJheSA9IHN0YXRpY19jYXN0PEpTQXJyYXkgKj4ob2JqZWN0KTsKLSAgICAgICAgICAgICAgICAg
ICAgUU9iamVjdExpc3QgcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJy
YXktPmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5n
ZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNp
dGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGl0ZW1kaXN0ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChpdGVtLnZhbHVlPFFPYmplY3QqPigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmFpbCBjb252ZXJzaW9uCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY291bnQoKSA9PSBsZW4pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g
UVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhIHNpbmds
ZSBsZW5ndGggYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgUU9iamVjdExpc3QgcmVzdWx0Owot
ICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKLSAgICAgICAgICAgICAgICAg
ICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsdWUsIFFN
ZXRhVHlwZTo6UU9iamVjdFN0YXIsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lv
bkxpbWl0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxRT2JqZWN0Kj4oKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UUxp
c3Q8aW50PiA+KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBSVEFycmF5KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVBcnJheSogcnRhcnJheSA9IHN0YXRpY19jYXN0PFJ1
bnRpbWVBcnJheSo+KG9iamVjdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgUUxpc3Q8aW50PiBy
ZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgo
KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0
ZUFycmF5KCktPnZhbHVlQXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aXRlbWRpc3QgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBj
b252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpJbnQsICZpdGVtZGlz
dCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpdGVtZGlzdCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoaXRlbS52YWx1ZTxpbnQ+KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmYWlsIGNvbnZlcnNpb24K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb3VudCgpID09IGxlbikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQg
PSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgSlNBcnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxKU0FycmF5ICo+KG9iamVjdCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgUUxpc3Q8aW50PiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAg
ICAgIGludCBsZW4gPSBhcnJheS0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsID0gYXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpdGVtZGlzdCA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9
IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OkludCwgJml0ZW1k
aXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGl0ZW1kaXN0ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChpdGVtLnZhbHVlPGludD4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZhaWwgY29udmVyc2lv
bgotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50KCkgPT0gbGVuKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgYSBz
aW5nbGUgbGVuZ3RoIGFycmF5Ci0gICAgICAgICAgICAgICAgICAgIFFMaXN0PGludD4gcmVzdWx0
OwotICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKLSAgICAgICAgICAgICAg
ICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsdWUs
IFFNZXRhVHlwZTo6SW50LCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1p
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8aW50PigpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9
IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoUXRQaXhtYXBJbnN0YW5jZTo6Y2FuSGFuZGxlKHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6
VHlwZT4oaGludCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUXRQaXhtYXBJbnN0YW5jZTo6
dmFyaWFudEZyb21PYmplY3Qob2JqZWN0LCBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KGhp
bnQpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VzdG9tUnVudGltZUNvbnZlcnNpb25zKCkt
PmNvbnRhaW5zKGhpbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gY3VzdG9tUnVudGltZUNv
bnZlcnNpb25zKCktPnZhbHVlKGhpbnQpLnRvVmFyaWFudEZ1bmMob2JqZWN0LCAmZGlzdCwgdmlz
aXRlZE9iamVjdHMpOwotICAgICAgICAgICAgICAgIGlmIChkaXN0ID09IDApCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IChRTWV0YVR5
cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFWYXJpYW50PigpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRp
c3RhbmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgKmRpc3RhbmNlID0gMTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gT2JqZWN0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTaW5jZSB3ZSBoYXZlbid0IHJlYWxseSB2aXNpdGVkIHRoaXMgb2JqZWN0
IHlldCwgd2UgcmVtb3ZlIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVkT2JqZWN0
cy0+cmVtb3ZlKG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAvLyBBbmQgdGhlbiByZWN1cnNlIHdpdGggdGhlIGF1dG9kZXRlY3QgZmxhZwotICAg
ICAgICAgICAgICAgICAgICByZXQgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbHVl
LCBRTWV0YVR5cGU6OlZvaWQsIGRpc3RhbmNlLCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGlt
aXQpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkaXN0
ID0gMTA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIXJldC5pc1ZhbGlk
KCkpCi0gICAgICAgIGRpc3QgPSAtMTsKLSAgICBpZiAoZGlzdGFuY2UpCi0gICAgICAgICpkaXN0
YW5jZSA9IGRpc3Q7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1RVmFyaWFudCBjb252ZXJ0VmFs
dWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpU
eXBlIGhpbnQsIGludCAqZGlzdGFuY2UpCi17Ci0gICAgY29uc3QgaW50IHJlY3Vyc2lvbkxpbWl0
ID0gMjAwOwotICAgIEhhc2hTZXQ8SlNPYmplY3QqPiB2aXNpdGVkT2JqZWN0czsKLSAgICByZXR1
cm4gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWx1ZSwgaGludCwgZGlzdGFuY2UsICZ2
aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwotfQotCi1KU1ZhbHVlIGNvbnZlcnRRVmFy
aWFudFRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3Qs
IGNvbnN0IFFWYXJpYW50JiB2YXJpYW50KQotewotICAgIC8vIFZhcmlhbnRzIHdpdGggUU9iamVj
dCAqIGNhbiBiZSBpc051bGwgYnV0IG5vdCBhIG51bGwgcG9pbnRlcgotICAgIC8vIEFuIGVtcHR5
IFFTdHJpbmcgdmFyaWFudCBpcyBhbHNvIG51bGwKLSAgICBRTWV0YVR5cGU6OlR5cGUgdHlwZSA9
IChRTWV0YVR5cGU6OlR5cGUpIHZhcmlhbnQudXNlclR5cGUoKTsKLQotICAgIHFDb252RGVidWco
KSA8PCAiY29udmVydFFWYXJpYW50VG9WYWx1ZTogbWV0YXR5cGU6IiA8PCB0eXBlIDw8ICIsIGlz
bnVsbDogIiA8PCB2YXJpYW50LmlzTnVsbCgpOwotICAgIGlmICh2YXJpYW50LmlzTnVsbCgpICYm
Ci0gICAgICAgIHR5cGUgIT0gUU1ldGFUeXBlOjpRT2JqZWN0U3RhciAmJgotICAgICAgICB0eXBl
ICE9IFFNZXRhVHlwZTo6Vm9pZFN0YXIgJiYKLSAgICAgICAgdHlwZSAhPSBRTWV0YVR5cGU6OlFX
aWRnZXRTdGFyICYmCi0gICAgICAgIHR5cGUgIT0gUU1ldGFUeXBlOjpRU3RyaW5nKSB7Ci0gICAg
ICAgIHJldHVybiBqc051bGwoKTsKLSAgICB9Ci0KLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKLQotICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6Qm9vbCkKLSAgICAgICAgcmV0dXJuIGpz
Qm9vbGVhbih2YXJpYW50LnRvQm9vbCgpKTsKLQotICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6
SW50IHx8Ci0gICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpVSW50IHx8Ci0gICAgICAgIHR5cGUg
PT0gUU1ldGFUeXBlOjpMb25nIHx8Ci0gICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpVTG9uZyB8
fAotICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6TG9uZ0xvbmcgfHwKLSAgICAgICAgdHlwZSA9
PSBRTWV0YVR5cGU6OlVMb25nTG9uZyB8fAotICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6U2hv
cnQgfHwKLSAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OlVTaG9ydCB8fAotICAgICAgICB0eXBl
ID09IFFNZXRhVHlwZTo6RmxvYXQgfHwKLSAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OkRvdWJs
ZSkKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhcmlhbnQudG9Eb3VibGUoKSk7Ci0KLSAgICBp
ZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFSZWdFeHApIHsKLSAgICAgICAgUVJlZ0V4cCByZSA9IHZh
cmlhbnQudmFsdWU8UVJlZ0V4cD4oKTsKLQotICAgICAgICBpZiAocmUuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgICAgICBVU3RyaW5nIHBhdHRlcm4oKFVDaGFyKilyZS5wYXR0ZXJuKCkudXRmMTYoKSwg
cmUucGF0dGVybigpLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIFJlZ0V4cEZsYWdzIGZsYWdzID0g
KHJlLmNhc2VTZW5zaXRpdml0eSgpID09IFF0OjpDYXNlSW5zZW5zaXRpdmUpID8gRmxhZ0lnbm9y
ZUNhc2UgOiBOb0ZsYWdzOwotCi0gICAgICAgICAgICBKU0M6OlJlZ0V4cCogcmVnRXhwID0gSlND
OjpSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKLSAg
ICAgICAgICAgIGlmIChyZWdFeHAtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
UmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwot
ICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KHR5cGUgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUgfHwKLSAgICAgICAgdHlwZSA9PSBRTWV0YVR5
cGU6OlFEYXRlIHx8Ci0gICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpRVGltZSkgewotCi0gICAg
ICAgIFFEYXRlIGRhdGUgPSBRRGF0ZTo6Y3VycmVudERhdGUoKTsKLSAgICAgICAgUVRpbWUgdGlt
ZSgwLDAsMCk7IC8vIG1pZG5pZ2h0Ci0KLSAgICAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpR
RGF0ZSkKLSAgICAgICAgICAgIGRhdGUgPSB2YXJpYW50LnZhbHVlPFFEYXRlPigpOwotICAgICAg
ICBlbHNlIGlmICh0eXBlID09IFFNZXRhVHlwZTo6UVRpbWUpCi0gICAgICAgICAgICB0aW1lID0g
dmFyaWFudC52YWx1ZTxRVGltZT4oKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBRRGF0
ZVRpbWUgZHQgPSB2YXJpYW50LnZhbHVlPFFEYXRlVGltZT4oKS50b0xvY2FsVGltZSgpOwotICAg
ICAgICAgICAgZGF0ZSA9IGR0LmRhdGUoKTsKLSAgICAgICAgICAgIHRpbWUgPSBkdC50aW1lKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEYXRlcyBzcGVjaWZpZWQgdGhpcyB3YXkgYXJlIGlu
IGxvY2FsIHRpbWUgKHdlIGNvbnZlcnQgRGF0ZVRpbWVzIGFib3ZlKQotICAgICAgICBHcmVnb3Jp
YW5EYXRlVGltZSBkdDsKLSAgICAgICAgZHQuc2V0WWVhcihkYXRlLnllYXIoKSk7Ci0gICAgICAg
IGR0LnNldE1vbnRoKGRhdGUubW9udGgoKSAtIDEpOwotICAgICAgICBkdC5zZXRNb250aERheShk
YXRlLmRheSgpKTsKLSAgICAgICAgZHQuc2V0SG91cih0aW1lLmhvdXIoKSk7Ci0gICAgICAgIGR0
LnNldE1pbnV0ZSh0aW1lLm1pbnV0ZSgpKTsKLSAgICAgICAgZHQuc2V0U2Vjb25kKHRpbWUuc2Vj
b25kKCkpOwotICAgICAgICBkdC5zZXRJc0RTVCgtMSk7Ci0gICAgICAgIGRvdWJsZSBtcyA9IGdy
ZWdvcmlhbkRhdGVUaW1lVG9NUyhleGVjLCBkdCwgdGltZS5tc2VjKCksIC8qaW5wdXRJc1VUQyov
IGZhbHNlKTsKLQotICAgICAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHRydW5jKG1zKSk7Ci0g
ICAgfQotCi0gICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRQnl0ZUFycmF5KSB7Ci0gICAgICAg
IFFCeXRlQXJyYXkgcXRCeXRlQXJyYXkgPSB2YXJpYW50LnZhbHVlPFFCeXRlQXJyYXk+KCk7Ci0g
ICAgICAgIFdURjo6UmVmUHRyPFdURjo6VWludDhDbGFtcGVkQXJyYXk+IHd0ZkJ5dGVBcnJheSA9
IFdURjo6VWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocXRCeXRlQXJyYXku
bGVuZ3RoKCkpOwotICAgICAgICBtZW1jcHkod3RmQnl0ZUFycmF5LT5kYXRhKCksIHF0Qnl0ZUFy
cmF5LmNvbnN0RGF0YSgpLCBxdEJ5dGVBcnJheS5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKSwgd3RmQnl0ZUFycmF5LmdldCgpKTsKLSAgICB9Ci0KLSAgICBpZiAodHlw
ZSA9PSBRTWV0YVR5cGU6OlFPYmplY3RTdGFyIHx8IHR5cGUgPT0gUU1ldGFUeXBlOjpRV2lkZ2V0
U3RhcikgewotICAgICAgICBRT2JqZWN0KiBvYmogPSB2YXJpYW50LnZhbHVlPFFPYmplY3QqPigp
OwotICAgICAgICBpZiAoIW9iaikKLSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAg
ICAgcmV0dXJuIFF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2Uob2JqLCByb290LCBRdEluc3RhbmNl
OjpRdE93bmVyc2hpcCktPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7Ci0gICAgfQotCi0gICAg
aWYgKFF0UGl4bWFwSW5zdGFuY2U6OmNhbkhhbmRsZShzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5
cGU+KHZhcmlhbnQudHlwZSgpKSkpCi0gICAgICAgIHJldHVybiBRdFBpeG1hcEluc3RhbmNlOjpj
cmVhdGVQaXhtYXBSdW50aW1lT2JqZWN0KGV4ZWMsIHJvb3QsIHZhcmlhbnQpOwotCi0gICAgaWYg
KGN1c3RvbVJ1bnRpbWVDb252ZXJzaW9ucygpLT5jb250YWlucyh0eXBlKSkgewotICAgICAgICBp
ZiAoIXJvb3QtPmdsb2JhbE9iamVjdCgpLT5pbmhlcml0cygmSlNET01XaW5kb3c6OnNfaW5mbykp
Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSAoc3RhdGljX2Nhc3Q8SlNET01XaW5kb3cqPihyb290LT5nbG9iYWxPYmplY3Qo
KSkpLT5pbXBsKCktPmRvY3VtZW50KCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJuIGN1c3RvbVJ1bnRpbWVD
b252ZXJzaW9ucygpLT52YWx1ZSh0eXBlKS50b0pTVmFsdWVGdW5jKGV4ZWMsIHRvSlNET01HbG9i
YWxPYmplY3QoZG9jdW1lbnQsIGV4ZWMpLCB2YXJpYW50KTsKLSAgICB9Ci0KLSAgICBpZiAodHlw
ZSA9PSBRTWV0YVR5cGU6OlFWYXJpYW50TWFwKSB7Ci0gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBv
YmplY3QsIGFuZCBzdHVmZiBwcm9wZXJ0aWVzIGludG8gaXQKLSAgICAgICAgSlNPYmplY3QqIHJl
dCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgICAgICBRVmFyaWFudE1hcCBtYXAg
PSB2YXJpYW50LnZhbHVlPFFWYXJpYW50TWFwPigpOwotICAgICAgICBRVmFyaWFudE1hcDo6Y29u
c3RfaXRlcmF0b3IgaSA9IG1hcC5jb25zdEJlZ2luKCk7Ci0gICAgICAgIHdoaWxlIChpICE9IG1h
cC5jb25zdEVuZCgpKSB7Ci0gICAgICAgICAgICBRU3RyaW5nIHMgPSBpLmtleSgpOwotICAgICAg
ICAgICAgSlNWYWx1ZSB2YWwgPSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHJvb3QuZ2V0
KCksIGkudmFsdWUoKSk7Ci0gICAgICAgICAgICBpZiAodmFsKSB7Ci0gICAgICAgICAgICAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgICAgICAgICAgcmV0LT5tZXRob2RUYWJsZSgp
LT5wdXQocmV0LCBleGVjLCBJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPGNvbnN0IFVDaGFyICo+KHMuY29uc3REYXRhKCkpLCBzLmxlbmd0aCgpKSwg
dmFsLCBzbG90KTsKLSAgICAgICAgICAgICAgICAvLyAjIyMgZXJyb3IgY2FzZT8KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICsraTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXQ7
Ci0gICAgfQotCi0gICAgLy8gTGlzdCB0eXBlcwotICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6
UVZhcmlhbnRMaXN0KSB7Ci0gICAgICAgIFFWYXJpYW50TGlzdCB2bCA9IHZhcmlhbnQudG9MaXN0
KCk7Ci0gICAgICAgIHFDb252RGVidWcoKSA8PCAiZ290IGEgIiA8PCB2bC5jb3VudCgpIDw8ICIg
bGVuZ3RoIGxpc3Q6IiA8PCB2bDsKLSAgICAgICAgcmV0dXJuIFJ1bnRpbWVBcnJheTo6Y3JlYXRl
KGV4ZWMsIG5ldyBRdEFycmF5PFFWYXJpYW50Pih2bCwgUU1ldGFUeXBlOjpWb2lkLCByb290KSk7
Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IFFNZXRhVHlwZTo6UVN0cmluZ0xpc3QpIHsKLSAgICAg
ICAgUVN0cmluZ0xpc3Qgc2wgPSB2YXJpYW50LnZhbHVlPFFTdHJpbmdMaXN0PigpOwotICAgICAg
ICByZXR1cm4gUnVudGltZUFycmF5OjpjcmVhdGUoZXhlYywgbmV3IFF0QXJyYXk8UVN0cmluZz4o
c2wsIFFNZXRhVHlwZTo6UVN0cmluZywgcm9vdCkpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAo
UU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRT2JqZWN0TGlzdD4oKSkgewotICAgICAgICBR
T2JqZWN0TGlzdCBvbD0gdmFyaWFudC52YWx1ZTxRT2JqZWN0TGlzdD4oKTsKLSAgICAgICAgcmV0
dXJuIFJ1bnRpbWVBcnJheTo6Y3JlYXRlKGV4ZWMsIG5ldyBRdEFycmF5PFFPYmplY3QqPihvbCwg
UU1ldGFUeXBlOjpRT2JqZWN0U3Rhciwgcm9vdCkpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSAo
UU1ldGFUeXBlOjpUeXBlKXFNZXRhVHlwZUlkPFFMaXN0PGludD4gPigpKSB7Ci0gICAgICAgIFFM
aXN0PGludD4gaWw9IHZhcmlhbnQudmFsdWU8UUxpc3Q8aW50PiA+KCk7Ci0gICAgICAgIHJldHVy
biBSdW50aW1lQXJyYXk6OmNyZWF0ZShleGVjLCBuZXcgUXRBcnJheTxpbnQ+KGlsLCBRTWV0YVR5
cGU6OkludCwgcm9vdCkpOwotICAgIH0KLQotICAgIGlmICh0eXBlID09IChRTWV0YVR5cGU6OlR5
cGUpcU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkpIHsKLSAgICAgICAgUVZhcmlhbnQgcmVhbCA9IHZh
cmlhbnQudmFsdWU8UVZhcmlhbnQ+KCk7Ci0gICAgICAgIHFDb252RGVidWcoKSA8PCAicmVhbCB2
YXJpYW50IGlzOiIgPDwgcmVhbDsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRRVmFyaWFudFRvVmFs
dWUoZXhlYywgcm9vdCwgcmVhbCk7Ci0gICAgfQotCi0gICAgcUNvbnZEZWJ1ZygpIDw8ICJmYWxs
YmFjayBwYXRoIGZvciIgPDwgdmFyaWFudCA8PCB2YXJpYW50LnVzZXJUeXBlKCk7Ci0KLSAgICBR
U3RyaW5nIHN0cmluZyA9IHZhcmlhbnQudG9TdHJpbmcoKTsKLSAgICBVU3RyaW5nIHVzdHJpbmco
KFVDaGFyKilzdHJpbmcudXRmMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKLSAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgdXN0cmluZyk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PQotCi0vLyBRdC1s
aWtlIG1hY3JvcwotI2RlZmluZSBRV19EKENsYXNzKSBDbGFzcyMjRGF0YSogZCA9IGRfZnVuYygp
Ci0jZGVmaW5lIFFXX0RTKENsYXNzLEluc3RhbmNlKSBDbGFzcyMjRGF0YSogZCA9IEluc3RhbmNl
LT5kX2Z1bmMoKQotCi1jb25zdCBDbGFzc0luZm8gUXRSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7
ICJRdFJ1bnRpbWVNZXRob2QiLCAmSW50ZXJuYWxGdW5jdGlvbjo6c19pbmZvLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKFF0UnVudGltZU1ldGhvZCkgfTsKLQotUXRSdW50aW1lTWV0aG9kOjpR
dFJ1bnRpbWVNZXRob2QoUXRSdW50aW1lTWV0aG9kRGF0YSogZGQsIEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIGlkZW50aWZpZXIpCi0gICAgOiBJ
bnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlKQot
ICAgICwgZF9wdHIoZGQpCi17Ci19Ci0KLXZvaWQgUXRSdW50aW1lTWV0aG9kOjpmaW5pc2hDcmVh
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIGlkZW50aWZpZXIsIFBhc3NSZWZQ
dHI8UXRJbnN0YW5jZT4gaW5zdGFuY2UpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyKTsKLSAgICBRV19EKFF0UnVudGltZU1ldGhvZCk7
Ci0gICAgZC0+bV9pbnN0YW5jZSA9IGluc3RhbmNlOwotICAgIGQtPm1fZmluYWxpemVyID0gUGFz
c1dlYWs8UXRSdW50aW1lTWV0aG9kPih0aGlzLCBkKTsKLX0KLQotUXRSdW50aW1lTWV0aG9kOjp+
UXRSdW50aW1lTWV0aG9kKCkKLXsKLSAgICBkZWxldGUgZF9wdHI7Ci19Ci0KLXZvaWQgUXRSdW50
aW1lTWV0aG9kOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBzdGF0aWNfY2FzdDxRdFJ1
bnRpbWVNZXRob2QqPihjZWxsKS0+UXRSdW50aW1lTWV0aG9kOjp+UXRSdW50aW1lTWV0aG9kKCk7
Ci19Ci0KLS8vID09PT09PT09PT09PT09PQotCi1RdFJ1bnRpbWVNZXRob2REYXRhOjp+UXRSdW50
aW1lTWV0aG9kRGF0YSgpCi17Ci19Ci0KLXZvaWQgUXRSdW50aW1lTWV0aG9kRGF0YTo6ZmluYWxp
emUoSGFuZGxlPFVua25vd24+LCB2b2lkKikKLXsKLSAgICBtX2luc3RhbmNlLT5yZW1vdmVVbnVz
ZWRNZXRob2RzKCk7Ci19Ci0KLVF0UnVudGltZU1ldGFNZXRob2REYXRhOjp+UXRSdW50aW1lTWV0
YU1ldGhvZERhdGEoKQotewotCi19Ci0KLVF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhOjp+
UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEoKQotewotCi19Ci0KLS8vID09PT09PT09PT09
PT09PQotCi0vLyBUeXBlIGNvbnZlcnNpb24gbWV0YWRhdGEgKGZyb20gUXRTY3JpcHQgb3JpZ2lu
YWxseSkKLWNsYXNzIFF0TWV0aG9kTWF0Y2hUeXBlCi17Ci1wdWJsaWM6Ci0gICAgZW51bSBLaW5k
IHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAgICAgVmFyaWFudCwKLSAgICAgICAgTWV0YVR5cGUs
Ci0gICAgICAgIFVucmVzb2x2ZWQsCi0gICAgICAgIE1ldGFFbnVtCi0gICAgfTsKLQotCi0gICAg
UXRNZXRob2RNYXRjaFR5cGUoKQotICAgICAgICA6IG1fa2luZChJbnZhbGlkKSB7IH0KLQotICAg
IEtpbmQga2luZCgpIGNvbnN0Ci0gICAgeyByZXR1cm4gbV9raW5kOyB9Ci0KLSAgICBRTWV0YVR5
cGU6OlR5cGUgdHlwZUlkKCkgY29uc3Q7Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdAotICAg
IHsgcmV0dXJuIChtX2tpbmQgIT0gSW52YWxpZCk7IH0KLQotICAgIGJvb2wgaXNWYXJpYW50KCkg
Y29uc3QKLSAgICB7IHJldHVybiAobV9raW5kID09IFZhcmlhbnQpOyB9Ci0KLSAgICBib29sIGlz
TWV0YVR5cGUoKSBjb25zdAotICAgIHsgcmV0dXJuIChtX2tpbmQgPT0gTWV0YVR5cGUpOyB9Ci0K
LSAgICBib29sIGlzVW5yZXNvbHZlZCgpIGNvbnN0Ci0gICAgeyByZXR1cm4gKG1fa2luZCA9PSBV
bnJlc29sdmVkKTsgfQotCi0gICAgYm9vbCBpc01ldGFFbnVtKCkgY29uc3QKLSAgICB7IHJldHVy
biAobV9raW5kID09IE1ldGFFbnVtKTsgfQotCi0gICAgUUJ5dGVBcnJheSBuYW1lKCkgY29uc3Q7
Ci0KLSAgICBpbnQgZW51bWVyYXRvckluZGV4KCkgY29uc3QKLSAgICB7IFFfQVNTRVJUKGlzTWV0
YUVudW0oKSk7IHJldHVybiBtX3R5cGVJZDsgfQotCi0gICAgc3RhdGljIFF0TWV0aG9kTWF0Y2hU
eXBlIHZhcmlhbnQoKQotICAgIHsgcmV0dXJuIFF0TWV0aG9kTWF0Y2hUeXBlKFZhcmlhbnQpOyB9
Ci0KLSAgICBzdGF0aWMgUXRNZXRob2RNYXRjaFR5cGUgbWV0YVR5cGUoaW50IHR5cGVJZCwgY29u
c3QgUUJ5dGVBcnJheSAmbmFtZSkKLSAgICB7IHJldHVybiBRdE1ldGhvZE1hdGNoVHlwZShNZXRh
VHlwZSwgdHlwZUlkLCBuYW1lKTsgfQotCi0gICAgc3RhdGljIFF0TWV0aG9kTWF0Y2hUeXBlIG1l
dGFFbnVtKGludCBlbnVtSW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkgJm5hbWUpCi0gICAgeyByZXR1
cm4gUXRNZXRob2RNYXRjaFR5cGUoTWV0YUVudW0sIGVudW1JbmRleCwgbmFtZSk7IH0KLQotICAg
IHN0YXRpYyBRdE1ldGhvZE1hdGNoVHlwZSB1bnJlc29sdmVkKGNvbnN0IFFCeXRlQXJyYXkgJm5h
bWUpCi0gICAgeyByZXR1cm4gUXRNZXRob2RNYXRjaFR5cGUoVW5yZXNvbHZlZCwgLyp0eXBlSWQ9
Ki8wLCBuYW1lKTsgfQotCi1wcml2YXRlOgotICAgIFF0TWV0aG9kTWF0Y2hUeXBlKEtpbmQga2lu
ZCwgaW50IHR5cGVJZCA9IDAsIGNvbnN0IFFCeXRlQXJyYXkgJm5hbWUgPSBRQnl0ZUFycmF5KCkp
Ci0gICAgICAgIDogbV9raW5kKGtpbmQpLCBtX3R5cGVJZCh0eXBlSWQpLCBtX25hbWUobmFtZSkg
eyB9Ci0KLSAgICBLaW5kIG1fa2luZDsKLSAgICBpbnQgbV90eXBlSWQ7Ci0gICAgUUJ5dGVBcnJh
eSBtX25hbWU7Ci19OwotCi1RTWV0YVR5cGU6OlR5cGUgUXRNZXRob2RNYXRjaFR5cGU6OnR5cGVJ
ZCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzVmFyaWFudCgpKQotICAgICAgICByZXR1cm4gKFFNZXRh
VHlwZTo6VHlwZSkgUU1ldGFUeXBlOjp0eXBlKCJRVmFyaWFudCIpOwotICAgIHJldHVybiAoUU1l
dGFUeXBlOjpUeXBlKSAoaXNNZXRhRW51bSgpID8gUU1ldGFUeXBlOjpJbnQgOiBtX3R5cGVJZCk7
Ci19Ci0KLVFCeXRlQXJyYXkgUXRNZXRob2RNYXRjaFR5cGU6Om5hbWUoKSBjb25zdAotewotICAg
IGlmICghbV9uYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fbmFtZTsKLSAgICBlbHNl
IGlmIChtX2tpbmQgPT0gVmFyaWFudCkKLSAgICAgICAgcmV0dXJuICJRVmFyaWFudCI7Ci0gICAg
cmV0dXJuIFFCeXRlQXJyYXkoKTsKLX0KLQotc3RydWN0IFF0TWV0aG9kTWF0Y2hEYXRhCi17Ci0g
ICAgaW50IG1hdGNoRGlzdGFuY2U7Ci0gICAgaW50IGluZGV4OwotICAgIFFWZWN0b3I8UXRNZXRo
b2RNYXRjaFR5cGU+IHR5cGVzOwotICAgIFFWYXJMZW5ndGhBcnJheTxRVmFyaWFudCwgMTA+IGFy
Z3M7Ci0KLSAgICBRdE1ldGhvZE1hdGNoRGF0YShpbnQgZGlzdCwgaW50IGlkeCwgUVZlY3RvcjxR
dE1ldGhvZE1hdGNoVHlwZT4gdHlwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUVZhckxlbmd0aEFycmF5PFFWYXJpYW50LCAxMD4gJmFzKQotICAgICAgICA6IG1hdGNo
RGlzdGFuY2UoZGlzdCksIGluZGV4KGlkeCksIHR5cGVzKHR5cHMpLCBhcmdzKGFzKSB7IH0KLSAg
ICBRdE1ldGhvZE1hdGNoRGF0YSgpCi0gICAgICAgIDogaW5kZXgoLTEpIHsgfQotCi0gICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3QKLSAgICB7IHJldHVybiAoaW5kZXggIT0gLTEpOyB9Ci0KLSAgICBp
bnQgZmlyc3RVbnJlc29sdmVkSW5kZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yIChpbnQg
aT0wOyBpIDwgdHlwZXMuY291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAodHlwZXMuYXQo
aSkuaXNVbnJlc29sdmVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX07Ci0KLXN0YXRpYyBpbnQgaW5kZXhPZk1ldGFF
bnVtKGNvbnN0IFFNZXRhT2JqZWN0ICptZXRhLCBjb25zdCBRQnl0ZUFycmF5ICZzdHIpCi17Ci0g
ICAgUUJ5dGVBcnJheSBzY29wZTsKLSAgICBRQnl0ZUFycmF5IG5hbWU7Ci0gICAgaW50IHNjb3Bl
SWR4ID0gc3RyLmluZGV4T2YoIjo6Iik7Ci0gICAgaWYgKHNjb3BlSWR4ICE9IC0xKSB7Ci0gICAg
ICAgIHNjb3BlID0gc3RyLmxlZnQoc2NvcGVJZHgpOwotICAgICAgICBuYW1lID0gc3RyLm1pZChz
Y29wZUlkeCArIDIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5hbWUgPSBzdHI7Ci0gICAgfQot
ICAgIGZvciAoaW50IGkgPSBtZXRhLT5lbnVtZXJhdG9yQ291bnQoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7Ci0gICAgICAgIFFNZXRhRW51bSBtID0gbWV0YS0+ZW51bWVyYXRvcihpKTsKLSAgICAgICAg
aWYgKChtLm5hbWUoKSA9PSBuYW1lKS8qICYmIChzY29wZS5pc0VtcHR5KCkgfHwgKG0uc2NvcGUo
KSA9PSBzY29wZSkpKi8pCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0gICAgcmV0dXJu
IC0xOwotfQotCi0vLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHJlc29sdmluZyBtZXRob2RzCi0vLyBM
YXJnZWx5IGJhc2VkIG9uIGNvZGUgaW4gUXRTY3JpcHQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29u
cwotc3RhdGljIGludCBmaW5kTWV0aG9kSW5kZXgoRXhlY1N0YXRlKiBleGVjLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUU1ldGFPYmplY3QqIG1ldGEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBRQnl0ZUFycmF5JiBzaWduYXR1cmUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGFsbG93UHJpdmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFFWYXJMZW5ndGhBcnJheTxRVmFyaWFudCwgMTA+ICZ2YXJzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCoqIHZ2YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNP
YmplY3QgKipwRXJyb3IpCi17Ci0gICAgUUxpc3Q8aW50PiBtYXRjaGluZ0luZGljZXM7Ci0KLSAg
ICBib29sIG92ZXJsb2FkcyA9ICFzaWduYXR1cmUuY29udGFpbnMoJygnKTsKLQotICAgIGludCBj
b3VudCA9IG1ldGEtPm1ldGhvZENvdW50KCk7Ci0gICAgZm9yIChpbnQgaSA9IGNvdW50IC0gMTsg
aSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgUU1ldGFNZXRob2QgbSA9IG1ldGEtPm1ldGhv
ZChpKTsKLQotICAgICAgICAvLyBEb24ndCBjaG9vc2UgcHJpdmF0ZSBtZXRob2RzCi0gICAgICAg
IGlmIChtLmFjY2VzcygpID09IFFNZXRhTWV0aG9kOjpQcml2YXRlICYmICFhbGxvd1ByaXZhdGUp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyB0cnkgYW5kIGZpbmQgYWxsIG1h
dGNoaW5nIG5hbWVkIG1ldGhvZHMKLSAgICAgICAgaWYgKG0uc2lnbmF0dXJlKCkgPT0gc2lnbmF0
dXJlKQotICAgICAgICAgICAgbWF0Y2hpbmdJbmRpY2VzLmFwcGVuZChpKTsKLSAgICAgICAgZWxz
ZSBpZiAob3ZlcmxvYWRzKSB7Ci0gICAgICAgICAgICBRQnl0ZUFycmF5IHJhd3NpZ25hdHVyZSA9
IG0uc2lnbmF0dXJlKCk7Ci0gICAgICAgICAgICByYXdzaWduYXR1cmUudHJ1bmNhdGUocmF3c2ln
bmF0dXJlLmluZGV4T2YoJygnKSk7Ci0gICAgICAgICAgICBpZiAocmF3c2lnbmF0dXJlID09IHNp
Z25hdHVyZSkKLSAgICAgICAgICAgICAgICBtYXRjaGluZ0luZGljZXMuYXBwZW5kKGkpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaW50IGNob3NlbkluZGV4ID0gLTE7Ci0gICAgKnBFcnJvciA9
IDA7Ci0gICAgUVZlY3RvcjxRdE1ldGhvZE1hdGNoVHlwZT4gY2hvc2VuVHlwZXM7Ci0KLSAgICBR
VmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEwPiBhcmdzOwotICAgIFFWZWN0b3I8UXRNZXRob2RN
YXRjaERhdGE+IGNhbmRpZGF0ZXM7Ci0gICAgUVZlY3RvcjxRdE1ldGhvZE1hdGNoRGF0YT4gdW5y
ZXNvbHZlZDsKLSAgICBRVmVjdG9yPGludD4gdG9vRmV3QXJnczsKLSAgICBRVmVjdG9yPGludD4g
Y29udmVyc2lvbkZhaWxlZDsKLQotICAgIGZvcmVhY2goaW50IGluZGV4LCBtYXRjaGluZ0luZGlj
ZXMpIHsKLSAgICAgICAgUU1ldGFNZXRob2QgbWV0aG9kID0gbWV0YS0+bWV0aG9kKGluZGV4KTsK
LQotICAgICAgICBRVmVjdG9yPFF0TWV0aG9kTWF0Y2hUeXBlPiB0eXBlczsKLSAgICAgICAgYm9v
bCB1bnJlc29sdmVkVHlwZXMgPSBmYWxzZTsKLQotICAgICAgICAvLyByZXNvbHZlIHJldHVybiB0
eXBlCi0gICAgICAgIFFCeXRlQXJyYXkgcmV0dXJuVHlwZU5hbWUgPSBtZXRob2QudHlwZU5hbWUo
KTsKLSAgICAgICAgaW50IHJ0eXBlID0gUU1ldGFUeXBlOjp0eXBlKHJldHVyblR5cGVOYW1lKTsK
LSAgICAgICAgaWYgKChydHlwZSA9PSAwKSAmJiAhcmV0dXJuVHlwZU5hbWUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBpZiAocmV0dXJuVHlwZU5hbWUgPT0gIlFWYXJpYW50IikgewotICAgICAg
ICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6dmFyaWFudCgpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAocmV0dXJuVHlwZU5hbWUuZW5kc1dpdGgoJyonKSkgewotICAg
ICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6bWV0YVR5cGUoUU1l
dGFUeXBlOjpWb2lkU3RhciwgcmV0dXJuVHlwZU5hbWUpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaW50IGVudW1JbmRleCA9IGluZGV4T2ZNZXRhRW51bShtZXRhLCBy
ZXR1cm5UeXBlTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudW1JbmRleCAhPSAtMSkKLSAg
ICAgICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjptZXRhRW51
bShlbnVtSW5kZXgsIHJldHVyblR5cGVOYW1lKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHVucmVzb2x2ZWRUeXBlcyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6dW5yZXNvbHZlZChyZXR1cm5U
eXBlTmFtZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChyZXR1cm5UeXBlTmFtZSA9PSAiUVZhcmlhbnQiKQotICAg
ICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6dmFyaWFudCgpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RN
YXRjaFR5cGU6Om1ldGFUeXBlKHJ0eXBlLCByZXR1cm5UeXBlTmFtZSkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gcmVzb2x2ZSBhcmd1bWVudCB0eXBlcwotICAgICAgICBRTGlzdDxRQnl0ZUFy
cmF5PiBwYXJhbWV0ZXJUeXBlTmFtZXMgPSBtZXRob2QucGFyYW1ldGVyVHlwZXMoKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJUeXBlTmFtZXMuY291bnQoKTsgKytpKSB7
Ci0gICAgICAgICAgICBRQnl0ZUFycmF5IGFyZ1R5cGVOYW1lID0gcGFyYW1ldGVyVHlwZU5hbWVz
LmF0KGkpOwotICAgICAgICAgICAgaW50IGF0eXBlID0gUU1ldGFUeXBlOjp0eXBlKGFyZ1R5cGVO
YW1lKTsKLSAgICAgICAgICAgIGlmIChhdHlwZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGFyZ1R5cGVOYW1lID09ICJRVmFyaWFudCIpIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZXMu
YXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjp2YXJpYW50KCkpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBlbnVtSW5kZXggPSBpbmRleE9mTWV0YUVu
dW0obWV0YSwgYXJnVHlwZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZW51bUluZGV4
ICE9IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0
Y2hUeXBlOjptZXRhRW51bShlbnVtSW5kZXgsIGFyZ1R5cGVOYW1lKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5yZXNvbHZlZFR5cGVzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNo
VHlwZTo6dW5yZXNvbHZlZChhcmdUeXBlTmFtZSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAoYXJnVHlwZU5hbWUgPT0gIlFWYXJpYW50IikKLSAgICAgICAgICAgICAgICAgICAgdHlwZXMu
YXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjp2YXJpYW50KCkpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjpt
ZXRhVHlwZShhdHlwZSwgYXJnVHlwZU5hbWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIElmIHRoZSBuYXRpdmUgbWV0aG9kIHJlcXVpcmVzIG1vcmUgYXJndW1lbnRz
IHRoYW4gd2hhdCB3YXMgcGFzc2VkIGZyb20gSmF2YVNjcmlwdAotICAgICAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICsgMSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlcy5jb3VudCgp
KSkgewotICAgICAgICAgICAgcU1hdGNoRGVidWcoKSA8PCAiTWF0Y2g6dG9vIGZldyBhcmdzIGZv
ciIgPDwgbWV0aG9kLnNpZ25hdHVyZSgpOwotICAgICAgICAgICAgdG9vRmV3QXJncy5hcHBlbmQo
aW5kZXgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
dW5yZXNvbHZlZFR5cGVzKSB7Ci0gICAgICAgICAgICBxTWF0Y2hEZWJ1ZygpIDw8ICJNYXRjaDp1
bnJlc29sdmVkIGFyZyB0eXBlcyBmb3IiIDw8IG1ldGhvZC5zaWduYXR1cmUoKTsKLSAgICAgICAg
ICAgIC8vIHJlbWVtYmVyIGl0IHNvIHdlIGNhbiBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgbGF0ZXIs
IGlmIG5lY2Vzc2FyeQotICAgICAgICAgICAgdW5yZXNvbHZlZC5hcHBlbmQoUXRNZXRob2RNYXRj
aERhdGEoLyptYXRjaERpc3RhbmNlPSovSU5UX01BWCwgaW5kZXgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcywgUVZhckxlbmd0aEFycmF5
PFFWYXJpYW50LCAxMD4oKSkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBOb3cgY29udmVydCBhcmd1bWVudHMKLSAgICAgICAgaWYgKGFyZ3MuY291bnQo
KSAhPSB0eXBlcy5jb3VudCgpKQotICAgICAgICAgICAgYXJncy5yZXNpemUodHlwZXMuY291bnQo
KSk7Ci0KLSAgICAgICAgUXRNZXRob2RNYXRjaFR5cGUgcmV0VHlwZSA9IHR5cGVzWzBdOwotICAg
ICAgICBhcmdzWzBdID0gUVZhcmlhbnQocmV0VHlwZS50eXBlSWQoKSwgKHZvaWQgKikwKTsgLy8g
dGhlIHJldHVybiB2YWx1ZQotCi0gICAgICAgIGJvb2wgY29udmVydGVkID0gdHJ1ZTsKLSAgICAg
ICAgaW50IG1hdGNoRGlzdGFuY2UgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBj
b252ZXJ0ZWQgJiYgaSArIDEgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZXMuY291bnQoKSk7
ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSBhcmcgPSBpIDwgZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID8gZXhlYy0+YXJndW1lbnQoaSkgOiBqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICBp
bnQgYXJnZGlzdGFuY2UgPSAtMTsKLSAgICAgICAgICAgIFFWYXJpYW50IHYgPSBjb252ZXJ0VmFs
dWVUb1FWYXJpYW50KGV4ZWMsIGFyZywgdHlwZXMuYXQoaSsxKS50eXBlSWQoKSwgJmFyZ2Rpc3Rh
bmNlKTsKLSAgICAgICAgICAgIGlmIChhcmdkaXN0YW5jZSA+PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgbWF0Y2hEaXN0YW5jZSArPSBhcmdkaXN0YW5jZTsKLSAgICAgICAgICAgICAgICBhcmdzW2kr
MV0gPSB2OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBxTWF0Y2hEZWJ1
ZygpIDw8ICJmYWlsZWQgdG8gY29udmVydCBhcmd1bWVudCAiIDw8IGkgPDwgInR5cGUiIDw8IHR5
cGVzLmF0KGkrMSkudHlwZUlkKCkgPDwgUU1ldGFUeXBlOjp0eXBlTmFtZSh0eXBlcy5hdChpKzEp
LnR5cGVJZCgpKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHFNYXRjaERlYnVnKCkgPDwgIk1hdGNoOiAiIDw8
IG1ldGhvZC5zaWduYXR1cmUoKSA8PCAoY29udmVydGVkID8gImNvbnZlcnRlZCI6ImZhaWxlZCB0
byBjb252ZXJ0IikgPDwgImRpc3RhbmNlICIgPDwgbWF0Y2hEaXN0YW5jZTsKLQotICAgICAgICBp
ZiAoY29udmVydGVkKSB7Ci0gICAgICAgICAgICBpZiAoKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAr
IDEgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGVzLmNvdW50KCkpKQotICAgICAgICAgICAg
ICAgICYmIChtYXRjaERpc3RhbmNlID09IDApKSB7Ci0gICAgICAgICAgICAgICAgLy8gcGVyZmVj
dCBtYXRjaCwgdXNlIHRoaXMgb25lCi0gICAgICAgICAgICAgICAgY2hvc2VuSW5kZXggPSBpbmRl
eDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgUXRNZXRob2RNYXRjaERhdGEgY3VycmVudE1hdGNoKG1hdGNoRGlzdGFuY2UsIGlu
ZGV4LCB0eXBlcywgYXJncyk7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGN1cnJlbnRNYXRj
aCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUXRNZXRo
b2RNYXRjaERhdGEgYmVzdE1hdGNoU29GYXIgPSBjYW5kaWRhdGVzLmF0KDApOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoKGFyZ3MuY291bnQoKSA+IGJlc3RNYXRjaFNvRmFyLmFyZ3MuY291bnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoYXJncy5jb3VudCgpID09IGJlc3RNYXRj
aFNvRmFyLmFyZ3MuY291bnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobWF0
Y2hEaXN0YW5jZSA8PSBiZXN0TWF0Y2hTb0Zhci5tYXRjaERpc3RhbmNlKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHJlcGVuZChjdXJyZW50TWF0Y2gpOwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRl
cy5hcHBlbmQoY3VycmVudE1hdGNoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNv
bnZlcnNpb25GYWlsZWQuYXBwZW5kKGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
b3ZlcmxvYWRzKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGNob3Nlbklu
ZGV4ID09IC0xICYmIGNhbmRpZGF0ZXMuY291bnQoKSA9PSAwKSB7Ci0gICAgICAgIC8vIE5vIHZh
bGlkIGZ1bmN0aW9ucyBhdCBhbGwgLSBmb3JtYXQgYW4gZXJyb3IgbWVzc2FnZQotICAgICAgICBp
ZiAoIWNvbnZlcnNpb25GYWlsZWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBRU3RyaW5nIG1l
c3NhZ2UgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJpbmNvbXBhdGlibGUgdHlwZSBvZiBhcmd1bWVu
dChzKSBpbiBjYWxsIHRvICUwKCk7IGNhbmRpZGF0ZXMgd2VyZVxuIikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhzaWduYXR1cmUpKTsKLSAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29udmVyc2lvbkZhaWxlZC5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSAr
PSBRTGF0aW4xU3RyaW5nKCJcbiIpOwotICAgICAgICAgICAgICAgIFFNZXRhTWV0aG9kIG10ZCA9
IG1ldGEtPm1ldGhvZChjb252ZXJzaW9uRmFpbGVkLmF0KGkpKTsKLSAgICAgICAgICAgICAgICBt
ZXNzYWdlICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIiAgICAlMCIpLmFyZyhRU3RyaW5nOjpmcm9t
TGF0aW4xKG10ZC5zaWduYXR1cmUoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKnBF
cnJvciA9IHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UudG9M
YXRpbjEoKS5jb25zdERhdGEoKSkpOwotICAgICAgICB9IGVsc2UgaWYgKCF1bnJlc29sdmVkLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgUXRNZXRob2RNYXRjaERhdGEgYXJnc0luc3RhbmNlID0g
dW5yZXNvbHZlZC5maXJzdCgpOwotICAgICAgICAgICAgaW50IHVucmVzb2x2ZWRJbmRleCA9IGFy
Z3NJbnN0YW5jZS5maXJzdFVucmVzb2x2ZWRJbmRleCgpOwotICAgICAgICAgICAgUV9BU1NFUlQo
dW5yZXNvbHZlZEluZGV4ICE9IC0xKTsKLSAgICAgICAgICAgIFF0TWV0aG9kTWF0Y2hUeXBlIHVu
cmVzb2x2ZWRUeXBlID0gYXJnc0luc3RhbmNlLnR5cGVzLmF0KHVucmVzb2x2ZWRJbmRleCk7Ci0g
ICAgICAgICAgICBRU3RyaW5nIG1lc3NhZ2UgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJjYW5ub3Qg
Y2FsbCAlMCgpOiB1bmtub3duIHR5cGUgYCUxJyIpCi0gICAgICAgICAgICAgICAgLmFyZyhRU3Ry
aW5nOjpmcm9tTGF0aW4xKHNpZ25hdHVyZSkpCi0gICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4x
U3RyaW5nKHVucmVzb2x2ZWRUeXBlLm5hbWUoKSkpOwotICAgICAgICAgICAgKnBFcnJvciA9IHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UudG9MYXRpbjEoKS5j
b25zdERhdGEoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUVN0cmluZyBtZXNz
YWdlID0gUVN0cmluZzo6ZnJvbUxhdGluMSgidG9vIGZldyBhcmd1bWVudHMgaW4gY2FsbCB0byAl
MCgpOyBjYW5kaWRhdGVzIGFyZVxuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5h
cmcoUUxhdGluMVN0cmluZyhzaWduYXR1cmUpKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdG9vRmV3QXJncy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChpID4g
MCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRTGF0aW4xU3RyaW5nKCJcbiIpOwot
ICAgICAgICAgICAgICAgIFFNZXRhTWV0aG9kIG10ZCA9IG1ldGEtPm1ldGhvZCh0b29GZXdBcmdz
LmF0KGkpKTsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFFTdHJpbmc6OmZyb21MYXRpbjEo
IiAgICAlMCIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKG10ZC5zaWduYXR1cmUoKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgKnBFcnJvciA9IHRocm93RXJyb3IoZXhlYywgY3JlYXRl
U3ludGF4RXJyb3IoZXhlYywgbWVzc2FnZS50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY2hvc2VuSW5kZXggPT0gLTEgJiYgY2FuZGlkYXRlcy5j
b3VudCgpID4gMCkgewotICAgICAgICBRdE1ldGhvZE1hdGNoRGF0YSBiZXN0TWF0Y2ggPSBjYW5k
aWRhdGVzLmF0KDApOwotICAgICAgICBpZiAoKGNhbmRpZGF0ZXMuc2l6ZSgpID4gMSkKLSAgICAg
ICAgICAgICYmIChiZXN0TWF0Y2guYXJncy5jb3VudCgpID09IGNhbmRpZGF0ZXMuYXQoMSkuYXJn
cy5jb3VudCgpKQotICAgICAgICAgICAgJiYgKGJlc3RNYXRjaC5tYXRjaERpc3RhbmNlID09IGNh
bmRpZGF0ZXMuYXQoMSkubWF0Y2hEaXN0YW5jZSkpIHsKLSAgICAgICAgICAgIC8vIGFtYmlndW91
cyBjYWxsCi0gICAgICAgICAgICBRU3RyaW5nIG1lc3NhZ2UgPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJhbWJpZ3VvdXMgY2FsbCBvZiBvdmVybG9hZGVkIGZ1bmN0aW9uICUwKCk7IGNhbmRpZGF0ZXMg
d2VyZVxuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3Ry
aW5nKHNpZ25hdHVyZSkpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYW5kaWRh
dGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgLy8gT25seSBjYW5kaWRhdGUgZm9y
IG92ZXJsb2FkIGlmIGFyZ3VtZW50IGNvdW50IGFuZCBtYXRjaCBkaXN0YW5jZSBpcyBzYW1lIGFz
IGJlc3QgbWF0Y2gKLSAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlcy5hdChpKS5hcmdzLmNv
dW50KCkgPT0gYmVzdE1hdGNoLmFyZ3MuY291bnQoKQotICAgICAgICAgICAgICAgICAgICB8fCBj
YW5kaWRhdGVzLmF0KGkpLm1hdGNoRGlzdGFuY2UgPT0gYmVzdE1hdGNoLm1hdGNoRGlzdGFuY2Up
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZSArPSBRTGF0aW4xU3RyaW5nKCJcbiIpOwotICAgICAgICAgICAgICAgICAgICBR
TWV0YU1ldGhvZCBtdGQgPSBtZXRhLT5tZXRob2QoY2FuZGlkYXRlcy5hdChpKS5pbmRleCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiICAgICUw
IikuYXJnKFFTdHJpbmc6OmZyb21MYXRpbjEobXRkLnNpZ25hdHVyZSgpKSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKnBFcnJvciA9IHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UudG9MYXRpbjEoKS5jb25zdERhdGEo
KSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2hvc2VuSW5kZXggPSBiZXN0TWF0
Y2guaW5kZXg7Ci0gICAgICAgICAgICBhcmdzID0gYmVzdE1hdGNoLmFyZ3M7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoY2hvc2VuSW5kZXggIT0gLTEpIHsKLSAgICAgICAgLyogQ29weSB0
aGUgc3R1ZmYgb3ZlciAqLwotICAgICAgICBpbnQgaTsKLSAgICAgICAgdmFycy5yZXNpemUoYXJn
cy5jb3VudCgpKTsKLSAgICAgICAgZm9yIChpPTA7IGkgPCBhcmdzLmNvdW50KCk7IGkrKykgewot
ICAgICAgICAgICAgdmFyc1tpXSA9IGFyZ3NbaV07Ci0gICAgICAgICAgICB2dmFyc1tpXSA9IHZh
cnNbaV0uZGF0YSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGNob3NlbkluZGV4
OwotfQotCi0vLyBTaWduYWxzIGFyZSBub3QgZnV6enkgbWF0Y2hlZCBhcyBtdWNoIGFzIG1ldGhv
ZHMKLXN0YXRpYyBpbnQgZmluZFNpZ25hbEluZGV4KGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhLCBp
bnQgaW5pdGlhbEluZGV4LCBRQnl0ZUFycmF5IHNpZ25hdHVyZSkKLXsKLSAgICBpbnQgaW5kZXgg
PSBpbml0aWFsSW5kZXg7Ci0gICAgUU1ldGFNZXRob2QgbWV0aG9kID0gbWV0YS0+bWV0aG9kKGlu
ZGV4KTsKLSAgICBib29sIG92ZXJsb2FkcyA9ICFzaWduYXR1cmUuY29udGFpbnMoJygnKTsKLSAg
ICBpZiAob3ZlcmxvYWRzICYmIChtZXRob2QuYXR0cmlidXRlcygpICYgUU1ldGFNZXRob2Q6OkNs
b25lZCkpIHsKLSAgICAgICAgLy8gZmluZCB0aGUgbW9zdCBnZW5lcmFsIG1ldGhvZAotICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICBtZXRob2QgPSBtZXRhLT5tZXRob2QoLS1pbmRleCk7Ci0gICAg
ICAgIH0gd2hpbGUgKG1ldGhvZC5hdHRyaWJ1dGVzKCkgJiBRTWV0YU1ldGhvZDo6Q2xvbmVkKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwotfQotCi1jb25zdCBDbGFzc0luZm8gUXRSdW50aW1l
TWV0YU1ldGhvZDo6c19pbmZvID0geyAiUXRSdW50aW1lTWV0aG9kIiwgJkJhc2U6OnNfaW5mbywg
MCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShRdFJ1bnRpbWVNZXRhTWV0aG9kKSB9OwotCi1RdFJ1
bnRpbWVNZXRhTWV0aG9kOjpRdFJ1bnRpbWVNZXRhTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIGlkZW50aWZpZXIpCi0gICAgOiBRdFJ1
bnRpbWVNZXRob2QgKG5ldyBRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSgpLCBleGVjLCBzdHJ1Y3R1
cmUsIGlkZW50aWZpZXIpCi17Ci19Ci0KLXZvaWQgUXRSdW50aW1lTWV0YU1ldGhvZDo6ZmluaXNo
Q3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNz
UmVmUHRyPFF0SW5zdGFuY2U+IGluc3RhbmNlLCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkm
IHNpZ25hdHVyZSwgYm9vbCBhbGxvd1ByaXZhdGUpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZXhlYywgaWRlbnRpZmllciwgaW5zdGFuY2UpOwotICAgIFFXX0QoUXRSdW50aW1lTWV0YU1l
dGhvZCk7Ci0gICAgZC0+bV9zaWduYXR1cmUgPSBzaWduYXR1cmU7Ci0gICAgZC0+bV9pbmRleCA9
IGluZGV4OwotICAgIGQtPm1fYWxsb3dQcml2YXRlID0gYWxsb3dQcml2YXRlOwotfQotCi12b2lk
IFF0UnVudGltZU1ldGFNZXRob2Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlzT2JqZWN0ID0g
anNDYXN0PFF0UnVudGltZU1ldGFNZXRob2QqPihjZWxsKTsKLSAgICBRdFJ1bnRpbWVNZXRob2Q6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgUXRSdW50aW1lTWV0YU1l
dGhvZERhdGEqIGQgPSB0aGlzT2JqZWN0LT5kX2Z1bmMoKTsKLSAgICBpZiAoZC0+bV9jb25uZWN0
KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZC0+bV9jb25uZWN0KTsKLSAgICBpZiAoZC0+bV9k
aXNjb25uZWN0KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZC0+bV9kaXNjb25uZWN0KTsKLX0K
LQotRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbChFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZERhdGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1
bnRpbWVNZXRhTWV0aG9kICo+KGV4ZWMtPmNhbGxlZSgpKS0+ZF9mdW5jKCk7Ci0KLSAgICAvLyBX
ZSdyZSBsaW1pdGVkIHRvIDEwIGFyZ3MKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4g
MTApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAg
ICAvLyBXZSBoYXZlIHRvIHBpY2sgYSBtZXRob2QgdGhhdCBtYXRjaGVzLi4KLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKLQotICAgIFFPYmplY3QgKm9iaiA9IGQtPm1faW5zdGFuY2UtPmdl
dE9iamVjdCgpOwotICAgIGlmIChvYmopIHsKLSAgICAgICAgUVZhckxlbmd0aEFycmF5PFFWYXJp
YW50LCAxMD4gdmFyZ3M7Ci0gICAgICAgIHZvaWQgKnFhcmdzWzExXTsKLQotICAgICAgICBpbnQg
bWV0aG9kSW5kZXg7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvck9iaiA9IDA7Ci0gICAgICAgIGlm
ICgobWV0aG9kSW5kZXggPSBmaW5kTWV0aG9kSW5kZXgoZXhlYywgb2JqLT5tZXRhT2JqZWN0KCks
IGQtPm1fc2lnbmF0dXJlLCBkLT5tX2FsbG93UHJpdmF0ZSwgdmFyZ3MsICh2b2lkICoqKXFhcmdz
LCAmZXJyb3JPYmopKSAhPSAtMSkgewotICAgICAgICAgICAgaWYgKFFNZXRhT2JqZWN0OjptZXRh
Y2FsbChvYmosIFFNZXRhT2JqZWN0OjpJbnZva2VNZXRhTWV0aG9kLCBtZXRob2RJbmRleCwgcWFy
Z3MpID49IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLQotICAgICAgICAgICAgaWYgKHZhcmdzWzBdLmlzVmFsaWQoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoZXhl
YywgZC0+bV9pbnN0YW5jZS0+cm9vdE9iamVjdCgpLCB2YXJnc1swXSkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGVycm9yT2JqKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShlcnJvck9iaik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVFcnJvcihleGVjLCAiY2Fubm90IGNhbGwgZnVuY3Rpb24gb2YgZGVsZXRlZCBR
T2JqZWN0IikpOwotICAgIH0KLQotICAgIC8vIHZvaWQgZnVuY3Rpb25zIHJldHVybiB1bmRlZmlu
ZWQKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1DYWxs
VHlwZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYg
Y2FsbERhdGEpCi17Ci0gICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbDsKLSAgICBy
ZXR1cm4gQ2FsbFR5cGVIb3N0OwotfQotCi1ib29sIFF0UnVudGltZU1ldGFNZXRob2Q6OmdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFF0UnVudGltZU1ldGFN
ZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhvZCo+KGNlbGwpOwot
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gSWRlbnRpZmllcihleGVjLCAiY29ubmVjdCIpKSB7Ci0g
ICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmNvbm5lY3RHZXR0
ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBJZGVudGlmaWVyKGV4ZWMsICJkaXNjb25uZWN0IikpIHsKLSAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+ZGlzY29ubmVjdEdldHRlcik7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhp
c09iamVjdC0+bGVuZ3RoR2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFF0UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLWJvb2wgUXRSdW50aW1lTWV0YU1ldGhv
ZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQotewotICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
UXRSdW50aW1lTWV0YU1ldGhvZCo+KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBJ
ZGVudGlmaWVyKGV4ZWMsICJjb25uZWN0IikpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7
Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNvbm5lY3RHZXR0ZXIpOwotICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gSWRlbnRpZmllcihleGVj
LCAiZGlzY29ubmVjdCIpKSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBkaXNjb25uZWN0R2V0dGVyKTsKLSAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXNPYmplY3QsIGxlbmd0aEdldHRlcik7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVz
Y3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIERvbnREZWxldGUgfCBS
ZWFkT25seSB8IERvbnRFbnVtKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIFF0UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KLXZvaWQgUXRSdW50aW1l
TWV0YU1ldGhvZDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKLXsKLSAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSB7
Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgImNvbm5lY3QiKSk7
Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgImRpc2Nvbm5lY3Qi
KSk7Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpOwotICAgIH0KLQotICAgIFF0UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotfQotCi1KU1ZhbHVlIFF0UnVudGlt
ZU1ldGFNZXRob2Q6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCi17Ci0gICAgLy8gUXRTY3JpcHQgYWx3YXlzIHJldHVybnMgMAotICAgIHJldHVybiBqc051
bWJlcigwKTsKLX0KLQotSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjb25uZWN0R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgUHJvcGVydHlOYW1lIGlkZW50KQot
ewotICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxRdFJ1bnRp
bWVNZXRhTWV0aG9kKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBRV19EUyhRdFJ1bnRpbWVN
ZXRhTWV0aG9kLCB0aGlzT2JqKTsKLQotICAgIGlmICghZC0+bV9jb25uZWN0KQotICAgICAgICBk
LT5tX2Nvbm5lY3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iaiwgUXRSdW50aW1lQ29u
bmVjdGlvbk1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGlkZW50LnB1YmxpY05hbWUoKSwgdHJ1ZSwgZC0+
bV9pbnN0YW5jZSwgZC0+bV9pbmRleCwgZC0+bV9zaWduYXR1cmUpKTsKLSAgICByZXR1cm4gZC0+
bV9jb25uZWN0LmdldCgpOwotfQotCi1KU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmRpc2Nv
bm5lY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBQcm9wZXJ0eU5h
bWUgaWRlbnQpCi17Ci0gICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdGhpc09iaiA9IHN0YXRpY19j
YXN0PFF0UnVudGltZU1ldGFNZXRob2QqPihhc09iamVjdChzbG90QmFzZSkpOwotICAgIFFXX0RT
KFF0UnVudGltZU1ldGFNZXRob2QsIHRoaXNPYmopOwotCi0gICAgaWYgKCFkLT5tX2Rpc2Nvbm5l
Y3QpCi0gICAgICAgIGQtPm1fZGlzY29ubmVjdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
T2JqLCBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjcmVhdGUoZXhlYywgaWRlbnQucHVibGlj
TmFtZSgpLCBmYWxzZSwgZC0+bV9pbnN0YW5jZSwgZC0+bV9pbmRleCwgZC0+bV9zaWduYXR1cmUp
KTsKLSAgICByZXR1cm4gZC0+bV9kaXNjb25uZWN0LmdldCgpOwotfQotCi0vLyA9PT09PT09PT09
PT09PT0KLQotUU11bHRpTWFwPFFPYmplY3QqLCBRdENvbm5lY3Rpb25PYmplY3QqPiBRdFJ1bnRp
bWVDb25uZWN0aW9uTWV0aG9kOjpjb25uZWN0aW9uczsKLQotY29uc3QgQ2xhc3NJbmZvIFF0UnVu
dGltZUNvbm5lY3Rpb25NZXRob2Q6OnNfaW5mbyA9IHsgIlF0UnVudGltZU1ldGhvZCIsICZCYXNl
OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUXRSdW50aW1lQ29ubmVjdGlvbk1l
dGhvZCkgfTsKLQotUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6UXRSdW50aW1lQ29ubmVjdGlv
bk1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3Ry
aW5nJiBpZGVudGlmaWVyKQotICAgIDogUXRSdW50aW1lTWV0aG9kIChuZXcgUXRSdW50aW1lQ29u
bmVjdGlvbk1ldGhvZERhdGEoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudGlmaWVyKQotewotfQot
Ci12b2lkIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgVVN0cmluZyYgaWRlbnRpZmllciwgYm9vbCBpc0Nvbm5lY3QsIFBhc3NS
ZWZQdHI8UXRJbnN0YW5jZT4gaW5zdGFuY2UsIGludCBpbmRleCwgY29uc3QgUUJ5dGVBcnJheSYg
c2lnbmF0dXJlKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMsIGlkZW50aWZpZXIs
IGluc3RhbmNlKTsKLSAgICBRV19EKFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QpOwotCi0gICAg
ZC0+bV9zaWduYXR1cmUgPSBzaWduYXR1cmU7Ci0gICAgZC0+bV9pbmRleCA9IGluZGV4OwotICAg
IGQtPm1faXNDb25uZWN0ID0gaXNDb25uZWN0OwotfQotCi1FbmNvZGVkSlNWYWx1ZSBRdFJ1bnRp
bWVDb25uZWN0aW9uTWV0aG9kOjpjYWxsKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBRdFJ1bnRp
bWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZCA9IHN0YXRpY19jYXN0PFF0UnVudGltZUNvbm5lY3Rp
b25NZXRob2QgKj4oZXhlYy0+Y2FsbGVlKCkpLT5kX2Z1bmMoKTsKLQotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwotCi0gICAgUU9iamVjdCogc2VuZGVyID0gZC0+bV9pbnN0YW5jZS0+Z2V0
T2JqZWN0KCk7Ci0KLSAgICBpZiAoc2VuZGVyKSB7Ci0KLSAgICAgICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm1ldGhvZFRhYmxlKCktPnRvVGhp
c09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMpOwotICAgICAgICBKU09i
amVjdCogZnVuY09iamVjdCA9IDA7Ci0KLSAgICAgICAgLy8gUXRTY3JpcHQgY2hlY2tzIHNpZ25h
bG5lc3MgZmlyc3QsIGFyZ3VtZW50cyBzZWNvbmQKLSAgICAgICAgaW50IHNpZ25hbEluZGV4ID0g
LTE7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbml0aWFsIGluZGV4IGlzIGEgc2lnbmFs
Ci0gICAgICAgIFFNZXRhTWV0aG9kIG0gPSBzZW5kZXItPm1ldGFPYmplY3QoKS0+bWV0aG9kKGQt
Pm1faW5kZXgpOwotICAgICAgICBpZiAobS5tZXRob2RUeXBlKCkgPT0gUU1ldGFNZXRob2Q6OlNp
Z25hbCkKLSAgICAgICAgICAgIHNpZ25hbEluZGV4ID0gZmluZFNpZ25hbEluZGV4KHNlbmRlci0+
bWV0YU9iamVjdCgpLCBkLT5tX2luZGV4LCBkLT5tX3NpZ25hdHVyZSk7Ci0KLSAgICAgICAgaWYg
KHNpZ25hbEluZGV4ICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID09IDEpIHsKLSAgICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gZXhlYy0+YXJndW1lbnQo
MCkudG9PYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0g
ICAgICAgICAgICAgICAgaWYgKGZ1bmNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRh
KGZ1bmNPYmplY3QsIGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGQtPm1faXNDb25uZWN0KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5j
b25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGFyZ2V0IGlz
IG5vdCBhIGZ1bmN0aW9uIikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICB0aGlz
T2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gR2V0IHRoZSBhY3R1YWwgZnVuY3Rpb24gdG8gY2FsbAotICAgICAgICAgICAg
ICAgICAgICBKU09iamVjdCAqYXNPYmogPSBleGVjLT5hcmd1bWVudCgxKS50b09iamVjdChleGVj
KTsKLSAgICAgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhc09iai0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoYXNPYmosIGNhbGxE
YXRhKSAhPSBDYWxsVHlwZU5vbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZ1bmN0
aW9uIHZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNPYmplY3QgPSBhc09iajsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IENvbnZlcnQgaXQgdG8gYSBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcg
ZnVuY05hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGZ1bmNJZGVudChleGVjLCBmdW5j
TmFtZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICMjIyBEcm9wQWxsTG9ja3MKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVzb2x2ZWQgYXQgdGhpcyBwb2ludCBp
biBRdFNjcmlwdAotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSB0aGlzT2Jq
ZWN0LT5nZXQoZXhlYywgZnVuY0lkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBhc0Z1bmNPYmogPSB2YWwudG9PYmplY3QoZXhlYyk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhc0Z1bmNPYmotPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGFzRnVuY09i
aiwgY2FsbERhdGEpICE9IENhbGxUeXBlTm9uZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmNPYmplY3QgPSBhc0Z1bmNPYmo7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5jb25uZWN0OiB0YXJnZXQgaXMgbm90
IGEgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRhcmdldCBpcyBub3Qg
YSBmdW5jdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChkLT5tX2lzQ29ubmVjdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuY29ubmVjdDog
dGhpc09iamVjdCBpcyBub3QgYW4gb2JqZWN0IikpOwotICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRoaXNPYmplY3QgaXMg
bm90IGFuIG9iamVjdCIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCAiUXRNZXRhTWV0
aG9kLmNvbm5lY3Q6IG5vIGFyZ3VtZW50cyBnaXZlbiIpKTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlRXJy
b3IoZXhlYywgIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBubyBhcmd1bWVudHMgZ2l2ZW4iKSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkgewotICAg
ICAgICAgICAgICAgIC8vIHRvIGNvbm5lY3QsIHdlIG5lZWQ6Ci0gICAgICAgICAgICAgICAgLy8g
IHRhcmdldCBvYmplY3QgW2Zyb20gY3Rvcl0KLSAgICAgICAgICAgICAgICAvLyAgdGFyZ2V0IHNp
Z25hbCBpbmRleCBldGMuIFtmcm9tIGN0b3JdCi0gICAgICAgICAgICAgICAgLy8gIHJlY2VpdmVy
IGZ1bmN0aW9uIFtmcm9tIGFyZ3VtZW50c10KLSAgICAgICAgICAgICAgICAvLyAgcmVjZWl2ZXIg
dGhpcyBvYmplY3QgW2Zyb20gYXJndW1lbnRzXQotCi0gICAgICAgICAgICAgICAgUXRDb25uZWN0
aW9uT2JqZWN0KiBjb25uID0gUXRDb25uZWN0aW9uT2JqZWN0OjpjcmVhdGVXaXRoSW50ZXJuYWxK
U0MoZXhlYywgZC0+bV9pbnN0YW5jZSwgc2lnbmFsSW5kZXgsIHRoaXNPYmplY3QsIGZ1bmNPYmpl
Y3QpOwotICAgICAgICAgICAgICAgIGJvb2wgb2sgPSBRTWV0YU9iamVjdDo6Y29ubmVjdChzZW5k
ZXIsIHNpZ25hbEluZGV4LCBjb25uLCBjb25uLT5tZXRhT2JqZWN0KCktPm1ldGhvZE9mZnNldCgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBjb25uOwotICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIG1zZyA9IFFTdHJpbmcoUUxhdGlu
MVN0cmluZygiUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IGZhaWxlZCB0byBjb25uZWN0IHRvICUxOjol
MigpIikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHNl
bmRlci0+bWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1fc2lnbmF0dXJlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgbXNnLnRv
TGF0aW4xKCkuY29uc3REYXRhKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIGNvbm5lY3Rpb24KLSAgICAg
ICAgICAgICAgICAgICAgY29ubmVjdGlvbnMuaW5zZXJ0KHNlbmRlciwgY29ubik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBOb3cg
dG8gZmluZCBvdXIgcHJldmlvdXMgY29ubmVjdGlvbiBvYmplY3QuIEhtbS4KLSAgICAgICAgICAg
ICAgICBRTGlzdDxRdENvbm5lY3Rpb25PYmplY3QqPiBjb25ucyA9IGNvbm5lY3Rpb25zLnZhbHVl
cyhzZW5kZXIpOwotICAgICAgICAgICAgICAgIGJvb2wgcmV0ID0gZmFsc2U7Ci0KLSAgICAgICAg
ICAgICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYoZXhlYyk7Ci0gICAgICAgICAg
ICAgICAgSlNPYmplY3RSZWYgcmVjZWl2ZXIgPSA6OnRvUmVmKHRoaXNPYmplY3QpOwotICAgICAg
ICAgICAgICAgIEpTT2JqZWN0UmVmIHJlY2VpdmVyRnVuY3Rpb24gPSA6OnRvUmVmKGZ1bmNPYmpl
Y3QpOwotCi0gICAgICAgICAgICAgICAgZm9yZWFjaChRdENvbm5lY3Rpb25PYmplY3QqIGNvbm4s
IGNvbm5zKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElzIHRoaXMgdGhlIHJpZ2h0IGNvbm5l
Y3Rpb24/Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb25uLT5tYXRjaChjb250ZXh0LCBzZW5k
ZXIsIHNpZ25hbEluZGV4LCByZWNlaXZlciwgcmVjZWl2ZXJGdW5jdGlvbikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFllcCwgZGlzY29ubmVjdCBpdAotICAgICAgICAgICAgICAgICAg
ICAgICAgUU1ldGFPYmplY3Q6OmRpc2Nvbm5lY3Qoc2VuZGVyLCBzaWduYWxJbmRleCwgY29ubiwg
Y29ubi0+bWV0YU9iamVjdCgpLT5tZXRob2RPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgY29ubjsgLy8gdGhpcyB3aWxsIGFsc28gcmVtb3ZlIGl0IGZyb20gdGhlIG1h
cAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgUVN0cmlu
ZyBtc2cgPSBRU3RyaW5nKFFMYXRpbjFTdHJpbmcoIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBm
YWlsZWQgdG8gZGlzY29ubmVjdCBmcm9tICUxOjolMigpIikpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHNlbmRlci0+bWV0YU9iamVjdCgpLT5jbGFzc05h
bWUoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQt
Pm1fc2lnbmF0dXJlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgbXNnLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBRU3RyaW5nIG1zZyA9IFFTdHJpbmcoUUxhdGluMVN0cmluZygiUXRNZXRhTWV0aG9kLiUx
OiAlMjo6JTMoKSBpcyBub3QgYSBzaWduYWwiKSkKLSAgICAgICAgICAgICAgICAgICAgLmFyZyhR
TGF0aW4xU3RyaW5nKGQtPm1faXNDb25uZWN0ID8gImNvbm5lY3QiOiAiZGlzY29ubmVjdCIpKQot
ICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoc2VuZGVyLT5tZXRhT2JqZWN0
KCktPmNsYXNzTmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5n
KGQtPm1fc2lnbmF0dXJlKSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtc2cudG9MYXRpbjEoKS5jb25zdERhdGEoKSkpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVFcnJvcihleGVjLCAiY2Fubm90IGNhbGwgZnVuY3Rpb24gb2YgZGVsZXRlZCBRT2JqZWN0
IikpOwotICAgIH0KLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci19Ci0KLUNhbGxUeXBlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldENhbGxEYXRhKEpT
Q2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKLXsKLSAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rp
b24gPSBjYWxsOwotICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7Ci19Ci0KLWJvb2wgUXRSdW50aW1l
Q29ubmVjdGlvbk1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCogdGhpc09iamVjdCA9IGpzQ2FzdDxR
dFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKj4oY2VsbCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9t
KHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmxlbmd0aEdldHRlcik7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBRdFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5
U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1ib29sIFF0
UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBRdFJ1bnRpbWVDb25uZWN0aW9u
TWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QqPihv
YmplY3QpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5zZXRDdXN0
b20odGhpc09iamVjdCwgbGVuZ3RoR2V0dGVyKTsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgRG9udEVudW0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gUXRSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLX0KLQotdm9pZCBRdFJ1bnRpbWVD
b25uZWN0aW9uTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQotewotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpOwotCi0gICAgUXRSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLUpTVmFsdWUgUXRSdW50aW1lQ29ubmVj
dGlvbk1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFt
ZSkKLXsKLSAgICAvLyB3ZSBoYXZlIG9uZSBmb3JtYWwgYXJndW1lbnQsIGFuZCBvbmUgb3B0aW9u
YWwKLSAgICByZXR1cm4ganNOdW1iZXIoMSk7Ci19Ci0KLS8vID09PT09PT09PT09PT09PQotCi1R
dENvbm5lY3Rpb25PYmplY3Q6OlF0Q29ubmVjdGlvbk9iamVjdChKU0NvbnRleHRSZWYgY29udGV4
dCwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBzZW5kZXJJbnN0YW5jZSwgaW50IHNpZ25hbEluZGV4
LCBKU09iamVjdFJlZiByZWNlaXZlciwgSlNPYmplY3RSZWYgcmVjZWl2ZXJGdW5jdGlvbikKLSAg
ICA6IFFPYmplY3Qoc2VuZGVySW5zdGFuY2UtPmdldE9iamVjdCgpKQotICAgICwgbV9jb250ZXh0
KEpTQ29udGV4dEdldEdsb2JhbENvbnRleHQoY29udGV4dCkpCi0gICAgLCBtX3NlbmRlckluc3Rh
bmNlKHNlbmRlckluc3RhbmNlKQotICAgICwgbV9vcmlnaW5hbFNlbmRlcihtX3NlbmRlckluc3Rh
bmNlLT5nZXRPYmplY3QoKSkKLSAgICAsIG1fc2lnbmFsSW5kZXgoc2lnbmFsSW5kZXgpCi0gICAg
LCBtX3JlY2VpdmVyKHJlY2VpdmVyKQotICAgICwgbV9yZWNlaXZlckZ1bmN0aW9uKHJlY2VpdmVy
RnVuY3Rpb24pCi17Ci0gICAgSlNWYWx1ZVByb3RlY3QobV9jb250ZXh0LCBtX3JlY2VpdmVyKTsK
LSAgICBKU1ZhbHVlUHJvdGVjdChtX2NvbnRleHQsIG1fcmVjZWl2ZXJGdW5jdGlvbik7Ci19Ci0K
LVF0Q29ubmVjdGlvbk9iamVjdDo6flF0Q29ubmVjdGlvbk9iamVjdCgpCi17Ci0gICAgLy8gV2Ug
Y2FuIHNhZmVseSB1c2UgbV9vcmlnaW5hbFNlbmRlciBiZWNhdXNlIGNvbm5lY3Rpb24gb2JqZWN0
IHdpbGwgbmV2ZXIgb3V0bGl2ZSB0aGUgc2VuZGVyLAotICAgIC8vIHdoaWNoIGlzIGl0cyBRT2Jq
ZWN0IHBhcmVudC4KLSAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjb25uZWN0aW9ucy5y
ZW1vdmUobV9vcmlnaW5hbFNlbmRlciwgdGhpcyk7Ci0KLSAgICBKU1ZhbHVlVW5wcm90ZWN0KG1f
Y29udGV4dCwgbV9yZWNlaXZlcik7Ci0gICAgSlNWYWx1ZVVucHJvdGVjdChtX2NvbnRleHQsIG1f
cmVjZWl2ZXJGdW5jdGlvbik7Ci19Ci0KLXN0YXRpYyBjb25zdCB1aW50IHF0X21ldGFfZGF0YV9R
dENvbm5lY3Rpb25PYmplY3RbXSA9IHsKLQotIC8vIGNvbnRlbnQ6Ci0gICAgICAgMSwgICAgICAg
Ly8gcmV2aXNpb24KLSAgICAgICAwLCAgICAgICAvLyBjbGFzc25hbWUKLSAgICAgICAwLCAgICAw
LCAvLyBjbGFzc2luZm8KLSAgICAgICAxLCAgIDEwLCAvLyBtZXRob2RzCi0gICAgICAgMCwgICAg
MCwgLy8gcHJvcGVydGllcwotICAgICAgIDAsICAgIDAsIC8vIGVudW1zL3NldHMKLQotIC8vIHNs
b3RzOiBzaWduYXR1cmUsIHBhcmFtZXRlcnMsIHR5cGUsIHRhZywgZmxhZ3MKLSAgICAgIDI4LCAg
IDI3LCAgIDI3LCAgIDI3LCAweDBhLAotCi0gICAgICAgMCAgICAgICAgLy8gZW9kCi19OwotCi1z
dGF0aWMgY29uc3QgY2hhciBxdF9tZXRhX3N0cmluZ2RhdGFfUXRDb25uZWN0aW9uT2JqZWN0W10g
PSB7Ci0gICAgIkpTQzo6QmluZGluZ3M6OlF0Q29ubmVjdGlvbk9iamVjdFwwXDBleGVjdXRlKClc
MCIKLX07Ci0KLWNvbnN0IFFNZXRhT2JqZWN0IFF0Q29ubmVjdGlvbk9iamVjdDo6c3RhdGljTWV0
YU9iamVjdCA9IHsKLSAgICB7ICZRT2JqZWN0OjpzdGF0aWNNZXRhT2JqZWN0LCBxdF9tZXRhX3N0
cmluZ2RhdGFfUXRDb25uZWN0aW9uT2JqZWN0LAotICAgICAgcXRfbWV0YV9kYXRhX1F0Q29ubmVj
dGlvbk9iamVjdCwgMCB9Ci19OwotCi1jb25zdCBRTWV0YU9iamVjdCAqUXRDb25uZWN0aW9uT2Jq
ZWN0OjptZXRhT2JqZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gJnN0YXRpY01ldGFPYmplY3Q7
Ci19Ci0KLXZvaWQgKlF0Q29ubmVjdGlvbk9iamVjdDo6cXRfbWV0YWNhc3QoY29uc3QgY2hhciAq
X2NsbmFtZSkKLXsKLSAgICBpZiAoIV9jbG5hbWUpIHJldHVybiAwOwotICAgIGlmICghc3RyY21w
KF9jbG5hbWUsIHF0X21ldGFfc3RyaW5nZGF0YV9RdENvbm5lY3Rpb25PYmplY3QpKQotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8UXRDb25uZWN0aW9uT2JqZWN0
Kj4odGhpcykpOwotICAgIHJldHVybiBRT2JqZWN0OjpxdF9tZXRhY2FzdChfY2xuYW1lKTsKLX0K
LQotLy8gVGhpcyBpcyB3aGF0IG1vYyB3b3VsZCBnZW5lcmF0ZSBleGNlcHQgYnkgdGhlIGZhY3Qg
dGhhdCB3ZSBwYXNzIGFsbCBhcmd1bWVudHMgdG8gb3VyIGV4ZWN1dGUoKSBzbG90LgotaW50IFF0
Q29ubmVjdGlvbk9iamVjdDo6cXRfbWV0YWNhbGwoUU1ldGFPYmplY3Q6OkNhbGwgX2MsIGludCBf
aWQsIHZvaWQgKipfYSkKLXsKLSAgICBfaWQgPSBRT2JqZWN0OjpxdF9tZXRhY2FsbChfYywgX2lk
LCBfYSk7Ci0gICAgaWYgKF9pZCA8IDApCi0gICAgICAgIHJldHVybiBfaWQ7Ci0gICAgaWYgKF9j
ID09IFFNZXRhT2JqZWN0OjpJbnZva2VNZXRhTWV0aG9kKSB7Ci0gICAgICAgIHN3aXRjaCAoX2lk
KSB7Ci0gICAgICAgIGNhc2UgMDogZXhlY3V0ZShfYSk7IGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIF9pZCAtPSAxOwotICAgIH0KLSAgICByZXR1cm4gX2lkOwotfQotCi1zdGF0aWMgYm9vbCBp
c0phdmFTY3JpcHRGdW5jdGlvbihKU09iamVjdFJlZiBvYmplY3QpCi17Ci0gICAgQ2FsbERhdGEg
Y2FsbERhdGE7Ci0gICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwotICAgIHJl
dHVybiBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoanNPYmplY3QsIGNhbGxE
YXRhKSA9PSBDYWxsVHlwZUpTOwotfQotCi12b2lkIFF0Q29ubmVjdGlvbk9iamVjdDo6ZXhlY3V0
ZSh2b2lkKiogYXJndikKLXsKLSAgICBRT2JqZWN0KiBzZW5kZXIgPSBtX3NlbmRlckluc3RhbmNl
LT5nZXRPYmplY3QoKTsKLSAgICBpZiAoIXNlbmRlcikgewotICAgICAgICBxV2FybmluZygpIDw8
ICJzZW5kZXIgZGVsZXRlZCwgY2Fubm90IGRlbGl2ZXIgc2lnbmFsIjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChzZW5kZXIgPT0gbV9vcmlnaW5hbFNlbmRlcik7Ci0KLSAg
ICBjb25zdCBRTWV0YU9iamVjdCogbWV0YSA9IHNlbmRlci0+bWV0YU9iamVjdCgpOwotICAgIGNv
bnN0IFFNZXRhTWV0aG9kIG1ldGhvZCA9IG1ldGEtPm1ldGhvZChtX3NpZ25hbEluZGV4KTsKLQot
ICAgIFFMaXN0PFFCeXRlQXJyYXk+IHBhcmFtZXRlclR5cGVzID0gbWV0aG9kLnBhcmFtZXRlclR5
cGVzKCk7Ci0KLSAgICBKU1ZhbHVlUmVmKiBpZ25vcmVkRXhjZXB0aW9uID0gMDsKLSAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHkoSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoImxlbmd0aCIpKTsKLSAgICBpbnQgcmVjZWl2ZXJMZW5ndGggPSBpbnQoSlNWYWx1
ZVRvTnVtYmVyKG1fY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShtX2NvbnRleHQsIG1fcmVj
ZWl2ZXJGdW5jdGlvbiwgbGVuZ3RoUHJvcGVydHkuZ2V0KCksIGlnbm9yZWRFeGNlcHRpb24pLCBp
Z25vcmVkRXhjZXB0aW9uKSk7Ci0gICAgaW50IGFyZ2MgPSBxTWF4KHBhcmFtZXRlclR5cGVzLmNv
dW50KCksIHJlY2VpdmVyTGVuZ3RoKTsKLSAgICBXVEY6OlZlY3RvcjxKU1ZhbHVlUmVmPiBhcmdz
KGFyZ2MpOwotCi0gICAgLy8gVE9ETzogcmVtb3ZlIG9uY2UgY29udmVyc2lvbiBmdW5jdGlvbnMg
dXNlIEpTQyBBUEkuCi0gICAgRXhlY1N0YXRlKiBleGVjID0gOjp0b0pTKG1fY29udGV4dCk7Ci0g
ICAgUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QgPSBtX3NlbmRlckluc3RhbmNlLT5yb290
T2JqZWN0KCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAg
ICBpbnQgYXJnVHlwZSA9IFFNZXRhVHlwZTo6dHlwZShwYXJhbWV0ZXJUeXBlcy5hdChpKSk7Ci0g
ICAgICAgIGFyZ3NbaV0gPSA6OnRvUmVmKGV4ZWMsIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoZXhl
Yywgcm9vdE9iamVjdCwgUVZhcmlhbnQoYXJnVHlwZSwgYXJndltpKzFdKSkpOwotICAgIH0KLQot
ICAgIGNvbnN0IGJvb2wgdXBkYXRlUXRTZW5kZXIgPSBpc0phdmFTY3JpcHRGdW5jdGlvbihtX3Jl
Y2VpdmVyRnVuY3Rpb24pOwotICAgIGlmICh1cGRhdGVRdFNlbmRlcikKLSAgICAgICAgUXRJbnN0
YW5jZTo6cXRTZW5kZXJTdGFjaygpLT5wdXNoKFFPYmplY3Q6OnNlbmRlcigpKTsKLQotICAgIEpT
T2JqZWN0Q2FsbEFzRnVuY3Rpb24obV9jb250ZXh0LCBtX3JlY2VpdmVyRnVuY3Rpb24sIG1fcmVj
ZWl2ZXIsIGFyZ2MsIGFyZ3MuZGF0YSgpLCAwKTsKLQotICAgIGlmICh1cGRhdGVRdFNlbmRlcikK
LSAgICAgICAgUXRJbnN0YW5jZTo6cXRTZW5kZXJTdGFjaygpLT5wb3AoKTsKLX0KLQotYm9vbCBR
dENvbm5lY3Rpb25PYmplY3Q6Om1hdGNoKEpTQ29udGV4dFJlZiBjb250ZXh0LCBRT2JqZWN0KiBz
ZW5kZXIsIGludCBzaWduYWxJbmRleCwgSlNPYmplY3RSZWYgcmVjZWl2ZXIsIEpTT2JqZWN0UmVm
IHJlY2VpdmVyRnVuY3Rpb24pCi17Ci0gICAgaWYgKHNlbmRlciAhPSBtX29yaWdpbmFsU2VuZGVy
IHx8IHNpZ25hbEluZGV4ICE9IG1fc2lnbmFsSW5kZXgpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBKU1ZhbHVlUmVmKiBpZ25vcmVkRXhjZXB0aW9uID0gMDsKLSAgICBjb25zdCBib29sIHJl
Y2VpdmVyTWF0Y2ggPSAoIXJlY2VpdmVyICYmICFtX3JlY2VpdmVyKSB8fCBKU1ZhbHVlSXNFcXVh
bChjb250ZXh0LCByZWNlaXZlciwgbV9yZWNlaXZlciwgaWdub3JlZEV4Y2VwdGlvbik7Ci0gICAg
cmV0dXJuIHJlY2VpdmVyTWF0Y2ggJiYgSlNWYWx1ZUlzRXF1YWwoY29udGV4dCwgcmVjZWl2ZXJG
dW5jdGlvbiwgbV9yZWNlaXZlckZ1bmN0aW9uLCBpZ25vcmVkRXhjZXB0aW9uKTsKLX0KLQotUXRD
b25uZWN0aW9uT2JqZWN0KiBRdENvbm5lY3Rpb25PYmplY3Q6OmNyZWF0ZVdpdGhJbnRlcm5hbEpT
QyhFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gc2VuZGVySW5zdGFuY2Us
IGludCBzaWduYWxJbmRleCwgSlNPYmplY3QqIHJlY2VpdmVyLCBKU09iamVjdCogcmVjZWl2ZXJG
dW5jdGlvbikKLXsKLSAgICByZXR1cm4gbmV3IFF0Q29ubmVjdGlvbk9iamVjdCg6OnRvUmVmKGV4
ZWMpLCBzZW5kZXJJbnN0YW5jZSwgc2lnbmFsSW5kZXgsIDo6dG9SZWYocmVjZWl2ZXIpLCA6OnRv
UmVmKHJlY2VpdmVyRnVuY3Rpb24pKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBRdEFycmF5PFQ+OjpRdEFycmF5KFFMaXN0PFQ+IGxpc3QsIFFNZXRh
VHlwZTo6VHlwZSB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QpCi0gICAg
OiBBcnJheShyb290T2JqZWN0KQotICAgICwgbV9saXN0KGxpc3QpCi0gICAgLCBtX3R5cGUodHlw
ZSkKLXsKLSAgICBtX2xlbmd0aCA9IG1fbGlzdC5jb3VudCgpOwotfQotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gUXRBcnJheTxUPjo6flF0QXJyYXkgKCkKLXsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IFJvb3RPYmplY3QqIFF0QXJyYXk8VD46OnJvb3RPYmplY3QoKSBjb25zdAotewotICAg
IHJldHVybiBtX3Jvb3RPYmplY3QgJiYgbV9yb290T2JqZWN0LT5pc1ZhbGlkKCkgPyBtX3Jvb3RP
YmplY3QuZ2V0KCkgOiAwOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBRdEFycmF5
PFQ+OjpzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUg
YVZhbHVlKSBjb25zdAotewotICAgIC8vIFF0U2NyaXB0IHNldHMgdGhlIHZhbHVlLCBidXQgZG9l
c24ndCBmb3J3YXJkIGl0IHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UKLSAgICAvLyAoZS5nLiBpZiB5
b3UgZG8gJ29iamVjdC5pbnRMaXN0WzVdID0gNicsIHRoZSBvYmplY3QgaXMgbm90IHVwZGF0ZWQs
IGJ1dCB0aGUKLSAgICAvLyBjb3B5IG9mIHRoZSBsaXN0IGlzKS4KLSAgICBpbnQgZGlzdCA9IC0x
OwotICAgIFFWYXJpYW50IHZhbCA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgYVZhbHVl
LCBtX3R5cGUsICZkaXN0KTsKLQotICAgIGlmIChkaXN0ID49IDApIHsKLSAgICAgICAgbV9saXN0
W2luZGV4XSA9IHZhbC52YWx1ZTxUPigpOwotICAgIH0KLX0KLQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gSlNWYWx1ZSBRdEFycmF5PFQ+Ojp2YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWdu
ZWQgaW50IGluZGV4KSBjb25zdAotewotICAgIGlmIChpbmRleCA8IG1fbGVuZ3RoKSB7Ci0gICAg
ICAgIFQgdmFsID0gbV9saXN0LmF0KGluZGV4KTsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRRVmFy
aWFudFRvVmFsdWUoZXhlYywgcm9vdE9iamVjdCgpLCBRVmFyaWFudDo6ZnJvbVZhbHVlKHZhbCkp
OwotICAgIH0KLQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi0vLyA9PT09PT09PT09
PT09PT0KLQotfSB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3F0L1NtYXJ0
UmVwbGFjZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvcXQvU21hcnRSZXBsYWNlUXQu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmJiODJjMmU4NmI4MjE0ZTE1NDI1
MmY5ZDIyNmYzNzIxOTg1YjU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvcXQvU21hcnRSZXBsYWNlUXQuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBS
b2JlcnQgSG9nYW4gPHJvYmVydEByb2JlcnRob2dhbi5uZXQ+LiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNywyMDA4LDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaWYgVVNFKFFUNF9VTklDT0RFKQot
I2luY2x1ZGUgIlNtYXJ0UmVwbGFjZS5oIgotI2luY2x1ZGUgPFFDaGFyPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWJvb2wgaXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQoVUNoYXIzMiBj
LCBib29sIGlzUHJldmlvdXNDaGFyYWN0ZXIpCi17Ci0gICAgUUNoYXIgZChjKTsKLSAgICBpZiAo
ZC5pc1NwYWNlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghaXNQcmV2aW91c0No
YXJhY3RlciAmJiBkLmlzUHVuY3QoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
KGMgPj0gMHgxMTAwICYmIGMgPD0gKDB4MTEwMCArIDI1NikpIC8vIEhhbmd1bCBKYW1vICgweDEx
MDAgLSAweDExRkYpCi0gICAgICAgIHx8IChjID49IDB4MkU4MCAmJiBjIDw9ICgweDJFODAgKyAz
NTIpKSAvLyBDSksgJiBLYW5neGkgUmFkaWNhbHMgKDB4MkU4MCAtIDB4MkZERikKLSAgICAgICAg
fHwgKGMgPj0gMHgyRkYwICYmIGMgPD0gKDB4MkZGMCArIDQ2NCkpIC8vIElkZW9ncmFwaCBEZXNl
cmlwdGlvbnMsIENKSyBTeW1ib2xzLCBIaXJhZ2FuYSwgS2F0YWthbmEsIEJvcG9tb2ZvLCBIYW5n
dWwgQ29tcGF0aWJpbGl0eSBKYW1vLCBLYW5idW4sICYgQm9wb21vZm8gRXh0ICgweDJGRjAgLSAw
eDMxQkYpCi0gICAgICAgIHx8IChjID49IDB4MzIwMCAmJiBjIDw9ICgweDMyMDAgKyAyOTM5Mikp
IC8vIEVuY2xvc2VkIENKSywgQ0pLIElkZW9ncmFwaHMgKFVuaSBIYW4gJiBFeHQgQSksICYgWWkg
KDB4MzIwMCAtIDB4QTRDRikKLSAgICAgICAgfHwgKGMgPj0gMHhBQzAwICYmIGMgPD0gKDB4QUMw
MCArIDExMTgzKSkgLy8gSGFuZ3VsIFN5bGxhYmxlcyAoMHhBQzAwIC0gMHhEN0FGKQotICAgICAg
ICB8fCAoYyA+PSAweEY5MDAgJiYgYyA8PSAoMHhGOTAwICsgMzUyKSkgLy8gQ0pLIENvbXBhdGli
aWxpdHkgSWRlb2dyYXBocyAoMHhGOTAwIC0gMHhGQTVGKQotICAgICAgICB8fCAoYyA+PSAweEZF
MzAgJiYgYyA8PSAoMHhGRTMwICsgMzIpKSAvLyBDSksgQ29tcGF0aWJpbGl0eSBGcm9tICgweEZF
MzAgLSAweEZFNEYpCi0gICAgICAgIHx8IChjID49IDB4RkYwMCAmJiBjIDw9ICgweEZGMDAgKyAy
NDApKSAvLyBIYWxmL0Z1bGwgV2lkdGggRm9ybSAoMHhGRjAwIC0gMHhGRkVGKQotICAgICAgICB8
fCAoYyA+PSAweDIwMDAwICYmIGMgPD0gKDB4MjAwMDAgKyAweEE2RDcpKSAvLyBDSksgSWRlb2dy
YXBoIEV4bnRlbnNpb24gQgotICAgICAgICB8fCAoYyA+PSAweDJGODAwICYmIGMgPD0gKDB4MkY4
MDAgKyAweDAyMUUpKSkgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyAoMHgyRjgwMCAt
IDB4MkZBMUQpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBjaGFyIHByZXZbXSA9
ICIoW1wiXCcjJC8tYHtcMCI7Ci0gICAgY29uc3QgY2hhciBuZXh0W10gPSAiKV0uLDs6P1wnIVwi
JSotL31cMCI7Ci0gICAgY29uc3QgY2hhciogc3RyID0gKGlzUHJldmlvdXNDaGFyYWN0ZXIpID8g
cHJldiA6IG5leHQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJsZW4oc3RyKTsgKytpKSB7
Ci0gICAgICAgIGlmIChzdHJbaV0gPT0gYykKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3F0L0V2ZW50SGFuZGxlclF0LmNwcAppbmRleCBkNTIyMjI5NTAwYWMxNWUzOGE2NDE4NjMxZTg2
ZWVjZThlNzgzN2E2Li5hYjc1OTQ5NmYxYjMwNTY5YTE1NGRkZDdkMDk1ODA3MzVhZmM3NDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcApAQCAtNTAsMTIgKzUw
LDYgQEAKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIK
IAotI2lmICFIQVZFKFFUNSkKLVFUX0JFR0lOX05BTUVTUEFDRQotUV9HVUlfRVhQT1JUIGV4dGVy
biBib29sIHF0X3RhYl9hbGxfd2lkZ2V0czsgLy8gZnJvbSBxYXBwbGljYXRpb24uY3BwCi1RVF9F
TkRfTkFNRVNQQUNFCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgZGVmaW5l
ZChRX1dTX01BQykKQEAgLTY2LDExICs2MCw3IEBAIGNvbnN0IGRvdWJsZSBFdmVudEhhbmRsZXI6
OlRleHREcmFnRGVsYXkgPSAwLjA7CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxGb3Jt
Q29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiB7Ci0jaWYgSEFWRShRVDUpCiAg
ICAgcmV0dXJuICFpc0tleWJvYXJkT3B0aW9uVGFiKGV2ZW50KTsKLSNlbHNlCi0gICAgcmV0dXJu
IChpc0tleWJvYXJkT3B0aW9uVGFiKGV2ZW50KSA/ICFxdF90YWJfYWxsX3dpZGdldHMgOiBxdF90
YWJfYWxsX3dpZGdldHMpOwotI2VuZGlmCiB9CiAKIHZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1c0Rv
Y3VtZW50VmlldygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCBmZTEyMjNkNzg2MDBkMjE4MzA5NGVlNTZmYTYzZDQz
OTFkZTQ5NWE2Li5lMTM3M2YwOTFkMTg1NDAwYWJiYTE2NmYzNDI5NGVkMTUwMzg1M2Q1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgKQEAgLTY4LDE0ICs2OCw5IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IEdMdWludDsKICNp
ZiBQTEFURk9STShNQUMpCiB0eXBlZGVmIENHTENvbnRleHRPYmogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRDsKICNlbGlmIFBMQVRGT1JNKFFUKQotI2lmIEhBVkUoUVQ1KQogdHlwZWRlZiBRT3Bl
bkdMQ29udGV4dCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsKIHR5cGVkZWYgUVN1cmZhY2Uq
IFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNlM0Q7CiAjZWxzZQotdHlwZWRlZiBRR0xDb250ZXh0KiBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOwotdHlwZWRlZiBRR0xXaWRnZXQqIFBsYXRmb3JtR3Jh
cGhpY3NTdXJmYWNlM0Q7Ci0jZW5kaWYKLSNlbHNlCiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0Q7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvT3BlbkdMU2hpbXMuY3BwCmluZGV4IDgyY2MyMWM2ZDE1YzE5NTcyNzlmODVmZmM0
NWM5MzRlNTZiZDllNTcuLjhlNTRlZTQ1MmI5M2U4YzQ3ZGU3NWQ0YzlkMDIzMzBiMTJhOWIxYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5j
cHAKQEAgLTQyLDExICs0Miw3IEBAIE9wZW5HTEZ1bmN0aW9uVGFibGUqIG9wZW5HTEZ1bmN0aW9u
VGFibGUoKQogI2lmIFBMQVRGT1JNKFFUKQogc3RhdGljIHZvaWQqIGdldFByb2NBZGRyZXNzKGNv
bnN0IGNoYXIqIHByb2NOYW1lKQogewotI2lmIEhBVkUoUVQ1KQogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRleHQoKS0+Z2V0UHJv
Y0FkZHJlc3MocHJvY05hbWUpKTsKLSNlbHNlCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KFFHTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCktPmdldFByb2NBZGRyZXNzKFFTdHJp
bmc6OmZyb21MYXRpbjEocHJvY05hbWUpKSk7Ci0jZW5kaWYKIH0KICNlbHNlCiB0eXBlZGVmIHZv
aWQqICgqZ2xHZXRQcm9jQWRkcmVzc1R5cGUpIChjb25zdCBjaGFyKiBwcm9jTmFtZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuaAppbmRleCA3MDZm
MTdkOWJhNjdjMTY5NmY1ZmI3MjczYjk1NjI4N2U3N2Q1ZWJjLi5mZmZhNTAyZTVmNmY1YzIxOTkz
ZDBjODEwZjFkYjQ5YWU2NGZlODY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9PcGVuR0xTaGltcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL09wZW5HTFNoaW1zLmgKQEAgLTIyLDE0ICsyMiwxMCBAQAogCiAjaWYgUExBVEZPUk0o
UVQpCiAjaW5jbHVkZSA8cWdsb2JhbC5oPgotI2lmIEhBVkUoUVQ1KQogI2luY2x1ZGUgPHFvcGVu
Z2xmdW5jdGlvbnMuaD4KICNpbmNsdWRlIDxRT3BlbkdMQ29udGV4dD4KICNpbmNsdWRlIDxRU3Vy
ZmFjZT4KICNlbHNlCi0jaW5jbHVkZSA8UUdMQ29udGV4dD4KLSNlbmRpZgotI2Vsc2UKICNpbmNs
dWRlIDxHTC9nbC5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9ybVZpZGVvV2luZG93UHJpdmF0ZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5k
b3dQcml2YXRlLmgKaW5kZXggYjkyOWU5MGU0OWY0MTAwYzRmOTdmY2U5NzYzN2JiZTAxYWFmNDA5
ZS4uNDIzZDBjYmYzZmY3ODNiMTg2OGY3NzM5M2NlYWY0ZjgxMTNlOGI3OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9X
aW5kb3dQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3dQcml2YXRlLmgKQEAgLTIzLDIzICsyMywxMyBAQAog
I2luY2x1ZGUgPFFFdmVudD4KICNpbmNsdWRlIDxRVGltZXI+CiAKLSNpZiBkZWZpbmVkKEhBVkVf
UVQ1KSAmJiBIQVZFX1FUNQogI2luY2x1ZGUgPFFXaW5kb3c+Ci0jZWxzZQotI2luY2x1ZGUgPFFX
aWRnZXQ+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MVmlkZW9F
bGVtZW50OwogCi0jaWYgZGVmaW5lZChIQVZFX1FUNSkgJiYgSEFWRV9RVDUKLXR5cGVkZWYgUVdp
bmRvdyBCYXNlOwotI2Vsc2UKLXR5cGVkZWYgUVdpZGdldCBCYXNlOwotI2VuZGlmCi0KLWNsYXNz
IEZ1bGxTY3JlZW5WaWRlb1dpbmRvdzogcHVibGljIEJhc2UgeworY2xhc3MgRnVsbFNjcmVlblZp
ZGVvV2luZG93OiBwdWJsaWMgUVdpbmRvdyB7CiBRX09CSkVDVAogcHVibGljOgogICAgIEZ1bGxT
Y3JlZW5WaWRlb1dpbmRvdygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3dRdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvd1F0LmNw
cAppbmRleCAzZTQzMWYyNDE3YzkzNmQ3OTNmMzA4YmVhMzAzZjQzYzJmYmU0NDc3Li45NzdmYTNh
MjQ0NTIyNDJhNTJmZGQ2MDVjOGY1YjEwMTQ3YzQwZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvd1F0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZv
cm1WaWRlb1dpbmRvd1F0LmNwcApAQCAtMzgsMTEgKzM4LDYgQEAgc3RhdGljIGNvbnN0IGludCBn
SGlkZU1vdXNlQ3Vyc29yRGVsYXkgPSAzMDAwOwogRnVsbFNjcmVlblZpZGVvV2luZG93OjpGdWxs
U2NyZWVuVmlkZW9XaW5kb3coKQogICAgIDogbV9tZWRpYUVsZW1lbnQoMCkKIHsKLSNpZiAhSEFW
RShRVDUpCi0gICAgc2V0QXR0cmlidXRlKFF0OjpXQV9OYXRpdmVXaW5kb3cpOwotICAgIHNldEF0
dHJpYnV0ZShRdDo6V0FfTm9TeXN0ZW1CYWNrZ3JvdW5kLCB0cnVlKTsKLSAgICBzZXRBdHRyaWJ1
dGUoUXQ6OldBX1BhaW50T25TY3JlZW4sIHRydWUpOwotI2VuZGlmCiAgICAgc2V0V2luZG93TW9k
YWxpdHkoUXQ6OkFwcGxpY2F0aW9uTW9kYWwpOwogCiAjaWZuZGVmIFFUX05PX0NVUlNPUgpAQCAt
NjUsNyArNjAsNyBAQCB2b2lkIEZ1bGxTY3JlZW5WaWRlb1dpbmRvdzo6a2V5UHJlc3NFdmVudChR
S2V5RXZlbnQqIGV2KQogICAgICAgICAgICAgbV9tZWRpYUVsZW1lbnQtPnBsYXkoKTsKICAgICB9
IGVsc2UgaWYgKGV2LT5rZXkoKSA9PSBRdDo6S2V5X0VzY2FwZSkKICAgICAgICAgZW1pdCBjbG9z
ZWQoKTsKLSAgICBCYXNlOjprZXlQcmVzc0V2ZW50KGV2KTsKKyAgICBRV2luZG93OjprZXlQcmVz
c0V2ZW50KGV2KTsKIH0KIAogYm9vbCBGdWxsU2NyZWVuVmlkZW9XaW5kb3c6OmV2ZW50KFFFdmVu
dCogZXYpCkBAIC04MywxMCArNzgsNiBAQCBib29sIEZ1bGxTY3JlZW5WaWRlb1dpbmRvdzo6ZXZl
bnQoUUV2ZW50KiBldikKICNpZm5kZWYgUVRfTk9fQ1VSU09SCiAgICAgICAgIG1fY3Vyc29yVGlt
ZXIuc3RvcCgpOwogI2VuZGlmCi0jaWYgIUhBVkUoUVQ1KQotICAgICAgICBzZXRNb3VzZVRyYWNr
aW5nKGZhbHNlKTsKLSAgICAgICAgcmVsZWFzZU1vdXNlKCk7Ci0jZW5kaWYKICNpZm5kZWYgUVRf
Tk9fQ1VSU09SCiAgICAgICAgIFFHdWlBcHBsaWNhdGlvbjo6cmVzdG9yZU92ZXJyaWRlQ3Vyc29y
KCk7CiAjZW5kaWYKQEAgLTk0LDE5ICs4NSwxMyBAQCBib29sIEZ1bGxTY3JlZW5WaWRlb1dpbmRv
dzo6ZXZlbnQoUUV2ZW50KiBldikKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgcmV0dXJuIEJhc2U6OmV2ZW50KGV2KTsKKyAgICByZXR1cm4gUVdpbmRvdzo6ZXZlbnQo
ZXYpOwogfQogCiB2b2lkIEZ1bGxTY3JlZW5WaWRlb1dpbmRvdzo6c2hvd0Z1bGxTY3JlZW4oKQog
ewotICAgIEJhc2U6OnNob3dGdWxsU2NyZWVuKCk7Ci0jaWYgIUhBVkUoUVQ1KQotICAgIHNldE1v
dXNlVHJhY2tpbmcodHJ1ZSk7Ci0jZW5kaWYKKyAgICBRV2luZG93OjpzaG93RnVsbFNjcmVlbigp
OwogICAgIHJhaXNlKCk7Ci0jaWYgIUhBVkUoUVQ1KQotICAgIHNldEZvY3VzKCk7Ci0jZW5kaWYK
ICAgICBoaWRlQ3Vyc29yKCk7CiB9CiAKQEAgLTEyOCwxNiArMTEzLDEwIEBAIHZvaWQgRnVsbFNj
cmVlblZpZGVvV2luZG93OjpzaG93Q3Vyc29yKCkKIAogUGxhdGZvcm1WaWRlb1dpbmRvdzo6UGxh
dGZvcm1WaWRlb1dpbmRvdygpCiB7Ci0gICAgQmFzZSogd2luID0gbmV3IEZ1bGxTY3JlZW5WaWRl
b1dpbmRvdygpOworICAgIFFXaW5kb3cqIHdpbiA9IG5ldyBGdWxsU2NyZWVuVmlkZW9XaW5kb3co
KTsKICAgICBtX3dpbmRvdyA9IHdpbjsKICAgICB3aW4tPnNldFdpbmRvd0ZsYWdzKHdpbi0+d2lu
ZG93RmxhZ3MoKSB8IFF0OjpGcmFtZWxlc3NXaW5kb3dIaW50KTsKICAgICAvLyBGSVhNRTogUG9y
dCB0byBRdCA1LgotI2lmICFIQVZFKFFUNSkKLSAgICBRUGFsZXR0ZSBwOwotICAgIHAuc2V0Q29s
b3IoUVBhbGV0dGU6OkJhc2UsIFF0OjpibGFjayk7Ci0gICAgcC5zZXRDb2xvcihRUGFsZXR0ZTo6
V2luZG93LCBRdDo6YmxhY2spOwotICAgIHdpbi0+c2V0UGFsZXR0ZShwKTsKLSNlbmRpZgogICAg
IHdpbi0+c2hvd0Z1bGxTY3JlZW4oKTsKICAgICBtX3ZpZGVvV2luZG93SWQgPSB3aW4tPndpbklk
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmluZGV4IDg5NWY3NjY4ODAzOWU4MWYyZjcwYmZh
ZDgwMDVmMDc3YmRlNTFkMTguLmNiODI0ZjYzYzBjOGIwYmJjNjg5OTJjOWZiOGI5MDQzOTkyYjIz
ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC0zNCwxMCArMzQsOCBAQAogI2luY2x1ZGUg
Ik9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKLSNpZiBIQVZFKFFUNSkKICNpbmNsdWRlIDxRV2luZG93PgogI2luY2x1
ZGUgPHFwYS9xcGxhdGZvcm1waXhtYXAuaD4KLSNlbmRpZgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMjU1LDcgKzI1Myw2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpibGl0TXVsdGlzYW1wbGVGcmFtZWJ1
ZmZlckFuZFJlc3RvcmVDb250ZXh0KCkgY29uCiAgICAgaWYgKCFtX2NvbnRleHQtPm1fYXR0cnMu
YW50aWFsaWFzKQogICAgICAgICByZXR1cm47CiAKLSNpZiBIQVZFKFFUNSkKICAgICBjb25zdCBR
T3BlbkdMQ29udGV4dCogY3VycmVudENvbnRleHQgPSBRT3BlbkdMQ29udGV4dDo6Y3VycmVudENv
bnRleHQoKTsKICAgICBRU3VyZmFjZSogY3VycmVudFN1cmZhY2UgPSAwOwogICAgIGlmIChjdXJy
ZW50Q29udGV4dCAhPSBtX3BsYXRmb3JtQ29udGV4dCkgewpAQCAtMjY1LDM1ICsyNjIsMTQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJsaXRNdWx0aXNhbXBsZUZyYW1lYnVmZmVy
QW5kUmVzdG9yZUNvbnRleHQoKSBjb24KICAgICBibGl0TXVsdGlzYW1wbGVGcmFtZWJ1ZmZlcigp
OwogICAgIGlmIChjdXJyZW50U3VyZmFjZSkKICAgICAgICAgY29uc3RfY2FzdDxRT3BlbkdMQ29u
dGV4dCo+KGN1cnJlbnRDb250ZXh0KS0+bWFrZUN1cnJlbnQoY3VycmVudFN1cmZhY2UpOwotI2Vs
c2UKLSAgICBjb25zdCBRR0xDb250ZXh0KiBjdXJyZW50Q29udGV4dCA9IFFHTENvbnRleHQ6OmN1
cnJlbnRDb250ZXh0KCk7Ci0gICAgY29uc3QgUUdMQ29udGV4dCogd2lkZ2V0Q29udGV4dCA9IG1f
c3VyZmFjZS0+Y29udGV4dCgpOwotICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSB3aWRnZXRDb250
ZXh0KQotICAgICAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7Ci0gICAgYmxpdE11bHRpc2Ft
cGxlRnJhbWVidWZmZXIoKTsKLSAgICBpZiAoY3VycmVudENvbnRleHQpIHsKLSAgICAgICAgaWYg
KGN1cnJlbnRDb250ZXh0ICE9IHdpZGdldENvbnRleHQpCi0gICAgICAgICAgICBjb25zdF9jYXN0
PFFHTENvbnRleHQqPihjdXJyZW50Q29udGV4dCktPm1ha2VDdXJyZW50KCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG1fc3VyZmFjZS0+ZG9uZUN1cnJlbnQoKTsKLSNlbmRpZgogfQogCiBib29sIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFrZUN1cnJlbnRJZk5lZWRlZCgpIGNvbnN0CiB7Ci0j
aWYgSEFWRShRVDUpCiAgICAgY29uc3QgUU9wZW5HTENvbnRleHQqIGN1cnJlbnRDb250ZXh0ID0g
UU9wZW5HTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCk7CiAgICAgaWYgKGN1cnJlbnRDb250ZXh0
ID09IG1fcGxhdGZvcm1Db250ZXh0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4g
bV9wbGF0Zm9ybUNvbnRleHQtPm1ha2VDdXJyZW50KG1fc3VyZmFjZSk7Ci0jZWxzZQotICAgIGNv
bnN0IFFHTENvbnRleHQqIGN1cnJlbnRDb250ZXh0ID0gUUdMQ29udGV4dDo6Y3VycmVudENvbnRl
eHQoKTsKLSAgICBjb25zdCBRR0xDb250ZXh0KiB3aWRnZXRDb250ZXh0ID0gbV9zdXJmYWNlLT5j
b250ZXh0KCk7Ci0gICAgaWYgKGN1cnJlbnRDb250ZXh0ICE9IHdpZGdldENvbnRleHQpCi0gICAg
ICAgIG1fc3VyZmFjZS0+bWFrZUN1cnJlbnQoKTsKLQotICAgIHJldHVybiBRR0xDb250ZXh0Ojpj
dXJyZW50Q29udGV4dCgpID09IHdpZGdldENvbnRleHQ7Ci0jZW5kaWYKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCBkM2Y1MDdkZDM0NDlmNThjYzM1NWFlZDE5
YWQxZDA4MjQyNmU4ZjViLi44OWJmZDFkZmE3MWI4ZGI0MWY3NjJlM2Q5MjU1NDI2N2Y0NTUwODU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC02Niw3ICs2Niw3IEBACiAjaW5jbHVkZSA8UVZlY3Rv
cj4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCi0jaWYgT1MoV0lORE9XUykgJiYgSEFW
RShRVDUpCisjaWYgT1MoV0lORE9XUykKIFFfR1VJX0VYUE9SVCBRUGl4bWFwIHF0X3BpeG1hcEZy
b21XaW5IQklUTUFQKEhCSVRNQVAsIGludCBoYml0bWFwRm9ybWF0ID0gMCk7CiAKIGVudW0gSEJp
dG1hcEZvcm1hdCB7CkBAIC0xNDcwLDExICsxNDcwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBi
b28KICAgICAgICAgICAgIEdldE9iamVjdChiaXRtYXAsIHNpemVvZihpbmZvKSwgJmluZm8pOwog
ICAgICAgICAgICAgQVNTRVJUKGluZm8uYm1CaXRzUGl4ZWwgPT0gMzIpOwogCi0jaWYgSEFWRShR
VDUpCiAgICAgICAgICAgICBRUGl4bWFwIHBpeG1hcCA9IHF0X3BpeG1hcEZyb21XaW5IQklUTUFQ
KGJpdG1hcCwgc3VwcG9ydEFscGhhQmxlbmQgPyBIQml0bWFwUHJlbXVsdGlwbGllZEFscGhhIDog
SEJpdG1hcE5vQWxwaGEpOwotI2Vsc2UKLSAgICAgICAgICAgIFFQaXhtYXAgcGl4bWFwID0gUVBp
eG1hcDo6ZnJvbVdpbkhCSVRNQVAoYml0bWFwLCBzdXBwb3J0QWxwaGFCbGVuZCA/IFFQaXhtYXA6
OlByZW11bHRpcGxpZWRBbHBoYSA6IFFQaXhtYXA6Ok5vQWxwaGEpOwotI2VuZGlmCiAgICAgICAg
ICAgICBtX2RhdGEtPnAoKS0+ZHJhd1BpeG1hcChkc3RSZWN0LCBwaXhtYXApOwogCiAgICAgICAg
ICAgICA6OkRlbGV0ZU9iamVjdChiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAppbmRleCAxMGZlMWZlYjZlODdmNGY2YTY4MmMyZWVj
NGVlMDdjN2ViYWZkMDNhLi4xNjMzMGE0MGZiYjEwYmM0ZjljOTIwOGQxMGQ2ZjY5ZWMwNDZlNzgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNw
cApAQCAtNTIsNyArNTIsNyBAQAogCiAjaW5jbHVkZSA8bWF0aC5oPgogCi0jaWYgT1MoV0lORE9X
UykgJiYgSEFWRShRVDUpCisjaWYgT1MoV0lORE9XUykKIFFfR1VJX0VYUE9SVCBRUGl4bWFwIHF0
X3BpeG1hcEZyb21XaW5IQklUTUFQKEhCSVRNQVAsIGludCBoYml0bWFwRm9ybWF0ID0gMCk7CiAj
ZW5kaWYKIApAQCAtMjk5LDExICsyOTksNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNv
bGlkQ29sb3IoKQogI2lmIE9TKFdJTkRPV1MpCiBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBCaXRt
YXBJbWFnZTo6Y3JlYXRlKEhCSVRNQVAgaEJpdG1hcCkKIHsKLSNpZiBIQVZFKFFUNSkKICAgICBR
SW1hZ2UqIG5hdGl2ZUltYWdlID0gbmV3IFFJbWFnZShxdF9waXhtYXBGcm9tV2luSEJJVE1BUCho
Qml0bWFwKS50b0ltYWdlKCkpOwotI2Vsc2UKLSAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gbmV3
IFFJbWFnZShRUGl4bWFwOjpmcm9tV2luSEJJVE1BUChoQml0bWFwKS50b0ltYWdlKCkpOwotI2Vu
ZGlmCiAKICAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShuYXRpdmVJbWFnZSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVGb250
RGF0YVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZv
bnREYXRhUXQuY3BwCmluZGV4IDRjMDFmMWRhY2E4OGEwY2Q1OGEyNzQyZTlhYzc5NjliZDMwMTkx
OTMuLjU3OTA4NjU2ZWQ1M2E3NDgzZmYxMjJkYmNmMTQyMWE5OTViMzkwMmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRhUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1NpbXBsZUZvbnREYXRh
UXQuY3BwCkBAIC0xNDgsMTIgKzE0OCw2IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
SW5pdCgpCiAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZtLndpZHRoKFFMYXRpbjFDaGFyKCcgJykp
OwogI2VuZGlmCiAKLSNpZiAhSEFWRShRVDUpCi0gICAgLy8gUXQgc3VidHJhY3RzIDEgZnJvbSB0
aGUgZGVzY2VudCB0byBhY2NvdW50IGZvciB0aGUgYmFzZWxpbmUsCi0gICAgLy8gd2UgYWRkIGl0
IGJhY2sgaGVyZSB0byBnZXQgY29ycmVjdCBtZXRyaWNzIGZvciBXZWJLaXQuCi0gICAgZGVzY2Vu
dCArPSAxOwotI2VuZGlmCi0KICAgICAvLyBUaGUgbGluZSBzcGFjaW5nIHNob3VsZCBhbHdheXMg
YmUgPj0gKGFzY2VudCArIGRlc2NlbnQpLCBidXQgdGhpcwogICAgIC8vIG1heSBiZSBmYWxzZSBp
biBzb21lIGNhc2VzIGR1ZSB0byBtaXNiZWhhdmluZyBwbGF0Zm9ybSBsaWJyYXJpZXMuCiAgICAg
Ly8gV29ya2Fyb3VuZCBmcm9tIFNpbXBsZUZvbnRQYW5nby5jcHAgYW5kIFNpbXBsZUZvbnRGcmVl
VHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlci5oCmluZGV4IDc3OTNmNzBhZGViNDc3NGUwMDFhZjI3OWEyNmI3
OGQzZmI3MDk3MGIuLjNkOTQ1MmI3NjBjZDQwNWRlOTgxZDU0MjBmYzZmYWVmMmYwMzBiM2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXIuaApAQCAtMjQsMTEgKzI0LDggQEAKIAogI2lmIFBMQVRGT1JNKFFUKQogI2lu
Y2x1ZGUgPHFnbG9iYWwuaD4KLQotI2lmIGRlZmluZWQoUVRfT1BFTkdMX0xJQikgfHwgSEFWRShR
VDUpCi0gICAgI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpICYmICFkZWZpbmVkKFRFWE1BUF9P
UEVOR0xfRVNfMikKLSAgICAgICAgI2RlZmluZSBURVhNQVBfT1BFTkdMX0VTXzIKLSAgICAjZW5k
aWYKKyNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKSAmJiAhZGVmaW5lZChURVhNQVBfT1BFTkdM
X0VTXzIpCisgICAgI2RlZmluZSBURVhNQVBfT1BFTkdMX0VTXzIKICNlbmRpZgogI2VuZGlmCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggODY3MDRiYzE1YzVhYzEzMjFlYTExNmI2Mjc5YWE3
Y2MxYTcyMzdmMS4uYzZiMWUyODI1YzYxMzQwMzkyMzYxNWUwOWVjY2VhMTViZGIwMzYxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTM4LDExICszOCw3IEBACiAKICNpZiBQTEFURk9STShR
VCkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVF0LmgiCi0jaWYgSEFWRShRVDUpCiAjaW5jbHVkZSA8
UU9wZW5HTENvbnRleHQ+Ci0jZWxzZQotI2luY2x1ZGUgPFFHTENvbnRleHQ+Ci0jZW5kaWYgLy8g
UVRfVkVSU0lPTgogI2VsaWYgT1MoV0lORE9XUykKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZWxp
ZiBPUyhNQUNfT1NfWCkKQEAgLTYyLDE5ICs1OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBz
dHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAgICAgc3RydWN0IFNoYXJlZEdMRGF0YSA6IHB1
YmxpYyBSZWZDb3VudGVkPFNoYXJlZEdMRGF0YT4gewogI2lmIFBMQVRGT1JNKFFUKQotI2lmIFFU
X1ZFUlNJT04gPj0gMHgwNTAwMDAKICAgICAgICAgdHlwZWRlZiBRT3BlbkdMQ29udGV4dCogR0xD
b250ZXh0OwogICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRleHQoKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gUU9wZW5HTENvbnRleHQ6OmN1cnJlbnRDb250
ZXh0KCk7CiAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgIHR5cGVkZWYgY29uc3QgUUdMQ29udGV4
dCogR0xDb250ZXh0OwotICAgICAgICBzdGF0aWMgR0xDb250ZXh0IGdldEN1cnJlbnRHTENvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUUdMQ29udGV4dDo6Y3VycmVudENv
bnRleHQoKTsKLSAgICAgICAgfQotI2VuZGlmCiAjZWxpZiBPUyhXSU5ET1dTKQogICAgICAgICB0
eXBlZGVmIEhHTFJDIEdMQ29udGV4dDsKICAgICAgICAgc3RhdGljIEdMQ29udGV4dCBnZXRDdXJy
ZW50R0xDb250ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Rl
dmljZU1vdGlvblByb3ZpZGVyUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Rldmlj
ZU1vdGlvblByb3ZpZGVyUXQuaAppbmRleCAyMWQ5Nzg2NzRhOTM3NzNhYjUyYjUzODRjZTI2YjJl
YzhlNWNkNGNhLi4yNDM2MDAzODM1Mjg5YTBiYTJhMGQwOGQ5NzM5MDgwYTJlYjM0ODM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EZXZpY2VNb3Rpb25Qcm92aWRlclF0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRGV2aWNlTW90aW9uUHJvdmlkZXJR
dC5oCkBAIC0yNSwxMiArMjUsNiBAQAogI2luY2x1ZGUgPFFBY2NlbGVyb21ldGVyRmlsdGVyPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lmICFIQVZFKFFUNSkKLXVzaW5nIFFUTV9OQU1F
U1BBQ0U6OlFBY2NlbGVyb21ldGVyOwotdXNpbmcgUVRNX05BTUVTUEFDRTo6UUFjY2VsZXJvbWV0
ZXJGaWx0ZXI7Ci11c2luZyBRVE1fTkFNRVNQQUNFOjpRQWNjZWxlcm9tZXRlclJlYWRpbmc7Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEZXZpY2VNb3Rpb25Db250cm9s
bGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRGV2aWNlT3JpZW50
YXRpb25Qcm92aWRlclF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EZXZpY2VPcmll
bnRhdGlvblByb3ZpZGVyUXQuaAppbmRleCBjNGEyMmY3NGUyZDE4ZTY3ZDE1NTUxZTgzNzM3ZGE2
YTk5NTcyOWExLi4zNTAyOTg0NDk5NmY5NWY2ZWVmNDgzYjlmZTQ1MjdkNzM1MGU5YmE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EZXZpY2VPcmllbnRhdGlvblByb3Zp
ZGVyUXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EZXZpY2VPcmllbnRhdGlv
blByb3ZpZGVyUXQuaApAQCAtMjUsMTIgKzI1LDYgQEAKICNpbmNsdWRlIDxRUm90YXRpb25GaWx0
ZXI+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi0jaWYgIUhBVkUoUVQ1KQotdXNpbmcgUVRN
X05BTUVTUEFDRTo6UVJvdGF0aW9uRmlsdGVyOwotdXNpbmcgUVRNX05BTUVTUEFDRTo6UVJvdGF0
aW9uUmVhZGluZzsKLXVzaW5nIFFUTV9OQU1FU1BBQ0U6OlFSb3RhdGlvblNlbnNvcjsKLSNlbmRp
ZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERldmljZU9yaWVudGF0aW9uUHJvdmlk
ZXJRdCA6IHB1YmxpYyBRUm90YXRpb25GaWx0ZXIgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvS1VSTFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0tV
UkxRdC5jcHAKaW5kZXggODZlNGFiN2I2MmNmMmEwY2U2YmJiMDE0MjIwODc3YmFhOTg3ZGQyZS4u
M2RjYTRlZWUwYmRkZWIyNGNmODkzMTExNmZmZjAwODI0NGE2YTg2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvS1VSTFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9LVVJMUXQuY3BwCkBAIC0zNCwxNSArMzQsNyBAQCBLVVJMOjpLVVJMKGNvbnN0
IFFVcmwmIHVybCkKIAogS1VSTDo6b3BlcmF0b3IgUVVybCgpIGNvbnN0CiB7Ci0jaWYgIUhBVkUo
UVQ1KQotICAgIFFTdHJpbmcgc3RyID0gUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBRQ2hhcio+KG1fc3RyaW5nLmNoYXJhY3RlcnMoKSksIG1fc3RyaW5nLmxlbmd0
aCgpKTsKLSAgICBRQnl0ZUFycmF5IGJhID0gc3RyLnRvVXRmOCgpOwotCi0gICAgUVVybCB1cmwg
PSBRVXJsOjpmcm9tRW5jb2RlZChiYSk7Ci0gICAgcmV0dXJuIHVybDsKLSNlbHNlCiAgICAgcmV0
dXJuIFFVcmwobV9zdHJpbmcpOwotI2VuZGlmCiB9CiAKIFN0cmluZyBLVVJMOjpmaWxlU3lzdGVt
UGF0aCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0
Zm9ybVNjcmVlblF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtU2Ny
ZWVuUXQuY3BwCmluZGV4IGYzMDQ3MmEwYjk0ZjU0MTVkZjQ0ODAwOTBhOWZiOWJkZDFjMTJkMzku
LmZhMmU4MzdlYWY4ZGQzNzI1YjlmMWViN2I0ZjdkMTU2ZGU5ZDMwNTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtU2NyZWVuUXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtU2NyZWVuUXQuY3BwCkBAIC0zOCwxMyArMzgs
OCBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAj
aW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKLSNpZiBIQVZFKFFUNSkKICNpbmNsdWRlIDxRR3Vp
QXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UVNjcmVlbj4KLSNlbHNlCi0jaW5jbHVkZSA8UUFwcGxp
Y2F0aW9uPgotI2luY2x1ZGUgPFFEZXNrdG9wV2lkZ2V0PgotI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNzEsMzEgKzY2LDE0IEBAIHN0YXRpYyBpbnQgc2NyZWVuTnVtYmVyKFdp
ZGdldCogdykKIAogaW50IHNjcmVlbkRlcHRoKFdpZGdldCogdykKIHsKLSNpZiBIQVZFKFFUNSkK
ICAgICByZXR1cm4gUUd1aUFwcGxpY2F0aW9uOjpzY3JlZW5zKCkudmFsdWUoc2NyZWVuTnVtYmVy
KHcpKS0+ZGVwdGgoKTsKLSNlbHNlCi0gICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgp
LT5zY3JlZW4oc2NyZWVuTnVtYmVyKHcpKS0+ZGVwdGgoKTsKLSNlbmRpZgogfQogCiBpbnQgc2Ny
ZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3KQogewotI2lmIEhBVkUoUVQ1KQogICAgIGlu
dCBkZXB0aCA9IFFHdWlBcHBsaWNhdGlvbjo6cHJpbWFyeVNjcmVlbigpLT5kZXB0aCgpOwogICAg
IC8vIEZJWE1FOiBVc2Ugd2lkZ2V0J3Mgc2NyZWVuCiAgICAgUV9VTlVTRUQodyk7Ci0jZWxzZQot
ICAgIGludCBkZXB0aCA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5zY3JlZW4oMCktPmRlcHRo
KCk7Ci0gICAgaWYgKHcpIHsKLSAgICAgICAgUVdlYlBhZ2VDbGllbnQqIGNsaWVudCA9IHctPnJv
b3QoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLQotICAgICAgICBpZiAo
Y2xpZW50KSB7Ci0gICAgICAgICAgICBRV2lkZ2V0KiB2aWV3ID0gY2xpZW50LT5vd25lcldpZGdl
dCgpOwotICAgICAgICAgICAgaWYgKHZpZXcpCi0gICAgICAgICAgICAgICAgZGVwdGggPSB2aWV3
LT5kZXB0aCgpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCiAgICAgLy8gQW4gaW50ZXJmYWNl
IHRvIGVzdGFibGlzaCB0aGUgYWN0dWFsIG51bWJlciBvZiBiaXRzIHBlciBjb2xvcgogICAgIC8v
IGRvZXNuJ3QgZXhpc3QgaW4gUXQsIG9yIHByb2JhYmx5IGF0IGFsbCwgc28gdXNlIGNvbW1vbi1z
ZW5zZQogICAgIC8vIHZhbHVlcyBmb3IgZWFjaCBzY3JlZW4gZGVwdGggYW5kIGFzc3VtZSBSR0Iv
UkdCQSB3aGVyZSBhcHByb3ByaWF0ZS4KQEAgLTExNCwzMiArOTIsMjAgQEAgaW50IHNjcmVlbkRl
cHRoUGVyQ29tcG9uZW50KFdpZGdldCogdykKIAogYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lk
Z2V0KiB3KQogewotI2lmIEhBVkUoUVQ1KQogICAgIFFfVU5VU0VEKHcpOwogICAgIC8vIEZJWE1F
OiBJbiBRdCA1IGNvbG9yQ291bnQoKSBpc24ndCBldmVuIGltcGxlbWVudGVkIGJleW9uZCByZXR1
cm5pbmcgMjU2IDopCiAgICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLSAgICByZXR1cm4gUUFwcGxp
Y2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbihzY3JlZW5OdW1iZXIodykpLT5jb2xvckNvdW50KCkg
PT0gMjsKLSNlbmRpZgogfQogCiBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkK
IHsKLSNpZiBIQVZFKFFUNSkKICAgICBRUmVjdCByID0gUUd1aUFwcGxpY2F0aW9uOjpzY3JlZW5z
KCkudmFsdWUoc2NyZWVuTnVtYmVyKHdpZGdldCkpLT5nZW9tZXRyeSgpOwotI2Vsc2UKLSAgICBR
UmVjdCByID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbkdlb21ldHJ5KHNjcmVlbk51
bWJlcih3aWRnZXQpKTsKLSNlbmRpZgogICAgIHJldHVybiBGbG9hdFJlY3Qoci54KCksIHIueSgp
LCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOwogfQogCiBGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxl
UmVjdChXaWRnZXQqIHdpZGdldCkKIHsKLSNpZiBIQVZFKFFUNSkKICAgICBRUmVjdCByID0gUUd1
aUFwcGxpY2F0aW9uOjpzY3JlZW5zKCkudmFsdWUoc2NyZWVuTnVtYmVyKHdpZGdldCkpLT5hdmFp
bGFibGVHZW9tZXRyeSgpOwotI2Vsc2UKLSAgICBRUmVjdCByID0gUUFwcGxpY2F0aW9uOjpkZXNr
dG9wKCktPmF2YWlsYWJsZUdlb21ldHJ5KHNjcmVlbk51bWJlcih3aWRnZXQpKTsKLSNlbmRpZgog
ICAgIHJldHVybiBGbG9hdFJlY3Qoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFnZUNs
aWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaAppbmRl
eCAwNzg5OTlkYzI0N2NkODFlMWRiYTJjYWE5OTc2MTc0OTE0OTAyODZhLi5hZGVmN2ZmZDRmNjRh
MWVkMzZhM2I0MmFlYzA1YjAwYmE3YmU5NWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1FXZWJQYWdlQ2xpZW50LmgKQEAgLTExMCw5ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UzRCopID0gMDsKICNlbmRpZgotI2lmIEhBVkUo
UVQ1KQogICAgIHZpcnR1YWwgUVdpbmRvdyogb3duZXJXaW5kb3coKSBjb25zdDsKLSNlbmRpZgog
CiBwcm90ZWN0ZWQ6CiAjaWZuZGVmIFFUX05PX0NVUlNPUgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAppbmRleCAwOWY1MThiODZmZmQ1YTViNzJlZDIwMmM1
N2ExZGMwMGViOTEwMmYwLi5mMzkxN2I4YTkwMzc2MTNiNDFhNzU2OWJiMWQ3NGFlYWM4OWIzZTYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcApAQCAt
NjUsOSArNjUsNyBAQAogI2luY2x1ZGUgPFFGaWxlPgogI2luY2x1ZGUgPFFGb250TWV0cmljcz4K
IAotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNTAwMDAKICNpbmNsdWRlIDxRU3R5bGVIaW50cz4KLSNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvcXQvVGV4dEJyZWFrSXRlcmF0b3JRdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L3F0L1RleHRCcmVha0l0ZXJhdG9yUXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwZDlkNDhkYmU1MWEyOTFmODhhYjQxMmJjYTE2YTZiMzkxN2E5YmNi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvcXQvVGV4dEJyZWFrSXRlcmF0b3JRdC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBMYXJzIEtu
b2xsIDxsYXJzQHRyb2xsdGVjaC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKLQotI2luY2x1ZGUgPFF0Q29yZS9xdGV4dGJvdW5kYXJ5
ZmluZGVyLmg+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHFkZWJ1Zy5oPgotI2lu
Y2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0KLS8vICNkZWZpbmUgREVCVUdfVEVYVF9JVEVSQVRPUlMK
LSNpZmRlZiBERUJVR19URVhUX0lURVJBVE9SUwotI2RlZmluZSBERUJVRyBxRGVidWcKLSNlbHNl
Ci0jZGVmaW5lIERFQlVHIGlmICgxKSB7fSBlbHNlIHFEZWJ1ZwotI2VuZGlmCi0KLXVzaW5nIG5h
bWVzcGFjZSBXVEY7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSAgICBjbGFzcyBUZXh0QnJlYWtJdGVyYXRvciA6IHB1YmxpYyBRVGV4dEJvdW5kYXJ5Rmlu
ZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFRleHRCcmVha0l0ZXJhdG9yKFFUZXh0Qm91bmRh
cnlGaW5kZXI6OkJvdW5kYXJ5VHlwZSB0eXBlLCBjb25zdCBRU3RyaW5nJiBzdHJpbmcpCi0gICAg
ICAgICAgICA6IFFUZXh0Qm91bmRhcnlGaW5kZXIodHlwZSwgc3RyaW5nKQotICAgICAgICB7IH0K
LSAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IoKQotICAgICAgICAgICAgOiBRVGV4dEJvdW5kYXJ5
RmluZGVyKCkKLSAgICAgICAgeyB9Ci0gICAgfTsKLQotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBz
ZXRVcEl0ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9yJiBpdGVyYXRvciwgUVRleHRCb3VuZGFyeUZp
bmRlcjo6Qm91bmRhcnlUeXBlIHR5cGUsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQotICAgIHsKLSAgICAgICAgaWYgKCFjaGFyYWN0ZXJzIHx8ICFsZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm4gMDsKLQotICAgICAgICBpZiAoaXRlcmF0b3IuaXNWYWxpZCgpICYmIHR5cGUg
PT0gaXRlcmF0b3IudHlwZSgpICYmIGl0ZXJhdG9yLnN0cmluZygpID09IFFTdHJpbmc6OmZyb21S
YXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3Ro
KSkgewotICAgICAgICAgICAgaXRlcmF0b3IudG9TdGFydCgpOwotICAgICAgICAgICAgcmV0dXJu
ICZpdGVyYXRvcjsKLSAgICAgICAgfQotCi0gICAgICAgIGl0ZXJhdG9yID0gVGV4dEJyZWFrSXRl
cmF0b3IodHlwZSwgUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oY2hhcmFj
dGVycyksIGxlbmd0aCkpOwotICAgICAgICByZXR1cm4gJml0ZXJhdG9yOwotICAgIH0KLQotICAg
IFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5n
LCBpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yIHN0
YXRpY1dvcmRCcmVha0l0ZXJhdG9yOwotICAgICAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihzdGF0
aWNXb3JkQnJlYWtJdGVyYXRvciwgUVRleHRCb3VuZGFyeUZpbmRlcjo6V29yZCwgc3RyaW5nLCBs
ZW5ndGgpOwotICAgIH0KLQotICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogbm9uU2hhcmVk
Q2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKLQotICAgIE5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRl
cmF0b3I6Ok5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIGJ1ZmZl
ciwgaW50IGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIG1faXRlcmF0b3IgPSBub25TaGFyZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yOwotICAgICAgICBib29sIGNyZWF0ZWRJdGVyYXRvciA9IG1faXRl
cmF0b3IgJiYgd2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbm9u
U2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciksIG1faXRlcmF0b3IsIDApOwotICAgICAgICBp
ZiAoIWNyZWF0ZWRJdGVyYXRvcikKLSAgICAgICAgICAgIG1faXRlcmF0b3IgPSBuZXcgVGV4dEJy
ZWFrSXRlcmF0b3IoKTsKLSAgICAgICAgaWYgKCFzZXRVcEl0ZXJhdG9yKCptX2l0ZXJhdG9yLCBR
VGV4dEJvdW5kYXJ5RmluZGVyOjpHcmFwaGVtZSwgYnVmZmVyLCBsZW5ndGgpKSB7Ci0gICAgICAg
ICAgICBkZWxldGUgbV9pdGVyYXRvcjsKLSAgICAgICAgICAgIG1faXRlcmF0b3IgPSAwOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6fk5v
blNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IoKQotICAgIHsKLSAgICAgICAgaWYgKCF3ZWFr
Q29tcGFyZUFuZFN3YXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZub25TaGFyZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yKSwgMCwgbV9pdGVyYXRvcikpCi0gICAgICAgICAgICBkZWxldGUgbV9p
dGVyYXRvcjsKLSAgICB9Ci0KLSAgICBUZXh0QnJlYWtJdGVyYXRvciogY3Vyc29yTW92ZW1lbnRJ
dGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAg
c3RhdGljIFRleHRCcmVha0l0ZXJhdG9yIHN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0b3I7Ci0g
ICAgICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKHN0YXRpY0N1cnNvck1vdmVtZW50SXRlcmF0b3Is
IFFUZXh0Qm91bmRhcnlGaW5kZXI6OkdyYXBoZW1lLCBzdHJpbmcsIGxlbmd0aCk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNMaW5lQnJlYWtJdGVyYXRvcjsK
LQotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoY29uc3Qg
VUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJikKLSAgICB7Ci0g
ICAgICAgIFRleHRCcmVha0l0ZXJhdG9yKiBsaW5lQnJlYWtJdGVyYXRvciA9IDA7Ci0gICAgICAg
IGlmIChzdGF0aWNMaW5lQnJlYWtJdGVyYXRvcikgewotICAgICAgICAgICAgc2V0VXBJdGVyYXRv
cigqc3RhdGljTGluZUJyZWFrSXRlcmF0b3IsIFFUZXh0Qm91bmRhcnlGaW5kZXI6OkxpbmUsIHN0
cmluZywgbGVuZ3RoKTsKLSAgICAgICAgICAgIHN0ZDo6c3dhcChzdGF0aWNMaW5lQnJlYWtJdGVy
YXRvciwgbGluZUJyZWFrSXRlcmF0b3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFsaW5l
QnJlYWtJdGVyYXRvciAmJiBzdHJpbmcgJiYgbGVuZ3RoKQotICAgICAgICAgICAgbGluZUJyZWFr
SXRlcmF0b3IgPSBuZXcgVGV4dEJyZWFrSXRlcmF0b3IoUVRleHRCb3VuZGFyeUZpbmRlcjo6TGlu
ZSwgUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oc3RyaW5nKSwgbGVuZ3Ro
KSk7Ci0KLSAgICAgICAgcmV0dXJuIGxpbmVCcmVha0l0ZXJhdG9yOwotICAgIH0KLQotICAgIHZv
aWQgcmVsZWFzZUxpbmVCcmVha0l0ZXJhdG9yKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChpdGVyYXRvcik7Ci0KLSAgICAgICAgaWYgKCFzdGF0aWNM
aW5lQnJlYWtJdGVyYXRvcikKLSAgICAgICAgICAgIHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yID0g
aXRlcmF0b3I7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRlbGV0ZSBpdGVyYXRvcjsKLSAg
ICB9Ci0KLSAgICBUZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNvbnN0
IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCi0gICAgewotICAgICAgICBzdGF0aWMgVGV4dEJy
ZWFrSXRlcmF0b3Igc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yOwotICAgICAgICByZXR1cm4g
c2V0VXBJdGVyYXRvcihzdGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3IsIFFUZXh0Qm91bmRhcnlG
aW5kZXI6OlNlbnRlbmNlLCBzdHJpbmcsIGxlbmd0aCk7Ci0KLSAgICB9Ci0KLSAgICBpbnQgdGV4
dEJyZWFrRmlyc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQotICAgIHsKLSAgICAgICAgYmktPnRv
U3RhcnQoKTsKLSAgICAgICAgREVCVUcoKSA8PCAidGV4dEJyZWFrRmlyc3QiIDw8IGJpLT5wb3Np
dGlvbigpOwotICAgICAgICByZXR1cm4gYmktPnBvc2l0aW9uKCk7Ci0gICAgfQotCi0gICAgaW50
IHRleHRCcmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQotICAgIHsKLSAgICAgICAgaW50
IHBvcyA9IGJpLT50b05leHRCb3VuZGFyeSgpOwotICAgICAgICBERUJVRygpIDw8ICJ0ZXh0QnJl
YWtOZXh0IiA8PCBwb3M7Ci0gICAgICAgIHJldHVybiBwb3M7Ci0gICAgfQotCi0gICAgaW50IHRl
eHRCcmVha1ByZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3MpCi0gICAgewot
ICAgICAgICBiaS0+c2V0UG9zaXRpb24ocG9zKTsKLSAgICAgICAgaW50IG5ld3BvcyA9IGJpLT50
b1ByZXZpb3VzQm91bmRhcnkoKTsKLSAgICAgICAgREVCVUcoKSA8PCAidGV4dEJyZWFrUHJlY2Vk
aW5nIiA8PCBwb3MgPDwgbmV3cG9zOwotICAgICAgICByZXR1cm4gbmV3cG9zOwotICAgIH0KLQot
ICAgIGludCB0ZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGJpLCBpbnQgcG9z
KQotICAgIHsKLSAgICAgICAgYmktPnNldFBvc2l0aW9uKHBvcyk7Ci0gICAgICAgIGludCBuZXdw
b3MgPSBiaS0+dG9OZXh0Qm91bmRhcnkoKTsKLSAgICAgICAgREVCVUcoKSA8PCAidGV4dEJyZWFr
Rm9sbG93aW5nIiA8PCBwb3MgPDwgbmV3cG9zOwotICAgICAgICByZXR1cm4gbmV3cG9zOwotICAg
IH0KLQotICAgIGludCB0ZXh0QnJlYWtDdXJyZW50KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBiaS0+cG9zaXRpb24oKTsKLSAgICB9Ci0KLSAgICBib29sIGlz
VGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9yKiwgaW50KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBpc1dvcmRUZXh0QnJlYWsoVGV4dEJyZWFrSXRlcmF0
b3IqKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpbkNvbnRhaW5lclF0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4NDg2MTgwMjY1ZTdjMDg0YzgwNWY3NjliOWUxODY5ZDBiNjhmMGE5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTUwICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJQbHVnaW5Db250YWluZXJRdC5oIgotCi0jaW5jbHVkZSAiRm9jdXNDb250cm9s
bGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotI2luY2x1
ZGUgPFFBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRWDExSW5mbz4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLVBsdWdpbkNsaWVudFdyYXBwZXI6OlBsdWdpbkNsaWVudFdyYXBwZXIoUVdp
ZGdldCogcGFyZW50LCBXSWQgY2xpZW50KQotICAgIDogUVdpZGdldCgwLCBRdDo6UG9wdXApCi17
Ci0gICAgLy8gY3JlYXRlIGEgUVdpZGdldCB0aGF0IGFkb3B0cyB0aGUgcGx1Z2luIHdpbmRvdyBp
ZCwgZG8gbm90IGdpdmUgaXQKLSAgICAvLyBhIHBhcmVudCBzbyB0aGF0IHdlIGRvbid0IGVuZCB1
cCBoYW5kbGluZyBldmVudHMgc3VwcG9zZWQgdG8gYmUKLSAgICAvLyBoYW5kbGVkIGJ5IHRoZSBR
WDExRW1iZWRDb250YWluZXIuCi0KLSAgICAvLyB3aXRob3V0IHRoZSBwYXJlbnQgdGhpcyB3aWxs
IGJlIGNvbnNpZGVyZWQgYSB0b3BsZXZlbCB3aWRnZXQsCi0gICAgLy8gYW5kIHRodXMgbWFrZSBR
dCBub3QgcXVpdCB0aGUgZXZlbnQgbG9vcCBhZnRlciB0aGUgbGFzdCB3aW5kb3cKLSAgICAvLyBo
YXMgYmVlbiBjbG9zZWQuIEluIG9yZGVyIHRvIHdvcmsgYXJvdW5kIHRoaXMsIHdlIHNldCB0aGUg
d2luZG93Ci0gICAgLy8gdHlwZSB0byBRdDo6UG9wdXAuCi0KLSAgICBjcmVhdGUoY2xpZW50LCBm
YWxzZSwgdHJ1ZSk7Ci0gICAgbV9wYXJlbnQgPSBwYXJlbnQ7Ci19Ci0KLVBsdWdpbkNsaWVudFdy
YXBwZXI6On5QbHVnaW5DbGllbnRXcmFwcGVyKCkKLXsKLSAgICBkZXN0cm95KGZhbHNlLCBmYWxz
ZSk7Ci19Ci0KLWJvb2wgUGx1Z2luQ2xpZW50V3JhcHBlcjo6eDExRXZlbnQoWEV2ZW50KiBldmVu
dCkKLXsKLSAgICAvLyBtb2RpZnkgdGhlIGV2ZW50IHdpbmRvdyBpZCBhbmQgaW5zZXJ0IGl0IGlu
dG8gdGhlIFF0IGV2ZW50IHN5c3RlbS4KLSAgICBldmVudC0+eGFueS53aW5kb3cgPSBtX3BhcmVu
dC0+ZWZmZWN0aXZlV2luSWQoKTsKLSAgICBzdGF0aWNfY2FzdDxRQXBwbGljYXRpb24qPihRQXBw
bGljYXRpb246Omluc3RhbmNlKCkpLT54MTFQcm9jZXNzRXZlbnQoZXZlbnQpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1QbHVnaW5Db250YWluZXJRdDo6UGx1Z2luQ29udGFpbmVyUXQoUGx1Z2lu
VmlldyogdmlldywgUVdpZGdldCogcGFyZW50KQotICAgIDogUVgxMUVtYmVkQ29udGFpbmVyKHBh
cmVudCkKLSAgICAsIG1fcGx1Z2luVmlldyh2aWV3KQotICAgICwgbV9jbGllbnRXcmFwcGVyKDAp
Ci17Ci0gICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2xpZW50Q2xvc2VkKCkpLCB0aGlzLCBTTE9U
KG9uX2NsaWVudENsb3NlZCgpKSk7Ci0gICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2xpZW50SXNF
bWJlZGRlZCgpKSwgdGhpcywgU0xPVChvbl9jbGllbnRJc0VtYmVkZGVkKCkpKTsKLX0KLQotUGx1
Z2luQ29udGFpbmVyUXQ6On5QbHVnaW5Db250YWluZXJRdCgpCi17Ci0gICAgZGVsZXRlIG1fY2xp
ZW50V3JhcHBlcjsKLSAgICBtX3BsdWdpblZpZXctPnNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KDAp
OwotfQotCi12b2lkIFBsdWdpbkNvbnRhaW5lclF0Ojpvbl9jbGllbnRDbG9zZWQoKQotewotICAg
IGRlbGV0ZSBtX2NsaWVudFdyYXBwZXI7Ci0gICAgbV9jbGllbnRXcmFwcGVyID0gMDsKLX0KLQot
dm9pZCBQbHVnaW5Db250YWluZXJRdDo6b25fY2xpZW50SXNFbWJlZGRlZCgpCi17Ci0gICAgZGVs
ZXRlIG1fY2xpZW50V3JhcHBlcjsKLSAgICBtX2NsaWVudFdyYXBwZXIgPSAwOwotCi0gICAgLy8g
T25seSBjcmVhdGUgYSBRV2lkZ2V0IHdyYXBwZXIgZm9yIHRoZSBwbHVnaW4gaW4gdGhlIGNhc2Ug
aXQgaXNuJ3QgaW4gdGhlCi0gICAgLy8gUXQgd2luZG93IG1hcHBlciwgYW5kIHRodXMgcmVjZWl2
aW5nIGV2ZW50cyBmcm9tIHRoZSBRdCBldmVudCBzeXN0ZW0uCi0gICAgLy8gVGhpcyB3YXkgdGhl
IFBsdWdpbkNsaWVudFdyYXBwZXIgcmVjZWl2ZXMgdGhlIHNjcm9sbCBldmVudHMgYW5kIHBhc3Nl
cwotICAgIC8vIHRoZW0gdG8gdGhlIHBhcmVudC4gTk9USUNFOiBOYXRpdmUgUXQgYmFzZWQgcGx1
Z2lucyBydW5uaW5nIGluIHByb2Nlc3MsCi0gICAgLy8gd2lsbCBhbHJlYWR5IGJlIGluIHRoZSB3
aW5kb3cgbWFwcGVyLCBhbmQgdGh1cyBjcmVhdGluZyBhIHdyYXBwZXIsIHN0b3BzCi0gICAgLy8g
dGhlbSBmcm9tIGdldHRpbmcgZXZlbnRzIGZyb20gUXQsIGFzIHRoZXkgYXJlIHJlZGlyZWN0ZWQg
dG8gdGhlIHdyYXBwZXIuCi0gICAgaWYgKCFRV2lkZ2V0OjpmaW5kKGNsaWVudFdpbklkKCkpKQot
ICAgICAgICBtX2NsaWVudFdyYXBwZXIgPSBuZXcgUGx1Z2luQ2xpZW50V3JhcHBlcih0aGlzLCBj
bGllbnRXaW5JZCgpKTsKLX0KLQotdm9pZCBQbHVnaW5Db250YWluZXJRdDo6cmVkaXJlY3RXaGVl
bEV2ZW50c1RvUGFyZW50KGJvb2wgZW5hYmxlKQotewotICAgIC8vIHN0ZWFsIHdoZWVsIGV2ZW50
cyBmcm9tIHRoZSBwbHVnaW4gYXMgd2Ugd2FudCB0byBoYW5kbGUgaXQuIFdoZW4gZG9pbmcgdGhp
cwotICAgIC8vIGFsbCBidXR0b24gNCwgNSwgNiwgYW5kIDcsIEJ1dHRvblByZXNzIGFuZCBCdXR0
b25SZWxlYXNlIGV2ZW50cyBhcmUgcGFzc2VkCi0gICAgLy8gdG8gdGhlIHgxMUV2ZW50IGhhbmRs
ZXIgb2YgdGhlIFBsdWdpbkNsaWVudFdyYXBwZXIsIHdoaWNoIHRoZW4gY2hhbmdlcyB0aGUKLSAg
ICAvLyB3aW5kb3cgaWQgb2YgdGhlIGV2ZW50IHRvIHRoZSBwYXJlbnQgb2YgUGx1Z2luQ29udGFp
bmVyIGFuZCBwdXRzIHRoZSBldmVudAotICAgIC8vIGJhY2sgaW50byB0aGUgUXQgZXZlbnQgbG9v
cCwgc28gdGhhdCB3ZSB3aWxsIGFjdHVhbGx5IHNjcm9sbCB0aGUgcGFyZW50Ci0gICAgLy8gZnJh
bWUuCi0gICAgZm9yIChpbnQgYnV0dG9uTm8gPSA0OyBidXR0b25ObyA8IDg7IGJ1dHRvbk5vKysp
IHsKLSAgICAgICAgaWYgKGVuYWJsZSkKLSAgICAgICAgICAgIFhHcmFiQnV0dG9uKHgxMUluZm8o
KS5kaXNwbGF5KCksIGJ1dHRvbk5vLCBBbnlNb2RpZmllciwgY2xpZW50V2luSWQoKSwKLSAgICAg
ICAgICAgICAgICBmYWxzZSwgQnV0dG9uUHJlc3NNYXNrLCBHcmFiTW9kZUFzeW5jLCBHcmFiTW9k
ZUFzeW5jLCAwTCwgMEwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBYVW5ncmFiQnV0dG9u
KHgxMUluZm8oKS5kaXNwbGF5KCksIGJ1dHRvbk5vLCBBbnlNb2RpZmllciwgY2xpZW50V2luSWQo
KSk7Ci0gICAgfQotfQotCi1ib29sIFBsdWdpbkNvbnRhaW5lclF0Ojp4MTFFdmVudChYRXZlbnQq
IGV2ZW50KQotewotICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKLSAgICBjYXNlIEVudGVyTm90
aWZ5OgotICAgICAgICAvLyBpZiB0aGUgcGx1Z2luIHdpbmRvdyBkb2Vzbid0IGhhdmUgZm9jdXMg
d2UgZG8gbm90IHdhbnQgdG8gc2VuZCB3aGVlbAotICAgICAgICAvLyBldmVudHMgdG8gaXQsIGJ1
dCB0byB0aGUgcGFyZW50IGZyYW1lLCBzbyBsZXQncyByZWRpcmVjdCBoZXJlLgotICAgICAgICBy
ZWRpcmVjdFdoZWVsRXZlbnRzVG9QYXJlbnQoIWhhc0ZvY3VzKCkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIExlYXZlTm90aWZ5OgotICAgICAgICAvLyBpdCBpcyBhbHdheXMgc2FmZSB0byB1
bmdyYWIgd2hlZWwgZXZlbnRzIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUKLSAgICAgICAgLy8g
cGx1Z2luIHdpbmRvdy4KLSAgICAgICAgcmVkaXJlY3RXaGVlbEV2ZW50c1RvUGFyZW50KGZhbHNl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIFFYMTFFbWJlZENvbnRhaW5l
cjo6eDExRXZlbnQoZXZlbnQpOwotfQotCi12b2lkIFBsdWdpbkNvbnRhaW5lclF0Ojpmb2N1c0lu
RXZlbnQoUUZvY3VzRXZlbnQqIGV2ZW50KQotewotICAgIC8vIHdlIGdvdCBmb2N1cywgc3RvcCBy
ZWRpcmVjdGluZyB0aGUgd2hlZWwgZXZlbnRzCi0gICAgcmVkaXJlY3RXaGVlbEV2ZW50c1RvUGFy
ZW50KGZhbHNlKTsKLQotICAgIGlmIChQYWdlKiBwYWdlID0gbV9wbHVnaW5WaWV3LT5wYXJlbnRG
cmFtZSgpLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3Rp
dmUodHJ1ZSk7Ci0KLSAgICBtX3BsdWdpblZpZXctPmZvY3VzUGx1Z2luRWxlbWVudCgpOwotfQot
Ci12b2lkIFBsdWdpbkNvbnRhaW5lclF0Ojpmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KikKLXsK
LSAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGx1Z2luVmlldy0+cGFyZW50RnJhbWUoKS0+cGFnZSgp
KQotICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKGZhbHNlKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luQ29udGFpbmVyUXQuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2EyODk2ZDNmNjkzYWFjYjI3ODhiN2RiYzMwYzQ1Mzhl
MDQzYzk2Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpbkNvbnRhaW5lclF0LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2MyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotI2lmbmRlZiBQbHVnaW5Db250
YWluZXJRdF9oCi0jZGVmaW5lIFBsdWdpbkNvbnRhaW5lclF0X2gKLQotI2luY2x1ZGUgPFFYMTFF
bWJlZENvbnRhaW5lcj4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgUGx1Z2lu
VmlldzsKLQotICAgIGNsYXNzIFBsdWdpbkNvbnRhaW5lclF0IDogcHVibGljIFFYMTFFbWJlZENv
bnRhaW5lcgotICAgIHsKLSAgICAgICAgUV9PQkpFQ1QKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBs
dWdpbkNvbnRhaW5lclF0KFBsdWdpblZpZXcqLCBRV2lkZ2V0KiBwYXJlbnQpOwotICAgICAgICB+
UGx1Z2luQ29udGFpbmVyUXQoKTsKLQotICAgICAgICB2b2lkIHJlZGlyZWN0V2hlZWxFdmVudHNU
b1BhcmVudChib29sIGVuYWJsZSA9IHRydWUpOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2
aXJ0dWFsIGJvb2wgeDExRXZlbnQoWEV2ZW50Kik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBmb2N1
c0luRXZlbnQoUUZvY3VzRXZlbnQqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGZvY3VzT3V0RXZl
bnQoUUZvY3VzRXZlbnQqKTsKLQotICAgIHB1YmxpYyBzbG90czoKLSAgICAgICAgdm9pZCBvbl9j
bGllbnRDbG9zZWQoKTsKLSAgICAgICAgdm9pZCBvbl9jbGllbnRJc0VtYmVkZGVkKCk7Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7Ci0gICAgICAgIFFX
aWRnZXQqIG1fY2xpZW50V3JhcHBlcjsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1Z2luQ2xpZW50
V3JhcHBlciA6IHB1YmxpYyBRV2lkZ2V0Ci0gICAgewotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1
Z2luQ2xpZW50V3JhcHBlcihRV2lkZ2V0KiBwYXJlbnQsIFdJZCBjbGllbnQpOwotICAgICAgICB+
UGx1Z2luQ2xpZW50V3JhcHBlcigpOwotICAgICAgICBib29sIHgxMUV2ZW50KFhFdmVudCopOwot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUVdpZGdldCogbV9wYXJlbnQ7Ci0gICAgfTsKLX0KLQot
I2VuZGlmIC8vIFBsdWdpbkNvbnRhaW5lclF0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
cXQvUGx1Z2luUGFja2FnZVF0LmNwcAppbmRleCBmYmFjNTI5YWM1ZWIwZjBlNjI1NTQ5N2U5YWIw
NjhhYzU5ZGNhNzMxLi5kZGFiNDc1YmE5MTEyNDAzNGI4MzJjYmE5ZDM2YWY0MjlhYmFhZjQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblBhY2thZ2VRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwCkBAIC0x
MzIsNyArMTMyLDYgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUd0ayhRTGlicmFyeSogbW9kdWxl
ID0gMCkKIAogYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlzdGVkKCkKIHsKLSNp
ZiBIQVZFKFFUNSkKICAgICAvLyBUT0RPOiBlbnVtZXJhdGUgYWxsIHBsdWdpbnMgdGhhdCBhcmUg
aW5jb21wYXRpYmxlIHdpdGggUXQ1LgogICAgIGNvbnN0IFFMYXRpbjFTdHJpbmcgcGx1Z2luQmxh
Y2tsaXN0W10gPSB7CiAgICAgICAgIFFMYXRpbjFTdHJpbmcoInNreXBlYnV0dG9ucyIpCkBAIC0x
NDMsNyArMTQyLDYgQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlzdGVkKCkK
ICAgICAgICAgaWYgKGJhc2VOYW1lID09IHBsdWdpbkJsYWNrbGlzdFtpXSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KLSNlbmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCmluZGV4IDg5MWQ0MmI5Nzg5
YmJjZDhiYjc5ZTU5NmM3ZDJiN2VhNjE5NTFjODYuLjA0ZDcxMGVhMjhlNWQ3ODQ1MzAwODFiNTJl
ZDdiYzc4ZDgwYzc5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1
Z2luVmlld1F0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdR
dC5jcHAKQEAgLTc5LDIwICs3OSwxMCBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CiAKLSNpZiBIQVZFKFFUNSkKICNpbmNsdWRlICJR
dFgxMUltYWdlQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgPFFHdWlBcHBsaWNhdGlvbj4KICNpbmNs
dWRlIDxxcGEvcXBsYXRmb3JtbmF0aXZlaW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8UVdpbmRvdz4K
LSNlbHNlCi0jaW5jbHVkZSAiUGx1Z2luQ29udGFpbmVyUXQuaCIKLSNpbmNsdWRlIDxRQXBwbGlj
YXRpb24+Ci0jaW5jbHVkZSA8UURlc2t0b3BXaWRnZXQ+Ci0jaW5jbHVkZSA8UUdyYXBoaWNzV2lk
Z2V0PgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbT4KLSNpbmNsdWRlIDxRV2lk
Z2V0PgotI2luY2x1ZGUgPFFYMTFJbmZvPgotI2VuZGlmCiAKIHVzaW5nIEpTQzo6RXhlY1N0YXRl
OwogI2lmIFVTRShKU0MpCkBAIC0xOTksMTMgKzE4OSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6dXBk
YXRlUGx1Z2luV2lkZ2V0KCkKIAogdm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3Vz
ZWQpCiB7Ci0jaWYgIUhBVkUoUVQ1KSAvLyBXaW5kb3dlZCBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQg
d2l0aCBRdDUgeWV0IChzbyBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGlzIGFsd2F5cyBudWxsKS4K
LSAgICBpZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgewotICAgICAgICBpZiAoZm9jdXNlZCkK
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PFFXaWRnZXQqPihwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KS0+c2V0Rm9jdXMoUXQ6Ok90aGVyRm9jdXNSZWFzb24pOwotICAgIH0gZWxzZQotI2VuZGlmCi0g
ICAgICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7CisgICAgV2lkZ2V0OjpzZXRGb2N1cyhm
b2N1c2VkKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzaG93KCkKQEAgLTIzOCw2NSArMjIyLDE2
IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnRVc2luZ1hQaXhtYXAoUVBhaW50ZXIqIHBhaW50ZXIs
IGNvbnN0IFFSZWN0ICZleHBvc2VkUmVjdCkKICAgICBib29sIHNob3VsZFN5bmNYID0gbV9wbHVn
aW5EaXNwbGF5ICYmIG1fcGx1Z2luRGlzcGxheSAhPSB4MTFEaXNwbGF5KCk7CiAgICAgWEV2ZW50
IHhldmVudDsKIAotI2lmIEhBVkUoUVQ1KQogICAgIHNldHVwR3JhcGhpY3NFeHBvc2VFdmVudCht
X2RyYXdhYmxlLCBleHBvc2VkUmVjdCwgeGV2ZW50KTsKLSNlbHNlCi0gICAgUVBpeG1hcCBxdERy
YXdhYmxlID0gUVBpeG1hcDo6ZnJvbVgxMVBpeG1hcChtX2RyYXdhYmxlLCBRUGl4bWFwOjpFeHBs
aWNpdGx5U2hhcmVkKTsKLSAgICBjb25zdCBpbnQgZHJhd2FibGVEZXB0aCA9ICgoTlBTZXRXaW5k
b3dDYWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+ZGVwdGg7Ci0gICAgQVNTRVJU
KGRyYXdhYmxlRGVwdGggPT0gcXREcmF3YWJsZS5kZXB0aCgpKTsKLQotICAgIC8vIFdoZW4gcHJp
bnRpbmcsIFF0IHVzZXMgYSBRUGljdHVyZSB0byBjYXB0dXJlIHRoZSBvdXRwdXQgaW4gcHJldmll
dyBtb2RlLiBUaGUKLSAgICAvLyBRUGljdHVyZSBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgWCBQ
aXhtYXAuIEFzIGEgcmVzdWx0LCB0aGUgcHJpbnQgcHJldmlldyB3b3VsZAotICAgIC8vIHVwZGF0
ZSBpdHNlbGYgd2hlbiB0aGUgWCBQaXhtYXAgY2hhbmdlcy4gVG8gcHJldmVudCB0aGlzLCB3ZSBj
cmVhdGUgYSBjb3B5LgotICAgIGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCktPnByaW50aW5nKCkp
Ci0gICAgICAgIHF0RHJhd2FibGUgPSBxdERyYXdhYmxlLmNvcHkoKTsKLQotICAgIGlmIChtX2lz
VHJhbnNwYXJlbnQgJiYgZHJhd2FibGVEZXB0aCAhPSAzMikgewotICAgICAgICAvLyBBdHRlbXB0
IGNvbnRlbnQgcHJvcGFnYXRpb24gZm9yIGRyYXdhYmxlIHdpdGggbm8gYWxwaGEgYnkgY29weWlu
ZyBvdmVyIGZyb20gdGhlIGJhY2tpbmcgc3RvcmUKLSAgICAgICAgUVBvaW50IG9mZnNldDsKLSAg
ICAgICAgUVBhaW50RGV2aWNlKiBiYWNraW5nU3RvcmVEZXZpY2UgPSAgUVBhaW50ZXI6OnJlZGly
ZWN0ZWQocGFpbnRlci0+ZGV2aWNlKCksICZvZmZzZXQpOwotICAgICAgICBvZmZzZXQgPSAtb2Zm
c2V0OyAvLyBuZWdhdGluZyB0aGUgb2Zmc2V0IGdpdmVzIHVzIHRoZSBvZmZzZXQgb2YgdGhlIHZp
ZXcgd2l0aGluIHRoZSBiYWNraW5nIHN0b3JlIHBpeG1hcAotCi0gICAgICAgIGNvbnN0IGJvb2wg
aGFzVmFsaWRCYWNraW5nU3RvcmUgPSBiYWNraW5nU3RvcmVEZXZpY2UgJiYgYmFja2luZ1N0b3Jl
RGV2aWNlLT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpQaXhtYXA7Ci0gICAgICAgIFFQaXhtYXAq
IGJhY2tpbmdTdG9yZVBpeG1hcCA9IHN0YXRpY19jYXN0PFFQaXhtYXAqPihiYWNraW5nU3RvcmVE
ZXZpY2UpOwotCi0gICAgICAgIC8vIFdlIGNhbm5vdCBncmFiIGNvbnRlbnRzIGZyb20gdGhlIGJh
Y2tpbmcgc3RvcmUgd2hlbiBwYWludGluZyBvbiBRR3JhcGhpY3NWaWV3IGl0ZW1zCi0gICAgICAg
IC8vIChiZWNhdXNlIGJhY2tpbmcgc3RvcmUgY29udGVudHMgYXJlIGFscmVhZHkgdHJhbnNmb3Jt
ZWQpLiBXaGF0IHdlIHJlYWxseSBtZWFuIHRvIGRvIAotICAgICAgICAvLyBoZXJlIGlzIHRvIGNo
ZWNrIGlmIHdlIGFyZSBwYWludGluZyBvbiBRV2ViVmlldywgYnV0IGxldCdzIGJlIGEgbGl0dGxl
IHBlcm1pc3NpdmUgOikKLSAgICAgICAgUVdlYlBhZ2VDbGllbnQqIGNsaWVudCA9IHBsYXRmb3Jt
UGFnZUNsaWVudCgpOwotICAgICAgICBjb25zdCBib29sIGJhY2tpbmdTdG9yZUhhc1VudHJhbnNm
b3JtZWRDb250ZW50cyA9IGNsaWVudCAmJiBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+KGNsaWVudC0+
cGx1Z2luUGFyZW50KCkpOwotCi0gICAgICAgIGlmIChoYXNWYWxpZEJhY2tpbmdTdG9yZSAmJiBi
YWNraW5nU3RvcmVQaXhtYXAtPmRlcHRoKCkgPT0gZHJhd2FibGVEZXB0aCAKLSAgICAgICAgICAg
ICYmIGJhY2tpbmdTdG9yZUhhc1VudHJhbnNmb3JtZWRDb250ZW50cykgewotICAgICAgICAgICAg
R0MgZ2MgPSBYRGVmYXVsdEdDKFFYMTFJbmZvOjpkaXNwbGF5KCksIFFYMTFJbmZvOjphcHBTY3Jl
ZW4oKSk7Ci0gICAgICAgICAgICBYQ29weUFyZWEoUVgxMUluZm86OmRpc3BsYXkoKSwgYmFja2lu
Z1N0b3JlUGl4bWFwLT5oYW5kbGUoKSwgbV9kcmF3YWJsZSwgZ2MsCi0gICAgICAgICAgICAgICAg
b2Zmc2V0LngoKSArIG1fd2luZG93UmVjdC54KCkgKyBleHBvc2VkUmVjdC54KCksIG9mZnNldC55
KCkgKyBtX3dpbmRvd1JlY3QueSgpICsgZXhwb3NlZFJlY3QueSgpLAotICAgICAgICAgICAgICAg
IGV4cG9zZWRSZWN0LndpZHRoKCksIGV4cG9zZWRSZWN0LmhlaWdodCgpLCBleHBvc2VkUmVjdC54
KCksIGV4cG9zZWRSZWN0LnkoKSk7Ci0gICAgICAgIH0gZWxzZSB7IC8vIG5vIGJhY2tpbmcgc3Rv
cmUsIGNsZWFuIHRoZSBwaXhtYXAgYmVjYXVzZSB0aGUgcGx1Z2luIHRoaW5rcyBpdHMgdHJhbnNw
YXJlbnQKLSAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnF0RHJhd2FibGUpOwotICAgICAg
ICAgICAgcGFpbnRlci5maWxsUmVjdChleHBvc2VkUmVjdCwgUXQ6OndoaXRlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChzaG91bGRTeW5jWCkKLSAgICAgICAgICAgIHN5bmNYKCk7Ci0gICAg
fQotCi0gICAgc2V0dXBHcmFwaGljc0V4cG9zZUV2ZW50KHF0RHJhd2FibGUuaGFuZGxlKCksIGV4
cG9zZWRSZWN0LCB4ZXZlbnQpOwotI2VuZGlmCi0KICAgICBkaXNwYXRjaE5QRXZlbnQoeGV2ZW50
KTsKIAogICAgIGlmIChzaG91bGRTeW5jWCkKICAgICAgICAgWFN5bmMobV9wbHVnaW5EaXNwbGF5
LCBmYWxzZSk7IC8vIHN5bmMgY2hhbmdlcyBieSBwbHVnaW4KIAotI2lmIEhBVkUoUVQ1KQogICAg
IFhJbWFnZSogeEltYWdlID0gWEdldEltYWdlKHgxMURpc3BsYXkoKSwgbV9kcmF3YWJsZSwgZXhw
b3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwb3NlZFJlY3Qud2lkdGgoKSwgZXhwb3NlZFJlY3QuaGVpZ2h0KCksIFVMT05HX01B
WCwgWlBpeG1hcCk7CiAgICAgcGFpbnRlci0+ZHJhd0ltYWdlKFFQb2ludChleHBvc2VkUmVjdC54
KCksIGV4cG9zZWRSZWN0LnkoKSksIHFpbWFnZUZyb21YSW1hZ2UoeEltYWdlKSwgZXhwb3NlZFJl
Y3QpOwogICAgIFhEZXN0cm95SW1hZ2UoeEltYWdlKTsKLSNlbHNlCi0gICAgcGFpbnRlci0+ZHJh
d1BpeG1hcChRUG9pbnQoZXhwb3NlZFJlY3QueCgpLCBleHBvc2VkUmVjdC55KCkpLCBxdERyYXdh
YmxlLCBleHBvc2VkUmVjdCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpwYWludChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0zNjksMTMg
KzMwNCw4IEBAIHZvaWQgc2V0U2hhcmVkWEV2ZW50RmllbGRzKFhFdmVudCogeEV2ZW50LCBRV2Vi
UGFnZUNsaWVudCogcGFnZUNsaWVudCkKICAgICAvLyBOT1RFOiBldmVudC0+eGFueS53aW5kb3cg
ZG9lc24ndCBhbHdheXMgcmVzcG9uZCB0byB0aGUgLndpbmRvdyBwcm9wZXJ0eSBvZiBvdGhlciBY
RXZlbnQncwogICAgIC8vIGJ1dCBkb2VzIGluIHRoZSBjYXNlIG9mIEtleVByZXNzLCBLZXlSZWxl
YXNlLCBCdXR0b25QcmVzcywgQnV0dG9uUmVsZWFzZSwgYW5kIE1vdGlvbk5vdGlmeQogICAgIC8v
IGV2ZW50czsgdGh1cywgdGhpcyBpcyByaWdodDoKLSNpZiBIQVZFKFFUNSkKICAgICBRV2luZG93
KiB3aW5kb3cgPSBwYWdlQ2xpZW50ID8gcGFnZUNsaWVudC0+b3duZXJXaW5kb3coKSA6IDA7CiAg
ICAgeEV2ZW50LT54YW55LndpbmRvdyA9IHdpbmRvdyA/IHdpbmRvdy0+d2luSWQoKSA6IDA7Ci0j
ZWxzZQotICAgIFFXaWRnZXQqIG93bmVyV2lkZ2V0ID0gcGFnZUNsaWVudCA/IHBhZ2VDbGllbnQt
Pm93bmVyV2lkZ2V0KCkgOiAwOwotICAgIHhFdmVudC0+eGFueS53aW5kb3cgPSBvd25lcldpZGdl
dCA/IG93bmVyV2lkZ2V0LT53aW5kb3coKS0+d2luSWQoKSA6IDA7Ci0jZW5kaWYKIH0KIAogdm9p
ZCBQbHVnaW5WaWV3Ojppbml0WEV2ZW50KFhFdmVudCogeEV2ZW50KQpAQCAtNjA2LDMyICs1MzYs
OCBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgICAgICByZXR1
cm47CiAgICAgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UgPSBmYWxzZTsKIAotI2lmICFIQVZF
KFFUNSkgLy8gV2luZG93ZWQgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIHdpdGggUXQ1IHlldAotICAg
IGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgUVdpZGdldCogd2lkZ2V0ID0gc3RhdGljX2Nh
c3Q8UVdpZGdldCo+KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotICAgICAgICB3aWRnZXQtPnNl
dEdlb21ldHJ5KG1fd2luZG93UmVjdCk7Ci0KLSAgICAgICAgLy8gQ3V0IG91dCBhcmVhcyBvZiB0
aGUgcGx1Z2luIG9jY2x1ZGVkIGJ5IGlmcmFtZSBzaGltcwotICAgICAgICBWZWN0b3I8SW50UmVj
dD4gY3V0T3V0UmVjdHM7Ci0gICAgICAgIFFSZWdpb24gY2xpcFJlZ2lvbiA9IFFSZWdpb24obV9j
bGlwUmVjdCk7Ci0gICAgICAgIGdldFBsdWdpbk9jY2x1c2lvbnMobV9lbGVtZW50LCB0aGlzLT5w
YXJlbnQoKSwgZnJhbWVSZWN0KCksIGN1dE91dFJlY3RzKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjdXRPdXRSZWN0cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgY3V0T3V0
UmVjdHNbaV0ubW92ZSgtZnJhbWVSZWN0KCkueCgpLCAtZnJhbWVSZWN0KCkueSgpKTsKLSAgICAg
ICAgICAgIGNsaXBSZWdpb24gPSBjbGlwUmVnaW9uLnN1YnRyYWN0ZWQoUVJlZ2lvbihjdXRPdXRS
ZWN0c1tpXSkpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGlmIHNldE1hc2sgaXMgc2V0IHdpdGgg
YW4gZW1wdHkgUVJlZ2lvbiwgbm8gY2xpcHBpbmcgd2lsbAotICAgICAgICAvLyBiZSBwZXJmb3Jt
ZWQsIHNvIGluIHRoYXQgY2FzZSB3ZSBoaWRlIHRoZSBwbHVnaW4gdmlldwotICAgICAgICB3aWRn
ZXQtPnNldFZpc2libGUoIWNsaXBSZWdpb24uaXNFbXB0eSgpKTsKLSAgICAgICAgd2lkZ2V0LT5z
ZXRNYXNrKGNsaXBSZWdpb24pOwotCi0gICAgICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93UmVj
dC54KCk7Ci0gICAgICAgIG1fbnBXaW5kb3cueSA9IG1fd2luZG93UmVjdC55KCk7Ci0gICAgfSBl
bHNlCi0jZW5kaWYKLSAgICB7Ci0gICAgICAgIG1fbnBXaW5kb3cueCA9IDA7Ci0gICAgICAgIG1f
bnBXaW5kb3cueSA9IDA7Ci0gICAgfQorICAgIG1fbnBXaW5kb3cueCA9IDA7CisgICAgbV9ucFdp
bmRvdy55ID0gMDsKIAogICAgIC8vIElmIHRoZSB3aWR0aCBvciBoZWlnaHQgYXJlIG51bGwsIHNl
dCB0aGUgY2xpcFJlY3QgdG8gbnVsbCwgaW5kaWNhdGluZyB0aGF0CiAgICAgLy8gdGhlIHBsdWdp
biBpcyBub3QgdmlzaWJsZS9zY3JvbGxlZCBvdXQuCkBAIC02NzYsMTEgKzU4Miw2IEBAIHZvaWQg
UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKLQotI2lmICFIQVZF
KFFUNSkgLy8gV2luZG93ZWQgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIHdpdGggUXQ1IHlldC4KLSAg
ICBpZiAoaXNTZWxmVmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCi0gICAgICAg
IHN0YXRpY19jYXN0PFFXaWRnZXQqPihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKS0+c2V0VmlzaWJs
ZSh2aXNpYmxlKTsKLSNlbmRpZgogfQogCiBOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RS
ZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBi
dWYpCkBAIC03NTEsMTIgKzY1Miw4IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1
ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlCiAKICAgICBj
YXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewogICAgICAgICBRV2ViUGFnZUNsaWVudCogY2xpZW50
ID0gcGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0jaWYgSEFWRShRVDUpCiAgICAgICAgIFFXaW5kb3cq
IHdpbmRvdyA9IGNsaWVudCA/IGNsaWVudC0+b3duZXJXaW5kb3coKSA6IDA7CiAgICAgICAgICpy
ZWludGVycHJldF9jYXN0PFhJRCo+KHZhbHVlKSA9IHdpbmRvdyA/IHdpbmRvdy0+d2luSWQoKSA6
IDA7Ci0jZWxzZQotICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxYSUQqPih2YWx1ZSkgPSBjbGll
bnQgPyBjbGllbnQtPm93bmVyV2lkZ2V0KCktPndpbmRvdygpLT53aW5JZCgpIDogMDsKLSNlbmRp
ZgogICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTc3NiwxOSArNjczLDYgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdl
dFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmUKIAog
dm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewot
I2lmICFIQVZFKFFUNSkgLy8gV2luZG93ZWQgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIHdpdGggUXQ1
IHlldC4KLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIGlmIChwbGF0Zm9ybVdpZGdl
dCgpKSB7Ci0gICAgICAgICAgICAvLyB1cGRhdGUoKSB3aWxsIHNjaGVkdWxlIGEgcmVwYWludCBv
ZiB0aGUgd2lkZ2V0IHNvIGVuc3VyZQotICAgICAgICAgICAgLy8gaXRzIGtub3dsZWRnZSBvZiBp
dHMgcG9zaXRpb24gb24gdGhlIHBhZ2UgaXMgdXAgdG8gZGF0ZS4KLSAgICAgICAgICAgIFFXaWRn
ZXQqIHcgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4ocGxhdGZvcm1XaWRnZXQoKSk7Ci0gICAgICAg
ICAgICB3LT5zZXRHZW9tZXRyeShtX3dpbmRvd1JlY3QpOwotICAgICAgICAgICAgdy0+dXBkYXRl
KHJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQogICAg
IGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKIH0KIApAQCAtODQ5LDEyICs3
MzMsNyBAQCBzdGF0aWMgYm9vbCBnZXRWaXN1YWxBbmRDb2xvcm1hcChpbnQgZGVwdGgsIFZpc3Vh
bComIHZpc3VhbCwgQ29sb3JtYXAmIGNvbG9ybWFwLAogICAgIHZpc3VhbCA9IDA7CiAgICAgY29s
b3JtYXAgPSAwOwogCi0jaWYgIUhBVkUoUVQ1KSAmJiAhZGVmaW5lZChRVF9OT19YUkVOREVSKQot
ICAgIHN0YXRpYyBjb25zdCBib29sIHVzZVhSZW5kZXIgPSBxZ2V0ZW52KCJRVF9YMTFfTk9fWFJF
TkRFUiIpLmlzTnVsbCgpOyAvLyBTaG91bGQgYWxzbyBjaGVjayBmb3IgWFJlbmRlciA+PSAwLjUK
LSNlbHNlCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgdXNlWFJlbmRlciA9IGZhbHNlOwotI2VuZGlm
Ci0gICAgaWYgKCF1c2VYUmVuZGVyICYmIGZvcmNlQVJHQjMyKQorICAgIGlmIChmb3JjZUFSR0Iz
MikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaW50IG52aTsKQEAgLTg2NywyMiArNzQ2
LDcgQEAgc3RhdGljIGJvb2wgZ2V0VmlzdWFsQW5kQ29sb3JtYXAoaW50IGRlcHRoLCBWaXN1YWwq
JiB2aXN1YWwsIENvbG9ybWFwJiBjb2xvcm1hcCwKICAgICBpZiAoIXh2aSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0jaWYgIUhBVkUoUVQ1KSAmJiAhZGVmaW5lZChRVF9OT19YUkVOREVSKQot
ICAgIGlmIChmb3JjZUFSR0IzMikgewotICAgICAgICBmb3IgKGludCBpZHggPSAwOyBpZHggPCBu
dmk7ICsraWR4KSB7Ci0gICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJl
bmRlckZpbmRWaXN1YWxGb3JtYXQoeDExRGlzcGxheSgpLCB4dmlbaWR4XS52aXN1YWwpOwotICAg
ICAgICAgICAgaWYgKGZvcm1hdC0+dHlwZSA9PSBQaWN0VHlwZURpcmVjdCAmJiBmb3JtYXQtPmRp
cmVjdC5hbHBoYU1hc2spIHsKLSAgICAgICAgICAgICAgICAgdmlzdWFsID0geHZpW2lkeF0udmlz
dWFsOwotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpZiAoIXZpc3VhbCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVs
c2UKLSNlbmRpZgotICAgIHsKLSAgICAgICAgdmlzdWFsID0geHZpWzBdLnZpc3VhbDsKLSAgICB9
CisgICAgdmlzdWFsID0geHZpWzBdLnZpc3VhbDsKICAgICBBU1NFUlQodmlzdWFsKTsKIAogICAg
IFhGcmVlKHh2aSk7CkBAIC04OTgsNTAgKzc2MiwxOCBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRm
b3JtU3RhcnQoKQogCiAgICAgaWYgKCF4MTFFbnZpcm9ubWVudC5kaXNwbGF5KSB7CiAgICAgICAg
IERpc3BsYXkqIGRpc3BsYXk7Ci0jaWYgSEFWRShRVDUpCiAgICAgICAgIGRpc3BsYXkgPSBzdGF0
aWNfY2FzdDxEaXNwbGF5Kj4oUUd1aUFwcGxpY2F0aW9uOjpwbGF0Zm9ybU5hdGl2ZUludGVyZmFj
ZSgpLT5uYXRpdmVSZXNvdXJjZUZvcldpbmRvdygiZGlzcGxheSIsIDApKTsKLSNlbHNlCi0gICAg
ICAgIGRpc3BsYXkgPSBRWDExSW5mbzo6ZGlzcGxheSgpOwotI2VuZGlmCiAgICAgICAgIHgxMUVu
dmlyb25tZW50LmRpc3BsYXkgPSBkaXNwbGF5OwogICAgICAgICB4MTFFbnZpcm9ubWVudC5zY3Jl
ZW5JRCA9IFhEZWZhdWx0U2NyZWVuKGRpc3BsYXkpOwogICAgICAgICB4MTFFbnZpcm9ubWVudC5k
aXNwbGF5RGVwdGggPSBYRGVmYXVsdERlcHRoKGRpc3BsYXksIHgxMUVudmlyb25tZW50LnNjcmVl
bklEKTsKICAgICAgICAgeDExRW52aXJvbm1lbnQucm9vdFdpbmRvd0lEID0gWERlZmF1bHRSb290
V2luZG93KGRpc3BsYXkpOwogICAgIH0KIAotI2lmIEhBVkUoUVQ1KQogICAgIC8vIFdpbmRvd2Vk
IG1vZGUgaXMgbm90IHN1cHBvcnRlZCB3aXRoIFF0NSB5ZXQuCiAgICAgaWYgKG1faXNXaW5kb3dl
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLSAgICBpZiAobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmdldHZhbHVlKSB7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOwotI2lmIFVTRShKU0MpCi0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwotI2VuZGlmCi0gICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNY
RW1iZWQsICZtX25lZWRzWEVtYmVkKTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwotICAgIH0KLQot
ICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgUVdlYlBhZ2VDbGllbnQqIGNsaWVudCA9
IHBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCAmJiBjbGll
bnQpIHsKLSAgICAgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KG5ldyBQbHVnaW5Db250YWluZXJR
dCh0aGlzLCBjbGllbnQtPm93bmVyV2lkZ2V0KCkpKTsKLSAgICAgICAgICAgIC8vIHN5bmMgb3Vy
IFhFbWJlZCBjb250YWluZXIgd2luZG93IGNyZWF0aW9uIGJlZm9yZSBzZW5kaW5nIHRoZSB4aWQg
dG8gcGx1Z2lucy4KLSAgICAgICAgICAgIFFBcHBsaWNhdGlvbjo6c3luY1goKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgICAgICBtX3N0
YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSNlbmRpZiAvLyBIQVZFKFFUNSkKLSAgICB7
Ci0gICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOwotICAgICAgICBtX3BsdWdpbkRpc3BsYXkg
PSBnZXRQbHVnaW5EaXNwbGF5KCk7Ci0gICAgfQorICAgIHNldFBsYXRmb3JtV2lkZ2V0KDApOwor
ICAgIG1fcGx1Z2luRGlzcGxheSA9IGdldFBsdWdpbkRpc3BsYXkoKTsKIAogICAgIC8vIElmIHRo
ZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBhcmUgbm90IHplcm8gd2Ugc2hvdyB0aGUgUGx1Z2luVmll
dy4KICAgICBpZiAoIWZyYW1lUmVjdCgpLmlzRW1wdHkoKSkKQEAgLTk1MCw0NyArNzgyLDIxIEBA
IGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAgICAgTlBTZXRXaW5kb3dDYWxsYmFj
a1N0cnVjdCogd3NpID0gbmV3IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QoKTsKICAgICB3c2kt
PnR5cGUgPSAwOwogCi0jaWYgIUhBVkUoUVQ1KQotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAg
ICAgICAgY29uc3QgUVgxMUluZm8qIHgxMUluZm8gPSAmc3RhdGljX2Nhc3Q8UVdpZGdldCo+KHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkpLT54MTFJbmZvKCk7Ci0KLSAgICAgICAgd3NpLT5kaXNwbGF5
ID0geDExSW5mby0+ZGlzcGxheSgpOwotICAgICAgICB3c2ktPnZpc3VhbCA9IChWaXN1YWwqKXgx
MUluZm8tPnZpc3VhbCgpOwotICAgICAgICB3c2ktPmRlcHRoID0geDExSW5mby0+ZGVwdGgoKTsK
LSAgICAgICAgd3NpLT5jb2xvcm1hcCA9IHgxMUluZm8tPmNvbG9ybWFwKCk7Ci0KLSAgICAgICAg
bV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OwotICAgICAgICBtX25wV2luZG93
LndpbmRvdyA9ICh2b2lkKilzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4ocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSktPndpbklkKCk7Ci0gICAgICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsKLSAgICAgICAg
bV9ucFdpbmRvdy5oZWlnaHQgPSAtMTsKLSAgICB9IGVsc2UKLSNlbmRpZgotICAgIHsKLSNpZiAh
SEFWRShRVDUpCi0gICAgICAgIGNvbnN0IFFYMTFJbmZvKiB4MTFJbmZvID0gJlFBcHBsaWNhdGlv
bjo6ZGVza3RvcCgpLT54MTFJbmZvKCk7Ci0gICAgICAgIGlmICgoeDExSW5mby0+ZGVwdGgoKSA9
PSAzMiB8fCAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVxdWlyZXNE
ZWZhdWx0U2NyZWVuRGVwdGgpKQotICAgICAgICAgICAgICYmIGdldFZpc3VhbEFuZENvbG9ybWFw
KDMyLCBtX3Zpc3VhbCwgbV9jb2xvcm1hcCwgLyogZm9yY2VBUkdCMzIgPSAqLyB0cnVlKSkKLSAg
ICAgICAgICAgIHdzaS0+ZGVwdGggPSAzMjsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCBkZXB0aCA9IGRpc3BsYXlEZXB0aCgpOwotICAgICAgICAgICAg
Ym9vbCBmb3VuZCA9IGdldFZpc3VhbEFuZENvbG9ybWFwKGRlcHRoLCBtX3Zpc3VhbCwgbV9jb2xv
cm1hcCwgLyogZm9yY2VBUkdCMzIgPSAqLyBmYWxzZSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGZvdW5kLCBmb3VuZCk7Ci0gICAgICAgICAgICB3c2ktPmRlcHRoID0gZGVwdGg7Ci0gICAg
ICAgIH0KLQotICAgICAgICB3c2ktPmRpc3BsYXkgPSB4MTFEaXNwbGF5KCk7Ci0gICAgICAgIHdz
aS0+dmlzdWFsID0gbV92aXN1YWw7Ci0gICAgICAgIHdzaS0+Y29sb3JtYXAgPSBtX2NvbG9ybWFw
OwotCi0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOwotICAg
ICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7IC8vIE5vdCB1c2VkPwotICAgICAgICBtX25wV2lu
ZG93LnggPSAwOwotICAgICAgICBtX25wV2luZG93LnkgPSAwOwotICAgICAgICBtX25wV2luZG93
LndpZHRoID0gLTE7Ci0gICAgICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gLTE7Ci0gICAgfQorICAg
IGludCBkZXB0aCA9IGRpc3BsYXlEZXB0aCgpOworICAgIGJvb2wgZm91bmQgPSBnZXRWaXN1YWxB
bmRDb2xvcm1hcChkZXB0aCwgbV92aXN1YWwsIG1fY29sb3JtYXAsIC8qIGZvcmNlQVJHQjMyID0g
Ki8gZmFsc2UpOworICAgIEFTU0VSVF9VTlVTRUQoZm91bmQsIGZvdW5kKTsKKyAgICB3c2ktPmRl
cHRoID0gZGVwdGg7CisKKyAgICB3c2ktPmRpc3BsYXkgPSB4MTFEaXNwbGF5KCk7CisgICAgd3Np
LT52aXN1YWwgPSBtX3Zpc3VhbDsKKyAgICB3c2ktPmNvbG9ybWFwID0gbV9jb2xvcm1hcDsKKwor
ICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgIG1fbnBXaW5k
b3cud2luZG93ID0gMDsgLy8gTm90IHVzZWQ/CisgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICBt
X25wV2luZG93LnkgPSAwOworICAgIG1fbnBXaW5kb3cud2lkdGggPSAtMTsKKyAgICBtX25wV2lu
ZG93LmhlaWdodCA9IC0xOwogCiAgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3NpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCmluZGV4IGFkZmQyZDM2
YjQxYTQxNjc2ZjNlOWQ2MDNhMmZiYTZjN2FiMWViOTcuLjE0MmZhODMwNTgwZDAzYWZlMTEyNDcx
MjNiY2EwOTFiNjA0NWM1NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpblZpZXdXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdp
blZpZXdXaW4uY3BwCkBAIC05MywxMSArOTMsNyBAQAogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5j
bHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKLSNpZiBIQVZFKFFUNSkKICNpbmNsdWRlIDxRV2luZG93
PgotI2Vsc2UKLSNpbmNsdWRlIDxRV2lkZ2V0PgotI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKFdYKQpAQCAtMTE2LDEzICsxMTIsOCBAQCBzdGF0aWMgaW5saW5lIEhXTkQgd2luZG93SGFu
ZGxlRm9yUGFnZUNsaWVudChQbGF0Zm9ybVBhZ2VDbGllbnQgY2xpZW50KQogI2VsaWYgUExBVEZP
Uk0oUVQpCiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybiAwOwotI2lmIEhBVkUoUVQ1
KQogICAgIGlmIChRV2luZG93KiB3aW5kb3cgPSBjbGllbnQtPm93bmVyV2luZG93KCkpCiAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEhXTkQ+KHdpbmRvdy0+d2luSWQoKSk7Ci0jZWxz
ZQotICAgIGlmIChRV2lkZ2V0KiBwbHVnaW5QYXJlbnQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCo+
KGNsaWVudC0+cGx1Z2luUGFyZW50KCkpKQotICAgICAgICByZXR1cm4gcGx1Z2luUGFyZW50LT53
aW5JZCgpOwotI2VuZGlmCiAgICAgcmV0dXJuIDA7CiAjZWxpZiBQTEFURk9STShXWCkKICAgICBp
ZiAoIWNsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnByaSBiL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0LnByaQppbmRleCBhMmQ5ZDRiZGY1ZjQ1NmExNDllODFiNmRmMWVkMWE0
NzlhZWVmNTk0Li41YThmNGRmZTMzNzEzNWEyYzNhZjI0Y2IwMGMyM2E1NTNmYzU0NThmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC5wcmkKKysrIGIvU291cmNlL1dlYktpdC9XZWJL
aXQucHJpCkBAIC0zNyw3ICszNyw3IEBAIEhFQURFUlMgKz0gXAogICAgICQkUFdEL3F0L0FwaS9x
d2VicGx1Z2luZGF0YWJhc2VfcC5oIFwKICAgICAkJFBXRC9xdC9BcGkvcWh0dHBoZWFkZXJfcC5o
CiAKLWhhdmVRdCg1KTogY29udGFpbnMoQ09ORklHLCBhY2Nlc3NpYmlsaXR5KSB7Citjb250YWlu
cyhDT05GSUcsIGFjY2Vzc2liaWxpdHkpIHsKICAgICBTT1VSQ0VTICs9ICQkUFdEL3F0L0FwaS9x
d2Vidmlld2FjY2Vzc2libGUuY3BwCiAgICAgSEVBREVSUyArPSAkJFBXRC9xdC9BcGkvcXdlYnZp
ZXdhY2Nlc3NpYmxlX3AuaAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnBy
aSBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcmkKaW5kZXggYjE2ZDZmMTMwYTRmNTk3YzVjNzNm
YzQwYTRiZWI4NmIyNzUzM2IzNi4uMmJkZTBhM2M5ODM1YzRlMTZlNTY3NjM5Y2NiM2RiODYxYzUz
MjBkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQxLnByaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdDEucHJpCkBAIC0zMCwyMiArMzAsMTYgQEAgY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX1ZJREVPPTEpOmNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRLSVQ9MSkgewogfQog
CiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OPTEpfGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFM9MSkgewotICAgIGhhdmVRdCg1KSB7
Ci0gICAgICAgIFFUICs9IHNlbnNvcnMKLSAgICB9IGVsc2UgewotICAgICAgICBDT05GSUcgKj0g
bW9iaWxpdHkKLSAgICAgICAgTU9CSUxJVFkgKj0gc2Vuc29ycwotICAgIH0KKyAgICBRVCArPSBz
ZW5zb3JzCiB9CiAKLWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9HRU9MT0NBVElPTj0xKTpoYXZl
UXQoNSk6IFFUICs9IGxvY2F0aW9uCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfR0VPTE9DQVRJ
T049MSk6IFFUICs9IGxvY2F0aW9uCiAKIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKTogREVGSU5F
UyArPSBXVEZfVVNFX1RFWFRVUkVfTUFQUEVSPTEKIAogcGx1Z2luX2JhY2tlbmRfeGxpYjogUEtH
Q09ORklHICs9IHgxMQogCi1RVCArPSBuZXR3b3JrCi1oYXZlUXQoNSk6IFFUICs9IHdpZGdldHMg
cHJpbnRzdXBwb3J0IHF1aWNrCitRVCArPSBuZXR3b3JrIHdpZGdldHMgcHJpbnRzdXBwb3J0IHF1
aWNrCiAKIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfVEVYVFVSRV9NQVBQRVJfR0w9MSl8Y29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKICAgICBRVCAqPSBvcGVuZ2wKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0MS5wcm8gYi9Tb3VyY2UvV2ViS2l0L1dlYktpdDEu
cHJvCmluZGV4IDhiMDMwYmZjOTRhY2FlODFjMmZmN2JhMmY3NDZlMGFhYmRmNjZhMjAuLjgyY2Qw
Y2QwYzFkMmIxMjE4ODU3MjJhYmJkYzY4NDBmNWQ5Y2U3ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0MS5wcm8KKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQxLnBybwpAQCAtOTQs
NyArOTQsNyBAQCBIRUFERVJTICs9IFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0
Zm9ybVN0cmF0ZWdpZXNRdC5oIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVu
dENvbnZlcnNpb24uaAogCi1oYXZlUXQoNSk6IGNvbnRhaW5zKFFUX0NPTkZJRyxhY2Nlc3NpYmls
aXR5KSB7Citjb250YWlucyhRVF9DT05GSUcsYWNjZXNzaWJpbGl0eSkgewogICAgIFNPVVJDRVMg
Kz0gJCRQV0QvcXQvQXBpL3F3ZWJ2aWV3YWNjZXNzaWJsZS5jcHAKICAgICBIRUFERVJTICs9ICQk
UFdEL3F0L0FwaS9xd2Vidmlld2FjY2Vzc2libGVfcC5oIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcAppbmRleCAzNDNjMmExNjYxZjBiNmFkY2YxY2ZiODU2MGMz
Yzg3ZWIzODRhMGZiLi4zZThhYmJhZDlkODE4OWJmNmM5YTJiM2ZkYjAzYzlmOWY4NmEwMmE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcApAQCAtMzA5LDkgKzMw
OSw3IEBAIGJvb2wgUUdyYXBoaWNzV2ViVmlldzo6c2NlbmVFdmVudChRRXZlbnQqIGV2ZW50KQog
ICAgIGlmIChkLT5wYWdlICYmIChldmVudC0+dHlwZSgpID09IFFFdmVudDo6VG91Y2hCZWdpbgog
ICAgICAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpUb3VjaEVuZAogICAg
ICAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpUb3VjaFVwZGF0ZQotI2lm
IEhBVkUoUVQ1KQogICAgICAgICAgICAgICAgIHx8IGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpU
b3VjaENhbmNlbAotI2VuZGlmCiAgICAgICAgKSkgewogICAgICAgICBkLT5wYWdlLT5ldmVudChl
dmVudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuaAppbmRleCAxNWZl
MDg3ZDYxOTcwYTFhYmIxM2M2NGIyNDdmOGM1YTk5NzE1NGEwLi4wZjlmMTdiNDgzODQ1OGIyMjAy
MjIwN2RiNDI0NTYwYzgwYWI3NjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
Z3JhcGhpY3N3ZWJ2aWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vi
dmlldy5oCkBAIC0yMywxMSArMjMsNyBAQAogI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKICNp
bmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1ZGUgPFF0Q29yZS9xdXJsLmg+Ci0jaWYgUVRfVkVS
U0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDAsIDApCiAjaW5jbHVkZSA8UXRXaWRnZXRzL3Fn
cmFwaGljc3dpZGdldC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxRdEd1aS9xZ3JhcGhpY3N3aWRnZXQu
aD4KLSNlbmRpZgogI2luY2x1ZGUgPFF0R3VpL3FldmVudC5oPgogI2luY2x1ZGUgPFF0R3VpL3Fp
Y29uLmg+CiAjaW5jbHVkZSA8UXRHdWkvcXBhaW50ZXIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJh
bWUuY3BwCmluZGV4IGRhYzQxNjVlOTYyNWY3YjczM2NjNzRhOWVhYTYzMjE0NThjM2JmMTcuLjgw
MjZmMzVkNjBlZTZhMTUzY2YwNTg2NWQ5YzQxZWMzMDQ2Y2QzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmZyYW1lLmNwcApAQCAtOTcsMTAgKzk3LDYgQEAKICNpbmNsdWRlIDxxcmVnaW9uLmg+CiAj
aW5jbHVkZSA8cW5ldHdvcmtyZXF1ZXN0Lmg+CiAKLSNpZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZF
TlRTKSAmJiAhSEFWRShRVDUpCi1RVE1fVVNFX05BTUVTUEFDRQotI2VuZGlmCi0KIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiAvLyBmcm9tIHRleHQvcWZvbnQuY3BwCkBAIC02NTAsMTEgKzY0
Niw3IEBAIFFXZWJGcmFtZTo6flFXZWJGcmFtZSgpCiAKICAgICBUaGUgb3duZXJzaGlwIG9mIFxh
IG9iamVjdCBpcyBzcGVjaWZpZWQgdXNpbmcgXGEgb3duLgogKi8KLSNpZiBRVF9WRVJTSU9OID49
IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkKIHZvaWQgUVdlYkZyYW1lOjphZGRUb0phdmFTY3Jp
cHRXaW5kb3dPYmplY3QoY29uc3QgUVN0cmluZyAmbmFtZSwgUU9iamVjdCAqb2JqZWN0LCBWYWx1
ZU93bmVyc2hpcCBvd25lcnNoaXApCi0jZWxzZQotdm9pZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNj
cmlwdFdpbmRvd09iamVjdChjb25zdCBRU3RyaW5nICZuYW1lLCBRT2JqZWN0ICpvYmplY3QsIFFT
Y3JpcHRFbmdpbmU6OlZhbHVlT3duZXJzaGlwIG93bmVyc2hpcCkKLSNlbmRpZgogewogICAgIGlm
ICghcGFnZSgpLT5zZXR0aW5ncygpLT50ZXN0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6SmF2YXNj
cmlwdEVuYWJsZWQpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWUuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oCmlu
ZGV4IDZkNDg2ZDUwZWNhYjY4ZGQ3MDg5ZTEyZDJhMTgzM2MyN2JlMWU4MzYuLmNhOTY2NjFlMzVj
YWM1MjY2ZDU1ZjBmNDE4NzNjNTY2NzBkYzM5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5o
CkBAIC0yOCwxMCArMjgsNiBAQAogI2luY2x1ZGUgPFF0TmV0d29yay9xbmV0d29ya2FjY2Vzc21h
bmFnZXIuaD4KICNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCiAKLSNpZiBRVF9WRVJTSU9OIDwg
UVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQotI2luY2x1ZGUgPFF0U2NyaXB0L3FzY3JpcHRlbmdp
bmUuaD4KLSNlbmRpZgotCiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFSZWN0OwogY2xhc3Mg
UVBvaW50OwpAQCAtMTI0LDEzICsxMjAsMTEgQEAgcHJpdmF0ZToKICAgICB+UVdlYkZyYW1lKCk7
CiAKIHB1YmxpYzoKLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkK
ICAgICBlbnVtIFZhbHVlT3duZXJzaGlwIHsKICAgICAgICAgUXRPd25lcnNoaXAsCiAgICAgICAg
IFNjcmlwdE93bmVyc2hpcCwKICAgICAgICAgQXV0b093bmVyc2hpcAogICAgIH07Ci0jZW5kaWYK
IAogICAgIFFXZWJQYWdlICpwYWdlKCkgY29uc3Q7CiAKQEAgLTEzOSwxMSArMTMzLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0SHRtbChjb25zdCBRU3RyaW5nICZodG1sLCBjb25zdCBRVXJsICZi
YXNlVXJsID0gUVVybCgpKTsKICAgICB2b2lkIHNldENvbnRlbnQoY29uc3QgUUJ5dGVBcnJheSAm
ZGF0YSwgY29uc3QgUVN0cmluZyAmbWltZVR5cGUgPSBRU3RyaW5nKCksIGNvbnN0IFFVcmwgJmJh
c2VVcmwgPSBRVXJsKCkpOwogCi0jaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUs
IDAsIDApCiAgICAgdm9pZCBhZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoY29uc3QgUVN0cmlu
ZyAmbmFtZSwgUU9iamVjdCAqb2JqZWN0LCBWYWx1ZU93bmVyc2hpcCBvd25lcnNoaXAgPSBRdE93
bmVyc2hpcCk7Ci0jZWxzZQotICAgIHZvaWQgYWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KGNv
bnN0IFFTdHJpbmcgJm5hbWUsIFFPYmplY3QgKm9iamVjdCwgUVNjcmlwdEVuZ2luZTo6VmFsdWVP
d25lcnNoaXAgb3duZXJzaGlwID0gUVNjcmlwdEVuZ2luZTo6UXRPd25lcnNoaXApOwotI2VuZGlm
CiAgICAgUVN0cmluZyB0b0h0bWwoKSBjb25zdDsKICAgICBRU3RyaW5nIHRvUGxhaW5UZXh0KCkg
Y29uc3Q7CiAgICAgUVN0cmluZyByZW5kZXJUcmVlRHVtcCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZV9wLmgKaW5kZXggMjc2MmMyYmU3N2VjOTQ1ZWZhZTY5YzA0MjNlNWUyNzQyZTQ3
OTYxNS4uNDI0NzNhMTgxZjIwZTJmZGUxMDgxZGI5YmUzMWIwN2ZiMWEzYzcwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWVfcC5oCkBAIC0zMCw5ICszMCw2IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRTKQogI2luY2x1ZGUgInFv
cmllbnRhdGlvbnNlbnNvci5oIgotI2lmIFFUX1ZFUlNJT04gPCBRVF9WRVJTSU9OX0NIRUNLKDUs
IDAsIDApCi11c2luZyBRVE1fTkFNRVNQQUNFOjpRT3JpZW50YXRpb25TZW5zb3I7Ci0jZW5kaWYK
ICNlbmRpZiAvLyBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRTKS4KICNpbmNsdWRlICJxd2ViZWxl
bWVudC5oIgogI2luY2x1ZGUgInd0Zi9SZWZQdHIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNw
cAppbmRleCA4ZTk2MzNkMTg5N2Y4YjIzMWFkMzMwMjljMWMyNGZlMTExYzFmNjY4Li4wOGU4NjE4
M2E2YjZlYTQ0MDg3ZWYyNDcxZmQ5MDAyZDRiNjA0MGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBh
Z2UuY3BwCkBAIC0xMTMsNyArMTEzLDYgQEAKICNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAjZW5k
aWYgLy8gUV9PU19XSU4zMgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlV0
aWxzUXQuaCIKICNpbmNsdWRlICJXZWJFdmVudENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJXaW5k
b3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgpAQCAtMzE2Miw5ICszMTYx
LDcgQEAgYm9vbCBRV2ViUGFnZTo6ZXZlbnQoUUV2ZW50ICpldikKICAgICBjYXNlIFFFdmVudDo6
VG91Y2hCZWdpbjoKICAgICBjYXNlIFFFdmVudDo6VG91Y2hVcGRhdGU6CiAgICAgY2FzZSBRRXZl
bnQ6OlRvdWNoRW5kOgotI2lmIEhBVkUoUVQ1KQogICAgIGNhc2UgUUV2ZW50OjpUb3VjaENhbmNl
bDoKLSNlbmRpZgogICAgICAgICAvLyBSZXR1cm4gd2hldGhlciB0aGUgZGVmYXVsdCBhY3Rpb24g
d2FzIGNhbmNlbGxlZCBpbiB0aGUgSlMgZXZlbnQgaGFuZGxlcgogICAgICAgICByZXR1cm4gZC0+
dG91Y2hFdmVudChzdGF0aWNfY2FzdDxRVG91Y2hFdmVudCo+KGV2KSk7CiAjaWZuZGVmIFFUX05P
X1BST1BFUlRJRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCmluZGV4IDBiZjM1ZTI0NzFmMWNjM2Jk
NDQ3YzEzY2IwZjg4OGE1MmY0ZDRhMTguLjY2Zjg5NjA5YjAwMzg0Y2JhZjlhOTBlMTYwZDlkN2Ix
NzBkMGQwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKKysr
IGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaApAQCAtMjYsMTEgKzI2LDcgQEAKIAog
I2luY2x1ZGUgPFF0Q29yZS9xb2JqZWN0Lmg+CiAjaW5jbHVkZSA8UXRDb3JlL3F1cmwuaD4KLSNp
ZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkKICNpbmNsdWRlIDxRdFdp
ZGdldHMvcXdpZGdldC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxRdEd1aS9xd2lkZ2V0Lmg+Ci0jZW5k
aWYKIAogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRTmV0d29ya1Byb3h5OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAKaW5kZXggNTg4ZGNmN2FhNWNlNTg1YjI4MjBhNWNhMGZk
M2ZlODJkODNkMDE2MC4uNzc0ZGE1ZDMxMGYxZTVlY2ViZjQ3MzY4MWQwODYwYmQ5MTdkZTE3OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCkBAIC00NiwxMSArNDYsNyBAQAog
I2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKIAogI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4KLSNpZiBI
QVZFKFFUNSkKICNpbmNsdWRlIDxRU3RhbmRhcmRQYXRocz4KLSNlbHNlCi0jaW5jbHVkZSA8UURl
c2t0b3BTZXJ2aWNlcz4KLSNlbmRpZgogI2luY2x1ZGUgPFFEaXI+CiAjaW5jbHVkZSA8UUhhc2g+
CiAjaW5jbHVkZSA8UVNoYXJlZERhdGE+CkBAIC0xMTQ1LDExICsxMTQxLDcgQEAgdm9pZCBRV2Vi
U2V0dGluZ3M6OmVuYWJsZVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFFTdHJpbmcmIHBhdGgpCiAK
ICAgICBpZiAocGF0aC5pc0VtcHR5KCkpIHsKIAotI2lmIEhBVkUoUVQ1KQogICAgICAgICBzdG9y
YWdlUGF0aCA9IFFTdGFuZGFyZFBhdGhzOjp3cml0YWJsZUxvY2F0aW9uKFFTdGFuZGFyZFBhdGhz
OjpEYXRhTG9jYXRpb24pOwotI2Vsc2UKLSAgICAgICAgc3RvcmFnZVBhdGggPSBRRGVza3RvcFNl
cnZpY2VzOjpzdG9yYWdlTG9jYXRpb24oUURlc2t0b3BTZXJ2aWNlczo6RGF0YUxvY2F0aW9uKTsK
LSNlbmRpZgogICAgICAgICBpZiAoc3RvcmFnZVBhdGguaXNFbXB0eSgpKQogICAgICAgICAgICAg
c3RvcmFnZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoUURpcjo6aG9t
ZVBhdGgoKSwgUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25OYW1lKCkpOwogICAgIH0gZWxz
ZQpAQCAtMTE2OCwxMSArMTE2MCw3IEBAIHZvaWQgUVdlYlNldHRpbmdzOjplbmFibGVQZXJzaXN0
ZW50U3RvcmFnZShjb25zdCBRU3RyaW5nJiBwYXRoKQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fTUVUQURBVEFfQ0FDSEUpCiAgICAgLy8gQWxsIGFwcGxpY2F0aW9ucyBjYW4gc2hhcmUgdGhl
IGNvbW1vbiBRdFdlYmtpdCBjYWNoZSBmaWxlKHMpLgogICAgIC8vIFBhdGggaXMgbm90IGNvbmZp
Z3VyYWJsZSBhbmQgdXNlcyBRRGVza3RvcFNlcnZpY2VzOjpDYWNoZUxvY2F0aW9uIGJ5IGRlZmF1
bHQuCi0jaWYgSEFWRShRVDUpCiAgICAgUVN0cmluZyBjYWNoZVBhdGggPSBRU3RhbmRhcmRQYXRo
czo6d3JpdGFibGVMb2NhdGlvbihRU3RhbmRhcmRQYXRoczo6Q2FjaGVMb2NhdGlvbik7Ci0jZWxz
ZQotICAgIFFTdHJpbmcgY2FjaGVQYXRoID0gUURlc2t0b3BTZXJ2aWNlczo6c3RvcmFnZUxvY2F0
aW9uKFFEZXNrdG9wU2VydmljZXM6OkNhY2hlTG9jYXRpb24pOwotI2VuZGlmCiAgICAgV2ViQ29y
ZTo6bWFrZUFsbERpcmVjdG9yaWVzKGNhY2hlUGF0aCk7CiAKICAgICBRRmlsZUluZm8gaW5mbyhj
YWNoZVBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuY3BwCmluZGV4IGE2MDgyY2Y2MzI4ZDE2
NTA2ZmU4YjllN2VhNmRiMjgwODkwZDgyNmQuLmY5MDc5MGYwYzRiN2I0ZjkxZmVjZDZlZjQzMzBl
NTdkNGNhM2FkNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5jcHAKQEAgLTM0LDEwICszNCw4
IEBACiAjaW5jbHVkZSAicWRpci5oIgogI2luY2x1ZGUgInFmaWxlLmgiCiAjaWZuZGVmIFFUX05P
X0FDQ0VTU0lCSUxJVFkKLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwg
MCkKICNpbmNsdWRlICJxd2Vidmlld2FjY2Vzc2libGVfcC5oIgogI2VuZGlmCi0jZW5kaWYKIAog
Y2xhc3MgUVdlYlZpZXdQcml2YXRlIHsKIHB1YmxpYzoKQEAgLTE1NCw3ICsxNTIsNiBAQCB2b2lk
IFFXZWJWaWV3UHJpdmF0ZTo6X3FfcGFnZURlc3Ryb3llZCgpCiAqLwogCiAjaWZuZGVmIFFUX05P
X0FDQ0VTU0lCSUxJVFkKLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwg
MCkKIHN0YXRpYyBRQWNjZXNzaWJsZUludGVyZmFjZSogYWNjZXNzaWJsZUludGVyZmFjZUZhY3Rv
cnkoY29uc3QgUVN0cmluZyYga2V5LCBRT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgUV9VTlVTRUQo
a2V5KQpAQCAtMTY4LDcgKzE2NSw2IEBAIHN0YXRpYyBRQWNjZXNzaWJsZUludGVyZmFjZSogYWNj
ZXNzaWJsZUludGVyZmFjZUZhY3RvcnkoY29uc3QgUVN0cmluZyYga2V5LCBRT2JqCiAgICAgcmV0
dXJuIDA7CiB9CiAjZW5kaWYKLSNlbmRpZgogCiAvKiEKICAgICBDb25zdHJ1Y3RzIGFuIGVtcHR5
IFFXZWJWaWV3IHdpdGggcGFyZW50IFxhIHBhcmVudC4KQEAgLTE5MSwxMCArMTg3LDggQEAgUVdl
YlZpZXc6OlFXZWJWaWV3KFFXaWRnZXQgKnBhcmVudCkKICAgICBzZXRGb2N1c1BvbGljeShRdDo6
V2hlZWxGb2N1cyk7CiAKICNpZm5kZWYgUVRfTk9fQUNDRVNTSUJJTElUWQotI2lmIFFUX1ZFUlNJ
T04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQogICAgIFFBY2Nlc3NpYmxlOjppbnN0YWxs
RmFjdG9yeShhY2Nlc3NpYmxlSW50ZXJmYWNlRmFjdG9yeSk7CiAjZW5kaWYKLSNlbmRpZgogfQog
CiAvKiEKQEAgLTczMiw5ICs3MjYsNyBAQCBib29sIFFXZWJWaWV3OjpldmVudChRRXZlbnQgKmUp
CiAgICAgICAgIH0gZWxzZSBpZiAoZS0+dHlwZSgpID09IFFFdmVudDo6VG91Y2hCZWdpbiAKICAg
ICAgICAgICAgICAgICAgICB8fCBlLT50eXBlKCkgPT0gUUV2ZW50OjpUb3VjaEVuZCAKICAgICAg
ICAgICAgICAgICAgICB8fCBlLT50eXBlKCkgPT0gUUV2ZW50OjpUb3VjaFVwZGF0ZQotI2lmIEhB
VkUoUVQ1KQogICAgICAgICAgICAgICAgICAgIHx8IGUtPnR5cGUoKSA9PSBRRXZlbnQ6OlRvdWNo
Q2FuY2VsCi0jZW5kaWYKICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgZC0+cGFn
ZS0+ZXZlbnQoZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3
LmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5oCmluZGV4IDkwZDBhOGUzYjIwNzE0
ZWNlYjFlMTgyMzJiOTQwMGFkYzQzNTczNDAuLmQ0YjRkZDkxNzVmMGQxODFjZjJiZDhiNWNkYTE4
MTk4YTUxMjdmMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3LmgK
KysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuaApAQCAtMjMsMTEgKzIzLDcgQEAK
IAogI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKICNpbmNsdWRlICJxd2VicGFnZS5oIgotI2lm
IFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQogI2luY2x1ZGUgPFF0V2lk
Z2V0cy9xd2lkZ2V0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPFF0R3VpL3F3aWRnZXQuaD4KLSNlbmRp
ZgogI2luY2x1ZGUgPFF0R3VpL3FpY29uLmg+CiAjaW5jbHVkZSA8UXRHdWkvcXBhaW50ZXIuaD4K
ICNpbmNsdWRlIDxRdENvcmUvcXVybC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAppbmRleCAyOTQxMmY3MDQ3NTE2M2MxNWM0MGYz
ZjZkNzc1ZDIwNjRhOGNhMWI2Li45MTIzMjBjY2RkYTYyYTQ4YjcyZWM3MzYzMmIyMTc2MGVjMmEx
ZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFF0LmNwcApAQCAtNzUsNyArNzUsNiBAQAogI2luY2x1ZGUgPHFldmVudGxvb3AuaD4KICNp
bmNsdWRlIDxxdG9vbHRpcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvcXQvVXRpbHNRdC5oPgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiAoKFVTRShHU1RSRUFNRVIp
ICYmICFkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKSkgfHwgVVNFKFFUX01VTFRJTUVESUEpIHx8
IFVTRShRVEtJVCkpCiAjaW5jbHVkZSAiRnVsbFNjcmVlblZpZGVvUXQuaCIKQEAgLTU0OSw3ICs1
NDgsNyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpzZXRUb29sVGlwKGNvbnN0IFN0cmluZyAmdGlw
LCBUZXh0RGlyZWN0aW9uKQogICAgICAgICB2aWV3LT5zZXRUb29sVGlwKFFTdHJpbmcoKSk7CiAg
ICAgICAgIFFUb29sVGlwOjpoaWRlVGV4dCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFFTdHJp
bmcgZHRpcCA9IFFMYXRpbjFTdHJpbmcoIjxwPiIpICsgZXNjYXBlSHRtbCh0aXApICsgUUxhdGlu
MVN0cmluZygiPC9wPiIpOworICAgICAgICBRU3RyaW5nIGR0aXAgPSBRTGF0aW4xU3RyaW5nKCI8
cD4iKSArIFFTdHJpbmcodGlwKS50b0h0bWxFc2NhcGVkKCkgKyBRTGF0aW4xU3RyaW5nKCI8L3A+
Iik7CiAgICAgICAgIHZpZXctPnNldFRvb2xUaXAoZHRpcCk7CiAgICAgfQogI2Vsc2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
UXQuY3BwCmluZGV4IGEyYzNjYjIxMDQ1YzEwNGRjMDAwZTU2OGNkNTFmZDNhYmMxZmRjNzAuLjRh
MTQ3MmM1YTU3NzUxMTFmYzkzNTA0YzE0YmYzNzBhMzZjYWEyYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcApA
QCAtMTYwNCwyMiArMTYwNCwxMyBAQCBQYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGll
bnRRdDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsCiAgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IHBhcmFtcyA9IHBhcmFtTmFtZXM7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+
IHZhbHVlcyA9IHBhcmFtVmFsdWVzOwogICAgICAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0
aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgewotI2lmIEhBVkUoUVQ1KQotICAgICAgICAgICAgY29u
c3QgYm9vbCBzaG91bGRJbmplY3RXbW9kZSA9IHRydWU7Ci0jZWxzZQogICAgICAgICAgICAgLy8g
SW5qZWN0IHdtb2RlPW9wYXF1ZSB3aGVuIHRoZXJlIGlzIG5vIGNsaWVudCBvciB0aGUgY2xpZW50
IGlzIG5vdCBhIFFXZWJWaWV3LgotICAgICAgICAgICAgUVdlYlBhZ2VDbGllbnQqIGNsaWVudCA9
IG1fd2ViRnJhbWUtPnBhZ2UoKS0+ZC0+Y2xpZW50LmdldCgpOwotICAgICAgICAgICAgY29uc3Qg
Ym9vbCBzaG91bGRJbmplY3RXbW9kZSA9ICEoY2xpZW50ICYmIHFvYmplY3RfY2FzdDxRV2lkZ2V0
Kj4oY2xpZW50LT5wbHVnaW5QYXJlbnQoKSkpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoc2hv
dWxkSW5qZWN0V21vZGUpIHsKLSAgICAgICAgICAgICAgICAvLyBJbmplY3Qgd21vZGU9b3BhcXVl
IHdoZW4gdGhlcmUgaXMgbm8gY2xpZW50IG9yIHRoZSBjbGllbnQgaXMgbm90IGEgUVdlYlZpZXcu
Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHdtb2RlSW5kZXggPSBwYXJhbXMuZmluZCgid21vZGUi
KTsKLSAgICAgICAgICAgICAgICBpZiAod21vZGVJbmRleCA9PSBXVEY6Om5vdEZvdW5kKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoIndtb2RlIik7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhbHVlcy5hcHBlbmQoIm9wYXF1ZSIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWVzW3dtb2RlSW5kZXhdLCAid2luZG93IikpCi0gICAg
ICAgICAgICAgICAgICAgIHZhbHVlc1t3bW9kZUluZGV4XSA9ICJvcGFxdWUiOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc2l6ZV90IHdtb2RlSW5kZXggPSBwYXJhbXMuZmluZCgid21vZGUi
KTsKKyAgICAgICAgICAgIGlmICh3bW9kZUluZGV4ID09IFdURjo6bm90Rm91bmQpIHsKKyAgICAg
ICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCJ3bW9kZSIpOworICAgICAgICAgICAgICAgIHZhbHVl
cy5hcHBlbmQoIm9wYXF1ZSIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZSh2YWx1ZXNbd21vZGVJbmRleF0sICJ3aW5kb3ciKSkKKyAgICAgICAgICAgICAgICB2YWx1
ZXNbd21vZGVJbmRleF0gPSAib3BhcXVlIjsKICAgICAgICAgfQogCiAgICAgICAgIFJlZlB0cjxQ
bHVnaW5WaWV3PiBwbHVnaW5WaWV3ID0gUGx1Z2luVmlldzo6Y3JlYXRlKG1fZnJhbWUsIHBsdWdp
blNpemUsIGVsZW1lbnQsIHVybCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuY3BwCmluZGV4IDIwYmEzNTNiZDA5NDMyMmZk
NTZhZjk4N2NiNjUzZDY3YjUyZTRhMWEuLmI2YjRkNzBiZDEwYTg3YzgzMTlmZTE5NzhjNzY5ZDEy
YjY5OTkzODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2Vv
bG9jYXRpb25DbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9HZW9sb2NhdGlvbkNsaWVudFF0LmNwcApAQCAtMzgsMTEgKzM4LDcgQEAKICNpbmNsdWRlICJx
d2VicGFnZS5oIgogI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKIAotI2lmICFIQVZFKFFUNSkKLSNp
bmNsdWRlIDxRR2VvUG9zaXRpb25JbmZvU291cmNlPgotI2VsaWYgSEFWRShRVDUpCiAjaW5jbHVk
ZSA8UXRMb2NhdGlvbi9RR2VvUG9zaXRpb25JbmZvU291cmNlPgotI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9HZW9sb2NhdGlvbkNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0dlb2xvY2F0aW9uQ2xpZW50UXQuaAppbmRleCA3MjZiZTE1N2EzNzdhNjJlZTVlOWYxODIwNTNj
NzQ4ZGIzZDA4ODdmLi4yZTk0YmRlYmMyYmQ1NzhkNWYxZjQxZmNmNmIxYjAzMzAzODMyYWYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xp
ZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9u
Q2xpZW50UXQuaApAQCAtMzEsMTggKzMxLDEwIEBACiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNpZiAhSEFWRShRVDUpCi0jaW5jbHVkZSA8UUdlb1Bvc2l0
aW9uSW5mbz4KLW5hbWVzcGFjZSBRdE1vYmlsaXR5IHsKLWNsYXNzIFFHZW9Qb3NpdGlvbkluZm9T
b3VyY2U7Ci19OwotdXNpbmcgbmFtZXNwYWNlIFF0TW9iaWxpdHk7Ci0jZWxpZiBIQVZFKFFUNSkK
ICNpbmNsdWRlIDxRdExvY2F0aW9uL1FHZW9Qb3NpdGlvbkluZm8+CiBRVF9CRUdJTl9OQU1FU1BB
Q0UKIGNsYXNzIFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2U7CiBRVF9FTkRfTkFNRVNQQUNFCi0jZW5k
aWYKIAogCiBjbGFzcyBRV2ViUGFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUGFnZUNsaWVudFF0LmNwcAppbmRleCA5OTAxNzk5MDY1NGVkMjFjNTA3NTFhYTIwYjVh
ZjE2MjBlYjQ5MWMwLi4wMDkzMTg3YWY1ZWM0ZTE5NzIyNjQ1OGFmYTQ5MmI2MDg0Nzg4MjNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3Bw
CkBAIC0zMyw5ICszMyw3IEBACiAjZW5kaWYKIAogI2lmIFVTRSgzRF9HUkFQSElDUykKLSNpZiBI
QVZFKFFUNSkKICNpbmNsdWRlIDxRV2luZG93PgotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGNyZWF0
ZVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RGcm9tV2lkZ2V0KFFXaWRnZXQqIHdpZGdldCwgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NTdXJmYWNlM0Qq
IHN1cmZhY2UpCkBAIC01NCwxMyArNTIsOCBAQCBzdGF0aWMgdm9pZCBjcmVhdGVQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNERnJvbVdpZGdldChRV2lkZ2V0KiB3aWRnZXQsIFBsYXRmb3JtRwogICAg
IGlmIChnbFdpZGdldC0+aXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIEdlb21ldHJ5IGNhbiBiZSBz
ZXQgdG8gemVybyBiZWNhdXNlIG1fZ2xXaWRnZXQgaXMgdXNlZCBvbmx5IGZvciBpdHMgUUdMQ29u
dGV4dC4KICAgICAgICAgZ2xXaWRnZXQtPnNldEdlb21ldHJ5KDAsIDAsIDAsIDApOwotI2lmIEhB
VkUoUVQ1KQogICAgICAgICAqc3VyZmFjZSA9IGdsV2lkZ2V0LT53aW5kb3dIYW5kbGUoKTsKICAg
ICAgICAgKmNvbnRleHQgPSBnbFdpZGdldC0+Y29udGV4dCgpLT5jb250ZXh0SGFuZGxlKCk7Ci0j
ZWxzZQotICAgICAgICAqc3VyZmFjZSA9IGdsV2lkZ2V0OwotICAgICAgICAqY29udGV4dCA9IGNv
bnN0X2Nhc3Q8UUdMQ29udGV4dCo+KGdsV2lkZ2V0LT5jb250ZXh0KCkpOwotI2VuZGlmCiAgICAg
fSBlbHNlIHsKICAgICAgICAgZGVsZXRlIGdsV2lkZ2V0OwogICAgICAgICBnbFdpZGdldCA9IDA7
CkBAIC03NCw3ICs2Nyw2IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0RGcm9tV2lkZ2V0KFFXaWRnZXQqIHdpZGdldCwgUGxhdGZvcm1HCiAjaW5jbHVkZSAidGV4
bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIgogI2VuZGlmCiAKLSNpZiBIQVZFKFFUNSkKIFFXaW5k
b3cqIFFXZWJQYWdlQ2xpZW50Ojpvd25lcldpbmRvdygpIGNvbnN0CiB7CiAgICAgUVdpZGdldCog
d2lkZ2V0ID0gb3duZXJXaWRnZXQoKTsKQEAgLTg2LDcgKzc4LDYgQEAgUVdpbmRvdyogUVdlYlBh
Z2VDbGllbnQ6Om93bmVyV2luZG93KCkgY29uc3QKICAgICAgICAgcmV0dXJuIG5hdGl2ZVBhcmVu
dC0+d2luZG93SGFuZGxlKCk7CiAgICAgcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1dlYkV2ZW50Q29udmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1dlYkV2ZW50Q29udmVyc2lvbi5jcHAKaW5kZXggMGI3MzJhNGNlZDFkZjRmYjQ5YTkyMWU5MmNk
NGM4ODEyNmRmYTMyMC4uMjIyNjc2NjIwOTAxOWQ5NzA4NjFkMjAzZmE1Y2VjMWQ1ODUzNTQzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9XZWJFdmVudENvbnZl
cnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvV2ViRXZlbnRD
b252ZXJzaW9uLmNwcApAQCAtMjQzLDExICsyNDMsOSBAQCBXZWJLaXRQbGF0Zm9ybVRvdWNoRXZl
bnQ6OldlYktpdFBsYXRmb3JtVG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQpCiAgICAgY2Fz
ZSBRRXZlbnQ6OlRvdWNoRW5kOgogICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpUb3Vj
aEVuZDsKICAgICAgICAgYnJlYWs7Ci0jaWYgSEFWRShRVDUpCiAgICAgY2FzZSBRRXZlbnQ6OlRv
dWNoQ2FuY2VsOgogICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpUb3VjaENhbmNlbDsK
ICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICB9CiAKICAgICBjb25zdCBRTGlzdDxRVG91Y2hF
dmVudDo6VG91Y2hQb2ludD4mIHBvaW50cyA9IGV2ZW50LT50b3VjaFBvaW50cygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9kZWNsYXJhdGl2ZS5wcm8gYi9Tb3Vy
Y2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2RlY2xhcmF0aXZlLnBybwppbmRleCA3Mzc5MjgzMzg2
OGMyMzFmYTk0ZGI2OGI1NjJmNzZlZjUwMGYxNGM3Li4wNGYyMjk4ZDBlODIxYmZmOGEzYjRjYWZj
ZmFiZmRkNzc5MTRiMmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZl
L2RlY2xhcmF0aXZlLnBybworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2RlY2xh
cmF0aXZlLnBybwpAQCAtMTEsNyArMTEsNyBAQCBwdWJsaWNfYXBpLmZpbGUgPSBwdWJsaWMucHJp
CiBwdWJsaWNfYXBpLm1ha2VmaWxlID0gTWFrZWZpbGUuZGVjbGFyYXRpdmUucHVibGljCiBTVUJE
SVJTICs9IHB1YmxpY19hcGkKIAotaGF2ZVF0KDUpOiFub193ZWJraXQyIHsKKyFub193ZWJraXQy
IHsKICAgICBleHBlcmltZW50YWxfYXBpLmZpbGUgPSBleHBlcmltZW50YWwvZXhwZXJpbWVudGFs
LnByaQogICAgIGV4cGVyaW1lbnRhbF9hcGkubWFrZWZpbGUgPSBNYWtlZmlsZS5kZWNsYXJhdGl2
ZS5leHBlcmltZW50YWwKICAgICBTVUJESVJTICs9IGV4cGVyaW1lbnRhbF9hcGkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJL
aXQvcXQvZGVjbGFyYXRpdmUvcGx1Z2luLmNwcAppbmRleCAxZDQ0YmUyM2ZmNTA3YWNiMzY1ODkw
M2I2ODQ0ZDYwODExOTQ5ZmViLi5kYjc0ODk1MmFiNTMwODc5ODBkOTQ5YmFhNTU2OTdjMWU0ODI3
Yzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3BsdWdpbi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wbHVnaW4uY3BwCkBAIC0yNSwxMyAr
MjUsOCBAQAogI2luY2x1ZGUgInFkZWNsYXJhdGl2ZXdlYnZpZXdfcC5oIgogI2VuZGlmCiAKLSNp
ZiAoSEFWRShRVDUpKQogI2luY2x1ZGUgPFF0UW1sL3FxbWwuaD4KICNpbmNsdWRlIDxRdFFtbC9x
cW1sZXh0ZW5zaW9ucGx1Z2luLmg+Ci0jZWxzZQotI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRl
Y2xhcmF0aXZlLmg+Ci0jaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVleHRlbnNp
b25wbHVnaW4uaD4KLSNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX1dFQktJVDIpCiAjaW5jbHVk
ZSAicHJpdmF0ZS9xcXVpY2t3ZWJwYWdlX3AuaCIKQEAgLTQ2LDEyICs0MSw4IEBACiAKIFFUX0JF
R0lOX05BTUVTUEFDRQogCi0jaWYgUVRfVkVSU0lPTiA+PSAweDA1MDAwMAogY2xhc3MgV2ViS2l0
UW1sUGx1Z2luIDogcHVibGljIFFRbWxFeHRlbnNpb25QbHVnaW4gewogICAgIFFfUExVR0lOX01F
VEFEQVRBKElJRCAib3JnLnF0LXByb2plY3QuUXQuUVFtbEV4dGVuc2lvbkludGVyZmFjZSIgRklM
RSAicGx1Z2luLmpzb24iKQotI2Vsc2UKLWNsYXNzIFdlYktpdFFtbFBsdWdpbiA6IHB1YmxpYyBR
RGVjbGFyYXRpdmVFeHRlbnNpb25QbHVnaW4gewotI2VuZGlmCiAgICAgUV9PQkpFQ1QKIHB1Ymxp
YzoKICNpZiBkZWZpbmVkKEhBVkVfV0VCS0lUMikKQEAgLTg4LDcgKzc5LDMgQEAgcHVibGljOgog
UVRfRU5EX05BTUVTUEFDRQogCiAjaW5jbHVkZSAicGx1Z2luLm1vYyIKLQotI2lmIFFUX1ZFUlNJ
T04gPCAweDA1MDAwMAotUV9FWFBPUlRfUExVR0lOMihxbWx3ZWJraXRwbHVnaW4sIFFUX1BSRVBF
TkRfTkFNRVNQQUNFKFdlYktpdFFtbFBsdWdpbikpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkgYi9Tb3VyY2UvV2ViS2l0L3F0L2Rl
Y2xhcmF0aXZlL3B1YmxpYy5wcmkKaW5kZXggMzRjNjYzOTlmNzhiODk5ZWZjMDNmMWY0YzljZTk2
ZGJlMTU5NWE0Ni4uZTVjNDNkYjA2NWZiZTI5MmU1ZWRjZGM0ZGE5MjA3ZWY1YTgzNDQ2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpCisrKyBiL1Nv
dXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaQpAQCAtMjQsOSArMjQsNyBAQCBj
b250YWlucyhRVF9DT05GSUcsIHJlZHVjZV9leHBvcnRzKTpDT05GSUcgKz0gaGlkZV9zeW1ib2xz
CiAKIHdpbmNlKjpMSUJTICs9ICQkUU1BS0VfTElCU19HVUkKIAotUVQgKz0gd2Via2l0IHdlYmtp
dC1wcml2YXRlCi1oYXZlUXQoNCk6IFFUICs9IGRlY2xhcmF0aXZlCi1oYXZlUXQoNSk6IFFUICs9
IHdpZGdldHMgcXVpY2sgcXVpY2stcHJpdmF0ZQorUVQgKz0gd2Via2l0IHdlYmtpdC1wcml2YXRl
IHdpZGdldHMgcXVpY2sgcXVpY2stcHJpdmF0ZQogCiBjb250YWlucyhERUZJTkVTLCBIQVZFX1FR
VUlDSzE9MSkgewogICAgIFNPVVJDRVMgKz0gcWRlY2xhcmF0aXZld2Vidmlldy5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2lu
LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2lu
LmNwcAppbmRleCBmZGQ5OTBmNTdkODljMGYwY2YyZDMzMjg4ZmRjYTIyYmEyOTY5OWZhLi5jNzE3
NTExNzdjY2JkYmNhZmY0NDk3NTljMDM3NGNiMGU5NzdmMGI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCkBAIC0z
MTQsNyArMzE0LDMgQEAgUU9iamVjdCogV2ViUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24oRXh0ZW5z
aW9uIGV4dGVuc2lvbikgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQotCi0jaWYg
UVRfVkVSU0lPTiA8IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkKLVFfRVhQT1JUX1BMVUdJTjIo
cGxhdGZvcm1wbHVnaW4sIFdlYlBsdWdpbikKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9leGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaCBiL1NvdXJjZS9XZWJL
aXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgKaW5kZXggZGUwNmY0YTg0
OTI4MGU1MWNiNzUxMDkwZjJiY2NkYzY5NzI4M2RhZi4uNDQ2ZDBmNzU0ZGVkNmRhYjBlNDNmMzg4
NGJmYmFhOWYzMWE1MTZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9leGFtcGxlcy9w
bGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2V4YW1wbGVz
L3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5oCkBAIC0xMzksOSArMTM5LDcgQEAgY2xhc3MgV2Vi
UGx1Z2luIDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBRV2ViS2l0UGxhdGZvcm1QbHVnaW4KIHsK
ICAgICBRX09CSkVDVAogICAgIFFfSU5URVJGQUNFUyhRV2ViS2l0UGxhdGZvcm1QbHVnaW4pCi0j
aWYgUVRfVkVSU0lPTiA+PSAweDA1MDAwMAogICAgIFFfUExVR0lOX01FVEFEQVRBKElJRCAib3Jn
LnF0LXByb2plY3QuUXRXZWJLaXQuUGxhdGZvcm1QbHVnaW5JbnRlcmZhY2UiKQotI2VuZGlmCiBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRl
bnNpb24pIGNvbnN0OwogICAgIHZpcnR1YWwgUU9iamVjdCogY3JlYXRlRXh0ZW5zaW9uKEV4dGVu
c2lvbiBleHRlbnNpb24pIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9leGFt
cGxlcy9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8gYi9Tb3VyY2UvV2ViS2l0L3F0
L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwppbmRleCBiNWRhNzFj
YTBhYWJhNjRmMmM2MDAyY2ZjM2VmZWQ4NTkxOTUwODNlLi5mYzUzM2QzYmI1MzY5ZjllODU0NzZi
OTUyMjc2MjA0YmI4MGM2MTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2V4YW1wbGVz
L3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybworKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwpAQCAtMSw4ICsxLDcg
QEAKIFRFTVBMQVRFID0gbGliCiBUQVJHRVQgPSBwbGF0Zm9ybXBsdWdpbgogCi1RVCArPSBjb3Jl
IGd1aQotaGF2ZVF0KDUpOiBRVCArPSB3aWRnZXRzCitRVCArPSBjb3JlIGd1aSB3aWRnZXRzCiBD
T05GSUcgKz0gcGx1Z2luCiAKICMjIGxvYWQgbW9iaWxpdHljb25maWcgaWYgbW9iaWxpdHkgaXMg
YXZhaWxhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FvYmplY3Ricmlk
Z2UvdHN0X3FvYmplY3RicmlkZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xb2JqZWN0
YnJpZGdlL3RzdF9xb2JqZWN0YnJpZGdlLmNwcAppbmRleCAyOTFmOWIyOTRjNDk4MGNlN2FkNmRj
YmRkZWQzZGVlMWQ1YTU3Yzc3Li5jYjBmZGI5MWUyMzUzMzdmNDNjNDI3OTkyODM4MzFmMmU4NjFi
ZmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3FvYmplY3RicmlkZ2UvdHN0
X3FvYmplY3RicmlkZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvcW9iamVjdGJy
aWRnZS90c3RfcW9iamVjdGJyaWRnZS5jcHAKQEAgLTM3LDEyICszNyw2IEBAIFFfREVDTEFSRV9N
RVRBVFlQRShRdDo6QnJ1c2hTdHlsZSkKIFFfREVDTEFSRV9NRVRBVFlQRShRVmFyaWFudExpc3Qp
CiBRX0RFQ0xBUkVfTUVUQVRZUEUoUVZhcmlhbnRNYXApCiAKLSNpZiBRVF9WRVJTSU9OID49IFFU
X1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkKLSNkZWZpbmUgT3duZXJzaGlwQ2xhc3MgUVdlYkZyYW1l
Ci0jZWxzZQotI2RlZmluZSBPd25lcnNoaXBDbGFzcyBRU2NyaXB0RW5naW5lCi0jZW5kaWYKLQog
Y2xhc3MgTXlRT2JqZWN0IDogcHVibGljIFFPYmplY3QgewogICAgIFFfT0JKRUNUCiAKQEAgLTIw
MDAsNyArMTk5NCw3IEBAIHZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6OmFycmF5T2JqZWN0RW51bWVy
YWJsZSgpCiAgICAgUVdlYlBhZ2UgcGFnZTsKICAgICBRV2ViRnJhbWUqIGZyYW1lID0gcGFnZS5t
YWluRnJhbWUoKTsKICAgICBRT2JqZWN0KiBxb2JqZWN0ID0gbmV3IFN0cmluZ0xpc3RUZXN0T2Jq
ZWN0KCk7Ci0gICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIHFv
YmplY3QsIE93bmVyc2hpcENsYXNzOjpTY3JpcHRPd25lcnNoaXApOworICAgIGZyYW1lLT5hZGRU
b0phdmFTY3JpcHRXaW5kb3dPYmplY3QoInRlc3QiLCBxb2JqZWN0LCBRV2ViRnJhbWU6OlNjcmlw
dE93bmVyc2hpcCk7CiAKICAgICBjb25zdCBRU3RyaW5nIHNjcmlwdCgidmFyIHN0cmluZ0FycmF5
ID0gdGVzdC5zdHJpbmdMaXN0KCk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXIgcmVz
dWx0ID0gJyc7IgpAQCAtMjA0MSw3ICsyMDM1LDcgQEAgdm9pZCB0c3RfUU9iamVjdEJyaWRnZTo6
b3duZXJzaGlwKCkKICAgICAgICAgewogICAgICAgICAgICAgUVdlYlBhZ2UgcGFnZTsKICAgICAg
ICAgICAgIFFXZWJGcmFtZSogZnJhbWUgPSBwYWdlLm1haW5GcmFtZSgpOwotICAgICAgICAgICAg
ZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIHB0ci5kYXRhKCksIE93
bmVyc2hpcENsYXNzOjpTY3JpcHRPd25lcnNoaXApOworICAgICAgICAgICAgZnJhbWUtPmFkZFRv
SmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIHB0ci5kYXRhKCksIFFXZWJGcmFtZTo6U2Ny
aXB0T3duZXJzaGlwKTsKICAgICAgICAgfQogICAgICAgICBRVkVSSUZZKCFwdHIpOwogICAgIH0K
QEAgLTIwNTIsNyArMjA0Niw3IEBAIHZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6Om93bmVyc2hpcCgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIFFXZWJQYWdlIHBhZ2U7CiAgICAgICAgICAgICBRV2Vi
RnJhbWUqIGZyYW1lID0gcGFnZS5tYWluRnJhbWUoKTsKLSAgICAgICAgICAgIGZyYW1lLT5hZGRU
b0phdmFTY3JpcHRXaW5kb3dPYmplY3QoInRlc3QiLCBwdHIuZGF0YSgpLCBPd25lcnNoaXBDbGFz
czo6UXRPd25lcnNoaXApOworICAgICAgICAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRv
d09iamVjdCgidGVzdCIsIHB0ci5kYXRhKCksIFFXZWJGcmFtZTo6UXRPd25lcnNoaXApOwogICAg
ICAgICB9CiAgICAgICAgIFFWRVJJRlkocHRyLmRhdGEoKSA9PSBiZWZvcmUpOwogICAgICAgICBk
ZWxldGUgcHRyLmRhdGEoKTsKQEAgLTIwNjIsNyArMjA1Niw3IEBAIHZvaWQgdHN0X1FPYmplY3RC
cmlkZ2U6Om93bmVyc2hpcCgpCiAgICAgICAgIFFPYmplY3QqIGNoaWxkID0gbmV3IFFPYmplY3Qo
cGFyZW50KTsKICAgICAgICAgUVdlYlBhZ2UgcGFnZTsKICAgICAgICAgUVdlYkZyYW1lKiBmcmFt
ZSA9IHBhZ2UubWFpbkZyYW1lKCk7Ci0gICAgICAgIGZyYW1lLT5hZGRUb0phdmFTY3JpcHRXaW5k
b3dPYmplY3QoInRlc3QiLCBjaGlsZCwgT3duZXJzaGlwQ2xhc3M6OlF0T3duZXJzaGlwKTsKKyAg
ICAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIGNoaWxkLCBR
V2ViRnJhbWU6OlF0T3duZXJzaGlwKTsKICAgICAgICAgUVZhcmlhbnQgdiA9IGZyYW1lLT5ldmFs
dWF0ZUphdmFTY3JpcHQoInRlc3QiKTsKICAgICAgICAgUUNPTVBBUkUocXZhcmlhbnRfY2FzdDxR
T2JqZWN0Kj4odiksIGNoaWxkKTsKICAgICAgICAgZGVsZXRlIHBhcmVudDsKQEAgLTIwNzUsNyAr
MjA2OSw3IEBAIHZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6Om93bmVyc2hpcCgpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIFFXZWJQYWdlIHBhZ2U7CiAgICAgICAgICAgICBRV2ViRnJhbWUqIGZyYW1l
ID0gcGFnZS5tYWluRnJhbWUoKTsKLSAgICAgICAgICAgIGZyYW1lLT5hZGRUb0phdmFTY3JpcHRX
aW5kb3dPYmplY3QoInRlc3QiLCBwdHIuZGF0YSgpLCBPd25lcnNoaXBDbGFzczo6QXV0b093bmVy
c2hpcCk7CisgICAgICAgICAgICBmcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJ0
ZXN0IiwgcHRyLmRhdGEoKSwgUVdlYkZyYW1lOjpBdXRvT3duZXJzaGlwKTsKICAgICAgICAgfQog
ICAgICAgICAvLyBubyBwYXJlbnQsIHNvIGl0IHNob3VsZCBiZSBsaWtlIFNjcmlwdE93bmVyc2hp
cAogICAgICAgICBRVkVSSUZZKCFwdHIpOwpAQCAtMjA4Nyw3ICsyMDgxLDcgQEAgdm9pZCB0c3Rf
UU9iamVjdEJyaWRnZTo6b3duZXJzaGlwKCkKICAgICAgICAgewogICAgICAgICAgICAgUVdlYlBh
Z2UgcGFnZTsKICAgICAgICAgICAgIFFXZWJGcmFtZSogZnJhbWUgPSBwYWdlLm1haW5GcmFtZSgp
OwotICAgICAgICAgICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIs
IGNoaWxkLmRhdGEoKSwgT3duZXJzaGlwQ2xhc3M6OkF1dG9Pd25lcnNoaXApOworICAgICAgICAg
ICAgZnJhbWUtPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgidGVzdCIsIGNoaWxkLmRhdGEo
KSwgUVdlYkZyYW1lOjpBdXRvT3duZXJzaGlwKTsKICAgICAgICAgfQogICAgICAgICAvLyBoYXMg
cGFyZW50LCBzbyBpdCBzaG91bGQgYmUgbGlrZSBRdE93bmVyc2hpcAogICAgICAgICBRVkVSSUZZ
KGNoaWxkKTsKQEAgLTIxMjksNyArMjEyMyw3IEBAIHZvaWQgdHN0X1FPYmplY3RCcmlkZ2U6OnFP
YmplY3RXcmFwcGVyV2l0aFNhbWVJZGVudGl0eSgpCiAgICAgUVdlYkZyYW1lKiBtYWluRnJhbWUg
PSBtX3ZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCk7CiAgICAgUUNPTVBBUkUobWFpbkZyYW1lLT50
b1BsYWluVGV4dCgpLCBRU3RyaW5nKCJ0ZXN0IikpOwogCi0gICAgbWFpbkZyYW1lLT5hZGRUb0ph
dmFTY3JpcHRXaW5kb3dPYmplY3QoInRlc3QiLCBuZXcgVGVzdEZhY3RvcnksIE93bmVyc2hpcENs
YXNzOjpTY3JpcHRPd25lcnNoaXApOworICAgIG1haW5GcmFtZS0+YWRkVG9KYXZhU2NyaXB0V2lu
ZG93T2JqZWN0KCJ0ZXN0IiwgbmV3IFRlc3RGYWN0b3J5LCBRV2ViRnJhbWU6OlNjcmlwdE93bmVy
c2hpcCk7CiAKICAgICBtYWluRnJhbWUtPmV2YWx1YXRlSmF2YVNjcmlwdCgidHJpZ2dlckJ1Zygp
OyIpOwogICAgIFFDT01QQVJFKG1haW5GcmFtZS0+dG9QbGFpblRleHQoKSwgUVN0cmluZygidGVz
dDEiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnByaSBiL1Nv
dXJjZS9XZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJpCmluZGV4IDkwYzYxZjA5M2U5ZTQ2OTFhMDI5
YjQzYmJkMTViYThiZjI2YWY3NDEuLjU0MzdiYWFjYzljYWJhYzYxM2Q1NzQ5MTdmMjQzNDBkODMy
YmJhYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJpCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJpCkBAIC0xNiwxMCArMTYsNyBAQCBJTkNM
VURFUEFUSCArPSBcCiAgICAgJCRQV0QgXAogICAgICQkUFdELy4uL0FwaQogCi1RVCArPSB0ZXN0
bGliIG5ldHdvcmsgd2Via2l0Ci1oYXZlUXQoNSk6IFFUICs9IHdpZGdldHMKLQotaGF2ZVF0KDQp
OiBoYXZlUXRNb2R1bGUoZGVjbGFyYXRpdmUpOiBRVCArPSBkZWNsYXJhdGl2ZQorUVQgKz0gdGVz
dGxpYiBuZXR3b3JrIHdlYmtpdCB3aWRnZXRzCiAKICMgVGhpcyBkZWZpbmUgaXMgdXNlZCBieSBz
b21lIHRlc3RzIHRvIGxvb2sgdXAgcmVzb3VyY2VzIGluIHRoZSBzb3VyY2UgdHJlZQogREVGSU5F
UyArPSBURVNUU19TT1VSQ0VfRElSPVxcXCIkJFBXRC9cXFwiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L3Rlc3RzL3V0aWwuaCBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvdXRpbC5oCmlu
ZGV4IGNmYTIyZWIwODMwOWVmODBiN2UzMTdkZGQzZTY3NDdlYzUzYjNjMDguLjI4Njk0NDBjYmM5
ZjMxNjE2MjhiMWVlNGE4OTMwYTIyN2E3M2JlZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
cXQvdGVzdHMvdXRpbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvdXRpbC5oCkBAIC01
MywzNyArNTMsNCBAQCBzdGF0aWMgYm9vbCB3YWl0Rm9yU2lnbmFsKFFPYmplY3QqIG9iaiwgY29u
c3QgY2hhciogc2lnbmFsLCBpbnQgdGltZW91dCA9IDEwMDAwKQogICAgIHJldHVybiB0aW1lb3V0
U3B5LmlzRW1wdHkoKTsKIH0KIAotI2lmICEoZGVmaW5lZChIQVZFX1FUNSkgJiYgSEFWRV9RVDUp
Ci0vLyBXaWxsIHRyeSB0byB3YWl0IGZvciB0aGUgY29uZGl0aW9uIHdoaWxlIGFsbG93aW5nIGV2
ZW50IHByb2Nlc3NpbmcKLSNkZWZpbmUgUVRSWV9WRVJJRlkoX19leHByKSBcCi0gICAgZG8geyBc
Ci0gICAgICAgIGNvbnN0IGludCBfX3N0ZXAgPSA1MDsgXAotICAgICAgICBjb25zdCBpbnQgX190
aW1lb3V0ID0gNTAwMDsgXAotICAgICAgICBpZiAoIShfX2V4cHIpKSB7IFwKLSAgICAgICAgICAg
IFFUZXN0OjpxV2FpdCgwKTsgXAotICAgICAgICB9IFwKLSAgICAgICAgZm9yIChpbnQgX19pID0g
MDsgX19pIDwgX190aW1lb3V0ICYmICEoX19leHByKTsgX19pKz1fX3N0ZXApIHsgXAotICAgICAg
ICAgICAgUVRlc3Q6OnFXYWl0KF9fc3RlcCk7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIFFWRVJJ
RlkoX19leHByKTsgXAotICAgIH0gd2hpbGUoMCkKLQotLy8gV2lsbCB0cnkgdG8gd2FpdCBmb3Ig
dGhlIGNvbmRpdGlvbiB3aGlsZSBhbGxvd2luZyBldmVudCBwcm9jZXNzaW5nCi0jZGVmaW5lIFFU
UllfQ09NUEFSRShfX2V4cHIsIF9fZXhwZWN0ZWQpIFwKLSAgICBkbyB7IFwKLSAgICAgICAgY29u
c3QgaW50IF9fc3RlcCA9IDUwOyBcCi0gICAgICAgIGNvbnN0IGludCBfX3RpbWVvdXQgPSA1MDAw
OyBcCi0gICAgICAgIGlmICgoX19leHByKSAhPSAoX19leHBlY3RlZCkpIHsgXAotICAgICAgICAg
ICAgUVRlc3Q6OnFXYWl0KDApOyBcCi0gICAgICAgIH0gXAotICAgICAgICBmb3IgKGludCBfX2kg
PSAwOyBfX2kgPCBfX3RpbWVvdXQgJiYgKChfX2V4cHIpICE9IChfX2V4cGVjdGVkKSk7IF9faSs9
X19zdGVwKSB7IFwKLSAgICAgICAgICAgIFFUZXN0OjpxV2FpdChfX3N0ZXApOyBcCi0gICAgICAg
IH0gXAotICAgICAgICBRQ09NUEFSRShfX2V4cHIsIF9fZXhwZWN0ZWQpOyBcCi0gICAgfSB3aGls
ZSgwKQotCi0vLyBDb21wYXRpYmlsaXR5IGZvciBRdDUKLSNkZWZpbmUgV19RU0tJUChhLCBiKSBR
U0tJUChhLCBiKQotI2Vsc2UKICNkZWZpbmUgV19RU0tJUChhLCBiKSBRU0tJUChhKQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNw
cAppbmRleCBiYzA5Y2NjNWUxYzc2OGFlMjA0NWZhOWQyMTIyYWMzYjI2ZThjZWYzLi5jNzZjMmQ3
MjQxNGFiYWI0YWE3MjZlZDA3OTY2MDVhMTZlMTgzMzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTMyLDcgKzMyLDYgQEAK
ICNpbmNsdWRlICJRdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VM
b2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlUG9saWN5Q2xpZW50LmgiCi0jaW5jbHVk
ZSAiVXRpbHNRdC5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUg
IldlYkluc3BlY3RvclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViSW5zcGVjdG9yU2VydmVyLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3B1YmxpY2Fw
aS90c3RfcHVibGljYXBpLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVz
dHMvcHVibGljYXBpL3RzdF9wdWJsaWNhcGkuY3BwCmluZGV4IDBlM2IzM2NmNzAwOWRiZWFkZjI1
NTRhYzQxNGE0MGMwMDU1ZTBiNDUuLjEyZTBhYjkwMzZhZjY5ZTEzZTJjNDRhYTViZWVmOGU3ZTNi
OGY1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMv
cHVibGljYXBpL3RzdF9wdWJsaWNhcGkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvdGVzdHMvcHVibGljYXBpL3RzdF9wdWJsaWNhcGkuY3BwCkBAIC0xNDQsMTEgKzE0
NCw3IEBAIHN0YXRpYyB2b2lkIGdhdGhlckFQSShjb25zdCBRU3RyaW5nJiBwcmVmaXgsIGNvbnN0
IFFNZXRhTWV0aG9kJiBtZXRob2QsIFFTdHJpbmdMCiB7CiAgICAgaWYgKG1ldGhvZC5hY2Nlc3Mo
KSAhPSBRTWV0YU1ldGhvZDo6UHJpdmF0ZSkgewogICAgICAgICBjb25zdCBjaGFyKiBtZXRob2RU
eXBlTmFtZSA9ICEhc3RybGVuKG1ldGhvZC50eXBlTmFtZSgpKSA/IG1ldGhvZC50eXBlTmFtZSgp
IDogInZvaWQiOwotI2lmIEhBVkUoUVQ1KQogICAgICAgICAqb3V0cHV0IDw8IFFTdHJpbmc6OmZy
b21MYXRpbjEoIiUxJTIgLS0+ICUzIikuYXJnKHByZWZpeCkuYXJnKFFTdHJpbmc6OmZyb21MYXRp
bjEobWV0aG9kLm1ldGhvZFNpZ25hdHVyZSgpKSkuYXJnKFFTdHJpbmc6OmZyb21MYXRpbjEobWV0
aG9kVHlwZU5hbWUpKTsKLSNlbHNlCi0gICAgICAgICpvdXRwdXQgPDwgUVN0cmluZzo6ZnJvbUxh
dGluMSgiJTElMiAtLT4gJTMiKS5hcmcocHJlZml4KS5hcmcobWV0aG9kLnNpZ25hdHVyZSgpKS5h
cmcobWV0aG9kVHlwZU5hbWUpOwotI2VuZGlmCiAKICAgICAgICAgY2hlY2tLbm93blR5cGUobWV0
aG9kVHlwZU5hbWUpOwogICAgICAgICBmb3JlYWNoIChRQnl0ZUFycmF5IHBhcmFtVHlwZSwgbWV0
aG9kLnBhcmFtZXRlclR5cGVzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
LnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDE3ZDU0OTNiMGFiM2FlOTQ4
NGM0YmFiMDhmZDdmOGFiNTNiYWNmNzQuLjYxMjhkYjRjZmNiOTE4YTc0ODdiNmY5MjFkNGUyODdi
NGYwYjJjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCkBAIC03Niw0ICs3Niw0IEBAIGxpbnV4LSo6IHsKIAog
UVQgKz0gcW1sIHF1aWNrCiAKLWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9HRU9MT0NBVElPTj0x
KTpoYXZlUXQoNSk6IFFUICs9IGxvY2F0aW9uCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfR0VP
TE9DQVRJT049MSk6IFFUICs9IGxvY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvYXBpLnByaSBi
L1NvdXJjZS9hcGkucHJpCmluZGV4IDYxOTg0ZDI0NDc2ZjFkODQ5MjNiN2EwMWMyZGI5ZDQ1NDM5
MTExM2MuLjdlNTNjYzk5ZDRhMWI4NzEwNTEwYmRkY2FlNTViN2QyYjFlZmY5ODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9hcGkucHJpCisrKyBiL1NvdXJjZS9hcGkucHJpCkBAIC05LDcxICs5LDY0IEBA
IFRBUkdFVCA9IFF0V2ViS2l0CiAKIFdFQktJVF9ERVNURElSID0gJCR7Uk9PVF9CVUlMRF9ESVJ9
L2xpYgogCi1oYXZlUXQoNSkgewotICAgICMgVXNlIFF0NSdzIG1vZHVsZSBzeXN0ZW0KLSAgICBs
b2FkKHF0X2J1aWxkX2NvbmZpZykKLSAgICBNT0RVTEUgPSB3ZWJraXQKLSAgICBNT0RVTEVfUFJJ
ID0gLi4vVG9vbHMvcW1ha2UvcXRfd2Via2l0LnByaQotCi0gICAgIyAtLS0tLS0tLS0tLS0tLS0t
IEN1c3RvbSBkZXZlbG9wZXItYnVpbGQgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
ICMKLSAgICAjIFRoZSBhc3N1bXB0aW9uIGZvciBRdCBkZXZlbG9wZXIgYnVpbGRzIGlzIHRoYXQg
dGhlIG1vZHVsZSBmaWxlCi0gICAgIyB3aWxsIGJlIHB1dCBpbnRvIHF0YmFzZS9ta3NwZWNzL21v
ZHVsZXMsIGFuZCB0aGUgbGlicmFyaWVzIGludG8KLSAgICAjIHF0YmFzZS9saWIsIHdpdGggcnBh
dGgvaW5zdGFsbF9uYW1lIHNldCB0byB0aGUgUXQgbGliIGRpci4KLSAgICAjCi0gICAgIyBGb3Ig
V2ViS2l0IHdlIGRvbid0IHdhbnQgdGhhdCBiZWhhdmlvciBmb3IgdGhlIGxpYnJhcmllcywgYXMg
d2Ugd2FudAotICAgICMgdGhlbSB0byBiZSBzZWxmLWNvbnRhaW5lZCBpbiB0aGUgV2ViS2l0IGJ1
aWxkIGRpci4KLSAgICAjCi0gICAgQ09ORklHICs9IGZvcmNlX2luZGVwZW5kZW50Ci0KLSAgICBC
QVNFX1RBUkdFVCA9ICQkVEFSR0VUCi0KLSAgICBsb2FkKHF0X21vZHVsZV9jb25maWcpCi0KLSAg
ICAjIE1ha2Ugc3VyZSB0aGUgbW9kdWxlIGNvbmZpZyBkb2Vzbid0IG92ZXJyaWRlIG91ciBwcmVm
ZXJyZWQgYnVpbGQgY29uZmlnLgotICAgIGRlYnVnX2FuZF9yZWxlYXNlOmlmKCFkZWJ1Z3whcmVs
ZWFzZSkgewotICAgICAgICAjIFJlbW92aW5nIGRlYnVnX2FuZF9yZWxlYXNlIGNhdXNlcyBpc3N1
ZXMgd2l0aCBsaWIgc3VmZml4ZXMgd2hlbiBidWlsZGluZyBkZWJ1ZyBvbiBXaW5kb3dzLgotICAg
ICAgICAjIFdvcmsgYXJvdW5kIGl0IGJ5IG9ubHkgcmVtb3ZpbmcgYnVpbGRfYWxsLCBhbmQgc3Rp
bGwgY3JlYXRlIHRoZSBNYWtlZmlsZXMgZm9yIGJvdGggY29uZmlndXJhdGlvbnMuCi0gICAgICAg
IHdpbjMyKjogQ09ORklHIC09IGJ1aWxkX2FsbAotICAgICAgICBlbHNlOiBDT05GSUcgLT0gZGVi
dWdfYW5kX3JlbGVhc2UKLSAgICB9CisjIFVzZSBRdDUncyBtb2R1bGUgc3lzdGVtCitsb2FkKHF0
X2J1aWxkX2NvbmZpZykKK01PRFVMRSA9IHdlYmtpdAorTU9EVUxFX1BSSSA9IC4uL1Rvb2xzL3Ft
YWtlL3F0X3dlYmtpdC5wcmkKIAotICAgICMgQWxsb3cgZG9pbmcgYSBkZWJ1Zy1vbmx5IGJ1aWxk
IG9mIFdlYktpdCAobm90IHN1cHBvcnRlZCBieSBRdCkKLSAgICBtYWN4OiFkZWJ1Z19hbmRfcmVs
ZWFzZTpkZWJ1ZzogVEFSR0VUID0gJCRCQVNFX1RBUkdFVAotCi0gICAgIyBNYWtlIHN1cmUgdGhl
IGluc3RhbGxfbmFtZSBvZiB0aGUgUXRXZWJLaXQgbGlicmFyeSBwb2ludCB0byB3ZWJraXQKLSAg
ICBtYWN4IHsKLSAgICAgICAgIyBXZSBkbyBvdXIgb3duIGFic29sdXRlIHBhdGggc28gdGhhdCB3
ZSBjYW4gdHJpY2sgcW1ha2UgaW50bwotICAgICAgICAjIHVzaW5nIHRoZSB3ZWJraXQgYnVpbGQg
cGF0aCBpbnN0ZWFkIG9mIHRoZSBRdCBpbnN0YWxsIHBhdGguCi0gICAgICAgIENPTkZJRyAtPSBh
YnNvbHV0ZV9saWJyYXJ5X3NvbmFtZQotICAgICAgICBRTUFLRV9MRkxBR1NfU09OQU1FID0gJCRR
TUFLRV9MRkxBR1NfU09OQU1FJCRXRUJLSVRfREVTVERJUi8KLQotICAgICAgICAhZGVidWdfYW5k
X3JlbGVhc2V8YnVpbGRfcGFzcyB7Ci0gICAgICAgICAgICAjIFdlIGFsc28gaGF2ZSB0byBtYWtl
IHN1cmUgdGhlIGluc3RhbGxfbmFtZSBpcyBjb3JyZWN0IHdoZW4KLSAgICAgICAgICAgICMgdGhl
IGxpYnJhcnkgaXMgaW5zdGFsbGVkLgotICAgICAgICAgICAgY2hhbmdlX2luc3RhbGxfbmFtZS5k
ZXBlbmRzID0gaW5zdGFsbF90YXJnZXQKLQotICAgICAgICAgICAgIyBUaGUgaW5zdGFsbCBydWxl
cyBnZW5lcmF0ZWQgYnkgcW1ha2UgZm9yIGZyYW1ld29ya3MgYXJlIGJ1c3RlZCBpbgotICAgICAg
ICAgICAgIyB0aGF0IGJvdGggdGhlIGRlYnVnIGFuZCB0aGUgcmVsZWFzZSBtYWtlZmlsZSBjb3B5
IFF0V2ViS2l0LmZyYW1ld29yawotICAgICAgICAgICAgIyBpbnRvIHRoZSBpbnN0YWxsIGRpciwg
c28gd2hhdGV2ZXIgY2hhbmdlcyB3ZSBkaWQgdG8gdGhlIHJlbGVhc2UgbGlicmFyeQotICAgICAg
ICAgICAgIyB3aWxsIGdldCBvdmVyd3JpdHRlbiB3aGVuIHRoZSBkZWJ1ZyBsaWJyYXJ5IGlzIGlu
c3RhbGxlZC4gV2Ugd29yayBhcm91bmQKLSAgICAgICAgICAgICMgdGhhdCBieSBydW5uaW5nIGlu
c3RhbGxfbmFtZSBvbiBib3RoLCBmb3IgYm90aCBjb25maWdzLgotICAgICAgICAgICAgY2hhbmdl
X2luc3RhbGxfbmFtZS5jb21tYW5kcyA9IGZyYW1ld29ya19kaXI9XCRcJChkaXJuYW1lICQoVEFS
R0VURCkpOyBcCi0gICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gXCRcJChscyAkJFtRVF9JTlNU
QUxMX0xJQlNdL1wkXCRmcmFtZXdvcmtfZGlyLyQkQkFTRV9UQVJHRVQqKTsgZG8gXAotICAgICAg
ICAgICAgICAgICAgICBpbnN0YWxsX25hbWVfdG9vbCAtaWQgXCRcJGZpbGUgXCRcJGZpbGU7IFwK
LSAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICBkZWZhdWx0X2luc3RhbGxfdGFyZ2V0
LnRhcmdldCA9IGluc3RhbGwKLSAgICAgICAgICAgIGRlZmF1bHRfaW5zdGFsbF90YXJnZXQuZGVw
ZW5kcyArPSBjaGFuZ2VfaW5zdGFsbF9uYW1lCi0KLSAgICAgICAgICAgIFFNQUtFX0VYVFJBX1RB
UkdFVFMgKz0gY2hhbmdlX2luc3RhbGxfbmFtZSBkZWZhdWx0X2luc3RhbGxfdGFyZ2V0Ci0gICAg
ICAgIH0KLSAgICB9Ci19IGVsc2UgewotICAgIFZFUlNJT04gPSAkJFFUX1ZFUlNJT04KLSAgICBE
RVNURElSID0gJCRXRUJLSVRfREVTVERJUgorIyAtLS0tLS0tLS0tLS0tLS0tIEN1c3RvbSBkZXZl
bG9wZXItYnVpbGQgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBUaGUgYXNzdW1w
dGlvbiBmb3IgUXQgZGV2ZWxvcGVyIGJ1aWxkcyBpcyB0aGF0IHRoZSBtb2R1bGUgZmlsZQorIyB3
aWxsIGJlIHB1dCBpbnRvIHF0YmFzZS9ta3NwZWNzL21vZHVsZXMsIGFuZCB0aGUgbGlicmFyaWVz
IGludG8KKyMgcXRiYXNlL2xpYiwgd2l0aCBycGF0aC9pbnN0YWxsX25hbWUgc2V0IHRvIHRoZSBR
dCBsaWIgZGlyLgorIworIyBGb3IgV2ViS2l0IHdlIGRvbid0IHdhbnQgdGhhdCBiZWhhdmlvciBm
b3IgdGhlIGxpYnJhcmllcywgYXMgd2Ugd2FudAorIyB0aGVtIHRvIGJlIHNlbGYtY29udGFpbmVk
IGluIHRoZSBXZWJLaXQgYnVpbGQgZGlyLgorIworQ09ORklHICs9IGZvcmNlX2luZGVwZW5kZW50
CisKK0JBU0VfVEFSR0VUID0gJCRUQVJHRVQKKworbG9hZChxdF9tb2R1bGVfY29uZmlnKQorCisj
IE1ha2Ugc3VyZSB0aGUgbW9kdWxlIGNvbmZpZyBkb2Vzbid0IG92ZXJyaWRlIG91ciBwcmVmZXJy
ZWQgYnVpbGQgY29uZmlnLgorZGVidWdfYW5kX3JlbGVhc2U6aWYoIWRlYnVnfCFyZWxlYXNlKSB7
CisgICAgIyBSZW1vdmluZyBkZWJ1Z19hbmRfcmVsZWFzZSBjYXVzZXMgaXNzdWVzIHdpdGggbGli
IHN1ZmZpeGVzIHdoZW4gYnVpbGRpbmcgZGVidWcgb24gV2luZG93cy4KKyAgICAjIFdvcmsgYXJv
dW5kIGl0IGJ5IG9ubHkgcmVtb3ZpbmcgYnVpbGRfYWxsLCBhbmQgc3RpbGwgY3JlYXRlIHRoZSBN
YWtlZmlsZXMgZm9yIGJvdGggY29uZmlndXJhdGlvbnMuCisgICAgd2luMzIqOiBDT05GSUcgLT0g
YnVpbGRfYWxsCisgICAgZWxzZTogQ09ORklHIC09IGRlYnVnX2FuZF9yZWxlYXNlCiB9CiAKLXJ1
blN5bmNRdCgpICMgR2VuZXJhdGUgZm9yd2FyZGluZyBoZWFkZXJzIGZvciB0aGUgUXRXZWJLaXQg
QVBJCisjIEFsbG93IGRvaW5nIGEgZGVidWctb25seSBidWlsZCBvZiBXZWJLaXQgKG5vdCBzdXBw
b3J0ZWQgYnkgUXQpCittYWN4OiFkZWJ1Z19hbmRfcmVsZWFzZTpkZWJ1ZzogVEFSR0VUID0gJCRC
QVNFX1RBUkdFVAorCisjIE1ha2Ugc3VyZSB0aGUgaW5zdGFsbF9uYW1lIG9mIHRoZSBRdFdlYktp
dCBsaWJyYXJ5IHBvaW50IHRvIHdlYmtpdAorbWFjeCB7CisgICAgIyBXZSBkbyBvdXIgb3duIGFi
c29sdXRlIHBhdGggc28gdGhhdCB3ZSBjYW4gdHJpY2sgcW1ha2UgaW50bworICAgICMgdXNpbmcg
dGhlIHdlYmtpdCBidWlsZCBwYXRoIGluc3RlYWQgb2YgdGhlIFF0IGluc3RhbGwgcGF0aC4KKyAg
ICBDT05GSUcgLT0gYWJzb2x1dGVfbGlicmFyeV9zb25hbWUKKyAgICBRTUFLRV9MRkxBR1NfU09O
QU1FID0gJCRRTUFLRV9MRkxBR1NfU09OQU1FJCRXRUJLSVRfREVTVERJUi8KKworICAgICFkZWJ1
Z19hbmRfcmVsZWFzZXxidWlsZF9wYXNzIHsKKyAgICAgICAgIyBXZSBhbHNvIGhhdmUgdG8gbWFr
ZSBzdXJlIHRoZSBpbnN0YWxsX25hbWUgaXMgY29ycmVjdCB3aGVuCisgICAgICAgICMgdGhlIGxp
YnJhcnkgaXMgaW5zdGFsbGVkLgorICAgICAgICBjaGFuZ2VfaW5zdGFsbF9uYW1lLmRlcGVuZHMg
PSBpbnN0YWxsX3RhcmdldAorCisgICAgICAgICMgVGhlIGluc3RhbGwgcnVsZXMgZ2VuZXJhdGVk
IGJ5IHFtYWtlIGZvciBmcmFtZXdvcmtzIGFyZSBidXN0ZWQgaW4KKyAgICAgICAgIyB0aGF0IGJv
dGggdGhlIGRlYnVnIGFuZCB0aGUgcmVsZWFzZSBtYWtlZmlsZSBjb3B5IFF0V2ViS2l0LmZyYW1l
d29yaworICAgICAgICAjIGludG8gdGhlIGluc3RhbGwgZGlyLCBzbyB3aGF0ZXZlciBjaGFuZ2Vz
IHdlIGRpZCB0byB0aGUgcmVsZWFzZSBsaWJyYXJ5CisgICAgICAgICMgd2lsbCBnZXQgb3Zlcndy
aXR0ZW4gd2hlbiB0aGUgZGVidWcgbGlicmFyeSBpcyBpbnN0YWxsZWQuIFdlIHdvcmsgYXJvdW5k
CisgICAgICAgICMgdGhhdCBieSBydW5uaW5nIGluc3RhbGxfbmFtZSBvbiBib3RoLCBmb3IgYm90
aCBjb25maWdzLgorICAgICAgICBjaGFuZ2VfaW5zdGFsbF9uYW1lLmNvbW1hbmRzID0gZnJhbWV3
b3JrX2Rpcj1cJFwkKGRpcm5hbWUgJChUQVJHRVREKSk7IFwKKyAgICAgICAgICAgIGZvciBmaWxl
IGluIFwkXCQobHMgJCRbUVRfSU5TVEFMTF9MSUJTXS9cJFwkZnJhbWV3b3JrX2Rpci8kJEJBU0Vf
VEFSR0VUKik7IGRvIFwKKyAgICAgICAgICAgICAgICBpbnN0YWxsX25hbWVfdG9vbCAtaWQgXCRc
JGZpbGUgXCRcJGZpbGU7IFwKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZGVmYXVsdF9pbnN0
YWxsX3RhcmdldC50YXJnZXQgPSBpbnN0YWxsCisgICAgICAgIGRlZmF1bHRfaW5zdGFsbF90YXJn
ZXQuZGVwZW5kcyArPSBjaGFuZ2VfaW5zdGFsbF9uYW1lCisKKyAgICAgICAgUU1BS0VfRVhUUkFf
VEFSR0VUUyArPSBjaGFuZ2VfaW5zdGFsbF9uYW1lIGRlZmF1bHRfaW5zdGFsbF90YXJnZXQKKyAg
ICB9Cit9CiAKIFdFQktJVCArPSB3dGYKIApAQCAtOTEsNTIgKzg0LDMgQEAgV0VCS0lUICs9IHdl
YmNvcmUKIH0KIAogIW5vX3dlYmtpdDE6IFdFQktJVCArPSB3ZWJraXQxCi0KLSMgLS0tLS0tLS0t
LS0tLSBJbnN0YWxsIHJ1bGVzIC0tLS0tLS0tLS0tLS0KLQotaGF2ZVF0KDUpIHsKLSAgICAjIElu
c3RhbGwgcnVsZXMgaGFuZGxlZCBieSBRdCdzIG1vZHVsZSBzeXN0ZW0KLX0gZWxzZSB7Ci0gICAg
IyBGb3IgUXQ0IHdlIGhhdmUgdG8gc2V0IHVwIGluc3RhbGwgcnVsZXMgbWFudWFsbHkKLQotICAg
ICMgU3luY3F0IGhhcyBhbHJlYWR5IHJ1biBhdCB0aGlzIHBvaW50LCBzbyB3ZSBjYW4gdXNlIGhl
YWRlcnMucHJpCi0gICAgIyBhcyBhIGJhc2lzIGZvciBvdXIgaW5zdGFsbC1ydWxlcwotICAgIEhF
QURFUlNfUFJJID0gJCR7Uk9PVF9CVUlMRF9ESVJ9L2luY2x1ZGUvJCR7UVQud2Via2l0Lm5hbWV9
L2hlYWRlcnMucHJpCi0gICAgIWluY2x1ZGUoJCRIRUFERVJTX1BSSSk6IGVycm9yKEZhaWxlZCB0
byByZXNvbHZlIGluc3RhbGwgaGVhZGVycykKLQotICAgIGhlYWRlcnMuZmlsZXMgPSAkJFNZTkNR
VC5IRUFERVJfRklMRVMgJCRTWU5DUVQuSEVBREVSX0NMQVNTRVMKLSAgICAhaXNFbXB0eShJTlNU
QUxMX0hFQURFUlMpOiBoZWFkZXJzLnBhdGggPSAkJElOU1RBTExfSEVBREVSUy8kJHtUQVJHRVR9
Ci0gICAgZWxzZTogaGVhZGVycy5wYXRoID0gJCRbUVRfSU5TVEFMTF9IRUFERVJTXS8kJHtUQVJH
RVR9Ci0gICAgSU5TVEFMTFMgKz0gaGVhZGVycwotCi0gICAgIWlzRW1wdHkoSU5TVEFMTF9MSUJT
KTogdGFyZ2V0LnBhdGggPSAkJElOU1RBTExfTElCUwotICAgIGVsc2U6IHRhcmdldC5wYXRoID0g
JCRbUVRfSU5TVEFMTF9MSUJTXQotICAgIElOU1RBTExTICs9IHRhcmdldAotCi0gICAgdW5peCB7
Ci0gICAgICAgIENPTkZJRyArPSBjcmVhdGVfcGMgY3JlYXRlX3BybAotICAgICAgICBRTUFLRV9Q
S0dDT05GSUdfTElCRElSID0gJCR0YXJnZXQucGF0aAotICAgICAgICBRTUFLRV9QS0dDT05GSUdf
SU5DRElSID0gJCRoZWFkZXJzLnBhdGgKLSAgICAgICAgUU1BS0VfUEtHQ09ORklHX0RFU1RESVIg
PSBwa2djb25maWcKLSAgICAgICAgbGliX3JlcGxhY2UubWF0Y2ggPSAkJHJlX2VzY2FwZSgkJERF
U1RESVIpCi0gICAgICAgIGxpYl9yZXBsYWNlLnJlcGxhY2UgPSAkJFtRVF9JTlNUQUxMX0xJQlNd
Ci0gICAgICAgIFFNQUtFX1BLR0NPTkZJR19JTlNUQUxMX1JFUExBQ0UgKz0gbGliX3JlcGxhY2UK
LSAgICB9Ci0KLSAgICBtYWMgewotICAgICAgICAhc3RhdGljOmNvbnRhaW5zKFFUX0NPTkZJRywg
cXRfZnJhbWV3b3JrKSB7Ci0gICAgICAgICAgICAjIEJ1aWxkIFF0V2ViS2l0IGFzIGEgZnJhbWV3
b3JrLCB0byBtYXRjaCBob3cgUXQgd2FzIGJ1aWx0Ci0gICAgICAgICAgICBDT05GSUcgKz0gbGli
X2J1bmRsZSBxdF9ub19mcmFtZXdvcmtfZGlyZWN0X2luY2x1ZGVzIHF0X2ZyYW1ld29yawotCi0g
ICAgICAgICAgICAjIEZvciBkZWJ1Z19hbmRfcmVsZWFzZSBjb25maWdzLCBvbmx5IGNvcHkgaGVh
ZGVycyBpbiByZWxlYXNlCi0gICAgICAgICAgICAhZGVidWdfYW5kX3JlbGVhc2V8aWYoYnVpbGRf
cGFzczpDT05GSUcocmVsZWFzZSwgZGVidWd8cmVsZWFzZSkpIHsKLSAgICAgICAgICAgICAgICBG
UkFNRVdPUktfSEVBREVSUy52ZXJzaW9uID0gVmVyc2lvbnMKLSAgICAgICAgICAgICAgICBGUkFN
RVdPUktfSEVBREVSUy5maWxlcyA9ICQke2hlYWRlcnMuZmlsZXN9Ci0gICAgICAgICAgICAgICAg
RlJBTUVXT1JLX0hFQURFUlMucGF0aCA9IEhlYWRlcnMKLSAgICAgICAgICAgICAgICBRTUFLRV9C
VU5ETEVfREFUQSArPSBGUkFNRVdPUktfSEVBREVSUwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgUU1BS0VfTEZMQUdTX1NPTkFNRSA9ICIkJHtRTUFLRV9MRkxBR1NfU09OQU1F
fSQke0RFU1RESVJ9JCR7UU1BS0VfRElSX1NFUH0iCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDlhNGVhOTEyZWYxODQ4MjkyOGNh
YTRiMzUyMmM3ZTQ5ZDk2NWMzNzEuLmQxZTU3NTMxZjNkNzJjZTc0YmRlZmZlYzNhMGUwZjg5NWEz
MzkwZGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMiBAQAorMjAxMi0wOC0wMiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVz
bWFubkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBSZW1vdmUgUXQgNCBzcGVjaWZpYyBjb2Rl
IHBhdGhzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
ODE2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3F0L0V2ZW50U2VuZGVyUXQuY3BwOgorICAgICAgICAoRXZlbnRTZW5kZXI6OnRvdWNo
Q2FuY2VsKToKKyAgICAgICAgKEV2ZW50U2VuZGVyOjpzZW5kVG91Y2hFdmVudCk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5oOgorICAgICAgICAoRXZlbnRTZW5k
ZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0ltYWdlRGlmZi5wcm86CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAg
KiBRdFRlc3RCcm93c2VyL1F0VGVzdEJyb3dzZXIucHJvOgorICAgICAgICAqIFF0VGVzdEJyb3dz
ZXIvY29va2llamFyLmNwcDoKKyAgICAgICAgKFRlc3RCcm93c2VyQ29va2llSmFyOjpUZXN0QnJv
d3NlckNvb2tpZUphcik6CisgICAgICAgICogUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5j
cHA6CisgICAgICAgIChMYXVuY2hlcldpbmRvdzo6c2V0RGlza0NhY2hlKToKKyAgICAgICAgKiBx
bWFrZS9jb25maWd1cmUucHJpOgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvZGVm
YXVsdF9wb3N0LnByZjoKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRf
cHJlLnByZjoKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZjoK
KyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2Z1bmN0aW9ucy5wcmY6CisgICAgICAg
ICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9xdHdlYmtpdC5wcmY6IFJlbW92ZWQuCisgICAgICAg
ICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy91bml4L2RlZmF1bHRfcHJlLnByZjoKKwogMjAxMi0w
OC0wMSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSRUdS
RVNTSU9OKHIxMjM4OTMpOiBSZWZ0ZXN0IG1pc21hdGNoZXMgYXJlIHJ1biB0aHJvdWdoIEltYWdl
RGlmZiB3aXRoIDAuMSB0b2xlcmFuY2UKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0R1bXBSZW5kZXJUcmVlLnBybyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5k
ZXJUcmVlLnBybwppbmRleCBmNDdmYjQzNDRiOWVmODNhNWFhNDZiYjU2ODNkOTIzMTQ5NGFhMTI1
Li45YjY4NjY2ZmFiN2ZiNzg5NzFmZjk5MjU5MzcxYTcwM2NiMTExODZhIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCkBAIC0xNyw5ICsxNyw4IEBAIElOQ0xV
REVQQVRIICs9IFwKICAgICAkJHtST09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQgXAogICAgICQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dURgogCi1RVCA9
IGNvcmUgZ3VpIG5ldHdvcmsgdGVzdGxpYiB3ZWJraXQKK1FUID0gY29yZSBndWkgbmV0d29yayB0
ZXN0bGliIHdlYmtpdCB3aWRnZXRzIHByaW50c3VwcG9ydAogbWFjeDogUVQgKz0geG1sCi1oYXZl
UXQoNSk6IFFUICs9IHdpZGdldHMgcHJpbnRzdXBwb3J0CiAKIGNvbnRhaW5zKERFRklORVMsIEhB
VkVfRk9OVENPTkZJRz0xKTogUEtHQ09ORklHICs9IGZvbnRjb25maWcKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9FdmVudFNlbmRlclF0LmNwcAppbmRleCBjMDUwNmVmZTJkZTMxYWQwZWRmOWMy
ZGM4OTBiNjQ2ZmE2ODY2ZGViLi4xY2FhNGFjZTdlMzk1NjZhN2I3NzE1NjhmYTI5ZmJiN2UyZGVk
ZWNmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9FdmVudFNlbmRlclF0LmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9FdmVudFNlbmRlclF0LmNwcApAQCAtNDc3
LDEzICs0NzcsMTEgQEAgdm9pZCBFdmVudFNlbmRlcjo6dG91Y2hFbmQoKQogICAgIG1fdG91Y2hB
Y3RpdmUgPSBmYWxzZTsKIH0KIAotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNTAwMDAKIHZvaWQgRXZl
bnRTZW5kZXI6OnRvdWNoQ2FuY2VsKCkKIHsKICAgICBzZW5kVG91Y2hFdmVudChRRXZlbnQ6OlRv
dWNoQ2FuY2VsKTsKICAgICBtX3RvdWNoQWN0aXZlID0gZmFsc2U7CiB9Ci0jZW5kaWYKIAogdm9p
ZCBFdmVudFNlbmRlcjo6Y2xlYXJUb3VjaFBvaW50cygpCiB7CkBAIC01MTEsNyArNTA5LDYgQEAg
dm9pZCBFdmVudFNlbmRlcjo6Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCiAKIHZvaWQgRXZl
bnRTZW5kZXI6OnNlbmRUb3VjaEV2ZW50KFFFdmVudDo6VHlwZSB0eXBlKQogewotI2lmIEhBVkUo
UVQ1KQogICAgIHN0YXRpYyBRVG91Y2hEZXZpY2UqIGRldmljZSA9IDA7CiAgICAgaWYgKCFkZXZp
Y2UpIHsKICAgICAgICAgZGV2aWNlID0gbmV3IFFUb3VjaERldmljZTsKQEAgLTUyMCw5ICs1MTcs
NiBAQCB2b2lkIEV2ZW50U2VuZGVyOjpzZW5kVG91Y2hFdmVudChRRXZlbnQ6OlR5cGUgdHlwZSkK
ICAgICB9CiAKICAgICBRVG91Y2hFdmVudCBldmVudCh0eXBlLCBkZXZpY2UsIG1fdG91Y2hNb2Rp
ZmllcnMpOwotI2Vsc2UKLSAgICBRVG91Y2hFdmVudCBldmVudCh0eXBlLCBRVG91Y2hFdmVudDo6
VG91Y2hTY3JlZW4sIG1fdG91Y2hNb2RpZmllcnMpOwotI2VuZGlmCiAgICAgZXZlbnQuc2V0VG91
Y2hQb2ludHMobV90b3VjaFBvaW50cyk7CiAgICAgc2VuZEV2ZW50KG1fcGFnZSwgJmV2ZW50KTsK
ICAgICBRTGlzdDxRVG91Y2hFdmVudDo6VG91Y2hQb2ludD46Okl0ZXJhdG9yIGl0ID0gbV90b3Vj
aFBvaW50cy5iZWdpbigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRXZl
bnRTZW5kZXJRdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRXZlbnRTZW5kZXJRdC5oCmlu
ZGV4IDJjYTFiMTE4NDkwOWQ0YzRkYzRhOWI2YzUzZTI2YzI4MDFkY2M4YTguLjRlYzZmOTJiYjY0
Y2MyOGRlNjcyNGQwYmZkMzIyYzQ3ZDk0MzYxYzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0V2ZW50U2VuZGVyUXQuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9F
dmVudFNlbmRlclF0LmgKQEAgLTc0LDkgKzc0LDcgQEAgcHVibGljIHNsb3RzOgogICAgIHZvaWQg
dG91Y2hTdGFydCgpOwogICAgIHZvaWQgdG91Y2hNb3ZlKCk7CiAgICAgdm9pZCB0b3VjaEVuZCgp
OwotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNTAwMDAKICAgICB2b2lkIHRvdWNoQ2FuY2VsKCk7Ci0j
ZW5kaWYKICAgICB2b2lkIHpvb21QYWdlSW4oKTsKICAgICB2b2lkIHpvb21QYWdlT3V0KCk7CiAg
ICAgdm9pZCB0ZXh0Wm9vbUluKCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9x
dC9JbWFnZURpZmYucHJvIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvSW1hZ2VEaWZmLnBybwpp
bmRleCA3MjllYzI1OWFmMGQ3ODQ1YmQ5MzMwOGUwODhiMTE1ZDIyM2NiMjljLi40MGJjZGZiM2Mx
ZjFhNTY5OTEwOTNhNTc4MmI5MWY0NDQ1MTNiNWE0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9JbWFnZURpZmYucHJvCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0lt
YWdlRGlmZi5wcm8KQEAgLTksNyArOSw2IEBAIFRFTVBMQVRFID0gYXBwCiBUQVJHRVQgPSBJbWFn
ZURpZmYKIERFU1RESVIgPSAkJFJPT1RfQlVJTERfRElSL2JpbgogCi1RVCA9IGNvcmUgZ3VpCi1o
YXZlUXQoNSk6IFFUICs9IHdpZGdldHMKK1FUID0gY29yZSBndWkgd2lkZ2V0cwogCiBTT1VSQ0VT
ID0gSW1hZ2VEaWZmLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFp
bi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcAppbmRleCA2NGQyYjE2YjM3
Y2U2MTQyMzc4ODM4MTQ2NGRlM2Q0ZTI2NDAzMWM5Li5iNzcxNGYzYjI0MzIwMjIwMDE1MTI5Mzg4
NzE4ZjA1OTUxMWZmYWI3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWlu
LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcApAQCAtMTIzLDI3ICsx
MjMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIFFBcHBsaWNhdGlv
biBhcHAoYXJnYywgYXJndik7CiAgICAgYXBwLnNldFF1aXRPbkxhc3RXaW5kb3dDbG9zZWQoZmFs
c2UpOwogCi0jaWYgSEFWRShRVDUpCiAgICAgUUNvcmVBcHBsaWNhdGlvbjo6c2V0QXR0cmlidXRl
KFF0OjpBQV9Vc2U5NkRwaSwgdHJ1ZSk7Ci0jZWxzZQotI2lmZGVmIFFfV1NfWDExCi0gICAgUVgx
MUluZm86OnNldEFwcERwaVkoMCwgOTYpOwotICAgIFFYMTFJbmZvOjpzZXRBcHBEcGlYKDAsIDk2
KTsKLSNlbmRpZgotCi0gICAvKgotICAgICogUUFwcGxpY2F0aW9uIHdpbGwgaW5pdGlhbGl6ZSB0
aGUgZGVmYXVsdCBhcHBsaWNhdGlvbiBmb250IGJhc2VkCi0gICAgKiBvbiB0aGUgYXBwbGljYXRp
b24gRFBJIGF0IGNvbnN0cnVjdGlvbiB0aW1lLCB3aGljaCBtaWdodCBiZQotICAgICogZGlmZmVy
ZW50IGZyb20gdGhlIERQSSB3ZSBleHBsaWNpdGx5IHNldCB1c2luZyBRWDExSW5mbyBhYm92ZS4K
LSAgICAqIFNlZTogaHR0cHM6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUct
MjE2MDMKLSAgICAqCi0gICAgKiBUbyBlbnN1cmUgdGhhdCB0aGUgYXBwbGljYXRpb24gZm9udCBE
UEkgbWF0Y2hlcyB0aGUgYXBwbGljYXRpb24KLSAgICAqIERQSSwgd2Ugb3ZlcnJpZGUgdGhlIGFw
cGxpY2F0aW9uIGZvbnQgdXNpbmcgdGhlIGZvbnQgd2UgZ2V0IGZyb20KLSAgICAqIGEgUVdpZGdl
dCwgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiByZXNvbHZlZCBhZ2FpbnN0IHRoZSBleGlzdGluZwot
ICAgICogZGVmYXVsdCBmb250LCBidXQgd2l0aCB0aGUgY29ycmVjdCBwYWludC1kZXZpY2UgRFBJ
LgotICAgKi8KLSAgICBRQXBwbGljYXRpb246OnNldEZvbnQoUVdpZGdldCgpLmZvbnQoKSk7Ci0j
ZW5kaWYKIAogICAgIFdURkluc3RhbGxSZXBvcnRCYWNrdHJhY2VPbkNyYXNoSG9vaygpOwogCmRp
ZmYgLS1naXQgYS9Ub29scy9RdFRlc3RCcm93c2VyL1F0VGVzdEJyb3dzZXIucHJvIGIvVG9vbHMv
UXRUZXN0QnJvd3Nlci9RdFRlc3RCcm93c2VyLnBybwppbmRleCA2YzkzNTJjYmM5NTVkNmMwOGQy
NzI5MmFlMjcyZWRiMGFmOGRhOTA4Li41YzEyM2Y5MGY4YTM0OTE0MTlmOTlmZTRiN2ZkMGE0OGUx
MTE2ODI2IDEwMDY0NAotLS0gYS9Ub29scy9RdFRlc3RCcm93c2VyL1F0VGVzdEJyb3dzZXIucHJv
CisrKyBiL1Rvb2xzL1F0VGVzdEJyb3dzZXIvUXRUZXN0QnJvd3Nlci5wcm8KQEAgLTQyLDEwICs0
Miw5IEBAIFdFQktJVCArPSB3dGYgd2ViY29yZQogCiBERVNURElSID0gJCRST09UX0JVSUxEX0RJ
Ui9iaW4KIAotUVQgKz0gbmV0d29yayB3ZWJraXQKK1FUICs9IG5ldHdvcmsgd2Via2l0IHByaW50
c3VwcG9ydCB3aWRnZXRzCiAKIG1hY3g6UVQgKz0geG1sCi1oYXZlUXQoNSk6IFFUICs9IHByaW50
c3VwcG9ydCB3aWRnZXRzCiAKIGNvbnRhaW5zKERFRklORVMsIEhBVkVfRk9OVENPTkZJRz0xKTog
UEtHQ09ORklHICs9IGZvbnRjb25maWcKIApkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0QnJvd3Nl
ci9jb29raWVqYXIuY3BwIGIvVG9vbHMvUXRUZXN0QnJvd3Nlci9jb29raWVqYXIuY3BwCmluZGV4
IGI4ZWQ3ZDAwMzlkYTE0YzE4YzMxMDk2YjE5NTc1NTUzM2MwMjBhZTQuLmNhMWI4NDYzNzlkNWU1
ZDAxNWI0MjU3OGY3ZDMwM2Q3YmM3MjU2ZjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1F0VGVzdEJyb3dz
ZXIvY29va2llamFyLmNwcAorKysgYi9Ub29scy9RdFRlc3RCcm93c2VyL2Nvb2tpZWphci5jcHAK
QEAgLTI5LDExICsyOSw3IEBACiAKICNpbmNsdWRlICJjb29raWVqYXIuaCIKIAotI2lmIEhBVkUo
UVQ1KQogI2luY2x1ZGUgPFFTdGFuZGFyZFBhdGhzPgotI2Vsc2UKLSNpbmNsdWRlIDxRRGVza3Rv
cFNlcnZpY2VzPgotI2VuZGlmCiAjaW5jbHVkZSA8UURpcj4KICNpbmNsdWRlIDxRVGV4dFN0cmVh
bT4KIApAQCAtNDgsMTIgKzQ0LDggQEAgVGVzdEJyb3dzZXJDb29raWVKYXI6OlRlc3RCcm93c2Vy
Q29va2llSmFyKFFPYmplY3QqIHBhcmVudCkKICAgICBjb25uZWN0KCZtX3RpbWVyLCBTSUdOQUwo
dGltZW91dCgpKSwgdGhpcywgU0xPVChzYXZlVG9EaXNrKCkpKTsKIAogI2lmbmRlZiBRVF9OT19E
RVNLVE9QU0VSVklDRVMKLSNpZiBIQVZFKFFUNSkKICAgICBRU3RyaW5nIHBhdGggPSBRU3RhbmRh
cmRQYXRoczo6d3JpdGFibGVMb2NhdGlvbihRU3RhbmRhcmRQYXRoczo6Q2FjaGVMb2NhdGlvbik7
CiAjZWxzZQotICAgIFFTdHJpbmcgcGF0aCA9IFFEZXNrdG9wU2VydmljZXM6OnN0b3JhZ2VMb2Nh
dGlvbihRRGVza3RvcFNlcnZpY2VzOjpDYWNoZUxvY2F0aW9uKTsKLSNlbmRpZgotI2Vsc2UKICAg
ICBRU3RyaW5nIHBhdGggPSBRRGlyOjpob21lUGF0aCgpICsgIi8uUXRUZXN0QnJvd3NlciI7CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5j
cHAgYi9Ub29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93LmNwcAppbmRleCBlNGFlNDU2
ZGJjMDQ4ZTcwMDNmOTdiODAyZmFmMmVhODhiZDQ4YjAwLi40ZmM5MGQ3MDJjNDRhNDg5OTUyNWU0
OTFiZjhmYzM3NGI4OWI4MmE4IDEwMDY0NAotLS0gYS9Ub29scy9RdFRlc3RCcm93c2VyL2xhdW5j
aGVyd2luZG93LmNwcAorKysgYi9Ub29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93LmNw
cApAQCAtNjYsMTEgKzY2LDcgQEAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoUVRfTk9fTkVUV09S
S0RJU0tDQUNIRSkgJiYgIWRlZmluZWQoUVRfTk9fREVTS1RPUFNFUlZJQ0VTKQotI2lmIEhBVkUo
UVQ1KQogI2luY2x1ZGUgPFFTdGFuZGFyZFBhdGhzPgotI2Vsc2UKLSNpbmNsdWRlIDxRRGVza3Rv
cFNlcnZpY2VzPgotI2VuZGlmCiAjaW5jbHVkZSA8UXROZXR3b3JrL1FOZXR3b3JrRGlza0NhY2hl
PgogI2VuZGlmCiAKQEAgLTgwOCwxMSArODA0LDcgQEAgdm9pZCBMYXVuY2hlcldpbmRvdzo6c2V0
RGlza0NhY2hlKGJvb2wgZW5hYmxlKQogICAgIFFOZXR3b3JrRGlza0NhY2hlKiBjYWNoZSA9IDA7
CiAgICAgaWYgKGVuYWJsZSkgewogICAgICAgICBjYWNoZSA9IG5ldyBRTmV0d29ya0Rpc2tDYWNo
ZSgpOwotI2lmIEhBVkUoUVQ1KQogICAgICAgICBRU3RyaW5nIGNhY2hlTG9jYXRpb24gPSBRU3Rh
bmRhcmRQYXRoczo6d3JpdGFibGVMb2NhdGlvbihRU3RhbmRhcmRQYXRoczo6Q2FjaGVMb2NhdGlv
bik7Ci0jZWxzZQotICAgICAgICBRU3RyaW5nIGNhY2hlTG9jYXRpb24gPSBRRGVza3RvcFNlcnZp
Y2VzOjpzdG9yYWdlTG9jYXRpb24oUURlc2t0b3BTZXJ2aWNlczo6Q2FjaGVMb2NhdGlvbik7Ci0j
ZW5kaWYKICAgICAgICAgY2FjaGUtPnNldENhY2hlRGlyZWN0b3J5KGNhY2hlTG9jYXRpb24pOwog
ICAgIH0KICAgICBwYWdlKCktPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPnNldENhY2hlKGNhY2hl
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL2NvbmZpZ3VyZS5wcmkgYi9Ub29scy9xbWFrZS9j
b25maWd1cmUucHJpCmluZGV4IDY0MWRhOWYyYzk3ZTQwY2IxMzYyYmJlY2YzMWM5Yzk5Zjc1NTJm
ZjcuLjUwNTdmNTc0MGY1OWFkNDI3NzQ3ZTg1YWJkYjc2YzFkZTUzYTY1MTAgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL3FtYWtlL2NvbmZpZ3VyZS5wcmkKKysrIGIvVG9vbHMvcW1ha2UvY29uZmlndXJlLnBy
aQpAQCAtNSw3ICs1LDcgQEAKICMgU2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVy
dmlldyBvZiB0aGUgYnVpbGQgc3lzdGVtCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaGF2ZVF0KDUpOiFxdWlj
a19jaGVjayB7CishcXVpY2tfY2hlY2sgewogICAgIGxvYWQoY29uZmlndXJlKQogICAgIFFNQUtF
X0NPTkZJR19URVNUU19ESVIgPSAkJFBXRC9jb25maWcudGVzdHMKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3Bvc3QucHJmIGIvVG9vbHMvcW1ha2Uv
bWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3Bvc3QucHJmCmluZGV4IDc4YTBhODJiNGQ4YjE2MTgx
ZDhlMmU2ZDFjNTQ0NDI2MWVkNjczOTguLmQ4ODg4NGY2OWVmMmM4ODM5MzA5N2U5NjI0MjY1NGFj
ODI1ZDI3MmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZGVmYXVs
dF9wb3N0LnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2RlZmF1bHRfcG9z
dC5wcmYKQEAgLTE5LDggKzE5LDYgQEAgaXNFbXB0eShPQkpFQ1RTX0RJUik6IE9CSkVDVFNfRElS
ID0gb2JqLyQkYWN0aXZlQnVpbGRDb25maWcoKQogREVGSU5FUyArPSBcCiAgICAgQlVJTERJTkdf
UVRfXz0xCiAKLWhhdmVRdCg1KTogREVGSU5FUyArPSBIQVZFX1FUNT0xCi0KIENPTkZJRyhyZWxl
YXNlLCBkZWJ1Z3xyZWxlYXNlKTogREVGSU5FUyAqPSBOREVCVUcKIAogQ09ORklHICs9IGRlcGVu
ZF9pbmNsdWRlcGF0aApAQCAtMTQ4LDExICsxNDYsNiBAQCBjb250YWlucyhURU1QTEFURSwgbGli
KSB7CiB9CiAKIGNvbnRhaW5zKFFULCB3ZWJraXQpIHsKLSAgICBoYXZlUXQoNCkgewotICAgICAg
ICAjIFF0IDQgc3RpbGwgdXNlcyBjdXN0b20gcnVsZXMgdG8gZGVwZW5kIG9uIFF0V2ViS2l0Ci0g
ICAgICAgIGxvYWQocXR3ZWJraXQpCi0gICAgfQotCiAgICAgIyBJbiBhZGRpdGlvbiB0byB0aGUg
bWFpbiBzaGFyZWQgUXRXZWJLaXQgbGlicmFyeSB3ZSBhbHNvCiAgICAgIyBuZWVkIHRvIGxpbmsg
dG8gYW55IGludGVybWVkaWF0ZSBzaGFyZWQgbGlicmFyaWVzLgogICAgIGZvcmNlX3N0YXRpY19s
aWJzX2FzX3NoYXJlZCB7CkBAIC0yMzgsNDMgKzIzMSw2IEBAIGZvcihzdWJkaXIsIFNVQkRJUlMp
IHsKICAgICB9CiB9CiAKLSMgRG9pbmcgJyQoTUFLRSkgcW1ha2UnIHNob3VsZCByZWN1cnNlIHRo
cm91Z2ggYWxsIHN1YmRpcnMuIEluIFF0NSwgdGhpcyBpcwotIyBhdXRvbWF0aWMgKGZvciAncW1h
a2VfYWxsJywgd2hpbGUgJ3FtYWtlJyBkb2VzIG5vdCBlbnRlciBzdWJkaXJzIGF0IGFsbCkuCi1o
YXZlUXQoNCk6Y29udGFpbnMoVEVNUExBVEUsIHN1YmRpcnMpOiFub19yZWN1cnNpdmVfcW1ha2Ug
ewotICAgIHJlY3Vyc2l2ZV9xbWFrZS50YXJnZXQgPSBxbWFrZV9hbGwKLQotICAgICMgV2UgY291
bGQgZG8gdGhpcyB1c2luZyBDT05GSUcgKz0gcmVjdXJzZSBidXQgdGhhdCBhZGRzCi0gICAgIyBh
IGRlcGVuZGVuY3kgZm9yIGVhY2ggcmVjdXJzaXZlIHRhcmdldCBvbiBpdHMgbWFrZWZpbGUsCi0g
ICAgIyB3aGlsZSB3ZSB3YW50IGl0IHRvIGRlcGVuZCBvbiAqLXFtYWtlX2FsbCwgc28gdGhhdCB3
ZQotICAgICMgZG9uJ3QgZW5kIHVwIHJ1bm5pbmcgcW1ha2UgdHdpY2UuCi0KLSAgICBmb3Ioc3Vi
ZGlyLCBTVUJESVJTKSB7Ci0gICAgICAgIGNvbnRhaW5zKE5PX1JFQ1VSU0lWRV9RTUFLRV9TVUJE
SVJTLCAkJHtzdWJkaXJ9KSB7Ci0gICAgICAgICAgICBkZWJ1ZygxLCBTa2lwcGluZyByZWN1cnNp
dmUgcW1ha2UgZm9yICQke3N1YmRpcn0pCi0gICAgICAgICAgICBuZXh0KCkKLSAgICAgICAgfQot
Ci0gICAgICAgIHN1YmRpcl9jb25maWcgPSAkJGV2YWwoJCR7c3ViZGlyfS5DT05GSUcpCi0gICAg
ICAgIGNvbnRhaW5zKHN1YmRpcl9jb25maWcsIG5vX2RlZmF1bHRfdGFyZ2V0KTpuZXh0KCkKLQot
ICAgICAgICBkZWJ1ZygxLCAiTWFraW5nIHFtYWtlIHJlY3Vyc2l2ZSBmb3IgJCRzdWJkaXIiKQot
Ci0gICAgICAgIHZhcmlhYmxlcyA9ICQkY29tcHV0ZVN1YmRpclZhcmlhYmxlcygkJHtzdWJkaXJ9
KQotCi0gICAgICAgIHRhcmdldF9uYW1lID0gJCRldmFsKCQke3ZhcmlhYmxlc30udGFyZ2V0KS1y
ZWN1cnNpdmVfcW1ha2UKLQotICAgICAgICBldmFsKCQke3RhcmdldF9uYW1lfS50YXJnZXQgPSAk
JHRhcmdldF9uYW1lKQotICAgICAgICBldmFsKCQke3RhcmdldF9uYW1lfS5kZXBlbmRzID0gJCRl
dmFsKCQke3ZhcmlhYmxlc30udGFyZ2V0KS1xbWFrZV9hbGwpCi0gICAgICAgIGNvbW1hbmRzID0g
JCRldmFsKCQke3ZhcmlhYmxlc30uc3ViZGlyX2NvbW1hbmQpICQoTUFLRSkgLWYgJCRldmFsKCQk
e3ZhcmlhYmxlc30ubWFrZWZpbGUpIHFtYWtlCi0gICAgICAgIGV2YWwoJCR7dGFyZ2V0X25hbWV9
LmNvbW1hbmRzID0gJCRjb21tYW5kcykKLQotICAgICAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9
ICQke3RhcmdldF9uYW1lfQotICAgICAgICByZWN1cnNpdmVfcW1ha2UuZGVwZW5kcyArPSAkJHt0
YXJnZXRfbmFtZX0KLSAgICB9Ci0KLSAgICAhaXNFbXB0eShyZWN1cnNpdmVfcW1ha2UuZGVwZW5k
cyk6IFFNQUtFX0VYVFJBX1RBUkdFVFMgKz0gcmVjdXJzaXZlX3FtYWtlCi19Ci0KIGluY3JlbWVu
dGFsLnRhcmdldCA9IGluY3JlbWVudGFsCiBpbmNyZW1lbnRhbC5jb21tYW5kcyA9ICQoTUFLRSkg
LWYgJChNQUtFRklMRSkgcW1ha2VfYWxsICYmICQoTUFLRSkgLWYgJChNQUtFRklMRSkKIFFNQUtF
X0VYVFJBX1RBUkdFVFMgKz0gaW5jcmVtZW50YWwKQEAgLTMxMiw5ICsyNjgsNCBAQCBmb3IodGFy
Z2V0LCAkJGxpc3QoJCR1bmlxdWUoREVGQVVMVF9UQVJHRVRTKSkpIHsKICMgcmVsYXRpdmUuCiBE
RVNURElSID0gJCRyZXBsYWNlKERFU1RESVIsIF4kJHtST09UX0JVSUxEX0RJUn0sICQke0JVSUxE
X1JPT1RfUkVMQVRJVkVfVE9fT1VUX1BXRH0pCiAKLSMgU2luY2Ugd2UgbG9hZGVkIG91ciBvd24g
cnVsZXMgZm9yIGRlcGVuZGluZyBvbiBRdFdlYktpdCwgYW5kIHdlCi0jIGhhdmUgbm8gbW9yZSBs
b2dpYyB0aGF0IGNoZWNrcyBjb250YWlucyhRVCwgd2Via2l0KSwgd2UgdW5zZXQgaXQKLSMgaGVy
ZSBzbyB0aGF0IFF0IHdpbGwgbm90IGFkZCBpdHMgb3duIGluY2x1ZGUgYW5kIGxpYnJhcnkgcGF0
aHMuCi1oYXZlUXQoNCk6IFFUIC09IHdlYmtpdCB3ZWJraXQtcHJpdmF0ZQotCiBsb2FkKGRlZmF1
bHRfcG9zdCkgIyBMb2FkIFF0J3MgZGVmYXVsdHMKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21r
c3BlY3MvZmVhdHVyZXMvZGVmYXVsdF9wcmUucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0
dXJlcy9kZWZhdWx0X3ByZS5wcmYKaW5kZXggYThiYjc1ODMwNzNlZDEzMmJiN2NlYjcyYzZlMGE2
NDNhNGMyNzQxZS4uMWY5NGEzYmQ1MjE0ZTA1NTZiZDIyNGJmMWQyMGMxMjlkYThiN2FjMyAxMDA2
NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3ByZS5wcmYKKysr
IGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9kZWZhdWx0X3ByZS5wcmYKQEAgLTY2LDEy
ICs2Niw2IEBAIHdpbjMyKiB7CiAgICAgaXNFbXB0eShwd2Rfc3RhcnRzX3dpdGhfc2xhc2gpOiBD
T05GSUcgKz0gd2luX2NtZF9zaGVsbAogfQogCi1oYXZlUXQoNCkgewotICAgICMgTWFrZSBzdXJl
IFFNQUtFUEFUSCBpcyBzZXQgZm9yIHJlY3Vyc2l2ZSB0YXJnZXRzCi0gICAgd2luX2NtZF9zaGVs
bDogUU1BS0VfUU1BS0UgPSBcKHNldCBRTUFLRVBBVEg9JCQoUU1BS0VQQVRIKVwpICYmICQkUU1B
S0VfUU1BS0UKLSAgICBlbHNlOiBRTUFLRV9RTUFLRSA9IFFNQUtFUEFUSD0kJChRTUFLRVBBVEgp
ICQkUU1BS0VfUU1BS0UKLX0KLQogIyBEZWZhdWx0IGxvY2F0aW9uIG9mIGdlbmVyYXRlZCBzb3Vy
Y2VzCiBHRU5FUkFURURfU09VUkNFU19ERVNURElSID0gZ2VuZXJhdGVkCiAKQEAgLTkyLDQyICs4
NiwyNCBAQCB3aW4zMi1tc3ZjKjogTUFLRUZJTEVfTk9PUF9DT01NQU5EID0gQGVjaG8gPk5VTAog
c2NyYXRjaGJveDogUFlUSE9OID0gcHl0aG9uMi42CiBlbHNlOiBQWVRIT04gPSBweXRob24KIAot
IWhhdmVRdCg0LCA4KTohaGF2ZVF0KDUpOiFyZWN1cnNpdmVfaW5jbHVkZTogZXJyb3IoIkJ1aWxk
aW5nIFdlYktpdCB3aXRoIFF0IHZlcnNpb25zIG9sZGVyIHRoYW4gNC44IGlzIG5vdCBzdXBwb3J0
ZWQuIikKLQotIWhhdmVRdCg1KTohbm9fd2Via2l0MiB7Ci0gICAgcm9vdF9wcm9qZWN0X2ZpbGUg
ewotICAgICAgICBtZXNzYWdlKCJCdWlsZGluZyBXZWJLaXQyIHdpdGggUXQgdmVyc2lvbnMgb2xk
ZXIgdGhhbiA1LjAgaXMgbm90IHN1cHBvcnRlZC4gRGlzYWJsaW5nIFdlYktpdDIuIikKLSAgICAg
ICAgbWVzc2FnZSgiUmVhZCBodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vd2Via2l0LXF0QGxp
c3RzLndlYmtpdC5vcmcvbXNnMDE2NzQuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKQotICAg
IH0KLSAgICBDT05GSUcgKz0gbm9fd2Via2l0MgotfQorIWhhdmVRdCg1KTohcmVjdXJzaXZlX2lu
Y2x1ZGU6IGVycm9yKCJCdWlsZGluZyBXZWJLaXQgd2l0aCBRdCB2ZXJzaW9ucyBvbGRlciB0aGFu
IDUuMCBpcyBub3Qgc3VwcG9ydGVkLiIpCiAKLWhhdmVRdCg1KTogewotICAgICFoYXZlUXRNb2R1
bGUod2lkZ2V0cyl8IWhhdmVRdE1vZHVsZShwcmludHN1cHBvcnQpIHsKLSAgICAgICAgcm9vdF9w
cm9qZWN0X2ZpbGU6IG1lc3NhZ2UoIldlYktpdDEgcmVxdWlyZXMgdGhlIFF0V2lkZ2V0cyBhbmQg
UXRQcmludFN1cHBvcnQgbW9kdWxlcy4gRGlzYWJsaW5nIFdlYktpdDEuIikKLSAgICAgICAgQ09O
RklHICs9IG5vX3dlYmtpdDEKLSAgICB9CishaGF2ZVF0TW9kdWxlKHdpZGdldHMpfCFoYXZlUXRN
b2R1bGUocHJpbnRzdXBwb3J0KSB7CisgICAgcm9vdF9wcm9qZWN0X2ZpbGU6IG1lc3NhZ2UoIldl
YktpdDEgcmVxdWlyZXMgdGhlIFF0V2lkZ2V0cyBhbmQgUXRQcmludFN1cHBvcnQgbW9kdWxlcy4g
RGlzYWJsaW5nIFdlYktpdDEuIikKKyAgICBDT05GSUcgKz0gbm9fd2Via2l0MQogfQogCiAjIFdl
IHVzZSBwcml2YXRlX3Rlc3RzIHRvIGRldGVjdCBkZXZlbG9wZXIgYnVpbGQsIHNpbmNlIHRoZSBk
ZXN0ZGlyIHdpbGwKICMgYWx3YXlzIGJlIG91ciB3ZWJraXQgYnVpbGQgZGlyLiBUaGlzIG1pZ2h0
IGNoYW5nZSBhcyBjb25maWd1cmUgY2hhbmdlcy4KIGNvbnRhaW5zKFFUX0NPTkZJRywgcHJpdmF0
ZV90ZXN0cyk6IENPTkZJRyArPSBxdF9kZXZlbG9wZXJfYnVpbGQKIAotaGF2ZVF0KDQpIHsKLSAg
ICAjIFF0NSB3aWxsIGF1dG9tYXRpY2FsbHkgbG9hZCB0aGUgbW9kdWxlIGZpbGVzIGZvciB1cywg
YnV0IGZvciBRdDQKLSAgICAjIHdlIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkgc28gdGhhdCB0aGUg
dmFyaW91cyBRVC53ZWJraXQuZm9vIG5hbWVzCi0gICAgIyBhcmUgYXZhaWxhYmxlLgotICAgIGlu
Y2x1ZGUoJCR7Uk9PVF9XRUJLSVRfRElSfS9Ub29scy9xbWFrZS9xdF93ZWJraXQucHJpKQotfQot
CiAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBzcGVjaWZpYyBwbGF0Zm9ybXMKIENPTkZJRyArPSBp
bmNsdWRlX3dlYmluc3BlY3RvcgogCiAjIFRyeSB0byBsb2NhdGUgc3FsaXRlMyBzb3VyY2UgKGZv
ciBXZWJDb3JlKQogU1FMSVRFM1NSQ0RJUiA9ICQkKFNRTElURTNTUkNESVIpCiBpc0VtcHR5KFNR
TElURTNTUkNESVIpIHsKLSAgICBoYXZlUXQoNSk6IFNRTElURTNTUkNESVIgPSAkJFFULmNvcmUu
c291cmNlcy8uLi8zcmRwYXJ0eS9zcWxpdGUvCi0gICAgZWxzZTogU1FMSVRFM1NSQ0RJUiA9ICQk
W1FUX0lOU1RBTExfUFJFRklYXS9zcmMvM3JkcGFydHkvc3FsaXRlLworICAgIFNRTElURTNTUkNE
SVIgPSAkJFFULmNvcmUuc291cmNlcy8uLi8zcmRwYXJ0eS9zcWxpdGUvCiB9CiAKICMgLS0tLS0t
LS0tIE1ha2UgZmVhdHVyZXMgYXZhaWxhYmxlIHRvIEpTQyAtLS0tLS0tLS0tLS0KZGlmZiAtLWdp
dCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmIGIvVG9vbHMvcW1h
a2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKaW5kZXggNGE2NDQzNDI3MDQxYTI5YmFh
ZGU4MGYxYjllODhkOTdiMGUyYWIyZS4uMTE3Y2M0MzRhMDY2Yjk5Y2MxZTM1ZTQzYjE4NTNlMmE2
ZjZjMjIwZiAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJl
cy5wcmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKQEAg
LTMxLDMwICszMSwxNyBAQCBsb2FkKG1vYmlsaXR5Y29uZmlnLCB0cnVlKQogIyBieSBoYXZpbmcg
dGhlIGZlYXR1cmUgZGlzYWJsZWQgaW4gZmVhdHVyZXMucHJpLiBOb3IgZG8geW91IGhhdmUgdG8K
ICMgdW5zZXQgdGhlIG9wcG9zaXRlIHZhbHVlLCB0aGF0J3MgaGFuZGxlZCBhdXRvbWF0aWNhbGx5
IGZvciB5b3UuCiAKLSMgRm9yIE1hYyB3ZSBkbyBub3QgcmVseSBvbiBRVF9DT05GSUcsIGJlY2F1
c2UgaWN1IGlzIG5vdCBvZmZpY2lhbGx5IHN1cHBvcnRlZCBmb3IgYWxsIG9mIHF0LgotaGF2ZVF0
KDUpOmlmKGNvbnRhaW5zKFFUX0NPTkZJRyxpY3UpfG1hYykgewotICAgIERFRklORVMgKz0gV1RG
X1VTRV9JQ1VfVU5JQ09ERT0xCi0gICAgREVGSU5FUyAtPSBXVEZfVVNFX1FUNF9VTklDT0RFPTEK
LX0gZWxzZSB7Ci0gICAgREVGSU5FUyArPSBXVEZfVVNFX1FUNF9VTklDT0RFPTEKLSAgICBERUZJ
TkVTIC09IFdURl9VU0VfSUNVX1VOSUNPREU9MQotfQorREVGSU5FUyArPSBXVEZfVVNFX0lDVV9V
TklDT0RFPTEKK0RFRklORVMgLT0gV1RGX1VTRV9RVDRfVU5JQ09ERT0xCiAKICFjb250YWlucyhE
RUZJTkVTLCBIQVZFX1FSQVdGT05UPS4pIHsKICAgICAjIFVzZSBvZiBRUmF3Rm9udCBpbiBRdCA1
OgotICAgIGhhdmVRdCg1KTogREVGSU5FUyArPSBIQVZFX1FSQVdGT05UPTEKKyAgICBERUZJTkVT
ICs9IEhBVkVfUVJBV0ZPTlQ9MQogfQogCiAjIFdlIG5lZWQgZm9udGNvbmZpZyB0byBzZXQgdXAg
dGhlIHRlc3QgZm9udHMgZm9yIER1bXBSZW5kZXJUcmVlIGFuZCBXZWJLaXRUZXN0UnVubmVyLgot
aGF2ZVF0KDUpIHsKLSAgICBjb25maWdfZm9udGNvbmZpZzohbWFjIHsKLSAgICAgICAgREVGSU5F
UyArPSBIQVZFX0ZPTlRDT05GSUc9MQotICAgIH0KLX0gZWxzZSB7Ci0gICAgIyBRdCA0Ci0gICAg
dW5peDohbWFjOiFlbWJlZGRlZCB7Ci0gICAgICAgIERFRklORVMgKz0gSEFWRV9GT05UQ09ORklH
PTEKLSAgICB9Citjb25maWdfZm9udGNvbmZpZzohbWFjIHsKKyAgICBERUZJTkVTICs9IEhBVkVf
Rk9OVENPTkZJRz0xCiB9CiAKICMgV2UgbmVlZCBsaWJ4bWwyIGNvbmZpZyB0ZXN0IHRvIGRldGVy
bWluZSB0byB1c2UgbGlieG1sMiBvciBub3QKQEAgLTgwLDcgKzY3LDcgQEAgaGF2ZVF0KDUpIHsK
IAogIyBOZXNjYXBlIHBsdWdpbnMgc3VwcG9ydCAoTlBBUEkpCiAhY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9LikgewotICAgIGhhdmVRdCg1KTp4bGliQXZhaWxh
YmxlKCkgeworICAgIHhsaWJBdmFpbGFibGUoKSB7CiAgICAgICAgIERFRklORVMgKz0gRU5BQkxF
X05FVFNDQVBFX1BMVUdJTl9BUEk9MQogICAgICAgICBDT05GSUcgKz0gcGx1Z2luX2JhY2tlbmRf
eGxpYgogICAgIH0gZWxzZTogdW5peHx3aW4zMi0qOiFlbWJlZGRlZDohd2luY2UqIHsKQEAgLTEw
NSw3ICs5Miw3IEBAIGhhdmVRdCg1KSB7CiB9CiAKICMgUVN0eWxlIGRldGVjdGlvbgotaGF2ZVF0
KDQpfGhhdmVRdE1vZHVsZSh3aWRnZXRzKTogREVGSU5FUyArPSBIQVZFX1FTVFlMRT0xCitoYXZl
UXRNb2R1bGUod2lkZ2V0cyk6IERFRklORVMgKz0gSEFWRV9RU1RZTEU9MQogCiAjIFdlYkdMIHN1
cHBvcnQKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VCR0w9LikgewpAQCAtMTM0LDE3ICsx
MjEsOSBAQCBoYXZlUXQoNCl8aGF2ZVF0TW9kdWxlKHdpZGdldHMpOiBERUZJTkVTICs9IEhBVkVf
UVNUWUxFPTEKIH0KIAogIyBvcmllbnRhdGlvbiBzdXBwb3J0Ci1oYXZlUXQoNSkgewotICAgIGhh
dmVRdE1vZHVsZShzZW5zb3JzKSB7Ci0gICAgICAgICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
T1JJRU5UQVRJT05fRVZFTlRTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9PUklFTlRBVElPTl9FVkVO
VFM9MQotICAgICAgICAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RFVklDRV9PUklFTlRBVElP
Tj0uKTogREVGSU5FUyArPSBFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OPTEKLSAgICB9Ci19IGVs
c2UgewotICAgICMgUXQgNCB3aXRoIFF0IE1vYmlsaXR5Ci0gICAgY29udGFpbnMoTU9CSUxJVFlf
Q09ORklHLCBzZW5zb3JzKSB7Ci0gICAgICAgICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfT1JJ
RU5UQVRJT05fRVZFTlRTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFM9
MQotICAgICAgICAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTj0u
KTogREVGSU5FUyArPSBFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OPTEKLSAgICB9CitoYXZlUXRN
b2R1bGUoc2Vuc29ycykgeworICAgICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfT1JJRU5UQVRJ
T05fRVZFTlRTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9PUklFTlRBVElPTl9FVkVOVFM9MQorICAg
ICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OPS4pOiBERUZJTkVT
ICs9IEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT049MQogfQogCiAjIEhUTUw1IE1lZGlhIFN1cHBv
cnQKQEAgLTE2OSwxNSArMTQ4LDggQEAgaGF2ZVF0KDUpIHsKICAgICAhbm9fd2Via2l0MjogREVG
SU5FUyArPSBFTkFCTEVfRlVMTFNDUkVFTl9BUEk9MQogfQogCi1oYXZlUXQoNCkgewotICAgIGhh
dmVRdE1vZHVsZShkZWNsYXJhdGl2ZSk6IERFRklORVMgKz0gSEFWRV9RUVVJQ0sxPTEKLX0gZWxz
ZSB7Ci0gICAgIyBGSVhNRTogQWRkIFF0IDUgUVF1aWNrMSBzdXBwb3J0IG9uY2UgUURlY2xhcmF0
aXZlRW5naW5lIGluIFFRdWljazIKLSAgICAjIGlzIGNhbGxlZCBRbWxFbmdpbmUgYW5kIGl0IGlz
IHNhZmUgZm9yIHVzIHRvIHVzZSBRUXVpY2sxIGFnYWluLgotfQotCiAjIFhjb21wb3NpdGUgU3Vw
cG9ydAotaGF2ZVF0KDUpOmxpbnV4LSo6Y29uZmlnX2xpYlhjb21wb3NpdGU6IERFRklORVMgKz0g
SEFWRV9YQ09NUE9TSVRFPTEKK2xpbnV4LSo6Y29uZmlnX2xpYlhjb21wb3NpdGU6IERFRklORVMg
Kz0gSEFWRV9YQ09NUE9TSVRFPTEKIAogIyBYcmVuZGVyIFN1cHBvcnQKIGhhdmVRdCg1KTpsaW51
eC0qOmNvbmZpZ19saWJYcmVuZGVyOiBERUZJTkVTICs9IEhBVkVfWFJFTkRFUj0xCkBAIC0xODcs
MTEgKzE1OSw5IEBAIGhhdmVRdCg1KTpsaW51eC0qOmNvbmZpZ19nbHg6IERFRklORVMgKz0gSEFW
RV9HTFg9MQogCiAjIFN1cHBvcnQgZm9yIEdyYXBoaWNzIFN1cmZhY2UKICFjb250YWlucyhERUZJ
TkVTLCBXVEZfVVNFX0dSQVBISUNTX1NVUkZBQ0U9LikgewotICAgIGhhdmVRdCg1KSB7Ci0gICAg
ICAgIG1hYzogREVGSU5FUyArPSBXVEZfVVNFX0dSQVBISUNTX1NVUkZBQ0U9MQotICAgICAgICAj
IE9uIGxpbnV4IHdlIHJlcXVpcmUgR0xYLCBsaWJYY29tcG9zaXRlIGFuZCBsaWJYcmVuZGVyIHRv
IGVuYWJsZSBncmFwaGljcyBzdXJmYWNlLgotICAgICAgICBsaW51eC0qOmNvbnRhaW5zKERFRklO
RVMsIEhBVkVfR0xYPTEpOmNvbnRhaW5zKERFRklORVMsIEhBVkVfWENPTVBPU0lURT0xKTpjb250
YWlucyhERUZJTkVTLCBIQVZFX1hSRU5ERVI9MSk6IERFRklORVMgKz0gV1RGX1VTRV9HUkFQSElD
U19TVVJGQUNFPTEKLSAgICB9CisgICAgbWFjOiBERUZJTkVTICs9IFdURl9VU0VfR1JBUEhJQ1Nf
U1VSRkFDRT0xCisgICAgIyBPbiBsaW51eCB3ZSByZXF1aXJlIEdMWCwgbGliWGNvbXBvc2l0ZSBh
bmQgbGliWHJlbmRlciB0byBlbmFibGUgZ3JhcGhpY3Mgc3VyZmFjZS4KKyAgICBsaW51eC0qOmNv
bnRhaW5zKERFRklORVMsIEhBVkVfR0xYPTEpOmNvbnRhaW5zKERFRklORVMsIEhBVkVfWENPTVBP
U0lURT0xKTpjb250YWlucyhERUZJTkVTLCBIQVZFX1hSRU5ERVI9MSk6IERFRklORVMgKz0gV1RG
X1VTRV9HUkFQSElDU19TVVJGQUNFPTEKIH0KIAogIyAtLS0tLS0tLS0tLS0tLSBGaWxsIGluIHN0
YXRpYyBkZWZhdWx0cyAtLS0tLS0tLS0tLS0tLQpAQCAtMjM3LDEzICsyMDcsMTAgQEAgZm9yKGRl
ZmluZSwgREVGSU5FUykgewogIWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfM0RfR1JBUEhJQ1M9
LikgewogICAgICMgRGlzYWJsZSBVU0UoM0RfR1JBUEhJQ1MpIG9uIFdpbmRvd3MgdGVtcG9yYXJp
bHksIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA4NTAgZm9y
IGRldGFpbHMuCiAgICAgIXdpbjMyLSogewotICAgICAgICBoYXZlUXQoNSl8Y29udGFpbnMoUVRf
Q09ORklHLCBvcGVuZ2wpOiBERUZJTkVTICs9IFdURl9VU0VfM0RfR1JBUEhJQ1M9MQorICAgICAg
ICBERUZJTkVTICs9IFdURl9VU0VfM0RfR1JBUEhJQ1M9MQogICAgIH0KIH0KIAotaGF2ZVF0KDQp
OmNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKTpjb250YWlucyhERUZJTkVTLCBXVEZf
VVNFXzNEX0dSQVBISUNTPTApIHsKLSAgICBlcnJvcigiV2ViR0wgcmVxdWlyZXMgUXQgdG8gYmUg
Y29uZmlndXJlZCB3aXRoIE9wZW5HTC4gUGxlYXNlIHJlY29uZmlndXJlIFF0IHdpdGggT3BlbkdM
LCBvciBidWlsZCBXZWJLaXQgd2l0aG91dCBXZWJHTC4iKQotfQogCiAjIFNsaWRlciBUb3VjaCBp
cyBzZW5zaWJsZSB0byB1c2Ugd2hlbiBjb21waWxpbmcgV2ViS2l0MgogaGF2ZVF0KDUpOmNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9UT1VDSF9FVkVOVFM9MSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMv
cW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mdW5jdGlvbnMucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVj
cy9mZWF0dXJlcy9mdW5jdGlvbnMucHJmCmluZGV4IGEwODZlNzY5YmJhNjY5Mzk4MjljODZhZmE0
NmRkNTZiZWM1NTkzYmQuLjk3MmEyMDc5ZjI4N2UxYmRkNjYwNjcxMjBhMDY1ODUwZGRjNTllNmMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZnVuY3Rpb25zLnByZgor
KysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2Z1bmN0aW9ucy5wcmYKQEAgLTEzNyw1
MSArMTM3LDE2IEBAIGRlZmluZVRlc3QoYWRkU3RyaWN0U3ViZGlyT3JkZXJCZXR3ZWVuKSB7CiAg
ICAgZmlyc3RfYmFzZV90YXJnZXQgPSBzdWItJCRyZXBsYWNlKGZpcnN0U3ViZGlyRmlsZSwgW15h
LXpBLVowLTlfXSwgLSkKICAgICBzZWNvbmRfYmFzZV90YXJnZXQgPSBzdWItJCRyZXBsYWNlKHNl
Y29uZFN1YmRpckZpbGUsIFteYS16QS1aMC05X10sIC0pCiAKLSAgICBoYXZlUXQoNCkgewotICAg
ICAgICAjIFVzZSBhIGN1c3RvbSB0YXJnZXQgZm9yIG1ha2luZyB0aGUgZGVyaXZlZCBzb3VyY2Vz
IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgb25lcywKLSAgICAgICAgIyBhcyB0aGUgZGVmYXVsdCBv
bmVzIGRlcGVuZCBvbiAkKE1BS0VGSUxFKSwgd2hpbGUgd2Ugd2FudCB0byBkZXBlbmQgb24gKnFt
YWtlX2FsbC4KLSAgICAgICAgIyBXaXRob3V0IHRoaXMgcnVsZSB3ZSBlbmQgdXAgcnVubmluZyBx
bWFrZSB0d2ljZSBmb3IgdGhlIGRlcml2ZWQgc291cmNlcywgYXMgd2VsbCBhcwotICAgICAgICAj
IGludHJvZHVjaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgd2UgcnVuICJxbWFrZSAtbyBNYWtl
ZmlsZS5EZXJpdmVkU291cmNlcyIgYXQgdGhlCi0gICAgICAgICMgc2FtZSB0aW1lIGFzIHdlIHJ1
biAibWFrZSAtZiBNYWtlZmlsZS5EZXJpdmVkU291cmNlcyIsIHJlc3VsdGluZyBpbiBtYWtlIHJl
YWRpbmcgYQotICAgICAgICAjIGhhbGYtd3JpdHRlbiBtYWtlZmlsZS4KLSAgICAgICAgZGVyaXZl
ZF9tYWtlX2Zvcl9xbWFrZS50YXJnZXQgPSAkJHtmaXJzdF9iYXNlX3RhcmdldH0tbWFrZV9mb3Jf
cW1ha2UKLSAgICAgICAgZGVyaXZlZF9tYWtlX2Zvcl9xbWFrZS5kZXBlbmRzID0gJCR7Zmlyc3Rf
YmFzZV90YXJnZXR9LXFtYWtlX2FsbAotICAgICAgICBkZXJpdmVkX21ha2VfZm9yX3FtYWtlLmNv
bW1hbmRzID0gJChNQUtFKSAtZiAkJGV2YWwoJCR7Zmlyc3RTdWJkaXJ9Lm1ha2VmaWxlKQotICAg
ICAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IGRlcml2ZWRfbWFrZV9mb3JfcW1ha2UKLQotICAg
ICAgICAjIFRoaXMgdGFyZ2V0IGVuc3VyZXMgdGhhdCBydW5uaW5nICJtYWtlIHFtYWtlIiB3aWxs
IGZvcmNlIGJvdGggcW1ha2UgYW5kIG1ha2UKLSAgICAgICAgIyB0byBiZSBydW4gb24gdGhlIGRl
cml2ZWQgc291cmNlcyBiZWZvcmUgcnVubmluZyBxbWFrZSBvbiB0aGUgdGFyZ2V0LCBzbyB0aGF0
Ci0gICAgICAgICMgcW1ha2UgY2FuIHBpY2sgdXAgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcyBmb3Ig
dGhlIHRhcmdldCBiYXNlZCBvbiB0aGUgZGVyaXZlZAotICAgICAgICAjIHNvdXJjZXMgdGhhdCB3
ZXJlIGdlbmVyYXRlZC4KLSAgICAgICAgdGFyZ2V0X21ha2VfcW1ha2UudGFyZ2V0ID0gJCR7c2Vj
b25kX2Jhc2VfdGFyZ2V0fS1xbWFrZV9hbGwKLSAgICAgICAgdGFyZ2V0X21ha2VfcW1ha2UuZGVw
ZW5kcyA9ICQke2Rlcml2ZWRfbWFrZV9mb3JfcW1ha2UudGFyZ2V0fQotICAgICAgICBRTUFLRV9F
WFRSQV9UQVJHRVRTICs9IHRhcmdldF9tYWtlX3FtYWtlCi0KLSAgICAgICAgR05VbWFrZSB7Ci0g
ICAgICAgICAgICAjIFRoaXMgdGFyZ2V0IGVuc3VyZXMgdGhhdCBydW5uaW5nIG1ha2UgYmVmb3Jl
IGFueSBtYWtlZmlsZXMgaGF2ZSBiZWVuIGNyZWF0ZWQKLSAgICAgICAgICAgICMgd2lsbCBzdGls
bCBmb3JjZSBxbWFrZSBhbmQgbWFrZSB0byBiZSBydW4gb24gdGhlIGRlcml2ZWQgc291cmNlcyBm
aXJzdC4KLSAgICAgICAgICAgIHRhcmdldF9tYWtlLnRhcmdldCA9ICQkZXZhbCgkJHtzZWNvbmRT
dWJkaXJ9Lm1ha2VmaWxlKQotCi0gICAgICAgICAgICAjIFdlIHVzZSBvcmRlci1vbmx5LXByZXJl
cXVpc2l0ZXMgc28gdGhhdCB3ZSBjYW4gcnVuIG1ha2Ugb24gdGhlIGRlcml2ZWQgc291cmNlcwot
ICAgICAgICAgICAgIyB3aXRob3V0IHRyaWdnZXJpbmcgYSBxbWFrZSBydW4gb24gdGhlIHRhcmdl
dCBkdWUgdG8gdXBkYXRlZCBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICB0YXJnZXRfbWFrZS5k
ZXBlbmRzID0gInwgJCR7Zmlyc3RfYmFzZV90YXJnZXR9LW1ha2VfZGVmYXVsdC1vcmRlcmVkIgot
Ci0gICAgICAgICAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IHRhcmdldF9tYWtlCi0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICAjIFF0NSdzIHFtYWtlIGRvZXMgbW9zdCBvZiB0aGUg
YWJvdmUgZm9yIHVzIGFscmVhZHkuCi0KLSAgICAgICAgIyBUaGlzIHRhcmdldCBlbnN1cmVzIHRo
YXQgcnVubmluZyAibWFrZSBxbWFrZV9hbGwiIHdpbGwgZm9yY2UgYm90aCBxbWFrZSBhbmQgbWFr
ZQotICAgICAgICAjIHRvIGJlIHJ1biBvbiB0aGUgZGVyaXZlZCBzb3VyY2VzIGJlZm9yZSBydW5u
aW5nIHFtYWtlIG9uIHRoZSB0YXJnZXQsIHNvIHRoYXQKLSAgICAgICAgIyBxbWFrZSBjYW4gcGlj
ayB1cCB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzIGZvciB0aGUgdGFyZ2V0IGJhc2VkIG9uIHRoZSBk
ZXJpdmVkCi0gICAgICAgICMgc291cmNlcyB0aGF0IHdlcmUgZ2VuZXJhdGVkLiBKdXN0ICJtYWtl
IHFtYWtlIiBpcyBub24tcmVjdXJzaXZlIGFueXdheS4KLSAgICAgICAgdGFyZ2V0X21ha2VfcW1h
a2UudGFyZ2V0ID0gJCR7c2Vjb25kX2Jhc2VfdGFyZ2V0fS1xbWFrZV9hbGwKLSAgICAgICAgdGFy
Z2V0X21ha2VfcW1ha2UuZGVwZW5kcyA9ICQke2ZpcnN0X2Jhc2VfdGFyZ2V0fQotICAgICAgICBR
TUFLRV9FWFRSQV9UQVJHRVRTICs9IHRhcmdldF9tYWtlX3FtYWtlCi0KLSAgICAgICAgIyBNYWtl
IHRoaW5ncyB3b3JrIGV2ZW4gaWYgcW1ha2UgLXIgaXMgdXNlZC4KLSAgICAgICAgQ09ORklHICs9
IGRvbnRfcmVjdXJzZQotICAgIH0KKyAgICAjIFRoaXMgdGFyZ2V0IGVuc3VyZXMgdGhhdCBydW5u
aW5nICJtYWtlIHFtYWtlX2FsbCIgd2lsbCBmb3JjZSBib3RoIHFtYWtlIGFuZCBtYWtlCisgICAg
IyB0byBiZSBydW4gb24gdGhlIGRlcml2ZWQgc291cmNlcyBiZWZvcmUgcnVubmluZyBxbWFrZSBv
biB0aGUgdGFyZ2V0LCBzbyB0aGF0CisgICAgIyBxbWFrZSBjYW4gcGljayB1cCB0aGUgcmlnaHQg
ZGVwZW5kZW5jaWVzIGZvciB0aGUgdGFyZ2V0IGJhc2VkIG9uIHRoZSBkZXJpdmVkCisgICAgIyBz
b3VyY2VzIHRoYXQgd2VyZSBnZW5lcmF0ZWQuIEp1c3QgIm1ha2UgcW1ha2UiIGlzIG5vbi1yZWN1
cnNpdmUgYW55d2F5LgorICAgIHRhcmdldF9tYWtlX3FtYWtlLnRhcmdldCA9ICQke3NlY29uZF9i
YXNlX3RhcmdldH0tcW1ha2VfYWxsCisgICAgdGFyZ2V0X21ha2VfcW1ha2UuZGVwZW5kcyA9ICQk
e2ZpcnN0X2Jhc2VfdGFyZ2V0fQorICAgIFFNQUtFX0VYVFJBX1RBUkdFVFMgKz0gdGFyZ2V0X21h
a2VfcW1ha2UKKworICAgICMgTWFrZSB0aGluZ3Mgd29yayBldmVuIGlmIHFtYWtlIC1yIGlzIHVz
ZWQuCisgICAgQ09ORklHICs9IGRvbnRfcmVjdXJzZQogCiAgICAgZXhwb3J0KFNVQkRJUlMpCiAg
ICAgZXhwb3J0KE5PX1JFQ1VSU0lWRV9RTUFLRV9TVUJESVJTKQpAQCAtMjIzLDcgKzE4OCw2IEBA
IGRlZmluZVRlc3QoaGF2ZVF0TW9kdWxlKSB7CiAgICAgdW5zZXQobW9kdWxlKQogICAgIG1vZHVs
ZSA9ICQkMQogCi0gICAgaGF2ZVF0KDQpOmNvbnRhaW5zKFFUX0NPTkZJRywgJCR7bW9kdWxlfSk6
IHJldHVybih0cnVlKQogICAgIGhhdmVRdCg1KTohaXNFbXB0eShRVC4kJHttb2R1bGV9Lm5hbWUp
OiByZXR1cm4odHJ1ZSkKICAgICByZXR1cm4oZmFsc2UpCiB9CkBAIC0zMTAsNDggKzI3NCwxMCBA
QCBkZWZpbmVUZXN0KGxpbmtBZ2FpbnN0TGlicmFyeSkgewogICAgIHJldHVybih0cnVlKQogfQog
Ci1kZWZpbmVUZXN0KHJ1blN5bmNRdCkgewotCi0gICAgYnVpbGRfcGFzczpyZXR1cm4odHJ1ZSkK
LQotICAgIGhhdmVRdCg1KSB7Ci0gICAgICAgICMgUXQgNSB3aWxsIHJ1biBzeW5xdCBhcyBwYXJ0
IG9mIGRlZmF1bHRzX3ByZSwgc28gbm8gbmVlZCB0byBkbyBhbnl0aGluZwotICAgIH0gZWxzZSB7
Ci0gICAgICAgICMgVXNlIG91ciBvd24gY29weSBvZiBzeW5jcXQgZnJvbSBRdCA0LjggdG8gZ2Vu
ZXJhdGUgZm9yd2FyZGluZyBoZWFkZXJzCi0gICAgICAgIHN5bmNxdCA9ICQkdG9TeXN0ZW1QYXRo
KCQke1JPT1RfV0VCS0lUX0RJUn0vVG9vbHMvcW1ha2Uvc3luY3F0LTQuOCkKLSAgICAgICAgY29t
bWFuZCA9ICQkc3luY3F0Ci0gICAgICAgIHdpbjMyLW1zdmMqOiBjb21tYW5kID0gJCRjb21tYW5k
IC13aW5kb3dzCi0KLSAgICAgICAgb3V0ZGlyID0gJCR0b1N5c3RlbVBhdGgoJCR7Uk9PVF9CVUlM
RF9ESVJ9KQotCi0gICAgICAgICMgVGhlIG1vZHVsZSByb290IGhhcyB0byBiZSB0aGUgc2FtZSBh
cyBkaXJlY3Rvcnkgb2YgdGhlIHByby1maWxlIHRoYXQgZ2VuZXJhdGVzCi0gICAgICAgICMgdGhl
IGluc3RhbGwgcnVsZXMgKGFwaS5wcmkpLCBvdGhlcndpc2UgdGhlIHJlbGF0aXZlIHBhdGhzIGlu
IHRoZSBnZW5lcmF0ZWQKLSAgICAgICAgIyBoZWFkZXJzLnByaSB3aWxsIGJlIGluY29ycmVjdC4K
LSAgICAgICAgbW9kdWxlX3Jvb3RkaXIgPSAkJHRvU3lzdGVtUGF0aCgkJHtfUFJPX0ZJTEVfUFdE
X30pCi0KLSAgICAgICAgbW9kdWxlID0gJCR7VEFSR0VUfSQke0RJUkxJU1RfU0VQQVJBVE9SfSQk
e21vZHVsZV9yb290ZGlyfSQke0RJUkxJU1RfU0VQQVJBVE9SfSQkdG9TeXN0ZW1QYXRoKFdlYktp
dC9xdC9BcGkpCi0gICAgICAgIGNvbW1hbmQgPSBwZXJsICQke2NvbW1hbmR9IC1vdXRkaXIgJCR7
b3V0ZGlyfSAtc2VwYXJhdGUtbW9kdWxlICQke21vZHVsZX0KLSAgICAgICAgbWVzc2FnZShSdW5u
aW5nICQkY29tbWFuZCkKLSAgICAgICAgIXN5c3RlbSgkJGNvbW1hbmQpIHsKLSAgICAgICAgICAg
IGVycm9yKEZhaWxlZCB0byBydW4gJCR7Y29tbWFuZH0pCi0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4odHJ1ZSkKLX0KLQogZGVmaW5lVGVzdCh4bGliQXZhaWxhYmxlKSB7Ci0gICAgaGF2
ZVF0KDUpIHsKLSAgICAgICAgY29udGFpbnMoUVRfQ09ORklHLCB4Y2IteGxpYikgewotICAgICAg
ICAgICAgcmV0dXJuKHRydWUpCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4o
ZmFsc2UpCi0gICAgICAgIH0KKyAgICBjb250YWlucyhRVF9DT05GSUcsIHhjYi14bGliKSB7Cisg
ICAgICAgIHJldHVybih0cnVlKQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuaXg6IW1hYzohZW1i
ZWRkZWQgewotICAgICAgICAgICAgcmV0dXJuKHRydWUpCi0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICByZXR1cm4oZmFsc2UpCi0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuKGZhbHNlKQog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvcXR3ZWJr
aXQucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9xdHdlYmtpdC5wcmYKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZTBiOGI2OTMwZjNjZWEwMDdlNzQwMzNiZTg0M2Rl
MmQzMGE5NGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
VG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9xdHdlYmtpdC5wcmYKKysrIC9kZXYvbnVsbApA
QCAtMSwzMCArMCwwIEBACi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhpcyBmaWxlIGlzIHVzZWQgYnkgdG9v
bHMgdGhhdCByZWx5IG9uIHRoZSBRdFdlYktpdCBsaWJyYXJ5Ci0jCi0jIEl0IGlzIG9ubHkgdXNl
ZCBmb3IgUXQ0LCB3aGljaCBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIHN5c3RlbS4KLSMKLSMgU2Vl
ICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lzdGVt
Ci0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotaGF2ZVF0KDQpIHsKLSAgICBRTUFLRV9MSUJESVIgPSAkJFJPT1Rf
QlVJTERfRElSL2xpYiAkJFFNQUtFX0xJQkRJUgotICAgIFFUV0VCS0lUTElCTkFNRSA9IFF0V2Vi
S2l0Ci0gICAgbWFjOiFzdGF0aWM6Y29udGFpbnMoUVRfQ09ORklHLCBxdF9mcmFtZXdvcmspOiFD
T05GSUcod2Via2l0X25vX2ZyYW1ld29yaykgewotICAgICAgICBMSUJTICs9IC1mcmFtZXdvcmsg
JCRRVFdFQktJVExJQk5BTUUKLSAgICAgICAgUU1BS0VfRlJBTUVXT1JLUEFUSCA9ICQkUk9PVF9C
VUlMRF9ESVIvbGliICQkUU1BS0VfRlJBTUVXT1JLUEFUSAotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGJ1aWxkX3Bhc3M6IHdpbjMyLSp8d2luY2UqIHsKLSAgICAgICAgICAgICFDT05GSUcocmVsZWFz
ZSwgZGVidWd8cmVsZWFzZSk6IFFUV0VCS0lUTElCTkFNRSA9ICQke1FUV0VCS0lUTElCTkFNRX1k
Ci0gICAgICAgICAgICBRVFdFQktJVExJQk5BTUUgPSAkJHtRVFdFQktJVExJQk5BTUV9JCR7UVRf
TUFKT1JfVkVSU0lPTn0KLSAgICAgICAgICAgIHdpbjMyLWcrKyo6IExJQlMgKz0gLWwkJFFUV0VC
S0lUTElCTkFNRQotICAgICAgICAgICAgZWxzZTogTElCUyArPSAkJHtRVFdFQktJVExJQk5BTUV9
LmxpYgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTElCUyArPSAtbFF0V2ViS2l0Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBERVBFTkRQQVRIICs9ICQkUk9PVF9XRUJLSVRfRElSL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpCi0gICAgSU5DTFVERVBBVEggKz0gJCR7Uk9PVF9CVUlMRF9ESVJ9
L2luY2x1ZGUvUXRXZWJLaXQKLX0gZWxzZSB7Ci0gICAgZXJyb3IoUmVseWluZyBvbiAkJF9GSUxF
XyBmb3IgUXQ1IGJ1aWxkcyBhcmUgbm90IHN1cHBvcnRlZCkKLX0KZGlmZiAtLWdpdCBhL1Rvb2xz
L3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvdW5peC9kZWZhdWx0X3ByZS5wcmYgYi9Ub29scy9xbWFr
ZS9ta3NwZWNzL2ZlYXR1cmVzL3VuaXgvZGVmYXVsdF9wcmUucHJmCmluZGV4IGMyMzcxMzUyMGI0
OGZhOWZkN2FjMWUxNTAzMzE4YTQ2NDllODk5NTMuLjgzYjdjYzRhOWRmM2MxNmM2MDA5NTVjZDhj
NWRkNmZhNmYwM2VlNWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
dW5peC9kZWZhdWx0X3ByZS5wcmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy91
bml4L2RlZmF1bHRfcHJlLnByZgpAQCAtNiw3ICs2LDcgQEAKIAogbG9hZChmdW5jdGlvbnMpCiAK
LWhhdmVRdCg1KTogQ09ORklHICs9IG9iamVjdF9wYXJhbGxlbF90b19zb3VyY2UKK0NPTkZJRyAr
PSBvYmplY3RfcGFyYWxsZWxfdG9fc291cmNlCiAKICMgRXhwb3NlIGlmIHdlIGFyZSBidWlsZGlu
ZyBpbnNpZGUgU2NyYXRjaGJveAogU0JPWF9DSEVDSyA9ICQkKF9TQk9YX0RJUikKZGlmZiAtLWdp
dCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyZTg0MjM2ZmI4ZTBkY2E4YmYxMTQwOWRi
ODBlYzdjY2JhNmFlNjBhLi4yNzkxOWVlZDZiZTk2NWM1MWI4MTQyYjI1ZDgwYjc2YzI5NmI4OGQ1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTItMDctMTkgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgor
CisgICAgICAgIFtRdF0gUmVtb3ZlIFF0IDQgc3BlY2lmaWMgY29kZSBwYXRocworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODgxNjEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9hcGkucHJpOgor
ICAgICAgICAqIFdlYktpdC5wcm86CisKIDIwMTItMDgtMDEgIEppYW4gTGkgIDxqaWFubGlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBuZXcgQ1NTIHByb3BlcnR5ICItd2Via2l0LXdpZGdl
dC1yZWdpb24iIHRvIGV4cG9zZSBkYXNoYm9hcmQgcmVnaW9uIHN1cHBvcnQgZm9yIG90aGVyIHBv
cnQKZGlmZiAtLWdpdCBhL1dlYktpdC5wcm8gYi9XZWJLaXQucHJvCmluZGV4IGVmMjVlYTUxMWUz
OGVjYzdhNmUwMWMxMGVhYTc0ZGUxZmJkNmI4NGQuLjhmNzdmNjNlNzhjMjMzM2NlZWY3NmNlZWQx
NGMzZWQxNjk0ZmQyMjIgMTAwNjQ0Ci0tLSBhL1dlYktpdC5wcm8KKysrIGIvV2ViS2l0LnBybwpA
QCAtNSwxNCArNSw2IEBACiAjIFNlZSAnVG9vbHMvcW1ha2UvUkVBRE1FJyBmb3IgYW4gb3ZlcnZp
ZXcgb2YgdGhlIGJ1aWxkIHN5c3RlbQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWhhdmVRdCg0KSB7Ci0gICAg
UU1BS0VQQVRIID0gJCQoUU1BS0VQQVRIKQotICAgIGlzRW1wdHkoUU1BS0VQQVRIKXwhZXhpc3Rz
KCQke1FNQUtFUEFUSH0vbWtzcGVjcykgewotICAgICAgICBlcnJvcigiVGhlIGVudmlyb25tZW50
IHZhcmlhYmxlIFFNQUtFUEFUSCBuZWVkcyB0byBwb2ludCB0byAkV0VCS0lUU1JDL1Rvb2xzL3Ft
YWtlIikKLSAgICAgICAgIyBPdGhlcndpc2Ugd2Ugd29uJ3QgcGljayB1cCB0aGUgZmVhdHVyZSBw
cmYgZmlsZXMgbmVlZGVkIGZvciB0aGUgYnVpbGQKLSAgICB9Ci19Ci0KIFRFTVBMQVRFID0gc3Vi
ZGlycwogQ09ORklHICs9IG9yZGVyZWQKIAo=
</data>
<flag name="review"
          id="165652"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>