<?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>232833</bug_id>
          
          <creation_ts>2021-11-08 12:27:25 -0800</creation_ts>
          <short_desc>[GPU Process] [Filters 9/23] Move the software FilterEffectAppliers to separate files</short_desc>
          <delta_ts>2022-08-01 12:35:37 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=243415</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>231253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1812759</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-08 12:27:25 -0800</bug_when>
    <thetext>This allows different implementation for applying the FilterEffects and make them in separate implementation source files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815177</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-15 12:28:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/85424225&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817593</commentid>
    <comment_count>2</comment_count>
      <attachid>445075</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-24 00:00:37 -0800</bug_when>
    <thetext>Created attachment 445075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817602</commentid>
    <comment_count>3</comment_count>
      <attachid>445080</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-24 01:14:39 -0800</bug_when>
    <thetext>Created attachment 445080
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817605</commentid>
    <comment_count>4</comment_count>
      <attachid>445082</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-24 01:54:20 -0800</bug_when>
    <thetext>Created attachment 445082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817608</commentid>
    <comment_count>5</comment_count>
      <attachid>445084</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-24 02:51:05 -0800</bug_when>
    <thetext>Created attachment 445084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817677</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-24 11:41:35 -0800</bug_when>
    <thetext>Committed r286152 (244536@main): &lt;https://commits.webkit.org/244536@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445084.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445075</attachid>
            <date>2021-11-24 00:00:37 -0800</date>
            <delta_ts>2021-11-24 01:25:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232833-20211124000036.patch</filename>
            <type>text/plain</type>
            <size>389957</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmRhMzRiNjJjODRmOGU3
YmMyMDk4ZjJmNGQyYjI5ZjUzZjFkZTcxNy4uYjBjMDkzZDQ0NjgyODYzZTllNjFlMDZmYjM1MWNi
MmNkYjIwYzNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyNiBAQAorMjAyMS0xMS0yMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1vdmUgdGhlIHNvZnR3YXJlIEZpbHRlckVmZmVjdEFwcGxpZXJzIHRvIHNlcGFyYXRlIGZpbGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI4MzMK
KyAgICAgICAgcmRhcjovLzg1NDI0MjI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB0aGUgdGhlIHNvZnR3YXJlIEZpbHRl
ckVmZmVjdEFwcGxpZXJzIHRvIHNlcGFyYXRlIHNvdXJjZQorICAgICAgICBhbmQgaGVhZGVyIGZp
bGVzLiBUaGVyZSBpcyBubyBjaGFuZ2UgaW4gdGhlIGFwcGxpZXJzIGNvZGUuCisKKyAgICAgICAg
QnV0IEVkZ2VNb2RlVHlwZSBhbmQgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBoYXZlIHRvIGNoYW5n
ZWQgdG8gYmUgZW51bQorICAgICAgICBjbGFzc2VzIHNvIHRoZXkgY2FuIGJlIGZvcndhcmRlZCBk
ZWNsYXJlZCBpbiB0aGUgYXBwbGllcnMnIGhlYWRlciBmaWxlcy4KKworICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVCbGVuZFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBs
aWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFw
cGxpZXI6Om1hdHJpeCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpsdW1p
bmFuY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlVGFidWxhclRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVMaW5lYXJU
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29m
dHdhcmVBcHBsaWVyOjpjb21wdXRlR2FtbWFUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTG9va3VwVGFi
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3
YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjphcHBseSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y2xhbXBCeXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
Ojpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseUFyaXRobWV0aWMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5Tm9uQXJp
dGhtZXRpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJl
QXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpjbGFtcFJH
QkFWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29m
dHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXI6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpieXRlT2Zmc2V0T2ZQaXhlbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBw
bGllcjo6eENoYW5uZWxJbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6eUNoYW5uZWxJbmRleCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cjo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyOjphcHBseSk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjprZXJuZWxQ
b3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3
YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2Vs
ZXJhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdh
cmVBcHBsaWVyOjpib3hCbHVyVW5hY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckdlbmVyaWMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJv
eEJsdXJXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpB
bHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6bGVmdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdp
bmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6dG9wIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93
OjpjZW50ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1Nv
ZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJvdHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0
VG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OkFscGhhV2luZG93OjpzZXRDZW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldEJvdHRvbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdp
bmRvdzo6c2V0VG9wUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFJpZ2h0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRC
b3R0b21SaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2hpZnRSb3cpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNoaWZ0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0
aW5nRGF0YTo6dG9wTGVmdE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6bGVm
dENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6Okxp
Z2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21M
ZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0
aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6c2V0UGl4ZWxJbnRlcm5hbCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhl
bCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljV29ya2VyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm1HZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RU1lcmdlU29mdHdhcmVBcHBsaWVyOjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8
PCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OnBpeGVs
QXJyYXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXI6Om1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1ha2VDb2xv
ckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6Y29sdW1uRXh0cmVtdW0pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpr
ZXJuZWxFeHRyZW11bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdvcmtl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5U29mdHdhcmVBcHBsaWVyOjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRU9mZnNldFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
U29mdHdhcmVBcHBsaWVyOjpQYWludGluZ0RhdGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAg
ICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2VTb2Z0d2FyZUFwcGxpZXI6OmxpbmVhckludGVycG9sYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRh
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZVN0aXRjaGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJp
Yyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RBcHBsaWVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVu
ZFNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5k
U29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmVBcHBsaWVyLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJl
QXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0
ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGll
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxp
ZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50
VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZURpc2Ny
ZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJl
QXBwbGllcjo6Y29tcHV0ZUxpbmVhclRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVHYW1tYVRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVMb29r
dXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxp
ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpj
b21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5QXJpdGhtZXRpYyk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25B
cml0aG1ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0RGVzdGluYXRpb25QaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Z2V0UGl4ZWxW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVy
OjpzZXRJbnRlcmlvclBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpzZXRPdXRlclBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZUFwcGxpZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZUFwcGxpZXI6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp4Q2hhbm5lbEluZGV4
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBs
aWVyOjp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmguCisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cjo6Ynl0ZU9mZnNldE9mUGl4ZWwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyOjphcHBseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFk
b3dTb2Z0d2FyZUFwcGxpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVy
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94
Qmx1ckFscGhhT25seSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3
YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyVW5hY2NlbGVyYXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckdlbmVyaWMp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJs
dXJXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmg6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BS
b3dOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5O
b3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9y
bWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1h
bCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OnNldFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6c2V0UGl4ZWwpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQ
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBs
eVBsYXRmb3JtR2VuZXJpY1dvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBo
YVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6bGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6Ym90dG9tTGVmdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdp
bmRvdzo6dG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFw
cGxpZXI6OkFscGhhV2luZG93OjpjZW50ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJvdHRvbSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0
VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhh
V2luZG93OjpzZXRDZW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0VG9wUmlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFJp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhh
V2luZG93OjpzZXRCb3R0b21SaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2hpZnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNoaWZ0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxp
ZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZVNvZnR3YXJlQXBwbGll
cjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVNZXJnZVNvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHA6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6bWluT3JNYXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBs
aWVyOjpjb2x1bW5FeHRyZW11bSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXI6Omtlcm5lbEV4dHJlbXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhv
bG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9y
cGhvbG9neVNvZnR3YXJlQXBwbGllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9y
cGhvbG9neVNvZnR3YXJlQXBwbGllcjo6cGl4ZWxBcnJheUluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JD
b21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldFNvZnR3YXJlQXBwbGllcjo6YXBw
bHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZz
ZXRTb2Z0d2FyZUFwcGxpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6aW5pdFBhaW50aW5nRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVTdGl0
Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpu
b2lzZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6
dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2VTb2Z0d2FyZUFwcGxpZXI6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdE
YXRhOjpyYW5kb20pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyOjpzbW9vdGhDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2Fy
ZUFwcGxpZXI6OmxpbmVhckludGVycG9sYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyOjph
cHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3Vy
Y2VBbHBoYVNvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5oLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpY1NvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaC4KKyAgICAgICAg
KiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJF
ZmZlY3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6cGFyc2VBdHRyaWJ1
dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPjo6aGlnaGVzdEVudW1W
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxFZGdlTW9kZVR5cGU+
Ojppbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8RWRn
ZU1vZGVUeXBlPjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFp
dHM8RWRnZU1vZGVUeXBlPjo6ZnJvbVN0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgor
ICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6aGlnaGVzdEVudW1W
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlPjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFp
dHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZyb21TdHJpbmcpOgorCiAyMDIxLTExLTIzICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vz
c10gTW92ZSB0aGUgc29mdHdhcmUgRmlsdGVyRWZmZWN0IGZ1bmN0aW9ucyB0byBzZXBhcmF0ZSBh
cHBsaWVyIGNsYXNzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggODEzNzJlOTkxM2RmMmE1NjI5Y2YxMTRm
ZmE2YjhmOTQwODdhMmU4Yy4uYjZlYzE0NDlhODQ5Y2RiNGY5YjE2NjcxNzg3NjJjNzg0OGJmMTI0
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKQEAgLTIxMTAsNiArMjExMCwyMyBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2Fy
ZUFwcGxpZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9u
ZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3
YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9w
U2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlQXBwbGllci5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdh
cmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNl
dFNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVUaWxlU29mdHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT0JveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lz
by9JU09PcmlnaW5hbEZvcm1hdEJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Qcm90
ZWN0aW9uU2NoZW1lSW5mb0JveC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyODZjOTM0OWIxMjIxOTc5Yzg5OTY5ZDFiMWIw
OTYyMTQwMDAzYzBhLi4wYWNhN2MzMmM0NTY4YjQzZTRiOTAxYmRiZDcyYzVmNWEwYmZjZDNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMDg5Nyw2ICsxMDg5Nyw0MCBAQAogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyog
UmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQTEzQTlGMjc0QzVD
QzcwMEUyQTg4RSAvKiBGaWx0ZXJFZmZlY3RBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRl
ckVmZmVjdEFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQjYy
NzREQ0VEQzAwRTJBODhFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUI3Mjc0RENFREMwMEUyQTg4RSAvKiBGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0
d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQjgyNzRE
REVDMDAwRTJBODhFIC8qIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUI5Mjc0RERFQzAwMEUyQTg4RSAv
KiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZF
Q29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJBMTNBQkEyNzRERTAxMjAwRTJBODhFIC8qIEZFQ29tcG9zaXRlU29mdHdhcmVB
cHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQkIyNzRERTAxMjAwRTJB
ODhFIC8qIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFQ29t
cG9zaXRlU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QTEzQUJFMjc0REUzM0YwMEUyQTg4RSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FCRjI3NERFMzNGMDBFMkE4
OEUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQTEzQUMwMjc0REUzNTkwMEUyQTg4RSAvKiBGRURpc3BsYWNlbWVudE1hcFNvZnR3
YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRURpc3BsYWNlbWVudE1hcFNvZnR3
YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUMxMjc0
REUzNTkwMEUyQTg4RSAvKiBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDMjI3NERFMzg3MDBFMkE4OEUgLyogRkVEcm9wU2hh
ZG93U29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRHJvcFNoYWRvd1Nv
ZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUMz
Mjc0REUzODcwMEUyQTg4RSAvKiBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTEzQUM0Mjc0REUzOUUwMEUyQTg4RSAvKiBGRUZsb29kU29mdHdhcmVB
cHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDNTI3NERFMzlFMDBFMkE4OEUg
LyogRkVGbG9vZFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUZsb29kU29mdHdh
cmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUM2Mjc0REUz
QjcwMEUyQTg4RSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUM3Mjc0REUzQjcwMEUyQTg4RSAvKiBGRUdhdXNzaWFu
Qmx1clNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUdhdXNzaWFuQmx1clNvZnR3
YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDODI3NERF
M0QxMDBFMkE4OEUgLyogRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJBMTNBQzkyNzRERTNEMTAwRTJBODhFIC8qIEZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDQTI3NERFM0U1MDBFMkE4OEUgLyog
RkVNZXJnZVNvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1lcmdlU29m
dHdhcmVBcHBsaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQ0Iy
NzRERTNFNTAwRTJBODhFIC8qIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRkVNZXJnZVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkExM0FDQzI3NERFNDM3MDBFMkE4OEUgLyogRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUNEMjc0REU0MzcwMEUyQTg4RSAv
KiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVNb3JwaG9s
b2d5U29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEz
QUNFMjc0REU0NkMwMEUyQTg4RSAvKiBGRU9mZnNldFNvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTEzQUNGMjc0REU0NkMwMEUyQTg4RSAvKiBGRU9mZnNldFNvZnR3
YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRU9mZnNldFNvZnR3YXJlQXBwbGllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FEMDI3NERFNDg5MDBFMkE4OEUgLyog
RkVUaWxlU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFVGlsZVNvZnR3
YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUQxMjc0
REU0ODkwMEUyQTg4RSAvKiBGRVRpbGVTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RkVUaWxlU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QTEzQUQyMjc0REU1MTgwMEUyQTg4RSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBRDMyNzRERTUxODAwRTJBODhFIC8qIEZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRVR1cmJ1bGVuY2VT
b2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBRDQy
NzRERTU0RTAwRTJBODhFIC8qIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBRDUyNzRERTU0RTAwRTJBODhFIC8qIFNvdXJjZUFscGhh
U29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmVBcHBs
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUQ2Mjc0REU1NzgwMEUy
QTg4RSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkExM0FENzI3NERFNTc4MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3
YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjRFRjc0Mjc0RTIzMzMwMDI5M0My
RiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFQmxlbmRTb2Z0
d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCNEVGNzUyNzRF
MjMzNDAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM4MzIsNiArMjM4NjYsNDcgQEAKIAkJCXBhdGggPSAi
bW9kZWwtZWxlbWVudCI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3MkEx
M0FCNDI3NERDRUEzMDBFMkE4OEUgLyogc29mdHdhcmUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyQjRFRjc1Mjc0RTIzMzQwMDI5M0MyRiAvKiBGRUJs
ZW5kU29mdHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkI0RUY3NDI3NEUyMzMzMDAyOTNDMkYg
LyogRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUI2Mjc0RENFREMwMEUy
QTg4RSAvKiBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FC
NzI3NERDRURDMDBFMkE4OEUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5oICovLAor
CQkJCTcyQTEzQUI4Mjc0RERFQzAwMEUyQTg4RSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FCOTI3NERERUMwMDBFMkE4OEUgLyogRkVDb21w
b25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUJBMjc0REUwMTIw
MEUyQTg4RSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNB
QkIyNzRERTAxMjAwRTJBODhFIC8qIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmggKi8sCisJ
CQkJNzJBMTNBQkUyNzRERTMzRjAwRTJBODhFIC8qIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFw
cGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUJGMjc0REUzM0YwMEUyQTg4RSAvKiBGRUNvbnZvbHZl
TWF0cml4U29mdHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBQzAyNzRERTM1OTAwRTJBODhF
IC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FD
MTI3NERFMzU5MDBFMkE4OEUgLyogRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuaCAq
LywKKwkJCQk3MkExM0FDMjI3NERFMzg3MDBFMkE4OEUgLyogRkVEcm9wU2hhZG93U29mdHdhcmVB
cHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FDMzI3NERFMzg3MDBFMkE4OEUgLyogRkVEcm9wU2hh
ZG93U29mdHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBQzQyNzRERTM5RTAwRTJBODhFIC8q
IEZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUM1Mjc0REUzOUUwMEUy
QTg4RSAvKiBGRUZsb29kU29mdHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBQzYyNzRERTNC
NzAwRTJBODhFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3
MkExM0FDNzI3NERFM0I3MDBFMkE4OEUgLyogRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIu
aCAqLywKKwkJCQk3MkExM0FDODI3NERFM0QxMDBFMkE4OEUgLyogRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBQzkyNzRERTNEMTAwRTJBODhFIC8qIEZFTGlnaHRp
bmdTb2Z0d2FyZUFwcGxpZXIuaCAqLywKKwkJCQk3MkExM0FDQTI3NERFM0U1MDBFMkE4OEUgLyog
RkVNZXJnZVNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBQ0IyNzRERTNFNTAwRTJB
ODhFIC8qIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuaCAqLywKKwkJCQk3MkExM0FDQzI3NERFNDM3
MDBFMkE4OEUgLyogRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkEx
M0FDRDI3NERFNDM3MDBFMkE4OEUgLyogRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmggKi8s
CisJCQkJNzJBMTNBQ0UyNzRERTQ2QzAwRTJBODhFIC8qIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVy
LmNwcCAqLywKKwkJCQk3MkExM0FDRjI3NERFNDZDMDBFMkE4OEUgLyogRkVPZmZzZXRTb2Z0d2Fy
ZUFwcGxpZXIuaCAqLywKKwkJCQk3MkExM0FEMDI3NERFNDg5MDBFMkE4OEUgLyogRkVUaWxlU29m
dHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FEMTI3NERFNDg5MDBFMkE4OEUgLyogRkVU
aWxlU29mdHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBRDIyNzRERTUxODAwRTJBODhFIC8q
IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBRDMyNzRERTUx
ODAwRTJBODhFIC8qIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEz
QUQ0Mjc0REU1NEUwMEUyQTg4RSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5jcHAgKi8s
CisJCQkJNzJBMTNBRDUyNzRERTU0RTAwRTJBODhFIC8qIFNvdXJjZUFscGhhU29mdHdhcmVBcHBs
aWVyLmggKi8sCisJCQkJNzJBMTNBRDYyNzRERTU3ODAwRTJBODhFIC8qIFNvdXJjZUdyYXBoaWNT
b2Z0d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUQ3Mjc0REU1NzgwMEUyQTg4RSAvKiBT
b3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHNvZnR3
YXJlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0MwMTFGM0MyNEZBRDM2
MDAwNUJFRjEwIC8qIFNldHRpbmdzVGVtcGxhdGVzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI1OTA0LDYgKzI1OTc5LDcgQEAKIAkJQTc1RThCN0YwRTFE
RTJCMDAwN0YyNDgxIC8qIGZpbHRlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTcyQTEzQUI0Mjc0RENFQTMwMEUyQTg4RSAvKiBzb2Z0d2FyZSAqLywK
IAkJCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFDOEMgLyogRGlzdGFudExpZ2h0U291cmNlLmNwcCAq
LywKIAkJCQk4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291cmNlLmgg
Ki8sCiAJCQkJQTc1RThCODAwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuY3BwICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5j
cHAKaW5kZXggZDJjYWJiYTlmODZhYjMzMjBlYzIzZTA1ZDdmYTU3YWEzYTRkNDJiOC4uMjlkY2Iw
ZmJmNGYxYTA5MTYzMGMyMDAwNzE0NDE2NTA1MmEyYmRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC01LDYgKzUs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jw
b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDEw
ICsyNyw3IEBACiAjaW5jbHVkZSAiRkVCbGVuZC5oIgogCiAjaW5jbHVkZSAiRkVCbGVuZE5FT04u
aCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCisjaW5jbHVkZSAiRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsMzggKzUxLDYg
QEAgYm9vbCBGRUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUJsZW5kU29mdHdhcmVBcHBs
aWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgRkVCbGVuZFNv
ZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVCbGVu
ZD4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVCbGVu
ZD47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9vbCBhcHBseShj
b25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3Zl
cnJpZGU7Ci19OwotCi0jaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLWJvb2wgRkVCbGVu
ZFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0c1swXS5nZXQoKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5n
ZXQoKTsKLQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBhdXRvIGlt
YWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVm
ZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdyYXBo
aWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1h
Z2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zl
ciwgbV9lZmZlY3QuYmxlbmRNb2RlKCkgfSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYK
LQogYm9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiB7CiAgICAgcmV0dXJuIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZp
bHRlciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAppbmRleCAzMzY5M2MxOTk3YmJhN2JiZGU4ODkwNTg3
YjE1NmVlZTMzNzZjNWNkLi40N2NmODVlOTg5NWE3MGY0MzQ2MWUxMGMyNDMyZGNmYTdkMGE0ZTlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNv
cnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzgs
OCArMzksNyBAQCBwcml2YXRlOgogICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKIAogICAgIGJvb2wg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwotICAgIHZvaWQg
cGxhdGZvcm1BcHBseUdlbmVyaWModW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2ln
bmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7CisK
ICAgICB2b2lkIHBsYXRmb3JtQXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlB
LCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxB
cnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5n
dGgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCAxMDIzN2JhOWRjYzI0MWZkZTE0ZjMxMjNk
YzY0ODYzYjIyNmJkZjM1Li5kNjg1YTE0NTBiNDc1MzIyNWE3MjkzMjEwYWVjOTYwODM4ZDYxZDMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDE3
ICsyNCw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5o
IgogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZm
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
LSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4K
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlZjxGRUNvbG9yTWF0cml4PiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2
YWx1ZXMpCkBAIC0xMDAsMjc5ICs5Myw2IEBAIFZlY3RvcjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6
bm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCiAgICAgcmV0dXJu
IG5vcm1hbGl6ZWRWYWx1ZXM7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVz
LgotY2xhc3MgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZl
Y3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xvck1hdHJpeD4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xvck1hdHJpeD47Ci0KLXB1YmxpYzoKLSAgICBG
RUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKEZFQ29sb3JNYXRyaXgmKTsKLQotICAgIGJvb2wg
YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVj
dHMpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIGlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYg
cmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpIGNvbnN0OwotICAg
IGlubGluZSB2b2lkIHNhdHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVl
biwgZmxvYXQmIGJsdWUpIGNvbnN0OwotICAgIGlubGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYg
cmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpIGNvbnN0OwotCi0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgdm9pZCBhcHBseVBsYXRmb3JtQWNjZWxlcmF0ZWQoUGl4
ZWxCdWZmZXImKSBjb25zdDsKLSNlbmRpZgotICAgIHZvaWQgYXBwbHlQbGF0Zm9ybVVuYWNjZWxl
cmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25zdDsKLQotICAgIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhl
bEJ1ZmZlciYpIGNvbnN0OwotCi0gICAgZmxvYXQgbV9jb21wb25lbnRzWzldOwotfTsKLQotRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcihG
RUNvbG9yTWF0cml4JiBlZmZlY3QpCi0gICAgOiBCYXNlKGVmZmVjdCkKLXsKLSAgICBpZiAobV9l
ZmZlY3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKLSAgICAgICAgRkVD
b2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKG1fY29tcG9uZW50cywgbV9l
ZmZlY3QudmFsdWVzKClbMF0pOwotICAgIGVsc2UgaWYgKG1fZWZmZWN0LnR5cGUoKSA9PSBGRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKG1fY29tcG9uZW50cywgbV9lZmZlY3QudmFsdWVzKClbMF0p
OwotfQotCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjptYXRyaXgo
ZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25z
dAotewotICAgIGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxvYXQgZyA9IGdyZWVuOwotICAgIGZsb2F0
IGIgPSBibHVlOwotICAgIGZsb2F0IGEgPSBhbHBoYTsKLQotICAgIGNvbnN0IGF1dG8mIHZhbHVl
cyA9IG1fZWZmZWN0LnZhbHVlcygpOwotCi0gICAgcmVkICAgPSB2YWx1ZXNbIDBdICogciArIHZh
bHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNbIDNdICogYSArIHZhbHVlc1sg
NF0gKiAyNTU7Ci0gICAgZ3JlZW4gPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsg
dmFsdWVzWyA3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7Ci0gICAg
Ymx1ZSAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIg
KyB2YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7Ci0gICAgYWxwaGEgPSB2YWx1ZXNb
MTVdICogciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVzWzE3XSAqIGIgKyB2YWx1ZXNbMThdICog
YSArIHZhbHVlc1sxOV0gKiAyNTU7Ci19Ci0KLWlubGluZSB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0
d2FyZUFwcGxpZXI6OnNhdHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVl
biwgZmxvYXQmIGJsdWUpIGNvbnN0Ci17Ci0gICAgZmxvYXQgciA9IHJlZDsKLSAgICBmbG9hdCBn
ID0gZ3JlZW47Ci0gICAgZmxvYXQgYiA9IGJsdWU7Ci0KLSAgICByZWQgICAgID0gciAqIG1fY29t
cG9uZW50c1swXSArIGcgKiBtX2NvbXBvbmVudHNbMV0gKyBiICogbV9jb21wb25lbnRzWzJdOwot
ICAgIGdyZWVuICAgPSByICogbV9jb21wb25lbnRzWzNdICsgZyAqIG1fY29tcG9uZW50c1s0XSAr
IGIgKiBtX2NvbXBvbmVudHNbNV07Ci0gICAgYmx1ZSAgICA9IHIgKiBtX2NvbXBvbmVudHNbNl0g
KyBnICogbV9jb21wb25lbnRzWzddICsgYiAqIG1fY29tcG9uZW50c1s4XTsKLX0KLQotLy8gRklY
TUU6IHRoaXMgc2hvdWxkIHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JM
dW1pbmFuY2UuaC4KLWlubGluZSB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Omx1
bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxw
aGEpIGNvbnN0Ci17Ci0gICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiAr
IDAuMDcyMSAqIGJsdWU7Ci0gICAgcmVkID0gMDsKLSAgICBncmVlbiA9IDA7Ci0gICAgYmx1ZSA9
IDA7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLXZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZl
cikgY29uc3QKLXsKLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwot
ICAgIGF1dG8gYnVmZmVyU2l6ZSA9IHBpeGVsQnVmZmVyLnNpemUoKTsKLQotICAgIEFTU0VSVChw
aXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICogNCk7Ci0gICAgCi0gICAg
Y29uc3QgaW50MzJfdCBkaXZpc29yID0gMjU2OwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFy
cmF5LmRhdGEoKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGJ1
ZmZlclNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsK
LSAgICBzcmMucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHNyYy5kYXRh
ID0gZGF0YTsKLSAgICAKLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9
IGJ1ZmZlclNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0
KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgZGVz
dC5kYXRhID0gZGF0YTsKLQotICAgIHN3aXRjaCAobV9lZmZlY3QudHlwZSgpKSB7Ci0gICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKLSAgICAgICAgY29uc3QgYXV0byYgdmFsdWVz
ID0gbV9lZmZlY3QudmFsdWVzKCk7Ci0KLSAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAq
IDRdID0gewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sg
MF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWyA1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbMTBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxNV0gKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDFdICogZGl2aXNvcikpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNl0gKiBkaXZpc29yKSks
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzExXSAqIGRp
dmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
MTZdICogZGl2aXNvcikpLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYodmFsdWVzWyAyXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbIDddICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE3XSAqIGRpdmlzb3IpKSwKLQotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgM10gKiBkaXZpc29y
KSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA4XSAq
IGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbMTNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sxOF0gKiBkaXZpc29yKSksCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFnZU1h
dHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxw
dHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfSFVFUk9UQVRFOiB7Ci0gICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0
XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVu
dHNbMF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYobV9jb21wb25lbnRzWzNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVu
dHNbMV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYobV9jb21wb25lbnRzWzRdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVu
dHNbMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYobV9jb21wb25lbnRzWzVdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgIGRpdmlzb3IsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFnZU1hdHJpeE11bHRp
cGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxw
dHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6IHsKLSAgICAgICAgY29uc3QgaW50MTZf
dCBtYXRyaXhbNCAqIDRdID0gewotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICAwLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMjEy
NSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAwLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuNzE1NCAq
IGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAwLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMDcyMSAqIGRp
dmlzb3IpKSwKLQotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAw
LAotICAgICAgICAgICAgMCwKLSAgICAgICAgfTsKLSAgICAgICAgdkltYWdlTWF0cml4TXVsdGlw
bHlfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0
ciwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotfQotI2Vu
ZGlmCi0KLXZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybVVu
YWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKSBjb25zdAotewotICAgIGF1dG8m
IHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci5kYXRhKCk7Ci0gICAgdW5zaWduZWQgcGl4ZWxBcnJh
eUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7Ci0KLSAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5
cGUoKSkgewotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgotICAgICAgICBmb3Ig
KHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJy
YXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQg
PSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdy
ZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAg
ZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAg
ICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMp
OwotICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAg
ICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKLSAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKLSAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwotICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6Ci0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBmb3IgKHVuc2lnbmVk
IHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7
IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1
ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZs
b2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAg
ICAgICAgc2F0dXJhdGVBbmRIdWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSk7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6
Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zm
c2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAg
ICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwotICAgICAg
ICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7
Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCArIDIpOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMyk7Ci0gICAgICAgICAgICBsdW1pbmFuY2UocmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQp
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4p
OwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7
Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
KSBjb25zdAotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGNvbnN0IGF1dG8mIHZhbHVlcyA9
IG1fZWZmZWN0LnZhbHVlcygpOwotCi0gICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4
ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9m
IHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKLSAgICAvLyBpcyBub3QgemVybywgZmFsbCBi
YWNrIHRvIG5vbi12SW1hZ2UgY29kZS4KLSAgICBpZiAobV9lZmZlY3QudHlwZSgpICE9IEZFQ09M
T1JNQVRSSVhfVFlQRV9NQVRSSVggfHwgKCF2YWx1ZXNbNF0gJiYgIXZhbHVlc1s5XSAmJiAhdmFs
dWVzWzE0XSAmJiAhdmFsdWVzWzE5XSkpIHsKLSAgICAgICAgYXBwbHlQbGF0Zm9ybUFjY2VsZXJh
dGVkKHBpeGVsQnVmZmVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIGFw
cGx5UGxhdGZvcm1VbmFjY2VsZXJhdGVkKHBpeGVsQnVmZmVyKTsKLX0KLQotYm9vbCBGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKLXsKLSAgICBhdXRvIGluID0gaW5wdXRFZmZlY3Rz
WzBdLmdldCgpOwotCi0gICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVy
UmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmIChp
bkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIo
KmluQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9l
ZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9p
bnQoKSwgcmVzdWx0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gcGl4
ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3Qp
OwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChtX2VmZmVjdC50eXBlKCkgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEEp
Ci0gICAgICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZSh0cnVlKTsKLQotICAgIGFwcGx5UGxh
dGZvcm0oKnBpeGVsQnVmZmVyKTsKLSAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBp
eGVsQnVmZmVyLCBpbWFnZVJlY3QpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsK
ICAgICByZXR1cm4gRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmls
dGVyLCBpbnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IGY2OWYwYjAxYzk1MDdl
MDUyNmUwZDE3N2ViYmVmOTY5MDA5Y2UxZDMuLjU2MDFlYjA5Njg3ZTg1N2E2Njc1YzEyODUzNmVi
MDUxOGQyM2QyZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApp
bmRleCBkYWUxODllYTlkNzdjZjc0NmFhMzQxNmNiODE2ZmVmZjIxNGNlM2FhLi44NmY5ZGUxZjA0
N2NmNDFhM2U5ZGM1MmRkNTkyZjdmYTMyMTBiZDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
NCwxMiArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50
VHJhbnNmZXIuaCIKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJl
QXBwbGllci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDgsMTQxICs0NCw2IEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29t
cG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuCiB7
CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgRkVD
b21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25j
cmV0ZUFwcGxpZXI8RkVDb21wb25lbnRUcmFuc2Zlcj4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb21wb25lbnRUcmFuc2Zlcj47Ci0KLXB1YmxpYzoK
LSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci0KLXByaXZh
dGU6Ci0gICAgdXNpbmcgTG9va3VwVGFibGUgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj47Ci0K
LSAgICBzdGF0aWMgdm9pZCBjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlVGFi
dWxhclRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVM
aW5lYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
KTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLQotICAgIHN0YXRpYyBMb29rdXBUYWJsZSBj
b21wdXRlTG9va3VwVGFibGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotCi0g
ICAgdm9pZCBhcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJikgY29uc3Q7Ci19OwotCi12b2lkIEZF
Q29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExv
b2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpCi17Ci19Ci0KLXZv
aWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVRhYnVsYXJUYWJs
ZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0
cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVz
ID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNpZ25lZCBuID0gdGFibGVW
YWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgZG91Ymxl
IGMgPSBpIC8gMjU1LjA7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oYyAqIChuIC0gMSkpOwotICAgICAgICBkb3VibGUgdjEgPSB0YWJsZVZhbHVlc1trXTsKLSAg
ICAgICAgZG91YmxlIHYyID0gdGFibGVWYWx1ZXNbc3RkOjptaW4oKGsgKyAxKSwgKG4gLSAxKSld
OwotICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodjEgKyAoYyAqIChuIC0gMSkgLSBrKSAq
ICh2MiAtIHYxKSk7Ci0gICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAs
IHZhbCkpOwotICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOwot
ICAgIH0KLX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21w
dXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQotewotICAgIGNvbnN0IFZlY3RvcjxmbG9h
dD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKLSAgICB1bnNp
Z25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwotICAgIGlmIChuIDwgMSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgdW5zaWduZWQgayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPigoaSAqIG4pIC8gMjU1
LjApOwotICAgICAgICBrID0gc3RkOjptaW4oaywgbiAtIDEpOwotICAgICAgICBkb3VibGUgdmFs
ID0gMjU1ICogdGFibGVWYWx1ZXNba107Ci0gICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3Rk
OjptaW4oMjU1LjAsIHZhbCkpOwotICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50
OF90Pih2YWwpOwotICAgIH0KLX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVB
cHBsaWVyOjpjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGRvdWJsZSB2
YWwgPSB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlICogaSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24u
aW50ZXJjZXB0OwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2
YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0
ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGRvdWJsZSBleHBvbmVudCA9IHRyYW5z
ZmVyRnVuY3Rpb24uZXhwb25lbnQ7IC8vIFJDVlQgZG9lc24ndCBsaWtlIHBhc3NpbmcgYSBkb3Vi
bGUgYW5kIGEgZmxvYXQgdG8gcG93LCBzbyBwcm9tb3RlIHRoaXMgdG8gZG91YmxlCi0gICAgICAg
IGRvdWJsZSB2YWwgPSAyNTUuMCAqICh0cmFuc2ZlckZ1bmN0aW9uLmFtcGxpdHVkZSAqIHBvdygo
aSAvIDI1NS4wKSwgZXhwb25lbnQpICsgdHJhbnNmZXJGdW5jdGlvbi5vZmZzZXQpOwotICAgICAg
ICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFs
dWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0KLUZFQ29tcG9u
ZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6Okxvb2t1cFRhYmxlIEZFQ29tcG9uZW50VHJhbnNm
ZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVMb29rdXBUYWJsZShjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBMb29rdXBUYWJsZSB0YWJsZTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKLSAgICAgICAgdGFi
bGVbaV0gPSBpOwotCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFi
bGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBl
IGNhbGxFZmZlY3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFi
bGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1
dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAg
ICAgICBjb21wdXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVf
RElTQ1JFVEUKLSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX0xJTkVBUgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBG
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9OwotCi0gICAgUkVMRUFTRV9BU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KGZ1bmN0aW9u
LnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgY2FsbEVmZmVjdFtm
dW5jdGlvbi50eXBlXSh0YWJsZSwgZnVuY3Rpb24pOwotCi0gICAgcmV0dXJuIHRhYmxlOwotfQot
Ci12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0o
UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKSBjb25zdAotewotICAgIGF1dG8mIHBpeGVsQXJyYXkg
PSBwaXhlbEJ1ZmZlci5kYXRhKCk7Ci0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBp
eGVsQXJyYXkubGVuZ3RoKCk7Ci0gICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgp
OwotCi0gICAgYXV0byByZWRUYWJsZSAgID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LnJl
ZEZ1bmN0aW9uKCkpOwotICAgIGF1dG8gZ3JlZW5UYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZSht
X2VmZmVjdC5ncmVlbkZ1bmN0aW9uKCkpOwotICAgIGF1dG8gYmx1ZVRhYmxlICA9IGNvbXB1dGVM
b29rdXBUYWJsZShtX2VmZmVjdC5ibHVlRnVuY3Rpb24oKSk7Ci0gICAgYXV0byBhbHBoYVRhYmxl
ID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRdICAgICA9
IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCAr
IDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwotICAgICAgICBkYXRhW3Bp
eGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKLSAgICAg
ICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsg
M11dOwotICAgIH0KLX0KLQotYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZm
ZWN0cykKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwot
ICAgIAotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVm
ZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7Ci0gICAg
aWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIGRyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVBpeGVsQnVmZmVy
UmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBkcmF3aW5nUmVjdCk7Ci0KLSAgICBhcHBs
eVBsYXRmb3JtKCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2Fy
ZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuaAppbmRleCA1MThlYTEzNDdhNGFkZGJhNGNkNTAwY2I0MmM4MTM3MDZk
Y2NkMTk1Li5jN2QzNDkzNmYwNjZiYWNjYTU1MTg5N2YwZDNjM2YxNGVlY2ZkNTQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCAxNWE3MTI5OTg4MjlhY2Q5YjRk
Mjk0NWFmZGViYmU2ZDY4N2I3ZGJiLi5lZjM3ZTRjY2Q4N2I5ZGU1ZDZiOTQxMmQzOGNmY2UzOWUw
NjU0NDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI0LDExICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRkVDb21wb3NpdGUuaCIKIAotI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05F
T04uaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgorI2luY2x1ZGUgIkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTAs
MjIxICsxMDcsNiBAQCB2b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICB9CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBj
bGFzcyBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhl
YWRlciBmaWxlcy4KLWNsYXNzIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZp
bHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUNvbXBvc2l0ZT4gewotICAgIHVzaW5nIEJhc2Ug
PSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb21wb3NpdGU+OwotCi1wdWJsaWM6Ci0g
ICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2YXRl
OgotICAgIHN0YXRpYyB1aW50OF90IGNsYW1wQnl0ZShpbnQpOwotCi0gICAgdGVtcGxhdGUgPGlu
dCBiMSwgaW50IGI0PgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1Bp
eGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBp
bnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQg
azQpOwotCi0gICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgotICAgIHN0YXRpYyBpbmxpbmUg
dm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3Vy
Y2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxv
YXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotCi0gICAgc3RhdGljIGlubGlu
ZSB2b2lkIGFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5z
aWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7Ci0KLSAgICBib29sIGFwcGx5QXJpdGhtZXRp
YyhGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMik7Ci0gICAgYm9vbCBhcHBseU5v
bkFyaXRobWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpOwotfTsKLQot
dWludDhfdCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y2xhbXBCeXRlKGludCBjKQotewot
ICAgIHVpbnQ4X3QgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1aW50OF90PihjKSwgMjU1LCAwIH07
Ci0gICAgdW5zaWduZWQgdWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyk7Ci0gICAgcmV0dXJu
IGJ1ZmZbISEodWMgJiB+MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEpKV07Ci19Ci0KLXRlbXBs
YXRlIDxpbnQgYjEsIGludCBiND4KLWlubGluZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBs
aWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2ln
bmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZs
b2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi17Ci0gICAgZmxvYXQgc2NhbGVkSzE7Ci0gICAg
ZmxvYXQgc2NhbGVkSzQ7Ci0gICAgaWYgKGIxKQotICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1
LjBmOwotICAgIGlmIChiNCkKLSAgICAgICAgc2NhbGVkSzQgPSBrNCAqIDI1NS4wZjsKLQotICAg
IHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFy
IGkxID0gKnNvdXJjZTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsK
LSAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBpMSArIGszICogaTI7Ci0gICAgICAgIGlmIChi
MSkKLSAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLMSAqIGkxICogaTI7Ci0gICAgICAgIGlm
IChiNCkKLSAgICAgICAgICAgIHJlc3VsdCArPSBzY2FsZWRLNDsKLQotICAgICAgICAqZGVzdGlu
YXRpb24gPSBjbGFtcEJ5dGUocmVzdWx0KTsKLSAgICAgICAgKytzb3VyY2U7Ci0gICAgICAgICsr
ZGVzdGluYXRpb247Ci0gICAgfQotfQotCi0vLyBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xh
bXBlZCBpcyBhIGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzIGZvciB0
aGUgY29tbW9uIGNhc2Ugd2hlcmUgY2xhbXBpbmcKLS8vIGlzIG5vdCBuZWNlc3NhcnkuIFRoaXMg
ZW5hYmxlcyBhZ2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBzdWNoIGFzIGF1dG8tdmVj
dG9yaXphdGlvbi4KLXRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLWlubGluZSB2b2lkIEZFQ29t
cG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1
bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4
ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi17
Ci0gICAgZmxvYXQgc2NhbGVkSzE7Ci0gICAgZmxvYXQgc2NhbGVkSzQ7Ci0gICAgaWYgKGIxKQot
ICAgICAgICBzY2FsZWRLMSA9IGsxIC8gMjU1LjBmOwotICAgIGlmIChiNCkKLSAgICAgICAgc2Nh
bGVkSzQgPSBrNCAqIDI1NS4wZjsKLQotICAgIHdoaWxlICgtLXBpeGVsQXJyYXlMZW5ndGggPj0g
MCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGkxID0gKnNvdXJjZTsKLSAgICAgICAgdW5zaWdu
ZWQgY2hhciBpMiA9ICpkZXN0aW5hdGlvbjsKLSAgICAgICAgZmxvYXQgcmVzdWx0ID0gazIgKiBp
MSArIGszICogaTI7Ci0gICAgICAgIGlmIChiMSkKLSAgICAgICAgICAgIHJlc3VsdCArPSBzY2Fs
ZWRLMSAqIGkxICogaTI7Ci0gICAgICAgIGlmIChiNCkKLSAgICAgICAgICAgIHJlc3VsdCArPSBz
Y2FsZWRLNDsKLQotICAgICAgICAqZGVzdGluYXRpb24gPSByZXN1bHQ7Ci0gICAgICAgICsrc291
cmNlOwotICAgICAgICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQotI2lmICFIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi1pbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6
YXBwbHlQbGF0Zm9ybUFyaXRobWV0aWModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBj
aGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBr
MiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1h
eCgwLjBmLCBrMSkgKyBzdGQ6Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBr
NDsKLSAgICBmbG9hdCBsb3dlckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4o
MC4wZiwgazIpICsgc3RkOjptaW4oMC4wZiwgazMpICsgazQ7Ci0gICAgaWYgKChrNCA+PSAwLjBm
ICYmIGs0IDw9IDEuMGYpICYmICh1cHBlckxpbWl0ID49IDAuMGYgJiYgdXBwZXJMaW1pdCA8PSAx
LjBmKSAmJiAobG93ZXJMaW1pdCA+PSAwLjBmICYmIGxvd2VyTGltaXQgPD0gMS4wZikpIHsKLSAg
ICAgICAgaWYgKGs0KSB7Ci0gICAgICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAgY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwg
cGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDE+KHNvdXJj
ZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgICAgICBjb21wdXRl
QXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhl
bEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMD4oc291cmNlLCBk
ZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoazQpIHsKLSAgICAgICAgaWYgKGsx
KQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwgMT4oc291cmNlLCBkZXN0
aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAxPihzb3VyY2UsIGRlc3Rp
bmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MSwg
MD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwwLCAw
Pihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7
Ci0gICAgfQotfQotI2VuZGlmCi0KLWJvb2wgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5QXJpdGhtZXRpYyhGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMikKLXsKLSAg
ICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3Vs
dChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKLSAgICBpZiAoIWRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEludFJlY3Qg
ZWZmZWN0QURyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQnVm
ZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCwgbV9lZmZlY3Qub3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IGluMi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZl
Y3RCRHJhd2luZ1JlY3QpOwotCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBp
eGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgaW50IGxlbmd0aCA9IHNvdXJjZVBp
eGVsQXJyYXkubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNfY2FzdDxpbnQ+
KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKSkpOwotICAgIGFwcGx5UGxhdGZvcm1Bcml0
aG1ldGljKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0
YSgpLCBsZW5ndGgsIG1fZWZmZWN0LmsxKCksIG1fZWZmZWN0LmsyKCksIG1fZWZmZWN0LmszKCks
IG1fZWZmZWN0Lms0KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFQ29tcG9zaXRl
U29mdHdhcmVBcHBsaWVyOjphcHBseU5vbkFyaXRobWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmls
dGVyRWZmZWN0KiBpbjIpCi17Ci0gICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdl
QnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlm
ICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYXV0byYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0KLSAg
ICBzd2l0Y2ggKG1fZWZmZWN0Lm9wZXJhdGlvbigpKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9VTktOT1dOOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjYXNlIEZFQ09N
UE9TSVRFX09QRVJBVE9SX09WRVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4y
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkVD
T01QT1NJVEVfT1BFUkFUT1JfSU46IHsKLSAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBp
bnRlcnNlY3RlZCByZWdpb24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4t
PmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3Qo
aW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVy
c2VjdChtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0
aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBh
ZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIG1fZWZmZWN0LmFic29s
dXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0g
ZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAg
ICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3Qp
LCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlvblJlY3Qp
LCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0p
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X09VVDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVP
cGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkVD
T01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6
ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVy
LT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfTElHSFRFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dp
Y2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEZFQ29tcG9zaXRlU29m
dHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cykKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Rz
WzBdLmdldCgpOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3RzWzFdLmdldCgp
OwotCi0gICAgaWYgKG1fZWZmZWN0Lm9wZXJhdGlvbigpID09IEZFQ09NUE9TSVRFX09QRVJBVE9S
X0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybiBhcHBseUFyaXRobWV0aWMoaW4sIGluMik7Ci0g
ICAgcmV0dXJuIGFwcGx5Tm9uQXJpdGhtZXRpYyhpbiwgaW4yKTsKLX0KLQogYm9vbCBGRUNvbXBv
c2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAg
IHJldHVybiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBp
bnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXggYTg3NmE5NWQzZjcxOTJkMDYyZmY4NGEz
YTA2ZTBlNmYzMzc0NjhiOC4uZjVlNDk3NDAyNjljMGQ2ZWY5OWQwODcyMDQxMWQzNGVlOGQ2NzQx
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggMjQ3NTlmOGYyMTE5ZWQz
Nzg2YjFkOTUxY2Y4ZGUwMjg0MzU0YTk5Zi4uZWMxZjhhMGQ0NWVjODU2ZmJmZDIyNzU5NjA3NDUw
OGQ2ZDY4ZTkxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC00LDYgKzQsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTEgKzI2LDcgQEAKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0
cml4LmgiCiAKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1dv
cmtRdWV1ZS5oPgorI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTExNywzMzEgKzExNCw2IEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVB
bHBoYShib29sIHByZXNlcnZlQWxwaGEpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIEZJWE1F
OiBNb3ZlIHRoZSBjbGFzcyBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFy
YXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb252b2x2
ZU1hdHJpeD4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
RkVDb252b2x2ZU1hdHJpeD47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0g
ICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlu
cHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IFBhaW50aW5nRGF0
YSB7Ci0gICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAg
ICAgICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRo
OwotICAgICAgICBpbnQgaGVpZ2h0OwotCi0gICAgICAgIEludFNpemUga2VybmVsU2l6ZTsKLSAg
ICAgICAgZmxvYXQgZGl2aXNvcjsKLSAgICAgICAgZmxvYXQgYmlhczsKLSAgICAgICAgSW50UG9p
bnQgdGFyZ2V0T2Zmc2V0OwotICAgICAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGU7Ci0gICAgICAg
IGJvb2wgcHJlc2VydmVBbHBoYTsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7
Ci0gICAgfTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdWludDhfdCBjbGFtcFJHQkFWYWx1ZShmbG9h
dCBjaGFubmVsLCB1aW50OF90IG1heCA9IDI1NSk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIHNl
dERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMs
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxz
LCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpOwot
Ci0gICAgc3RhdGljIGlubGluZSBpbnQgZ2V0UGl4ZWxWYWx1ZShjb25zdCBQYWludGluZ0RhdGEm
LCBpbnQgeCwgaW50IHkpOwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHNldEludGVyaW9yUGl4
ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0
YXJ0LCBpbnQgeUVuZCk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIHNldE91dGVyUGl4ZWxzKFBh
aW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5Mik7Ci0KLSAgICB2b2lk
IGFwcGx5UGxhdGZvcm0oUGFpbnRpbmdEYXRhJikgY29uc3Q7Ci19OwotCi0vKgotICAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgIENvbnZvbHZlTWF0cml4IGltcGxl
bWVudGF0aW9uCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICBU
aGUgaW1hZ2UgcmVjdGFuZ2xlIGlzIHNwbGl0IGluIHRoZSBmb2xsb3dpbmcgd2F5OgotCi0gICAg
ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgICAgICAgICBBICAgICAgICAgIHwK
LSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8ICAgfCAgICAgICAgICAgICB8
ICAgfAotICAgICAgfCBCIHwgICAgICBDICAgICAgfCBEIHwKLSAgICAgIHwgICB8ICAgICAgICAg
ICAgIHwgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgICAgICAg
ICBFICAgICAgICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLSAgIFdoZXJl
IHJlZ2lvbiBDIGNvbnRhaW5zIHRob3NlIHBpeGVscywgd2hvc2UgdmFsdWVzCi0gICBjYW4gYmUg
Y2FsY3VsYXRlZCB3aXRob3V0IGNyb3NzaW5nIHRoZSBlZGdlIG9mIHRoZSByZWN0YW5nbGUuCi0K
LSAgIEV4YW1wbGU6Ci0gICAgICBJbWFnZSBzaXplOiB3aWR0aDogMTAsIGhlaWdodDogMTAKLQot
ICAgICAgT3JkZXIgKGtlcm5lbCBtYXRyaXggc2l6ZSk6IHdpZHRoOiAzLCBoZWlnaHQgNAotICAg
ICAgVGFyZ2V0OiB4OjEsIHk6MwotCi0gICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0
aGUgdGFyZ2V0IGluc2lkZSB0aGUga2VybmVsIG1hdHJpeDoKLQotICAgICAgICAuLi4KLSAgICAg
ICAgLi4uCi0gICAgICAgIC4uLgotICAgICAgICAuWC4KLQotICAgVGhlIHJlZ2lvbnMgaW4gdGhp
cyBjYXNlIGFyZSB0aGUgZm9sbG93aW5nOgotICAgICAgTm90ZTogKHgxLCB5MSkgdG9wLWxlZnQg
YW5kICh4MiwgeTIpIGlzIHRoZSBib3R0b20tcmlnaHQgY29ybmVyCi0gICAgICBOb3RlOiByb3cg
eDIgYW5kIGNvbHVtbiB5MiBpcyBub3QgcGFydCBvZiB0aGUgcmVnaW9uCi0gICAgICAgICAgICBv
bmx5IHRob3NlICh4LCB5KSBwaXhlbHMsIHdoZXJlIHgxIDw9IHggPCB4MiBhbmQgeTEgPD0geSA8
IHkyCi0KLSAgICAgIFJlZ2lvbiBBOiB4MTogMCwgeTE6IDAsIHgyOiAxMCwgeTI6IDMKLSAgICAg
IFJlZ2lvbiBCOiB4MTogMCwgeTE6IDMsIHgyOiAxLCB5MjogMTAKLSAgICAgIFJlZ2lvbiBDOiB4
MTogMSwgeTE6IDMsIHgyOiA5LCB5MjogMTAKLSAgICAgIFJlZ2lvbiBEOiB4MTogOSwgeTE6IDMs
IHgyOiAxMCwgeTI6IDEwCi0gICAgICBSZWdpb24gRTogeDE6IDAsIHkxOiAxMCwgeDI6IDEwLCB5
MjogMTAgKGVtcHR5IHJlZ2lvbikKLQotICAgU2luY2UgcmVnaW9uIEMgKG9mdGVuKSBjb250YWlu
cyBtb3N0IG9mIHRoZSBwaXhlbHMsIHdlIGltcGxlbWVudGVkCi0gICBhIGZhc3QgYWxnb3JpdG0g
dG8gY2FsY3VsYXRlIHRoZXNlIHZhbHVlcywgY2FsbGVkIGZhc3RTZXRJbnRlcmlvclBpeGVscy4K
LSAgIEZvciBvdGhlciByZWdpb25zLCBmYXN0U2V0T3V0ZXJQaXhlbHMgaXMgdXNlZCwgd2hpY2gg
Y2FsbHMgZ2V0UGl4ZWxWYWx1ZSwKLSAgIHRvIGhhbmRsZSBwaXhlbHMgb3V0c2lkZSBvZiB0aGUg
aW1hZ2UuIEluIGEgcmFyZSBzaXR1YXRpb25zLCB3aGVuCi0gICBrZXJuZWwgbWF0cml4IGlzIGJp
Z2dlciB0aGFuIHRoZSBpbWFnZSwgYWxsIHBpeGVscyBhcmUgY2FsY3VsYXRlZCBieSB0aGlzCi0g
ICBmdW5jdGlvbi4KLQotICAgQWx0aG91Z2ggdGhlc2UgdHdvIGZ1bmN0aW9ucyBoYXZlIGxvdCBp
biBjb21tb24sIEkgZGVjaWRlZCBub3QgdG8gbWFrZQotICAgY29tbW9uIGEgdGVtcGxhdGUgZm9y
IHRoZW0sIHNpbmNlIHRoZXJlIGFyZSBrZXkgZGlmZmVyZW5jZXMgYXMgd2VsbCwKLSAgIGFuZCB3
b3VsZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCi0qLwotCi1pbmxpbmUgdWlu
dDhfdCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpjbGFtcFJHQkFWYWx1ZShmbG9h
dCBjaGFubmVsLCB1aW50OF90IG1heCkKLXsKLSAgICBpZiAoY2hhbm5lbCA8PSAwKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCi0gICAgICAgIHJldHVybiBtYXg7
Ci0gICAgcmV0dXJuIGNoYW5uZWw7Ci19Ci0KLWlubGluZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZUFwcGxpZXI6OnNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBp
eGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXMpCi17Ci0gICAgdWludDhfdCBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFW
YWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0
KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhB
bHBoYSkpOwotCi0gICAgaWYgKHByZXNlcnZlQWxwaGFWYWx1ZXMpIHsKLSAgICAgICAgZGVzdFBp
eGVscy5zZXQocGl4ZWwsIHNvdXJjZVBpeGVscy5pdGVtKHBpeGVsKSk7Ci0gICAgICAgICsrcGl4
ZWw7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhh
KTsKLX0KLQotaW5saW5lIGludCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpnZXRQ
aXhlbFZhbHVlKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHkp
Ci17Ci0gICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYmIHkgPj0gMCAm
JiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKLSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdE
YXRhLndpZHRoICsgeCkgPDwgMjsKLQotICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLmVkZ2VNb2Rl
KSB7Ci0gICAgZGVmYXVsdDogLy8gRURHRU1PREVfTk9ORQotICAgICAgICByZXR1cm4gLTE7Ci0g
ICAgY2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6Ci0gICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAg
ICAgIHggPSAwOwotICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKLSAg
ICAgICAgICAgIHggPSBwYWludGluZ0RhdGEud2lkdGggLSAxOwotICAgICAgICBpZiAoeSA8IDAp
Ci0gICAgICAgICAgICB5ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEu
aGVpZ2h0KQotICAgICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOwotICAgICAg
ICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIGNhc2UgRURH
RU1PREVfV1JBUDoKLSAgICAgICAgd2hpbGUgKHggPCAwKQotICAgICAgICAgICAgeCArPSBwYWlu
dGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAg
ICB3aGlsZSAoeSA8IDApCi0gICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0g
ICAgICAgIHkgJT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgcmV0dXJuICh5ICogcGFp
bnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLSAgICB9Ci19Ci0KLS8vIE9ubHkgZm9yIHJlZ2lv
biBDCi1pbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRJbnRl
cmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50
IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQotewotICAgIC8vIGVkZ2UgbW9kZSBk
b2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCi0gICAgaW50IHBpeGVsID0gKHBhaW50aW5nRGF0
YS50YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgcGFpbnRpbmdEYXRhLnRh
cmdldE9mZnNldC54KCkpICogNDsKLSAgICBpbnQga2VybmVsSW5jcmVhc2UgPSBjbGlwUmlnaHQg
KiA0OwotICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgo
KSAtIDEpICogNDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRz
Ci0gICAgZmxvYXQgdG90YWxzWzRdOwotCi0gICAgLy8gZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKHBhaW50aW5n
RGF0YS5kaXZpc29yKTsKLQotICAgIC8vIFNraXAgdGhlIGZpcnN0ICcoY2xpcEJvdHRvbSAtIHlF
bmQpJyBsaW5lcwotICAgIHBpeGVsICs9IChjbGlwQm90dG9tIC0geUVuZCkgKiAoeEluY3JlYXNl
ICsgKGNsaXBSaWdodCArIDEpICogNCk7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWwgPSAoY2xp
cEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotCi0g
ICAgZm9yIChpbnQgeSA9IHlFbmQgKyAxOyB5ID4geVN0YXJ0OyAtLXkpIHsKLSAgICAgICAgZm9y
IChpbnQgeCA9IGNsaXBSaWdodCArIDE7IHggPiAwOyAtLXgpIHsKLSAgICAgICAgICAgIGludCBr
ZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKLSAgICAg
ICAgICAgIGludCBrZXJuZWxQaXhlbCA9IHN0YXJ0S2VybmVsUGl4ZWw7Ci0gICAgICAgICAgICBp
bnQgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwotCi0gICAgICAgICAg
ICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKLSAgICAgICAgICAg
IHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbM10gPSAwOwotCi0gICAgICAgICAg
ICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewotICAgICAgICAgICAgICAgIHRvdGFsc1swXSAr
PSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZs
b2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAg
ICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJu
ZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXku
aXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50
aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBh
aW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAg
ICAgICAgIGlmICghcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpCi0gICAgICAgICAgICAgICAg
ICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAq
IHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5l
bFBpeGVsKSk7Ci0gICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsKLSAgICAgICAgICAgICAg
ICAtLWtlcm5lbFZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewotICAgICAg
ICAgICAgICAgICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsKLSAgICAgICAgICAg
ICAgICAgICAgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25Q
aXhlbHMocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFy
cmF5LCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJp
YXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKLSAgICAgICAgICAgIHN0YXJ0S2VybmVs
UGl4ZWwgKz0gNDsKLSAgICAgICAgfQotICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7Ci0gICAg
ICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOwotICAgIH0KLX0KLQotLy8gRm9yIG90
aGVyIHJlZ2lvbnMgdGhhbiBDCi1pbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQotewotICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50
aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7Ci0gICAgaW50IGhlaWdodCA9IHkyIC0geTE7Ci0gICAg
aW50IHdpZHRoID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIHBh
aW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsWCA9
IGJlZ2luS2VybmVsUGl4ZWxYOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsWSA9IHkxIC0gcGFp
bnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCk7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChwYWludGlu
Z0RhdGEud2lkdGggLSB3aWR0aCkgKiA0OwotICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2Ygcmdi
KGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbNF07Ci0KLSAgICAvLyBwYWludGluZ0Rh
dGEuZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJl
cyB0aGlzCi0gICAgQVNTRVJUKHBhaW50aW5nRGF0YS5kaXZpc29yKTsKLQotICAgIGZvciAoaW50
IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4
ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEu
a2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0g
c3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRL
ZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVs
U2l6ZS53aWR0aCgpOwotCi0gICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwotICAgICAgICAgICAg
dG90YWxzWzFdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICB0
b3RhbHNbM10gPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewot
ICAgICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGluZ0Rh
dGEsIGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKLSAgICAgICAgICAgICAgICBpZiAocGl4
ZWxJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGlu
Z0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVd
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4
ZWxJbmRleCArIDEpKTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDIpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSAm
JiBwaXhlbEluZGV4ID49IDApCi0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWlu
dGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAzKSk7Ci0gICAgICAg
ICAgICAgICAgKytrZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsK
LSAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAga2Vy
bmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgICAgICAgICAgICAgICsra2Vy
bmVsUGl4ZWxZOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJu
ZWxTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwg
cGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIHBhaW50aW5nRGF0YS5k
aXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpOwot
ICAgICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKLSAgICAgICAgfQotICAgICAgICBwaXhl
bCArPSB4SW5jcmVhc2U7Ci0gICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQ
aXhlbFg7Ci0gICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgfQotfQotCi12b2lkIEZF
Q29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEpIGNvbnN0Ci17Ci0gICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBp
eGVscwotICAgIGludCBjbGlwUmlnaHQgPSBwYWludGluZ0RhdGEud2lkdGggLSBwYWludGluZ0Rh
dGEua2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRpbmdEYXRh
LmhlaWdodCAtIHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLmhlaWdodCgpOwotCi0gICAgaWYgKGNs
aXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAgICAgLy8gUmFyZSBzaXR1YXRp
b24sIG5vdCBvcHRpbWl6ZWQgZm9yIHNwZWVkCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50
aW5nRGF0YSwgMCwgMCwgcGFpbnRpbmdEYXRhLndpZHRoLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbmlt
YWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZv
ciBwYXJhbGxlbCBqb2JzCi0KLSAgICBpZiAoaW50IGl0ZXJhdGlvbnMgPSAocGFpbnRpbmdEYXRh
LndpZHRoICogcGFpbnRpbmdEYXRhLmhlaWdodCkgLyBtaW5pbWFsUmVjdERpbWVuc2lvbikgewot
ICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7Ci0gICAgICAgIGlu
dCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKLQotICAg
ICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0NvdW50LCBbJl0oc2l6ZV90IGlu
ZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKLSAgICAg
ICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xp
cEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwg
Y2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAgICAgICB9KTsKLSAgICB9
IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQs
IGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJpZ2h0ICs9IHBhaW50aW5n
RGF0YS50YXJnZXRPZmZzZXQueCgpICsgMTsKLSAgICBjbGlwQm90dG9tICs9IHBhaW50aW5nRGF0
YS50YXJnZXRPZmZzZXQueSgpICsgMTsKLQotICAgIGlmIChwYWludGluZ0RhdGEudGFyZ2V0T2Zm
c2V0LnkoKSA+IDApCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwg
cGFpbnRpbmdEYXRhLndpZHRoLCBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSk7Ci0gICAg
aWYgKGNsaXBCb3R0b20gPCBwYWludGluZ0RhdGEuaGVpZ2h0KQotICAgICAgICBzZXRPdXRlclBp
eGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50aW5nRGF0YS53aWR0aCwgcGFp
bnRpbmdEYXRhLmhlaWdodCk7Ci0gICAgaWYgKHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgp
ID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBwYWludGluZ0Rh
dGEudGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCksIGNsaXBC
b3R0b20pOwotICAgIGlmIChjbGlwUmlnaHQgPCBwYWludGluZ0RhdGEud2lkdGgpCi0gICAgICAg
IHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBwYWludGluZ0RhdGEudGFy
Z2V0T2Zmc2V0LnkoKSwgcGFpbnRpbmdEYXRhLndpZHRoLCBjbGlwQm90dG9tKTsKLX0KLQotYm9v
bCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKLXsKLSAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwotCi0gICAgYXV0byBhbHBoYUZvcm1hdCA9
IG1fZWZmZWN0LnByZXNlcnZlQWxwaGEoKSA/IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCA6IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ7Ci0gICAg
YXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQo
YWxwaGFGb3JtYXQpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChh
bHBoYUZvcm1hdCwgZWZmZWN0RHJhd2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRh
KCk7Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOwotICAgIAotICAgIGF1dG8gcGFpbnRTaXplID0gbV9lZmZlY3QuYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0g
ewotICAgICAgICBzb3VyY2VQaXhlbEFycmF5LAotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJy
YXksCi0gICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAotICAgICAgICBwYWludFNpemUuaGVpZ2h0
KCksCi0gICAgICAgIG1fZWZmZWN0Lmtlcm5lbFNpemUoKSwKLSAgICAgICAgbV9lZmZlY3QuZGl2
aXNvcigpLAotICAgICAgICBtX2VmZmVjdC5iaWFzKCkgKiAyNTUsCi0gICAgICAgIG1fZWZmZWN0
LnRhcmdldE9mZnNldCgpLAotICAgICAgICBtX2VmZmVjdC5lZGdlTW9kZSgpLAotICAgICAgICBt
X2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCksCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6
ZWRGbG9hdHMobV9lZmZlY3Qua2VybmVsKCkpCi0gICAgfTsKLQotICAgIGFwcGx5UGxhdGZvcm0o
cGFpbnRpbmdEYXRhKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBGRUNvbnZvbHZlTWF0
cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAg
cmV0dXJuIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRl
ciwgaW5wdXRFZmZlY3RzKCkpOwpAQCAtNDUwLDE2ICsxMjIsMTYgQEAgYm9vbCBGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRnZU1vZGVU
eXBlJiB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRURHRU1PREVfVU5L
Tk9XTjoKKyAgICBjYXNlIEVkZ2VNb2RlVHlwZTo6VW5rbm93bjoKICAgICAgICAgdHMgPDwgIlVO
S05PV04iOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKKyAg
ICBjYXNlIEVkZ2VNb2RlVHlwZTo6RHVwbGljYXRlOgogICAgICAgICB0cyA8PCAiRFVQTElDQVRF
IjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgorICAgIGNhc2UgRWRn
ZU1vZGVUeXBlOjpXcmFwOgogICAgICAgICB0cyA8PCAiV1JBUCI7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRURHRU1PREVfTk9ORToKKyAgICBjYXNlIEVkZ2VNb2RlVHlwZTo6Tm9uZToKICAg
ICAgICAgdHMgPDwgIk5PTkUiOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5oCmluZGV4IDZiN2FkZTZmMGIyMjg5ZjM0M2U1NjgxNGZkOGMyZGU1NDQ3M2ZmOTkuLjAy
ZDdjMmJlYzhiZGEyMTI0NjA4ZDM1MDQ3ZWU5ZjNiYWRjNGNiNDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhl
cmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCwxMSArMjksMTEgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIEVkZ2VNb2RlVHlwZSB7Ci0gICAgRURHRU1P
REVfVU5LTk9XTiAgID0gMCwKLSAgICBFREdFTU9ERV9EVVBMSUNBVEUgPSAxLAotICAgIEVER0VN
T0RFX1dSQVAgICAgICA9IDIsCi0gICAgRURHRU1PREVfTk9ORSAgICAgID0gMworZW51bSBjbGFz
cyBFZGdlTW9kZVR5cGUgeworICAgIFVua25vd24sCisgICAgRHVwbGljYXRlLAorICAgIFdyYXAs
CisgICAgTm9uZQogfTsKIAogY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAppbmRleCA3NjBmODM1YjFiNTEyM2Rk
NDJjMjZmMTdmN2NkYzFkMzMzYjI0Y2Q2Li4wN2IwOGNjYTRhMzg3ZWVmMzczYzhkMDQ3MDk4N2M1
MWJjMGQ1NGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5o
CmluZGV4IDhhMTBhZWM4N2M4ZjE4OWY5ZjA1N2NiOTQ0M2VhYWVkZDUzOGY2OTEuLjMwMjRkNjUy
MWIzOWQ0MmNhNGEyMGU3NTc3ZDk0MTQxZmVmMjAxYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5n
LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggZGZjNzYwZTIwZjQ5OTQ2MDVmOTQ0OTEyZWZk
ZTNhYzA4MTUwNGJhZC4uZjRkNWY0OTFhMTU4ZWQ3YmUyOGI5MjIxNDIxNjUwYmYzOGU4Y2ViNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxMCArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNp
bmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1h
cFNvZnR3YXJlQXBwbGllci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODUsOTMgKzgzLDYgQEAgdm9pZCBGRURpc3BsYWNlbWVu
dE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBp
bnQgaW4KICAgICAgICAgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uob3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKIH0KIAotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFQ29tcG9zaXRlU29m
dHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3Mg
RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29u
Y3JldGVBcHBsaWVyPEZFRGlzcGxhY2VtZW50TWFwPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRl
ckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRURpc3BsYWNlbWVudE1hcD47Ci0KLXB1YmxpYzoKLSAg
ICBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcihGRURpc3BsYWNlbWVudE1hcCYpOwot
Ci0gICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3Im
IGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGlubGluZSB1
bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25l
ZCByb3dCeXRlcykKLSAgICB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwg
PSA0OwotICAgICAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7Ci0g
ICAgfQotCi0gICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdC54
Q2hhbm5lbFNlbGVjdG9yKCkgLSAxOyB9Ci0gICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2VmZmVjdC55Q2hhbm5lbFNlbGVjdG9yKCkgLSAxOyB9Ci19OwotCi1GRURpc3Bs
YWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxp
ZXIoRkVEaXNwbGFjZW1lbnRNYXAmIGVmZmVjdCkKLSAgICA6IEJhc2UoZWZmZWN0KQotewotICAg
IEFTU0VSVChtX2VmZmVjdC54Q2hhbm5lbFNlbGVjdG9yKCkgIT0gQ0hBTk5FTF9VTktOT1dOKTsK
LSAgICBBU1NFUlQobV9lZmZlY3QueUNoYW5uZWxTZWxlY3RvcigpICE9IENIQU5ORUxfVU5LTk9X
Tik7Ci19Ci0KLWJvb2wgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cykKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwotICAg
IEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3RzWzFdLmdldCgpOwotCi0gICAgYXV0byBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBp
eGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBhdXRv
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dFBpeGVsQnVm
ZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCk7Ci0KLSAgICBhdXRvIGVmZmVjdEJEcmF3
aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjIt
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhl
IHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVt
dWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KLSAgICBhdXRvIGRpc3BsYWNlbWVudFBpeGVsQnVmZmVy
ID0gaW4yLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGVmZmVjdEJEcmF3aW5nUmVjdCk7Ci0gICAgCi0gICAgaWYgKCFpbnB1dFBp
eGVsQnVmZmVyIHx8ICFkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byYgaW5wdXRJbWFnZSA9IGlucHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsK
LSAgICBhdXRvJiBkaXNwbGFjZW1lbnRJbWFnZSA9IGRpc3BsYWNlbWVudFBpeGVsQnVmZmVyLT5k
YXRhKCk7Ci0gICAgQVNTRVJUKGlucHV0SW1hZ2UubGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50SW1h
Z2UubGVuZ3RoKCkpOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBtX2VmZmVjdC5hYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKTsKLQotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3Quc2NhbGUoKSwgbV9lZmZlY3Quc2NhbGUoKSB9KTsK
LSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKLSAgICBm
bG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQg
c2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7Ci0gICAgZmxvYXQgc2Nh
bGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41OwotICAgIAotICAgIGludCBk
aXNwbGFjZW1lbnRDaGFubmVsWCA9IHhDaGFubmVsSW5kZXgoKTsKLSAgICBpbnQgZGlzcGxhY2Vt
ZW50Q2hhbm5lbFkgPSB5Q2hhbm5lbEluZGV4KCk7Ci0KLSAgICBpbnQgcm93Qnl0ZXMgPSBwYWlu
dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IHBhaW50U2l6ZS5o
ZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0
ZXM7Ci0KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4
KSB7Ci0gICAgICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCAr
IHggKiA0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNf
Y2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UuaXRlbShkZXN0aW5h
dGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7Ci0gICAg
ICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICog
ZGlzcGxhY2VtZW50SW1hZ2UuaXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hh
bm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0aW5h
dGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9uUGl4
ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKLSAgICAgICAgICAgIGlmIChzcmNY
IDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0g
cGFpbnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQ
dHIgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4oaW5wdXRJbWFnZS5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dC
eXRlcykpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wg
RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKIHsKICAgICByZXR1cm4gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIoKnRo
aXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5o
CmluZGV4IDdhNjM3OGIwNGNiNGFkODgyMTFhMGE0YWNhODhhZmQ4ODMyN2NlYzAuLjk2NTQ2Mjc4
YzJkNmFhZmQ0NjkwZTM0Y2FjMmRkYTg5NzYwYWE4OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcAppbmRleCBhYWIyNDhkMTQ4MDJmYjY3NTdhZTNhNTlhNDNlNDYyOTNhZmMx
ODU3Li5lOTY2ZGRiYjcyNWQzNjJiMDkwZmM0MmQ2N2Y4ZDNhNmQ4ZmNjMWRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMSwxNCArMjIsOSBAQAogI2luY2x1ZGUgIkZFRHJvcFNoYWRvdy5oIgogCiAj
aW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93U29m
dHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgotI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNzAsNjEgKzY2LDYgQEAgdm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotLy8gRklY
TUU6IE1vdmUgdGhlIGNsYXNzIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0
ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBw
bGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEcm9wU2hhZG93PiB7
Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRURyb3BTaGFk
b3c+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHko
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92
ZXJyaWRlOwotfTsKLQotYm9vbCBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cykKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwotCi0g
ICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
aWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRmxvYXRTaXpl
IGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5z
dGREZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKLSAgICBGbG9hdFNp
emUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5keCgpLCBt
X2VmZmVjdC5keSgpIH0pOwotCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBtX2VmZmVj
dC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7Ci0gICAg
ZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQubW92ZShvZmZzZXQpOwotCi0gICAgYXV0byBzb3VyY2VJ
bWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghc291cmNlSW1hZ2UpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgcmVzdWx0Q29udGV4
dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYSht
X2VmZmVjdC5zaGFkb3dPcGFjaXR5KCkpOwotICAgIHJlc3VsdENvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQpOwotICAgIHJlc3VsdENv
bnRleHQuc2V0QWxwaGEoMSk7Ci0KLSAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJh
ZGl1cywgb2Zmc2V0LCBtX2VmZmVjdC5zaGFkb3dDb2xvcigpKTsKLQotICAgIFBpeGVsQnVmZmVy
Rm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBp
eGVsRm9ybWF0OjpSR0JBOCwgbV9lZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50
UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2Fs
U2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVm
ZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVy
LT5kYXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzb3VyY2VQaXhlbEFy
cmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHBpeGVsQnVmZmVyLT5zaXplKCku
d2lkdGgoKSk7Ci0gICAgCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1
ZmZlciwgc2hhZG93QXJlYSk7Ci0KLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwotICAgIHJlc3VsdENvbnRleHQuZmls
bFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBtX2VmZmVjdC5zaGFkb3dDb2xvcigpKTsKLSAgICByZXN1bHRDb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsK
LQotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFn
ZSwgZHJhd2luZ1JlZ2lvbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAg
cmV0dXJuIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBp
bnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAppbmRleCA0OTZlYzMyZWUxOWMyZDFhNzI4ZmNk
NjFkMTc2ZjFlZmM4OTIwMjQzLi44NjlkNzAzYWZiMWQxZDNlMjJjZDRlZjdmZjZhMTYwNTgzYmRm
MDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IDk4OThjNzM3NmY2NWYyZTExNzVjMWE3ODFj
NjRlZWY4MzI0NmFlYjAuLmVhYTc4YzM3NTFiYzA0MjM0OGM2NWUwNGIyMGY2YTRmY2FiYmVmZTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVG
bG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsOSArMjUsNyBAQAogI2lu
Y2x1ZGUgIkZFRmxvb2QuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgotI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkZFRmxvb2RTb2Z0d2FyZUFw
cGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTU5LDI4ICs1OCw2IEBAIGJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5
KGZsb2F0IGZsb29kT3BhY2l0eSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gRklYTUU6IE1v
dmUgdGhlIGNsYXNzIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3Vy
Y2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIEZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRmxvb2Q+IHsKLSAgICB1c2luZyBCYXNl
ID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRmxvb2Q+OwotCi1wdWJsaWM6Ci0gICAg
dXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3Qg
RmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotfTsKLQotYm9vbCBG
RUZsb29kU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImKQotewotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gY29sb3IgPSBtX2VmZmVjdC5mbG9vZENvbG9yKCkuY29sb3JXaXRoQWxw
aGFNdWx0aXBsaWVkQnkobV9lZmZlY3QuZmxvb2RPcGFjaXR5KCkpOwotICAgIHJlc3VsdEltYWdl
LT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogYm9vbCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiB7CiAgICAgcmV0dXJuIEZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZp
bHRlciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCA5YzEzZTVkNGViYThjOGM5YmM5ODRkYzYz
OTQ3MGJjNDhjOTQzNWUzLi5iOTdiNDNlMzc2MWFiMDE1M2VhYTYxOWNhYWZjNTQ0N2ZiNmVmOTdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCBkYjM1OTA4ZjRmNGY4OWE0NThkNzliYzMwMWYx
MjhhYzU1OTI5MTA0Li4zYmNjNTlmOTAwZDc1N2NkMDkxN2FlN2FjMzM0MDQxYzlhYWJiNGEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEsIFMuTC4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNiwyMSArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUdh
dXNzaWFuQmx1ci5oIgogCi0jaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXJORU9OLmgiCisjaW5jbHVk
ZSAiRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIK
LSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lmIFVTRShBQ0NFTEVS
QVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2Vsc2UKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXJh
bGxlbEpvYnMuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlZjxGRUdhdXNz
aWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpCkBAIC0xMTksNyArMTA4LDcgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAKICAgICBG
bG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWlu
dFJlY3QoKTsKICAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZs
YXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VN
T0RFX05PTkUpIHsKKyAgICBpZiAobV9lZGdlTW9kZSAhPSBFZGdlTW9kZVR5cGU6Ok5vbmUpIHsK
ICAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBh
aW50UmVjdCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTM2LDQ1MyArMTI1LDYgQEAg
dm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChh
YnNvbHV0ZVBhaW50UmVjdCkpOwogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmls
ZXMuCi1jbGFzcyBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVHYXVzc2lhbkJsdXI+IHsKLSAgICB1c2luZyBCYXNlID0g
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFR2F1c3NpYW5CbHVyPjsKLQotcHVibGljOgot
ICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKLQotcHJpdmF0
ZToKLSAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBpb1BpeGVsQXJyYXk7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0
OwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWDsKLSAgICAgICAgdW5zaWduZWQga2VybmVs
U2l6ZVk7Ci0gICAgICAgIGJvb2wgaXNBbHBoYUltYWdlOwotICAgICAgICBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGU7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlv
bihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGlu
dCYgZGVsdGFSaWdodCk7Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25s
eShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJy
YXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0
LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVm
ZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKTsKLSAgICBzdGF0aWMgaW5saW5l
IHZvaWQgYm94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWlu
dDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBp
bnQgZHhSaWdodCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwg
aW50IGVmZmVjdEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwotCi0gICAg
c3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYg
aW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxT
aXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpOwotICAg
IHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyVW5hY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJh
eSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50
U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgYm94Qmx1ckdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50
OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2ln
bmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBF
ZGdlTW9kZVR5cGUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyV29ya2VyKEFwcGx5
UGFyYW1ldGVycyopOwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5UGxhdGZvcm0oVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJh
eSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBw
YWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwotfTsKLQotaW5saW5l
IHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbFBvc2l0aW9uKGludCBi
bHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0
YVJpZ2h0KQotewotICAgIC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJz
Lmh0bWwjZmVHYXVzc2lhbkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgotICAgIHN3aXRjaCAoYmx1
ckl0ZXJhdGlvbikgewotICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsK
LSAgICAgICAgICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDIgLSAxOwotICAgICAgICAgICAgZGVs
dGFSaWdodCA9IHJhZGl1cyAtIGRlbHRhTGVmdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGRlbHRhTGVmdCA9IHJhZGl1cyAvIDI7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFk
aXVzIC0gZGVsdGFMZWZ0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMToK
LSAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKLSAgICAgICAgICAgIGRlbHRhTGVmdCsrOwot
ICAgICAgICAgICAgZGVsdGFSaWdodC0tOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgMjoKLSAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKLSAgICAgICAgICAgIGRlbHRh
UmlnaHQrKzsKLSAgICAgICAgICAgIHJhZGl1cysrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhhIGNo
YW5uZWwuCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1
ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhD
bGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50
JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRo
LCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQotewotICAgIGNv
bnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90
KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgLy8gTWVtb3J5IGFsaWdubWVu
dCBpczogUkdCQSwgemVyby1pbmRleCBiYXNlZC4KLSAgICBjb25zdCBpbnQgY2hhbm5lbCA9IDM7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7Ci0gICAgICAg
IGludCBsaW5lID0geSAqIHN0cmlkZUxpbmU7Ci0gICAgICAgIGludCBzdW0gPSAwOwotCi0gICAg
ICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhL
ZXJuZWxTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBp
ICogc3RyaWRlOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSAr
IG9mZnNldDsKLSAgICAgICAgICAgIHN1bSArPSBzcmNQdHJbY2hhbm5lbF07Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZl
Y3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBs
aW5lICsgeCAqIHN0cmlkZSArIGNoYW5uZWw7Ci0gICAgICAgICAgICB1aW50OF90KiBkc3RQdHIg
PSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OwotICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN1bSAvIGR4KTsKLQotICAgICAgICAgICAgLy8gU2hpZnQga2VybmVs
LgotICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsK
LSAgICAgICAgICAgICAgICBzdW0gLT0gKnNyY1B0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7
Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0
T2Zmc2V0OwotICAgICAgICAgICAgICAgIHN1bSArPSAqc3JjUHRyOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwg
VWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0
LCBpbnQgZHhSaWdodCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0
aCwgaW50IGVmZmVjdEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUpCi17Ci0gICAgY29uc3QgaW50IG1heEtlcm5lbFNpemUgPSBzdGQ6Om1pbihkeFJpZ2h0LCBl
ZmZlY3RXaWR0aCk7Ci0gICAgaWYgKGFscGhhSW1hZ2UpCi0gICAgICAgIHJldHVybiBib3hCbHVy
QWxwaGFPbmx5KHNyY1BpeGVsQXJyYXksIGRzdFBpeGVsQXJyYXksIGR4LCBkeExlZnQsIGR4Umln
aHQsIHN0cmlkZSwgc3RyaWRlTGluZSwgIGVmZmVjdFdpZHRoLCBlZmZlY3RIZWlnaHQsIG1heEtl
cm5lbFNpemUpOwotCi0gICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXku
ZGF0YSgpOwotICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKLQot
ICAgIC8vIENvbmNlcm5pbmcgdGhlIGFycmF5IHdpZHRoL2xlbmd0aDogaXQgaXMgRWxlbWVudCBz
aXplICsgTWFyZ2luICsgQm9yZGVyLiBUaGUgbnVtYmVyIG9mIHBpeGVscyB3aWxsIGJlCi0gICAg
Ly8gUCA9IHdpZHRoICogaGVpZ2h0ICogY2hhbm5lbHMuCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBlZmZlY3RIZWlnaHQ7ICsreSkgewotICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVMaW5l
OwotICAgICAgICBpbnQgc3VtUiA9IDAsIHN1bUcgPSAwLCBzdW1CID0gMCwgc3VtQSA9IDA7Ci0K
LSAgICAgICAgaWYgKGVkZ2VNb2RlID09IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgICAgIC8v
IEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2Vy
bmVsU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSAr
IGkgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3Jj
RGF0YSArIG9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIrKzsKLSAgICAg
ICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICBzdW1CICs9ICpz
cmNQdHIrKzsKLSAgICAgICAgICAgICAgICBzdW1BICs9ICpzcmNQdHI7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxC
eXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgdWludDhfdCog
ZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLQotICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7Ci0gICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKLSAgICAgICAg
ICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOwotICAg
ICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwot
Ci0gICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAgICAgIGlmICh4
ID49IGR4TGVmdCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0g
cGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBj
b25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgLT0g
c3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAgICAg
ICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJp
Z2h0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIg
PSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3Jj
UHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEg
Kz0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcg
aGVyZS4KLSAgICAgICAgICAgIC8vIEdldCBlZGdlIHZhbHVlcyBmb3IgZWRnZU1vZGUgJ2R1cGxp
Y2F0ZScuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBlZGdlVmFsdWVMZWZ0ID0gc3JjRGF0
YSArIGxpbmU7Ci0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBlZGdlVmFsdWVSaWdodCAgPSBz
cmNEYXRhICsgKGxpbmUgKyAoZWZmZWN0V2lkdGggLSAxKSAqIHN0cmlkZSk7Ci0KLSAgICAgICAg
ICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBkeExlZnQg
KiAtMTsgaSA8IGR4UmlnaHQ7ICsraSkgewotICAgICAgICAgICAgICAgIC8vIElzIHRoaXMgcmln
aHQgZm9yIG5lZ2F0aXZlIHZhbHVlcyBvZiAnaSc/Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gbGluZSArIGkgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhf
dCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKLQotICAgICAgICAgICAgICAgIGlmIChpIDwg
MCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZUxlZnRbMF07Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlTGVmdFsxXTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VtQiArPSBlZGdlVmFsdWVMZWZ0WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1B
ICs9IGVkZ2VWYWx1ZUxlZnRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID49IGVm
ZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRb
MF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUcgKz0gKnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9ICpz
cmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKLSAg
ICAgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0
OwotCi0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Vt
UiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90
PihzdW1HIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHN1bUIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwu
Ci0gICAgICAgICAgICAgICAgaWYgKHggPCBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAg
c3VtUiAtPSBlZGdlVmFsdWVMZWZ0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HIC09IGVk
Z2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gZWRnZVZhbHVlTGVm
dFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAtPSBlZGdlVmFsdWVMZWZ0WzNdOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRP
ZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OwotICAg
ICAgICAgICAgICAgICAgICBzdW1SIC09IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAg
c3VtRyAtPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gc3JjUHRyWzJd
OwotICAgICAgICAgICAgICAgICAgICBzdW1BIC09IHNyY1B0clszXTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPj0gZWZmZWN0V2lkdGgpIHsK
LSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKLSAgICAgICAg
ICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVSaWdodFsxXTsKLSAgICAgICAgICAgICAgICAg
ICAgc3VtQiArPSBlZGdlVmFsdWVSaWdodFsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAr
PSBlZGdlVmFsdWVSaWdodFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4Umln
aHQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9
IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQ
dHJbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gc3JjUHRyWzFdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1CICs9IHNyY1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAr
PSBzcmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFu
Qmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5
JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5l
bFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKLXsK
LSAgICBpZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoZWZmZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkg
ewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgotICAgIGlmIChrZXJu
ZWxTaXplICUgMiAhPSAxKQotICAgICAgICBrZXJuZWxTaXplICs9IDE7Ci0KLSAgICB2SW1hZ2Vf
QnVmZmVyIGVmZmVjdEluQnVmZmVyOwotICAgIGVmZmVjdEluQnVmZmVyLmRhdGEgPSBzdGF0aWNf
Y2FzdDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKLSAgICBlZmZlY3RJbkJ1ZmZlci53aWR0aCA9
IGVmZmVjdFdpZHRoOwotICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsK
LSAgICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKLQotICAgIHZJbWFnZV9CdWZm
ZXIgZWZmZWN0T3V0QnVmZmVyOwotICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZl
ci5kYXRhKCk7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7Ci0gICAg
ZWZmZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKLSAgICBlZmZlY3RPdXRCdWZm
ZXIucm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYSB0
ZW1wb3JhcnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdpdGggYSBzcGVj
aWFsIGZsYWcuIHZJbWFnZSB3aWxsIHJldHVybgotICAgIC8vIHRoZSBzaXplIG5lZWRlZCwgb3Ig
YW4gZXJyb3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgotICAgIHNpemVfdCB0bXBCdWZmZXJT
aXplID0gdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0
T3V0QnVmZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRn
ZUV4dGVuZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7Ci0gICAgaWYgKHRtcEJ1ZmZlclNp
emUgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdm9pZCogdG1wQnVmZmVyID0gZmFzdE1h
bGxvYyh0bXBCdWZmZXJTaXplKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZm
ZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6
ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIHZJbWFnZUJveENvbnZv
bHZlX0FSR0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwgdG1wQnVmZmVy
LCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0g
ICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0
QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1h
Z2VFZGdlRXh0ZW5kKTsKLSAgICBmYXN0RnJlZSh0bXBCdWZmZXIpOwotCi0gICAgLy8gVGhlIGZp
bmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgotICAgIEFTU0VSVChpb0J1
ZmZlci5sZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmxlbmd0aCgpKTsKLSAgICBtZW1jcHkoaW9CdWZm
ZXIuZGF0YSgpLCB0ZW1wQnVmZmVyLmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOwotfQotI2Vu
ZGlmCi0KLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVy
VW5hY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6
ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBpbnQgZHhMZWZ0ID0gMDsKLSAgICBpbnQgZHhS
aWdodCA9IDA7Ci0gICAgaW50IGR5TGVmdCA9IDA7Ci0gICAgaW50IGR5UmlnaHQgPSAwOwotICAg
IAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBmcm9tQnVmZmVyID0gJmlvQnVmZmVyOwotICAgIFVp
bnQ4Q2xhbXBlZEFycmF5KiB0b0J1ZmZlciA9ICZ0ZW1wQnVmZmVyOwotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7Ci0gICAgICAg
ICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0KTsKLSNp
ZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFn
ZSkKLSAgICAgICAgICAgICAgICBib3hCbHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBr
ZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgp
LCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhS
aWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCB0
cnVlLCBlZGdlTW9kZSk7Ci0jZWxzZQotICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwg
KnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50
U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUp
OwotI2VuZGlmCi0gICAgICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtlcm5lbFNpemVZKSB7Ci0gICAgICAgICAgICBrZXJu
ZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0KTsKLSNpZiBIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKLSAgICAg
ICAgICAgICAgICBib3hCbHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXpl
WSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRT
aXplLndpZHRoKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJveEJsdXIo
KmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3Ry
aWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCB0cnVlLCBlZGdl
TW9kZSk7Ci0jZWxzZQotICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVy
LCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWln
aHQoKSwgcGFpbnRTaXplLndpZHRoKCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOwotI2VuZGlm
Ci0gICAgICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlv
QnVmZmVyLgotICAgIGlmICgmaW9CdWZmZXIgIT0gZnJvbUJ1ZmZlcikgewotICAgICAgICBBU1NF
UlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gZnJvbUJ1ZmZlci0+bGVuZ3RoKCkpOwotICAgICAgICBt
ZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCBmcm9tQnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0
aCgpKTsKLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBs
aWVyOjpib3hCbHVyR2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xh
bXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQg
a2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0
aCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5l
bFNpemVZICYmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IGVkZ2VNb2RlID09IEVER0VN
T0RFX0RVUExJQ0FURSkpIHsKLSAgICAgICAgYm94Qmx1ckFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0
bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFp
bnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
Ym94Qmx1clVuYWNjZWxlcmF0ZWQoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVY
LCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUp
OwotfQotCi0jaWYgIVVTRShBQ0NFTEVSQVRFKQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJT
b2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQotewotICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndpZHRoLCBwYXJhbWV0ZXJz
LT5oZWlnaHQpOwotICAgIGJveEJsdXJHZW5lcmljKCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXks
ICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFy
YW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSwgcGFyYW1ldGVycy0+aXNBbHBoYUltYWdl
LCBwYXJhbWV0ZXJzLT5lZGdlTW9kZSk7Ci19Ci0jZW5kaWYKLQotaW5saW5lIHZvaWQgRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2Vy
bmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wg
aXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0jaWYgIVVTRShBQ0NFTEVS
QVRFKQotICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKLSAgICBpbnQg
ZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBk
YXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0gICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIg
PSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKG1pbmltYWxSZWN0
RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7Ci0KLSAgICBpZiAo
b3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFy
YW1ldGVycz4gcGFyYWxsZWxKb2JzKCZib3hCbHVyV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVy
KTsKLQotICAgICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAg
ICAgICAgaWYgKGpvYnMgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8g
ImJsb2NrSGVpZ2h0Ii1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0
byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIGJsb2NrSGVpZ2h0ICog
am9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWlu
ZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGNvbnN0IGludCBibG9ja0hlaWdodCA9
IHBhaW50U2l6ZS5oZWlnaHQoKSAvIGpvYnM7Ci0gICAgICAgICAgICBjb25zdCBpbnQgam9ic1dp
dGhFeHRyYSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAlIGpvYnM7Ci0KLSAgICAgICAgICAgIGludCBj
dXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSAwOyBqb2IgPCBqb2JzOyBq
b2IrKykgewotICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxs
ZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotCi0gICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFq
b2IgPyAwIDogY3VycmVudFkgLSBleHRyYUhlaWdodDsKLSAgICAgICAgICAgICAgICBjdXJyZW50
WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7
Ci0gICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50WSA6
IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7Ci0KLSAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXpl
ID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgaWYgKCFqb2Ip
IHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZlcjsK
LSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxBcnJh
eTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXMu
aW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxv
Y2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBVaW50
OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOwotICAgICAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZlci5k
YXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBwYXJhbXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKLSAg
ICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMua2VybmVsU2l6ZVggPSBrZXJuZWxTaXplWDsKLSAgICAgICAgICAgICAgICBw
YXJhbXMua2VybmVsU2l6ZVkgPSBrZXJuZWxTaXplWTsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
aXNBbHBoYUltYWdlID0gaXNBbHBoYUltYWdlOwotICAgICAgICAgICAgICAgIHBhcmFtcy5lZGdl
TW9kZSA9IGVkZ2VNb2RlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOwotCi0gICAgICAgICAgICAvLyBDb3B5IHRvZ2V0aGVyIHRoZSBwYXJ0cyBv
ZiB0aGUgaW1hZ2UuCi0gICAgICAgICAgICBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3Ig
KGludCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIEFwcGx5
UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAg
ICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0
aW9uT2Zmc2V0OwotICAgICAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgICAgIGlu
dCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0
ICsgMSA6IGJsb2NrSGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRqdXN0
ZWRCbG9ja0hlaWdodDsKLSAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhlaWdo
dCAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVu
dFkgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdo
dCAqIHNjYW5saW5lOwotCi0gICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSAr
IGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VP
ZmZzZXQsIHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgotICAgIH0K
LSNlbmRpZgotCi0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhh
cHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICBib3hCbHVyR2VuZXJpYyhp
b0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNp
emUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOwotfQotCi1ib29sIEZFR2F1c3NpYW5CbHVyU29m
dHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1f
ZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2Uo
KSk7Ci0KLSAgICBhdXRvIGVmZmVjdERyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+
Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3
aW5nUmVjdCk7Ci0gICAgaWYgKCFtX2VmZmVjdC5zdGREZXZpYXRpb25YKCkgJiYgIW1fZWZmZWN0
LnN0ZERldmlhdGlvblkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvIGtlcm5l
bFNpemUgPSBtX2VmZmVjdC5jYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX2VmZmVjdC5z
dGREZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKLQotICAgIEludFNp
emUgcGFpbnRTaXplID0gbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAg
YXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChwYWludFNpemUuYXJlYSgpICogNCk7Ci0gICAgaWYgKCF0bXBJbWFnZURhdGEpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhcHBseVBsYXRmb3JtKGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxT
aXplLmhlaWdodCgpLCBwYWludFNpemUsIG1fZWZmZWN0LmlzQWxwaGFJbWFnZSgpLCBtX2VmZmVj
dC5lZGdlTW9kZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBGRUdhdXNzaWFuQmx1
cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJl
dHVybiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBp
bnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggNjVhYTZlMTg4OTdmYThjYzk3
NjlkMWU1NTdkN2QyNmY1ZTVjYTIyMi4uOTA4MjI2NDM0YTA5YWQ0MzM0OTZjOWRhMWVkYWI3YzQ4
ODMyMWMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggMWFkYzBmMzczYTQ2MGRm
YmQyYWNiZmI5MDIwODUzZGFjY2I0NTYzYi4uY2NkZTZlYjgyZTM3YzJlM2I3YmYzMmI3Njk0Nzlh
YmVjN2ViMjZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICogQ29weXJpZ2h0IChDKSAyMDEw
IFpvbHRhbiBIZXJjemVnCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTIgKzI4LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKLSNpbmNsdWRlICJDb2xvckNv
bnZlcnNpb24uaCIKLSNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgotI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdEFwcGxpZXIuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgIkZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04
Niw1MDcgKzgxLDYgQEAgYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gRklYTUU6IE1v
dmUgdGhlIGNsYXNzIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNl
IGFuZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyIDogcHVi
bGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUxpZ2h0aW5nPiB7Ci0gICAgdXNpbmcg
QmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUxpZ2h0aW5nPjsKLQotcHVibGlj
OgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBjUGl4ZWxTaXplID0gNDsKLSAgICBzdGF0
aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsKLSAgICBzdGF0aWMgY29u
c3RleHByIHVpbnQ4X3QgY09wYXF1ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7
Ci0KLSAgICAvLyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUgbm9ybWFsIGNvZWZmaWNpZW50cyBjb21l
IGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5o
dG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC4KLSAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0
IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOwotICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0Zh
Y3RvcjFkaXYzID0gLTEgLyAzLmY7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9y
MWRpdjQgPSAtMSAvIDQuZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IyZGl2
MyA9IC0yIC8gMy5mOwotCi0gICAgc3RydWN0IEFscGhhV2luZG93IHsKLSAgICAgICAgdWludDhf
dCBhbHBoYVszXVszXSB7IH07Ci0gICAgCi0gICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMg
YXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgotICAgICAgICB1
aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsg
fQotICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBh
bHBoYVsxXVswXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAg
ICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4X3QgdG9wKCkgY29uc3Qg
ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3Qg
Y2VudGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9Ci0gICAg
ICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJd
WzFdOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBh
bHBoYVswXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFs
dWUpICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRv
bSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KLQotICAgICAg
ICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFs
dWU7IH0KLSAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBo
YVsxXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2
YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIHNo
aWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFscGhhWzBd
ID0gYWxwaGFbMV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOwotICAgICAgICB9
Ci0gICAgCi0gICAgICAgIHZvaWQgc2hpZnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGlm
dFJvdyhhbHBoYVswXSk7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7Ci0gICAgICAg
ICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0
IExpZ2h0aW5nRGF0YSB7Ci0gICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkg
cmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0YQotICAgICAgICBGRUxpZ2h0aW5nKiBlZmZlY3Q7Ci0g
ICAgICAgIEZpbHRlckVmZmVjdDo6VHlwZSBmaWx0ZXJUeXBlOwotICAgICAgICBDb2xvciBsaWdo
dGluZ0NvbG9yOwotICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7Ci0gICAgICAgIGZsb2F0IGRp
ZmZ1c2VDb25zdGFudDsKLSAgICAgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudDsKLSAgICAgICAg
ZmxvYXQgc3BlY3VsYXJFeHBvbmVudDsKLSAgICAgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0
U291cmNlOwotICAgICAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UqIG9wZXJhdGluZ0Nv
bG9yU3BhY2U7Ci0KLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKLSAgICAgICAg
aW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAg
ICAgIGludCBoZWlnaHQ7Ci0KLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3Jt
YWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNp
emUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJ
bnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGlu
ZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5s
aW5lIEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgfTsK
LQotICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgewotICAgICAgICBMaWdodGluZ0RhdGEgZGF0
YTsKLSAgICAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAg
ICAgIGludCB5U3RhcnQ7Ci0gICAgICAgIGludCB5RW5kOwotICAgIH07Ci0KLSAgICBzdGF0aWMg
dm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNv
bnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3Rv
clgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKTsK
LSAgICBzdGF0aWMgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEm
LCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBm
YWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKTsKLQotICAgIHN0
YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiwg
Y29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCBzdGFydFksIGludCBlbmRZKTsK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcihBcHBseVBhcmFtZXRl
cnMqKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBMaWdodGlu
Z0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlQbGF0Zm9ybShjb25zdCBMaWdodGluZ0RhdGEmKTsKLX07Ci0KLWlubGluZSBJbnRT
aXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJp
Z2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC0yICogY2VudGVyICsgMiAq
IHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogY2VudGVyIC0gcmln
aHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6
ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0g
ICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b21M
ZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBi
b3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLTIg
KiBsZWZ0ICsgMiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAotICAgICAgICAt
bGVmdCAtIDIgKiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tICsgYm90
dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVB
cHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17
Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0
b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJl
dHVybiB7Ci0gICAgICAgIC0yICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21MZWZ0ICsgYm90
dG9tLAotICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRv
bQotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAg
IGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSAy
ICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAg
ICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBib3R0b20gKyBi
b3R0b21SaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBib3R0b20gKyBi
b3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFX
aW5kb3cmIGFscGhhV2luZG93KSBjb25zdAotewotICAgIGludCByaWdodEFscGhhT2Zmc2V0ID0g
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQ7Ci0gICAgCi0gICAgaW50
IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBoYU9mZnNldCkp
OwotICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0
QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwotICAgIGludCBib3R0
b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQg
KyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwotCi0gICAgaW50IGxlZnQgPSBhbHBoYVdp
bmRvdy5sZWZ0KCk7Ci0gICAgaW50IHRvcExlZnQgPSBhbHBoYVdpbmRvdy50b3BMZWZ0KCk7Ci0g
ICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRvcCgpOwotCi0gICAgaW50IGJvdHRvbUxlZnQgPSBh
bHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7Ci0gICAgaW50IGJvdHRvbSA9IGFscGhhV2luZG93LmJv
dHRvbSgpOwotCi0gICAgLy8gVGhlIGFscGhhV2luZG93IGhhcyBiZWVuIHNoaWZ0ZWQsIGFuZCBo
ZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4KLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsw
XVsyXSA9IHRvcFJpZ2h0OwotICAgIGFscGhhV2luZG93LmFscGhhWzFdWzJdID0gcmlnaHQ7Ci0g
ICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0b21SaWdodDsKLSAgICAKLSAgICAvLyBD
aGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBpcyB3b3JraW5nIHdpdGggc29tZSBzcG90LWNoZWNr
cy4KLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVmdCgpID09IHBpeGVscy0+aXRlbShvZmZz
ZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKLSAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wKCkgPT0g
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKLQotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0
ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21S
aWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBib3R0b21MZWZ0
ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUg
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRv
cCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwot
ICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAqIGxlZnQgKyAy
ICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLXRvcExlZnQgLSAyICog
dG9wICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6
ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBy
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICog
Y2VudGVyICsgMiAqIHJpZ2h0LAotICAgICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0ICsgMiAqIGNl
bnRlciArIHJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29u
c3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICog
bGVmdCArIDIgKiByaWdodCwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQg
KyBsZWZ0ICsgMiAqIGNlbnRlciArIHJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUg
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
LSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZTsKLSAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRv
cCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0
ICsgMiAqIGNlbnRlciwKLSAgICAgICAgLXRvcExlZnQgLSAyICogdG9wICsgbGVmdCArIDIgKiBj
ZW50ZXIKLSAgICB9OwotfQotCi12b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OnNldFBp
eGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBM
aWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxv
YXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvciwgZmxvYXQg
YWxwaGEpCi17Ci0gICAgZmxvYXQgeiA9IGFscGhhICogZGF0YS5zdXJmYWNlU2NhbGU7Ci0gICAg
TGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0aW5nRGF0YSA9IGRhdGEubGln
aHRTb3VyY2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWludGluZ0RhdGEsIHgsIHksIHop
OwotCi0gICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKLSAgICBpZiAobm9ybWFsMkRWZWN0b3IuaXNa
ZXJvKCkpIHsKLSAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAoMCwgMCwgMSkuIFRoaXMgaXMg
YSBxdWl0ZSBmcmVxdWVudCBjYXNlLgotICAgICAgICBpZiAoZGF0YS5lZmZlY3QtPmZpbHRlclR5
cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAg
ICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogbGlnaHRpbmdEYXRhLmxp
Z2h0VmVjdG9yLnooKSAvIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAg
ICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAg
IGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci55KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdE
YXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAg
ICAgICAgICAgfTsKLSAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxm
d2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVu
dCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29u
c3RhbnQgKiBoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJD
b25zdGFudCAqIHBvd2YoaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBk
YXRhLnNwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
RmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvciA9IHsKLSAgICAgICAgICAgIGZhY3RvclggKiBub3Jt
YWwyRFZlY3Rvci53aWR0aCgpICogZGF0YS5zdXJmYWNlU2NhbGUsCi0gICAgICAgICAgICBmYWN0
b3JZICogbm9ybWFsMkRWZWN0b3IuaGVpZ2h0KCkgKiBkYXRhLnN1cmZhY2VTY2FsZSwKLSAgICAg
ICAgICAgIDEuMGYKLSAgICAgICAgfTsKLSAgICAgICAgZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3Ro
ID0gbm9ybWFsVmVjdG9yLmxlbmd0aCgpOwotCi0gICAgICAgIGlmIChkYXRhLmVmZmVjdC0+Zmls
dGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCi0gICAg
ICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5kaWZmdXNlQ29uc3RhbnQgKiAobm9ybWFsVmVj
dG9yICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBs
aWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewotICAgICAgICAgICAgICAgIGxpZ2h0
aW5nRGF0YS5saWdodFZlY3Rvci54KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxp
Z2h0VmVjdG9yLnkoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3Iu
eigpICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCi0gICAgICAgICAgICB9OwotICAg
ICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0b3IubGVuZ3Ro
KCk7Ci0gICAgICAgICAgICBpZiAoZGF0YS5zcGVjdWxhckV4cG9uZW50ID09IDEpCi0gICAgICAg
ICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIChub3JtYWxW
ZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVj
dG9yTGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVu
Z3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogcG93Zigobm9ybWFsVmVjdG9yICogaGFsZndh
eVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCksIGRh
dGEuc3BlY3VsYXJFeHBvbmVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGlnaHRT
dHJlbmd0aCA+IDEpCi0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxOwotICAgIGlmIChsaWdodFN0
cmVuZ3RoIDwgMCkKLSAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDA7Ci0KLSAgICB1aW50OF90IHBp
eGVsVmFsdWVbM10gPSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5n
dGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueCgpICogMjU1LjBmKSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rv
ci55KCkgKiAyNTUuMGYpLAotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVu
Z3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLnooKSAqIDI1NS4wZikKLSAgICB9OwotICAg
IAotICAgIGRhdGEucGl4ZWxzLT5zZXRSYW5nZShwaXhlbFZhbHVlLCAzLCBvZmZzZXQpOwotfQot
Ci12b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OnNldFBpeGVsKGludCBvZmZzZXQsIGNv
bnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rvclks
IEludFNpemUgbm9ybWFsMkRWZWN0b3IpCi17Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQs
IGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0
b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0K
LQotLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgcGl4
ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5kIHdyaXRl
cyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29u
c3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBp
bnQgZW5kWSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgc3RhcnRZIGlzID4gMCBzaW5jZSB3ZSByZWFk
IGZyb20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4KLSAgICBBU1NFUlQoc3RhcnRZKTsK
LSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5
IDwgZW5kWTsgKyt5KSB7Ci0gICAgICAgIGludCByb3dTdGFydE9mZnNldCA9IHkgKiBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQgcHJldmlvdXNSb3dTdGFydCA9
IHJvd1N0YXJ0T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAg
ICAgaW50IG5leHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLQotICAgICAgICAvLyBhbHBoYVdpbmRvdyBpcyBhIGxvY2FsIGNhY2hl
IG9mIGFscGhhIHZhbHVlcy4KLSAgICAgICAgLy8gRmlsbCB0aGUgdHdvIHJpZ2h0IGNvbHVtbnMg
cHV0dGluZyB0aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBjZW50ZXIgY29sdW1uLgotICAgICAg
ICAvLyBGb3IgZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0aGVuIGZpbGwgdGhl
IHJpZ2h0IGNvbHVtbi4KLSAgICAgICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5kb3c7Ci0gICAgICAg
IGFscGhhV2luZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3BSaWdodChk
YXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRvdy5zZXRDZW50ZXIoZGF0YS5waXhl
bHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgICAg
IGFscGhhV2luZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsg
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBhbHBoYVdpbmRv
dy5zZXRCb3R0b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRhLnBpeGVs
cy0+aXRlbShuZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotCi0gICAgICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemU7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9
IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIGFscGhhV2luZG93LnNoaWZ0KCk7Ci0gICAgICAg
ICAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCBj
RmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRlcmlvck5vcm1hbChvZmZzZXQsIGFs
cGhhV2luZG93KSwgYWxwaGFXaW5kb3cuY2VudGVyKCkpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljV29y
a2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKLXsKLSAgICBhcHBseVBsYXRmb3JtR2Vu
ZXJpY1BhaW50KHBhcmFtZXRlcnMtPmRhdGEsIHBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFy
YW1ldGVycy0+eVN0YXJ0LCBwYXJhbWV0ZXJzLT55RW5kKTsKLX0KLQotI2lmICEoQ1BVKEFSTV9O
RU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkp
Ci12b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNv
bnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhKQotewotICAgIHVuc2lnbmVkIHJvd3NUb1Byb2Nlc3MgPSBkYXRhLmhlaWdo
dCAtIDI7Ci0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJvd3NUb1Byb2Nlc3MgLyA4Owot
ICAgIAotICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbmltYWxSZWN0RGltZW5zaW9uID0gMTAw
ICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotICAgIHVu
c2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKChkYXRhLndp
ZHRoIC0gMikgKiByb3dzVG9Qcm9jZXNzKSAvIG1pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1U
aHJlYWRzKTsKLQotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICAv
LyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKLSAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFy
YW1ldGVycz4gcGFyYWxsZWxKb2JzKCZhcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlciwgb3B0aW1h
bFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0g
ICAgICAgIGludCBqb2IgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlm
IChqb2IgPiAxKSB7Ci0gICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInlTdGVwIi1z
aXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBs
YXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIHlTdGVwICogam9icyA8IHRvdGFsIHNpemUuIFRo
ZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4K
LSAgICAgICAgICAgIGNvbnN0IGludCB5U3RlcCA9IHJvd3NUb1Byb2Nlc3MgLyBqb2I7Ci0gICAg
ICAgICAgICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9IHJvd3NUb1Byb2Nlc3MgJSBqb2I7Ci0K
LSAgICAgICAgICAgIGludCB5U3RhcnQgPSAxOwotICAgICAgICAgICAgZm9yICgtLWpvYjsgam9i
ID49IDA7IC0tam9iKSB7Ci0gICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMg
PSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmRh
dGEgPSBkYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSBwYWludGlu
Z0RhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFydDsKLSAgICAgICAg
ICAgICAgICB5U3RhcnQgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IHlTdGVwICsgMSA6IHlTdGVw
OwotICAgICAgICAgICAgICAgIHBhcmFtcy55RW5kID0geVN0YXJ0OwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4K
LSAgICB9Ci0KLSAgICBhcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0
YSwgMSwgZGF0YS5oZWlnaHQgLSAxKTsKLX0KLSNlbmRpZgotCi12b2lkIEZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhKQotewot
ICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotCi0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBkYXRhLmxpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9y
U3BhY2UoKmRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0gICAgcGFpbnRpbmdEYXRhLmluaXRp
YWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywgYik7Ci0KLSAg
ICBkYXRhLmxpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCpkYXRhLmVmZmVjdCwgcGFpbnRp
bmdEYXRhKTsKLQotICAgIC8vIFRvcCBsZWZ0LgotICAgIGludCBvZmZzZXQgPSAwOwotICAgIHNl
dFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCAwLCBjRmFjdG9yMmRpdjMsIGNG
YWN0b3IyZGl2MywgZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gVG9wIHJp
Z2h0LgotICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4
ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndp
ZHRoIC0gMSwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wUmlnaHROb3Jt
YWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gbGVmdC4KLSAgICBvZmZzZXQgPSAoZGF0YS5o
ZWlnaHQgLSAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgc2V0UGl4
ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0IC0gMSwgY0ZhY3Rv
cjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKLQot
ICAgIC8vIEJvdHRvbSByaWdodC4KLSAgICBvZmZzZXQgPSBkYXRhLmhlaWdodCAqIGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoIC0gMSwgZGF0YS5oZWlnaHQgLSAxLCBj
RmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZzZXQp
KTsKLQotICAgIGlmIChkYXRhLndpZHRoID49IDMpIHsKLSAgICAgICAgLy8gVG9wIHJvdy4KLSAg
ICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBk
YXRhLndpZHRoIC0gMTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNl
dFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCAwLCBjRmFjdG9yMWRpdjMsIGNG
YWN0b3IxZGl2MiwgZGF0YS50b3BSb3dOb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAgLy8gQm90
dG9tIHJvdy4KLSAgICAgICAgb2Zmc2V0ID0gKGRhdGEuaGVpZ2h0IC0gMSkgKiBkYXRhLndpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9
IDE7IHggPCBkYXRhLndpZHRoIC0gMTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAg
ICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdo
dCAtIDEsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRhLmJvdHRvbVJvd05vcm1hbChv
ZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAoZGF0YS5oZWlnaHQgPj0gMykgewotICAgICAgICAv
LyBMZWZ0IGNvbHVtbi4KLSAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodCAtIDE7ICsr
eSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCi0gICAgICAgICAg
ICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYy
LCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQpKTsKLQotICAgICAg
ICAvLyBSaWdodCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IDIgKiBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkg
PCBkYXRhLmhlaWdodCAtIDE7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0
YSwgZGF0YS53aWR0aCAtIDEsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJp
Z2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwotICAgIH0KLQotICAgIGlmIChkYXRhLndpZHRoID49
IDMgJiYgZGF0YS5oZWlnaHQgPj0gMykgewotICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCi0g
ICAgICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0gICAgfQot
Ci0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKiBk
YXRhLmhlaWdodDsKLSAgICBpZiAoZGF0YS5lZmZlY3QtPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBj
QWxwaGFDaGFubmVsT2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCi0gICAg
ICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkg
ewotICAgICAgICAgICAgdWludDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVtKGkpOwotICAgICAg
ICAgICAgdWludDhfdCBhMiA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsKLSAgICAgICAgICAg
IHVpbnQ4X3QgYTMgPSBkYXRhLnBpeGVscy0+aXRlbShpICsgMik7Ci0gICAgICAgICAgICAvLyBh
bHBoYSBzZXQgdG8gc2V0IHRvIG1heChhMSwgYTIsIGEzKQotICAgICAgICAgICAgZGF0YS5waXhl
bHMtPnNldChpICsgMywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBh
MyA/IGEyIDogYTMpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cykKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Rz
WzBdLmdldCgpOwotCi0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3Qu
cGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLT5kYXRhKCk7Ci0KLSAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwotCi0g
ICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQaXhl
bEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3Qp
OwotCi0gICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAo
MSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKLSAgICAvLyBzdGFuZGFyZCBoYXMg
bm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkg
aGFzIHN0cmFuZ2UKLSAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMs
IGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgotICAgIC8vIEFueXdheSwgZmVD
b252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCi0KLSAgICBJ
bnRTaXplIHNpemUgPSBJbnRTaXplKG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBi
b3RoKSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlz
IGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAoc2l6ZS53aWR0aCgp
IDw9IDIgfHwgc2l6ZS5oZWlnaHQoKSA8PSAyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IExpZ2h0aW5nRGF0YSBkYXRhOwotICAgIGRhdGEuZWZmZWN0ID0gJm1fZWZmZWN0OwotICAgIGRh
dGEuZmlsdGVyVHlwZSA9IG1fZWZmZWN0LmZpbHRlclR5cGUoKTsKLSAgICBkYXRhLmxpZ2h0aW5n
Q29sb3IgPSBtX2VmZmVjdC5saWdodGluZ0NvbG9yKCk7Ci0gICAgZGF0YS5zdXJmYWNlU2NhbGUg
PSBtX2VmZmVjdC5zdXJmYWNlU2NhbGUoKSAvIDI1NS4wZjsKLSAgICBkYXRhLmRpZmZ1c2VDb25z
dGFudCA9IG1fZWZmZWN0LmRpZmZ1c2VDb25zdGFudCgpOwotICAgIGRhdGEuc3BlY3VsYXJDb25z
dGFudCA9IG1fZWZmZWN0LnNwZWN1bGFyQ29uc3RhbnQoKTsKLSAgICBkYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSBtX2VmZmVjdC5zcGVjdWxhckV4cG9uZW50KCk7Ci0gICAgZGF0YS5saWdodFNvdXJj
ZSA9ICZtX2VmZmVjdC5saWdodFNvdXJjZSgpOwotICAgIGRhdGEub3BlcmF0aW5nQ29sb3JTcGFj
ZSA9ICZtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCk7Ci0KLSAgICBkYXRhLnBpeGVscyA9
ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSA9IHNpemUud2lkdGgoKSAqIGNQaXhlbFNpemU7Ci0gICAgZGF0YS53aWR0aCA9IHNpemUu
d2lkdGgoKTsKLSAgICBkYXRhLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0KLSAgICBhcHBseVBs
YXRmb3JtKGRhdGEpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4g
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVj
dHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5oCmluZGV4IGE4NGZlODVhMzgxZmE4NDA3NWU1MTY1NGNjMmMwYzViYjhj
MWFiMmYuLjMxMTg5YTQwYTYwNWEwNWNjYTBiODEwZWNhOTJiM2ExMWZkOTRlOTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggNzZhNzQ2NGYwMGU2ZDM3MDhlZTk0
ZGNhY2Q5NmY2MWY3YWNhNmJlNi4uM2YzNjIxYzA4NDdjYmEzYTVmOTAxYzk3NTZlZDQ0ODc2Njgy
NWMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgQXBwbGUgSW5jLiAyMDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIyLDkgKzIzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGRU1lcmdlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRl
ICJGRU1lcmdlU29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwzNiArMzgsNiBAQCBGRU1lcmdlOjpG
RU1lcmdlKCkKIHsKIH0KIAotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFTWVyZ2VTb2Z0d2Fy
ZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBGRU1l
cmdlU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RU1lcmdlPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RU1lcmdlPjsKLQotcHVibGljOgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KSBvdmVycmlkZTsKLX07Ci0KLWJvb2wgRkVNZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0g
ICAgQVNTRVJUKGlucHV0RWZmZWN0cy5zaXplKCkgPiAwKTsKLQotICAgIGF1dG8gcmVzdWx0SW1h
Z2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2Up
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOwotCi0gICAgZm9yIChhdXRvJiBpbiA6IGlucHV0RWZmZWN0cykg
ewotICAgICAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
ICAgIGlmICghaW5CdWZmZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBGRU1lcmdlU29mdHdhcmVBcHBsaWVyKCp0
aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKaW5kZXggODg3YmEwZmQzM2Y4
OTMyY2JmNDMzODI2OGU3YWFhNDhhZmEyZjA0MS4uODQ2YjE1Y2ZiYWJhMjI5ZWNmNWUyZjE0MGY5
ODdkODM2OTE3NDY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IGQ5NDUxODE1NjhmMGE2ZTdmMGI1
N2I1MzljNTM5NDkyMWQ3ODE2NzIuLjFhMjJiNTBhY2NkNjAzZTU2NzU1YWE2MWU2ZjA4MGY3NGVh
YmNjNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMTggQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTMgKzI1LDggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJGRU1vcnBob2xvZ3kuaCIKIAotI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50
cy5oIgotI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNp
bmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgIkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODQsMjA3ICs3OSw2IEBA
IHZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0
ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBh
aW50UmVjdCkpOwogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVNb3JwaG9sb2d5U29m
dHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3Mg
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRl
QXBwbGllcjxGRU1vcnBob2xvZ3k+IHsKLSAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29u
Y3JldGVBcHBsaWVyPEZFTW9ycGhvbG9neT47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpC
YXNlOwotCi0gICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgdXNpbmcgQ29s
dW1uRXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4sIDE2PjsKLQot
ICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHR5cGU7Ci0gICAgICAgIGludCByYWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICAg
ICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4
Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAg
IGludCBoZWlnaHQ7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgewotICAg
ICAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAgICAgaW50IHN0YXJ0
WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBpbmxpbmUgaW50IHBp
eGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0aCkgeyByZXR1cm4gKHkgKiB3aWR0
aCArIHgpICogNDsgfQotICAgIHN0YXRpYyBpbmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgbWFrZVBp
eGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiYgY29tcG9uZW50cykgeyByZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNv
bXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07IH0KLQotICAgIHN0YXRpYyBp
bmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9t
UGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkgeyByZXR1cm4gYXNDb2xvckNvbXBv
bmVudHMoYXNTUkdCQShwaXhlbCkpOyB9Ci0gICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIsIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUpOwotICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBp
bnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSk7Ci0gICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2Vy
bmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlKTsKLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IFBh
aW50aW5nRGF0YSYsIGludCBzdGFydFksIGludCBlbmRZKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVBsYXRmb3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyopOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5
UGxhdGZvcm0oY29uc3QgUGFpbnRpbmdEYXRhJik7Ci19OwotCi1pbmxpbmUgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgoY29u
c3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAo
dHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBwZXJD
b21wb25lbnRNaW4oYSwgYik7Ci0KLSAgICByZXR1cm4gcGVyQ29tcG9uZW50TWF4KGEsIGIpOwot
fQotCi1pbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3
YXJlQXBwbGllcjo6Y29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNv
bXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5k
ZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0pOwotCi0gICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7
IHkgPCB5RW5kOyArK3kpIHsKLSAgICAgICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVu
dHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwg
eSwgd2lkdGgpKSB9KTsKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heChleHRyZW11bSwgcGl4
ZWwsIHR5cGUpOwotICAgIH0KLSAgICByZXR1cm4gZXh0cmVtdW07Ci19Ci0KLWlubGluZSBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjprZXJu
ZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgdHlwZSkKLXsKLSAgICBhdXRvIGV4dHJlbXVtID0ga2VybmVsWzBdOwotICAgIGZvciAo
c2l6ZV90IGkgPSAxOyBpIDwga2VybmVsLnNpemUoKTsgKytpKQotICAgICAgICBleHRyZW11bSA9
IG1pbk9yTWF4KGV4dHJlbXVtLCBrZXJuZWxbaV0sIHR5cGUpOwotCi0gICAgcmV0dXJuIGV4dHJl
bXVtOwotfQotCi12b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGlu
dCBlbmRZKQotewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIGNvbnN0IGF1dG8m
IHNyY1BpeGVsQXJyYXkgPSAqcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXk7Ci0gICAgYXV0byYg
ZHN0UGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheTsKLQotICAgIGNvbnN0
IGludCByYWRpdXNYID0gcGFpbnRpbmdEYXRhLnJhZGl1c1g7Ci0gICAgY29uc3QgaW50IHJhZGl1
c1kgPSBwYWludGluZ0RhdGEucmFkaXVzWTsKLSAgICBjb25zdCBpbnQgd2lkdGggPSBwYWludGlu
Z0RhdGEud2lkdGg7Ci0gICAgY29uc3QgaW50IGhlaWdodCA9IHBhaW50aW5nRGF0YS5oZWlnaHQ7
Ci0KLSAgICBBU1NFUlQocmFkaXVzWCA8PSB3aWR0aCB8fCByYWRpdXNZIDw9IGhlaWdodCk7Ci0g
ICAgQVNTRVJUKHN0YXJ0WSA+PSAwICYmIGVuZFkgPD0gaGVpZ2h0ICYmIHN0YXJ0WSA8IGVuZFkp
OwotCi0gICAgQ29sdW1uRXh0cmVtYSBleHRyZW1hOwotICAgIGV4dHJlbWEucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSgyICogcmFkaXVzWCArIDEpOwotCi0gICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsg
eSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgeVJhZGl1c1N0YXJ0ID0gc3RkOjptYXgoMCwg
eSAtIHJhZGl1c1kpOwotICAgICAgICBpbnQgeVJhZGl1c0VuZCA9IHN0ZDo6bWluKGhlaWdodCwg
eSArIHJhZGl1c1kgKyAxKTsKLQotICAgICAgICBleHRyZW1hLnNocmluaygwKTsKLQotICAgICAg
ICAvLyBXZSBzdGFydCBhdCB0aGUgbGVmdCBlZGdlLCBzbyBjb21wdXRlIGV4dHJlbWUgZm9yIHRo
ZSByYWRpdXNYIGNvbHVtbnMuCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcmFkaXVzWDsg
Kyt4KQotICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxB
cnJheSwgeCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5
cGUpKTsKLQotICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0
IGNvbHVtbgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKLSAgICAg
ICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEu
YXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVz
U3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEudHlwZSkpOwotCi0gICAgICAg
ICAgICBpZiAoeCA+IHJhZGl1c1gpCi0gICAgICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7
Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lk
dGgpKTsKLSAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNv
bXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRpbmdEYXRhLnR5cGUpKS52YWx1
ZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbXMpCi17Ci0gICAg
YXBwbHlQbGF0Zm9ybUdlbmVyaWMoKnBhcmFtcy0+cGFpbnRpbmdEYXRhLCBwYXJhbXMtPnN0YXJ0
WSwgcGFyYW1zLT5lbmRZKTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5UGxhdGZvcm0oY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAg
Ly8gRW1waXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFz
b25hYmxlIGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KLSAgICBmbG9h
dCBrZXJuZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRh
LnJhZGl1c1kpICogMC42NTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW1hbEFyZWEgPSAo
MTYwICogMTYwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLSAg
ICAKLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIDg7
Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPigo
cGFpbnRpbmdEYXRhLndpZHRoICogcGFpbnRpbmdEYXRhLmhlaWdodCAqIGtlcm5lbEZhY3Rvcikg
LyBtaW5pbWFsQXJlYSwgbWF4TnVtVGhyZWFkcyk7Ci0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1i
ZXIgPiAxKSB7Ci0gICAgICAgIFBhcmFsbGVsSm9iczxBcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVs
Sm9icygmYXBwbHlQbGF0Zm9ybVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0gICAgICAg
IGF1dG8gbnVtT2ZUaHJlYWRzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAg
ICBpZiAobnVtT2ZUaHJlYWRzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBp
bnRvICJqb2JTaXplIi1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0
byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKLSAgICAgICAgICAgIC8vIGpvYlNpemUgKiBqb2Jz
IDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIg
ImpvYnNXaXRoRXh0cmEiLgotICAgICAgICAgICAgaW50IGpvYlNpemUgPSBwYWludGluZ0RhdGEu
aGVpZ2h0IC8gbnVtT2ZUaHJlYWRzOwotICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBw
YWludGluZ0RhdGEuaGVpZ2h0ICUgbnVtT2ZUaHJlYWRzOwotICAgICAgICAgICAgaW50IGN1cnJl
bnRZID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpv
YiA+PSAwOyAtLWpvYikgewotICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW0g
PSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW0uc3Rh
cnRZID0gY3VycmVudFk7Ci0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dp
dGhFeHRyYSA/IGpvYlNpemUgKyAxIDogam9iU2l6ZTsKLSAgICAgICAgICAgICAgICBwYXJhbS5l
bmRZID0gY3VycmVudFk7Ci0gICAgICAgICAgICAgICAgcGFyYW0ucGFpbnRpbmdEYXRhID0gJnBh
aW50aW5nRGF0YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVj
dXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gc2luZ2xlIHRocmVhZCBtb2RlbAotICAgIH0KLQotICAgIGFwcGx5UGxhdGZvcm1HZW5l
cmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7Ci19Ci0KLWJvb2wgRkVN
b3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGluLT5p
c0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBhdXRvIGlzRGVnZW5lcmF0ZSA9IFtdKGludCByYWRpdXNY
LCBpbnQgcmFkaXVzWSkgLT4gYm9vbCB7Ci0gICAgICAgIHJldHVybiByYWRpdXNYIDwgMCB8fCBy
YWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpOwotICAgIH07Ci0KLSAgICBJbnRS
ZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBp
eGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBJbnRTaXplIHJhZGl1cyA9
IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX2VmZmVjdC5yYWRpdXNYKCksIG1fZWZmZWN0LnJh
ZGl1c1koKSkpOwotCi0gICAgaWYgKGlzRGVnZW5lcmF0ZShyYWRpdXMud2lkdGgoKSwgcmFkaXVz
LmhlaWdodCgpKSkgewotICAgICAgICBpbi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3aW5nUmVjdCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZp
bHRlclNjYWxlKHsgbV9lZmZlY3QucmFkaXVzWCgpLCBtX2VmZmVjdC5yYWRpdXNZKCkgfSkpOwot
ICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEs
IHJhZGl1cy53aWR0aCgpKTsKLSAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdp
bmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKLQotICAgIGlmIChpc0RlZ2Vu
ZXJhdGUocmFkaXVzWCwgcmFkaXVzWSkpIHsKLSAgICAgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJl
c3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhdXRvIHNvdXJjZVBpeGVsQnVmZmVyID0gaW4t
PmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwot
ICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgcGFpbnRpbmdEYXRh
LnR5cGUgPSBtX2VmZmVjdC5tb3JwaG9sb2d5T3BlcmF0b3IoKTsKLSAgICBwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheSA9ICZzb3VyY2VQaXhlbEFycmF5OwotICAgIHBhaW50aW5nRGF0YS5kc3RQ
aXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICBwYWludGluZ0RhdGEud2lk
dGggPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpKTsKLSAgICBwYWludGluZ0RhdGEu
aGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkpOwotICAgIHBhaW50aW5n
RGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kg
PSBjZWlsZihyYWRpdXNZKTsKLQotICAgIGFwcGx5UGxhdGZvcm0ocGFpbnRpbmdEYXRhKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4gRkVNb3JwaG9sb2d5U29m
dHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKQEAgLTI5
MywxMyArODcsMTMgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQogewogICAgIHN3
aXRjaCAodHlwZSkgewotICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV046Cisg
ICAgY2FzZSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpVbmtub3duOgogICAgICAgICB0cyA8PCAi
VU5LTk9XTiI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFOgorICAgIGNhc2UgTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6RXJvZGU6CiAgICAgICAg
IHRzIDw8ICJFUk9ERSI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVNT1JQSE9MT0dZX09Q
RVJBVE9SX0RJTEFURToKKyAgICBjYXNlIE1vcnBob2xvZ3lPcGVyYXRvclR5cGU6OkRpbGF0ZToK
ICAgICAgICAgdHMgPDwgIkRJTEFURSI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5oCmluZGV4IDU4OTUwMmE2ZjViYzZkMjBiOGUxOWVhOWZmNTdjYTc4OTI1ZDgyNjQuLjcxOTM5
OThmODllNDc5ZWJhOGUwYTMwNzQyZDY4OTZkYTE5MTMxNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAt
Miw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4g
MjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwxMCAr
MjYsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgewotICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOID0gMCwKLSAgICBGRU1P
UlBIT0xPR1lfT1BFUkFUT1JfRVJPREUgPSAxLAotICAgIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9E
SUxBVEUgPSAyCitlbnVtIGNsYXNzIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgeworICAgIFVua25v
d24sCisgICAgRXJvZGUsCisgICAgRGlsYXRlCiB9OwogCiBjbGFzcyBGRU1vcnBob2xvZ3kgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKaW5kZXggMWRhOTI3NzBlNmMyZDI2NWExZmU4
NTcxNzhiNWU4ZTdmNTYzNmE1NC4uNTJjOWI5YzNiZThmMmJiODE3YzUxMzE1OTI4MzM5YTNkMTlm
OGQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNSw5ICsyNiw3IEBACiAjaW5jbHVkZSAiRkVPZmZzZXQuaCIKIAogI2luY2x1ZGUg
IkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkZF
T2Zmc2V0U29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02NSwzNCArNjQsNiBAQCB2b2lkIEZFT2Zmc2V0
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi0v
LyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJh
dGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBGRU9mZnNldFNvZnR3YXJlQXBwbGll
ciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVPZmZzZXQ+IHsKLSAgICB1
c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFT2Zmc2V0PjsKLQotcHVi
bGljOgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKLX07
Ci0KLWJvb2wgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmls
dGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKLXsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwotCi0gICAgYXV0byByZXN1bHRJ
bWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgYXV0byBpbkJ1ZmZlciA9
IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVm
ZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1h
Z2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKLQotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0g
bV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsg
bV9lZmZlY3QuZHgoKSwgbV9lZmZlY3QuZHkoKSB9KSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRl
eHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCiBib29sIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgcmV0dXJuIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVy
KCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAppbmRleCAxNmY2MGU5
NmI0MjM4NzNhMzQxYzJmMjY0NWE4MDI2OWNhODdjZjU3Li43ZmZjNTUyMzU1ZWMyMmVjMGQ1MWYy
M2JhMDg4ODA2NTBlZWFjMzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKaW5kZXgg
N2ZiZmQ4MWE2MDhiNjVkZDcxMTc0YTNiNjMxZDNhNDMzNGVlZjg2ZC4uZmM1NjA2YmI1NDZlNDk0
YTk3YTM1MWFhMTVlNTU4MzY5YTg3ODRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1
bGFyTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmgKaW5kZXggYWM0NTBkYmRiNjBjZDY5N2NkOGRmYzNjNzkzMThk
YmY2NGFkNTMzNS4uNWM3ZTgxY2UzMDQ3MjFhZTgxYjE0MzY0NGI3NjM4OWI3MzE5OTMzZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1
bGFyTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggNDM5MDQ4ZjViZDFlMTk3NTdkOTE3ZmFiMjVm
ZGE3MzZiMTdkNTc3Ni4uMjQ5Y2I4NzJlN2ExOTgyNzM1NDU4YjZjYjM1NGJmNDYxODYwMGQxMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBN
YXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMSwxNCArMjIsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFVGlsZS5o
IgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0j
aW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorI2luY2x1ZGUgIkZFVGlsZVNvZnR3YXJl
QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVBc1Rl
eHQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Myw2MSArMzgsNiBA
QCBGRVRpbGU6OkZFVGlsZSgpCiB7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRVRp
bGVTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1j
bGFzcyBGRVRpbGVTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVB
cHBsaWVyPEZFVGlsZT4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8RkVUaWxlPjsKLQotcHVibGljOgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBi
b29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKSBvdmVycmlkZTsKLX07Ci0KLWJvb2wgRkVUaWxlU29mdHdhcmVBcHBsaWVyOjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsK
LQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJl
c3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9l
ZmZlY3Quc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICAvLyBTb3Vy
Y2UgaW5wdXQgbmVlZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmls
dGVyUmVnaW9uIGJ1dCBnaXZlcyB0aGUKLSAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNl
SW1hZ2UgYmFjay4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6
YXRpb24uCi0gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKLSAg
ICBGbG9hdFBvaW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwot
ICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtX2VmZmVjdC5tYXhFZmZlY3RSZWN0
KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OlNvdXJjZUdyYXBoaWMgfHwgaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OlNvdXJjZUFscGhhKSB7Ci0gICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJl
Z2lvbigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgfQotCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBpZiAoIXRpbGVJbWFnZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0
ID0gdGlsZUltYWdlLT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUo
LWluTWF4RWZmZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOwotICAg
IHRpbGVJbWFnZUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkubG9jYXRpb24oKSk7Ci0KLSAgICBhdXRvIHRpbGVJbWFnZUNvcHkgPSBJbWFn
ZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKHRpbGVJbWFnZSkpOwotICAgIGlm
ICghdGlsZUltYWdlQ29weSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQWZmaW5lVHJh
bnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUo
aW5NYXhFZmZlY3RMb2NhdGlvbiAtIG1heEVmZmVjdExvY2F0aW9uKTsKLQotICAgIGF1dG8gcGF0
dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsg
dHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4
dC5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBGRVRpbGU6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4gRkVU
aWxlU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5o
CmluZGV4IDQyNmVkN2Q4MWRiYWY0MjZkNjkzN2E5NzYwNGI0OGU5MDUwNDVkYjIuLjcxN2I1YzJm
YTk5OWVlZDA3NDUyMjI3NjQ1ZmJiOTNhNmFmODcxMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMiw2ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IDNi
NDdhMTk1NzlhODVmZjk0ZGQxZjJkZmE4MTBmZDc1ZDgzNmZkODkuLjMyMjNhZjc5ZDU5ZjYzMmQ3
NmQ3OTYzYjY0MWM1ZjM3ZWI0NzNlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTUsNyArNSw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2Vk
Lmh1PgogICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI2LDExICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RkVUdXJidWxlbmNlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNpbmNsdWRlICJG
RVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk5LDQyMCArOTUsNiBAQCBib29sIEZF
VHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2gpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLS8vIFRoZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRhcHRlZCB2
ZXJzaW9uIG9mIHdoYXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9uOgotLy8g
aHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZQotCi0v
LyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyIHRvIHNl
cGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgRkVUdXJidWxlbmNlU29mdHdh
cmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVR1cmJ1bGVu
Y2U+IHsKLSAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVHVy
YnVsZW5jZT47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9vbCBh
cHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cykgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgLy8gUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUg
cmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29yaXRobSBpczoKLSAgICAvLyByID0gKGEgKiByKSBt
b2QgbSB3aGVyZSBhID0gc19yYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCi0gICAgLy8gbSA9IHNf
cmFuZE1heGltdW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgzNjQ3LCByID0gc2VlZC4KLSAgICAvLyBT
ZWUgW1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8uIDEwIHAuIDExOTUsIE9jdC4gMTk4
OAotICAgIC8vIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2R1Y2UgdGhlIHJlc3Vs
dCAxMDQzNjE4MDY1Ci0gICAgLy8gYXMgdGhlIDEwLDAwMHRoIGdlbmVyYXRlZCBudW1iZXIgaWYg
dGhlIG9yaWdpbmFsIHNlZWQgaXMgMS4KLSAgICBzdGF0aWMgY29uc3QgaW50IHNfcGVybGluTm9p
c2UgPSA0MDk2OwotICAgIHN0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgz
NjQ3OyAvLyAyKiozMSAtIDEKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9
IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCi0gICAgc3RhdGljIGNvbnN0IGlu
dCBzX3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19yYW5k
UiA9IDI4MzY7IC8vIG0gJSBhCi0KLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tTaXplID0g
MjU2OwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja01hc2sgPSBzX2Jsb2NrU2l6ZSAtIDE7
Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgLy8gQ29tcHV0ZSBwc2V1ZG8g
cmFuZG9tIG51bWJlci4KLSAgICAgICAgbG9uZyByYW5kb20oKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVkZSAqIChzZWVkICUgc19yYW5kUSkgLSBz
X3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPD0gMCkK
LSAgICAgICAgICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKLSAgICAgICAgICAgIHNl
ZWQgPSByZXN1bHQ7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAg
ICAgICAgVHVyYnVsZW5jZVR5cGUgdHlwZTsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVg7
Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZOwotICAgICAgICBpbnQgbnVtT2N0YXZlczsK
LSAgICAgICAgbG9uZyBzZWVkOwotICAgICAgICBib29sIHN0aXRjaFRpbGVzOwotICAgICAgICBJ
bnRTaXplIHBhaW50aW5nU2l6ZTsKLQotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBz
X2Jsb2NrU2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1Np
emUgKyAyXVsyXTsKLSAgICB9OwotCi0gICAgc3RydWN0IFN0aXRjaERhdGEgewotICAgICAgICBp
bnQgd2lkdGggeyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRj
aGluZy4KLSAgICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAu
Ci0gICAgICAgIGludCBoZWlnaHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAg
ICB9OwotCi0gICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEludFJlY3QgZmls
dGVyUmVnaW9uOwotICAgICAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGU7Ci0gICAgICAgIFVpbnQ4
Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5n
RGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgICAgICBpbnQgc3RhcnRZ
OwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9OwotCi0gICAgc3RhdGljIGlubGluZSBmbG9hdCBz
bW9vdGhDdXJ2ZShmbG9hdCB0KSB7IHJldHVybiB0ICogdCAqICgzIC0gMiAqIHQpOyB9Ci0gICAg
c3RhdGljIGlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEs
IGZsb2F0IGIpIHsgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsgfQotCi0gICAgc3RhdGljIFBhaW50
aW5nRGF0YSBpbml0UGFpbnRpbmdEYXRhKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVl
bmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25nIHNlZWQsIGJv
b2wgc3RpdGNoVGlsZXMsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSk7Ci0gICAgc3RhdGlj
IFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSwgYm9vbCBzdGl0Y2hUaWxlcyk7Ci0K
LSAgICBzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50
aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3Rv
cik7Ci0gICAgc3RhdGljIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29s
b3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9u
ZW50cyk7Ci0gICAgc3RhdGljIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxjdWxhdGVU
dXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBj
b25zdCBGbG9hdFBvaW50Jik7Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJp
Yyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2Nh
bGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmLCBT
dGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlQ
bGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVBs
YXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0
ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIFBhaW50aW5nRGF0YSYsIFN0
aXRjaERhdGEmKTsKLX07Ci0KLUZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdE
YXRhIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6aW5pdFBhaW50aW5nRGF0YShUdXJidWxl
bmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGludCBudW1PY3RhdmVzLCBsb25nIHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMsIGNvbnN0IEludFNp
emUmIHBhaW50aW5nU2l6ZSkKLXsKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhIHsgdHlw
ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0
Y2hUaWxlcywgcGFpbnRpbmdTaXplLCB7IH0sIHsgfSB9OwotCi0gICAgLy8gVGhlIHNlZWQgdmFs
dWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCi0gICAgaWYgKHBh
aW50aW5nRGF0YS5zZWVkIDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWlu
dGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKLSAgICBpZiAocGFpbnRp
bmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNl
ZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKLQotICAgIGZsb2F0KiBncmFkaWVudDsKLSAgICBmb3Ig
KGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOwotICAgICAgICAgICAgZ3JhZGllbnQgPSBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAg
ICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5y
YW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXpl
OwotICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWlu
dGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBz
X2Jsb2NrU2l6ZTsKLSAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAhZ3JhZGll
bnRbMV0pOwotICAgICAgICAgICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlw
b3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIGdyYWRpZW50WzBdIC89
IG5vcm1hbGl6YXRpb25GYWN0b3I7Ci0gICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxp
emF0aW9uRmFjdG9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IHNfYmxv
Y2tTaXplIC0gMTsgaSA+IDA7IC0taSkgewotICAgICAgICBpbnQgayA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3JbaV07Ci0gICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRvbSgp
ICUgc19ibG9ja1NpemU7Ci0gICAgICAgIEFTU0VSVChqID49IDApOwotICAgICAgICBBU1NFUlQo
aiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOwotICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKLSAgICAgICAgcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7Ci0gICAgfQotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgewotICAgICAgICBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW2ldOwotICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsr
Y2hhbm5lbCkgewotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3Nf
YmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07
Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUg
KyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBwYWludGluZ0RhdGE7Ci19Ci0KLUZFVHVyYnVsZW5jZVNv
ZnR3YXJlQXBwbGllcjo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNv
bXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCYgYmFzZUZyZXF1ZW5jeVksIGJvb2wgc3RpdGNoVGlsZXMpCi17Ci0gICAgaWYgKCFzdGl0
Y2hUaWxlcykKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGZsb2F0IHRpbGVXaWR0aCA9IHRp
bGVTaXplLndpZHRoKCk7Ci0gICAgZmxvYXQgdGlsZUhlaWdodCA9IHRpbGVTaXplLmhlaWdodCgp
OwotICAgIEFTU0VSVCh0aWxlV2lkdGggPiAwICYmIHRpbGVIZWlnaHQgPiAwKTsKLQotICAgIC8v
IFdoZW4gc3RpdGNoaW5nIHRpbGVkIHR1cmJ1bGVuY2UsIHRoZSBmcmVxdWVuY2llcyBtdXN0IGJl
IGFkanVzdGVkCi0gICAgLy8gc28gdGhhdCB0aGUgdGlsZSBib3JkZXJzIHdpbGwgYmUgY29udGlu
dW91cy4KLSAgICBpZiAoYmFzZUZyZXF1ZW5jeVgpIHsKLSAgICAgICAgZmxvYXQgbG93RnJlcXVl
bmN5ID0gZmxvb3JmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKLSAg
ICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVu
Y3lYKSAvIHRpbGVXaWR0aDsKLSAgICAgICAgLy8gQmFzZUZyZXF1ZW5jeSBzaG91bGQgYmUgbm9u
LW5lZ2F0aXZlIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCi0gICAgICAgIGlmIChiYXNlRnJl
cXVlbmN5WCAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WCkK
LSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotICAg
IGlmIChiYXNlRnJlcXVlbmN5WSkgewotICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9v
cmYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGZs
b2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8g
dGlsZUhlaWdodDsKLSAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lZIC8gbG93RnJlcXVlbmN5IDwg
aGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5j
eVkgPSBsb3dGcmVxdWVuY3k7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGcmVxdWVu
Y3lZID0gaGlnaEZyZXF1ZW5jeTsKLSAgICB9Ci0KLSAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7
Ci0gICAgc3RpdGNoRGF0YS53aWR0aCA9IHJvdW5kZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5
WCk7Ci0gICAgc3RpdGNoRGF0YS53cmFwWCA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLndp
ZHRoOwotICAgIHN0aXRjaERhdGEuaGVpZ2h0ID0gcm91bmRmKHRpbGVIZWlnaHQgKiBiYXNlRnJl
cXVlbmN5WSk7Ci0gICAgc3RpdGNoRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hE
YXRhLmhlaWdodDsKLQotICAgIHJldHVybiBzdGl0Y2hEYXRhOwotfQotCi0vLyBUaGlzIGlzIHRh
a2VuIDE6MSBmcm9tIFNWRyBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJz
Lmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudC4KLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVU
dXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50
JiBub2lzZVZlY3RvcikKLXsKLSAgICBzdHJ1Y3QgTm9pc2VQb3NpdGlvbiB7Ci0gICAgICAgIGlu
dCBpbmRleDsgLy8gYngwLCBieTAgaW4gdGhlIHNwZWMgdGV4dC4KLSAgICAgICAgaW50IG5leHRJ
bmRleDsgLy8gYngxLCBieTEgaW4gdGhlIHNwZWMgdGV4dC4KLSAgICAgICAgZmxvYXQgZnJhY3Rp
b247IC8vIHJ4MCwgcnkwIGluIHRoZSBzcGVjIHRleHQuCi0KLSAgICAgICAgTm9pc2VQb3NpdGlv
bihmbG9hdCBjb21wb25lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vICB0ID0gdmVjWzBd
ICsgUGVybGluTjsKLSAgICAgICAgICAgIC8vICBieDAgPSAoaW50KXQ7Ci0gICAgICAgICAgICAv
LyAgYngxID0gYngwKzE7Ci0gICAgICAgICAgICAvLyAgcngwID0gdCAtIChpbnQpdDsKLSAgICAg
ICAgICAgIGZsb2F0IHBvc2l0aW9uID0gY29tcG9uZW50ICsgc19wZXJsaW5Ob2lzZTsKLSAgICAg
ICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbik7Ci0gICAgICAgICAgICBu
ZXh0SW5kZXggPSBpbmRleCArIDE7Ci0gICAgICAgICAgICBmcmFjdGlvbiA9IHBvc2l0aW9uIC0g
aW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc3RpdGNoKGludCBzaXpl
LCBpbnQgd3JhcFNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIChieDAgPj0gcFN0
aXRjaEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAgIC8vICAgYngwIC09IHBTdGl0Y2hJbmZvLT5u
V2lkdGg7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gd3JhcFNpemUpCi0gICAgICAgICAgICAg
ICAgaW5kZXggLT0gc2l6ZTsKLQotICAgICAgICAgICAgLy8gaWYgKGJ4MSA+PSBwU3RpdGNoSW5m
by0+bldyYXBYKQotICAgICAgICAgICAgLy8gICBieDEgLT0gcFN0aXRjaEluZm8tPm5XaWR0aDsK
LSAgICAgICAgICAgIGlmIChuZXh0SW5kZXggPj0gd3JhcFNpemUpCi0gICAgICAgICAgICAgICAg
bmV4dEluZGV4IC09IHNpemU7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgTm9pc2VQb3NpdGlv
biBub2lzZVgobm9pc2VWZWN0b3IueCgpKTsKLSAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWShub2lz
ZVZlY3Rvci55KCkpOwotCi0gICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0dGljZSBwb2lu
dHMgYWNjb3JkaW5nbHkuCi0gICAgaWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxlcykgewotICAg
ICAgICBub2lzZVguc3RpdGNoKHN0aXRjaERhdGEud2lkdGgsIHN0aXRjaERhdGEud3JhcFgpOwot
ICAgICAgICBub2lzZVkuc3RpdGNoKHN0aXRjaERhdGEuaGVpZ2h0LCBzdGl0Y2hEYXRhLndyYXBZ
KTsKLSAgICB9Ci0KLSAgICAvLyBieDAgJj0gQk07Ci0gICAgLy8gYngxICY9IEJNOwotICAgIC8v
IGJ5MCAmPSBCTTsKLSAgICAvLyBieTEgJj0gQk07Ci0gICAgbm9pc2VYLmluZGV4ICY9IHNfYmxv
Y2tNYXNrOwotICAgIG5vaXNlWC5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZ
LmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5uZXh0SW5kZXggJj0gc19ibG9ja01h
c2s7Ci0KLSAgICAvLyBpID0gdUxhdHRpY2VTZWxlY3RvcltieDBdOwotICAgIC8vIGogPSB1TGF0
dGljZVNlbGVjdG9yW2J4MV07Ci0gICAgaW50IGxhdHRpY2VJbmRleCA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3Jbbm9pc2VYLmluZGV4XTsKLSAgICBpbnQgbmV4dExhdHRpY2VJbmRleCA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5leHRJbmRleF07Ci0KLSAgICAv
LyBzeCA9IGRvdWJsZShzX2N1cnZlKHJ4MCkpOwotICAgIC8vIHN5ID0gZG91YmxlKHNfY3VydmUo
cnkwKSk7Ci0gICAgZmxvYXQgc3ggPSBzbW9vdGhDdXJ2ZShub2lzZVguZnJhY3Rpb24pOwotICAg
IGZsb2F0IHN5ID0gc21vb3RoQ3VydmUobm9pc2VZLmZyYWN0aW9uKTsKLQotICAgIGF1dG8gbm9p
c2VGb3JDaGFubmVsID0gWyZdKGludCBjaGFubmVsKSB7Ci0gICAgICAgIC8vIGIwMCA9IHVMYXR0
aWNlU2VsZWN0b3JbaSArIGJ5MF0KLSAgICAgICAgaW50IGIwMCA9IHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsKLSAgICAgICAgLy8gcSA9
IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDBdOyB1ID0gcngwICogcVswXSArIHJ5MCAqIHFb
MV07Ci0gICAgICAgIGNvbnN0IGZsb2F0KiBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5u
ZWxdW2IwMF07Ci0gICAgICAgIGZsb2F0IHUgPSBub2lzZVguZnJhY3Rpb24gKiBxWzBdICsgbm9p
c2VZLmZyYWN0aW9uICogcVsxXTsKLQotICAgICAgICAvLyBiMTAgPSB1TGF0dGljZVNlbGVjdG9y
W2ogKyBieTBdOwotICAgICAgICBpbnQgYjEwID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsKLSAgICAgICAgLy8gcngxID0gcngw
IC0gMS4wZjsKLSAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMTBdOyB2
ID0gcngxICogcVswXSArIHJ5MCAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3Jh
ZGllbnRbY2hhbm5lbF1bYjEwXTsKLSAgICAgICAgZmxvYXQgdiA9IChub2lzZVguZnJhY3Rpb24g
LSAxKSAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOwotICAgICAgICAvLyBhID0gbGVy
cChzeCwgdSwgdik7Ci0gICAgICAgIGZsb2F0IGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1
LCB2KTsKLQotICAgICAgICAvLyBiMDEgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBieTFdOwotICAg
ICAgICBpbnQgYjAxID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXgg
KyBub2lzZVkubmV4dEluZGV4XTsKLSAgICAgICAgLy8gcnkxID0gcnkwIC0gMS4wZjsKLSAgICAg
ICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDFdOyB1ID0gcngwICogcVswXSAr
IHJ5MSAqIHFbMV07Ci0gICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1b
YjAxXTsKLSAgICAgICAgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0gKyAobm9pc2VZLmZyYWN0
aW9uIC0gMSkgKiBxWzFdOwotCi0gICAgICAgIC8vIGIxMSA9IHVMYXR0aWNlU2VsZWN0b3JbaiAr
IGJ5MV07Ci0gICAgICAgIGludCBiMTEgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25l
eHRMYXR0aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKLSAgICAgICAgLy8gcSA9IGZHcmFk
aWVudFtuQ29sb3JDaGFubmVsXVtiMTFdOyB2ID0gcngxICogcVswXSArIHJ5MSAqIHFbMV07Ci0g
ICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjExXTsKLSAgICAgICAg
diA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyAobm9pc2VZLmZyYWN0aW9uIC0gMSkg
KiBxWzFdOwotICAgICAgICAvLyBiID0gbGVycChzeCwgdSwgdik7Ci0gICAgICAgIGZsb2F0IGIg
PSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKLQotICAgICAgICAvLyByZXR1cm4gbGVy
cChzeSwgYSwgYik7Ci0gICAgICAgIHJldHVybiBsaW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBi
KTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDApLAot
ICAgICAgICBub2lzZUZvckNoYW5uZWwoMSksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgyKSwK
LSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDMpCi0gICAgfTsKLX0KLQotLy8gaHR0cHM6Ly93d3cu
dzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMg
dGhpcyBjb252ZXJzaW9uIHRvIGNvbG9yIGNvbXBvbmVudHMuCi0vLyBGSVhNRTogVGhpcyBzaG91
bGQgdXNlIGNvbG9yQ29udmVydDxTUkdCQTx1aW50OD4+KFNSR0JBPGZsb2F0PikgdG8gZ2V0IHRo
ZSBzYW1lIGJlaGF2aW9yLgotQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllcjo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIHsKLSAg
ICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50
c1swXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGlj
X2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMV0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBz
dGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzJdICog
MjU1KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxp
bnQ+KGZsb2F0Q29tcG9uZW50c1szXSAqIDI1NSksIDAsIDI1NSksCi0gICAgfTsKLX0KLQotQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y2Fs
Y3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCi17
Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQ7
Ci0gICAgRmxvYXRQb2ludCBub2lzZVZlY3Rvcihwb2ludC54KCkgKiBwYWludGluZ0RhdGEuYmFz
ZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WSk7Ci0g
ICAgZmxvYXQgcmF0aW8gPSAxOwotICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IHBh
aW50aW5nRGF0YS5udW1PY3RhdmVzOyArK29jdGF2ZSkgewotICAgICAgICBpZiAocGFpbnRpbmdE
YXRhLnR5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKLSAgICAgICAgICAgIHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0
YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwg
bm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87Ci0KLSAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WChu
b2lzZVZlY3Rvci54KCkgKiAyKTsKLSAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rv
ci55KCkgKiAyKTsKLSAgICAgICAgcmF0aW8gKj0gMjsKLQotICAgICAgICBpZiAocGFpbnRpbmdE
YXRhLnN0aXRjaFRpbGVzKSB7Ci0gICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4g
U3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAot
ICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0
aW5nIGl0IG9uY2UuCi0gICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAg
ICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5v
aXNlOwotICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKLSAgICAgICAgICAgIHN0
aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1
KSAvIDIgYnkgZnJhY3RhbE5vaXNlCi0gICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKHBhaW50aW5nRGF0YS50eXBlID09IFR1
cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCi0gICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYgKyAwLjVmOwotCi0gICAgcmV0
dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsK
LX0KLQotdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5l
cmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJT
Y2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZ
KQotewotICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKLQotICAgIEZsb2F0UG9pbnQgcG9pbnQo
MCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7Ci0gICAgaW50IGluZGV4T2ZQaXhlbENoYW5u
ZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAgRmxvYXRTaXpl
IGludmVyc2VTY2FsZSA9IHsgMSAvIGZpbHRlclNjYWxlLndpZHRoKCksIDEgLyBmaWx0ZXJTY2Fs
ZS5oZWlnaHQoKSB9OwotCi0gICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkg
ewotICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwotICAgICAgICBwb2ludC5zZXRY
KGZpbHRlclJlZ2lvbi54KCkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGZpbHRlclJl
Z2lvbi53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIHBvaW50LnNldFgocG9pbnQueCgpICsg
MSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBwb2ludC5zY2FsZWQoaW52
ZXJzZVNjYWxlLndpZHRoKCksIGludmVyc2VTY2FsZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBh
dXRvIHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBhaW50aW5nRGF0
YSwgc3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7Ci0gICAgICAgICAgICBwaXhlbEFycmF5LnNldFJh
bmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hhbm5lbCk7Ci0g
ICAgICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2Vy
KEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKLXsKLSAgICBhcHBseVBsYXRmb3JtR2VuZXJp
YyhwYXJhbWV0ZXJzLT5maWx0ZXJSZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRlclNjYWxlLCAqcGFy
YW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVy
cy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKLX0K
LQotdm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3Qg
SW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50
OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0
aXRjaERhdGEmIHN0aXRjaERhdGEpCi17Ci0gICAgaW50IGhlaWdodCA9IGZpbHRlclJlZ2lvbi5o
ZWlnaHQoKTsKLSAgICB1bnNpZ25lZCBhcmVhID0gZmlsdGVyUmVnaW9uLmFyZWEoKTsKLQotICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8g
RW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMuCi0gICAgdW5zaWduZWQgbWF4
TnVtVGhyZWFkcyA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKSAvIDg7Ci0gICAgdW5zaWduZWQgb3B0
aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPihhcmVhIC8gbWluaW1hbFJlY3RE
aW1lbnNpb24sIG1heE51bVRocmVhZHMpOwotCi0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIg
PiAxKSB7Ci0gICAgICAgIFBhcmFsbGVsSm9iczxBcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9i
cygmYXBwbHlQbGF0Zm9ybVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAg
Ly8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0gICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFs
bGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bUpvYnMgPiAxKSB7Ci0gICAg
ICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInN0ZXBZIi1zaXplZCBqb2JzLCBkaXN0cmli
dXRpbmcgdGhlIGV4dHJhIHJvd3MgaW50byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0cmEiIGpvYnMu
Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAvIG51bUpvYnM7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBqb2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0WSA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMm
IHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoaSk7Ci0gICAgICAgICAgICAgICAgcGFy
YW1zLmZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
ZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxB
cnJheSA9ICZwaXhlbEFycmF5OwotICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEg
PSAmcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3Rp
dGNoRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOwotCi0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgam9iSGVpZ2h0ID0gKGkgPCBqb2JzV2l0aEV4dHJhKSA/IHN0
ZXBZICsgMSA6IHN0ZXBZOwotICAgICAgICAgICAgICAgIHBhcmFtcy5lbmRZID0gcGFyYW1zLnN0
YXJ0WSArIGpvYkhlaWdodDsKLSAgICAgICAgICAgICAgICBzdGFydFkgKz0gam9iSGVpZ2h0Owot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRmFsbGJhY2sgdG8g
c2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFk
IG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBhcHBseVBsYXRmb3JtR2VuZXJp
YyhmaWx0ZXJSZWdpb24sIGZpbHRlclNjYWxlLCBwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0
aXRjaERhdGEsIDAsIGhlaWdodCk7Ci19Ci0KLWJvb2wgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9y
JikKLXsKLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1
ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOwotICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgSW50U2l6ZSByZXN1bHRTaXplKG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KTsKLSAgICBpZiAocmVzdWx0U2l6ZS5hcmVhKCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIGF1dG8gdGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZSht
X2VmZmVjdC5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkpOwotCi0gICAgZmxvYXQg
YmFzZUZyZXF1ZW5jeVggPSBtX2VmZmVjdC5iYXNlRnJlcXVlbmN5WCgpOwotICAgIGZsb2F0IGJh
c2VGcmVxdWVuY3lZID0gbV9lZmZlY3QuYmFzZUZyZXF1ZW5jeVkoKTsKLSAgICBhdXRvIHN0aXRj
aERhdGEgPSBjb21wdXRlU3RpdGNoaW5nKHRpbGVTaXplLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZy
ZXF1ZW5jeVksIG1fZWZmZWN0LnN0aXRjaFRpbGVzKCkpOwotCi0gICAgYXV0byBwYWludGluZ0Rh
dGEgPSBpbml0UGFpbnRpbmdEYXRhKG1fZWZmZWN0LnR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgsIGJh
c2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5udW1PY3RhdmVzKCksIG1fZWZmZWN0LnNlZWQoKSwgbV9l
ZmZlY3Quc3RpdGNoVGlsZXMoKSwgdGlsZVNpemUpOwotCi0gICAgYXBwbHlQbGF0Zm9ybShtX2Vm
ZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZGVzdGluYXRp
b25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEpOwotICAgIHJldHVybiB0cnVl
OwotfQotCiBib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIo
KnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKaW5kZXgg
N2M0N2M3ODc0OWI4NTZmYzlmOTFhZjg0YzYxMzRjZjQ3ZGYwNmUyNC4uOTczZWIxZDNlOWMwMzAx
NDVjNGVjYWM5YzFkMzFmMzlhOWM1NGZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC00LDcgKzQsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1Pgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0QXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3RBcHBsaWVyLmgKaW5kZXggNDdlMTQyNTFjNTYyZTk2N2ZmYjlhYjcx
ZWMzYWZhNzBkY2I5YzJiMS4uZjdhNThkMGY4MTFkMmM2NzEyNzM5ZTEzMDFlNDMzY2I1NTAyNGRi
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3RBcHBsaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RBcHBsaWVyLmgKQEAgLTI1LDggKzI1LDEyIEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgRmlsdGVyOworCiBjbGFzcyBGaWx0ZXJFZmZlY3RBcHBsaWVy
IHsKIHB1YmxpYzoKICAgICBGaWx0ZXJFZmZlY3RBcHBsaWVyKCkgPSBkZWZhdWx0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmNwcAppbmRleCA4MjAyZmI5NDhhOTZkNzAzZTU4NWI0OWM5MmUyNTM0NGIwM2JhYTU4Li4w
MThiNTc2NTcyMzBjM2M5YjQ0MmRkMjgxZGEwZTlmZjJlOTJlNjA5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNw
cApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTAgKzIxLDggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogCi0jaW5jbHVk
ZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RB
cHBsaWVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU291cmNl
QWxwaGFTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ2LDM3ICs0NSw2IEBAIHZvaWQgU291cmNlQWxw
aGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAg
IHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKIH0KIAotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIFNvdXJjZUFscGhhU29mdHdhcmVBcHBs
aWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgU291cmNlQWxw
aGFTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPFNv
dXJjZUFscGhhPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxTb3VyY2VBbHBoYT47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAg
Ym9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykgb3ZlcnJpZGU7Ci19OwotCi1ib29sIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZm
ZWN0cykKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwot
Ci0gICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGF1
dG8gaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdl
QnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0
KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAg
IEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7
Ci0KLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJsYWNrKTsK
LSAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEludFBvaW50
KCksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCiBib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiB7CiAgICAgcmV0dXJuIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyKCp0
aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCAwYThj
ZmZkNzY0MjBkZTdhMWE3ZTRjMDU5M2Q0NzZhMTRjZmExMDc1Li5lY2ZiZjEyMjMzM2JiMzBiNmU1
NjQ1NTgwZGMwOGI4ZmQ1MWYyMWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCA3YjI2M2RkZTA5N2M1OTBk
N2Y1ZDRjNDlmNDY0ZDU3NjVlNjc0NTgwLi4zNDlkYTBkYjlmOGQ0YzZhOWNmOTRhYmUwOWJlYThh
Yzc4YWIyYzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIxLDggKzIyLDcgQEAKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgi
CiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpY1Nv
ZnR3YXJlQXBwbGllci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsMjcgKzQzLDYgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi0vLyBG
SVhNRTogTW92ZSB0aGUgY2xhc3MgU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllciB0byBzZXBh
cmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIFNvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPFNvdXJjZUdyYXBo
aWM+IHsKLSAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPFNvdXJj
ZUdyYXBoaWM+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wg
YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVj
dHMpIG92ZXJyaWRlOwotfTsKLQotYm9vbCBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikKLXsK
LSAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBhdXRvIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1
bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
c3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9p
bnQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgU291cmNlR3JhcGhpYzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBTb3Vy
Y2VHcmFwaGljU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0
cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggOWZiYzIwYTc1MWQwNzY1ZjE2YzM0NWE4ODBhYTYy
ZmIyMDZjODY0MS4uNTBmNDdhMWI2MDc5NDExYjE3NWVhMTdhYmNlZWJiODMwYzc4M2E0NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4
IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGllci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjUyM2EyYjI5YzM4MmVhMjkyZjliYmViNDQ1YWI2OWExMDVmZDI1Ygot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSw1OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUg
U3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkZF
QmxlbmQuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKK2Jvb2wgRkVCbGVuZFNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQo
KTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKKworICAg
IGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlm
ICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9
IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFn
ZUJ1ZmZlcjIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxv
Z2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9lZmZlY3Qu
YmxlbmRNb2RlKCkgfSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZUFw
cGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45YWRhODQxYzMyYmIwZjIzMDA4ODNhOWZlMmVmMzI4ZDdhY2I5
NGZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQWRvYmUgU3lzdGVt
cyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRkVCbGVuZDsKKworY2xhc3MgRkVCbGVuZFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVCbGVuZD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVCbGVuZD47CisKK3B1YmxpYzoKKyAgICB1c2luZyBC
YXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42N2VjMGExMTlmNzJhMTY1YjAxNTEzOTlj
ODYyNjJmOTYzYmRhNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
LmNwcApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUg
IkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJh
dGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcihGRUNv
bG9yTWF0cml4JiBlZmZlY3QpCisgICAgOiBCYXNlKGVmZmVjdCkKK3sKKyAgICBpZiAobV9lZmZl
Y3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xv
ck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKG1fY29tcG9uZW50cywgbV9lZmZl
Y3QudmFsdWVzKClbMF0pOworICAgIGVsc2UgaWYgKG1fZWZmZWN0LnR5cGUoKSA9PSBGRUNPTE9S
TUFUUklYX1RZUEVfSFVFUk9UQVRFKQorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVI
dWVSb3RhdGVDb21wb25lbnRzKG1fY29tcG9uZW50cywgbV9lZmZlY3QudmFsdWVzKClbMF0pOwor
fQorCitpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjptYXRyaXgoZmxv
YXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdAor
eworICAgIGZsb2F0IHIgPSByZWQ7CisgICAgZmxvYXQgZyA9IGdyZWVuOworICAgIGZsb2F0IGIg
PSBibHVlOworICAgIGZsb2F0IGEgPSBhbHBoYTsKKworICAgIGNvbnN0IGF1dG8mIHZhbHVlcyA9
IG1fZWZmZWN0LnZhbHVlcygpOworCisgICAgcmVkICAgPSB2YWx1ZXNbIDBdICogciArIHZhbHVl
c1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNbIDNdICogYSArIHZhbHVlc1sgNF0g
KiAyNTU7CisgICAgZ3JlZW4gPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFs
dWVzWyA3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7CisgICAgYmx1
ZSAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2
YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgPSB2YWx1ZXNbMTVd
ICogciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVzWzE3XSAqIGIgKyB2YWx1ZXNbMThdICogYSAr
IHZhbHVlc1sxOV0gKiAyNTU7Cit9CisKK2lubGluZSB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2Fy
ZUFwcGxpZXI6OnNhdHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwg
ZmxvYXQmIGJsdWUpIGNvbnN0Cit7CisgICAgZmxvYXQgciA9IHJlZDsKKyAgICBmbG9hdCBnID0g
Z3JlZW47CisgICAgZmxvYXQgYiA9IGJsdWU7CisKKyAgICByZWQgICAgID0gciAqIG1fY29tcG9u
ZW50c1swXSArIGcgKiBtX2NvbXBvbmVudHNbMV0gKyBiICogbV9jb21wb25lbnRzWzJdOworICAg
IGdyZWVuICAgPSByICogbV9jb21wb25lbnRzWzNdICsgZyAqIG1fY29tcG9uZW50c1s0XSArIGIg
KiBtX2NvbXBvbmVudHNbNV07CisgICAgYmx1ZSAgICA9IHIgKiBtX2NvbXBvbmVudHNbNl0gKyBn
ICogbV9jb21wb25lbnRzWzddICsgYiAqIG1fY29tcG9uZW50c1s4XTsKK30KKworLy8gRklYTUU6
IHRoaXMgc2hvdWxkIHVzZSB0aGUgbHVtaW5hbmNlKC4uLikgZnVuY3Rpb24gaW4gQ29sb3JMdW1p
bmFuY2UuaC4KK2lubGluZSB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Omx1bWlu
YW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEp
IGNvbnN0Cit7CisgICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAu
MDcyMSAqIGJsdWU7CisgICAgcmVkID0gMDsKKyAgICBncmVlbiA9IDA7CisgICAgYmx1ZSA9IDA7
Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3ZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikg
Y29uc3QKK3sKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOworICAg
IGF1dG8gYnVmZmVyU2l6ZSA9IHBpeGVsQnVmZmVyLnNpemUoKTsKKworICAgIEFTU0VSVChwaXhl
bEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICogNCk7CisgICAgCisgICAgY29u
c3QgaW50MzJfdCBkaXZpc29yID0gMjU2OworICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5
LmRhdGEoKTsKKworICAgIHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGJ1ZmZl
clNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gYnVmZmVyU2l6ZS5oZWlnaHQoKTsKKyAg
ICBzcmMucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OworICAgIHNyYy5kYXRhID0g
ZGF0YTsKKyAgICAKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGJ1
ZmZlclNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7
CisgICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgZGVzdC5k
YXRhID0gZGF0YTsKKworICAgIHN3aXRjaCAobV9lZmZlY3QudHlwZSgpKSB7CisgICAgY2FzZSBG
RUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKKyAgICAgICAgY29uc3QgYXV0byYgdmFsdWVzID0g
bV9lZmZlY3QudmFsdWVzKCk7CisKKyAgICAgICAgY29uc3QgaW50MTZfdCBtYXRyaXhbNCAqIDRd
ID0geworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMF0g
KiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWyA1XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZih2YWx1ZXNbMTBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKHZhbHVlc1sxNV0gKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDFdICogZGl2aXNvcikpLAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNl0gKiBkaXZpc29yKSksCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzExXSAqIGRpdmlz
b3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTZd
ICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWyAyXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbIDddICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzE3XSAqIGRpdmlzb3IpKSwKKworICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgM10gKiBkaXZpc29yKSks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA4XSAqIGRp
dmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
MTNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sxOF0gKiBkaXZpc29yKSksCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJp
eE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIs
IG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfSFVFUk9UQVRFOiB7CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9
IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNb
MF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
bV9jb21wb25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIDAs
CisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNb
MV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
bV9jb21wb25lbnRzWzRdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIDAs
CisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNb
Ml0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
bV9jb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIDAs
CisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgIGRpdmlzb3IsCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5
X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxwdHIs
IGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6IHsKKyAgICAgICAgY29uc3QgaW50MTZfdCBt
YXRyaXhbNCAqIDRdID0geworICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMjEyNSAq
IGRpdmlzb3IpKSwKKworICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuNzE1NCAqIGRp
dmlzb3IpKSwKKworICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKDAuMDcyMSAqIGRpdmlz
b3IpKSwKKworICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAor
ICAgICAgICAgICAgMCwKKyAgICAgICAgfTsKKyAgICAgICAgdkltYWdlTWF0cml4TXVsdGlwbHlf
QVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hdHJpeCwgZGl2aXNvciwgbnVsbHB0ciwgbnVsbHB0ciwg
a3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorfQorI2VuZGlm
CisKK3ZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybVVuYWNj
ZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKSBjb25zdAoreworICAgIGF1dG8mIHBp
eGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci5kYXRhKCk7CisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxl
bmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7CisKKyAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUo
KSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgorICAgICAgICBmb3IgKHVu
c2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlM
ZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBw
aXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVu
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxv
YXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAg
ICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwor
ICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVs
QXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxB
cnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBp
eGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBp
eGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5
Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0
IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICAg
ICAgc2F0dXJhdGVBbmRIdWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSk7CisgICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJy
YXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Cisg
ICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0
IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxCeXRlT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgICAg
IGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOworICAgICAgICAg
ICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Cisg
ICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCAr
IDIpOworICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0ICsgMyk7CisgICAgICAgICAgICBsdW1pbmFuY2UocmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Cisg
ICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEZFQ29sb3JNYXRyaXhT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKSBj
b25zdAoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIGNvbnN0IGF1dG8mIHZhbHVlcyA9IG1f
ZWZmZWN0LnZhbHVlcygpOworCisgICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODgg
dGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRo
ZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKKyAgICAvLyBpcyBub3QgemVybywgZmFsbCBiYWNr
IHRvIG5vbi12SW1hZ2UgY29kZS4KKyAgICBpZiAobV9lZmZlY3QudHlwZSgpICE9IEZFQ09MT1JN
QVRSSVhfVFlQRV9NQVRSSVggfHwgKCF2YWx1ZXNbNF0gJiYgIXZhbHVlc1s5XSAmJiAhdmFsdWVz
WzE0XSAmJiAhdmFsdWVzWzE5XSkpIHsKKyAgICAgICAgYXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVk
KHBpeGVsQnVmZmVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGFwcGx5
UGxhdGZvcm1VbmFjY2VsZXJhdGVkKHBpeGVsQnVmZmVyKTsKK30KKworYm9vbCBGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBhdXRvIGluID0gaW5wdXRFZmZlY3RzWzBd
LmdldCgpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVz
dWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmIChpbkJ1
ZmZlcikKKyAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlu
QnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9lZmZl
Y3QucmVzdWx0Q29sb3JTcGFjZSgpIH07CisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQo
KSwgcmVzdWx0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gcGl4ZWxC
dWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwor
ICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICht
X2VmZmVjdC50eXBlKCkgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEEpCisg
ICAgICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZSh0cnVlKTsKKworICAgIGFwcGx5UGxhdGZv
cm0oKnBpeGVsQnVmZmVyKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVs
QnVmZmVyLCBpbWFnZVJlY3QpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNv
ZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzMzk0ODllNWEzZmZjZWJkMzJkOWQ4YjlmZGMw
MjBmMzk1ZWU4N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaApA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGRUNvbG9yTWF0cml4OworCitjbGFzcyBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyIDog
cHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUNvbG9yTWF0cml4PiB7CisgICAg
dXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUNvbG9yTWF0cml4PjsK
KworcHVibGljOgorICAgIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIoRkVDb2xvck1hdHJp
eCYpOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgaW5saW5lIHZv
aWQgbWF0cml4KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBh
bHBoYSkgY29uc3Q7CisgICAgaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSkgY29uc3Q7CisgICAgaW5saW5lIHZvaWQg
bHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBh
bHBoYSkgY29uc3Q7CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICB2b2lkIGFwcGx5UGxhdGZv
cm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYpIGNvbnN0OworI2VuZGlmCisgICAgdm9pZCBhcHBs
eVBsYXRmb3JtVW5hY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYpIGNvbnN0OworCisgICAgdm9pZCBh
cHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJikgY29uc3Q7CisKKyAgICBmbG9hdCBtX2NvbXBvbmVu
dHNbOV07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJh
bnNmZXJTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kZTQ0MmFkZWY0OTkwNjExOTczOWUwZTNlNWY0NWUwYjZkMTk4YTM1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCww
ICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuaCIKKwor
I2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29m
dHdhcmVBcHBsaWVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQoreworfQorCit2b2lkIEZFQ29tcG9uZW50VHJhbnNm
ZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVl
cywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3sK
KyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24u
dGFibGVWYWx1ZXM7CisgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKKyAgICBp
ZiAobiA8IDEpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGRvdWJsZSBjID0gaSAvIDI1NS4wOworICAg
ICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsKKyAg
ICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107CisgICAgICAgIGRvdWJsZSB2MiA9IHRh
YmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKKyAgICAgICAgZG91YmxlIHZh
bCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0gaykgKiAodjIgLSB2MSkpOworICAgICAg
ICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKKyAgICAgICAgdmFs
dWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9CisKK3ZvaWQgRkVD
b21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9v
a3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNm
ZXJGdW5jdGlvbikKK3sKKyAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRy
YW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7CisgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVz
LnNpemUoKTsKKyAgICBpZiAobiA8IDEpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIGsg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAvIDI1NS4wKTsKKyAgICAgICAgayA9IHN0
ZDo6bWluKGssIG4gLSAxKTsKKyAgICAgICAgZG91YmxlIHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVz
W2tdOworICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsK
KyAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsKTsKKyAgICB9Cit9
CisKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxpbmVh
clRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZh
bHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlv
bi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKKyAgICAgICAg
dmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAgIHZhbHVl
c1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCit2b2lkIEZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRh
YmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVu
Y3Rpb24pCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50
OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBv
dywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQorICAgICAgICBkb3VibGUgdmFsID0gMjU1LjAg
KiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBwb3coKGkgLyAyNTUuMCksIGV4cG9uZW50
KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKKyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCitGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVB
cHBsaWVyOjpMb29rdXBUYWJsZSBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpj
b21wdXRlTG9va3VwVGFibGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rp
b24pCit7CisgICAgTG9va3VwVGFibGUgdGFibGU7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGFibGUuc2l6ZSgpOyArK2kpCisgICAgICAgIHRhYmxlW2ldID0gaTsKKworICAgIHVz
aW5nIFRyYW5zZmVyVHlwZSA9IHZvaWQgKCopKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIFRyYW5zZmVyVHlwZSBjYWxsRWZmZWN0W10gPSB7Cisg
ICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQ
RV9VTktOT1dOCisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9JREVOVElUWQorICAgICAgICBjb21wdXRlVGFidWxhclRhYmxlLCAgICAv
LyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUKKyAgICAgICAgY29tcHV0ZURpc2NyZXRl
VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0RJU0NSRVRFCisgICAgICAgIGNv
bXB1dGVMaW5lYXJUYWJsZSwgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIK
KyAgICAgICAgY29tcHV0ZUdhbW1hVGFibGUgICAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0dBTU1BCisgICAgfTsKKworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihmdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9M
RU5HVEgoY2FsbEVmZmVjdCkpOworICAgIGNhbGxFZmZlY3RbZnVuY3Rpb24udHlwZV0odGFibGUs
IGZ1bmN0aW9uKTsKKworICAgIHJldHVybiB0YWJsZTsKK30KKwordm9pZCBGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlcikgY29uc3QKK3sKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgp
OworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwor
ICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKKworICAgIGF1dG8gcmVkVGFi
bGUgICA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5yZWRGdW5jdGlvbigpKTsKKyAgICBh
dXRvIGdyZWVuVGFibGUgPSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3QuZ3JlZW5GdW5jdGlv
bigpKTsKKyAgICBhdXRvIGJsdWVUYWJsZSAgPSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3Qu
Ymx1ZUZ1bmN0aW9uKCkpOworICAgIGF1dG8gYWxwaGFUYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJs
ZShtX2VmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9m
ZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0g
NCkgeworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSAgICAgPSByZWRUYWJsZVtkYXRhW3BpeGVs
T2Zmc2V0XV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0
YVtwaXhlbE9mZnNldCArIDFdXTsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1
ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQg
KyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKKyAgICB9Cit9CisKK2Jv
b2wgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAgICAKKyAgICBhdXRvIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkcmF3aW5nUmVjdCA9
IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CisgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciwgZHJhd2luZ1JlY3QpOworCisgICAgYXBwbHlQbGF0Zm9ybSgqZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWUzMjFjNzE5M2I5Y2FkNDU3MjE0
NjBjN2ViNDM4ZTBiNzAwNDJiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3
YXJlQXBwbGllci5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZFQ29tcG9uZW50VHJhbnNmZXI7CitzdHJ1Y3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbjsKKworY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
ciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb21wb25lbnRUcmFuc2Zl
cj4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb21w
b25lbnRUcmFuc2Zlcj47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAg
Ym9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdXNpbmcgTG9va3VwVGFibGUgPSBz
dGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj47CisKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlSWRlbnRp
dHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsK
KyAgICBzdGF0aWMgdm9pZCBjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVEaXNj
cmV0ZVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlR2Ft
bWFUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsK
KworICAgIHN0YXRpYyBMb29rdXBUYWJsZSBjb21wdXRlTG9va3VwVGFibGUoY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYpOworCisgICAgdm9pZCBhcHBseVBsYXRmb3JtKFBpeGVsQnVm
ZmVyJikgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9z
aXRlU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU0ZDU5OTc5ZGE4YWIyNGJiYTIwOTMwMzM2M2MwMjczZTQ2ZjVjOTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIw
MTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZF
Q29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRUNvbXBvc2l0ZS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisj
aW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3VpbnQ4X3QgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6
OmNsYW1wQnl0ZShpbnQgYykKK3sKKyAgICB1aW50OF90IGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8
dWludDhfdD4oYyksIDI1NSwgMCB9OworICAgIHVuc2lnbmVkIHVjID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGMpOworICAgIHJldHVybiBidWZmWyEhKHVjICYgfjB4ZmYpICsgISEodWMgJiB+KH4w
dSA+PiAxKSldOworfQorCit0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+CitpbmxpbmUgdm9pZCBG
RUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5zaWdu
ZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJy
YXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQoreworICAg
IGZsb2F0IHNjYWxlZEsxOworICAgIGZsb2F0IHNjYWxlZEs0OworICAgIGlmIChiMSkKKyAgICAg
ICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKKyAgICBpZiAoYjQpCisgICAgICAgIHNjYWxlZEs0
ID0gazQgKiAyNTUuMGY7CisKKyAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDApIHsK
KyAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7CisgICAgICAgIHVuc2lnbmVkIGNo
YXIgaTIgPSAqZGVzdGluYXRpb247CisgICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEgKyBr
MyAqIGkyOworICAgICAgICBpZiAoYjEpCisgICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzEg
KiBpMSAqIGkyOworICAgICAgICBpZiAoYjQpCisgICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVk
SzQ7CisKKyAgICAgICAgKmRlc3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7CisgICAgICAg
ICsrc291cmNlOworICAgICAgICArK2Rlc3RpbmF0aW9uOworICAgIH0KK30KKworLy8gY29tcHV0
ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiBjb21wdXRl
QXJpdGhtZXRpY1BpeGVscyBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1waW5nCisvLyBp
cyBub3QgbmVjZXNzYXJ5LiBUaGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVyIG9wdGltaXph
dGlvbnMgc3VjaCBhcyBhdXRvLXZlY3Rvcml6YXRpb24uCit0ZW1wbGF0ZSA8aW50IGIxLCBpbnQg
YjQ+CitpbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUFyaXRo
bWV0aWNQaXhlbHNVbmNsYW1wZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFy
KiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KQoreworICAgIGZsb2F0IHNjYWxlZEsxOworICAgIGZsb2F0IHNj
YWxlZEs0OworICAgIGlmIChiMSkKKyAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKKyAg
ICBpZiAoYjQpCisgICAgICAgIHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7CisKKyAgICB3aGlsZSAo
LS1waXhlbEFycmF5TGVuZ3RoID49IDApIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpz
b3VyY2U7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247CisgICAgICAg
IGZsb2F0IHJlc3VsdCA9IGsyICogaTEgKyBrMyAqIGkyOworICAgICAgICBpZiAoYjEpCisgICAg
ICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzEgKiBpMSAqIGkyOworICAgICAgICBpZiAoYjQpCisg
ICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzQ7CisKKyAgICAgICAgKmRlc3RpbmF0aW9uID0g
cmVzdWx0OworICAgICAgICArK3NvdXJjZTsKKyAgICAgICAgKytkZXN0aW5hdGlvbjsKKyAgICB9
Cit9CisKKyNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQoraW5saW5lIHZvaWQgRkVDb21w
b3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKHVuc2lnbmVkIGNo
YXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVu
Z3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9h
dCB1cHBlckxpbWl0ID0gc3RkOjptYXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4wZiwgazIpICsg
c3RkOjptYXgoMC4wZiwgazMpICsgazQ7CisgICAgZmxvYXQgbG93ZXJMaW1pdCA9IHN0ZDo6bWlu
KDAuMGYsIGsxKSArIHN0ZDo6bWluKDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYsIGszKSArIGs0
OworICAgIGlmICgoazQgPj0gMC4wZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJMaW1pdCA+PSAw
LjBmICYmIHVwcGVyTGltaXQgPD0gMS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4wZiAmJiBsb3dl
ckxpbWl0IDw9IDEuMGYpKSB7CisgICAgICAgIGlmIChrNCkgeworICAgICAgICAgICAgaWYgKGsx
KQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDE+
KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVs
c1VuY2xhbXBlZDwwLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoazEpCisg
ICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMD4oc291
cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5j
bGFtcGVkPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBr
MiwgazMsIGs0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGs0KSB7CisgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4
ZWxzPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwg
azMsIGs0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHM8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBr
MywgazQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlM
ZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcHV0
ZUFyaXRobWV0aWNQaXhlbHM8MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxl
bmd0aCwgazEsIGsyLCBrMywgazQpOworICAgIH0KK30KKyNlbmRpZgorCitib29sIEZFQ29tcG9z
aXRlU29mdHdhcmVBcHBsaWVyOjphcHBseUFyaXRobWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmls
dGVyRWZmZWN0KiBpbjIpCit7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9l
ZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Cisg
ICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QsIG1f
ZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1Jl
Y3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKKyAgICBpbjItPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0QkRyYXdpbmdSZWN0KTsKKworICAgIGF1dG8mIHNvdXJj
ZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAg
IGludCBsZW5ndGggPSBzb3VyY2VQaXhlbEFycmF5Lmxlbmd0aCgpOworICAgIEFTU0VSVChsZW5n
dGggPT0gc3RhdGljX2Nhc3Q8aW50PihkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCkpKTsK
KyAgICBhcHBseVBsYXRmb3JtQXJpdGhtZXRpYyhzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgZGVz
dGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSwgbGVuZ3RoLCBtX2VmZmVjdC5rMSgpLCBtX2VmZmVj
dC5rMigpLCBtX2VmZmVjdC5rMygpLCBtX2VmZmVjdC5rNCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0aG1ldGlj
KEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKQoreworICAgIGF1dG8gcmVzdWx0
SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1h
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi0+
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VC
dWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOworCisgICAgc3dpdGNoIChtX2VmZmVjdC5vcGVyYXRpb24oKSkgewor
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgorICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOiB7CisgICAgICAgIC8v
IEFwcGxpZXMgb25seSB0byB0aGUgaW50ZXJzZWN0ZWQgcmVnaW9uLgorICAgICAgICBJbnRSZWN0
IGRlc3RpbmF0aW9uUmVjdCA9IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAgICAgICBkZXN0
aW5hdGlvblJlY3QuaW50ZXJzZWN0KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgICAg
IGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QobV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSk7
CisgICAgICAgIGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIEludFJlY3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlv
blJlY3QgLSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgICAg
IEludFJlY3Qgc291cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0aW5h
dGlvblJlY3QgLSBpbjItPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKKyAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRSZWN0KGFk
anVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7CisgICAgICAg
IGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRSZWN0KGFk
anVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlcjItPmxvZ2lj
YWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6CisgICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgICAg
IGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBp
bWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRv
cCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6
CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1f
ZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwg
bV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRv
cjo6WE9SKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X0FSSVRITUVUSUM6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6CisgICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0
LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZl
Y3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsg
eyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1
c0xpZ2h0ZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwg
Y29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluMiA9
IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKKworICAgIGlmIChtX2VmZmVjdC5vcGVyYXRpb24oKSA9
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAgICAgICByZXR1cm4gYXBwbHlB
cml0aG1ldGljKGluLCBpbjIpOworICAgIHJldHVybiBhcHBseU5vbkFyaXRobWV0aWMoaW4sIGlu
Mik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2Fy
ZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDYyYTg4MDg1
MzYxZjk4NDZkMDhmMjNlZTA4YjFkZTQ4NGNmMzM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNv
ZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRUNvbXBvc2l0ZTsKKworY2xhc3MgRkVDb21wb3Np
dGVTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
Q29tcG9zaXRlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxGRUNvbXBvc2l0ZT47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAg
Ym9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnQ4X3QgY2xhbXBC
eXRlKGludCk7CisKKyAgICB0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+CisgICAgc3RhdGljIGlu
bGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwg
dW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBr
MSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisKKyAgICB0ZW1wbGF0ZSA8aW50IGIx
LCBpbnQgYjQ+CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
VW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRp
b24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBm
bG9hdCBrNCk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlQbGF0Zm9ybUFyaXRobWV0
aWModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KTsKKworICAgIGJvb2wgYXBwbHlBcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVm
ZmVjdCogaW4yKTsKKyAgICBib29sIGFwcGx5Tm9uQXJpdGhtZXRpYyhGaWx0ZXJFZmZlY3QqIGlu
LCBGaWx0ZXJFZmZlY3QqIGluMik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTAwZWY0ZGVjNjA2ZTk5NzU1OGM1NTNjODJkZDVkMzZh
ODUxY2NmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcApA
QCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Wm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUg
IkZFQ29udm9sdmVNYXRyaXguaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUg
PHd0Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKgorICAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIENvbnZvbHZlTWF0cml4IGltcGxl
bWVudGF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBU
aGUgaW1hZ2UgcmVjdGFuZ2xlIGlzIHNwbGl0IGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisgICAg
ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBBICAgICAgICAgIHwK
KyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgfCAgICAgICAgICAgICB8
ICAgfAorICAgICAgfCBCIHwgICAgICBDICAgICAgfCBEIHwKKyAgICAgIHwgICB8ICAgICAgICAg
ICAgIHwgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAg
ICBFICAgICAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdoZXJl
IHJlZ2lvbiBDIGNvbnRhaW5zIHRob3NlIHBpeGVscywgd2hvc2UgdmFsdWVzCisgICBjYW4gYmUg
Y2FsY3VsYXRlZCB3aXRob3V0IGNyb3NzaW5nIHRoZSBlZGdlIG9mIHRoZSByZWN0YW5nbGUuCisK
KyAgIEV4YW1wbGU6CisgICAgICBJbWFnZSBzaXplOiB3aWR0aDogMTAsIGhlaWdodDogMTAKKwor
ICAgICAgT3JkZXIgKGtlcm5lbCBtYXRyaXggc2l6ZSk6IHdpZHRoOiAzLCBoZWlnaHQgNAorICAg
ICAgVGFyZ2V0OiB4OjEsIHk6MworCisgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0
aGUgdGFyZ2V0IGluc2lkZSB0aGUga2VybmVsIG1hdHJpeDoKKworICAgICAgICAuLi4KKyAgICAg
ICAgLi4uCisgICAgICAgIC4uLgorICAgICAgICAuWC4KKworICAgVGhlIHJlZ2lvbnMgaW4gdGhp
cyBjYXNlIGFyZSB0aGUgZm9sbG93aW5nOgorICAgICAgTm90ZTogKHgxLCB5MSkgdG9wLWxlZnQg
YW5kICh4MiwgeTIpIGlzIHRoZSBib3R0b20tcmlnaHQgY29ybmVyCisgICAgICBOb3RlOiByb3cg
eDIgYW5kIGNvbHVtbiB5MiBpcyBub3QgcGFydCBvZiB0aGUgcmVnaW9uCisgICAgICAgICAgICBv
bmx5IHRob3NlICh4LCB5KSBwaXhlbHMsIHdoZXJlIHgxIDw9IHggPCB4MiBhbmQgeTEgPD0geSA8
IHkyCisKKyAgICAgIFJlZ2lvbiBBOiB4MTogMCwgeTE6IDAsIHgyOiAxMCwgeTI6IDMKKyAgICAg
IFJlZ2lvbiBCOiB4MTogMCwgeTE6IDMsIHgyOiAxLCB5MjogMTAKKyAgICAgIFJlZ2lvbiBDOiB4
MTogMSwgeTE6IDMsIHgyOiA5LCB5MjogMTAKKyAgICAgIFJlZ2lvbiBEOiB4MTogOSwgeTE6IDMs
IHgyOiAxMCwgeTI6IDEwCisgICAgICBSZWdpb24gRTogeDE6IDAsIHkxOiAxMCwgeDI6IDEwLCB5
MjogMTAgKGVtcHR5IHJlZ2lvbikKKworICAgU2luY2UgcmVnaW9uIEMgKG9mdGVuKSBjb250YWlu
cyBtb3N0IG9mIHRoZSBwaXhlbHMsIHdlIGltcGxlbWVudGVkCisgICBhIGZhc3QgYWxnb3JpdG0g
dG8gY2FsY3VsYXRlIHRoZXNlIHZhbHVlcywgY2FsbGVkIGZhc3RTZXRJbnRlcmlvclBpeGVscy4K
KyAgIEZvciBvdGhlciByZWdpb25zLCBmYXN0U2V0T3V0ZXJQaXhlbHMgaXMgdXNlZCwgd2hpY2gg
Y2FsbHMgZ2V0UGl4ZWxWYWx1ZSwKKyAgIHRvIGhhbmRsZSBwaXhlbHMgb3V0c2lkZSBvZiB0aGUg
aW1hZ2UuIEluIGEgcmFyZSBzaXR1YXRpb25zLCB3aGVuCisgICBrZXJuZWwgbWF0cml4IGlzIGJp
Z2dlciB0aGFuIHRoZSBpbWFnZSwgYWxsIHBpeGVscyBhcmUgY2FsY3VsYXRlZCBieSB0aGlzCisg
ICBmdW5jdGlvbi4KKworICAgQWx0aG91Z2ggdGhlc2UgdHdvIGZ1bmN0aW9ucyBoYXZlIGxvdCBp
biBjb21tb24sIEkgZGVjaWRlZCBub3QgdG8gbWFrZQorICAgY29tbW9uIGEgdGVtcGxhdGUgZm9y
IHRoZW0sIHNpbmNlIHRoZXJlIGFyZSBrZXkgZGlmZmVyZW5jZXMgYXMgd2VsbCwKKyAgIGFuZCB3
b3VsZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCisqLworCitpbmxpbmUgdWlu
dDhfdCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpjbGFtcFJHQkFWYWx1ZShmbG9h
dCBjaGFubmVsLCB1aW50OF90IG1heCkKK3sKKyAgICBpZiAoY2hhbm5lbCA8PSAwKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCisgICAgICAgIHJldHVybiBtYXg7
CisgICAgcmV0dXJuIGNoYW5uZWw7Cit9CisKK2lubGluZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZUFwcGxpZXI6OnNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBp
eGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXMpCit7CisgICAgdWludDhfdCBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFW
YWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGRlc3RQaXhlbHMuc2V0
KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhB
bHBoYSkpOworCisgICAgaWYgKHByZXNlcnZlQWxwaGFWYWx1ZXMpIHsKKyAgICAgICAgZGVzdFBp
eGVscy5zZXQocGl4ZWwsIHNvdXJjZVBpeGVscy5pdGVtKHBpeGVsKSk7CisgICAgICAgICsrcGl4
ZWw7CisgICAgfSBlbHNlCisgICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhh
KTsKK30KKworaW5saW5lIGludCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpnZXRQ
aXhlbFZhbHVlKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHkp
Cit7CisgICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYmIHkgPj0gMCAm
JiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdE
YXRhLndpZHRoICsgeCkgPDwgMjsKKworICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLmVkZ2VNb2Rl
KSB7CisgICAgZGVmYXVsdDogLy8gRWRnZU1vZGVUeXBlOjpOb25lCisgICAgICAgIHJldHVybiAt
MTsKKyAgICBjYXNlIEVkZ2VNb2RlVHlwZTo6RHVwbGljYXRlOgorICAgICAgICBpZiAoeCA8IDAp
CisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEu
d2lkdGgpCisgICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKKyAgICAgICAg
aWYgKHkgPCAwKQorICAgICAgICAgICAgeSA9IDA7CisgICAgICAgIGVsc2UgaWYgKHkgPj0gcGFp
bnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0g
MTsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAg
ICBjYXNlIEVkZ2VNb2RlVHlwZTo6V3JhcDoKKyAgICAgICAgd2hpbGUgKHggPCAwKQorICAgICAg
ICAgICAgeCArPSBwYWludGluZ0RhdGEud2lkdGg7CisgICAgICAgIHggJT0gcGFpbnRpbmdEYXRh
LndpZHRoOworICAgICAgICB3aGlsZSAoeSA8IDApCisgICAgICAgICAgICB5ICs9IHBhaW50aW5n
RGF0YS5oZWlnaHQ7CisgICAgICAgIHkgJT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKKyAgICAgICAg
cmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICB9Cit9CisKKy8v
IE9ubHkgZm9yIHJlZ2lvbiBDCitpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50
IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQoreworICAg
IC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCisgICAgaW50IHBpeGVs
ID0gKHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsg
cGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCkpICogNDsKKyAgICBpbnQga2VybmVsSW5jcmVh
c2UgPSBjbGlwUmlnaHQgKiA0OworICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLmtl
cm5lbFNpemUud2lkdGgoKSAtIDEpICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJn
YihhKSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzRdOworCisgICAgLy8gZGl2aXNvciBj
YW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAg
QVNTRVJUKHBhaW50aW5nRGF0YS5kaXZpc29yKTsKKworICAgIC8vIFNraXAgdGhlIGZpcnN0ICco
Y2xpcEJvdHRvbSAtIHlFbmQpJyBsaW5lcworICAgIHBpeGVsICs9IChjbGlwQm90dG9tIC0geUVu
ZCkgKiAoeEluY3JlYXNlICsgKGNsaXBSaWdodCArIDEpICogNCk7CisgICAgaW50IHN0YXJ0S2Vy
bmVsUGl4ZWwgPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQg
KyAxKSAqIDQpOworCisgICAgZm9yIChpbnQgeSA9IHlFbmQgKyAxOyB5ID4geVN0YXJ0OyAtLXkp
IHsKKyAgICAgICAgZm9yIChpbnQgeCA9IGNsaXBSaWdodCArIDE7IHggPiAwOyAtLXgpIHsKKyAg
ICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXguc2l6
ZSgpIC0gMTsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbCA9IHN0YXJ0S2VybmVsUGl4ZWw7
CisgICAgICAgICAgICBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgp
OworCisgICAgICAgICAgICB0b3RhbHNbMF0gPSAwOworICAgICAgICAgICAgdG90YWxzWzFdID0g
MDsKKyAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbM10gPSAw
OworCisgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgeworICAgICAgICAgICAg
ICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAq
IHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5l
bFBpeGVsKyspKTsKKyAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAgdG90
YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwr
KykpOworICAgICAgICAgICAgICAgIGlmICghcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpCisg
ICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4
W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheS5pdGVtKGtlcm5lbFBpeGVsKSk7CisgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsK
KyAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOworICAgICAgICAgICAgICAgIGlmICghLS13
aWR0aCkgeworICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFz
ZTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53
aWR0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5n
RGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwg
cGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKKyAgICAgICAg
ICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBwaXhlbCArPSB4
SW5jcmVhc2U7CisgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOworICAgIH0K
K30KKworLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCitpbmxpbmUgdm9pZCBGRUNvbnZvbHZl
TWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQoreworICAgIGludCBwaXhl
bCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7CisgICAgaW50IGhlaWdodCA9
IHkyIC0geTE7CisgICAgaW50IHdpZHRoID0geDIgLSB4MTsKKyAgICBpbnQgYmVnaW5LZXJuZWxQ
aXhlbFggPSB4MSAtIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpOworICAgIGludCBzdGFy
dEtlcm5lbFBpeGVsWCA9IGJlZ2luS2VybmVsUGl4ZWxYOworICAgIGludCBzdGFydEtlcm5lbFBp
eGVsWSA9IHkxIC0gcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCk7CisgICAgaW50IHhJbmNy
ZWFzZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0aCkgKiA0OworICAgIC8vIENvbnRhaW5z
IHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKKyAgICBmbG9hdCB0b3RhbHNbNF07CisKKyAg
ICAvLyBwYWludGluZ0RhdGEuZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKHBhaW50aW5nRGF0YS5kaXZpc29yKTsK
KworICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKKyAgICAgICAgZm9yIChp
bnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7CisgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUg
PSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbnQg
a2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7CisgICAgICAgICAgICBpbnQga2VybmVs
UGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7CisgICAgICAgICAgICBpbnQgd2lkdGggPSBwYWlu
dGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOworCisgICAgICAgICAgICB0b3RhbHNbMF0gPSAw
OworICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7
CisgICAgICAgICAgICB0b3RhbHNbM10gPSAwOworCisgICAgICAgICAgICB3aGlsZSAoa2VybmVs
VmFsdWUgPj0gMCkgeworICAgICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxW
YWx1ZShwYWludGluZ0RhdGEsIGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKKyAgICAgICAg
ICAgICAgICBpZiAocGl4ZWxJbmRleCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFs
c1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXgpKTsK
KyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRy
aXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxz
WzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDIp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEu
cHJlc2VydmVBbHBoYSAmJiBwaXhlbEluZGV4ID49IDApCisgICAgICAgICAgICAgICAgICAgIHRv
dGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRp
Y19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXgg
KyAzKSk7CisgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFg7CisgICAgICAgICAgICAgICAg
LS1rZXJuZWxWYWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICAgICAga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7CisgICAgICAgICAg
ICAgICAgICAgICsra2VybmVsUGl4ZWxZOworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHBh
aW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMs
IHBhaW50aW5nRGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnBy
ZXNlcnZlQWxwaGEpOworICAgICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKKyAgICAgICAg
fQorICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CisgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxY
ID0gYmVnaW5LZXJuZWxQaXhlbFg7CisgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFk7CisgICAg
fQorfQorCit2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm0oUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpIGNvbnN0Cit7CisgICAgLy8gRHJhd2luZyBm
dWxseSBjb3ZlcmVkIHBpeGVscworICAgIGludCBjbGlwUmlnaHQgPSBwYWludGluZ0RhdGEud2lk
dGggLSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOworICAgIGludCBjbGlwQm90dG9t
ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLmhlaWdodCgp
OworCisgICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKKyAgICAgICAg
Ly8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6ZWQgZm9yIHNwZWVkCisgICAgICAgIHNldE91
dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgcGFpbnRpbmdEYXRhLndpZHRoLCBwYWludGlu
Z0RhdGEuaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IG1pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNh
bCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCisKKyAgICBpZiAoaW50IGl0ZXJhdGlvbnMg
PSAocGFpbnRpbmdEYXRhLndpZHRoICogcGFpbnRpbmdEYXRhLmhlaWdodCkgLyBtaW5pbWFsUmVj
dERpbWVuc2lvbikgeworICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlv
bnM7CisgICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAv
IHN0cmlkZTsKKworICAgICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0NvdW50
LCBbJl0oc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAq
IGluZGV4KTsKKyAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAo
aW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7CisKKyAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOworICAg
ICAgICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOworCisgICAgY2xpcFJp
Z2h0ICs9IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpICsgMTsKKyAgICBjbGlwQm90dG9t
ICs9IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpICsgMTsKKworICAgIGlmIChwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSA+IDApCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50
aW5nRGF0YSwgMCwgMCwgcGFpbnRpbmdEYXRhLndpZHRoLCBwYWludGluZ0RhdGEudGFyZ2V0T2Zm
c2V0LnkoKSk7CisgICAgaWYgKGNsaXBCb3R0b20gPCBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50aW5n
RGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7CisgICAgaWYgKHBhaW50aW5nRGF0YS50
YXJnZXRPZmZzZXQueCgpID4gMCkKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRh
LCAwLCBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRpbmdEYXRhLnRhcmdldE9m
ZnNldC54KCksIGNsaXBCb3R0b20pOworICAgIGlmIChjbGlwUmlnaHQgPCBwYWludGluZ0RhdGEu
d2lkdGgpCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBw
YWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRpbmdEYXRhLndpZHRoLCBjbGlwQm90
dG9tKTsKK30KKworYm9vbCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShj
b25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sK
KyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOworCisgICAgYXV0
byBhbHBoYUZvcm1hdCA9IG1fZWZmZWN0LnByZXNlcnZlQWxwaGEoKSA/IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCA6IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQ7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4
ZWxCdWZmZXJSZXN1bHQoYWxwaGFGb3JtYXQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBlZmZlY3REcmF3aW5nUmVj
dCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7CisgICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhl
bEJ1ZmZlclJlc3VsdChhbHBoYUZvcm1hdCwgZWZmZWN0RHJhd2luZ1JlY3QsIG1fZWZmZWN0Lm9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBp
eGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIAorICAgIGF1dG8gcGFpbnRTaXplID0g
bV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisKKyAgICBQYWludGluZ0RhdGEg
cGFpbnRpbmdEYXRhID0geworICAgICAgICBzb3VyY2VQaXhlbEFycmF5LAorICAgICAgICBkZXN0
aW5hdGlvblBpeGVsQXJyYXksCisgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAorICAgICAgICBw
YWludFNpemUuaGVpZ2h0KCksCisgICAgICAgIG1fZWZmZWN0Lmtlcm5lbFNpemUoKSwKKyAgICAg
ICAgbV9lZmZlY3QuZGl2aXNvcigpLAorICAgICAgICBtX2VmZmVjdC5iaWFzKCkgKiAyNTUsCisg
ICAgICAgIG1fZWZmZWN0LnRhcmdldE9mZnNldCgpLAorICAgICAgICBtX2VmZmVjdC5lZGdlTW9k
ZSgpLAorICAgICAgICBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCksCisgICAgICAgIEZFQ29sb3JN
YXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMobV9lZmZlY3Qua2VybmVsKCkpCisgICAgfTsKKworICAg
IGFwcGx5UGxhdGZvcm0ocGFpbnRpbmdEYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
Q29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGQ2YzA4ZGE3OWMx
NzdjYWQ4NzE3YWY4YzlkMjIyOWMyZGVmZTgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4
U29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFQ29udm9s
dmVNYXRyaXg7CitlbnVtIGNsYXNzIEVkZ2VNb2RlVHlwZTsKKworY2xhc3MgRkVDb252b2x2ZU1h
dHJpeFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
RkVDb252b2x2ZU1hdHJpeD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0
ZUFwcGxpZXI8RkVDb252b2x2ZU1hdHJpeD47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpC
YXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFBh
aW50aW5nRGF0YSB7CisgICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFy
cmF5OworICAgICAgICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheTsKKyAgICAgICAg
aW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworCisgICAgICAgIEludFNpemUga2VybmVs
U2l6ZTsKKyAgICAgICAgZmxvYXQgZGl2aXNvcjsKKyAgICAgICAgZmxvYXQgYmlhczsKKyAgICAg
ICAgSW50UG9pbnQgdGFyZ2V0T2Zmc2V0OworICAgICAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGU7
CisgICAgICAgIGJvb2wgcHJlc2VydmVBbHBoYTsKKyAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXJu
ZWxNYXRyaXg7CisgICAgfTsKKworICAgIHN0YXRpYyBpbmxpbmUgdWludDhfdCBjbGFtcFJHQkFW
YWx1ZShmbG9hdCBjaGFubmVsLCB1aW50OF90IG1heCA9IDI1NSk7CisgICAgc3RhdGljIGlubGlu
ZSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9h
dCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFW
YWx1ZXMpOworCisgICAgc3RhdGljIGlubGluZSBpbnQgZ2V0UGl4ZWxWYWx1ZShjb25zdCBQYWlu
dGluZ0RhdGEmLCBpbnQgeCwgaW50IHkpOworCisgICAgc3RhdGljIGlubGluZSB2b2lkIHNldElu
dGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9t
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIHNldE91dGVy
UGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5Mik7CisK
KyAgICB2b2lkIGFwcGx5UGxhdGZvcm0oUGFpbnRpbmdEYXRhJikgY29uc3Q7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiM2MyMWMz
ZjY0MjNkZDcyYTcyMzMwN2JkOTQ0NDM4OTUzMGE2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2Vt
ZW50TWFwU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxh
Y2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1h
cC5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVEaXNw
bGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBs
aWVyKEZFRGlzcGxhY2VtZW50TWFwJiBlZmZlY3QpCisgICAgOiBCYXNlKGVmZmVjdCkKK3sKKyAg
ICBBU1NFUlQobV9lZmZlY3QueENoYW5uZWxTZWxlY3RvcigpICE9IENIQU5ORUxfVU5LTk9XTik7
CisgICAgQVNTRVJUKG1fZWZmZWN0LnlDaGFubmVsU2VsZWN0b3IoKSAhPSBDSEFOTkVMX1VOS05P
V04pOworfQorCitpbnQgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OnhDaGFubmVs
SW5kZXgoKSBjb25zdAoreworICAgIHJldHVybiBtX2VmZmVjdC54Q2hhbm5lbFNlbGVjdG9yKCkg
LSAxOworfQorCitpbnQgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OnlDaGFubmVs
SW5kZXgoKSBjb25zdAoreworICAgIHJldHVybiBtX2VmZmVjdC55Q2hhbm5lbFNlbGVjdG9yKCkg
LSAxOworfQorCitib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBseShj
b25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVj
dHMpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAg
ICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKKworICAgIGF1dG8g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0
byBlZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gaW5wdXRQaXhlbEJ1
ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QpOworCisgICAgYXV0byBlZmZlY3RCRHJh
d2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4y
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRo
ZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24tcHJl
bXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCisgICAgYXV0byBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZl
ciA9IGluMi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCBlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIAorICAgIGlmICghaW5wdXRQ
aXhlbEJ1ZmZlciB8fCAhZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8mIGlucHV0SW1hZ2UgPSBpbnB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7
CisgICAgYXV0byYgZGlzcGxhY2VtZW50SW1hZ2UgPSBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlci0+
ZGF0YSgpOworICAgIEFTU0VSVChpbnB1dEltYWdlLmxlbmd0aCgpID09IGRpc3BsYWNlbWVudElt
YWdlLmxlbmd0aCgpKTsKKworICAgIEludFNpemUgcGFpbnRTaXplID0gbV9lZmZlY3QuYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCk7CisKKyAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIuc2Nh
bGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnNjYWxlKCksIG1fZWZmZWN0LnNjYWxlKCkgfSk7
CisgICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2FsZS53aWR0aCgpIC8gMjU1LjA7CisgICAg
ZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1NS4wOworICAgIGZsb2F0
IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OworICAgIGZsb2F0IHNj
YWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQoKSAqIDAuNTsKKyAgICAKKyAgICBpbnQg
ZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7CisgICAgaW50IGRpc3BsYWNl
bWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgpOworCisgICAgaW50IHJvd0J5dGVzID0gcGFp
bnRTaXplLndpZHRoKCkgKiA0OworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNpemUu
aGVpZ2h0KCk7ICsreSkgeworICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5
dGVzOworCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsr
eCkgeworICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQg
KyB4ICogNDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLml0ZW0oZGVzdGlu
YXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOworICAg
ICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAq
IGRpc3BsYWNlbWVudEltYWdlLml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENo
YW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOworCisgICAgICAgICAgICB1bnNpZ25lZCogZGVzdGlu
YXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlvblBp
eGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRleCk7CisgICAgICAgICAgICBpZiAoc3Jj
WCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49
IHBhaW50U2l6ZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVs
UHRyID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCo+KGlucHV0SW1hZ2UuZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93
Qnl0ZXMpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU2Y2E2ZWE1YzU0
MTgxMmUwMmUwOTM0M2M4OTdjOGU3M2JhNjc2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRN
YXBTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGRURpc3BsYWNlbWVudE1hcDsKKworY2xhc3MgRkVEaXNw
bGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVB
cHBsaWVyPEZFRGlzcGxhY2VtZW50TWFwPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVj
dENvbmNyZXRlQXBwbGllcjxGRURpc3BsYWNlbWVudE1hcD47CisKK3B1YmxpYzoKKyAgICBGRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcihGRURpc3BsYWNlbWVudE1hcCYpOworCisgICAg
Ym9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dC
eXRlcykKKyAgICB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0Owor
ICAgICAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7CisgICAgfQor
CisgICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdDsKKyAgICBpbnQgeUNoYW5uZWxJbmRleCgp
IGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dT
b2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUxN2E2MWI3MzM5MDIzMzEyZGJiNmZmZTA1ZDU0NDg0OThjMjgxNDQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93U29mdHdh
cmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRURyb3BTaGFkb3cuaCIKKyNpbmNsdWRlICJGaWx0
ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5n
ZXQoKTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsg
bV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7Cisg
ICAgRmxvYXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZl
Y3QuZHgoKSwgbV9lZmZlY3QuZHkoKSB9KTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9u
ID0gbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdpbmdSZWdp
b24pOworICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKKworICAgIGF1
dG8gc291cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXNvdXJj
ZUltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIHJl
c3VsdENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIHJlc3VsdENvbnRleHQu
c2V0QWxwaGEobV9lZmZlY3Quc2hhZG93T3BhY2l0eSgpKTsKKyAgICByZXN1bHRDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKKyAg
ICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOworCisgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hh
ZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CisKKyAgICBQ
aXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9
OworICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+dHJ1bmNh
dGVkTG9naWNhbFNpemUoKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5n
ZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOworICAgIGlmICghcGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBw
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291
cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZl
ci0+c2l6ZSgpLndpZHRoKCkpOworICAgIAorICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZl
cigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOworCisgICAgcmVzdWx0Q29udGV4dC5zZXRDb21w
b3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKKyAgICByZXN1bHRD
b250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CisgICAgcmVzdWx0
Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0
aW9uT3Zlcik7CisKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigq
c291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BT
aGFkb3dTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NWY2YzBmM2VlNzYxNzg2MmI1NjFl
Y2YyYzY1NjQ5MTRhODZkNThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxp
ZXIuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZFRHJvcFNoYWRvdzsKKworY2xhc3MgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVy
IDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRURyb3BTaGFkb3c+IHsKKyAg
ICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRHJvcFNoYWRvdz47
CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25z
dCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJp
ZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxvb2RTb2Z0d2FyZUFw
cGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDNlMGUyYmYxYzMx
YjVkZjg0MTYzYTc0YjRjM2I2ZjRkYWMwMTFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmVB
cHBsaWVyLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRkVGbG9vZFNvZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAi
RkVGbG9vZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUZsb29kU29mdHdhcmVB
cHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKQor
eworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwor
ICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
Y29sb3IgPSBtX2VmZmVjdC5mbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
bV9lZmZlY3QuZmxvb2RPcGFjaXR5KCkpOworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmls
bFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBjb2xvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxvb2RTb2Z0d2FyZUFwcGxp
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xNTM1NzEyM2YzMDBiOGRiYWMyYzljMThlODQwOGE5M2Y2NTgzODE5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RB
cHBsaWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVGbG9vZDsKKworY2xh
c3MgRkVGbG9vZFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8RkVGbG9vZD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8RkVGbG9vZD47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAg
Ym9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
R2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU2MjFlYjVkYjZiMWVmMGFjOGUzNmQ3OGM0NDJjMzQ4NWJlN2M2YTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsx
LDQ1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBT
LkwuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVH
YXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVy
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisj
aW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZWxzZQorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIHZvaWQgRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9u
LCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KQorewor
ICAgIC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVHYXVz
c2lhbkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgorICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlvbikg
eworICAgIGNhc2UgMDoKKyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAg
IGRlbHRhTGVmdCA9IHJhZGl1cyAvIDIgLSAxOworICAgICAgICAgICAgZGVsdGFSaWdodCA9IHJh
ZGl1cyAtIGRlbHRhTGVmdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbHRhTGVm
dCA9IHJhZGl1cyAvIDI7CisgICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFM
ZWZ0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgaWYg
KCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRlbHRhTGVmdCsrOworICAgICAgICAgICAg
ZGVsdGFSaWdodC0tOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAg
ICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRlbHRhUmlnaHQrKzsKKyAg
ICAgICAgICAgIHJhZGl1cysrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
KworLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5uZWwuCitpbmxp
bmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkm
IGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBp
bnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVj
dEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQoreworICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKKyAgICB1aW50OF90KiBkc3REYXRhID0g
ZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisgICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwg
emVyby1pbmRleCBiYXNlZC4KKyAgICBjb25zdCBpbnQgY2hhbm5lbCA9IDM7CisKKyAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7CisgICAgICAgIGludCBsaW5lID0g
eSAqIHN0cmlkZUxpbmU7CisgICAgICAgIGludCBzdW0gPSAwOworCisgICAgICAgIC8vIEZpbGwg
dGhlIGtlcm5lbC4KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyAr
K2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwor
ICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKKyAg
ICAgICAgICAgIHN1bSArPSBzcmNQdHJbY2hhbm5lbF07CisgICAgICAgIH0KKworICAgICAgICAv
LyBCbHVycmluZy4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4
KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0
cmlkZSArIGNoYW5uZWw7CisgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsg
cGl4ZWxCeXRlT2Zmc2V0OworICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHN1bSAvIGR4KTsKKworICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgorICAgICAgICAg
ICAgaWYgKHggPj0gZHhMZWZ0KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNl
dCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICBj
b25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKKyAgICAgICAgICAg
ICAgICBzdW0gLT0gKnNyY1B0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHgg
KyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdo
dE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7CisgICAgICAgICAg
ICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OworICAg
ICAgICAgICAgICAgIHN1bSArPSAqc3JjUHRyOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94
Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVk
QXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdo
dCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVj
dEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisgICAg
Y29uc3QgaW50IG1heEtlcm5lbFNpemUgPSBzdGQ6Om1pbihkeFJpZ2h0LCBlZmZlY3RXaWR0aCk7
CisgICAgaWYgKGFscGhhSW1hZ2UpCisgICAgICAgIHJldHVybiBib3hCbHVyQWxwaGFPbmx5KHNy
Y1BpeGVsQXJyYXksIGRzdFBpeGVsQXJyYXksIGR4LCBkeExlZnQsIGR4UmlnaHQsIHN0cmlkZSwg
c3RyaWRlTGluZSwgIGVmZmVjdFdpZHRoLCBlZmZlY3RIZWlnaHQsIG1heEtlcm5lbFNpemUpOwor
CisgICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOworICAg
IHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKKworICAgIC8vIENvbmNl
cm5pbmcgdGhlIGFycmF5IHdpZHRoL2xlbmd0aDogaXQgaXMgRWxlbWVudCBzaXplICsgTWFyZ2lu
ICsgQm9yZGVyLiBUaGUgbnVtYmVyIG9mIHBpeGVscyB3aWxsIGJlCisgICAgLy8gUCA9IHdpZHRo
ICogaGVpZ2h0ICogY2hhbm5lbHMuCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWln
aHQ7ICsreSkgeworICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOworICAgICAgICBp
bnQgc3VtUiA9IDAsIHN1bUcgPSAwLCBzdW1CID0gMCwgc3VtQSA9IDA7CisKKyAgICAgICAgaWYg
KGVkZ2VNb2RlID09IEVkZ2VNb2RlVHlwZTo6Tm9uZSkgeworICAgICAgICAgICAgLy8gRmlsbCB0
aGUga2VybmVsLgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXpl
OyArK2kpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0
cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsg
b2Zmc2V0OworICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOworICAgICAgICAgICAg
ICAgIHN1bUcgKz0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisr
OworICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gQmx1cnJpbmcuCisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVm
ZmVjdFdpZHRoOyArK3gpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZz
ZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIg
PSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OworCisgICAgICAgICAgICAgICAgKmRzdFB0cisr
ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0
UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1HIC8gZHgpOworICAgICAgICAgICAgICAg
ICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7CisgICAgICAgICAg
ICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7CisKKyAgICAg
ICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCisgICAgICAgICAgICAgICAgaWYgKHggPj0gZHhM
ZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5
dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OworICAgICAgICAgICAgICAgICAg
ICBzdW1SIC09IHNyY1B0clswXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJb
MV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gc3JjUHRyWzJdOworICAgICAgICAgICAg
ICAgICAgICBzdW1BIC09IHNyY1B0clszXTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RXaWR0aCkgeworICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBz
dHJpZGU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0Rh
dGEgKyByaWdodE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07
CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gc3JjUHRyWzFdOworICAgICAgICAgICAgICAg
ICAgICBzdW1CICs9IHNyY1B0clsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQ
dHJbM107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyBoZXJlLgor
ICAgICAgICAgICAgLy8gR2V0IGVkZ2UgdmFsdWVzIGZvciBlZGdlTW9kZSAnZHVwbGljYXRlJy4K
KyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVkZ2VWYWx1ZUxlZnQgPSBzcmNEYXRhICsgbGlu
ZTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVkZ2VWYWx1ZVJpZ2h0ICA9IHNyY0RhdGEg
KyAobGluZSArIChlZmZlY3RXaWR0aCAtIDEpICogc3RyaWRlKTsKKworICAgICAgICAgICAgLy8g
RmlsbCB0aGUga2VybmVsLgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IGR4TGVmdCAqIC0xOyBp
IDwgZHhSaWdodDsgKytpKSB7CisgICAgICAgICAgICAgICAgLy8gSXMgdGhpcyByaWdodCBmb3Ig
bmVnYXRpdmUgdmFsdWVzIG9mICdpJz8KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSBsaW5lICsgaSAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQ
dHIgPSBzcmNEYXRhICsgb2Zmc2V0OworCisgICAgICAgICAgICAgICAgaWYgKGkgPCAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlTGVmdFswXTsKKyAgICAgICAgICAg
ICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVMZWZ0WzFdOworICAgICAgICAgICAgICAgICAgICBz
dW1CICs9IGVkZ2VWYWx1ZUxlZnRbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRn
ZVZhbHVlTGVmdFszXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPj0gZWZmZWN0V2lk
dGgpIHsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKKyAg
ICAgICAgICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVSaWdodFsxXTsKKyAgICAgICAgICAg
ICAgICAgICAgc3VtQiArPSBlZGdlVmFsdWVSaWdodFsyXTsKKyAgICAgICAgICAgICAgICAgICAg
c3VtQSArPSBlZGdlVmFsdWVSaWdodFszXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAg
c3VtRyArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisr
OworICAgICAgICAgICAgICAgICAgICBzdW1BICs9ICpzcmNQdHI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBCbHVycmluZy4KKyAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgeworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOworICAgICAgICAg
ICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7CisKKyAg
ICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgp
OworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcg
LyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
c3VtQiAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3VtQSAvIGR4KTsKKworICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KKyAgICAg
ICAgICAgICAgICBpZiAoeCA8IGR4TGVmdCkgeworICAgICAgICAgICAgICAgICAgICBzdW1SIC09
IGVkZ2VWYWx1ZUxlZnRbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gZWRnZVZhbHVl
TGVmdFsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBlZGdlVmFsdWVMZWZ0WzJdOwor
ICAgICAgICAgICAgICAgICAgICBzdW1BIC09IGVkZ2VWYWx1ZUxlZnRbM107CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9
IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7CisgICAgICAgICAg
ICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HIC09
IHNyY1B0clsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07CisgICAg
ICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA+PSBlZmZlY3RXaWR0aCkgeworICAgICAg
ICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOworICAgICAgICAgICAgICAg
ICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOworICAgICAgICAgICAgICAgICAgICBzdW1C
ICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VW
YWx1ZVJpZ2h0WzNdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0
cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0
YSArIHJpZ2h0T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsK
KyAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07CisgICAgICAgICAgICAgICAg
ICAgIHN1bUIgKz0gc3JjUHRyWzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0
clszXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29m
dHdhcmVBcHBsaWVyOjpib3hCbHVyQWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVm
ZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwg
aW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQoreworICAgIGlm
ICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVmZmVyLmRhdGEoKSkgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChlZmZl
Y3RXaWR0aCA8PSAwIHx8IGVmZmVjdEhlaWdodCA8PSAwIHx8IHN0cmlkZSA8PSAwKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gV2UgbXVzdCBhbHdheXMgdXNlIGFuIG9kZCByYWRpdXMuCisgICAgaWYgKGtlcm5lbFNpemUg
JSAyICE9IDEpCisgICAgICAgIGtlcm5lbFNpemUgKz0gMTsKKworICAgIHZJbWFnZV9CdWZmZXIg
ZWZmZWN0SW5CdWZmZXI7CisgICAgZWZmZWN0SW5CdWZmZXIuZGF0YSA9IHN0YXRpY19jYXN0PHZv
aWQqPihpb0J1ZmZlci5kYXRhKCkpOworICAgIGVmZmVjdEluQnVmZmVyLndpZHRoID0gZWZmZWN0
V2lkdGg7CisgICAgZWZmZWN0SW5CdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0OworICAgIGVm
ZmVjdEluQnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOworCisgICAgdkltYWdlX0J1ZmZlciBlZmZl
Y3RPdXRCdWZmZXI7CisgICAgZWZmZWN0T3V0QnVmZmVyLmRhdGEgPSB0ZW1wQnVmZmVyLmRhdGEo
KTsKKyAgICBlZmZlY3RPdXRCdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKKyAgICBlZmZlY3RP
dXRCdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0OworICAgIGVmZmVjdE91dEJ1ZmZlci5yb3dC
eXRlcyA9IHN0cmlkZTsKKworICAgIC8vIERldGVybWluZSB0aGUgc2l6ZSBvZiBhIHRlbXBvcmFy
eSBidWZmZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24gZmlyc3Qgd2l0aCBhIHNwZWNpYWwgZmxh
Zy4gdkltYWdlIHdpbGwgcmV0dXJuCisgICAgLy8gdGhlIHNpemUgbmVlZGVkLCBvciBhbiBlcnJv
ciAod2hpY2ggYXJlIGFsbCBuZWdhdGl2ZSkuCisgICAgc2l6ZV90IHRtcEJ1ZmZlclNpemUgPSB2
SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZm
ZXIsIDAsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5k
IHwga3ZJbWFnZUdldFRlbXBCdWZmZXJTaXplKTsKKyAgICBpZiAodG1wQnVmZmVyU2l6ZSA8PSAw
KQorICAgICAgICByZXR1cm47CisKKyAgICB2b2lkKiB0bXBCdWZmZXIgPSBmYXN0TWFsbG9jKHRt
cEJ1ZmZlclNpemUpOworICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1
ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJu
ZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7CisgICAgdkltYWdlQm94Q29udm9sdmVfQVJH
Qjg4ODgoJmVmZmVjdE91dEJ1ZmZlciwgJmVmZmVjdEluQnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAs
IGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKKyAgICB2SW1h
Z2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIs
IHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VF
eHRlbmQpOworICAgIGZhc3RGcmVlKHRtcEJ1ZmZlcik7CisKKyAgICAvLyBUaGUgZmluYWwgcmVz
dWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCisgICAgQVNTRVJUKGlvQnVmZmVyLmxl
bmd0aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOworICAgIG1lbWNweShpb0J1ZmZlci5kYXRh
KCksIHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Cit9CisjZW5kaWYKKwor
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJVbmFjY2Vs
ZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50
IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlKQoreworICAgIGludCBkeExlZnQgPSAwOworICAgIGludCBkeFJpZ2h0ID0g
MDsKKyAgICBpbnQgZHlMZWZ0ID0gMDsKKyAgICBpbnQgZHlSaWdodCA9IDA7CisgICAgCisgICAg
VWludDhDbGFtcGVkQXJyYXkqIGZyb21CdWZmZXIgPSAmaW9CdWZmZXI7CisgICAgVWludDhDbGFt
cGVkQXJyYXkqIHRvQnVmZmVyID0gJnRlbXBCdWZmZXI7CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDM7ICsraSkgeworICAgICAgICBpZiAoa2VybmVsU2l6ZVgpIHsKKyAgICAgICAgICAgIGtl
cm5lbFBvc2l0aW9uKGksIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQpOworI2lmIEhBVkUo
QVJNX05FT05fSU5UUklOU0lDUykKKyAgICAgICAgICAgIGlmICghaXNBbHBoYUltYWdlKQorICAg
ICAgICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNp
emVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50
U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYm94Qmx1
cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0
LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIHRydWUsIGVk
Z2VNb2RlKTsKKyNlbHNlCisgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZm
ZXIsIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndp
ZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CisjZW5k
aWYKKyAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1ZmZlcik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoa2VybmVsU2l6ZVkpIHsKKyAgICAgICAgICAgIGtlcm5lbFBvc2l0
aW9uKGksIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQpOworI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKKyAgICAgICAgICAgIGlmICghaXNBbHBoYUltYWdlKQorICAgICAgICAgICAg
ICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxl
ZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lk
dGgoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1
ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQs
IHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIHRydWUsIGVkZ2VNb2RlKTsK
KyNlbHNlCisgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5l
bFNpemVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBw
YWludFNpemUud2lkdGgoKSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CisjZW5kaWYKKyAgICAg
ICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1ZmZlcik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIu
CisgICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9tQnVmZmVyKSB7CisgICAgICAgIEFTU0VSVChpb0J1
ZmZlci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5sZW5ndGgoKSk7CisgICAgICAgIG1lbWNweShp
b0J1ZmZlci5kYXRhKCksIGZyb21CdWZmZXItPmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOwor
ICAgIH0KK30KKworaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJv
eEJsdXJHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJy
YXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxT
aXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQoreworICAgIGludCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CisK
KyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkg
JiYgKGVkZ2VNb2RlID09IEVkZ2VNb2RlVHlwZTo6Tm9uZSB8fCBlZGdlTW9kZSA9PSBFZGdlTW9k
ZVR5cGU6OkR1cGxpY2F0ZSkpIHsKKyAgICAgICAgYm94Qmx1ckFjY2VsZXJhdGVkKGlvQnVmZmVy
LCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwg
cGFpbnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisg
ICAgYm94Qmx1clVuYWNjZWxlcmF0ZWQoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNp
emVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1v
ZGUpOworfQorCisjaWYgIVVTRShBQ0NFTEVSQVRFKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0
ZXJzKQoreworICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndpZHRoLCBwYXJhbWV0
ZXJzLT5oZWlnaHQpOworICAgIGJveEJsdXJHZW5lcmljKCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJy
YXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwg
cGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSwgcGFyYW1ldGVycy0+aXNBbHBoYUlt
YWdlLCBwYXJhbWV0ZXJzLT5lZGdlTW9kZSk7Cit9CisjZW5kaWYKKworaW5saW5lIHZvaWQgRkVH
YXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJy
YXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQg
a2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJv
b2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisjaWYgIVVTRShBQ0NF
TEVSQVRFKQorICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKKyAgICBp
bnQgZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNh
bCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCisgICAgaW50IG9wdGltYWxUaHJlYWROdW1i
ZXIgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKG1pbmltYWxS
ZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7CisKKyAgICBp
ZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5
UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZib3hCbHVyV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVt
YmVyKTsKKworICAgICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsK
KyAgICAgICAgaWYgKGpvYnMgPiAxKSB7CisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGlu
dG8gImJsb2NrSGVpZ2h0Ii1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVl
ZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKKyAgICAgICAgICAgIC8vIGJsb2NrSGVpZ2h0
ICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVt
YWluZGVyICJqb2JzV2l0aEV4dHJhIi4KKyAgICAgICAgICAgIGNvbnN0IGludCBibG9ja0hlaWdo
dCA9IHBhaW50U2l6ZS5oZWlnaHQoKSAvIGpvYnM7CisgICAgICAgICAgICBjb25zdCBpbnQgam9i
c1dpdGhFeHRyYSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAlIGpvYnM7CisKKyAgICAgICAgICAgIGlu
dCBjdXJyZW50WSA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBqb2IgPSAwOyBqb2IgPCBqb2Jz
OyBqb2IrKykgeworICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFy
YWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworCisgICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9
ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRyYUhlaWdodDsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWln
aHQ7CisgICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50
WSA6IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7CisKKyAgICAgICAgICAgICAgICBpbnQgYmxvY2tT
aXplID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7CisgICAgICAgICAgICAgICAgaWYgKCFq
b2IpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZl
cjsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxB
cnJheTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuaW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
YmxvY2tTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOworICAgICAg
ICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZl
ci5kYXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBwYXJhbXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsK
KyAgICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKKyAgICAgICAg
ICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVggPSBrZXJuZWxTaXplWDsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMua2VybmVsU2l6ZVkgPSBrZXJuZWxTaXplWTsKKyAgICAgICAgICAgICAgICBwYXJh
bXMuaXNBbHBoYUltYWdlID0gaXNBbHBoYUltYWdlOworICAgICAgICAgICAgICAgIHBhcmFtcy5l
ZGdlTW9kZSA9IGVkZ2VNb2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbGxl
bEpvYnMuZXhlY3V0ZSgpOworCisgICAgICAgICAgICAvLyBDb3B5IHRvZ2V0aGVyIHRoZSBwYXJ0
cyBvZiB0aGUgaW1hZ2UuCisgICAgICAgICAgICBjdXJyZW50WSA9IDA7CisgICAgICAgICAgICBm
b3IgKGludCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgeworICAgICAgICAgICAgICAgIEFw
cGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAg
ICAgICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgaW50IGRlc3Rp
bmF0aW9uT2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgICAg
IGludCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVp
Z2h0ICsgMSA6IGJsb2NrSGVpZ2h0OworCisgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRq
dXN0ZWRCbG9ja0hlaWdodDsKKyAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhl
aWdodCAqIHNjYW5saW5lOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3Vy
cmVudFkgKiBzY2FubGluZTsKKyAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hl
aWdodCAqIHNjYW5saW5lOworCisgICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEo
KSArIGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3Vy
Y2VPZmZzZXQsIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgorICAg
IH0KKyNlbmRpZgorCisgICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxk
IGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICBib3hCbHVyR2VuZXJp
Yyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWlu
dFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworfQorCitib29sIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0c1swXS5nZXQoKTsKKworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9
IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1h
Z2UoKSk7CisKKyAgICBhdXRvIGVmZmVjdERyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBp
bi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3RE
cmF3aW5nUmVjdCk7CisgICAgaWYgKCFtX2VmZmVjdC5zdGREZXZpYXRpb25YKCkgJiYgIW1fZWZm
ZWN0LnN0ZERldmlhdGlvblkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvIGtl
cm5lbFNpemUgPSBtX2VmZmVjdC5jYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX2VmZmVj
dC5zdGREZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKKworICAgIElu
dFNpemUgcGFpbnRTaXplID0gbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Cisg
ICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7CisgICAgaWYgKCF0bXBJbWFnZURhdGEpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhcHBseVBsYXRmb3JtKGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJu
ZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUsIG1fZWZmZWN0LmlzQWxwaGFJbWFnZSgpLCBtX2Vm
ZmVjdC5lZGdlTW9kZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNv
ZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyMjdkMzI3NWMyY2M3YzBjMmNlYjI3N2YzMGQ1
YTY2OTBlMmUwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmgK
QEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVHYXVzc2lhbkJs
dXI7CitlbnVtIGNsYXNzIEVkZ2VNb2RlVHlwZTsKKworY2xhc3MgRkVHYXVzc2lhbkJsdXJTb2Z0
d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFR2F1c3Np
YW5CbHVyPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RUdhdXNzaWFuQmx1cj47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAg
Ym9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVy
cyB7CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OworICAg
ICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7CisgICAgICAgIGlu
dCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKyAgICAgICAgdW5zaWduZWQga2VybmVsU2l6
ZVg7CisgICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOworICAgICAgICBib29sIGlzQWxwaGFJ
bWFnZTsKKyAgICAgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOworICAgIH07CisKKyAgICBzdGF0
aWMgaW5saW5lIHZvaWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVk
JiByYWRpdXMsIGludCYgZGVsdGFMZWZ0LCBpbnQmIGRlbHRhUmlnaHQpOworCisgICAgc3RhdGlj
IGlubGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNy
Y1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBk
eCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGlu
ZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2Vy
bmVsU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5
LCB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBz
dHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJ
bWFnZSwgRWRnZU1vZGVUeXBlKTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWNj
ZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYg
dGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdp
ZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1clVu
YWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJh
eSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZ
LCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdl
TW9kZVR5cGUpOworCisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJHZW5lcmljKFVpbnQ4
Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXks
IHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFp
bnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgYm94Qmx1cldvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsKKworICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWlu
dDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNp
Z25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwg
RWRnZU1vZGVUeXBlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYxOGY2MDg4MzE5ODRjY2FjNmM0ODY5MWI1MTZiYWNlMDg0MDFkNjYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsNDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgWm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkZFTGlnaHRp
bmcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
CisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6
dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBjZW50ZXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0gd2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90
dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC0yICog
Y2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCisgICAgICAgIC0yICog
Y2VudGVyIC0gcmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKKyAgICB9OworfQorCitp
bmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRv
cFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAg
IGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0g
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OworICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHsK
KyAgICAgICAgLTIgKiBsZWZ0ICsgMiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0
LAorICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICog
Ym90dG9tICsgYm90dG9tUmlnaHQKKyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0Cit7CisgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBj
ZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwor
ICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOworICAgIHJldHVybiB7CisgICAgICAgIC0yICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0
b21MZWZ0ICsgYm90dG9tLAorICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgKyBib3R0b21MZWZ0
ICsgMiAqIGJvdHRvbQorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBj
b25zdAoreworICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKKyAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAg
aW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
IG9mZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRv
bSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJl
dHVybiB7CisgICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIgKyAyICogcmlnaHQg
LSBib3R0b20gKyBib3R0b21SaWdodCwKKyAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIg
KiBib3R0b20gKyBib3R0b21SaWdodAorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIEZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9m
ZnNldCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25zdAoreworICAgIGludCByaWdodEFs
cGhhT2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQ7Cisg
ICAgCisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRB
bHBoYU9mZnNldCkpOworICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOwor
ICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0
QWxwaGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOworCisgICAgaW50IGxl
ZnQgPSBhbHBoYVdpbmRvdy5sZWZ0KCk7CisgICAgaW50IHRvcExlZnQgPSBhbHBoYVdpbmRvdy50
b3BMZWZ0KCk7CisgICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRvcCgpOworCisgICAgaW50IGJv
dHRvbUxlZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7CisgICAgaW50IGJvdHRvbSA9IGFs
cGhhV2luZG93LmJvdHRvbSgpOworCisgICAgLy8gVGhlIGFscGhhV2luZG93IGhhcyBiZWVuIHNo
aWZ0ZWQsIGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4KKyAgICBhbHBoYVdp
bmRvdy5hbHBoYVswXVsyXSA9IHRvcFJpZ2h0OworICAgIGFscGhhV2luZG93LmFscGhhWzFdWzJd
ID0gcmlnaHQ7CisgICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0b21SaWdodDsKKyAg
ICAKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBpcyB3b3JraW5nIHdpdGggc29t
ZSBzcG90LWNoZWNrcy4KKyAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVmdCgpID09IHBpeGVs
cy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKKyAgICBBU1NFUlQoYWxwaGFXaW5k
b3cudG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKKworICAgIHJldHVybiB7CisgICAg
ICAgIC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxl
ZnQgKyBib3R0b21SaWdodCwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQg
KyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAgfTsKK30KKworaW5s
aW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpyaWdo
dENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOworICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBp
bnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wIC0g
MiAqIGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKKyAgICAgICAgLXRv
cExlZnQgLSAyICogdG9wICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KKyAgICB9OworfQorCitp
bmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJv
dHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgY2VudGVyID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0IC09IHdpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcFJp
Z2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtdG9wICsgdG9w
UmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0LAorICAgICAgICAtMiAqIHRvcCAtIHRvcFJp
Z2h0ICsgMiAqIGNlbnRlciArIHJpZ2h0CisgICAgfTsKK30KKworaW5saW5lIEludFNpemUgRkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50
IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
IG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgdG9wUmlnaHQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9w
UmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9w
IC0gdG9wUmlnaHQgKyBsZWZ0ICsgMiAqIGNlbnRlciArIHJpZ2h0CisgICAgfTsKK30KKworaW5s
aW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0
b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtdG9wTGVmdCArIHRv
cCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9wICsg
bGVmdCArIDIgKiBjZW50ZXIKKyAgICB9OworfQorCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFw
cGxpZXI6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBk
YXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4
LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZl
Y3RvciwgZmxvYXQgYWxwaGEpCit7CisgICAgZmxvYXQgeiA9IGFscGhhICogZGF0YS5zdXJmYWNl
U2NhbGU7CisgICAgTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0aW5nRGF0
YSA9IGRhdGEubGlnaHRTb3VyY2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWludGluZ0Rh
dGEsIHgsIHksIHopOworCisgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKKyAgICBpZiAobm9ybWFs
MkRWZWN0b3IuaXNaZXJvKCkpIHsKKyAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAoMCwgMCwg
MSkuIFRoaXMgaXMgYSBxdWl0ZSBmcmVxdWVudCBjYXNlLgorICAgICAgICBpZiAoZGF0YS5lZmZl
Y3QtPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5n
KQorICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogbGln
aHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSAvIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0
aDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3Rv
ciA9IHsKKyAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAorICAg
ICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci55KCksCisgICAgICAgICAgICAg
ICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rv
ckxlbmd0aAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JM
ZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKGRhdGEuc3Bl
Y3VsYXJFeHBvbmVudCA9PSAxKQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRh
LnNwZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5n
dGg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRh
dGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVj
dG9yTGVuZ3RoLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvciA9IHsKKyAgICAgICAgICAgIGZh
Y3RvclggKiBub3JtYWwyRFZlY3Rvci53aWR0aCgpICogZGF0YS5zdXJmYWNlU2NhbGUsCisgICAg
ICAgICAgICBmYWN0b3JZICogbm9ybWFsMkRWZWN0b3IuaGVpZ2h0KCkgKiBkYXRhLnN1cmZhY2VT
Y2FsZSwKKyAgICAgICAgICAgIDEuMGYKKyAgICAgICAgfTsKKyAgICAgICAgZmxvYXQgbm9ybWFs
VmVjdG9yTGVuZ3RoID0gbm9ybWFsVmVjdG9yLmxlbmd0aCgpOworCisgICAgICAgIGlmIChkYXRh
LmVmZmVjdC0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGln
aHRpbmcpCisgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5kaWZmdXNlQ29uc3RhbnQg
KiAobm9ybWFsVmVjdG9yICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3JtYWxWZWN0
b3JMZW5ndGggKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0geworICAgICAgICAg
ICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCisgICAgICAgICAgICAgICAgbGln
aHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnkoKSwKKyAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3IueigpICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlW
ZWN0b3IubGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoZGF0YS5zcGVjdWxhckV4cG9uZW50ID09
IDEpCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFu
dCAqIChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGgg
KiBoYWxmd2F5VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBsaWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogcG93Zigobm9ybWFsVmVj
dG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rv
ckxlbmd0aCksIGRhdGEuc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobGlnaHRTdHJlbmd0aCA+IDEpCisgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxOworICAg
IGlmIChsaWdodFN0cmVuZ3RoIDwgMCkKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDA7CisKKyAg
ICB1aW50OF90IHBpeGVsVmFsdWVbM10gPSB7CisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueCgpICogMjU1LjBmKSwK
KyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0
YS5jb2xvclZlY3Rvci55KCkgKiAyNTUuMGYpLAorICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90
PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLnooKSAqIDI1NS4wZikK
KyAgICB9OworICAgIAorICAgIGRhdGEucGl4ZWxzLT5zZXRSYW5nZShwaXhlbFZhbHVlLCAzLCBv
ZmZzZXQpOworfQorCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OnNldFBpeGVsKGlu
dCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZs
b2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCit7CisgICAgc2V0UGl4ZWxJbnRl
cm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwg
bm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKK30KKworLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8g
dGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5l
bCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgordm9pZCBGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0
YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBp
bnQgc3RhcnRZLCBpbnQgZW5kWSkKK3sKKyAgICAvLyBNYWtlIHN1cmUgc3RhcnRZIGlzID4gMCBz
aW5jZSB3ZSByZWFkIGZyb20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4KKyAgICBBU1NF
UlQoc3RhcnRZKTsKKyAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CisKKyAgICBmb3IgKGludCB5
ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CisgICAgICAgIGludCByb3dTdGFydE9mZnNldCA9
IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBpbnQgcHJldmlv
dXNSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKKyAgICAgICAgaW50IG5leHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKworICAgICAgICAvLyBhbHBoYVdpbmRvdyBpcyBh
IGxvY2FsIGNhY2hlIG9mIGFscGhhIHZhbHVlcy4KKyAgICAgICAgLy8gRmlsbCB0aGUgdHdvIHJp
Z2h0IGNvbHVtbnMgcHV0dGluZyB0aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBjZW50ZXIgY29s
dW1uLgorICAgICAgICAvLyBGb3IgZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0
aGVuIGZpbGwgdGhlIHJpZ2h0IGNvbHVtbi4KKyAgICAgICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5k
b3c7CisgICAgICAgIGFscGhhV2luZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91
c1Jvd1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBhbHBoYVdpbmRvdy5z
ZXRUb3BSaWdodChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKworICAgICAgICBhbHBoYVdpbmRvdy5zZXRDZW50
ZXIoZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CisgICAgICAgIGFscGhhV2luZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0
YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKworICAgICAg
ICBhbHBoYVdpbmRvdy5zZXRCb3R0b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdo
dChkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworCisgICAgICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQ
aXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsr
eCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIGFscGhhV2luZG93LnNoaWZ0
KCk7CisgICAgICAgICAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdE
YXRhLCB4LCB5LCBjRmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRlcmlvck5vcm1h
bChvZmZzZXQsIGFscGhhV2luZG93KSwgYWxwaGFXaW5kb3cuY2VudGVyKCkpOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm1HZW5lcmljV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKK3sKKyAgICBhcHBs
eVBsYXRmb3JtR2VuZXJpY1BhaW50KHBhcmFtZXRlcnMtPmRhdGEsIHBhcmFtZXRlcnMtPnBhaW50
aW5nRGF0YSwgcGFyYW1ldGVycy0+eVN0YXJ0LCBwYXJhbWV0ZXJzLT55RW5kKTsKK30KKworI2lm
ICEoQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0Nf
Q09NUEFUSUJMRSkpCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm1HZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQoreworICAgIHVuc2lnbmVkIHJvd3NUb1Byb2Nlc3Mg
PSBkYXRhLmhlaWdodCAtIDI7CisgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJvd3NUb1By
b2Nlc3MgLyA4OworICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbmltYWxSZWN0RGlt
ZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwg
am9icworICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25l
ZD4oKChkYXRhLndpZHRoIC0gMikgKiByb3dzVG9Qcm9jZXNzKSAvIG1pbmltYWxSZWN0RGltZW5z
aW9uLCBtYXhOdW1UaHJlYWRzKTsKKworICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkg
eworICAgICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKKyAgICAgICAgUGFyYWxsZWxK
b2JzPEFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZhcHBseVBsYXRmb3JtR2VuZXJpY1dv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1l
dGVyIGFycmF5CisgICAgICAgIGludCBqb2IgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7
CisgICAgICAgIGlmIChqb2IgPiAxKSB7CisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGlu
dG8gInlTdGVwIi1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBi
ZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKKyAgICAgICAgICAgIC8vIHlTdGVwICogam9icyA8IHRv
dGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2Jz
V2l0aEV4dHJhIi4KKyAgICAgICAgICAgIGNvbnN0IGludCB5U3RlcCA9IHJvd3NUb1Byb2Nlc3Mg
LyBqb2I7CisgICAgICAgICAgICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9IHJvd3NUb1Byb2Nl
c3MgJSBqb2I7CisKKyAgICAgICAgICAgIGludCB5U3RhcnQgPSAxOworICAgICAgICAgICAgZm9y
ICgtLWpvYjsgam9iID49IDA7IC0tam9iKSB7CisgICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7CisgICAgICAgICAgICAg
ICAgcGFyYW1zLmRhdGEgPSBkYXRhOworICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0Rh
dGEgPSBwYWludGluZ0RhdGE7CisgICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFy
dDsKKyAgICAgICAgICAgICAgICB5U3RhcnQgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IHlTdGVw
ICsgMSA6IHlTdGVwOworICAgICAgICAgICAgICAgIHBhcmFtcy55RW5kID0geVN0YXJ0OworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhy
ZWFkZWQgbW9kZS4KKyAgICB9CisKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGRhdGEs
IHBhaW50aW5nRGF0YSwgMSwgZGF0YS5oZWlnaHQgLSAxKTsKK30KKyNlbmRpZgorCit2b2lkIEZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgTGlnaHRpbmdEYXRh
JiBkYXRhKQoreworICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwor
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBkYXRhLmxpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBv
bmVudHNJbkNvbG9yU3BhY2UoKmRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSk7CisgICAgcGFpbnRp
bmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0Qociwg
ZywgYik7CisKKyAgICBkYXRhLmxpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCpkYXRhLmVm
ZmVjdCwgcGFpbnRpbmdEYXRhKTsKKworICAgIC8vIFRvcCBsZWZ0LgorICAgIGludCBvZmZzZXQg
PSAwOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCAwLCBjRmFj
dG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNldCkpOworCisg
ICAgLy8gVG9wIHJpZ2h0LgorICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemUgLSBjUGl4ZWxTaXplOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdE
YXRhLCBkYXRhLndpZHRoIC0gMSwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEu
dG9wUmlnaHROb3JtYWwob2Zmc2V0KSk7CisKKyAgICAvLyBCb3R0b20gbGVmdC4KKyAgICBvZmZz
ZXQgPSAoZGF0YS5oZWlnaHQgLSAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7
CisgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0
IC0gMSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tTGVmdE5vcm1hbChv
ZmZzZXQpKTsKKworICAgIC8vIEJvdHRvbSByaWdodC4KKyAgICBvZmZzZXQgPSBkYXRhLmhlaWdo
dCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIHNl
dFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoIC0gMSwgZGF0YS5o
ZWlnaHQgLSAxLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5v
cm1hbChvZmZzZXQpKTsKKworICAgIGlmIChkYXRhLndpZHRoID49IDMpIHsKKyAgICAgICAgLy8g
VG9wIHJvdy4KKyAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQg
eCA9IDE7IHggPCBkYXRhLndpZHRoIC0gMTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKKyAg
ICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCAwLCBjRmFj
dG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS50b3BSb3dOb3JtYWwob2Zmc2V0KSk7CisKKyAg
ICAgICAgLy8gQm90dG9tIHJvdy4KKyAgICAgICAgb2Zmc2V0ID0gKGRhdGEuaGVpZ2h0IC0gMSkg
KiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKKyAgICAgICAg
Zm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoIC0gMTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVs
U2l6ZSkKKyAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4
LCBkYXRhLmhlaWdodCAtIDEsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRhLmJvdHRv
bVJvd05vcm1hbChvZmZzZXQpKTsKKyAgICB9CisKKyAgICBpZiAoZGF0YS5oZWlnaHQgPj0gMykg
eworICAgICAgICAvLyBMZWZ0IGNvbHVtbi4KKyAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhl
aWdodCAtIDE7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUp
CisgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwg
Y0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQp
KTsKKworICAgICAgICAvLyBSaWdodCBjb2x1bW4uCisgICAgICAgIG9mZnNldCA9IDIgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChp
bnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodCAtIDE7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemUpCisgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEs
IHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFk
aXYzLCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOworICAgIH0KKworICAgIGlmIChk
YXRhLndpZHRoID49IDMgJiYgZGF0YS5oZWlnaHQgPj0gMykgeworICAgICAgICAvLyBJbnRlcmlv
ciBwaXhlbHMuCisgICAgICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0
YSk7CisgICAgfQorCisgICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgKiBkYXRhLmhlaWdodDsKKyAgICBpZiAoZGF0YS5lZmZlY3QtPmZpbHRlclR5cGUo
KSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSBjQWxwaGFDaGFubmVsT2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhl
bFNpemUpCisgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0g
Y1BpeGVsU2l6ZSkgeworICAgICAgICAgICAgdWludDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVt
KGkpOworICAgICAgICAgICAgdWludDhfdCBhMiA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsK
KyAgICAgICAgICAgIHVpbnQ4X3QgYTMgPSBkYXRhLnBpeGVscy0+aXRlbShpICsgMik7CisgICAg
ICAgICAgICAvLyBhbHBoYSBzZXQgdG8gc2V0IHRvIG1heChhMSwgYTIsIGEzKQorICAgICAgICAg
ICAgZGF0YS5waXhlbHMtPnNldChpICsgMywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEz
KSA6IChhMiA+PSBhMyA/IGEyIDogYTMpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3RzWzBdLmdldCgpOworCisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
ID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2Uo
ZmFsc2UpOworCisgICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
aW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0
RHJhd2luZ1JlY3QpOworCisgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMg
b3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKKyAgICAvLyBz
dGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxp
a2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKKyAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVs
VW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgorICAgIC8v
IEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0
aW9uCisKKyAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKG1fZWZmZWN0LmFic29sdXRlUGFpbnRS
ZWN0KCkuc2l6ZSgpKTsKKworICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3Ig
aGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgorICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90
IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KKyAgICBpZiAo
c2l6ZS53aWR0aCgpIDw9IDIgfHwgc2l6ZS5oZWlnaHQoKSA8PSAyKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIExpZ2h0aW5nRGF0YSBkYXRhOworICAgIGRhdGEuZWZmZWN0ID0gJm1fZWZm
ZWN0OworICAgIGRhdGEuZmlsdGVyVHlwZSA9IG1fZWZmZWN0LmZpbHRlclR5cGUoKTsKKyAgICBk
YXRhLmxpZ2h0aW5nQ29sb3IgPSBtX2VmZmVjdC5saWdodGluZ0NvbG9yKCk7CisgICAgZGF0YS5z
dXJmYWNlU2NhbGUgPSBtX2VmZmVjdC5zdXJmYWNlU2NhbGUoKSAvIDI1NS4wZjsKKyAgICBkYXRh
LmRpZmZ1c2VDb25zdGFudCA9IG1fZWZmZWN0LmRpZmZ1c2VDb25zdGFudCgpOworICAgIGRhdGEu
c3BlY3VsYXJDb25zdGFudCA9IG1fZWZmZWN0LnNwZWN1bGFyQ29uc3RhbnQoKTsKKyAgICBkYXRh
LnNwZWN1bGFyRXhwb25lbnQgPSBtX2VmZmVjdC5zcGVjdWxhckV4cG9uZW50KCk7CisgICAgZGF0
YS5saWdodFNvdXJjZSA9ICZtX2VmZmVjdC5saWdodFNvdXJjZSgpOworICAgIGRhdGEub3BlcmF0
aW5nQ29sb3JTcGFjZSA9ICZtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCk7CisKKyAgICBk
YXRhLnBpeGVscyA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CisgICAgZGF0YS53aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZSA9IHNpemUud2lkdGgoKSAqIGNQaXhlbFNpemU7CisgICAgZGF0YS53
aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBkYXRhLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisK
KyAgICBhcHBseVBsYXRmb3JtKGRhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1Nv
ZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1MWI4MzllZWY3NjNlYjE1MDkzZjI3YWY0NzQ4
MjllNmRmNWE3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaApAQCAt
MCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6
ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJMaWdodFNvdXJjZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFTGlnaHRpbmc7CisKK2NsYXNzIEZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBs
aWVyPEZFTGlnaHRpbmc+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVB
cHBsaWVyPEZFTGlnaHRpbmc+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIg
aW50IGNQaXhlbFNpemUgPSA0OworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5u
ZWxPZmZzZXQgPSAzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEg
PSBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGKTsKKworICAgIC8vIFRoZXNlIGZhY3RvcnMgYW5k
IHRoZSBub3JtYWwgY29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0cHM6
Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
LgorICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYyID0gLTEgLyAyLmY7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjMgPSAtMSAvIDMuZjsKKyAgICBz
dGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0xIC8gNC5mOworICAgIHN0YXRp
YyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYzID0gLTIgLyAzLmY7CisKKyAgICBzdHJ1Y3Qg
QWxwaGFXaW5kb3cgeworICAgICAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsKKyAgICAKKyAg
ICAgICAgLy8gVGhlIGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFrZSBjb21wYXJp
bmcgaW5kaWNlcyBlYXNpZXIuCisgICAgICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9CisgICAgICAgIHVpbnQ4X3QgbGVmdCgpIGNv
bnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9CisgICAgICAgIHVpbnQ4
X3QgYm90dG9tTGVmdCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzBdOyB9CisK
KyAgICAgICAgdWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxw
aGFbMF1bMV07IH0KKyAgICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMV1bMV07IH0KKyAgICAgICAgdWludDhfdCBib3R0b20oKSBjb25zdCAg
ICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMV07IH0KKworICAgICAgICB2b2lkIHNldFRv
cCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KKyAgICAg
ICAgdm9pZCBzZXRDZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZh
bHVlOyB9CisgICAgICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxw
aGFbMl1bMV0gPSB2YWx1ZTsgfQorCisgICAgICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2
YWx1ZSkgICAgIHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldFJpZ2h0
KHVpbnQ4X3QgdmFsdWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KKyAgICAgICAg
dm9pZCBzZXRCb3R0b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsyXSA9IHZhbHVl
OyB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKKyAg
ICAgICAgeworICAgICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKKyAgICAgICAgICAgIGFs
cGhhWzFdID0gYWxwaGFbMl07CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBzaGlmdCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKKyAgICAgICAgICAg
IHNoaWZ0Um93KGFscGhhWzFdKTsKKyAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKKyAgICAgICAgLy8g
VGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCisg
ICAgICAgIEZFTGlnaHRpbmcqIGVmZmVjdDsKKyAgICAgICAgRmlsdGVyRWZmZWN0OjpUeXBlIGZp
bHRlclR5cGU7CisgICAgICAgIENvbG9yIGxpZ2h0aW5nQ29sb3I7CisgICAgICAgIGZsb2F0IHN1
cmZhY2VTY2FsZTsKKyAgICAgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50OworICAgICAgICBmbG9h
dCBzcGVjdWxhckNvbnN0YW50OworICAgICAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50OworICAg
ICAgICBjb25zdCBMaWdodFNvdXJjZSogbGlnaHRTb3VyY2U7CisgICAgICAgIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSogb3BlcmF0aW5nQ29sb3JTcGFjZTsKKworICAgICAgICBVaW50OENs
YW1wZWRBcnJheSogcGl4ZWxzOworICAgICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emU7CisgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKworICAgICAgICBp
bmxpbmUgSW50U2l6ZSB0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBp
bmxpbmUgSW50U2l6ZSB0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlu
bGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBp
bmxpbmUgSW50U2l6ZSBsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAg
ICBpbmxpbmUgSW50U2l6ZSBpbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYp
IGNvbnN0OworICAgICAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChpbnQgb2Zm
c2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tTGVmdE5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUm93Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdodE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICB9OworCisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVy
cyB7CisgICAgICAgIExpZ2h0aW5nRGF0YSBkYXRhOworICAgICAgICBMaWdodFNvdXJjZTo6UGFp
bnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICAgICAgaW50IHlTdGFydDsKKyAgICAgICAgaW50
IHlFbmQ7CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9m
ZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0
YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBu
b3JtYWwyRFZlY3RvciwgZmxvYXQgYWxwaGEpOworICAgIHN0YXRpYyB2b2lkIHNldFBpeGVsKGlu
dCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNp
emUgbm9ybWFsMkRWZWN0b3IpOworCisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVy
aWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdE
YXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZv
cm1HZW5lcmljV29ya2VyKEFwcGx5UGFyYW1ldGVycyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5
UGxhdGZvcm1HZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQ
YWludGluZ0RhdGEmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0IExpZ2h0
aW5nRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29m
dHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDVkNGFh
YjZkODY2ZWU0ZTlhOGNlYzQ0ZjVlY2QwODJhZGRhM2E5NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNv
ZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVNZXJnZVNvZnR3YXJlQXBwbGllci5oIgorCisj
aW5jbHVkZSAiRkVNZXJnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRU1lcmdl
U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBBU1NFUlQoaW5wdXRFZmZlY3RzLnNpemUoKSA+
IDApOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBmb3Ig
KGF1dG8mIGluIDogaW5wdXRFZmZlY3RzKSB7CisgICAgICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICAgICAgaWYgKCFpbkJ1ZmZlcikKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZm
ZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MjFkODQ0N2U1Yzk3ZmE0Zjk0ODM1ZjZiODgxMDZiNWY4ZWRhY2U3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAyMSBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxp
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRU1lcmdlOworCitjbGFzcyBG
RU1lcmdlU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxGRU1lcmdlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxGRU1lcmdlPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29s
IGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZl
Y3RzKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3Jw
aG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hMDg1ZjUwY2VhZGZmZmFlMDYwMWJjMGUyYTdjNGNiOTQyN2MzNzJiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsMTk4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5j
LiAyMDE3LTIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiQ29sb3JD
b21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgorI2luY2x1ZGUgIkZFTW9ycGhv
bG9neS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisj
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIs
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlOjpFcm9kZSkKKyAgICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihh
LCBiKTsKKworICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7Cit9CisKK2lubGluZSBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpj
b2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50
IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgdHlwZSkKK3sKKyAgICBhdXRvIGV4dHJlbXVtID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21Q
aXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5U3RhcnQs
IHdpZHRoKSkgfSk7CisKKyAgICBmb3IgKGludCB5ID0geVN0YXJ0ICsgMTsgeSA8IHlFbmQ7ICsr
eSkgeworICAgICAgICBhdXRvIHBpeGVsID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZh
bHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQq
PihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpIH0p
OworICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4KGV4dHJlbXVtLCBwaXhlbCwgdHlwZSk7Cisg
ICAgfQorICAgIHJldHVybiBleHRyZW11bTsKK30KKworaW5saW5lIENvbG9yQ29tcG9uZW50czx1
aW50OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbEV4dHJlbXVtKGNv
bnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQor
eworICAgIGF1dG8gZXh0cmVtdW0gPSBrZXJuZWxbMF07CisgICAgZm9yIChzaXplX3QgaSA9IDE7
IGkgPCBrZXJuZWwuc2l6ZSgpOyArK2kpCisgICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXgoZXh0
cmVtdW0sIGtlcm5lbFtpXSwgdHlwZSk7CisKKyAgICByZXR1cm4gZXh0cmVtdW07Cit9CisKK3Zv
aWQgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit7Cisg
ICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOworCisgICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJh
eSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5
ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OworCisgICAgY29uc3QgaW50IHJhZGl1c1gg
PSBwYWludGluZ0RhdGEucmFkaXVzWDsKKyAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5n
RGF0YS5yYWRpdXNZOworICAgIGNvbnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsK
KyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKKworICAgIEFTU0VS
VChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVpZ2h0KTsKKyAgICBBU1NFUlQoc3Rh
cnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7CisKKyAgICBDb2x1
bW5FeHRyZW1hIGV4dHJlbWE7CisgICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIg
KiByYWRpdXNYICsgMSk7CisKKyAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5
KSB7CisgICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7
CisgICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSAr
IDEpOworCisgICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOworCisgICAgICAgIC8vIFdlIHN0YXJ0
IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29s
dW1ucy4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCisgICAgICAg
ICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFk
aXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEudHlwZSkpOworCisgICAg
ICAgIC8vIEtlcm5lbCBpcyBmaWxsZWQsIGdldCBleHRyZW1hIG9mIG5leHQgY29sdW1uCisgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgeworICAgICAgICAgICAgaWYgKHgg
PCB3aWR0aCAtIHJhZGl1c1gpCisgICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1u
RXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCArIHJhZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1
c0VuZCwgd2lkdGgsIHBhaW50aW5nRGF0YS50eXBlKSk7CisKKyAgICAgICAgICAgIGlmICh4ID4g
cmFkaXVzWCkKKyAgICAgICAgICAgICAgICBleHRyZW1hLnJlbW92ZSgwKTsKKworICAgICAgICAg
ICAgdW5zaWduZWQqIGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQ
aXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpOworICAgICAg
ICAgICAgKmRlc3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJu
ZWxFeHRyZW11bShleHRyZW1hLCBwYWludGluZ0RhdGEudHlwZSkpLnZhbHVlOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtcykKK3sKKyAgICBhcHBseVBsYXRmb3Jt
R2VuZXJpYygqcGFyYW1zLT5wYWludGluZ0RhdGEsIHBhcmFtcy0+c3RhcnRZLCBwYXJhbXMtPmVu
ZFkpOworfQorCit2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3sKKyAgICAvLyBFbXBpcmljYWxs
eSwgcnVudGltZSBpcyBhcHByb3hpbWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNvbmFibGUga2VybmVs
IHNpemVzIHdpdGggYSBzbG9wZSBvZiBhYm91dCAwLjY1LgorICAgIGZsb2F0IGtlcm5lbEZhY3Rv
ciA9IHNxcnQocGFpbnRpbmdEYXRhLnJhZGl1c1ggKiBwYWludGluZ0RhdGEucmFkaXVzWSkgKiAw
LjY1OworCisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbWFsQXJlYSA9ICgxNjAgKiAxNjApOyAv
LyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIAorICAgIHVuc2ln
bmVkIG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25l
ZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEu
d2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVh
LCBtYXhOdW1UaHJlYWRzKTsKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAg
ICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZhcHBseVBs
YXRmb3JtV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgYXV0byBudW1PZlRo
cmVhZHMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisgICAgICAgIGlmIChudW1PZlRo
cmVhZHMgPiAxKSB7CisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImpvYlNpemUi
LXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5
IGxhcmdlciBzaW5jZQorICAgICAgICAgICAgLy8gam9iU2l6ZSAqIGpvYnMgPCB0b3RhbCBzaXpl
LiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRy
YSIuCisgICAgICAgICAgICBpbnQgam9iU2l6ZSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyBudW1P
ZlRocmVhZHM7CisgICAgICAgICAgICBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50aW5nRGF0YS5o
ZWlnaHQgJSBudW1PZlRocmVhZHM7CisgICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOworICAg
ICAgICAgICAgZm9yIChpbnQgam9iID0gbnVtT2ZUaHJlYWRzIC0gMTsgam9iID49IDA7IC0tam9i
KSB7CisgICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9i
cy5wYXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50
WTsKKyAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9i
U2l6ZSArIDEgOiBqb2JTaXplOworICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50
WTsKKyAgICAgICAgICAgICAgICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUg
dGhyZWFkIG1vZGVsCisgICAgfQorCisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMocGFpbnRpbmdE
YXRhLCAwLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKK30KKworYm9vbCBGRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3RzWzBdLmdldCgpOworCisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9l
ZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgp
KTsKKworICAgIGF1dG8gaXNEZWdlbmVyYXRlID0gW10oaW50IHJhZGl1c1gsIGludCByYWRpdXNZ
KSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAwIHx8
ICghcmFkaXVzWCAmJiAhcmFkaXVzWSk7CisgICAgfTsKKworICAgIEludFJlY3QgZWZmZWN0RHJh
d2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNp
emUoRmxvYXRTaXplKG1fZWZmZWN0LnJhZGl1c1goKSwgbV9lZmZlY3QucmFkaXVzWSgpKSk7CisK
KyAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKSB7
CisgICAgICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBt
X2VmZmVjdC5yYWRpdXNYKCksIG1fZWZmZWN0LnJhZGl1c1koKSB9KSk7CisgICAgaW50IHJhZGl1
c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRo
KCkpOworICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0
KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOworCisgICAgaWYgKGlzRGVnZW5lcmF0ZShyYWRpdXNY
LCByYWRpdXNZKSkgeworICAgICAgICBpbi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3aW5nUmVjdCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZm
ZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0RHJh
d2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFzb3Vy
Y2VQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgc291cmNl
UGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAg
UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBwYWludGluZ0RhdGEudHlwZSA9IG1fZWZm
ZWN0Lm1vcnBob2xvZ3lPcGVyYXRvcigpOworICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
ID0gJnNvdXJjZVBpeGVsQXJyYXk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAm
ZGVzdGluYXRpb25QaXhlbEFycmF5OworICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVm
ZmVjdERyYXdpbmdSZWN0LndpZHRoKCkpOworICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWls
ZihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSk7CisgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1gg
PSBjZWlsZihyYWRpdXNYKTsKKyAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1
c1kpOworCisgICAgYXBwbHlQbGF0Zm9ybShwYWludGluZ0RhdGEpOworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJl
QXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NDlkNjkwM2Rm
Yzc4ZjY4ZjM3NWE2NjAwZGY5NjBkMTA3ZTQ4ODE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0QXBwbGllci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRU1vcnBob2xvZ3k7CitlbnVtIGNsYXNzIE1v
cnBob2xvZ3lPcGVyYXRvclR5cGU7CisKK2NsYXNzIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
ciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNb3JwaG9sb2d5PiB7Cisg
ICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRU1vcnBob2xvZ3k+
OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIHVzaW5nIENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+LCAxNj47CisKKyAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsK
KyAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlOworICAgICAgICBpbnQgcmFkaXVz
WDsKKyAgICAgICAgaW50IHJhZGl1c1k7CisgICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
KiBzcmNQaXhlbEFycmF5OworICAgICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJh
eTsKKyAgICAgICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworICAgIH07CisKKyAg
ICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKKyAgICAgICAgY29uc3QgUGFpbnRpbmdEYXRhKiBw
YWludGluZ0RhdGE7CisgICAgICAgIGludCBzdGFydFk7CisgICAgICAgIGludCBlbmRZOworICAg
IH07CisKKyAgICBzdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5
LCBpbnQgd2lkdGgpIHsgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7IH0KKyAgICBzdGF0aWMg
aW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50
cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpIHsgcmV0dXJu
IFBhY2tlZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihj
b21wb25lbnRzKSB9OyB9CisKKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJH
QkEgcGl4ZWwpIHsgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsgfQor
ICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKyAgICBzdGF0aWMgaW5s
aW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5k
LCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOworICAgIHN0YXRpYyBpbmxpbmUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4
dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBp
bnQgZW5kWSk7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFt
ZXRlcnMqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0IFBhaW50aW5nRGF0
YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJl
QXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNDdmOGZlMjkw
ZDYxOWQ1NmYxYjU2ZmY0ZmQ2MWE1OWQ2NzZjMWZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3
YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFT2Zmc2V0U29mdHdhcmVBcHBs
aWVyLmgiCisKKyNpbmNsdWRlICJGRU9mZnNldC5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRU9mZnNldFNvZnR3YXJlQXBwbGllcjo6YXBwbHko
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZl
Y3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisK
KyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAg
ICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1
bHRJbWFnZSB8fCAhaW5CdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZWZm
ZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworCisgICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWdpb24gPSBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5keCgpLCBtX2VmZmVjdC5keSgpIH0pKTsKKyAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdS
ZWdpb24pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYzNmZDg0ZjI1NDdmMGJiMjRhNDI5ZTcxNmU3MTcwMmIzZTMyYmE0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU9mZnNldFNvZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFT2Zmc2V0OworCitjbGFzcyBGRU9m
ZnNldFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
RkVPZmZzZXQ+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVy
PEZFT2Zmc2V0PjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29s
IGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZl
Y3RzKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxl
U29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kM2Ex
Y2Y2NDlmNTZmZDk0N2NhMWQ0YzRkYjkwYTJkYTkzNGRiYzM0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVT
b2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQWxleCBNYXRoZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRkVUaWxlU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGRVRpbGUuaCIKKyNpbmNsdWRlICJGaWx0
ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgi
CisjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2Jvb2wgRkVUaWxlU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKworICAgIGF1dG8gcmVzdWx0SW1h
Z2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW5CdWZmZXIgPSBp
bi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdl
KGluLT5pc0FscGhhSW1hZ2UoKSk7CisKKyAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBh
dHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0
aGUKKyAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBw
YXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCisgICAgRmxvYXRSZWN0
IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKKyAgICBGbG9hdFBvaW50IGluTWF4RWZm
ZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOworICAgIEZsb2F0UG9pbnQgbWF4RWZm
ZWN0TG9jYXRpb24gPSBtX2VmZmVjdC5tYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKKyAgICBp
ZiAoaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMg
fHwgaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKSB7
CisgICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOworICAgICAgICB0aWxl
UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgfQorCisgICAgLy8gRklYTUU6
IHJlbW92ZSB0aGlzIG5vbi1wYWx0Zm9ybSBjYWxsLgorICAgIGF1dG8gdGlsZUltYWdlID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSk7Cisg
ICAgaWYgKCF0aWxlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNz
Q29udGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOworICAgIHRp
bGVJbWFnZUNvbnRleHQudHJhbnNsYXRlKC1pbk1heEVmZmVjdExvY2F0aW9uLngoKSwgLWluTWF4
RWZmZWN0TG9jYXRpb24ueSgpKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW5CdWZmZXIsIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOworCisgICAg
YXV0byB0aWxlSW1hZ2VDb3B5ID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RG
TW92ZSh0aWxlSW1hZ2UpKTsKKyAgICBpZiAoIXRpbGVJbWFnZUNvcHkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOworICAgIHBh
dHRlcm5UcmFuc2Zvcm0udHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RM
b2NhdGlvbik7CisKKyAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdl
Q29weS5yZWxlYXNlTm9uTnVsbCgpLCB7IHRydWUsIHRydWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7
CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpOworICAgIGZpbHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJu
KSk7CisgICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBt
X2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmVBcHBsaWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
VGlsZVNvZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2YmQ0YTE0MmYzMDNkZTUwY2RjMjBm
ZDEzNDU5NjU4NmFkMzBkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5oCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiRkVUaWxlU29mdHdhcmVBcHBsaWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRkVUaWxlOworCitjbGFzcyBGRVRpbGVTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVGlsZT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJF
ZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUaWxlPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6
OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdh
cmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTk2MjNmM2IyZDk1YTJkNDhiNzdjZmM0OTk2OTRk
MWE3ZTQ3ODQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwCkBA
IC0wLDAgKzEsMzcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBS
ZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQuaHU+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR2Fib3IgTG9raSA8bG9raUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiRkVU
dXJidWxlbmNlLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIu
aCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpv
YnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxh
dGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNW
RyAxLjEgc3BlY2lmaWNhdGlvbjoKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRl
cnMuaHRtbCNmZVR1cmJ1bGVuY2UKKworRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpQYWlu
dGluZ0RhdGEgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKFR1
cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVl
bmN5WSwgaW50IG51bU9jdGF2ZXMsIGxvbmcgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcywgY29uc3Qg
SW50U2l6ZSYgcGFpbnRpbmdTaXplKQoreworICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEg
eyB0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQs
IHN0aXRjaFRpbGVzLCBwYWludGluZ1NpemUsIHsgfSwgeyB9IH07CisKKyAgICAvLyBUaGUgc2Vl
ZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KKyAgICBp
ZiAocGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSAt
KHBhaW50aW5nRGF0YS5zZWVkICUgKHNfcmFuZE1heGltdW0gLSAxKSkgKyAxOworICAgIGlmIChw
YWludGluZ0RhdGEuc2VlZCA+IHNfcmFuZE1heGltdW0gLSAxKQorICAgICAgICBwYWludGluZ0Rh
dGEuc2VlZCA9IHNfcmFuZE1heGltdW0gLSAxOworCisgICAgZmxvYXQqIGdyYWRpZW50OworICAg
IGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemU7ICsraSkgeworICAgICAgICAgICAgcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IGk7CisgICAgICAgICAgICBncmFkaWVudCA9
IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXTsKKyAgICAgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgICAgICBncmFkaWVudFswXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdE
YXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9j
a1NpemU7CisgICAgICAgICAgICAgICAgZ3JhZGllbnRbMV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4o
KHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXpl
KSAvIHNfYmxvY2tTaXplOworICAgICAgICAgICAgfSB3aGlsZSAoIWdyYWRpZW50WzBdICYmICFn
cmFkaWVudFsxXSk7CisgICAgICAgICAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yID0gc3Rk
OjpoeXBvdChncmFkaWVudFswXSwgZ3JhZGllbnRbMV0pOworICAgICAgICAgICAgZ3JhZGllbnRb
MF0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKKyAgICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5v
cm1hbGl6YXRpb25GYWN0b3I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBpID0g
c19ibG9ja1NpemUgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgIGludCBrID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKKyAgICAgICAgaW50IGogPSBwYWludGluZ0RhdGEucmFu
ZG9tKCkgJSBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgQVNTRVJUKGogPj0gMCk7CisgICAgICAgIEFT
U0VSVChqIDwgMiAqIHNfYmxvY2tTaXplICsgMik7CisgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3JbaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdOworICAgICAg
ICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdID0gazsKKyAgICB9CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplICsgMjsgKytpKSB7CisgICAgICAgIHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3Jbc19ibG9ja1NpemUgKyBpXSA9IHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3JbaV07CisgICAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwg
NDsgKytjaGFubmVsKSB7CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5l
bF1bc19ibG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtp
XVswXTsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2Nr
U2l6ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzFdOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBhaW50aW5nRGF0YTsKK30KKworRkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSwgYm9vbCBzdGl0Y2hUaWxlcykKK3sKKyAgICBpZiAo
IXN0aXRjaFRpbGVzKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgZmxvYXQgdGlsZVdpZHRo
ID0gdGlsZVNpemUud2lkdGgoKTsKKyAgICBmbG9hdCB0aWxlSGVpZ2h0ID0gdGlsZVNpemUuaGVp
Z2h0KCk7CisgICAgQVNTRVJUKHRpbGVXaWR0aCA+IDAgJiYgdGlsZUhlaWdodCA+IDApOworCisg
ICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11
c3QgYmUgYWRqdXN0ZWQKKyAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBj
b250aW51b3VzLgorICAgIGlmIChiYXNlRnJlcXVlbmN5WCkgeworICAgICAgICBmbG9hdCBsb3dG
cmVxdWVuY3kgPSBmbG9vcmYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRo
OworICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZVdpZHRoICogYmFzZUZy
ZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAgICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBi
ZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KKyAgICAgICAgaWYgKGJh
c2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVu
Y3lYKQorICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBsb3dGcmVxdWVuY3k7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gaGlnaEZyZXF1ZW5jeTsKKyAgICB9
CisgICAgaWYgKGJhc2VGcmVxdWVuY3lZKSB7CisgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9
IGZsb29yZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKKyAgICAg
ICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5
WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVu
Y3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVkpCisgICAgICAgICAgICBiYXNlRnJl
cXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZy
ZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5OworICAgIH0KKworICAgIFN0aXRjaERhdGEgc3RpdGNo
RGF0YTsKKyAgICBzdGl0Y2hEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVx
dWVuY3lYKTsKKyAgICBzdGl0Y2hEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERh
dGEud2lkdGg7CisgICAgc3RpdGNoRGF0YS5oZWlnaHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJh
c2VGcmVxdWVuY3lZKTsKKyAgICBzdGl0Y2hEYXRhLndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0
aXRjaERhdGEuaGVpZ2h0OworCisgICAgcmV0dXJuIHN0aXRjaERhdGE7Cit9CisKKy8vIFRoaXMg
aXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2Zp
bHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50LgorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0
PiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0
UG9pbnQmIG5vaXNlVmVjdG9yKQoreworICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKKyAgICAg
ICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgorICAgICAgICBpbnQg
bmV4dEluZGV4OyAvLyBieDEsIGJ5MSBpbiB0aGUgc3BlYyB0ZXh0LgorICAgICAgICBmbG9hdCBm
cmFjdGlvbjsgLy8gcngwLCByeTAgaW4gdGhlIHNwZWMgdGV4dC4KKworICAgICAgICBOb2lzZVBv
c2l0aW9uKGZsb2F0IGNvbXBvbmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gIHQgPSB2
ZWNbMF0gKyBQZXJsaW5OOworICAgICAgICAgICAgLy8gIGJ4MCA9IChpbnQpdDsKKyAgICAgICAg
ICAgIC8vICBieDEgPSBieDArMTsKKyAgICAgICAgICAgIC8vICByeDAgPSB0IC0gKGludCl0Owor
ICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOwor
ICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAgIGZyYWN0aW9uID0gcG9zaXRp
b24gLSBpbmRleDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzdGl0Y2goaW50
IHNpemUsIGludCB3cmFwU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gaWYgKGJ4MCA+
PSBwU3RpdGNoSW5mby0+bldyYXBYKQorICAgICAgICAgICAgLy8gICBieDAgLT0gcFN0aXRjaElu
Zm8tPm5XaWR0aDsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSB3cmFwU2l6ZSkKKyAgICAgICAg
ICAgICAgICBpbmRleCAtPSBzaXplOworCisgICAgICAgICAgICAvLyBpZiAoYngxID49IHBTdGl0
Y2hJbmZvLT5uV3JhcFgpCisgICAgICAgICAgICAvLyAgIGJ4MSAtPSBwU3RpdGNoSW5mby0+bldp
ZHRoOworICAgICAgICAgICAgaWYgKG5leHRJbmRleCA+PSB3cmFwU2l6ZSkKKyAgICAgICAgICAg
ICAgICBuZXh0SW5kZXggLT0gc2l6ZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBOb2lzZVBv
c2l0aW9uIG5vaXNlWChub2lzZVZlY3Rvci54KCkpOworICAgIE5vaXNlUG9zaXRpb24gbm9pc2VZ
KG5vaXNlVmVjdG9yLnkoKSk7CisKKyAgICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBsYXR0aWNl
IHBvaW50cyBhY2NvcmRpbmdseS4KKyAgICBpZiAocGFpbnRpbmdEYXRhLnN0aXRjaFRpbGVzKSB7
CisgICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53cmFw
WCk7CisgICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERhdGEu
d3JhcFkpOworICAgIH0KKworICAgIC8vIGJ4MCAmPSBCTTsKKyAgICAvLyBieDEgJj0gQk07Cisg
ICAgLy8gYnkwICY9IEJNOworICAgIC8vIGJ5MSAmPSBCTTsKKyAgICBub2lzZVguaW5kZXggJj0g
c19ibG9ja01hc2s7CisgICAgbm9pc2VYLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKKyAgICBu
b2lzZVkuaW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Js
b2NrTWFzazsKKworICAgIC8vIGkgPSB1TGF0dGljZVNlbGVjdG9yW2J4MF07CisgICAgLy8gaiA9
IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKKyAgICBpbnQgbGF0dGljZUluZGV4ID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVguaW5kZXhdOworICAgIGludCBuZXh0TGF0dGljZUlu
ZGV4ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvcltub2lzZVgubmV4dEluZGV4XTsKKwor
ICAgIC8vIHN4ID0gZG91YmxlKHNfY3VydmUocngwKSk7CisgICAgLy8gc3kgPSBkb3VibGUoc19j
dXJ2ZShyeTApKTsKKyAgICBmbG9hdCBzeCA9IHNtb290aEN1cnZlKG5vaXNlWC5mcmFjdGlvbik7
CisgICAgZmxvYXQgc3kgPSBzbW9vdGhDdXJ2ZShub2lzZVkuZnJhY3Rpb24pOworCisgICAgYXV0
byBub2lzZUZvckNoYW5uZWwgPSBbJl0oaW50IGNoYW5uZWwpIHsKKyAgICAgICAgLy8gYjAwID0g
dUxhdHRpY2VTZWxlY3RvcltpICsgYnkwXQorICAgICAgICBpbnQgYjAwID0gcGFpbnRpbmdEYXRh
LmxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOworICAgICAgICAv
LyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMF07IHUgPSByeDAgKiBxWzBdICsgcnkw
ICogcVsxXTsKKyAgICAgICAgY29uc3QgZmxvYXQqIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bYjAwXTsKKyAgICAgICAgZmxvYXQgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0g
KyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOworCisgICAgICAgIC8vIGIxMCA9IHVMYXR0aWNlU2Vs
ZWN0b3JbaiArIGJ5MF07CisgICAgICAgIGludCBiMTAgPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkuaW5kZXhdOworICAgICAgICAvLyByeDEg
PSByeDAgLSAxLjBmOworICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2Ix
MF07IHYgPSByeDEgKiBxWzBdICsgcnkwICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtiMTBdOworICAgICAgICBmbG9hdCB2ID0gKG5vaXNlWC5mcmFj
dGlvbiAtIDEpICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07CisgICAgICAgIC8vIGEg
PSBsZXJwKHN4LCB1LCB2KTsKKyAgICAgICAgZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24o
c3gsIHUsIHYpOworCisgICAgICAgIC8vIGIwMSA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MV07
CisgICAgICAgIGludCBiMDEgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJ
bmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOworICAgICAgICAvLyByeTEgPSByeTAgLSAxLjBmOwor
ICAgICAgICAvLyBxID0gZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IwMV07IHUgPSByeDAgKiBx
WzBdICsgcnkxICogcVsxXTsKKyAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFu
bmVsXVtiMDFdOworICAgICAgICB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSArIChub2lzZVku
ZnJhY3Rpb24gLSAxKSAqIHFbMV07CisKKyAgICAgICAgLy8gYjExID0gdUxhdHRpY2VTZWxlY3Rv
cltqICsgYnkxXTsKKyAgICAgICAgaW50IGIxMSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5uZXh0SW5kZXhdOworICAgICAgICAvLyBxID0g
ZkdyYWRpZW50W25Db2xvckNoYW5uZWxdW2IxMV07IHYgPSByeDEgKiBxWzBdICsgcnkxICogcVsx
XTsKKyAgICAgICAgcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMTFdOworICAg
ICAgICB2ID0gKG5vaXNlWC5mcmFjdGlvbiAtIDEpICogcVswXSArIChub2lzZVkuZnJhY3Rpb24g
LSAxKSAqIHFbMV07CisgICAgICAgIC8vIGIgPSBsZXJwKHN4LCB1LCB2KTsKKyAgICAgICAgZmxv
YXQgYiA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOworCisgICAgICAgIC8vIHJldHVy
biBsZXJwKHN5LCBhLCBiKTsKKyAgICAgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ks
IGEsIGIpOworICAgIH07CisKKyAgICByZXR1cm4geworICAgICAgICBub2lzZUZvckNoYW5uZWwo
MCksCisgICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgxKSwKKyAgICAgICAgbm9pc2VGb3JDaGFubmVs
KDIpLAorICAgICAgICBub2lzZUZvckNoYW5uZWwoMykKKyAgICB9OworfQorCisvLyBodHRwczov
L3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2Ny
aWJlcyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50cy4KKy8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBn
ZXQgdGhlIHNhbWUgYmVoYXZpb3IuCitDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJi
dWxlbmNlU29mdHdhcmVBcHBsaWVyOjp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cykKK3sKKyAgICByZXR1cm4g
eworICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21w
b25lbnRzWzBdICogMjU1KSwgMCwgMjU1KSwKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90Pihz
dGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sxXSAqIDI1NSksIDAsIDI1NSksCisgICAg
ICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNb
Ml0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19j
YXN0PGludD4oZmxvYXRDb21wb25lbnRzWzNdICogMjU1KSwgMCwgMjU1KSwKKyAgICB9OworfQor
CitDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkKK3sKKyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdDsKKyAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0
YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZ
KTsKKyAgICBmbG9hdCByYXRpbyA9IDE7CisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZl
IDwgcGFpbnRpbmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChwYWlu
dGluZ0RhdGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQorICAgICAgICAg
ICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0
Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hE
YXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKKworICAgICAgICBub2lzZVZlY3Rvci5z
ZXRYKG5vaXNlVmVjdG9yLngoKSAqIDIpOworICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5vaXNl
VmVjdG9yLnkoKSAqIDIpOworICAgICAgICByYXRpbyAqPSAyOworCisgICAgICAgIGlmIChwYWlu
dGluZ0RhdGEuc3RpdGNoVGlsZXMpIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFs
dWVzLiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24g
YW5kCisgICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3Vi
dHJhY3RpbmcgaXQgb25jZS4KKyAgICAgICAgICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsKKyAg
ICAgICAgICAgIHN0aXRjaERhdGEud3JhcFggPSAyICogc3RpdGNoRGF0YS53cmFwWCAtIHNfcGVy
bGluTm9pc2U7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLmhlaWdodCAqPSAyOworICAgICAgICAg
ICAgc3RpdGNoRGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQgY29tZXMgZnJvbSAoKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkg
KyAyNTUpIC8gMiBieSBmcmFjdGFsTm9pc2UKKyAgICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5jdGlv
blJlc3VsdCAqIDI1NSkgYnkgdHVyYnVsZW5jZS4KKyAgICBpZiAocGFpbnRpbmdEYXRhLnR5cGUg
PT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICAgICAgdHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0ID0gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMC41ZiArIDAuNWY7CisKKyAg
ICByZXR1cm4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyh0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQpOworfQorCit2b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZp
bHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50
IGVuZFkpCit7CisgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOworCisgICAgRmxvYXRQb2ludCBw
b2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKKyAgICBpbnQgaW5kZXhPZlBpeGVs
Q2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKKyAgICBGbG9h
dFNpemUgaW52ZXJzZVNjYWxlID0geyAxIC8gZmlsdGVyU2NhbGUud2lkdGgoKSwgMSAvIGZpbHRl
clNjYWxlLmhlaWdodCgpIH07CisKKyAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsg
Kyt5KSB7CisgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CisgICAgICAgIHBvaW50
LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZmls
dGVyUmVnaW9uLndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54
KCkgKyAxKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IHBvaW50LnNjYWxl
ZChpbnZlcnNlU2NhbGUud2lkdGgoKSwgaW52ZXJzZVNjYWxlLmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRp
bmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXku
c2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBpbmRleE9mUGl4ZWxDaGFubmVs
KTsKKyAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5uZWwgKz0gNDsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1X
b3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQoreworICAgIGFwcGx5UGxhdGZvcm1H
ZW5lcmljKHBhcmFtZXRlcnMtPmZpbHRlclJlZ2lvbiwgcGFyYW1ldGVycy0+ZmlsdGVyU2NhbGUs
ICpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJh
bWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkp
OworfQorCit2b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShj
b25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUs
IFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSkKK3sKKyAgICBpbnQgaGVpZ2h0ID0gZmlsdGVyUmVn
aW9uLmhlaWdodCgpOworICAgIHVuc2lnbmVkIGFyZWEgPSBmaWx0ZXJSZWdpb24uYXJlYSgpOwor
CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDAp
OyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4KKyAgICB1bnNpZ25l
ZCBtYXhOdW1UaHJlYWRzID0gZmlsdGVyUmVnaW9uLmhlaWdodCgpIC8gODsKKyAgICB1bnNpZ25l
ZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBtaW5pbWFs
UmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CisKKyAgICBpZiAob3B0aW1hbFRocmVhZE51
bWJlciA+IDEpIHsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFyYW1ldGVycz4gcGFyYWxs
ZWxKb2JzKCZhcHBseVBsYXRmb3JtV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKworICAg
ICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKKyAgICAgICAgYXV0byBudW1Kb2JzID0g
cGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworICAgICAgICBpZiAobnVtSm9icyA+IDEpIHsK
KyAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAic3RlcFkiLXNpemVkIGpvYnMsIGRp
c3RyaWJ1dGluZyB0aGUgZXh0cmEgcm93cyBpbnRvIHRoZSBmaXJzdCAiam9ic1dpdGhFeHRyYSIg
am9icy4KKyAgICAgICAgICAgIHVuc2lnbmVkIHN0ZXBZID0gaGVpZ2h0IC8gbnVtSm9iczsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGpvYnNXaXRoRXh0cmEgPSBoZWlnaHQgJSBudW1Kb2JzOworICAg
ICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgeworICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1l
dGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMuZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOworICAgICAgICAgICAgICAgIHBh
cmFtcy5maWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxlOworICAgICAgICAgICAgICAgIHBhcmFtcy5w
aXhlbEFycmF5ID0gJnBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5n
RGF0YSA9ICZwYWludGluZ0RhdGE7CisgICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRjaERhdGEg
PSBzdGl0Y2hEYXRhOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFydFk7CisK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBqb2JIZWlnaHQgPSAoaSA8IGpvYnNXaXRoRXh0cmEp
ID8gc3RlcFkgKyAxIDogc3RlcFk7CisgICAgICAgICAgICAgICAgcGFyYW1zLmVuZFkgPSBwYXJh
bXMuc3RhcnRZICsgam9iSGVpZ2h0OworICAgICAgICAgICAgICAgIHN0YXJ0WSArPSBqb2JIZWln
aHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGYWxsYmFj
ayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyByb29tIGZvciBhIG5ldyB0
aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgorICAgIGFwcGx5UGxhdGZvcm1H
ZW5lcmljKGZpbHRlclJlZ2lvbiwgZmlsdGVyU2NhbGUsIHBpeGVsQXJyYXksIHBhaW50aW5nRGF0
YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKK30KKworYm9vbCBGRVR1cmJ1bGVuY2VTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImKQoreworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBp
eGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7
CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBJbnRTaXplIHJlc3VsdFNpemUobV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCkpOworICAgIGlmIChyZXN1bHRTaXplLmFyZWEoKS5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGlmIChyZXN1bHRTaXplLmlzRW1w
dHkoKSkgeworICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYXV0byB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRT
aXplKG1fZWZmZWN0LmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7CisKKyAgICBm
bG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fZWZmZWN0LmJhc2VGcmVxdWVuY3lYKCk7CisgICAgZmxv
YXQgYmFzZUZyZXF1ZW5jeVkgPSBtX2VmZmVjdC5iYXNlRnJlcXVlbmN5WSgpOworICAgIGF1dG8g
c3RpdGNoRGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBi
YXNlRnJlcXVlbmN5WSwgbV9lZmZlY3Quc3RpdGNoVGlsZXMoKSk7CisKKyAgICBhdXRvIHBhaW50
aW5nRGF0YSA9IGluaXRQYWludGluZ0RhdGEobV9lZmZlY3QudHlwZSgpLCBiYXNlRnJlcXVlbmN5
WCwgYmFzZUZyZXF1ZW5jeVksIG1fZWZmZWN0Lm51bU9jdGF2ZXMoKSwgbV9lZmZlY3Quc2VlZCgp
LCBtX2VmZmVjdC5zdGl0Y2hUaWxlcygpLCB0aWxlU2l6ZSk7CisKKyAgICBhcHBseVBsYXRmb3Jt
KG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCksIGZpbHRlci5maWx0ZXJTY2FsZSgpLCBkZXN0
aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29m
dHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjZTY4
ZTM0MzQxYjM4NjYzYzBjMTQ4NWE5MTE4ZjA1YzJkY2MzODMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVs
ZW5jZVNvZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiA8cmVuaUBpbmYudS1zemVnZWQu
aHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRVR1cmJ1bGVuY2U7CitlbnVtIGNsYXNz
IFR1cmJ1bGVuY2VUeXBlOworCitjbGFzcyBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVHVyYnVsZW5jZT4geworICAgIHVz
aW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUdXJidWxlbmNlPjsKKwor
cHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICAvLyBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioq
MzEgLSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIC8vIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEg
PSBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNyBhbmQKKyAgICAvLyBtID0gc19yYW5kTWF4aW11bSA9
IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBzZWVkLgorICAgIC8vIFNlZSBbUGFyayAmIE1p
bGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4CisgICAgLy8gVG8g
dGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUK
KyAgICAvLyBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwg
c2VlZCBpcyAxLgorICAgIHN0YXRpYyBjb25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7Cisg
ICAgc3RhdGljIGNvbnN0IGxvbmcgc19yYW5kTWF4aW11bSA9IDIxNDc0ODM2NDc7IC8vIDIqKjMx
IC0gMQorICAgIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcq
KjU7IHByaW1pdGl2ZSByb290IG9mIG0KKyAgICBzdGF0aWMgY29uc3QgaW50IHNfcmFuZFEgPSAx
Mjc3NzM7IC8vIG0gLyBhCisgICAgc3RhdGljIGNvbnN0IGludCBzX3JhbmRSID0gMjgzNjsgLy8g
bSAlIGEKKworICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CisgICAgc3Rh
dGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsKKworICAgIHN0cnVj
dCBQYWludGluZ0RhdGEgeworICAgICAgICAvLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVy
LgorICAgICAgICBsb25nIHJhbmRvbSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvbmcgcmVz
dWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAoc2Vl
ZCAvIHNfcmFuZFEpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA8PSAwKQorICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOworICAgICAgICAgICAgc2VlZCA9IHJlc3VsdDsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBUdXJidWxl
bmNlVHlwZSB0eXBlOworICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKKyAgICAgICAgZmxv
YXQgYmFzZUZyZXF1ZW5jeVk7CisgICAgICAgIGludCBudW1PY3RhdmVzOworICAgICAgICBsb25n
IHNlZWQ7CisgICAgICAgIGJvb2wgc3RpdGNoVGlsZXM7CisgICAgICAgIEludFNpemUgcGFpbnRp
bmdTaXplOworCisgICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsg
Ml07CisgICAgICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOwor
ICAgIH07CisKKyAgICBzdHJ1Y3QgU3RpdGNoRGF0YSB7CisgICAgICAgIGludCB3aWR0aCB7IDAg
fTsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgorICAgICAg
ICBpbnQgd3JhcFggeyAwIH07IC8vIE1pbmltdW0gdmFsdWUgdG8gd3JhcC4KKyAgICAgICAgaW50
IGhlaWdodCB7IDAgfTsKKyAgICAgICAgaW50IHdyYXBZIHsgMCB9OworICAgIH07CisKKyAgICBz
dHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKKyAgICAgICAgSW50UmVjdCBmaWx0ZXJSZWdpb247Cisg
ICAgICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZTsKKyAgICAgICAgVWludDhDbGFtcGVkQXJyYXkq
IHBpeGVsQXJyYXk7CisgICAgICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgICAg
ICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7CisgICAgICAgIGludCBzdGFydFk7CisgICAgICAgIGlu
dCBlbmRZOworICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZs
b2F0IHQpIHsgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7IH0KKyAgICBzdGF0aWMgaW5saW5l
IGZsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQgYikgeyBy
ZXR1cm4gYSArIHQgKiAoYiAtIGEpOyB9CisKKyAgICBzdGF0aWMgUGFpbnRpbmdEYXRhIGluaXRQ
YWludGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGxvbmcgc2VlZCwgYm9vbCBzdGl0Y2hUaWxl
cywgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKTsKKyAgICBzdGF0aWMgU3RpdGNoRGF0YSBj
b21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwg
ZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBib29sIHN0aXRjaFRpbGVzKTsKKworICAgIHN0YXRpYyBD
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29u
c3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKTsKKyAgICBzdGF0
aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMo
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKTsKKyAgICBz
dGF0aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1
ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9p
bnQmKTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJl
Y3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFt
cGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGlu
dCBzdGFydFksIGludCBlbmRZKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtV29ya2Vy
KEFwcGx5UGFyYW1ldGVycyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm0oY29uc3Qg
SW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50
OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSYpOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlQXBw
bGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL1NvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjM1OGRmNTkw
M2EzMDQyNjM1ZGQ4MjM0Y2FhNWI1ZmZiODdkMTcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNv
ZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU291cmNlQWxwaGEu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUFscGhhU29mdHdhcmVBcHBs
aWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgp
OworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7
CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIWlt
YWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGbG9hdFJlY3QgaW1hZ2VS
ZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0
KCk7CisKKyAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJsYWNr
KTsKKyAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEludFBv
aW50KCksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdh
cmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGY4NjAzNTNh
NTcwODIxMDA5OTdkMDQ0ZWE1MjIzZjNhZGJjODljOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFT
b2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNvdXJjZUFscGhhOworCitjbGFzcyBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllciA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlQWxwaGE+IHsKKyAgICB1c2luZyBC
YXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPFNvdXJjZUFscGhhPjsKKworcHVibGlj
OgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L1NvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0NTFkYzNiMTNm
NzBhZmI1ZTFiNzA5N2IyZTJkOGJiZmQ1YzljZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNT
b2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlNvdXJjZUdy
YXBoaWMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUdyYXBoaWNTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImKQoreworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZl
clJlc3VsdCgpOworICAgIGF1dG8gc291cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsK
KyAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFzb3VyY2VJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJj
ZUltYWdlLCBJbnRQb2ludCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNT
b2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTk5YWI3ZjE1YTM4OGMxM2ViMDY4M2NhOWY1
ZjFjM2E5NDMxYzM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmgK
QEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3Mg
PHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmls
dGVyRWZmZWN0QXBwbGllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNvdXJj
ZUdyYXBoaWM7CisKK2NsYXNzIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPFNvdXJjZUdyYXBoaWM+IHsKKyAgICB1c2luZyBC
YXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPFNvdXJjZUdyYXBoaWM+OworCitwdWJs
aWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NTU0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVy
LmNwcAppbmRleCBjMmY0YTYyODE3OTkzN2VmZDNiYzU4NDgwMDE5ZDM3ZmJlZGVjNmZhLi4zYzNm
NWMxNTVhNTZjMDc5MTg5YTMzOGZlYmExZTU3ODI3ZjczMWUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ1NTRmlsdGVyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBDU1NGaWx0ZXI6OkNTU0ZpbHRl
cihib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxk
QmVSZQogc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3QoY29uc3Qg
Qmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiwgRmlsdGVyQ29uc3VtZXIgY29uc3Vt
ZXIpCiB7CiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVy
T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6
OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29u
c3VtZXI6OkZpbHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FU
RSk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBzdGRE
ZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/IEVk
Z2VNb2RlVHlwZTo6Tm9uZSA6IEVkZ2VNb2RlVHlwZTo6RHVwbGljYXRlKTsKIH0KIAogc3RhdGlj
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoY29uc3QgQmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
LmNwcAppbmRleCAxYTgxMzRhOWM4YjdmYzBhNTA3NWVkZTgxYTBkMzY5NzBlOThjNDdmLi40OGM5
MGIyMDQ3YzI0MDViMDY4MzA0MTU3YzViYjFlZjgzOWI3ZjdjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKQEAgLTc5LDcgKzc5LDcg
QEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QKIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpl
ZGdlTW9kZUF0dHIpIHsKICAgICAgICAgRWRnZU1vZGVUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQ
cm9wZXJ0eVRyYWl0czxFZGdlTW9kZVR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKLSAgICAgICAg
aWYgKHByb3BlcnR5VmFsdWUgPiAwKQorICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSAhPSBFZGdl
TW9kZVR5cGU6OlVua25vd24pCiAgICAgICAgICAgICBtX2VkZ2VNb2RlLT5zZXRCYXNlVmFsSW50
ZXJuYWw8RWRnZU1vZGVUeXBlPihwcm9wZXJ0eVZhbHVlKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiZmVD
b252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIGVkZ2VNb2RlPVwiIiArIHZhbHVlICsgIlwi
LiBGaWx0ZXJlZCBlbGVtZW50IHdpbGwgbm90IGJlIGRpc3BsYXllZC4iKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKaW5kZXggMWI2YmJlNDg3
MTI3NWM0MjFjOGRkNDQwOWMxYjQ4OTcyOTVhYTEwYS4uMzk2NzBmZTYyZmZiZTZhYmExY2NjNjI0
Nzk0MDQ1ZGZiNmMyYzViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmgKQEAgLTI3LDE5ICsyNywxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHRlbXBsYXRlPD4KIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxFZGdlTW9kZVR5cGU+IHsK
LSAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1ZSgpIHsgcmV0dXJuIEVER0VNT0RF
X05PTkU7IH0KLSAgICBzdGF0aWMgRWRnZU1vZGVUeXBlIGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJu
IEVER0VNT0RFX05PTkU7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1ZSgp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihFZGdlTW9kZVR5cGU6Ok5vbmUpOyB9Cisg
ICAgc3RhdGljIEVkZ2VNb2RlVHlwZSBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBFZGdlTW9kZVR5
cGU6Ok5vbmU7IH0KIAogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoRWRnZU1vZGVUeXBlIHR5
cGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBFREdFTU9E
RV9VTktOT1dOOgorICAgICAgICBjYXNlIEVkZ2VNb2RlVHlwZTo6VW5rbm93bjoKICAgICAgICAg
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FU
RToKKyAgICAgICAgY2FzZSBFZGdlTW9kZVR5cGU6OkR1cGxpY2F0ZToKICAgICAgICAgICAgIHJl
dHVybiAiZHVwbGljYXRlIl9zOwotICAgICAgICBjYXNlIEVER0VNT0RFX1dSQVA6CisgICAgICAg
IGNhc2UgRWRnZU1vZGVUeXBlOjpXcmFwOgogICAgICAgICAgICAgcmV0dXJuICJ3cmFwIl9zOwot
ICAgICAgICBjYXNlIEVER0VNT0RFX05PTkU6CisgICAgICAgIGNhc2UgRWRnZU1vZGVUeXBlOjpO
b25lOgogICAgICAgICAgICAgcmV0dXJuICJub25lIl9zOwogICAgICAgICB9CiAKQEAgLTUwLDEy
ICs1MCwxMiBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPiB7CiAgICAg
c3RhdGljIEVkZ2VNb2RlVHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAodmFsdWUgPT0gImR1cGxpY2F0ZSIpCi0gICAgICAgICAgICByZXR1cm4g
RURHRU1PREVfRFVQTElDQVRFOworICAgICAgICAgICAgcmV0dXJuIEVkZ2VNb2RlVHlwZTo6RHVw
bGljYXRlOwogICAgICAgICBpZiAodmFsdWUgPT0gIndyYXAiKQotICAgICAgICAgICAgcmV0dXJu
IEVER0VNT0RFX1dSQVA7CisgICAgICAgICAgICByZXR1cm4gRWRnZU1vZGVUeXBlOjpXcmFwOwog
ICAgICAgICBpZiAodmFsdWUgPT0gIm5vbmUiKQotICAgICAgICAgICAgcmV0dXJuIEVER0VNT0RF
X05PTkU7Ci0gICAgICAgIHJldHVybiBFREdFTU9ERV9VTktOT1dOOworICAgICAgICAgICAgcmV0
dXJuIEVkZ2VNb2RlVHlwZTo6Tm9uZTsKKyAgICAgICAgcmV0dXJuIEVkZ2VNb2RlVHlwZTo6VW5r
bm93bjsKICAgICB9CiB9OwogCkBAIC0xMTQsNyArMTE0LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8
U1ZHQW5pbWF0ZWROdW1iZXI+IG1fYmlhcyB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhp
cykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBtX3RhcmdldFggeyBTVkdBbmltYXRl
ZEludGVnZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZEludGVnZXI+IG1f
dGFyZ2V0WSB7IFNWR0FuaW1hdGVkSW50ZWdlcjo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNW
R0FuaW1hdGVkRW51bWVyYXRpb24+IG1fZWRnZU1vZGUgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9u
OjpjcmVhdGUodGhpcywgRURHRU1PREVfRFVQTElDQVRFKSB9OworICAgIFJlZjxTVkdBbmltYXRl
ZEVudW1lcmF0aW9uPiBtX2VkZ2VNb2RlIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIEVkZ2VNb2RlVHlwZTo6RHVwbGljYXRlKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51
bWJlcj4gbV9rZXJuZWxVbml0TGVuZ3RoWCB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhp
cykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fa2VybmVsVW5pdExlbmd0aFkgeyBT
VkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkQm9v
bGVhbj4gbV9wcmVzZXJ2ZUFscGhhIHsgU1ZHQW5pbWF0ZWRCb29sZWFuOjpjcmVhdGUodGhpcykg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAK
aW5kZXggZjFlNmJmNDlhNGRiM2RjYTc3NWM5YjdlZmE1ZGI5ZGM4Njk4ODcyYS4uYTA5MDRmYjUy
NzFhMDg2YzY1NGU3OTZlNGMyNTU1OGNhN2MwMTA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBT
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIGNvbnN0IEEKIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjplZGdlTW9kZUF0
dHIpIHsKICAgICAgICAgYXV0byBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFpdHM8RWRn
ZU1vZGVUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eVZhbHVl
ID4gMCkKKyAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgIT0gRWRnZU1vZGVUeXBlOjpVbmtub3du
KQogICAgICAgICAgICAgbV9lZGdlTW9kZS0+c2V0QmFzZVZhbEludGVybmFsPEVkZ2VNb2RlVHlw
ZT4ocHJvcGVydHlWYWx1ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRvY3VtZW50KCku
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcoImZlR2F1c3NpYW5CbHVyOiBwcm9i
bGVtIHBhcnNpbmcgZWRnZU1vZGU9XCIiICsgdmFsdWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQg
d2lsbCBub3QgYmUgZGlzcGxheWVkLiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudC5oCmluZGV4IGY0MGViMzM3NzhjNDNkZjYxZWU1ODk2M2VlY2Y5ZWNk
YmE1NDljYzEuLjQ4MDMyMmZmNzA3NTg0NDI5Njk1YjQ5N2FlNjY0NWVkMDliZjhjMWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKQEAgLTU5LDcg
KzU5LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJl
cj4gbV9zdGREZXZpYXRpb25YIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9zdGREZXZpYXRpb25ZIHsgU1ZHQW5pbWF0ZWRO
dW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBt
X2VkZ2VNb2RlIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEVER0VNT0RF
X05PTkUpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fZWRnZU1vZGUgeyBT
VkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRWRnZU1vZGVUeXBlOjpOb25lKSB9
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCmluZGV4IDhiMDU2MGM0ZGE4MDAzOTcwMTQ4ZTFlMTVl
MmYzMDk3YjkxNTMxNTYuLjAxY2NhNDg2OGIyZTlkM2I2YzZmZGQwN2Q3N2RjNzE1NzAzOGE5YmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKQEAg
LTYwLDcgKzYwLDcgQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG8KIHsKICAgICBpZiAobmFtZSA9
PSBTVkdOYW1lczo6b3BlcmF0b3JBdHRyKSB7CiAgICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKLSAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQor
ICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSAhPSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpVbmtu
b3duKQogICAgICAgICAgICAgbV9zdmdPcGVyYXRvci0+c2V0QmFzZVZhbEludGVybmFsPE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGU+KHByb3BlcnR5VmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKaW5kZXggYjIx
YjZmNWM0N2I3ODVkZjI4ZjAxM2VkZTU0MDFjODY2ZDQwZTlkZC4uY2FiZjA1ODBjMjUzNGRlYjQ1
MTY4OTFiYTUyOWE3ZWEwNjFkZmE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTW9ycGhvbG9neUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudC5oCkBAIC0yNywxNiArMjcsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB0ZW1wbGF0ZTw+CiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9y
VHlwZT4gewotICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4g
RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdo
ZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE1vcnBob2xvZ3lP
cGVyYXRvclR5cGU6OkRpbGF0ZSk7IH0KIAogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV046CisgICAgICAgIGNh
c2UgTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6VW5rbm93bjoKICAgICAgICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERToK
KyAgICAgICAgY2FzZSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpFcm9kZToKICAgICAgICAgICAg
IHJldHVybiAiZXJvZGUiX3M7Ci0gICAgICAgIGNhc2UgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJ
TEFURToKKyAgICAgICAgY2FzZSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpEaWxhdGU6CiAgICAg
ICAgICAgICByZXR1cm4gImRpbGF0ZSJfczsKICAgICAgICAgfQogCkBAIC00NywxMCArNDcsMTAg
QEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+IHsKICAg
ICBzdGF0aWMgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUgPT0gImVyb2RlIikKLSAgICAgICAgICAg
IHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU7CisgICAgICAgICAgICByZXR1cm4g
TW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6RXJvZGU7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAiZGls
YXRlIikKLSAgICAgICAgICAgIHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFOwot
ICAgICAgICByZXR1cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9SX1VOS05PV047CisgICAgICAgICAg
ICByZXR1cm4gTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6RGlsYXRlOworICAgICAgICByZXR1cm4g
TW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6VW5rbm93bjsKICAgICB9CiB9OwogCkBAIC04NSw3ICs4
NSw3IEBAIHByaXZhdGU6CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1h
dGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bj4gbV9zdmdPcGVyYXRvciB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVy
YXRpb24+IG1fc3ZnT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhp
cywgTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6RXJvZGUpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVk
TnVtYmVyPiBtX3JhZGl1c1ggeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3JhZGl1c1kgeyBTVkdBbmltYXRlZE51bWJlcjo6
Y3JlYXRlKHRoaXMpIH07CiB9Owo=
</data>
<flag name="commit-queue"
          id="470206"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445080</attachid>
            <date>2021-11-24 01:14:39 -0800</date>
            <delta_ts>2021-11-24 01:59:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232833-20211124011438.patch</filename>
            <type>text/plain</type>
            <size>390645</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmRhMzRiNjJjODRmOGU3
YmMyMDk4ZjJmNGQyYjI5ZjUzZjFkZTcxNy4uOWU3MzQ2MTYzZjljNGJmZDI1MTZhNjMzM2IyZGRl
ZjZjZjgzMDg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyNyBAQAorMjAyMS0xMS0yMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1vdmUgdGhlIHNvZnR3YXJlIEZpbHRlckVmZmVjdEFwcGxpZXJzIHRvIHNlcGFyYXRlIGZpbGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI4MzMK
KyAgICAgICAgcmRhcjovLzg1NDI0MjI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB0aGUgdGhlIHNvZnR3YXJlIEZpbHRl
ckVmZmVjdEFwcGxpZXJzIHRvIHNlcGFyYXRlIHNvdXJjZQorICAgICAgICBhbmQgaGVhZGVyIGZp
bGVzLiBUaGVyZSBpcyBubyBjaGFuZ2UgaW4gdGhlIGFwcGxpZXJzIGNvZGUuCisKKyAgICAgICAg
QnV0IEVkZ2VNb2RlVHlwZSBhbmQgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBoYXZlIHRvIGNoYW5n
ZWQgdG8gYmUgZW51bQorICAgICAgICBjbGFzc2VzIHNvIHRoZXkgY2FuIGJlIGZvcndhcmRlZCBk
ZWNsYXJlZCBpbiB0aGUgYXBwbGllcnMnIGhlYWRlciBmaWxlcy4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZFNvZnR3YXJlQXBwbGll
cjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
OjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0
ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFj
Y2VsZXJhdGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlSWRlbnRpdHlUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyOjpjb21wdXRlVGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVEaXNjcmV0ZVRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXI6OmNvbXB1dGVMaW5lYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlR2FtbWFUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyOjpjb21wdXRlTG9va3VwVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyOjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZVNvZnR3YXJlQXBwbGllcjo6Y2xhbXBCeXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjph
cHBseUFyaXRobWV0aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGVT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5Tm9uQXJpdGhtZXRpYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpjbGFtcFJHQkFWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBp
eGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNl
dE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJp
eC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGln
aHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyOjpieXRlT2Zmc2V0T2ZQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6eENoYW5uZWxJbmRleCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cjo6eUNoYW5uZWxJbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFw
cGxpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93U29mdHdhcmVBcHBsaWVyOjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZFNvZnR3
YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyU29mdHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGll
cjo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNv
ZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyVW5hY2NlbGVyYXRl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1ckdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBo
YVdpbmRvdzo6bGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdp
bmRvdzo6dG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpjZW50ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJv
dHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0VG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRDZW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxw
aGFXaW5kb3c6OnNldEJvdHRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0VG9wUmlnaHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6
OnNldFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdodCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2hpZnRS
b3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6QWxwaGFXaW5kb3c6OnNoaWZ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0Rh
dGE6OmludGVyaW9yTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6
Ym90dG9tUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6c2V0UGl4ZWxJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm1HZW5lcmljV29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlU29mdHdhcmVBcHBsaWVyOjphcHBseSk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1ha2VQaXhlbFZhbHVlRnJv
bUNvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3lTb2Z0d2FyZUFwcGxpZXI6Om1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1p
bk9yTWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJl
QXBwbGllcjo6Y29sdW1uRXh0cmVtdW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjprZXJuZWxFeHRyZW11bSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1H
ZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
aDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldFNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpQYWludGluZ0RhdGE6
OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmxpbmVhckludGVy
cG9sYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdh
cmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVN0aXRjaGluZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
Ojp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9y
UG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBs
eVBsYXRmb3JtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3
YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3RBcHBsaWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhp
Y1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmVB
cHBsaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0
d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQ
bGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGll
cjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmguCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVB
cHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1
dGVUYWJ1bGFyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlQXBwbGllcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxpbmVhclRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVMb29rdXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVB
cHBsaWVyOjpjbGFtcEJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2Fy
ZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQ
bGF0Zm9ybUFyaXRobWV0aWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5QXJpdGhtZXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0aG1ldGljKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29u
dm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6
c2V0RGVzdGluYXRpb25QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllcjo6Z2V0UGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRJbnRlcmlvclBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRPdXRlclBpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVu
dE1hcFNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OkZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29m
dHdhcmVBcHBsaWVyOjp4Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNl
bWVudE1hcFNvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmguCisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6Ynl0ZU9mZnNldE9mUGl4ZWwpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdh
cmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93U29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdh
cmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kU29mdHdhcmVB
cHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29m
dHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cik6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hC
bHVyVW5hY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3
YXJlQXBwbGllcjo6Ym94Qmx1ckdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdh
cmVBcHBsaWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRv
cExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1h
bCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1h
bCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OnNl
dFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2Vu
ZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBs
eVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6bGVm
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpB
bHBoYVdpbmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6dG9wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpjZW50ZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFX
aW5kb3c6OmJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRDZW50ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldEJvdHRv
bSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdp
bmRvdzo6c2V0VG9wUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2hp
ZnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxw
aGFXaW5kb3c6OnNoaWZ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6RkVNZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlQXBwbGllci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhv
bG9neVNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11bSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbEV4dHJlbXVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1v
cnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6cGl4ZWxB
cnJheUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhl
bFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
T2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpG
RU9mZnNldFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2Fy
ZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VT
b2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVTdGl0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpub2lzZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdEYXRhOjpyYW5kb20pOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpzbW9vdGhDdXJ2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmxpbmVhckludGVycG9sYXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxw
aGFTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUFscGhhU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3Vy
Y2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oLgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8
RWRnZU1vZGVUeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxFZGdlTW9kZVR5cGU+Ojppbml0aWFsVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPjo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPjo6ZnJvbVN0cmluZyk6
CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAg
ICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZy
b21TdHJpbmcpOgorCiAyMDIxLTExLTIzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gTW92ZSB0aGUgc29mdHdhcmUgRmlsdGVyRWZm
ZWN0IGZ1bmN0aW9ucyB0byBzZXBhcmF0ZSBhcHBsaWVyIGNsYXNzZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggMGVlMGJlMzAzZDJhNzI1ZjUxNjAzZTEzMWY2ZTIxZWMyODU1NmZjZi4uNjdkNjdi
YzZiZGYxNDQzMzc4YzgwNTk1OTQ0NWQ5MDliNjMyNDg5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
QEAgLTE0MSw2ICsxNDEsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJz
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMiCisgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2lzbyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDgxMzcyZTk5MTNkZjJhNTYyOWNm
MTE0ZmZhNmI4Zjk0MDg3YTJlOGMuLmI2ZWMxNDQ5YTg0OWNkYjRmOWIxNjY3MTc4NzYyYzc4NDhi
ZjEyNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTEwLDYgKzIxMTAsMjMgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmVBcHBsaWVy
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxp
ZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVP
ZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Cb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pc28vSVNPT3JpZ2luYWxGb3JtYXRCb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNP
UHJvdGVjdGlvblNjaGVtZUluZm9Cb3guY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjg2YzkzNDliMTIyMTk3OWM4OTk2OWQx
YjFiMDk2MjE0MDAwM2MwYS4uMGFjYTdjMzJjNDU2OGI0M2U0YjkwMWJkYmQ3MmM1ZjVhMGJmY2Qz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTA4OTcsNiArMTA4OTcsNDAgQEAKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgz
IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyogUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkExM0E5RjI3
NEM1Q0M3MDBFMkE4OEUgLyogRmlsdGVyRWZmZWN0QXBwbGllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
aWx0ZXJFZmZlY3RBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEz
QUI2Mjc0RENFREMwMEUyQTg4RSAvKiBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FCNzI3NERDRURDMDBFMkE4OEUgLyogRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUI4
Mjc0RERFQzAwMEUyQTg4RSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FCOTI3NERERUMwMDBFMkE4
OEUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTEzQUJBMjc0REUwMTIwMEUyQTg4RSAvKiBGRUNvbXBvc2l0ZVNvZnR3
YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBw
bGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUJCMjc0REUwMTIw
MEUyQTg4RSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
RUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkExM0FCRTI3NERFMzNGMDBFMkE4OEUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBw
bGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBs
aWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQkYyNzRERTMzRjAw
RTJBODhFIC8qIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkExM0FDMDI3NERFMzU5MDBFMkE4OEUgLyogRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FD
MTI3NERFMzU5MDBFMkE4OEUgLyogRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQzIyNzRERTM4NzAwRTJBODhFIC8qIEZFRHJv
cFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRURyb3BTaGFk
b3dTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkEx
M0FDMzI3NERFMzg3MDBFMkE4OEUgLyogRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkExM0FDNDI3NERFMzlFMDBFMkE4OEUgLyogRkVGbG9vZFNvZnR3
YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUZsb29kU29mdHdhcmVBcHBsaWVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQzUyNzRERTM5RTAwRTJB
ODhFIC8qIEZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVGbG9vZFNv
ZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDNjI3
NERFM0I3MDBFMkE4OEUgLyogRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDNzI3NERFM0I3MDBFMkE4OEUgLyogRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJT
b2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQzgy
NzRERTNEMTAwRTJBODhFIC8qIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTEzQUM5Mjc0REUzRDEwMEUyQTg4RSAvKiBGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQ0EyNzRERTNFNTAwRTJBODhF
IC8qIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVNZXJn
ZVNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEz
QUNCMjc0REUzRTUwMEUyQTg4RSAvKiBGRU1lcmdlU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJBMTNBQ0MyNzRERTQzNzAwRTJBODhFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBw
bGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDRDI3NERFNDM3MDBFMkE4
OEUgLyogRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFTW9y
cGhvbG9neVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkExM0FDRTI3NERFNDZDMDBFMkE4OEUgLyogRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDRjI3NERFNDZDMDBFMkE4OEUgLyogRkVPZmZzZXRT
b2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBRDAyNzRERTQ4OTAwRTJBODhF
IC8qIEZFVGlsZVNvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVT
b2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FE
MTI3NERFNDg5MDBFMkE4OEUgLyogRkVUaWxlU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFVGlsZVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkExM0FEMjI3NERFNTE4MDBFMkE4OEUgLyogRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUQzMjc0REU1MTgwMEUyQTg4RSAv
KiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEz
QUQ0Mjc0REU1NEUwMEUyQTg4RSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUQ1Mjc0REU1NEUwMEUyQTg4RSAvKiBTb3VyY2VB
bHBoYVNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VBbHBoYVNvZnR3YXJl
QXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FENjI3NERFNTc4
MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBMTNBRDcyNzRERTU3ODAwRTJBODhFIC8qIFNvdXJjZUdyYXBoaWNT
b2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlR3JhcGhpY1NvZnR3YXJlQXBw
bGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkI0RUY3NDI3NEUyMzMzMDAy
OTNDMkYgLyogRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUJsZW5k
U29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjRFRjc1
Mjc0RTIzMzQwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkJBQzNBNDIzRTE3MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E1MjNFMTczMjgw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzODMyLDYgKzIzODY2LDQ3IEBACiAJCQlwYXRo
ID0gIm1vZGVsLWVsZW1lbnQiOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJ
NzJBMTNBQjQyNzREQ0VBMzAwRTJBODhFIC8qIHNvZnR3YXJlICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MkI0RUY3NTI3NEUyMzM0MDAyOTNDMkYgLyog
RkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJCNEVGNzQyNzRFMjMzMzAwMjkz
QzJGIC8qIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaCAqLywKKwkJCQk3MkExM0FCNjI3NERDRURD
MDBFMkE4OEUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJB
MTNBQjcyNzREQ0VEQzAwRTJBODhFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaCAq
LywKKwkJCQk3MkExM0FCODI3NERERUMwMDBFMkE4OEUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBQjkyNzREREVDMDAwRTJBODhFIC8qIEZF
Q29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuaCAqLywKKwkJCQk3MkExM0FCQTI3NERF
MDEyMDBFMkE4OEUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcy
QTEzQUJCMjc0REUwMTIwMEUyQTg4RSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oICov
LAorCQkJCTcyQTEzQUJFMjc0REUzM0YwMEUyQTg4RSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FCRjI3NERFMzNGMDBFMkE4OEUgLyogRkVDb252
b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUMwMjc0REUzNTkwMEUy
QTg4RSAvKiBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJB
MTNBQzEyNzRERTM1OTAwRTJBODhFIC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
LmggKi8sCisJCQkJNzJBMTNBQzIyNzRERTM4NzAwRTJBODhFIC8qIEZFRHJvcFNoYWRvd1NvZnR3
YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBQzMyNzRERTM4NzAwRTJBODhFIC8qIEZFRHJv
cFNoYWRvd1NvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUM0Mjc0REUzOUUwMEUyQTg4
RSAvKiBGRUZsb29kU29mdHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FDNTI3NERFMzlF
MDBFMkE4OEUgLyogRkVGbG9vZFNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUM2Mjc0
REUzQjcwMEUyQTg4RSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJ
CQkJNzJBMTNBQzcyNzRERTNCNzAwRTJBODhFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBs
aWVyLmggKi8sCisJCQkJNzJBMTNBQzgyNzRERTNEMTAwRTJBODhFIC8qIEZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUM5Mjc0REUzRDEwMEUyQTg4RSAvKiBGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBQ0EyNzRERTNFNTAwRTJBODhF
IC8qIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUNCMjc0REUzRTUw
MEUyQTg4RSAvKiBGRU1lcmdlU29mdHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBQ0MyNzRE
RTQzNzAwRTJBODhFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJ
NzJBMTNBQ0QyNzRERTQzNzAwRTJBODhFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5o
ICovLAorCQkJCTcyQTEzQUNFMjc0REU0NkMwMEUyQTg4RSAvKiBGRU9mZnNldFNvZnR3YXJlQXBw
bGllci5jcHAgKi8sCisJCQkJNzJBMTNBQ0YyNzRERTQ2QzAwRTJBODhFIC8qIEZFT2Zmc2V0U29m
dHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBRDAyNzRERTQ4OTAwRTJBODhFIC8qIEZFVGls
ZVNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBRDEyNzRERTQ4OTAwRTJBODhFIC8q
IEZFVGlsZVNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUQyMjc0REU1MTgwMEUyQTg4
RSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUQzMjc0
REU1MTgwMEUyQTg4RSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAqLywKKwkJCQk3
MkExM0FENDI3NERFNTRFMDBFMkE4OEUgLyogU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuY3Bw
ICovLAorCQkJCTcyQTEzQUQ1Mjc0REU1NEUwMEUyQTg4RSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJl
QXBwbGllci5oICovLAorCQkJCTcyQTEzQUQ2Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VHcmFw
aGljU29mdHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FENzI3NERFNTc4MDBFMkE4OEUg
LyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBz
b2Z0d2FyZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdDMDExRjNDMjRG
QUQzNjAwMDVCRUYxMCAvKiBTZXR0aW5nc1RlbXBsYXRlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTkwNCw2ICsyNTk3OSw3IEBACiAJCUE3NUU4QjdG
MEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3MkExM0FCNDI3NERDRUEzMDBFMkE4OEUgLyogc29mdHdhcmUg
Ki8sCiAJCQkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhDIC8qIERpc3RhbnRMaWdodFNvdXJjZS5j
cHAgKi8sCiAJCQkJODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJj
ZS5oICovLAogCQkJCUE3NUU4QjgwMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUJsZW5kLmNwcCAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuY3BwCmluZGV4IGQyY2FiYmE5Zjg2YWIzMzIwZWMyM2UwNWQ3ZmE1N2FhM2E0ZDQyYjguLjI5
ZGNiMGZiZjRmMWEwOTE2MzBjMjAwMDcxNDQxNjUwNTJhMmJkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtNSw2
ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIElu
Y29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
NiwxMCArMjcsNyBAQAogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAogI2luY2x1ZGUgIkZFQmxlbmRO
RU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorI2luY2x1ZGUgIkZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUzLDM4ICs1
MSw2IEBAIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQogICAgIHJl
dHVybiB0cnVlOwogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVCbGVuZFNvZnR3YXJl
QXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIEZFQmxl
bmRTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
QmxlbmQ+IHsKLSAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
QmxlbmQ+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBw
bHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMp
IG92ZXJyaWRlOwotfTsKLQotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi1ib29sIEZF
QmxlbmRTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdHNbMF0uZ2V0KCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNb
MV0uZ2V0KCk7Ci0KLSAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgYXV0
byBpbWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFn
ZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBH
cmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwot
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0
LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5k
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0s
IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJj
ZU92ZXIsIG1fZWZmZWN0LmJsZW5kTW9kZSgpIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotI2Vu
ZGlmCi0KIGJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogewogICAgIHJldHVybiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBs
eShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKaW5kZXggMzM2OTNjMTk5N2JiYTdiYmRlODg5
MDU4N2IxNTZlZWUzMzc2YzVjZC4uNDdjZjg1ZTk4OTVhNzBmNDM0NjFlMTBjMjQzMmRjZmE3ZDBh
NGU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMg
SW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTM4LDggKzM5LDcgQEAgcHJpdmF0ZToKICAgICBGRUJsZW5kKEJsZW5kTW9kZSk7CiAKICAgICBi
b29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1
bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJh
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgp
OworCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFy
cmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBp
eGVsQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5
TGVuZ3RoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggMTAyMzdiYTlkY2MyNDFmZGUxNGYz
MTIzZGM2NDg2M2IyMjZiZGYzNS4uZDY4NWExNDUwYjQ3NTMyMjVhNzI5MzIxMGFlYzk2MDgzOGQ2
MWQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MywxNyArMjQsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRy
aXguaCIKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRl
Lmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWY8RkVDb2xvck1hdHJpeD4g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+
JiYgdmFsdWVzKQpAQCAtMTAwLDI3OSArOTMsNiBAQCBWZWN0b3I8ZmxvYXQ+IEZFQ29sb3JNYXRy
aXg6Om5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQogICAgIHJl
dHVybiBub3JtYWxpemVkVmFsdWVzOwogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBm
aWxlcy4KLWNsYXNzIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29sb3JNYXRyaXg+IHsKLSAgICB1c2luZyBCYXNlID0g
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29sb3JNYXRyaXg+OwotCi1wdWJsaWM6Ci0g
ICAgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcihGRUNvbG9yTWF0cml4Jik7Ci0KLSAgICBi
b29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgdm9pZCBtYXRyaXgoZmxv
YXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsK
LSAgICBpbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlKSBjb25zdDsKLSAgICBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxv
YXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHZvaWQgYXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVk
KFBpeGVsQnVmZmVyJikgY29uc3Q7Ci0jZW5kaWYKLSAgICB2b2lkIGFwcGx5UGxhdGZvcm1VbmFj
Y2VsZXJhdGVkKFBpeGVsQnVmZmVyJikgY29uc3Q7Ci0KLSAgICB2b2lkIGFwcGx5UGxhdGZvcm0o
UGl4ZWxCdWZmZXImKSBjb25zdDsKLQotICAgIGZsb2F0IG1fY29tcG9uZW50c1s5XTsKLX07Ci0K
LUZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXIoRkVDb2xvck1hdHJpeCYgZWZmZWN0KQotICAgIDogQmFzZShlZmZlY3QpCi17Ci0gICAgaWYg
KG1fZWZmZWN0LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCi0gICAgICAg
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMs
IG1fZWZmZWN0LnZhbHVlcygpWzBdKTsKLSAgICBlbHNlIGlmIChtX2VmZmVjdC50eXBlKCkgPT0g
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2Fs
Y3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1fZWZmZWN0LnZhbHVlcygp
WzBdKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6bWF0
cml4KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkg
Y29uc3QKLXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAgICBm
bG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxwaGE7Ci0KLSAgICBjb25zdCBhdXRvJiB2
YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKLQotICAgIHJlZCAgID0gdmFsdWVzWyAwXSAqIHIg
KyB2YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1
ZXNbIDRdICogMjU1OwotICAgIGdyZWVuID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICog
ZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1Owot
ICAgIGJsdWUgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFdICogZyArIHZhbHVlc1sxMl0g
KiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1OwotICAgIGFscGhhID0gdmFs
dWVzWzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4
XSAqIGEgKyB2YWx1ZXNbMTldICogMjU1OwotfQotCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlKSBjb25zdAotewotICAgIGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxv
YXQgZyA9IGdyZWVuOwotICAgIGZsb2F0IGIgPSBibHVlOwotCi0gICAgcmVkICAgICA9IHIgKiBt
X2NvbXBvbmVudHNbMF0gKyBnICogbV9jb21wb25lbnRzWzFdICsgYiAqIG1fY29tcG9uZW50c1sy
XTsKLSAgICBncmVlbiAgID0gciAqIG1fY29tcG9uZW50c1szXSArIGcgKiBtX2NvbXBvbmVudHNb
NF0gKyBiICogbV9jb21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICogbV9jb21wb25lbnRz
WzZdICsgZyAqIG1fY29tcG9uZW50c1s3XSArIGIgKiBtX2NvbXBvbmVudHNbOF07Ci19Ci0KLS8v
IEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENv
bG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
OjpsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQm
IGFscGhhKSBjb25zdAotewotICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsgMC43MTU0ICogZ3Jl
ZW4gKyAwLjA3MjEgKiBibHVlOwotICAgIHJlZCA9IDA7Ci0gICAgZ3JlZW4gPSAwOwotICAgIGJs
dWUgPSAwOwotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi12b2lkIEZFQ29sb3JNYXRyaXhTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxC
dWZmZXIpIGNvbnN0Ci17Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEo
KTsKLSAgICBhdXRvIGJ1ZmZlclNpemUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7Ci0KLSAgICBBU1NF
UlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwotICAgIAot
ICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4
ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGgg
PSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0
KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBzcmMu
ZGF0YSA9IGRhdGE7Ci0gICAgCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBidWZmZXJTaXplLmhl
aWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAg
IGRlc3QuZGF0YSA9IGRhdGE7Ci0KLSAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUoKSkgewotICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIHZh
bHVlcyA9IG1fZWZmZWN0LnZhbHVlcygpOwotCi0gICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4
WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbIDBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAotCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNv
cikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzE2XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sg
OF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAotICAgICAgICB9OwotICAgICAgICB2SW1h
Z2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBu
dWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0
ICogNF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21w
b25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKG1fY29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICAwLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21w
b25lbnRzWzFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKG1fY29tcG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICAwLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21w
b25lbnRzWzJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKG1fY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICAwLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICBkaXZpc29yLAotICAgICAgICB9OwotICAgICAgICB2SW1hZ2VNYXRyaXhN
dWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBu
dWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7Ci0gICAgICAgIGNvbnN0IGlu
dDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigw
LjIxMjUgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcx
NTQgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEg
KiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFnZU1hdHJpeE11
bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51
bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLX0K
LSNlbmRpZgotCi12b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm1VbmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKLXsKLSAgICBh
dXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVs
QXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwotCi0gICAgc3dpdGNoIChtX2VmZmVj
dC50eXBlKCkpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhl
bEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQg
cmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9h
dCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAg
ICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0g
ICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQg
KyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0
IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAg
ICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAg
ICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUpOwotICAgICAg
ICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0
ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAg
ICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKLSAg
ICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCAr
IDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwg
cmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdy
ZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJs
dWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxw
aGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlcikgY29uc3QKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBjb25zdCBhdXRvJiB2YWx1
ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKLQotICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FS
R0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVt
biBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4Ci0gICAgLy8gaXMgbm90IHplcm8sIGZh
bGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCi0gICAgaWYgKG1fZWZmZWN0LnR5cGUoKSAhPSBG
RUNPTE9STUFUUklYX1RZUEVfTUFUUklYIHx8ICghdmFsdWVzWzRdICYmICF2YWx1ZXNbOV0gJiYg
IXZhbHVlc1sxNF0gJiYgIXZhbHVlc1sxOV0pKSB7Ci0gICAgICAgIGFwcGx5UGxhdGZvcm1BY2Nl
bGVyYXRlZChwaXhlbEJ1ZmZlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAg
ICBhcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7Ci19Ci0KLWJvb2wgRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgYXV0byBpbiA9IGlucHV0RWZm
ZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBp
ZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgs
IG1fZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KElu
dFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRv
IHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VS
ZWN0KTsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBKQotICAgICAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0KLSAgICBhcHBs
eVBsYXRmb3JtKCpwaXhlbEJ1ZmZlcik7Ci0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVy
KCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBG
RUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
CiB7CiAgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5
KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCBmNjlmMGIwMWM5
NTA3ZTA1MjZlMGQxNzdlYmJlZjk2OTAwOWNlMWQzLi41NjAxZWIwOTY4N2U4NTdhNjY3NWMxMjg1
MzZlYjA1MThkMjNkMmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMiw2ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5j
cHAKaW5kZXggZGFlMTg5ZWE5ZDc3Y2Y3NDZhYTM0MTZjYjgxNmZlZmYyMTRjZTNhYS4uODZmOWRl
MWYwNDdjZjQxYTNlOWRjNTJkZDU5MmY3ZmEzMjEwYmQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjQsMTIgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBv
bmVudFRyYW5zZmVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDE0MSArNDQsNiBAQCBGRUNvbXBvbmVudFRyYW5zZmVyOjpG
RUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1
bgogewogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNz
IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJhbnNmZXI+IHsKLSAgICB1c2luZyBCYXNlID0g
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJhbnNmZXI+OwotCi1wdWJs
aWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1w
cml2YXRlOgotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+
OwotCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0
ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21w
dXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0KLSAgICBzdGF0aWMgTG9va3VwVGFi
bGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsK
LQotICAgIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0OwotfTsKLQotdm9p
ZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlSWRlbnRpdHlUYWJs
ZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQotewotfQot
Ci12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVUYWJ1bGFy
VGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZh
bHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgbiA9IHRh
YmxlVmFsdWVzLnNpemUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGRv
dWJsZSBjID0gaSAvIDI1NS4wOwotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107
Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0g
MSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0g
aykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1
NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFs
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6
Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAg
dW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAg
IHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAv
IDI1NS4wKTsKLSAgICAgICAgayA9IHN0ZDo6bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91Ymxl
IHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2tdOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAs
IHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3
YXJlQXBwbGllcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3Vi
bGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0
aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUu
MCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7
Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi1GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpMb29rdXBUYWJsZSBGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTG9va3VwVGFibGUoY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pCi17Ci0gICAgTG9va3VwVGFibGUgdGFibGU7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAg
IHRhYmxlW2ldID0gaTsKLQotICAgIHVzaW5nIFRyYW5zZmVyVHlwZSA9IHZvaWQgKCopKExvb2t1
cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIFRyYW5zZmVy
VHlwZSBjYWxsRWZmZWN0W10gPSB7Ci0gICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8v
IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOCi0gICAgICAgIGNvbXB1dGVJZGVudGl0
eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9JREVOVElUWQotICAgICAgICBj
b21wdXRlVGFidWxhclRhYmxlLCAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUK
LSAgICAgICAgY29tcHV0ZURpc2NyZXRlVGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0RJU0NSRVRFCi0gICAgICAgIGNvbXB1dGVMaW5lYXJUYWJsZSwgICAgIC8vIEZFQ09NUE9O
RU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIKLSAgICAgICAgY29tcHV0ZUdhbW1hVGFibGUgICAgICAg
Ly8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BCi0gICAgfTsKLQotICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihmdW5j
dGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIGNhbGxFZmZl
Y3RbZnVuY3Rpb24udHlwZV0odGFibGUsIGZ1bmN0aW9uKTsKLQotICAgIHJldHVybiB0YWJsZTsK
LX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKLXsKLSAgICBhdXRvJiBwaXhlbEFy
cmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgg
PSBwaXhlbEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRh
dGEoKTsKLQotICAgIGF1dG8gcmVkVGFibGUgICA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVj
dC5yZWRGdW5jdGlvbigpKTsKLSAgICBhdXRvIGdyZWVuVGFibGUgPSBjb21wdXRlTG9va3VwVGFi
bGUobV9lZmZlY3QuZ3JlZW5GdW5jdGlvbigpKTsKLSAgICBhdXRvIGJsdWVUYWJsZSAgPSBjb21w
dXRlTG9va3VwVGFibGUobV9lZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIGF1dG8gYWxwaGFU
YWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJh
eUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSAg
ICAgPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZz
ZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAgICAgZGF0
YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07Ci0g
ICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNl
dCArIDNdXTsKLSAgICB9Ci19Ci0KLWJvb2wgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQo
KTsKLSAgICAKLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhl
bEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOwot
ICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYXV0byBkcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQaXhlbEJ1
ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZHJhd2luZ1JlY3QpOwotCi0gICAg
YXBwbHlQbGF0Zm9ybSgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlcik7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGJvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyU29m
dHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggNTE4ZWExMzQ3YTRhZGRiYTRjZDUwMGNiNDJjODEz
NzA2ZGNjZDE5NS4uYzdkMzQ5MzZmMDY2YmFjY2E1NTE4OTdmMGQzYzNmMTRlZWNmZDU0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggMTVhNzEyOTk4ODI5YWNk
OWI0ZDI5NDVhZmRlYmJlNmQ2ODdiN2RiYi4uZWYzN2U0Y2NkODdiOWRlNWQ2Yjk0MTJkMzhjZmNl
MzllMDY1NDQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxMSArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCiAKLSNpbmNsdWRlICJGRUNvbXBvc2l0ZUFyaXRobWV0
aWNORU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MTEwLDIyMSArMTA3LDYgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgfQogfQogCi0vLyBGSVhNRTogTW92ZSB0
aGUgY2xhc3MgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFu
ZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllciA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb21wb3NpdGU+IHsKLSAgICB1c2luZyBC
YXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9zaXRlPjsKLQotcHVibGlj
OgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBzdGF0aWMgdWludDhfdCBjbGFtcEJ5dGUoaW50KTsKLQotICAgIHRlbXBsYXRl
IDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlv
biwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZs
b2F0IGs0KTsKLQotICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQodW5zaWduZWQgY2hhciog
c291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgs
IGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKLQotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBseVBsYXRmb3JtQXJpdGhtZXRpYyh1bnNpZ25lZCBjaGFyKiBzb3VyY2Us
IHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQg
azEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotCi0gICAgYm9vbCBhcHBseUFyaXRo
bWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpOwotICAgIGJvb2wgYXBw
bHlOb25Bcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKTsKLX07
Ci0KLXVpbnQ4X3QgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNsYW1wQnl0ZShpbnQgYykK
LXsKLSAgICB1aW50OF90IGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oYyksIDI1NSwg
MCB9OwotICAgIHVuc2lnbmVkIHVjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOwotICAgIHJl
dHVybiBidWZmWyEhKHVjICYgfjB4ZmYpICsgISEodWMgJiB+KH4wdSA+PiAxKSldOwotfQotCi10
ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+Ci1pbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJl
QXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1
bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsx
LCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwot
ICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChiMSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAv
IDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAgIHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0K
LSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDApIHsKLSAgICAgICAgdW5zaWduZWQg
Y2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRp
b247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEgKyBrMyAqIGkyOwotICAgICAgICBp
ZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAg
ICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRl
c3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7Ci0gICAgICAgICsrc291cmNlOwotICAgICAg
ICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQotLy8gY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNV
bmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyBm
b3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1waW5nCi0vLyBpcyBub3QgbmVjZXNzYXJ5LiBU
aGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgc3VjaCBhcyBhdXRv
LXZlY3Rvcml6YXRpb24uCi10ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+Ci1pbmxpbmUgdm9pZCBG
RUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChi
MSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAg
IHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3Ro
ID49IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsy
ICogaTEgKyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0g
c2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gcmVzdWx0OwotICAgICAgICAr
K3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiAhSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQotaW5saW5lIHZvaWQgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWdu
ZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9hdCB1cHBlckxpbWl0ID0gc3Rk
OjptYXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4wZiwgazIpICsgc3RkOjptYXgoMC4wZiwgazMp
ICsgazQ7Ci0gICAgZmxvYXQgbG93ZXJMaW1pdCA9IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0ZDo6
bWluKDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYsIGszKSArIGs0OwotICAgIGlmICgoazQgPj0g
MC4wZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJMaW1pdCA+PSAwLjBmICYmIHVwcGVyTGltaXQg
PD0gMS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4wZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYpKSB7
Ci0gICAgICAgIGlmIChrNCkgewotICAgICAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgICAg
IGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRp
b24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAxPihz
b3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAgY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwg
cGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNvdXJj
ZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGs0KSB7Ci0gICAgICAgIGlm
IChrMSkKLSAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJjZSwg
ZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMT4oc291cmNlLCBk
ZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
PDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8
MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOwotICAgIH0KLX0KLSNlbmRpZgotCi1ib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
OjphcHBseUFyaXRobWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpCi17
Ci0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJS
ZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7Ci0gICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRS
ZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3VyY2VQaXhl
bEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1
ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
LSAgICBpbjItPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwg
ZWZmZWN0QkRyYXdpbmdSZWN0KTsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3Vy
Y2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIGludCBsZW5ndGggPSBzb3Vy
Y2VQaXhlbEFycmF5Lmxlbmd0aCgpOwotICAgIEFTU0VSVChsZW5ndGggPT0gc3RhdGljX2Nhc3Q8
aW50PihkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCkpKTsKLSAgICBhcHBseVBsYXRmb3Jt
QXJpdGhtZXRpYyhzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5
LmRhdGEoKSwgbGVuZ3RoLCBtX2VmZmVjdC5rMSgpLCBtX2VmZmVjdC5rMigpLCBtX2VmZmVjdC5r
MygpLCBtX2VmZmVjdC5rNCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbXBv
c2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4s
IEZpbHRlckVmZmVjdCogaW4yKQotewotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBhdXRvIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwot
Ci0gICAgc3dpdGNoIChtX2VmZmVjdC5vcGVyYXRpb24oKSkgewotICAgIGNhc2UgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOiB7Ci0gICAgICAgIC8vIEFwcGxpZXMgb25seSB0byB0
aGUgaW50ZXJzZWN0ZWQgcmVnaW9uLgotICAgICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9
IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJz
ZWN0KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QobV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGlmIChkZXN0
aW5hdGlvblJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEludFJl
Y3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBtX2VmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIEludFJlY3Qgc291cmNlUmVj
dCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7
Ci0gICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJ
biB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VC
dWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9z
aXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1
ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbXBvc2l0
ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0c1swXS5nZXQoKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5n
ZXQoKTsKLQotICAgIGlmIChtX2VmZmVjdC5vcGVyYXRpb24oKSA9PSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9BUklUSE1FVElDKQotICAgICAgICByZXR1cm4gYXBwbHlBcml0aG1ldGljKGluLCBpbjIp
OwotICAgIHJldHVybiBhcHBseU5vbkFyaXRobWV0aWMoaW4sIGluMik7Ci19Ci0KIGJvb2wgRkVD
b21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsK
ICAgICByZXR1cm4gRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRl
ciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IGE4NzZhOTVkM2Y3MTkyZDA2MmZm
ODRhM2EwNmUwZTZmMzM3NDY4YjguLmY1ZTQ5NzQwMjY5YzBkNmVmOTlkMDg3MjA0MTFkMzRlZThk
Njc0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDI0NzU5ZjhmMjEx
OWVkMzc4NmIxZDk1MWNmOGRlMDI4NDM1NGE5OWYuLmVjMWY4YTBkNDVlYzg1NmZiZmQyMjc1OTYw
NzQ1MDhkNmQ2OGU5MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtNCw2ICs0LDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDExICsyNiw3IEBACiAjaW5jbHVkZSAiRkVDb252b2x2
ZU1hdHJpeC5oIgogCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdEFwcGxpZXIuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVy
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0xMTcsMzMxICsxMTQsNiBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldFByZXNl
cnZlQWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhhKQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBG
SVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllciB0byBz
ZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIEZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29u
dm9sdmVNYXRyaXg+IHsKLSAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBs
aWVyPEZFQ29udm9sdmVNYXRyaXg+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsK
LQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9y
JiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBQYWludGlu
Z0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsK
LSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3
aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLQotICAgICAgICBJbnRTaXplIGtlcm5lbFNpemU7
Ci0gICAgICAgIGZsb2F0IGRpdmlzb3I7Ci0gICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgICAgIElu
dFBvaW50IHRhcmdldE9mZnNldDsKLSAgICAgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOwotICAg
ICAgICBib29sIHByZXNlcnZlQWxwaGE7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0
cml4OwotICAgIH07Ci0KLSAgICBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2xhbXBSR0JBVmFsdWUo
ZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXggPSAyNTUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4
ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRv
dGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVz
KTsKLQotICAgIHN0YXRpYyBpbmxpbmUgaW50IGdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdE
YXRhJiwgaW50IHgsIGludCB5KTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnRlcmlv
clBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50
IHlTdGFydCwgaW50IHlFbmQpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAg
dm9pZCBhcHBseVBsYXRmb3JtKFBhaW50aW5nRGF0YSYpIGNvbnN0OwotfTsKLQotLyoKLSAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252b2x2ZU1hdHJpeCBp
bXBsZW1lbnRhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93aW5nIHdheToKLQot
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAgICAgQSAgICAgICAg
ICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgIHwgICAgICAgICAg
ICAgfCAgIHwKLSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAgICB8ICAgfCAgICAg
ICAgICAgICB8ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAg
ICAgICAgRSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi0gICBX
aGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZhbHVlcwotICAgY2Fu
IGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0aGUgcmVjdGFuZ2xl
LgotCi0gICBFeGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEwLCBoZWlnaHQ6IDEw
Ci0KLSAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDogMywgaGVpZ2h0IDQK
LSAgICAgIFRhcmdldDogeDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hv
d3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAgICAgICAgLi4uCi0g
ICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRoZSByZWdpb25zIGlu
IHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4MSwgeTEpIHRvcC1s
ZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgotICAgICAgTm90ZTog
cm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lvbgotICAgICAgICAg
ICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwgeDIgYW5kIHkxIDw9
IHkgPCB5MgotCi0gICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4MjogMTAsIHkyOiAzCi0g
ICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0gICAgICBSZWdpb24g
QzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24gRDogeDE6IDksIHkx
OiAzLCB4MjogMTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5MTogMTAsIHgyOiAx
MCwgeTI6IDEwIChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBDIChvZnRlbikgY29u
dGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAgYSBmYXN0IGFsZ29y
aXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0SW50ZXJpb3JQaXhl
bHMuCi0gICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxzIGlzIHVzZWQsIHdo
aWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxzIG91dHNpZGUgb2Yg
dGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2VybmVsIG1hdHJpeCBp
cyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1bGF0ZWQgYnkgdGhp
cwotICAgZnVuY3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5jdGlvbnMgaGF2ZSBs
b3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1vbiBhIHRlbXBsYXRl
IGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFzIHdlbGwsCi0gICBh
bmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgotKi8KLQotaW5saW5l
IHVpbnQ4X3QgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFsdWUo
ZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXgpCi17Ci0gICAgaWYgKGNoYW5uZWwgPD0gMCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGNoYW5uZWwgPj0gbWF4KQotICAgICAgICByZXR1cm4g
bWF4OwotICAgIHJldHVybiBjaGFubmVsOwotfQotCi1pbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50
JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBw
cmVzZXJ2ZUFscGhhVmFsdWVzKQotewotICAgIHVpbnQ4X3QgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFs
cGhhVmFsdWVzID8gMjU1IDogY2xhbXBSR0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJp
YXMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBkZXN0UGl4ZWxz
LnNldChwaXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywg
bWF4QWxwaGEpKTsKLQotICAgIGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7Ci0gICAgICAgIGRl
c3RQaXhlbHMuc2V0KHBpeGVsLCBzb3VyY2VQaXhlbHMuaXRlbShwaXhlbCkpOwotICAgICAgICAr
K3BpeGVsOwotICAgIH0gZWxzZQotICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBtYXhB
bHBoYSk7Ci19Ci0KLWlubGluZSBpbnQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6
Z2V0UGl4ZWxWYWx1ZShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGlu
dCB5KQotewotICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49
IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50
aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKHBhaW50aW5nRGF0YS5lZGdl
TW9kZSkgewotICAgIGRlZmF1bHQ6IC8vIEVER0VNT0RFX05PTkUKLSAgICAgICAgcmV0dXJuIC0x
OwotICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgotICAgICAgICBpZiAoeCA8IDApCi0gICAg
ICAgICAgICB4ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lkdGgp
Ci0gICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKLSAgICAgICAgaWYgKHkg
PCAwKQotICAgICAgICAgICAgeSA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdE
YXRhLmhlaWdodCkKLSAgICAgICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsKLSAg
ICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLSAgICBjYXNl
IEVER0VNT0RFX1dSQVA6Ci0gICAgICAgIHdoaWxlICh4IDwgMCkKLSAgICAgICAgICAgIHggKz0g
cGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAg
ICAgICAgd2hpbGUgKHkgPCAwKQotICAgICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0
OwotICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHJldHVybiAoeSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgfQotfQotCi0vLyBPbmx5IGZvciBy
ZWdpb24gQwotaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0
SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQs
IGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKLXsKLSAgICAvLyBlZGdlIG1v
ZGUgZG9lcyBub3QgYWZmZWN0IHRoZXNlIHBpeGVscwotICAgIGludCBwaXhlbCA9IChwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHBhaW50aW5nRGF0
YS50YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJp
Z2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndp
ZHRoKCkgLSAxKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkgY29tcG9u
ZW50cwotICAgIGZsb2F0IHRvdGFsc1s0XTsKLQotICAgIC8vIGRpdmlzb3IgY2Fubm90IGJlIDAs
IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChwYWlu
dGluZ0RhdGEuZGl2aXNvcik7Ci0KLSAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20g
LSB5RW5kKScgbGluZXMKLSAgICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNy
ZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0g
KGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsK
LQotICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7Ci0gICAgICAg
IGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBp
bnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0g
ICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAg
ICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAg
ICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAg
ICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKLQotICAgICAg
ICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAgICB0b3RhbHNb
MF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2Fz
dDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7
Ci0gICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBw
YWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0
PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKQotICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShr
ZXJuZWxQaXhlbCkpOwotICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWw7Ci0gICAgICAgICAg
ICAgICAgLS1rZXJuZWxWYWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKLSAg
ICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2VybmVsSW5jcmVhc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0
aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4
ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0
YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7Ci0gICAgICAgICAgICBzdGFydEtl
cm5lbFBpeGVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwot
ICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICB9Ci19Ci0KLS8vIEZv
ciBvdGhlciByZWdpb25zIHRoYW4gQwotaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlQXBwbGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICBpbnQgcGl4ZWwgPSAoeTEgKiBw
YWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OwotICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwot
ICAgIGludCB3aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEg
LSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhl
bFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAt
IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpOwotICAgIGludCB4SW5jcmVhc2UgPSAocGFp
bnRpbmdEYXRhLndpZHRoIC0gd2lkdGgpICogNDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9m
IHJnYihhKSBjb21wb25lbnRzCi0gICAgZmxvYXQgdG90YWxzWzRdOwotCi0gICAgLy8gcGFpbnRp
bmdEYXRhLmRpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVu
c3VyZXMgdGhpcwotICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7Ci0KLSAgICBmb3Ig
KGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSB3aWR0
aDsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0
YXJ0S2VybmVsUGl4ZWxZOwotICAgICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtl
cm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAg
ICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAg
ICAgdG90YWxzWzNdID0gMDsKLQotICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDAp
IHsKLSAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRleCA9IGdldFBpeGVsVmFsdWUocGFpbnRp
bmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVsWSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHBpeGVsSW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFp
bnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4KSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KHBpeGVsSW5kZXggKyAxKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWlu
dGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAyKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxw
aGEgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOwotICAg
ICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFs
dWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAgICAr
K2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBwYWludGluZ0RhdGEu
a2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0Rh
dGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhh
KTsKLSAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgIH0KLSAgICAgICAg
cGl4ZWwgKz0geEluY3JlYXNlOwotICAgICAgICBzdGFydEtlcm5lbFBpeGVsWCA9IGJlZ2luS2Vy
bmVsUGl4ZWxYOwotICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxZOwotICAgIH0KLX0KLQotdm9p
ZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAotewotICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJl
ZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gcGFpbnRp
bmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xpcEJvdHRvbSA9IHBhaW50aW5n
RGF0YS5oZWlnaHQgLSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS5oZWlnaHQoKTsKLQotICAgIGlm
IChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7Ci0gICAgICAgIC8vIFJhcmUgc2l0
dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLmhlaWdo
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGludCBt
aW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKHBhaW50aW5n
RGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQpIC8gbWluaW1hbFJlY3REaW1lbnNpb24p
IHsKLSAgICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwotICAgICAg
ICBpbnQgY2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7Ci0K
LSAgICAgICAgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVf
dCBpbmRleCkgewotICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7Ci0g
ICAgICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSks
IGNsaXBCb3R0b20pOwotCi0gICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0Rh
dGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLSAgICAgICAgfSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJp
Z2h0LCBjbGlwQm90dG9tLCAwLCBjbGlwQm90dG9tKTsKLQotICAgIGNsaXBSaWdodCArPSBwYWlu
dGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSArIDE7Ci0KLSAgICBpZiAocGFpbnRpbmdEYXRhLnRhcmdl
dE9mZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkpOwot
ICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKLSAgICAgICAgc2V0T3V0
ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludGluZ0RhdGEud2lkdGgs
IHBhaW50aW5nRGF0YS5oZWlnaHQpOwotICAgIGlmIChwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0
LngoKSA+IDApCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRp
bmdEYXRhLnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpLCBj
bGlwQm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRpbmdEYXRhLndpZHRoKQotICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgcGFpbnRpbmdEYXRh
LnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS53aWR0aCwgY2xpcEJvdHRvbSk7Ci19Ci0K
LWJvb2wgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gYWxwaGFGb3Jt
YXQgPSBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCkgPyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQgOiBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkOwot
ICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVz
dWx0KGFscGhhRm9ybWF0KTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVj
dC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1
bHQoYWxwaGFGb3JtYXQsIGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+
ZGF0YSgpOwotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXItPmRhdGEoKTsKLSAgICAKLSAgICBhdXRvIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0
YSA9IHsKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSwKLSAgICAgICAgZGVzdGluYXRpb25QaXhl
bEFycmF5LAotICAgICAgICBwYWludFNpemUud2lkdGgoKSwKLSAgICAgICAgcGFpbnRTaXplLmhl
aWdodCgpLAotICAgICAgICBtX2VmZmVjdC5rZXJuZWxTaXplKCksCi0gICAgICAgIG1fZWZmZWN0
LmRpdmlzb3IoKSwKLSAgICAgICAgbV9lZmZlY3QuYmlhcygpICogMjU1LAotICAgICAgICBtX2Vm
ZmVjdC50YXJnZXRPZmZzZXQoKSwKLSAgICAgICAgbV9lZmZlY3QuZWRnZU1vZGUoKSwKLSAgICAg
ICAgbV9lZmZlY3QucHJlc2VydmVBbHBoYSgpLAotICAgICAgICBGRUNvbG9yTWF0cml4Ojpub3Jt
YWxpemVkRmxvYXRzKG1fZWZmZWN0Lmtlcm5lbCgpKQotICAgIH07Ci0KLSAgICBhcHBseVBsYXRm
b3JtKHBhaW50aW5nRGF0YSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVDb252b2x2
ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewog
ICAgIHJldHVybiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShm
aWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKQEAgLTQ1MCwxNiArMTIyLDE2IEBAIGJvb2wgRkVDb252
b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VN
b2RlVHlwZSYgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEVER0VNT0RF
X1VOS05PV046CisgICAgY2FzZSBFZGdlTW9kZVR5cGU6OlVua25vd246CiAgICAgICAgIHRzIDw8
ICJVTktOT1dOIjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6
CisgICAgY2FzZSBFZGdlTW9kZVR5cGU6OkR1cGxpY2F0ZToKICAgICAgICAgdHMgPDwgIkRVUExJ
Q0FURSI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRURHRU1PREVfV1JBUDoKKyAgICBjYXNl
IEVkZ2VNb2RlVHlwZTo6V3JhcDoKICAgICAgICAgdHMgPDwgIldSQVAiOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEVER0VNT0RFX05PTkU6CisgICAgY2FzZSBFZGdlTW9kZVR5cGU6Ok5vbmU6
CiAgICAgICAgIHRzIDw8ICJOT05FIjsKICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguaAppbmRleCA2YjdhZGU2ZjBiMjI4OWYzNDNlNTY4MTRmZDhjMmRlNTQ0NzNmZjk5
Li4wMmQ3YzJiZWM4YmRhMjEyNDYwOGQzNTA0N2VlOWYzYmFkYzRjYjQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcg
PHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsMTEgKzI5LDEx
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBFZGdlTW9kZVR5cGUgewotICAgIEVE
R0VNT0RFX1VOS05PV04gICA9IDAsCi0gICAgRURHRU1PREVfRFVQTElDQVRFID0gMSwKLSAgICBF
REdFTU9ERV9XUkFQICAgICAgPSAyLAotICAgIEVER0VNT0RFX05PTkUgICAgICA9IDMKK2VudW0g
Y2xhc3MgRWRnZU1vZGVUeXBlIHsKKyAgICBVbmtub3duLAorICAgIER1cGxpY2F0ZSwKKyAgICBX
cmFwLAorICAgIE5vbmUKIH07CiAKIGNsYXNzIEZFQ29udm9sdmVNYXRyaXggOiBwdWJsaWMgRmls
dGVyRWZmZWN0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKaW5kZXggNzYwZjgzNWIxYjUx
MjNkZDQyYzI2ZjE3ZjdjZGMxZDMzM2IyNGNkNi4uMDdiMDhjY2E0YTM4N2VlZjM3M2M4ZDA0NzA5
ODdjNTFiYzBkNTRkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuaAppbmRleCA4YTEwYWVjODdjOGYxODlmOWYwNTdjYjk0NDNlYWFlZGQ1MzhmNjkxLi4zMDI0
ZDY1MjFiMzlkNDJjYTRhMjBlNzU3N2Q5NDE0MWZlZjIwMWE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IGRmYzc2MGUyMGY0OTk0NjA1Zjk0NDkx
MmVmZGUzYWMwODE1MDRiYWQuLmY0ZDVmNDkxYTE1OGVkN2JlMjhiOTIyMTQyMTY1MGJmMzhlOGNl
YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTAgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiRkVEaXNwbGFjZW1l
bnRNYXBTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg1LDkzICs4Myw2IEBAIHZvaWQgRkVEaXNwbGFj
ZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29u
c3QgaW50IGluCiAgICAgICAgIGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUNvbXBvc2l0
ZVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNs
YXNzIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVj
dENvbmNyZXRlQXBwbGllcjxGRURpc3BsYWNlbWVudE1hcD4gewotICAgIHVzaW5nIEJhc2UgPSBG
aWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEaXNwbGFjZW1lbnRNYXA+OwotCi1wdWJsaWM6
Ci0gICAgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIoRkVEaXNwbGFjZW1lbnRNYXAm
KTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBpbmxp
bmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5z
aWduZWQgcm93Qnl0ZXMpCi0gICAgewotICAgICAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBp
eGVsID0gNDsKLSAgICAgICAgcmV0dXJuIHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVz
OwotICAgIH0KLQotICAgIGludCB4Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lZmZl
Y3QueENoYW5uZWxTZWxlY3RvcigpIC0gMTsgfQotICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9lZmZlY3QueUNoYW5uZWxTZWxlY3RvcigpIC0gMTsgfQotfTsKLQotRkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyKEZFRGlzcGxhY2VtZW50TWFwJiBlZmZlY3QpCi0gICAgOiBCYXNlKGVmZmVjdCkKLXsK
LSAgICBBU1NFUlQobV9lZmZlY3QueENoYW5uZWxTZWxlY3RvcigpICE9IENIQU5ORUxfVU5LTk9X
Tik7Ci0gICAgQVNTRVJUKG1fZWZmZWN0LnlDaGFubmVsU2VsZWN0b3IoKSAhPSBDSEFOTkVMX1VO
S05PV04pOwotfQotCi1ib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsK
LSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKLQotICAgIGF1
dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwotICAgIGlmICghZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAg
YXV0byBlZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gaW5wdXRQaXhl
bEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QpOwotCi0gICAgYXV0byBlZmZlY3RC
RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
aW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5n
IHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24t
cHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFjZW1lbnRQaXhlbEJ1
ZmZlciA9IGluMi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBlZmZlY3RCRHJhd2luZ1JlY3QpOwotICAgIAotICAgIGlmICghaW5w
dXRQaXhlbEJ1ZmZlciB8fCAhZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8mIGlucHV0SW1hZ2UgPSBpbnB1dFBpeGVsQnVmZmVyLT5kYXRh
KCk7Ci0gICAgYXV0byYgZGlzcGxhY2VtZW50SW1hZ2UgPSBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwotICAgIEFTU0VSVChpbnB1dEltYWdlLmxlbmd0aCgpID09IGRpc3BsYWNlbWVu
dEltYWdlLmxlbmd0aCgpKTsKLQotICAgIEludFNpemUgcGFpbnRTaXplID0gbV9lZmZlY3QuYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIu
c2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnNjYWxlKCksIG1fZWZmZWN0LnNjYWxlKCkg
fSk7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2FsZS53aWR0aCgpIC8gMjU1LjA7Ci0g
ICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1NS4wOwotICAgIGZs
b2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OwotICAgIGZsb2F0
IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQoKSAqIDAuNTsKLSAgICAKLSAgICBp
bnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7Ci0gICAgaW50IGRpc3Bs
YWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgpOwotCi0gICAgaW50IHJvd0J5dGVzID0g
cGFpbnRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNp
emUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJv
d0J5dGVzOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7
ICsreCkgewotICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZz
ZXQgKyB4ICogNDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3Rh
dGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLml0ZW0oZGVz
dGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwot
ICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9y
WSAqIGRpc3BsYWNlbWVudEltYWdlLml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVz
dGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlv
blBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRleCk7Ci0gICAgICAgICAgICBpZiAo
c3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZ
ID49IHBhaW50U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBp
eGVsUHRyID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCo+KGlucHV0SW1hZ2UuZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwg
cm93Qnl0ZXMpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCiBi
b29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCiB7CiAgICAgcmV0dXJuIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
KCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuaAppbmRleCA3YTYzNzhiMDRjYjRhZDg4MjExYTBhNGFjYTg4YWZkODgzMjdjZWMwLi45NjU0
NjI3OGMyZDZhYWZkNDY5MGUzNGNhYzJkZGE4OTc2MGFhODljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggYWFiMjQ4ZDE0ODAyZmI2NzU3YWUzYTU5YTQzZTQ2Mjkz
YWZjMTg1Ny4uZTk2NmRkYmI3MjVkMzYyYjA5MGZjNDJkNjdmOGQzYTZkOGZjYzFkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjEsMTQgKzIyLDkgQEAKICNpbmNsdWRlICJGRURyb3BTaGFkb3cuaCIK
IAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgorI2luY2x1ZGUgIkZFRHJvcFNoYWRv
d1NvZnR3YXJlQXBwbGllci5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTcwLDYxICs2Niw2IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7CiB9CiAKLS8v
IEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIgdG8gc2Vw
YXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBGRURyb3BTaGFkb3dTb2Z0d2Fy
ZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRHJvcFNoYWRv
dz4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEcm9w
U2hhZG93PjsKLQotcHVibGljOgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KSBvdmVycmlkZTsKLX07Ci0KLWJvb2wgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyOjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsK
LQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZsb2F0
U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZl
Y3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7Ci0gICAgRmxv
YXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3QuZHgo
KSwgbV9lZmZlY3QuZHkoKSB9KTsKLQotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gbV9l
ZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdpbmdSZWdpb24pOwot
ICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKLQotICAgIGF1dG8gc291
cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENv
bnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxw
aGEobV9lZmZlY3Quc2hhZG93T3BhY2l0eSgpKTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1
bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0gICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJs
dXJSYWRpdXMsIG9mZnNldCwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7Ci0KLSAgICBQaXhlbEJ1
ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAg
IEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+dHJ1bmNhdGVkTG9n
aWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhl
bEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1
ZmZlci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4
ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6
ZSgpLndpZHRoKCkpOwotICAgIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4
ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOwotCi0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0
LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRS
ZWN0KCkuc2l6ZSgpKSwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7Ci0gICAgcmVzdWx0Q29udGV4
dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zl
cik7Ci0KLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNl
SW1hZ2UsIGRyYXdpbmdSZWdpb24pOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewog
ICAgIHJldHVybiBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRl
ciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggNDk2ZWMzMmVlMTljMmQxYTcy
OGZjZDYxZDE3NmYxZWZjODkyMDI0My4uODY5ZDcwM2FmYjFkMWQzZTIyY2Q0ZWY3ZmY2YTE2MDU4
M2JkZjA3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCA5ODk4YzczNzZmNjVmMmUxMTc1YzFh
NzgxYzY0ZWVmODMyNDZhZWIwLi5lYWE3OGMzNzUxYmMwNDIzNDhjNjVlMDRiMjBmNmE0ZmNhYmJl
ZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVGbG9vZC5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDkgKzI1LDcgQEAK
ICNpbmNsdWRlICJGRUZsb29kLmgiCiAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIK
LSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJGRUZsb29kU29mdHdh
cmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC01OSwyOCArNTgsNiBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3Bh
Y2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIEZJWE1F
OiBNb3ZlIHRoZSBjbGFzcyBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUg
c291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBGRUZsb29kU29mdHdhcmVBcHBsaWVyIDog
cHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUZsb29kPiB7Ci0gICAgdXNpbmcg
QmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUZsb29kPjsKLQotcHVibGljOgot
ICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKLX07Ci0KLWJv
b2wgRkVGbG9vZFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJikKLXsKLSAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1h
Z2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIGNvbG9yID0gbV9lZmZlY3QuZmxvb2RDb2xvcigpLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KG1fZWZmZWN0LmZsb29kT3BhY2l0eSgpKTsKLSAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0
LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGJvb2wgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogewogICAgIHJldHVybiBGRUZsb29kU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBs
eShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggOWMxM2U1ZDRlYmE4YzhjOWJjOTg0
ZGM2Mzk0NzBiYzQ4Yzk0MzVlMy4uYjk3YjQzZTM3NjFhYjAxNTNlYWE2MTljYWFmYzU0NDdmYjZl
Zjk3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggZGIzNTkwOGY0ZjRmODlhNDU4ZDc5YmMz
MDFmMTI4YWM1NTkyOTEwNC4uM2JjYzU5ZjkwMGQ3NTdjZDA5MTdhZTdhYzMzNDA0MWM5YWFiYjRh
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjYsMjEgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RkVHYXVzc2lhbkJsdXIuaCIKIAotI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5oIgorI2lu
Y2x1ZGUgIkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKLSNpZiBVU0UoQUND
RUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbHNlCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYv
UGFyYWxsZWxKb2JzLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWY8RkVH
YXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmxvYXQgeCwgZmxvYXQgeSwgRWRn
ZU1vZGVUeXBlIGVkZ2VNb2RlKQpAQCAtMTE5LDcgKzEwOCw3IEBAIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogCiAg
ICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRl
UGFpbnRSZWN0KCk7CiAgICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFuICdub25lJyBkbyBub3Qg
aW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KLSAgICBpZiAobV9lZGdlTW9kZSAhPSBF
REdFTU9ERV9OT05FKSB7CisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRWRnZU1vZGVUeXBlOjpOb25l
KSB7CiAgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1
dGVQYWludFJlY3QpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEzNiw0NTMgKzEyNSw2
IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZF
R2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVy
IGZpbGVzLgotY2xhc3MgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFR2F1c3NpYW5CbHVyPiB7Ci0gICAgdXNpbmcgQmFz
ZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUdhdXNzaWFuQmx1cj47Ci0KLXB1Ymxp
YzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXIm
LCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci0KLXBy
aXZhdGU6Ci0gICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhl
aWdodDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7Ci0gICAgICAgIHVuc2lnbmVkIGtl
cm5lbFNpemVZOwotICAgICAgICBib29sIGlzQWxwaGFJbWFnZTsKLSAgICAgICAgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlOwotICAgIH07Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsUG9z
aXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0
LCBpbnQmIGRlbHRhUmlnaHQpOwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJBbHBo
YU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhS
aWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50
JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSk7Ci0gICAgc3RhdGljIGlu
bGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXks
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50IGR4TGVm
dCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lk
dGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKLQot
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJy
YXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2Vy
bmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KTsK
LSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVk
QXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQg
a2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBw
YWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwotCi0gICAgc3RhdGlj
IGlubGluZSB2b2lkIGJveEJsdXJHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1
bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFn
ZSwgRWRnZU1vZGVUeXBlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1cldvcmtlcihB
cHBseVBhcmFtZXRlcnMqKTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVBsYXRmb3Jt
KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVs
QXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6
ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKLX07Ci0KLWlu
bGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlvbihp
bnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYg
ZGVsdGFSaWdodCkKLXsKLSAgICAvLyBDaGVjayBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvZmls
dGVycy5odG1sI2ZlR2F1c3NpYW5CbHVyRWxlbWVudCBmb3IgZGV0YWlscy4KLSAgICBzd2l0Y2gg
KGJsdXJJdGVyYXRpb24pIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIp
KSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyIC0gMTsKLSAgICAgICAgICAg
IGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyOwotICAgICAgICAgICAgZGVsdGFSaWdodCA9
IHJhZGl1cyAtIGRlbHRhTGVmdDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNl
IDE6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQr
KzsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQtLTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIDI6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0gICAgICAgICAgICBk
ZWx0YVJpZ2h0Kys7Ci0gICAgICAgICAgICByYWRpdXMrKzsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gb25seSBvcGVyYXRlcyBvbiBBbHBo
YSBjaGFubmVsLgotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJv
eEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVp
bnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQs
IGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RX
aWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKLXsKLSAg
ICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWlu
dDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotICAgIC8vIE1lbW9yeSBhbGln
bm1lbnQgaXM6IFJHQkEsIHplcm8taW5kZXggYmFzZWQuCi0gICAgY29uc3QgaW50IGNoYW5uZWwg
PSAzOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgewotICAg
ICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtID0gMDsKLQot
ICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bWF4S2VybmVsU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5l
ICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0Rh
dGEgKyBvZmZzZXQ7Ci0gICAgICAgICAgICBzdW0gKz0gc3JjUHRyW2NoYW5uZWxdOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0
ID0gbGluZSArIHggKiBzdHJpZGUgKyBjaGFubmVsOwotICAgICAgICAgICAgdWludDhfdCogZHN0
UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLSAgICAgICAgICAgICpkc3RQdHIgPSBz
dGF0aWNfY2FzdDx1aW50OF90PihzdW0gLyBkeCk7Ci0KLSAgICAgICAgICAgIC8vIFNoaWZ0IGtl
cm5lbC4KLSAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgc3VtIC09ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3Ry
aWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBy
aWdodE9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gKz0gKnNyY1B0cjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0
d2FyZUFwcGxpZXI6OmJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJy
YXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50IGR4
TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0
V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlKQotewotICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdo
dCwgZWZmZWN0V2lkdGgpOwotICAgIGlmIChhbHBoYUltYWdlKQotICAgICAgICByZXR1cm4gYm94
Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBk
eFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBt
YXhLZXJuZWxTaXplKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFy
cmF5LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7
Ci0KLSAgICAvLyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1l
bnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQot
ICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKLSAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRl
TGluZTsKLSAgICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAw
OwotCi0gICAgICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FKSB7Ci0gICAgICAgICAg
ICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1h
eEtlcm5lbFNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxp
bmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9
IHNyY0RhdGEgKyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0g
ICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQiAr
PSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBp
eGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4
X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAg
ICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAg
ICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAg
ICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsK
LSAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4
KTsKLQotICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBp
ZiAoeCA+PSBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNl
dCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1H
IC09IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsg
ZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3Jj
UHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SICs9
IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBz
dW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dy
YXAnIGhlcmUuCi0gICAgICAgICAgICAvLyBHZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdk
dXBsaWNhdGUnLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNy
Y0RhdGEgKyBsaW5lOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQg
ID0gc3JjRGF0YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0gMSkgKiBzdHJpZGUpOwotCi0gICAg
ICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gZHhM
ZWZ0ICogLTE7IGkgPCBkeFJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgICAgICAvLyBJcyB0aGlz
IHJpZ2h0IGZvciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPwotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
aSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAgICAgICAg
c3VtQSArPSBlZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+
PSBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJp
Z2h0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAg
ICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAr
PSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgot
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7
Ci0gICAgICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9m
ZnNldDsKLQotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHN1bVIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oc3VtRyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2Fz
dDx1aW50OF90PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2hpZnQga2Vy
bmVsLgotICAgICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bVIgLT0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAt
PSBlZGdlVmFsdWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1
ZUxlZnRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
ZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsK
LSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUcgLT0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0
clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRo
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1
bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBk
eFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQ
dHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0g
c3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAg
ICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1
bUEgKz0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotaW5saW5lIHZvaWQgRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBr
ZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQp
Ci17Ci0gICAgaWYgKCFpb0J1ZmZlci5kYXRhKCkgfHwgIXRlbXBCdWZmZXIuZGF0YSgpKSB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGVmZmVjdFdpZHRoIDw9IDAgfHwgZWZmZWN0SGVpZ2h0IDw9IDAgfHwgc3RyaWRlIDw9
IDApIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBtdXN0IGFsd2F5cyB1c2UgYW4gb2RkIHJhZGl1cy4KLSAgICBpZiAo
a2VybmVsU2l6ZSAlIDIgIT0gMSkKLSAgICAgICAga2VybmVsU2l6ZSArPSAxOwotCi0gICAgdklt
YWdlX0J1ZmZlciBlZmZlY3RJbkJ1ZmZlcjsKLSAgICBlZmZlY3RJbkJ1ZmZlci5kYXRhID0gc3Rh
dGljX2Nhc3Q8dm9pZCo+KGlvQnVmZmVyLmRhdGEoKSk7Ci0gICAgZWZmZWN0SW5CdWZmZXIud2lk
dGggPSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RJbkJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWln
aHQ7Ci0gICAgZWZmZWN0SW5CdWZmZXIucm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICB2SW1hZ2Vf
QnVmZmVyIGVmZmVjdE91dEJ1ZmZlcjsKLSAgICBlZmZlY3RPdXRCdWZmZXIuZGF0YSA9IHRlbXBC
dWZmZXIuZGF0YSgpOwotICAgIGVmZmVjdE91dEJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOwot
ICAgIGVmZmVjdE91dEJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7Ci0gICAgZWZmZWN0T3V0
QnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBzaXplIG9m
IGEgdGVtcG9yYXJ5IGJ1ZmZlciBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBmaXJzdCB3aXRoIGEg
c3BlY2lhbCBmbGFnLiB2SW1hZ2Ugd2lsbCByZXR1cm4KLSAgICAvLyB0aGUgc2l6ZSBuZWVkZWQs
IG9yIGFuIGVycm9yICh3aGljaCBhcmUgYWxsIG5lZ2F0aXZlKS4KLSAgICBzaXplX3QgdG1wQnVm
ZmVyU2l6ZSA9IHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVm
ZmVjdE91dEJ1ZmZlciwgMCwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFn
ZUVkZ2VFeHRlbmQgfCBrdkltYWdlR2V0VGVtcEJ1ZmZlclNpemUpOwotICAgIGlmICh0bXBCdWZm
ZXJTaXplIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIHZvaWQqIHRtcEJ1ZmZlciA9IGZh
c3RNYWxsb2ModG1wQnVmZmVyU2l6ZSk7Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgo
JmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5l
bFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hD
b252b2x2ZV9BUkdCODg4OCgmZWZmZWN0T3V0QnVmZmVyLCAmZWZmZWN0SW5CdWZmZXIsIHRtcEJ1
ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQp
OwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVj
dE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBr
dkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgZmFzdEZyZWUodG1wQnVmZmVyKTsKLQotICAgIC8vIFRo
ZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAgICBBU1NFUlQo
aW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5ndGgoKSk7Ci0gICAgbWVtY3B5KGlv
QnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKLX0K
LSNlbmRpZgotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94
Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1w
ZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5l
bFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdl
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgaW50IGR4TGVmdCA9IDA7Ci0gICAgaW50
IGR4UmlnaHQgPSAwOwotICAgIGludCBkeUxlZnQgPSAwOwotICAgIGludCBkeVJpZ2h0ID0gMDsK
LSAgICAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZnJvbUJ1ZmZlciA9ICZpb0J1ZmZlcjsKLSAg
ICBVaW50OENsYW1wZWRBcnJheSogdG9CdWZmZXIgPSAmdGVtcEJ1ZmZlcjsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWCkgewotICAg
ICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCk7
Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhh
SW1hZ2UpCi0gICAgICAgICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZl
ciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lk
dGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQs
IGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQo
KSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZm
ZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBw
YWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VN
b2RlKTsKLSNlbmRpZgotICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVy
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrZXJuZWxTaXplWSkgewotICAgICAgICAgICAg
a2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCk7Ci0jaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0g
ICAgICAgICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVs
U2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBh
aW50U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hC
bHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQs
IHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgdHJ1ZSwg
ZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1
ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUu
aGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNl
bmRpZgotICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBp
biBpb0J1ZmZlci4KLSAgICBpZiAoJmlvQnVmZmVyICE9IGZyb21CdWZmZXIpIHsKLSAgICAgICAg
QVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IGZyb21CdWZmZXItPmxlbmd0aCgpKTsKLSAgICAg
ICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgZnJvbUJ1ZmZlci0+ZGF0YSgpLCBpb0J1ZmZlci5s
ZW5ndGgoKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1ckdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50
OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2ln
bmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBF
ZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUu
d2lkdGgoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJuZWxTaXplWCA9PSBr
ZXJuZWxTaXplWSAmJiAoZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBlZGdlTW9kZSA9PSBF
REdFTU9ERV9EVVBMSUNBVEUpKSB7Ci0gICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1ZmZl
ciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCks
IHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIGJveEJsdXJVbmFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxT
aXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VN
b2RlKTsKLX0KLQotI2lmICFVU0UoQUNDRUxFUkFURSkKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5C
bHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1l
dGVycykKLXsKLSAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1l
dGVycy0+aGVpZ2h0KTsKLSAgICBib3hCbHVyR2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFy
cmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgs
IHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUsIHBhcmFtZXRlcnMtPmlzQWxwaGFJ
bWFnZSwgcGFyYW1ldGVycy0+ZWRnZU1vZGUpOwotfQotI2VuZGlmCi0KLWlubGluZSB2b2lkIEZF
R2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVk
IGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBi
b29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotI2lmICFVU0UoQUND
RUxFUkFURSkKLSAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7Ci0gICAg
aW50IGV4dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41ZjsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IG1pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmlj
YWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotICAgIGludCBvcHRpbWFsVGhyZWFkTnVt
YmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChtaW5pbWFs
UmVjdERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0ICogcGFpbnRTaXplLndpZHRoKCkpOwotCi0gICAg
aWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIFBhcmFsbGVsSm9iczxBcHBs
eVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYm94Qmx1cldvcmtlciwgb3B0aW1hbFRocmVhZE51
bWJlcik7Ci0KLSAgICAgICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7
Ci0gICAgICAgIGlmIChqb2JzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBp
bnRvICJibG9ja0hlaWdodCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5l
ZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBibG9ja0hlaWdo
dCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJl
bWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWln
aHQgPSBwYWludFNpemUuaGVpZ2h0KCkgLyBqb2JzOwotICAgICAgICAgICAgY29uc3QgaW50IGpv
YnNXaXRoRXh0cmEgPSBwYWludFNpemUuaGVpZ2h0KCkgJSBqb2JzOwotCi0gICAgICAgICAgICBp
bnQgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9i
czsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBh
cmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLQotICAgICAgICAgICAgICAgIGludCBzdGFydFkg
PSAham9iID8gMCA6IGN1cnJlbnRZIC0gZXh0cmFIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2NrSGVp
Z2h0OwotICAgICAgICAgICAgICAgIGludCBlbmRZID0gam9iID09IGpvYnMgLSAxID8gY3VycmVu
dFkgOiBjdXJyZW50WSArIGV4dHJhSGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgaW50IGJsb2Nr
U2l6ZSA9IChlbmRZIC0gc3RhcnRZKSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIGlmICgh
am9iKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSAmaW9CdWZm
ZXI7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gJnRtcFBpeGVs
QXJyYXk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGFy
YW1zLmlvUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVk
KGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0g
VWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKLSAgICAg
ICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEoKSwgaW9CdWZm
ZXIuZGF0YSgpICsgc3RhcnRZICogc2NhbmxpbmUsIGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcGFyYW1zLndpZHRoID0gcGFpbnRTaXplLndpZHRoKCk7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmhlaWdodCA9IGVuZFkgLSBzdGFydFk7Ci0gICAgICAg
ICAgICAgICAgcGFyYW1zLmtlcm5lbFNpemVYID0ga2VybmVsU2l6ZVg7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLmtlcm5lbFNpemVZID0ga2VybmVsU2l6ZVk7Ci0gICAgICAgICAgICAgICAgcGFy
YW1zLmlzQWxwaGFJbWFnZSA9IGlzQWxwaGFJbWFnZTsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
ZWRnZU1vZGUgPSBlZGdlTW9kZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxs
ZWxKb2JzLmV4ZWN1dGUoKTsKLQotICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFy
dHMgb2YgdGhlIGltYWdlLgotICAgICAgICAgICAgY3VycmVudFkgPSAwOwotICAgICAgICAgICAg
Zm9yIChpbnQgam9iID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBB
cHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAg
ICAgICAgICAgICAgICBpbnQgc291cmNlT2Zmc2V0OwotICAgICAgICAgICAgICAgIGludCBkZXN0
aW5hdGlvbk9mZnNldDsKLSAgICAgICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgICAg
ICBpbnQgYWRqdXN0ZWRCbG9ja0hlaWdodCA9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hl
aWdodCArIDEgOiBibG9ja0hlaWdodDsKLQotICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGFk
anVzdGVkQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0gZXh0cmFI
ZWlnaHQgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldCA9IGN1
cnJlbnRZICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGFkanVzdGVkQmxvY2tI
ZWlnaHQgKiBzY2FubGluZTsKLQotICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRh
KCkgKyBkZXN0aW5hdGlvbk9mZnNldCwgcGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpICsgc291
cmNlT2Zmc2V0LCBzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KLSAg
ICB9Ci0jZW5kaWYKLQotICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3Vs
ZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0gICAgYm94Qmx1ckdlbmVy
aWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFp
bnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLX0KLQotYm9vbCBGRUdhdXNzaWFuQmx1
clNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdHNbMF0uZ2V0KCk7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUlt
YWdlKCkpOwotCi0gICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0
RHJhd2luZ1JlY3QpOwotICAgIGlmICghbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpICYmICFtX2Vm
ZmVjdC5zdGREZXZpYXRpb25ZKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byBr
ZXJuZWxTaXplID0gbV9lZmZlY3QuY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9lZmZl
Y3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7Ci0KLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwot
ICAgIGF1dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOwotICAgIGlmICghdG1wSW1hZ2VEYXRhKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkg
PSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXBwbHlQbGF0Zm9ybShkZXN0
aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2Vy
bmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLCBtX2VmZmVjdC5pc0FscGhhSW1hZ2UoKSwgbV9l
ZmZlY3QuZWRnZU1vZGUoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVHYXVzc2lh
bkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAg
ICByZXR1cm4gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRl
ciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmluZGV4IDY1YWE2ZTE4ODk3ZmE4
Y2M5NzY5ZDFlNTU3ZDdkMjZmNWU1Y2EyMjIuLjkwODIyNjQzNGEwOWFkNDMzNDk2YzlkYTFlZGFi
N2M0ODgzMjFjMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IDFhZGMwZjM3M2E0
NjBkZmJkMmFjYmZiOTAyMDg1M2RhY2NiNDU2M2IuLmNjZGU2ZWI4MmUzN2MyZTNiN2JmMzJiNzY5
NDc5YWJlYzdlYjI2YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykg
MjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEyICsyOCw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiQ29s
b3JDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKLSNpbmNsdWRlICJG
aWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNpbmNsdWRl
ICJGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtODYsNTA3ICs4MSw2IEBAIGJvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFko
ZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIEZJWE1F
OiBNb3ZlIHRoZSBjbGFzcyBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNv
dXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllciA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVMaWdodGluZz4gewotICAgIHVz
aW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVMaWdodGluZz47Ci0KLXB1
YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9vbCBhcHBseShjb25zdCBGaWx0
ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci0K
LXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVsU2l6ZSA9IDQ7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4
RkYpOwotCi0gICAgLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBjb2VmZmljaWVudHMg
Y29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRl
cnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi0gICAgc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0
IGNGYWN0b3IxZGl2MyA9IC0xIC8gMy5mOwotICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0Zh
Y3RvcjFkaXY0ID0gLTEgLyA0LmY7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9y
MmRpdjMgPSAtMiAvIDMuZjsKLQotICAgIHN0cnVjdCBBbHBoYVdpbmRvdyB7Ci0gICAgICAgIHVp
bnQ4X3QgYWxwaGFbM11bM10geyB9OwotICAgIAotICAgICAgICAvLyBUaGUgaW1wbGVtZW50YXRp
b25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRpY2VzIGVhc2llci4KLSAgICAg
ICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1b
MF07IH0KLSAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1
cm4gYWxwaGFbMV1bMF07IH0KLSAgICAgICAgdWludDhfdCBib3R0b21MZWZ0KCkgY29uc3QgICAg
ICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KLQotICAgICAgICB1aW50OF90IHRvcCgpIGNv
bnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsxXTsgfQotICAgICAgICB1aW50
OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsxXTsgfQot
ICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBo
YVsyXVsxXTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4X3QgdmFsdWUpICAgICAgICAg
IHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldENlbnRlcih1aW50OF90
IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRC
b3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsxXSA9IHZhbHVlOyB9Ci0KLSAg
ICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAgICAgeyBhbHBoYVswXVsyXSA9
IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1ZSkgICAgICAgIHsg
YWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbVJpZ2h0KHVpbnQ4
X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KLQotICAgICAgICBzdGF0aWMgdm9p
ZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQotICAgICAgICB7Ci0gICAgICAgICAgICBhbHBo
YVswXSA9IGFscGhhWzFdOwotICAgICAgICAgICAgYWxwaGFbMV0gPSBhbHBoYVsyXTsKLSAgICAg
ICAgfQotICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAgewotICAgICAgICAgICAg
c2hpZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOwotICAg
ICAgICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0
cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBv
bmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgRkVMaWdodGluZyogZWZmZWN0
OwotICAgICAgICBGaWx0ZXJFZmZlY3Q6OlR5cGUgZmlsdGVyVHlwZTsKLSAgICAgICAgQ29sb3Ig
bGlnaHRpbmdDb2xvcjsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAgICAgICBmbG9h
dCBkaWZmdXNlQ29uc3RhbnQ7Ci0gICAgICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQ7Ci0gICAg
ICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQ7Ci0gICAgICAgIGNvbnN0IExpZ2h0U291cmNlKiBs
aWdodFNvdXJjZTsKLSAgICAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlKiBvcGVyYXRp
bmdDb2xvclNwYWNlOwotCi0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Ci0gICAg
ICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHdpZHRoOwot
ICAgICAgICBpbnQgaGVpZ2h0OwotCi0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5O
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9y
Tm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JikgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJ
bnRTaXplIHJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxp
bmUgSW50U2l6ZSBib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBp
bmxpbmUgSW50U2l6ZSBib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAg
IGlubGluZSBJbnRTaXplIGJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAg
IH07Ci0KLSAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgTGlnaHRpbmdEYXRh
IGRhdGE7Ci0gICAgICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwot
ICAgICAgICBpbnQgeVN0YXJ0OwotICAgICAgICBpbnQgeUVuZDsKLSAgICB9OwotCi0gICAgc3Rh
dGljIHZvaWQgc2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEm
LCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBm
YWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBo
YSk7Ci0gICAgc3RhdGljIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdE
YXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxv
YXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3Rvcik7Ci0KLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0
YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5k
WSk7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIoQXBwbHlQYXJh
bWV0ZXJzKik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgTGln
aHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotICAgIHN0YXRp
YyB2b2lkIGFwcGx5UGxhdGZvcm0oY29uc3QgTGlnaHRpbmdEYXRhJik7Ci19OwotCi1pbmxpbmUg
SW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcExlZnRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGNlbnRlciAr
IDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtMiAqIGNlbnRlciAt
IHJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIElu
dFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90
dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAg
IC0yICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAg
ICAgLWxlZnQgLSAyICogY2VudGVyIC0gcmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSAr
IGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQg
Ym90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICByZXR1cm4gewotICAgICAgICAtMiAqIGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCAr
IGJvdHRvbSwKLSAgICAgICAgLWxlZnQgLSAyICogY2VudGVyICsgYm90dG9tTGVmdCArIDIgKiBi
b3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0b3Ag
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQg
Kz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewot
ICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9t
ICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogYm90dG9t
ICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFs
cGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKLXsKLSAgICBpbnQgcmlnaHRBbHBoYU9mZnNl
dCA9IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0OwotICAgIAotICAg
IGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZz
ZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShy
aWdodEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLSAgICBpbnQg
Ym90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zm
c2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLQotICAgIGludCBsZWZ0ID0gYWxw
aGFXaW5kb3cubGVmdCgpOwotICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cudG9wTGVmdCgp
OwotICAgIGludCB0b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsKLQotICAgIGludCBib3R0b21MZWZ0
ID0gYWxwaGFXaW5kb3cuYm90dG9tTGVmdCgpOwotICAgIGludCBib3R0b20gPSBhbHBoYVdpbmRv
dy5ib3R0b20oKTsKLQotICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVlbiBzaGlmdGVkLCBh
bmQgaGVyZSB3ZSBmaWxsIGluIHRoZSByaWdodCBjb2x1bW4uCi0gICAgYWxwaGFXaW5kb3cuYWxw
aGFbMF1bMl0gPSB0b3BSaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsyXSA9IHJpZ2h0
OwotICAgIGFscGhhV2luZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7Ci0gICAgCi0gICAg
Ly8gQ2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRoIHNvbWUgc3BvdC1j
aGVja3MuCi0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhlbHMtPml0ZW0o
b2Zmc2V0IC0gY1BpeGVsU2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOyAvLyB0b3BMZWZ0Ci0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcCgp
ID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wCi0KLSAgICByZXR1cm4gewotICAgICAgICAtdG9w
TGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90
dG9tUmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgYm90dG9t
TGVmdCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRT
aXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5O
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRv
bSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0
ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0b20sCi0gICAgICAgIC10b3BMZWZ0IC0g
MiAqIHRvcCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tCi0gICAgfTsKLX0KLQotaW5saW5lIElu
dFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJpZ2h0IC0g
MiAqIGNlbnRlciArIDIgKiByaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIg
KiBjZW50ZXIgKyByaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50
ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQg
LT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0g
MiAqIGxlZnQgKyAyICogcmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJp
Z2h0ICsgbGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRT
aXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAyICog
bGVmdCArIDIgKiBjZW50ZXIsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGxlZnQgKyAy
ICogY2VudGVyCi0gICAgfTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpz
ZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29u
c3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZs
b2F0IGFscGhhKQotewotICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwot
ICAgIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBkYXRh
LmxpZ2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5
LCB6KTsKLQotICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9y
LmlzWmVybygpKSB7Ci0gICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlz
IGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0
ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKLSAgICAg
ICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0g
ICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAg
ICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0
aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgK
LSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0g
aGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChkYXRhLnNwZWN1bGFyRXhw
b25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxh
ckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1
bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0
aCwgZGF0YS5zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0gICAgICAgICAgICBmYWN0b3JYICog
bm9ybWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAg
ZmFjdG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJmYWNlU2NhbGUsCi0g
ICAgICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAgIGZsb2F0IG5vcm1hbFZlY3Rvckxl
bmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAgICAgICBpZiAoZGF0YS5lZmZlY3Qt
PmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQot
ICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogKG5vcm1h
bFZlY3RvciAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3Ro
ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBs
aWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci55KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVj
dG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxl
bmd0aCgpOwotICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAg
ICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiAobm9y
bWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndh
eVZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhh
bGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgp
LCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxp
Z2h0U3RyZW5ndGggPiAxKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMTsKLSAgICBpZiAobGln
aHRTdHJlbmd0aCA8IDApCi0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSAwOwotCi0gICAgdWludDhf
dCBwaXhlbFZhbHVlWzNdID0gewotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0
cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSAqIDI1NS4wZiksCi0gICAgICAg
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JW
ZWN0b3IueSgpICogMjU1LjBmKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRT
dHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci56KCkgKiAyNTUuMGYpCi0gICAgfTsK
LSAgICAKLSAgICBkYXRhLnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsK
LX0KLQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbChpbnQgb2Zmc2V0
LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0
b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQotewotICAgIHNldFBpeGVsSW50ZXJuYWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbDJE
VmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci19Ci0KLS8vIFRoaXMgYXBwZWFycyB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1l
IHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVhZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3
cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4KLXZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0
WSwgaW50IGVuZFkpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+IDAgc2luY2Ugd2Ug
cmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCi0gICAgQVNTRVJUKHN0YXJ0
WSk7Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgZm9yIChpbnQgeSA9IHN0YXJ0
WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgcm93U3RhcnRPZmZzZXQgPSB5ICogZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHByZXZpb3VzUm93U3Rh
cnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9mZnNldCArIGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7Ci0KLSAgICAgICAgLy8gYWxwaGFXaW5kb3cgaXMgYSBsb2NhbCBj
YWNoZSBvZiBhbHBoYSB2YWx1ZXMuCi0gICAgICAgIC8vIEZpbGwgdGhlIHR3byByaWdodCBjb2x1
bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0aGUgY2VudGVyIGNvbHVtbi4KLSAg
ICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVhY2ggcm93IGxlZnQgdGhlbiBmaWxs
IHRoZSByaWdodCBjb2x1bW4uCi0gICAgICAgIEFscGhhV2luZG93IGFscGhhV2luZG93OwotICAg
ICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFy
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0VG9wUmln
aHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Q2VudGVyKGRhdGEu
cGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
ICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVscy0+aXRlbShyb3dTdGFydE9mZnNl
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFX
aW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFydCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tUmlnaHQoZGF0YS5w
aXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLQotICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQgKyBjUGl4ZWxTaXpl
OwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGggLSAxOyArK3gsIG9mZnNl
dCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBhbHBoYVdpbmRvdy5zaGlmdCgpOwotICAg
ICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwg
eSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0
LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigpKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJp
Y1dvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCi17Ci0gICAgYXBwbHlQbGF0Zm9y
bUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEs
IHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7Ci19Ci0KLSNpZiAhKENQVShB
Uk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElC
TEUpKQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICB1bnNpZ25lZCByb3dzVG9Qcm9jZXNzID0gZGF0YS5o
ZWlnaHQgLSAyOwotICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8g
ODsKLSAgICAKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9
IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLSAg
ICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0
YS53aWR0aCAtIDIpICogcm93c1RvUHJvY2VzcykgLyBtaW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4
TnVtVGhyZWFkcyk7Ci0KLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAg
ICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2JzCi0gICAgICAgIFBhcmFsbGVsSm9iczxBcHBs
eVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIsIG9w
dGltYWxUaHJlYWROdW1iZXIpOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJh
eQotICAgICAgICBpbnQgam9iID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAg
ICBpZiAoam9iID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJ5U3Rl
cCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0
bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyB5U3RlcCAqIGpvYnMgPCB0b3RhbCBzaXpl
LiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRy
YSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgeVN0ZXAgPSByb3dzVG9Qcm9jZXNzIC8gam9iOwot
ICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSByb3dzVG9Qcm9jZXNzICUgam9i
OwotCi0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gMTsKLSAgICAgICAgICAgIGZvciAoLS1qb2I7
IGpvYiA+PSAwOyAtLWpvYikgewotICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFy
YW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFt
cy5kYXRhID0gZGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gcGFp
bnRpbmdEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5U3RhcnQ7Ci0gICAg
ICAgICAgICAgICAgeVN0YXJ0ICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyB5U3RlcCArIDEgOiB5
U3RlcDsKLSAgICAgICAgICAgICAgICBwYXJhbXMueUVuZCA9IHlTdGFydDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1v
ZGUuCi0gICAgfQotCi0gICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChkYXRhLCBwYWludGlu
Z0RhdGEsIDEsIGRhdGEuaGVpZ2h0IC0gMSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBGRUxpZ2h0aW5n
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkK
LXsKLSAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLQotICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5D
b2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOwotICAgIHBhaW50aW5nRGF0YS5p
bml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwot
Ci0gICAgZGF0YS5saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqZGF0YS5lZmZlY3QsIHBh
aW50aW5nRGF0YSk7Ci0KLSAgICAvLyBUb3AgbGVmdC4KLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAg
ICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJkaXYz
LCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIFRv
cCByaWdodC4KLSAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0g
Y1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0
YS53aWR0aCAtIDEsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0
Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gQm90dG9tIGxlZnQuCi0gICAgb2Zmc2V0ID0gKGRh
dGEuaGVpZ2h0IC0gMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIHNl
dFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodCAtIDEsIGNG
YWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0KSk7
Ci0KLSAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHQgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIGRhdGEuaGVpZ2h0IC0g
MSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zm
c2V0KSk7Ci0KLSAgICBpZiAoZGF0YS53aWR0aCA+PSAzKSB7Ci0gICAgICAgIC8vIFRvcCByb3cu
Ci0gICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4
IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAg
ICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYz
LCBjRmFjdG9yMWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8v
IEJvdHRvbSByb3cuCi0gICAgICAgIG9mZnNldCA9IChkYXRhLmhlaWdodCAtIDEpICogZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50
IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0g
ICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5o
ZWlnaHQgLSAxLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3Jt
YWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaWYgKGRhdGEuaGVpZ2h0ID49IDMpIHsKLSAgICAg
ICAgLy8gTGVmdCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHQgLSAx
OyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAg
ICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIHksIGNGYWN0b3Ix
ZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7Ci0KLSAg
ICAgICAgLy8gUmlnaHQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSAyICogZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAx
OyB5IDwgZGF0YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGlu
Z0RhdGEsIGRhdGEud2lkdGggLSAxLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0
YS5yaWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAoZGF0YS53aWR0
aCA+PSAzICYmIGRhdGEuaGVpZ2h0ID49IDMpIHsKLSAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxz
LgotICAgICAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhkYXRhLCBwYWludGluZ0RhdGEpOwotICAg
IH0KLQotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ICogZGF0YS5oZWlnaHQ7Ci0gICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJUeXBlKCkgPT0gRmls
dGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykgewotICAgICAgICBmb3IgKGludCBp
ID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQot
ICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNp
emUpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTEgPSBkYXRhLnBpeGVscy0+aXRlbShpKTsKLSAg
ICAgICAgICAgIHVpbnQ4X3QgYTIgPSBkYXRhLnBpeGVscy0+aXRlbShpICsgMSk7Ci0gICAgICAg
ICAgICB1aW50OF90IGEzID0gZGF0YS5waXhlbHMtPml0ZW0oaSArIDIpOwotICAgICAgICAgICAg
Ly8gYWxwaGEgc2V0IHRvIHNldCB0byBtYXgoYTEsIGEyLCBhMykKLSAgICAgICAgICAgIGRhdGEu
cGl4ZWxzLT5zZXQoaSArIDMsIGExID49IGEyID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIg
Pj0gYTMgPyBhMiA6IGEzKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgRkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZm
ZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsK
LQotICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5
UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdS
ZWN0KTsKLQotICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRo
YW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCi0gICAgLy8gc3RhbmRhcmQg
aGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVm
b3gpIGhhcyBzdHJhbmdlCi0gICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5n
dGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KLSAgICAvLyBBbnl3YXks
IGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgotCi0g
ICAgSW50U2l6ZSBzaXplID0gSW50U2l6ZShtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSk7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAo
b3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUg
dGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCi0gICAgaWYgKHNpemUud2lk
dGgoKSA8PSAyIHx8IHNpemUuaGVpZ2h0KCkgPD0gMikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICBkYXRhLmVmZmVjdCA9ICZtX2VmZmVjdDsKLSAg
ICBkYXRhLmZpbHRlclR5cGUgPSBtX2VmZmVjdC5maWx0ZXJUeXBlKCk7Ci0gICAgZGF0YS5saWdo
dGluZ0NvbG9yID0gbV9lZmZlY3QubGlnaHRpbmdDb2xvcigpOwotICAgIGRhdGEuc3VyZmFjZVNj
YWxlID0gbV9lZmZlY3Quc3VyZmFjZVNjYWxlKCkgLyAyNTUuMGY7Ci0gICAgZGF0YS5kaWZmdXNl
Q29uc3RhbnQgPSBtX2VmZmVjdC5kaWZmdXNlQ29uc3RhbnQoKTsKLSAgICBkYXRhLnNwZWN1bGFy
Q29uc3RhbnQgPSBtX2VmZmVjdC5zcGVjdWxhckNvbnN0YW50KCk7Ci0gICAgZGF0YS5zcGVjdWxh
ckV4cG9uZW50ID0gbV9lZmZlY3Quc3BlY3VsYXJFeHBvbmVudCgpOwotICAgIGRhdGEubGlnaHRT
b3VyY2UgPSAmbV9lZmZlY3QubGlnaHRTb3VyY2UoKTsKLSAgICBkYXRhLm9wZXJhdGluZ0NvbG9y
U3BhY2UgPSAmbV9lZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpOwotCi0gICAgZGF0YS5waXhl
bHMgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgPSBzaXplLndpZHRoKCkgKiBjUGl4ZWxTaXplOwotICAgIGRhdGEud2lkdGggPSBz
aXplLndpZHRoKCk7Ci0gICAgZGF0YS5oZWlnaHQgPSBzaXplLmhlaWdodCgpOwotCi0gICAgYXBw
bHlQbGF0Zm9ybShkYXRhKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgcmV0
dXJuIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRF
ZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCBhODRmZTg1YTM4MWZhODQwNzVlNTE2NTRjYzJjMGM1
YmI4YzFhYjJmLi4zMTE4OWE0MGE2MDVhMDVjY2EwYjgxMGVjYTkyYjNhMTFmZDk0ZTk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVy
c2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZworICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDc2YTc0NjRmMDBlNmQzNzA4
ZWU5NGRjYWNkOTZmNjFmN2FjYTZiZTYuLjNmMzYyMWMwODQ3Y2JhM2E1ZjkwMWM5NzU2ZWQ0NDg3
NjY4MjVjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMiw5ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRkVNZXJnZS5oIgogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSAiRkVNZXJnZVNvZnR3YXJlQXBwbGllci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksMzYgKzM4LDYgQEAgRkVNZXJn
ZTo6RkVNZXJnZSgpCiB7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRU1lcmdlU29m
dHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3Mg
RkVNZXJnZVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXI8RkVNZXJnZT4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXI8RkVNZXJnZT47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9v
bCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZm
ZWN0cykgb3ZlcnJpZGU7Ci19OwotCi1ib29sIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQot
ewotICAgIEFTU0VSVChpbnB1dEVmZmVjdHMuc2l6ZSgpID4gMCk7Ci0KLSAgICBhdXRvIHJlc3Vs
dEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdElt
YWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBmaWx0ZXJDb250ZXh0ID0g
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIGZvciAoYXV0byYgaW4gOiBpbnB1dEVmZmVj
dHMpIHsKLSAgICAgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgICAgICBpZiAoIWluQnVmZmVyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCiBib29sIEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4gRkVNZXJnZVNvZnR3YXJlQXBwbGll
cigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCmluZGV4IDg4N2JhMGZk
MzNmODkzMmNiZjQzMzgyNjhlN2FhYTQ4YWZhMmYwNDEuLjg0NmIxNWNmYmFiYTIyOWVjZjVlMmYx
NDBmOTg3ZDgzNjkxNzQ2NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCBkOTQ1MTgxNTY4ZjBhNmU3
ZjBiNTdiNTM5YzUzOTQ5MjFkNzgxNjcyLi4xYTIyYjUwYWNjZDYwM2U1Njc1NWFhNjFlNmYwODBm
NzRlYWJjYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDE4IEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEzICsyNSw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRkVNb3JwaG9sb2d5LmgiCiAKLSNpbmNsdWRlICJDb2xvckNvbXBv
bmVudHMuaCIKLSNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0j
aW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlICJGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg0LDIwNyArNzks
NiBAQCB2b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVj
dChwYWludFJlY3QpKTsKIH0KIAotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFTW9ycGhvbG9n
eVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNs
YXNzIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25j
cmV0ZUFwcGxpZXI8RkVNb3JwaG9sb2d5PiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVj
dENvbmNyZXRlQXBwbGllcjxGRU1vcnBob2xvZ3k+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFz
ZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHVzaW5n
IENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+LCAxNj47
Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSB0eXBlOwotICAgICAgICBpbnQgcmFkaXVzWDsKLSAgICAgICAgaW50IHJhZGl1c1k7Ci0g
ICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5OwotICAgICAgICBV
aW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAg
ICAgICBpbnQgaGVpZ2h0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsK
LSAgICAgICAgY29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgICAgIGludCBz
dGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07Ci0KLSAgICBzdGF0aWMgaW5saW5lIGlu
dCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpIHsgcmV0dXJuICh5ICog
d2lkdGggKyB4KSAqIDQ7IH0KLSAgICBzdGF0aWMgaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1h
a2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4mIGNvbXBvbmVudHMpIHsgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFrZUZy
b21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9OyB9Ci0KLSAgICBzdGF0
aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRz
ZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpIHsgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsgfQotICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21w
b25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlKTsKLSAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJh
eSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUpOwotICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhjb25z
dCBQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9pZCBh
cHBseVBsYXRmb3JtKGNvbnN0IFBhaW50aW5nRGF0YSYpOwotfTsKLQotaW5saW5lIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1pbk9yTWF4
KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAg
aWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4g
cGVyQ29tcG9uZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBi
KTsKLX0KLQotaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXI6OmNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
cmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29s
b3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJh
eUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKLQotICAgIGZvciAoaW50IHkgPSB5U3RhcnQg
KyAxOyB5IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21w
b25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4
KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXgoZXh0cmVtdW0s
IHBpeGVsLCB0eXBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQotCi1pbmxpbmUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6
a2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVt
dW0gPSBtaW5Pck1heChleHRyZW11bSwga2VybmVsW2ldLCB0eXBlKTsKLQotICAgIHJldHVybiBl
eHRyZW11bTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZ
LCBpbnQgZW5kWSkKLXsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBjb25zdCBh
dXRvJiBzcmNQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5OwotICAgIGF1
dG8mIGRzdFBpeGVsQXJyYXkgPSAqcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXk7Ci0KLSAgICBj
b25zdCBpbnQgcmFkaXVzWCA9IHBhaW50aW5nRGF0YS5yYWRpdXNYOwotICAgIGNvbnN0IGludCBy
YWRpdXNZID0gcGFpbnRpbmdEYXRhLnJhZGl1c1k7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gcGFp
bnRpbmdEYXRhLndpZHRoOwotICAgIGNvbnN0IGludCBoZWlnaHQgPSBwYWludGluZ0RhdGEuaGVp
Z2h0OwotCi0gICAgQVNTRVJUKHJhZGl1c1ggPD0gd2lkdGggfHwgcmFkaXVzWSA8PSBoZWlnaHQp
OwotICAgIEFTU0VSVChzdGFydFkgPj0gMCAmJiBlbmRZIDw9IGhlaWdodCAmJiBzdGFydFkgPCBl
bmRZKTsKLQotICAgIENvbHVtbkV4dHJlbWEgZXh0cmVtYTsKLSAgICBleHRyZW1hLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMiAqIHJhZGl1c1ggKyAxKTsKLQotICAgIGZvciAoaW50IHkgPSBzdGFy
dFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgaW50IHlSYWRpdXNTdGFydCA9IHN0ZDo6bWF4
KDAsIHkgLSByYWRpdXNZKTsKLSAgICAgICAgaW50IHlSYWRpdXNFbmQgPSBzdGQ6Om1pbihoZWln
aHQsIHkgKyByYWRpdXNZICsgMSk7Ci0KLSAgICAgICAgZXh0cmVtYS5zaHJpbmsoMCk7Ci0KLSAg
ICAgICAgLy8gV2Ugc3RhcnQgYXQgdGhlIGxlZnQgZWRnZSwgc28gY29tcHV0ZSBleHRyZW1lIGZv
ciB0aGUgcmFkaXVzWCBjb2x1bW5zLgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJhZGl1
c1g7ICsreCkKLSAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1Bp
eGVsQXJyYXksIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIHBhaW50aW5nRGF0
YS50eXBlKSk7Ci0KLSAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2Yg
bmV4dCBjb2x1bW4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7Ci0g
ICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkKLSAgICAgICAgICAgICAgICBleHRy
ZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsgcmFkaXVzWCwgeVJh
ZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKLQotICAg
ICAgICAgICAgaWYgKHggPiByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3Zl
KDApOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHks
IHdpZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29s
b3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIHBhaW50aW5nRGF0YS50eXBlKSku
dmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5U29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1zKQotewot
ICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKCpwYXJhbXMtPnBhaW50aW5nRGF0YSwgcGFyYW1zLT5z
dGFydFksIHBhcmFtcy0+ZW5kWSk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewot
ICAgIC8vIEVtcGlyaWNhbGx5LCBydW50aW1lIGlzIGFwcHJveGltYXRlbHkgbGluZWFyIG92ZXIg
cmVhc29uYWJsZSBrZXJuZWwgc2l6ZXMgd2l0aCBhIHNsb3BlIG9mIGFib3V0IDAuNjUuCi0gICAg
ZmxvYXQga2VybmVsRmFjdG9yID0gc3FydChwYWludGluZ0RhdGEucmFkaXVzWCAqIHBhaW50aW5n
RGF0YS5yYWRpdXNZKSAqIDAuNjU7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVh
ID0gKDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2Jz
Ci0gICAgCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQg
LyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25l
ZD4oKHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0
b3IpIC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFk
TnVtYmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8QXBwbHlQYXJhbWV0ZXJzPiBwYXJh
bGxlbEpvYnMoJmFwcGx5UGxhdGZvcm1Xb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotICAg
ICAgICBhdXRvIG51bU9mVGhyZWFkcyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAg
ICAgICAgaWYgKG51bU9mVGhyZWFkcyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBq
b2IgaW50byAiam9iU2l6ZSItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5l
ZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBqb2JTaXplICog
am9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWlu
ZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGludCBqb2JTaXplID0gcGFpbnRpbmdE
YXRhLmhlaWdodCAvIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBqb2JzV2l0aEV4dHJh
ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBj
dXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSBudW1PZlRocmVhZHMgLSAx
OyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBh
cmFtID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFt
LnN0YXJ0WSA9IGN1cnJlbnRZOwotICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpv
YnNXaXRoRXh0cmEgPyBqb2JTaXplICsgMSA6IGpvYlNpemU7Ci0gICAgICAgICAgICAgICAgcGFy
YW0uZW5kWSA9IGN1cnJlbnRZOwotICAgICAgICAgICAgICAgIHBhcmFtLnBhaW50aW5nRGF0YSA9
ICZwYWludGluZ0RhdGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbGxlbEpvYnMu
ZXhlY3V0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZh
bGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQgbW9kZWwKLSAgICB9Ci0KLSAgICBhcHBseVBsYXRmb3Jt
R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwotfQotCi1ib29s
IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQotewotICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShp
bi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgYXV0byBpc0RlZ2VuZXJhdGUgPSBbXShpbnQgcmFk
aXVzWCwgaW50IHJhZGl1c1kpIC0+IGJvb2wgewotICAgICAgICByZXR1cm4gcmFkaXVzWCA8IDAg
fHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKTsKLSAgICB9OwotCi0gICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgSW50U2l6ZSByYWRp
dXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9lZmZlY3QucmFkaXVzWCgpLCBtX2VmZmVj
dC5yYWRpdXNZKCkpKTsKLQotICAgIGlmIChpc0RlZ2VuZXJhdGUocmFkaXVzLndpZHRoKCksIHJh
ZGl1cy5oZWlnaHQoKSkpIHsKLSAgICAgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVk
QnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnJhZGl1c1goKSwgbV9lZmZlY3QucmFkaXVzWSgpIH0p
KTsKLSAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkg
LSAxLCByYWRpdXMud2lkdGgoKSk7Ci0gICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3RE
cmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7Ci0KLSAgICBpZiAoaXNE
ZWdlbmVyYXRlKHJhZGl1c1gsIHJhZGl1c1kpKSB7Ci0gICAgICAgIGluLT5jb3B5UGl4ZWxCdWZm
ZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9
IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBlZmZlY3REcmF3aW5nUmVjdCwgbV9lZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsK
LSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
LT5kYXRhKCk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5n
RGF0YS50eXBlID0gbV9lZmZlY3QubW9ycGhvbG9neU9wZXJhdG9yKCk7Ci0gICAgcGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkgPSAmc291cmNlUGl4ZWxBcnJheTsKLSAgICBwYWludGluZ0RhdGEu
ZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRh
LndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7Ci0gICAgcGFpbnRpbmdE
YXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKTsKLSAgICBwYWlu
dGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOwotICAgIHBhaW50aW5nRGF0YS5yYWRp
dXNZID0gY2VpbGYocmFkaXVzWSk7Ci0KLSAgICBhcHBseVBsYXRmb3JtKHBhaW50aW5nRGF0YSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgcmV0dXJuIEZFTW9ycGhvbG9n
eVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7CkBA
IC0yOTMsMTMgKzg3LDEzIEBAIGJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dO
OgorICAgIGNhc2UgTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6VW5rbm93bjoKICAgICAgICAgdHMg
PDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9FUk9ERToKKyAgICBjYXNlIE1vcnBob2xvZ3lPcGVyYXRvclR5cGU6OkVyb2RlOgogICAg
ICAgICB0cyA8PCAiRVJPREUiOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9ESUxBVEU6CisgICAgY2FzZSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpEaWxh
dGU6CiAgICAgICAgIHRzIDw8ICJESUxBVEUiOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaAppbmRleCA1ODk1MDJhNmY1YmM2ZDIwYjhlMTllYTlmZjU3Y2E3ODkyNWQ4MjY0Li43
MTkzOTk4Zjg5ZTQ3OWViYThlMGEzMDc0MmQ2ODk2ZGExOTEzMTc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgK
QEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJ
bmMuIDIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUs
MTAgKzI2LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIHsKLSAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTiA9IDAsCi0gICAg
RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFID0gMSwKLSAgICBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfRElMQVRFID0gMgorZW51bSBjbGFzcyBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKKyAgICBV
bmtub3duLAorICAgIEVyb2RlLAorICAgIERpbGF0ZQogfTsKIAogY2xhc3MgRkVNb3JwaG9sb2d5
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4IDFkYTkyNzcwZTZjMmQyNjVh
MWZlODU3MTc4YjVlOGU3ZjU2MzZhNTQuLjUyYzliOWMzYmU4ZjJiYjgxN2M1MTMxNTkyODMzOWEz
ZDE5ZjhkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjUsOSArMjYsNyBAQAogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAKICNpbmNs
dWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRl
ICJGRU9mZnNldFNvZnR3YXJlQXBwbGllci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUsMzQgKzY0LDYgQEAgdm9pZCBGRU9m
ZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAg
ICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0K
IAotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyIHRvIHNl
cGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgRkVPZmZzZXRTb2Z0d2FyZUFw
cGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFT2Zmc2V0PiB7Ci0g
ICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRU9mZnNldD47Ci0K
LXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9vbCBhcHBseShjb25zdCBG
aWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7
Ci19OwotCi1ib29sIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXIm
IGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gcmVz
dWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGF1dG8gaW5CdWZm
ZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFp
bkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9lZmZlY3Quc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lv
biA9IG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2Fs
ZSh7IG1fZWZmZWN0LmR4KCksIG1fZWZmZWN0LmR5KCkgfSkpOwotICAgIHJlc3VsdEltYWdlLT5j
b250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbik7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBGRU9mZnNldFNvZnR3YXJlQXBw
bGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggMTZm
NjBlOTZiNDIzODczYTM0MWMyZjI2NDVhODAyNjljYTg3Y2Y1Ny4uN2ZmYzU1MjM1NWVjMjJlYzBk
NTFmMjNiYTA4ODgwNjUwZWVhYzM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCmlu
ZGV4IDdmYmZkODFhNjA4YjY1ZGQ3MTE3NGEzYjYzMWQzYTQzMzRlZWY4NmQuLmZjNTYwNmJiNTQ2
ZTQ5NGE5N2EzNTFhYTE1ZTU1ODM2OWE4Nzg0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVT
cGVjdWxhckxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCmluZGV4IGFjNDUwZGJkYjYwY2Q2OTdjZDhkZmMzYzc5
MzE4ZGJmNjRhZDUzMzUuLjVjN2U4MWNlMzA0NzIxYWU4MWIxNDM2NDRiNzYzODliNzMxOTkzM2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVT
cGVjdWxhckxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDQzOTA0OGY1YmQxZTE5NzU3ZDkxN2Zh
YjI1ZmRhNzM2YjE3ZDU3NzYuLjI0OWNiODcyZTdhMTk4MjczNTQ1OGI2Y2IzNTRiZjQ2MTg2MDBk
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFs
ZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjEsMTQgKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRVRp
bGUuaCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKyNpbmNsdWRlICJGRVRpbGVTb2Z0
d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVl
QXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsNjEgKzM4
LDYgQEAgRkVUaWxlOjpGRVRpbGUoKQogewogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3Mg
RkVUaWxlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVz
LgotY2xhc3MgRkVUaWxlU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNy
ZXRlQXBwbGllcjxGRVRpbGU+IHsKLSAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyPEZFVGlsZT47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0g
ICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlu
cHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci19OwotCi1ib29sIEZFVGlsZVNvZnR3YXJlQXBwbGllcjo6
YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0
KCk7Ci0KLSAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYg
KCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgLy8g
U291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhl
IGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNv
dXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0
aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7
Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24o
KTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbV9lZmZlY3QubWF4RWZmZWN0
UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgaWYgKGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljIHx8IGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkgewotICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0
ZXJSZWdpb24oKTsKLSAgICAgICAgdGlsZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSk7Ci0gICAgaWYgKCF0aWxlSW1hZ2UpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29u
dGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwotICAgIHRpbGVJbWFnZUNvbnRleHQudHJhbnNs
YXRlKC1pbk1heEVmZmVjdExvY2F0aW9uLngoKSwgLWluTWF4RWZmZWN0TG9jYXRpb24ueSgpKTsK
LSAgICB0aWxlSW1hZ2VDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOwotCi0gICAgYXV0byB0aWxlSW1hZ2VDb3B5ID0g
SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2UpKTsKLSAg
ICBpZiAoIXRpbGVJbWFnZUNvcHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFmZmlu
ZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHBhdHRlcm5UcmFuc2Zvcm0udHJhbnNs
YXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RMb2NhdGlvbik7Ci0KLSAgICBhdXRv
IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlQ29weS5yZWxlYXNlTm9uTnVsbCgp
LCB7IHRydWUsIHRydWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7Ci0KLSAgICBHcmFwaGljc0NvbnRl
eHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIGZpbHRlckNv
bnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSk7Ci0gICAgZmlsdGVyQ29udGV4
dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgcmV0dXJu
IEZFVGlsZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuaAppbmRleCA0MjZlZDdkODFkYmFmNDI2ZDY5MzdhOTc2MDRiNDhlOTA1MDQ1ZGIyLi43MTdi
NWMyZmE5OTllZWQwNzQ1MjIyNzY0NWZiYjkzYTZhZjg3MTJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAppbmRl
eCAzYjQ3YTE5NTc5YTg1ZmY5NGRkMWYyZGZhODEwZmQ3NWQ4MzZmZDg5Li4zMjIzYWY3OWQ1OWY2
MzJkNzZkNzk2M2I2NDFjNWYzN2ViNDczZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBAIC01LDcg
KzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6
ZWdlZC5odT4KICAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNiwxMSArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFVHVyYnVsZW5jZS5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmls
dGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjaW5jbHVk
ZSAiRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05OSw0MjAgKzk1LDYgQEAgYm9v
bCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQogICAgIHJldHVybiB0
cnVlOwogfQogCi0vLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFkYXB0
ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlvbjoK
LS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2UK
LQotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllciB0
byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIEZFVHVyYnVsZW5jZVNv
ZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUdXJi
dWxlbmNlPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RVR1cmJ1bGVuY2U+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJv
b2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIC8vIFByb2R1Y2VzIHJlc3VsdHMgaW4g
dGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6Ci0gICAgLy8gciA9IChhICog
cikgbW9kIG0gd2hlcmUgYSA9IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIC8vIG0g
PSBzX3JhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCi0gICAg
Ly8gU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3Qu
IDE5ODgKLSAgICAvLyBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSBy
ZXN1bHQgMTA0MzYxODA2NQotICAgIC8vIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVy
IGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0gICAgc3RhdGljIGNvbnN0IGludCBzX3Blcmxp
bk5vaXNlID0gNDA5NjsKLSAgICBzdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0gMjE0
NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi0gICAgc3RhdGljIGNvbnN0IGludCBzX3JhbmRBbXBsaXR1
ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQotICAgIHN0YXRpYyBjb25z
dCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLSAgICBzdGF0aWMgY29uc3QgaW50IHNf
cmFuZFIgPSAyODM2OyAvLyBtICUgYQotCi0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrU2l6
ZSA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUg
LSAxOwotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIC8vIENvbXB1dGUgcHNl
dWRvIHJhbmRvbSBudW1iZXIuCi0gICAgICAgIGxvbmcgcmFuZG9tKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEp
IC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0IDw9
IDApCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNfcmFuZE1heGltdW07Ci0gICAgICAgICAg
ICBzZWVkID0gcmVzdWx0OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
Ci0gICAgICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKLSAgICAgICAgaW50IG51bU9jdGF2
ZXM7Ci0gICAgICAgIGxvbmcgc2VlZDsKLSAgICAgICAgYm9vbCBzdGl0Y2hUaWxlczsKLSAgICAg
ICAgSW50U2l6ZSBwYWludGluZ1NpemU7Ci0KLSAgICAgICAgaW50IGxhdHRpY2VTZWxlY3Rvclsy
ICogc19ibG9ja1NpemUgKyAyXTsKLSAgICAgICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAqIHNfYmxv
Y2tTaXplICsgMl1bMl07Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAg
ICAgaW50IHdpZHRoIHsgMCB9OyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3cmFwIGZvciBz
dGl0Y2hpbmcuCi0gICAgICAgIGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2YWx1ZSB0byB3
cmFwLgotICAgICAgICBpbnQgaGVpZ2h0IHsgMCB9OwotICAgICAgICBpbnQgd3JhcFkgeyAwIH07
Ci0gICAgfTsKLQotICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgewotICAgICAgICBJbnRSZWN0
IGZpbHRlclJlZ2lvbjsKLSAgICAgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlOwotICAgICAgICBV
aW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKLSAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWlu
dGluZ0RhdGE7Ci0gICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICAgICAgaW50IHN0
YXJ0WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBpbmxpbmUgZmxv
YXQgc21vb3RoQ3VydmUoZmxvYXQgdCkgeyByZXR1cm4gdCAqIHQgKiAoMyAtIDIgKiB0KTsgfQot
ICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9h
dCBhLCBmbG9hdCBiKSB7IHJldHVybiBhICsgdCAqIChiIC0gYSk7IH0KLQotICAgIHN0YXRpYyBQ
YWludGluZ0RhdGEgaW5pdFBhaW50aW5nRGF0YShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVk
LCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpOwotICAgIHN0
YXRpYyBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQm
IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVksIGJvb2wgc3RpdGNoVGlsZXMp
OwotCi0gICAgc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBQ
YWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VW
ZWN0b3IpOwotICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNl
ZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENv
bXBvbmVudHMpOwotICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3Vs
YXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0
YSwgY29uc3QgRmxvYXRQb2ludCYpOwotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdl
bmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRl
clNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRh
JiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotICAgIHN0YXRpYyB2b2lkIGFw
cGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
ZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBQYWludGluZ0RhdGEm
LCBTdGl0Y2hEYXRhJik7Ci19OwotCi1GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OlBhaW50
aW5nRGF0YSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmluaXRQYWludGluZ0RhdGEoVHVy
YnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJ
bnRTaXplJiBwYWludGluZ1NpemUpCi17Ci0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSB7
IHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwg
c3RpdGNoVGlsZXMsIHBhaW50aW5nU2l6ZSwgeyB9LCB7IH0gfTsKLQotICAgIC8vIFRoZSBzZWVk
IHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgc19yYW5kTWF4aW11bSAtIDFdLgotICAgIGlm
IChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0o
cGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5kTWF4aW11bSAtIDEpKSArIDE7Ci0gICAgaWYgKHBh
aW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4aW11bSAtIDEpCi0gICAgICAgIHBhaW50aW5nRGF0
YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7Ci0KLSAgICBmbG9hdCogZ3JhZGllbnQ7Ci0gICAg
Zm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gaTsKLSAgICAgICAgICAgIGdyYWRpZW50ID0g
cGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldOwotICAgICAgICAgICAgZG8gewotICAg
ICAgICAgICAgICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0Rh
dGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2Nr
U2l6ZTsKLSAgICAgICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0Pigo
cGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUp
IC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICB9IHdoaWxlICghZ3JhZGllbnRbMF0gJiYgIWdy
YWRpZW50WzFdKTsKLSAgICAgICAgICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6
Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBncmFkaWVudFsw
XSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICAgICAgZ3JhZGllbnRbMV0gLz0gbm9y
bWFsaXphdGlvbkZhY3RvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSBz
X2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgaW50IGsgPSBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5k
b20oKSAlIHNfYmxvY2tTaXplOwotICAgICAgICBBU1NFUlQoaiA+PSAwKTsKLSAgICAgICAgQVNT
RVJUKGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRp
Y2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal07Ci0gICAgICAg
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0gPSBrOwotICAgIH0KLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyArK2kpIHsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRp
Y2VTZWxlY3RvcltpXTsKLSAgICAgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0
OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVs
XVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ld
WzBdOwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tT
aXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMV07Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcGFpbnRpbmdEYXRhOwotfQotCi1GRVR1cmJ1bGVu
Y2VTb2Z0d2FyZUFwcGxpZXI6OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
Ojpjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5
WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBib29sIHN0aXRjaFRpbGVzKQotewotICAgIGlmICgh
c3RpdGNoVGlsZXMpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBmbG9hdCB0aWxlV2lkdGgg
PSB0aWxlU2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHRpbGVIZWlnaHQgPSB0aWxlU2l6ZS5oZWln
aHQoKTsKLSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAmJiB0aWxlSGVpZ2h0ID4gMCk7Ci0KLSAg
ICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVz
dCBiZSBhZGp1c3RlZAotICAgIC8vIHNvIHRoYXQgdGhlIHRpbGUgYm9yZGVycyB3aWxsIGJlIGNv
bnRpbnVvdXMuCi0gICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7Ci0gICAgICAgIGZsb2F0IGxvd0Zy
ZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7
Ci0gICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsZih0aWxlV2lkdGggKiBiYXNlRnJl
cXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJl
IG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgotICAgICAgICBpZiAoYmFz
ZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5j
eVgpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxvd0ZyZXF1ZW5jeTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBoaWdoRnJlcXVlbmN5OwotICAgIH0K
LSAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0g
Zmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAg
ICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZ
KSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WSAvIGxvd0ZyZXF1ZW5j
eSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgICAgIGJhc2VGcmVx
dWVuY3lZID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRnJl
cXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotCi0gICAgU3RpdGNoRGF0YSBzdGl0Y2hE
YXRhOwotICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYodGlsZVdpZHRoICogYmFzZUZyZXF1
ZW5jeVgpOwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0
YS53aWR0aDsKLSAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJvdW5kZih0aWxlSGVpZ2h0ICogYmFz
ZUZyZXF1ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgc3Rp
dGNoRGF0YS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gc3RpdGNoRGF0YTsKLX0KLQotLy8gVGhpcyBp
cyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmls
dGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQ
b2ludCYgbm9pc2VWZWN0b3IpCi17Ci0gICAgc3RydWN0IE5vaXNlUG9zaXRpb24gewotICAgICAg
ICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBzcGVjIHRleHQuCi0gICAgICAgIGludCBu
ZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRoZSBzcGVjIHRleHQuCi0gICAgICAgIGZsb2F0IGZy
YWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotCi0gICAgICAgIE5vaXNlUG9z
aXRpb24oZmxvYXQgY29tcG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyAgdCA9IHZl
Y1swXSArIFBlcmxpbk47Ci0gICAgICAgICAgICAvLyAgYngwID0gKGludCl0OwotICAgICAgICAg
ICAgLy8gIGJ4MSA9IGJ4MCsxOwotICAgICAgICAgICAgLy8gIHJ4MCA9IHQgLSAoaW50KXQ7Ci0g
ICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVudCArIHNfcGVybGluTm9pc2U7Ci0g
ICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pOwotICAgICAgICAg
ICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOwotICAgICAgICAgICAgZnJhY3Rpb24gPSBwb3NpdGlv
biAtIGluZGV4OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHN0aXRjaChpbnQg
c2l6ZSwgaW50IHdyYXBTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZiAoYngwID49
IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MCAtPSBwU3RpdGNoSW5m
by0+bldpZHRoOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IHdyYXBTaXplKQotICAgICAgICAg
ICAgICAgIGluZGV4IC09IHNpemU7Ci0KLSAgICAgICAgICAgIC8vIGlmIChieDEgPj0gcFN0aXRj
aEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAgIC8vICAgYngxIC09IHBTdGl0Y2hJbmZvLT5uV2lk
dGg7Ci0gICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IHdyYXBTaXplKQotICAgICAgICAgICAg
ICAgIG5leHRJbmRleCAtPSBzaXplOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIE5vaXNlUG9z
aXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7Ci0gICAgTm9pc2VQb3NpdGlvbiBub2lzZVko
bm9pc2VWZWN0b3IueSgpKTsKLQotICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRpY2Ug
cG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChwYWludGluZ0RhdGEuc3RpdGNoVGlsZXMpIHsK
LSAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRhLndpZHRoLCBzdGl0Y2hEYXRhLndyYXBY
KTsKLSAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hEYXRhLmhlaWdodCwgc3RpdGNoRGF0YS53
cmFwWSk7Ci0gICAgfQotCi0gICAgLy8gYngwICY9IEJNOwotICAgIC8vIGJ4MSAmPSBCTTsKLSAg
ICAvLyBieTAgJj0gQk07Ci0gICAgLy8gYnkxICY9IEJNOwotICAgIG5vaXNlWC5pbmRleCAmPSBz
X2Jsb2NrTWFzazsKLSAgICBub2lzZVgubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5v
aXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVkubmV4dEluZGV4ICY9IHNfYmxv
Y2tNYXNrOwotCi0gICAgLy8gaSA9IHVMYXR0aWNlU2VsZWN0b3JbYngwXTsKLSAgICAvLyBqID0g
dUxhdHRpY2VTZWxlY3RvcltieDFdOwotICAgIGludCBsYXR0aWNlSW5kZXggPSBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5pbmRleF07Ci0gICAgaW50IG5leHRMYXR0aWNlSW5k
ZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5uZXh0SW5kZXhdOwotCi0g
ICAgLy8gc3ggPSBkb3VibGUoc19jdXJ2ZShyeDApKTsKLSAgICAvLyBzeSA9IGRvdWJsZShzX2N1
cnZlKHJ5MCkpOwotICAgIGZsb2F0IHN4ID0gc21vb3RoQ3VydmUobm9pc2VYLmZyYWN0aW9uKTsK
LSAgICBmbG9hdCBzeSA9IHNtb290aEN1cnZlKG5vaXNlWS5mcmFjdGlvbik7Ci0KLSAgICBhdXRv
IG5vaXNlRm9yQ2hhbm5lbCA9IFsmXShpbnQgY2hhbm5lbCkgewotICAgICAgICAvLyBiMDAgPSB1
TGF0dGljZVNlbGVjdG9yW2kgKyBieTBdCi0gICAgICAgIGludCBiMDAgPSBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5pbmRleF07Ci0gICAgICAgIC8v
IHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAwXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTAg
KiBxWzFdOwotICAgICAgICBjb25zdCBmbG9hdCogcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtj
aGFubmVsXVtiMDBdOwotICAgICAgICBmbG9hdCB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSAr
IG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0KLSAgICAgICAgLy8gYjEwID0gdUxhdHRpY2VTZWxl
Y3RvcltqICsgYnkwXTsKLSAgICAgICAgaW50IGIxMCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5pbmRleF07Ci0gICAgICAgIC8vIHJ4MSA9
IHJ4MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjEw
XTsgdiA9IHJ4MSAqIHFbMF0gKyByeTAgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRpbmdEYXRh
LmdyYWRpZW50W2NoYW5uZWxdW2IxMF07Ci0gICAgICAgIGZsb2F0IHYgPSAobm9pc2VYLmZyYWN0
aW9uIC0gMSkgKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9uICogcVsxXTsKLSAgICAgICAgLy8gYSA9
IGxlcnAoc3gsIHUsIHYpOwotICAgICAgICBmbG9hdCBhID0gbGluZWFySW50ZXJwb2xhdGlvbihz
eCwgdSwgdik7Ci0KLSAgICAgICAgLy8gYjAxID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkxXTsK
LSAgICAgICAgaW50IGIwMSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUlu
ZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Ci0gICAgICAgIC8vIHJ5MSA9IHJ5MCAtIDEuMGY7Ci0g
ICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAxXTsgdSA9IHJ4MCAqIHFb
MF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5u
ZWxdW2IwMV07Ci0gICAgICAgIHUgPSBub2lzZVguZnJhY3Rpb24gKiBxWzBdICsgKG5vaXNlWS5m
cmFjdGlvbiAtIDEpICogcVsxXTsKLQotICAgICAgICAvLyBiMTEgPSB1TGF0dGljZVNlbGVjdG9y
W2ogKyBieTFdOwotICAgICAgICBpbnQgYjExID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Ci0gICAgICAgIC8vIHEgPSBm
R3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjExXTsgdiA9IHJ4MSAqIHFbMF0gKyByeTEgKiBxWzFd
OwotICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IxMV07Ci0gICAg
ICAgIHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAt
IDEpICogcVsxXTsKLSAgICAgICAgLy8gYiA9IGxlcnAoc3gsIHUsIHYpOwotICAgICAgICBmbG9h
dCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7Ci0KLSAgICAgICAgLy8gcmV0dXJu
IGxlcnAoc3ksIGEsIGIpOwotICAgICAgICByZXR1cm4gbGluZWFySW50ZXJwb2xhdGlvbihzeSwg
YSwgYik7Ci0gICAgfTsKLQotICAgIHJldHVybiB7Ci0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgw
KSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDEpLAotICAgICAgICBub2lzZUZvckNoYW5uZWwo
MiksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgzKQotICAgIH07Ci19Ci0KLS8vIGh0dHBzOi8v
d3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQgZGVzY3Jp
YmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xvciBjb21wb25lbnRzLgotLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JHQkE8dWludDg+PihTUkdCQTxmbG9hdD4pIHRvIGdl
dCB0aGUgc2FtZSBiZWhhdmlvci4KLUNvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OnRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKQotewotICAgIHJldHVybiB7
Ci0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBv
bmVudHNbMF0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0
YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzFdICogMjU1KSwgMCwgMjU1KSwKLSAgICAg
ICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sy
XSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nh
c3Q8aW50PihmbG9hdENvbXBvbmVudHNbM10gKiAyNTUpLCAwLCAyNTUpLAotICAgIH07Ci19Ci0K
LUNvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6
OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQotewotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdHVyYnVsZW5jZUZ1bmN0aW9uUmVz
dWx0OwotICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogcGFpbnRpbmdEYXRh
LmJhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVkp
OwotICAgIGZsb2F0IHJhdGlvID0gMTsKLSAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUg
PCBwYWludGluZ0RhdGEubnVtT2N0YXZlczsgKytvY3RhdmUpIHsKLSAgICAgICAgaWYgKHBhaW50
aW5nRGF0YS50eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCi0gICAgICAgICAg
ICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIHN0aXRj
aERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0
dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIHN0aXRjaERh
dGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJhdGlvOwotCi0gICAgICAgIG5vaXNlVmVjdG9yLnNl
dFgobm9pc2VWZWN0b3IueCgpICogMik7Ci0gICAgICAgIG5vaXNlVmVjdG9yLnNldFkobm9pc2VW
ZWN0b3IueSgpICogMik7Ci0gICAgICAgIHJhdGlvICo9IDI7Ci0KLSAgICAgICAgaWYgKHBhaW50
aW5nRGF0YS5zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1
ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBh
bmQKLSAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmllcyB0byBzdWJ0
cmFjdGluZyBpdCBvbmNlLgotICAgICAgICAgICAgc3RpdGNoRGF0YS53aWR0aCAqPSAyOwotICAg
ICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndyYXBYIC0gc19wZXJs
aW5Ob2lzZTsKLSAgICAgICAgICAgIHN0aXRjaERhdGEuaGVpZ2h0ICo9IDI7Ci0gICAgICAgICAg
ICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0aXRjaERhdGEud3JhcFkgLSBzX3Blcmxpbk5vaXNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHZhbHVlIG9mIHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSAr
IDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQotICAgIC8vIGFuZCAodHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgotICAgIGlmIChwYWludGluZ0RhdGEudHlwZSA9
PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKLQotICAg
IHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3Vs
dCk7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
R2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmls
dGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQg
ZW5kWSkKLXsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBGbG9hdFBvaW50IHBv
aW50KDAsIGZpbHRlclJlZ2lvbi55KCkgKyBzdGFydFkpOwotICAgIGludCBpbmRleE9mUGl4ZWxD
aGFubmVsID0gc3RhcnRZICogKGZpbHRlclJlZ2lvbi53aWR0aCgpIDw8IDIpOwotICAgIEZsb2F0
U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBmaWx0ZXJTY2FsZS53aWR0aCgpLCAxIC8gZmlsdGVy
U2NhbGUuaGVpZ2h0KCkgfTsKLQotICAgIGZvciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyAr
K3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsKLSAgICAgICAgcG9pbnQu
c2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0
ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50Lngo
KSArIDEpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gcG9pbnQuc2NhbGVk
KGludmVyc2VTY2FsZS53aWR0aCgpLCBpbnZlcnNlU2NhbGUuaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWludGlu
Z0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5z
ZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwp
OwotICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdv
cmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCi17Ci0gICAgYXBwbHlQbGF0Zm9ybUdl
bmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9uLCBwYXJhbWV0ZXJzLT5maWx0ZXJTY2FsZSwg
KnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFt
ZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7
Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNv
bnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhKQotewotICAgIGludCBoZWlnaHQgPSBmaWx0ZXJSZWdp
b24uaGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQgYXJlYSA9IGZpbHRlclJlZ2lvbi5hcmVhKCk7Ci0K
LSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7
IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzLgotICAgIHVuc2lnbmVk
IG1heE51bVRocmVhZHMgPSBmaWx0ZXJSZWdpb24uaGVpZ2h0KCkgLyA4OwotICAgIHVuc2lnbmVk
IG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oYXJlYSAvIG1pbmltYWxS
ZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLQotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVt
YmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8QXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxl
bEpvYnMoJmFwcGx5UGxhdGZvcm1Xb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotCi0gICAg
ICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQotICAgICAgICBhdXRvIG51bUpvYnMgPSBw
YXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChudW1Kb2JzID4gMSkgewot
ICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJzdGVwWSItc2l6ZWQgam9icywgZGlz
dHJpYnV0aW5nIHRoZSBleHRyYSByb3dzIGludG8gdGhlIGZpcnN0ICJqb2JzV2l0aEV4dHJhIiBq
b2JzLgotICAgICAgICAgICAgdW5zaWduZWQgc3RlcFkgPSBoZWlnaHQgLyBudW1Kb2JzOwotICAg
ICAgICAgICAgdW5zaWduZWQgam9ic1dpdGhFeHRyYSA9IGhlaWdodCAlIG51bUpvYnM7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBzdGFydFkgPSAwOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtSm9iczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247Ci0gICAgICAgICAgICAgICAgcGFy
YW1zLmZpbHRlclNjYWxlID0gZmlsdGVyU2NhbGU7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBp
eGVsQXJyYXkgPSAmcGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdE
YXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9
IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKLQot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9IChpIDwgam9ic1dpdGhFeHRyYSkg
PyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZW5kWSA9IHBhcmFt
cy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc3RhcnRZICs9IGpvYkhlaWdo
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZhbGxiYWNr
IHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3IHRo
cmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwuCi0gICAgYXBwbHlQbGF0Zm9ybUdl
bmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwgcGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRh
LCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZVNvZnR3YXJl
QXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZl
Y3RvciYpCi17Ci0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4
ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSk7Ci0gICAgaWYgKHJlc3VsdFNpemUuYXJlYSgpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhdXRvIHRpbGVTaXplID0gcm91bmRlZEludFNp
emUobV9lZmZlY3QuZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZs
b2F0IGJhc2VGcmVxdWVuY3lYID0gbV9lZmZlY3QuYmFzZUZyZXF1ZW5jeVgoKTsKLSAgICBmbG9h
dCBiYXNlRnJlcXVlbmN5WSA9IG1fZWZmZWN0LmJhc2VGcmVxdWVuY3lZKCk7Ci0gICAgYXV0byBz
dGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJh
c2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5zdGl0Y2hUaWxlcygpKTsKLQotICAgIGF1dG8gcGFpbnRp
bmdEYXRhID0gaW5pdFBhaW50aW5nRGF0YShtX2VmZmVjdC50eXBlKCksIGJhc2VGcmVxdWVuY3lY
LCBiYXNlRnJlcXVlbmN5WSwgbV9lZmZlY3QubnVtT2N0YXZlcygpLCBtX2VmZmVjdC5zZWVkKCks
IG1fZWZmZWN0LnN0aXRjaFRpbGVzKCksIHRpbGVTaXplKTsKLQotICAgIGFwcGx5UGxhdGZvcm0o
bV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmlu
ZGV4IDdjNDdjNzg3NDliODU2ZmM5ZjkxYWY4NGM2MTM0Y2Y0N2RmMDZlMjQuLjk3M2ViMWQzZTlj
MDMwMTQ1YzRlY2FjOWMxZDMxZjM5YTljNTRmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNCw3ICs0
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5o
dT4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdEFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oCmluZGV4IDQ3ZTE0MjUxYzU2MmU5NjdmZmI5
YWI3MWVjM2FmYTcwZGNiOWMyYjEuLmY3YTU4ZDBmODExZDJjNjcxMjczOWUxMzAxZTQzM2NiNTUw
MjRkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0QXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oCkBAIC0yNSw4ICsyNSwxMiBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZpbHRlcjsKKwogY2xhc3MgRmlsdGVyRWZmZWN0QXBw
bGllciB7CiBwdWJsaWM6CiAgICAgRmlsdGVyRWZmZWN0QXBwbGllcigpID0gZGVmYXVsdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
QWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VBbHBoYS5jcHAKaW5kZXggODIwMmZiOTQ4YTk2ZDcwM2U1ODViNDljOTJlMjUzNDRiMDNiYWE1
OC4uMDE4YjU3NjU3MjMwYzNjOWI0NDJkZDI4MWRhMGU5ZmYyZTkyZTYwOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDEwICsyMSw4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKIAotI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlNv
dXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NiwzNyArNDUsNiBAQCB2b2lkIFNvdXJj
ZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikK
ICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBTb3VyY2VBbHBoYVNvZnR3YXJl
QXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIFNvdXJj
ZUFscGhhU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxTb3VyY2VBbHBoYT4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8U291cmNlQWxwaGE+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQot
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotfTsKLQotYm9vbCBTb3VyY2VBbHBoYVNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQo
KTsKLQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBhdXRvIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFp
bWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRmxvYXRSZWN0IGltYWdl
UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsK
LSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4
dCgpOwotCi0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFj
ayk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBJbnRQ
b2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogYm9vbCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGll
cigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXgg
MGE4Y2ZmZDc2NDIwZGU3YTFhN2U0YzA1OTNkNDc2YTE0Y2ZhMTA3NS4uZWNmYmYxMjIzMzNiYjMw
YjZlNTY0NTU4MGRjMDhiOGZkNTFmMjFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggN2IyNjNkZGUwOTdj
NTkwZDdmNWQ0YzQ5ZjQ2NGQ1NzY1ZTY3NDU4MC4uMzQ5ZGEwZGI5ZjhkNGM2YTljZjk0YWJlMDli
ZWE4YWM3OGFiMmMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMSw4ICsyMiw3IEBACiAjaW5jbHVkZSAiU291cmNlR3JhcGhp
Yy5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGll
ci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBo
aWNTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQzLDI3ICs0Myw2IEBAIHZvaWQgU291cmNlR3JhcGhp
Yzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAg
c2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0KIAot
Ly8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIgdG8g
c2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBTb3VyY2VHcmFwaGljU29m
dHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxTb3VyY2VH
cmFwaGljPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxT
b3VyY2VHcmFwaGljPjsKLQotcHVibGljOgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBi
b29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKSBvdmVycmlkZTsKLX07Ci0KLWJvb2wgU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
cjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYp
Ci17Ci0gICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgYXV0byBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOwotICAgIGlmICgh
cmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIElu
dFBvaW50KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIFNvdXJjZUdyYXBoaWM6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4g
U291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVm
ZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmluZGV4IDlmYmMyMGE3NTFkMDc2NWYxNmMzNDVhODgw
YWE2MmZiMjA2Yzg2NDEuLjUwZjQ3YTFiNjA3OTQxMWIxNzVlYTE3YWJjZWViYjgzMGM3ODNhNDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZUFwcGxp
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI1MjNhMmIyOWMzODJlYTI5MmY5YmJlYjQ0NWFiNjlhMTA1ZmQy
NWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDE0IEFk
b2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRl
ICJGRUJsZW5kLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmRTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYg
aW5wdXRFZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0u
Z2V0KCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNbMV0uZ2V0KCk7CisK
KyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAg
ICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGlt
YWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbWFnZUJ1ZmZl
cjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAh
aW1hZ2VCdWZmZXIyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRl
eHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVy
LT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fZWZm
ZWN0LmJsZW5kTW9kZSgpIH0pOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdh
cmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWFkYTg0MWMzMmJiMGYyMzAwODgzYTlmZTJlZjMyOGQ3
YWNiOTRmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5
c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZFQmxlbmQ7CisKK2NsYXNzIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQmxlbmQ+IHsKKyAgICB1c2luZyBCYXNlID0g
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQmxlbmQ+OworCitwdWJsaWM6CisgICAgdXNp
bmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1h
dHJpeFNvZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjdlYzBhMTE5ZjcyYTE2NWIwMTUx
Mzk5Yzg2MjYyZjk2M2JkYTY2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBw
bGllci5jcHAKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNs
dWRlICJGRUNvbG9yTWF0cml4LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2Nl
bGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZF
Q29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIo
RkVDb2xvck1hdHJpeCYgZWZmZWN0KQorICAgIDogQmFzZShlZmZlY3QpCit7CisgICAgaWYgKG1f
ZWZmZWN0LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCisgICAgICAgIEZF
Q29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1f
ZWZmZWN0LnZhbHVlcygpWzBdKTsKKyAgICBlbHNlIGlmIChtX2VmZmVjdC50eXBlKCkgPT0gRkVD
T0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlSHVlUm90YXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1fZWZmZWN0LnZhbHVlcygpWzBd
KTsKK30KKworaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6bWF0cml4
KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkgY29u
c3QKK3sKKyAgICBmbG9hdCByID0gcmVkOworICAgIGZsb2F0IGcgPSBncmVlbjsKKyAgICBmbG9h
dCBiID0gYmx1ZTsKKyAgICBmbG9hdCBhID0gYWxwaGE7CisKKyAgICBjb25zdCBhdXRvJiB2YWx1
ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKKworICAgIHJlZCAgID0gdmFsdWVzWyAwXSAqIHIgKyB2
YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNb
IDRdICogMjU1OworICAgIGdyZWVuID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyAr
IHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAg
IGJsdWUgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFdICogZyArIHZhbHVlc1sxMl0gKiBi
ICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1OworICAgIGFscGhhID0gdmFsdWVz
WzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAq
IGEgKyB2YWx1ZXNbMTldICogMjU1OworfQorCitpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3Jl
ZW4sIGZsb2F0JiBibHVlKSBjb25zdAoreworICAgIGZsb2F0IHIgPSByZWQ7CisgICAgZmxvYXQg
ZyA9IGdyZWVuOworICAgIGZsb2F0IGIgPSBibHVlOworCisgICAgcmVkICAgICA9IHIgKiBtX2Nv
bXBvbmVudHNbMF0gKyBnICogbV9jb21wb25lbnRzWzFdICsgYiAqIG1fY29tcG9uZW50c1syXTsK
KyAgICBncmVlbiAgID0gciAqIG1fY29tcG9uZW50c1szXSArIGcgKiBtX2NvbXBvbmVudHNbNF0g
KyBiICogbV9jb21wb25lbnRzWzVdOworICAgIGJsdWUgICAgPSByICogbV9jb21wb25lbnRzWzZd
ICsgZyAqIG1fY29tcG9uZW50c1s3XSArIGIgKiBtX2NvbXBvbmVudHNbOF07Cit9CisKKy8vIEZJ
WE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9y
THVtaW5hbmNlLmguCitpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjps
dW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFs
cGhhKSBjb25zdAoreworICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsgMC43MTU0ICogZ3JlZW4g
KyAwLjA3MjEgKiBibHVlOworICAgIHJlZCA9IDA7CisgICAgZ3JlZW4gPSAwOworICAgIGJsdWUg
PSAwOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCit2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZm
ZXIpIGNvbnN0Cit7CisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsK
KyAgICBhdXRvIGJ1ZmZlclNpemUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7CisKKyAgICBBU1NFUlQo
cGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOworICAgIAorICAg
IGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKKyAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxB
cnJheS5kYXRhKCk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBi
dWZmZXJTaXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7
CisgICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICBzcmMuZGF0
YSA9IGRhdGE7CisgICAgCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qud2lkdGgg
PSBidWZmZXJTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdo
dCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OworICAgIGRl
c3QuZGF0YSA9IGRhdGE7CisKKyAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUoKSkgeworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIGNvbnN0IGF1dG8mIHZhbHVl
cyA9IG1fZWZmZWN0LnZhbHVlcygpOworCisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQg
KiA0XSA9IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
IDBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikp
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBk
aXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WzE2XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCisKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNv
cikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0g
KiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VN
YXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxs
cHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICog
NF0gPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25l
bnRzWzBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKG1fY29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25l
bnRzWzFdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKG1fY29tcG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25l
bnRzWzJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKG1fY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICAwLAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0
aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxs
cHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAgICAgIGNvbnN0IGludDE2
X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjIx
MjUgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcxNTQg
KiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEgKiBk
aXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJpeE11bHRp
cGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxw
dHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KK30KKyNl
bmRpZgorCit2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1V
bmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKK3sKKyAgICBhdXRv
JiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIHBpeGVsQXJy
YXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOworCisgICAgc3dpdGNoIChtX2VmZmVjdC50
eXBlKCkpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVk
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBn
cmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAg
IGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAg
ICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAz
KTsKKyAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3Ro
OyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBp
eGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJs
dWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBm
bG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAg
ICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUpOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhB
OgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9m
ZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAg
ICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAg
ICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEp
OworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVk
KTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVu
KTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUp
OworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZl
cikgY29uc3QKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBjb25zdCBhdXRvJiB2YWx1ZXMg
PSBtX2VmZmVjdC52YWx1ZXMoKTsKKworICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4
ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBv
ZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4CisgICAgLy8gaXMgbm90IHplcm8sIGZhbGwg
YmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgaWYgKG1fZWZmZWN0LnR5cGUoKSAhPSBGRUNP
TE9STUFUUklYX1RZUEVfTUFUUklYIHx8ICghdmFsdWVzWzRdICYmICF2YWx1ZXNbOV0gJiYgIXZh
bHVlc1sxNF0gJiYgIXZhbHVlc1sxOV0pKSB7CisgICAgICAgIGFwcGx5UGxhdGZvcm1BY2NlbGVy
YXRlZChwaXhlbEJ1ZmZlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBh
cHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7Cit9CisKK2Jvb2wgRkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgYXV0byBpbiA9IGlucHV0RWZmZWN0
c1swXS5nZXQoKTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZl
clJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAo
aW5CdWZmZXIpCisgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOworCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1f
ZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9OworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBv
aW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBp
eGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0
KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhB
KQorICAgICAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CisKKyAgICBhcHBseVBs
YXRmb3JtKCpwaXhlbEJ1ZmZlcik7CisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpw
aXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzM5NDg5ZTVhM2ZmY2ViZDMyZDlkOGI5
ZmRjMDIwZjM5NWVlODdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRkVDb2xvck1hdHJpeDsKKworY2xhc3MgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGll
ciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xvck1hdHJpeD4gewor
ICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xvck1hdHJp
eD47CisKK3B1YmxpYzoKKyAgICBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKEZFQ29sb3JN
YXRyaXgmKTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGlubGlu
ZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9h
dCYgYWxwaGEpIGNvbnN0OworICAgIGlubGluZSB2b2lkIHNhdHVyYXRlQW5kSHVlUm90YXRlKGZs
b2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUpIGNvbnN0OworICAgIGlubGluZSB2
b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9h
dCYgYWxwaGEpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgdm9pZCBhcHBseVBs
YXRmb3JtQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25zdDsKKyNlbmRpZgorICAgIHZvaWQg
YXBwbHlQbGF0Zm9ybVVuYWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25zdDsKKworICAgIHZv
aWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0OworCisgICAgZmxvYXQgbV9jb21w
b25lbnRzWzldOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVu
dFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGU0NDJhZGVmNDk5MDYxMTk3MzllMGUzZTVmNDVlMGI2ZDE5OGEz
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5jcHAKQEAg
LTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmgi
CisKKyNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
clNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKK3sKK30KKwordm9pZCBGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24p
Cit7CisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0
aW9uLnRhYmxlVmFsdWVzOworICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7Cisg
ICAgaWYgKG4gPCAxKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUgYyA9IGkgLyAyNTUuMDsK
KyAgICAgICAgdW5zaWduZWQgayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjICogKG4gLSAxKSk7
CisgICAgICAgIGRvdWJsZSB2MSA9IHRhYmxlVmFsdWVzW2tdOworICAgICAgICBkb3VibGUgdjIg
PSB0YWJsZVZhbHVlc1tzdGQ6Om1pbigoayArIDEpLCAobiAtIDEpKV07CisgICAgICAgIGRvdWJs
ZSB2YWwgPSAyNTUuMCAqICh2MSArIChjICogKG4gLSAxKSAtIGspICogKHYyIC0gdjEpKTsKKyAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCit2b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxl
KExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRy
YW5zZmVyRnVuY3Rpb24pCit7CisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMg
PSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOworICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZh
bHVlcy5zaXplKCk7CisgICAgaWYgKG4gPCAxKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNpZ25l
ZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChpICogbikgLyAyNTUuMCk7CisgICAgICAgIGsg
PSBzdGQ6Om1pbihrLCBuIC0gMSk7CisgICAgICAgIGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZh
bHVlc1trXTsKKyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFs
KSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAg
fQorfQorCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVM
aW5lYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IHRyYW5zZmVyRnVu
Y3Rpb24uc2xvcGUgKiBpICsgMjU1ICogdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQ7CisgICAg
ICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOworICAgICAgICB2
YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOworICAgIH0KK30KKwordm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlR2FtbWFUYWJsZShMb29r
dXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2Zl
ckZ1bmN0aW9uKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgZG91YmxlIGV4cG9uZW50ID0gdHJhbnNmZXJGdW5jdGlvbi5leHBv
bmVudDsgLy8gUkNWVCBkb2Vzbid0IGxpa2UgcGFzc2luZyBhIGRvdWJsZSBhbmQgYSBmbG9hdCB0
byBwb3csIHNvIHByb21vdGUgdGhpcyB0byBkb3VibGUKKyAgICAgICAgZG91YmxlIHZhbCA9IDI1
NS4wICogKHRyYW5zZmVyRnVuY3Rpb24uYW1wbGl0dWRlICogcG93KChpIC8gMjU1LjApLCBleHBv
bmVudCkgKyB0cmFuc2ZlckZ1bmN0aW9uLm9mZnNldCk7CisgICAgICAgIHZhbCA9IHN0ZDo6bWF4
KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOworICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNf
Y2FzdDx1aW50OF90Pih2YWwpOworICAgIH0KK30KKworRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3
YXJlQXBwbGllcjo6TG9va3VwVGFibGUgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1
bmN0aW9uKQoreworICAgIExvb2t1cFRhYmxlIHRhYmxlOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRhYmxlLnNpemUoKTsgKytpKQorICAgICAgICB0YWJsZVtpXSA9IGk7CisKKyAg
ICB1c2luZyBUcmFuc2ZlclR5cGUgPSB2b2lkICgqKShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBUcmFuc2ZlclR5cGUgY2FsbEVmZmVjdFtdID0g
eworICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfVU5LTk9XTgorICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBP
TkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJVFkKKyAgICAgICAgY29tcHV0ZVRhYnVsYXJUYWJsZSwg
ICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFCisgICAgICAgIGNvbXB1dGVEaXNj
cmV0ZVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVURQorICAgICAg
ICBjb21wdXRlTGluZWFyVGFibGUsICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSCisgICAgICAgIGNvbXB1dGVHYW1tYVRhYmxlICAgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9HQU1NQQorICAgIH07CisKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4oZnVuY3Rpb24udHlwZSkgPCBXVEZfQVJS
QVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBjYWxsRWZmZWN0W2Z1bmN0aW9uLnR5cGVdKHRh
YmxlLCBmdW5jdGlvbik7CisKKyAgICByZXR1cm4gdGFibGU7Cit9CisKK3ZvaWQgRkVDb21wb25l
bnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIpIGNvbnN0Cit7CisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRh
dGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgo
KTsKKyAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICBhdXRvIHJl
ZFRhYmxlICAgPSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3QucmVkRnVuY3Rpb24oKSk7Cisg
ICAgYXV0byBncmVlblRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmdyZWVuRnVu
Y3Rpb24oKSk7CisgICAgYXV0byBibHVlVGFibGUgID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZm
ZWN0LmJsdWVGdW5jdGlvbigpKTsKKyAgICBhdXRvIGFscGhhVGFibGUgPSBjb21wdXRlTG9va3Vw
VGFibGUobV9lZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKKworICAgIGZvciAodW5zaWduZWQgcGl4
ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0
ICs9IDQpIHsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gICAgID0gcmVkVGFibGVbZGF0YVtw
aXhlbE9mZnNldF1dOworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMV0gPSBncmVlblRhYmxl
W2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAyXSA9
IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOworICAgICAgICBkYXRhW3BpeGVsT2Zm
c2V0ICsgM10gPSBhbHBoYVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAzXV07CisgICAgfQorfQor
Citib29sIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisgICAgCisgICAgYXV0byBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZHJhd2luZ1Jl
Y3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIsIGRyYXdpbmdSZWN0KTsKKworICAgIGFwcGx5UGxhdGZvcm0oKmRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25l
bnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlMzIxYzcxOTNiOWNhZDQ1
NzIxNDYwYzdlYjQzOGUwYjcwMDQyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyOworc3RydWN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb247CisKK2NsYXNzIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFw
cGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJh
bnNmZXI+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
Q29tcG9uZW50VHJhbnNmZXI+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHVzaW5nIExvb2t1cFRhYmxl
ID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OworCisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUlk
ZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRl
RGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0
ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7CisKKyAgICBzdGF0aWMgTG9va3VwVGFibGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKworICAgIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhl
bEJ1ZmZlciYpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41NGQ1OTk3OWRhOGFiMjRiYmEyMDkzMDMzNjNjMDI3M2U0NmY1Yzk4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiRkVDb21wb3NpdGUu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1aW50OF90IEZFQ29tcG9zaXRlU29mdHdhcmVBcHBs
aWVyOjpjbGFtcEJ5dGUoaW50IGMpCit7CisgICAgdWludDhfdCBidWZmW10gPSB7IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KGMpLCAyNTUsIDAgfTsKKyAgICB1bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihjKTsKKyAgICByZXR1cm4gYnVmZlshISh1YyAmIH4weGZmKSArICEhKHVjICYg
fih+MHUgPj4gMSkpXTsKK30KKwordGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgoraW5saW5lIHZv
aWQgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVu
c2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhl
bEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sK
KyAgICBmbG9hdCBzY2FsZWRLMTsKKyAgICBmbG9hdCBzY2FsZWRLNDsKKyAgICBpZiAoYjEpCisg
ICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7CisgICAgaWYgKGI0KQorICAgICAgICBzY2Fs
ZWRLNCA9IGs0ICogMjU1LjBmOworCisgICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAw
KSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOworICAgICAgICB1bnNpZ25l
ZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOworICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkx
ICsgazMgKiBpMjsKKyAgICAgICAgaWYgKGIxKQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxl
ZEsxICogaTEgKiBpMjsKKyAgICAgICAgaWYgKGI0KQorICAgICAgICAgICAgcmVzdWx0ICs9IHNj
YWxlZEs0OworCisgICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOworICAg
ICAgICArK3NvdXJjZTsKKyAgICAgICAgKytkZXN0aW5hdGlvbjsKKyAgICB9Cit9CisKKy8vIGNv
bXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwor
Ly8gaXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRp
bWl6YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgordGVtcGxhdGUgPGludCBiMSwg
aW50IGI0PgoraW5saW5lIHZvaWQgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQg
Y2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQg
azIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCBzY2FsZWRLMTsKKyAgICBmbG9h
dCBzY2FsZWRLNDsKKyAgICBpZiAoYjEpCisgICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7
CisgICAgaWYgKGI0KQorICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOworCisgICAgd2hp
bGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaTEg
PSAqc291cmNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOworICAg
ICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKKyAgICAgICAgaWYgKGIxKQor
ICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKKyAgICAgICAgaWYgKGI0
KQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OworCisgICAgICAgICpkZXN0aW5hdGlv
biA9IHJlc3VsdDsKKyAgICAgICAgKytzb3VyY2U7CisgICAgICAgICsrZGVzdGluYXRpb247Cisg
ICAgfQorfQorCisjaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKK2lubGluZSB2b2lkIEZF
Q29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtQXJpdGhtZXRpYyh1bnNpZ25l
ZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJh
eUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAg
ZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0ZDo6bWF4KDAuMGYsIGsy
KSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OworICAgIGZsb2F0IGxvd2VyTGltaXQgPSBzdGQ6
Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6Om1pbigwLjBmLCBrMykg
KyBrNDsKKyAgICBpZiAoKGs0ID49IDAuMGYgJiYgazQgPD0gMS4wZikgJiYgKHVwcGVyTGltaXQg
Pj0gMC4wZiAmJiB1cHBlckxpbWl0IDw9IDEuMGYpICYmIChsb3dlckxpbWl0ID49IDAuMGYgJiYg
bG93ZXJMaW1pdCA8PSAxLjBmKSkgeworICAgICAgICBpZiAoazQpIHsKKyAgICAgICAgICAgIGlm
IChrMSkKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwx
LCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBr
NCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQ
aXhlbHNVbmNsYW1wZWQ8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0
aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGsx
KQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDA+
KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVs
c1VuY2xhbXBlZDwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChrNCkgeworICAgICAgICBpZiAoazEpCisgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsczwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBr
MiwgazMsIGs0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoazEpCisgICAgICAgICAgICBj
b21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFy
cmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNv
bXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJy
YXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICB9Cit9CisjZW5kaWYKKworYm9vbCBGRUNv
bXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlBcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4s
IEZpbHRlckVmZmVjdCogaW4yKQoreworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9
IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5y
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0
LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFJlY3QgZWZmZWN0QkRyYXdp
bmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgaW4yLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CisKKyAgICBhdXRvJiBz
b3VyY2VQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisK
KyAgICBpbnQgbGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBBU1NFUlQo
bGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4oZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgp
KSk7CisgICAgYXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMoc291cmNlUGl4ZWxBcnJheS5kYXRhKCks
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIGxlbmd0aCwgbV9lZmZlY3QuazEoKSwgbV9l
ZmZlY3QuazIoKSwgbV9lZmZlY3QuazMoKSwgbV9lZmZlY3QuazQoKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5Tm9uQXJpdGht
ZXRpYyhGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMikKK3sKKyAgICBhdXRvIHJl
c3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3Vs
dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0g
aW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlcjIgPSBpbjItPmlt
YWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBmaWx0ZXJDb250ZXh0ID0gcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIHN3aXRjaCAobV9lZmZlY3Qub3BlcmF0aW9uKCkp
IHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKKyAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5k
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogeworICAgICAg
ICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KKyAgICAgICAgSW50
UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICAgICAg
ZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAg
ICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkpOworICAgICAgICBpZiAoZGVzdGluYXRpb25SZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBJbnRSZWN0IGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGlu
YXRpb25SZWN0IC0gbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOworICAg
ICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKS5sb2NhdGlvbigpOworICAgICAgICBJbnRSZWN0IHNvdXJjZTJSZWN0ID0gZGVz
dGluYXRpb25SZWN0IC0gaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisgICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIEZsb2F0UmVj
dChhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCksIEZsb2F0UmVjdChzb3VyY2UyUmVjdCkpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEZsb2F0UmVj
dChhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCksIEZsb2F0UmVjdChzb3VyY2VSZWN0KSwgeyBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlSW4gfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXIyLT5s
b2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5k
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0
LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsg
fSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJj
ZUF0b3ApOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
WE9SOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIy
LCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3Bl
cmF0b3I6OlhPUik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgor
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2Vm
ZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1f
ZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
LCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6
OlBsdXNMaWdodGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisgICAgRmlsdGVyRWZmZWN0KiBp
bjIgPSBpbnB1dEVmZmVjdHNbMV0uZ2V0KCk7CisKKyAgICBpZiAobV9lZmZlY3Qub3BlcmF0aW9u
KCkgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICAgICAgcmV0dXJuIGFw
cGx5QXJpdGhtZXRpYyhpbiwgaW4yKTsKKyAgICByZXR1cm4gYXBwbHlOb25Bcml0aG1ldGljKGlu
LCBpbjIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29m
dHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQ2MmE4
ODA4NTM2MWY5ODQ2ZDA4ZjIzZWUwOGIxZGU0ODRjZjMzNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3Np
dGVTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVDb21wb3NpdGU7CisKK2NsYXNzIEZFQ29t
cG9zaXRlU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxGRUNvbXBvc2l0ZT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8RkVDb21wb3NpdGU+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyB1aW50OF90IGNs
YW1wQnl0ZShpbnQpOworCisgICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgorICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3Vy
Y2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxv
YXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOworCisgICAgdGVtcGxhdGUgPGlu
dCBiMSwgaW50IGI0PgorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1Bp
eGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3Rp
bmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBr
MywgZmxvYXQgazQpOworCisgICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5UGxhdGZvcm1Bcml0
aG1ldGljKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24s
IGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCk7CisKKyAgICBib29sIGFwcGx5QXJpdGhtZXRpYyhGaWx0ZXJFZmZlY3QqIGluLCBGaWx0
ZXJFZmZlY3QqIGluMik7CisgICAgYm9vbCBhcHBseU5vbkFyaXRobWV0aWMoRmlsdGVyRWZmZWN0
KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODkwMGVmNGRlYzYwNmU5OTc1NThjNTUzYzgyZGQ1
ZDM2YTg1MWNjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5j
cHAKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNs
dWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNpbmNs
dWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLyoKKyAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICBDb252b2x2ZU1hdHJpeCBp
bXBsZW1lbnRhdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93aW5nIHdheToKKwor
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAgICAgICAgQSAgICAgICAg
ICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgIHwgICAgICAgICAg
ICAgfCAgIHwKKyAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8CisgICAgICB8ICAgfCAgICAg
ICAgICAgICB8ICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAg
ICAgICAgRSAgICAgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBX
aGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZhbHVlcworICAgY2Fu
IGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0aGUgcmVjdGFuZ2xl
LgorCisgICBFeGFtcGxlOgorICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEwLCBoZWlnaHQ6IDEw
CisKKyAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDogMywgaGVpZ2h0IDQK
KyAgICAgIFRhcmdldDogeDoxLCB5OjMKKworICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hv
d3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6CisKKyAgICAgICAgLi4uCisg
ICAgICAgIC4uLgorICAgICAgICAuLi4KKyAgICAgICAgLlguCisKKyAgIFRoZSByZWdpb25zIGlu
IHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKKyAgICAgIE5vdGU6ICh4MSwgeTEpIHRvcC1s
ZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgorICAgICAgTm90ZTog
cm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lvbgorICAgICAgICAg
ICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwgeDIgYW5kIHkxIDw9
IHkgPCB5MgorCisgICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4MjogMTAsIHkyOiAzCisg
ICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCisgICAgICBSZWdpb24g
QzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCisgICAgICBSZWdpb24gRDogeDE6IDksIHkx
OiAzLCB4MjogMTAsIHkyOiAxMAorICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5MTogMTAsIHgyOiAx
MCwgeTI6IDEwIChlbXB0eSByZWdpb24pCisKKyAgIFNpbmNlIHJlZ2lvbiBDIChvZnRlbikgY29u
dGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAorICAgYSBmYXN0IGFsZ29y
aXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0SW50ZXJpb3JQaXhl
bHMuCisgICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxzIGlzIHVzZWQsIHdo
aWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCisgICB0byBoYW5kbGUgcGl4ZWxzIG91dHNpZGUgb2Yg
dGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgorICAga2VybmVsIG1hdHJpeCBp
cyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1bGF0ZWQgYnkgdGhp
cworICAgZnVuY3Rpb24uCisKKyAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5jdGlvbnMgaGF2ZSBs
b3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKKyAgIGNvbW1vbiBhIHRlbXBsYXRl
IGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFzIHdlbGwsCisgICBh
bmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgorKi8KKworaW5saW5l
IHVpbnQ4X3QgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFsdWUo
ZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXgpCit7CisgICAgaWYgKGNoYW5uZWwgPD0gMCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGNoYW5uZWwgPj0gbWF4KQorICAgICAgICByZXR1cm4g
bWF4OworICAgIHJldHVybiBjaGFubmVsOworfQorCitpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50
JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBw
cmVzZXJ2ZUFscGhhVmFsdWVzKQoreworICAgIHVpbnQ4X3QgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFs
cGhhVmFsdWVzID8gMjU1IDogY2xhbXBSR0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJp
YXMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBkZXN0UGl4ZWxz
LnNldChwaXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywg
bWF4QWxwaGEpKTsKKworICAgIGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7CisgICAgICAgIGRl
c3RQaXhlbHMuc2V0KHBpeGVsLCBzb3VyY2VQaXhlbHMuaXRlbShwaXhlbCkpOworICAgICAgICAr
K3BpeGVsOworICAgIH0gZWxzZQorICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBtYXhB
bHBoYSk7Cit9CisKK2lubGluZSBpbnQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6
Z2V0UGl4ZWxWYWx1ZShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGlu
dCB5KQoreworICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49
IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCisgICAgICAgIHJldHVybiAoeSAqIHBhaW50
aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7CisKKyAgICBzd2l0Y2ggKHBhaW50aW5nRGF0YS5lZGdl
TW9kZSkgeworICAgIGRlZmF1bHQ6IC8vIEVkZ2VNb2RlVHlwZTo6Tm9uZQorICAgICAgICByZXR1
cm4gLTE7CisgICAgY2FzZSBFZGdlTW9kZVR5cGU6OkR1cGxpY2F0ZToKKyAgICAgICAgaWYgKHgg
PCAwKQorICAgICAgICAgICAgeCA9IDA7CisgICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdE
YXRhLndpZHRoKQorICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7CisgICAg
ICAgIGlmICh5IDwgMCkKKyAgICAgICAgICAgIHkgPSAwOworICAgICAgICBlbHNlIGlmICh5ID49
IHBhaW50aW5nRGF0YS5oZWlnaHQpCisgICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdo
dCAtIDE7CisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7
CisgICAgY2FzZSBFZGdlTW9kZVR5cGU6OldyYXA6CisgICAgICAgIHdoaWxlICh4IDwgMCkKKyAg
ICAgICAgICAgIHggKz0gcGFpbnRpbmdEYXRhLndpZHRoOworICAgICAgICB4ICU9IHBhaW50aW5n
RGF0YS53aWR0aDsKKyAgICAgICAgd2hpbGUgKHkgPCAwKQorICAgICAgICAgICAgeSArPSBwYWlu
dGluZ0RhdGEuaGVpZ2h0OworICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7CisgICAg
ICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7CisgICAgfQorfQor
CisvLyBPbmx5IGZvciByZWdpb24gQworaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlQXBwbGllcjo6c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKK3sK
KyAgICAvLyBlZGdlIG1vZGUgZG9lcyBub3QgYWZmZWN0IHRoZXNlIHBpeGVscworICAgIGludCBw
aXhlbCA9IChwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0
aCArIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpKSAqIDQ7CisgICAgaW50IGtlcm5lbElu
Y3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKKyAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0
YS5rZXJuZWxTaXplLndpZHRoKCkgLSAxKSAqIDQ7CisgICAgLy8gQ29udGFpbnMgdGhlIHN1bSBv
ZiByZ2IoYSkgY29tcG9uZW50cworICAgIGZsb2F0IHRvdGFsc1s0XTsKKworICAgIC8vIGRpdmlz
b3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcwor
ICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7CisKKyAgICAvLyBTa2lwIHRoZSBmaXJz
dCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKKyAgICBwaXhlbCArPSAoY2xpcEJvdHRvbSAt
IHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOworICAgIGludCBzdGFy
dEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJp
Z2h0ICsgMSkgKiA0KTsKKworICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlTdGFydDsg
LS15KSB7CisgICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7
CisgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4
LnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBp
eGVsOworICAgICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lk
dGgoKTsKKworICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1sx
XSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMl0gPSAwOworICAgICAgICAgICAgdG90YWxzWzNd
ID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKKyAgICAgICAg
ICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShr
ZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0
YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAg
IHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0
YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBp
eGVsKyspKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhh
KQorICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1h
dHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAgICsra2VybmVsUGl4
ZWw7CisgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAo
IS0td2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2VybmVsSW5j
cmVhc2U7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNp
emUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWlu
dGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlz
b3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAg
ICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgcGl4ZWwg
Kz0geEluY3JlYXNlOworICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJbmNyZWFzZTsKKyAg
ICB9Cit9CisKKy8vIEZvciBvdGhlciByZWdpb25zIHRoYW4gQworaW5saW5lIHZvaWQgRkVDb252
b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKK3sKKyAgICBpbnQg
cGl4ZWwgPSAoeTEgKiBwYWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OworICAgIGludCBoZWln
aHQgPSB5MiAtIHkxOworICAgIGludCB3aWR0aCA9IHgyIC0geDE7CisgICAgaW50IGJlZ2luS2Vy
bmVsUGl4ZWxYID0geDEgLSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKKyAgICBpbnQg
c3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKKyAgICBpbnQgc3RhcnRLZXJu
ZWxQaXhlbFkgPSB5MSAtIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpOworICAgIGludCB4
SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLndpZHRoIC0gd2lkdGgpICogNDsKKyAgICAvLyBDb250
YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzRdOwor
CisgICAgLy8gcGFpbnRpbmdEYXRhLmRpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcworICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNv
cik7CisKKyAgICBmb3IgKGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7CisgICAgICAgIGZv
ciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkgeworICAgICAgICAgICAgaW50IGtlcm5lbFZh
bHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOworICAgICAgICAgICAg
aW50IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOworICAgICAgICAgICAgaW50IGtl
cm5lbFBpeGVsWSA9IHN0YXJ0S2VybmVsUGl4ZWxZOworICAgICAgICAgICAgaW50IHdpZHRoID0g
cGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKworICAgICAgICAgICAgdG90YWxzWzBd
ID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMl0g
PSAwOworICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKGtl
cm5lbFZhbHVlID49IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRleCA9IGdldFBp
eGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVsWSk7CisgICAg
ICAgICAgICAgICAgaWYgKHBpeGVsSW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgICAgICB0
b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0
aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4
KSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAxKSk7CisgICAgICAgICAgICAgICAgICAgIHRv
dGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRp
Y19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXgg
KyAyKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghcGFpbnRpbmdE
YXRhLnByZXNlcnZlQWxwaGEgJiYgcGl4ZWxJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgICAg
ICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBz
dGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbElu
ZGV4ICsgMykpOworICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOworICAgICAgICAgICAg
ICAgIC0ta2VybmVsVmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOworICAgICAg
ICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGgg
PSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90
YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0
YS5wcmVzZXJ2ZUFscGhhKTsKKyAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7CisgICAg
ICAgIH0KKyAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOworICAgICAgICBzdGFydEtlcm5lbFBp
eGVsWCA9IGJlZ2luS2VybmVsUGl4ZWxYOworICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxZOwor
ICAgIH0KK30KKwordm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBs
YXRmb3JtKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAoreworICAgIC8vIERyYXdp
bmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKKyAgICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRpbmdEYXRh
LndpZHRoIC0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKyAgICBpbnQgY2xpcEJv
dHRvbSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS5oZWln
aHQoKTsKKworICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7CisgICAg
ICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAorICAgICAgICBz
ZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFp
bnRpbmdEYXRhLmhlaWdodCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBp
cmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworCisgICAgaWYgKGludCBpdGVyYXRp
b25zID0gKHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQpIC8gbWluaW1h
bFJlY3REaW1lbnNpb24pIHsKKyAgICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVy
YXRpb25zOworICAgICAgICBpbnQgY2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0g
MSkgLyBzdHJpZGU7CisKKyAgICAgICAgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoY2h1bmtD
b3VudCwgWyZdKHNpemVfdCBpbmRleCkgeworICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJp
ZGUgKiBpbmRleCk7CisgICAgICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRl
ICogKGluZGV4ICsgMSksIGNsaXBCb3R0b20pOworCisgICAgICAgICAgICBzZXRJbnRlcmlvclBp
eGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsK
KyAgICAgICAgfSk7CisgICAgfSBlbHNlCisgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50
aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCAwLCBjbGlwQm90dG9tKTsKKworICAgIGNs
aXBSaWdodCArPSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSArIDE7CisgICAgY2xpcEJv
dHRvbSArPSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSArIDE7CisKKyAgICBpZiAocGFp
bnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkgPiAwKQorICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLnRhcmdl
dE9mZnNldC55KCkpOworICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRpbmdEYXRhLmhlaWdodCkK
KyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWlu
dGluZ0RhdGEud2lkdGgsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIGlmIChwYWludGluZ0Rh
dGEudGFyZ2V0T2Zmc2V0LngoKSA+IDApCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5n
RGF0YSwgMCwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS50YXJn
ZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKKyAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRpbmdE
YXRhLndpZHRoKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdo
dCwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS53aWR0aCwgY2xp
cEJvdHRvbSk7Cit9CisKK2Jvb2wgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBw
bHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMp
Cit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKworICAg
IGF1dG8gYWxwaGFGb3JtYXQgPSBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCkgPyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgOiBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0
LnBpeGVsQnVmZmVyUmVzdWx0KGFscGhhRm9ybWF0KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZWZmZWN0RHJhd2lu
Z1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0
UGl4ZWxCdWZmZXJSZXN1bHQoYWxwaGFGb3JtYXQsIGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVj
dC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3Vy
Y2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICAKKyAgICBhdXRvIHBhaW50U2l6
ZSA9IG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworCisgICAgUGFpbnRpbmdE
YXRhIHBhaW50aW5nRGF0YSA9IHsKKyAgICAgICAgc291cmNlUGl4ZWxBcnJheSwKKyAgICAgICAg
ZGVzdGluYXRpb25QaXhlbEFycmF5LAorICAgICAgICBwYWludFNpemUud2lkdGgoKSwKKyAgICAg
ICAgcGFpbnRTaXplLmhlaWdodCgpLAorICAgICAgICBtX2VmZmVjdC5rZXJuZWxTaXplKCksCisg
ICAgICAgIG1fZWZmZWN0LmRpdmlzb3IoKSwKKyAgICAgICAgbV9lZmZlY3QuYmlhcygpICogMjU1
LAorICAgICAgICBtX2VmZmVjdC50YXJnZXRPZmZzZXQoKSwKKyAgICAgICAgbV9lZmZlY3QuZWRn
ZU1vZGUoKSwKKyAgICAgICAgbV9lZmZlY3QucHJlc2VydmVBbHBoYSgpLAorICAgICAgICBGRUNv
bG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKG1fZWZmZWN0Lmtlcm5lbCgpKQorICAgIH07CisK
KyAgICBhcHBseVBsYXRmb3JtKHBhaW50aW5nRGF0YSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBw
bGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRkNmMwOGRh
NzljMTc3Y2FkODcxN2FmOGM5ZDIyMjljMmRlZmU4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1h
dHJpeFNvZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRUNv
bnZvbHZlTWF0cml4OworZW51bSBjbGFzcyBFZGdlTW9kZVR5cGU7CisKK2NsYXNzIEZFQ29udm9s
dmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBs
aWVyPEZFQ29udm9sdmVNYXRyaXg+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29u
Y3JldGVBcHBsaWVyPEZFQ29udm9sdmVNYXRyaXg+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFz
ZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0cnVj
dCBQYWludGluZ0RhdGEgeworICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4
ZWxBcnJheTsKKyAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7CisgICAg
ICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKworICAgICAgICBJbnRTaXplIGtl
cm5lbFNpemU7CisgICAgICAgIGZsb2F0IGRpdmlzb3I7CisgICAgICAgIGZsb2F0IGJpYXM7Cisg
ICAgICAgIEludFBvaW50IHRhcmdldE9mZnNldDsKKyAgICAgICAgRWRnZU1vZGVUeXBlIGVkZ2VN
b2RlOworICAgICAgICBib29sIHByZXNlcnZlQWxwaGE7CisgICAgICAgIFZlY3RvcjxmbG9hdD4g
a2VybmVsTWF0cml4OworICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2xhbXBS
R0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXggPSAyNTUpOworICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwg
ZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFs
cGhhVmFsdWVzKTsKKworICAgIHN0YXRpYyBpbmxpbmUgaW50IGdldFBpeGVsVmFsdWUoY29uc3Qg
UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBz
ZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJv
dHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRP
dXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIp
OworCisgICAgdm9pZCBhcHBseVBsYXRmb3JtKFBhaW50aW5nRGF0YSYpIGNvbnN0OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBw
bGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYjNj
MjFjM2Y2NDIzZGQ3MmE3MjMzMDdiZDk0NDQzODk1MzBhNjk3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3Bs
YWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiRkVEaXNwbGFjZW1l
bnRNYXAuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJl
QXBwbGllcihGRURpc3BsYWNlbWVudE1hcCYgZWZmZWN0KQorICAgIDogQmFzZShlZmZlY3QpCit7
CisgICAgQVNTRVJUKG1fZWZmZWN0LnhDaGFubmVsU2VsZWN0b3IoKSAhPSBDSEFOTkVMX1VOS05P
V04pOworICAgIEFTU0VSVChtX2VmZmVjdC55Q2hhbm5lbFNlbGVjdG9yKCkgIT0gQ0hBTk5FTF9V
TktOT1dOKTsKK30KKworaW50IEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp4Q2hh
bm5lbEluZGV4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lZmZlY3QueENoYW5uZWxTZWxlY3Rv
cigpIC0gMTsKK30KKworaW50IEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp5Q2hh
bm5lbEluZGV4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lZmZlY3QueUNoYW5uZWxTZWxlY3Rv
cigpIC0gMTsKK30KKworYm9vbCBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6YXBw
bHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7
CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNbMV0uZ2V0KCk7CisKKyAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3VsdChB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAg
IGF1dG8gZWZmZWN0QURyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIGlucHV0UGl4
ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0KTsKKworICAgIGF1dG8gZWZmZWN0
QkRyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2lu
ZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9u
LXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgorICAgIGF1dG8gZGlzcGxhY2VtZW50UGl4ZWxC
dWZmZXIgPSBpbjItPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICAKKyAgICBpZiAoIWlu
cHV0UGl4ZWxCdWZmZXIgfHwgIWRpc3BsYWNlbWVudFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvJiBpbnB1dEltYWdlID0gaW5wdXRQaXhlbEJ1ZmZlci0+ZGF0
YSgpOworICAgIGF1dG8mIGRpc3BsYWNlbWVudEltYWdlID0gZGlzcGxhY2VtZW50UGl4ZWxCdWZm
ZXItPmRhdGEoKTsKKyAgICBBU1NFUlQoaW5wdXRJbWFnZS5sZW5ndGgoKSA9PSBkaXNwbGFjZW1l
bnRJbWFnZS5sZW5ndGgoKSk7CisKKyAgICBJbnRTaXplIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworCisgICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVy
LnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5zY2FsZSgpLCBtX2VmZmVjdC5zY2FsZSgp
IH0pOworICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1NS4wOwor
ICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsKKyAgICBm
bG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAqIDAuNTsKKyAgICBmbG9h
dCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAwLjU7CisgICAgCisgICAg
aW50IGRpc3BsYWNlbWVudENoYW5uZWxYID0geENoYW5uZWxJbmRleCgpOworICAgIGludCBkaXNw
bGFjZW1lbnRDaGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKKworICAgIGludCByb3dCeXRlcyA9
IHBhaW50U2l6ZS53aWR0aCgpICogNDsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFpbnRT
aXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCA9IHkgKiBy
b3dCeXRlczsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0aCgp
OyArK3gpIHsKKyAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zm
c2V0ICsgeCAqIDQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0
YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS5pdGVtKGRl
c3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsK
KyAgICAgICAgICAgIGludCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xv
clkgKiBkaXNwbGFjZW1lbnRJbWFnZS5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1l
bnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKKworICAgICAgICAgICAgdW5zaWduZWQqIGRl
c3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRp
b25QaXhlbEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOworICAgICAgICAgICAgaWYg
KHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3Jj
WSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25Q
aXhlbFB0ciA9IDA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQqPihpbnB1dEltYWdlLmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ks
IHJvd0J5dGVzKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBw
bGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllNmNhNmVh
NWM1NDE4MTJlMDJlMDkzNDNjODk3YzhlNzNiYTY3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2Vt
ZW50TWFwU29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVEaXNwbGFjZW1lbnRNYXA7CisKK2NsYXNzIEZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNy
ZXRlQXBwbGllcjxGRURpc3BsYWNlbWVudE1hcD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJF
ZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEaXNwbGFjZW1lbnRNYXA+OworCitwdWJsaWM6CisgICAg
RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIoRkVEaXNwbGFjZW1lbnRNYXAmKTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyBpbmxpbmUgdW5z
aWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQg
cm93Qnl0ZXMpCisgICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0g
NDsKKyAgICAgICAgcmV0dXJuIHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOworICAg
IH0KKworICAgIGludCB4Q2hhbm5lbEluZGV4KCkgY29uc3Q7CisgICAgaW50IHlDaGFubmVsSW5k
ZXgoKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hh
ZG93U29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMTdhNjFiNzMzOTAyMzMxMmRiYjZmZmUwNWQ1NDQ4NDk4YzI4MTQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRHJvcFNoYWRvd1Nv
ZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCisjaW5jbHVkZSAi
RmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIlNoYWRvd0JsdXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNb
MF0uZ2V0KCk7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBGbG9hdFNpemUgYmx1clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2Fs
ZSh7IG1fZWZmZWN0LnN0ZERldmlhdGlvblgoKSwgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWSgpIH0p
OworICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1f
ZWZmZWN0LmR4KCksIG1fZWZmZWN0LmR5KCkgfSk7CisKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Z2lvbiA9IG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5n
UmVnaW9uKTsKKyAgICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisKKyAg
ICBhdXRvIHNvdXJjZUltYWdlID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFz
b3VyY2VJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0
JiByZXN1bHRDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICByZXN1bHRDb250
ZXh0LnNldEFscGhhKG1fZWZmZWN0LnNoYWRvd09wYWNpdHkoKSk7CisgICAgcmVzdWx0Q29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldCk7
CisgICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYSgxKTsKKworICAgIFNoYWRvd0JsdXIgY29udGV4
dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fZWZmZWN0LnNoYWRvd0NvbG9yKCkpOworCisg
ICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX2VmZmVjdC5yZXN1bHRDb2xvclNwYWNl
KCkgfTsKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnRy
dW5jYXRlZExvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFn
ZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5
ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdl
KHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLCA0ICogcGl4ZWxC
dWZmZXItPnNpemUoKS53aWR0aCgpKTsKKyAgICAKKyAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxC
dWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKKworICAgIHJlc3VsdENvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CisgICAgcmVz
dWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2VmZmVjdC5hYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fZWZmZWN0LnNoYWRvd0NvbG9yKCkpOworICAgIHJl
c3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0
aW5hdGlvbk92ZXIpOworCisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZm
ZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5nUmVnaW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVE
cm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDVmNmMwZjNlZTc2MTc4NjJi
NTYxZWNmMmM2NTY0OTE0YTg2ZDU4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVB
cHBsaWVyLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBGRURyb3BTaGFkb3c7CisKK2NsYXNzIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBw
bGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEcm9wU2hhZG93PiB7
CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRURyb3BTaGFk
b3c+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHko
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92
ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdh
cmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODAzZTBlMmJm
MWMzMWI1ZGY4NDE2M2E3NGI0YzNiNmY0ZGFjMDExYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3
YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1
ZGUgIkZFRmxvb2QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVGbG9vZFNvZnR3
YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9y
JikKK3sKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIGNvbG9yID0gbV9lZmZlY3QuZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5KG1fZWZmZWN0LmZsb29kT3BhY2l0eSgpKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgp
LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRS
ZWN0KCkuc2l6ZSgpKSwgY29sb3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmVB
cHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTUzNTcxMjNmMzAwYjhkYmFjMmM5YzE4ZTg0MDhhOTNmNjU4
MzgxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0QXBwbGllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFRmxvb2Q7CisK
K2NsYXNzIEZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyPEZFRmxvb2Q+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyPEZFRmxvb2Q+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBs
aWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41NjIxZWI1ZGI2YjFlZjBhYzhlMzZkNzhjNDQyYzM0ODViZTdj
NmE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAs
MCArMSw0NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSwgUy5MLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRUdhdXNzaWFu
Qmx1ci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBpeGVsQnVm
ZmVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRF
KQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxl
bEpvYnMuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSB2b2lkIEZF
R2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJh
dGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkK
K3sKKyAgICAvLyBDaGVjayBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2Zl
R2F1c3NpYW5CbHVyRWxlbWVudCBmb3IgZGV0YWlscy4KKyAgICBzd2l0Y2ggKGJsdXJJdGVyYXRp
b24pIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7CisgICAgICAg
ICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyIC0gMTsKKyAgICAgICAgICAgIGRlbHRhUmlnaHQg
PSByYWRpdXMgLSBkZWx0YUxlZnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWx0
YUxlZnQgPSByYWRpdXMgLyAyOworICAgICAgICAgICAgZGVsdGFSaWdodCA9IHJhZGl1cyAtIGRl
bHRhTGVmdDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAg
IGlmICghKHJhZGl1cyAlIDIpKSB7CisgICAgICAgICAgICBkZWx0YUxlZnQrKzsKKyAgICAgICAg
ICAgIGRlbHRhUmlnaHQtLTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6
CisgICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7CisgICAgICAgICAgICBkZWx0YVJpZ2h0Kys7
CisgICAgICAgICAgICByYWRpdXMrKzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gb25seSBvcGVyYXRlcyBvbiBBbHBoYSBjaGFubmVsLgor
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9u
bHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdo
dCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBl
ZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKK3sKKyAgICBjb25zdCB1aW50
OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7CisgICAgdWludDhfdCogZHN0RGF0
YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOworICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQgaXM6IFJH
QkEsIHplcm8taW5kZXggYmFzZWQuCisgICAgY29uc3QgaW50IGNoYW5uZWwgPSAzOworCisgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgeworICAgICAgICBpbnQgbGlu
ZSA9IHkgKiBzdHJpZGVMaW5lOworICAgICAgICBpbnQgc3VtID0gMDsKKworICAgICAgICAvLyBG
aWxsIHRoZSBrZXJuZWwuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6
ZTsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlk
ZTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7
CisgICAgICAgICAgICBzdW0gKz0gc3JjUHRyW2NoYW5uZWxdOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gQmx1cnJpbmcuCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7
ICsreCkgeworICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHgg
KiBzdHJpZGUgKyBjaGFubmVsOworICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0
YSArIHBpeGVsQnl0ZU9mZnNldDsKKyAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1
aW50OF90PihzdW0gLyBkeCk7CisKKyAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KKyAgICAg
ICAgICAgIGlmICh4ID49IGR4TGVmdCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRP
ZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7CisgICAgICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgc3VtIC09ICpzcmNQdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg
cmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOworICAgICAg
ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsK
KyAgICAgICAgICAgICAgICBzdW0gKz0gKnNyY1B0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKworaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6
OmJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xh
bXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4
UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBl
ZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorewor
ICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0V2lk
dGgpOworICAgIGlmIChhbHBoYUltYWdlKQorICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhhT25s
eShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJp
ZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXpl
KTsKKworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsK
KyAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICAvLyBD
b25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1h
cmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQorICAgIC8vIFAgPSB3
aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0
SGVpZ2h0OyArK3kpIHsKKyAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKKyAgICAg
ICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOworCisgICAgICAg
IGlmIChlZGdlTW9kZSA9PSBFZGdlTW9kZVR5cGU6Ok5vbmUpIHsKKyAgICAgICAgICAgIC8vIEZp
bGwgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVs
U2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkg
KiBzdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0
YSArIG9mZnNldDsKKyAgICAgICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIrKzsKKyAgICAgICAg
ICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQ
dHIrKzsKKyAgICAgICAgICAgICAgICBzdW1BICs9ICpzcmNQdHI7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIEJsdXJyaW5nLgorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBlZmZlY3RXaWR0aDsgKyt4KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRl
T2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgdWludDhfdCogZHN0
UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKKworICAgICAgICAgICAgICAgICpkc3RQ
dHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7CisgICAgICAgICAgICAgICAg
KmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKKyAgICAgICAgICAg
ICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOworICAgICAg
ICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOworCisg
ICAgICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgorICAgICAgICAgICAgICAgIGlmICh4ID49
IGR4TGVmdCkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4
ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOworICAgICAgICAgICAgICAgICAgICBjb25z
dCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKKyAgICAgICAgICAgICAg
ICAgICAgc3VtUiAtPSBzcmNQdHJbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3Jj
UHRyWzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKKyAgICAgICAg
ICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0
ICogc3RyaWRlOworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBz
cmNEYXRhICsgcmlnaHRPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRy
WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKKyAgICAgICAgICAg
ICAgICAgICAgc3VtQiArPSBzcmNQdHJbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0g
c3JjUHRyWzNdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgaGVy
ZS4KKyAgICAgICAgICAgIC8vIEdldCBlZGdlIHZhbHVlcyBmb3IgZWRnZU1vZGUgJ2R1cGxpY2F0
ZScuCisgICAgICAgICAgICBjb25zdCB1aW50OF90KiBlZGdlVmFsdWVMZWZ0ID0gc3JjRGF0YSAr
IGxpbmU7CisgICAgICAgICAgICBjb25zdCB1aW50OF90KiBlZGdlVmFsdWVSaWdodCAgPSBzcmNE
YXRhICsgKGxpbmUgKyAoZWZmZWN0V2lkdGggLSAxKSAqIHN0cmlkZSk7CisKKyAgICAgICAgICAg
IC8vIEZpbGwgdGhlIGtlcm5lbC4KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBkeExlZnQgKiAt
MTsgaSA8IGR4UmlnaHQ7ICsraSkgeworICAgICAgICAgICAgICAgIC8vIElzIHRoaXMgcmlnaHQg
Zm9yIG5lZ2F0aXZlIHZhbHVlcyBvZiAnaSc/CisgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zm
c2V0ID0gbGluZSArIGkgKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCog
c3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKKworICAgICAgICAgICAgICAgIGlmIChpIDwgMCkg
eworICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZUxlZnRbMF07CisgICAgICAg
ICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlTGVmdFsxXTsKKyAgICAgICAgICAgICAgICAg
ICAgc3VtQiArPSBlZGdlVmFsdWVMZWZ0WzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9
IGVkZ2VWYWx1ZUxlZnRbM107CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID49IGVmZmVj
dFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07
CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07CisgICAgICAg
ICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07CisgICAgICAgICAgICAgICAg
ICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAg
ICAgIHN1bUcgKz0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQ
dHIrKzsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQmx1cnJpbmcuCisgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKKyAgICAg
ICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0Owor
CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAv
IGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihz
dW1HIC8gZHgpOworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHN1bUIgLyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHN1bUEgLyBkeCk7CisKKyAgICAgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCisg
ICAgICAgICAgICAgICAgaWYgKHggPCBkeExlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3Vt
UiAtPSBlZGdlVmFsdWVMZWZ0WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HIC09IGVkZ2VW
YWx1ZUxlZnRbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gZWRnZVZhbHVlTGVmdFsy
XTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSAtPSBlZGdlVmFsdWVMZWZ0WzNdOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZz
ZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OworICAgICAg
ICAgICAgICAgICAgICBzdW1SIC09IHNyY1B0clswXTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt
RyAtPSBzcmNQdHJbMV07CisgICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gc3JjUHRyWzJdOwor
ICAgICAgICAgICAgICAgICAgICBzdW1BIC09IHNyY1B0clszXTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoeCArIGR4UmlnaHQgPj0gZWZmZWN0V2lkdGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKKyAgICAgICAgICAg
ICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVSaWdodFsxXTsKKyAgICAgICAgICAgICAgICAgICAg
c3VtQiArPSBlZGdlVmFsdWVSaWdodFsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBl
ZGdlVmFsdWVSaWdodFszXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQg
KiBzdHJpZGU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNy
Y0RhdGEgKyByaWdodE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJb
MF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gc3JjUHRyWzFdOworICAgICAgICAgICAg
ICAgICAgICBzdW1CICs9IHNyY1B0clsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBz
cmNQdHJbM107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1
clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNp
emUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKK3sKKyAg
ICBpZiAoIWlvQnVmZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
ZWZmZWN0V2lkdGggPD0gMCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFdlIG11c3QgYWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgorICAgIGlmIChrZXJuZWxT
aXplICUgMiAhPSAxKQorICAgICAgICBrZXJuZWxTaXplICs9IDE7CisKKyAgICB2SW1hZ2VfQnVm
ZmVyIGVmZmVjdEluQnVmZmVyOworICAgIGVmZmVjdEluQnVmZmVyLmRhdGEgPSBzdGF0aWNfY2Fz
dDx2b2lkKj4oaW9CdWZmZXIuZGF0YSgpKTsKKyAgICBlZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVm
ZmVjdFdpZHRoOworICAgIGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKKyAg
ICBlZmZlY3RJbkJ1ZmZlci5yb3dCeXRlcyA9IHN0cmlkZTsKKworICAgIHZJbWFnZV9CdWZmZXIg
ZWZmZWN0T3V0QnVmZmVyOworICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5k
YXRhKCk7CisgICAgZWZmZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7CisgICAgZWZm
ZWN0T3V0QnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKKyAgICBlZmZlY3RPdXRCdWZmZXIu
cm93Qnl0ZXMgPSBzdHJpZGU7CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1w
b3JhcnkgYnVmZmVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFs
IGZsYWcuIHZJbWFnZSB3aWxsIHJldHVybgorICAgIC8vIHRoZSBzaXplIG5lZWRlZCwgb3IgYW4g
ZXJyb3IgKHdoaWNoIGFyZSBhbGwgbmVnYXRpdmUpLgorICAgIHNpemVfdCB0bXBCdWZmZXJTaXpl
ID0gdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0
QnVmZmVyLCAwLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4
dGVuZCB8IGt2SW1hZ2VHZXRUZW1wQnVmZmVyU2l6ZSk7CisgICAgaWYgKHRtcEJ1ZmZlclNpemUg
PD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdm9pZCogdG1wQnVmZmVyID0gZmFzdE1hbGxv
Yyh0bXBCdWZmZXJTaXplKTsKKyAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0
SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQpOworICAgIHZJbWFnZUJveENvbnZvbHZl
X0FSR0I4ODg4KCZlZmZlY3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAw
LCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7CisgICAg
dkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVm
ZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VF
ZGdlRXh0ZW5kKTsKKyAgICBmYXN0RnJlZSh0bXBCdWZmZXIpOworCisgICAgLy8gVGhlIGZpbmFs
IHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgorICAgIEFTU0VSVChpb0J1ZmZl
ci5sZW5ndGgoKSA9PSB0ZW1wQnVmZmVyLmxlbmd0aCgpKTsKKyAgICBtZW1jcHkoaW9CdWZmZXIu
ZGF0YSgpLCB0ZW1wQnVmZmVyLmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOworfQorI2VuZGlm
CisKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyVW5h
Y2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5
JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVks
IGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICBpbnQgZHhMZWZ0ID0gMDsKKyAgICBpbnQgZHhSaWdo
dCA9IDA7CisgICAgaW50IGR5TGVmdCA9IDA7CisgICAgaW50IGR5UmlnaHQgPSAwOworICAgIAor
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBmcm9tQnVmZmVyID0gJmlvQnVmZmVyOworICAgIFVpbnQ4
Q2xhbXBlZEFycmF5KiB0b0J1ZmZlciA9ICZ0ZW1wQnVmZmVyOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7CisgICAgICAgICAg
ICBrZXJuZWxQb3NpdGlvbihpLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0KTsKKyNpZiBI
QVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkK
KyAgICAgICAgICAgICAgICBib3hCbHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJu
ZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBw
YWludFNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJv
eEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdo
dCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCB0cnVl
LCBlZGdlTW9kZSk7CisjZWxzZQorICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRv
QnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6
ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOwor
I2VuZGlmCisgICAgICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGtlcm5lbFNpemVZKSB7CisgICAgICAgICAgICBrZXJuZWxQ
b3NpdGlvbihpLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCisgICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAg
ICAgICAgICBib3hCbHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwg
ZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXpl
LndpZHRoKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZy
b21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRl
LCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCB0cnVlLCBlZGdlTW9k
ZSk7CisjZWxzZQorICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBr
ZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQo
KSwgcGFpbnRTaXplLndpZHRoKCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisg
ICAgICAgICAgICBzdGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVm
ZmVyLgorICAgIGlmICgmaW9CdWZmZXIgIT0gZnJvbUJ1ZmZlcikgeworICAgICAgICBBU1NFUlQo
aW9CdWZmZXIubGVuZ3RoKCkgPT0gZnJvbUJ1ZmZlci0+bGVuZ3RoKCkpOworICAgICAgICBtZW1j
cHkoaW9CdWZmZXIuZGF0YSgpLCBmcm9tQnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgp
KTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVy
Ojpib3hCbHVyR2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2Vy
bmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSkKK3sKKyAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgp
OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNp
emVZICYmIChlZGdlTW9kZSA9PSBFZGdlTW9kZVR5cGU6Ok5vbmUgfHwgZWRnZU1vZGUgPT0gRWRn
ZU1vZGVUeXBlOjpEdXBsaWNhdGUpKSB7CisgICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1
ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KworICAgIGJveEJsdXJVbmFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJu
ZWxTaXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVk
Z2VNb2RlKTsKK30KKworI2lmICFVU0UoQUNDRUxFUkFURSkKK2lubGluZSB2b2lkIEZFR2F1c3Np
YW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFy
YW1ldGVycykKK3sKKyAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFy
YW1ldGVycy0+aGVpZ2h0KTsKKyAgICBib3hCbHVyR2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhl
bEFycmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6
ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUsIHBhcmFtZXRlcnMtPmlzQWxw
aGFJbWFnZSwgcGFyYW1ldGVycy0+ZWRnZU1vZGUpOworfQorI2VuZGlmCisKK2lubGluZSB2b2lk
IEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2ln
bmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXpl
LCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworI2lmICFVU0Uo
QUNDRUxFUkFURSkKKyAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7Cisg
ICAgaW50IGV4dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41ZjsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgaW50IG1pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBp
cmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIGludCBvcHRpbWFsVGhyZWFk
TnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChtaW5p
bWFsUmVjdERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0ICogcGFpbnRTaXplLndpZHRoKCkpOworCisg
ICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7CisgICAgICAgIFBhcmFsbGVsSm9iczxB
cHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYm94Qmx1cldvcmtlciwgb3B0aW1hbFRocmVh
ZE51bWJlcik7CisKKyAgICAgICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2Jz
KCk7CisgICAgICAgIGlmIChqb2JzID4gMSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpv
YiBpbnRvICJibG9ja0hlaWdodCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0
IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCisgICAgICAgICAgICAvLyBibG9ja0hl
aWdodCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhl
IHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCisgICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tI
ZWlnaHQgPSBwYWludFNpemUuaGVpZ2h0KCkgLyBqb2JzOworICAgICAgICAgICAgY29uc3QgaW50
IGpvYnNXaXRoRXh0cmEgPSBwYWludFNpemUuaGVpZ2h0KCkgJSBqb2JzOworCisgICAgICAgICAg
ICBpbnQgY3VycmVudFkgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwg
am9iczsgam9iKyspIHsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9
IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKKworICAgICAgICAgICAgICAgIGludCBzdGFy
dFkgPSAham9iID8gMCA6IGN1cnJlbnRZIC0gZXh0cmFIZWlnaHQ7CisgICAgICAgICAgICAgICAg
Y3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2Nr
SGVpZ2h0OworICAgICAgICAgICAgICAgIGludCBlbmRZID0gam9iID09IGpvYnMgLSAxID8gY3Vy
cmVudFkgOiBjdXJyZW50WSArIGV4dHJhSGVpZ2h0OworCisgICAgICAgICAgICAgICAgaW50IGJs
b2NrU2l6ZSA9IChlbmRZIC0gc3RhcnRZKSAqIHNjYW5saW5lOworICAgICAgICAgICAgICAgIGlm
ICgham9iKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSAmaW9C
dWZmZXI7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gJnRtcFBp
eGVsQXJyYXk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLmlvUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxp
emVkKGJsb2NrU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5
ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKKyAg
ICAgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEoKSwgaW9C
dWZmZXIuZGF0YSgpICsgc3RhcnRZICogc2NhbmxpbmUsIGJsb2NrU2l6ZSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgcGFyYW1zLndpZHRoID0gcGFpbnRTaXplLndpZHRo
KCk7CisgICAgICAgICAgICAgICAgcGFyYW1zLmhlaWdodCA9IGVuZFkgLSBzdGFydFk7CisgICAg
ICAgICAgICAgICAgcGFyYW1zLmtlcm5lbFNpemVYID0ga2VybmVsU2l6ZVg7CisgICAgICAgICAg
ICAgICAgcGFyYW1zLmtlcm5lbFNpemVZID0ga2VybmVsU2l6ZVk7CisgICAgICAgICAgICAgICAg
cGFyYW1zLmlzQWxwaGFJbWFnZSA9IGlzQWxwaGFJbWFnZTsKKyAgICAgICAgICAgICAgICBwYXJh
bXMuZWRnZU1vZGUgPSBlZGdlTW9kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFy
YWxsZWxKb2JzLmV4ZWN1dGUoKTsKKworICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUg
cGFydHMgb2YgdGhlIGltYWdlLgorICAgICAgICAgICAgY3VycmVudFkgPSAwOworICAgICAgICAg
ICAgZm9yIChpbnQgam9iID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKKyAgICAgICAgICAgICAg
ICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsK
KyAgICAgICAgICAgICAgICBpbnQgc291cmNlT2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBk
ZXN0aW5hdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAg
ICAgICBpbnQgYWRqdXN0ZWRCbG9ja0hlaWdodCA9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9j
a0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKKworICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9
IGFkanVzdGVkQmxvY2tIZWlnaHQ7CisgICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0gZXh0
cmFIZWlnaHQgKiBzY2FubGluZTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldCA9
IGN1cnJlbnRZICogc2NhbmxpbmU7CisgICAgICAgICAgICAgICAgc2l6ZSA9IGFkanVzdGVkQmxv
Y2tIZWlnaHQgKiBzY2FubGluZTsKKworICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZlci5k
YXRhKCkgKyBkZXN0aW5hdGlvbk9mZnNldCwgcGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpICsg
c291cmNlT2Zmc2V0LCBzaXplKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4K
KyAgICB9CisjZW5kaWYKKworICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNo
b3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCisgICAgYm94Qmx1ckdl
bmVyaWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwg
cGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKK30KKworYm9vbCBGRUdhdXNzaWFu
Qmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBo
YUltYWdlKCkpOworCisgICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Cisg
ICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZm
ZWN0RHJhd2luZ1JlY3QpOworICAgIGlmICghbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpICYmICFt
X2VmZmVjdC5zdGREZXZpYXRpb25ZKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0
byBrZXJuZWxTaXplID0gbV9lZmZlY3QuY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9l
ZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7CisKKyAg
ICBJbnRTaXplIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
OworICAgIGF1dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOworICAgIGlmICghdG1wSW1hZ2VEYXRh
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJy
YXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXBwbHlQbGF0Zm9ybShk
ZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwg
a2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLCBtX2VmZmVjdC5pc0FscGhhSW1hZ2UoKSwg
bV9lZmZlY3QuZWRnZU1vZGUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjI3ZDMyNzVjMmNjN2MwYzJjZWIyNzdm
MzBkNWE2NjkwZTJlMGIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGll
ci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFR2F1c3Np
YW5CbHVyOworZW51bSBjbGFzcyBFZGdlTW9kZVR5cGU7CisKK2NsYXNzIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUdh
dXNzaWFuQmx1cj4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXI8RkVHYXVzc2lhbkJsdXI+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0cnVjdCBBcHBseVBhcmFt
ZXRlcnMgeworICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsK
KyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OworICAgICAg
ICBpbnQgd2lkdGg7CisgICAgICAgIGludCBoZWlnaHQ7CisgICAgICAgIHVuc2lnbmVkIGtlcm5l
bFNpemVYOworICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWTsKKyAgICAgICAgYm9vbCBpc0Fs
cGhhSW1hZ2U7CisgICAgICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZTsKKyAgICB9OworCisgICAg
c3RhdGljIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNp
Z25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KTsKKworICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWdu
ZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlk
ZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1h
eEtlcm5lbFNpemUpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxB
cnJheSwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBp
bnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFs
cGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1
ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJy
YXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZl
Y3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJs
dXJVbmFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVk
QXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxT
aXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwg
RWRnZU1vZGVUeXBlKTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyR2VuZXJpYyhV
aW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFy
cmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUm
IHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGlj
IGlubGluZSB2b2lkIGJveEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisKKyAgICBzdGF0
aWMgaW5saW5lIHZvaWQgYXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIs
IFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwg
dW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1h
Z2UsIEVkZ2VNb2RlVHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mMThmNjA4ODMxOTg0Y2NhYzZjNDg2OTFiNTE2YmFjZTA4NDAxZDY2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDQ0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0
IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRUxp
Z2h0aW5nLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0Rh
dGE6OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgY2VudGVyID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHdp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50
IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAt
MiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAorICAgICAgICAt
MiAqIGNlbnRlciAtIHJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAgfTsKK30K
KworaW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRh
Ojp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsK
KyAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGJvdHRvbSA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVy
biB7CisgICAgICAgIC0yICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21S
aWdodCwKKyAgICAgICAgLWxlZnQgLSAyICogY2VudGVyIC0gcmlnaHQgKyBib3R0b21MZWZ0ICsg
MiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAgfTsKK30KKworaW5saW5lIEludFNpemUgRkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
Pml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZTsKKyAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGJvdHRv
bSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtMiAqIGxlZnQgKyAyICogY2VudGVyIC0g
Ym90dG9tTGVmdCArIGJvdHRvbSwKKyAgICAgICAgLWxlZnQgLSAyICogY2VudGVyICsgYm90dG9t
TGVmdCArIDIgKiBib3R0b20KKyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5n
U29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNl
dCkgY29uc3QKK3sKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwor
ICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
KyAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCBi
b3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICByZXR1cm4geworICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJp
Z2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCisgICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQg
KyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKKyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGlu
dCBvZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKK3sKKyAgICBpbnQgcmln
aHRBbHBoYU9mZnNldCA9IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
OworICAgIAorICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJp
Z2h0QWxwaGFPZmZzZXQpKTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUp
KTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShy
aWdodEFscGhhT2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKKworICAgIGlu
dCBsZWZ0ID0gYWxwaGFXaW5kb3cubGVmdCgpOworICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5k
b3cudG9wTGVmdCgpOworICAgIGludCB0b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsKKworICAgIGlu
dCBib3R0b21MZWZ0ID0gYWxwaGFXaW5kb3cuYm90dG9tTGVmdCgpOworICAgIGludCBib3R0b20g
PSBhbHBoYVdpbmRvdy5ib3R0b20oKTsKKworICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVl
biBzaGlmdGVkLCBhbmQgaGVyZSB3ZSBmaWxsIGluIHRoZSByaWdodCBjb2x1bW4uCisgICAgYWxw
aGFXaW5kb3cuYWxwaGFbMF1bMl0gPSB0b3BSaWdodDsKKyAgICBhbHBoYVdpbmRvdy5hbHBoYVsx
XVsyXSA9IHJpZ2h0OworICAgIGFscGhhV2luZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7
CisgICAgCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRo
IHNvbWUgc3BvdC1jaGVja3MuCisgICAgQVNTRVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3BMZWZ0CisgICAgQVNTRVJUKGFscGhh
V2luZG93LnRvcCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wCisKKyAgICByZXR1cm4gewor
ICAgICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0
b21MZWZ0ICsgYm90dG9tUmlnaHQsCisgICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJp
Z2h0ICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAorICAgIH07Cit9CisK
K2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6
cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgLT0gd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOworICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtdG9wTGVmdCArIHRv
cCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0b20sCisgICAgICAg
IC10b3BMZWZ0IC0gMiAqIHRvcCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tCisgICAgfTsKK30K
KworaW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRh
Ojpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Cit7CisgICAgaW50IGNlbnRlciA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCB0
b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgLXRvcCAr
IHRvcFJpZ2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCwKKyAgICAgICAgLTIgKiB0b3AgLSB0
b3BSaWdodCArIDIgKiBjZW50ZXIgKyByaWdodAorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0Cit7CisgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
KyAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcExl
ZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcFJp
Z2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtdG9wTGVmdCAr
IHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQsCisgICAgICAgIC10b3BMZWZ0IC0gMiAq
IHRvcCAtIHRvcFJpZ2h0ICsgbGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAorICAgIH07Cit9CisK
K2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6
Ym90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgLT0gd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOworICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgLXRvcExlZnQg
KyB0b3AgLSAyICogbGVmdCArIDIgKiBjZW50ZXIsCisgICAgICAgIC10b3BMZWZ0IC0gMiAqIHRv
cCArIGxlZnQgKyAyICogY2VudGVyCisgICAgfTsKK30KKwordm9pZCBGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjpzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0
YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBp
bnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFs
MkRWZWN0b3IsIGZsb2F0IGFscGhhKQoreworICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3Vy
ZmFjZVNjYWxlOworICAgIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGlu
Z0RhdGEgPSBkYXRhLmxpZ2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRp
bmdEYXRhLCB4LCB5LCB6KTsKKworICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgaWYgKG5v
cm1hbDJEVmVjdG9yLmlzWmVybygpKSB7CisgICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAs
IDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KKyAgICAgICAgaWYgKGRhdGEu
ZWZmZWN0LT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdo
dGluZykKKyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAq
IGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JM
ZW5ndGg7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlW
ZWN0b3IgPSB7CisgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwK
KyAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAorICAgICAgICAg
ICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRW
ZWN0b3JMZW5ndGgKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVj
dG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChkYXRh
LnNwZWN1bGFyRXhwb25lbnQgPT0gMSkKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0g
ZGF0YS5zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9y
TGVuZ3RoOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndh
eVZlY3Rvckxlbmd0aCwgZGF0YS5zcGVjdWxhckV4cG9uZW50KTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7CisgICAgICAgICAg
ICBmYWN0b3JYICogbm9ybWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAor
ICAgICAgICAgICAgZmFjdG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJm
YWNlU2NhbGUsCisgICAgICAgICAgICAxLjBmCisgICAgICAgIH07CisgICAgICAgIGZsb2F0IG5v
cm1hbFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKKworICAgICAgICBpZiAo
ZGF0YS5lZmZlY3QtPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVz
ZUxpZ2h0aW5nKQorICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0
YW50ICogKG5vcm1hbFZlY3RvciAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFs
VmVjdG9yTGVuZ3RoICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKKyAgICAg
ICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAorICAgICAgICAgICAgICAg
IGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci55KCksCisgICAgICAgICAgICAgICAgbGlnaHRpbmdE
YXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxm
d2F5VmVjdG9yLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVu
dCA9PSAxKQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29u
c3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVu
Z3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1h
bFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlW
ZWN0b3JMZW5ndGgpLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMTsK
KyAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCisgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAwOwor
CisgICAgdWludDhfdCBwaXhlbFZhbHVlWzNdID0geworICAgICAgICBzdGF0aWNfY2FzdDx1aW50
OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSAqIDI1NS4w
ZiksCisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGlu
Z0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1LjBmKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWlu
dDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci56KCkgKiAyNTUu
MGYpCisgICAgfTsKKyAgICAKKyAgICBkYXRhLnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxWYWx1ZSwg
Mywgb2Zmc2V0KTsKK30KKwordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhl
bChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JY
LCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQoreworICAgIHNldFBpeGVs
SW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3Rv
clksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Cit9CisKKy8vIFRoaXMgYXBwZWFycyB0byByZWFkIGZyb20gYW5kIHdyaXRl
IHRvIHRoZSBzYW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVhZHMgdGhlIGFscGhhIGNo
YW5uZWwsIGFuZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4KK3ZvaWQgRkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit7CisgICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+
IDAgc2luY2Ugd2UgcmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCisgICAg
QVNTRVJUKHN0YXJ0WSk7CisgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOworCisgICAgZm9yIChp
bnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgeworICAgICAgICBpbnQgcm93U3RhcnRPZmZz
ZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50IHBy
ZXZpb3VzUm93U3RhcnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7CisgICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9mZnNldCArIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisKKyAgICAgICAgLy8gYWxwaGFXaW5kb3cg
aXMgYSBsb2NhbCBjYWNoZSBvZiBhbHBoYSB2YWx1ZXMuCisgICAgICAgIC8vIEZpbGwgdGhlIHR3
byByaWdodCBjb2x1bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0aGUgY2VudGVy
IGNvbHVtbi4KKyAgICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVhY2ggcm93IGxl
ZnQgdGhlbiBmaWxsIHRoZSByaWdodCBjb2x1bW4uCisgICAgICAgIEFscGhhV2luZG93IGFscGhh
V2luZG93OworICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMtPml0ZW0ocHJl
dmlvdXNSb3dTdGFydCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgYWxwaGFXaW5k
b3cuc2V0VG9wUmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisKKyAgICAgICAgYWxwaGFXaW5kb3cuc2V0
Q2VudGVyKGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVscy0+aXRlbShy
b3dTdGFydE9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisKKyAg
ICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFy
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9t
UmlnaHQoZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKKworICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQg
KyBjUGl4ZWxTaXplOworICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGggLSAx
OyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7CisgICAgICAgICAgICBhbHBoYVdpbmRvdy5z
aGlmdCgpOworICAgICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JO
b3JtYWwob2Zmc2V0LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigpKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBs
YXRmb3JtR2VuZXJpY1dvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCit7CisgICAg
YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5w
YWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7Cit9CisK
KyNpZiAhKENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIo
R0NDX0NPTVBBVElCTEUpKQordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBs
YXRmb3JtR2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3sKKyAgICB1bnNpZ25lZCByb3dzVG9Qcm9j
ZXNzID0gZGF0YS5oZWlnaHQgLSAyOworICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dz
VG9Qcm9jZXNzIC8gODsKKyAgICAKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBtaW5pbWFsUmVj
dERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFs
bGVsIGpvYnMKKyAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5z
aWduZWQ+KCgoZGF0YS53aWR0aCAtIDIpICogcm93c1RvUHJvY2VzcykgLyBtaW5pbWFsUmVjdERp
bWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CisKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+
IDEpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2JzCisgICAgICAgIFBhcmFs
bGVsSm9iczxBcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybUdlbmVy
aWNXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOworCisgICAgICAgIC8vIEZpbGwgdGhlIHBh
cmFtZXRlciBhcnJheQorICAgICAgICBpbnQgam9iID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9i
cygpOworICAgICAgICBpZiAoam9iID4gMSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpv
YiBpbnRvICJ5U3RlcCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQg
dG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCisgICAgICAgICAgICAvLyB5U3RlcCAqIGpvYnMg
PCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAi
am9ic1dpdGhFeHRyYSIuCisgICAgICAgICAgICBjb25zdCBpbnQgeVN0ZXAgPSByb3dzVG9Qcm9j
ZXNzIC8gam9iOworICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSByb3dzVG9Q
cm9jZXNzICUgam9iOworCisgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gMTsKKyAgICAgICAgICAg
IGZvciAoLS1qb2I7IGpvYiA+PSAwOyAtLWpvYikgeworICAgICAgICAgICAgICAgIEFwcGx5UGFy
YW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAgICAgICAg
ICAgICAgIHBhcmFtcy5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRp
bmdEYXRhID0gcGFpbnRpbmdEYXRhOworICAgICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5
U3RhcnQ7CisgICAgICAgICAgICAgICAgeVN0YXJ0ICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyB5
U3RlcCArIDEgOiB5U3RlcDsKKyAgICAgICAgICAgICAgICBwYXJhbXMueUVuZCA9IHlTdGFydDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xl
IHRocmVhZGVkIG1vZGUuCisgICAgfQorCisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChk
YXRhLCBwYWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0IC0gMSk7Cit9CisjZW5kaWYKKwordm9p
ZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IExpZ2h0aW5n
RGF0YSYgZGF0YSkKK3sKKyAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0
YTsKKworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRvQ29sb3JD
b21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOworICAgIHBh
aW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNE
KHIsIGcsIGIpOworCisgICAgZGF0YS5saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqZGF0
YS5lZmZlY3QsIHBhaW50aW5nRGF0YSk7CisKKyAgICAvLyBUb3AgbGVmdC4KKyAgICBpbnQgb2Zm
c2V0ID0gMDsKKyAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgMCwg
Y0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wTGVmdE5vcm1hbChvZmZzZXQpKTsK
KworICAgIC8vIFRvcCByaWdodC4KKyAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBk
YXRhLnRvcFJpZ2h0Tm9ybWFsKG9mZnNldCkpOworCisgICAgLy8gQm90dG9tIGxlZnQuCisgICAg
b2Zmc2V0ID0gKGRhdGEuaGVpZ2h0IC0gMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhl
aWdodCAtIDEsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3Jt
YWwob2Zmc2V0KSk7CisKKyAgICAvLyBCb3R0b20gcmlnaHQuCisgICAgb2Zmc2V0ID0gZGF0YS5o
ZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAg
ICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIGRh
dGEuaGVpZ2h0IC0gMSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmln
aHROb3JtYWwob2Zmc2V0KSk7CisKKyAgICBpZiAoZGF0YS53aWR0aCA+PSAzKSB7CisgICAgICAg
IC8vIFRvcCByb3cuCisgICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7CisgICAgICAgIGZvciAo
aW50IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUp
CisgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwg
Y0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9mZnNldCkpOwor
CisgICAgICAgIC8vIEJvdHRvbSByb3cuCisgICAgICAgIG9mZnNldCA9IChkYXRhLmhlaWdodCAt
IDEpICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7CisgICAg
ICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQ
aXhlbFNpemUpCisgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0
YSwgeCwgZGF0YS5oZWlnaHQgLSAxLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5i
b3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7CisgICAgfQorCisgICAgaWYgKGRhdGEuaGVpZ2h0ID49
IDMpIHsKKyAgICAgICAgLy8gTGVmdCBjb2x1bW4uCisgICAgICAgIG9mZnNldCA9IGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0
YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAs
IHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zm
c2V0KSk7CisKKyAgICAgICAgLy8gUmlnaHQgY29sdW1uLgorICAgICAgICBvZmZzZXQgPSAyICog
ZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7CisgICAgICAgIGZv
ciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNldCArPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGggLSAxLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0
b3IxZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKKyAgICB9CisKKyAgICBp
ZiAoZGF0YS53aWR0aCA+PSAzICYmIGRhdGEuaGVpZ2h0ID49IDMpIHsKKyAgICAgICAgLy8gSW50
ZXJpb3IgcGl4ZWxzLgorICAgICAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhkYXRhLCBwYWludGlu
Z0RhdGEpOworICAgIH0KKworICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplICogZGF0YS5oZWlnaHQ7CisgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJU
eXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykgeworICAgICAg
ICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSArPSBj
UGl4ZWxTaXplKQorICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdFBpeGVsOyBp
ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgYTEgPSBkYXRhLnBpeGVscy0+
aXRlbShpKTsKKyAgICAgICAgICAgIHVpbnQ4X3QgYTIgPSBkYXRhLnBpeGVscy0+aXRlbShpICsg
MSk7CisgICAgICAgICAgICB1aW50OF90IGEzID0gZGF0YS5waXhlbHMtPml0ZW0oaSArIDIpOwor
ICAgICAgICAgICAgLy8gYWxwaGEgc2V0IHRvIHNldCB0byBtYXgoYTEsIGEyLCBhMykKKyAgICAg
ICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSArIDMsIGExID49IGEyID8gKGExID49IGEzID8gYTEg
OiBhMykgOiAoYTIgPj0gYTMgPyBhMiA6IGEzKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jv
b2wgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3Qg
RmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUlt
YWdlKGZhbHNlKTsKKworICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1
ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwor
ICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVm
ZmVjdERyYXdpbmdSZWN0KTsKKworICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5n
dGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCisgICAg
Ly8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJz
IChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCisgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtl
cm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KKyAg
ICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1l
bnRhdGlvbgorCisgICAgSW50U2l6ZSBzaXplID0gSW50U2l6ZShtX2VmZmVjdC5hYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSk7CisKKyAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRo
IG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KKyAgICAvLyBUaGUgVzMgc3BlYyBkb2Vz
IG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCisgICAg
aWYgKHNpemUud2lkdGgoKSA8PSAyIHx8IHNpemUuaGVpZ2h0KCkgPD0gMikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICBkYXRhLmVmZmVjdCA9ICZt
X2VmZmVjdDsKKyAgICBkYXRhLmZpbHRlclR5cGUgPSBtX2VmZmVjdC5maWx0ZXJUeXBlKCk7Cisg
ICAgZGF0YS5saWdodGluZ0NvbG9yID0gbV9lZmZlY3QubGlnaHRpbmdDb2xvcigpOworICAgIGRh
dGEuc3VyZmFjZVNjYWxlID0gbV9lZmZlY3Quc3VyZmFjZVNjYWxlKCkgLyAyNTUuMGY7CisgICAg
ZGF0YS5kaWZmdXNlQ29uc3RhbnQgPSBtX2VmZmVjdC5kaWZmdXNlQ29uc3RhbnQoKTsKKyAgICBk
YXRhLnNwZWN1bGFyQ29uc3RhbnQgPSBtX2VmZmVjdC5zcGVjdWxhckNvbnN0YW50KCk7CisgICAg
ZGF0YS5zcGVjdWxhckV4cG9uZW50ID0gbV9lZmZlY3Quc3BlY3VsYXJFeHBvbmVudCgpOworICAg
IGRhdGEubGlnaHRTb3VyY2UgPSAmbV9lZmZlY3QubGlnaHRTb3VyY2UoKTsKKyAgICBkYXRhLm9w
ZXJhdGluZ0NvbG9yU3BhY2UgPSAmbV9lZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpOworCisg
ICAgZGF0YS5waXhlbHMgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OworICAgIGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemUgPSBzaXplLndpZHRoKCkgKiBjUGl4ZWxTaXplOworICAgIGRh
dGEud2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgZGF0YS5oZWlnaHQgPSBzaXplLmhlaWdodCgp
OworCisgICAgYXBwbHlQbGF0Zm9ybShkYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRp
bmdTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTFiODM5ZWVmNzYzZWIxNTA5M2YyN2Fm
NDc0ODI5ZTZkZjVhNzUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgK
QEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZworICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiTGlnaHRTb3Vy
Y2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRUxpZ2h0aW5nOworCitjbGFz
cyBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRl
QXBwbGllcjxGRUxpZ2h0aW5nPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNy
ZXRlQXBwbGllcjxGRUxpZ2h0aW5nPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7
CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGludCBjUGl4ZWxTaXplID0gNDsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFD
aGFubmVsT2Zmc2V0ID0gMzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1ZUFs
cGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7CisKKyAgICAvLyBUaGVzZSBmYWN0b3Jz
IGFuZCB0aGUgbm9ybWFsIGNvZWZmaWNpZW50cyBjb21lIGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC4KKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5m
OworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjQgPSAtMSAvIDQuZjsKKyAgICBz
dGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IyZGl2MyA9IC0yIC8gMy5mOworCisgICAgc3Ry
dWN0IEFscGhhV2luZG93IHsKKyAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07CisgICAg
CisgICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29t
cGFyaW5nIGluZGljZXMgZWFzaWVyLgorICAgICAgICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAg
ICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQorICAgICAgICB1aW50OF90IGxlZnQo
KSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVswXTsgfQorICAgICAgICB1
aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsg
fQorCisgICAgICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJu
IGFscGhhWzBdWzFdOyB9CisgICAgICAgIHVpbnQ4X3QgY2VudGVyKCkgY29uc3QgICAgICAgICAg
ICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9CisgICAgICAgIHVpbnQ4X3QgYm90dG9tKCkgY29u
c3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9CisKKyAgICAgICAgdm9pZCBz
ZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9Cisg
ICAgICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMV1bMV0g
PSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7
IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KKworICAgICAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4
X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRS
aWdodCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVlOyB9CisgICAg
ICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2
YWx1ZTsgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10p
CisgICAgICAgIHsKKyAgICAgICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07CisgICAgICAgICAg
ICBhbHBoYVsxXSA9IGFscGhhWzJdOworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgc2hp
ZnQoKQorICAgICAgICB7CisgICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVswXSk7CisgICAgICAg
ICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7CisgICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7CisgICAgICAg
IC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0
YQorICAgICAgICBGRUxpZ2h0aW5nKiBlZmZlY3Q7CisgICAgICAgIEZpbHRlckVmZmVjdDo6VHlw
ZSBmaWx0ZXJUeXBlOworICAgICAgICBDb2xvciBsaWdodGluZ0NvbG9yOworICAgICAgICBmbG9h
dCBzdXJmYWNlU2NhbGU7CisgICAgICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudDsKKyAgICAgICAg
ZmxvYXQgc3BlY3VsYXJDb25zdGFudDsKKyAgICAgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudDsK
KyAgICAgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlOworICAgICAgICBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UqIG9wZXJhdGluZ0NvbG9yU3BhY2U7CisKKyAgICAgICAgVWlu
dDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKKyAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOworICAgICAgICBpbnQgd2lkdGg7CisgICAgICAgIGludCBoZWlnaHQ7CisKKyAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAg
ICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAg
ICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAg
ICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5k
b3cmKSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwo
aW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgfTsKKworICAgIHN0cnVjdCBBcHBseVBhcmFt
ZXRlcnMgeworICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICAgICAgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CisgICAgICAgIGludCB5U3RhcnQ7CisgICAgICAg
IGludCB5RW5kOworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBzZXRQaXhlbEludGVybmFsKGlu
dCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNp
emUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRQaXhl
bChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJ
bnRTaXplIG5vcm1hbDJEVmVjdG9yKTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1H
ZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSYsIGludCBzdGFydFksIGludCBlbmRZKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBs
YXRmb3JtR2VuZXJpY1dvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybShjb25zdCBM
aWdodGluZ0RhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJn
ZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1
ZDRhYWI2ZDg2NmVlNGU5YThjZWM0NGY1ZWNkMDgyYWRkYTNhOTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVy
Z2VTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuaCIK
KworI2luY2x1ZGUgIkZFTWVyZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVN
ZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgQVNTRVJUKGlucHV0RWZmZWN0cy5zaXpl
KCkgPiAwKTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJl
c3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworCisgICAg
Zm9yIChhdXRvJiBpbiA6IGlucHV0RWZmZWN0cykgeworICAgICAgICBhdXRvIGluQnVmZmVyID0g
aW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgICAgIGlmICghaW5CdWZmZXIpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlu
QnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmVBcHBs
aWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODIxZDg0NDdlNWM5N2ZhNGY5NDgzNWY2Yjg4MTA2YjVmOGVkYWNl
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEsNDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMjEgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RB
cHBsaWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVNZXJnZTsKKworY2xh
c3MgRkVNZXJnZVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8RkVNZXJnZT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8RkVNZXJnZT47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAg
Ym9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTA4NWY1MGNlYWRmZmZhZTA2MDFiYzBlMmE3YzRjYjk0MjdjMzcyYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDE5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIEFwcGxl
IEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkNv
bG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKKyNpbmNsdWRlICJGRU1v
cnBob2xvZ3kuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5o
IgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1pbk9yTWF4KGNvbnN0IENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gTW9y
cGhvbG9neU9wZXJhdG9yVHlwZTo6RXJvZGUpCisgICAgICAgIHJldHVybiBwZXJDb21wb25lbnRN
aW4oYSwgYik7CisKKyAgICByZXR1cm4gcGVyQ29tcG9uZW50TWF4KGEsIGIpOworfQorCitpbmxp
bmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6Y29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXks
IGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGUpCit7CisgICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNm
cm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0
YXJ0LCB3aWR0aCkpIH0pOworCisgICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5k
OyArK3kpIHsKKyAgICAgICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4
ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgp
KSB9KTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heChleHRyZW11bSwgcGl4ZWwsIHR5cGUp
OworICAgIH0KKyAgICByZXR1cm4gZXh0cmVtdW07Cit9CisKK2lubGluZSBDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjprZXJuZWxFeHRyZW11
bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlw
ZSkKK3sKKyAgICBhdXRvIGV4dHJlbXVtID0ga2VybmVsWzBdOworICAgIGZvciAoc2l6ZV90IGkg
PSAxOyBpIDwga2VybmVsLnNpemUoKTsgKytpKQorICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4
KGV4dHJlbXVtLCBrZXJuZWxbaV0sIHR5cGUpOworCisgICAgcmV0dXJuIGV4dHJlbXVtOworfQor
Cit2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQor
eworICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKKworICAgIGNvbnN0IGF1dG8mIHNyY1BpeGVs
QXJyYXkgPSAqcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXk7CisgICAgYXV0byYgZHN0UGl4ZWxB
cnJheSA9ICpwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheTsKKworICAgIGNvbnN0IGludCByYWRp
dXNYID0gcGFpbnRpbmdEYXRhLnJhZGl1c1g7CisgICAgY29uc3QgaW50IHJhZGl1c1kgPSBwYWlu
dGluZ0RhdGEucmFkaXVzWTsKKyAgICBjb25zdCBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEud2lk
dGg7CisgICAgY29uc3QgaW50IGhlaWdodCA9IHBhaW50aW5nRGF0YS5oZWlnaHQ7CisKKyAgICBB
U1NFUlQocmFkaXVzWCA8PSB3aWR0aCB8fCByYWRpdXNZIDw9IGhlaWdodCk7CisgICAgQVNTRVJU
KHN0YXJ0WSA+PSAwICYmIGVuZFkgPD0gaGVpZ2h0ICYmIHN0YXJ0WSA8IGVuZFkpOworCisgICAg
Q29sdW1uRXh0cmVtYSBleHRyZW1hOworICAgIGV4dHJlbWEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSgyICogcmFkaXVzWCArIDEpOworCisgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7
ICsreSkgeworICAgICAgICBpbnQgeVJhZGl1c1N0YXJ0ID0gc3RkOjptYXgoMCwgeSAtIHJhZGl1
c1kpOworICAgICAgICBpbnQgeVJhZGl1c0VuZCA9IHN0ZDo6bWluKGhlaWdodCwgeSArIHJhZGl1
c1kgKyAxKTsKKworICAgICAgICBleHRyZW1hLnNocmluaygwKTsKKworICAgICAgICAvLyBXZSBz
dGFydCBhdCB0aGUgbGVmdCBlZGdlLCBzbyBjb21wdXRlIGV4dHJlbWUgZm9yIHRoZSByYWRpdXNY
IGNvbHVtbnMuCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcmFkaXVzWDsgKyt4KQorICAg
ICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwg
eVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKKwor
ICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgor
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKKyAgICAgICAgICAgIGlm
ICh4IDwgd2lkdGggLSByYWRpdXNYKQorICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNv
bHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlS
YWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEudHlwZSkpOworCisgICAgICAgICAgICBpZiAo
eCA+IHJhZGl1c1gpCisgICAgICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7CisKKyAgICAg
ICAgICAgIHVuc2lnbmVkKiBkZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4o
ZHN0UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKKyAg
ICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMo
a2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRpbmdEYXRhLnR5cGUpKS52YWx1ZTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbXMpCit7CisgICAgYXBwbHlQbGF0
Zm9ybUdlbmVyaWMoKnBhcmFtcy0+cGFpbnRpbmdEYXRhLCBwYXJhbXMtPnN0YXJ0WSwgcGFyYW1z
LT5lbmRZKTsKK30KKwordm9pZCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm0oY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit7CisgICAgLy8gRW1waXJp
Y2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtl
cm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KKyAgICBmbG9hdCBrZXJuZWxG
YWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kp
ICogMC42NTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW1hbEFyZWEgPSAoMTYwICogMTYw
KTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyAgICAKKyAgICB1
bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIDg7CisgICAgdW5z
aWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPigocGFpbnRpbmdE
YXRhLndpZHRoICogcGFpbnRpbmdEYXRhLmhlaWdodCAqIGtlcm5lbEZhY3RvcikgLyBtaW5pbWFs
QXJlYSwgbWF4TnVtVGhyZWFkcyk7CisgICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7
CisgICAgICAgIFBhcmFsbGVsSm9iczxBcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBw
bHlQbGF0Zm9ybVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIGF1dG8gbnVt
T2ZUaHJlYWRzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworICAgICAgICBpZiAobnVt
T2ZUaHJlYWRzID4gMSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJqb2JT
aXplIi1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGln
aHRseSBsYXJnZXIgc2luY2UKKyAgICAgICAgICAgIC8vIGpvYlNpemUgKiBqb2JzIDwgdG90YWwg
c2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVkIGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRo
RXh0cmEiLgorICAgICAgICAgICAgaW50IGpvYlNpemUgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8g
bnVtT2ZUaHJlYWRzOworICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludGluZ0Rh
dGEuaGVpZ2h0ICUgbnVtT2ZUaHJlYWRzOworICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsK
KyAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAt
LWpvYikgeworICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxl
bEpvYnMucGFyYW1ldGVyKGpvYik7CisgICAgICAgICAgICAgICAgcGFyYW0uc3RhcnRZID0gY3Vy
cmVudFk7CisgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/
IGpvYlNpemUgKyAxIDogam9iU2l6ZTsKKyAgICAgICAgICAgICAgICBwYXJhbS5lbmRZID0gY3Vy
cmVudFk7CisgICAgICAgICAgICAgICAgcGFyYW0ucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0
YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2lu
Z2xlIHRocmVhZCBtb2RlbAorICAgIH0KKworICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKHBhaW50
aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7Cit9CisKK2Jvb2wgRkVNb3JwaG9sb2d5
U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0c1swXS5nZXQoKTsKKworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9
IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1h
Z2UoKSk7CisKKyAgICBhdXRvIGlzRGVnZW5lcmF0ZSA9IFtdKGludCByYWRpdXNYLCBpbnQgcmFk
aXVzWSkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiByYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwg
MCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpOworICAgIH07CisKKyAgICBJbnRSZWN0IGVmZmVj
dERyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJ
bnRTaXplKEZsb2F0U2l6ZShtX2VmZmVjdC5yYWRpdXNYKCksIG1fZWZmZWN0LnJhZGl1c1koKSkp
OworCisgICAgaWYgKGlzRGVnZW5lcmF0ZShyYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgp
KSkgeworICAgICAgICBpbi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLCBlZmZlY3REcmF3aW5nUmVjdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxl
KHsgbV9lZmZlY3QucmFkaXVzWCgpLCBtX2VmZmVjdC5yYWRpdXNZKCkgfSkpOworICAgIGludCBy
YWRpdXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53
aWR0aCgpKTsKKyAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0Lmhl
aWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIGlmIChpc0RlZ2VuZXJhdGUocmFk
aXVzWCwgcmFkaXVzWSkpIHsKKyAgICAgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBhdXRvIHNvdXJjZVBpeGVsQnVmZmVyID0gaW4tPmdldFBpeGVs
QnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVj
dERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICgh
c291cmNlUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIHNv
dXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKwor
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CisgICAgcGFpbnRpbmdEYXRhLnR5cGUgPSBt
X2VmZmVjdC5tb3JwaG9sb2d5T3BlcmF0b3IoKTsKKyAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheSA9ICZzb3VyY2VQaXhlbEFycmF5OworICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5
ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWls
ZihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpKTsKKyAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0g
Y2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkpOworICAgIHBhaW50aW5nRGF0YS5yYWRp
dXNYID0gY2VpbGYocmFkaXVzWCk7CisgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihy
YWRpdXNZKTsKKworICAgIGFwcGx5UGxhdGZvcm0ocGFpbnRpbmdEYXRhKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODQ5ZDY5
MDNkZmM3OGY2OGYzNzVhNjYwMGRmOTYwZDEwN2U0ODgxNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9s
b2d5U29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkZp
bHRlckVmZmVjdEFwcGxpZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVNb3JwaG9sb2d5OworZW51bSBjbGFz
cyBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOworCitjbGFzcyBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFw
cGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTW9ycGhvbG9neT4g
eworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNb3JwaG9s
b2d5PjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1c2luZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+OworCisgICAgc3RydWN0IFBhaW50aW5nRGF0
YSB7CisgICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZTsKKyAgICAgICAgaW50IHJh
ZGl1c1g7CisgICAgICAgIGludCByYWRpdXNZOworICAgICAgICBjb25zdCBVaW50OENsYW1wZWRB
cnJheSogc3JjUGl4ZWxBcnJheTsKKyAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVs
QXJyYXk7CisgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKyAgICB9Owor
CisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7CisgICAgICAgIGNvbnN0IFBhaW50aW5nRGF0
YSogcGFpbnRpbmdEYXRhOworICAgICAgICBpbnQgc3RhcnRZOworICAgICAgICBpbnQgZW5kWTsK
KyAgICB9OworCisgICAgc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBp
bnQgeSwgaW50IHdpZHRoKSB7IHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OyB9CisgICAgc3Rh
dGljIGlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBv
bmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBjb21wb25lbnRzKSB7IHJl
dHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90
Pj4oY29tcG9uZW50cykgfTsgfQorCisgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9y
OjpSR0JBIHBpeGVsKSB7IHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7
IH0KKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1h
eChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiYgYiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgc3RhdGlj
IGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQg
eUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKyAgICBzdGF0aWMgaW5s
aW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1
bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOworCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0
WSwgaW50IGVuZFkpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQ
YXJhbWV0ZXJzKik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybShjb25zdCBQYWludGlu
Z0RhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0
d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQ3Zjhm
ZTI5MGQ2MTlkNTZmMWI1NmZmNGZkNjFhNTlkNjc2YzFmZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRT
b2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU9mZnNldFNvZnR3YXJl
QXBwbGllci5oIgorCisjaW5jbHVkZSAiRkVPZmZzZXQuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgp
OworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7
CisgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICgh
cmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBt
X2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKworICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVnaW9uID0gbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5z
Y2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3QuZHgoKSwgbV9lZmZlY3QuZHkoKSB9KSk7Cisg
ICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3
aW5nUmVnaW9uKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWMzZmQ4NGYyNTQ3ZjBiYjI0YTQyOWU3MTZlNzE3MDJiM2UzMmJhNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBC
dWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxp
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRU9mZnNldDsKKworY2xhc3Mg
RkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBs
aWVyPEZFT2Zmc2V0PiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBw
bGllcjxGRU9mZnNldD47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAg
Ym9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
VGlsZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDNhMWNmNjQ5ZjU2ZmQ5NDdjYTFkNGM0ZGI5MGEyZGE5MzRkYmMzNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVU
aWxlU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFVGlsZVNvZnR3YXJlQXBwbGllci5oIgorCisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRkVUaWxlLmgiCisjaW5jbHVkZSAi
RmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGF0dGVy
bi5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitib29sIEZFVGlsZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIHJlc3Vs
dEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIGluQnVmZmVy
ID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5C
dWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZWZmZWN0LnNldElzQWxwaGFJ
bWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworCisgICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1v
cmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2
ZXMgdGhlCisgICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMg
aXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgorICAgIEZsb2F0
UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7CisgICAgRmxvYXRQb2ludCBpbk1h
eEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKKyAgICBGbG9hdFBvaW50IG1h
eEVmZmVjdExvY2F0aW9uID0gbV9lZmZlY3QubWF4RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Cisg
ICAgaWYgKGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFw
aGljIHx8IGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBo
YSkgeworICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKKyAgICAgICAg
dGlsZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiByZW1vdmUgdGhpcyBub24tcGFsdGZvcm0gY2FsbC4KKyAgICBhdXRvIHRpbGVJbWFnZSA9
IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHRpbGVSZWN0LCB0aWxlUmVj
dCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIGZpbHRlci5yZW5kZXJpbmdNb2RlKCkp
OworICAgIGlmICghdGlsZUltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFw
aGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKKyAg
ICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1p
bk1heEVmZmVjdExvY2F0aW9uLnkoKSk7CisgICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmluQnVmZmVyLCBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKwor
ICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KFdURk1vdmUodGlsZUltYWdlKSk7CisgICAgaWYgKCF0aWxlSW1hZ2VDb3B5KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybTsKKyAg
ICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0aW9uIC0gbWF4RWZm
ZWN0TG9jYXRpb24pOworCisgICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJ
bWFnZUNvcHkucmVsZWFzZU5vbk51bGwoKSwgeyB0cnVlLCB0cnVlLCBwYXR0ZXJuVHJhbnNmb3Jt
IH0pOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKTsKKyAgICBmaWx0ZXJDb250ZXh0LnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0
dGVybikpOworICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlQXBw
bGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRVRpbGVTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNmJkNGExNDJmMzAzZGU1MGNk
YzIwZmQxMzQ1OTY1ODZhZDMwZDNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZUFwcGxpZXIu
aApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZFVGlsZVNvZnR3YXJlQXBwbGllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZFVGlsZTsKKworY2xhc3MgRkVUaWxlU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZp
bHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVRpbGU+IHsKKyAgICB1c2luZyBCYXNlID0gRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVGlsZT47CisKK3B1YmxpYzoKKyAgICB1c2luZyBC
YXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNv
ZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTE5NjIzZjNiMmQ5NWEyZDQ4Yjc3Y2ZjNDk5
Njk0ZDFhN2U0Nzg0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmNw
cApAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3plZ2VkLmh1PgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdhYm9yIExva2kgPGxva2lAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUg
IkZFVHVyYnVsZW5jZS5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVm
ZmVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFyYWxs
ZWxKb2JzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhlIHR1cmJ1bGVuY2UgY2Fs
Y3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNpb24gb2Ygd2hhdCBhcHBlYXJzIGluIHRo
ZSBTVkcgMS4xIHNwZWNpZmljYXRpb246CisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9m
aWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCisKK0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6
UGFpbnRpbmdEYXRhIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6aW5pdFBhaW50aW5nRGF0
YShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25nIHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMsIGNv
bnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSkKK3sKKyAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdE
YXRhIHsgdHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBz
ZWVkLCBzdGl0Y2hUaWxlcywgcGFpbnRpbmdTaXplLCB7IH0sIHsgfSB9OworCisgICAgLy8gVGhl
IHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCisg
ICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVk
ID0gLShwYWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKKyAgICBp
ZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKKyAgICAgICAgcGFpbnRp
bmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKKworICAgIGZsb2F0KiBncmFkaWVudDsK
KyAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgeworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxvY2tTaXplOyArK2kpIHsKKyAgICAgICAgICAg
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOworICAgICAgICAgICAgZ3JhZGll
bnQgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07CisgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50
aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNf
YmxvY2tTaXplOworICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2Nr
U2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAm
JiAhZ3JhZGllbnRbMV0pOworICAgICAgICAgICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvciA9
IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKKyAgICAgICAgICAgIGdyYWRp
ZW50WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7CisgICAgICAgICAgICBncmFkaWVudFsxXSAv
PSBub3JtYWxpemF0aW9uRmFjdG9yOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQg
aSA9IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICBpbnQgayA9IHBhaW50
aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07CisgICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRh
LnJhbmRvbSgpICUgc19ibG9ja1NpemU7CisgICAgICAgIEFTU0VSVChqID49IDApOworICAgICAg
ICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOworICAgICAgICBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXTsKKyAg
ICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7CisgICAgfQorCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgeworICAgICAgICBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2ldOworICAgICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5l
bCA8IDQ7ICsrY2hhbm5lbCkgeworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2No
YW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5l
bF1baV1bMF07CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19i
bG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwYWludGluZ0RhdGE7Cit9CisKK0ZFVHVy
YnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFw
cGxpZXI6OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVx
dWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVksIGJvb2wgc3RpdGNoVGlsZXMpCit7CisgICAg
aWYgKCFzdGl0Y2hUaWxlcykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGZsb2F0IHRpbGVX
aWR0aCA9IHRpbGVTaXplLndpZHRoKCk7CisgICAgZmxvYXQgdGlsZUhlaWdodCA9IHRpbGVTaXpl
LmhlaWdodCgpOworICAgIEFTU0VSVCh0aWxlV2lkdGggPiAwICYmIHRpbGVIZWlnaHQgPiAwKTsK
KworICAgIC8vIFdoZW4gc3RpdGNoaW5nIHRpbGVkIHR1cmJ1bGVuY2UsIHRoZSBmcmVxdWVuY2ll
cyBtdXN0IGJlIGFkanVzdGVkCisgICAgLy8gc28gdGhhdCB0aGUgdGlsZSBib3JkZXJzIHdpbGwg
YmUgY29udGludW91cy4KKyAgICBpZiAoYmFzZUZyZXF1ZW5jeVgpIHsKKyAgICAgICAgZmxvYXQg
bG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVX
aWR0aDsKKyAgICAgICAgZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWxmKHRpbGVXaWR0aCAqIGJh
c2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgLy8gQmFzZUZyZXF1ZW5jeSBzaG91
bGQgYmUgbm9uLW5lZ2F0aXZlIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCisgICAgICAgIGlm
IChiYXNlRnJlcXVlbmN5WCAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJl
cXVlbmN5WCkKKyAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gbG93RnJlcXVlbmN5OworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGhpZ2hGcmVxdWVuY3k7Cisg
ICAgfQorICAgIGlmIChiYXNlRnJlcXVlbmN5WSkgeworICAgICAgICBmbG9hdCBsb3dGcmVxdWVu
Y3kgPSBmbG9vcmYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Cisg
ICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1
ZW5jeVkpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lZIC8gbG93RnJl
cXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lZKQorICAgICAgICAgICAgYmFz
ZUZyZXF1ZW5jeVkgPSBsb3dGcmVxdWVuY3k7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJh
c2VGcmVxdWVuY3lZID0gaGlnaEZyZXF1ZW5jeTsKKyAgICB9CisKKyAgICBTdGl0Y2hEYXRhIHN0
aXRjaERhdGE7CisgICAgc3RpdGNoRGF0YS53aWR0aCA9IHJvdW5kZih0aWxlV2lkdGggKiBiYXNl
RnJlcXVlbmN5WCk7CisgICAgc3RpdGNoRGF0YS53cmFwWCA9IHNfcGVybGluTm9pc2UgKyBzdGl0
Y2hEYXRhLndpZHRoOworICAgIHN0aXRjaERhdGEuaGVpZ2h0ID0gcm91bmRmKHRpbGVIZWlnaHQg
KiBiYXNlRnJlcXVlbmN5WSk7CisgICAgc3RpdGNoRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2Ug
KyBzdGl0Y2hEYXRhLmhlaWdodDsKKworICAgIHJldHVybiBzdGl0Y2hEYXRhOworfQorCisvLyBU
aGlzIGlzIHRha2VuIDE6MSBmcm9tIFNWRyBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcx
MS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudC4KK0NvbG9yQ29tcG9uZW50czxmbG9h
dCwgND4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpub2lzZTJEKGNvbnN0IFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBG
bG9hdFBvaW50JiBub2lzZVZlY3RvcikKK3sKKyAgICBzdHJ1Y3QgTm9pc2VQb3NpdGlvbiB7Cisg
ICAgICAgIGludCBpbmRleDsgLy8gYngwLCBieTAgaW4gdGhlIHNwZWMgdGV4dC4KKyAgICAgICAg
aW50IG5leHRJbmRleDsgLy8gYngxLCBieTEgaW4gdGhlIHNwZWMgdGV4dC4KKyAgICAgICAgZmxv
YXQgZnJhY3Rpb247IC8vIHJ4MCwgcnkwIGluIHRoZSBzcGVjIHRleHQuCisKKyAgICAgICAgTm9p
c2VQb3NpdGlvbihmbG9hdCBjb21wb25lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vICB0
ID0gdmVjWzBdICsgUGVybGluTjsKKyAgICAgICAgICAgIC8vICBieDAgPSAoaW50KXQ7CisgICAg
ICAgICAgICAvLyAgYngxID0gYngwKzE7CisgICAgICAgICAgICAvLyAgcngwID0gdCAtIChpbnQp
dDsKKyAgICAgICAgICAgIGZsb2F0IHBvc2l0aW9uID0gY29tcG9uZW50ICsgc19wZXJsaW5Ob2lz
ZTsKKyAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbik7CisgICAg
ICAgICAgICBuZXh0SW5kZXggPSBpbmRleCArIDE7CisgICAgICAgICAgICBmcmFjdGlvbiA9IHBv
c2l0aW9uIC0gaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc3RpdGNo
KGludCBzaXplLCBpbnQgd3JhcFNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGlmIChi
eDAgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKKyAgICAgICAgICAgIC8vICAgYngwIC09IHBTdGl0
Y2hJbmZvLT5uV2lkdGg7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gd3JhcFNpemUpCisgICAg
ICAgICAgICAgICAgaW5kZXggLT0gc2l6ZTsKKworICAgICAgICAgICAgLy8gaWYgKGJ4MSA+PSBw
U3RpdGNoSW5mby0+bldyYXBYKQorICAgICAgICAgICAgLy8gICBieDEgLT0gcFN0aXRjaEluZm8t
Pm5XaWR0aDsKKyAgICAgICAgICAgIGlmIChuZXh0SW5kZXggPj0gd3JhcFNpemUpCisgICAgICAg
ICAgICAgICAgbmV4dEluZGV4IC09IHNpemU7CisgICAgICAgIH0KKyAgICB9OworCisgICAgTm9p
c2VQb3NpdGlvbiBub2lzZVgobm9pc2VWZWN0b3IueCgpKTsKKyAgICBOb2lzZVBvc2l0aW9uIG5v
aXNlWShub2lzZVZlY3Rvci55KCkpOworCisgICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0
dGljZSBwb2ludHMgYWNjb3JkaW5nbHkuCisgICAgaWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxl
cykgeworICAgICAgICBub2lzZVguc3RpdGNoKHN0aXRjaERhdGEud2lkdGgsIHN0aXRjaERhdGEu
d3JhcFgpOworICAgICAgICBub2lzZVkuc3RpdGNoKHN0aXRjaERhdGEuaGVpZ2h0LCBzdGl0Y2hE
YXRhLndyYXBZKTsKKyAgICB9CisKKyAgICAvLyBieDAgJj0gQk07CisgICAgLy8gYngxICY9IEJN
OworICAgIC8vIGJ5MCAmPSBCTTsKKyAgICAvLyBieTEgJj0gQk07CisgICAgbm9pc2VYLmluZGV4
ICY9IHNfYmxvY2tNYXNrOworICAgIG5vaXNlWC5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7Cisg
ICAgbm9pc2VZLmluZGV4ICY9IHNfYmxvY2tNYXNrOworICAgIG5vaXNlWS5uZXh0SW5kZXggJj0g
c19ibG9ja01hc2s7CisKKyAgICAvLyBpID0gdUxhdHRpY2VTZWxlY3RvcltieDBdOworICAgIC8v
IGogPSB1TGF0dGljZVNlbGVjdG9yW2J4MV07CisgICAgaW50IGxhdHRpY2VJbmRleCA9IHBhaW50
aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLmluZGV4XTsKKyAgICBpbnQgbmV4dExhdHRp
Y2VJbmRleCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5leHRJbmRleF07
CisKKyAgICAvLyBzeCA9IGRvdWJsZShzX2N1cnZlKHJ4MCkpOworICAgIC8vIHN5ID0gZG91Ymxl
KHNfY3VydmUocnkwKSk7CisgICAgZmxvYXQgc3ggPSBzbW9vdGhDdXJ2ZShub2lzZVguZnJhY3Rp
b24pOworICAgIGZsb2F0IHN5ID0gc21vb3RoQ3VydmUobm9pc2VZLmZyYWN0aW9uKTsKKworICAg
IGF1dG8gbm9pc2VGb3JDaGFubmVsID0gWyZdKGludCBjaGFubmVsKSB7CisgICAgICAgIC8vIGIw
MCA9IHVMYXR0aWNlU2VsZWN0b3JbaSArIGJ5MF0KKyAgICAgICAgaW50IGIwMCA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsKKyAgICAg
ICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDBdOyB1ID0gcngwICogcVswXSAr
IHJ5MCAqIHFbMV07CisgICAgICAgIGNvbnN0IGZsb2F0KiBxID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W2NoYW5uZWxdW2IwMF07CisgICAgICAgIGZsb2F0IHUgPSBub2lzZVguZnJhY3Rpb24gKiBx
WzBdICsgbm9pc2VZLmZyYWN0aW9uICogcVsxXTsKKworICAgICAgICAvLyBiMTAgPSB1TGF0dGlj
ZVNlbGVjdG9yW2ogKyBieTBdOworICAgICAgICBpbnQgYjEwID0gcGFpbnRpbmdEYXRhLmxhdHRp
Y2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLmluZGV4XTsKKyAgICAgICAgLy8g
cngxID0gcngwIC0gMS4wZjsKKyAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVs
XVtiMTBdOyB2ID0gcngxICogcVswXSArIHJ5MCAqIHFbMV07CisgICAgICAgIHEgPSBwYWludGlu
Z0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjEwXTsKKyAgICAgICAgZmxvYXQgdiA9IChub2lzZVgu
ZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyBub2lzZVkuZnJhY3Rpb24gKiBxWzFdOworICAgICAgICAv
LyBhID0gbGVycChzeCwgdSwgdik7CisgICAgICAgIGZsb2F0IGEgPSBsaW5lYXJJbnRlcnBvbGF0
aW9uKHN4LCB1LCB2KTsKKworICAgICAgICAvLyBiMDEgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBi
eTFdOworICAgICAgICBpbnQgYjAxID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltsYXR0
aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKKyAgICAgICAgLy8gcnkxID0gcnkwIC0gMS4w
ZjsKKyAgICAgICAgLy8gcSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMDFdOyB1ID0gcngw
ICogcVswXSArIHJ5MSAqIHFbMV07CisgICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bYjAxXTsKKyAgICAgICAgdSA9IG5vaXNlWC5mcmFjdGlvbiAqIHFbMF0gKyAobm9p
c2VZLmZyYWN0aW9uIC0gMSkgKiBxWzFdOworCisgICAgICAgIC8vIGIxMSA9IHVMYXR0aWNlU2Vs
ZWN0b3JbaiArIGJ5MV07CisgICAgICAgIGludCBiMTEgPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubmV4dEluZGV4XTsKKyAgICAgICAgLy8g
cSA9IGZHcmFkaWVudFtuQ29sb3JDaGFubmVsXVtiMTFdOyB2ID0gcngxICogcVswXSArIHJ5MSAq
IHFbMV07CisgICAgICAgIHEgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYjExXTsK
KyAgICAgICAgdiA9IChub2lzZVguZnJhY3Rpb24gLSAxKSAqIHFbMF0gKyAobm9pc2VZLmZyYWN0
aW9uIC0gMSkgKiBxWzFdOworICAgICAgICAvLyBiID0gbGVycChzeCwgdSwgdik7CisgICAgICAg
IGZsb2F0IGIgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKKworICAgICAgICAvLyBy
ZXR1cm4gbGVycChzeSwgYSwgYik7CisgICAgICAgIHJldHVybiBsaW5lYXJJbnRlcnBvbGF0aW9u
KHN5LCBhLCBiKTsKKyAgICB9OworCisgICAgcmV0dXJuIHsKKyAgICAgICAgbm9pc2VGb3JDaGFu
bmVsKDApLAorICAgICAgICBub2lzZUZvckNoYW5uZWwoMSksCisgICAgICAgIG5vaXNlRm9yQ2hh
bm5lbCgyKSwKKyAgICAgICAgbm9pc2VGb3JDaGFubmVsKDMpCisgICAgfTsKK30KKworLy8gaHR0
cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudCBk
ZXNjcmliZXMgdGhpcyBjb252ZXJzaW9uIHRvIGNvbG9yIGNvbXBvbmVudHMuCisvLyBGSVhNRTog
VGhpcyBzaG91bGQgdXNlIGNvbG9yQ29udmVydDxTUkdCQTx1aW50OD4+KFNSR0JBPGZsb2F0Pikg
dG8gZ2V0IHRoZSBzYW1lIGJlaGF2aW9yLgorQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpCit7CisgICAgcmV0
dXJuIHsKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0
Q29tcG9uZW50c1swXSAqIDI1NSksIDAsIDI1NSksCisgICAgICAgIHN0ZDo6Y2xhbXA8dWludDhf
dD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMV0gKiAyNTUpLCAwLCAyNTUpLAor
ICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25l
bnRzWzJdICogMjU1KSwgMCwgMjU1KSwKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0
aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1szXSAqIDI1NSksIDAsIDI1NSksCisgICAgfTsK
K30KKworQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCit7CisgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQ7CisgICAgRmxvYXRQb2ludCBub2lzZVZlY3Rvcihwb2ludC54KCkgKiBwYWludGlu
Z0RhdGEuYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVl
bmN5WSk7CisgICAgZmxvYXQgcmF0aW8gPSAxOworICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9j
dGF2ZSA8IHBhaW50aW5nRGF0YS5udW1PY3RhdmVzOyArK29jdGF2ZSkgeworICAgICAgICBpZiAo
cGFpbnRpbmdEYXRhLnR5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICAg
ICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3Rp
dGNoRGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87CisKKyAgICAgICAgbm9pc2VWZWN0
b3Iuc2V0WChub2lzZVZlY3Rvci54KCkgKiAyKTsKKyAgICAgICAgbm9pc2VWZWN0b3Iuc2V0WShu
b2lzZVZlY3Rvci55KCkgKiAyKTsKKyAgICAgICAgcmF0aW8gKj0gMjsKKworICAgICAgICBpZiAo
cGFpbnRpbmdEYXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNo
IHZhbHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0
aW9uIGFuZAorICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRv
IHN1YnRyYWN0aW5nIGl0IG9uY2UuCisgICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7
CisgICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBz
X3Blcmxpbk5vaXNlOworICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKKyAgICAg
ICAgICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGlu
Tm9pc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAy
NTUpICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCisgICAgLy8gYW5kICh0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCisgICAgaWYgKHBhaW50aW5nRGF0YS50
eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCisgICAgICAgIHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYgKyAwLjVmOwor
CisgICAgcmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0KTsKK30KKwordm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXpl
JiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFks
IGludCBlbmRZKQoreworICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKKworICAgIEZsb2F0UG9p
bnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CisgICAgaW50IGluZGV4T2ZQ
aXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7CisgICAg
RmxvYXRTaXplIGludmVyc2VTY2FsZSA9IHsgMSAvIGZpbHRlclNjYWxlLndpZHRoKCksIDEgLyBm
aWx0ZXJTY2FsZS5oZWlnaHQoKSB9OworCisgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVu
ZFk7ICsreSkgeworICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOworICAgICAgICBw
b2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGZpbHRlclJlZ2lvbi53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAgIHBvaW50LnNldFgocG9p
bnQueCgpICsgMSk7CisgICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBwb2ludC5z
Y2FsZWQoaW52ZXJzZVNjYWxlLndpZHRoKCksIGludmVyc2VTY2FsZS5oZWlnaHQoKSk7CisgICAg
ICAgICAgICBhdXRvIHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBh
aW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7CisgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldFJhbmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hh
bm5lbCk7CisgICAgICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKK3sKKyAgICBhcHBseVBsYXRm
b3JtR2VuZXJpYyhwYXJhbWV0ZXJzLT5maWx0ZXJSZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRlclNj
YWxlLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwg
cGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5l
bmRZKTsKK30KKwordm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm0oY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNj
YWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIFN0aXRjaERhdGEmIHN0aXRjaERhdGEpCit7CisgICAgaW50IGhlaWdodCA9IGZpbHRl
clJlZ2lvbi5oZWlnaHQoKTsKKyAgICB1bnNpZ25lZCBhcmVhID0gZmlsdGVyUmVnaW9uLmFyZWEo
KTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICog
MTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMuCisgICAgdW5z
aWduZWQgbWF4TnVtVGhyZWFkcyA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKSAvIDg7CisgICAgdW5z
aWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPihhcmVhIC8gbWlu
aW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOworCisgICAgaWYgKG9wdGltYWxUaHJl
YWROdW1iZXIgPiAxKSB7CisgICAgICAgIFBhcmFsbGVsSm9iczxBcHBseVBhcmFtZXRlcnM+IHBh
cmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisK
KyAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5CisgICAgICAgIGF1dG8gbnVtSm9i
cyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKKyAgICAgICAgaWYgKG51bUpvYnMgPiAx
KSB7CisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gInN0ZXBZIi1zaXplZCBqb2Jz
LCBkaXN0cmlidXRpbmcgdGhlIGV4dHJhIHJvd3MgaW50byB0aGUgZmlyc3QgImpvYnNXaXRoRXh0
cmEiIGpvYnMuCisgICAgICAgICAgICB1bnNpZ25lZCBzdGVwWSA9IGhlaWdodCAvIG51bUpvYnM7
CisgICAgICAgICAgICB1bnNpZ25lZCBqb2JzV2l0aEV4dHJhID0gaGVpZ2h0ICUgbnVtSm9iczsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0WSA9IDA7CisKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBBcHBseVBh
cmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoaSk7CisgICAgICAgICAg
ICAgICAgcGFyYW1zLmZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMuZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsKKyAgICAgICAgICAgICAgICBwYXJh
bXMucGl4ZWxBcnJheSA9ICZwaXhlbEFycmF5OworICAgICAgICAgICAgICAgIHBhcmFtcy5wYWlu
dGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hE
YXRhID0gc3RpdGNoRGF0YTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZ
OworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgam9iSGVpZ2h0ID0gKGkgPCBqb2JzV2l0aEV4
dHJhKSA/IHN0ZXBZICsgMSA6IHN0ZXBZOworICAgICAgICAgICAgICAgIHBhcmFtcy5lbmRZID0g
cGFyYW1zLnN0YXJ0WSArIGpvYkhlaWdodDsKKyAgICAgICAgICAgICAgICBzdGFydFkgKz0gam9i
SGVpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0
ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRmFs
bGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBu
ZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KKyAgICBhcHBseVBsYXRm
b3JtR2VuZXJpYyhmaWx0ZXJSZWdpb24sIGZpbHRlclNjYWxlLCBwaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlU29m
dHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJikKK3sKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVj
dC5waXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKTsKKyAgICBpZiAocmVzdWx0U2l6ZS5hcmVhKCkuaGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkg
PSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBpZiAocmVzdWx0U2l6ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGF1dG8gdGlsZVNpemUgPSByb3VuZGVk
SW50U2l6ZShtX2VmZmVjdC5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkpOworCisg
ICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVggPSBtX2VmZmVjdC5iYXNlRnJlcXVlbmN5WCgpOworICAg
IGZsb2F0IGJhc2VGcmVxdWVuY3lZID0gbV9lZmZlY3QuYmFzZUZyZXF1ZW5jeVkoKTsKKyAgICBh
dXRvIHN0aXRjaERhdGEgPSBjb21wdXRlU3RpdGNoaW5nKHRpbGVTaXplLCBiYXNlRnJlcXVlbmN5
WCwgYmFzZUZyZXF1ZW5jeVksIG1fZWZmZWN0LnN0aXRjaFRpbGVzKCkpOworCisgICAgYXV0byBw
YWludGluZ0RhdGEgPSBpbml0UGFpbnRpbmdEYXRhKG1fZWZmZWN0LnR5cGUoKSwgYmFzZUZyZXF1
ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5udW1PY3RhdmVzKCksIG1fZWZmZWN0LnNl
ZWQoKSwgbV9lZmZlY3Quc3RpdGNoVGlsZXMoKSwgdGlsZVNpemUpOworCisgICAgYXBwbHlQbGF0
Zm9ybShtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwg
ZGVzdGluYXRpb25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEpOworICAgIHJl
dHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
Y2U2OGUzNDM0MWIzODY2M2MwYzE0ODVhOTExOGYwNWMyZGNjMzgzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1
cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gPHJlbmlAaW5mLnUtc3pl
Z2VkLmh1PgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIK
KyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVUdXJidWxlbmNlOworZW51bSBj
bGFzcyBUdXJidWxlbmNlVHlwZTsKKworY2xhc3MgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
IDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVR1cmJ1bGVuY2U+IHsKKyAg
ICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVHVyYnVsZW5jZT47
CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25z
dCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgLy8gUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEs
IDIqKjMxIC0gMl0uIEFsZ29yaXRobSBpczoKKyAgICAvLyByID0gKGEgKiByKSBtb2QgbSB3aGVy
ZSBhID0gc19yYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAgLy8gbSA9IHNfcmFuZE1heGlt
dW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgzNjQ3LCByID0gc2VlZC4KKyAgICAvLyBTZWUgW1Bhcmsg
JiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8uIDEwIHAuIDExOTUsIE9jdC4gMTk4OAorICAgIC8v
IFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2R1Y2UgdGhlIHJlc3VsdCAxMDQzNjE4
MDY1CisgICAgLy8gYXMgdGhlIDEwLDAwMHRoIGdlbmVyYXRlZCBudW1iZXIgaWYgdGhlIG9yaWdp
bmFsIHNlZWQgaXMgMS4KKyAgICBzdGF0aWMgY29uc3QgaW50IHNfcGVybGluTm9pc2UgPSA0MDk2
OworICAgIHN0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAy
KiozMSAtIDEKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3OyAv
LyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCisgICAgc3RhdGljIGNvbnN0IGludCBzX3JhbmRR
ID0gMTI3NzczOyAvLyBtIC8gYQorICAgIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7
IC8vIG0gJSBhCisKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tTaXplID0gMjU2OworICAg
IHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja01hc2sgPSBzX2Jsb2NrU2l6ZSAtIDE7CisKKyAgICBz
dHJ1Y3QgUGFpbnRpbmdEYXRhIHsKKyAgICAgICAgLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51
bWJlci4KKyAgICAgICAgbG9uZyByYW5kb20oKQorICAgICAgICB7CisgICAgICAgICAgICBsb25n
IHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVkZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRSICog
KHNlZWQgLyBzX3JhbmRRKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPD0gMCkKKyAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKKyAgICAgICAgICAgIHNlZWQgPSByZXN1
bHQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgVHVy
YnVsZW5jZVR5cGUgdHlwZTsKKyAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVg7CisgICAgICAg
IGZsb2F0IGJhc2VGcmVxdWVuY3lZOworICAgICAgICBpbnQgbnVtT2N0YXZlczsKKyAgICAgICAg
bG9uZyBzZWVkOworICAgICAgICBib29sIHN0aXRjaFRpbGVzOworICAgICAgICBJbnRTaXplIHBh
aW50aW5nU2l6ZTsKKworICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6
ZSArIDJdOworICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUgKyAyXVsy
XTsKKyAgICB9OworCisgICAgc3RydWN0IFN0aXRjaERhdGEgeworICAgICAgICBpbnQgd2lkdGgg
eyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KKyAg
ICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCisgICAgICAg
IGludCBoZWlnaHQgeyAwIH07CisgICAgICAgIGludCB3cmFwWSB7IDAgfTsKKyAgICB9OworCisg
ICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7CisgICAgICAgIEludFJlY3QgZmlsdGVyUmVnaW9u
OworICAgICAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGU7CisgICAgICAgIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBwaXhlbEFycmF5OworICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKKyAg
ICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOworICAgICAgICBpbnQgc3RhcnRZOworICAgICAg
ICBpbnQgZW5kWTsKKyAgICB9OworCisgICAgc3RhdGljIGlubGluZSBmbG9hdCBzbW9vdGhDdXJ2
ZShmbG9hdCB0KSB7IHJldHVybiB0ICogdCAqICgzIC0gMiAqIHQpOyB9CisgICAgc3RhdGljIGlu
bGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIp
IHsgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsgfQorCisgICAgc3RhdGljIFBhaW50aW5nRGF0YSBp
bml0UGFpbnRpbmdEYXRhKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxv
YXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25nIHNlZWQsIGJvb2wgc3RpdGNo
VGlsZXMsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSk7CisgICAgc3RhdGljIFN0aXRjaERh
dGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSwgYm9vbCBzdGl0Y2hUaWxlcyk7CisKKyAgICBzdGF0
aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYs
IGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3Rvcik7CisgICAg
c3RhdGljIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25l
bnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cyk7Cisg
ICAgc3RhdGljIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxjdWxhdGVUdXJidWxlbmNl
VmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBjb25zdCBGbG9h
dFBvaW50Jik7CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJ
bnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4
Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRh
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybVdv
cmtlcihBcHBseVBhcmFtZXRlcnMqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNv
bnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEm
KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2Fy
ZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjIzNThk
ZjU5MDNhMzA0MjYzNWRkODIzNGNhYTViNWZmYjg3ZDE3MQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxw
aGFTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJD
b2xvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlNvdXJjZUFs
cGhhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTb3VyY2VBbHBoYVNvZnR3YXJl
QXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5n
ZXQoKTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRmxvYXRSZWN0IGlt
YWdlUmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KTsKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpOworCisgICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpi
bGFjayk7CisgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBJ
bnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNv
ZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmODYw
MzUzYTU3MDgyMTAwOTk3ZDA0NGVhNTIyM2YzYWRiYzg5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFs
cGhhU29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTb3VyY2VBbHBoYTsKKworY2xhc3MgU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPFNvdXJjZUFscGhhPiB7CisgICAgdXNp
bmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxTb3VyY2VBbHBoYT47CisKK3B1
YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0
ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZUFw
cGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDUxZGMz
YjEzZjcwYWZiNWUxYjcwOTdiMmUyZDhiYmZkNWM5Y2RmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFw
aGljU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJTb3Vy
Y2VHcmFwaGljLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTb3VyY2VHcmFwaGlj
U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJikKK3sKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VC
dWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdl
KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpz
b3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFw
aGljU29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjE5OWFiN2YxNWEzODhjMTNlYjA2ODNj
YTlmNWYxYzNhOTQzMWMzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
ci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxleCBNYXRo
ZXdzIDxwb3NzZXNzZWRwZW5ndWluYm9iQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
b3VyY2VHcmFwaGljOworCitjbGFzcyBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyIDogcHVi
bGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxTb3VyY2VHcmFwaGljPiB7CisgICAgdXNp
bmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxTb3VyY2VHcmFwaGljPjsKKwor
cHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0Zp
bHRlci5jcHAKaW5kZXggYzJmNGE2MjgxNzk5MzdlZmQzYmM1ODQ4MDAxOWQzN2ZiZWRlYzZmYS4u
M2MzZjVjMTU1YTU2YzA3OTE4OWEzMzhmZWJhMWU1NzgyN2Y3MzFlMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgQ1NTRmlsdGVyOjpDU1NG
aWx0ZXIoYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNo
b3VsZEJlUmUKIHN0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KGNv
bnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRlckNvbnN1bWVyIGNv
bnN1bWVyKQogewogICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgo
Ymx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7Ci0gICAgcmV0dXJuIEZFR2F1c3NpYW5C
bHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRl
ckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBM
SUNBVEUpOworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwg
c3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkg
PyBFZGdlTW9kZVR5cGU6Ok5vbmUgOiBFZGdlTW9kZVR5cGU6OkR1cGxpY2F0ZSk7CiB9CiAKIHN0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudC5jcHAKaW5kZXggMWE4MTM0YTljOGI3ZmMwYTUwNzVlZGU4MWEwZDM2OTcwZTk4YzQ3Zi4u
NDhjOTBiMjA0N2MyNDA1YjA2ODMwNDE1N2M1YmIxZWY4MzliN2Y3YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCkBAIC03OSw3ICs3
OSw3IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1l
czo6ZWRnZU1vZGVBdHRyKSB7CiAgICAgICAgIEVkZ2VNb2RlVHlwZSBwcm9wZXJ0eVZhbHVlID0g
U1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7Ci0gICAg
ICAgIGlmIChwcm9wZXJ0eVZhbHVlID4gMCkKKyAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgIT0g
RWRnZU1vZGVUeXBlOjpVbmtub3duKQogICAgICAgICAgICAgbV9lZGdlTW9kZS0+c2V0QmFzZVZh
bEludGVybmFsPEVkZ2VNb2RlVHlwZT4ocHJvcGVydHlWYWx1ZSk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmco
ImZlQ29udm9sdmVNYXRyaXg6IHByb2JsZW0gcGFyc2luZyBlZGdlTW9kZT1cIiIgKyB2YWx1ZSAr
ICJcIi4gRmlsdGVyZWQgZWxlbWVudCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCmluZGV4IDFiNmJi
ZTQ4NzEyNzVjNDIxYzhkZDQ0MDljMWI0ODk3Mjk1YWExMGEuLjM5NjcwZmU2MmZmYmU2YWJhMWNj
YzYyNDc5NDA0NWRmYjZjMmM1YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudC5oCkBAIC0yNywxOSArMjcsMTkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB0ZW1wbGF0ZTw+CiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBl
PiB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBFREdF
TU9ERV9OT05FOyB9Ci0gICAgc3RhdGljIEVkZ2VNb2RlVHlwZSBpbml0aWFsVmFsdWUoKSB7IHJl
dHVybiBFREdFTU9ERV9OT05FOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFs
dWUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRWRnZU1vZGVUeXBlOjpOb25lKTsg
fQorICAgIHN0YXRpYyBFZGdlTW9kZVR5cGUgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gRWRnZU1v
ZGVUeXBlOjpOb25lOyB9CiAKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKEVkZ2VNb2RlVHlw
ZSB0eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRURH
RU1PREVfVU5LTk9XTjoKKyAgICAgICAgY2FzZSBFZGdlTW9kZVR5cGU6OlVua25vd246CiAgICAg
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgY2FzZSBFREdFTU9ERV9EVVBM
SUNBVEU6CisgICAgICAgIGNhc2UgRWRnZU1vZGVUeXBlOjpEdXBsaWNhdGU6CiAgICAgICAgICAg
ICByZXR1cm4gImR1cGxpY2F0ZSJfczsKLSAgICAgICAgY2FzZSBFREdFTU9ERV9XUkFQOgorICAg
ICAgICBjYXNlIEVkZ2VNb2RlVHlwZTo6V3JhcDoKICAgICAgICAgICAgIHJldHVybiAid3JhcCJf
czsKLSAgICAgICAgY2FzZSBFREdFTU9ERV9OT05FOgorICAgICAgICBjYXNlIEVkZ2VNb2RlVHlw
ZTo6Tm9uZToKICAgICAgICAgICAgIHJldHVybiAibm9uZSJfczsKICAgICAgICAgfQogCkBAIC01
MCwxMiArNTAsMTIgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPEVkZ2VNb2RlVHlwZT4gewog
ICAgIHN0YXRpYyBFZGdlTW9kZVR5cGUgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJkdXBsaWNhdGUiKQotICAgICAgICAgICAgcmV0
dXJuIEVER0VNT0RFX0RVUExJQ0FURTsKKyAgICAgICAgICAgIHJldHVybiBFZGdlTW9kZVR5cGU6
OkR1cGxpY2F0ZTsKICAgICAgICAgaWYgKHZhbHVlID09ICJ3cmFwIikKLSAgICAgICAgICAgIHJl
dHVybiBFREdFTU9ERV9XUkFQOworICAgICAgICAgICAgcmV0dXJuIEVkZ2VNb2RlVHlwZTo6V3Jh
cDsKICAgICAgICAgaWYgKHZhbHVlID09ICJub25lIikKLSAgICAgICAgICAgIHJldHVybiBFREdF
TU9ERV9OT05FOwotICAgICAgICByZXR1cm4gRURHRU1PREVfVU5LTk9XTjsKKyAgICAgICAgICAg
IHJldHVybiBFZGdlTW9kZVR5cGU6Ok5vbmU7CisgICAgICAgIHJldHVybiBFZGdlTW9kZVR5cGU6
OlVua25vd247CiAgICAgfQogfTsKIApAQCAtMTE0LDcgKzExNCw3IEBAIHByaXZhdGU6CiAgICAg
UmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2JpYXMgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRl
KHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4gbV90YXJnZXRYIHsgU1ZHQW5p
bWF0ZWRJbnRlZ2VyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRJbnRlZ2Vy
PiBtX3RhcmdldFkgeyBTVkdBbmltYXRlZEludGVnZXI6OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJl
ZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX2VkZ2VNb2RlIHsgU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIEVER0VNT0RFX0RVUExJQ0FURSkgfTsKKyAgICBSZWY8U1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbj4gbV9lZGdlTW9kZSB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNy
ZWF0ZSh0aGlzLCBFZGdlTW9kZVR5cGU6OkR1cGxpY2F0ZSkgfTsKICAgICBSZWY8U1ZHQW5pbWF0
ZWROdW1iZXI+IG1fa2VybmVsVW5pdExlbmd0aFggeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRl
KHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2tlcm5lbFVuaXRMZW5ndGhZ
IHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRl
ZEJvb2xlYW4+IG1fcHJlc2VydmVBbHBoYSB7IFNWR0FuaW1hdGVkQm9vbGVhbjo6Y3JlYXRlKHRo
aXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
Y3BwCmluZGV4IGYxZTZiZjQ5YTRkYjNkY2E3NzVjOWI3ZWZhNWRiOWRjODY5ODg3MmEuLmEwOTA0
ZmI1MjcxYTA4NmM2NTRlNzk2ZTRjMjU1NThjYTdjMDEwODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHZv
aWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBCiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6ZWRnZU1v
ZGVBdHRyKSB7CiAgICAgICAgIGF1dG8gcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRz
PEVkZ2VNb2RlVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOwotICAgICAgICBpZiAocHJvcGVydHlW
YWx1ZSA+IDApCisgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlICE9IEVkZ2VNb2RlVHlwZTo6VW5r
bm93bikKICAgICAgICAgICAgIG1fZWRnZU1vZGUtPnNldEJhc2VWYWxJbnRlcm5hbDxFZGdlTW9k
ZVR5cGU+KHByb3BlcnR5VmFsdWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKCJmZUdhdXNzaWFuQmx1cjog
cHJvYmxlbSBwYXJzaW5nIGVkZ2VNb2RlPVwiIiArIHZhbHVlICsgIlwiLiBGaWx0ZXJlZCBlbGVt
ZW50IHdpbGwgbm90IGJlIGRpc3BsYXllZC4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRleCBmNDBlYjMzNzc4YzQzZGY2MWVlNTg5NjNlZWNm
OWVjZGJhNTQ5Y2MxLi40ODAzMjJmZjcwNzU4NDQyOTY5NWI0OTdhZTY2NDVlZDA5YmY4YzFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCkBAIC01
OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7
IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fc3RkRGV2aWF0aW9uWCB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fc3RkRGV2aWF0aW9uWSB7IFNWR0FuaW1h
dGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bj4gbV9lZGdlTW9kZSB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBFREdF
TU9ERV9OT05FKSB9OworICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX2VkZ2VNb2Rl
IHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEVkZ2VNb2RlVHlwZTo6Tm9u
ZSkgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAppbmRleCA4YjA1NjBjNGRhODAwMzk3MDE0OGUx
ZTE1ZTJmMzA5N2I5MTUzMTU2Li4wMWNjYTQ4NjhiMmU5ZDNiNmM2ZmRkMDdkNzdkYzcxNTcwMzhh
OWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3Bw
CkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvCiB7CiAgICAgaWYgKG5h
bWUgPT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikgewogICAgICAgICBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHByb3BlcnR5VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlPjo6ZnJvbVN0cmluZyh2YWx1ZSk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID4g
MCkKKyAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgIT0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6
VW5rbm93bikKICAgICAgICAgICAgIG1fc3ZnT3BlcmF0b3ItPnNldEJhc2VWYWxJbnRlcm5hbDxN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlPihwcm9wZXJ0eVZhbHVlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCmluZGV4
IGIyMWI2ZjVjNDdiNzg1ZGYyOGYwMTNlZGU1NDAxYzg2NmQ0MGU5ZGQuLmNhYmYwNTgwYzI1MzRk
ZWI0NTE2ODkxYmE1MjlhN2VhMDYxZGZhNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaApAQCAtMjcsMTYgKzI3LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdGVtcGxhdGU8Pgogc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPE1vcnBob2xvZ3lPcGVy
YXRvclR5cGU+IHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGlnaGVzdEVudW1WYWx1ZSgpIHsgcmV0
dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQg
aGlnaGVzdEVudW1WYWx1ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlOjpEaWxhdGUpOyB9CiAKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5n
KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlw
ZSkgewotICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOOgorICAgICAg
ICBjYXNlIE1vcnBob2xvZ3lPcGVyYXRvclR5cGU6OlVua25vd246CiAgICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJP
REU6CisgICAgICAgIGNhc2UgTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6RXJvZGU6CiAgICAgICAg
ICAgICByZXR1cm4gImVyb2RlIl9zOwotICAgICAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRP
Ul9ESUxBVEU6CisgICAgICAgIGNhc2UgTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6RGlsYXRlOgog
ICAgICAgICAgICAgcmV0dXJuICJkaWxhdGUiX3M7CiAgICAgICAgIH0KIApAQCAtNDcsMTAgKzQ3
LDEwIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7
CiAgICAgc3RhdGljIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgZnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJlcm9kZSIpCi0gICAgICAg
ICAgICByZXR1cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFOworICAgICAgICAgICAgcmV0
dXJuIE1vcnBob2xvZ3lPcGVyYXRvclR5cGU6OkVyb2RlOwogICAgICAgICBpZiAodmFsdWUgPT0g
ImRpbGF0ZSIpCi0gICAgICAgICAgICByZXR1cm4gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFU
RTsKLSAgICAgICAgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dOOworICAgICAg
ICAgICAgcmV0dXJuIE1vcnBob2xvZ3lPcGVyYXRvclR5cGU6OkRpbGF0ZTsKKyAgICAgICAgcmV0
dXJuIE1vcnBob2xvZ3lPcGVyYXRvclR5cGU6OlVua25vd247CiAgICAgfQogfTsKIApAQCAtODUs
NyArODUsNyBAQCBwcml2YXRlOgogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdB
bmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNWR0FuaW1hdGVkRW51bWVy
YXRpb24+IG1fc3ZnT3BlcmF0b3IgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhp
cywgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKSB9OworICAgIFJlZjxTVkdBbmltYXRlZEVu
dW1lcmF0aW9uPiBtX3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGU6OkVyb2RlKSB9OwogICAgIFJlZjxTVkdBbmlt
YXRlZE51bWJlcj4gbV9yYWRpdXNYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9
OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9yYWRpdXNZIHsgU1ZHQW5pbWF0ZWROdW1i
ZXI6OmNyZWF0ZSh0aGlzKSB9OwogfTsK
</data>
<flag name="commit-queue"
          id="470208"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445082</attachid>
            <date>2021-11-24 01:54:20 -0800</date>
            <delta_ts>2021-11-24 03:41:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232833-20211124015419.patch</filename>
            <type>text/plain</type>
            <size>390670</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmRhMzRiNjJjODRmOGU3
YmMyMDk4ZjJmNGQyYjI5ZjUzZjFkZTcxNy4uOWU3MzQ2MTYzZjljNGJmZDI1MTZhNjMzM2IyZGRl
ZjZjZjgzMDg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyNyBAQAorMjAyMS0xMS0yMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1vdmUgdGhlIHNvZnR3YXJlIEZpbHRlckVmZmVjdEFwcGxpZXJzIHRvIHNlcGFyYXRlIGZpbGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI4MzMK
KyAgICAgICAgcmRhcjovLzg1NDI0MjI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB0aGUgdGhlIHNvZnR3YXJlIEZpbHRl
ckVmZmVjdEFwcGxpZXJzIHRvIHNlcGFyYXRlIHNvdXJjZQorICAgICAgICBhbmQgaGVhZGVyIGZp
bGVzLiBUaGVyZSBpcyBubyBjaGFuZ2UgaW4gdGhlIGFwcGxpZXJzIGNvZGUuCisKKyAgICAgICAg
QnV0IEVkZ2VNb2RlVHlwZSBhbmQgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBoYXZlIHRvIGNoYW5n
ZWQgdG8gYmUgZW51bQorICAgICAgICBjbGFzc2VzIHNvIHRoZXkgY2FuIGJlIGZvcndhcmRlZCBk
ZWNsYXJlZCBpbiB0aGUgYXBwbGllcnMnIGhlYWRlciBmaWxlcy4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZFNvZnR3YXJlQXBwbGll
cjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
OjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0
ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFj
Y2VsZXJhdGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlSWRlbnRpdHlUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyOjpjb21wdXRlVGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVEaXNjcmV0ZVRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXI6OmNvbXB1dGVMaW5lYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlR2FtbWFUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyOjpjb21wdXRlTG9va3VwVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyOjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZVNvZnR3YXJlQXBwbGllcjo6Y2xhbXBCeXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjph
cHBseUFyaXRobWV0aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGVT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5Tm9uQXJpdGhtZXRpYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpjbGFtcFJHQkFWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBp
eGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNl
dE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJp
eC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGln
aHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyOjpieXRlT2Zmc2V0T2ZQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6eENoYW5uZWxJbmRleCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cjo6eUNoYW5uZWxJbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFw
cGxpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93U29mdHdhcmVBcHBsaWVyOjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZFNvZnR3
YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyU29mdHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGll
cjo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNv
ZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyVW5hY2NlbGVyYXRl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1ckdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBo
YVdpbmRvdzo6bGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdp
bmRvdzo6dG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpjZW50ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJv
dHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0VG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRDZW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxw
aGFXaW5kb3c6OnNldEJvdHRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0VG9wUmlnaHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6
OnNldFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdodCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2hpZnRS
b3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6QWxwaGFXaW5kb3c6OnNoaWZ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0Rh
dGE6OmludGVyaW9yTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6
Ym90dG9tUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6c2V0UGl4ZWxJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm1HZW5lcmljV29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlU29mdHdhcmVBcHBsaWVyOjphcHBseSk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1ha2VQaXhlbFZhbHVlRnJv
bUNvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3lTb2Z0d2FyZUFwcGxpZXI6Om1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1p
bk9yTWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJl
QXBwbGllcjo6Y29sdW1uRXh0cmVtdW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjprZXJuZWxFeHRyZW11bSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1H
ZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
aDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldFNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpQYWludGluZ0RhdGE6
OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmxpbmVhckludGVy
cG9sYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdh
cmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVN0aXRjaGluZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
Ojp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9y
UG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBs
eVBsYXRmb3JtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3
YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3RBcHBsaWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhp
Y1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmVB
cHBsaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0
d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQ
bGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGll
cjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmguCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVB
cHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1
dGVUYWJ1bGFyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlQXBwbGllcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxpbmVhclRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVMb29rdXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVB
cHBsaWVyOjpjbGFtcEJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2Fy
ZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQ
bGF0Zm9ybUFyaXRobWV0aWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5QXJpdGhtZXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0aG1ldGljKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29u
dm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6
c2V0RGVzdGluYXRpb25QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllcjo6Z2V0UGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRJbnRlcmlvclBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRPdXRlclBpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVu
dE1hcFNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OkZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29m
dHdhcmVBcHBsaWVyOjp4Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNl
bWVudE1hcFNvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmguCisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6Ynl0ZU9mZnNldE9mUGl4ZWwpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdh
cmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93U29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdh
cmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kU29mdHdhcmVB
cHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29m
dHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cik6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hC
bHVyVW5hY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3
YXJlQXBwbGllcjo6Ym94Qmx1ckdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdh
cmVBcHBsaWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRv
cExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1h
bCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1h
bCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OnNl
dFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2Vu
ZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBs
eVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6bGVm
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpB
bHBoYVdpbmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6dG9wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpjZW50ZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFX
aW5kb3c6OmJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRDZW50ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldEJvdHRv
bSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdp
bmRvdzo6c2V0VG9wUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2hp
ZnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxw
aGFXaW5kb3c6OnNoaWZ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6RkVNZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlQXBwbGllci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhv
bG9neVNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11bSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbEV4dHJlbXVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1v
cnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6cGl4ZWxB
cnJheUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhl
bFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
T2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpG
RU9mZnNldFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2Fy
ZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VT
b2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVTdGl0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpub2lzZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdEYXRhOjpyYW5kb20pOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpzbW9vdGhDdXJ2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmxpbmVhckludGVycG9sYXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxw
aGFTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUFscGhhU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3Vy
Y2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oLgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8
RWRnZU1vZGVUeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxFZGdlTW9kZVR5cGU+Ojppbml0aWFsVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPjo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPjo6ZnJvbVN0cmluZyk6
CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAg
ICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZy
b21TdHJpbmcpOgorCiAyMDIxLTExLTIzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gTW92ZSB0aGUgc29mdHdhcmUgRmlsdGVyRWZm
ZWN0IGZ1bmN0aW9ucyB0byBzZXBhcmF0ZSBhcHBsaWVyIGNsYXNzZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggMGVlMGJlMzAzZDJhNzI1ZjUxNjAzZTEzMWY2ZTIxZWMyODU1NmZjZi4uNjdkNjdi
YzZiZGYxNDQzMzc4YzgwNTk1OTQ0NWQ5MDliNjMyNDg5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
QEAgLTE0MSw2ICsxNDEsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJz
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMiCisgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2lzbyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDgxMzcyZTk5MTNkZjJhNTYyOWNm
MTE0ZmZhNmI4Zjk0MDg3YTJlOGMuLmI2ZWMxNDQ5YTg0OWNkYjRmOWIxNjY3MTc4NzYyYzc4NDhi
ZjEyNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTEwLDYgKzIxMTAsMjMgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmVBcHBsaWVy
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxp
ZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVP
ZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Cb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pc28vSVNPT3JpZ2luYWxGb3JtYXRCb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNP
UHJvdGVjdGlvblNjaGVtZUluZm9Cb3guY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjg2YzkzNDliMTIyMTk3OWM4OTk2OWQx
YjFiMDk2MjE0MDAwM2MwYS4uMGFjYTdjMzJjNDU2OGI0M2U0YjkwMWJkYmQ3MmM1ZjVhMGJmY2Qz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTA4OTcsNiArMTA4OTcsNDAgQEAKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgz
IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyogUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkExM0E5RjI3
NEM1Q0M3MDBFMkE4OEUgLyogRmlsdGVyRWZmZWN0QXBwbGllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
aWx0ZXJFZmZlY3RBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEz
QUI2Mjc0RENFREMwMEUyQTg4RSAvKiBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FCNzI3NERDRURDMDBFMkE4OEUgLyogRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUI4
Mjc0RERFQzAwMEUyQTg4RSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FCOTI3NERERUMwMDBFMkE4
OEUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTEzQUJBMjc0REUwMTIwMEUyQTg4RSAvKiBGRUNvbXBvc2l0ZVNvZnR3
YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBw
bGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUJCMjc0REUwMTIw
MEUyQTg4RSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
RUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkExM0FCRTI3NERFMzNGMDBFMkE4OEUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBw
bGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBs
aWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQkYyNzRERTMzRjAw
RTJBODhFIC8qIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkExM0FDMDI3NERFMzU5MDBFMkE4OEUgLyogRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FD
MTI3NERFMzU5MDBFMkE4OEUgLyogRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQzIyNzRERTM4NzAwRTJBODhFIC8qIEZFRHJv
cFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRURyb3BTaGFk
b3dTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkEx
M0FDMzI3NERFMzg3MDBFMkE4OEUgLyogRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkExM0FDNDI3NERFMzlFMDBFMkE4OEUgLyogRkVGbG9vZFNvZnR3
YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUZsb29kU29mdHdhcmVBcHBsaWVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQzUyNzRERTM5RTAwRTJB
ODhFIC8qIEZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVGbG9vZFNv
ZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDNjI3
NERFM0I3MDBFMkE4OEUgLyogRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDNzI3NERFM0I3MDBFMkE4OEUgLyogRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJT
b2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQzgy
NzRERTNEMTAwRTJBODhFIC8qIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTEzQUM5Mjc0REUzRDEwMEUyQTg4RSAvKiBGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQ0EyNzRERTNFNTAwRTJBODhF
IC8qIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVNZXJn
ZVNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEz
QUNCMjc0REUzRTUwMEUyQTg4RSAvKiBGRU1lcmdlU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJBMTNBQ0MyNzRERTQzNzAwRTJBODhFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBw
bGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDRDI3NERFNDM3MDBFMkE4
OEUgLyogRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFTW9y
cGhvbG9neVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkExM0FDRTI3NERFNDZDMDBFMkE4OEUgLyogRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDRjI3NERFNDZDMDBFMkE4OEUgLyogRkVPZmZzZXRT
b2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBRDAyNzRERTQ4OTAwRTJBODhF
IC8qIEZFVGlsZVNvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVT
b2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FE
MTI3NERFNDg5MDBFMkE4OEUgLyogRkVUaWxlU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFVGlsZVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkExM0FEMjI3NERFNTE4MDBFMkE4OEUgLyogRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUQzMjc0REU1MTgwMEUyQTg4RSAv
KiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEz
QUQ0Mjc0REU1NEUwMEUyQTg4RSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUQ1Mjc0REU1NEUwMEUyQTg4RSAvKiBTb3VyY2VB
bHBoYVNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VBbHBoYVNvZnR3YXJl
QXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FENjI3NERFNTc4
MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBMTNBRDcyNzRERTU3ODAwRTJBODhFIC8qIFNvdXJjZUdyYXBoaWNT
b2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlR3JhcGhpY1NvZnR3YXJlQXBw
bGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkI0RUY3NDI3NEUyMzMzMDAy
OTNDMkYgLyogRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUJsZW5k
U29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjRFRjc1
Mjc0RTIzMzQwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkJBQzNBNDIzRTE3MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E1MjNFMTczMjgw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzODMyLDYgKzIzODY2LDQ3IEBACiAJCQlwYXRo
ID0gIm1vZGVsLWVsZW1lbnQiOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJ
NzJBMTNBQjQyNzREQ0VBMzAwRTJBODhFIC8qIHNvZnR3YXJlICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MkI0RUY3NTI3NEUyMzM0MDAyOTNDMkYgLyog
RkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJCNEVGNzQyNzRFMjMzMzAwMjkz
QzJGIC8qIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaCAqLywKKwkJCQk3MkExM0FCNjI3NERDRURD
MDBFMkE4OEUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJB
MTNBQjcyNzREQ0VEQzAwRTJBODhFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaCAq
LywKKwkJCQk3MkExM0FCODI3NERERUMwMDBFMkE4OEUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBQjkyNzREREVDMDAwRTJBODhFIC8qIEZF
Q29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuaCAqLywKKwkJCQk3MkExM0FCQTI3NERF
MDEyMDBFMkE4OEUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcy
QTEzQUJCMjc0REUwMTIwMEUyQTg4RSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oICov
LAorCQkJCTcyQTEzQUJFMjc0REUzM0YwMEUyQTg4RSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FCRjI3NERFMzNGMDBFMkE4OEUgLyogRkVDb252
b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUMwMjc0REUzNTkwMEUy
QTg4RSAvKiBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJB
MTNBQzEyNzRERTM1OTAwRTJBODhFIC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
LmggKi8sCisJCQkJNzJBMTNBQzIyNzRERTM4NzAwRTJBODhFIC8qIEZFRHJvcFNoYWRvd1NvZnR3
YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBQzMyNzRERTM4NzAwRTJBODhFIC8qIEZFRHJv
cFNoYWRvd1NvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUM0Mjc0REUzOUUwMEUyQTg4
RSAvKiBGRUZsb29kU29mdHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FDNTI3NERFMzlF
MDBFMkE4OEUgLyogRkVGbG9vZFNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUM2Mjc0
REUzQjcwMEUyQTg4RSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJ
CQkJNzJBMTNBQzcyNzRERTNCNzAwRTJBODhFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBs
aWVyLmggKi8sCisJCQkJNzJBMTNBQzgyNzRERTNEMTAwRTJBODhFIC8qIEZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUM5Mjc0REUzRDEwMEUyQTg4RSAvKiBGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBQ0EyNzRERTNFNTAwRTJBODhF
IC8qIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUNCMjc0REUzRTUw
MEUyQTg4RSAvKiBGRU1lcmdlU29mdHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBQ0MyNzRE
RTQzNzAwRTJBODhFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJ
NzJBMTNBQ0QyNzRERTQzNzAwRTJBODhFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5o
ICovLAorCQkJCTcyQTEzQUNFMjc0REU0NkMwMEUyQTg4RSAvKiBGRU9mZnNldFNvZnR3YXJlQXBw
bGllci5jcHAgKi8sCisJCQkJNzJBMTNBQ0YyNzRERTQ2QzAwRTJBODhFIC8qIEZFT2Zmc2V0U29m
dHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBRDAyNzRERTQ4OTAwRTJBODhFIC8qIEZFVGls
ZVNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBRDEyNzRERTQ4OTAwRTJBODhFIC8q
IEZFVGlsZVNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUQyMjc0REU1MTgwMEUyQTg4
RSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUQzMjc0
REU1MTgwMEUyQTg4RSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAqLywKKwkJCQk3
MkExM0FENDI3NERFNTRFMDBFMkE4OEUgLyogU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuY3Bw
ICovLAorCQkJCTcyQTEzQUQ1Mjc0REU1NEUwMEUyQTg4RSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJl
QXBwbGllci5oICovLAorCQkJCTcyQTEzQUQ2Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VHcmFw
aGljU29mdHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FENzI3NERFNTc4MDBFMkE4OEUg
LyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBz
b2Z0d2FyZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdDMDExRjNDMjRG
QUQzNjAwMDVCRUYxMCAvKiBTZXR0aW5nc1RlbXBsYXRlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTkwNCw2ICsyNTk3OSw3IEBACiAJCUE3NUU4QjdG
MEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3MkExM0FCNDI3NERDRUEzMDBFMkE4OEUgLyogc29mdHdhcmUg
Ki8sCiAJCQkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhDIC8qIERpc3RhbnRMaWdodFNvdXJjZS5j
cHAgKi8sCiAJCQkJODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJj
ZS5oICovLAogCQkJCUE3NUU4QjgwMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUJsZW5kLmNwcCAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuY3BwCmluZGV4IGQyY2FiYmE5Zjg2YWIzMzIwZWMyM2UwNWQ3ZmE1N2FhM2E0ZDQyYjguLjI5
ZGNiMGZiZjRmMWEwOTE2MzBjMjAwMDcxNDQxNjUwNTJhMmJkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtNSw2
ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIElu
Y29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
NiwxMCArMjcsNyBAQAogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAogI2luY2x1ZGUgIkZFQmxlbmRO
RU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorI2luY2x1ZGUgIkZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUzLDM4ICs1
MSw2IEBAIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQogICAgIHJl
dHVybiB0cnVlOwogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVCbGVuZFNvZnR3YXJl
QXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIEZFQmxl
bmRTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
QmxlbmQ+IHsKLSAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
QmxlbmQ+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBw
bHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMp
IG92ZXJyaWRlOwotfTsKLQotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi1ib29sIEZF
QmxlbmRTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdHNbMF0uZ2V0KCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNb
MV0uZ2V0KCk7Ci0KLSAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgYXV0
byBpbWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFn
ZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBH
cmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwot
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0
LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5k
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0s
IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJj
ZU92ZXIsIG1fZWZmZWN0LmJsZW5kTW9kZSgpIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotI2Vu
ZGlmCi0KIGJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogewogICAgIHJldHVybiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBs
eShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKaW5kZXggMzM2OTNjMTk5N2JiYTdiYmRlODg5
MDU4N2IxNTZlZWUzMzc2YzVjZC4uNDdjZjg1ZTk4OTVhNzBmNDM0NjFlMTBjMjQzMmRjZmE3ZDBh
NGU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMg
SW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTM4LDggKzM5LDcgQEAgcHJpdmF0ZToKICAgICBGRUJsZW5kKEJsZW5kTW9kZSk7CiAKICAgICBi
b29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1
bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJh
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgp
OworCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFy
cmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBp
eGVsQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5
TGVuZ3RoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggMTAyMzdiYTlkY2MyNDFmZGUxNGYz
MTIzZGM2NDg2M2IyMjZiZGYzNS4uZDY4NWExNDUwYjQ3NTMyMjVhNzI5MzIxMGFlYzk2MDgzOGQ2
MWQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MywxNyArMjQsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRy
aXguaCIKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRl
Lmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWY8RkVDb2xvck1hdHJpeD4g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+
JiYgdmFsdWVzKQpAQCAtMTAwLDI3OSArOTMsNiBAQCBWZWN0b3I8ZmxvYXQ+IEZFQ29sb3JNYXRy
aXg6Om5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQogICAgIHJl
dHVybiBub3JtYWxpemVkVmFsdWVzOwogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBm
aWxlcy4KLWNsYXNzIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29sb3JNYXRyaXg+IHsKLSAgICB1c2luZyBCYXNlID0g
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29sb3JNYXRyaXg+OwotCi1wdWJsaWM6Ci0g
ICAgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcihGRUNvbG9yTWF0cml4Jik7Ci0KLSAgICBi
b29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgdm9pZCBtYXRyaXgoZmxv
YXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsK
LSAgICBpbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlKSBjb25zdDsKLSAgICBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxv
YXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHZvaWQgYXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVk
KFBpeGVsQnVmZmVyJikgY29uc3Q7Ci0jZW5kaWYKLSAgICB2b2lkIGFwcGx5UGxhdGZvcm1VbmFj
Y2VsZXJhdGVkKFBpeGVsQnVmZmVyJikgY29uc3Q7Ci0KLSAgICB2b2lkIGFwcGx5UGxhdGZvcm0o
UGl4ZWxCdWZmZXImKSBjb25zdDsKLQotICAgIGZsb2F0IG1fY29tcG9uZW50c1s5XTsKLX07Ci0K
LUZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXIoRkVDb2xvck1hdHJpeCYgZWZmZWN0KQotICAgIDogQmFzZShlZmZlY3QpCi17Ci0gICAgaWYg
KG1fZWZmZWN0LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCi0gICAgICAg
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMs
IG1fZWZmZWN0LnZhbHVlcygpWzBdKTsKLSAgICBlbHNlIGlmIChtX2VmZmVjdC50eXBlKCkgPT0g
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2Fs
Y3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1fZWZmZWN0LnZhbHVlcygp
WzBdKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6bWF0
cml4KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkg
Y29uc3QKLXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAgICBm
bG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxwaGE7Ci0KLSAgICBjb25zdCBhdXRvJiB2
YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKLQotICAgIHJlZCAgID0gdmFsdWVzWyAwXSAqIHIg
KyB2YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1
ZXNbIDRdICogMjU1OwotICAgIGdyZWVuID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICog
ZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1Owot
ICAgIGJsdWUgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFdICogZyArIHZhbHVlc1sxMl0g
KiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1OwotICAgIGFscGhhID0gdmFs
dWVzWzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4
XSAqIGEgKyB2YWx1ZXNbMTldICogMjU1OwotfQotCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlKSBjb25zdAotewotICAgIGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxv
YXQgZyA9IGdyZWVuOwotICAgIGZsb2F0IGIgPSBibHVlOwotCi0gICAgcmVkICAgICA9IHIgKiBt
X2NvbXBvbmVudHNbMF0gKyBnICogbV9jb21wb25lbnRzWzFdICsgYiAqIG1fY29tcG9uZW50c1sy
XTsKLSAgICBncmVlbiAgID0gciAqIG1fY29tcG9uZW50c1szXSArIGcgKiBtX2NvbXBvbmVudHNb
NF0gKyBiICogbV9jb21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICogbV9jb21wb25lbnRz
WzZdICsgZyAqIG1fY29tcG9uZW50c1s3XSArIGIgKiBtX2NvbXBvbmVudHNbOF07Ci19Ci0KLS8v
IEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENv
bG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
OjpsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQm
IGFscGhhKSBjb25zdAotewotICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsgMC43MTU0ICogZ3Jl
ZW4gKyAwLjA3MjEgKiBibHVlOwotICAgIHJlZCA9IDA7Ci0gICAgZ3JlZW4gPSAwOwotICAgIGJs
dWUgPSAwOwotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi12b2lkIEZFQ29sb3JNYXRyaXhTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxC
dWZmZXIpIGNvbnN0Ci17Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEo
KTsKLSAgICBhdXRvIGJ1ZmZlclNpemUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7Ci0KLSAgICBBU1NF
UlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwotICAgIAot
ICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4
ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGgg
PSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0
KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBzcmMu
ZGF0YSA9IGRhdGE7Ci0gICAgCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBidWZmZXJTaXplLmhl
aWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAg
IGRlc3QuZGF0YSA9IGRhdGE7Ci0KLSAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUoKSkgewotICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIHZh
bHVlcyA9IG1fZWZmZWN0LnZhbHVlcygpOwotCi0gICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4
WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbIDBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAotCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNv
cikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzE2XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sg
OF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAotICAgICAgICB9OwotICAgICAgICB2SW1h
Z2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBu
dWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0
ICogNF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21w
b25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKG1fY29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICAwLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21w
b25lbnRzWzFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKG1fY29tcG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICAwLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21w
b25lbnRzWzJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKG1fY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICAwLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICBkaXZpc29yLAotICAgICAgICB9OwotICAgICAgICB2SW1hZ2VNYXRyaXhN
dWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBu
dWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7Ci0gICAgICAgIGNvbnN0IGlu
dDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigw
LjIxMjUgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcx
NTQgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEg
KiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFnZU1hdHJpeE11
bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51
bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLX0K
LSNlbmRpZgotCi12b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm1VbmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKLXsKLSAgICBh
dXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVs
QXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwotCi0gICAgc3dpdGNoIChtX2VmZmVj
dC50eXBlKCkpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhl
bEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQg
cmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9h
dCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAg
ICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0g
ICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQg
KyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0
IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAg
ICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAg
ICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUpOwotICAgICAg
ICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0
ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAg
ICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKLSAg
ICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCAr
IDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwg
cmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdy
ZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJs
dWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxw
aGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlcikgY29uc3QKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBjb25zdCBhdXRvJiB2YWx1
ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKLQotICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FS
R0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVt
biBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4Ci0gICAgLy8gaXMgbm90IHplcm8sIGZh
bGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCi0gICAgaWYgKG1fZWZmZWN0LnR5cGUoKSAhPSBG
RUNPTE9STUFUUklYX1RZUEVfTUFUUklYIHx8ICghdmFsdWVzWzRdICYmICF2YWx1ZXNbOV0gJiYg
IXZhbHVlc1sxNF0gJiYgIXZhbHVlc1sxOV0pKSB7Ci0gICAgICAgIGFwcGx5UGxhdGZvcm1BY2Nl
bGVyYXRlZChwaXhlbEJ1ZmZlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAg
ICBhcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7Ci19Ci0KLWJvb2wgRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgYXV0byBpbiA9IGlucHV0RWZm
ZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBp
ZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgs
IG1fZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KElu
dFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRv
IHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VS
ZWN0KTsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBKQotICAgICAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0KLSAgICBhcHBs
eVBsYXRmb3JtKCpwaXhlbEJ1ZmZlcik7Ci0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVy
KCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBG
RUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
CiB7CiAgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5
KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCBmNjlmMGIwMWM5
NTA3ZTA1MjZlMGQxNzdlYmJlZjk2OTAwOWNlMWQzLi41NjAxZWIwOTY4N2U4NTdhNjY3NWMxMjg1
MzZlYjA1MThkMjNkMmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMiw2ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5j
cHAKaW5kZXggZGFlMTg5ZWE5ZDc3Y2Y3NDZhYTM0MTZjYjgxNmZlZmYyMTRjZTNhYS4uODZmOWRl
MWYwNDdjZjQxYTNlOWRjNTJkZDU5MmY3ZmEzMjEwYmQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjQsMTIgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBv
bmVudFRyYW5zZmVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDE0MSArNDQsNiBAQCBGRUNvbXBvbmVudFRyYW5zZmVyOjpG
RUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1
bgogewogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNz
IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJhbnNmZXI+IHsKLSAgICB1c2luZyBCYXNlID0g
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJhbnNmZXI+OwotCi1wdWJs
aWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1w
cml2YXRlOgotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+
OwotCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0
ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21w
dXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0KLSAgICBzdGF0aWMgTG9va3VwVGFi
bGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsK
LQotICAgIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0OwotfTsKLQotdm9p
ZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlSWRlbnRpdHlUYWJs
ZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQotewotfQot
Ci12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVUYWJ1bGFy
VGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZh
bHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgbiA9IHRh
YmxlVmFsdWVzLnNpemUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGRv
dWJsZSBjID0gaSAvIDI1NS4wOwotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107
Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0g
MSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0g
aykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1
NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFs
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6
Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAg
dW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAg
IHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAv
IDI1NS4wKTsKLSAgICAgICAgayA9IHN0ZDo6bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91Ymxl
IHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2tdOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAs
IHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3
YXJlQXBwbGllcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3Vi
bGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0
aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUu
MCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7
Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi1GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpMb29rdXBUYWJsZSBGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTG9va3VwVGFibGUoY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pCi17Ci0gICAgTG9va3VwVGFibGUgdGFibGU7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAg
IHRhYmxlW2ldID0gaTsKLQotICAgIHVzaW5nIFRyYW5zZmVyVHlwZSA9IHZvaWQgKCopKExvb2t1
cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIFRyYW5zZmVy
VHlwZSBjYWxsRWZmZWN0W10gPSB7Ci0gICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8v
IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOCi0gICAgICAgIGNvbXB1dGVJZGVudGl0
eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9JREVOVElUWQotICAgICAgICBj
b21wdXRlVGFidWxhclRhYmxlLCAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUK
LSAgICAgICAgY29tcHV0ZURpc2NyZXRlVGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0RJU0NSRVRFCi0gICAgICAgIGNvbXB1dGVMaW5lYXJUYWJsZSwgICAgIC8vIEZFQ09NUE9O
RU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIKLSAgICAgICAgY29tcHV0ZUdhbW1hVGFibGUgICAgICAg
Ly8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BCi0gICAgfTsKLQotICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihmdW5j
dGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIGNhbGxFZmZl
Y3RbZnVuY3Rpb24udHlwZV0odGFibGUsIGZ1bmN0aW9uKTsKLQotICAgIHJldHVybiB0YWJsZTsK
LX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKLXsKLSAgICBhdXRvJiBwaXhlbEFy
cmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgg
PSBwaXhlbEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRh
dGEoKTsKLQotICAgIGF1dG8gcmVkVGFibGUgICA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVj
dC5yZWRGdW5jdGlvbigpKTsKLSAgICBhdXRvIGdyZWVuVGFibGUgPSBjb21wdXRlTG9va3VwVGFi
bGUobV9lZmZlY3QuZ3JlZW5GdW5jdGlvbigpKTsKLSAgICBhdXRvIGJsdWVUYWJsZSAgPSBjb21w
dXRlTG9va3VwVGFibGUobV9lZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIGF1dG8gYWxwaGFU
YWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJh
eUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSAg
ICAgPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZz
ZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAgICAgZGF0
YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07Ci0g
ICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNl
dCArIDNdXTsKLSAgICB9Ci19Ci0KLWJvb2wgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQo
KTsKLSAgICAKLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhl
bEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOwot
ICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYXV0byBkcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQaXhlbEJ1
ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZHJhd2luZ1JlY3QpOwotCi0gICAg
YXBwbHlQbGF0Zm9ybSgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlcik7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGJvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyU29m
dHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggNTE4ZWExMzQ3YTRhZGRiYTRjZDUwMGNiNDJjODEz
NzA2ZGNjZDE5NS4uYzdkMzQ5MzZmMDY2YmFjY2E1NTE4OTdmMGQzYzNmMTRlZWNmZDU0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggMTVhNzEyOTk4ODI5YWNk
OWI0ZDI5NDVhZmRlYmJlNmQ2ODdiN2RiYi4uZWYzN2U0Y2NkODdiOWRlNWQ2Yjk0MTJkMzhjZmNl
MzllMDY1NDQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxMSArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCiAKLSNpbmNsdWRlICJGRUNvbXBvc2l0ZUFyaXRobWV0
aWNORU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MTEwLDIyMSArMTA3LDYgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgfQogfQogCi0vLyBGSVhNRTogTW92ZSB0
aGUgY2xhc3MgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFu
ZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllciA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb21wb3NpdGU+IHsKLSAgICB1c2luZyBC
YXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9zaXRlPjsKLQotcHVibGlj
OgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBzdGF0aWMgdWludDhfdCBjbGFtcEJ5dGUoaW50KTsKLQotICAgIHRlbXBsYXRl
IDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlv
biwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZs
b2F0IGs0KTsKLQotICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQodW5zaWduZWQgY2hhciog
c291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgs
IGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKLQotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBseVBsYXRmb3JtQXJpdGhtZXRpYyh1bnNpZ25lZCBjaGFyKiBzb3VyY2Us
IHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQg
azEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotCi0gICAgYm9vbCBhcHBseUFyaXRo
bWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpOwotICAgIGJvb2wgYXBw
bHlOb25Bcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKTsKLX07
Ci0KLXVpbnQ4X3QgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNsYW1wQnl0ZShpbnQgYykK
LXsKLSAgICB1aW50OF90IGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oYyksIDI1NSwg
MCB9OwotICAgIHVuc2lnbmVkIHVjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOwotICAgIHJl
dHVybiBidWZmWyEhKHVjICYgfjB4ZmYpICsgISEodWMgJiB+KH4wdSA+PiAxKSldOwotfQotCi10
ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+Ci1pbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJl
QXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1
bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsx
LCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwot
ICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChiMSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAv
IDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAgIHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0K
LSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDApIHsKLSAgICAgICAgdW5zaWduZWQg
Y2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRp
b247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEgKyBrMyAqIGkyOwotICAgICAgICBp
ZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAg
ICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRl
c3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7Ci0gICAgICAgICsrc291cmNlOwotICAgICAg
ICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQotLy8gY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNV
bmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyBm
b3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1waW5nCi0vLyBpcyBub3QgbmVjZXNzYXJ5LiBU
aGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgc3VjaCBhcyBhdXRv
LXZlY3Rvcml6YXRpb24uCi10ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+Ci1pbmxpbmUgdm9pZCBG
RUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChi
MSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAg
IHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3Ro
ID49IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsy
ICogaTEgKyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0g
c2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gcmVzdWx0OwotICAgICAgICAr
K3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiAhSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQotaW5saW5lIHZvaWQgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWdu
ZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9hdCB1cHBlckxpbWl0ID0gc3Rk
OjptYXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4wZiwgazIpICsgc3RkOjptYXgoMC4wZiwgazMp
ICsgazQ7Ci0gICAgZmxvYXQgbG93ZXJMaW1pdCA9IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0ZDo6
bWluKDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYsIGszKSArIGs0OwotICAgIGlmICgoazQgPj0g
MC4wZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJMaW1pdCA+PSAwLjBmICYmIHVwcGVyTGltaXQg
PD0gMS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4wZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYpKSB7
Ci0gICAgICAgIGlmIChrNCkgewotICAgICAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgICAg
IGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRp
b24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAxPihz
b3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAgY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwg
cGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNvdXJj
ZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGs0KSB7Ci0gICAgICAgIGlm
IChrMSkKLSAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJjZSwg
ZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMT4oc291cmNlLCBk
ZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
PDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8
MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOwotICAgIH0KLX0KLSNlbmRpZgotCi1ib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
OjphcHBseUFyaXRobWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpCi17
Ci0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJS
ZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7Ci0gICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRS
ZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3VyY2VQaXhl
bEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1
ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
LSAgICBpbjItPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwg
ZWZmZWN0QkRyYXdpbmdSZWN0KTsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3Vy
Y2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIGludCBsZW5ndGggPSBzb3Vy
Y2VQaXhlbEFycmF5Lmxlbmd0aCgpOwotICAgIEFTU0VSVChsZW5ndGggPT0gc3RhdGljX2Nhc3Q8
aW50PihkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCkpKTsKLSAgICBhcHBseVBsYXRmb3Jt
QXJpdGhtZXRpYyhzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5
LmRhdGEoKSwgbGVuZ3RoLCBtX2VmZmVjdC5rMSgpLCBtX2VmZmVjdC5rMigpLCBtX2VmZmVjdC5r
MygpLCBtX2VmZmVjdC5rNCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbXBv
c2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4s
IEZpbHRlckVmZmVjdCogaW4yKQotewotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBhdXRvIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwot
Ci0gICAgc3dpdGNoIChtX2VmZmVjdC5vcGVyYXRpb24oKSkgewotICAgIGNhc2UgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOiB7Ci0gICAgICAgIC8vIEFwcGxpZXMgb25seSB0byB0
aGUgaW50ZXJzZWN0ZWQgcmVnaW9uLgotICAgICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9
IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJz
ZWN0KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QobV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGlmIChkZXN0
aW5hdGlvblJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEludFJl
Y3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBtX2VmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIEludFJlY3Qgc291cmNlUmVj
dCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7
Ci0gICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJ
biB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VC
dWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9z
aXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1
ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbXBvc2l0
ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0c1swXS5nZXQoKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5n
ZXQoKTsKLQotICAgIGlmIChtX2VmZmVjdC5vcGVyYXRpb24oKSA9PSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9BUklUSE1FVElDKQotICAgICAgICByZXR1cm4gYXBwbHlBcml0aG1ldGljKGluLCBpbjIp
OwotICAgIHJldHVybiBhcHBseU5vbkFyaXRobWV0aWMoaW4sIGluMik7Ci19Ci0KIGJvb2wgRkVD
b21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsK
ICAgICByZXR1cm4gRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRl
ciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IGE4NzZhOTVkM2Y3MTkyZDA2MmZm
ODRhM2EwNmUwZTZmMzM3NDY4YjguLmY1ZTQ5NzQwMjY5YzBkNmVmOTlkMDg3MjA0MTFkMzRlZThk
Njc0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDI0NzU5ZjhmMjEx
OWVkMzc4NmIxZDk1MWNmOGRlMDI4NDM1NGE5OWYuLmVjMWY4YTBkNDVlYzg1NmZiZmQyMjc1OTYw
NzQ1MDhkNmQ2OGU5MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtNCw2ICs0LDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDExICsyNiw3IEBACiAjaW5jbHVkZSAiRkVDb252b2x2
ZU1hdHJpeC5oIgogCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdEFwcGxpZXIuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVy
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0xMTcsMzMxICsxMTQsNiBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldFByZXNl
cnZlQWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhhKQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBG
SVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllciB0byBz
ZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIEZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29u
dm9sdmVNYXRyaXg+IHsKLSAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBs
aWVyPEZFQ29udm9sdmVNYXRyaXg+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsK
LQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9y
JiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBQYWludGlu
Z0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsK
LSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3
aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLQotICAgICAgICBJbnRTaXplIGtlcm5lbFNpemU7
Ci0gICAgICAgIGZsb2F0IGRpdmlzb3I7Ci0gICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgICAgIElu
dFBvaW50IHRhcmdldE9mZnNldDsKLSAgICAgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOwotICAg
ICAgICBib29sIHByZXNlcnZlQWxwaGE7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0
cml4OwotICAgIH07Ci0KLSAgICBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2xhbXBSR0JBVmFsdWUo
ZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXggPSAyNTUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4
ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRv
dGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVz
KTsKLQotICAgIHN0YXRpYyBpbmxpbmUgaW50IGdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdE
YXRhJiwgaW50IHgsIGludCB5KTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnRlcmlv
clBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50
IHlTdGFydCwgaW50IHlFbmQpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAg
dm9pZCBhcHBseVBsYXRmb3JtKFBhaW50aW5nRGF0YSYpIGNvbnN0OwotfTsKLQotLyoKLSAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICBDb252b2x2ZU1hdHJpeCBp
bXBsZW1lbnRhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93aW5nIHdheToKLQot
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAgICAgICAgQSAgICAgICAg
ICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCAgIHwgICAgICAgICAg
ICAgfCAgIHwKLSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwgRCB8Ci0gICAgICB8ICAgfCAgICAg
ICAgICAgICB8ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgICAg
ICAgICAgRSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi0gICBX
aGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZhbHVlcwotICAgY2Fu
IGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0aGUgcmVjdGFuZ2xl
LgotCi0gICBFeGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEwLCBoZWlnaHQ6IDEw
Ci0KLSAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDogMywgaGVpZ2h0IDQK
LSAgICAgIFRhcmdldDogeDoxLCB5OjMKLQotICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hv
d3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6Ci0KLSAgICAgICAgLi4uCi0g
ICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLlguCi0KLSAgIFRoZSByZWdpb25zIGlu
IHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAgIE5vdGU6ICh4MSwgeTEpIHRvcC1s
ZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgotICAgICAgTm90ZTog
cm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lvbgotICAgICAgICAg
ICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwgeDIgYW5kIHkxIDw9
IHkgPCB5MgotCi0gICAgICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4MjogMTAsIHkyOiAzCi0g
ICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCi0gICAgICBSZWdpb24g
QzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAgICBSZWdpb24gRDogeDE6IDksIHkx
OiAzLCB4MjogMTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5MTogMTAsIHgyOiAx
MCwgeTI6IDEwIChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNlIHJlZ2lvbiBDIChvZnRlbikgY29u
dGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAotICAgYSBmYXN0IGFsZ29y
aXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0SW50ZXJpb3JQaXhl
bHMuCi0gICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxzIGlzIHVzZWQsIHdo
aWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5kbGUgcGl4ZWxzIG91dHNpZGUgb2Yg
dGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hlbgotICAga2VybmVsIG1hdHJpeCBp
cyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1bGF0ZWQgYnkgdGhp
cwotICAgZnVuY3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5jdGlvbnMgaGF2ZSBs
b3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UKLSAgIGNvbW1vbiBhIHRlbXBsYXRl
IGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFzIHdlbGwsCi0gICBh
bmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgotKi8KLQotaW5saW5l
IHVpbnQ4X3QgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFsdWUo
ZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXgpCi17Ci0gICAgaWYgKGNoYW5uZWwgPD0gMCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGNoYW5uZWwgPj0gbWF4KQotICAgICAgICByZXR1cm4g
bWF4OwotICAgIHJldHVybiBjaGFubmVsOwotfQotCi1pbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50
JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBw
cmVzZXJ2ZUFscGhhVmFsdWVzKQotewotICAgIHVpbnQ4X3QgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFs
cGhhVmFsdWVzID8gMjU1IDogY2xhbXBSR0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJp
YXMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBkZXN0UGl4ZWxz
LnNldChwaXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywg
bWF4QWxwaGEpKTsKLQotICAgIGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7Ci0gICAgICAgIGRl
c3RQaXhlbHMuc2V0KHBpeGVsLCBzb3VyY2VQaXhlbHMuaXRlbShwaXhlbCkpOwotICAgICAgICAr
K3BpeGVsOwotICAgIH0gZWxzZQotICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBtYXhB
bHBoYSk7Ci19Ci0KLWlubGluZSBpbnQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6
Z2V0UGl4ZWxWYWx1ZShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGlu
dCB5KQotewotICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49
IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50
aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKHBhaW50aW5nRGF0YS5lZGdl
TW9kZSkgewotICAgIGRlZmF1bHQ6IC8vIEVER0VNT0RFX05PTkUKLSAgICAgICAgcmV0dXJuIC0x
OwotICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgotICAgICAgICBpZiAoeCA8IDApCi0gICAg
ICAgICAgICB4ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lkdGgp
Ci0gICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKLSAgICAgICAgaWYgKHkg
PCAwKQotICAgICAgICAgICAgeSA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdE
YXRhLmhlaWdodCkKLSAgICAgICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsKLSAg
ICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLSAgICBjYXNl
IEVER0VNT0RFX1dSQVA6Ci0gICAgICAgIHdoaWxlICh4IDwgMCkKLSAgICAgICAgICAgIHggKz0g
cGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAg
ICAgICAgd2hpbGUgKHkgPCAwKQotICAgICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0
OwotICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHJldHVybiAoeSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgfQotfQotCi0vLyBPbmx5IGZvciBy
ZWdpb24gQwotaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0
SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQs
IGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKLXsKLSAgICAvLyBlZGdlIG1v
ZGUgZG9lcyBub3QgYWZmZWN0IHRoZXNlIHBpeGVscwotICAgIGludCBwaXhlbCA9IChwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHBhaW50aW5nRGF0
YS50YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJp
Z2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndp
ZHRoKCkgLSAxKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkgY29tcG9u
ZW50cwotICAgIGZsb2F0IHRvdGFsc1s0XTsKLQotICAgIC8vIGRpdmlzb3IgY2Fubm90IGJlIDAs
IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChwYWlu
dGluZ0RhdGEuZGl2aXNvcik7Ci0KLSAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20g
LSB5RW5kKScgbGluZXMKLSAgICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNy
ZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0g
KGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsK
LQotICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7Ci0gICAgICAg
IGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7Ci0gICAgICAgICAgICBp
bnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Ci0g
ICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAg
ICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAg
ICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAg
ICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKLQotICAgICAg
ICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAgICB0b3RhbHNb
MF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2Fz
dDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7
Ci0gICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBw
YWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0
PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKQotICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShr
ZXJuZWxQaXhlbCkpOwotICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWw7Ci0gICAgICAgICAg
ICAgICAgLS1rZXJuZWxWYWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKLSAg
ICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2VybmVsSW5jcmVhc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldERlc3RpbmF0
aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4
ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0
YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7Ci0gICAgICAgICAgICBzdGFydEtl
cm5lbFBpeGVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwot
ICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJbmNyZWFzZTsKLSAgICB9Ci19Ci0KLS8vIEZv
ciBvdGhlciByZWdpb25zIHRoYW4gQwotaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlQXBwbGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICBpbnQgcGl4ZWwgPSAoeTEgKiBw
YWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OwotICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwot
ICAgIGludCB3aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEg
LSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhl
bFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAt
IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpOwotICAgIGludCB4SW5jcmVhc2UgPSAocGFp
bnRpbmdEYXRhLndpZHRoIC0gd2lkdGgpICogNDsKLSAgICAvLyBDb250YWlucyB0aGUgc3VtIG9m
IHJnYihhKSBjb21wb25lbnRzCi0gICAgZmxvYXQgdG90YWxzWzRdOwotCi0gICAgLy8gcGFpbnRp
bmdEYXRhLmRpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVu
c3VyZXMgdGhpcwotICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7Ci0KLSAgICBmb3Ig
KGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSB3aWR0
aDsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0
YXJ0S2VybmVsUGl4ZWxZOwotICAgICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtl
cm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAg
ICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAg
ICAgdG90YWxzWzNdID0gMDsKLQotICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDAp
IHsKLSAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRleCA9IGdldFBpeGVsVmFsdWUocGFpbnRp
bmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVsWSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHBpeGVsSW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFp
bnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4KSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KHBpeGVsSW5kZXggKyAxKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWlu
dGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAyKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxw
aGEgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOwotICAg
ICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgIC0ta2VybmVsVmFs
dWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAgICAgICAgICAr
K2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBwYWludGluZ0RhdGEu
a2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0Rh
dGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhh
KTsKLSAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7Ci0gICAgICAgIH0KLSAgICAgICAg
cGl4ZWwgKz0geEluY3JlYXNlOwotICAgICAgICBzdGFydEtlcm5lbFBpeGVsWCA9IGJlZ2luS2Vy
bmVsUGl4ZWxYOwotICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxZOwotICAgIH0KLX0KLQotdm9p
ZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAotewotICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJl
ZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gcGFpbnRp
bmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xpcEJvdHRvbSA9IHBhaW50aW5n
RGF0YS5oZWlnaHQgLSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS5oZWlnaHQoKTsKLQotICAgIGlm
IChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7Ci0gICAgICAgIC8vIFJhcmUgc2l0
dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLmhlaWdo
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGludCBt
aW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKHBhaW50aW5n
RGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQpIC8gbWluaW1hbFJlY3REaW1lbnNpb24p
IHsKLSAgICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwotICAgICAg
ICBpbnQgY2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7Ci0K
LSAgICAgICAgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVf
dCBpbmRleCkgewotICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7Ci0g
ICAgICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSks
IGNsaXBCb3R0b20pOwotCi0gICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0Rh
dGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLSAgICAgICAgfSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJp
Z2h0LCBjbGlwQm90dG9tLCAwLCBjbGlwQm90dG9tKTsKLQotICAgIGNsaXBSaWdodCArPSBwYWlu
dGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSArIDE7Ci0KLSAgICBpZiAocGFpbnRpbmdEYXRhLnRhcmdl
dE9mZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkpOwot
ICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKLSAgICAgICAgc2V0T3V0
ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludGluZ0RhdGEud2lkdGgs
IHBhaW50aW5nRGF0YS5oZWlnaHQpOwotICAgIGlmIChwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0
LngoKSA+IDApCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRp
bmdEYXRhLnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpLCBj
bGlwQm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRpbmdEYXRhLndpZHRoKQotICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgcGFpbnRpbmdEYXRh
LnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS53aWR0aCwgY2xpcEJvdHRvbSk7Ci19Ci0K
LWJvb2wgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gYWxwaGFGb3Jt
YXQgPSBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCkgPyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQgOiBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkOwot
ICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVz
dWx0KGFscGhhRm9ybWF0KTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVj
dC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1
bHQoYWxwaGFGb3JtYXQsIGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+
ZGF0YSgpOwotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXItPmRhdGEoKTsKLSAgICAKLSAgICBhdXRvIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0
YSA9IHsKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSwKLSAgICAgICAgZGVzdGluYXRpb25QaXhl
bEFycmF5LAotICAgICAgICBwYWludFNpemUud2lkdGgoKSwKLSAgICAgICAgcGFpbnRTaXplLmhl
aWdodCgpLAotICAgICAgICBtX2VmZmVjdC5rZXJuZWxTaXplKCksCi0gICAgICAgIG1fZWZmZWN0
LmRpdmlzb3IoKSwKLSAgICAgICAgbV9lZmZlY3QuYmlhcygpICogMjU1LAotICAgICAgICBtX2Vm
ZmVjdC50YXJnZXRPZmZzZXQoKSwKLSAgICAgICAgbV9lZmZlY3QuZWRnZU1vZGUoKSwKLSAgICAg
ICAgbV9lZmZlY3QucHJlc2VydmVBbHBoYSgpLAotICAgICAgICBGRUNvbG9yTWF0cml4Ojpub3Jt
YWxpemVkRmxvYXRzKG1fZWZmZWN0Lmtlcm5lbCgpKQotICAgIH07Ci0KLSAgICBhcHBseVBsYXRm
b3JtKHBhaW50aW5nRGF0YSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVDb252b2x2
ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewog
ICAgIHJldHVybiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShm
aWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKQEAgLTQ1MCwxNiArMTIyLDE2IEBAIGJvb2wgRkVDb252
b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VN
b2RlVHlwZSYgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEVER0VNT0RF
X1VOS05PV046CisgICAgY2FzZSBFZGdlTW9kZVR5cGU6OlVua25vd246CiAgICAgICAgIHRzIDw8
ICJVTktOT1dOIjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6
CisgICAgY2FzZSBFZGdlTW9kZVR5cGU6OkR1cGxpY2F0ZToKICAgICAgICAgdHMgPDwgIkRVUExJ
Q0FURSI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRURHRU1PREVfV1JBUDoKKyAgICBjYXNl
IEVkZ2VNb2RlVHlwZTo6V3JhcDoKICAgICAgICAgdHMgPDwgIldSQVAiOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEVER0VNT0RFX05PTkU6CisgICAgY2FzZSBFZGdlTW9kZVR5cGU6Ok5vbmU6
CiAgICAgICAgIHRzIDw8ICJOT05FIjsKICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguaAppbmRleCA2YjdhZGU2ZjBiMjI4OWYzNDNlNTY4MTRmZDhjMmRlNTQ0NzNmZjk5
Li4wMmQ3YzJiZWM4YmRhMjEyNDYwOGQzNTA0N2VlOWYzYmFkYzRjYjQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcg
PHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsMTEgKzI5LDEx
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBFZGdlTW9kZVR5cGUgewotICAgIEVE
R0VNT0RFX1VOS05PV04gICA9IDAsCi0gICAgRURHRU1PREVfRFVQTElDQVRFID0gMSwKLSAgICBF
REdFTU9ERV9XUkFQICAgICAgPSAyLAotICAgIEVER0VNT0RFX05PTkUgICAgICA9IDMKK2VudW0g
Y2xhc3MgRWRnZU1vZGVUeXBlIHsKKyAgICBVbmtub3duLAorICAgIER1cGxpY2F0ZSwKKyAgICBX
cmFwLAorICAgIE5vbmUKIH07CiAKIGNsYXNzIEZFQ29udm9sdmVNYXRyaXggOiBwdWJsaWMgRmls
dGVyRWZmZWN0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKaW5kZXggNzYwZjgzNWIxYjUx
MjNkZDQyYzI2ZjE3ZjdjZGMxZDMzM2IyNGNkNi4uMDdiMDhjY2E0YTM4N2VlZjM3M2M4ZDA0NzA5
ODdjNTFiYzBkNTRkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuaAppbmRleCA4YTEwYWVjODdjOGYxODlmOWYwNTdjYjk0NDNlYWFlZGQ1MzhmNjkxLi4zMDI0
ZDY1MjFiMzlkNDJjYTRhMjBlNzU3N2Q5NDE0MWZlZjIwMWE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IGRmYzc2MGUyMGY0OTk0NjA1Zjk0NDkx
MmVmZGUzYWMwODE1MDRiYWQuLmY0ZDVmNDkxYTE1OGVkN2JlMjhiOTIyMTQyMTY1MGJmMzhlOGNl
YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTAgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiRkVEaXNwbGFjZW1l
bnRNYXBTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg1LDkzICs4Myw2IEBAIHZvaWQgRkVEaXNwbGFj
ZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29u
c3QgaW50IGluCiAgICAgICAgIGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUNvbXBvc2l0
ZVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNs
YXNzIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVj
dENvbmNyZXRlQXBwbGllcjxGRURpc3BsYWNlbWVudE1hcD4gewotICAgIHVzaW5nIEJhc2UgPSBG
aWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEaXNwbGFjZW1lbnRNYXA+OwotCi1wdWJsaWM6
Ci0gICAgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIoRkVEaXNwbGFjZW1lbnRNYXAm
KTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBpbmxp
bmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5z
aWduZWQgcm93Qnl0ZXMpCi0gICAgewotICAgICAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBp
eGVsID0gNDsKLSAgICAgICAgcmV0dXJuIHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVz
OwotICAgIH0KLQotICAgIGludCB4Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lZmZl
Y3QueENoYW5uZWxTZWxlY3RvcigpIC0gMTsgfQotICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9lZmZlY3QueUNoYW5uZWxTZWxlY3RvcigpIC0gMTsgfQotfTsKLQotRkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyKEZFRGlzcGxhY2VtZW50TWFwJiBlZmZlY3QpCi0gICAgOiBCYXNlKGVmZmVjdCkKLXsK
LSAgICBBU1NFUlQobV9lZmZlY3QueENoYW5uZWxTZWxlY3RvcigpICE9IENIQU5ORUxfVU5LTk9X
Tik7Ci0gICAgQVNTRVJUKG1fZWZmZWN0LnlDaGFubmVsU2VsZWN0b3IoKSAhPSBDSEFOTkVMX1VO
S05PV04pOwotfQotCi1ib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsK
LSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKLQotICAgIGF1
dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwotICAgIGlmICghZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAg
YXV0byBlZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gaW5wdXRQaXhl
bEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QpOwotCi0gICAgYXV0byBlZmZlY3RC
RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
aW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5n
IHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24t
cHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFjZW1lbnRQaXhlbEJ1
ZmZlciA9IGluMi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBlZmZlY3RCRHJhd2luZ1JlY3QpOwotICAgIAotICAgIGlmICghaW5w
dXRQaXhlbEJ1ZmZlciB8fCAhZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8mIGlucHV0SW1hZ2UgPSBpbnB1dFBpeGVsQnVmZmVyLT5kYXRh
KCk7Ci0gICAgYXV0byYgZGlzcGxhY2VtZW50SW1hZ2UgPSBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwotICAgIEFTU0VSVChpbnB1dEltYWdlLmxlbmd0aCgpID09IGRpc3BsYWNlbWVu
dEltYWdlLmxlbmd0aCgpKTsKLQotICAgIEludFNpemUgcGFpbnRTaXplID0gbV9lZmZlY3QuYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIu
c2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnNjYWxlKCksIG1fZWZmZWN0LnNjYWxlKCkg
fSk7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2FsZS53aWR0aCgpIC8gMjU1LjA7Ci0g
ICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1NS4wOwotICAgIGZs
b2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OwotICAgIGZsb2F0
IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQoKSAqIDAuNTsKLSAgICAKLSAgICBp
bnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7Ci0gICAgaW50IGRpc3Bs
YWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgpOwotCi0gICAgaW50IHJvd0J5dGVzID0g
cGFpbnRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNp
emUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJv
d0J5dGVzOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7
ICsreCkgewotICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZz
ZXQgKyB4ICogNDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3Rh
dGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLml0ZW0oZGVz
dGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwot
ICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9y
WSAqIGRpc3BsYWNlbWVudEltYWdlLml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVz
dGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlv
blBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRleCk7Ci0gICAgICAgICAgICBpZiAo
c3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZ
ID49IHBhaW50U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBp
eGVsUHRyID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCo+KGlucHV0SW1hZ2UuZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwg
cm93Qnl0ZXMpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCiBi
b29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCiB7CiAgICAgcmV0dXJuIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
KCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuaAppbmRleCA3YTYzNzhiMDRjYjRhZDg4MjExYTBhNGFjYTg4YWZkODgzMjdjZWMwLi45NjU0
NjI3OGMyZDZhYWZkNDY5MGUzNGNhYzJkZGE4OTc2MGFhODljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggYWFiMjQ4ZDE0ODAyZmI2NzU3YWUzYTU5YTQzZTQ2Mjkz
YWZjMTg1Ny4uZTk2NmRkYmI3MjVkMzYyYjA5MGZjNDJkNjdmOGQzYTZkOGZjYzFkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjEsMTQgKzIyLDkgQEAKICNpbmNsdWRlICJGRURyb3BTaGFkb3cuaCIK
IAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgorI2luY2x1ZGUgIkZFRHJvcFNoYWRv
d1NvZnR3YXJlQXBwbGllci5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTcwLDYxICs2Niw2IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7CiB9CiAKLS8v
IEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIgdG8gc2Vw
YXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBGRURyb3BTaGFkb3dTb2Z0d2Fy
ZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRHJvcFNoYWRv
dz4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEcm9w
U2hhZG93PjsKLQotcHVibGljOgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KSBvdmVycmlkZTsKLX07Ci0KLWJvb2wgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyOjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsK
LQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZsb2F0
U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZl
Y3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7Ci0gICAgRmxv
YXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3QuZHgo
KSwgbV9lZmZlY3QuZHkoKSB9KTsKLQotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gbV9l
ZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdpbmdSZWdpb24pOwot
ICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKLQotICAgIGF1dG8gc291
cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENv
bnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxw
aGEobV9lZmZlY3Quc2hhZG93T3BhY2l0eSgpKTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1
bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0gICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJs
dXJSYWRpdXMsIG9mZnNldCwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7Ci0KLSAgICBQaXhlbEJ1
ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAg
IEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+dHJ1bmNhdGVkTG9n
aWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhl
bEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1
ZmZlci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4
ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6
ZSgpLndpZHRoKCkpOwotICAgIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4
ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOwotCi0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0
LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRS
ZWN0KCkuc2l6ZSgpKSwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7Ci0gICAgcmVzdWx0Q29udGV4
dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zl
cik7Ci0KLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNl
SW1hZ2UsIGRyYXdpbmdSZWdpb24pOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewog
ICAgIHJldHVybiBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRl
ciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggNDk2ZWMzMmVlMTljMmQxYTcy
OGZjZDYxZDE3NmYxZWZjODkyMDI0My4uODY5ZDcwM2FmYjFkMWQzZTIyY2Q0ZWY3ZmY2YTE2MDU4
M2JkZjA3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCA5ODk4YzczNzZmNjVmMmUxMTc1YzFh
NzgxYzY0ZWVmODMyNDZhZWIwLi5lYWE3OGMzNzUxYmMwNDIzNDhjNjVlMDRiMjBmNmE0ZmNhYmJl
ZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVGbG9vZC5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDkgKzI1LDcgQEAK
ICNpbmNsdWRlICJGRUZsb29kLmgiCiAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIK
LSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJGRUZsb29kU29mdHdh
cmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC01OSwyOCArNTgsNiBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3Bh
Y2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIEZJWE1F
OiBNb3ZlIHRoZSBjbGFzcyBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUg
c291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBGRUZsb29kU29mdHdhcmVBcHBsaWVyIDog
cHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUZsb29kPiB7Ci0gICAgdXNpbmcg
QmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUZsb29kPjsKLQotcHVibGljOgot
ICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKLX07Ci0KLWJv
b2wgRkVGbG9vZFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJikKLXsKLSAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1h
Z2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIGNvbG9yID0gbV9lZmZlY3QuZmxvb2RDb2xvcigpLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KG1fZWZmZWN0LmZsb29kT3BhY2l0eSgpKTsKLSAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0
LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGJvb2wgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogewogICAgIHJldHVybiBGRUZsb29kU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBs
eShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggOWMxM2U1ZDRlYmE4YzhjOWJjOTg0
ZGM2Mzk0NzBiYzQ4Yzk0MzVlMy4uYjk3YjQzZTM3NjFhYjAxNTNlYWE2MTljYWFmYzU0NDdmYjZl
Zjk3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggZGIzNTkwOGY0ZjRmODlhNDU4ZDc5YmMz
MDFmMTI4YWM1NTkyOTEwNC4uM2JjYzU5ZjkwMGQ3NTdjZDA5MTdhZTdhYzMzNDA0MWM5YWFiYjRh
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjYsMjEgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RkVHYXVzc2lhbkJsdXIuaCIKIAotI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5oIgorI2lu
Y2x1ZGUgIkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSAiRmlsdGVy
LmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKLSNpZiBVU0UoQUND
RUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbHNlCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYv
UGFyYWxsZWxKb2JzLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWY8RkVH
YXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmxvYXQgeCwgZmxvYXQgeSwgRWRn
ZU1vZGVUeXBlIGVkZ2VNb2RlKQpAQCAtMTE5LDcgKzEwOCw3IEBAIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogCiAg
ICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRl
UGFpbnRSZWN0KCk7CiAgICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFuICdub25lJyBkbyBub3Qg
aW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KLSAgICBpZiAobV9lZGdlTW9kZSAhPSBF
REdFTU9ERV9OT05FKSB7CisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRWRnZU1vZGVUeXBlOjpOb25l
KSB7CiAgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1
dGVQYWludFJlY3QpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEzNiw0NTMgKzEyNSw2
IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZF
R2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVy
IGZpbGVzLgotY2xhc3MgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFR2F1c3NpYW5CbHVyPiB7Ci0gICAgdXNpbmcgQmFz
ZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUdhdXNzaWFuQmx1cj47Ci0KLXB1Ymxp
YzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXIm
LCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci0KLXBy
aXZhdGU6Ci0gICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhl
aWdodDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7Ci0gICAgICAgIHVuc2lnbmVkIGtl
cm5lbFNpemVZOwotICAgICAgICBib29sIGlzQWxwaGFJbWFnZTsKLSAgICAgICAgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlOwotICAgIH07Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsUG9z
aXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0
LCBpbnQmIGRlbHRhUmlnaHQpOwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJBbHBo
YU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhS
aWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50
JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSk7Ci0gICAgc3RhdGljIGlu
bGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXks
IFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50IGR4TGVm
dCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lk
dGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKLQot
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJy
YXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2Vy
bmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KTsK
LSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVk
QXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQg
a2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBw
YWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwotCi0gICAgc3RhdGlj
IGlubGluZSB2b2lkIGJveEJsdXJHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1
bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFn
ZSwgRWRnZU1vZGVUeXBlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1cldvcmtlcihB
cHBseVBhcmFtZXRlcnMqKTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVBsYXRmb3Jt
KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVs
QXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6
ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKLX07Ci0KLWlu
bGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlvbihp
bnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYg
ZGVsdGFSaWdodCkKLXsKLSAgICAvLyBDaGVjayBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvZmls
dGVycy5odG1sI2ZlR2F1c3NpYW5CbHVyRWxlbWVudCBmb3IgZGV0YWlscy4KLSAgICBzd2l0Y2gg
KGJsdXJJdGVyYXRpb24pIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIp
KSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyIC0gMTsKLSAgICAgICAgICAg
IGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyOwotICAgICAgICAgICAgZGVsdGFSaWdodCA9
IHJhZGl1cyAtIGRlbHRhTGVmdDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNl
IDE6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQr
KzsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQtLTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIDI6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0gICAgICAgICAgICBk
ZWx0YVJpZ2h0Kys7Ci0gICAgICAgICAgICByYWRpdXMrKzsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gb25seSBvcGVyYXRlcyBvbiBBbHBo
YSBjaGFubmVsLgotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJv
eEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVp
bnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQs
IGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RX
aWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKLXsKLSAg
ICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7Ci0gICAgdWlu
dDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwotICAgIC8vIE1lbW9yeSBhbGln
bm1lbnQgaXM6IFJHQkEsIHplcm8taW5kZXggYmFzZWQuCi0gICAgY29uc3QgaW50IGNoYW5uZWwg
PSAzOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgewotICAg
ICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAgICAgICBpbnQgc3VtID0gMDsKLQot
ICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bWF4S2VybmVsU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5l
ICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0Rh
dGEgKyBvZmZzZXQ7Ci0gICAgICAgICAgICBzdW0gKz0gc3JjUHRyW2NoYW5uZWxdOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
ZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0
ID0gbGluZSArIHggKiBzdHJpZGUgKyBjaGFubmVsOwotICAgICAgICAgICAgdWludDhfdCogZHN0
UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLSAgICAgICAgICAgICpkc3RQdHIgPSBz
dGF0aWNfY2FzdDx1aW50OF90PihzdW0gLyBkeCk7Ci0KLSAgICAgICAgICAgIC8vIFNoaWZ0IGtl
cm5lbC4KLSAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgc3VtIC09ICpzcmNQdHI7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3Ry
aWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBy
aWdodE9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gKz0gKnNyY1B0cjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0
d2FyZUFwcGxpZXI6OmJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJy
YXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50IGR4
TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0
V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlKQotewotICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdo
dCwgZWZmZWN0V2lkdGgpOwotICAgIGlmIChhbHBoYUltYWdlKQotICAgICAgICByZXR1cm4gYm94
Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBk
eFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBt
YXhLZXJuZWxTaXplKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFy
cmF5LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7
Ci0KLSAgICAvLyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1l
bnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQot
ICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzLgotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKLSAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRl
TGluZTsKLSAgICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAw
OwotCi0gICAgICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FKSB7Ci0gICAgICAgICAg
ICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1h
eEtlcm5lbFNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxp
bmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9
IHNyY0RhdGEgKyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtUiArPSAqc3JjUHRyKys7Ci0g
ICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQiAr
PSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBCbHVycmluZy4KLSAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBp
eGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIHVpbnQ4
X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7Ci0KLSAgICAgICAgICAgICAg
ICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwotICAgICAgICAg
ICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBkeCk7Ci0gICAg
ICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQiAvIGR4KTsK
LSAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtQSAvIGR4
KTsKLQotICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgICAgICBp
ZiAoeCA+PSBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNl
dCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1H
IC09IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdpZHRoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsg
ZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3Jj
UHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBzdW1SICs9
IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwotICAgICAgICAgICAgICAgICAgICBz
dW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dy
YXAnIGhlcmUuCi0gICAgICAgICAgICAvLyBHZXQgZWRnZSB2YWx1ZXMgZm9yIGVkZ2VNb2RlICdk
dXBsaWNhdGUnLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlTGVmdCA9IHNy
Y0RhdGEgKyBsaW5lOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogZWRnZVZhbHVlUmlnaHQg
ID0gc3JjRGF0YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0gMSkgKiBzdHJpZGUpOwotCi0gICAg
ICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gZHhM
ZWZ0ICogLTE7IGkgPCBkeFJpZ2h0OyArK2kpIHsKLSAgICAgICAgICAgICAgICAvLyBJcyB0aGlz
IHJpZ2h0IGZvciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPwotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
aSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVMZWZ0WzBdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZUxlZnRbMV07Ci0gICAgICAgICAg
ICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsKLSAgICAgICAgICAgICAgICAgICAg
c3VtQSArPSBlZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+
PSBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJp
Z2h0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1ZVJpZ2h0WzJdOwotICAgICAgICAg
ICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNdOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOwotICAgICAgICAg
ICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiAr
PSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJsdXJyaW5nLgot
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGU7
Ci0gICAgICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9m
ZnNldDsKLQotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHN1bVIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oc3VtRyAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2Fz
dDx1aW50OF90PihzdW1CIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2hpZnQga2Vy
bmVsLgotICAgICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bVIgLT0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtRyAt
PSBlZGdlVmFsdWVMZWZ0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IGVkZ2VWYWx1
ZUxlZnRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gZWRnZVZhbHVlTGVmdFszXTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
ZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0ICogc3RyaWRlOwotICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsK
LSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJbMF07Ci0gICAgICAgICAgICAgICAg
ICAgIHN1bUcgLT0gc3JjUHRyWzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0
clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAtPSBzcmNQdHJbM107Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHggKyBkeFJpZ2h0ID49IGVmZmVjdFdpZHRo
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07Ci0gICAg
ICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1
bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBk
eFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQ
dHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0g
c3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKLSAgICAg
ICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1
bUEgKz0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotaW5saW5lIHZvaWQgRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBr
ZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQp
Ci17Ci0gICAgaWYgKCFpb0J1ZmZlci5kYXRhKCkgfHwgIXRlbXBCdWZmZXIuZGF0YSgpKSB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGVmZmVjdFdpZHRoIDw9IDAgfHwgZWZmZWN0SGVpZ2h0IDw9IDAgfHwgc3RyaWRlIDw9
IDApIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBtdXN0IGFsd2F5cyB1c2UgYW4gb2RkIHJhZGl1cy4KLSAgICBpZiAo
a2VybmVsU2l6ZSAlIDIgIT0gMSkKLSAgICAgICAga2VybmVsU2l6ZSArPSAxOwotCi0gICAgdklt
YWdlX0J1ZmZlciBlZmZlY3RJbkJ1ZmZlcjsKLSAgICBlZmZlY3RJbkJ1ZmZlci5kYXRhID0gc3Rh
dGljX2Nhc3Q8dm9pZCo+KGlvQnVmZmVyLmRhdGEoKSk7Ci0gICAgZWZmZWN0SW5CdWZmZXIud2lk
dGggPSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RJbkJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWln
aHQ7Ci0gICAgZWZmZWN0SW5CdWZmZXIucm93Qnl0ZXMgPSBzdHJpZGU7Ci0KLSAgICB2SW1hZ2Vf
QnVmZmVyIGVmZmVjdE91dEJ1ZmZlcjsKLSAgICBlZmZlY3RPdXRCdWZmZXIuZGF0YSA9IHRlbXBC
dWZmZXIuZGF0YSgpOwotICAgIGVmZmVjdE91dEJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOwot
ICAgIGVmZmVjdE91dEJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7Ci0gICAgZWZmZWN0T3V0
QnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBzaXplIG9m
IGEgdGVtcG9yYXJ5IGJ1ZmZlciBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBmaXJzdCB3aXRoIGEg
c3BlY2lhbCBmbGFnLiB2SW1hZ2Ugd2lsbCByZXR1cm4KLSAgICAvLyB0aGUgc2l6ZSBuZWVkZWQs
IG9yIGFuIGVycm9yICh3aGljaCBhcmUgYWxsIG5lZ2F0aXZlKS4KLSAgICBzaXplX3QgdG1wQnVm
ZmVyU2l6ZSA9IHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVm
ZmVjdE91dEJ1ZmZlciwgMCwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFn
ZUVkZ2VFeHRlbmQgfCBrdkltYWdlR2V0VGVtcEJ1ZmZlclNpemUpOwotICAgIGlmICh0bXBCdWZm
ZXJTaXplIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIHZvaWQqIHRtcEJ1ZmZlciA9IGZh
c3RNYWxsb2ModG1wQnVmZmVyU2l6ZSk7Ci0gICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4ODgo
JmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtlcm5l
bFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKLSAgICB2SW1hZ2VCb3hD
b252b2x2ZV9BUkdCODg4OCgmZWZmZWN0T3V0QnVmZmVyLCAmZWZmZWN0SW5CdWZmZXIsIHRtcEJ1
ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQp
OwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVj
dE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBr
dkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgZmFzdEZyZWUodG1wQnVmZmVyKTsKLQotICAgIC8vIFRo
ZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAgICBBU1NFUlQo
aW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5ndGgoKSk7Ci0gICAgbWVtY3B5KGlv
QnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKLX0K
LSNlbmRpZgotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94
Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1w
ZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5l
bFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdl
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgaW50IGR4TGVmdCA9IDA7Ci0gICAgaW50
IGR4UmlnaHQgPSAwOwotICAgIGludCBkeUxlZnQgPSAwOwotICAgIGludCBkeVJpZ2h0ID0gMDsK
LSAgICAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZnJvbUJ1ZmZlciA9ICZpb0J1ZmZlcjsKLSAg
ICBVaW50OENsYW1wZWRBcnJheSogdG9CdWZmZXIgPSAmdGVtcEJ1ZmZlcjsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlmIChrZXJuZWxTaXplWCkgewotICAg
ICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCk7
Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhh
SW1hZ2UpCi0gICAgICAgICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZl
ciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lk
dGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVYLCBkeExlZnQs
IGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQo
KSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZm
ZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBw
YWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VN
b2RlKTsKLSNlbmRpZgotICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVy
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrZXJuZWxTaXplWSkgewotICAgICAgICAgICAg
a2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCk7Ci0jaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0g
ICAgICAgICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVs
U2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBh
aW50U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hC
bHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQs
IHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgoKSwgdHJ1ZSwg
ZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1
ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUu
aGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNl
bmRpZgotICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBp
biBpb0J1ZmZlci4KLSAgICBpZiAoJmlvQnVmZmVyICE9IGZyb21CdWZmZXIpIHsKLSAgICAgICAg
QVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IGZyb21CdWZmZXItPmxlbmd0aCgpKTsKLSAgICAg
ICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgZnJvbUJ1ZmZlci0+ZGF0YSgpLCBpb0J1ZmZlci5s
ZW5ndGgoKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1ckdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50
OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2ln
bmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBF
ZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUu
d2lkdGgoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJuZWxTaXplWCA9PSBr
ZXJuZWxTaXplWSAmJiAoZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBlZGdlTW9kZSA9PSBF
REdFTU9ERV9EVVBMSUNBVEUpKSB7Ci0gICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1ZmZl
ciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCks
IHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIGJveEJsdXJVbmFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxT
aXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VN
b2RlKTsKLX0KLQotI2lmICFVU0UoQUNDRUxFUkFURSkKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5C
bHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1l
dGVycykKLXsKLSAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1l
dGVycy0+aGVpZ2h0KTsKLSAgICBib3hCbHVyR2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFy
cmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgs
IHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUsIHBhcmFtZXRlcnMtPmlzQWxwaGFJ
bWFnZSwgcGFyYW1ldGVycy0+ZWRnZU1vZGUpOwotfQotI2VuZGlmCi0KLWlubGluZSB2b2lkIEZF
R2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVk
IGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBi
b29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotI2lmICFVU0UoQUND
RUxFUkFURSkKLSAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7Ci0gICAg
aW50IGV4dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41ZjsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IG1pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmlj
YWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotICAgIGludCBvcHRpbWFsVGhyZWFkTnVt
YmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChtaW5pbWFs
UmVjdERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0ICogcGFpbnRTaXplLndpZHRoKCkpOwotCi0gICAg
aWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIFBhcmFsbGVsSm9iczxBcHBs
eVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYm94Qmx1cldvcmtlciwgb3B0aW1hbFRocmVhZE51
bWJlcik7Ci0KLSAgICAgICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7
Ci0gICAgICAgIGlmIChqb2JzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBp
bnRvICJibG9ja0hlaWdodCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5l
ZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBibG9ja0hlaWdo
dCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJl
bWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWln
aHQgPSBwYWludFNpemUuaGVpZ2h0KCkgLyBqb2JzOwotICAgICAgICAgICAgY29uc3QgaW50IGpv
YnNXaXRoRXh0cmEgPSBwYWludFNpemUuaGVpZ2h0KCkgJSBqb2JzOwotCi0gICAgICAgICAgICBp
bnQgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9i
czsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBh
cmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLQotICAgICAgICAgICAgICAgIGludCBzdGFydFkg
PSAham9iID8gMCA6IGN1cnJlbnRZIC0gZXh0cmFIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2NrSGVp
Z2h0OwotICAgICAgICAgICAgICAgIGludCBlbmRZID0gam9iID09IGpvYnMgLSAxID8gY3VycmVu
dFkgOiBjdXJyZW50WSArIGV4dHJhSGVpZ2h0OwotCi0gICAgICAgICAgICAgICAgaW50IGJsb2Nr
U2l6ZSA9IChlbmRZIC0gc3RhcnRZKSAqIHNjYW5saW5lOwotICAgICAgICAgICAgICAgIGlmICgh
am9iKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSAmaW9CdWZm
ZXI7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gJnRtcFBpeGVs
QXJyYXk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcGFy
YW1zLmlvUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVk
KGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0g
VWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKLSAgICAg
ICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEoKSwgaW9CdWZm
ZXIuZGF0YSgpICsgc3RhcnRZICogc2NhbmxpbmUsIGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcGFyYW1zLndpZHRoID0gcGFpbnRTaXplLndpZHRoKCk7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmhlaWdodCA9IGVuZFkgLSBzdGFydFk7Ci0gICAgICAg
ICAgICAgICAgcGFyYW1zLmtlcm5lbFNpemVYID0ga2VybmVsU2l6ZVg7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLmtlcm5lbFNpemVZID0ga2VybmVsU2l6ZVk7Ci0gICAgICAgICAgICAgICAgcGFy
YW1zLmlzQWxwaGFJbWFnZSA9IGlzQWxwaGFJbWFnZTsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
ZWRnZU1vZGUgPSBlZGdlTW9kZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxs
ZWxKb2JzLmV4ZWN1dGUoKTsKLQotICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFy
dHMgb2YgdGhlIGltYWdlLgotICAgICAgICAgICAgY3VycmVudFkgPSAwOwotICAgICAgICAgICAg
Zm9yIChpbnQgam9iID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBB
cHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAg
ICAgICAgICAgICAgICBpbnQgc291cmNlT2Zmc2V0OwotICAgICAgICAgICAgICAgIGludCBkZXN0
aW5hdGlvbk9mZnNldDsKLSAgICAgICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgICAg
ICBpbnQgYWRqdXN0ZWRCbG9ja0hlaWdodCA9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hl
aWdodCArIDEgOiBibG9ja0hlaWdodDsKLQotICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGFk
anVzdGVkQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0gZXh0cmFI
ZWlnaHQgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldCA9IGN1
cnJlbnRZICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGFkanVzdGVkQmxvY2tI
ZWlnaHQgKiBzY2FubGluZTsKLQotICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRh
KCkgKyBkZXN0aW5hdGlvbk9mZnNldCwgcGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpICsgc291
cmNlT2Zmc2V0LCBzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KLSAg
ICB9Ci0jZW5kaWYKLQotICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3Vs
ZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0gICAgYm94Qmx1ckdlbmVy
aWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFp
bnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLX0KLQotYm9vbCBGRUdhdXNzaWFuQmx1
clNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdHNbMF0uZ2V0KCk7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUlt
YWdlKCkpOwotCi0gICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0
RHJhd2luZ1JlY3QpOwotICAgIGlmICghbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpICYmICFtX2Vm
ZmVjdC5zdGREZXZpYXRpb25ZKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byBr
ZXJuZWxTaXplID0gbV9lZmZlY3QuY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9lZmZl
Y3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7Ci0KLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwot
ICAgIGF1dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOwotICAgIGlmICghdG1wSW1hZ2VEYXRhKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkg
PSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXBwbHlQbGF0Zm9ybShkZXN0
aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2Vy
bmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLCBtX2VmZmVjdC5pc0FscGhhSW1hZ2UoKSwgbV9l
ZmZlY3QuZWRnZU1vZGUoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVHYXVzc2lh
bkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAg
ICByZXR1cm4gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRl
ciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmluZGV4IDY1YWE2ZTE4ODk3ZmE4
Y2M5NzY5ZDFlNTU3ZDdkMjZmNWU1Y2EyMjIuLjkwODIyNjQzNGEwOWFkNDMzNDk2YzlkYTFlZGFi
N2M0ODgzMjFjMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IDFhZGMwZjM3M2E0
NjBkZmJkMmFjYmZiOTAyMDg1M2RhY2NiNDU2M2IuLmNjZGU2ZWI4MmUzN2MyZTNiN2JmMzJiNzY5
NDc5YWJlYzdlYjI2YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykg
MjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEyICsyOCw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVMaWdodGluZy5oIgogCi0jaW5jbHVkZSAiQ29s
b3JDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKLSNpbmNsdWRlICJG
aWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNpbmNsdWRl
ICJGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtODYsNTA3ICs4MSw2IEBAIGJvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFko
ZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIEZJWE1F
OiBNb3ZlIHRoZSBjbGFzcyBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNv
dXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllciA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVMaWdodGluZz4gewotICAgIHVz
aW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVMaWdodGluZz47Ci0KLXB1
YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9vbCBhcHBseShjb25zdCBGaWx0
ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci0K
LXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVsU2l6ZSA9IDQ7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4
RkYpOwotCi0gICAgLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBjb2VmZmljaWVudHMg
Y29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRl
cnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi0gICAgc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0
IGNGYWN0b3IxZGl2MyA9IC0xIC8gMy5mOwotICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0Zh
Y3RvcjFkaXY0ID0gLTEgLyA0LmY7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9y
MmRpdjMgPSAtMiAvIDMuZjsKLQotICAgIHN0cnVjdCBBbHBoYVdpbmRvdyB7Ci0gICAgICAgIHVp
bnQ4X3QgYWxwaGFbM11bM10geyB9OwotICAgIAotICAgICAgICAvLyBUaGUgaW1wbGVtZW50YXRp
b25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRpY2VzIGVhc2llci4KLSAgICAg
ICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1b
MF07IH0KLSAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1
cm4gYWxwaGFbMV1bMF07IH0KLSAgICAgICAgdWludDhfdCBib3R0b21MZWZ0KCkgY29uc3QgICAg
ICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KLQotICAgICAgICB1aW50OF90IHRvcCgpIGNv
bnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsxXTsgfQotICAgICAgICB1aW50
OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsxXTsgfQot
ICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBo
YVsyXVsxXTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4X3QgdmFsdWUpICAgICAgICAg
IHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldENlbnRlcih1aW50OF90
IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRC
b3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsxXSA9IHZhbHVlOyB9Ci0KLSAg
ICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAgICAgeyBhbHBoYVswXVsyXSA9
IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1ZSkgICAgICAgIHsg
YWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbVJpZ2h0KHVpbnQ4
X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KLQotICAgICAgICBzdGF0aWMgdm9p
ZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQotICAgICAgICB7Ci0gICAgICAgICAgICBhbHBo
YVswXSA9IGFscGhhWzFdOwotICAgICAgICAgICAgYWxwaGFbMV0gPSBhbHBoYVsyXTsKLSAgICAg
ICAgfQotICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAgewotICAgICAgICAgICAg
c2hpZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOwotICAg
ICAgICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0
cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBv
bmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgRkVMaWdodGluZyogZWZmZWN0
OwotICAgICAgICBGaWx0ZXJFZmZlY3Q6OlR5cGUgZmlsdGVyVHlwZTsKLSAgICAgICAgQ29sb3Ig
bGlnaHRpbmdDb2xvcjsKLSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAgICAgICBmbG9h
dCBkaWZmdXNlQ29uc3RhbnQ7Ci0gICAgICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQ7Ci0gICAg
ICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQ7Ci0gICAgICAgIGNvbnN0IExpZ2h0U291cmNlKiBs
aWdodFNvdXJjZTsKLSAgICAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlKiBvcGVyYXRp
bmdDb2xvclNwYWNlOwotCi0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Ci0gICAg
ICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHdpZHRoOwot
ICAgICAgICBpbnQgaGVpZ2h0OwotCi0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5O
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9y
Tm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JikgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJ
bnRTaXplIHJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxp
bmUgSW50U2l6ZSBib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBp
bmxpbmUgSW50U2l6ZSBib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAg
IGlubGluZSBJbnRTaXplIGJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAg
IH07Ci0KLSAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgTGlnaHRpbmdEYXRh
IGRhdGE7Ci0gICAgICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwot
ICAgICAgICBpbnQgeVN0YXJ0OwotICAgICAgICBpbnQgeUVuZDsKLSAgICB9OwotCi0gICAgc3Rh
dGljIHZvaWQgc2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEm
LCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBm
YWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBo
YSk7Ci0gICAgc3RhdGljIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdE
YXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxv
YXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3Rvcik7Ci0KLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0
YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5k
WSk7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIoQXBwbHlQYXJh
bWV0ZXJzKik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgTGln
aHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotICAgIHN0YXRp
YyB2b2lkIGFwcGx5UGxhdGZvcm0oY29uc3QgTGlnaHRpbmdEYXRhJik7Ci19OwotCi1pbmxpbmUg
SW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcExlZnRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGNlbnRlciAr
IDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAotICAgICAgICAtMiAqIGNlbnRlciAt
IHJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIElu
dFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90
dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIHJldHVybiB7Ci0gICAgICAg
IC0yICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKLSAgICAg
ICAgLWxlZnQgLSAyICogY2VudGVyIC0gcmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSAr
IGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgY2VudGVyID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQg
Ym90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAg
ICByZXR1cm4gewotICAgICAgICAtMiAqIGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCAr
IGJvdHRvbSwKLSAgICAgICAgLWxlZnQgLSAyICogY2VudGVyICsgYm90dG9tTGVmdCArIDIgKiBi
b3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsK
LSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCB0b3Ag
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQg
Kz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewot
ICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9t
ICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogYm90dG9t
ICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFs
cGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKLXsKLSAgICBpbnQgcmlnaHRBbHBoYU9mZnNl
dCA9IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0OwotICAgIAotICAg
IGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZz
ZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShy
aWdodEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLSAgICBpbnQg
Ym90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zm
c2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKLQotICAgIGludCBsZWZ0ID0gYWxw
aGFXaW5kb3cubGVmdCgpOwotICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cudG9wTGVmdCgp
OwotICAgIGludCB0b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsKLQotICAgIGludCBib3R0b21MZWZ0
ID0gYWxwaGFXaW5kb3cuYm90dG9tTGVmdCgpOwotICAgIGludCBib3R0b20gPSBhbHBoYVdpbmRv
dy5ib3R0b20oKTsKLQotICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVlbiBzaGlmdGVkLCBh
bmQgaGVyZSB3ZSBmaWxsIGluIHRoZSByaWdodCBjb2x1bW4uCi0gICAgYWxwaGFXaW5kb3cuYWxw
aGFbMF1bMl0gPSB0b3BSaWdodDsKLSAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsyXSA9IHJpZ2h0
OwotICAgIGFscGhhV2luZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7Ci0gICAgCi0gICAg
Ly8gQ2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRoIHNvbWUgc3BvdC1j
aGVja3MuCi0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhlbHMtPml0ZW0o
b2Zmc2V0IC0gY1BpeGVsU2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOyAvLyB0b3BMZWZ0Ci0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcCgp
ID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wCi0KLSAgICByZXR1cm4gewotICAgICAgICAtdG9w
TGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90
dG9tUmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgYm90dG9t
TGVmdCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRT
aXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5O
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRv
bSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0
ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0b20sCi0gICAgICAgIC10b3BMZWZ0IC0g
MiAqIHRvcCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tCi0gICAgfTsKLX0KLQotaW5saW5lIElu
dFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBp
bnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3BSaWdodCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcCArIHRvcFJpZ2h0IC0g
MiAqIGNlbnRlciArIDIgKiByaWdodCwKLSAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIg
KiBjZW50ZXIgKyByaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCBjZW50
ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQg
LT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0g
MiAqIGxlZnQgKyAyICogcmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJp
Z2h0ICsgbGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07Ci19Ci0KLWlubGluZSBJbnRT
aXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGlu
dCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAyICog
bGVmdCArIDIgKiBjZW50ZXIsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGxlZnQgKyAy
ICogY2VudGVyCi0gICAgfTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpz
ZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29u
c3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZs
b2F0IGFscGhhKQotewotICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwot
ICAgIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBkYXRh
LmxpZ2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5
LCB6KTsKLQotICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0gICAgaWYgKG5vcm1hbDJEVmVjdG9y
LmlzWmVybygpKSB7Ci0gICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlz
IGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0
ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKLSAgICAg
ICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7Ci0g
ICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKLSAgICAgICAgICAg
ICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAotICAgICAgICAgICAgICAgIGxpZ2h0
aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgK
LSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0g
aGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChkYXRhLnNwZWN1bGFyRXhw
b25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxh
ckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1
bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0
aCwgZGF0YS5zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0gICAgICAgICAgICBmYWN0b3JYICog
bm9ybWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAotICAgICAgICAgICAg
ZmFjdG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJmYWNlU2NhbGUsCi0g
ICAgICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAgIGZsb2F0IG5vcm1hbFZlY3Rvckxl
bmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAgICAgICBpZiAoZGF0YS5lZmZlY3Qt
PmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQot
ICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogKG5vcm1h
bFZlY3RvciAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3Ro
ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKLSAgICAgICAgICAgICAgICBs
aWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAotICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci55KCksCi0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVj
dG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAotICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxl
bmd0aCgpOwotICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAg
ICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiAobm9y
bWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndh
eVZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhh
bGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgp
LCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxp
Z2h0U3RyZW5ndGggPiAxKQotICAgICAgICBsaWdodFN0cmVuZ3RoID0gMTsKLSAgICBpZiAobGln
aHRTdHJlbmd0aCA8IDApCi0gICAgICAgIGxpZ2h0U3RyZW5ndGggPSAwOwotCi0gICAgdWludDhf
dCBwaXhlbFZhbHVlWzNdID0gewotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0
cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSAqIDI1NS4wZiksCi0gICAgICAg
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JW
ZWN0b3IueSgpICogMjU1LjBmKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRT
dHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci56KCkgKiAyNTUuMGYpCi0gICAgfTsK
LSAgICAKLSAgICBkYXRhLnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsK
LX0KLQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbChpbnQgb2Zmc2V0
LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0
b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQotewotICAgIHNldFBpeGVsSW50ZXJuYWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbDJE
VmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci19Ci0KLS8vIFRoaXMgYXBwZWFycyB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1l
IHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVhZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3
cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4KLXZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0
WSwgaW50IGVuZFkpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+IDAgc2luY2Ugd2Ug
cmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCi0gICAgQVNTRVJUKHN0YXJ0
WSk7Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0gICAgZm9yIChpbnQgeSA9IHN0YXJ0
WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgcm93U3RhcnRPZmZzZXQgPSB5ICogZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHByZXZpb3VzUm93U3Rh
cnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0g
ICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9mZnNldCArIGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7Ci0KLSAgICAgICAgLy8gYWxwaGFXaW5kb3cgaXMgYSBsb2NhbCBj
YWNoZSBvZiBhbHBoYSB2YWx1ZXMuCi0gICAgICAgIC8vIEZpbGwgdGhlIHR3byByaWdodCBjb2x1
bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0aGUgY2VudGVyIGNvbHVtbi4KLSAg
ICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVhY2ggcm93IGxlZnQgdGhlbiBmaWxs
IHRoZSByaWdodCBjb2x1bW4uCi0gICAgICAgIEFscGhhV2luZG93IGFscGhhV2luZG93OwotICAg
ICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFy
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0VG9wUmln
aHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Q2VudGVyKGRhdGEu
cGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAg
ICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVscy0+aXRlbShyb3dTdGFydE9mZnNl
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFX
aW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFydCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tUmlnaHQoZGF0YS5w
aXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLQotICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQgKyBjUGl4ZWxTaXpl
OwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGggLSAxOyArK3gsIG9mZnNl
dCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBhbHBoYVdpbmRvdy5zaGlmdCgpOwotICAg
ICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwg
eSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0
LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigpKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJp
Y1dvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCi17Ci0gICAgYXBwbHlQbGF0Zm9y
bUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEs
IHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7Ci19Ci0KLSNpZiAhKENQVShB
Uk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElC
TEUpKQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICB1bnNpZ25lZCByb3dzVG9Qcm9jZXNzID0gZGF0YS5o
ZWlnaHQgLSAyOwotICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8g
ODsKLSAgICAKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9
IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLSAg
ICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0
YS53aWR0aCAtIDIpICogcm93c1RvUHJvY2VzcykgLyBtaW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4
TnVtVGhyZWFkcyk7Ci0KLSAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAg
ICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2JzCi0gICAgICAgIFBhcmFsbGVsSm9iczxBcHBs
eVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIsIG9w
dGltYWxUaHJlYWROdW1iZXIpOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJh
eQotICAgICAgICBpbnQgam9iID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwotICAgICAg
ICBpZiAoam9iID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJ5U3Rl
cCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0
bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyB5U3RlcCAqIGpvYnMgPCB0b3RhbCBzaXpl
LiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRy
YSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgeVN0ZXAgPSByb3dzVG9Qcm9jZXNzIC8gam9iOwot
ICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSByb3dzVG9Qcm9jZXNzICUgam9i
OwotCi0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gMTsKLSAgICAgICAgICAgIGZvciAoLS1qb2I7
IGpvYiA+PSAwOyAtLWpvYikgewotICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFy
YW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFt
cy5kYXRhID0gZGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gcGFp
bnRpbmdEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5U3RhcnQ7Ci0gICAg
ICAgICAgICAgICAgeVN0YXJ0ICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyB5U3RlcCArIDEgOiB5
U3RlcDsKLSAgICAgICAgICAgICAgICBwYXJhbXMueUVuZCA9IHlTdGFydDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1v
ZGUuCi0gICAgfQotCi0gICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChkYXRhLCBwYWludGlu
Z0RhdGEsIDEsIGRhdGEuaGVpZ2h0IC0gMSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBGRUxpZ2h0aW5n
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkK
LXsKLSAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLQotICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5D
b2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOwotICAgIHBhaW50aW5nRGF0YS5p
bml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwot
Ci0gICAgZGF0YS5saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqZGF0YS5lZmZlY3QsIHBh
aW50aW5nRGF0YSk7Ci0KLSAgICAvLyBUb3AgbGVmdC4KLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAg
ICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJkaXYz
LCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wTGVmdE5vcm1hbChvZmZzZXQpKTsKLQotICAgIC8vIFRv
cCByaWdodC4KLSAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0g
Y1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0
YS53aWR0aCAtIDEsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0
Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gQm90dG9tIGxlZnQuCi0gICAgb2Zmc2V0ID0gKGRh
dGEuaGVpZ2h0IC0gMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIHNl
dFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodCAtIDEsIGNG
YWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0KSk7
Ci0KLSAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHQgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIGRhdGEuaGVpZ2h0IC0g
MSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zm
c2V0KSk7Ci0KLSAgICBpZiAoZGF0YS53aWR0aCA+PSAzKSB7Ci0gICAgICAgIC8vIFRvcCByb3cu
Ci0gICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4
IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAg
ICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYz
LCBjRmFjdG9yMWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgICAgIC8v
IEJvdHRvbSByb3cuCi0gICAgICAgIG9mZnNldCA9IChkYXRhLmhlaWdodCAtIDEpICogZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50
IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0g
ICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5o
ZWlnaHQgLSAxLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3Jt
YWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaWYgKGRhdGEuaGVpZ2h0ID49IDMpIHsKLSAgICAg
ICAgLy8gTGVmdCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHQgLSAx
OyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAg
ICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIHksIGNGYWN0b3Ix
ZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7Ci0KLSAg
ICAgICAgLy8gUmlnaHQgY29sdW1uLgotICAgICAgICBvZmZzZXQgPSAyICogZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAx
OyB5IDwgZGF0YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGlu
Z0RhdGEsIGRhdGEud2lkdGggLSAxLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0
YS5yaWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKLSAgICB9Ci0KLSAgICBpZiAoZGF0YS53aWR0
aCA+PSAzICYmIGRhdGEuaGVpZ2h0ID49IDMpIHsKLSAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxz
LgotICAgICAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhkYXRhLCBwYWludGluZ0RhdGEpOwotICAg
IH0KLQotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ICogZGF0YS5oZWlnaHQ7Ci0gICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJUeXBlKCkgPT0gRmls
dGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykgewotICAgICAgICBmb3IgKGludCBp
ID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQot
ICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNp
emUpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTEgPSBkYXRhLnBpeGVscy0+aXRlbShpKTsKLSAg
ICAgICAgICAgIHVpbnQ4X3QgYTIgPSBkYXRhLnBpeGVscy0+aXRlbShpICsgMSk7Ci0gICAgICAg
ICAgICB1aW50OF90IGEzID0gZGF0YS5waXhlbHMtPml0ZW0oaSArIDIpOwotICAgICAgICAgICAg
Ly8gYWxwaGEgc2V0IHRvIHNldCB0byBtYXgoYTEsIGEyLCBhMykKLSAgICAgICAgICAgIGRhdGEu
cGl4ZWxzLT5zZXQoaSArIDMsIGExID49IGEyID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIg
Pj0gYTMgPyBhMiA6IGEzKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgRkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZm
ZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsK
LQotICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5
UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdS
ZWN0KTsKLQotICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRo
YW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCi0gICAgLy8gc3RhbmRhcmQg
aGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVm
b3gpIGhhcyBzdHJhbmdlCi0gICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5n
dGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KLSAgICAvLyBBbnl3YXks
IGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgotCi0g
ICAgSW50U2l6ZSBzaXplID0gSW50U2l6ZShtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSk7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAo
b3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUg
dGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCi0gICAgaWYgKHNpemUud2lk
dGgoKSA8PSAyIHx8IHNpemUuaGVpZ2h0KCkgPD0gMikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICBkYXRhLmVmZmVjdCA9ICZtX2VmZmVjdDsKLSAg
ICBkYXRhLmZpbHRlclR5cGUgPSBtX2VmZmVjdC5maWx0ZXJUeXBlKCk7Ci0gICAgZGF0YS5saWdo
dGluZ0NvbG9yID0gbV9lZmZlY3QubGlnaHRpbmdDb2xvcigpOwotICAgIGRhdGEuc3VyZmFjZVNj
YWxlID0gbV9lZmZlY3Quc3VyZmFjZVNjYWxlKCkgLyAyNTUuMGY7Ci0gICAgZGF0YS5kaWZmdXNl
Q29uc3RhbnQgPSBtX2VmZmVjdC5kaWZmdXNlQ29uc3RhbnQoKTsKLSAgICBkYXRhLnNwZWN1bGFy
Q29uc3RhbnQgPSBtX2VmZmVjdC5zcGVjdWxhckNvbnN0YW50KCk7Ci0gICAgZGF0YS5zcGVjdWxh
ckV4cG9uZW50ID0gbV9lZmZlY3Quc3BlY3VsYXJFeHBvbmVudCgpOwotICAgIGRhdGEubGlnaHRT
b3VyY2UgPSAmbV9lZmZlY3QubGlnaHRTb3VyY2UoKTsKLSAgICBkYXRhLm9wZXJhdGluZ0NvbG9y
U3BhY2UgPSAmbV9lZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpOwotCi0gICAgZGF0YS5waXhl
bHMgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgPSBzaXplLndpZHRoKCkgKiBjUGl4ZWxTaXplOwotICAgIGRhdGEud2lkdGggPSBz
aXplLndpZHRoKCk7Ci0gICAgZGF0YS5oZWlnaHQgPSBzaXplLmhlaWdodCgpOwotCi0gICAgYXBw
bHlQbGF0Zm9ybShkYXRhKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgcmV0
dXJuIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRF
ZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCBhODRmZTg1YTM4MWZhODQwNzVlNTE2NTRjYzJjMGM1
YmI4YzFhYjJmLi4zMTE4OWE0MGE2MDVhMDVjY2EwYjgxMGVjYTkyYjNhMTFmZDk0ZTk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVy
c2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZworICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDc2YTc0NjRmMDBlNmQzNzA4
ZWU5NGRjYWNkOTZmNjFmN2FjYTZiZTYuLjNmMzYyMWMwODQ3Y2JhM2E1ZjkwMWM5NzU2ZWQ0NDg3
NjY4MjVjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMiw5ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRkVNZXJnZS5oIgogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSAiRkVNZXJnZVNvZnR3YXJlQXBwbGllci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksMzYgKzM4LDYgQEAgRkVNZXJn
ZTo6RkVNZXJnZSgpCiB7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRU1lcmdlU29m
dHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3Mg
RkVNZXJnZVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXI8RkVNZXJnZT4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXI8RkVNZXJnZT47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9v
bCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZm
ZWN0cykgb3ZlcnJpZGU7Ci19OwotCi1ib29sIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQot
ewotICAgIEFTU0VSVChpbnB1dEVmZmVjdHMuc2l6ZSgpID4gMCk7Ci0KLSAgICBhdXRvIHJlc3Vs
dEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdElt
YWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBmaWx0ZXJDb250ZXh0ID0g
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIGZvciAoYXV0byYgaW4gOiBpbnB1dEVmZmVj
dHMpIHsKLSAgICAgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgICAgICBpZiAoIWluQnVmZmVyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCiBib29sIEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4gRkVNZXJnZVNvZnR3YXJlQXBwbGll
cigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCmluZGV4IDg4N2JhMGZk
MzNmODkzMmNiZjQzMzgyNjhlN2FhYTQ4YWZhMmYwNDEuLjg0NmIxNWNmYmFiYTIyOWVjZjVlMmYx
NDBmOTg3ZDgzNjkxNzQ2NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCBkOTQ1MTgxNTY4ZjBhNmU3
ZjBiNTdiNTM5YzUzOTQ5MjFkNzgxNjcyLi4xYTIyYjUwYWNjZDYwM2U1Njc1NWFhNjFlNmYwODBm
NzRlYWJjYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDE4IEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEzICsyNSw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRkVNb3JwaG9sb2d5LmgiCiAKLSNpbmNsdWRlICJDb2xvckNvbXBv
bmVudHMuaCIKLSNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0j
aW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
Ci0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlICJGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg0LDIwNyArNzks
NiBAQCB2b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVj
dChwYWludFJlY3QpKTsKIH0KIAotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFTW9ycGhvbG9n
eVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNs
YXNzIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25j
cmV0ZUFwcGxpZXI8RkVNb3JwaG9sb2d5PiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVj
dENvbmNyZXRlQXBwbGllcjxGRU1vcnBob2xvZ3k+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFz
ZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHVzaW5n
IENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+LCAxNj47
Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSB0eXBlOwotICAgICAgICBpbnQgcmFkaXVzWDsKLSAgICAgICAgaW50IHJhZGl1c1k7Ci0g
ICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5OwotICAgICAgICBV
aW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAg
ICAgICBpbnQgaGVpZ2h0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsK
LSAgICAgICAgY29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgICAgIGludCBz
dGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07Ci0KLSAgICBzdGF0aWMgaW5saW5lIGlu
dCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpIHsgcmV0dXJuICh5ICog
d2lkdGggKyB4KSAqIDQ7IH0KLSAgICBzdGF0aWMgaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1h
a2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4mIGNvbXBvbmVudHMpIHsgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFrZUZy
b21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9OyB9Ci0KLSAgICBzdGF0
aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRz
ZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpIHsgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsgfQotICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21w
b25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlKTsKLSAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJh
eSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUpOwotICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhjb25z
dCBQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9pZCBh
cHBseVBsYXRmb3JtKGNvbnN0IFBhaW50aW5nRGF0YSYpOwotfTsKLQotaW5saW5lIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1pbk9yTWF4
KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAg
aWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4g
cGVyQ29tcG9uZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBi
KTsKLX0KLQotaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXI6OmNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
cmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29s
b3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJh
eUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKLQotICAgIGZvciAoaW50IHkgPSB5U3RhcnQg
KyAxOyB5IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21w
b25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4
KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXgoZXh0cmVtdW0s
IHBpeGVsLCB0eXBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4dHJlbXVtOwotfQotCi1pbmxpbmUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6
a2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVt
dW0gPSBtaW5Pck1heChleHRyZW11bSwga2VybmVsW2ldLCB0eXBlKTsKLQotICAgIHJldHVybiBl
eHRyZW11bTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZ
LCBpbnQgZW5kWSkKLXsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBjb25zdCBh
dXRvJiBzcmNQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5OwotICAgIGF1
dG8mIGRzdFBpeGVsQXJyYXkgPSAqcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXk7Ci0KLSAgICBj
b25zdCBpbnQgcmFkaXVzWCA9IHBhaW50aW5nRGF0YS5yYWRpdXNYOwotICAgIGNvbnN0IGludCBy
YWRpdXNZID0gcGFpbnRpbmdEYXRhLnJhZGl1c1k7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gcGFp
bnRpbmdEYXRhLndpZHRoOwotICAgIGNvbnN0IGludCBoZWlnaHQgPSBwYWludGluZ0RhdGEuaGVp
Z2h0OwotCi0gICAgQVNTRVJUKHJhZGl1c1ggPD0gd2lkdGggfHwgcmFkaXVzWSA8PSBoZWlnaHQp
OwotICAgIEFTU0VSVChzdGFydFkgPj0gMCAmJiBlbmRZIDw9IGhlaWdodCAmJiBzdGFydFkgPCBl
bmRZKTsKLQotICAgIENvbHVtbkV4dHJlbWEgZXh0cmVtYTsKLSAgICBleHRyZW1hLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMiAqIHJhZGl1c1ggKyAxKTsKLQotICAgIGZvciAoaW50IHkgPSBzdGFy
dFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgaW50IHlSYWRpdXNTdGFydCA9IHN0ZDo6bWF4
KDAsIHkgLSByYWRpdXNZKTsKLSAgICAgICAgaW50IHlSYWRpdXNFbmQgPSBzdGQ6Om1pbihoZWln
aHQsIHkgKyByYWRpdXNZICsgMSk7Ci0KLSAgICAgICAgZXh0cmVtYS5zaHJpbmsoMCk7Ci0KLSAg
ICAgICAgLy8gV2Ugc3RhcnQgYXQgdGhlIGxlZnQgZWRnZSwgc28gY29tcHV0ZSBleHRyZW1lIGZv
ciB0aGUgcmFkaXVzWCBjb2x1bW5zLgotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJhZGl1
c1g7ICsreCkKLSAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1Bp
eGVsQXJyYXksIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIHBhaW50aW5nRGF0
YS50eXBlKSk7Ci0KLSAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2Yg
bmV4dCBjb2x1bW4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7Ci0g
ICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkKLSAgICAgICAgICAgICAgICBleHRy
ZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsgcmFkaXVzWCwgeVJh
ZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKLQotICAg
ICAgICAgICAgaWYgKHggPiByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3Zl
KDApOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHks
IHdpZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29s
b3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIHBhaW50aW5nRGF0YS50eXBlKSku
dmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5U29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1zKQotewot
ICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKCpwYXJhbXMtPnBhaW50aW5nRGF0YSwgcGFyYW1zLT5z
dGFydFksIHBhcmFtcy0+ZW5kWSk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewot
ICAgIC8vIEVtcGlyaWNhbGx5LCBydW50aW1lIGlzIGFwcHJveGltYXRlbHkgbGluZWFyIG92ZXIg
cmVhc29uYWJsZSBrZXJuZWwgc2l6ZXMgd2l0aCBhIHNsb3BlIG9mIGFib3V0IDAuNjUuCi0gICAg
ZmxvYXQga2VybmVsRmFjdG9yID0gc3FydChwYWludGluZ0RhdGEucmFkaXVzWCAqIHBhaW50aW5n
RGF0YS5yYWRpdXNZKSAqIDAuNjU7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxBcmVh
ID0gKDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2Jz
Ci0gICAgCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQg
LyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25l
ZD4oKHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0
b3IpIC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwotICAgIGlmIChvcHRpbWFsVGhyZWFk
TnVtYmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8QXBwbHlQYXJhbWV0ZXJzPiBwYXJh
bGxlbEpvYnMoJmFwcGx5UGxhdGZvcm1Xb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotICAg
ICAgICBhdXRvIG51bU9mVGhyZWFkcyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKLSAg
ICAgICAgaWYgKG51bU9mVGhyZWFkcyA+IDEpIHsKLSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBq
b2IgaW50byAiam9iU2l6ZSItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5l
ZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyBqb2JTaXplICog
am9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWlu
ZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGludCBqb2JTaXplID0gcGFpbnRpbmdE
YXRhLmhlaWdodCAvIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBqb2JzV2l0aEV4dHJh
ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsKLSAgICAgICAgICAgIGludCBj
dXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqb2IgPSBudW1PZlRocmVhZHMgLSAx
OyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBh
cmFtID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFt
LnN0YXJ0WSA9IGN1cnJlbnRZOwotICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpv
YnNXaXRoRXh0cmEgPyBqb2JTaXplICsgMSA6IGpvYlNpemU7Ci0gICAgICAgICAgICAgICAgcGFy
YW0uZW5kWSA9IGN1cnJlbnRZOwotICAgICAgICAgICAgICAgIHBhcmFtLnBhaW50aW5nRGF0YSA9
ICZwYWludGluZ0RhdGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXJhbGxlbEpvYnMu
ZXhlY3V0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZh
bGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQgbW9kZWwKLSAgICB9Ci0KLSAgICBhcHBseVBsYXRmb3Jt
R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwotfQotCi1ib29s
IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQotewotICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShp
bi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgYXV0byBpc0RlZ2VuZXJhdGUgPSBbXShpbnQgcmFk
aXVzWCwgaW50IHJhZGl1c1kpIC0+IGJvb2wgewotICAgICAgICByZXR1cm4gcmFkaXVzWCA8IDAg
fHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKTsKLSAgICB9OwotCi0gICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgSW50U2l6ZSByYWRp
dXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9lZmZlY3QucmFkaXVzWCgpLCBtX2VmZmVj
dC5yYWRpdXNZKCkpKTsKLQotICAgIGlmIChpc0RlZ2VuZXJhdGUocmFkaXVzLndpZHRoKCksIHJh
ZGl1cy5oZWlnaHQoKSkpIHsKLSAgICAgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVk
QnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnJhZGl1c1goKSwgbV9lZmZlY3QucmFkaXVzWSgpIH0p
KTsKLSAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkg
LSAxLCByYWRpdXMud2lkdGgoKSk7Ci0gICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3RE
cmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7Ci0KLSAgICBpZiAoaXNE
ZWdlbmVyYXRlKHJhZGl1c1gsIHJhZGl1c1kpKSB7Ci0gICAgICAgIGluLT5jb3B5UGl4ZWxCdWZm
ZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9
IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBlZmZlY3REcmF3aW5nUmVjdCwgbV9lZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsK
LSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
LT5kYXRhKCk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5n
RGF0YS50eXBlID0gbV9lZmZlY3QubW9ycGhvbG9neU9wZXJhdG9yKCk7Ci0gICAgcGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkgPSAmc291cmNlUGl4ZWxBcnJheTsKLSAgICBwYWludGluZ0RhdGEu
ZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRh
LndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7Ci0gICAgcGFpbnRpbmdE
YXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKTsKLSAgICBwYWlu
dGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOwotICAgIHBhaW50aW5nRGF0YS5yYWRp
dXNZID0gY2VpbGYocmFkaXVzWSk7Ci0KLSAgICBhcHBseVBsYXRmb3JtKHBhaW50aW5nRGF0YSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgcmV0dXJuIEZFTW9ycGhvbG9n
eVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7CkBA
IC0yOTMsMTMgKzg3LDEzIEBAIGJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9VTktOT1dO
OgorICAgIGNhc2UgTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6VW5rbm93bjoKICAgICAgICAgdHMg
PDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9FUk9ERToKKyAgICBjYXNlIE1vcnBob2xvZ3lPcGVyYXRvclR5cGU6OkVyb2RlOgogICAg
ICAgICB0cyA8PCAiRVJPREUiOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9ESUxBVEU6CisgICAgY2FzZSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpEaWxh
dGU6CiAgICAgICAgIHRzIDw8ICJESUxBVEUiOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaAppbmRleCA1ODk1MDJhNmY1YmM2ZDIwYjhlMTllYTlmZjU3Y2E3ODkyNWQ4MjY0Li43
MTkzOTk4Zjg5ZTQ3OWViYThlMGEzMDc0MmQ2ODk2ZGExOTEzMTc2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgK
QEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJ
bmMuIDIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUs
MTAgKzI2LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIHsKLSAgICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfVU5LTk9XTiA9IDAsCi0gICAg
RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFID0gMSwKLSAgICBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfRElMQVRFID0gMgorZW51bSBjbGFzcyBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKKyAgICBV
bmtub3duLAorICAgIEVyb2RlLAorICAgIERpbGF0ZQogfTsKIAogY2xhc3MgRkVNb3JwaG9sb2d5
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4IDFkYTkyNzcwZTZjMmQyNjVh
MWZlODU3MTc4YjVlOGU3ZjU2MzZhNTQuLjUyYzliOWMzYmU4ZjJiYjgxN2M1MTMxNTkyODMzOWEz
ZDE5ZjhkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjUsOSArMjYsNyBAQAogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAKICNpbmNs
dWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRl
ICJGRU9mZnNldFNvZnR3YXJlQXBwbGllci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUsMzQgKzY0LDYgQEAgdm9pZCBGRU9m
ZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAg
ICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0K
IAotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyIHRvIHNl
cGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgRkVPZmZzZXRTb2Z0d2FyZUFw
cGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFT2Zmc2V0PiB7Ci0g
ICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRU9mZnNldD47Ci0K
LXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9vbCBhcHBseShjb25zdCBG
aWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7
Ci19OwotCi1ib29sIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXIm
IGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gcmVz
dWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGF1dG8gaW5CdWZm
ZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFp
bkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9lZmZlY3Quc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lv
biA9IG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2Fs
ZSh7IG1fZWZmZWN0LmR4KCksIG1fZWZmZWN0LmR5KCkgfSkpOwotICAgIHJlc3VsdEltYWdlLT5j
b250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbik7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBGRU9mZnNldFNvZnR3YXJlQXBw
bGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggMTZm
NjBlOTZiNDIzODczYTM0MWMyZjI2NDVhODAyNjljYTg3Y2Y1Ny4uN2ZmYzU1MjM1NWVjMjJlYzBk
NTFmMjNiYTA4ODgwNjUwZWVhYzM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCmlu
ZGV4IDdmYmZkODFhNjA4YjY1ZGQ3MTE3NGEzYjYzMWQzYTQzMzRlZWY4NmQuLmZjNTYwNmJiNTQ2
ZTQ5NGE5N2EzNTFhYTE1ZTU1ODM2OWE4Nzg0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVT
cGVjdWxhckxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCmluZGV4IGFjNDUwZGJkYjYwY2Q2OTdjZDhkZmMzYzc5
MzE4ZGJmNjRhZDUzMzUuLjVjN2U4MWNlMzA0NzIxYWU4MWIxNDM2NDRiNzYzODliNzMxOTkzM2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVT
cGVjdWxhckxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDQzOTA0OGY1YmQxZTE5NzU3ZDkxN2Zh
YjI1ZmRhNzM2YjE3ZDU3NzYuLjI0OWNiODcyZTdhMTk4MjczNTQ1OGI2Y2IzNTRiZjQ2MTg2MDBk
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFs
ZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjEsMTQgKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRVRp
bGUuaCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZpbHRlci5o
IgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKyNpbmNsdWRlICJGRVRpbGVTb2Z0
d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVl
QXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsNjEgKzM4
LDYgQEAgRkVUaWxlOjpGRVRpbGUoKQogewogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3Mg
RkVUaWxlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVz
LgotY2xhc3MgRkVUaWxlU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNy
ZXRlQXBwbGllcjxGRVRpbGU+IHsKLSAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyPEZFVGlsZT47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0g
ICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlu
cHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci19OwotCi1ib29sIEZFVGlsZVNvZnR3YXJlQXBwbGllcjo6
YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0
KCk7Ci0KLSAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYg
KCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgLy8g
U291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhl
IGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNv
dXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0
aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7
Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24o
KTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbV9lZmZlY3QubWF4RWZmZWN0
UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgaWYgKGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljIHx8IGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkgewotICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0
ZXJSZWdpb24oKTsKLSAgICAgICAgdGlsZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSk7Ci0gICAgaWYgKCF0aWxlSW1hZ2UpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29u
dGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwotICAgIHRpbGVJbWFnZUNvbnRleHQudHJhbnNs
YXRlKC1pbk1heEVmZmVjdExvY2F0aW9uLngoKSwgLWluTWF4RWZmZWN0TG9jYXRpb24ueSgpKTsK
LSAgICB0aWxlSW1hZ2VDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOwotCi0gICAgYXV0byB0aWxlSW1hZ2VDb3B5ID0g
SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2UpKTsKLSAg
ICBpZiAoIXRpbGVJbWFnZUNvcHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFmZmlu
ZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHBhdHRlcm5UcmFuc2Zvcm0udHJhbnNs
YXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RMb2NhdGlvbik7Ci0KLSAgICBhdXRv
IHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlQ29weS5yZWxlYXNlTm9uTnVsbCgp
LCB7IHRydWUsIHRydWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7Ci0KLSAgICBHcmFwaGljc0NvbnRl
eHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIGZpbHRlckNv
bnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSk7Ci0gICAgZmlsdGVyQ29udGV4
dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgcmV0dXJu
IEZFVGlsZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuaAppbmRleCA0MjZlZDdkODFkYmFmNDI2ZDY5MzdhOTc2MDRiNDhlOTA1MDQ1ZGIyLi43MTdi
NWMyZmE5OTllZWQwNzQ1MjIyNzY0NWZiYjkzYTZhZjg3MTJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAppbmRl
eCAzYjQ3YTE5NTc5YTg1ZmY5NGRkMWYyZGZhODEwZmQ3NWQ4MzZmZDg5Li4zMjIzYWY3OWQ1OWY2
MzJkNzZkNzk2M2I2NDFjNWYzN2ViNDczZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBAIC01LDcg
KzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6
ZWdlZC5odT4KICAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNiwxMSArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFVHVyYnVsZW5jZS5oIgogCi0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmls
dGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjaW5jbHVk
ZSAiRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05OSw0MjAgKzk1LDYgQEAgYm9v
bCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQogICAgIHJldHVybiB0
cnVlOwogfQogCi0vLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFkYXB0
ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlvbjoK
LS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2UK
LQotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllciB0
byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIEZFVHVyYnVsZW5jZVNv
ZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUdXJi
dWxlbmNlPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RVR1cmJ1bGVuY2U+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJv
b2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIC8vIFByb2R1Y2VzIHJlc3VsdHMgaW4g
dGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6Ci0gICAgLy8gciA9IChhICog
cikgbW9kIG0gd2hlcmUgYSA9IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFuZAotICAgIC8vIG0g
PSBzX3JhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCi0gICAg
Ly8gU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3Qu
IDE5ODgKLSAgICAvLyBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSBy
ZXN1bHQgMTA0MzYxODA2NQotICAgIC8vIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVy
IGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0gICAgc3RhdGljIGNvbnN0IGludCBzX3Blcmxp
bk5vaXNlID0gNDA5NjsKLSAgICBzdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0gMjE0
NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi0gICAgc3RhdGljIGNvbnN0IGludCBzX3JhbmRBbXBsaXR1
ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQotICAgIHN0YXRpYyBjb25z
dCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLSAgICBzdGF0aWMgY29uc3QgaW50IHNf
cmFuZFIgPSAyODM2OyAvLyBtICUgYQotCi0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrU2l6
ZSA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUg
LSAxOwotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIC8vIENvbXB1dGUgcHNl
dWRvIHJhbmRvbSBudW1iZXIuCi0gICAgICAgIGxvbmcgcmFuZG9tKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEp
IC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0IDw9
IDApCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNfcmFuZE1heGltdW07Ci0gICAgICAgICAg
ICBzZWVkID0gcmVzdWx0OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
Ci0gICAgICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKLSAgICAgICAgaW50IG51bU9jdGF2
ZXM7Ci0gICAgICAgIGxvbmcgc2VlZDsKLSAgICAgICAgYm9vbCBzdGl0Y2hUaWxlczsKLSAgICAg
ICAgSW50U2l6ZSBwYWludGluZ1NpemU7Ci0KLSAgICAgICAgaW50IGxhdHRpY2VTZWxlY3Rvclsy
ICogc19ibG9ja1NpemUgKyAyXTsKLSAgICAgICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAqIHNfYmxv
Y2tTaXplICsgMl1bMl07Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAg
ICAgaW50IHdpZHRoIHsgMCB9OyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3cmFwIGZvciBz
dGl0Y2hpbmcuCi0gICAgICAgIGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2YWx1ZSB0byB3
cmFwLgotICAgICAgICBpbnQgaGVpZ2h0IHsgMCB9OwotICAgICAgICBpbnQgd3JhcFkgeyAwIH07
Ci0gICAgfTsKLQotICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgewotICAgICAgICBJbnRSZWN0
IGZpbHRlclJlZ2lvbjsKLSAgICAgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlOwotICAgICAgICBV
aW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKLSAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWlu
dGluZ0RhdGE7Ci0gICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICAgICAgaW50IHN0
YXJ0WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBpbmxpbmUgZmxv
YXQgc21vb3RoQ3VydmUoZmxvYXQgdCkgeyByZXR1cm4gdCAqIHQgKiAoMyAtIDIgKiB0KTsgfQot
ICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9h
dCBhLCBmbG9hdCBiKSB7IHJldHVybiBhICsgdCAqIChiIC0gYSk7IH0KLQotICAgIHN0YXRpYyBQ
YWludGluZ0RhdGEgaW5pdFBhaW50aW5nRGF0YShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVk
LCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpOwotICAgIHN0
YXRpYyBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQm
IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVksIGJvb2wgc3RpdGNoVGlsZXMp
OwotCi0gICAgc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBQ
YWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VW
ZWN0b3IpOwotICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNl
ZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENv
bXBvbmVudHMpOwotICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3Vs
YXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0
YSwgY29uc3QgRmxvYXRQb2ludCYpOwotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdl
bmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRl
clNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRh
JiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotICAgIHN0YXRpYyB2b2lkIGFw
cGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
ZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBQYWludGluZ0RhdGEm
LCBTdGl0Y2hEYXRhJik7Ci19OwotCi1GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OlBhaW50
aW5nRGF0YSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmluaXRQYWludGluZ0RhdGEoVHVy
YnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJ
bnRTaXplJiBwYWludGluZ1NpemUpCi17Ci0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSB7
IHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwg
c3RpdGNoVGlsZXMsIHBhaW50aW5nU2l6ZSwgeyB9LCB7IH0gfTsKLQotICAgIC8vIFRoZSBzZWVk
IHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgc19yYW5kTWF4aW11bSAtIDFdLgotICAgIGlm
IChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0o
cGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5kTWF4aW11bSAtIDEpKSArIDE7Ci0gICAgaWYgKHBh
aW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4aW11bSAtIDEpCi0gICAgICAgIHBhaW50aW5nRGF0
YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7Ci0KLSAgICBmbG9hdCogZ3JhZGllbnQ7Ci0gICAg
Zm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gaTsKLSAgICAgICAgICAgIGdyYWRpZW50ID0g
cGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldOwotICAgICAgICAgICAgZG8gewotICAg
ICAgICAgICAgICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0Rh
dGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2Nr
U2l6ZTsKLSAgICAgICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0Pigo
cGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUp
IC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICB9IHdoaWxlICghZ3JhZGllbnRbMF0gJiYgIWdy
YWRpZW50WzFdKTsKLSAgICAgICAgICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6
Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBncmFkaWVudFsw
XSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICAgICAgZ3JhZGllbnRbMV0gLz0gbm9y
bWFsaXphdGlvbkZhY3RvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSBz
X2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgaW50IGsgPSBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5k
b20oKSAlIHNfYmxvY2tTaXplOwotICAgICAgICBBU1NFUlQoaiA+PSAwKTsKLSAgICAgICAgQVNT
RVJUKGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRp
Y2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal07Ci0gICAgICAg
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0gPSBrOwotICAgIH0KLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyArK2kpIHsKLSAgICAgICAgcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRp
Y2VTZWxlY3RvcltpXTsKLSAgICAgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0
OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVs
XVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ld
WzBdOwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tT
aXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMV07Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcGFpbnRpbmdEYXRhOwotfQotCi1GRVR1cmJ1bGVu
Y2VTb2Z0d2FyZUFwcGxpZXI6OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
Ojpjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5
WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBib29sIHN0aXRjaFRpbGVzKQotewotICAgIGlmICgh
c3RpdGNoVGlsZXMpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBmbG9hdCB0aWxlV2lkdGgg
PSB0aWxlU2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHRpbGVIZWlnaHQgPSB0aWxlU2l6ZS5oZWln
aHQoKTsKLSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAmJiB0aWxlSGVpZ2h0ID4gMCk7Ci0KLSAg
ICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVz
dCBiZSBhZGp1c3RlZAotICAgIC8vIHNvIHRoYXQgdGhlIHRpbGUgYm9yZGVycyB3aWxsIGJlIGNv
bnRpbnVvdXMuCi0gICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7Ci0gICAgICAgIGZsb2F0IGxvd0Zy
ZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7
Ci0gICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsZih0aWxlV2lkdGggKiBiYXNlRnJl
cXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJl
IG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgotICAgICAgICBpZiAoYmFz
ZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5j
eVgpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxvd0ZyZXF1ZW5jeTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBoaWdoRnJlcXVlbmN5OwotICAgIH0K
LSAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0g
Zmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OwotICAgICAg
ICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZ
KSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WSAvIGxvd0ZyZXF1ZW5j
eSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgICAgIGJhc2VGcmVx
dWVuY3lZID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRnJl
cXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotCi0gICAgU3RpdGNoRGF0YSBzdGl0Y2hE
YXRhOwotICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYodGlsZVdpZHRoICogYmFzZUZyZXF1
ZW5jeVgpOwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0
YS53aWR0aDsKLSAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJvdW5kZih0aWxlSGVpZ2h0ICogYmFz
ZUZyZXF1ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgc3Rp
dGNoRGF0YS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gc3RpdGNoRGF0YTsKLX0KLQotLy8gVGhpcyBp
cyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmls
dGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQ
b2ludCYgbm9pc2VWZWN0b3IpCi17Ci0gICAgc3RydWN0IE5vaXNlUG9zaXRpb24gewotICAgICAg
ICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBzcGVjIHRleHQuCi0gICAgICAgIGludCBu
ZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRoZSBzcGVjIHRleHQuCi0gICAgICAgIGZsb2F0IGZy
YWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgotCi0gICAgICAgIE5vaXNlUG9z
aXRpb24oZmxvYXQgY29tcG9uZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyAgdCA9IHZl
Y1swXSArIFBlcmxpbk47Ci0gICAgICAgICAgICAvLyAgYngwID0gKGludCl0OwotICAgICAgICAg
ICAgLy8gIGJ4MSA9IGJ4MCsxOwotICAgICAgICAgICAgLy8gIHJ4MCA9IHQgLSAoaW50KXQ7Ci0g
ICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVudCArIHNfcGVybGluTm9pc2U7Ci0g
ICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pOwotICAgICAgICAg
ICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOwotICAgICAgICAgICAgZnJhY3Rpb24gPSBwb3NpdGlv
biAtIGluZGV4OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHN0aXRjaChpbnQg
c2l6ZSwgaW50IHdyYXBTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZiAoYngwID49
IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAvLyAgIGJ4MCAtPSBwU3RpdGNoSW5m
by0+bldpZHRoOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IHdyYXBTaXplKQotICAgICAgICAg
ICAgICAgIGluZGV4IC09IHNpemU7Ci0KLSAgICAgICAgICAgIC8vIGlmIChieDEgPj0gcFN0aXRj
aEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAgIC8vICAgYngxIC09IHBTdGl0Y2hJbmZvLT5uV2lk
dGg7Ci0gICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IHdyYXBTaXplKQotICAgICAgICAgICAg
ICAgIG5leHRJbmRleCAtPSBzaXplOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIE5vaXNlUG9z
aXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7Ci0gICAgTm9pc2VQb3NpdGlvbiBub2lzZVko
bm9pc2VWZWN0b3IueSgpKTsKLQotICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRpY2Ug
cG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChwYWludGluZ0RhdGEuc3RpdGNoVGlsZXMpIHsK
LSAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRhLndpZHRoLCBzdGl0Y2hEYXRhLndyYXBY
KTsKLSAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hEYXRhLmhlaWdodCwgc3RpdGNoRGF0YS53
cmFwWSk7Ci0gICAgfQotCi0gICAgLy8gYngwICY9IEJNOwotICAgIC8vIGJ4MSAmPSBCTTsKLSAg
ICAvLyBieTAgJj0gQk07Ci0gICAgLy8gYnkxICY9IEJNOwotICAgIG5vaXNlWC5pbmRleCAmPSBz
X2Jsb2NrTWFzazsKLSAgICBub2lzZVgubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5v
aXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVkubmV4dEluZGV4ICY9IHNfYmxv
Y2tNYXNrOwotCi0gICAgLy8gaSA9IHVMYXR0aWNlU2VsZWN0b3JbYngwXTsKLSAgICAvLyBqID0g
dUxhdHRpY2VTZWxlY3RvcltieDFdOwotICAgIGludCBsYXR0aWNlSW5kZXggPSBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5pbmRleF07Ci0gICAgaW50IG5leHRMYXR0aWNlSW5k
ZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5uZXh0SW5kZXhdOwotCi0g
ICAgLy8gc3ggPSBkb3VibGUoc19jdXJ2ZShyeDApKTsKLSAgICAvLyBzeSA9IGRvdWJsZShzX2N1
cnZlKHJ5MCkpOwotICAgIGZsb2F0IHN4ID0gc21vb3RoQ3VydmUobm9pc2VYLmZyYWN0aW9uKTsK
LSAgICBmbG9hdCBzeSA9IHNtb290aEN1cnZlKG5vaXNlWS5mcmFjdGlvbik7Ci0KLSAgICBhdXRv
IG5vaXNlRm9yQ2hhbm5lbCA9IFsmXShpbnQgY2hhbm5lbCkgewotICAgICAgICAvLyBiMDAgPSB1
TGF0dGljZVNlbGVjdG9yW2kgKyBieTBdCi0gICAgICAgIGludCBiMDAgPSBwYWludGluZ0RhdGEu
bGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5pbmRleF07Ci0gICAgICAgIC8v
IHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAwXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTAg
KiBxWzFdOwotICAgICAgICBjb25zdCBmbG9hdCogcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtj
aGFubmVsXVtiMDBdOwotICAgICAgICBmbG9hdCB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSAr
IG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0KLSAgICAgICAgLy8gYjEwID0gdUxhdHRpY2VTZWxl
Y3RvcltqICsgYnkwXTsKLSAgICAgICAgaW50IGIxMCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2Vs
ZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5pbmRleF07Ci0gICAgICAgIC8vIHJ4MSA9
IHJ4MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjEw
XTsgdiA9IHJ4MSAqIHFbMF0gKyByeTAgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRpbmdEYXRh
LmdyYWRpZW50W2NoYW5uZWxdW2IxMF07Ci0gICAgICAgIGZsb2F0IHYgPSAobm9pc2VYLmZyYWN0
aW9uIC0gMSkgKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9uICogcVsxXTsKLSAgICAgICAgLy8gYSA9
IGxlcnAoc3gsIHUsIHYpOwotICAgICAgICBmbG9hdCBhID0gbGluZWFySW50ZXJwb2xhdGlvbihz
eCwgdSwgdik7Ci0KLSAgICAgICAgLy8gYjAxID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkxXTsK
LSAgICAgICAgaW50IGIwMSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUlu
ZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Ci0gICAgICAgIC8vIHJ5MSA9IHJ5MCAtIDEuMGY7Ci0g
ICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAxXTsgdSA9IHJ4MCAqIHFb
MF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5u
ZWxdW2IwMV07Ci0gICAgICAgIHUgPSBub2lzZVguZnJhY3Rpb24gKiBxWzBdICsgKG5vaXNlWS5m
cmFjdGlvbiAtIDEpICogcVsxXTsKLQotICAgICAgICAvLyBiMTEgPSB1TGF0dGljZVNlbGVjdG9y
W2ogKyBieTFdOwotICAgICAgICBpbnQgYjExID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Ci0gICAgICAgIC8vIHEgPSBm
R3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjExXTsgdiA9IHJ4MSAqIHFbMF0gKyByeTEgKiBxWzFd
OwotICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IxMV07Ci0gICAg
ICAgIHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAt
IDEpICogcVsxXTsKLSAgICAgICAgLy8gYiA9IGxlcnAoc3gsIHUsIHYpOwotICAgICAgICBmbG9h
dCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7Ci0KLSAgICAgICAgLy8gcmV0dXJu
IGxlcnAoc3ksIGEsIGIpOwotICAgICAgICByZXR1cm4gbGluZWFySW50ZXJwb2xhdGlvbihzeSwg
YSwgYik7Ci0gICAgfTsKLQotICAgIHJldHVybiB7Ci0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgw
KSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDEpLAotICAgICAgICBub2lzZUZvckNoYW5uZWwo
MiksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgzKQotICAgIH07Ci19Ci0KLS8vIGh0dHBzOi8v
d3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQgZGVzY3Jp
YmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xvciBjb21wb25lbnRzLgotLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JHQkE8dWludDg+PihTUkdCQTxmbG9hdD4pIHRvIGdl
dCB0aGUgc2FtZSBiZWhhdmlvci4KLUNvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OnRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKQotewotICAgIHJldHVybiB7
Ci0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBv
bmVudHNbMF0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0
YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzFdICogMjU1KSwgMCwgMjU1KSwKLSAgICAg
ICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1sy
XSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nh
c3Q8aW50PihmbG9hdENvbXBvbmVudHNbM10gKiAyNTUpLCAwLCAyNTUpLAotICAgIH07Ci19Ci0K
LUNvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6
OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQotewotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdHVyYnVsZW5jZUZ1bmN0aW9uUmVz
dWx0OwotICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogcGFpbnRpbmdEYXRh
LmJhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVkp
OwotICAgIGZsb2F0IHJhdGlvID0gMTsKLSAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUg
PCBwYWludGluZ0RhdGEubnVtT2N0YXZlczsgKytvY3RhdmUpIHsKLSAgICAgICAgaWYgKHBhaW50
aW5nRGF0YS50eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCi0gICAgICAgICAg
ICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIHN0aXRj
aERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0
dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIHN0aXRjaERh
dGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJhdGlvOwotCi0gICAgICAgIG5vaXNlVmVjdG9yLnNl
dFgobm9pc2VWZWN0b3IueCgpICogMik7Ci0gICAgICAgIG5vaXNlVmVjdG9yLnNldFkobm9pc2VW
ZWN0b3IueSgpICogMik7Ci0gICAgICAgIHJhdGlvICo9IDI7Ci0KLSAgICAgICAgaWYgKHBhaW50
aW5nRGF0YS5zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1
ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBh
bmQKLSAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmllcyB0byBzdWJ0
cmFjdGluZyBpdCBvbmNlLgotICAgICAgICAgICAgc3RpdGNoRGF0YS53aWR0aCAqPSAyOwotICAg
ICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndyYXBYIC0gc19wZXJs
aW5Ob2lzZTsKLSAgICAgICAgICAgIHN0aXRjaERhdGEuaGVpZ2h0ICo9IDI7Ci0gICAgICAgICAg
ICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0aXRjaERhdGEud3JhcFkgLSBzX3Blcmxpbk5vaXNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHZhbHVlIG9mIHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSAr
IDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQotICAgIC8vIGFuZCAodHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgotICAgIGlmIChwYWludGluZ0RhdGEudHlwZSA9
PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAgICAgICB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKLQotICAg
IHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3Vs
dCk7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
R2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmls
dGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQg
ZW5kWSkKLXsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7Ci0KLSAgICBGbG9hdFBvaW50IHBv
aW50KDAsIGZpbHRlclJlZ2lvbi55KCkgKyBzdGFydFkpOwotICAgIGludCBpbmRleE9mUGl4ZWxD
aGFubmVsID0gc3RhcnRZICogKGZpbHRlclJlZ2lvbi53aWR0aCgpIDw8IDIpOwotICAgIEZsb2F0
U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBmaWx0ZXJTY2FsZS53aWR0aCgpLCAxIC8gZmlsdGVy
U2NhbGUuaGVpZ2h0KCkgfTsKLQotICAgIGZvciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyAr
K3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsKLSAgICAgICAgcG9pbnQu
c2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0
ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50Lngo
KSArIDEpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gcG9pbnQuc2NhbGVk
KGludmVyc2VTY2FsZS53aWR0aCgpLCBpbnZlcnNlU2NhbGUuaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWludGlu
Z0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5z
ZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwp
OwotICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdv
cmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCi17Ci0gICAgYXBwbHlQbGF0Zm9ybUdl
bmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9uLCBwYXJhbWV0ZXJzLT5maWx0ZXJTY2FsZSwg
KnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFt
ZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7
Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNv
bnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhKQotewotICAgIGludCBoZWlnaHQgPSBmaWx0ZXJSZWdp
b24uaGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQgYXJlYSA9IGZpbHRlclJlZ2lvbi5hcmVhKCk7Ci0K
LSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7
IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzLgotICAgIHVuc2lnbmVk
IG1heE51bVRocmVhZHMgPSBmaWx0ZXJSZWdpb24uaGVpZ2h0KCkgLyA4OwotICAgIHVuc2lnbmVk
IG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oYXJlYSAvIG1pbmltYWxS
ZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLQotICAgIGlmIChvcHRpbWFsVGhyZWFkTnVt
YmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8QXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxl
bEpvYnMoJmFwcGx5UGxhdGZvcm1Xb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotCi0gICAg
ICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQotICAgICAgICBhdXRvIG51bUpvYnMgPSBw
YXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChudW1Kb2JzID4gMSkgewot
ICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJzdGVwWSItc2l6ZWQgam9icywgZGlz
dHJpYnV0aW5nIHRoZSBleHRyYSByb3dzIGludG8gdGhlIGZpcnN0ICJqb2JzV2l0aEV4dHJhIiBq
b2JzLgotICAgICAgICAgICAgdW5zaWduZWQgc3RlcFkgPSBoZWlnaHQgLyBudW1Kb2JzOwotICAg
ICAgICAgICAgdW5zaWduZWQgam9ic1dpdGhFeHRyYSA9IGhlaWdodCAlIG51bUpvYnM7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBzdGFydFkgPSAwOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtSm9iczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247Ci0gICAgICAgICAgICAgICAgcGFy
YW1zLmZpbHRlclNjYWxlID0gZmlsdGVyU2NhbGU7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnBp
eGVsQXJyYXkgPSAmcGl4ZWxBcnJheTsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdE
YXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9
IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKLQot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9IChpIDwgam9ic1dpdGhFeHRyYSkg
PyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZW5kWSA9IHBhcmFt
cy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgc3RhcnRZICs9IGpvYkhlaWdo
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZhbGxiYWNr
IHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3IHRo
cmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwuCi0gICAgYXBwbHlQbGF0Zm9ybUdl
bmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwgcGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRh
LCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOwotfQotCi1ib29sIEZFVHVyYnVsZW5jZVNvZnR3YXJl
QXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZl
Y3RvciYpCi17Ci0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4
ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSk7Ci0gICAgaWYgKHJlc3VsdFNpemUuYXJlYSgpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhdXRvIHRpbGVTaXplID0gcm91bmRlZEludFNp
emUobV9lZmZlY3QuZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZs
b2F0IGJhc2VGcmVxdWVuY3lYID0gbV9lZmZlY3QuYmFzZUZyZXF1ZW5jeVgoKTsKLSAgICBmbG9h
dCBiYXNlRnJlcXVlbmN5WSA9IG1fZWZmZWN0LmJhc2VGcmVxdWVuY3lZKCk7Ci0gICAgYXV0byBz
dGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJh
c2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5zdGl0Y2hUaWxlcygpKTsKLQotICAgIGF1dG8gcGFpbnRp
bmdEYXRhID0gaW5pdFBhaW50aW5nRGF0YShtX2VmZmVjdC50eXBlKCksIGJhc2VGcmVxdWVuY3lY
LCBiYXNlRnJlcXVlbmN5WSwgbV9lZmZlY3QubnVtT2N0YXZlcygpLCBtX2VmZmVjdC5zZWVkKCks
IG1fZWZmZWN0LnN0aXRjaFRpbGVzKCksIHRpbGVTaXplKTsKLQotICAgIGFwcGx5UGxhdGZvcm0o
bV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmlu
ZGV4IDdjNDdjNzg3NDliODU2ZmM5ZjkxYWY4NGM2MTM0Y2Y0N2RmMDZlMjQuLjk3M2ViMWQzZTlj
MDMwMTQ1YzRlY2FjOWMxZDMxZjM5YTljNTRmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNCw3ICs0
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5o
dT4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdEFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oCmluZGV4IDQ3ZTE0MjUxYzU2MmU5NjdmZmI5
YWI3MWVjM2FmYTcwZGNiOWMyYjEuLmY3YTU4ZDBmODExZDJjNjcxMjczOWUxMzAxZTQzM2NiNTUw
MjRkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0QXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oCkBAIC0yNSw4ICsyNSwxMiBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZpbHRlcjsKKwogY2xhc3MgRmlsdGVyRWZmZWN0QXBw
bGllciB7CiBwdWJsaWM6CiAgICAgRmlsdGVyRWZmZWN0QXBwbGllcigpID0gZGVmYXVsdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
QWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VBbHBoYS5jcHAKaW5kZXggODIwMmZiOTQ4YTk2ZDcwM2U1ODViNDljOTJlMjUzNDRiMDNiYWE1
OC4uMDE4YjU3NjU3MjMwYzNjOWI0NDJkZDI4MWRhMGU5ZmYyZTkyZTYwOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDEwICsyMSw4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKIAotI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlNv
dXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NiwzNyArNDUsNiBAQCB2b2lkIFNvdXJj
ZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikK
ICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBTb3VyY2VBbHBoYVNvZnR3YXJl
QXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIFNvdXJj
ZUFscGhhU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxTb3VyY2VBbHBoYT4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8U291cmNlQWxwaGE+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQot
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotfTsKLQotYm9vbCBTb3VyY2VBbHBoYVNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQo
KTsKLQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBhdXRvIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFp
bWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRmxvYXRSZWN0IGltYWdl
UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsK
LSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4
dCgpOwotCi0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFj
ayk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBJbnRQ
b2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogYm9vbCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGll
cigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXgg
MGE4Y2ZmZDc2NDIwZGU3YTFhN2U0YzA1OTNkNDc2YTE0Y2ZhMTA3NS4uZWNmYmYxMjIzMzNiYjMw
YjZlNTY0NTU4MGRjMDhiOGZkNTFmMjFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggN2IyNjNkZGUwOTdj
NTkwZDdmNWQ0YzQ5ZjQ2NGQ1NzY1ZTY3NDU4MC4uMzQ5ZGEwZGI5ZjhkNGM2YTljZjk0YWJlMDli
ZWE4YWM3OGFiMmMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMSw4ICsyMiw3IEBACiAjaW5jbHVkZSAiU291cmNlR3JhcGhp
Yy5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGll
ci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBo
aWNTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQzLDI3ICs0Myw2IEBAIHZvaWQgU291cmNlR3JhcGhp
Yzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAg
c2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0KIAot
Ly8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIgdG8g
c2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBTb3VyY2VHcmFwaGljU29m
dHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxTb3VyY2VH
cmFwaGljPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxT
b3VyY2VHcmFwaGljPjsKLQotcHVibGljOgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBi
b29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKSBvdmVycmlkZTsKLX07Ci0KLWJvb2wgU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
cjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYp
Ci17Ci0gICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgYXV0byBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOwotICAgIGlmICgh
cmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIElu
dFBvaW50KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIFNvdXJjZUdyYXBoaWM6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4g
U291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVm
ZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmluZGV4IDlmYmMyMGE3NTFkMDc2NWYxNmMzNDVhODgw
YWE2MmZiMjA2Yzg2NDEuLjUwZjQ3YTFiNjA3OTQxMWIxNzVlYTE3YWJjZWViYjgzMGM3ODNhNDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZUFwcGxp
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI1MjNhMmIyOWMzODJlYTI5MmY5YmJlYjQ0NWFiNjlhMTA1ZmQy
NWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDE0IEFk
b2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRl
ICJGRUJsZW5kLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCitib29sIEZFQmxlbmRTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYg
aW5wdXRFZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0u
Z2V0KCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNbMV0uZ2V0KCk7CisK
KyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAg
ICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGlt
YWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbWFnZUJ1ZmZl
cjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAh
aW1hZ2VCdWZmZXIyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRl
eHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVy
LT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fZWZm
ZWN0LmJsZW5kTW9kZSgpIH0pOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdh
cmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWFkYTg0MWMzMmJiMGYyMzAwODgzYTlmZTJlZjMyOGQ3
YWNiOTRmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5
c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZFQmxlbmQ7CisKK2NsYXNzIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQmxlbmQ+IHsKKyAgICB1c2luZyBCYXNlID0g
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQmxlbmQ+OworCitwdWJsaWM6CisgICAgdXNp
bmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1h
dHJpeFNvZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjdlYzBhMTE5ZjcyYTE2NWIwMTUx
Mzk5Yzg2MjYyZjk2M2JkYTY2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBw
bGllci5jcHAKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNs
dWRlICJGRUNvbG9yTWF0cml4LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2Nl
bGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZF
Q29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIo
RkVDb2xvck1hdHJpeCYgZWZmZWN0KQorICAgIDogQmFzZShlZmZlY3QpCit7CisgICAgaWYgKG1f
ZWZmZWN0LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCisgICAgICAgIEZF
Q29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1f
ZWZmZWN0LnZhbHVlcygpWzBdKTsKKyAgICBlbHNlIGlmIChtX2VmZmVjdC50eXBlKCkgPT0gRkVD
T0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlSHVlUm90YXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1fZWZmZWN0LnZhbHVlcygpWzBd
KTsKK30KKworaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6bWF0cml4
KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkgY29u
c3QKK3sKKyAgICBmbG9hdCByID0gcmVkOworICAgIGZsb2F0IGcgPSBncmVlbjsKKyAgICBmbG9h
dCBiID0gYmx1ZTsKKyAgICBmbG9hdCBhID0gYWxwaGE7CisKKyAgICBjb25zdCBhdXRvJiB2YWx1
ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKKworICAgIHJlZCAgID0gdmFsdWVzWyAwXSAqIHIgKyB2
YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNb
IDRdICogMjU1OworICAgIGdyZWVuID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICogZyAr
IHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1OworICAg
IGJsdWUgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFdICogZyArIHZhbHVlc1sxMl0gKiBi
ICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1OworICAgIGFscGhhID0gdmFsdWVz
WzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAq
IGEgKyB2YWx1ZXNbMTldICogMjU1OworfQorCitpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3Jl
ZW4sIGZsb2F0JiBibHVlKSBjb25zdAoreworICAgIGZsb2F0IHIgPSByZWQ7CisgICAgZmxvYXQg
ZyA9IGdyZWVuOworICAgIGZsb2F0IGIgPSBibHVlOworCisgICAgcmVkICAgICA9IHIgKiBtX2Nv
bXBvbmVudHNbMF0gKyBnICogbV9jb21wb25lbnRzWzFdICsgYiAqIG1fY29tcG9uZW50c1syXTsK
KyAgICBncmVlbiAgID0gciAqIG1fY29tcG9uZW50c1szXSArIGcgKiBtX2NvbXBvbmVudHNbNF0g
KyBiICogbV9jb21wb25lbnRzWzVdOworICAgIGJsdWUgICAgPSByICogbV9jb21wb25lbnRzWzZd
ICsgZyAqIG1fY29tcG9uZW50c1s3XSArIGIgKiBtX2NvbXBvbmVudHNbOF07Cit9CisKKy8vIEZJ
WE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9y
THVtaW5hbmNlLmguCitpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjps
dW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFs
cGhhKSBjb25zdAoreworICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsgMC43MTU0ICogZ3JlZW4g
KyAwLjA3MjEgKiBibHVlOworICAgIHJlZCA9IDA7CisgICAgZ3JlZW4gPSAwOworICAgIGJsdWUg
PSAwOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCit2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZm
ZXIpIGNvbnN0Cit7CisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsK
KyAgICBhdXRvIGJ1ZmZlclNpemUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7CisKKyAgICBBU1NFUlQo
cGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOworICAgIAorICAg
IGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKKyAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxB
cnJheS5kYXRhKCk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBi
dWZmZXJTaXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0KCk7
CisgICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICBzcmMuZGF0
YSA9IGRhdGE7CisgICAgCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qud2lkdGgg
PSBidWZmZXJTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBidWZmZXJTaXplLmhlaWdo
dCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OworICAgIGRl
c3QuZGF0YSA9IGRhdGE7CisKKyAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUoKSkgeworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIGNvbnN0IGF1dG8mIHZhbHVl
cyA9IG1fZWZmZWN0LnZhbHVlcygpOworCisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQg
KiA0XSA9IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
IDBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAorCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNvcikp
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0gKiBk
aXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVz
WzE2XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCisKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2aXNv
cikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgOF0g
KiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VN
YXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxs
cHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICog
NF0gPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25l
bnRzWzBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKG1fY29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25l
bnRzWzFdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKG1fY29tcG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25l
bnRzWzJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKG1fY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICAwLAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0
aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxs
cHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7CisgICAgICAgIGNvbnN0IGludDE2
X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjIx
MjUgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcxNTQg
KiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEgKiBk
aXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAgICAgIHZJbWFnZU1hdHJpeE11bHRp
cGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51bGxw
dHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KK30KKyNl
bmRpZgorCit2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1V
bmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKK3sKKyAgICBhdXRv
JiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIHBpeGVsQXJy
YXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOworCisgICAgc3dpdGNoIChtX2VmZmVjdC50
eXBlKCkpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVk
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBn
cmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAg
IGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAg
ICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAz
KTsKKyAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAg
ICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CisgICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CisgICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKKyAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgorICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3Ro
OyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBp
eGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJs
dWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBm
bG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAg
ICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUpOworICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOworICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOworICAgICAgICAgICAgcGl4
ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CisgICAgICAgICAgICBwaXhl
bEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhB
OgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9m
ZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CisgICAgICAg
ICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAgICAg
ICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEp
OworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVk
KTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVu
KTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUp
OworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxwaGEp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZl
cikgY29uc3QKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBjb25zdCBhdXRvJiB2YWx1ZXMg
PSBtX2VmZmVjdC52YWx1ZXMoKTsKKworICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4
ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBv
ZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4CisgICAgLy8gaXMgbm90IHplcm8sIGZhbGwg
YmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgaWYgKG1fZWZmZWN0LnR5cGUoKSAhPSBGRUNP
TE9STUFUUklYX1RZUEVfTUFUUklYIHx8ICghdmFsdWVzWzRdICYmICF2YWx1ZXNbOV0gJiYgIXZh
bHVlc1sxNF0gJiYgIXZhbHVlc1sxOV0pKSB7CisgICAgICAgIGFwcGx5UGxhdGZvcm1BY2NlbGVy
YXRlZChwaXhlbEJ1ZmZlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBh
cHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7Cit9CisKK2Jvb2wgRkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgYXV0byBpbiA9IGlucHV0RWZmZWN0
c1swXS5nZXQoKTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZl
clJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAo
aW5CdWZmZXIpCisgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOworCisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1f
ZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9OworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBv
aW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBp
eGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0
KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhB
KQorICAgICAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CisKKyAgICBhcHBseVBs
YXRmb3JtKCpwaXhlbEJ1ZmZlcik7CisgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpw
aXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzM5NDg5ZTVhM2ZmY2ViZDMyZDlkOGI5
ZmRjMDIwZjM5NWVlODdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRkVDb2xvck1hdHJpeDsKKworY2xhc3MgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGll
ciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xvck1hdHJpeD4gewor
ICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xvck1hdHJp
eD47CisKK3B1YmxpYzoKKyAgICBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKEZFQ29sb3JN
YXRyaXgmKTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGlubGlu
ZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9h
dCYgYWxwaGEpIGNvbnN0OworICAgIGlubGluZSB2b2lkIHNhdHVyYXRlQW5kSHVlUm90YXRlKGZs
b2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUpIGNvbnN0OworICAgIGlubGluZSB2
b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9h
dCYgYWxwaGEpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgdm9pZCBhcHBseVBs
YXRmb3JtQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25zdDsKKyNlbmRpZgorICAgIHZvaWQg
YXBwbHlQbGF0Zm9ybVVuYWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25zdDsKKworICAgIHZv
aWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0OworCisgICAgZmxvYXQgbV9jb21w
b25lbnRzWzldOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVu
dFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGU0NDJhZGVmNDk5MDYxMTk3MzllMGUzZTVmNDVlMGI2ZDE5OGEz
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5jcHAKQEAg
LTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmgi
CisKKyNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
clNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKK3sKK30KKwordm9pZCBGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24p
Cit7CisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0
aW9uLnRhYmxlVmFsdWVzOworICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7Cisg
ICAgaWYgKG4gPCAxKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBkb3VibGUgYyA9IGkgLyAyNTUuMDsK
KyAgICAgICAgdW5zaWduZWQgayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjICogKG4gLSAxKSk7
CisgICAgICAgIGRvdWJsZSB2MSA9IHRhYmxlVmFsdWVzW2tdOworICAgICAgICBkb3VibGUgdjIg
PSB0YWJsZVZhbHVlc1tzdGQ6Om1pbigoayArIDEpLCAobiAtIDEpKV07CisgICAgICAgIGRvdWJs
ZSB2YWwgPSAyNTUuMCAqICh2MSArIChjICogKG4gLSAxKSAtIGspICogKHYyIC0gdjEpKTsKKyAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCit2b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxl
KExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRy
YW5zZmVyRnVuY3Rpb24pCit7CisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMg
PSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOworICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZh
bHVlcy5zaXplKCk7CisgICAgaWYgKG4gPCAxKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNpZ25l
ZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChpICogbikgLyAyNTUuMCk7CisgICAgICAgIGsg
PSBzdGQ6Om1pbihrLCBuIC0gMSk7CisgICAgICAgIGRvdWJsZSB2YWwgPSAyNTUgKiB0YWJsZVZh
bHVlc1trXTsKKyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFs
KSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CisgICAg
fQorfQorCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVM
aW5lYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IHRyYW5zZmVyRnVu
Y3Rpb24uc2xvcGUgKiBpICsgMjU1ICogdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQ7CisgICAg
ICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOworICAgICAgICB2
YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOworICAgIH0KK30KKwordm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlR2FtbWFUYWJsZShMb29r
dXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2Zl
ckZ1bmN0aW9uKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgZG91YmxlIGV4cG9uZW50ID0gdHJhbnNmZXJGdW5jdGlvbi5leHBv
bmVudDsgLy8gUkNWVCBkb2Vzbid0IGxpa2UgcGFzc2luZyBhIGRvdWJsZSBhbmQgYSBmbG9hdCB0
byBwb3csIHNvIHByb21vdGUgdGhpcyB0byBkb3VibGUKKyAgICAgICAgZG91YmxlIHZhbCA9IDI1
NS4wICogKHRyYW5zZmVyRnVuY3Rpb24uYW1wbGl0dWRlICogcG93KChpIC8gMjU1LjApLCBleHBv
bmVudCkgKyB0cmFuc2ZlckZ1bmN0aW9uLm9mZnNldCk7CisgICAgICAgIHZhbCA9IHN0ZDo6bWF4
KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOworICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNf
Y2FzdDx1aW50OF90Pih2YWwpOworICAgIH0KK30KKworRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3
YXJlQXBwbGllcjo6TG9va3VwVGFibGUgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1
bmN0aW9uKQoreworICAgIExvb2t1cFRhYmxlIHRhYmxlOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRhYmxlLnNpemUoKTsgKytpKQorICAgICAgICB0YWJsZVtpXSA9IGk7CisKKyAg
ICB1c2luZyBUcmFuc2ZlclR5cGUgPSB2b2lkICgqKShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBUcmFuc2ZlclR5cGUgY2FsbEVmZmVjdFtdID0g
eworICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfVU5LTk9XTgorICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBP
TkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJVFkKKyAgICAgICAgY29tcHV0ZVRhYnVsYXJUYWJsZSwg
ICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFCisgICAgICAgIGNvbXB1dGVEaXNj
cmV0ZVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVURQorICAgICAg
ICBjb21wdXRlTGluZWFyVGFibGUsICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSCisgICAgICAgIGNvbXB1dGVHYW1tYVRhYmxlICAgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9HQU1NQQorICAgIH07CisKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4oZnVuY3Rpb24udHlwZSkgPCBXVEZfQVJS
QVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBjYWxsRWZmZWN0W2Z1bmN0aW9uLnR5cGVdKHRh
YmxlLCBmdW5jdGlvbik7CisKKyAgICByZXR1cm4gdGFibGU7Cit9CisKK3ZvaWQgRkVDb21wb25l
bnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYgcGl4
ZWxCdWZmZXIpIGNvbnN0Cit7CisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRh
dGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgo
KTsKKyAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICBhdXRvIHJl
ZFRhYmxlICAgPSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3QucmVkRnVuY3Rpb24oKSk7Cisg
ICAgYXV0byBncmVlblRhYmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmdyZWVuRnVu
Y3Rpb24oKSk7CisgICAgYXV0byBibHVlVGFibGUgID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZm
ZWN0LmJsdWVGdW5jdGlvbigpKTsKKyAgICBhdXRvIGFscGhhVGFibGUgPSBjb21wdXRlTG9va3Vw
VGFibGUobV9lZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKKworICAgIGZvciAodW5zaWduZWQgcGl4
ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0
ICs9IDQpIHsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gICAgID0gcmVkVGFibGVbZGF0YVtw
aXhlbE9mZnNldF1dOworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMV0gPSBncmVlblRhYmxl
W2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAyXSA9
IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOworICAgICAgICBkYXRhW3BpeGVsT2Zm
c2V0ICsgM10gPSBhbHBoYVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAzXV07CisgICAgfQorfQor
Citib29sIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisgICAgCisgICAgYXV0byBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZHJhd2luZ1Jl
Y3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIsIGRyYXdpbmdSZWN0KTsKKworICAgIGFwcGx5UGxhdGZvcm0oKmRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25l
bnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlMzIxYzcxOTNiOWNhZDQ1
NzIxNDYwYzdlYjQzOGUwYjcwMDQyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyOworc3RydWN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb247CisKK2NsYXNzIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFw
cGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJh
bnNmZXI+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
Q29tcG9uZW50VHJhbnNmZXI+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHVzaW5nIExvb2t1cFRhYmxl
ID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OworCisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUlk
ZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRl
RGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0
ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7CisKKyAgICBzdGF0aWMgTG9va3VwVGFibGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKworICAgIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhl
bEJ1ZmZlciYpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41NGQ1OTk3OWRhOGFiMjRiYmEyMDkzMDMzNjNjMDI3M2U0NmY1Yzk4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiRkVDb21wb3NpdGUu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1aW50OF90IEZFQ29tcG9zaXRlU29mdHdhcmVBcHBs
aWVyOjpjbGFtcEJ5dGUoaW50IGMpCit7CisgICAgdWludDhfdCBidWZmW10gPSB7IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KGMpLCAyNTUsIDAgfTsKKyAgICB1bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihjKTsKKyAgICByZXR1cm4gYnVmZlshISh1YyAmIH4weGZmKSArICEhKHVjICYg
fih+MHUgPj4gMSkpXTsKK30KKwordGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgoraW5saW5lIHZv
aWQgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVu
c2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhl
bEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sK
KyAgICBmbG9hdCBzY2FsZWRLMTsKKyAgICBmbG9hdCBzY2FsZWRLNDsKKyAgICBpZiAoYjEpCisg
ICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7CisgICAgaWYgKGI0KQorICAgICAgICBzY2Fs
ZWRLNCA9IGs0ICogMjU1LjBmOworCisgICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAw
KSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOworICAgICAgICB1bnNpZ25l
ZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOworICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkx
ICsgazMgKiBpMjsKKyAgICAgICAgaWYgKGIxKQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxl
ZEsxICogaTEgKiBpMjsKKyAgICAgICAgaWYgKGI0KQorICAgICAgICAgICAgcmVzdWx0ICs9IHNj
YWxlZEs0OworCisgICAgICAgICpkZXN0aW5hdGlvbiA9IGNsYW1wQnl0ZShyZXN1bHQpOworICAg
ICAgICArK3NvdXJjZTsKKyAgICAgICAgKytkZXN0aW5hdGlvbjsKKyAgICB9Cit9CisKKy8vIGNv
bXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwor
Ly8gaXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRp
bWl6YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgordGVtcGxhdGUgPGludCBiMSwg
aW50IGI0PgoraW5saW5lIHZvaWQgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQg
Y2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQg
azIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCBzY2FsZWRLMTsKKyAgICBmbG9h
dCBzY2FsZWRLNDsKKyAgICBpZiAoYjEpCisgICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7
CisgICAgaWYgKGI0KQorICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOworCisgICAgd2hp
bGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaTEg
PSAqc291cmNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOworICAg
ICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKKyAgICAgICAgaWYgKGIxKQor
ICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKKyAgICAgICAgaWYgKGI0
KQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OworCisgICAgICAgICpkZXN0aW5hdGlv
biA9IHJlc3VsdDsKKyAgICAgICAgKytzb3VyY2U7CisgICAgICAgICsrZGVzdGluYXRpb247Cisg
ICAgfQorfQorCisjaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKK2lubGluZSB2b2lkIEZF
Q29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtQXJpdGhtZXRpYyh1bnNpZ25l
ZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJh
eUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCit7CisgICAg
ZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0ZDo6bWF4KDAuMGYsIGsy
KSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OworICAgIGZsb2F0IGxvd2VyTGltaXQgPSBzdGQ6
Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6Om1pbigwLjBmLCBrMykg
KyBrNDsKKyAgICBpZiAoKGs0ID49IDAuMGYgJiYgazQgPD0gMS4wZikgJiYgKHVwcGVyTGltaXQg
Pj0gMC4wZiAmJiB1cHBlckxpbWl0IDw9IDEuMGYpICYmIChsb3dlckxpbWl0ID49IDAuMGYgJiYg
bG93ZXJMaW1pdCA8PSAxLjBmKSkgeworICAgICAgICBpZiAoazQpIHsKKyAgICAgICAgICAgIGlm
IChrMSkKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwx
LCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBr
NCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQ
aXhlbHNVbmNsYW1wZWQ8MCwgMT4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0
aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGsx
KQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDA+
KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVs
c1VuY2xhbXBlZDwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChrNCkgeworICAgICAgICBpZiAoazEpCisgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsczwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwg
azIsIGszLCBrNCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBr
MiwgazMsIGs0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoazEpCisgICAgICAgICAgICBj
b21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFy
cmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNv
bXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJy
YXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICB9Cit9CisjZW5kaWYKKworYm9vbCBGRUNv
bXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlBcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4s
IEZpbHRlckVmZmVjdCogaW4yKQoreworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9
IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5y
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0
LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFJlY3QgZWZmZWN0QkRyYXdp
bmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgaW4yLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CisKKyAgICBhdXRvJiBz
b3VyY2VQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisK
KyAgICBpbnQgbGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBBU1NFUlQo
bGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4oZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgp
KSk7CisgICAgYXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMoc291cmNlUGl4ZWxBcnJheS5kYXRhKCks
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIGxlbmd0aCwgbV9lZmZlY3QuazEoKSwgbV9l
ZmZlY3QuazIoKSwgbV9lZmZlY3QuazMoKSwgbV9lZmZlY3QuazQoKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5Tm9uQXJpdGht
ZXRpYyhGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMikKK3sKKyAgICBhdXRvIHJl
c3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3Vs
dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0g
aW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlcjIgPSBpbjItPmlt
YWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBmaWx0ZXJDb250ZXh0ID0gcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIHN3aXRjaCAobV9lZmZlY3Qub3BlcmF0aW9uKCkp
IHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKKyAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5k
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogeworICAgICAg
ICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KKyAgICAgICAgSW50
UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICAgICAg
ZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAg
ICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkpOworICAgICAgICBpZiAoZGVzdGluYXRpb25SZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBJbnRSZWN0IGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGlu
YXRpb25SZWN0IC0gbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOworICAg
ICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKS5sb2NhdGlvbigpOworICAgICAgICBJbnRSZWN0IHNvdXJjZTJSZWN0ID0gZGVz
dGluYXRpb25SZWN0IC0gaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisgICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIEZsb2F0UmVj
dChhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCksIEZsb2F0UmVjdChzb3VyY2UyUmVjdCkpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEZsb2F0UmVj
dChhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCksIEZsb2F0UmVjdChzb3VyY2VSZWN0KSwgeyBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlSW4gfSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXIyLT5s
b2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5k
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0
LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsg
fSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJj
ZUF0b3ApOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
WE9SOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIy
LCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3Bl
cmF0b3I6OlhPUik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgor
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2Vm
ZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1f
ZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
LCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6
OlBsdXNMaWdodGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisgICAgRmlsdGVyRWZmZWN0KiBp
bjIgPSBpbnB1dEVmZmVjdHNbMV0uZ2V0KCk7CisKKyAgICBpZiAobV9lZmZlY3Qub3BlcmF0aW9u
KCkgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKKyAgICAgICAgcmV0dXJuIGFw
cGx5QXJpdGhtZXRpYyhpbiwgaW4yKTsKKyAgICByZXR1cm4gYXBwbHlOb25Bcml0aG1ldGljKGlu
LCBpbjIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29m
dHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYwOWY1
OWFmOTcyZTRiNWI0MGRiMzYxNTIxZTBlZDlkN2U5MTllZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3Np
dGVTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGRUNvbXBvc2l0ZTsKKworY2xhc3MgRkVDb21wb3NpdGVT
b2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29t
cG9zaXRlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RUNvbXBvc2l0ZT47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9v
bCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZm
ZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnQ4X3QgY2xhbXBCeXRl
KGludCk7CisKKyAgICB0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+CisgICAgc3RhdGljIGlubGlu
ZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5z
aWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisKKyAgICB0ZW1wbGF0ZSA8aW50IGIxLCBp
bnQgYjQ+CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5j
bGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24s
IGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMo
dW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBp
eGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsK
KworICAgIGJvb2wgYXBwbHlBcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVj
dCogaW4yKTsKKyAgICBib29sIGFwcGx5Tm9uQXJpdGhtZXRpYyhGaWx0ZXJFZmZlY3QqIGluLCBG
aWx0ZXJFZmZlY3QqIGluMik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
Q29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBs
aWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44OTAwZWY0ZGVjNjA2ZTk5NzU1OGM1NTNjODJkZDVkMzZhODUx
Y2NmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcApAQCAt
MCwwICsxLDMyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9s
dGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkZF
Q29udm9sdmVNYXRyaXguaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKgorICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIENvbnZvbHZlTWF0cml4IGltcGxlbWVu
dGF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUaGUg
aW1hZ2UgcmVjdGFuZ2xlIGlzIHNwbGl0IGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisgICAgICAr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBBICAgICAgICAgIHwKKyAg
ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8ICAgfCAgICAgICAgICAgICB8ICAg
fAorICAgICAgfCBCIHwgICAgICBDICAgICAgfCBEIHwKKyAgICAgIHwgICB8ICAgICAgICAgICAg
IHwgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgICBF
ICAgICAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFdoZXJlIHJl
Z2lvbiBDIGNvbnRhaW5zIHRob3NlIHBpeGVscywgd2hvc2UgdmFsdWVzCisgICBjYW4gYmUgY2Fs
Y3VsYXRlZCB3aXRob3V0IGNyb3NzaW5nIHRoZSBlZGdlIG9mIHRoZSByZWN0YW5nbGUuCisKKyAg
IEV4YW1wbGU6CisgICAgICBJbWFnZSBzaXplOiB3aWR0aDogMTAsIGhlaWdodDogMTAKKworICAg
ICAgT3JkZXIgKGtlcm5lbCBtYXRyaXggc2l6ZSk6IHdpZHRoOiAzLCBoZWlnaHQgNAorICAgICAg
VGFyZ2V0OiB4OjEsIHk6MworCisgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUg
dGFyZ2V0IGluc2lkZSB0aGUga2VybmVsIG1hdHJpeDoKKworICAgICAgICAuLi4KKyAgICAgICAg
Li4uCisgICAgICAgIC4uLgorICAgICAgICAuWC4KKworICAgVGhlIHJlZ2lvbnMgaW4gdGhpcyBj
YXNlIGFyZSB0aGUgZm9sbG93aW5nOgorICAgICAgTm90ZTogKHgxLCB5MSkgdG9wLWxlZnQgYW5k
ICh4MiwgeTIpIGlzIHRoZSBib3R0b20tcmlnaHQgY29ybmVyCisgICAgICBOb3RlOiByb3cgeDIg
YW5kIGNvbHVtbiB5MiBpcyBub3QgcGFydCBvZiB0aGUgcmVnaW9uCisgICAgICAgICAgICBvbmx5
IHRob3NlICh4LCB5KSBwaXhlbHMsIHdoZXJlIHgxIDw9IHggPCB4MiBhbmQgeTEgPD0geSA8IHky
CisKKyAgICAgIFJlZ2lvbiBBOiB4MTogMCwgeTE6IDAsIHgyOiAxMCwgeTI6IDMKKyAgICAgIFJl
Z2lvbiBCOiB4MTogMCwgeTE6IDMsIHgyOiAxLCB5MjogMTAKKyAgICAgIFJlZ2lvbiBDOiB4MTog
MSwgeTE6IDMsIHgyOiA5LCB5MjogMTAKKyAgICAgIFJlZ2lvbiBEOiB4MTogOSwgeTE6IDMsIHgy
OiAxMCwgeTI6IDEwCisgICAgICBSZWdpb24gRTogeDE6IDAsIHkxOiAxMCwgeDI6IDEwLCB5Mjog
MTAgKGVtcHR5IHJlZ2lvbikKKworICAgU2luY2UgcmVnaW9uIEMgKG9mdGVuKSBjb250YWlucyBt
b3N0IG9mIHRoZSBwaXhlbHMsIHdlIGltcGxlbWVudGVkCisgICBhIGZhc3QgYWxnb3JpdG0gdG8g
Y2FsY3VsYXRlIHRoZXNlIHZhbHVlcywgY2FsbGVkIGZhc3RTZXRJbnRlcmlvclBpeGVscy4KKyAg
IEZvciBvdGhlciByZWdpb25zLCBmYXN0U2V0T3V0ZXJQaXhlbHMgaXMgdXNlZCwgd2hpY2ggY2Fs
bHMgZ2V0UGl4ZWxWYWx1ZSwKKyAgIHRvIGhhbmRsZSBwaXhlbHMgb3V0c2lkZSBvZiB0aGUgaW1h
Z2UuIEluIGEgcmFyZSBzaXR1YXRpb25zLCB3aGVuCisgICBrZXJuZWwgbWF0cml4IGlzIGJpZ2dl
ciB0aGFuIHRoZSBpbWFnZSwgYWxsIHBpeGVscyBhcmUgY2FsY3VsYXRlZCBieSB0aGlzCisgICBm
dW5jdGlvbi4KKworICAgQWx0aG91Z2ggdGhlc2UgdHdvIGZ1bmN0aW9ucyBoYXZlIGxvdCBpbiBj
b21tb24sIEkgZGVjaWRlZCBub3QgdG8gbWFrZQorICAgY29tbW9uIGEgdGVtcGxhdGUgZm9yIHRo
ZW0sIHNpbmNlIHRoZXJlIGFyZSBrZXkgZGlmZmVyZW5jZXMgYXMgd2VsbCwKKyAgIGFuZCB3b3Vs
ZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCisqLworCitpbmxpbmUgdWludDhf
dCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpjbGFtcFJHQkFWYWx1ZShmbG9hdCBj
aGFubmVsLCB1aW50OF90IG1heCkKK3sKKyAgICBpZiAoY2hhbm5lbCA8PSAwKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoY2hhbm5lbCA+PSBtYXgpCisgICAgICAgIHJldHVybiBtYXg7Cisg
ICAgcmV0dXJuIGNoYW5uZWw7Cit9CisKK2lubGluZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0
d2FyZUFwcGxpZXI6OnNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVs
LCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBib29sIHByZXNlcnZl
QWxwaGFWYWx1ZXMpCit7CisgICAgdWludDhfdCBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1
ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGRlc3RQaXhlbHMuc2V0KHBp
eGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBo
YSkpOworCisgICAgaWYgKHByZXNlcnZlQWxwaGFWYWx1ZXMpIHsKKyAgICAgICAgZGVzdFBpeGVs
cy5zZXQocGl4ZWwsIHNvdXJjZVBpeGVscy5pdGVtKHBpeGVsKSk7CisgICAgICAgICsrcGl4ZWw7
CisgICAgfSBlbHNlCisgICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhhKTsK
K30KKworaW5saW5lIGludCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhl
bFZhbHVlKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHkpCit7
CisgICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYmIHkgPj0gMCAmJiB5
IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRh
LndpZHRoICsgeCkgPDwgMjsKKworICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLmVkZ2VNb2RlKSB7
CisgICAgZGVmYXVsdDogLy8gRWRnZU1vZGVUeXBlOjpOb25lCisgICAgICAgIHJldHVybiAtMTsK
KyAgICBjYXNlIEVkZ2VNb2RlVHlwZTo6RHVwbGljYXRlOgorICAgICAgICBpZiAoeCA8IDApCisg
ICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lk
dGgpCisgICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKKyAgICAgICAgaWYg
KHkgPCAwKQorICAgICAgICAgICAgeSA9IDA7CisgICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRp
bmdEYXRhLmhlaWdodCkKKyAgICAgICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsK
KyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICBj
YXNlIEVkZ2VNb2RlVHlwZTo6V3JhcDoKKyAgICAgICAgd2hpbGUgKHggPCAwKQorICAgICAgICAg
ICAgeCArPSBwYWludGluZ0RhdGEud2lkdGg7CisgICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndp
ZHRoOworICAgICAgICB3aGlsZSAoeSA8IDApCisgICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0
YS5oZWlnaHQ7CisgICAgICAgIHkgJT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKKyAgICAgICAgcmV0
dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICB9Cit9CisKKy8vIE9u
bHkgZm9yIHJlZ2lvbiBDCitpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBs
aWVyOjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNs
aXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQoreworICAgIC8v
IGVkZ2UgbW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCisgICAgaW50IHBpeGVsID0g
KHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgcGFp
bnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCkpICogNDsKKyAgICBpbnQga2VybmVsSW5jcmVhc2Ug
PSBjbGlwUmlnaHQgKiA0OworICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLmtlcm5l
bFNpemUud2lkdGgoKSAtIDEpICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihh
KSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzRdOworCisgICAgLy8gZGl2aXNvciBjYW5u
b3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNT
RVJUKHBhaW50aW5nRGF0YS5kaXZpc29yKTsKKworICAgIC8vIFNraXAgdGhlIGZpcnN0ICcoY2xp
cEJvdHRvbSAtIHlFbmQpJyBsaW5lcworICAgIHBpeGVsICs9IChjbGlwQm90dG9tIC0geUVuZCkg
KiAoeEluY3JlYXNlICsgKGNsaXBSaWdodCArIDEpICogNCk7CisgICAgaW50IHN0YXJ0S2VybmVs
UGl4ZWwgPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAx
KSAqIDQpOworCisgICAgZm9yIChpbnQgeSA9IHlFbmQgKyAxOyB5ID4geVN0YXJ0OyAtLXkpIHsK
KyAgICAgICAgZm9yIChpbnQgeCA9IGNsaXBSaWdodCArIDE7IHggPiAwOyAtLXgpIHsKKyAgICAg
ICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXguc2l6ZSgp
IC0gMTsKKyAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbCA9IHN0YXJ0S2VybmVsUGl4ZWw7Cisg
ICAgICAgICAgICBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwor
CisgICAgICAgICAgICB0b3RhbHNbMF0gPSAwOworICAgICAgICAgICAgdG90YWxzWzFdID0gMDsK
KyAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbM10gPSAwOwor
CisgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgeworICAgICAgICAgICAgICAg
IHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0
YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBp
eGVsKyspKTsKKyAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5l
bE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNy
Y1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7CisgICAgICAgICAgICAgICAgdG90YWxz
WzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykp
OworICAgICAgICAgICAgICAgIGlmICghcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpCisgICAg
ICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tl
cm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eS5pdGVtKGtlcm5lbFBpeGVsKSk7CisgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsKKyAg
ICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOworICAgICAgICAgICAgICAgIGlmICghLS13aWR0
aCkgeworICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsK
KyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0
aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0
RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0
YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFp
bnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKKyAgICAgICAgICAg
IHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBwaXhlbCArPSB4SW5j
cmVhc2U7CisgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0geEluY3JlYXNlOworICAgIH0KK30K
KworLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCitpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQoreworICAgIGludCBwaXhlbCA9
ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7CisgICAgaW50IGhlaWdodCA9IHky
IC0geTE7CisgICAgaW50IHdpZHRoID0geDIgLSB4MTsKKyAgICBpbnQgYmVnaW5LZXJuZWxQaXhl
bFggPSB4MSAtIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpOworICAgIGludCBzdGFydEtl
cm5lbFBpeGVsWCA9IGJlZ2luS2VybmVsUGl4ZWxYOworICAgIGludCBzdGFydEtlcm5lbFBpeGVs
WSA9IHkxIC0gcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCk7CisgICAgaW50IHhJbmNyZWFz
ZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0aCkgKiA0OworICAgIC8vIENvbnRhaW5zIHRo
ZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKKyAgICBmbG9hdCB0b3RhbHNbNF07CisKKyAgICAv
LyBwYWludGluZ0RhdGEuZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKHBhaW50aW5nRGF0YS5kaXZpc29yKTsKKwor
ICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKKyAgICAgICAgZm9yIChpbnQg
eCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7CisgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBw
YWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7CisgICAgICAgICAgICBpbnQga2Vy
bmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7CisgICAgICAgICAgICBpbnQga2VybmVsUGl4
ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7CisgICAgICAgICAgICBpbnQgd2lkdGggPSBwYWludGlu
Z0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOworCisgICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwor
ICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Cisg
ICAgICAgICAgICB0b3RhbHNbM10gPSAwOworCisgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFs
dWUgPj0gMCkgeworICAgICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1
ZShwYWludGluZ0RhdGEsIGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKKyAgICAgICAgICAg
ICAgICBpZiAocGl4ZWxJbmRleCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1sw
XSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0
PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxzWzJd
ICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDIpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJl
c2VydmVBbHBoYSAmJiBwaXhlbEluZGV4ID49IDApCisgICAgICAgICAgICAgICAgICAgIHRvdGFs
c1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19j
YXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAz
KSk7CisgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFg7CisgICAgICAgICAgICAgICAgLS1r
ZXJuZWxWYWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7CisgICAgICAgICAgICAg
ICAgICAgICsra2VybmVsUGl4ZWxZOworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHBhaW50
aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEuc3Jj
UGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIHBh
aW50aW5nRGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnByZXNl
cnZlQWxwaGEpOworICAgICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKKyAgICAgICAgfQor
ICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CisgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWxYID0g
YmVnaW5LZXJuZWxQaXhlbFg7CisgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFk7CisgICAgfQor
fQorCit2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0o
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpIGNvbnN0Cit7CisgICAgLy8gRHJhd2luZyBmdWxs
eSBjb3ZlcmVkIHBpeGVscworICAgIGludCBjbGlwUmlnaHQgPSBwYWludGluZ0RhdGEud2lkdGgg
LSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOworICAgIGludCBjbGlwQm90dG9tID0g
cGFpbnRpbmdEYXRhLmhlaWdodCAtIHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLmhlaWdodCgpOwor
CisgICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKKyAgICAgICAgLy8g
UmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6ZWQgZm9yIHNwZWVkCisgICAgICAgIHNldE91dGVy
UGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgcGFpbnRpbmdEYXRhLndpZHRoLCBwYWludGluZ0Rh
dGEuaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4
cHIgaW50IG1pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBk
YXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCisKKyAgICBpZiAoaW50IGl0ZXJhdGlvbnMgPSAo
cGFpbnRpbmdEYXRhLndpZHRoICogcGFpbnRpbmdEYXRhLmhlaWdodCkgLyBtaW5pbWFsUmVjdERp
bWVuc2lvbikgeworICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7
CisgICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0
cmlkZTsKKworICAgICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0NvdW50LCBb
Jl0oc2l6ZV90IGluZGV4KSB7CisgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGlu
ZGV4KTsKKyAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5k
ZXggKyAxKSwgY2xpcEJvdHRvbSk7CisKKyAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBh
aW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOworICAgICAg
ICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRh
LCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOworCisgICAgY2xpcFJpZ2h0
ICs9IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpICsgMTsKKyAgICBjbGlwQm90dG9tICs9
IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpICsgMTsKKworICAgIGlmIChwYWludGluZ0Rh
dGEudGFyZ2V0T2Zmc2V0LnkoKSA+IDApCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5n
RGF0YSwgMCwgMCwgcGFpbnRpbmdEYXRhLndpZHRoLCBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0
LnkoKSk7CisgICAgaWYgKGNsaXBCb3R0b20gPCBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50aW5nRGF0
YS53aWR0aCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7CisgICAgaWYgKHBhaW50aW5nRGF0YS50YXJn
ZXRPZmZzZXQueCgpID4gMCkKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAw
LCBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNl
dC54KCksIGNsaXBCb3R0b20pOworICAgIGlmIChjbGlwUmlnaHQgPCBwYWludGluZ0RhdGEud2lk
dGgpCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBwYWlu
dGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRpbmdEYXRhLndpZHRoLCBjbGlwQm90dG9t
KTsKK30KKworYm9vbCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25z
dCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOworCisgICAgYXV0byBh
bHBoYUZvcm1hdCA9IG1fZWZmZWN0LnByZXNlcnZlQWxwaGEoKSA/IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCA6IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQ7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxC
dWZmZXJSZXN1bHQoYWxwaGFGb3JtYXQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9
IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CisgICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1
ZmZlclJlc3VsdChhbHBoYUZvcm1hdCwgZWZmZWN0RHJhd2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVs
QnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIAorICAgIGF1dG8gcGFpbnRTaXplID0gbV9l
ZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisKKyAgICBQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhID0geworICAgICAgICBzb3VyY2VQaXhlbEFycmF5LAorICAgICAgICBkZXN0aW5h
dGlvblBpeGVsQXJyYXksCisgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAorICAgICAgICBwYWlu
dFNpemUuaGVpZ2h0KCksCisgICAgICAgIG1fZWZmZWN0Lmtlcm5lbFNpemUoKSwKKyAgICAgICAg
bV9lZmZlY3QuZGl2aXNvcigpLAorICAgICAgICBtX2VmZmVjdC5iaWFzKCkgKiAyNTUsCisgICAg
ICAgIG1fZWZmZWN0LnRhcmdldE9mZnNldCgpLAorICAgICAgICBtX2VmZmVjdC5lZGdlTW9kZSgp
LAorICAgICAgICBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCksCisgICAgICAgIEZFQ29sb3JNYXRy
aXg6Om5vcm1hbGl6ZWRGbG9hdHMobV9lZmZlY3Qua2VybmVsKCkpCisgICAgfTsKKworICAgIGFw
cGx5UGxhdGZvcm0ocGFpbnRpbmdEYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29u
dm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGQ2YzA4ZGE3OWMxNzdj
YWQ4NzE3YWY4YzlkMjIyOWMyZGVmZTgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29m
dHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFQ29udm9sdmVN
YXRyaXg7CitlbnVtIGNsYXNzIEVkZ2VNb2RlVHlwZTsKKworY2xhc3MgRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVD
b252b2x2ZU1hdHJpeD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8RkVDb252b2x2ZU1hdHJpeD47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNl
OworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFBhaW50
aW5nRGF0YSB7CisgICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5
OworICAgICAgICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheTsKKyAgICAgICAgaW50
IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworCisgICAgICAgIEludFNpemUga2VybmVsU2l6
ZTsKKyAgICAgICAgZmxvYXQgZGl2aXNvcjsKKyAgICAgICAgZmxvYXQgYmlhczsKKyAgICAgICAg
SW50UG9pbnQgdGFyZ2V0T2Zmc2V0OworICAgICAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGU7Cisg
ICAgICAgIGJvb2wgcHJlc2VydmVBbHBoYTsKKyAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxN
YXRyaXg7CisgICAgfTsKKworICAgIHN0YXRpYyBpbmxpbmUgdWludDhfdCBjbGFtcFJHQkFWYWx1
ZShmbG9hdCBjaGFubmVsLCB1aW50OF90IG1heCA9IDI1NSk7CisgICAgc3RhdGljIGlubGluZSB2
b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQ
aXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCog
dG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1
ZXMpOworCisgICAgc3RhdGljIGlubGluZSBpbnQgZ2V0UGl4ZWxWYWx1ZShjb25zdCBQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHkpOworCisgICAgc3RhdGljIGlubGluZSB2b2lkIHNldEludGVy
aW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBp
bnQgeVN0YXJ0LCBpbnQgeUVuZCk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIHNldE91dGVyUGl4
ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5Mik7CisKKyAg
ICB2b2lkIGFwcGx5UGxhdGZvcm0oUGFpbnRpbmdEYXRhJikgY29uc3Q7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiM2MyMWMzZjY0
MjNkZDcyYTcyMzMwN2JkOTQ0NDM4OTUzMGE2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50
TWFwU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRGlzcGxhY2Vt
ZW50TWFwU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5o
IgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
KEZFRGlzcGxhY2VtZW50TWFwJiBlZmZlY3QpCisgICAgOiBCYXNlKGVmZmVjdCkKK3sKKyAgICBB
U1NFUlQobV9lZmZlY3QueENoYW5uZWxTZWxlY3RvcigpICE9IENIQU5ORUxfVU5LTk9XTik7Cisg
ICAgQVNTRVJUKG1fZWZmZWN0LnlDaGFubmVsU2VsZWN0b3IoKSAhPSBDSEFOTkVMX1VOS05PV04p
OworfQorCitpbnQgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OnhDaGFubmVsSW5k
ZXgoKSBjb25zdAoreworICAgIHJldHVybiBtX2VmZmVjdC54Q2hhbm5lbFNlbGVjdG9yKCkgLSAx
OworfQorCitpbnQgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OnlDaGFubmVsSW5k
ZXgoKSBjb25zdAoreworICAgIHJldHVybiBtX2VmZmVjdC55Q2hhbm5lbFNlbGVjdG9yKCkgLSAx
OworfQorCitib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25z
dCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMp
Cit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAgICBG
aWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKKworICAgIGF1dG8gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgYXV0byBl
ZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxC
dWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gaW5wdXRQaXhlbEJ1ZmZl
ciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QpOworCisgICAgYXV0byBlZmZlY3RCRHJhd2lu
Z1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBw
aXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVs
dGlwbGllZCBjb2xvciB2YWx1ZXMuCisgICAgYXV0byBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlciA9
IGluMi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIAorICAgIGlmICghaW5wdXRQaXhl
bEJ1ZmZlciB8fCAhZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8mIGlucHV0SW1hZ2UgPSBpbnB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7Cisg
ICAgYXV0byYgZGlzcGxhY2VtZW50SW1hZ2UgPSBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlci0+ZGF0
YSgpOworICAgIEFTU0VSVChpbnB1dEltYWdlLmxlbmd0aCgpID09IGRpc3BsYWNlbWVudEltYWdl
Lmxlbmd0aCgpKTsKKworICAgIEludFNpemUgcGFpbnRTaXplID0gbV9lZmZlY3QuYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCk7CisKKyAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIuc2NhbGVk
QnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnNjYWxlKCksIG1fZWZmZWN0LnNjYWxlKCkgfSk7Cisg
ICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2FsZS53aWR0aCgpIC8gMjU1LjA7CisgICAgZmxv
YXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1NS4wOworICAgIGZsb2F0IHNj
YWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OworICAgIGZsb2F0IHNjYWxl
ZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQoKSAqIDAuNTsKKyAgICAKKyAgICBpbnQgZGlz
cGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7CisgICAgaW50IGRpc3BsYWNlbWVu
dENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgpOworCisgICAgaW50IHJvd0J5dGVzID0gcGFpbnRT
aXplLndpZHRoKCkgKiA0OworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNpemUuaGVp
Z2h0KCk7ICsreSkgeworICAgICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5dGVz
OworCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsreCkg
eworICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4
ICogNDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nh
c3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3BsYWNlbWVudEltYWdlLml0ZW0oZGVzdGluYXRp
b25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOworICAgICAg
ICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRp
c3BsYWNlbWVudEltYWdlLml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5u
ZWxZKSArIHNjYWxlZE9mZnNldFkpOworCisgICAgICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRp
b25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVs
QXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRleCk7CisgICAgICAgICAgICBpZiAoc3JjWCA8
IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBh
aW50U2l6ZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRy
ID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KGlucHV0SW1hZ2UuZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0
ZXMpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlz
cGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU2Y2E2ZWE1YzU0MTgx
MmUwMmUwOTM0M2M4OTdjOGU3M2JhNjc2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBGRURpc3BsYWNlbWVudE1hcDsKKworY2xhc3MgRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBs
aWVyPEZFRGlzcGxhY2VtZW50TWFwPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENv
bmNyZXRlQXBwbGllcjxGRURpc3BsYWNlbWVudE1hcD47CisKK3B1YmxpYzoKKyAgICBGRURpc3Bs
YWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcihGRURpc3BsYWNlbWVudE1hcCYpOworCisgICAgYm9v
bCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZm
ZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBi
eXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXRl
cykKKyAgICB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworICAg
ICAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7CisgICAgfQorCisg
ICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdDsKKyAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNv
bnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0
d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUx
N2E2MWI3MzM5MDIzMzEyZGJiNmZmZTA1ZDU0NDg0OThjMjgxNDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJv
cFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93U29mdHdhcmVB
cHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRURyb3BTaGFkb3cuaCIKKyNpbmNsdWRlICJGaWx0ZXIu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQo
KTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgp
OworICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZs
b2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9l
ZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7CisgICAg
RmxvYXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3Qu
ZHgoKSwgbV9lZmZlY3QuZHkoKSB9KTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0g
bV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdpbmdSZWdpb24p
OworICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKKworICAgIGF1dG8g
c291cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXNvdXJjZUlt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIHJlc3Vs
dENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIHJlc3VsdENvbnRleHQuc2V0
QWxwaGEobV9lZmZlY3Quc2hhZG93T3BhY2l0eSgpKTsKKyAgICByZXN1bHRDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKKyAgICBy
ZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOworCisgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93
KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CisKKyAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9Owor
ICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+dHJ1bmNhdGVk
TG9naWNhbFNpemUoKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQ
aXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhl
bEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNl
UGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+
c2l6ZSgpLndpZHRoKCkpOworICAgIAorICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigq
cGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOworCisgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3Np
dGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKKyAgICByZXN1bHRDb250
ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpKSwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CisgICAgcmVzdWx0Q29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9u
T3Zlcik7CisKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291
cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24pOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFk
b3dTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NWY2YzBmM2VlNzYxNzg2MmI1NjFlY2Yy
YzY1NjQ5MTRhODZkNThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIu
aApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZFRHJvcFNoYWRvdzsKKworY2xhc3MgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyIDog
cHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRURyb3BTaGFkb3c+IHsKKyAgICB1
c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRHJvcFNoYWRvdz47CisK
K3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBG
aWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxvb2RTb2Z0d2FyZUFwcGxp
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDNlMGUyYmYxYzMxYjVk
Zjg0MTYzYTc0YjRjM2I2ZjRkYWMwMTFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmVBcHBs
aWVyLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRkVGbG9vZFNvZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiRkVG
bG9vZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGRUZsb29kU29mdHdhcmVBcHBs
aWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKQorewor
ICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAg
IGlmICghcmVzdWx0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29s
b3IgPSBtX2VmZmVjdC5mbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkobV9l
ZmZlY3QuZmxvb2RPcGFjaXR5KCkpOworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCkpLCBjb2xvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xNTM1NzEyM2YzMDBiOGRiYWMyYzljMThlODQwOGE5M2Y2NTgzODE5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBs
aWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVGbG9vZDsKKworY2xhc3Mg
RkVGbG9vZFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXI8RkVGbG9vZD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXI8RkVGbG9vZD47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9v
bCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZm
ZWN0cykgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU2MjFlYjVkYjZiMWVmMGFjOGUzNmQ3OGM0NDJjMzQ4NWJlN2M2YTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDQ1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwu
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
KyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5j
bHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZWxzZQorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5o
PgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIHZvaWQgRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1
bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KQoreworICAg
IC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVHYXVzc2lh
bkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgorICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlvbikgewor
ICAgIGNhc2UgMDoKKyAgICAgICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRl
bHRhTGVmdCA9IHJhZGl1cyAvIDIgLSAxOworICAgICAgICAgICAgZGVsdGFSaWdodCA9IHJhZGl1
cyAtIGRlbHRhTGVmdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbHRhTGVmdCA9
IHJhZGl1cyAvIDI7CisgICAgICAgICAgICBkZWx0YVJpZ2h0ID0gcmFkaXVzIC0gZGVsdGFMZWZ0
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgaWYgKCEo
cmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRlbHRhTGVmdCsrOworICAgICAgICAgICAgZGVs
dGFSaWdodC0tOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAg
ICAgaWYgKCEocmFkaXVzICUgMikpIHsKKyAgICAgICAgICAgIGRlbHRhUmlnaHQrKzsKKyAgICAg
ICAgICAgIHJhZGl1cysrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
Ly8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5uZWwuCitpbmxpbmUg
dm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRz
dFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQm
IHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhl
aWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQoreworICAgIGNvbnN0IHVpbnQ4X3QqIHNy
Y0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKKyAgICB1aW50OF90KiBkc3REYXRhID0gZHN0
UGl4ZWxBcnJheS5kYXRhKCk7CisgICAgLy8gTWVtb3J5IGFsaWdubWVudCBpczogUkdCQSwgemVy
by1pbmRleCBiYXNlZC4KKyAgICBjb25zdCBpbnQgY2hhbm5lbCA9IDM7CisKKyAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGVmZmVjdEhlaWdodDsgKyt5KSB7CisgICAgICAgIGludCBsaW5lID0geSAq
IHN0cmlkZUxpbmU7CisgICAgICAgIGludCBzdW0gPSAwOworCisgICAgICAgIC8vIEZpbGwgdGhl
IGtlcm5lbC4KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyArK2kp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOworICAg
ICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKKyAgICAg
ICAgICAgIHN1bSArPSBzcmNQdHJbY2hhbm5lbF07CisgICAgICAgIH0KKworICAgICAgICAvLyBC
bHVycmluZy4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsgKyt4KSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlk
ZSArIGNoYW5uZWw7CisgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4
ZWxCeXRlT2Zmc2V0OworICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHN1bSAvIGR4KTsKKworICAgICAgICAgICAgLy8gU2hpZnQga2VybmVsLgorICAgICAgICAgICAg
aWYgKHggPj0gZHhMZWZ0KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9
IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25z
dCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKKyAgICAgICAgICAgICAg
ICBzdW0gLT0gKnNyY1B0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHggKyBk
eFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCByaWdodE9m
ZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7CisgICAgICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OworICAgICAg
ICAgICAgICAgIHN1bSArPSAqc3JjUHRyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1
cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJy
YXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwg
aW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhl
aWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisgICAgY29u
c3QgaW50IG1heEtlcm5lbFNpemUgPSBzdGQ6Om1pbihkeFJpZ2h0LCBlZmZlY3RXaWR0aCk7Cisg
ICAgaWYgKGFscGhhSW1hZ2UpCisgICAgICAgIHJldHVybiBib3hCbHVyQWxwaGFPbmx5KHNyY1Bp
eGVsQXJyYXksIGRzdFBpeGVsQXJyYXksIGR4LCBkeExlZnQsIGR4UmlnaHQsIHN0cmlkZSwgc3Ry
aWRlTGluZSwgIGVmZmVjdFdpZHRoLCBlZmZlY3RIZWlnaHQsIG1heEtlcm5lbFNpemUpOworCisg
ICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOworICAgIHVp
bnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKKworICAgIC8vIENvbmNlcm5p
bmcgdGhlIGFycmF5IHdpZHRoL2xlbmd0aDogaXQgaXMgRWxlbWVudCBzaXplICsgTWFyZ2luICsg
Qm9yZGVyLiBUaGUgbnVtYmVyIG9mIHBpeGVscyB3aWxsIGJlCisgICAgLy8gUCA9IHdpZHRoICog
aGVpZ2h0ICogY2hhbm5lbHMuCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZlY3RIZWlnaHQ7
ICsreSkgeworICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOworICAgICAgICBpbnQg
c3VtUiA9IDAsIHN1bUcgPSAwLCBzdW1CID0gMCwgc3VtQSA9IDA7CisKKyAgICAgICAgaWYgKGVk
Z2VNb2RlID09IEVkZ2VNb2RlVHlwZTo6Tm9uZSkgeworICAgICAgICAgICAgLy8gRmlsbCB0aGUg
a2VybmVsLgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhLZXJuZWxTaXplOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlk
ZTsKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgb2Zm
c2V0OworICAgICAgICAgICAgICAgIHN1bVIgKz0gKnNyY1B0cisrOworICAgICAgICAgICAgICAg
IHN1bUcgKz0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwor
ICAgICAgICAgICAgICAgIHN1bUEgKz0gKnNyY1B0cjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gQmx1cnJpbmcuCisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGVmZmVj
dFdpZHRoOyArK3gpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQg
PSBsaW5lICsgeCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICB1aW50OF90KiBkc3RQdHIgPSBk
c3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OworCisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRy
KysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1HIC8gZHgpOworICAgICAgICAgICAgICAgICpk
c3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7CisgICAgICAgICAgICAg
ICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBkeCk7CisKKyAgICAgICAg
ICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCisgICAgICAgICAgICAgICAgaWYgKHggPj0gZHhMZWZ0
KSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVP
ZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBz
dW1SIC09IHNyY1B0clswXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07
CisgICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gc3JjUHRyWzJdOworICAgICAgICAgICAgICAg
ICAgICBzdW1BIC09IHNyY1B0clszXTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoeCArIGR4UmlnaHQgPCBlZmZlY3RXaWR0aCkgeworICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJp
ZGU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEg
KyByaWdodE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07Cisg
ICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gc3JjUHRyWzFdOworICAgICAgICAgICAgICAgICAg
ICBzdW1CICs9IHNyY1B0clsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJb
M107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyBoZXJlLgorICAg
ICAgICAgICAgLy8gR2V0IGVkZ2UgdmFsdWVzIGZvciBlZGdlTW9kZSAnZHVwbGljYXRlJy4KKyAg
ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVkZ2VWYWx1ZUxlZnQgPSBzcmNEYXRhICsgbGluZTsK
KyAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVkZ2VWYWx1ZVJpZ2h0ICA9IHNyY0RhdGEgKyAo
bGluZSArIChlZmZlY3RXaWR0aCAtIDEpICogc3RyaWRlKTsKKworICAgICAgICAgICAgLy8gRmls
bCB0aGUga2VybmVsLgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IGR4TGVmdCAqIC0xOyBpIDwg
ZHhSaWdodDsgKytpKSB7CisgICAgICAgICAgICAgICAgLy8gSXMgdGhpcyByaWdodCBmb3IgbmVn
YXRpdmUgdmFsdWVzIG9mICdpJz8KKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBs
aW5lICsgaSAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIg
PSBzcmNEYXRhICsgb2Zmc2V0OworCisgICAgICAgICAgICAgICAgaWYgKGkgPCAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlTGVmdFswXTsKKyAgICAgICAgICAgICAg
ICAgICAgc3VtRyArPSBlZGdlVmFsdWVMZWZ0WzFdOworICAgICAgICAgICAgICAgICAgICBzdW1C
ICs9IGVkZ2VWYWx1ZUxlZnRbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZh
bHVlTGVmdFszXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPj0gZWZmZWN0V2lkdGgp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKKyAgICAg
ICAgICAgICAgICAgICAgc3VtRyArPSBlZGdlVmFsdWVSaWdodFsxXTsKKyAgICAgICAgICAgICAg
ICAgICAgc3VtQiArPSBlZGdlVmFsdWVSaWdodFsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt
QSArPSBlZGdlVmFsdWVSaWdodFszXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgc3Vt
RyArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gKnNyY1B0cisrOwor
ICAgICAgICAgICAgICAgICAgICBzdW1BICs9ICpzcmNQdHI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBCbHVycmluZy4KKyAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgeworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOworICAgICAgICAgICAg
ICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZzZXQ7CisKKyAgICAg
ICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1SIC8gZHgpOwor
ICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUcgLyBk
eCk7CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Vt
QiAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
c3VtQSAvIGR4KTsKKworICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KKyAgICAgICAg
ICAgICAgICBpZiAoeCA8IGR4TGVmdCkgeworICAgICAgICAgICAgICAgICAgICBzdW1SIC09IGVk
Z2VWYWx1ZUxlZnRbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gZWRnZVZhbHVlTGVm
dFsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBlZGdlVmFsdWVMZWZ0WzJdOworICAg
ICAgICAgICAgICAgICAgICBzdW1BIC09IGVkZ2VWYWx1ZUxlZnRbM107CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBp
eGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HIC09IHNy
Y1B0clsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiAtPSBzcmNQdHJbMl07CisgICAgICAg
ICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNdOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA+PSBlZmZlY3RXaWR0aCkgeworICAgICAgICAg
ICAgICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOworICAgICAgICAgICAgICAgICAg
ICBzdW1HICs9IGVkZ2VWYWx1ZVJpZ2h0WzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CICs9
IGVkZ2VWYWx1ZVJpZ2h0WzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1
ZVJpZ2h0WzNdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHJpZ2h0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlk
ZTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSAr
IHJpZ2h0T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKKyAg
ICAgICAgICAgICAgICAgICAgc3VtRyArPSBzcmNQdHJbMV07CisgICAgICAgICAgICAgICAgICAg
IHN1bUIgKz0gc3JjUHRyWzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clsz
XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdh
cmVBcHBsaWVyOjpib3hCbHVyQWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVy
LCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50
IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQoreworICAgIGlmICgh
aW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVmZmVyLmRhdGEoKSkgeworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChlZmZlY3RX
aWR0aCA8PSAwIHx8IGVmZmVjdEhlaWdodCA8PSAwIHx8IHN0cmlkZSA8PSAwKSB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
V2UgbXVzdCBhbHdheXMgdXNlIGFuIG9kZCByYWRpdXMuCisgICAgaWYgKGtlcm5lbFNpemUgJSAy
ICE9IDEpCisgICAgICAgIGtlcm5lbFNpemUgKz0gMTsKKworICAgIHZJbWFnZV9CdWZmZXIgZWZm
ZWN0SW5CdWZmZXI7CisgICAgZWZmZWN0SW5CdWZmZXIuZGF0YSA9IHN0YXRpY19jYXN0PHZvaWQq
Pihpb0J1ZmZlci5kYXRhKCkpOworICAgIGVmZmVjdEluQnVmZmVyLndpZHRoID0gZWZmZWN0V2lk
dGg7CisgICAgZWZmZWN0SW5CdWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0OworICAgIGVmZmVj
dEluQnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOworCisgICAgdkltYWdlX0J1ZmZlciBlZmZlY3RP
dXRCdWZmZXI7CisgICAgZWZmZWN0T3V0QnVmZmVyLmRhdGEgPSB0ZW1wQnVmZmVyLmRhdGEoKTsK
KyAgICBlZmZlY3RPdXRCdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKKyAgICBlZmZlY3RPdXRC
dWZmZXIuaGVpZ2h0ID0gZWZmZWN0SGVpZ2h0OworICAgIGVmZmVjdE91dEJ1ZmZlci5yb3dCeXRl
cyA9IHN0cmlkZTsKKworICAgIC8vIERldGVybWluZSB0aGUgc2l6ZSBvZiBhIHRlbXBvcmFyeSBi
dWZmZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24gZmlyc3Qgd2l0aCBhIHNwZWNpYWwgZmxhZy4g
dkltYWdlIHdpbGwgcmV0dXJuCisgICAgLy8gdGhlIHNpemUgbmVlZGVkLCBvciBhbiBlcnJvciAo
d2hpY2ggYXJlIGFsbCBuZWdhdGl2ZSkuCisgICAgc2l6ZV90IHRtcEJ1ZmZlclNpemUgPSB2SW1h
Z2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIs
IDAsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kIHwg
a3ZJbWFnZUdldFRlbXBCdWZmZXJTaXplKTsKKyAgICBpZiAodG1wQnVmZmVyU2l6ZSA8PSAwKQor
ICAgICAgICByZXR1cm47CisKKyAgICB2b2lkKiB0bXBCdWZmZXIgPSBmYXN0TWFsbG9jKHRtcEJ1
ZmZlclNpemUpOworICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZlY3RJbkJ1ZmZl
ciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXplLCBrZXJuZWxT
aXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7CisgICAgdkltYWdlQm94Q29udm9sdmVfQVJHQjg4
ODgoJmVmZmVjdE91dEJ1ZmZlciwgJmVmZmVjdEluQnVmZmVyLCB0bXBCdWZmZXIsIDAsIDAsIGtl
cm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKKyAgICB2SW1hZ2VC
b3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZlY3RPdXRCdWZmZXIsIHRt
cEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRl
bmQpOworICAgIGZhc3RGcmVlKHRtcEJ1ZmZlcik7CisKKyAgICAvLyBUaGUgZmluYWwgcmVzdWx0
IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCisgICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0
aCgpID09IHRlbXBCdWZmZXIubGVuZ3RoKCkpOworICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCks
IHRlbXBCdWZmZXIuZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Cit9CisjZW5kaWYKKworaW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJVbmFjY2VsZXJh
dGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0
cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQoreworICAgIGludCBkeExlZnQgPSAwOworICAgIGludCBkeFJpZ2h0ID0gMDsK
KyAgICBpbnQgZHlMZWZ0ID0gMDsKKyAgICBpbnQgZHlSaWdodCA9IDA7CisgICAgCisgICAgVWlu
dDhDbGFtcGVkQXJyYXkqIGZyb21CdWZmZXIgPSAmaW9CdWZmZXI7CisgICAgVWludDhDbGFtcGVk
QXJyYXkqIHRvQnVmZmVyID0gJnRlbXBCdWZmZXI7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IDM7ICsraSkgeworICAgICAgICBpZiAoa2VybmVsU2l6ZVgpIHsKKyAgICAgICAgICAgIGtlcm5l
bFBvc2l0aW9uKGksIGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQpOworI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKKyAgICAgICAgICAgIGlmICghaXNBbHBoYUltYWdlKQorICAgICAg
ICAgICAgICAgIGJveEJsdXJORU9OKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVY
LCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6
ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYm94Qmx1cigq
ZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBz
dHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIHRydWUsIGVkZ2VN
b2RlKTsKKyNlbHNlCisgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIs
IGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CisjZW5kaWYK
KyAgICAgICAgICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1ZmZlcik7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoa2VybmVsU2l6ZVkpIHsKKyAgICAgICAgICAgIGtlcm5lbFBvc2l0aW9u
KGksIGtlcm5lbFNpemVZLCBkeUxlZnQsIGR5UmlnaHQpOworI2lmIEhBVkUoQVJNX05FT05fSU5U
UklOU0lDUykKKyAgICAgICAgICAgIGlmICghaXNBbHBoYUltYWdlKQorICAgICAgICAgICAgICAg
IGJveEJsdXJORU9OKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNpemVZLCBkeUxlZnQs
IGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWludFNpemUud2lkdGgo
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZl
ciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBh
aW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCksIHRydWUsIGVkZ2VNb2RlKTsKKyNl
bHNlCisgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNp
emVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWlu
dFNpemUud2lkdGgoKSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CisjZW5kaWYKKyAgICAgICAg
ICAgIHN0ZDo6c3dhcChmcm9tQnVmZmVyLCB0b0J1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBUaGUgZmluYWwgcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQgaW4gaW9CdWZmZXIuCisg
ICAgaWYgKCZpb0J1ZmZlciAhPSBmcm9tQnVmZmVyKSB7CisgICAgICAgIEFTU0VSVChpb0J1ZmZl
ci5sZW5ndGgoKSA9PSBmcm9tQnVmZmVyLT5sZW5ndGgoKSk7CisgICAgICAgIG1lbWNweShpb0J1
ZmZlci5kYXRhKCksIGZyb21CdWZmZXItPmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOworICAg
IH0KK30KKworaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJs
dXJHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkm
IHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXpl
WSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlKQoreworICAgIGludCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CisKKyNp
ZiBVU0UoQUNDRUxFUkFURSkKKyAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYg
KGVkZ2VNb2RlID09IEVkZ2VNb2RlVHlwZTo6Tm9uZSB8fCBlZGdlTW9kZSA9PSBFZGdlTW9kZVR5
cGU6OkR1cGxpY2F0ZSkpIHsKKyAgICAgICAgYm94Qmx1ckFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0
bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFp
bnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAg
Ym94Qmx1clVuYWNjZWxlcmF0ZWQoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVY
LCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUp
OworfQorCisjaWYgIVVTRShBQ0NFTEVSQVRFKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJT
b2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQoreworICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndpZHRoLCBwYXJhbWV0ZXJz
LT5oZWlnaHQpOworICAgIGJveEJsdXJHZW5lcmljKCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXks
ICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFy
YW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSwgcGFyYW1ldGVycy0+aXNBbHBoYUltYWdl
LCBwYXJhbWV0ZXJzLT5lZGdlTW9kZSk7Cit9CisjZW5kaWYKKworaW5saW5lIHZvaWQgRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2Vy
bmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wg
aXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisjaWYgIVVTRShBQ0NFTEVS
QVRFKQorICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKKyAgICBpbnQg
ZXh0cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBk
YXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCisgICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIg
PSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKG1pbmltYWxSZWN0
RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7CisKKyAgICBpZiAo
b3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFy
YW1ldGVycz4gcGFyYWxsZWxKb2JzKCZib3hCbHVyV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVy
KTsKKworICAgICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKKyAg
ICAgICAgaWYgKGpvYnMgPiAxKSB7CisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8g
ImJsb2NrSGVpZ2h0Ii1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0
byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKKyAgICAgICAgICAgIC8vIGJsb2NrSGVpZ2h0ICog
am9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWlu
ZGVyICJqb2JzV2l0aEV4dHJhIi4KKyAgICAgICAgICAgIGNvbnN0IGludCBibG9ja0hlaWdodCA9
IHBhaW50U2l6ZS5oZWlnaHQoKSAvIGpvYnM7CisgICAgICAgICAgICBjb25zdCBpbnQgam9ic1dp
dGhFeHRyYSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAlIGpvYnM7CisKKyAgICAgICAgICAgIGludCBj
dXJyZW50WSA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBqb2IgPSAwOyBqb2IgPCBqb2JzOyBq
b2IrKykgeworICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxs
ZWxKb2JzLnBhcmFtZXRlcihqb2IpOworCisgICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFq
b2IgPyAwIDogY3VycmVudFkgLSBleHRyYUhlaWdodDsKKyAgICAgICAgICAgICAgICBjdXJyZW50
WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7
CisgICAgICAgICAgICAgICAgaW50IGVuZFkgPSBqb2IgPT0gam9icyAtIDEgPyBjdXJyZW50WSA6
IGN1cnJlbnRZICsgZXh0cmFIZWlnaHQ7CisKKyAgICAgICAgICAgICAgICBpbnQgYmxvY2tTaXpl
ID0gKGVuZFkgLSBzdGFydFkpICogc2NhbmxpbmU7CisgICAgICAgICAgICAgICAgaWYgKCFqb2Ip
IHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9ICZpb0J1ZmZlcjsK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSAmdG1wUGl4ZWxBcnJh
eTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXMu
aW9QaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxv
Y2tTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRtcFBpeGVsQXJyYXkgPSBVaW50
OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZChibG9ja1NpemUpOworICAgICAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpLCBpb0J1ZmZlci5k
YXRhKCkgKyBzdGFydFkgKiBzY2FubGluZSwgYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBwYXJhbXMud2lkdGggPSBwYWludFNpemUud2lkdGgoKTsKKyAg
ICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKKyAgICAgICAgICAg
ICAgICBwYXJhbXMua2VybmVsU2l6ZVggPSBrZXJuZWxTaXplWDsKKyAgICAgICAgICAgICAgICBw
YXJhbXMua2VybmVsU2l6ZVkgPSBrZXJuZWxTaXplWTsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
aXNBbHBoYUltYWdlID0gaXNBbHBoYUltYWdlOworICAgICAgICAgICAgICAgIHBhcmFtcy5lZGdl
TW9kZSA9IGVkZ2VNb2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOworCisgICAgICAgICAgICAvLyBDb3B5IHRvZ2V0aGVyIHRoZSBwYXJ0cyBv
ZiB0aGUgaW1hZ2UuCisgICAgICAgICAgICBjdXJyZW50WSA9IDA7CisgICAgICAgICAgICBmb3Ig
KGludCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgeworICAgICAgICAgICAgICAgIEFwcGx5
UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAgICAg
ICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgaW50IGRlc3RpbmF0
aW9uT2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgICAgIGlu
dCBhZGp1c3RlZEJsb2NrSGVpZ2h0ID0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0
ICsgMSA6IGJsb2NrSGVpZ2h0OworCisgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gYWRqdXN0
ZWRCbG9ja0hlaWdodDsKKyAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXQgPSBleHRyYUhlaWdo
dCAqIHNjYW5saW5lOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0ID0gY3VycmVu
dFkgKiBzY2FubGluZTsKKyAgICAgICAgICAgICAgICBzaXplID0gYWRqdXN0ZWRCbG9ja0hlaWdo
dCAqIHNjYW5saW5lOworCisgICAgICAgICAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSAr
IGRlc3RpbmF0aW9uT2Zmc2V0LCBwYXJhbXMuaW9QaXhlbEFycmF5LT5kYXRhKCkgKyBzb3VyY2VP
ZmZzZXQsIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlLgorICAgIH0K
KyNlbmRpZgorCisgICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhh
cHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICBib3hCbHVyR2VuZXJpYyhp
b0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNp
emUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworfQorCitib29sIEZFR2F1c3NpYW5CbHVyU29m
dHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0c1swXS5nZXQoKTsKKworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1f
ZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2Uo
KSk7CisKKyAgICBhdXRvIGVmZmVjdERyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBpbi0+
Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3
aW5nUmVjdCk7CisgICAgaWYgKCFtX2VmZmVjdC5zdGREZXZpYXRpb25YKCkgJiYgIW1fZWZmZWN0
LnN0ZERldmlhdGlvblkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvIGtlcm5l
bFNpemUgPSBtX2VmZmVjdC5jYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX2VmZmVjdC5z
dGREZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKKworICAgIEludFNp
emUgcGFpbnRTaXplID0gbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisgICAg
YXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChwYWludFNpemUuYXJlYSgpICogNCk7CisgICAgaWYgKCF0bXBJbWFnZURhdGEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhcHBseVBsYXRmb3JtKGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxT
aXplLmhlaWdodCgpLCBwYWludFNpemUsIG1fZWZmZWN0LmlzQWxwaGFJbWFnZSgpLCBtX2VmZmVj
dC5lZGdlTW9kZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3
YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyMjdkMzI3NWMyY2M3YzBjMmNlYjI3N2YzMGQ1YTY2
OTBlMmUwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmgKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9G
b3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVHYXVzc2lhbkJsdXI7
CitlbnVtIGNsYXNzIEVkZ2VNb2RlVHlwZTsKKworY2xhc3MgRkVHYXVzc2lhbkJsdXJTb2Z0d2Fy
ZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFR2F1c3NpYW5C
bHVyPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUdh
dXNzaWFuQmx1cj47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9v
bCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZm
ZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7
CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OworICAgICAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7CisgICAgICAgIGludCB3
aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKyAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7
CisgICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOworICAgICAgICBib29sIGlzQWxwaGFJbWFn
ZTsKKyAgICAgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOworICAgIH07CisKKyAgICBzdGF0aWMg
aW5saW5lIHZvaWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiBy
YWRpdXMsIGludCYgZGVsdGFMZWZ0LCBpbnQmIGRlbHRhUmlnaHQpOworCisgICAgc3RhdGljIGlu
bGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwg
aW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwg
aW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVs
U2l6ZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1
bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJp
ZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFn
ZSwgRWRnZU1vZGVUeXBlKTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWNjZWxl
cmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVt
cEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRo
LCBpbnQgZWZmZWN0SGVpZ2h0KTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1clVuYWNj
ZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYg
dGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBp
bnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9k
ZVR5cGUpOworCisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJHZW5lcmljKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVu
c2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRT
aXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5l
IHZvaWQgYm94Qmx1cldvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsKKworICAgIHN0YXRpYyBpbmxp
bmUgdm9pZCBhcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhD
bGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25l
ZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRn
ZU1vZGVUeXBlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYxOGY2MDg4MzE5ODRjY2FjNmM0ODY5MWI1MTZiYWNlMDg0MDFkNjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsNDQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgWm9sdGFuIEhlcmN6ZWcKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkZFTGlnaHRpbmcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisj
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6dG9w
TGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBjZW50ZXIgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9t
UmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC0yICogY2Vu
dGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCisgICAgICAgIC0yICogY2Vu
dGVyIC0gcmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKKyAgICB9OworfQorCitpbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJv
d05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisgICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGlu
dCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHsKKyAg
ICAgICAgLTIgKiBsZWZ0ICsgMiAqIHJpZ2h0IC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0LAor
ICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgLSByaWdodCArIGJvdHRvbUxlZnQgKyAyICogYm90
dG9tICsgYm90dG9tUmlnaHQKKyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5n
U29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0Cit7CisgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBjZW50
ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAg
IGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0g
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OworICAgIHJldHVybiB7CisgICAgICAgIC0yICogbGVmdCArIDIgKiBjZW50ZXIgLSBib3R0b21M
ZWZ0ICsgYm90dG9tLAorICAgICAgICAtbGVmdCAtIDIgKiBjZW50ZXIgKyBib3R0b21MZWZ0ICsg
MiAqIGJvdHRvbQorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dAoreworICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50
IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9m
ZnNldCArPSAyICogd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbSA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVy
biB7CisgICAgICAgIC10b3AgKyB0b3BSaWdodCAtIDIgKiBjZW50ZXIgKyAyICogcmlnaHQgLSBi
b3R0b20gKyBib3R0b21SaWdodCwKKyAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBi
b3R0b20gKyBib3R0b21SaWdodAorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIEZFTGlnaHRp
bmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNl
dCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25zdAoreworICAgIGludCByaWdodEFscGhh
T2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQ7CisgICAg
CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ocmlnaHRBbHBo
YU9mZnNldCkpOworICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKHJpZ2h0QWxwaGFPZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOworICAg
IGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxw
aGFPZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkpOworCisgICAgaW50IGxlZnQg
PSBhbHBoYVdpbmRvdy5sZWZ0KCk7CisgICAgaW50IHRvcExlZnQgPSBhbHBoYVdpbmRvdy50b3BM
ZWZ0KCk7CisgICAgaW50IHRvcCA9IGFscGhhV2luZG93LnRvcCgpOworCisgICAgaW50IGJvdHRv
bUxlZnQgPSBhbHBoYVdpbmRvdy5ib3R0b21MZWZ0KCk7CisgICAgaW50IGJvdHRvbSA9IGFscGhh
V2luZG93LmJvdHRvbSgpOworCisgICAgLy8gVGhlIGFscGhhV2luZG93IGhhcyBiZWVuIHNoaWZ0
ZWQsIGFuZCBoZXJlIHdlIGZpbGwgaW4gdGhlIHJpZ2h0IGNvbHVtbi4KKyAgICBhbHBoYVdpbmRv
dy5hbHBoYVswXVsyXSA9IHRvcFJpZ2h0OworICAgIGFscGhhV2luZG93LmFscGhhWzFdWzJdID0g
cmlnaHQ7CisgICAgYWxwaGFXaW5kb3cuYWxwaGFbMl1bMl0gPSBib3R0b21SaWdodDsKKyAgICAK
KyAgICAvLyBDaGVjayB0aGF0IHRoZSBhbHBoYVdpbmRvdyBpcyB3b3JraW5nIHdpdGggc29tZSBz
cG90LWNoZWNrcy4KKyAgICBBU1NFUlQoYWxwaGFXaW5kb3cudG9wTGVmdCgpID09IHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplIC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7IC8vIHRvcExlZnQKKyAgICBBU1NFUlQoYWxwaGFXaW5kb3cu
dG9wKCkgPT0gcGl4ZWxzLT5pdGVtKG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3AKKworICAgIHJldHVybiB7CisgICAgICAg
IC10b3BMZWZ0ICsgdG9wUmlnaHQgLSAyICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQg
KyBib3R0b21SaWdodCwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0gdG9wUmlnaHQgKyBi
b3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAgfTsKK30KKworaW5saW5l
IEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpyaWdodENv
bHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOworICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
Ym90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wIC0gMiAq
IGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKKyAgICAgICAgLXRvcExl
ZnQgLSAyICogdG9wICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KKyAgICB9OworfQorCitpbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRv
bUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgY2VudGVyID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0IC09IHdpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcFJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtdG9wICsgdG9wUmln
aHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0LAorICAgICAgICAtMiAqIHRvcCAtIHRvcFJpZ2h0
ICsgMiAqIGNlbnRlciArIHJpZ2h0CisgICAgfTsKK30KKworaW5saW5lIEludFNpemUgRkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9m
ZnNldCkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50
IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9m
ZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgdG9wUmlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC10b3BMZWZ0ICsgdG9wUmln
aHQgLSAyICogbGVmdCArIDIgKiByaWdodCwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9wIC0g
dG9wUmlnaHQgKyBsZWZ0ICsgMiAqIGNlbnRlciArIHJpZ2h0CisgICAgfTsKK30KKworaW5saW5l
IEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21S
aWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoreworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtdG9wTGVmdCArIHRvcCAt
IDIgKiBsZWZ0ICsgMiAqIGNlbnRlciwKKyAgICAgICAgLXRvcExlZnQgLSAyICogdG9wICsgbGVm
dCArIDIgKiBjZW50ZXIKKyAgICB9OworfQorCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRh
LCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBp
bnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3Rv
ciwgZmxvYXQgYWxwaGEpCit7CisgICAgZmxvYXQgeiA9IGFscGhhICogZGF0YS5zdXJmYWNlU2Nh
bGU7CisgICAgTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0aW5nRGF0YSA9
IGRhdGEubGlnaHRTb3VyY2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWludGluZ0RhdGEs
IHgsIHksIHopOworCisgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKKyAgICBpZiAobm9ybWFsMkRW
ZWN0b3IuaXNaZXJvKCkpIHsKKyAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAoMCwgMCwgMSku
IFRoaXMgaXMgYSBxdWl0ZSBmcmVxdWVudCBjYXNlLgorICAgICAgICBpZiAoZGF0YS5lZmZlY3Qt
PmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQor
ICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogbGlnaHRp
bmdEYXRhLmxpZ2h0VmVjdG9yLnooKSAvIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9
IHsKKyAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAorICAgICAg
ICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci55KCksCisgICAgICAgICAgICAgICAg
bGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxl
bmd0aAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5n
dGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3Vs
YXJFeHBvbmVudCA9PSAxKQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNw
ZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEu
c3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9y
TGVuZ3RoLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvciA9IHsKKyAgICAgICAgICAgIGZhY3Rv
clggKiBub3JtYWwyRFZlY3Rvci53aWR0aCgpICogZGF0YS5zdXJmYWNlU2NhbGUsCisgICAgICAg
ICAgICBmYWN0b3JZICogbm9ybWFsMkRWZWN0b3IuaGVpZ2h0KCkgKiBkYXRhLnN1cmZhY2VTY2Fs
ZSwKKyAgICAgICAgICAgIDEuMGYKKyAgICAgICAgfTsKKyAgICAgICAgZmxvYXQgbm9ybWFsVmVj
dG9yTGVuZ3RoID0gbm9ybWFsVmVjdG9yLmxlbmd0aCgpOworCisgICAgICAgIGlmIChkYXRhLmVm
ZmVjdC0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRp
bmcpCisgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5kaWZmdXNlQ29uc3RhbnQgKiAo
bm9ybWFsVmVjdG9yICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3JtYWxWZWN0b3JM
ZW5ndGggKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0geworICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCisgICAgICAgICAgICAgICAgbGlnaHRp
bmdEYXRhLmxpZ2h0VmVjdG9yLnkoKSwKKyAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3IueigpICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0
b3IubGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoZGF0YS5zcGVjdWxhckV4cG9uZW50ID09IDEp
CisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAq
IChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBo
YWxmd2F5VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBs
aWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogcG93Zigobm9ybWFsVmVjdG9y
ICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxl
bmd0aCksIGRhdGEuc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAobGlnaHRTdHJlbmd0aCA+IDEpCisgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAxOworICAgIGlm
IChsaWdodFN0cmVuZ3RoIDwgMCkKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDA7CisKKyAgICB1
aW50OF90IHBpeGVsVmFsdWVbM10gPSB7CisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxp
Z2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueCgpICogMjU1LjBmKSwKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5j
b2xvclZlY3Rvci55KCkgKiAyNTUuMGYpLAorICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90Pihs
aWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLnooKSAqIDI1NS4wZikKKyAg
ICB9OworICAgIAorICAgIGRhdGEucGl4ZWxzLT5zZXRSYW5nZShwaXhlbFZhbHVlLCAzLCBvZmZz
ZXQpOworfQorCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OnNldFBpeGVsKGludCBv
ZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0
IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCit7CisgICAgc2V0UGl4ZWxJbnRlcm5h
bChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9y
bWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKK30KKworLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhl
IHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwg
YW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgordm9pZCBGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYg
ZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
c3RhcnRZLCBpbnQgZW5kWSkKK3sKKyAgICAvLyBNYWtlIHN1cmUgc3RhcnRZIGlzID4gMCBzaW5j
ZSB3ZSByZWFkIGZyb20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4KKyAgICBBU1NFUlQo
c3RhcnRZKTsKKyAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CisKKyAgICBmb3IgKGludCB5ID0g
c3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CisgICAgICAgIGludCByb3dTdGFydE9mZnNldCA9IHkg
KiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBpbnQgcHJldmlvdXNS
b3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0IC0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZTsKKyAgICAgICAgaW50IG5leHRSb3dTdGFydCA9IHJvd1N0YXJ0T2Zmc2V0ICsgZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKworICAgICAgICAvLyBhbHBoYVdpbmRvdyBpcyBhIGxv
Y2FsIGNhY2hlIG9mIGFscGhhIHZhbHVlcy4KKyAgICAgICAgLy8gRmlsbCB0aGUgdHdvIHJpZ2h0
IGNvbHVtbnMgcHV0dGluZyB0aGUgbGVmdCBlZGdlIHZhbHVlIGluIHRoZSBjZW50ZXIgY29sdW1u
LgorICAgICAgICAvLyBGb3IgZWFjaCBwaXhlbCwgd2Ugc2hpZnQgZWFjaCByb3cgbGVmdCB0aGVu
IGZpbGwgdGhlIHJpZ2h0IGNvbHVtbi4KKyAgICAgICAgQWxwaGFXaW5kb3cgYWxwaGFXaW5kb3c7
CisgICAgICAgIGFscGhhV2luZG93LnNldFRvcChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jv
d1N0YXJ0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBhbHBoYVdpbmRvdy5zZXRU
b3BSaWdodChkYXRhLnBpeGVscy0+aXRlbShwcmV2aW91c1Jvd1N0YXJ0ICsgY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKworICAgICAgICBhbHBoYVdpbmRvdy5zZXRDZW50ZXIo
ZGF0YS5waXhlbHMtPml0ZW0ocm93U3RhcnRPZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgICAgIGFscGhhV2luZG93LnNldFJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0
T2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKworICAgICAgICBh
bHBoYVdpbmRvdy5zZXRCb3R0b20oZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChk
YXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOworCisgICAgICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhl
bFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwg
b2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIGFscGhhV2luZG93LnNoaWZ0KCk7
CisgICAgICAgICAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRh
LCB4LCB5LCBjRmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRlcmlvck5vcm1hbChv
ZmZzZXQsIGFscGhhV2luZG93KSwgYWxwaGFXaW5kb3cuY2VudGVyKCkpOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1H
ZW5lcmljV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKK3sKKyAgICBhcHBseVBs
YXRmb3JtR2VuZXJpY1BhaW50KHBhcmFtZXRlcnMtPmRhdGEsIHBhcmFtZXRlcnMtPnBhaW50aW5n
RGF0YSwgcGFyYW1ldGVycy0+eVN0YXJ0LCBwYXJhbWV0ZXJzLT55RW5kKTsKK30KKworI2lmICEo
Q1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09N
UEFUSUJMRSkpCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1H
ZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQoreworICAgIHVuc2lnbmVkIHJvd3NUb1Byb2Nlc3MgPSBk
YXRhLmhlaWdodCAtIDI7CisgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJvd3NUb1Byb2Nl
c3MgLyA4OworICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbmltYWxSZWN0RGltZW5z
aW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9i
cworICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4o
KChkYXRhLndpZHRoIC0gMikgKiByb3dzVG9Qcm9jZXNzKSAvIG1pbmltYWxSZWN0RGltZW5zaW9u
LCBtYXhOdW1UaHJlYWRzKTsKKworICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewor
ICAgICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKKyAgICAgICAgUGFyYWxsZWxKb2Jz
PEFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZhcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtl
ciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVy
IGFycmF5CisgICAgICAgIGludCBqb2IgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Cisg
ICAgICAgIGlmIChqb2IgPiAxKSB7CisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8g
InlTdGVwIi1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBz
bGlnaHRseSBsYXJnZXIgc2luY2UKKyAgICAgICAgICAgIC8vIHlTdGVwICogam9icyA8IHRvdGFs
IHNpemUuIFRoZXNlIGV4dHJhcyBhcmUgaGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0
aEV4dHJhIi4KKyAgICAgICAgICAgIGNvbnN0IGludCB5U3RlcCA9IHJvd3NUb1Byb2Nlc3MgLyBq
b2I7CisgICAgICAgICAgICBjb25zdCBpbnQgam9ic1dpdGhFeHRyYSA9IHJvd3NUb1Byb2Nlc3Mg
JSBqb2I7CisKKyAgICAgICAgICAgIGludCB5U3RhcnQgPSAxOworICAgICAgICAgICAgZm9yICgt
LWpvYjsgam9iID49IDA7IC0tam9iKSB7CisgICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7CisgICAgICAgICAgICAgICAg
cGFyYW1zLmRhdGEgPSBkYXRhOworICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEg
PSBwYWludGluZ0RhdGE7CisgICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFydDsK
KyAgICAgICAgICAgICAgICB5U3RhcnQgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IHlTdGVwICsg
MSA6IHlTdGVwOworICAgICAgICAgICAgICAgIHBhcmFtcy55RW5kID0geVN0YXJ0OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFk
ZWQgbW9kZS4KKyAgICB9CisKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGRhdGEsIHBh
aW50aW5nRGF0YSwgMSwgZGF0YS5oZWlnaHQgLSAxKTsKK30KKyNlbmRpZgorCit2b2lkIEZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgTGlnaHRpbmdEYXRhJiBk
YXRhKQoreworICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOworCisg
ICAgYXV0byBbciwgZywgYiwgYV0gPSBkYXRhLmxpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBvbmVu
dHNJbkNvbG9yU3BhY2UoKmRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSk7CisgICAgcGFpbnRpbmdE
YXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywg
Yik7CisKKyAgICBkYXRhLmxpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCpkYXRhLmVmZmVj
dCwgcGFpbnRpbmdEYXRhKTsKKworICAgIC8vIFRvcCBsZWZ0LgorICAgIGludCBvZmZzZXQgPSAw
OworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCAwLCBjRmFjdG9y
MmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BMZWZ0Tm9ybWFsKG9mZnNldCkpOworCisgICAg
Ly8gVG9wIHJpZ2h0LgorICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgLSBjUGl4ZWxTaXplOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRh
LCBkYXRhLndpZHRoIC0gMSwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9w
UmlnaHROb3JtYWwob2Zmc2V0KSk7CisKKyAgICAvLyBCb3R0b20gbGVmdC4KKyAgICBvZmZzZXQg
PSAoZGF0YS5oZWlnaHQgLSAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Cisg
ICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0IC0g
MSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tTGVmdE5vcm1hbChvZmZz
ZXQpKTsKKworICAgIC8vIEJvdHRvbSByaWdodC4KKyAgICBvZmZzZXQgPSBkYXRhLmhlaWdodCAq
IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIHNldFBp
eGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoIC0gMSwgZGF0YS5oZWln
aHQgLSAxLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1h
bChvZmZzZXQpKTsKKworICAgIGlmIChkYXRhLndpZHRoID49IDMpIHsKKyAgICAgICAgLy8gVG9w
IHJvdy4KKyAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeCA9
IDE7IHggPCBkYXRhLndpZHRoIC0gMTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKKyAgICAg
ICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCAwLCBjRmFjdG9y
MWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS50b3BSb3dOb3JtYWwob2Zmc2V0KSk7CisKKyAgICAg
ICAgLy8gQm90dG9tIHJvdy4KKyAgICAgICAgb2Zmc2V0ID0gKGRhdGEuaGVpZ2h0IC0gMSkgKiBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9y
IChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoIC0gMTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6
ZSkKKyAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBk
YXRhLmhlaWdodCAtIDEsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRhLmJvdHRvbVJv
d05vcm1hbChvZmZzZXQpKTsKKyAgICB9CisKKyAgICBpZiAoZGF0YS5oZWlnaHQgPj0gMykgewor
ICAgICAgICAvLyBMZWZ0IGNvbHVtbi4KKyAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdo
dCAtIDE7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCisg
ICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwgY0Zh
Y3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQpKTsK
KworICAgICAgICAvLyBSaWdodCBjb2x1bW4uCisgICAgICAgIG9mZnNldCA9IDIgKiBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQg
eSA9IDE7IHkgPCBkYXRhLmhlaWdodCAtIDE7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUpCisgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBh
aW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYz
LCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOworICAgIH0KKworICAgIGlmIChkYXRh
LndpZHRoID49IDMgJiYgZGF0YS5oZWlnaHQgPj0gMykgeworICAgICAgICAvLyBJbnRlcmlvciBw
aXhlbHMuCisgICAgICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0YSk7
CisgICAgfQorCisgICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemUgKiBkYXRhLmhlaWdodDsKKyAgICBpZiAoZGF0YS5lZmZlY3QtPmZpbHRlclR5cGUoKSA9
PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKSB7CisgICAgICAgIGZvciAo
aW50IGkgPSBjQWxwaGFDaGFubmVsT2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNp
emUpCisgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1Bp
eGVsU2l6ZSkgeworICAgICAgICAgICAgdWludDhfdCBhMSA9IGRhdGEucGl4ZWxzLT5pdGVtKGkp
OworICAgICAgICAgICAgdWludDhfdCBhMiA9IGRhdGEucGl4ZWxzLT5pdGVtKGkgKyAxKTsKKyAg
ICAgICAgICAgIHVpbnQ4X3QgYTMgPSBkYXRhLnBpeGVscy0+aXRlbShpICsgMik7CisgICAgICAg
ICAgICAvLyBhbHBoYSBzZXQgdG8gc2V0IHRvIG1heChhMSwgYTIsIGEzKQorICAgICAgICAgICAg
ZGF0YS5waXhlbHMtPnNldChpICsgMywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6
IChhMiA+PSBhMyA/IGEyIDogYTMpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3RzWzBdLmdldCgpOworCisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
bV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoZmFs
c2UpOworCisgICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJl
Z2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgaW4t
PmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJh
d2luZ1JlY3QpOworCisgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3Ro
ZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKKyAgICAvLyBzdGFu
ZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2Ug
RmlyZWZveCkgaGFzIHN0cmFuZ2UKKyAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5p
dExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgorICAgIC8vIEFu
eXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9u
CisKKyAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKTsKKworICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVp
Z2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgorICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRl
ZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KKyAgICBpZiAoc2l6
ZS53aWR0aCgpIDw9IDIgfHwgc2l6ZS5oZWlnaHQoKSA8PSAyKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIExpZ2h0aW5nRGF0YSBkYXRhOworICAgIGRhdGEuZWZmZWN0ID0gJm1fZWZmZWN0
OworICAgIGRhdGEuZmlsdGVyVHlwZSA9IG1fZWZmZWN0LmZpbHRlclR5cGUoKTsKKyAgICBkYXRh
LmxpZ2h0aW5nQ29sb3IgPSBtX2VmZmVjdC5saWdodGluZ0NvbG9yKCk7CisgICAgZGF0YS5zdXJm
YWNlU2NhbGUgPSBtX2VmZmVjdC5zdXJmYWNlU2NhbGUoKSAvIDI1NS4wZjsKKyAgICBkYXRhLmRp
ZmZ1c2VDb25zdGFudCA9IG1fZWZmZWN0LmRpZmZ1c2VDb25zdGFudCgpOworICAgIGRhdGEuc3Bl
Y3VsYXJDb25zdGFudCA9IG1fZWZmZWN0LnNwZWN1bGFyQ29uc3RhbnQoKTsKKyAgICBkYXRhLnNw
ZWN1bGFyRXhwb25lbnQgPSBtX2VmZmVjdC5zcGVjdWxhckV4cG9uZW50KCk7CisgICAgZGF0YS5s
aWdodFNvdXJjZSA9ICZtX2VmZmVjdC5saWdodFNvdXJjZSgpOworICAgIGRhdGEub3BlcmF0aW5n
Q29sb3JTcGFjZSA9ICZtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCk7CisKKyAgICBkYXRh
LnBpeGVscyA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CisgICAgZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSA9IHNpemUud2lkdGgoKSAqIGNQaXhlbFNpemU7CisgICAgZGF0YS53aWR0
aCA9IHNpemUud2lkdGgoKTsKKyAgICBkYXRhLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAg
ICBhcHBseVBsYXRmb3JtKGRhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3NmI4Yjc5NTk1NDZlM2UyODZjZDlmZTBjODZjNGE2
NzJiMTkwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCww
ICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBs
aWVyLmgiCisjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGRUxpZ2h0aW5nOworCitjbGFzcyBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyIDog
cHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUxpZ2h0aW5nPiB7CisgICAgdXNp
bmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUxpZ2h0aW5nPjsKKworcHVi
bGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBjUGl4ZWxTaXplID0gNDsKKyAgICBz
dGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQ4X3QgY09wYXF1ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhG
Rik7CisKKyAgICAvLyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUgbm9ybWFsIGNvZWZmaWNpZW50cyBj
b21lIGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVy
cy5odG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC4KKyAgICBzdGF0aWMgY29uc3RleHByIGZs
b2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQg
Y0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7CisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFj
dG9yMWRpdjQgPSAtMSAvIDQuZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3Iy
ZGl2MyA9IC0yIC8gMy5mOworCisgICAgc3RydWN0IEFscGhhV2luZG93IHsKKyAgICAgICAgdWlu
dDhfdCBhbHBoYVszXVszXSB7IH07CisgICAgCisgICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlv
bnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgorICAgICAg
ICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsw
XTsgfQorICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVsxXVswXTsgfQorICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAg
ICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQorCisgICAgICAgIHVpbnQ4X3QgdG9wKCkgY29u
c3QgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9CisgICAgICAgIHVpbnQ4
X3QgY2VudGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9Cisg
ICAgICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhh
WzJdWzFdOyB9CisKKyAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAg
eyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9CisgICAgICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3Qg
dmFsdWUpICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldEJv
dHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KKworICAg
ICAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0g
dmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBh
bHBoYVsxXVsyXSA9IHZhbHVlOyB9CisgICAgICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhf
dCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQorCisgICAgICAgIHN0YXRpYyB2b2lk
IHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10pCisgICAgICAgIHsKKyAgICAgICAgICAgIGFscGhh
WzBdID0gYWxwaGFbMV07CisgICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOworICAgICAg
ICB9CisgICAgCisgICAgICAgIHZvaWQgc2hpZnQoKQorICAgICAgICB7CisgICAgICAgICAgICBz
aGlmdFJvdyhhbHBoYVswXSk7CisgICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7CisgICAg
ICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgc3Ry
dWN0IExpZ2h0aW5nRGF0YSB7CisgICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9u
bHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0YQorICAgICAgICBGRUxpZ2h0aW5nKiBlZmZlY3Q7
CisgICAgICAgIEZpbHRlckVmZmVjdDo6VHlwZSBmaWx0ZXJUeXBlOworICAgICAgICBDb2xvciBs
aWdodGluZ0NvbG9yOworICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7CisgICAgICAgIGZsb2F0
IGRpZmZ1c2VDb25zdGFudDsKKyAgICAgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudDsKKyAgICAg
ICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudDsKKyAgICAgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxp
Z2h0U291cmNlOworICAgICAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UqIG9wZXJhdGlu
Z0NvbG9yU3BhY2U7CisKKyAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKKyAgICAg
ICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBpbnQgd2lkdGg7Cisg
ICAgICAgIGludCBoZWlnaHQ7CisKKyAgICAgICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5v
cm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JO
b3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKKyAgICAgICAgaW5saW5lIElu
dFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGlu
ZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlu
bGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAg
aW5saW5lIEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAg
fTsKKworICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgeworICAgICAgICBMaWdodGluZ0RhdGEg
ZGF0YTsKKyAgICAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Cisg
ICAgICAgIGludCB5U3RhcnQ7CisgICAgICAgIGludCB5RW5kOworICAgIH07CisKKyAgICBzdGF0
aWMgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZh
Y3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhh
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0Rh
dGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9h
dCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKTsKKworICAg
IHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRh
JiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCBzdGFydFksIGludCBlbmRZ
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcihBcHBseVBhcmFt
ZXRlcnMqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBMaWdo
dGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlQbGF0Zm9ybShjb25zdCBMaWdodGluZ0RhdGEmKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2Fy
ZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1ZDRhYWI2ZDg2NmVlNGU5YThjZWM0NGY1ZWNkMDgy
YWRkYTNhOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAg
KzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBBcHBsZSBJbmMu
IDIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkZFTWVyZ2UuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVNZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7Cisg
ICAgQVNTRVJUKGlucHV0RWZmZWN0cy5zaXplKCkgPiAwKTsKKworICAgIGF1dG8gcmVzdWx0SW1h
Z2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworCisgICAgZm9yIChhdXRvJiBpbiA6IGlucHV0RWZmZWN0cykg
eworICAgICAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
ICAgIGlmICghaW5CdWZmZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3
YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRU1lcmdlU29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODIxZDg0NDdlNWM5
N2ZhNGY5NDgzNWY2Yjg4MTA2YjVmOGVkYWNlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJl
QXBwbGllci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSBBcHBsZSBJbmMuIDIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRkVNZXJnZTsKKworY2xhc3MgRkVNZXJnZVNvZnR3YXJlQXBwbGllciA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNZXJnZT4geworICAgIHVzaW5nIEJh
c2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNZXJnZT47CisKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9y
cGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTA4NWY1MGNlYWRmZmZhZTA2
MDFiYzBlMmE3YzRjYjk0MjdjMzcyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVB
cHBsaWVyLmNwcApAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDIxIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU1vcnBob2xvZ3lTb2Z0d2Fy
ZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkNv
bG9yVHlwZXMuaCIKKyNpbmNsdWRlICJGRU1vcnBob2xvZ3kuaCIKKyNpbmNsdWRlICJGaWx0ZXIu
aCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5s
aW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxp
ZXI6Om1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3Qg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5
cGUpCit7CisgICAgaWYgKHR5cGUgPT0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6RXJvZGUpCisg
ICAgICAgIHJldHVybiBwZXJDb21wb25lbnRNaW4oYSwgYik7CisKKyAgICByZXR1cm4gcGVyQ29t
cG9uZW50TWF4KGEsIGIpOworfQorCitpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6Y29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwg
aW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCit7CisgICAgYXV0byBleHRy
ZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdC
QSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRh
KCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0pOworCisgICAgZm9yIChp
bnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsKKyAgICAgICAgYXV0byBwaXhlbCA9
IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBw
aXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5P
ck1heChleHRyZW11bSwgcGl4ZWwsIHR5cGUpOworICAgIH0KKyAgICByZXR1cm4gZXh0cmVtdW07
Cit9CisKK2lubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29m
dHdhcmVBcHBsaWVyOjprZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWws
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK3sKKyAgICBhdXRvIGV4dHJlbXVtID0ga2Vy
bmVsWzBdOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwga2VybmVsLnNpemUoKTsgKytpKQor
ICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4KGV4dHJlbXVtLCBrZXJuZWxbaV0sIHR5cGUpOwor
CisgICAgcmV0dXJuIGV4dHJlbXVtOworfQorCit2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIGludCBzdGFydFksIGludCBlbmRZKQoreworICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsK
KworICAgIGNvbnN0IGF1dG8mIHNyY1BpeGVsQXJyYXkgPSAqcGFpbnRpbmdEYXRhLnNyY1BpeGVs
QXJyYXk7CisgICAgYXV0byYgZHN0UGl4ZWxBcnJheSA9ICpwYWludGluZ0RhdGEuZHN0UGl4ZWxB
cnJheTsKKworICAgIGNvbnN0IGludCByYWRpdXNYID0gcGFpbnRpbmdEYXRhLnJhZGl1c1g7Cisg
ICAgY29uc3QgaW50IHJhZGl1c1kgPSBwYWludGluZ0RhdGEucmFkaXVzWTsKKyAgICBjb25zdCBp
bnQgd2lkdGggPSBwYWludGluZ0RhdGEud2lkdGg7CisgICAgY29uc3QgaW50IGhlaWdodCA9IHBh
aW50aW5nRGF0YS5oZWlnaHQ7CisKKyAgICBBU1NFUlQocmFkaXVzWCA8PSB3aWR0aCB8fCByYWRp
dXNZIDw9IGhlaWdodCk7CisgICAgQVNTRVJUKHN0YXJ0WSA+PSAwICYmIGVuZFkgPD0gaGVpZ2h0
ICYmIHN0YXJ0WSA8IGVuZFkpOworCisgICAgQ29sdW1uRXh0cmVtYSBleHRyZW1hOworICAgIGV4
dHJlbWEucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyICogcmFkaXVzWCArIDEpOworCisgICAgZm9y
IChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgeworICAgICAgICBpbnQgeVJhZGl1c1N0
YXJ0ID0gc3RkOjptYXgoMCwgeSAtIHJhZGl1c1kpOworICAgICAgICBpbnQgeVJhZGl1c0VuZCA9
IHN0ZDo6bWluKGhlaWdodCwgeSArIHJhZGl1c1kgKyAxKTsKKworICAgICAgICBleHRyZW1hLnNo
cmluaygwKTsKKworICAgICAgICAvLyBXZSBzdGFydCBhdCB0aGUgbGVmdCBlZGdlLCBzbyBjb21w
dXRlIGV4dHJlbWUgZm9yIHRoZSByYWRpdXNYIGNvbHVtbnMuCisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgcmFkaXVzWDsgKyt4KQorICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1u
RXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0
aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKKworICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBn
ZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyArK3gpIHsKKyAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQorICAgICAg
ICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHgg
KyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEu
dHlwZSkpOworCisgICAgICAgICAgICBpZiAoeCA+IHJhZGl1c1gpCisgICAgICAgICAgICAgICAg
ZXh0cmVtYS5yZW1vdmUoMCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0UGl4ZWwgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFy
cmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKKyAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4
ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRp
bmdEYXRhLnR5cGUpKS52YWx1ZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBGRU1vcnBo
b2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJz
KiBwYXJhbXMpCit7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoKnBhcmFtcy0+cGFpbnRpbmdE
YXRhLCBwYXJhbXMtPnN0YXJ0WSwgcGFyYW1zLT5lbmRZKTsKK30KKwordm9pZCBGRU1vcnBob2xv
Z3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEpCit7CisgICAgLy8gRW1waXJpY2FsbHksIHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVs
eSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBzaXplcyB3aXRoIGEgc2xvcGUgb2YgYWJv
dXQgMC42NS4KKyAgICBmbG9hdCBrZXJuZWxGYWN0b3IgPSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRp
dXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42NTsKKworICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluaW1hbEFyZWEgPSAoMTYwICogMTYwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9y
IHBhcmFsbGVsIGpvYnMKKyAgICAKKyAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcGFpbnRp
bmdEYXRhLmhlaWdodCAvIDg7CisgICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0
ZDo6bWluPHVuc2lnbmVkPigocGFpbnRpbmdEYXRhLndpZHRoICogcGFpbnRpbmdEYXRhLmhlaWdo
dCAqIGtlcm5lbEZhY3RvcikgLyBtaW5pbWFsQXJlYSwgbWF4TnVtVGhyZWFkcyk7CisgICAgaWYg
KG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7CisgICAgICAgIFBhcmFsbGVsSm9iczxBcHBseVBh
cmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybVdvcmtlciwgb3B0aW1hbFRocmVh
ZE51bWJlcik7CisgICAgICAgIGF1dG8gbnVtT2ZUaHJlYWRzID0gcGFyYWxsZWxKb2JzLm51bWJl
ck9mSm9icygpOworICAgICAgICBpZiAobnVtT2ZUaHJlYWRzID4gMSkgeworICAgICAgICAgICAg
Ly8gU3BsaXQgdGhlIGpvYiBpbnRvICJqb2JTaXplIi1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZl
dyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKKyAgICAgICAgICAg
IC8vIGpvYlNpemUgKiBqb2JzIDwgdG90YWwgc2l6ZS4gVGhlc2UgZXh0cmFzIGFyZSBoYW5kbGVk
IGJ5IHRoZSByZW1haW5kZXIgImpvYnNXaXRoRXh0cmEiLgorICAgICAgICAgICAgaW50IGpvYlNp
emUgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gbnVtT2ZUaHJlYWRzOworICAgICAgICAgICAgaW50
IGpvYnNXaXRoRXh0cmEgPSBwYWludGluZ0RhdGEuaGVpZ2h0ICUgbnVtT2ZUaHJlYWRzOworICAg
ICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IG51
bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAtLWpvYikgeworICAgICAgICAgICAgICAgIEFwcGx5
UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7CisgICAgICAg
ICAgICAgICAgcGFyYW0uc3RhcnRZID0gY3VycmVudFk7CisgICAgICAgICAgICAgICAgY3VycmVu
dFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGpvYlNpemUgKyAxIDogam9iU2l6ZTsKKyAgICAg
ICAgICAgICAgICBwYXJhbS5lbmRZID0gY3VycmVudFk7CisgICAgICAgICAgICAgICAgcGFyYW0u
cGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHBhcmFsbGVsSm9icy5leGVjdXRlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZCBtb2RlbAorICAgIH0KKworICAg
IGFwcGx5UGxhdGZvcm1HZW5lcmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLmhlaWdo
dCk7Cit9CisKK2Jvb2wgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBG
aWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7
CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKworICAgIGF1
dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9lZmZlY3Quc2V0
SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CisKKyAgICBhdXRvIGlzRGVnZW5lcmF0
ZSA9IFtdKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkgLT4gYm9vbCB7CisgICAgICAgIHJldHVy
biByYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpOwor
ICAgIH07CisKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAg
ICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX2VmZmVjdC5yYWRp
dXNYKCksIG1fZWZmZWN0LnJhZGl1c1koKSkpOworCisgICAgaWYgKGlzRGVnZW5lcmF0ZShyYWRp
dXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkgeworICAgICAgICBpbi0+Y29weVBpeGVsQnVm
ZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3aW5nUmVjdCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXpl
KGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3QucmFkaXVzWCgpLCBtX2VmZmVj
dC5yYWRpdXNZKCkgfSkpOworICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2lu
Z1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgpKTsKKyAgICBpbnQgcmFkaXVzWSA9IHN0
ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsK
KworICAgIGlmIChpc0RlZ2VuZXJhdGUocmFkaXVzWCwgcmFkaXVzWSkpIHsKKyAgICAgICAgaW4t
PmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJh
d2luZ1JlY3QpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRvIHNvdXJj
ZVBpeGVsQnVmZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRp
bmdDb2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1
ZmZlci0+ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7
CisgICAgcGFpbnRpbmdEYXRhLnR5cGUgPSBtX2VmZmVjdC5tb3JwaG9sb2d5T3BlcmF0b3IoKTsK
KyAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9ICZzb3VyY2VQaXhlbEFycmF5OworICAg
IHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAg
ICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpKTsK
KyAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0
KCkpOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCk7CisgICAgcGFp
bnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZKTsKKworICAgIGFwcGx5UGxhdGZvcm0o
cGFpbnRpbmdEYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVB
cHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODQ5ZDY5MDNkZmM3OGY2OGYzNzVhNjYwMGRmOTYwZDEwN2U0
ODgxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCAr
MSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4g
MjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9y
Q29tcG9uZW50cy5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRkVNb3JwaG9sb2d5OworZW51bSBjbGFzcyBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOworCitj
bGFzcyBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29u
Y3JldGVBcHBsaWVyPEZFTW9ycGhvbG9neT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZl
Y3RDb25jcmV0ZUFwcGxpZXI8RkVNb3JwaG9sb2d5PjsKKworcHVibGljOgorICAgIHVzaW5nIEJh
c2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1c2lu
ZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+
OworCisgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgdHlwZTsKKyAgICAgICAgaW50IHJhZGl1c1g7CisgICAgICAgIGludCByYWRpdXNZOwor
ICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsKKyAgICAgICAg
VWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7CisgICAgICAgIGludCB3aWR0aDsKKyAg
ICAgICAgaW50IGhlaWdodDsKKyAgICB9OworCisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7
CisgICAgICAgIGNvbnN0IFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgICAgICBpbnQg
c3RhcnRZOworICAgICAgICBpbnQgZW5kWTsKKyAgICB9OworCisgICAgc3RhdGljIGlubGluZSBp
bnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKSB7IHJldHVybiAoeSAq
IHdpZHRoICsgeCkgKiA0OyB9CisgICAgc3RhdGljIGlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBt
YWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVp
bnQ4X3QsIDQ+JiBjb21wb25lbnRzKSB7IHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VG
cm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsgfQorCisgICAgc3Rh
dGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50
c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKSB7IHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7IH0KKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYiwgTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSk7CisgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJy
YXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUpOworCisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29u
c3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworICAgIHN0YXRpYyB2b2lk
IGFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisgICAgc3RhdGljIHZvaWQg
YXBwbHlQbGF0Zm9ybShjb25zdCBQYWludGluZ0RhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlQXBw
bGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQ3ZjhmZTI5MGQ2MTlkNTZmMWI1NmZmNGZkNjFhNTlkNjc2
YzFmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGRU9mZnNldFNvZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiRkVPZmZz
ZXQuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wg
RkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25z
dCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1f
ZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFn
ZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoaW4tPmlz
QWxwaGFJbWFnZSgpKTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gbV9lZmZlY3Qu
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
ZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3Qu
ZHgoKSwgbV9lZmZlY3QuZHkoKSB9KSk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3
SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmVBcHBs
aWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWMzZmQ4NGYyNTQ3ZjBiYjI0
YTQyOWU3MTZlNzE3MDJiM2UzMmJhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxp
ZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGRU9mZnNldDsKKworY2xhc3MgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFT2Zmc2V0PiB7CisgICAgdXNpbmcgQmFz
ZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRU9mZnNldD47CisKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3
YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDNhMWNmNjQ5ZjU2ZmQ5NDdjYTFkNGM0ZGI5MGEy
ZGE5MzRkYmMzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCww
ICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vz
c2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFVGls
ZVNvZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5j
bHVkZSAiRkVUaWxlLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0Nv
bnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFVGlsZVNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNb
MF0uZ2V0KCk7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKKyAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Cisg
ICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworCisg
ICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUg
b2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCisgICAgLy8gc2l6ZSBvZiB0aGUgY3V0
dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBh
bmQgb3B0aW1pemF0aW9uLgorICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RS
ZWN0KCk7CisgICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9j
YXRpb24oKTsKKyAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbV9lZmZlY3QubWF4
RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgaWYgKGluLT5maWx0ZXJUeXBlKCkgPT0gRmls
dGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljIHx8IGluLT5maWx0ZXJUeXBlKCkgPT0gRmls
dGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkgeworICAgICAgICB0aWxlUmVjdCA9IGZpbHRl
ci5maWx0ZXJSZWdpb24oKTsKKyAgICAgICAgdGlsZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNj
YWxlKCkpOworICAgIH0KKworICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBub24tcGFsdGZvcm0g
Y2FsbC4KKyAgICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKHRpbGVSZWN0LCB0aWxlUmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCksIGZpbHRlci5yZW5kZXJpbmdNb2RlKCkpOworICAgIGlmICghdGlsZUltYWdlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRleHQg
PSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgt
aW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7CisgICAg
dGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKS5sb2NhdGlvbigpKTsKKworICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdl
QnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7CisgICAgaWYg
KCF0aWxlSW1hZ2VDb3B5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gcGF0dGVyblRyYW5zZm9ybTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShp
bk1heEVmZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOworCisgICAgYXV0byBwYXR0
ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZUNvcHkucmVsZWFzZU5vbk51bGwoKSwgeyB0
cnVlLCB0cnVlLCBwYXR0ZXJuVHJhbnNmb3JtIH0pOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBm
aWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBmaWx0ZXJDb250ZXh0
LnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOworICAgIGZpbHRlckNvbnRleHQuZmls
bFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZUFwcGxpZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44NjA1ZDhiMzhlMWIyMjM1YThiNmMyNjY0NGFiZTYxNjhjZWRiNGY0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRVRpbGVTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRVRpbGU7CisKK2NsYXNzIEZFVGlsZVNv
ZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUaWxl
PiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVRpbGU+
OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJy
aWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0
d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEx
OTYyM2YzYjJkOTVhMmQ0OGI3N2NmYzQ5OTY5NGQxYTdlNDc4NDEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVy
YnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6
ZWdlZC5odT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUdXJidWxlbmNlU29mdHdh
cmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKKyNpbmNsdWRlICJGaWx0
ZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIFRoZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRhcHRlZCB2ZXJz
aW9uIG9mIHdoYXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9uOgorLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZQorCitGRVR1
cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OlBhaW50aW5nRGF0YSBGRVR1cmJ1bGVuY2VTb2Z0d2Fy
ZUFwcGxpZXI6OmluaXRQYWludGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBz
ZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpCit7Cisg
ICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSB7IHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNl
RnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMsIHBhaW50aW5nU2l6ZSwg
eyB9LCB7IH0gfTsKKworICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBb
MSwgc19yYW5kTWF4aW11bSAtIDFdLgorICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQor
ICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5k
TWF4aW11bSAtIDEpKSArIDE7CisgICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4
aW11bSAtIDEpCisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7
CisKKyAgICBmbG9hdCogZ3JhZGllbnQ7CisgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5u
ZWwgPCA0OyArK2NoYW5uZWwpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2Nr
U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ld
ID0gaTsKKyAgICAgICAgICAgIGdyYWRpZW50ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5u
ZWxdW2ldOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGdyYWRpZW50WzBdID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tT
aXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgICAgICAgICBncmFk
aWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIg
KiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7CisgICAgICAgICAg
ICB9IHdoaWxlICghZ3JhZGllbnRbMF0gJiYgIWdyYWRpZW50WzFdKTsKKyAgICAgICAgICAgIGZs
b2F0IG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVu
dFsxXSk7CisgICAgICAgICAgICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwor
ICAgICAgICAgICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGZvciAoaW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkp
IHsKKyAgICAgICAgaW50IGsgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOworICAg
ICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIHNfYmxvY2tTaXplOworICAgICAg
ICBBU1NFUlQoaiA+PSAwKTsKKyAgICAgICAgQVNTRVJUKGogPCAyICogc19ibG9ja1NpemUgKyAy
KTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0
YS5sYXR0aWNlU2VsZWN0b3Jbal07CisgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3Jbal0gPSBrOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUg
KyAyOyArK2kpIHsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2Nr
U2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKKyAgICAgICAgZm9y
IChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKKyAgICAgICAgICAg
IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFp
bnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOworICAgICAgICAgICAgcGFpbnRpbmdE
YXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEu
Z3JhZGllbnRbY2hhbm5lbF1baV1bMV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
cGFpbnRpbmdEYXRhOworfQorCitGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OlN0aXRjaERh
dGEgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlU3RpdGNoaW5nKEludFNpemUg
dGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBi
b29sIHN0aXRjaFRpbGVzKQoreworICAgIGlmICghc3RpdGNoVGlsZXMpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOworICAgIGZs
b2F0IHRpbGVIZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsKKyAgICBBU1NFUlQodGlsZVdpZHRo
ID4gMCAmJiB0aWxlSGVpZ2h0ID4gMCk7CisKKyAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0
dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAorICAgIC8vIHNvIHRo
YXQgdGhlIHRpbGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCisgICAgaWYgKGJhc2VGcmVx
dWVuY3lYKSB7CisgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGgg
KiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7CisgICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVu
Y3kgPSBjZWlsZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7CisgICAg
ICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8g
dGhlIHN0YW5kYXJkLgorICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kg
PCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCisgICAgICAgICAgICBiYXNlRnJlcXVl
bmN5WCA9IGxvd0ZyZXF1ZW5jeTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZyZXF1
ZW5jeVggPSBoaWdoRnJlcXVlbmN5OworICAgIH0KKyAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsK
KyAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNlRnJl
cXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2Vp
bGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7CisgICAgICAgIGlm
IChiYXNlRnJlcXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJl
cXVlbmN5WSkKKyAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5OworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Cisg
ICAgfQorCisgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOworICAgIHN0aXRjaERhdGEud2lkdGgg
PSByb3VuZGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOworICAgIHN0aXRjaERhdGEud3Jh
cFggPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKKyAgICBzdGl0Y2hEYXRhLmhl
aWdodCA9IHJvdW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpOworICAgIHN0aXRjaERh
dGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7CisKKyAgICByZXR1
cm4gc3RpdGNoRGF0YTsKK30KKworLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzog
aHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1l
bnQuCitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNo
RGF0YSYgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCit7CisgICAg
c3RydWN0IE5vaXNlUG9zaXRpb24geworICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGlu
IHRoZSBzcGVjIHRleHQuCisgICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRo
ZSBzcGVjIHRleHQuCisgICAgICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUg
c3BlYyB0ZXh0LgorCisgICAgICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29tcG9uZW50KQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47CisgICAgICAgICAg
ICAvLyAgYngwID0gKGludCl0OworICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOworICAgICAg
ICAgICAgLy8gIHJ4MCA9IHQgLSAoaW50KXQ7CisgICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9
IGNvbXBvbmVudCArIHNfcGVybGluTm9pc2U7CisgICAgICAgICAgICBpbmRleCA9IHN0YXRpY19j
YXN0PGludD4ocG9zaXRpb24pOworICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOwor
ICAgICAgICAgICAgZnJhY3Rpb24gPSBwb3NpdGlvbiAtIGluZGV4OworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBTaXplKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCisgICAg
ICAgICAgICAvLyAgIGJ4MCAtPSBwU3RpdGNoSW5mby0+bldpZHRoOworICAgICAgICAgICAgaWYg
KGluZGV4ID49IHdyYXBTaXplKQorICAgICAgICAgICAgICAgIGluZGV4IC09IHNpemU7CisKKyAg
ICAgICAgICAgIC8vIGlmIChieDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKKyAgICAgICAgICAg
IC8vICAgYngxIC09IHBTdGl0Y2hJbmZvLT5uV2lkdGg7CisgICAgICAgICAgICBpZiAobmV4dElu
ZGV4ID49IHdyYXBTaXplKQorICAgICAgICAgICAgICAgIG5leHRJbmRleCAtPSBzaXplOworICAg
ICAgICB9CisgICAgfTsKKworICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngo
KSk7CisgICAgTm9pc2VQb3NpdGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKKworICAgIC8v
IElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgorICAgIGlm
IChwYWludGluZ0RhdGEuc3RpdGNoVGlsZXMpIHsKKyAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0
Y2hEYXRhLndpZHRoLCBzdGl0Y2hEYXRhLndyYXBYKTsKKyAgICAgICAgbm9pc2VZLnN0aXRjaChz
dGl0Y2hEYXRhLmhlaWdodCwgc3RpdGNoRGF0YS53cmFwWSk7CisgICAgfQorCisgICAgLy8gYngw
ICY9IEJNOworICAgIC8vIGJ4MSAmPSBCTTsKKyAgICAvLyBieTAgJj0gQk07CisgICAgLy8gYnkx
ICY9IEJNOworICAgIG5vaXNlWC5pbmRleCAmPSBzX2Jsb2NrTWFzazsKKyAgICBub2lzZVgubmV4
dEluZGV4ICY9IHNfYmxvY2tNYXNrOworICAgIG5vaXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsK
KyAgICBub2lzZVkubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOworCisgICAgLy8gaSA9IHVMYXR0
aWNlU2VsZWN0b3JbYngwXTsKKyAgICAvLyBqID0gdUxhdHRpY2VTZWxlY3RvcltieDFdOworICAg
IGludCBsYXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5p
bmRleF07CisgICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNl
bGVjdG9yW25vaXNlWC5uZXh0SW5kZXhdOworCisgICAgLy8gc3ggPSBkb3VibGUoc19jdXJ2ZShy
eDApKTsKKyAgICAvLyBzeSA9IGRvdWJsZShzX2N1cnZlKHJ5MCkpOworICAgIGZsb2F0IHN4ID0g
c21vb3RoQ3VydmUobm9pc2VYLmZyYWN0aW9uKTsKKyAgICBmbG9hdCBzeSA9IHNtb290aEN1cnZl
KG5vaXNlWS5mcmFjdGlvbik7CisKKyAgICBhdXRvIG5vaXNlRm9yQ2hhbm5lbCA9IFsmXShpbnQg
Y2hhbm5lbCkgeworICAgICAgICAvLyBiMDAgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBieTBdCisg
ICAgICAgIGludCBiMDAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRl
eCArIG5vaXNlWS5pbmRleF07CisgICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5l
bF1bYjAwXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTAgKiBxWzFdOworICAgICAgICBjb25zdCBmbG9h
dCogcSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDBdOworICAgICAgICBmbG9h
dCB1ID0gbm9pc2VYLmZyYWN0aW9uICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07CisK
KyAgICAgICAgLy8gYjEwID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkwXTsKKyAgICAgICAgaW50
IGIxMCA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5v
aXNlWS5pbmRleF07CisgICAgICAgIC8vIHJ4MSA9IHJ4MCAtIDEuMGY7CisgICAgICAgIC8vIHEg
PSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjEwXTsgdiA9IHJ4MSAqIHFbMF0gKyByeTAgKiBx
WzFdOworICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IxMF07Cisg
ICAgICAgIGZsb2F0IHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBdICsgbm9pc2VZLmZy
YWN0aW9uICogcVsxXTsKKyAgICAgICAgLy8gYSA9IGxlcnAoc3gsIHUsIHYpOworICAgICAgICBm
bG9hdCBhID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CisKKyAgICAgICAgLy8gYjAx
ID0gdUxhdHRpY2VTZWxlY3RvcltpICsgYnkxXTsKKyAgICAgICAgaW50IGIwMSA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Cisg
ICAgICAgIC8vIHJ5MSA9IHJ5MCAtIDEuMGY7CisgICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNv
bG9yQ2hhbm5lbF1bYjAxXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTEgKiBxWzFdOworICAgICAgICBx
ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IwMV07CisgICAgICAgIHUgPSBub2lz
ZVguZnJhY3Rpb24gKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKKworICAg
ICAgICAvLyBiMTEgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBieTFdOworICAgICAgICBpbnQgYjEx
ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZ
Lm5leHRJbmRleF07CisgICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjEx
XTsgdiA9IHJ4MSAqIHFbMF0gKyByeTEgKiBxWzFdOworICAgICAgICBxID0gcGFpbnRpbmdEYXRh
LmdyYWRpZW50W2NoYW5uZWxdW2IxMV07CisgICAgICAgIHYgPSAobm9pc2VYLmZyYWN0aW9uIC0g
MSkgKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKKyAgICAgICAgLy8gYiA9
IGxlcnAoc3gsIHUsIHYpOworICAgICAgICBmbG9hdCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihz
eCwgdSwgdik7CisKKyAgICAgICAgLy8gcmV0dXJuIGxlcnAoc3ksIGEsIGIpOworICAgICAgICBy
ZXR1cm4gbGluZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7CisgICAgfTsKKworICAgIHJldHVy
biB7CisgICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgwKSwKKyAgICAgICAgbm9pc2VGb3JDaGFubmVs
KDEpLAorICAgICAgICBub2lzZUZvckNoYW5uZWwoMiksCisgICAgICAgIG5vaXNlRm9yQ2hhbm5l
bCgzKQorICAgIH07Cit9CisKKy8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5o
dG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQgZGVzY3JpYmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xv
ciBjb21wb25lbnRzLgorLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JH
QkE8dWludDg+PihTUkdCQTxmbG9hdD4pIHRvIGdldCB0aGUgc2FtZSBiZWhhdmlvci4KK0NvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OnRvSW50
QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxv
YXRDb21wb25lbnRzKQoreworICAgIHJldHVybiB7CisgICAgICAgIHN0ZDo6Y2xhbXA8dWludDhf
dD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMF0gKiAyNTUpLCAwLCAyNTUpLAor
ICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25l
bnRzWzFdICogMjU1KSwgMCwgMjU1KSwKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0
aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1syXSAqIDI1NSksIDAsIDI1NSksCisgICAgICAg
IHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbM10g
KiAyNTUpLCAwLCAyNTUpLAorICAgIH07Cit9CisKK0NvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZv
clBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIENvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0OworICAgIEZsb2F0UG9pbnQgbm9pc2VW
ZWN0b3IocG9pbnQueCgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkg
KiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVkpOworICAgIGZsb2F0IHJhdGlvID0gMTsKKyAg
ICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBwYWludGluZ0RhdGEubnVtT2N0YXZlczsg
KytvY3RhdmUpIHsKKyAgICAgICAgaWYgKHBhaW50aW5nRGF0YS50eXBlID09IFR1cmJ1bGVuY2VU
eXBlOjpGcmFjdGFsTm9pc2UpCisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQg
Kz0gbm9pc2UyRChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlv
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0g
bm9pc2UyRChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJh
dGlvOworCisgICAgICAgIG5vaXNlVmVjdG9yLnNldFgobm9pc2VWZWN0b3IueCgpICogMik7Cisg
ICAgICAgIG5vaXNlVmVjdG9yLnNldFkobm9pc2VWZWN0b3IueSgpICogMik7CisgICAgICAgIHJh
dGlvICo9IDI7CisKKyAgICAgICAgaWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxlcykgeworICAg
ICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9p
c2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQKKyAgICAgICAgICAgIC8vIGFkZGluZyBp
dCBhZnRlcndhcmQgc2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgorICAgICAgICAg
ICAgc3RpdGNoRGF0YS53aWR0aCAqPSAyOworICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9
IDIgKiBzdGl0Y2hEYXRhLndyYXBYIC0gc19wZXJsaW5Ob2lzZTsKKyAgICAgICAgICAgIHN0aXRj
aERhdGEuaGVpZ2h0ICo9IDI7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0
aXRjaERhdGEud3JhcFkgLSBzX3Blcmxpbk5vaXNlOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gVGhlIHZhbHVlIG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVy
YnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSArIDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQor
ICAgIC8vIGFuZCAodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNl
LgorICAgIGlmIChwYWludGluZ0RhdGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5v
aXNlKQorICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgKiAwLjVmICsgMC41ZjsKKworICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21w
b25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNl
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0
ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0
YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3sKKyAgICBBU1NFUlQoZW5kWSA+
IHN0YXJ0WSk7CisKKyAgICBGbG9hdFBvaW50IHBvaW50KDAsIGZpbHRlclJlZ2lvbi55KCkgKyBz
dGFydFkpOworICAgIGludCBpbmRleE9mUGl4ZWxDaGFubmVsID0gc3RhcnRZICogKGZpbHRlclJl
Z2lvbi53aWR0aCgpIDw8IDIpOworICAgIEZsb2F0U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBm
aWx0ZXJTY2FsZS53aWR0aCgpLCAxIC8gZmlsdGVyU2NhbGUuaGVpZ2h0KCkgfTsKKworICAgIGZv
ciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKKyAgICAgICAgcG9pbnQuc2V0WShw
b2ludC55KCkgKyAxKTsKKyAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKKyAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Cisg
ICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOworICAgICAgICAgICAgRmxvYXRQ
b2ludCBsb2NhbFBvaW50ID0gcG9pbnQuc2NhbGVkKGludmVyc2VTY2FsZS53aWR0aCgpLCBpbnZl
cnNlU2NhbGUuaGVpZ2h0KCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVU
dXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9p
bnQpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5k
YXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwpOworICAgICAgICAgICAgaW5kZXhPZlBpeGVs
Q2hhbm5lbCArPSA0OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEZFVHVyYnVsZW5jZVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMpCit7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVn
aW9uLCBwYXJhbWV0ZXJzLT5maWx0ZXJTY2FsZSwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpw
YXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRl
cnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlU29m
dHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwg
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJy
YXksIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhKQor
eworICAgIGludCBoZWlnaHQgPSBmaWx0ZXJSZWdpb24uaGVpZ2h0KCk7CisgICAgdW5zaWduZWQg
YXJlYSA9IGZpbHRlclJlZ2lvbi5hcmVhKCk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmlt
YWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZv
ciBwYXJhbGxlbCBqb2JzLgorICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBmaWx0ZXJSZWdp
b24uaGVpZ2h0KCkgLyA4OworICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6
Om1pbjx1bnNpZ25lZD4oYXJlYSAvIG1pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRz
KTsKKworICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgeworICAgICAgICBQYXJhbGxl
bEpvYnM8QXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJmFwcGx5UGxhdGZvcm1Xb3JrZXIs
IG9wdGltYWxUaHJlYWROdW1iZXIpOworCisgICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBh
cnJheQorICAgICAgICBhdXRvIG51bUpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7
CisgICAgICAgIGlmIChudW1Kb2JzID4gMSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpv
YiBpbnRvICJzdGVwWSItc2l6ZWQgam9icywgZGlzdHJpYnV0aW5nIHRoZSBleHRyYSByb3dzIGlu
dG8gdGhlIGZpcnN0ICJqb2JzV2l0aEV4dHJhIiBqb2JzLgorICAgICAgICAgICAgdW5zaWduZWQg
c3RlcFkgPSBoZWlnaHQgLyBudW1Kb2JzOworICAgICAgICAgICAgdW5zaWduZWQgam9ic1dpdGhF
eHRyYSA9IGhlaWdodCAlIG51bUpvYnM7CisgICAgICAgICAgICB1bnNpZ25lZCBzdGFydFkgPSAw
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSm9iczsgKytpKSB7
CisgICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMu
cGFyYW1ldGVyKGkpOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJSZWdpb24gPSBmaWx0
ZXJSZWdpb247CisgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlclNjYWxlID0gZmlsdGVyU2Nh
bGU7CisgICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmcGl4ZWxBcnJheTsKKyAg
ICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKKyAgICAg
ICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CisgICAgICAgICAgICAg
ICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpv
YkhlaWdodCA9IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKKyAgICAg
ICAgICAgICAgICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7CisgICAg
ICAgICAgICAgICAgc3RhcnRZICs9IGpvYkhlaWdodDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlm
IHRoZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0
b28gc21hbGwuCisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJT
Y2FsZSwgcGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOwor
fQorCitib29sIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpCit7CisgICAgYXV0byBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFNpemUgcmVzdWx0U2l6ZSht
X2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgaWYgKHJlc3VsdFNpemUu
YXJlYSgpLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgp
OworCisgICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS56ZXJvRmlsbCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBhdXRvIHRpbGVTaXplID0gcm91bmRlZEludFNpemUobV9lZmZlY3QuZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCkuc2l6ZSgpKTsKKworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9lZmZl
Y3QuYmFzZUZyZXF1ZW5jeVgoKTsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fZWZmZWN0
LmJhc2VGcmVxdWVuY3lZKCk7CisgICAgYXV0byBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGlu
Zyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5zdGl0
Y2hUaWxlcygpKTsKKworICAgIGF1dG8gcGFpbnRpbmdEYXRhID0gaW5pdFBhaW50aW5nRGF0YSht
X2VmZmVjdC50eXBlKCksIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbV9lZmZlY3Qu
bnVtT2N0YXZlcygpLCBtX2VmZmVjdC5zZWVkKCksIG1fZWZmZWN0LnN0aXRjaFRpbGVzKCksIHRp
bGVTaXplKTsKKworICAgIGFwcGx5UGxhdGZvcm0obV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3Qo
KSwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdE
YXRhLCBzdGl0Y2hEYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdh
cmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2NlNjhlMzQzNDFiMzg2NjNjMGMxNDg1YTkxMThmMDVj
MmRjYzM4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmgKQEAgLTAs
MCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0
YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5o
IgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZFVHVyYnVsZW5jZTsKK2VudW0gY2xhc3MgVHVyYnVsZW5jZVR5cGU7CisKK2NsYXNzIEZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8RkVUdXJidWxlbmNlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNy
ZXRlQXBwbGllcjxGRVR1cmJ1bGVuY2U+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFz
ZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIC8vIFByb2R1Y2Vz
IHJlc3VsdHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6CisgICAg
Ly8gciA9IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFu
ZAorICAgIC8vIG0gPSBzX3JhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9
IHNlZWQuCisgICAgLy8gU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBw
LiAxMTk1LCBPY3QuIDE5ODgKKyAgICAvLyBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBw
cm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQorICAgIC8vIGFzIHRoZSAxMCwwMDB0aCBnZW5l
cmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCisgICAgc3RhdGljIGNvbnN0
IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRN
YXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCisgICAgc3RhdGljIGNvbnN0IGludCBz
X3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQorICAg
IHN0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKKyAgICBzdGF0aWMg
Y29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUgYQorCisgICAgc3RhdGljIGNvbnN0IGlu
dCBzX2Jsb2NrU2l6ZSA9IDI1NjsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0g
c19ibG9ja1NpemUgLSAxOworCisgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIC8v
IENvbXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCisgICAgICAgIGxvbmcgcmFuZG9tKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2Vl
ZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7CisgICAgICAgICAgICBp
ZiAocmVzdWx0IDw9IDApCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNfcmFuZE1heGltdW07
CisgICAgICAgICAgICBzZWVkID0gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorCisgICAgICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGU7CisgICAgICAgIGZsb2F0
IGJhc2VGcmVxdWVuY3lYOworICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKKyAgICAgICAg
aW50IG51bU9jdGF2ZXM7CisgICAgICAgIGxvbmcgc2VlZDsKKyAgICAgICAgYm9vbCBzdGl0Y2hU
aWxlczsKKyAgICAgICAgSW50U2l6ZSBwYWludGluZ1NpemU7CisKKyAgICAgICAgaW50IGxhdHRp
Y2VTZWxlY3RvclsyICogc19ibG9ja1NpemUgKyAyXTsKKyAgICAgICAgZmxvYXQgZ3JhZGllbnRb
NF1bMiAqIHNfYmxvY2tTaXplICsgMl1bMl07CisgICAgfTsKKworICAgIHN0cnVjdCBTdGl0Y2hE
YXRhIHsKKyAgICAgICAgaW50IHdpZHRoIHsgMCB9OyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0
byB3cmFwIGZvciBzdGl0Y2hpbmcuCisgICAgICAgIGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11
bSB2YWx1ZSB0byB3cmFwLgorICAgICAgICBpbnQgaGVpZ2h0IHsgMCB9OworICAgICAgICBpbnQg
d3JhcFkgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgeworICAg
ICAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKKyAgICAgICAgRmxvYXRTaXplIGZpbHRlclNjYWxl
OworICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKKyAgICAgICAgUGFpbnRp
bmdEYXRhKiBwYWludGluZ0RhdGE7CisgICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAg
ICAgICAgaW50IHN0YXJ0WTsKKyAgICAgICAgaW50IGVuZFk7CisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQgdCkgeyByZXR1cm4gdCAqIHQgKiAoMyAt
IDIgKiB0KTsgfQorICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihm
bG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKSB7IHJldHVybiBhICsgdCAqIChiIC0gYSk7IH0KKwor
ICAgIHN0YXRpYyBQYWludGluZ0RhdGEgaW5pdFBhaW50aW5nRGF0YShUdXJidWxlbmNlVHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgbG9uZyBzZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1Np
emUpOworICAgIHN0YXRpYyBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxl
U2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVksIGJvb2wg
c3RpdGNoVGlsZXMpOworCisgICAgc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9p
c2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3QgRmxvYXRQ
b2ludCYgbm9pc2VWZWN0b3IpOworICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQs
IDQ+JiBmbG9hdENvbXBvbmVudHMpOworICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRh
JiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpOworCisgICAgc3RhdGljIHZvaWQgYXBw
bHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9h
dFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3Qg
UGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworICAgIHN0
YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisgICAgc3Rh
dGljIHZvaWQgYXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0
IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBQ
YWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxp
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYyMzU4ZGY1OTAzYTMwNDI2MzVkZDgyMzRjYWE1YjVmZmI4N2Qx
NzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsx
LDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYVNvZnR3YXJl
QXBwbGllci5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0g
bV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLT5pbWFn
ZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBtX2VmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJD
b250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIGZpbHRlckNvbnRleHQuZmls
bFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOworICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRl
c3RpbmF0aW9uSW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZUFw
cGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kZjg2MDM1M2E1NzA4MjEwMDk5N2QwNDRlYTUyMjNmM2FkYmM4
OWM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEs
MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU291cmNlQWxwaGE7CisKK2NsYXNzIFNvdXJj
ZUFscGhhU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxTb3VyY2VBbHBoYT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8U291cmNlQWxwaGE+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9Tb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTQ1MWRjM2IxM2Y3MGFmYjVlMWI3MDk3YjJlMmQ4YmJmZDVjOWNk
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpY1NvZnR3
YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpCit7CisgICAgYXV0byByZXN1
bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBzb3VyY2VJ
bWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOworICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIXNv
dXJjZUltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIHJl
dHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBo
aWNTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjYxOTlhYjdmMTVhMzg4YzEzZWIwNjgzY2E5ZjVmMWMzYTk0MzFjMzYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1Nv
dXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU291cmNlR3JhcGhpYzsKKworY2xhc3MgU291cmNlR3Jh
cGhpY1NvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
U291cmNlR3JhcGhpYz4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8U291cmNlR3JhcGhpYz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOwor
CisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3Im
IGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IGMyZjRhNjI4MTc5OTM3ZWZk
M2JjNTg0ODAwMTlkMzdmYmVkZWM2ZmEuLjNjM2Y1YzE1NWE1NmMwNzkxODlhMzM4ZmViYTFlNTc4
MjdmNzMxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC03MSw3
ICs3MSw3IEBAIENTU0ZpbHRlcjo6Q1NTRmlsdGVyKGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlCiBzdGF0aWMgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gY3JlYXRlQmx1ckVmZmVjdChjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3Bl
cmF0aW9uLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKIHsKICAgICBmbG9hdCBzdGREZXZpYXRp
b24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDAp
OwotICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwgc3RkRGV2
aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdF
TU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJs
dXI6OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVy
Q29uc3VtZXI6OkZpbHRlclByb3BlcnR5ID8gRWRnZU1vZGVUeXBlOjpOb25lIDogRWRnZU1vZGVU
eXBlOjpEdXBsaWNhdGUpOwogfQogCiBzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRl
QnJpZ2h0bmVzc0VmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCmluZGV4IDFhODEzNGE5YzhiN2ZjMGE1
MDc1ZWRlODFhMGQzNjk3MGU5OGM0N2YuLjQ4YzkwYjIwNDdjMjQwNWIwNjgzMDQxNTdjNWJiMWVm
ODM5YjdmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50LmNwcApAQCAtNzksNyArNzksNyBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdAog
CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikgewogICAgICAgICBFZGdl
TW9kZVR5cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPEVkZ2VNb2RlVHlwZT46
OmZyb21TdHJpbmcodmFsdWUpOwotICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCisgICAg
ICAgIGlmIChwcm9wZXJ0eVZhbHVlICE9IEVkZ2VNb2RlVHlwZTo6VW5rbm93bikKICAgICAgICAg
ICAgIG1fZWRnZU1vZGUtPnNldEJhc2VWYWxJbnRlcm5hbDxFZGdlTW9kZVR5cGU+KHByb3BlcnR5
VmFsdWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKCJmZUNvbnZvbHZlTWF0cml4OiBwcm9ibGVtIHBhcnNp
bmcgZWRnZU1vZGU9XCIiICsgdmFsdWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQgd2lsbCBub3Qg
YmUgZGlzcGxheWVkLiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQuaAppbmRleCAxYjZiYmU0ODcxMjc1YzQyMWM4ZGQ0NDA5YzFiNDg5NzI5NWFh
MTBhLi4zOTY3MGZlNjJmZmJlNmFiYTFjY2M2MjQ3OTQwNDVkZmI2YzJjNWI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaApAQCAtMjcsMTkg
KzI3LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgogc3RydWN0IFNWR1By
b3BlcnR5VHJhaXRzPEVkZ2VNb2RlVHlwZT4gewotICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0
RW51bVZhbHVlKCkgeyByZXR1cm4gRURHRU1PREVfTk9ORTsgfQotICAgIHN0YXRpYyBFZGdlTW9k
ZVR5cGUgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gRURHRU1PREVfTk9ORTsgfQorICAgIHN0YXRp
YyB1bnNpZ25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEVkZ2VNb2RlVHlwZTo6Tm9uZSk7IH0KKyAgICBzdGF0aWMgRWRnZU1vZGVUeXBlIGluaXRp
YWxWYWx1ZSgpIHsgcmV0dXJuIEVkZ2VNb2RlVHlwZTo6Tm9uZTsgfQogCiAgICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZyhFZGdlTW9kZVR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
dHlwZSkgewotICAgICAgICBjYXNlIEVER0VNT0RFX1VOS05PV046CisgICAgICAgIGNhc2UgRWRn
ZU1vZGVUeXBlOjpVbmtub3duOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0g
ICAgICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgorICAgICAgICBjYXNlIEVkZ2VNb2RlVHlw
ZTo6RHVwbGljYXRlOgogICAgICAgICAgICAgcmV0dXJuICJkdXBsaWNhdGUiX3M7Ci0gICAgICAg
IGNhc2UgRURHRU1PREVfV1JBUDoKKyAgICAgICAgY2FzZSBFZGdlTW9kZVR5cGU6OldyYXA6CiAg
ICAgICAgICAgICByZXR1cm4gIndyYXAiX3M7Ci0gICAgICAgIGNhc2UgRURHRU1PREVfTk9ORToK
KyAgICAgICAgY2FzZSBFZGdlTW9kZVR5cGU6Ok5vbmU6CiAgICAgICAgICAgICByZXR1cm4gIm5v
bmUiX3M7CiAgICAgICAgIH0KIApAQCAtNTAsMTIgKzUwLDEyIEBAIHN0cnVjdCBTVkdQcm9wZXJ0
eVRyYWl0czxFZGdlTW9kZVR5cGU+IHsKICAgICBzdGF0aWMgRWRnZU1vZGVUeXBlIGZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAiZHVw
bGljYXRlIikKLSAgICAgICAgICAgIHJldHVybiBFREdFTU9ERV9EVVBMSUNBVEU7CisgICAgICAg
ICAgICByZXR1cm4gRWRnZU1vZGVUeXBlOjpEdXBsaWNhdGU7CiAgICAgICAgIGlmICh2YWx1ZSA9
PSAid3JhcCIpCi0gICAgICAgICAgICByZXR1cm4gRURHRU1PREVfV1JBUDsKKyAgICAgICAgICAg
IHJldHVybiBFZGdlTW9kZVR5cGU6OldyYXA7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAibm9uZSIp
Ci0gICAgICAgICAgICByZXR1cm4gRURHRU1PREVfTk9ORTsKLSAgICAgICAgcmV0dXJuIEVER0VN
T0RFX1VOS05PV047CisgICAgICAgICAgICByZXR1cm4gRWRnZU1vZGVUeXBlOjpOb25lOworICAg
ICAgICByZXR1cm4gRWRnZU1vZGVUeXBlOjpVbmtub3duOwogICAgIH0KIH07CiAKQEAgLTExNCw3
ICsxMTQsNyBAQCBwcml2YXRlOgogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iaWFzIHsg
U1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZElu
dGVnZXI+IG1fdGFyZ2V0WCB7IFNWR0FuaW1hdGVkSW50ZWdlcjo6Y3JlYXRlKHRoaXMpIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkSW50ZWdlcj4gbV90YXJnZXRZIHsgU1ZHQW5pbWF0ZWRJbnRlZ2Vy
OjpjcmVhdGUodGhpcykgfTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9lZGdl
TW9kZSB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBFREdFTU9ERV9EVVBM
SUNBVEUpIH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fZWRnZU1vZGUgeyBT
VkdBbmltYXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRWRnZU1vZGVUeXBlOjpEdXBsaWNh
dGUpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2tlcm5lbFVuaXRMZW5ndGhYIHsg
U1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51
bWJlcj4gbV9rZXJuZWxVbml0TGVuZ3RoWSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhp
cykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRCb29sZWFuPiBtX3ByZXNlcnZlQWxwaGEgeyBTVkdB
bmltYXRlZEJvb2xlYW46OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAppbmRleCBmMWU2YmY0OWE0ZGIzZGNhNzc1Yzli
N2VmYTVkYjlkYzg2OTg4NzJhLi5hMDkwNGZiNTI3MWEwODZjNjU0ZTc5NmU0YzI1NTU4Y2E3YzAx
MDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
LmNwcApAQCAtNzQsNyArNzQsNyBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6cGFy
c2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQQogCiAgICAgaWYg
KG5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikgewogICAgICAgICBhdXRvIHByb3BlcnR5
VmFsdWUgPSBTVkdQcm9wZXJ0eVRyYWl0czxFZGdlTW9kZVR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVl
KTsKLSAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQorICAgICAgICBpZiAocHJvcGVydHlW
YWx1ZSAhPSBFZGdlTW9kZVR5cGU6OlVua25vd24pCiAgICAgICAgICAgICBtX2VkZ2VNb2RlLT5z
ZXRCYXNlVmFsSW50ZXJuYWw8RWRnZU1vZGVUeXBlPihwcm9wZXJ0eVZhbHVlKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0
V2FybmluZygiZmVHYXVzc2lhbkJsdXI6IHByb2JsZW0gcGFyc2luZyBlZGdlTW9kZT1cIiIgKyB2
YWx1ZSArICJcIi4gRmlsdGVyZWQgZWxlbWVudCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuIik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKaW5kZXggZjQw
ZWIzMzc3OGM0M2RmNjFlZTU4OTYzZWVjZjllY2RiYTU0OWNjMS4uNDgwMzIyZmY3MDc1ODQ0Mjk2
OTViNDk3YWU2NjQ1ZWQwOWJmOGMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuaApAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIFJlZjxT
VkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMp
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3N0ZERldmlhdGlvblggeyBTVkdBbmlt
YXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBt
X3N0ZERldmlhdGlvblkgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07Ci0gICAg
UmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fZWRnZU1vZGUgeyBTVkdBbmltYXRlZEVudW1l
cmF0aW9uOjpjcmVhdGUodGhpcywgRURHRU1PREVfTk9ORSkgfTsKKyAgICBSZWY8U1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbj4gbV9lZGdlTW9kZSB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0
ZSh0aGlzLCBFZGdlTW9kZVR5cGU6Ok5vbmUpIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKaW5k
ZXggOGIwNTYwYzRkYTgwMDM5NzAxNDhlMWUxNWUyZjMwOTdiOTE1MzE1Ni4uMDFjY2E0ODY4YjJl
OWQzYjZjNmZkZDA3ZDc3ZGM3MTU3MDM4YTliZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFNWR0ZFTW9y
cGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IGNvbnN0IEF0bwogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsK
ICAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVy
dHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOwotICAg
ICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCisgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlICE9
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGU6OlVua25vd24pCiAgICAgICAgICAgICBtX3N2Z09wZXJh
dG9yLT5zZXRCYXNlVmFsSW50ZXJuYWw8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4ocHJvcGVydHlW
YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuaAppbmRleCBiMjFiNmY1YzQ3Yjc4NWRmMjhmMDEzZWRlNTQwMWM4
NjZkNDBlOWRkLi5jYWJmMDU4MGMyNTM0ZGViNDUxNjg5MWJhNTI5YTdlYTA2MWRmYTVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKQEAgLTI3LDE2ICsy
NywxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlPD4KIHN0cnVjdCBTVkdQcm9w
ZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7Ci0gICAgc3RhdGljIHVuc2lnbmVk
IGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRF
OyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6RGlsYXRlKTsgfQogCiAg
ICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCiAg
ICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfVU5LTk9XTjoKKyAgICAgICAgY2FzZSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpV
bmtub3duOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIGNhc2Ug
RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFOgorICAgICAgICBjYXNlIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGU6OkVyb2RlOgogICAgICAgICAgICAgcmV0dXJuICJlcm9kZSJfczsKLSAgICAgICAg
Y2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFOgorICAgICAgICBjYXNlIE1vcnBob2xv
Z3lPcGVyYXRvclR5cGU6OkRpbGF0ZToKICAgICAgICAgICAgIHJldHVybiAiZGlsYXRlIl9zOwog
ICAgICAgICB9CiAKQEAgLTQ3LDEwICs0NywxMCBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8
TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4gewogICAgIHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2
YWx1ZSA9PSAiZXJvZGUiKQotICAgICAgICAgICAgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRP
Ul9FUk9ERTsKKyAgICAgICAgICAgIHJldHVybiBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpFcm9k
ZTsKICAgICAgICAgaWYgKHZhbHVlID09ICJkaWxhdGUiKQotICAgICAgICAgICAgcmV0dXJuIEZF
TU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU7Ci0gICAgICAgIHJldHVybiBGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfVU5LTk9XTjsKKyAgICAgICAgICAgIHJldHVybiBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlOjpEaWxhdGU7CisgICAgICAgIHJldHVybiBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpVbmtu
b3duOwogICAgIH0KIH07CiAKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owot
ICAgIFJlZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkg
fTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdPcGVyYXRvciB7IFNWR0Fu
aW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpF
cm9kZSkgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWCB7IFNWR0FuaW1h
dGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1f
cmFkaXVzWSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKIH07Cg==
</data>
<flag name="commit-queue"
          id="470212"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445084</attachid>
            <date>2021-11-24 02:51:05 -0800</date>
            <delta_ts>2021-11-24 11:41:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232833-20211124025103.patch</filename>
            <type>text/plain</type>
            <size>390664</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmRhMzRiNjJjODRmOGU3
YmMyMDk4ZjJmNGQyYjI5ZjUzZjFkZTcxNy4uOWU3MzQ2MTYzZjljNGJmZDI1MTZhNjMzM2IyZGRl
ZjZjZjgzMDg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyNyBAQAorMjAyMS0xMS0yMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1vdmUgdGhlIHNvZnR3YXJlIEZpbHRlckVmZmVjdEFwcGxpZXJzIHRvIHNlcGFyYXRlIGZpbGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI4MzMK
KyAgICAgICAgcmRhcjovLzg1NDI0MjI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB0aGUgdGhlIHNvZnR3YXJlIEZpbHRl
ckVmZmVjdEFwcGxpZXJzIHRvIHNlcGFyYXRlIHNvdXJjZQorICAgICAgICBhbmQgaGVhZGVyIGZp
bGVzLiBUaGVyZSBpcyBubyBjaGFuZ2UgaW4gdGhlIGFwcGxpZXJzIGNvZGUuCisKKyAgICAgICAg
QnV0IEVkZ2VNb2RlVHlwZSBhbmQgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBoYXZlIHRvIGNoYW5n
ZWQgdG8gYmUgZW51bQorICAgICAgICBjbGFzc2VzIHNvIHRoZXkgY2FuIGJlIGZvcndhcmRlZCBk
ZWNsYXJlZCBpbiB0aGUgYXBwbGllcnMnIGhlYWRlciBmaWxlcy4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZFNvZnR3YXJlQXBwbGll
cjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
OjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0
ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFj
Y2VsZXJhdGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlSWRlbnRpdHlUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyOjpjb21wdXRlVGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVEaXNjcmV0ZVRh
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXI6OmNvbXB1dGVMaW5lYXJUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlR2FtbWFUYWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyOjpjb21wdXRlTG9va3VwVGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdh
cmVBcHBsaWVyOjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZVNvZnR3YXJlQXBwbGllcjo6Y2xhbXBCeXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjph
cHBseUFyaXRobWV0aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGVT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5Tm9uQXJpdGhtZXRpYyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpjbGFtcFJHQkFWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBp
eGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNl
dE91dGVyUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJp
eC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGln
aHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyOjpieXRlT2Zmc2V0T2ZQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6eENoYW5uZWxJbmRleCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cjo6eUNoYW5uZWxJbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFw
cGxpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93U29mdHdhcmVBcHBsaWVyOjphcHBseSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZFNvZnR3
YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyU29mdHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGll
cjo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNv
ZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyVW5hY2NlbGVyYXRl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1ckdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBo
YVdpbmRvdzo6bGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdp
bmRvdzo6dG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpjZW50ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJv
dHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0VG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRDZW50ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxw
aGFXaW5kb3c6OnNldEJvdHRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0VG9wUmlnaHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6
OnNldFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdodCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2hpZnRS
b3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6QWxwaGFXaW5kb3c6OnNoaWZ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0Rh
dGE6OmludGVyaW9yTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6
Ym90dG9tUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6c2V0UGl4ZWxJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm1HZW5lcmljV29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlU29mdHdhcmVBcHBsaWVyOjphcHBseSk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1ha2VQaXhlbFZhbHVlRnJv
bUNvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3lTb2Z0d2FyZUFwcGxpZXI6Om1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1p
bk9yTWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJl
QXBwbGllcjo6Y29sdW1uRXh0cmVtdW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjprZXJuZWxFeHRyZW11bSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1H
ZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
aDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldFNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpQYWludGluZ0RhdGE6
OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpzbW9vdGhDdXJ2ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmxpbmVhckludGVy
cG9sYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdh
cmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVN0aXRjaGluZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
Ojp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9y
UG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBs
eVBsYXRmb3JtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3
YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3RBcHBsaWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhp
Y1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmVB
cHBsaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0
d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQ
bGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGll
cjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmguCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVB
cHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1
dGVUYWJ1bGFyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlQXBwbGllcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxpbmVhclRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVMb29rdXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVB
cHBsaWVyOjpjbGFtcEJ5dGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2Fy
ZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQ
bGF0Zm9ybUFyaXRobWV0aWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5QXJpdGhtZXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0aG1ldGljKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29u
dm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6
c2V0RGVzdGluYXRpb25QaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllcjo6Z2V0UGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRJbnRlcmlvclBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRPdXRlclBpeGVs
cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVu
dE1hcFNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OkZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmVBcHBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29m
dHdhcmVBcHBsaWVyOjp4Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjphcHBseSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNl
bWVudE1hcFNvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmguCisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6Ynl0ZU9mZnNldE9mUGl4ZWwpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdh
cmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93U29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdh
cmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmguCisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kU29mdHdhcmVB
cHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29m
dHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cik6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hC
bHVyVW5hY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3
YXJlQXBwbGllcjo6Ym94Qmx1ckdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdh
cmVBcHBsaWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRv
cExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1h
bCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1h
bCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OnNl
dFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2Vu
ZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBs
eVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6bGVm
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpB
bHBoYVdpbmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6dG9wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpjZW50ZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFX
aW5kb3c6OmJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2V0VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRDZW50ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldEJvdHRv
bSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdp
bmRvdzo6c2V0VG9wUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6c2hp
ZnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxw
aGFXaW5kb3c6OnNoaWZ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6RkVNZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNZXJnZVNvZnR3YXJlQXBwbGllci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhv
bG9neVNvZnR3YXJlQXBwbGllci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11bSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbEV4dHJlbXVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9n
eVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1v
cnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6cGl4ZWxB
cnJheUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhl
bFZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
T2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpG
RU9mZnNldFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmguCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2Fy
ZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VT
b2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVTdGl0Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpub2lzZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdEYXRhOjpyYW5kb20pOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpzbW9vdGhDdXJ2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmxpbmVhckludGVycG9sYXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxw
aGFTb2Z0d2FyZUFwcGxpZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUFscGhhU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3Vy
Y2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oLgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNv
bnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8
RWRnZU1vZGVUeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxFZGdlTW9kZVR5cGU+Ojppbml0aWFsVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPjo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8RWRnZU1vZGVUeXBlPjo6ZnJvbVN0cmluZyk6
CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAg
ICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNb3JwaG9sb2d5
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlPjo6aGlnaGVzdEVudW1WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPjo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZy
b21TdHJpbmcpOgorCiAyMDIxLTExLTIzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gTW92ZSB0aGUgc29mdHdhcmUgRmlsdGVyRWZm
ZWN0IGZ1bmN0aW9ucyB0byBzZXBhcmF0ZSBhcHBsaWVyIGNsYXNzZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggMGVlMGJlMzAzZDJhNzI1ZjUxNjAzZTEzMWY2ZTIxZWMyODU1NmZjZi4uNjdkNjdi
YzZiZGYxNDQzMzc4YzgwNTk1OTQ0NWQ5MDliNjMyNDg5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
QEAgLTE0MSw2ICsxNDEsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJz
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMiCisgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2lzbyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDgxMzcyZTk5MTNkZjJhNTYyOWNm
MTE0ZmZhNmI4Zjk0MDg3YTJlOGMuLmI2ZWMxNDQ5YTg0OWNkYjRmOWIxNjY3MTc4NzYyYzc4NDhi
ZjEyNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTEwLDYgKzIxMTAsMjMgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUJsZW5kU29mdHdhcmVBcHBsaWVy
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxp
ZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVP
ZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09Cb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pc28vSVNPT3JpZ2luYWxGb3JtYXRCb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNP
UHJvdGVjdGlvblNjaGVtZUluZm9Cb3guY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjg2YzkzNDliMTIyMTk3OWM4OTk2OWQx
YjFiMDk2MjE0MDAwM2MwYS4uMGFjYTdjMzJjNDU2OGI0M2U0YjkwMWJkYmQ3MmM1ZjVhMGJmY2Qz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTA4OTcsNiArMTA4OTcsNDAgQEAKIAkJNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgz
IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTggLyogUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkExM0E5RjI3
NEM1Q0M3MDBFMkE4OEUgLyogRmlsdGVyRWZmZWN0QXBwbGllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
aWx0ZXJFZmZlY3RBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEz
QUI2Mjc0RENFREMwMEUyQTg4RSAvKiBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FCNzI3NERDRURDMDBFMkE4OEUgLyogRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUI4
Mjc0RERFQzAwMEUyQTg4RSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FCOTI3NERERUMwMDBFMkE4
OEUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTEzQUJBMjc0REUwMTIwMEUyQTg4RSAvKiBGRUNvbXBvc2l0ZVNvZnR3
YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBw
bGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUJCMjc0REUwMTIw
MEUyQTg4RSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
RUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkExM0FCRTI3NERFMzNGMDBFMkE4OEUgLyogRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBw
bGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBs
aWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQkYyNzRERTMzRjAw
RTJBODhFIC8qIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkExM0FDMDI3NERFMzU5MDBFMkE4OEUgLyogRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FD
MTI3NERFMzU5MDBFMkE4OEUgLyogRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQzIyNzRERTM4NzAwRTJBODhFIC8qIEZFRHJv
cFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRURyb3BTaGFk
b3dTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkEx
M0FDMzI3NERFMzg3MDBFMkE4OEUgLyogRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkExM0FDNDI3NERFMzlFMDBFMkE4OEUgLyogRkVGbG9vZFNvZnR3
YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUZsb29kU29mdHdhcmVBcHBsaWVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQzUyNzRERTM5RTAwRTJB
ODhFIC8qIEZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVGbG9vZFNv
ZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDNjI3
NERFM0I3MDBFMkE4OEUgLyogRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDNzI3NERFM0I3MDBFMkE4OEUgLyogRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJT
b2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQzgy
NzRERTNEMTAwRTJBODhFIC8qIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTEzQUM5Mjc0REUzRDEwMEUyQTg4RSAvKiBGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBQ0EyNzRERTNFNTAwRTJBODhF
IC8qIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVNZXJn
ZVNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEz
QUNCMjc0REUzRTUwMEUyQTg4RSAvKiBGRU1lcmdlU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJBMTNBQ0MyNzRERTQzNzAwRTJBODhFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBw
bGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDRDI3NERFNDM3MDBFMkE4
OEUgLyogRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFTW9y
cGhvbG9neVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkExM0FDRTI3NERFNDZDMDBFMkE4OEUgLyogRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkExM0FDRjI3NERFNDZDMDBFMkE4OEUgLyogRkVPZmZzZXRT
b2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMTNBRDAyNzRERTQ4OTAwRTJBODhF
IC8qIEZFVGlsZVNvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRVRpbGVT
b2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FE
MTI3NERFNDg5MDBFMkE4OEUgLyogRkVUaWxlU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZFVGlsZVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkExM0FEMjI3NERFNTE4MDBFMkE4OEUgLyogRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUQzMjc0REU1MTgwMEUyQTg4RSAv
KiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEz
QUQ0Mjc0REU1NEUwMEUyQTg4RSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQUQ1Mjc0REU1NEUwMEUyQTg4RSAvKiBTb3VyY2VB
bHBoYVNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VBbHBoYVNvZnR3YXJl
QXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkExM0FENjI3NERFNTc4
MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJBMTNBRDcyNzRERTU3ODAwRTJBODhFIC8qIFNvdXJjZUdyYXBoaWNT
b2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlR3JhcGhpY1NvZnR3YXJlQXBw
bGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkI0RUY3NDI3NEUyMzMzMDAy
OTNDMkYgLyogRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUJsZW5k
U29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjRFRjc1
Mjc0RTIzMzQwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkJBQzNBNDIzRTE3MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E1MjNFMTczMjgw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzODMyLDYgKzIzODY2LDQ3IEBACiAJCQlwYXRo
ID0gIm1vZGVsLWVsZW1lbnQiOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJ
NzJBMTNBQjQyNzREQ0VBMzAwRTJBODhFIC8qIHNvZnR3YXJlICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MkI0RUY3NTI3NEUyMzM0MDAyOTNDMkYgLyog
RkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJCNEVGNzQyNzRFMjMzMzAwMjkz
QzJGIC8qIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaCAqLywKKwkJCQk3MkExM0FCNjI3NERDRURD
MDBFMkE4OEUgLyogRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJB
MTNBQjcyNzREQ0VEQzAwRTJBODhFIC8qIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaCAq
LywKKwkJCQk3MkExM0FCODI3NERERUMwMDBFMkE4OEUgLyogRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBQjkyNzREREVDMDAwRTJBODhFIC8qIEZF
Q29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuaCAqLywKKwkJCQk3MkExM0FCQTI3NERF
MDEyMDBFMkE4OEUgLyogRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcy
QTEzQUJCMjc0REUwMTIwMEUyQTg4RSAvKiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oICov
LAorCQkJCTcyQTEzQUJFMjc0REUzM0YwMEUyQTg4RSAvKiBGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FCRjI3NERFMzNGMDBFMkE4OEUgLyogRkVDb252
b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUMwMjc0REUzNTkwMEUy
QTg4RSAvKiBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJB
MTNBQzEyNzRERTM1OTAwRTJBODhFIC8qIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
LmggKi8sCisJCQkJNzJBMTNBQzIyNzRERTM4NzAwRTJBODhFIC8qIEZFRHJvcFNoYWRvd1NvZnR3
YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBQzMyNzRERTM4NzAwRTJBODhFIC8qIEZFRHJv
cFNoYWRvd1NvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUM0Mjc0REUzOUUwMEUyQTg4
RSAvKiBGRUZsb29kU29mdHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FDNTI3NERFMzlF
MDBFMkE4OEUgLyogRkVGbG9vZFNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUM2Mjc0
REUzQjcwMEUyQTg4RSAvKiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJ
CQkJNzJBMTNBQzcyNzRERTNCNzAwRTJBODhFIC8qIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBs
aWVyLmggKi8sCisJCQkJNzJBMTNBQzgyNzRERTNEMTAwRTJBODhFIC8qIEZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUM5Mjc0REUzRDEwMEUyQTg4RSAvKiBGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBQ0EyNzRERTNFNTAwRTJBODhF
IC8qIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUNCMjc0REUzRTUw
MEUyQTg4RSAvKiBGRU1lcmdlU29mdHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBQ0MyNzRE
RTQzNzAwRTJBODhFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJ
NzJBMTNBQ0QyNzRERTQzNzAwRTJBODhFIC8qIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5o
ICovLAorCQkJCTcyQTEzQUNFMjc0REU0NkMwMEUyQTg4RSAvKiBGRU9mZnNldFNvZnR3YXJlQXBw
bGllci5jcHAgKi8sCisJCQkJNzJBMTNBQ0YyNzRERTQ2QzAwRTJBODhFIC8qIEZFT2Zmc2V0U29m
dHdhcmVBcHBsaWVyLmggKi8sCisJCQkJNzJBMTNBRDAyNzRERTQ4OTAwRTJBODhFIC8qIEZFVGls
ZVNvZnR3YXJlQXBwbGllci5jcHAgKi8sCisJCQkJNzJBMTNBRDEyNzRERTQ4OTAwRTJBODhFIC8q
IEZFVGlsZVNvZnR3YXJlQXBwbGllci5oICovLAorCQkJCTcyQTEzQUQyMjc0REU1MTgwMEUyQTg4
RSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwICovLAorCQkJCTcyQTEzQUQzMjc0
REU1MTgwMEUyQTg4RSAvKiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCAqLywKKwkJCQk3
MkExM0FENDI3NERFNTRFMDBFMkE4OEUgLyogU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuY3Bw
ICovLAorCQkJCTcyQTEzQUQ1Mjc0REU1NEUwMEUyQTg4RSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJl
QXBwbGllci5oICovLAorCQkJCTcyQTEzQUQ2Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VHcmFw
aGljU29mdHdhcmVBcHBsaWVyLmNwcCAqLywKKwkJCQk3MkExM0FENzI3NERFNTc4MDBFMkE4OEUg
LyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBz
b2Z0d2FyZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdDMDExRjNDMjRG
QUQzNjAwMDVCRUYxMCAvKiBTZXR0aW5nc1RlbXBsYXRlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTkwNCw2ICsyNTk3OSw3IEBACiAJCUE3NUU4QjdG
MEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3MkExM0FCNDI3NERDRUEzMDBFMkE4OEUgLyogc29mdHdhcmUg
Ki8sCiAJCQkJQTFFMTE1NDMxMzAxNUMzRDAwNTRBQzhDIC8qIERpc3RhbnRMaWdodFNvdXJjZS5j
cHAgKi8sCiAJCQkJODQ3MzBENUExMjQ4RjBCMzAwRDNBOUM5IC8qIERpc3RhbnRMaWdodFNvdXJj
ZS5oICovLAogCQkJCUE3NUU4QjgwMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUJsZW5kLmNwcCAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuY3BwCmluZGV4IGQyY2FiYmE5Zjg2YWIzMzIwZWMyM2UwNWQ3ZmE1N2FhM2E0ZDQyYjguLjI5
ZGNiMGZiZjRmMWEwOTE2MzBjMjAwMDcxNDQxNjUwNTJhMmJkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtNSw2
ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxNCBBZG9iZSBTeXN0ZW1zIElu
Y29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
NiwxMCArMjcsNyBAQAogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAogI2luY2x1ZGUgIkZFQmxlbmRO
RU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgorI2luY2x1ZGUgIkZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUzLDM4ICs1
MSw2IEBAIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQogICAgIHJl
dHVybiB0cnVlOwogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVCbGVuZFNvZnR3YXJl
QXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIEZFQmxl
bmRTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
QmxlbmQ+IHsKLSAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
QmxlbmQ+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBw
bHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMp
IG92ZXJyaWRlOwotfTsKLQotI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi1ib29sIEZF
QmxlbmRTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdHNbMF0uZ2V0KCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNb
MV0uZ2V0KCk7Ci0KLSAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgYXV0
byBpbWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFn
ZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBH
cmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwot
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0
LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5k
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0s
IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJj
ZU92ZXIsIG1fZWZmZWN0LmJsZW5kTW9kZSgpIH0pOwotICAgIHJldHVybiB0cnVlOwotfQotI2Vu
ZGlmCi0KIGJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogewogICAgIHJldHVybiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBs
eShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKaW5kZXggMzM2OTNjMTk5N2JiYTdiYmRlODg5
MDU4N2IxNTZlZWUzMzc2YzVjZC4uNDdjZjg1ZTk4OTVhNzBmNDM0NjFlMTBjMjQzMmRjZmE3ZDBh
NGU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMg
SW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTM4LDggKzM5LDcgQEAgcHJpdmF0ZToKICAgICBGRUJsZW5kKEJsZW5kTW9kZSk7CiAKICAgICBi
b29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1
bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJh
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgp
OworCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFy
cmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBp
eGVsQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5
TGVuZ3RoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggMTAyMzdiYTlkY2MyNDFmZGUxNGYz
MTIzZGM2NDg2M2IyMjZiZGYzNS4uZDY4NWExNDUwYjQ3NTMyMjVhNzI5MzIxMGFlYzk2MDgzOGQ2
MWQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MywxNyArMjQsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRy
aXguaCIKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRl
Lmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWY8RkVDb2xvck1hdHJpeD4g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+
JiYgdmFsdWVzKQpAQCAtMTAwLDI3OSArOTMsNiBAQCBWZWN0b3I8ZmxvYXQ+IEZFQ29sb3JNYXRy
aXg6Om5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQogICAgIHJl
dHVybiBub3JtYWxpemVkVmFsdWVzOwogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBm
aWxlcy4KLWNsYXNzIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29sb3JNYXRyaXg+IHsKLSAgICB1c2luZyBCYXNlID0g
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29sb3JNYXRyaXg+OwotCi1wdWJsaWM6Ci0g
ICAgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcihGRUNvbG9yTWF0cml4Jik7Ci0KLSAgICBi
b29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgdm9pZCBtYXRyaXgoZmxv
YXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsK
LSAgICBpbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlKSBjb25zdDsKLSAgICBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxv
YXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHZvaWQgYXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVk
KFBpeGVsQnVmZmVyJikgY29uc3Q7Ci0jZW5kaWYKLSAgICB2b2lkIGFwcGx5UGxhdGZvcm1VbmFj
Y2VsZXJhdGVkKFBpeGVsQnVmZmVyJikgY29uc3Q7Ci0KLSAgICB2b2lkIGFwcGx5UGxhdGZvcm0o
UGl4ZWxCdWZmZXImKSBjb25zdDsKLQotICAgIGZsb2F0IG1fY29tcG9uZW50c1s5XTsKLX07Ci0K
LUZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXIoRkVDb2xvck1hdHJpeCYgZWZmZWN0KQotICAgIDogQmFzZShlZmZlY3QpCi17Ci0gICAgaWYg
KG1fZWZmZWN0LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCi0gICAgICAg
IEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMs
IG1fZWZmZWN0LnZhbHVlcygpWzBdKTsKLSAgICBlbHNlIGlmIChtX2VmZmVjdC50eXBlKCkgPT0g
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2Fs
Y3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1fZWZmZWN0LnZhbHVlcygp
WzBdKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6bWF0
cml4KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkg
Y29uc3QKLXsKLSAgICBmbG9hdCByID0gcmVkOwotICAgIGZsb2F0IGcgPSBncmVlbjsKLSAgICBm
bG9hdCBiID0gYmx1ZTsKLSAgICBmbG9hdCBhID0gYWxwaGE7Ci0KLSAgICBjb25zdCBhdXRvJiB2
YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKLQotICAgIHJlZCAgID0gdmFsdWVzWyAwXSAqIHIg
KyB2YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1
ZXNbIDRdICogMjU1OwotICAgIGdyZWVuID0gdmFsdWVzWyA1XSAqIHIgKyB2YWx1ZXNbIDZdICog
ZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2YWx1ZXNbIDldICogMjU1Owot
ICAgIGJsdWUgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFdICogZyArIHZhbHVlc1sxMl0g
KiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1OwotICAgIGFscGhhID0gdmFs
dWVzWzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4
XSAqIGEgKyB2YWx1ZXNbMTldICogMjU1OwotfQotCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlKSBjb25zdAotewotICAgIGZsb2F0IHIgPSByZWQ7Ci0gICAgZmxv
YXQgZyA9IGdyZWVuOwotICAgIGZsb2F0IGIgPSBibHVlOwotCi0gICAgcmVkICAgICA9IHIgKiBt
X2NvbXBvbmVudHNbMF0gKyBnICogbV9jb21wb25lbnRzWzFdICsgYiAqIG1fY29tcG9uZW50c1sy
XTsKLSAgICBncmVlbiAgID0gciAqIG1fY29tcG9uZW50c1szXSArIGcgKiBtX2NvbXBvbmVudHNb
NF0gKyBiICogbV9jb21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICogbV9jb21wb25lbnRz
WzZdICsgZyAqIG1fY29tcG9uZW50c1s3XSArIGIgKiBtX2NvbXBvbmVudHNbOF07Ci19Ci0KLS8v
IEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENv
bG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
OjpsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQm
IGFscGhhKSBjb25zdAotewotICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsgMC43MTU0ICogZ3Jl
ZW4gKyAwLjA3MjEgKiBibHVlOwotICAgIHJlZCA9IDA7Ci0gICAgZ3JlZW4gPSAwOwotICAgIGJs
dWUgPSAwOwotfQotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi12b2lkIEZFQ29sb3JNYXRyaXhTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxC
dWZmZXIpIGNvbnN0Ci17Ci0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEo
KTsKLSAgICBhdXRvIGJ1ZmZlclNpemUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7Ci0KLSAgICBBU1NF
UlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwotICAgIAot
ICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKLSAgICB1aW50OF90KiBkYXRhID0gcGl4
ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGgg
PSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGJ1ZmZlclNpemUuaGVpZ2h0
KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICBzcmMu
ZGF0YSA9IGRhdGE7Ci0gICAgCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBidWZmZXJTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBidWZmZXJTaXplLmhl
aWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAg
IGRlc3QuZGF0YSA9IGRhdGE7Ci0KLSAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUoKSkgewotICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIHZh
bHVlcyA9IG1fZWZmZWN0LnZhbHVlcygpOwotCi0gICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4
WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1
ZXNbIDBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91
bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNvcikpLAotCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAxXSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDZdICogZGl2aXNv
cikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxMV0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFs
dWVzWzE2XSAqIGRpdmlzb3IpKSwKLQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2aXNvcikpLAotICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sxN10gKiBkaXZpc29yKSksCi0K
LSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDNdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sg
OF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
dmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAotICAgICAgICB9OwotICAgICAgICB2SW1h
Z2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBu
dWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgotICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX0hVRVJPVEFURTogewotICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0
ICogNF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21w
b25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKG1fY29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICAwLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21w
b25lbnRzWzFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKG1fY29tcG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICAwLAotCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21w
b25lbnRzWzJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKG1fY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCi0gICAgICAg
ICAgICAwLAotCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICBkaXZpc29yLAotICAgICAgICB9OwotICAgICAgICB2SW1hZ2VNYXRyaXhN
dWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBu
dWxscHRyLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7Ci0gICAgICAgIGNvbnN0IGlu
dDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAot
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigw
LjIxMjUgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjcx
NTQgKiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZigwLjA3MjEg
KiBkaXZpc29yKSksCi0KLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgIH07Ci0gICAgICAgIHZJbWFnZU1hdHJpeE11
bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRpdmlzb3IsIG51bGxwdHIsIG51
bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLX0K
LSNlbmRpZgotCi12b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm1VbmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKLXsKLSAgICBh
dXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVs
QXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwotCi0gICAgc3dpdGNoIChtX2VmZmVj
dC50eXBlKCkpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhl
bEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQg
cmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9h
dCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAg
ICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0g
ICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQg
KyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7Ci0gICAgICAgICAg
ICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKLSAgICAgICAgICAg
IHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFscGhhKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0
IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7Ci0gICAgICAgICAg
ICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAg
ICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUpOwotICAgICAg
ICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwotICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwotICAgICAgICAgICAg
cGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7Ci0gICAgICAgICAgICBw
aXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBoYSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBOgotICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0
ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAg
ICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKLSAg
ICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCAr
IDEpOwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbHVtaW5hbmNlKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwg
cmVkKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdy
ZWVuKTsKLSAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJs
dWUpOwotICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMywgYWxw
aGEpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlcikgY29uc3QKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBjb25zdCBhdXRvJiB2YWx1
ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKLQotICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FS
R0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVt
biBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4Ci0gICAgLy8gaXMgbm90IHplcm8sIGZh
bGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCi0gICAgaWYgKG1fZWZmZWN0LnR5cGUoKSAhPSBG
RUNPTE9STUFUUklYX1RZUEVfTUFUUklYIHx8ICghdmFsdWVzWzRdICYmICF2YWx1ZXNbOV0gJiYg
IXZhbHVlc1sxNF0gJiYgIXZhbHVlc1sxOV0pKSB7Ci0gICAgICAgIGFwcGx5UGxhdGZvcm1BY2Nl
bGVyYXRlZChwaXhlbEJ1ZmZlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAg
ICBhcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7Ci19Ci0KLWJvb2wgRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgYXV0byBpbiA9IGlucHV0RWZm
ZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBp
ZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgs
IG1fZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KElu
dFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRv
IHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VS
ZWN0KTsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBKQotICAgICAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0KLSAgICBhcHBs
eVBsYXRmb3JtKCpwaXhlbEJ1ZmZlcik7Ci0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVy
KCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBG
RUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
CiB7CiAgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5
KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCBmNjlmMGIwMWM5
NTA3ZTA1MjZlMGQxNzdlYmJlZjk2OTAwOWNlMWQzLi41NjAxZWIwOTY4N2U4NTdhNjY3NWMxMjg1
MzZlYjA1MThkMjNkMmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMiw2ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8
YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5j
cHAKaW5kZXggZGFlMTg5ZWE5ZDc3Y2Y3NDZhYTM0MTZjYjgxNmZlZmYyMTRjZTNhYS4uODZmOWRl
MWYwNDdjZjQxYTNlOWRjNTJkZDU5MmY3ZmEzMjEwYmQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjQsMTIgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBv
bmVudFRyYW5zZmVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDE0MSArNDQsNiBAQCBGRUNvbXBvbmVudFRyYW5zZmVyOjpG
RUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1
bgogewogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNsYXNz
IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJhbnNmZXI+IHsKLSAgICB1c2luZyBCYXNlID0g
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJhbnNmZXI+OwotCi1wdWJs
aWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1w
cml2YXRlOgotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+
OwotCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0
ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21w
dXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0KLSAgICBzdGF0aWMgTG9va3VwVGFi
bGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsK
LQotICAgIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0OwotfTsKLQotdm9p
ZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlSWRlbnRpdHlUYWJs
ZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQotewotfQot
Ci12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVUYWJ1bGFy
VGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZh
bHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAgdW5zaWduZWQgbiA9IHRh
YmxlVmFsdWVzLnNpemUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGRv
dWJsZSBjID0gaSAvIDI1NS4wOwotICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGMgKiAobiAtIDEpKTsKLSAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107
Ci0gICAgICAgIGRvdWJsZSB2MiA9IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0g
MSkpXTsKLSAgICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHYxICsgKGMgKiAobiAtIDEpIC0g
aykgKiAodjIgLSB2MSkpOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1
NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFs
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6
Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKLXsKLSAgICBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7Ci0gICAg
dW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKLSAgICBpZiAobiA8IDEpCi0gICAgICAg
IHJldHVybjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAv
IDI1NS4wKTsKLSAgICAgICAgayA9IHN0ZDo6bWluKGssIG4gLSAxKTsKLSAgICAgICAgZG91Ymxl
IHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2tdOwotICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAs
IHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4odmFsKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3
YXJlQXBwbGllcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3Vi
bGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0
aW9uLmludGVyY2VwdDsKLSAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUu
MCwgdmFsKSk7Ci0gICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7
Ci0gICAgfQotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNv
bXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0
cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEg
ZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQotICAg
ICAgICBkb3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBw
b3coKGkgLyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKLSAg
ICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAg
IHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7Ci0gICAgfQotfQotCi1GRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpMb29rdXBUYWJsZSBGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTG9va3VwVGFibGUoY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pCi17Ci0gICAgTG9va3VwVGFibGUgdGFibGU7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuc2l6ZSgpOyArK2kpCi0gICAgICAg
IHRhYmxlW2ldID0gaTsKLQotICAgIHVzaW5nIFRyYW5zZmVyVHlwZSA9IHZvaWQgKCopKExvb2t1
cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIFRyYW5zZmVy
VHlwZSBjYWxsRWZmZWN0W10gPSB7Ci0gICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8v
IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOCi0gICAgICAgIGNvbXB1dGVJZGVudGl0
eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9JREVOVElUWQotICAgICAgICBj
b21wdXRlVGFidWxhclRhYmxlLCAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUK
LSAgICAgICAgY29tcHV0ZURpc2NyZXRlVGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0RJU0NSRVRFCi0gICAgICAgIGNvbXB1dGVMaW5lYXJUYWJsZSwgICAgIC8vIEZFQ09NUE9O
RU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIKLSAgICAgICAgY29tcHV0ZUdhbW1hVGFibGUgICAgICAg
Ly8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BCi0gICAgfTsKLQotICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihmdW5j
dGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIGNhbGxFZmZl
Y3RbZnVuY3Rpb24udHlwZV0odGFibGUsIGZ1bmN0aW9uKTsKLQotICAgIHJldHVybiB0YWJsZTsK
LX0KLQotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKLXsKLSAgICBhdXRvJiBwaXhlbEFy
cmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgg
PSBwaXhlbEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRh
dGEoKTsKLQotICAgIGF1dG8gcmVkVGFibGUgICA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVj
dC5yZWRGdW5jdGlvbigpKTsKLSAgICBhdXRvIGdyZWVuVGFibGUgPSBjb21wdXRlTG9va3VwVGFi
bGUobV9lZmZlY3QuZ3JlZW5GdW5jdGlvbigpKTsKLSAgICBhdXRvIGJsdWVUYWJsZSAgPSBjb21w
dXRlTG9va3VwVGFibGUobV9lZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOwotICAgIGF1dG8gYWxwaGFU
YWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJh
eUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSAg
ICAgPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZz
ZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKLSAgICAgICAgZGF0
YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07Ci0g
ICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNl
dCArIDNdXTsKLSAgICB9Ci19Ci0KLWJvb2wgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQo
KTsKLSAgICAKLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhl
bEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOwot
ICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYXV0byBkcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQaXhlbEJ1
ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZHJhd2luZ1JlY3QpOwotCi0gICAg
YXBwbHlQbGF0Zm9ybSgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlcik7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGJvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyU29m
dHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggNTE4ZWExMzQ3YTRhZGRiYTRjZDUwMGNiNDJjODEz
NzA2ZGNjZDE5NS4uYzdkMzQ5MzZmMDY2YmFjY2E1NTE4OTdmMGQzYzNmMTRlZWNmZDU0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggMTVhNzEyOTk4ODI5YWNk
OWI0ZDI5NDVhZmRlYmJlNmQ2ODdiN2RiYi4uZWYzN2U0Y2NkODdiOWRlNWQ2Yjk0MTJkMzhjZmNl
MzllMDY1NDQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxMSArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZFQ29tcG9zaXRlLmgiCiAKLSNpbmNsdWRlICJGRUNvbXBvc2l0ZUFyaXRobWV0
aWNORU9OLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiUGl4
ZWxCdWZmZXIuaCIKKyNpbmNsdWRlICJGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MTEwLDIyMSArMTA3LDYgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgfQogfQogCi0vLyBGSVhNRTogTW92ZSB0
aGUgY2xhc3MgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFu
ZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllciA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb21wb3NpdGU+IHsKLSAgICB1c2luZyBC
YXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9zaXRlPjsKLQotcHVibGlj
OgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBzdGF0aWMgdWludDhfdCBjbGFtcEJ5dGUoaW50KTsKLQotICAgIHRlbXBsYXRl
IDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0
aWNQaXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlv
biwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZs
b2F0IGs0KTsKLQotICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLSAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQodW5zaWduZWQgY2hhciog
c291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgs
IGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKLQotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBseVBsYXRmb3JtQXJpdGhtZXRpYyh1bnNpZ25lZCBjaGFyKiBzb3VyY2Us
IHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQg
azEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwotCi0gICAgYm9vbCBhcHBseUFyaXRo
bWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpOwotICAgIGJvb2wgYXBw
bHlOb25Bcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKTsKLX07
Ci0KLXVpbnQ4X3QgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNsYW1wQnl0ZShpbnQgYykK
LXsKLSAgICB1aW50OF90IGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oYyksIDI1NSwg
MCB9OwotICAgIHVuc2lnbmVkIHVjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOwotICAgIHJl
dHVybiBidWZmWyEhKHVjICYgfjB4ZmYpICsgISEodWMgJiB+KH4wdSA+PiAxKSldOwotfQotCi10
ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+Ci1pbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJl
QXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1
bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsx
LCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwot
ICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChiMSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAv
IDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAgIHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0K
LSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3RoID49IDApIHsKLSAgICAgICAgdW5zaWduZWQg
Y2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRp
b247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsyICogaTEgKyBrMyAqIGkyOwotICAgICAgICBp
ZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAg
ICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQgKz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRl
c3RpbmF0aW9uID0gY2xhbXBCeXRlKHJlc3VsdCk7Ci0gICAgICAgICsrc291cmNlOwotICAgICAg
ICArK2Rlc3RpbmF0aW9uOwotICAgIH0KLX0KLQotLy8gY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNV
bmNsYW1wZWQgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyBm
b3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGNsYW1waW5nCi0vLyBpcyBub3QgbmVjZXNzYXJ5LiBU
aGlzIGVuYWJsZXMgYWdncmVzaXZlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgc3VjaCBhcyBhdXRv
LXZlY3Rvcml6YXRpb24uCi10ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+Ci1pbmxpbmUgdm9pZCBG
RUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KQotewotICAgIGZsb2F0IHNjYWxlZEsxOwotICAgIGZsb2F0IHNjYWxlZEs0OwotICAgIGlmIChi
MSkKLSAgICAgICAgc2NhbGVkSzEgPSBrMSAvIDI1NS4wZjsKLSAgICBpZiAoYjQpCi0gICAgICAg
IHNjYWxlZEs0ID0gazQgKiAyNTUuMGY7Ci0KLSAgICB3aGlsZSAoLS1waXhlbEFycmF5TGVuZ3Ro
ID49IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBpMSA9ICpzb3VyY2U7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgaTIgPSAqZGVzdGluYXRpb247Ci0gICAgICAgIGZsb2F0IHJlc3VsdCA9IGsy
ICogaTEgKyBrMyAqIGkyOwotICAgICAgICBpZiAoYjEpCi0gICAgICAgICAgICByZXN1bHQgKz0g
c2NhbGVkSzEgKiBpMSAqIGkyOwotICAgICAgICBpZiAoYjQpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gc2NhbGVkSzQ7Ci0KLSAgICAgICAgKmRlc3RpbmF0aW9uID0gcmVzdWx0OwotICAgICAgICAr
K3NvdXJjZTsKLSAgICAgICAgKytkZXN0aW5hdGlvbjsKLSAgICB9Ci19Ci0KLSNpZiAhSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQotaW5saW5lIHZvaWQgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWdu
ZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLXsKLSAgICBmbG9hdCB1cHBlckxpbWl0ID0gc3Rk
OjptYXgoMC4wZiwgazEpICsgc3RkOjptYXgoMC4wZiwgazIpICsgc3RkOjptYXgoMC4wZiwgazMp
ICsgazQ7Ci0gICAgZmxvYXQgbG93ZXJMaW1pdCA9IHN0ZDo6bWluKDAuMGYsIGsxKSArIHN0ZDo6
bWluKDAuMGYsIGsyKSArIHN0ZDo6bWluKDAuMGYsIGszKSArIGs0OwotICAgIGlmICgoazQgPj0g
MC4wZiAmJiBrNCA8PSAxLjBmKSAmJiAodXBwZXJMaW1pdCA+PSAwLjBmICYmIHVwcGVyTGltaXQg
PD0gMS4wZikgJiYgKGxvd2VyTGltaXQgPj0gMC4wZiAmJiBsb3dlckxpbWl0IDw9IDEuMGYpKSB7
Ci0gICAgICAgIGlmIChrNCkgewotICAgICAgICAgICAgaWYgKGsxKQotICAgICAgICAgICAgICAg
IGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDEsIDE+KHNvdXJjZSwgZGVzdGluYXRp
b24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAxPihz
b3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoazEpCi0gICAgICAgICAgICAgICAgY29t
cHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MSwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwg
cGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkPDAsIDA+KHNvdXJj
ZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGs0KSB7Ci0gICAgICAgIGlm
IChrMSkKLSAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDEsIDE+KHNvdXJjZSwg
ZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8MCwgMT4oc291cmNlLCBk
ZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChrMSkKLSAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxz
PDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHM8
MCwgMD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywg
azQpOwotICAgIH0KLX0KLSNlbmRpZgotCi1ib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
OjphcHBseUFyaXRobWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpCi17
Ci0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJS
ZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7Ci0gICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRS
ZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3VyY2VQaXhl
bEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1
ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
LSAgICBpbjItPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwg
ZWZmZWN0QkRyYXdpbmdSZWN0KTsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3Vy
Y2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIGludCBsZW5ndGggPSBzb3Vy
Y2VQaXhlbEFycmF5Lmxlbmd0aCgpOwotICAgIEFTU0VSVChsZW5ndGggPT0gc3RhdGljX2Nhc3Q8
aW50PihkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCkpKTsKLSAgICBhcHBseVBsYXRmb3Jt
QXJpdGhtZXRpYyhzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5
LmRhdGEoKSwgbGVuZ3RoLCBtX2VmZmVjdC5rMSgpLCBtX2VmZmVjdC5rMigpLCBtX2VmZmVjdC5r
MygpLCBtX2VmZmVjdC5rNCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbXBv
c2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4s
IEZpbHRlckVmZmVjdCogaW4yKQotewotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBhdXRvIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwot
Ci0gICAgc3dpdGNoIChtX2VmZmVjdC5vcGVyYXRpb24oKSkgewotICAgIGNhc2UgRkVDT01QT1NJ
VEVfT1BFUkFUT1JfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOiB7Ci0gICAgICAgIC8vIEFwcGxpZXMgb25seSB0byB0
aGUgaW50ZXJzZWN0ZWQgcmVnaW9uLgotICAgICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9
IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJz
ZWN0KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5p
bnRlcnNlY3QobV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGlmIChkZXN0
aW5hdGlvblJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEludFJl
Y3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBtX2VmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIEludFJlY3Qgc291cmNlUmVj
dCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7
Ci0gICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJ
biB9KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VC
dWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9z
aXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1
ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUNvbXBvc2l0
ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0c1swXS5nZXQoKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5n
ZXQoKTsKLQotICAgIGlmIChtX2VmZmVjdC5vcGVyYXRpb24oKSA9PSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9BUklUSE1FVElDKQotICAgICAgICByZXR1cm4gYXBwbHlBcml0aG1ldGljKGluLCBpbjIp
OwotICAgIHJldHVybiBhcHBseU5vbkFyaXRobWV0aWMoaW4sIGluMik7Ci19Ci0KIGJvb2wgRkVD
b21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsK
ICAgICByZXR1cm4gRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRl
ciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IGE4NzZhOTVkM2Y3MTkyZDA2MmZm
ODRhM2EwNmUwZTZmMzM3NDY4YjguLmY1ZTQ5NzQwMjY5YzBkNmVmOTlkMDg3MjA0MTFkMzRlZThk
Njc0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDI0NzU5ZjhmMjEx
OWVkMzc4NmIxZDk1MWNmOGRlMDI4NDM1NGE5OWYuLmY3OGYwNTc2YWYxODBjNWQ4MWYyOWMyNGFl
ZGNlMTE2ZmVjOTFjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtNCw2ICs0LDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDEyICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgogCi0jaW5jbHVkZSAiRkVDb2xvck1hdHJp
eC5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKLSNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVs
Sm9icy5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlICJGRUNvbnZvbHZl
TWF0cml4U29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTcsMzMxICsxMTMsNiBAQCBib29sIEZFQ29u
dm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhhKQogICAgIHJl
dHVybiB0cnVlOwogfQogCi0vLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KLWNs
YXNzIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
Q29uY3JldGVBcHBsaWVyPEZFQ29udm9sdmVNYXRyaXg+IHsKLSAgICB1c2luZyBCYXNlID0gRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29udm9sdmVNYXRyaXg+OwotCi1wdWJsaWM6Ci0g
ICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2YXRl
OgotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVs
QXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLQotICAgICAg
ICBJbnRTaXplIGtlcm5lbFNpemU7Ci0gICAgICAgIGZsb2F0IGRpdmlzb3I7Ci0gICAgICAgIGZs
b2F0IGJpYXM7Ci0gICAgICAgIEludFBvaW50IHRhcmdldE9mZnNldDsKLSAgICAgICAgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlOwotICAgICAgICBib29sIHByZXNlcnZlQWxwaGE7Ci0gICAgICAgIFZl
Y3RvcjxmbG9hdD4ga2VybmVsTWF0cml4OwotICAgIH07Ci0KLSAgICBzdGF0aWMgaW5saW5lIHVp
bnQ4X3QgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXggPSAyNTUpOwot
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywg
aW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9v
bCBwcmVzZXJ2ZUFscGhhVmFsdWVzKTsKLQotICAgIHN0YXRpYyBpbmxpbmUgaW50IGdldFBpeGVs
VmFsdWUoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKLQotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0
LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpOwotICAgIHN0YXRpYyBpbmxp
bmUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50
IHgyLCBpbnQgeTIpOwotCi0gICAgdm9pZCBhcHBseVBsYXRmb3JtKFBhaW50aW5nRGF0YSYpIGNv
bnN0OwotfTsKLQotLyoKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g
ICAgICBDb252b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotICAgVGhlIGltYWdlIHJlY3RhbmdsZSBpcyBzcGxpdCBpbiB0
aGUgZm9sbG93aW5nIHdheToKLQotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAg
IHwgICAgICAgICAgQSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwot
ICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKLSAgICAgIHwgQiB8ICAgICAgQyAgICAgIHwg
RCB8Ci0gICAgICB8ICAgfCAgICAgICAgICAgICB8ICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLSsKLSAgICAgIHwgICAgICAgICAgRSAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKwotCi0gICBXaGVyZSByZWdpb24gQyBjb250YWlucyB0aG9zZSBwaXhlbHMs
IHdob3NlIHZhbHVlcwotICAgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBjcm9zc2luZyB0aGUg
ZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLgotCi0gICBFeGFtcGxlOgotICAgICAgSW1hZ2Ugc2l6ZTog
d2lkdGg6IDEwLCBoZWlnaHQ6IDEwCi0KLSAgICAgIE9yZGVyIChrZXJuZWwgbWF0cml4IHNpemUp
OiB3aWR0aDogMywgaGVpZ2h0IDQKLSAgICAgIFRhcmdldDogeDoxLCB5OjMKLQotICAgICAgVGhl
IGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBpbnNpZGUgdGhlIGtlcm5lbCBtYXRy
aXg6Ci0KLSAgICAgICAgLi4uCi0gICAgICAgIC4uLgotICAgICAgICAuLi4KLSAgICAgICAgLlgu
Ci0KLSAgIFRoZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUgdGhlIGZvbGxvd2luZzoKLSAgICAg
IE5vdGU6ICh4MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHkyKSBpcyB0aGUgYm90dG9tLXJpZ2h0
IGNvcm5lcgotICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1bW4geTIgaXMgbm90IHBhcnQgb2Yg
dGhlIHJlZ2lvbgotICAgICAgICAgICAgb25seSB0aG9zZSAoeCwgeSkgcGl4ZWxzLCB3aGVyZSB4
MSA8PSB4IDwgeDIgYW5kIHkxIDw9IHkgPCB5MgotCi0gICAgICBSZWdpb24gQTogeDE6IDAsIHkx
OiAwLCB4MjogMTAsIHkyOiAzCi0gICAgICBSZWdpb24gQjogeDE6IDAsIHkxOiAzLCB4MjogMSwg
eTI6IDEwCi0gICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAzLCB4MjogOSwgeTI6IDEwCi0gICAg
ICBSZWdpb24gRDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHkyOiAxMAotICAgICAgUmVnaW9uIEU6
IHgxOiAwLCB5MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0eSByZWdpb24pCi0KLSAgIFNpbmNl
IHJlZ2lvbiBDIChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0aGUgcGl4ZWxzLCB3ZSBpbXBsZW1l
bnRlZAotICAgYSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMsIGNhbGxl
ZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMuCi0gICBGb3Igb3RoZXIgcmVnaW9ucywgZmFzdFNldE91
dGVyUGl4ZWxzIGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBpeGVsVmFsdWUsCi0gICB0byBoYW5k
bGUgcGl4ZWxzIG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBhIHJhcmUgc2l0dWF0aW9ucywgd2hl
bgotICAga2VybmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0aGUgaW1hZ2UsIGFsbCBwaXhlbHMg
YXJlIGNhbGN1bGF0ZWQgYnkgdGhpcwotICAgZnVuY3Rpb24uCi0KLSAgIEFsdGhvdWdoIHRoZXNl
IHR3byBmdW5jdGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJIGRlY2lkZWQgbm90IHRvIG1ha2UK
LSAgIGNvbW1vbiBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5jZSB0aGVyZSBhcmUga2V5IGRpZmZl
cmVuY2VzIGFzIHdlbGwsCi0gICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRl
cnN0YW5kLgotKi8KLQotaW5saW5lIHVpbnQ4X3QgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBw
bGllcjo6Y2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdWludDhfdCBtYXgpCi17Ci0gICAg
aWYgKGNoYW5uZWwgPD0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGNoYW5uZWwgPj0g
bWF4KQotICAgICAgICByZXR1cm4gbWF4OwotICAgIHJldHVybiBjaGFubmVsOwotfQotCi1pbmxp
bmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBp
eGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNv
ciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzKQotewotICAgIHVpbnQ4X3Qg
bWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMjU1IDogY2xhbXBSR0JBVmFsdWUodG90
YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytp
KQotICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNb
aV0gLyBkaXZpc29yICsgYmlhcywgbWF4QWxwaGEpKTsKLQotICAgIGlmIChwcmVzZXJ2ZUFscGhh
VmFsdWVzKSB7Ci0gICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsLCBzb3VyY2VQaXhlbHMuaXRl
bShwaXhlbCkpOwotICAgICAgICArK3BpeGVsOwotICAgIH0gZWxzZQotICAgICAgICBkZXN0UGl4
ZWxzLnNldChwaXhlbCsrLCBtYXhBbHBoYSk7Ci19Ci0KLWlubGluZSBpbnQgRkVDb252b2x2ZU1h
dHJpeFNvZnR3YXJlQXBwbGllcjo6Z2V0UGl4ZWxWYWx1ZShjb25zdCBQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgaW50IHgsIGludCB5KQotewotICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50
aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAg
ICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0
Y2ggKHBhaW50aW5nRGF0YS5lZGdlTW9kZSkgewotICAgIGRlZmF1bHQ6IC8vIEVER0VNT0RFX05P
TkUKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgotICAg
ICAgICBpZiAoeCA8IDApCi0gICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeCA+
PSBwYWludGluZ0RhdGEud2lkdGgpCi0gICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRo
IC0gMTsKLSAgICAgICAgaWYgKHkgPCAwKQotICAgICAgICAgICAgeSA9IDA7Ci0gICAgICAgIGVs
c2UgaWYgKHkgPj0gcGFpbnRpbmdEYXRhLmhlaWdodCkKLSAgICAgICAgICAgIHkgPSBwYWludGlu
Z0RhdGEuaGVpZ2h0IC0gMTsKLSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRo
ICsgeCkgPDwgMjsKLSAgICBjYXNlIEVER0VNT0RFX1dSQVA6Ci0gICAgICAgIHdoaWxlICh4IDwg
MCkKLSAgICAgICAgICAgIHggKz0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB4ICU9IHBh
aW50aW5nRGF0YS53aWR0aDsKLSAgICAgICAgd2hpbGUgKHkgPCAwKQotICAgICAgICAgICAgeSAr
PSBwYWludGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7
Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAg
fQotfQotCi0vLyBPbmx5IGZvciByZWdpb24gQwotaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllcjo6c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVu
ZCkKLXsKLSAgICAvLyBlZGdlIG1vZGUgZG9lcyBub3QgYWZmZWN0IHRoZXNlIHBpeGVscwotICAg
IGludCBwaXhlbCA9IChwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0
YS53aWR0aCArIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpKSAqIDQ7Ci0gICAgaW50IGtl
cm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50
aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCkgLSAxKSAqIDQ7Ci0gICAgLy8gQ29udGFpbnMgdGhl
IHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1s0XTsKLQotICAgIC8v
IGRpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMg
dGhpcwotICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7Ci0KLSAgICAvLyBTa2lwIHRo
ZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKLSAgICBwaXhlbCArPSAoY2xpcEJv
dHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwotICAgIGlu
dCBzdGFydEtlcm5lbFBpeGVsID0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAo
Y2xpcFJpZ2h0ICsgMSkgKiA0KTsKLQotICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlT
dGFydDsgLS15KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsg
LS14KSB7Ci0gICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVs
TWF0cml4LnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtl
cm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNp
emUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRv
dGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgdG90
YWxzWzNdID0gMDsKLQotICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAg
ICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJu
ZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXku
aXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50
aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBh
aW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwotICAgICAgICAg
ICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVl
XSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtl
cm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2
ZUFscGhhKQotICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtl
cm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRh
LnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCkpOwotICAgICAgICAgICAgICAgICsra2Vy
bmVsUGl4ZWw7Ci0gICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKLSAgICAgICAgICAgICAg
ICBpZiAoIS0td2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2Vy
bmVsSW5jcmVhc2U7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtl
cm5lbFNpemUud2lkdGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRh
LmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7
Ci0gICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAg
cGl4ZWwgKz0geEluY3JlYXNlOwotICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJbmNyZWFz
ZTsKLSAgICB9Ci19Ci0KLS8vIEZvciBvdGhlciByZWdpb25zIHRoYW4gQwotaW5saW5lIHZvaWQg
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAg
ICBpbnQgcGl4ZWwgPSAoeTEgKiBwYWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OwotICAgIGlu
dCBoZWlnaHQgPSB5MiAtIHkxOwotICAgIGludCB3aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJl
Z2luS2VybmVsUGl4ZWxYID0geDEgLSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKLSAg
ICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3Rh
cnRLZXJuZWxQaXhlbFkgPSB5MSAtIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpOwotICAg
IGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLndpZHRoIC0gd2lkdGgpICogNDsKLSAgICAv
LyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCi0gICAgZmxvYXQgdG90YWxz
WzRdOwotCi0gICAgLy8gcGFpbnRpbmdEYXRhLmRpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChwYWludGluZ0RhdGEu
ZGl2aXNvcik7Ci0KLSAgICBmb3IgKGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7Ci0gICAg
ICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkgewotICAgICAgICAgICAgaW50IGtl
cm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwotICAgICAg
ICAgICAgaW50IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwotICAgICAgICAgICAg
aW50IGtlcm5lbFBpeGVsWSA9IHN0YXJ0S2VybmVsUGl4ZWxZOwotICAgICAgICAgICAgaW50IHdp
ZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKLQotICAgICAgICAgICAgdG90
YWxzWzBdID0gMDsKLSAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7Ci0gICAgICAgICAgICB0b3Rh
bHNbMl0gPSAwOwotICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKLQotICAgICAgICAgICAgd2hp
bGUgKGtlcm5lbFZhbHVlID49IDApIHsKLSAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRleCA9
IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVsWSk7
Ci0gICAgICAgICAgICAgICAgaWYgKHBpeGVsSW5kZXggPj0gMCkgewotICAgICAgICAgICAgICAg
ICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhl
bEluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEu
a2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0Rh
dGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAxKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAq
IHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVs
SW5kZXggKyAyKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghcGFp
bnRpbmdEYXRhLnByZXNlcnZlQWxwaGEgJiYgcGl4ZWxJbmRleCA+PSAwKQotICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShw
aXhlbEluZGV4ICsgMykpOwotICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwotICAgICAg
ICAgICAgICAgIC0ta2VybmVsVmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwot
ICAgICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAg
d2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFp
bnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhl
bCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50
aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKLSAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7
Ci0gICAgICAgIH0KLSAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwotICAgICAgICBzdGFydEtl
cm5lbFBpeGVsWCA9IGJlZ2luS2VybmVsUGl4ZWxYOwotICAgICAgICArK3N0YXJ0S2VybmVsUGl4
ZWxZOwotICAgIH0KLX0KLQotdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAotewotICAgIC8v
IERyYXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRp
bmdEYXRhLndpZHRoIC0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQg
Y2xpcEJvdHRvbSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSBwYWludGluZ0RhdGEua2VybmVsU2l6
ZS5oZWlnaHQoKTsKLQotICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7
Ci0gICAgICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAotICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50aW5nRGF0YS53aWR0
aCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAv
LyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAgaWYgKGludCBp
dGVyYXRpb25zID0gKHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQpIC8g
bWluaW1hbFJlY3REaW1lbnNpb24pIHsKLSAgICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20g
LyBpdGVyYXRpb25zOwotICAgICAgICBpbnQgY2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3Ry
aWRlIC0gMSkgLyBzdHJpZGU7Ci0KLSAgICAgICAgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHko
Y2h1bmtDb3VudCwgWyZdKHNpemVfdCBpbmRleCkgewotICAgICAgICAgICAgaW50IHlTdGFydCA9
IChzdHJpZGUgKiBpbmRleCk7Ci0gICAgICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4o
c3RyaWRlICogKGluZGV4ICsgMSksIGNsaXBCb3R0b20pOwotCi0gICAgICAgICAgICBzZXRJbnRl
cmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5
RW5kKTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNldEludGVyaW9yUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCAwLCBjbGlwQm90dG9tKTsKLQot
ICAgIGNsaXBSaWdodCArPSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAg
Y2xpcEJvdHRvbSArPSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSArIDE7Ci0KLSAgICBp
ZiAocGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBp
eGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRh
LnRhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRpbmdEYXRhLmhl
aWdodCkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9t
LCBwYWludGluZ0RhdGEud2lkdGgsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwotICAgIGlmIChwYWlu
dGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSA+IDApCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBh
aW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0
YS50YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwgcGFp
bnRpbmdEYXRhLndpZHRoKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNs
aXBSaWdodCwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS53aWR0
aCwgY2xpcEJvdHRvbSk7Ci19Ci0KLWJvb2wgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGll
cjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsK
LQotICAgIGF1dG8gYWxwaGFGb3JtYXQgPSBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCkgPyBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgOiBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkOwotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1f
ZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KGFscGhhRm9ybWF0KTsKLSAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZWZmZWN0
RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBp
bi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoYWxwaGFGb3JtYXQsIGVmZmVjdERyYXdpbmdSZWN0LCBt
X2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxCdWZm
ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkg
PSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICAKLSAgICBhdXRvIHBh
aW50U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotCi0gICAgUGFp
bnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSwKLSAg
ICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5LAotICAgICAgICBwYWludFNpemUud2lkdGgoKSwK
LSAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAotICAgICAgICBtX2VmZmVjdC5rZXJuZWxTaXpl
KCksCi0gICAgICAgIG1fZWZmZWN0LmRpdmlzb3IoKSwKLSAgICAgICAgbV9lZmZlY3QuYmlhcygp
ICogMjU1LAotICAgICAgICBtX2VmZmVjdC50YXJnZXRPZmZzZXQoKSwKLSAgICAgICAgbV9lZmZl
Y3QuZWRnZU1vZGUoKSwKLSAgICAgICAgbV9lZmZlY3QucHJlc2VydmVBbHBoYSgpLAotICAgICAg
ICBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKG1fZWZmZWN0Lmtlcm5lbCgpKQotICAg
IH07Ci0KLSAgICBhcHBseVBsYXRmb3JtKHBhaW50aW5nRGF0YSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKQEAgLTQ1MCwxNiAr
MTIxLDE2IEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIEVER0VNT0RFX1VOS05PV046CisgICAgY2FzZSBFZGdlTW9kZVR5cGU6OlVu
a25vd246CiAgICAgICAgIHRzIDw8ICJVTktOT1dOIjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFREdFTU9ERV9EVVBMSUNBVEU6CisgICAgY2FzZSBFZGdlTW9kZVR5cGU6OkR1cGxpY2F0ZToK
ICAgICAgICAgdHMgPDwgIkRVUExJQ0FURSI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRURH
RU1PREVfV1JBUDoKKyAgICBjYXNlIEVkZ2VNb2RlVHlwZTo6V3JhcDoKICAgICAgICAgdHMgPDwg
IldSQVAiOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEVER0VNT0RFX05PTkU6CisgICAgY2Fz
ZSBFZGdlTW9kZVR5cGU6Ok5vbmU6CiAgICAgICAgIHRzIDw8ICJOT05FIjsKICAgICAgICAgYnJl
YWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAppbmRleCA2YjdhZGU2ZjBiMjI4OWYzNDNl
NTY4MTRmZDhjMmRlNTQ0NzNmZjk5Li4wMmQ3YzJiZWM4YmRhMjEyNDYwOGQzNTA0N2VlOWYzYmFk
YzRjYjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjgsMTEgKzI5LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBF
ZGdlTW9kZVR5cGUgewotICAgIEVER0VNT0RFX1VOS05PV04gICA9IDAsCi0gICAgRURHRU1PREVf
RFVQTElDQVRFID0gMSwKLSAgICBFREdFTU9ERV9XUkFQICAgICAgPSAyLAotICAgIEVER0VNT0RF
X05PTkUgICAgICA9IDMKK2VudW0gY2xhc3MgRWRnZU1vZGVUeXBlIHsKKyAgICBVbmtub3duLAor
ICAgIER1cGxpY2F0ZSwKKyAgICBXcmFwLAorICAgIE5vbmUKIH07CiAKIGNsYXNzIEZFQ29udm9s
dmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5j
cHAKaW5kZXggNzYwZjgzNWIxYjUxMjNkZDQyYzI2ZjE3ZjdjZGMxZDMzM2IyNGNkNi4uMDdiMDhj
Y2E0YTM4N2VlZjM3M2M4ZDA0NzA5ODdjNTFiYzBkNTRkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaWZmdXNlTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAppbmRleCA4YTEwYWVjODdjOGYxODlmOWYwNTdjYjk0
NDNlYWFlZGQ1MzhmNjkxLi4zMDI0ZDY1MjFiMzlkNDJjYTRhMjBlNzU3N2Q5NDE0MWZlZjIwMWE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlmZnVzZUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IGRm
Yzc2MGUyMGY0OTk0NjA1Zjk0NDkxMmVmZGUzYWMwODE1MDRiYWQuLmY0ZDVmNDkxYTE1OGVkN2Jl
MjhiOTIyMTQyMTY1MGJmMzhlOGNlYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBA
IC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTAgKzI1LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgog
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisj
aW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg1LDkzICs4
Myw2IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uo
RmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50IGluCiAgICAgICAgIGluLT50cmFuc2Zvcm1SZXN1
bHRDb2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiB9CiAKLS8vIEZJWE1FOiBNb3Zl
IHRoZSBjbGFzcyBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2Ug
YW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVy
IDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRURpc3BsYWNlbWVudE1hcD4g
ewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEaXNwbGFj
ZW1lbnRNYXA+OwotCi1wdWJsaWM6Ci0gICAgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxp
ZXIoRkVEaXNwbGFjZW1lbnRNYXAmKTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwg
Y29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2
YXRlOgotICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWdu
ZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCi0gICAgewotICAgICAgICBjb25z
dCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKLSAgICAgICAgcmV0dXJuIHggKiBieXRlc1Bl
clBpeGVsICsgeSAqIHJvd0J5dGVzOwotICAgIH0KLQotICAgIGludCB4Q2hhbm5lbEluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9lZmZlY3QueENoYW5uZWxTZWxlY3RvcigpIC0gMTsgfQotICAgIGlu
dCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3QueUNoYW5uZWxTZWxlY3Rv
cigpIC0gMTsgfQotfTsKLQotRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OkZFRGlz
cGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyKEZFRGlzcGxhY2VtZW50TWFwJiBlZmZlY3QpCi0g
ICAgOiBCYXNlKGVmZmVjdCkKLXsKLSAgICBBU1NFUlQobV9lZmZlY3QueENoYW5uZWxTZWxlY3Rv
cigpICE9IENIQU5ORUxfVU5LTk9XTik7Ci0gICAgQVNTRVJUKG1fZWZmZWN0LnlDaGFubmVsU2Vs
ZWN0b3IoKSAhPSBDSEFOTkVMX1VOS05PV04pOwotfQotCi1ib29sIEZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0c1swXS5nZXQoKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0
c1sxXS5nZXQoKTsKLQotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0
LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
OwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOwotCi0gICAgYXV0byBlZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5y
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGF1dG8gaW5wdXRQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1JlY3Qp
OwotCi0gICAgYXV0byBlZmZlY3RCRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAvLyBU
aGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJl
IHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0
byBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlciA9IGluMi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBlZmZlY3RCRHJhd2luZ1JlY3Qp
OwotICAgIAotICAgIGlmICghaW5wdXRQaXhlbEJ1ZmZlciB8fCAhZGlzcGxhY2VtZW50UGl4ZWxC
dWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIGlucHV0SW1hZ2UgPSBp
bnB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgYXV0byYgZGlzcGxhY2VtZW50SW1hZ2UgPSBk
aXNwbGFjZW1lbnRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIEFTU0VSVChpbnB1dEltYWdlLmxl
bmd0aCgpID09IGRpc3BsYWNlbWVudEltYWdlLmxlbmd0aCgpKTsKLQotICAgIEludFNpemUgcGFp
bnRTaXplID0gbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0KLSAgICBGbG9h
dFNpemUgc2NhbGUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnNjYWxl
KCksIG1fZWZmZWN0LnNjYWxlKCkgfSk7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2Fs
ZS53aWR0aCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWln
aHQoKSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0
aCgpICogMC41OwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQo
KSAqIDAuNTsKLSAgICAKLSAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbElu
ZGV4KCk7Ci0gICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgpOwot
Ci0gICAgaW50IHJvd0J5dGVzID0gcGFpbnRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBwYWludFNpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBpbnQgbGlu
ZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5dGVzOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgcGFpbnRTaXplLndpZHRoKCk7ICsreCkgewotICAgICAgICAgICAgaW50IGRlc3RpbmF0aW9u
SW5kZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGRpc3Bs
YWNlbWVudEltYWdlLml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxY
KSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nh
c3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLml0ZW0oZGVzdGluYXRp
b25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwotCi0gICAg
ICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRpb25JbmRl
eCk7Ci0gICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUud2lkdGgo
KSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBhaW50U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAg
ICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gMDsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAq
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0SW1hZ2UuZGF0YSgpICsgYnl0ZU9mZnNl
dE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCiBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAgICAgcmV0dXJuIEZFRGlzcGxhY2Vt
ZW50TWFwU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCA3YTYzNzhiMDRjYjRhZDg4MjExYTBhNGFj
YTg4YWZkODgzMjdjZWMwLi45NjU0NjI3OGMyZDZhYWZkNDY5MGUzNGNhYzJkZGE4OTc2MGFhODlj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggYWFiMjQ4ZDE0ODAy
ZmI2NzU3YWUzYTU5YTQzZTQ2MjkzYWZjMTg1Ny4uZTk2NmRkYmI3MjVkMzYyYjA5MGZjNDJkNjdm
OGQzYTZkOGZjYzFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsMTQgKzIyLDkgQEAKICNpbmNs
dWRlICJGRURyb3BTaGFkb3cuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgor
I2luY2x1ZGUgIkZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5oIgogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0
QXBwbGllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlICJTaGFkb3dCbHVy
LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcwLDYxICs2Niw2IEBAIHZvaWQg
RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZp
bHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRl
UGFpbnRSZWN0KSk7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRURyb3BTaGFkb3dT
b2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1jbGFz
cyBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyPEZFRHJvcFNoYWRvdz4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RD
b25jcmV0ZUFwcGxpZXI8RkVEcm9wU2hhZG93PjsKLQotcHVibGljOgotICAgIHVzaW5nIEJhc2U6
OkJhc2U7Ci0KLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKLX07Ci0KLWJvb2wgRkVEcm9wU2hhZG93
U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRC
eUZpbHRlclNjYWxlKHsgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZp
YXRpb25ZKCkgfSk7Ci0gICAgRmxvYXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRl
clNjYWxlKHsgbV9lZmZlY3QuZHgoKSwgbV9lZmZlY3QuZHkoKSB9KTsKLQotICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVnaW9uID0gbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zm
c2V0KGRyYXdpbmdSZWdpb24pOwotICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zm
c2V0KTsKLQotICAgIGF1dG8gc291cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHcmFw
aGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAg
IHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9lZmZlY3Quc2hhZG93T3BhY2l0eSgpKTsKLSAgICBy
ZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb25X
aXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwotCi0gICAgU2hhZG93
Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9lZmZlY3Quc2hhZG93Q29s
b3IoKSk7Ci0KLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fZWZmZWN0LnJlc3Vs
dENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1
bHRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9
IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlm
ICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIHNvdXJj
ZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1
ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCks
IDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOwotICAgIAotICAgIHJlc3VsdEltYWdl
LT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOwotCi0gICAgcmVzdWx0
Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUlu
KTsKLSAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1f
ZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9lZmZlY3Quc2hhZG93Q29sb3Io
KSk7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3Bl
cmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7Ci0KLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRy
YXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24pOwotICAgIHJldHVybiB0
cnVlOwotfQotCiBib29sIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxp
ZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5k
ZXggNDk2ZWMzMmVlMTljMmQxYTcyOGZjZDYxZDE3NmYxZWZjODkyMDI0My4uODY5ZDcwM2FmYjFk
MWQzZTIyY2Q0ZWY3ZmY2YTE2MDU4M2JkZjA3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCA5
ODk4YzczNzZmNjVmMmUxMTc1YzFhNzgxYzY0ZWVmODMyNDZhZWIwLi5lYWE3OGMzNzUxYmMwNDIz
NDhjNjVlMDRiMjBmNmE0ZmNhYmJlZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTMsNiArMyw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI0LDkgKzI1LDcgQEAKICNpbmNsdWRlICJGRUZsb29kLmgiCiAKICNpbmNsdWRlICJD
b2xvclNlcmlhbGl6YXRpb24uaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNp
bmNsdWRlICJGRUZsb29kU29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01OSwyOCArNTgsNiBAQCBib29s
IEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRURyb3BTaGFkb3dTb2Z0d2Fy
ZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1jbGFzcyBGRUZs
b29kU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RUZsb29kPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RUZsb29kPjsKLQotcHVibGljOgotICAgIHVzaW5nIEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KSBvdmVycmlkZTsKLX07Ci0KLWJvb2wgRkVGbG9vZFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikKLXsKLSAgICBhdXRvIHJlc3Vs
dEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdElt
YWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGNvbG9yID0gbV9lZmZlY3Qu
Zmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KG1fZWZmZWN0LmZsb29kT3Bh
Y2l0eSgpKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3Ip
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBGRUZsb29kU29mdHdh
cmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXgg
OWMxM2U1ZDRlYmE4YzhjOWJjOTg0ZGM2Mzk0NzBiYzQ4Yzk0MzVlMy4uYjk3YjQzZTM3NjFhYjAx
NTNlYWE2MTljYWFmYzU0NDdmYjZlZjk3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggZGIz
NTkwOGY0ZjRmODlhNDU4ZDc5YmMzMDFmMTI4YWM1NTkyOTEwNC4uM2JjYzU5ZjkwMGQ3NTdjZDA5
MTdhZTdhYzMzNDA0MWM5YWFiYjRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTUsNyAr
NSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCiAgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMjEgKzI2LDEwIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKIAotI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyTkVPTi5oIgorI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVy
LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2Vs
ZXJhdGUuaD4KLSNlbHNlCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBSZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUo
ZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQpAQCAtMTE5LDcgKzEwOCw3
IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogCiAgICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5w
dXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgLy8gRWRnZSBtb2RlcyBvdGhl
ciB0aGFuICdub25lJyBkbyBub3QgaW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KLSAg
ICBpZiAobV9lZGdlTW9kZSAhPSBFREdFTU9ERV9OT05FKSB7CisgICAgaWYgKG1fZWRnZU1vZGUg
IT0gRWRnZU1vZGVUeXBlOjpOb25lKSB7CiAgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTEzNiw0NTMgKzEyNSw2IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotLy8gRklY
TUU6IE1vdmUgdGhlIGNsYXNzIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFy
YXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgRkVHYXVzc2lhbkJsdXJTb2Z0d2Fy
ZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFR2F1c3NpYW5C
bHVyPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUdh
dXNzaWFuQmx1cj47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9v
bCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZm
ZWN0cykgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7
Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OwotICAgICAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3
aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7
Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgICAgICBib29sIGlzQWxwaGFJbWFn
ZTsKLSAgICAgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOwotICAgIH07Ci0KLSAgICBzdGF0aWMg
aW5saW5lIHZvaWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiBy
YWRpdXMsIGludCYgZGVsdGFMZWZ0LCBpbnQmIGRlbHRhUmlnaHQpOwotCi0gICAgc3RhdGljIGlu
bGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwg
aW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwg
aW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVs
U2l6ZSk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1
bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJp
ZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFn
ZSwgRWRnZU1vZGVUeXBlKTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWNjZWxl
cmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVt
cEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRo
LCBpbnQgZWZmZWN0SGVpZ2h0KTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1clVuYWNj
ZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYg
dGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBp
bnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9k
ZVR5cGUpOwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJHZW5lcmljKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVu
c2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRT
aXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKLSAgICBzdGF0aWMgaW5saW5l
IHZvaWQgYm94Qmx1cldvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsKLQotICAgIHN0YXRpYyBpbmxp
bmUgdm9pZCBhcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhD
bGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25l
ZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRn
ZU1vZGVUeXBlKTsKLX07Ci0KLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBs
aWVyOjprZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywg
aW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKLXsKLSAgICAvLyBDaGVjayBodHRwOi8v
d3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlR2F1c3NpYW5CbHVyRWxlbWVudCBmb3Ig
ZGV0YWlscy4KLSAgICBzd2l0Y2ggKGJsdXJJdGVyYXRpb24pIHsKLSAgICBjYXNlIDA6Ci0gICAg
ICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMg
LyAyIC0gMTsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0YUxlZnQ7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMgLyAyOwotICAg
ICAgICAgICAgZGVsdGFSaWdodCA9IHJhZGl1cyAtIGRlbHRhTGVmdDsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7Ci0g
ICAgICAgICAgICBkZWx0YUxlZnQrKzsKLSAgICAgICAgICAgIGRlbHRhUmlnaHQtLTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGlmICghKHJhZGl1cyAl
IDIpKSB7Ci0gICAgICAgICAgICBkZWx0YVJpZ2h0Kys7Ci0gICAgICAgICAgICByYWRpdXMrKzsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24g
b25seSBvcGVyYXRlcyBvbiBBbHBoYSBjaGFubmVsLgotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNp
Z25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3Ry
aWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYg
bWF4S2VybmVsU2l6ZSkKLXsKLSAgICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxB
cnJheS5kYXRhKCk7Ci0gICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgp
OwotICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQgaXM6IFJHQkEsIHplcm8taW5kZXggYmFzZWQuCi0g
ICAgY29uc3QgaW50IGNoYW5uZWwgPSAzOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBlZmZl
Y3RIZWlnaHQ7ICsreSkgewotICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVMaW5lOwotICAg
ICAgICBpbnQgc3VtID0gMDsKLQotICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKLSAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0gICAgICAgICAgICBzdW0gKz0gc3Jj
UHRyW2NoYW5uZWxdOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQmx1cnJpbmcuCi0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAgICAgICAgdW5z
aWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGUgKyBjaGFubmVsOwotICAg
ICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLSAg
ICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW0gLyBkeCk7Ci0KLSAg
ICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KLSAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkg
ewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQg
LSBkeExlZnQgKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRy
ID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3VtIC09ICpzcmNQdHI7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8IGVmZmVjdFdp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVP
ZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKLSAgICAgICAgICAgICAgICBzdW0gKz0g
KnNyY1B0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZv
aWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXIoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5
LCB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBz
dHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJ
bWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIGNvbnN0IGludCBtYXhLZXJuZWxT
aXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOwotICAgIGlmIChhbHBoYUltYWdl
KQotICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5LCBkc3RQaXhl
bEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUsICBlZmZlY3RX
aWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXplKTsKLQotICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1aW50OF90KiBkc3REYXRhID0g
ZHN0UGl4ZWxBcnJheS5kYXRhKCk7Ci0KLSAgICAvLyBDb25jZXJuaW5nIHRoZSBhcnJheSB3aWR0
aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4gVGhlIG51bWJl
ciBvZiBwaXhlbHMgd2lsbCBiZQotICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxz
LgotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsKLSAgICAgICAg
aW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKLSAgICAgICAgaW50IHN1bVIgPSAwLCBzdW1HID0g
MCwgc3VtQiA9IDAsIHN1bUEgPSAwOwotCi0gICAgICAgIGlmIChlZGdlTW9kZSA9PSBFREdFTU9E
RV9OT05FKSB7Ci0gICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG1heEtlcm5lbFNpemU7ICsraSkgewotICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAgICAgICAgICAgICAgIGNv
bnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
c3VtUiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtRyArPSAqc3JjUHRyKys7Ci0g
ICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgc3VtQSAr
PSAqc3JjUHRyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBCbHVycmluZy4KLSAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgewotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IGxpbmUgKyB4ICogc3RyaWRlOwot
ICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGRzdFB0ciA9IGRzdERhdGEgKyBwaXhlbEJ5dGVPZmZz
ZXQ7Ci0KLSAgICAgICAgICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihz
dW1SIC8gZHgpOwotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHN1bUcgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4oc3VtQiAvIGR4KTsKLSAgICAgICAgICAgICAgICAqZHN0UHRyID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4oc3VtQSAvIGR4KTsKLQotICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5l
bC4KLSAgICAgICAgICAgICAgICBpZiAoeCA+PSBkeExlZnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbGVmdE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCAtIGR4TGVmdCAqIHN0cmlk
ZTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSAr
IGxlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gc3JjUHRyWzBdOwotICAg
ICAgICAgICAgICAgICAgICBzdW1HIC09IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAg
c3VtQiAtPSBzcmNQdHJbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEgLT0gc3JjUHRyWzNd
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8
IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJpZ2h0T2Zmc2V0
ID0gcGl4ZWxCeXRlT2Zmc2V0ICsgZHhSaWdodCAqIHN0cmlkZTsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIHJpZ2h0T2Zmc2V0OwotICAgICAg
ICAgICAgICAgICAgICBzdW1SICs9IHNyY1B0clswXTsKLSAgICAgICAgICAgICAgICAgICAgc3Vt
RyArPSBzcmNQdHJbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gc3JjUHRyWzJdOwot
ICAgICAgICAgICAgICAgICAgICBzdW1BICs9IHNyY1B0clszXTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIGhlcmUuCi0gICAgICAgICAgICAvLyBHZXQgZWRnZSB2
YWx1ZXMgZm9yIGVkZ2VNb2RlICdkdXBsaWNhdGUnLgotICAgICAgICAgICAgY29uc3QgdWludDhf
dCogZWRnZVZhbHVlTGVmdCA9IHNyY0RhdGEgKyBsaW5lOwotICAgICAgICAgICAgY29uc3QgdWlu
dDhfdCogZWRnZVZhbHVlUmlnaHQgID0gc3JjRGF0YSArIChsaW5lICsgKGVmZmVjdFdpZHRoIC0g
MSkgKiBzdHJpZGUpOwotCi0gICAgICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwuCi0gICAgICAg
ICAgICBmb3IgKGludCBpID0gZHhMZWZ0ICogLTE7IGkgPCBkeFJpZ2h0OyArK2kpIHsKLSAgICAg
ICAgICAgICAgICAvLyBJcyB0aGlzIHJpZ2h0IGZvciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJ2knPwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGxpbmUgKyBpICogc3RyaWRlOwotICAg
ICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiAr
PSBlZGdlVmFsdWVMZWZ0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9IGVkZ2VWYWx1
ZUxlZnRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlTGVmdFsyXTsK
LSAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVMZWZ0WzNdOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaSA+PSBlZmZlY3RXaWR0aCkgewotICAgICAgICAgICAgICAgICAg
ICBzdW1SICs9IGVkZ2VWYWx1ZVJpZ2h0WzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9
IGVkZ2VWYWx1ZVJpZ2h0WzFdOwotICAgICAgICAgICAgICAgICAgICBzdW1CICs9IGVkZ2VWYWx1
ZVJpZ2h0WzJdOwotICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZVJpZ2h0WzNd
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0g
KnNyY1B0cisrOwotICAgICAgICAgICAgICAgICAgICBzdW1HICs9ICpzcmNQdHIrKzsKLSAgICAg
ICAgICAgICAgICAgICAgc3VtQiArPSAqc3JjUHRyKys7Ci0gICAgICAgICAgICAgICAgICAgIHN1
bUEgKz0gKnNyY1B0cjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIEJsdXJyaW5nLgotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZl
Y3RXaWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0
ID0gbGluZSArIHggKiBzdHJpZGU7Ci0gICAgICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0g
ZHN0RGF0YSArIHBpeGVsQnl0ZU9mZnNldDsKLQotICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7Ci0gICAgICAgICAgICAgICAgKmRzdFB0
cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKLSAgICAgICAgICAgICAgICAq
ZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOwotICAgICAgICAgICAg
ICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOwotCi0gICAgICAg
ICAgICAgICAgLy8gU2hpZnQga2VybmVsLgotICAgICAgICAgICAgICAgIGlmICh4IDwgZHhMZWZ0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgLT0gZWRnZVZhbHVlTGVmdFswXTsKLSAgICAg
ICAgICAgICAgICAgICAgc3VtRyAtPSBlZGdlVmFsdWVMZWZ0WzFdOwotICAgICAgICAgICAgICAg
ICAgICBzdW1CIC09IGVkZ2VWYWx1ZUxlZnRbMl07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUEg
LT0gZWRnZVZhbHVlTGVmdFszXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0gZHhMZWZ0
ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBz
cmNEYXRhICsgbGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBzcmNQdHJb
MF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOwotICAgICAgICAgICAg
ICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQSAtPSBz
cmNQdHJbM107Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHggKyBk
eFJpZ2h0ID49IGVmZmVjdFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRn
ZVZhbHVlUmlnaHRbMF07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmln
aHRbMV07Ci0gICAgICAgICAgICAgICAgICAgIHN1bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRnZVZhbHVlUmlnaHRbM107Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQg
PSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOwotICAgICAgICAgICAgICAgICAgICBzdW1H
ICs9IHNyY1B0clsxXTsKLSAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBzcmNQdHJbMl07Ci0g
ICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRF
KQotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBY2Nl
bGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0
ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lk
dGgsIGludCBlZmZlY3RIZWlnaHQpCi17Ci0gICAgaWYgKCFpb0J1ZmZlci5kYXRhKCkgfHwgIXRl
bXBCdWZmZXIuZGF0YSgpKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGVmZmVjdFdpZHRoIDw9IDAgfHwgZWZmZWN0SGVp
Z2h0IDw9IDAgfHwgc3RyaWRlIDw9IDApIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBtdXN0IGFsd2F5cyB1c2UgYW4g
b2RkIHJhZGl1cy4KLSAgICBpZiAoa2VybmVsU2l6ZSAlIDIgIT0gMSkKLSAgICAgICAga2VybmVs
U2l6ZSArPSAxOwotCi0gICAgdkltYWdlX0J1ZmZlciBlZmZlY3RJbkJ1ZmZlcjsKLSAgICBlZmZl
Y3RJbkJ1ZmZlci5kYXRhID0gc3RhdGljX2Nhc3Q8dm9pZCo+KGlvQnVmZmVyLmRhdGEoKSk7Ci0g
ICAgZWZmZWN0SW5CdWZmZXIud2lkdGggPSBlZmZlY3RXaWR0aDsKLSAgICBlZmZlY3RJbkJ1ZmZl
ci5oZWlnaHQgPSBlZmZlY3RIZWlnaHQ7Ci0gICAgZWZmZWN0SW5CdWZmZXIucm93Qnl0ZXMgPSBz
dHJpZGU7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdE91dEJ1ZmZlcjsKLSAgICBlZmZlY3RP
dXRCdWZmZXIuZGF0YSA9IHRlbXBCdWZmZXIuZGF0YSgpOwotICAgIGVmZmVjdE91dEJ1ZmZlci53
aWR0aCA9IGVmZmVjdFdpZHRoOwotICAgIGVmZmVjdE91dEJ1ZmZlci5oZWlnaHQgPSBlZmZlY3RI
ZWlnaHQ7Ci0gICAgZWZmZWN0T3V0QnVmZmVyLnJvd0J5dGVzID0gc3RyaWRlOwotCi0gICAgLy8g
RGV0ZXJtaW5lIHRoZSBzaXplIG9mIGEgdGVtcG9yYXJ5IGJ1ZmZlciBieSBjYWxsaW5nIHRoZSBm
dW5jdGlvbiBmaXJzdCB3aXRoIGEgc3BlY2lhbCBmbGFnLiB2SW1hZ2Ugd2lsbCByZXR1cm4KLSAg
ICAvLyB0aGUgc2l6ZSBuZWVkZWQsIG9yIGFuIGVycm9yICh3aGljaCBhcmUgYWxsIG5lZ2F0aXZl
KS4KLSAgICBzaXplX3QgdG1wQnVmZmVyU2l6ZSA9IHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4
KCZlZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgMCwgMCwgMCwga2VybmVsU2l6ZSwg
a2VybmVsU2l6ZSwgMCwga3ZJbWFnZUVkZ2VFeHRlbmQgfCBrdkltYWdlR2V0VGVtcEJ1ZmZlclNp
emUpOwotICAgIGlmICh0bXBCdWZmZXJTaXplIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAg
IHZvaWQqIHRtcEJ1ZmZlciA9IGZhc3RNYWxsb2ModG1wQnVmZmVyU2l6ZSk7Ci0gICAgdkltYWdl
Qm94Q29udm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0
bXBCdWZmZXIsIDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0
ZW5kKTsKLSAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0T3V0QnVmZmVyLCAm
ZWZmZWN0SW5CdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwg
MCwga3ZJbWFnZUVkZ2VFeHRlbmQpOwotICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZl
ZmZlY3RJbkJ1ZmZlciwgJmVmZmVjdE91dEJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxT
aXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7Ci0gICAgZmFzdEZyZWUodG1w
QnVmZmVyKTsKLQotICAgIC8vIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBp
b0J1ZmZlci4KLSAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3RoKCkgPT0gdGVtcEJ1ZmZlci5sZW5n
dGgoKSk7Ci0gICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgdGVtcEJ1ZmZlci5kYXRhKCksIGlv
QnVmZmVyLmxlbmd0aCgpKTsKLX0KLSNlbmRpZgotCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1
clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVs
U2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNp
emUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgaW50
IGR4TGVmdCA9IDA7Ci0gICAgaW50IGR4UmlnaHQgPSAwOwotICAgIGludCBkeUxlZnQgPSAwOwot
ICAgIGludCBkeVJpZ2h0ID0gMDsKLSAgICAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZnJvbUJ1
ZmZlciA9ICZpb0J1ZmZlcjsKLSAgICBVaW50OENsYW1wZWRBcnJheSogdG9CdWZmZXIgPSAmdGVt
cEJ1ZmZlcjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlm
IChrZXJuZWxTaXplWCkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6
ZVgsIGR4TGVmdCwgZHhSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAg
ICAgICAgICAgaWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAgYm94Qmx1ck5FT04o
KmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwg
c3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIs
IGtlcm5lbFNpemVYLCBkeExlZnQsIGR4UmlnaHQsIDQsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAg
ICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwg
ZHhSaWdodCwgNCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgp
LCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAgICAgc3RkOjpzd2Fw
KGZyb21CdWZmZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrZXJuZWxT
aXplWSkgewotICAgICAgICAgICAga2VybmVsUG9zaXRpb24oaSwga2VybmVsU2l6ZVksIGR5TGVm
dCwgZHlSaWdodCk7Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgICAgICAgICAg
aWYgKCFpc0FscGhhSW1hZ2UpCi0gICAgICAgICAgICAgICAgYm94Qmx1ck5FT04oKmZyb21CdWZm
ZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBw
YWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBib3hCbHVyKCpmcm9tQnVmZmVyLCAqdG9CdWZmZXIsIGtlcm5lbFNp
emVZLCBkeUxlZnQsIGR5UmlnaHQsIHN0cmlkZSwgNCwgcGFpbnRTaXplLmhlaWdodCgpLCBwYWlu
dFNpemUud2lkdGgoKSwgdHJ1ZSwgZWRnZU1vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgIGJveEJs
dXIoKmZyb21CdWZmZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwg
c3RyaWRlLCA0LCBwYWludFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCBpc0FscGhh
SW1hZ2UsIGVkZ2VNb2RlKTsKLSNlbmRpZgotICAgICAgICAgICAgc3RkOjpzd2FwKGZyb21CdWZm
ZXIsIHRvQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBmaW5hbCByZXN1
bHQgc2hvdWxkIGJlIHN0b3JlZCBpbiBpb0J1ZmZlci4KLSAgICBpZiAoJmlvQnVmZmVyICE9IGZy
b21CdWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKGlvQnVmZmVyLmxlbmd0aCgpID09IGZyb21CdWZm
ZXItPmxlbmd0aCgpKTsKLSAgICAgICAgbWVtY3B5KGlvQnVmZmVyLmRhdGEoKSwgZnJvbUJ1ZmZl
ci0+ZGF0YSgpLCBpb0J1ZmZlci5sZW5ndGgoKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBG
RUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckdlbmVyaWMoVWludDhDbGFtcGVk
QXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWdu
ZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUs
IGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgaW50IHN0
cmlkZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAg
IGlmIChrZXJuZWxTaXplWCA9PSBrZXJuZWxTaXplWSAmJiAoZWRnZU1vZGUgPT0gRURHRU1PREVf
Tk9ORSB8fCBlZGdlTW9kZSA9PSBFREdFTU9ERV9EVVBMSUNBVEUpKSB7Ci0gICAgICAgIGJveEJs
dXJBY2NlbGVyYXRlZChpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlk
ZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGJveEJsdXJVbmFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0
bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXpl
LCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLX0KLQotI2lmICFVU0UoQUNDRUxFUkFURSkKLWlu
bGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKEFw
cGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKLXsKLSAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJh
bWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0KTsKLSAgICBib3hCbHVyR2VuZXJpYygq
cGFyYW1ldGVycy0+aW9QaXhlbEFycmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFy
YW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUs
IHBhcmFtZXRlcnMtPmlzQWxwaGFJbWFnZSwgcGFyYW1ldGVycy0+ZWRnZU1vZGUpOwotfQotI2Vu
ZGlmCi0KLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBs
YXRmb3JtKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRt
cFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwg
SW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VN
b2RlKQotewotI2lmICFVU0UoQUNDRUxFUkFURSkKLSAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFp
bnRTaXplLndpZHRoKCk7Ci0gICAgaW50IGV4dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICog
MC41ZjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbmltYWxSZWN0RGltZW5zaW9uID0g
MTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotICAg
IGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXpl
LmhlaWdodCgpKSAvIChtaW5pbWFsUmVjdERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0ICogcGFpbnRT
aXplLndpZHRoKCkpOwotCi0gICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAg
ICAgIFBhcmFsbGVsSm9iczxBcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYm94Qmx1cldv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7Ci0KLSAgICAgICAgaW50IGpvYnMgPSBwYXJhbGxl
bEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAgIGlmIChqb2JzID4gMSkgewotICAgICAgICAg
ICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hlaWdodCItc2l6ZWQgam9icyBidXQgdGhl
cmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAg
ICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMg
YXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAg
ICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNpemUuaGVpZ2h0KCkgLyBqb2JzOwotICAg
ICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludFNpemUuaGVpZ2h0KCkgJSBq
b2JzOwotCi0gICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwotICAgICAgICAgICAgZm9yIChp
bnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBBcHBseVBh
cmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLQotICAgICAg
ICAgICAgICAgIGludCBzdGFydFkgPSAham9iID8gMCA6IGN1cnJlbnRZIC0gZXh0cmFIZWlnaHQ7
Ci0gICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2Nr
SGVpZ2h0ICsgMSA6IGJsb2NrSGVpZ2h0OwotICAgICAgICAgICAgICAgIGludCBlbmRZID0gam9i
ID09IGpvYnMgLSAxID8gY3VycmVudFkgOiBjdXJyZW50WSArIGV4dHJhSGVpZ2h0OwotCi0gICAg
ICAgICAgICAgICAgaW50IGJsb2NrU2l6ZSA9IChlbmRZIC0gc3RhcnRZKSAqIHNjYW5saW5lOwot
ICAgICAgICAgICAgICAgIGlmICgham9iKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5p
b1BpeGVsQXJyYXkgPSAmaW9CdWZmZXI7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQ
aXhlbEFycmF5ID0gJnRtcFBpeGVsQXJyYXk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5
OjpjcmVhdGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHBh
cmFtcy50bXBQaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQoYmxvY2tTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcy5pb1BpeGVs
QXJyYXktPmRhdGEoKSwgaW9CdWZmZXIuZGF0YSgpICsgc3RhcnRZICogc2NhbmxpbmUsIGJsb2Nr
U2l6ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcGFyYW1zLndpZHRo
ID0gcGFpbnRTaXplLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmhlaWdodCA9IGVu
ZFkgLSBzdGFydFk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmtlcm5lbFNpemVYID0ga2VybmVs
U2l6ZVg7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmtlcm5lbFNpemVZID0ga2VybmVsU2l6ZVk7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmlzQWxwaGFJbWFnZSA9IGlzQWxwaGFJbWFnZTsKLSAg
ICAgICAgICAgICAgICBwYXJhbXMuZWRnZU1vZGUgPSBlZGdlTW9kZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLQotICAgICAgICAgICAgLy8g
Q29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGltYWdlLgotICAgICAgICAgICAgY3VycmVu
dFkgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMTsgam9iIDwgam9iczsgam9iKysp
IHsKLSAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9i
cy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBpbnQgc291cmNlT2Zmc2V0OwotICAg
ICAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbk9mZnNldDsKLSAgICAgICAgICAgICAgICBpbnQg
c2l6ZTsKLSAgICAgICAgICAgICAgICBpbnQgYWRqdXN0ZWRCbG9ja0hlaWdodCA9IGpvYiA8IGpv
YnNXaXRoRXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKLQotICAgICAgICAg
ICAgICAgIGN1cnJlbnRZICs9IGFkanVzdGVkQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICAgICAg
c291cmNlT2Zmc2V0ID0gZXh0cmFIZWlnaHQgKiBzY2FubGluZTsKLSAgICAgICAgICAgICAgICBk
ZXN0aW5hdGlvbk9mZnNldCA9IGN1cnJlbnRZICogc2NhbmxpbmU7Ci0gICAgICAgICAgICAgICAg
c2l6ZSA9IGFkanVzdGVkQmxvY2tIZWlnaHQgKiBzY2FubGluZTsKLQotICAgICAgICAgICAgICAg
IG1lbWNweShpb0J1ZmZlci5kYXRhKCkgKyBkZXN0aW5hdGlvbk9mZnNldCwgcGFyYW1zLmlvUGl4
ZWxBcnJheS0+ZGF0YSgpICsgc291cmNlT2Zmc2V0LCBzaXplKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5n
bGUgdGhyZWFkZWQgbW9kZS4KLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFRoZSBzZWxlY3Rpb24g
aGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9y
bXMuCi0gICAgYm94Qmx1ckdlbmVyaWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNp
emVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKLX0K
LQotYm9vbCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQotewotICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7Ci0KLSAgICBhdXRvIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3VsdChBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZWZmZWN0LnNldElzQWxw
aGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgYXV0byBlZmZlY3REcmF3aW5nUmVj
dCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwotICAgIGlmICghbV9lZmZlY3Quc3Rk
RGV2aWF0aW9uWCgpICYmICFtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgYXV0byBrZXJuZWxTaXplID0gbV9lZmZlY3QuY2FsY3VsYXRlS2VybmVs
U2l6ZShmaWx0ZXIsIHsgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZp
YXRpb25ZKCkgfSk7Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIGF1dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOwotICAg
IGlmICghdG1wSW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0g
ICAgYXBwbHlQbGF0Zm9ybShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtl
cm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLCBtX2VmZmVj
dC5pc0FscGhhSW1hZ2UoKSwgbV9lZmZlY3QuZWRnZU1vZGUoKSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGJvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxp
ZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5o
CmluZGV4IDY1YWE2ZTE4ODk3ZmE4Y2M5NzY5ZDFlNTU3ZDdkMjZmNWU1Y2EyMjIuLjkwODIyNjQz
NGEwOWFkNDMzNDk2YzlkYTFlZGFiN2M0ODgzMjFjMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAg
LTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
Y3BwCmluZGV4IDFhZGMwZjM3M2E0NjBkZmJkMmFjYmZiOTAyMDg1M2RhY2NiNDU2M2IuLmNjZGU2
ZWI4MmUzN2MyZTNiN2JmMzJiNzY5NDc5YWJlYzdlYjI2YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAt
MSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZwotICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDEyICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVMaWdodGlu
Zy5oIgogCi0jaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRkVMaWdodGlu
Z05FT04uaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXJh
bGxlbEpvYnMuaD4KKyNpbmNsdWRlICJGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODYsNTA3ICs4MSw2IEBAIGJvb2wgRkVMaWdodGluZzo6
c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUxpZ2h0aW5nU29mdHdhcmVB
cHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgRkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
RkVMaWdodGluZz4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXI8RkVMaWdodGluZz47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0gICAg
Ym9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
Y1BpeGVsU2l6ZSA9IDQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY0FscGhhQ2hhbm5lbE9m
ZnNldCA9IDM7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYpOwotCi0gICAgLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhl
IG5vcm1hbCBjb2VmZmljaWVudHMgY29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3
dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKLSAgICBz
dGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MyA9IC0xIC8gMy5mOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXY0ID0gLTEgLyA0LmY7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBmbG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMuZjsKLQotICAgIHN0cnVjdCBBbHBo
YVdpbmRvdyB7Ci0gICAgICAgIHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OwotICAgIAotICAgICAg
ICAvLyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBp
bmRpY2VzIGVhc2llci4KLSAgICAgICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAg
ICAgeyByZXR1cm4gYWxwaGFbMF1bMF07IH0KLSAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3Qg
ICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0KLSAgICAgICAgdWludDhfdCBi
b3R0b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KLQotICAg
ICAgICB1aW50OF90IHRvcCgpIGNvbnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsw
XVsxXTsgfQotICAgICAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJl
dHVybiBhbHBoYVsxXVsxXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAg
ICAgICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wKHVp
bnQ4X3QgdmFsdWUpICAgICAgICAgIHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2
b2lkIHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7
IH0KLSAgICAgICAgdm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsy
XVsxXSA9IHZhbHVlOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVl
KSAgICAgeyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0UmlnaHQodWlu
dDhfdCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lk
IHNldEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0K
LQotICAgICAgICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOwotICAgICAgICAgICAgYWxwaGFb
MV0gPSBhbHBoYVsyXTsKLSAgICAgICAgfQotICAgIAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOwotICAgICAgICAgICAgc2hp
ZnRSb3coYWxwaGFbMV0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICAvLyBUaGlz
IHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAg
ICAgRkVMaWdodGluZyogZWZmZWN0OwotICAgICAgICBGaWx0ZXJFZmZlY3Q6OlR5cGUgZmlsdGVy
VHlwZTsKLSAgICAgICAgQ29sb3IgbGlnaHRpbmdDb2xvcjsKLSAgICAgICAgZmxvYXQgc3VyZmFj
ZVNjYWxlOwotICAgICAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQ7Ci0gICAgICAgIGZsb2F0IHNw
ZWN1bGFyQ29uc3RhbnQ7Ci0gICAgICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQ7Ci0gICAgICAg
IGNvbnN0IExpZ2h0U291cmNlKiBsaWdodFNvdXJjZTsKLSAgICAgICAgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlKiBvcGVyYXRpbmdDb2xvclNwYWNlOwotCi0gICAgICAgIFVpbnQ4Q2xhbXBl
ZEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsK
LSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotCi0gICAgICAgIGlubGlu
ZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGlu
ZSBJbnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5l
IEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGlu
ZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlu
bGluZSBJbnRTaXplIGludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JikgY29u
c3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21Sb3dOb3JtYWwoaW50IG9m
ZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJpZ2h0Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsK
LSAgICAgICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0gICAgICAgIExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEgcGFpbnRpbmdEYXRhOwotICAgICAgICBpbnQgeVN0YXJ0OwotICAgICAgICBpbnQgeUVu
ZDsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgc2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0
LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwg
aW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1h
bDJEVmVjdG9yLCBmbG9hdCBhbHBoYSk7Ci0gICAgc3RhdGljIHZvaWQgc2V0UGl4ZWwoaW50IG9m
ZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0
YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBu
b3JtYWwyRFZlY3Rvcik7Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpY1Bh
aW50KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdl
bmVyaWNXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0
Zm9ybUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm0oY29uc3QgTGlnaHRpbmdE
YXRhJik7Ci19OwotCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQg
Y2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zm
c2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIGludCBib3R0b20gPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewot
ICAgICAgICAtMiAqIGNlbnRlciArIDIgKiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAot
ICAgICAgICAtMiAqIGNlbnRlciAtIHJpZ2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0g
ICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGln
aHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgbGVm
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmln
aHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50
IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwot
ICAgIHJldHVybiB7Ci0gICAgICAgIC0yICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQg
KyBib3R0b21SaWdodCwKLSAgICAgICAgLWxlZnQgLSAyICogY2VudGVyIC0gcmlnaHQgKyBib3R0
b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0Ci0gICAgfTsKLX0KLQotaW5saW5lIElu
dFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5v
cm1hbChpbnQgb2Zmc2V0KSBjb25zdAotewotICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
aW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtMiAqIGxlZnQgKyAyICog
Y2VudGVyIC0gYm90dG9tTGVmdCArIGJvdHRvbSwKLSAgICAgICAgLWxlZnQgLSAyICogY2VudGVy
ICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20KLSAgICB9OwotfQotCi1pbmxpbmUgSW50U2l6ZSBG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwo
aW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCByaWdo
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBvZmZzZXQgKz0gMiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwot
ICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVy
ICsgMiAqIHJpZ2h0IC0gYm90dG9tICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC0yICogdG9wIC0g
dG9wUmlnaHQgKyAyICogYm90dG9tICsgYm90dG9tUmlnaHQKLSAgICB9OwotfQotCi1pbmxpbmUg
SW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmludGVyaW9y
Tm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKLXsKLSAg
ICBpbnQgcmlnaHRBbHBoYU9mZnNldCA9IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0OwotICAgIAotICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQpKTsKLSAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUpKTsKLSAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShyaWdodEFscGhhT2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsK
LQotICAgIGludCBsZWZ0ID0gYWxwaGFXaW5kb3cubGVmdCgpOwotICAgIGludCB0b3BMZWZ0ID0g
YWxwaGFXaW5kb3cudG9wTGVmdCgpOwotICAgIGludCB0b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsK
LQotICAgIGludCBib3R0b21MZWZ0ID0gYWxwaGFXaW5kb3cuYm90dG9tTGVmdCgpOwotICAgIGlu
dCBib3R0b20gPSBhbHBoYVdpbmRvdy5ib3R0b20oKTsKLQotICAgIC8vIFRoZSBhbHBoYVdpbmRv
dyBoYXMgYmVlbiBzaGlmdGVkLCBhbmQgaGVyZSB3ZSBmaWxsIGluIHRoZSByaWdodCBjb2x1bW4u
Ci0gICAgYWxwaGFXaW5kb3cuYWxwaGFbMF1bMl0gPSB0b3BSaWdodDsKLSAgICBhbHBoYVdpbmRv
dy5hbHBoYVsxXVsyXSA9IHJpZ2h0OwotICAgIGFscGhhV2luZG93LmFscGhhWzJdWzJdID0gYm90
dG9tUmlnaHQ7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5kb3cgaXMgd29y
a2luZyB3aXRoIHNvbWUgc3BvdC1jaGVja3MuCi0gICAgQVNTRVJUKGFscGhhV2luZG93LnRvcExl
ZnQoKSA9PSBwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAtIHdpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOyAvLyB0b3BMZWZ0Ci0gICAgQVNT
RVJUKGFscGhhV2luZG93LnRvcCgpID09IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wCi0KLSAgICBy
ZXR1cm4gewotICAgICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmln
aHQgLSBib3R0b21MZWZ0ICsgYm90dG9tUmlnaHQsCi0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRv
cCAtIHRvcFJpZ2h0ICsgYm90dG9tTGVmdCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAotICAg
IH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0
aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQg
bGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZz
ZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgb2Zmc2V0ICs9IDIgKiB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7Ci0gICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAtdG9w
TGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsgMiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0b20s
Ci0gICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tCi0g
ICAgfTsKLX0KLQotaW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGln
aHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50
IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKLSAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIG9m
ZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBpbnQgdG9wID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwot
ICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAg
ICAgLXRvcCArIHRvcFJpZ2h0IC0gMiAqIGNlbnRlciArIDIgKiByaWdodCwKLSAgICAgICAgLTIg
KiB0b3AgLSB0b3BSaWdodCArIDIgKiBjZW50ZXIgKyByaWdodAotICAgIH07Ci19Ci0KLWlubGlu
ZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9t
Um93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgaW50IGxlZnQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKLSAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAg
aW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAg
aW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICByZXR1cm4gewotICAgICAgICAt
dG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQsCi0gICAgICAgIC10b3BM
ZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgbGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAotICAg
IH07Ci19Ci0KLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0
aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBpbnQg
bGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICBvZmZz
ZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgaW50IHRvcExlZnQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwotICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAg
LXRvcExlZnQgKyB0b3AgLSAyICogbGVmdCArIDIgKiBjZW50ZXIsCi0gICAgICAgIC10b3BMZWZ0
IC0gMiAqIHRvcCArIGxlZnQgKyAyICogY2VudGVyCi0gICAgfTsKLX0KLQotdm9pZCBGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExp
Z2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNp
emUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKQotewotICAgIGZsb2F0IHogPSBhbHBoYSAq
IGRhdGEuc3VyZmFjZVNjYWxlOwotICAgIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0
YSBsaWdodGluZ0RhdGEgPSBkYXRhLmxpZ2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0Rh
dGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKLQotICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7Ci0g
ICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7Ci0gICAgICAgIC8vIE5vcm1hbCB2ZWN0
b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAg
aWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURp
ZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VD
b25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3JMZW5ndGg7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNE
IGhhbGZ3YXlWZWN0b3IgPSB7Ci0gICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVj
dG9yLngoKSwKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAot
ICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0Rh
dGEubGlnaHRWZWN0b3JMZW5ndGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBmbG9hdCBo
YWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAg
IGlmIChkYXRhLnNwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0
cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxm
d2F5VmVjdG9yTGVuZ3RoOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0
U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3Iueigp
IC8gaGFsZndheVZlY3Rvckxlbmd0aCwgZGF0YS5zcGVjdWxhckV4cG9uZW50KTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7Ci0g
ICAgICAgICAgICBmYWN0b3JYICogbm9ybWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFj
ZVNjYWxlLAotICAgICAgICAgICAgZmFjdG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICog
ZGF0YS5zdXJmYWNlU2NhbGUsCi0gICAgICAgICAgICAxLjBmCi0gICAgICAgIH07Ci0gICAgICAg
IGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKLQotICAg
ICAgICBpZiAoZGF0YS5lZmZlY3QtPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFRGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlm
ZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvcikg
LyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9
IHsKLSAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAotICAgICAg
ICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci55KCksCi0gICAgICAgICAgICAgICAg
bGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxl
bmd0aAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5n
dGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3Vs
YXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNw
ZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFs
VmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBv
d2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAq
IGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQotICAgICAgICBsaWdodFN0cmVu
Z3RoID0gMTsKLSAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCi0gICAgICAgIGxpZ2h0U3RyZW5n
dGggPSAwOwotCi0gICAgdWludDhfdCBwaXhlbFZhbHVlWzNdID0gewotICAgICAgICBzdGF0aWNf
Y2FzdDx1aW50OF90PihsaWdodFN0cmVuZ3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLngo
KSAqIDI1NS4wZiksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGgg
KiBsaWdodGluZ0RhdGEuY29sb3JWZWN0b3IueSgpICogMjU1LjBmKSwKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8dWludDhfdD4obGlnaHRTdHJlbmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci56
KCkgKiAyNTUuMGYpCi0gICAgfTsKLSAgICAKLSAgICBkYXRhLnBpeGVscy0+c2V0UmFuZ2UocGl4
ZWxWYWx1ZSwgMywgb2Zmc2V0KTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExp
Z2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9h
dCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQotewotICAg
IHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3Rv
clgsIGZhY3RvclksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLS8vIFRoaXMgYXBwZWFycyB0byByZWFkIGZyb20g
YW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVhZHMgdGhl
IGFscGhhIGNoYW5uZWwsIGFuZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4KLXZvaWQg
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChjb25z
dCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHN0
YXJ0WSBpcyA+IDAgc2luY2Ugd2UgcmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxv
b3AuCi0gICAgQVNTRVJUKHN0YXJ0WSk7Ci0gICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwotCi0g
ICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewotICAgICAgICBpbnQgcm93
U3RhcnRPZmZzZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAg
ICAgaW50IHByZXZpb3VzUm93U3RhcnQgPSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9m
ZnNldCArIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0KLSAgICAgICAgLy8gYWxw
aGFXaW5kb3cgaXMgYSBsb2NhbCBjYWNoZSBvZiBhbHBoYSB2YWx1ZXMuCi0gICAgICAgIC8vIEZp
bGwgdGhlIHR3byByaWdodCBjb2x1bW5zIHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0
aGUgY2VudGVyIGNvbHVtbi4KLSAgICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVh
Y2ggcm93IGxlZnQgdGhlbiBmaWxsIHRoZSByaWdodCBjb2x1bW4uCi0gICAgICAgIEFscGhhV2lu
ZG93IGFscGhhV2luZG93OwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMt
Pml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAg
YWxwaGFXaW5kb3cuc2V0VG9wUmlnaHQoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFy
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci0KLSAgICAgICAgYWxwaGFX
aW5kb3cuc2V0Q2VudGVyKGRhdGEucGl4ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwotICAgICAgICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVs
cy0+aXRlbShyb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Ci0KLSAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5l
eHRSb3dTdGFydCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLSAgICAgICAgYWxwaGFXaW5kb3cu
c2V0Qm90dG9tUmlnaHQoZGF0YS5waXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLQotICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3Rh
cnRPZmZzZXQgKyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEu
d2lkdGggLSAxOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBhbHBo
YVdpbmRvdy5zaGlmdCgpOwotICAgICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRh
dGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEu
aW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigp
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMp
Ci17Ci0gICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJh
bWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVu
ZCk7Ci19Ci0KLSNpZiAhKENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYg
Q09NUElMRVIoR0NDX0NPTVBBVElCTEUpKQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExp
Z2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICB1bnNpZ25lZCBy
b3dzVG9Qcm9jZXNzID0gZGF0YS5oZWlnaHQgLSAyOwotICAgIHVuc2lnbmVkIG1heE51bVRocmVh
ZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKLSAgICAKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBt
aW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQg
Zm9yIHBhcmFsbGVsIGpvYnMKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3Rk
OjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aCAtIDIpICogcm93c1RvUHJvY2VzcykgLyBtaW5p
bWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7Ci0KLSAgICBpZiAob3B0aW1hbFRocmVh
ZE51bWJlciA+IDEpIHsKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2JzCi0gICAg
ICAgIFBhcmFsbGVsSm9iczxBcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0
Zm9ybUdlbmVyaWNXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwotCi0gICAgICAgIC8vIEZp
bGwgdGhlIHBhcmFtZXRlciBhcnJheQotICAgICAgICBpbnQgam9iID0gcGFyYWxsZWxKb2JzLm51
bWJlck9mSm9icygpOwotICAgICAgICBpZiAoam9iID4gMSkgewotICAgICAgICAgICAgLy8gU3Bs
aXQgdGhlIGpvYiBpbnRvICJ5U3RlcCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0
aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAgICAgICAgICAvLyB5U3Rl
cCAqIGpvYnMgPCB0b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJl
bWFpbmRlciAiam9ic1dpdGhFeHRyYSIuCi0gICAgICAgICAgICBjb25zdCBpbnQgeVN0ZXAgPSBy
b3dzVG9Qcm9jZXNzIC8gam9iOwotICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEg
PSByb3dzVG9Qcm9jZXNzICUgam9iOwotCi0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gMTsKLSAg
ICAgICAgICAgIGZvciAoLS1qb2I7IGpvYiA+PSAwOyAtLWpvYikgewotICAgICAgICAgICAgICAg
IEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwot
ICAgICAgICAgICAgICAgIHBhcmFtcy5kYXRhID0gZGF0YTsKLSAgICAgICAgICAgICAgICBwYXJh
bXMucGFpbnRpbmdEYXRhID0gcGFpbnRpbmdEYXRhOwotICAgICAgICAgICAgICAgIHBhcmFtcy55
U3RhcnQgPSB5U3RhcnQ7Ci0gICAgICAgICAgICAgICAgeVN0YXJ0ICs9IGpvYiA8IGpvYnNXaXRo
RXh0cmEgPyB5U3RlcCArIDEgOiB5U3RlcDsKLSAgICAgICAgICAgICAgICBwYXJhbXMueUVuZCA9
IHlTdGFydDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRl
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRmFsbGJhY2sg
dG8gc2luZ2xlIHRocmVhZGVkIG1vZGUuCi0gICAgfQotCi0gICAgYXBwbHlQbGF0Zm9ybUdlbmVy
aWNQYWludChkYXRhLCBwYWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0IC0gMSk7Ci19Ci0jZW5k
aWYKLQotdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSkKLXsKLSAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBh
aW50aW5nRGF0YTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9y
LnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2Up
OwotICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxv
YXRQb2ludDNEKHIsIGcsIGIpOwotCi0gICAgZGF0YS5saWdodFNvdXJjZS0+aW5pdFBhaW50aW5n
RGF0YSgqZGF0YS5lZmZlY3QsIHBhaW50aW5nRGF0YSk7Ci0KLSAgICAvLyBUb3AgbGVmdC4KLSAg
ICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0
YSwgMCwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wTGVmdE5vcm1hbChv
ZmZzZXQpKTsKLQotICAgIC8vIFRvcCByaWdodC4KLSAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRh
dGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3Rv
cjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFsKG9mZnNldCkpOwotCi0gICAgLy8gQm90dG9tIGxl
ZnQuCi0gICAgb2Zmc2V0ID0gKGRhdGEuaGVpZ2h0IC0gMSkgKiBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAw
LCBkYXRhLmhlaWdodCAtIDEsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRv
bUxlZnROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0
ID0gZGF0YS5oZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVs
U2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0
aCAtIDEsIGRhdGEuaGVpZ2h0IC0gMSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEu
Ym90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7Ci0KLSAgICBpZiAoZGF0YS53aWR0aCA+PSAzKSB7
Ci0gICAgICAgIC8vIFRvcCByb3cuCi0gICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQ
aXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0
YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9m
ZnNldCkpOwotCi0gICAgICAgIC8vIEJvdHRvbSByb3cuCi0gICAgICAgIG9mZnNldCA9IChkYXRh
LmhlaWdodCAtIDEpICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNp
emU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zm
c2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBh
aW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHQgLSAxLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2
MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7Ci0gICAgfQotCi0gICAgaWYgKGRhdGEu
aGVpZ2h0ID49IDMpIHsKLSAgICAgICAgLy8gTGVmdCBjb2x1bW4uCi0gICAgICAgIG9mZnNldCA9
IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAx
OyB5IDwgZGF0YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGlu
Z0RhdGEsIDAsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5O
b3JtYWwob2Zmc2V0KSk7Ci0KLSAgICAgICAgLy8gUmlnaHQgY29sdW1uLgotICAgICAgICBvZmZz
ZXQgPSAyICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0g
ICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNldCAr
PSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwo
b2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGggLSAxLCB5LCBjRmFjdG9yMWRp
djIsIGNGYWN0b3IxZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKLSAgICB9
Ci0KLSAgICBpZiAoZGF0YS53aWR0aCA+PSAzICYmIGRhdGEuaGVpZ2h0ID49IDMpIHsKLSAgICAg
ICAgLy8gSW50ZXJpb3IgcGl4ZWxzLgotICAgICAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhkYXRh
LCBwYWludGluZ0RhdGEpOwotICAgIH0KLQotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplICogZGF0YS5oZWlnaHQ7Ci0gICAgaWYgKGRhdGEuZWZmZWN0
LT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykg
ewotICAgICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhl
bDsgaSArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3Bh
cXVlQWxwaGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGFz
dFBpeGVsOyBpICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTEgPSBkYXRh
LnBpeGVscy0+aXRlbShpKTsKLSAgICAgICAgICAgIHVpbnQ4X3QgYTIgPSBkYXRhLnBpeGVscy0+
aXRlbShpICsgMSk7Ci0gICAgICAgICAgICB1aW50OF90IGEzID0gZGF0YS5waXhlbHMtPml0ZW0o
aSArIDIpOwotICAgICAgICAgICAgLy8gYWxwaGEgc2V0IHRvIHNldCB0byBtYXgoYTEsIGEyLCBh
MykKLSAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSArIDMsIGExID49IGEyID8gKGExID49
IGEzID8gYTEgOiBhMykgOiAoYTIgPj0gYTMgPyBhMiA6IGEzKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLWJvb2wgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFy
cmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgbV9lZmZlY3Quc2V0
SXNBbHBoYUltYWdlKGZhbHNlKTsKLQotICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2Vm
ZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKLQotICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5l
bFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhl
IFczCi0gICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVy
IGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCi0gICAgLy8gb3V0cHV0IGZvciB2
YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxp
YWJsZS4KLSAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRo
ZSBpbXBsZW1lbnRhdGlvbgotCi0gICAgSW50U2l6ZSBzaXplID0gSW50U2l6ZShtX2VmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5n
IGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMg
c3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVy
bnMuCi0gICAgaWYgKHNpemUud2lkdGgoKSA8PSAyIHx8IHNpemUuaGVpZ2h0KCkgPD0gMikKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICBkYXRhLmVm
ZmVjdCA9ICZtX2VmZmVjdDsKLSAgICBkYXRhLmZpbHRlclR5cGUgPSBtX2VmZmVjdC5maWx0ZXJU
eXBlKCk7Ci0gICAgZGF0YS5saWdodGluZ0NvbG9yID0gbV9lZmZlY3QubGlnaHRpbmdDb2xvcigp
OwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9lZmZlY3Quc3VyZmFjZVNjYWxlKCkgLyAyNTUu
MGY7Ci0gICAgZGF0YS5kaWZmdXNlQ29uc3RhbnQgPSBtX2VmZmVjdC5kaWZmdXNlQ29uc3RhbnQo
KTsKLSAgICBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgPSBtX2VmZmVjdC5zcGVjdWxhckNvbnN0YW50
KCk7Ci0gICAgZGF0YS5zcGVjdWxhckV4cG9uZW50ID0gbV9lZmZlY3Quc3BlY3VsYXJFeHBvbmVu
dCgpOwotICAgIGRhdGEubGlnaHRTb3VyY2UgPSAmbV9lZmZlY3QubGlnaHRTb3VyY2UoKTsKLSAg
ICBkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UgPSAmbV9lZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFj
ZSgpOwotCi0gICAgZGF0YS5waXhlbHMgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwotICAgIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSBzaXplLndpZHRoKCkgKiBjUGl4ZWxTaXpl
OwotICAgIGRhdGEud2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgZGF0YS5oZWlnaHQgPSBzaXpl
LmhlaWdodCgpOwotCi0gICAgYXBwbHlQbGF0Zm9ybShkYXRhKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQogYm9vbCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCiB7CiAgICAgcmV0dXJuIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIoKnRoaXMp
LmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCBhODRmZTg1YTM4
MWZhODQwNzVlNTE2NTRjYzJjMGM1YmI4YzFhYjJmLi4zMTE4OWE0MGE2MDVhMDVjY2EwYjgxMGVj
YTkyYjNhMTFmZDk0ZTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAx
MCBab2x0YW4gSGVyY3plZworICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmlu
ZGV4IDc2YTc0NjRmMDBlNmQzNzA4ZWU5NGRjYWNkOTZmNjFmN2FjYTZiZTYuLjNmMzYyMWMwODQ3
Y2JhM2E1ZjkwMWM5NzU2ZWQ0NDg3NjY4MjVjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtMiw2ICsyLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAyMSBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw5ICsyMyw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNZXJnZS5oIgogCi0jaW5jbHVkZSAiRmlsdGVy
RWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiRkVNZXJnZVNvZnR3YXJlQXBwbGllci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzksMzYgKzM4LDYgQEAgRkVNZXJnZTo6RkVNZXJnZSgpCiB7CiB9CiAKLS8vIEZJWE1FOiBNb3Zl
IHRoZSBjbGFzcyBGRU1lcmdlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQg
aGVhZGVyIGZpbGVzLgotY2xhc3MgRkVNZXJnZVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNZXJnZT4gewotICAgIHVzaW5nIEJhc2UgPSBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNZXJnZT47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBC
YXNlOjpCYXNlOwotCi0gICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci19OwotCi1ib29sIEZFTWVyZ2VT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZl
Y3RvciYgaW5wdXRFZmZlY3RzKQotewotICAgIEFTU0VSVChpbnB1dEVmZmVjdHMuc2l6ZSgpID4g
MCk7Ci0KLSAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvJiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLQotICAgIGZvciAo
YXV0byYgaW4gOiBpbnB1dEVmZmVjdHMpIHsKLSAgICAgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgICAgICBpZiAoIWluQnVmZmVyKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZl
ciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEZFTWVyZ2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4g
RkVNZXJnZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTWVyZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oCmluZGV4IDg4N2JhMGZkMzNmODkzMmNiZjQzMzgyNjhlN2FhYTQ4YWZhMmYwNDEuLjg0
NmIxNWNmYmFiYTIyOWVjZjVlMmYxNDBmOTg3ZDgzNjkxNzQ2NDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCkBAIC0yLDYgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDIxIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApp
bmRleCBkOTQ1MTgxNTY4ZjBhNmU3ZjBiNTdiNTM5YzUzOTQ5MjFkNzgxNjcyLi4xYTIyYjUwYWNj
ZDYwM2U1Njc1NWFhNjFlNmYwODBmNzRlYWJjYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC00
LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0yMDE4
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIEFwcGxlIEluYy4gMjAxNy0y
MDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEzICsy
NSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNb3JwaG9sb2d5LmgiCiAK
LSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJDb2xvclR5cGVzLmgiCiAj
aW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxp
ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTg0LDIwNyArNzksNiBAQCB2b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWlu
dFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0KIAotLy8gRklYTUU6IE1vdmUg
dGhlIGNsYXNzIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2Ug
YW5kIGhlYWRlciBmaWxlcy4KLWNsYXNzIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllciA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNb3JwaG9sb2d5PiB7Ci0gICAgdXNp
bmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRU1vcnBob2xvZ3k+OwotCi1w
dWJsaWM6Ci0gICAgdXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmls
dGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwot
Ci1wcml2YXRlOgotICAgIHVzaW5nIENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+LCAxNj47Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAg
ICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlOwotICAgICAgICBpbnQgcmFkaXVzWDsKLSAg
ICAgICAgaW50IHJhZGl1c1k7Ci0gICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQ
aXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKLSAg
ICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgIH07Ci0KLSAgICBzdHJ1
Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgY29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGlu
Z0RhdGE7Ci0gICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07Ci0K
LSAgICBzdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQg
d2lkdGgpIHsgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7IH0KLSAgICBzdGF0aWMgaW5saW5l
IFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25z
dCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpIHsgcmV0dXJuIFBhY2tl
ZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25l
bnRzKSB9OyB9Ci0KLSAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4
ZWwpIHsgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsgfQotICAgIHN0
YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKLSAgICBzdGF0aWMgaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQg
d2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOwotICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEm
IGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVBsYXRmb3JtR2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5k
WSk7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMq
KTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0IFBhaW50aW5nRGF0YSYpOwot
fTsKLQotaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXI6Om1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYg
YSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VS
T0RFKQotICAgICAgICByZXR1cm4gcGVyQ29tcG9uZW50TWluKGEsIGIpOwotCi0gICAgcmV0dXJu
IHBlckNvbXBvbmVudE1heChhLCBiKTsKLX0KLQotaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmNvbHVtbkV4dHJlbXVtKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50
IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGF1
dG8gZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29s
b3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJy
YXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKLQotICAg
IGZvciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8g
cGl4ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJH
QkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0
YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVt
ID0gbWluT3JNYXgoZXh0cmVtdW0sIHBpeGVsLCB0eXBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGV4
dHJlbXVtOwotfQotCi1pbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhv
bG9neVNvZnR3YXJlQXBwbGllcjo6a2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYg
a2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgYXV0byBleHRyZW11
bSA9IGtlcm5lbFswXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7
ICsraSkKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heChleHRyZW11bSwga2VybmVsW2ldLCB0
eXBlKTsKLQotICAgIHJldHVybiBleHRyZW11bTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKLXsKLSAgICBBU1NFUlQoZW5kWSA+IHN0
YXJ0WSk7Ci0KLSAgICBjb25zdCBhdXRvJiBzcmNQaXhlbEFycmF5ID0gKnBhaW50aW5nRGF0YS5z
cmNQaXhlbEFycmF5OwotICAgIGF1dG8mIGRzdFBpeGVsQXJyYXkgPSAqcGFpbnRpbmdEYXRhLmRz
dFBpeGVsQXJyYXk7Ci0KLSAgICBjb25zdCBpbnQgcmFkaXVzWCA9IHBhaW50aW5nRGF0YS5yYWRp
dXNYOwotICAgIGNvbnN0IGludCByYWRpdXNZID0gcGFpbnRpbmdEYXRhLnJhZGl1c1k7Ci0gICAg
Y29uc3QgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgIGNvbnN0IGludCBoZWln
aHQgPSBwYWludGluZ0RhdGEuaGVpZ2h0OwotCi0gICAgQVNTRVJUKHJhZGl1c1ggPD0gd2lkdGgg
fHwgcmFkaXVzWSA8PSBoZWlnaHQpOwotICAgIEFTU0VSVChzdGFydFkgPj0gMCAmJiBlbmRZIDw9
IGhlaWdodCAmJiBzdGFydFkgPCBlbmRZKTsKLQotICAgIENvbHVtbkV4dHJlbWEgZXh0cmVtYTsK
LSAgICBleHRyZW1hLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMiAqIHJhZGl1c1ggKyAxKTsKLQot
ICAgIGZvciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgaW50IHlS
YWRpdXNTdGFydCA9IHN0ZDo6bWF4KDAsIHkgLSByYWRpdXNZKTsKLSAgICAgICAgaW50IHlSYWRp
dXNFbmQgPSBzdGQ6Om1pbihoZWlnaHQsIHkgKyByYWRpdXNZICsgMSk7Ci0KLSAgICAgICAgZXh0
cmVtYS5zaHJpbmsoMCk7Ci0KLSAgICAgICAgLy8gV2Ugc3RhcnQgYXQgdGhlIGxlZnQgZWRnZSwg
c28gY29tcHV0ZSBleHRyZW1lIGZvciB0aGUgcmFkaXVzWCBjb2x1bW5zLgotICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHJhZGl1c1g7ICsreCkKLSAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5k
KGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0Vu
ZCwgd2lkdGgsIHBhaW50aW5nRGF0YS50eXBlKSk7Ci0KLSAgICAgICAgLy8gS2VybmVsIGlzIGZp
bGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KLSAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkK
LSAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFy
cmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRp
bmdEYXRhLnR5cGUpKTsKLQotICAgICAgICAgICAgaWYgKHggPiByYWRpdXNYKQotICAgICAgICAg
ICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwotCi0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBp
eGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsg
cGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0g
bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEs
IHBhaW50aW5nRGF0YS50eXBlKSkudmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKEFwcGx5UGFy
YW1ldGVycyogcGFyYW1zKQotewotICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKCpwYXJhbXMtPnBh
aW50aW5nRGF0YSwgcGFyYW1zLT5zdGFydFksIHBhcmFtcy0+ZW5kWSk7Ci19Ci0KLXZvaWQgRkVN
b3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhKQotewotICAgIC8vIEVtcGlyaWNhbGx5LCBydW50aW1lIGlzIGFwcHJv
eGltYXRlbHkgbGluZWFyIG92ZXIgcmVhc29uYWJsZSBrZXJuZWwgc2l6ZXMgd2l0aCBhIHNsb3Bl
IG9mIGFib3V0IDAuNjUuCi0gICAgZmxvYXQga2VybmVsRmFjdG9yID0gc3FydChwYWludGluZ0Rh
dGEucmFkaXVzWCAqIHBhaW50aW5nRGF0YS5yYWRpdXNZKSAqIDAuNjU7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbmltYWxBcmVhID0gKDE2MCAqIDE2MCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxp
bWl0IGZvciBwYXJhbGxlbCBqb2JzCi0gICAgCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9
IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1i
ZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0
YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwot
ICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8
QXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJmFwcGx5UGxhdGZvcm1Xb3JrZXIsIG9wdGlt
YWxUaHJlYWROdW1iZXIpOwotICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9IHBhcmFsbGVsSm9i
cy5udW1iZXJPZkpvYnMoKTsKLSAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+IDEpIHsKLSAgICAg
ICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQgam9icyBidXQgdGhl
cmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2VyIHNpbmNlCi0gICAg
ICAgICAgICAvLyBqb2JTaXplICogam9icyA8IHRvdGFsIHNpemUuIFRoZXNlIGV4dHJhcyBhcmUg
aGFuZGxlZCBieSB0aGUgcmVtYWluZGVyICJqb2JzV2l0aEV4dHJhIi4KLSAgICAgICAgICAgIGlu
dCBqb2JTaXplID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIG51bU9mVGhyZWFkczsKLSAgICAgICAg
ICAgIGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFk
czsKLSAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBq
b2IgPSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAg
ICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwot
ICAgICAgICAgICAgICAgIHBhcmFtLnN0YXJ0WSA9IGN1cnJlbnRZOwotICAgICAgICAgICAgICAg
IGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBqb2JTaXplICsgMSA6IGpvYlNpemU7
Ci0gICAgICAgICAgICAgICAgcGFyYW0uZW5kWSA9IGN1cnJlbnRZOwotICAgICAgICAgICAgICAg
IHBhcmFtLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQgbW9kZWwKLSAgICB9
Ci0KLSAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0
YS5oZWlnaHQpOwotfQotCi1ib29sIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHko
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZl
Y3RzKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7Ci0K
LSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJl
c3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKLSAgICBpZiAoIWRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZWZm
ZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgYXV0byBpc0Rl
Z2VuZXJhdGUgPSBbXShpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpIC0+IGJvb2wgewotICAgICAg
ICByZXR1cm4gcmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRp
dXNZKTsKLSAgICB9OwotCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0
LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgSW50U2l6ZSByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9lZmZl
Y3QucmFkaXVzWCgpLCBtX2VmZmVjdC5yYWRpdXNZKCkpKTsKLQotICAgIGlmIChpc0RlZ2VuZXJh
dGUocmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpIHsKLSAgICAgICAgaW4tPmNvcHlQ
aXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1Jl
Y3QpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByYWRpdXMgPSBmbG9vcmVk
SW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnJhZGl1c1goKSwg
bV9lZmZlY3QucmFkaXVzWSgpIH0pKTsKLSAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVj
dERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7Ci0gICAgaW50IHJhZGl1
c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWln
aHQoKSk7Ci0KLSAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1c1gsIHJhZGl1c1kpKSB7Ci0gICAg
ICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVm
ZmVjdERyYXdpbmdSZWN0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYXV0
byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3REcmF3aW5nUmVjdCwgbV9lZmZlY3Qu
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gc291cmNl
UGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRp
bmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS50eXBlID0gbV9lZmZlY3QubW9ycGhvbG9neU9wZXJh
dG9yKCk7Ci0gICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSAmc291cmNlUGl4ZWxBcnJh
eTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJy
YXk7Ci0gICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lk
dGgoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0
LmhlaWdodCgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOwot
ICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVzWSk7Ci0KLSAgICBhcHBseVBs
YXRmb3JtKHBhaW50aW5nRGF0YSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVNb3Jw
aG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAg
ICAgcmV0dXJuIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVy
LCBpbnB1dEVmZmVjdHMoKSk7CkBAIC0yOTMsMTMgKzg3LDEzIEBAIGJvb2wgRkVNb3JwaG9sb2d5
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSYgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9VTktOT1dOOgorICAgIGNhc2UgTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6
VW5rbm93bjoKICAgICAgICAgdHMgPDwgIlVOS05PV04iOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERToKKyAgICBjYXNlIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGU6OkVyb2RlOgogICAgICAgICB0cyA8PCAiRVJPREUiOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU6CisgICAgY2FzZSBNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlOjpEaWxhdGU6CiAgICAgICAgIHRzIDw8ICJESUxBVEUiOwogICAgICAg
ICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAppbmRleCA1ODk1MDJhNmY1YmM2ZDIwYjhlMTll
YTlmZjU3Y2E3ODkyNWQ4MjY0Li43MTkzOTk4Zjg5ZTQ3OWViYThlMGEzMDc0MmQ2ODk2ZGExOTEz
MTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5LmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMjEgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjUsMTAgKzI2LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKLSAgICBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfVU5LTk9XTiA9IDAsCi0gICAgRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFID0gMSwKLSAg
ICBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFID0gMgorZW51bSBjbGFzcyBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlIHsKKyAgICBVbmtub3duLAorICAgIEVyb2RlLAorICAgIERpbGF0ZQogfTsK
IAogY2xhc3MgRkVNb3JwaG9sb2d5IDogcHVibGljIEZpbHRlckVmZmVjdCB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmlu
ZGV4IDFkYTkyNzcwZTZjMmQyNjVhMWZlODU3MTc4YjVlOGU3ZjU2MzZhNTQuLjUyYzliOWMzYmU4
ZjJiYjgxN2M1MTMxNTkyODMzOWEzZDE5ZjhkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC00LDYgKzQsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsOSArMjYsNyBAQAogI2luY2x1ZGUg
IkZFT2Zmc2V0LmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3RBcHBsaWVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKKyNpbmNsdWRlICJGRU9mZnNldFNvZnR3YXJlQXBwbGllci5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUs
MzQgKzY0LDYgQEAgdm9pZCBGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChwYWludFJlY3QpKTsKIH0KIAotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFT2Zmc2V0
U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xh
c3MgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVB
cHBsaWVyPEZFT2Zmc2V0PiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRl
QXBwbGllcjxGRU9mZnNldD47Ci0KLXB1YmxpYzoKLSAgICB1c2luZyBCYXNlOjpCYXNlOwotCi0g
ICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlu
cHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci19OwotCi1ib29sIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5n
ZXQoKTsKLQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0KLSAgICBG
bG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGRyYXdpbmdSZWdpb24ubW92ZShmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LmR4KCksIG1fZWZmZWN0LmR5KCkgfSkp
OwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwg
ZHJhd2luZ1JlZ2lvbik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBGRU9mZnNldDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVy
biBGRU9mZnNldFNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVj
dHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmgKaW5kZXggMTZmNjBlOTZiNDIzODczYTM0MWMyZjI2NDVhODAyNjljYTg3Y2Y1
Ny4uN2ZmYzU1MjM1NWVjMjJlYzBkNTFmMjNiYTA4ODgwNjUwZWVhYzM2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAt
Miw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwCmluZGV4IDdmYmZkODFhNjA4YjY1ZGQ3MTE3NGEzYjYzMWQzYTQz
MzRlZWY4NmQuLmZjNTYwNmJiNTQ2ZTQ5NGE5N2EzNTFhYTE1ZTU1ODM2OWE4Nzg0ZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCmluZGV4IGFjNDUw
ZGJkYjYwY2Q2OTdjZDhkZmMzYzc5MzE4ZGJmNjRhZDUzMzUuLjVjN2U4MWNlMzA0NzIxYWU4MWIx
NDM2NDRiNzYzODliNzMxOTkzM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaApAQCAtMiw2
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDQz
OTA0OGY1YmQxZTE5NzU3ZDkxN2ZhYjI1ZmRhNzM2YjE3ZDU3NzYuLjI0OWNiODcyZTdhMTk4Mjcz
NTQ1OGI2Y2IzNTRiZjQ2MTg2MDBkMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFp
bC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsMTQgKzIyLDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJGRVRpbGUuaCIKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgotI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIK
KyNpbmNsdWRlICJGRVRpbGVTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIK
LSNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29u
dGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDMsNjEgKzM4LDYgQEAgRkVUaWxlOjpGRVRpbGUoKQogewogfQogCi0vLyBG
SVhNRTogTW92ZSB0aGUgY2xhc3MgRkVUaWxlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNv
dXJjZSBhbmQgaGVhZGVyIGZpbGVzLgotY2xhc3MgRkVUaWxlU29mdHdhcmVBcHBsaWVyIDogcHVi
bGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVRpbGU+IHsKLSAgICB1c2luZyBCYXNl
ID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVGlsZT47Ci0KLXB1YmxpYzoKLSAgICB1
c2luZyBCYXNlOjpCYXNlOwotCi0gICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Ci19OwotCi1ib29sIEZF
VGlsZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQotewotICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7Ci0KLSAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZl
Y3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBo
YUltYWdlKCkpOwotCi0gICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJ
dCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8g
c2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUg
c3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9
IGluLT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9u
ID0gdGlsZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9u
ID0gbV9lZmZlY3QubWF4RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgaWYgKGluLT5maWx0
ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljIHx8IGluLT5maWx0
ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkgewotICAgICAgICB0
aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICAgICAgdGlsZVJlY3Quc2NhbGUo
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSk7Ci0g
ICAgaWYgKCF0aWxlSW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+Y29udGV4dCgpOwotICAgIHRp
bGVJbWFnZUNvbnRleHQudHJhbnNsYXRlKC1pbk1heEVmZmVjdExvY2F0aW9uLngoKSwgLWluTWF4
RWZmZWN0TG9jYXRpb24ueSgpKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW5CdWZmZXIsIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCkpOwotCi0gICAg
YXV0byB0aWxlSW1hZ2VDb3B5ID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RG
TW92ZSh0aWxlSW1hZ2UpKTsKLSAgICBpZiAoIXRpbGVJbWFnZUNvcHkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHBh
dHRlcm5UcmFuc2Zvcm0udHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RM
b2NhdGlvbik7Ci0KLSAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdl
Q29weS5yZWxlYXNlTm9uTnVsbCgpLCB7IHRydWUsIHRydWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpOwotICAgIGZpbHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJu
KSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBt
X2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGJvb2wgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiB7CiAgICAgcmV0dXJuIEZFVGlsZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHko
ZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAppbmRleCA0MjZlZDdkODFkYmFmNDI2ZDY5MzdhOTc2
MDRiNDhlOTA1MDQ1ZGIyLi43MTdiNWMyZmE5OTllZWQwNzQ1MjIyNzY0NWZiYjkzYTZhZjg3MTJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmNwcAppbmRleCAzYjQ3YTE5NTc5YTg1ZmY5NGRkMWYyZGZhODEwZmQ3NWQ4
MzZmZDg5Li4zMjIzYWY3OWQ1OWY2MzJkNzZkNzk2M2I2NDFjNWYzN2ViNDczZTBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuY3BwCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBI
b2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KICAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJv
ciBMb2tpIDxsb2tpQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBs
ZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwxMSArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCi0jaW5jbHVkZSAiRmls
dGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFy
YWxsZWxKb2JzLmg+CisjaW5jbHVkZSAiRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC05OSw0MjAgKzk1LDYgQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wg
c3RpdGNoKQogICAgIHJldHVybiB0cnVlOwogfQogCi0vLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxh
dGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNW
RyAxLjEgc3BlY2lmaWNhdGlvbjoKLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRl
cnMuaHRtbCNmZVR1cmJ1bGVuY2UKLQotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFVHVyYnVs
ZW5jZVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4K
LWNsYXNzIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RD
b25jcmV0ZUFwcGxpZXI8RkVUdXJidWxlbmNlPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVm
ZmVjdENvbmNyZXRlQXBwbGllcjxGRVR1cmJ1bGVuY2U+OwotCi1wdWJsaWM6Ci0gICAgdXNpbmcg
QmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIC8v
IFByb2R1Y2VzIHJlc3VsdHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0g
aXM6Ci0gICAgLy8gciA9IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHNfcmFuZEFtcGxpdHVkZSA9
IDE2ODA3IGFuZAotICAgIC8vIG0gPSBzX3JhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4
MzY0NywgciA9IHNlZWQuCi0gICAgLy8gU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMx
IG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICAvLyBUbyB0ZXN0OiB0aGUgYWxnb3JpdGht
IHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQotICAgIC8vIGFzIHRoZSAxMCww
MDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0gICAgc3Rh
dGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLSAgICBzdGF0aWMgY29uc3QgbG9u
ZyBzX3JhbmRNYXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCi0gICAgc3RhdGljIGNv
bnN0IGludCBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qg
b2YgbQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLSAg
ICBzdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUgYQotCi0gICAgc3RhdGlj
IGNvbnN0IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxv
Y2tNYXNrID0gc19ibG9ja1NpemUgLSAxOwotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0g
ICAgICAgIC8vIENvbXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi0gICAgICAgIGxvbmcgcmFu
ZG9tKCkKLSAgICAgICAgewotICAgICAgICAgICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1
ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7Ci0gICAg
ICAgICAgICBpZiAocmVzdWx0IDw9IDApCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNfcmFu
ZE1heGltdW07Ci0gICAgICAgICAgICBzZWVkID0gcmVzdWx0OwotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGU7Ci0gICAg
ICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsK
LSAgICAgICAgaW50IG51bU9jdGF2ZXM7Ci0gICAgICAgIGxvbmcgc2VlZDsKLSAgICAgICAgYm9v
bCBzdGl0Y2hUaWxlczsKLSAgICAgICAgSW50U2l6ZSBwYWludGluZ1NpemU7Ci0KLSAgICAgICAg
aW50IGxhdHRpY2VTZWxlY3RvclsyICogc19ibG9ja1NpemUgKyAyXTsKLSAgICAgICAgZmxvYXQg
Z3JhZGllbnRbNF1bMiAqIHNfYmxvY2tTaXplICsgMl1bMl07Ci0gICAgfTsKLQotICAgIHN0cnVj
dCBTdGl0Y2hEYXRhIHsKLSAgICAgICAgaW50IHdpZHRoIHsgMCB9OyAvLyBIb3cgbXVjaCB0byBz
dWJ0cmFjdCB0byB3cmFwIGZvciBzdGl0Y2hpbmcuCi0gICAgICAgIGludCB3cmFwWCB7IDAgfTsg
Ly8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgotICAgICAgICBpbnQgaGVpZ2h0IHsgMCB9OwotICAg
ICAgICBpbnQgd3JhcFkgeyAwIH07Ci0gICAgfTsKLQotICAgIHN0cnVjdCBBcHBseVBhcmFtZXRl
cnMgewotICAgICAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKLSAgICAgICAgRmxvYXRTaXplIGZp
bHRlclNjYWxlOwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKLSAgICAg
ICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgICAgIFN0aXRjaERhdGEgc3RpdGNo
RGF0YTsKLSAgICAgICAgaW50IHN0YXJ0WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgfTsKLQot
ICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQgdCkgeyByZXR1cm4gdCAq
IHQgKiAoMyAtIDIgKiB0KTsgfQotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgbGluZWFySW50ZXJw
b2xhdGlvbihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKSB7IHJldHVybiBhICsgdCAqIChiIC0g
YSk7IH0KLQotICAgIHN0YXRpYyBQYWludGluZ0RhdGEgaW5pdFBhaW50aW5nRGF0YShUdXJidWxl
bmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQg
bnVtT2N0YXZlcywgbG9uZyBzZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBw
YWludGluZ1NpemUpOwotICAgIHN0YXRpYyBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50
U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5j
eVksIGJvb2wgc3RpdGNoVGlsZXMpOwotCi0gICAgc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9h
dCwgND4gbm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29u
c3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpOwotICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVu
dHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpOwotICAgIHN0YXRpYyBDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFp
bnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpOwotCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBj
b25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJh
eSwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkp
OwotICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdp
b24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhl
bEFycmF5LCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhJik7Ci19OwotCi1GRVR1cmJ1bGVuY2VT
b2Z0d2FyZUFwcGxpZXI6OlBhaW50aW5nRGF0YSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6
OmluaXRQYWludGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVkLCBib29s
IHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpCi17Ci0gICAgUGFpbnRp
bmdEYXRhIHBhaW50aW5nRGF0YSB7IHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5
WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMsIHBhaW50aW5nU2l6ZSwgeyB9LCB7IH0g
fTsKLQotICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgc19yYW5k
TWF4aW11bSAtIDFdLgotICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQotICAgICAgICBw
YWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5kTWF4aW11bSAt
IDEpKSArIDE7Ci0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4aW11bSAtIDEp
Ci0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7Ci0KLSAgICBm
bG9hdCogZ3JhZGllbnQ7Ci0gICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyAr
K2NoYW5uZWwpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gaTsKLSAg
ICAgICAgICAgIGdyYWRpZW50ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldOwot
ICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBz
X2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAgICAgICAgICAgICAgICBncmFkaWVudFsxXSA9
IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2Nr
U2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICB9IHdoaWxl
ICghZ3JhZGllbnRbMF0gJiYgIWdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIGZsb2F0IG5vcm1h
bGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7Ci0g
ICAgICAgICAgICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwotICAgICAgICAg
ICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGZvciAoaW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKLSAgICAg
ICAgaW50IGsgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwotICAgICAgICBpbnQg
aiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIHNfYmxvY2tTaXplOwotICAgICAgICBBU1NFUlQo
aiA+PSAwKTsKLSAgICAgICAgQVNTRVJUKGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKLSAgICAg
ICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3Jbal07Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0gPSBr
OwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyArK2kp
IHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSArIGld
ID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKLSAgICAgICAgZm9yIChpbnQgY2hh
bm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAgIHBhaW50aW5n
RGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFpbnRpbmdEYXRh
LmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOwotICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1baV1bMV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcGFpbnRpbmdE
YXRhOwotfQotCi1GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OlN0aXRjaERhdGEgRkVUdXJi
dWxlbmNlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUs
IGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBib29sIHN0aXRj
aFRpbGVzKQotewotICAgIGlmICghc3RpdGNoVGlsZXMpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHRpbGVI
ZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsKLSAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAmJiB0
aWxlSGVpZ2h0ID4gMCk7Ci0KLSAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNl
LCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAotICAgIC8vIHNvIHRoYXQgdGhlIHRp
bGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCi0gICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7
Ci0gICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNlRnJl
cXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWls
Zih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7Ci0gICAgICAgIC8vIEJh
c2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5k
YXJkLgotICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJl
cXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxv
d0ZyZXF1ZW5jeTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBo
aWdoRnJlcXVlbmN5OwotICAgIH0KLSAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsKLSAgICAgICAg
ZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkg
LyB0aWxlSGVpZ2h0OwotICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGlsZUhl
aWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Ci0gICAgICAgIGlmIChiYXNlRnJl
cXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkK
LSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5OwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7Ci0gICAgfQotCi0g
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYo
dGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Bl
cmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKLSAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJv
dW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkg
PSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gc3RpdGNo
RGF0YTsKLX0KLQotLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6bm9pc2Uy
RChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYgc3Rp
dGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCi17Ci0gICAgc3RydWN0IE5v
aXNlUG9zaXRpb24gewotICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBzcGVj
IHRleHQuCi0gICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRoZSBzcGVjIHRl
eHQuCi0gICAgICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUgc3BlYyB0ZXh0
LgotCi0gICAgICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29tcG9uZW50KQotICAgICAgICB7Ci0g
ICAgICAgICAgICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47Ci0gICAgICAgICAgICAvLyAgYngw
ID0gKGludCl0OwotICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOwotICAgICAgICAgICAgLy8g
IHJ4MCA9IHQgLSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVu
dCArIHNfcGVybGluTm9pc2U7Ci0gICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PGludD4o
cG9zaXRpb24pOwotICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOwotICAgICAgICAg
ICAgZnJhY3Rpb24gPSBwb3NpdGlvbiAtIGluZGV4OwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICB2b2lkIHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBTaXplKQotICAgICAgICB7Ci0gICAg
ICAgICAgICAvLyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCi0gICAgICAgICAgICAv
LyAgIGJ4MCAtPSBwU3RpdGNoSW5mby0+bldpZHRoOwotICAgICAgICAgICAgaWYgKGluZGV4ID49
IHdyYXBTaXplKQotICAgICAgICAgICAgICAgIGluZGV4IC09IHNpemU7Ci0KLSAgICAgICAgICAg
IC8vIGlmIChieDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKLSAgICAgICAgICAgIC8vICAgYngx
IC09IHBTdGl0Y2hJbmZvLT5uV2lkdGg7Ci0gICAgICAgICAgICBpZiAobmV4dEluZGV4ID49IHdy
YXBTaXplKQotICAgICAgICAgICAgICAgIG5leHRJbmRleCAtPSBzaXplOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7Ci0gICAg
Tm9pc2VQb3NpdGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKLQotICAgIC8vIElmIHN0aXRj
aGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChwYWludGlu
Z0RhdGEuc3RpdGNoVGlsZXMpIHsKLSAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRhLndp
ZHRoLCBzdGl0Y2hEYXRhLndyYXBYKTsKLSAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hEYXRh
LmhlaWdodCwgc3RpdGNoRGF0YS53cmFwWSk7Ci0gICAgfQotCi0gICAgLy8gYngwICY9IEJNOwot
ICAgIC8vIGJ4MSAmPSBCTTsKLSAgICAvLyBieTAgJj0gQk07Ci0gICAgLy8gYnkxICY9IEJNOwot
ICAgIG5vaXNlWC5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVgubmV4dEluZGV4ICY9
IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lz
ZVkubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOwotCi0gICAgLy8gaSA9IHVMYXR0aWNlU2VsZWN0
b3JbYngwXTsKLSAgICAvLyBqID0gdUxhdHRpY2VTZWxlY3RvcltieDFdOwotICAgIGludCBsYXR0
aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5pbmRleF07Ci0g
ICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25v
aXNlWC5uZXh0SW5kZXhdOwotCi0gICAgLy8gc3ggPSBkb3VibGUoc19jdXJ2ZShyeDApKTsKLSAg
ICAvLyBzeSA9IGRvdWJsZShzX2N1cnZlKHJ5MCkpOwotICAgIGZsb2F0IHN4ID0gc21vb3RoQ3Vy
dmUobm9pc2VYLmZyYWN0aW9uKTsKLSAgICBmbG9hdCBzeSA9IHNtb290aEN1cnZlKG5vaXNlWS5m
cmFjdGlvbik7Ci0KLSAgICBhdXRvIG5vaXNlRm9yQ2hhbm5lbCA9IFsmXShpbnQgY2hhbm5lbCkg
ewotICAgICAgICAvLyBiMDAgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBieTBdCi0gICAgICAgIGlu
dCBiMDAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNl
WS5pbmRleF07Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAwXTsg
dSA9IHJ4MCAqIHFbMF0gKyByeTAgKiBxWzFdOwotICAgICAgICBjb25zdCBmbG9hdCogcSA9IHBh
aW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDBdOwotICAgICAgICBmbG9hdCB1ID0gbm9p
c2VYLmZyYWN0aW9uICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07Ci0KLSAgICAgICAg
Ly8gYjEwID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkwXTsKLSAgICAgICAgaW50IGIxMCA9IHBh
aW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5pbmRl
eF07Ci0gICAgICAgIC8vIHJ4MSA9IHJ4MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3JhZGll
bnRbbkNvbG9yQ2hhbm5lbF1bYjEwXTsgdiA9IHJ4MSAqIHFbMF0gKyByeTAgKiBxWzFdOwotICAg
ICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IxMF07Ci0gICAgICAgIGZs
b2F0IHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9uICog
cVsxXTsKLSAgICAgICAgLy8gYSA9IGxlcnAoc3gsIHUsIHYpOwotICAgICAgICBmbG9hdCBhID0g
bGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7Ci0KLSAgICAgICAgLy8gYjAxID0gdUxhdHRp
Y2VTZWxlY3RvcltpICsgYnkxXTsKLSAgICAgICAgaW50IGIwMSA9IHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRleF07Ci0gICAgICAgIC8v
IHJ5MSA9IHJ5MCAtIDEuMGY7Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5l
bF1bYjAxXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRp
bmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IwMV07Ci0gICAgICAgIHUgPSBub2lzZVguZnJhY3Rp
b24gKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKLQotICAgICAgICAvLyBi
MTEgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBieTFdOwotICAgICAgICBpbnQgYjExID0gcGFpbnRp
bmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRl
eF07Ci0gICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjExXTsgdiA9IHJ4
MSAqIHFbMF0gKyByeTEgKiBxWzFdOwotICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50
W2NoYW5uZWxdW2IxMV07Ci0gICAgICAgIHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBd
ICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKLSAgICAgICAgLy8gYiA9IGxlcnAoc3gs
IHUsIHYpOwotICAgICAgICBmbG9hdCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7
Ci0KLSAgICAgICAgLy8gcmV0dXJuIGxlcnAoc3ksIGEsIGIpOwotICAgICAgICByZXR1cm4gbGlu
ZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7Ci0gICAgfTsKLQotICAgIHJldHVybiB7Ci0gICAg
ICAgIG5vaXNlRm9yQ2hhbm5lbCgwKSwKLSAgICAgICAgbm9pc2VGb3JDaGFubmVsKDEpLAotICAg
ICAgICBub2lzZUZvckNoYW5uZWwoMiksCi0gICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgzKQotICAg
IH07Ci19Ci0KLS8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlVHVy
YnVsZW5jZUVsZW1lbnQgZGVzY3JpYmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xvciBjb21wb25l
bnRzLgotLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JHQkE8dWludDg+
PihTUkdCQTxmbG9hdD4pIHRvIGdldCB0aGUgc2FtZSBiZWhhdmlvci4KLUNvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OnRvSW50QmFzZWRDb2xv
ckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25l
bnRzKQotewotICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGlj
X2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMF0gKiAyNTUpLCAwLCAyNTUpLAotICAgICAgICBz
dGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzFdICog
MjU1KSwgMCwgMjU1KSwKLSAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxp
bnQ+KGZsb2F0Q29tcG9uZW50c1syXSAqIDI1NSksIDAsIDI1NSksCi0gICAgICAgIHN0ZDo6Y2xh
bXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbM10gKiAyNTUpLCAw
LCAyNTUpLAotICAgIH07Ci19Ci0KLUNvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNv
bnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4g
dHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0OwotICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9p
bnQueCgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWludGlu
Z0RhdGEuYmFzZUZyZXF1ZW5jeVkpOwotICAgIGZsb2F0IHJhdGlvID0gMTsKLSAgICBmb3IgKGlu
dCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBwYWludGluZ0RhdGEubnVtT2N0YXZlczsgKytvY3RhdmUp
IHsKLSAgICAgICAgaWYgKHBhaW50aW5nRGF0YS50eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFj
dGFsTm9pc2UpCi0gICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2Uy
RChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChw
YWludGluZ0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJhdGlvOwotCi0g
ICAgICAgIG5vaXNlVmVjdG9yLnNldFgobm9pc2VWZWN0b3IueCgpICogMik7Ci0gICAgICAgIG5v
aXNlVmVjdG9yLnNldFkobm9pc2VWZWN0b3IueSgpICogMik7Ci0gICAgICAgIHJhdGlvICo9IDI7
Ci0KLSAgICAgICAgaWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAg
Ly8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2UgYmVmb3Jl
IHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQKLSAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndh
cmQgc2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgotICAgICAgICAgICAgc3RpdGNo
RGF0YS53aWR0aCAqPSAyOwotICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0
Y2hEYXRhLndyYXBYIC0gc19wZXJsaW5Ob2lzZTsKLSAgICAgICAgICAgIHN0aXRjaERhdGEuaGVp
Z2h0ICo9IDI7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0aXRjaERhdGEu
d3JhcFkgLSBzX3Blcmxpbk5vaXNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHZh
bHVlIG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0ICogMjU1KSArIDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQotICAgIC8vIGFu
ZCAodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgotICAgIGlm
IChwYWludGluZ0RhdGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQotICAg
ICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQg
KiAwLjVmICsgMC41ZjsKLQotICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24s
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFy
cmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hE
YXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKLXsKLSAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7
Ci0KLSAgICBGbG9hdFBvaW50IHBvaW50KDAsIGZpbHRlclJlZ2lvbi55KCkgKyBzdGFydFkpOwot
ICAgIGludCBpbmRleE9mUGl4ZWxDaGFubmVsID0gc3RhcnRZICogKGZpbHRlclJlZ2lvbi53aWR0
aCgpIDw8IDIpOwotICAgIEZsb2F0U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBmaWx0ZXJTY2Fs
ZS53aWR0aCgpLCAxIC8gZmlsdGVyU2NhbGUuaGVpZ2h0KCkgfTsKLQotICAgIGZvciAoaW50IHkg
PSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKLSAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkg
KyAxKTsKLSAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAg
ICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2Nh
bFBvaW50ID0gcG9pbnQuc2NhbGVkKGludmVyc2VTY2FsZS53aWR0aCgpLCBpbnZlcnNlU2NhbGUu
aGVpZ2h0KCkpOwotICAgICAgICAgICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNl
VmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwotICAg
ICAgICAgICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQs
IGluZGV4T2ZQaXhlbENoYW5uZWwpOwotICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCAr
PSA0OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCi17
Ci0gICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9uLCBwYXJh
bWV0ZXJzLT5maWx0ZXJTY2FsZSwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJz
LT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0
WSwgcGFyYW1ldGVycy0+ZW5kWSk7Ci19Ci0KLXZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxv
YXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhKQotewotICAgIGlu
dCBoZWlnaHQgPSBmaWx0ZXJSZWdpb24uaGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQgYXJlYSA9IGZp
bHRlclJlZ2lvbi5hcmVhKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxSZWN0RGlt
ZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxl
bCBqb2JzLgotICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBmaWx0ZXJSZWdpb24uaGVpZ2h0
KCkgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNp
Z25lZD4oYXJlYSAvIG1pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKLQotICAg
IGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8QXBw
bHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJmFwcGx5UGxhdGZvcm1Xb3JrZXIsIG9wdGltYWxU
aHJlYWROdW1iZXIpOwotCi0gICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQotICAg
ICAgICBhdXRvIG51bUpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7Ci0gICAgICAg
IGlmIChudW1Kb2JzID4gMSkgewotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJz
dGVwWSItc2l6ZWQgam9icywgZGlzdHJpYnV0aW5nIHRoZSBleHRyYSByb3dzIGludG8gdGhlIGZp
cnN0ICJqb2JzV2l0aEV4dHJhIiBqb2JzLgotICAgICAgICAgICAgdW5zaWduZWQgc3RlcFkgPSBo
ZWlnaHQgLyBudW1Kb2JzOwotICAgICAgICAgICAgdW5zaWduZWQgam9ic1dpdGhFeHRyYSA9IGhl
aWdodCAlIG51bUpvYnM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGFydFkgPSAwOwotCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSm9iczsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVy
KGkpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlclNjYWxlID0gZmlsdGVyU2NhbGU7Ci0gICAg
ICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmcGl4ZWxBcnJheTsKLSAgICAgICAgICAg
ICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7Ci0gICAgICAgICAgICAgICAgcGFyYW1z
LnN0YXJ0WSA9IHN0YXJ0WTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdodCA9
IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7Ci0gICAgICAgICAgICAg
ICAgc3RhcnRZICs9IGpvYkhlaWdodDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFy
YWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJlIGlz
IG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwu
Ci0gICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwgcGl4
ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOwotfQotCi1ib29s
IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpCi17Ci0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2VmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgaWYgKHJlc3VsdFNpemUuYXJlYSgpLmhh
c092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAg
aWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eS56ZXJvRmlsbCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhdXRvIHRp
bGVTaXplID0gcm91bmRlZEludFNpemUobV9lZmZlY3QuZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9lZmZlY3QuYmFzZUZy
ZXF1ZW5jeVgoKTsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fZWZmZWN0LmJhc2VGcmVx
dWVuY3lZKCk7Ci0gICAgYXV0byBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6
ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5zdGl0Y2hUaWxlcygp
KTsKLQotICAgIGF1dG8gcGFpbnRpbmdEYXRhID0gaW5pdFBhaW50aW5nRGF0YShtX2VmZmVjdC50
eXBlKCksIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbV9lZmZlY3QubnVtT2N0YXZl
cygpLCBtX2VmZmVjdC5zZWVkKCksIG1fZWZmZWN0LnN0aXRjaFRpbGVzKCksIHRpbGVTaXplKTsK
LQotICAgIGFwcGx5UGxhdGZvcm0obV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSwgZmlsdGVy
LmZpbHRlclNjYWxlKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0
Y2hEYXRhKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICByZXR1cm4gRkVU
dXJidWxlbmNlU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0
cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IDdjNDdjNzg3NDliODU2ZmM5ZjkxYWY4NGM2MTM0Y2Y0
N2RmMDZlMjQuLjk3M2ViMWQzZTljMDMwMTQ1YzRlY2FjOWMxZDMxZjM5YTljNTRmZjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuaApAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFu
IDxyZW5pQGluZi51LXN6ZWdlZC5odT4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdEFwcGxpZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oCmluZGV4
IDQ3ZTE0MjUxYzU2MmU5NjdmZmI5YWI3MWVjM2FmYTcwZGNiOWMyYjEuLmY3YTU4ZDBmODExZDJj
NjcxMjczOWUxMzAxZTQzM2NiNTUwMjRkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5o
CkBAIC0yNSw4ICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdFZlY3Rvci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZpbHRlcjsKKwog
Y2xhc3MgRmlsdGVyRWZmZWN0QXBwbGllciB7CiBwdWJsaWM6CiAgICAgRmlsdGVyRWZmZWN0QXBw
bGllcigpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggODIwMmZiOTQ4YTk2ZDcwM2U1
ODViNDljOTJlMjUzNDRiMDNiYWE1OC4uMDE4YjU3NjU3MjMwYzNjOWI0NDJkZDI4MWRhMGU5ZmYy
ZTkyZTYwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIwLDEwICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U291cmNlQWxwaGEuaCIKIAotI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Niwz
NyArNDUsNiBAQCB2b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChj
b25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVj
dCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFz
cyBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRl
ciBmaWxlcy4KLWNsYXNzIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRl
ckVmZmVjdENvbmNyZXRlQXBwbGllcjxTb3VyY2VBbHBoYT4gewotICAgIHVzaW5nIEJhc2UgPSBG
aWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlQWxwaGE+OwotCi1wdWJsaWM6Ci0gICAg
dXNpbmcgQmFzZTo6QmFzZTsKLQotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3Qg
RmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwotfTsKLQotYm9vbCBT
b3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKLQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVj
dC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVy
UmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQg
PSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotCi0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChp
bWFnZVJlY3QsIENvbG9yOjpibGFjayk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRp
b25Jbik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBTb3VyY2VBbHBoYTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIHJldHVybiBTb3Vy
Y2VBbHBoYVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmgKaW5kZXggMGE4Y2ZmZDc2NDIwZGU3YTFhN2U0YzA1OTNkNDc2YTE0Y2Zh
MTA3NS4uZWNmYmYxMjIzMzNiYjMwYjZlNTY0NTU4MGRjMDhiOGZkNTFmMjFlYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxw
aGEuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5j
cHAKaW5kZXggN2IyNjNkZGUwOTdjNTkwZDdmNWQ0YzQ5ZjQ2NGQ1NzY1ZTY3NDU4MC4uMzQ5ZGEw
ZGI5ZjhkNGM2YTljZjk0YWJlMDliZWE4YWM3OGFiMmMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3Bw
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw4ICsyMiw3IEBACiAj
aW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIlNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQzLDI3ICs0Myw2
IEBAIHZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVj
dChwYWludFJlY3QpKTsKIH0KIAotLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIFNvdXJjZUdyYXBo
aWNTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCi1j
bGFzcyBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENv
bmNyZXRlQXBwbGllcjxTb3VyY2VHcmFwaGljPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEZpbHRlckVm
ZmVjdENvbmNyZXRlQXBwbGllcjxTb3VyY2VHcmFwaGljPjsKLQotcHVibGljOgotICAgIHVzaW5n
IEJhc2U6OkJhc2U7Ci0KLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKLX07Ci0KLWJvb2wgU291cmNl
R3JhcGhpY1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IEZpbHRlckVmZmVjdFZlY3RvciYpCi17Ci0gICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0
LmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgYXV0byBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3Vy
Y2VJbWFnZSgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBi
b29sIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKIHsKICAgICByZXR1cm4gU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcigqdGhpcyku
YXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmluZGV4IDlmYmMy
MGE3NTFkMDc2NWYxNmMzNDVhODgwYWE2MmZiMjA2Yzg2NDEuLjUwZjQ3YTFiNjA3OTQxMWIxNzVl
YTE3YWJjZWViYjgzMGM3ODNhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCkBAIC0xLDYgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5i
b2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJlQXBwbGll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1MjNhMmIyOWMzODJlYTI5
MmY5YmJlYjQ0NWFiNjlhMTA1ZmQyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQmxlbmRTb2Z0d2FyZUFwcGxp
ZXIuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUJsZW5kU29mdHdhcmVB
cHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRUJsZW5kLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1Mp
Citib29sIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0
IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1
dEVmZmVjdHNbMV0uZ2V0KCk7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1h
Z2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7
CisgICAgYXV0byBpbWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
aWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpOworICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7CisgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBt
X2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0
b3I6OlNvdXJjZU92ZXIsIG1fZWZmZWN0LmJsZW5kTW9kZSgpIH0pOworICAgIHJldHVybiB0cnVl
OworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3
YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUJsZW5kU29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWFkYTg0MWMzMmJi
MGYyMzAwODgzYTlmZTJlZjMyOGQ3YWNiOTRmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVCbGVuZFNvZnR3YXJl
QXBwbGllci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFQmxlbmQ7CisKK2NsYXNzIEZFQmxlbmRTb2Z0
d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQmxlbmQ+
IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQmxlbmQ+
OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJy
aWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjdlYzBhMTE5ZjcyYTE2NWIwMTUxMzk5Yzg2MjYyZjk2M2JkYTY2NgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUNvbG9yTWF0cml4U29mdHdh
cmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNpZiBVU0UoQUNDRUxF
UkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OkZFQ29sb3JN
YXRyaXhTb2Z0d2FyZUFwcGxpZXIoRkVDb2xvck1hdHJpeCYgZWZmZWN0KQorICAgIDogQmFzZShl
ZmZlY3QpCit7CisgICAgaWYgKG1fZWZmZWN0LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVf
U0FUVVJBVEUpCisgICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9u
ZW50cyhtX2NvbXBvbmVudHMsIG1fZWZmZWN0LnZhbHVlcygpWzBdKTsKKyAgICBlbHNlIGlmICht
X2VmZmVjdC50eXBlKCkgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKKyAgICAgICAg
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMs
IG1fZWZmZWN0LnZhbHVlcygpWzBdKTsKK30KKworaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNv
ZnR3YXJlQXBwbGllcjo6bWF0cml4KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJs
dWUsIGZsb2F0JiBhbHBoYSkgY29uc3QKK3sKKyAgICBmbG9hdCByID0gcmVkOworICAgIGZsb2F0
IGcgPSBncmVlbjsKKyAgICBmbG9hdCBiID0gYmx1ZTsKKyAgICBmbG9hdCBhID0gYWxwaGE7CisK
KyAgICBjb25zdCBhdXRvJiB2YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKKworICAgIHJlZCAg
ID0gdmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFs
dWVzWyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1OworICAgIGdyZWVuID0gdmFsdWVzWyA1XSAq
IHIgKyB2YWx1ZXNbIDZdICogZyArIHZhbHVlc1sgN10gKiBiICsgdmFsdWVzWyA4XSAqIGEgKyB2
YWx1ZXNbIDldICogMjU1OworICAgIGJsdWUgID0gdmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFd
ICogZyArIHZhbHVlc1sxMl0gKiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1
OworICAgIGFscGhhID0gdmFsdWVzWzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVlc1sx
N10gKiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNbMTldICogMjU1OworfQorCitpbmxpbmUg
dm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShm
bG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlKSBjb25zdAoreworICAgIGZsb2F0
IHIgPSByZWQ7CisgICAgZmxvYXQgZyA9IGdyZWVuOworICAgIGZsb2F0IGIgPSBibHVlOworCisg
ICAgcmVkICAgICA9IHIgKiBtX2NvbXBvbmVudHNbMF0gKyBnICogbV9jb21wb25lbnRzWzFdICsg
YiAqIG1fY29tcG9uZW50c1syXTsKKyAgICBncmVlbiAgID0gciAqIG1fY29tcG9uZW50c1szXSAr
IGcgKiBtX2NvbXBvbmVudHNbNF0gKyBiICogbV9jb21wb25lbnRzWzVdOworICAgIGJsdWUgICAg
PSByICogbV9jb21wb25lbnRzWzZdICsgZyAqIG1fY29tcG9uZW50c1s3XSArIGIgKiBtX2NvbXBv
bmVudHNbOF07Cit9CisKKy8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSgu
Li4pIGZ1bmN0aW9uIGluIENvbG9yTHVtaW5hbmNlLmguCitpbmxpbmUgdm9pZCBGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBm
bG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdAoreworICAgIGFscGhhID0gMC4yMTI1ICog
cmVkICsgMC43MTU0ICogZ3JlZW4gKyAwLjA3MjEgKiBibHVlOworICAgIHJlZCA9IDA7CisgICAg
Z3JlZW4gPSAwOworICAgIGJsdWUgPSAwOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCit2b2lk
IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQ
aXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0Cit7CisgICAgYXV0byYgcGl4ZWxBcnJheSA9
IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICBhdXRvIGJ1ZmZlclNpemUgPSBwaXhlbEJ1ZmZlci5z
aXplKCk7CisKKyAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFy
ZWEoKSAqIDQpOworICAgIAorICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9IDI1NjsKKyAgICB1
aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNy
YzsKKyAgICBzcmMud2lkdGggPSBidWZmZXJTaXplLndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9
IGJ1ZmZlclNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0
aCgpICogNDsKKyAgICBzcmMuZGF0YSA9IGRhdGE7CisgICAgCisgICAgdkltYWdlX0J1ZmZlciBk
ZXN0OworICAgIGRlc3Qud2lkdGggPSBidWZmZXJTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWln
aHQgPSBidWZmZXJTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXpl
LndpZHRoKCkgKiA0OworICAgIGRlc3QuZGF0YSA9IGRhdGE7CisKKyAgICBzd2l0Y2ggKG1fZWZm
ZWN0LnR5cGUoKSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAg
ICAgIGNvbnN0IGF1dG8mIHZhbHVlcyA9IG1fZWZmZWN0LnZhbHVlcygpOworCisgICAgICAgIGNv
bnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEwXSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTVdICogZGl2aXNv
cikpLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAx
XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2
YWx1ZXNbIDZdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKHZhbHVlc1sxMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWzE2XSAqIGRpdmlzb3IpKSwKKworICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgMl0gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyA3XSAqIGRpdmlzb3IpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMTJdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sx
N10gKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zih2YWx1ZXNbIDNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKHZhbHVlc1sgOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWzEzXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbMThdICogZGl2aXNvcikpLAorICAgICAg
ICB9OworICAgICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwg
bWF0cml4LCBkaXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
OgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTogeworICAgICAgICBjb25z
dCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYobV9jb21wb25lbnRzWzBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbNl0gKiBk
aXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYobV9jb21wb25lbnRzWzFdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbN10gKiBk
aXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYobV9jb21wb25lbnRzWzJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbOF0gKiBk
aXZpc29yKSksCisgICAgICAgICAgICAwLAorCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBkaXZpc29yLAorICAgICAgICB9OworICAg
ICAgICB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWF0cml4LCBk
aXZpc29yLCBudWxscHRyLCBudWxscHRyLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOiB7
CisgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKKyAgICAgICAgICAgIDAs
CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3Q+KHJvdW5kZigwLjIxMjUgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZigwLjcxNTQgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZigwLjA3MjEgKiBkaXZpc29yKSksCisKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisgICAgICAgIH07CisgICAg
ICAgIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXRyaXgsIGRp
dmlzb3IsIG51bGxwdHIsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIH0KK30KKyNlbmRpZgorCit2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5UGxhdGZvcm1VbmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZl
cikgY29uc3QKK3sKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwor
ICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOworCisg
ICAgc3dpdGNoIChtX2VmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQ
RV9VTktOT1dOOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X01BVFJJWDoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhl
bEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewor
ICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7
CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAxKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQs
IHJlZCk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBn
cmVlbik7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBi
bHVlKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDMsIGFs
cGhhKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX1NBVFVSQVRFOgorICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZz
ZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgeworICAgICAgICAg
ICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAg
ICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsK
KyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMik7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAzKTsKKyAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3Jl
ZW4sIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0LCBy
ZWQpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMSwgZ3Jl
ZW4pOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1
ZSk7CisgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAzLCBhbHBo
YSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhf
VFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9m
ZnNldCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9m
ZnNldCArPSA0KSB7CisgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0KTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVt
KHBpeGVsQnl0ZU9mZnNldCArIDEpOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJy
YXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0g
cGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOworICAgICAgICAgICAgbHVtaW5h
bmNlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKKyAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVs
Qnl0ZU9mZnNldCArIDIsIGJsdWUpOworICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4ZWxC
eXRlT2Zmc2V0ICsgMywgYWxwaGEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKwordm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBp
eGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAg
ICBjb25zdCBhdXRvJiB2YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKKworICAgIC8vIHZJbWFn
ZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVl
IGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4CisgICAg
Ly8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgaWYgKG1f
ZWZmZWN0LnR5cGUoKSAhPSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYIHx8ICghdmFsdWVzWzRd
ICYmICF2YWx1ZXNbOV0gJiYgIXZhbHVlc1sxNF0gJiYgIXZhbHVlc1sxOV0pKSB7CisgICAgICAg
IGFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKyAgICBhcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChwaXhlbEJ1ZmZl
cik7Cit9CisKK2Jvb2wgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3Qg
RmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAg
YXV0byBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKworICAgIGF1dG8gcmVzdWx0SW1hZ2Ug
PSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKKyAgICBpZiAoaW5CdWZmZXIpCisgICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworCisgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQ
aXhlbEZvcm1hdDo6UkdCQTgsIG1fZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9OworICAgIElu
dFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2Fs
U2l6ZSgpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVm
ZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhf
VFlQRV9MVU1JTkFOQ0VUT0FMUEhBKQorICAgICAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2Uo
dHJ1ZSk7CisKKyAgICBhcHBseVBsYXRmb3JtKCpwaXhlbEJ1ZmZlcik7CisgICAgcmVzdWx0SW1h
Z2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzM5
NDg5ZTVhM2ZmY2ViZDMyZDlkOGI5ZmRjMDIwZjM5NWVlODdiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVDb2xvck1hdHJpeDsKKworY2xhc3MgRkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXI8RkVDb2xvck1hdHJpeD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0
ZUFwcGxpZXI8RkVDb2xvck1hdHJpeD47CisKK3B1YmxpYzoKKyAgICBGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyKEZFQ29sb3JNYXRyaXgmKTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmls
dGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIGlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYgZ3Jl
ZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpIGNvbnN0OworICAgIGlubGluZSB2b2lkIHNh
dHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUp
IGNvbnN0OworICAgIGlubGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3Jl
ZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJB
VEUpCisgICAgdm9pZCBhcHBseVBsYXRmb3JtQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25z
dDsKKyNlbmRpZgorICAgIHZvaWQgYXBwbHlQbGF0Zm9ybVVuYWNjZWxlcmF0ZWQoUGl4ZWxCdWZm
ZXImKSBjb25zdDsKKworICAgIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0
OworCisgICAgZmxvYXQgbV9jb21wb25lbnRzWzldOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGU0NDJhZGVmNDk5MDYxMTk3
MzllMGUzZTVmNDVlMGI2ZDE5OGEzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNv
ZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5z
ZmVyU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRUNvbXBvbmVudFRyYW5zZmVyLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5VGFi
bGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKK3sKK30K
Kwordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlVGFidWxh
clRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVW
YWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOworICAgIHVuc2lnbmVkIG4gPSB0
YWJsZVZhbHVlcy5zaXplKCk7CisgICAgaWYgKG4gPCAxKQorICAgICAgICByZXR1cm47CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICBk
b3VibGUgYyA9IGkgLyAyNTUuMDsKKyAgICAgICAgdW5zaWduZWQgayA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjICogKG4gLSAxKSk7CisgICAgICAgIGRvdWJsZSB2MSA9IHRhYmxlVmFsdWVzW2td
OworICAgICAgICBkb3VibGUgdjIgPSB0YWJsZVZhbHVlc1tzdGQ6Om1pbigoayArIDEpLCAobiAt
IDEpKV07CisgICAgICAgIGRvdWJsZSB2YWwgPSAyNTUuMCAqICh2MSArIChjICogKG4gLSAxKSAt
IGspICogKHYyIC0gdjEpKTsKKyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigy
NTUuMCwgdmFsKSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZh
bCk7CisgICAgfQorfQorCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6
OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit7CisgICAgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOworICAg
IHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7CisgICAgaWYgKG4gPCAxKQorICAgICAg
ICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChpICogbikg
LyAyNTUuMCk7CisgICAgICAgIGsgPSBzdGQ6Om1pbihrLCBuIC0gMSk7CisgICAgICAgIGRvdWJs
ZSB2YWwgPSAyNTUgKiB0YWJsZVZhbHVlc1trXTsKKyAgICAgICAgdmFsID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7CisgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbCk7CisgICAgfQorfQorCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXI6OmNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZG91
YmxlIHZhbCA9IHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgKiBpICsgMjU1ICogdHJhbnNmZXJGdW5j
dGlvbi5pbnRlcmNlcHQ7CisgICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1
LjAsIHZhbCkpOworICAgICAgICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwp
OworICAgIH0KK30KKwordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpj
b21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZG91YmxlIGV4cG9uZW50ID0g
dHJhbnNmZXJGdW5jdGlvbi5leHBvbmVudDsgLy8gUkNWVCBkb2Vzbid0IGxpa2UgcGFzc2luZyBh
IGRvdWJsZSBhbmQgYSBmbG9hdCB0byBwb3csIHNvIHByb21vdGUgdGhpcyB0byBkb3VibGUKKyAg
ICAgICAgZG91YmxlIHZhbCA9IDI1NS4wICogKHRyYW5zZmVyRnVuY3Rpb24uYW1wbGl0dWRlICog
cG93KChpIC8gMjU1LjApLCBleHBvbmVudCkgKyB0cmFuc2ZlckZ1bmN0aW9uLm9mZnNldCk7Cisg
ICAgICAgIHZhbCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOworICAgICAg
ICB2YWx1ZXNbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOworICAgIH0KK30KKworRkVD
b21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6TG9va3VwVGFibGUgRkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIExvb2t1cFRhYmxlIHRhYmxlOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLnNpemUoKTsgKytpKQorICAgICAg
ICB0YWJsZVtpXSA9IGk7CisKKyAgICB1c2luZyBUcmFuc2ZlclR5cGUgPSB2b2lkICgqKShMb29r
dXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBUcmFuc2Zl
clR5cGUgY2FsbEVmZmVjdFtdID0geworICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAv
LyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTgorICAgICAgICBjb21wdXRlSWRlbnRp
dHlUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJVFkKKyAgICAgICAg
Y29tcHV0ZVRhYnVsYXJUYWJsZSwgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxF
CisgICAgICAgIGNvbXB1dGVEaXNjcmV0ZVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJf
VFlQRV9ESVNDUkVURQorICAgICAgICBjb21wdXRlTGluZWFyVGFibGUsICAgICAvLyBGRUNPTVBP
TkVOVFRSQU5TRkVSX1RZUEVfTElORUFSCisgICAgICAgIGNvbXB1dGVHYW1tYVRhYmxlICAgICAg
IC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9HQU1NQQorICAgIH07CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4oZnVu
Y3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBjYWxsRWZm
ZWN0W2Z1bmN0aW9uLnR5cGVdKHRhYmxlLCBmdW5jdGlvbik7CisKKyAgICByZXR1cm4gdGFibGU7
Cit9CisKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybShQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0Cit7CisgICAgYXV0byYgcGl4ZWxB
cnJheSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3Ro
ID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5k
YXRhKCk7CisKKyAgICBhdXRvIHJlZFRhYmxlICAgPSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZl
Y3QucmVkRnVuY3Rpb24oKSk7CisgICAgYXV0byBncmVlblRhYmxlID0gY29tcHV0ZUxvb2t1cFRh
YmxlKG1fZWZmZWN0LmdyZWVuRnVuY3Rpb24oKSk7CisgICAgYXV0byBibHVlVGFibGUgID0gY29t
cHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmJsdWVGdW5jdGlvbigpKTsKKyAgICBhdXRvIGFscGhh
VGFibGUgPSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3QuYWxwaGFGdW5jdGlvbigpKTsKKwor
ICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJy
YXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0g
ICAgID0gcmVkVGFibGVbZGF0YVtwaXhlbE9mZnNldF1dOworICAgICAgICBkYXRhW3BpeGVsT2Zm
c2V0ICsgMV0gPSBncmVlblRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAxXV07CisgICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOwor
ICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRhYmxlW2RhdGFbcGl4ZWxPZmZz
ZXQgKyAzXV07CisgICAgfQorfQorCitib29sIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0
KCk7CisgICAgCisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4
ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsK
KyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5UGl4ZWxC
dWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGRyYXdpbmdSZWN0KTsKKworICAg
IGFwcGx5UGxhdGZvcm0oKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpOworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVlMzIxYzcxOTNiOWNhZDQ1NzIxNDYwYzdlYjQzOGUwYjcwMDQyYjcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFw
cGxpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRUNvbXBvbmVudFRyYW5z
ZmVyOworc3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb247CisKK2NsYXNzIEZFQ29tcG9u
ZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVB
cHBsaWVyPEZFQ29tcG9uZW50VHJhbnNmZXI+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZm
ZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJhbnNmZXI+OworCitwdWJsaWM6CisgICAg
dXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3Qg
RmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OworCisgICAg
c3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJU
YWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAg
ICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlTGluZWFy
VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Cisg
ICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisKKyAgICBzdGF0aWMgTG9va3VwVGFibGUgY29tcHV0
ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKworICAgIHZv
aWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29m
dHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NGQ1OTk3OWRhOGFiMjRiYmEyMDkzMDMzNjNj
MDI3M2U0NmY1Yzk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5jcHAK
QEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllci5oIgorCisj
aW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1aW50OF90IEZF
Q29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUoaW50IGMpCit7CisgICAgdWludDhf
dCBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGMpLCAyNTUsIDAgfTsKKyAgICB1bnNp
Z25lZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKKyAgICByZXR1cm4gYnVmZlshISh1
YyAmIH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKK30KKwordGVtcGxhdGUgPGludCBi
MSwgaW50IGI0PgoraW5saW5lIHZvaWQgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciog
ZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZs
b2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9hdCBzY2FsZWRLMTsKKyAgICBmbG9hdCBzY2Fs
ZWRLNDsKKyAgICBpZiAoYjEpCisgICAgICAgIHNjYWxlZEsxID0gazEgLyAyNTUuMGY7CisgICAg
aWYgKGI0KQorICAgICAgICBzY2FsZWRLNCA9IGs0ICogMjU1LjBmOworCisgICAgd2hpbGUgKC0t
cGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291
cmNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIGkyID0gKmRlc3RpbmF0aW9uOworICAgICAgICBm
bG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBpMjsKKyAgICAgICAgaWYgKGIxKQorICAgICAg
ICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEgKiBpMjsKKyAgICAgICAgaWYgKGI0KQorICAg
ICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0OworCisgICAgICAgICpkZXN0aW5hdGlvbiA9IGNs
YW1wQnl0ZShyZXN1bHQpOworICAgICAgICArK3NvdXJjZTsKKyAgICAgICAgKytkZXN0aW5hdGlv
bjsKKyAgICB9Cit9CisKKy8vIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEg
ZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24g
Y2FzZSB3aGVyZSBjbGFtcGluZworLy8gaXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFn
Z3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9u
LgordGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgoraW5saW5lIHZvaWQgRkVDb21wb3NpdGVTb2Z0
d2FyZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNo
YXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVu
Z3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK3sKKyAgICBmbG9h
dCBzY2FsZWRLMTsKKyAgICBmbG9hdCBzY2FsZWRLNDsKKyAgICBpZiAoYjEpCisgICAgICAgIHNj
YWxlZEsxID0gazEgLyAyNTUuMGY7CisgICAgaWYgKGI0KQorICAgICAgICBzY2FsZWRLNCA9IGs0
ICogMjU1LjBmOworCisgICAgd2hpbGUgKC0tcGl4ZWxBcnJheUxlbmd0aCA+PSAwKSB7CisgICAg
ICAgIHVuc2lnbmVkIGNoYXIgaTEgPSAqc291cmNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIGky
ID0gKmRlc3RpbmF0aW9uOworICAgICAgICBmbG9hdCByZXN1bHQgPSBrMiAqIGkxICsgazMgKiBp
MjsKKyAgICAgICAgaWYgKGIxKQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEsxICogaTEg
KiBpMjsKKyAgICAgICAgaWYgKGI0KQorICAgICAgICAgICAgcmVzdWx0ICs9IHNjYWxlZEs0Owor
CisgICAgICAgICpkZXN0aW5hdGlvbiA9IHJlc3VsdDsKKyAgICAgICAgKytzb3VyY2U7CisgICAg
ICAgICsrZGVzdGluYXRpb247CisgICAgfQorfQorCisjaWYgIUhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKK2lubGluZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtQXJpdGhtZXRpYyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3Rp
bmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBr
MywgZmxvYXQgazQpCit7CisgICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsx
KSArIHN0ZDo6bWF4KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OworICAgIGZs
b2F0IGxvd2VyTGltaXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikg
KyBzdGQ6Om1pbigwLjBmLCBrMykgKyBrNDsKKyAgICBpZiAoKGs0ID49IDAuMGYgJiYgazQgPD0g
MS4wZikgJiYgKHVwcGVyTGltaXQgPj0gMC4wZiAmJiB1cHBlckxpbWl0IDw9IDEuMGYpICYmIChs
b3dlckxpbWl0ID49IDAuMGYgJiYgbG93ZXJMaW1pdCA8PSAxLjBmKSkgeworICAgICAgICBpZiAo
azQpIHsKKyAgICAgICAgICAgIGlmIChrMSkKKyAgICAgICAgICAgICAgICBjb21wdXRlQXJpdGht
ZXRpY1BpeGVsc1VuY2xhbXBlZDwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5
TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQ8MCwgMT4oc291cmNlLCBkZXN0aW5h
dGlvbiwgcGl4ZWxBcnJheUxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKGsxKQorICAgICAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzVW5jbGFtcGVkPDEsIDA+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5n
dGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBj
b21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZDwwLCAwPihzb3VyY2UsIGRlc3RpbmF0aW9u
LCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChrNCkgeworICAgICAgICBpZiAoazEpCisgICAgICAg
ICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAxPihzb3VyY2UsIGRlc3RpbmF0aW9uLCBw
aXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDE+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBp
eGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoazEpCisgICAgICAgICAgICBjb21wdXRlQXJpdGhtZXRpY1BpeGVsczwxLCAwPihzb3VyY2Us
IGRlc3RpbmF0aW9uLCBwaXhlbEFycmF5TGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzPDAsIDA+KHNvdXJjZSwg
ZGVzdGluYXRpb24sIHBpeGVsQXJyYXlMZW5ndGgsIGsxLCBrMiwgazMsIGs0KTsKKyAgICB9Cit9
CisjZW5kaWYKKworYm9vbCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlBcml0aG1l
dGljKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKQoreworICAgIGF1dG8gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBlZmZlY3RBRHJh
d2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+
Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgZWZmZWN0QURyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwor
ICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgaW4yLT5jb3B5
UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdEJEcmF3aW5n
UmVjdCk7CisKKyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxCdWZmZXIt
PmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBpbnQgbGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheS5s
ZW5ndGgoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4oZGVzdGluYXRp
b25QaXhlbEFycmF5Lmxlbmd0aCgpKSk7CisgICAgYXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMoc291
cmNlUGl4ZWxBcnJheS5kYXRhKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIGxlbmd0
aCwgbV9lZmZlY3QuazEoKSwgbV9lZmZlY3QuazIoKSwgbV9lZmZlY3QuazMoKSwgbV9lZmZlY3Qu
azQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGVTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5Tm9uQXJpdGhtZXRpYyhGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3Qq
IGluMikKK3sKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1
bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBhdXRvIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBp
bWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFpbWFnZUJ1
ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIHN3aXRjaCAo
bV9lZmZlY3Qub3BlcmF0aW9uKCkpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VO
S05PV046CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfT1ZFUjoKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9JTjogeworICAgICAgICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVk
IHJlZ2lvbi4KKyAgICAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKTsKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpOworICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KG1fZWZm
ZWN0LmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgICAgICBpZiAoZGVzdGluYXRpb25SZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBJbnRSZWN0IGFkanVzdGVkRGVz
dGluYXRpb25SZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gbV9lZmZlY3QuYWJzb2x1dGVQYWludFJl
Y3QoKS5sb2NhdGlvbigpOworICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSBkZXN0aW5hdGlv
blJlY3QgLSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOworICAgICAgICBJbnRS
ZWN0IHNvdXJjZTJSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4yLT5hYnNvbHV0ZVBhaW50UmVj
dCgpLmxvY2F0aW9uKCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlcjIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCksIEZsb2F0UmVj
dChzb3VyY2UyUmVjdCkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCksIEZsb2F0UmVj
dChzb3VyY2VSZWN0KSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4gfSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgorICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0
LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZl
Y3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7
IHsgfSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpE
ZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BVE9QOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29t
cG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxT
aXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlhPUik7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9MSUdIVEVSOgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkg
fSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7
CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNbMV0uZ2V0KCk7CisKKyAgICBp
ZiAobV9lZmZlY3Qub3BlcmF0aW9uKCkgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJ
QykKKyAgICAgICAgcmV0dXJuIGFwcGx5QXJpdGhtZXRpYyhpbiwgaW4yKTsKKyAgICByZXR1cm4g
YXBwbHlOb25Bcml0aG1ldGljKGluLCBpbjIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjYwOWY1OWFmOTcyZTRiNWI0MGRiMzYxNTIxZTBlZDlkN2U5MTllZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVj
dEFwcGxpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRUNvbXBvc2l0ZTsK
KworY2xhc3MgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9zaXRlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVm
ZmVjdENvbmNyZXRlQXBwbGllcjxGRUNvbXBvc2l0ZT47CisKK3B1YmxpYzoKKyAgICB1c2luZyBC
YXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3Rh
dGljIHVpbnQ4X3QgY2xhbXBCeXRlKGludCk7CisKKyAgICB0ZW1wbGF0ZSA8aW50IGIxLCBpbnQg
YjQ+CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisKKyAg
ICB0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWdu
ZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxv
YXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBw
bHlQbGF0Zm9ybUFyaXRobWV0aWModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFy
KiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KTsKKworICAgIGJvb2wgYXBwbHlBcml0aG1ldGljKEZpbHRlckVm
ZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKTsKKyAgICBib29sIGFwcGx5Tm9uQXJpdGhtZXRp
YyhGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMik7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjhhYTg2N2VhYjlmMjc1
MTA0ZTc1NzNkOWMxMDljOTg1NmYwYzY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0cml4U29m
dHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXIuaCIKKworI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJGRUNvbnZvbHZl
TWF0cml4LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1
ZXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLyoKKyAgIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICBDb252b2x2ZU1hdHJpeCBpbXBsZW1lbnRhdGlvbgor
ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgVGhlIGltYWdlIHJl
Y3RhbmdsZSBpcyBzcGxpdCBpbiB0aGUgZm9sbG93aW5nIHdheToKKworICAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAgICAgICAgQSAgICAgICAgICB8CisgICAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgIHwgICAgICAgICAgICAgfCAgIHwKKyAgICAg
IHwgQiB8ICAgICAgQyAgICAgIHwgRCB8CisgICAgICB8ICAgfCAgICAgICAgICAgICB8ICAgfAor
ICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAgICAgICAgRSAgICAgICAg
ICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBXaGVyZSByZWdpb24gQyBj
b250YWlucyB0aG9zZSBwaXhlbHMsIHdob3NlIHZhbHVlcworICAgY2FuIGJlIGNhbGN1bGF0ZWQg
d2l0aG91dCBjcm9zc2luZyB0aGUgZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLgorCisgICBFeGFtcGxl
OgorICAgICAgSW1hZ2Ugc2l6ZTogd2lkdGg6IDEwLCBoZWlnaHQ6IDEwCisKKyAgICAgIE9yZGVy
IChrZXJuZWwgbWF0cml4IHNpemUpOiB3aWR0aDogMywgaGVpZ2h0IDQKKyAgICAgIFRhcmdldDog
eDoxLCB5OjMKKworICAgICAgVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIHRhcmdldCBp
bnNpZGUgdGhlIGtlcm5lbCBtYXRyaXg6CisKKyAgICAgICAgLi4uCisgICAgICAgIC4uLgorICAg
ICAgICAuLi4KKyAgICAgICAgLlguCisKKyAgIFRoZSByZWdpb25zIGluIHRoaXMgY2FzZSBhcmUg
dGhlIGZvbGxvd2luZzoKKyAgICAgIE5vdGU6ICh4MSwgeTEpIHRvcC1sZWZ0IGFuZCAoeDIsIHky
KSBpcyB0aGUgYm90dG9tLXJpZ2h0IGNvcm5lcgorICAgICAgTm90ZTogcm93IHgyIGFuZCBjb2x1
bW4geTIgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ2lvbgorICAgICAgICAgICAgb25seSB0aG9zZSAo
eCwgeSkgcGl4ZWxzLCB3aGVyZSB4MSA8PSB4IDwgeDIgYW5kIHkxIDw9IHkgPCB5MgorCisgICAg
ICBSZWdpb24gQTogeDE6IDAsIHkxOiAwLCB4MjogMTAsIHkyOiAzCisgICAgICBSZWdpb24gQjog
eDE6IDAsIHkxOiAzLCB4MjogMSwgeTI6IDEwCisgICAgICBSZWdpb24gQzogeDE6IDEsIHkxOiAz
LCB4MjogOSwgeTI6IDEwCisgICAgICBSZWdpb24gRDogeDE6IDksIHkxOiAzLCB4MjogMTAsIHky
OiAxMAorICAgICAgUmVnaW9uIEU6IHgxOiAwLCB5MTogMTAsIHgyOiAxMCwgeTI6IDEwIChlbXB0
eSByZWdpb24pCisKKyAgIFNpbmNlIHJlZ2lvbiBDIChvZnRlbikgY29udGFpbnMgbW9zdCBvZiB0
aGUgcGl4ZWxzLCB3ZSBpbXBsZW1lbnRlZAorICAgYSBmYXN0IGFsZ29yaXRtIHRvIGNhbGN1bGF0
ZSB0aGVzZSB2YWx1ZXMsIGNhbGxlZCBmYXN0U2V0SW50ZXJpb3JQaXhlbHMuCisgICBGb3Igb3Ro
ZXIgcmVnaW9ucywgZmFzdFNldE91dGVyUGl4ZWxzIGlzIHVzZWQsIHdoaWNoIGNhbGxzIGdldFBp
eGVsVmFsdWUsCisgICB0byBoYW5kbGUgcGl4ZWxzIG91dHNpZGUgb2YgdGhlIGltYWdlLiBJbiBh
IHJhcmUgc2l0dWF0aW9ucywgd2hlbgorICAga2VybmVsIG1hdHJpeCBpcyBiaWdnZXIgdGhhbiB0
aGUgaW1hZ2UsIGFsbCBwaXhlbHMgYXJlIGNhbGN1bGF0ZWQgYnkgdGhpcworICAgZnVuY3Rpb24u
CisKKyAgIEFsdGhvdWdoIHRoZXNlIHR3byBmdW5jdGlvbnMgaGF2ZSBsb3QgaW4gY29tbW9uLCBJ
IGRlY2lkZWQgbm90IHRvIG1ha2UKKyAgIGNvbW1vbiBhIHRlbXBsYXRlIGZvciB0aGVtLCBzaW5j
ZSB0aGVyZSBhcmUga2V5IGRpZmZlcmVuY2VzIGFzIHdlbGwsCisgICBhbmQgd291bGQgbWFrZSBp
dCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgorKi8KKworaW5saW5lIHVpbnQ4X3QgRkVDb252
b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwg
dWludDhfdCBtYXgpCit7CisgICAgaWYgKGNoYW5uZWwgPD0gMCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKGNoYW5uZWwgPj0gbWF4KQorICAgICAgICByZXR1cm4gbWF4OworICAgIHJldHVy
biBjaGFubmVsOworfQorCitpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBs
aWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
UGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQq
IHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFs
dWVzKQoreworICAgIHVpbnQ4X3QgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMjU1
IDogY2xhbXBSR0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBj
bGFtcFJHQkFWYWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywgbWF4QWxwaGEpKTsKKwor
ICAgIGlmIChwcmVzZXJ2ZUFscGhhVmFsdWVzKSB7CisgICAgICAgIGRlc3RQaXhlbHMuc2V0KHBp
eGVsLCBzb3VyY2VQaXhlbHMuaXRlbShwaXhlbCkpOworICAgICAgICArK3BpeGVsOworICAgIH0g
ZWxzZQorICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBtYXhBbHBoYSk7Cit9CisKK2lu
bGluZSBpbnQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Z2V0UGl4ZWxWYWx1ZShj
b25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQoreworICAgIGlm
ICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50
aW5nRGF0YS5oZWlnaHQpCisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCAr
IHgpIDw8IDI7CisKKyAgICBzd2l0Y2ggKHBhaW50aW5nRGF0YS5lZGdlTW9kZSkgeworICAgIGRl
ZmF1bHQ6IC8vIEVkZ2VNb2RlVHlwZTo6Tm9uZQorICAgICAgICByZXR1cm4gLTE7CisgICAgY2Fz
ZSBFZGdlTW9kZVR5cGU6OkR1cGxpY2F0ZToKKyAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAg
ICAgeCA9IDA7CisgICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndpZHRoKQorICAg
ICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7CisgICAgICAgIGlmICh5IDwgMCkK
KyAgICAgICAgICAgIHkgPSAwOworICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5o
ZWlnaHQpCisgICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7CisgICAgICAg
IHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7CisgICAgY2FzZSBFZGdl
TW9kZVR5cGU6OldyYXA6CisgICAgICAgIHdoaWxlICh4IDwgMCkKKyAgICAgICAgICAgIHggKz0g
cGFpbnRpbmdEYXRhLndpZHRoOworICAgICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAg
ICAgICAgd2hpbGUgKHkgPCAwKQorICAgICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0
OworICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7CisgICAgICAgIHJldHVybiAoeSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7CisgICAgfQorfQorCisvLyBPbmx5IGZvciBy
ZWdpb24gQworaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0
SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQs
IGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKK3sKKyAgICAvLyBlZGdlIG1v
ZGUgZG9lcyBub3QgYWZmZWN0IHRoZXNlIHBpeGVscworICAgIGludCBwaXhlbCA9IChwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHBhaW50aW5nRGF0
YS50YXJnZXRPZmZzZXQueCgpKSAqIDQ7CisgICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJp
Z2h0ICogNDsKKyAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndp
ZHRoKCkgLSAxKSAqIDQ7CisgICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkgY29tcG9u
ZW50cworICAgIGZsb2F0IHRvdGFsc1s0XTsKKworICAgIC8vIGRpdmlzb3IgY2Fubm90IGJlIDAs
IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcworICAgIEFTU0VSVChwYWlu
dGluZ0RhdGEuZGl2aXNvcik7CisKKyAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20g
LSB5RW5kKScgbGluZXMKKyAgICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNy
ZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOworICAgIGludCBzdGFydEtlcm5lbFBpeGVsID0g
KGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsK
KworICAgIGZvciAoaW50IHkgPSB5RW5kICsgMTsgeSA+IHlTdGFydDsgLS15KSB7CisgICAgICAg
IGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7CisgICAgICAgICAgICBp
bnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7Cisg
ICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOworICAgICAgICAg
ICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKworICAgICAg
ICAgICAgdG90YWxzWzBdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7CisgICAgICAg
ICAgICB0b3RhbHNbMl0gPSAwOworICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKworICAgICAg
ICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKKyAgICAgICAgICAgICAgICB0b3RhbHNb
MF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2Fz
dDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7
CisgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOworICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBw
YWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0
PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKQorICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShr
ZXJuZWxQaXhlbCkpOworICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWw7CisgICAgICAgICAg
ICAgICAgLS1rZXJuZWxWYWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2VybmVsSW5jcmVhc2U7CisgICAgICAg
ICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldERlc3RpbmF0
aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4
ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0
YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CisgICAgICAgICAgICBzdGFydEtl
cm5lbFBpeGVsICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwor
ICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IHhJbmNyZWFzZTsKKyAgICB9Cit9CisKKy8vIEZv
ciBvdGhlciByZWdpb25zIHRoYW4gQworaW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlQXBwbGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKK3sKKyAgICBpbnQgcGl4ZWwgPSAoeTEgKiBw
YWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OworICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwor
ICAgIGludCB3aWR0aCA9IHgyIC0geDE7CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEg
LSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhl
bFggPSBiZWdpbktlcm5lbFBpeGVsWDsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAt
IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpOworICAgIGludCB4SW5jcmVhc2UgPSAocGFp
bnRpbmdEYXRhLndpZHRoIC0gd2lkdGgpICogNDsKKyAgICAvLyBDb250YWlucyB0aGUgc3VtIG9m
IHJnYihhKSBjb21wb25lbnRzCisgICAgZmxvYXQgdG90YWxzWzRdOworCisgICAgLy8gcGFpbnRp
bmdEYXRhLmRpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVu
c3VyZXMgdGhpcworICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7CisKKyAgICBmb3Ig
KGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7CisgICAgICAgIGZvciAoaW50IHggPSB3aWR0
aDsgeCA+IDA7IC0teCkgeworICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdE
YXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOworICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVs
WCA9IHN0YXJ0S2VybmVsUGl4ZWxYOworICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0
YXJ0S2VybmVsUGl4ZWxZOworICAgICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtl
cm5lbFNpemUud2lkdGgoKTsKKworICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKKyAgICAgICAg
ICAgIHRvdGFsc1sxXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbMl0gPSAwOworICAgICAgICAg
ICAgdG90YWxzWzNdID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDAp
IHsKKyAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRleCA9IGdldFBpeGVsVmFsdWUocGFpbnRp
bmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVsWSk7CisgICAgICAgICAgICAgICAgaWYg
KHBpeGVsSW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFp
bnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4KSk7CisgICAgICAgICAg
ICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZh
bHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVt
KHBpeGVsSW5kZXggKyAxKSk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWlu
dGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAyKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxw
aGEgJiYgcGl4ZWxJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgICAgICB0b3RhbHNbM10gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMykpOworICAg
ICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOworICAgICAgICAgICAgICAgIC0ta2VybmVsVmFs
dWU7CisgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAg
IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOworICAgICAgICAgICAgICAgICAgICAr
K2tlcm5lbFBpeGVsWTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBwYWludGluZ0RhdGEu
a2VybmVsU2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0Rh
dGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhh
KTsKKyAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7CisgICAgICAgIH0KKyAgICAgICAg
cGl4ZWwgKz0geEluY3JlYXNlOworICAgICAgICBzdGFydEtlcm5lbFBpeGVsWCA9IGJlZ2luS2Vy
bmVsUGl4ZWxYOworICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxZOworICAgIH0KK30KKwordm9p
ZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAoreworICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJl
ZCBwaXhlbHMKKyAgICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gcGFpbnRp
bmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKyAgICBpbnQgY2xpcEJvdHRvbSA9IHBhaW50aW5n
RGF0YS5oZWlnaHQgLSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS5oZWlnaHQoKTsKKworICAgIGlm
IChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7CisgICAgICAgIC8vIFJhcmUgc2l0
dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAorICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLmhlaWdo
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBt
aW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icworCisgICAgaWYgKGludCBpdGVyYXRpb25zID0gKHBhaW50aW5n
RGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQpIC8gbWluaW1hbFJlY3REaW1lbnNpb24p
IHsKKyAgICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOworICAgICAg
ICBpbnQgY2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7CisK
KyAgICAgICAgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVf
dCBpbmRleCkgeworICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7Cisg
ICAgICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSks
IGNsaXBCb3R0b20pOworCisgICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0Rh
dGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKKyAgICAgICAgfSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJp
Z2h0LCBjbGlwQm90dG9tLCAwLCBjbGlwQm90dG9tKTsKKworICAgIGNsaXBSaWdodCArPSBwYWlu
dGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSArIDE7CisgICAgY2xpcEJvdHRvbSArPSBwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSArIDE7CisKKyAgICBpZiAocGFpbnRpbmdEYXRhLnRhcmdl
dE9mZnNldC55KCkgPiAwKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkpOwor
ICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgc2V0T3V0
ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludGluZ0RhdGEud2lkdGgs
IHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIGlmIChwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0
LngoKSA+IDApCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRp
bmdEYXRhLnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpLCBj
bGlwQm90dG9tKTsKKyAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRpbmdEYXRhLndpZHRoKQorICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgcGFpbnRpbmdEYXRh
LnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS53aWR0aCwgY2xpcEJvdHRvbSk7Cit9CisK
K2Jvb2wgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKworICAgIGF1dG8gYWxwaGFGb3Jt
YXQgPSBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCkgPyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQgOiBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkOwor
ICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVz
dWx0KGFscGhhRm9ybWF0KTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVj
dC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1
bHQoYWxwaGFGb3JtYXQsIGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xv
clNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+
ZGF0YSgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXItPmRhdGEoKTsKKyAgICAKKyAgICBhdXRvIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworCisgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0
YSA9IHsKKyAgICAgICAgc291cmNlUGl4ZWxBcnJheSwKKyAgICAgICAgZGVzdGluYXRpb25QaXhl
bEFycmF5LAorICAgICAgICBwYWludFNpemUud2lkdGgoKSwKKyAgICAgICAgcGFpbnRTaXplLmhl
aWdodCgpLAorICAgICAgICBtX2VmZmVjdC5rZXJuZWxTaXplKCksCisgICAgICAgIG1fZWZmZWN0
LmRpdmlzb3IoKSwKKyAgICAgICAgbV9lZmZlY3QuYmlhcygpICogMjU1LAorICAgICAgICBtX2Vm
ZmVjdC50YXJnZXRPZmZzZXQoKSwKKyAgICAgICAgbV9lZmZlY3QuZWRnZU1vZGUoKSwKKyAgICAg
ICAgbV9lZmZlY3QucHJlc2VydmVBbHBoYSgpLAorICAgICAgICBGRUNvbG9yTWF0cml4Ojpub3Jt
YWxpemVkRmxvYXRzKG1fZWZmZWN0Lmtlcm5lbCgpKQorICAgIH07CisKKyAgICBhcHBseVBsYXRm
b3JtKHBhaW50aW5nRGF0YSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUNvbnZvbHZlTWF0
cml4U29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRkNmMwOGRhNzljMTc3Y2FkODcxN2Fm
OGM5ZDIyMjljMmRlZmU4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBw
bGllci5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRUNvbnZvbHZlTWF0cml4Owor
ZW51bSBjbGFzcyBFZGdlTW9kZVR5cGU7CisKK2NsYXNzIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2Fy
ZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29udm9sdmVN
YXRyaXg+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
Q29udm9sdmVNYXRyaXg+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAg
IGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0cnVjdCBQYWludGluZ0RhdGEg
eworICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKKyAgICAg
ICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7CisgICAgICAgIGludCB3aWR0aDsK
KyAgICAgICAgaW50IGhlaWdodDsKKworICAgICAgICBJbnRTaXplIGtlcm5lbFNpemU7CisgICAg
ICAgIGZsb2F0IGRpdmlzb3I7CisgICAgICAgIGZsb2F0IGJpYXM7CisgICAgICAgIEludFBvaW50
IHRhcmdldE9mZnNldDsKKyAgICAgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOworICAgICAgICBi
b29sIHByZXNlcnZlQWxwaGE7CisgICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4Owor
ICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2xhbXBSR0JBVmFsdWUoZmxvYXQg
Y2hhbm5lbCwgdWludDhfdCBtYXggPSAyNTUpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRE
ZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBV
aW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywg
ZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzKTsKKwor
ICAgIHN0YXRpYyBpbmxpbmUgaW50IGdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdEYXRhJiwg
aW50IHgsIGludCB5KTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnRlcmlvclBpeGVs
cyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFy
dCwgaW50IHlFbmQpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWlu
dGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOworCisgICAgdm9pZCBh
cHBseVBsYXRmb3JtKFBhaW50aW5nRGF0YSYpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2Vt
ZW50TWFwU29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYjNjMjFjM2Y2NDIzZGQ3MmE3
MjMzMDdiZDk0NDQzODk1MzBhNjk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3
YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcFNv
ZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKKyNpbmNs
dWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQ
aXhlbEJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcihGRURpc3Bs
YWNlbWVudE1hcCYgZWZmZWN0KQorICAgIDogQmFzZShlZmZlY3QpCit7CisgICAgQVNTRVJUKG1f
ZWZmZWN0LnhDaGFubmVsU2VsZWN0b3IoKSAhPSBDSEFOTkVMX1VOS05PV04pOworICAgIEFTU0VS
VChtX2VmZmVjdC55Q2hhbm5lbFNlbGVjdG9yKCkgIT0gQ0hBTk5FTF9VTktOT1dOKTsKK30KKwor
aW50IEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp4Q2hhbm5lbEluZGV4KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9lZmZlY3QueENoYW5uZWxTZWxlY3RvcigpIC0gMTsKK30KKwor
aW50IEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp5Q2hhbm5lbEluZGV4KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9lZmZlY3QueUNoYW5uZWxTZWxlY3RvcigpIC0gMTsKK30KKwor
Ym9vbCBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQoreworICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisgICAgRmlsdGVyRWZm
ZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNbMV0uZ2V0KCk7CisKKyAgICBhdXRvIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gZWZmZWN0QURy
YXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIGlucHV0UGl4ZWxCdWZmZXIgPSBpbi0+
Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgZWZmZWN0QURyYXdpbmdSZWN0KTsKKworICAgIGF1dG8gZWZmZWN0QkRyYXdpbmdSZWN0ID0g
bV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CisgICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFs
dWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQg
Y29sb3IgdmFsdWVzLgorICAgIGF1dG8gZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXIgPSBpbjItPmdl
dFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICAKKyAgICBpZiAoIWlucHV0UGl4ZWxCdWZmZXIg
fHwgIWRpc3BsYWNlbWVudFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBhdXRvJiBpbnB1dEltYWdlID0gaW5wdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8m
IGRpc3BsYWNlbWVudEltYWdlID0gZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAg
ICBBU1NFUlQoaW5wdXRJbWFnZS5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS5sZW5ndGgo
KSk7CisKKyAgICBJbnRTaXplIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpOworCisgICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVy
U2NhbGUoeyBtX2VmZmVjdC5zY2FsZSgpLCBtX2VmZmVjdC5zY2FsZSgpIH0pOworICAgIGZsb2F0
IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1NS4wOworICAgIGZsb2F0IHNjYWxl
Rm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsKKyAgICBmbG9hdCBzY2FsZWRPZmZz
ZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAqIDAuNTsKKyAgICBmbG9hdCBzY2FsZWRPZmZzZXRZ
ID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAwLjU7CisgICAgCisgICAgaW50IGRpc3BsYWNlbWVu
dENoYW5uZWxYID0geENoYW5uZWxJbmRleCgpOworICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVs
WSA9IHlDaGFubmVsSW5kZXgoKTsKKworICAgIGludCByb3dCeXRlcyA9IHBhaW50U2l6ZS53aWR0
aCgpICogNDsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFpbnRTaXplLmhlaWdodCgpOyAr
K3kpIHsKKyAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCA9IHkgKiByb3dCeXRlczsKKworICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKKyAgICAg
ICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4o
c2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS5pdGVtKGRlc3RpbmF0aW9uSW5kZXgg
KyBkaXNwbGFjZW1lbnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKKyAgICAgICAgICAgIGlu
dCBzcmNZID0geSArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNwbGFjZW1l
bnRJbWFnZS5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBz
Y2FsZWRPZmZzZXRZKTsKKworICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9uUGl4ZWxQ
dHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFycmF5LmRh
dGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOworICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8IHNy
Y1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWludFNpemUu
aGVpZ2h0KCkpIHsKKyAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpk
ZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dElt
YWdlLmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVu
dE1hcFNvZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllNmNhNmVhNWM1NDE4MTJlMDJlMDkz
NDNjODk3YzhlNzNiYTY3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRkVEaXNwbGFjZW1lbnRNYXA7CisKK2NsYXNzIEZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRURp
c3BsYWNlbWVudE1hcD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8RkVEaXNwbGFjZW1lbnRNYXA+OworCitwdWJsaWM6CisgICAgRkVEaXNwbGFjZW1lbnRN
YXBTb2Z0d2FyZUFwcGxpZXIoRkVEaXNwbGFjZW1lbnRNYXAmKTsKKworICAgIGJvb2wgYXBwbHko
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNl
dE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCisgICAg
eworICAgICAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKKyAgICAgICAgcmV0
dXJuIHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOworICAgIH0KKworICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3Q7CisgICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBs
aWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTdhNjFiNzMz
OTAyMzMxMmRiYjZmZmUwNWQ1NDQ4NDk4YzI4MTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dT
b2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5o
IgorCisjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29u
c3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisKKyAg
ICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBp
ZiAoIXJlc3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGbG9hdFNpemUg
Ymx1clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnN0
ZERldmlhdGlvblgoKSwgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWSgpIH0pOworICAgIEZsb2F0U2l6
ZSBvZmZzZXQgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LmR4KCksIG1f
ZWZmZWN0LmR5KCkgfSk7CisKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IG1fZWZmZWN0
LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAg
IEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKKyAgICBk
cmF3aW5nUmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisKKyAgICBhdXRvIHNvdXJjZUlt
YWdlID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0JiByZXN1bHRDb250ZXh0
ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKG1f
ZWZmZWN0LnNoYWRvd09wYWNpdHkoKSk7CisgICAgcmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldCk7CisgICAgcmVzdWx0Q29u
dGV4dC5zZXRBbHBoYSgxKTsKKworICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFk
aXVzLCBvZmZzZXQsIG1fZWZmZWN0LnNoYWRvd0NvbG9yKCkpOworCisgICAgUGl4ZWxCdWZmZXJG
b3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4
ZWxGb3JtYXQ6OlJHQkE4LCBtX2VmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCkgfTsKKyAgICBJbnRS
ZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxT
aXplKCkpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZm
ZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIt
PmRhdGEoKTsKKyAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJy
YXkuZGF0YSgpLCBwaXhlbEJ1ZmZlci0+c2l6ZSgpLCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53
aWR0aCgpKTsKKyAgICAKKyAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVm
ZmVyLCBzaGFkb3dBcmVhKTsKKworICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CisgICAgcmVzdWx0Q29udGV4dC5maWxs
UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgp
LnNpemUoKSksIG1fZWZmZWN0LnNoYWRvd0NvbG9yKCkpOworICAgIHJlc3VsdENvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOwor
CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdl
LCBkcmF3aW5nUmVnaW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdh
cmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDVmNmMwZjNlZTc2MTc4NjJiNTYxZWNmMmM2NTY0OTE0
YTg2ZDU4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmgKQEAgLTAs
MCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZp
bHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRURy
b3BTaGFkb3c7CisKK2NsYXNzIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEcm9wU2hhZG93PiB7CisgICAgdXNpbmcgQmFz
ZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRURyb3BTaGFkb3c+OworCitwdWJsaWM6
CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwg
Y29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9v
ZFNvZnR3YXJlQXBwbGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODAzZTBlMmJmMWMzMWI1ZGY4NDE2M2E3
NGI0YzNiNmY0ZGFjMDExYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVGbG9vZFNvZnR3YXJlQXBwbGllci5jcHAK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIuaCIKKworI2luY2x1ZGUgIkZFRmxvb2QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVGbG9vZFNvZnR3YXJlQXBwbGllcjo6YXBw
bHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikKK3sKKyAgICBhdXRv
IHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJl
c3VsdEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGNvbG9yID0gbV9l
ZmZlY3QuZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KG1fZWZmZWN0LmZs
b29kT3BhY2l0eSgpKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwg
Y29sb3IpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVGbG9vZFNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUZsb29kU29mdHdhcmVBcHBsaWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTUzNTcxMjNmMzAwYjhkYmFjMmM5YzE4ZTg0MDhhOTNmNjU4MzgxOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVGbG9vZFNvZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFRmxvb2Q7CisKK2NsYXNzIEZFRmxvb2RT
b2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRmxv
b2Q+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRmxv
b2Q+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHko
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92
ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1
clNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41NjIxZWI1ZGI2YjFlZjBhYzhlMzZkNzhjNDQyYzM0ODViZTdjNmE2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2Fy
ZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSw0NTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFj
Y2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9U
eXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29m
dHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQm
IHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKK3sKKyAgICAvLyBDaGVj
ayBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlR2F1c3NpYW5CbHVyRWxl
bWVudCBmb3IgZGV0YWlscy4KKyAgICBzd2l0Y2ggKGJsdXJJdGVyYXRpb24pIHsKKyAgICBjYXNl
IDA6CisgICAgICAgIGlmICghKHJhZGl1cyAlIDIpKSB7CisgICAgICAgICAgICBkZWx0YUxlZnQg
PSByYWRpdXMgLyAyIC0gMTsKKyAgICAgICAgICAgIGRlbHRhUmlnaHQgPSByYWRpdXMgLSBkZWx0
YUxlZnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWx0YUxlZnQgPSByYWRpdXMg
LyAyOworICAgICAgICAgICAgZGVsdGFSaWdodCA9IHJhZGl1cyAtIGRlbHRhTGVmdDsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghKHJhZGl1cyAl
IDIpKSB7CisgICAgICAgICAgICBkZWx0YUxlZnQrKzsKKyAgICAgICAgICAgIGRlbHRhUmlnaHQt
LTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIGlmICgh
KHJhZGl1cyAlIDIpKSB7CisgICAgICAgICAgICBkZWx0YVJpZ2h0Kys7CisgICAgICAgICAgICBy
YWRpdXMrKzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8vIFRoaXMg
ZnVuY3Rpb24gb25seSBvcGVyYXRlcyBvbiBBbHBoYSBjaGFubmVsLgoraW5saW5lIHZvaWQgRkVH
YXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFy
cmF5LCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUs
IGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNv
bnN0IGludCYgbWF4S2VybmVsU2l6ZSkKK3sKKyAgICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0g
c3JjUGl4ZWxBcnJheS5kYXRhKCk7CisgICAgdWludDhfdCogZHN0RGF0YSA9IGRzdFBpeGVsQXJy
YXkuZGF0YSgpOworICAgIC8vIE1lbW9yeSBhbGlnbm1lbnQgaXM6IFJHQkEsIHplcm8taW5kZXgg
YmFzZWQuCisgICAgY29uc3QgaW50IGNoYW5uZWwgPSAzOworCisgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBlZmZlY3RIZWlnaHQ7ICsreSkgeworICAgICAgICBpbnQgbGluZSA9IHkgKiBzdHJpZGVM
aW5lOworICAgICAgICBpbnQgc3VtID0gMDsKKworICAgICAgICAvLyBGaWxsIHRoZSBrZXJuZWwu
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBsaW5lICsgaSAqIHN0cmlkZTsKKyAgICAgICAgICAg
IGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBvZmZzZXQ7CisgICAgICAgICAgICBz
dW0gKz0gc3JjUHRyW2NoYW5uZWxdOworICAgICAgICB9CisKKyAgICAgICAgLy8gQmx1cnJpbmcu
CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWZmZWN0V2lkdGg7ICsreCkgeworICAgICAg
ICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSArIHggKiBzdHJpZGUgKyBjaGFu
bmVsOworICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSArIHBpeGVsQnl0ZU9m
ZnNldDsKKyAgICAgICAgICAgICpkc3RQdHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW0gLyBk
eCk7CisKKyAgICAgICAgICAgIC8vIFNoaWZ0IGtlcm5lbC4KKyAgICAgICAgICAgIGlmICh4ID49
IGR4TGVmdCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5
dGVPZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgdWludDhf
dCogc3JjUHRyID0gc3JjRGF0YSArIGxlZnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgc3VtIC09
ICpzcmNQdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh4ICsgZHhSaWdodCA8
IGVmZmVjdFdpZHRoKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRPZmZzZXQgPSBw
aXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOworICAgICAgICAgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9mZnNldDsKKyAgICAgICAgICAgICAg
ICBzdW0gKz0gKnNyY1B0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXIoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQ
aXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJp
ZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJv
b2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIGNvbnN0IGludCBt
YXhLZXJuZWxTaXplID0gc3RkOjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOworICAgIGlmIChh
bHBoYUltYWdlKQorICAgICAgICByZXR1cm4gYm94Qmx1ckFscGhhT25seShzcmNQaXhlbEFycmF5
LCBkc3RQaXhlbEFycmF5LCBkeCwgZHhMZWZ0LCBkeFJpZ2h0LCBzdHJpZGUsIHN0cmlkZUxpbmUs
ICBlZmZlY3RXaWR0aCwgZWZmZWN0SGVpZ2h0LCBtYXhLZXJuZWxTaXplKTsKKworICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKKyAgICB1aW50OF90KiBk
c3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7CisKKyAgICAvLyBDb25jZXJuaW5nIHRoZSBh
cnJheSB3aWR0aC9sZW5ndGg6IGl0IGlzIEVsZW1lbnQgc2l6ZSArIE1hcmdpbiArIEJvcmRlci4g
VGhlIG51bWJlciBvZiBwaXhlbHMgd2lsbCBiZQorICAgIC8vIFAgPSB3aWR0aCAqIGhlaWdodCAq
IGNoYW5uZWxzLgorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgZWZmZWN0SGVpZ2h0OyArK3kpIHsK
KyAgICAgICAgaW50IGxpbmUgPSB5ICogc3RyaWRlTGluZTsKKyAgICAgICAgaW50IHN1bVIgPSAw
LCBzdW1HID0gMCwgc3VtQiA9IDAsIHN1bUEgPSAwOworCisgICAgICAgIGlmIChlZGdlTW9kZSA9
PSBFZGdlTW9kZVR5cGU6Ok5vbmUpIHsKKyAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtlcm5lbC4K
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4S2VybmVsU2l6ZTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkgKiBzdHJpZGU7CisgICAg
ICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0YSArIG9mZnNldDsKKyAg
ICAgICAgICAgICAgICBzdW1SICs9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICBzdW1HICs9
ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQdHIrKzsKKyAgICAgICAg
ICAgICAgICBzdW1BICs9ICpzcmNQdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IEJsdXJyaW5nLgorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlZmZlY3RXaWR0aDsg
Kyt4KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcGl4ZWxCeXRlT2Zmc2V0ID0gbGluZSAr
IHggKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgdWludDhfdCogZHN0UHRyID0gZHN0RGF0YSAr
IHBpeGVsQnl0ZU9mZnNldDsKKworICAgICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN1bVIgLyBkeCk7CisgICAgICAgICAgICAgICAgKmRzdFB0cisrID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oc3VtRyAvIGR4KTsKKyAgICAgICAgICAgICAgICAqZHN0UHRyKysg
PSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1CIC8gZHgpOworICAgICAgICAgICAgICAgICpkc3RQ
dHIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1BIC8gZHgpOworCisgICAgICAgICAgICAgICAg
Ly8gU2hpZnQga2VybmVsLgorICAgICAgICAgICAgICAgIGlmICh4ID49IGR4TGVmdCkgeworICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0T2Zmc2V0ID0gcGl4ZWxCeXRlT2Zmc2V0IC0g
ZHhMZWZ0ICogc3RyaWRlOworICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQ
dHIgPSBzcmNEYXRhICsgbGVmdE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBz
cmNQdHJbMF07CisgICAgICAgICAgICAgICAgICAgIHN1bUcgLT0gc3JjUHRyWzFdOworICAgICAg
ICAgICAgICAgICAgICBzdW1CIC09IHNyY1B0clsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3Vt
QSAtPSBzcmNQdHJbM107CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KHggKyBkeFJpZ2h0IDwgZWZmZWN0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgcmlnaHRPZmZzZXQgPSBwaXhlbEJ5dGVPZmZzZXQgKyBkeFJpZ2h0ICogc3RyaWRlOworICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzcmNQdHIgPSBzcmNEYXRhICsgcmlnaHRP
ZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIHN1bVIgKz0gc3JjUHRyWzBdOworICAgICAgICAg
ICAgICAgICAgICBzdW1HICs9IHNyY1B0clsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiAr
PSBzcmNQdHJbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gc3JjUHRyWzNdOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgaGVyZS4KKyAgICAgICAgICAg
IC8vIEdldCBlZGdlIHZhbHVlcyBmb3IgZWRnZU1vZGUgJ2R1cGxpY2F0ZScuCisgICAgICAgICAg
ICBjb25zdCB1aW50OF90KiBlZGdlVmFsdWVMZWZ0ID0gc3JjRGF0YSArIGxpbmU7CisgICAgICAg
ICAgICBjb25zdCB1aW50OF90KiBlZGdlVmFsdWVSaWdodCAgPSBzcmNEYXRhICsgKGxpbmUgKyAo
ZWZmZWN0V2lkdGggLSAxKSAqIHN0cmlkZSk7CisKKyAgICAgICAgICAgIC8vIEZpbGwgdGhlIGtl
cm5lbC4KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBkeExlZnQgKiAtMTsgaSA8IGR4UmlnaHQ7
ICsraSkgeworICAgICAgICAgICAgICAgIC8vIElzIHRoaXMgcmlnaHQgZm9yIG5lZ2F0aXZlIHZh
bHVlcyBvZiAnaSc/CisgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbGluZSArIGkg
KiBzdHJpZGU7CisgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc3JjUHRyID0gc3JjRGF0
YSArIG9mZnNldDsKKworICAgICAgICAgICAgICAgIGlmIChpIDwgMCkgeworICAgICAgICAgICAg
ICAgICAgICBzdW1SICs9IGVkZ2VWYWx1ZUxlZnRbMF07CisgICAgICAgICAgICAgICAgICAgIHN1
bUcgKz0gZWRnZVZhbHVlTGVmdFsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdl
VmFsdWVMZWZ0WzJdOworICAgICAgICAgICAgICAgICAgICBzdW1BICs9IGVkZ2VWYWx1ZUxlZnRb
M107CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID49IGVmZmVjdFdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgICAgIHN1bVIgKz0gZWRnZVZhbHVlUmlnaHRbMF07CisgICAgICAgICAgICAg
ICAgICAgIHN1bUcgKz0gZWRnZVZhbHVlUmlnaHRbMV07CisgICAgICAgICAgICAgICAgICAgIHN1
bUIgKz0gZWRnZVZhbHVlUmlnaHRbMl07CisgICAgICAgICAgICAgICAgICAgIHN1bUEgKz0gZWRn
ZVZhbHVlUmlnaHRbM107CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3VtUiArPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgIHN1bUcgKz0gKnNy
Y1B0cisrOworICAgICAgICAgICAgICAgICAgICBzdW1CICs9ICpzcmNQdHIrKzsKKyAgICAgICAg
ICAgICAgICAgICAgc3VtQSArPSAqc3JjUHRyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gQmx1cnJpbmcuCisgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IGVmZmVjdFdpZHRoOyArK3gpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBw
aXhlbEJ5dGVPZmZzZXQgPSBsaW5lICsgeCAqIHN0cmlkZTsKKyAgICAgICAgICAgICAgICB1aW50
OF90KiBkc3RQdHIgPSBkc3REYXRhICsgcGl4ZWxCeXRlT2Zmc2V0OworCisgICAgICAgICAgICAg
ICAgKmRzdFB0cisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3VtUiAvIGR4KTsKKyAgICAgICAg
ICAgICAgICAqZHN0UHRyKysgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdW1HIC8gZHgpOworICAg
ICAgICAgICAgICAgICpkc3RQdHIrKyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUIgLyBkeCk7
CisgICAgICAgICAgICAgICAgKmRzdFB0ciA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN1bUEgLyBk
eCk7CisKKyAgICAgICAgICAgICAgICAvLyBTaGlmdCBrZXJuZWwuCisgICAgICAgICAgICAgICAg
aWYgKHggPCBkeExlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiAtPSBlZGdlVmFsdWVM
ZWZ0WzBdOworICAgICAgICAgICAgICAgICAgICBzdW1HIC09IGVkZ2VWYWx1ZUxlZnRbMV07Cisg
ICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gZWRnZVZhbHVlTGVmdFsyXTsKKyAgICAgICAgICAg
ICAgICAgICAgc3VtQSAtPSBlZGdlVmFsdWVMZWZ0WzNdOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRPZmZzZXQgPSBwaXhlbEJ5dGVP
ZmZzZXQgLSBkeExlZnQgKiBzdHJpZGU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyBsZWZ0T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBz
dW1SIC09IHNyY1B0clswXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyAtPSBzcmNQdHJbMV07
CisgICAgICAgICAgICAgICAgICAgIHN1bUIgLT0gc3JjUHRyWzJdOworICAgICAgICAgICAgICAg
ICAgICBzdW1BIC09IHNyY1B0clszXTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoeCArIGR4UmlnaHQgPj0gZWZmZWN0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3VtUiArPSBlZGdlVmFsdWVSaWdodFswXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtRyAr
PSBlZGdlVmFsdWVSaWdodFsxXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQiArPSBlZGdlVmFs
dWVSaWdodFsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBlZGdlVmFsdWVSaWdodFsz
XTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCByaWdodE9mZnNldCA9IHBpeGVsQnl0ZU9mZnNldCArIGR4UmlnaHQgKiBzdHJpZGU7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1B0ciA9IHNyY0RhdGEgKyByaWdodE9m
ZnNldDsKKyAgICAgICAgICAgICAgICAgICAgc3VtUiArPSBzcmNQdHJbMF07CisgICAgICAgICAg
ICAgICAgICAgIHN1bUcgKz0gc3JjUHRyWzFdOworICAgICAgICAgICAgICAgICAgICBzdW1CICs9
IHNyY1B0clsyXTsKKyAgICAgICAgICAgICAgICAgICAgc3VtQSArPSBzcmNQdHJbM107CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisjaWYg
VVNFKEFDQ0VMRVJBVEUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGll
cjo6Ym94Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhD
bGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUs
IGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKK3sKKyAgICBpZiAoIWlvQnVmZmVy
LmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZWZmZWN0V2lkdGggPD0g
MCB8fCBlZmZlY3RIZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkgeworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIG11c3Qg
YWx3YXlzIHVzZSBhbiBvZGQgcmFkaXVzLgorICAgIGlmIChrZXJuZWxTaXplICUgMiAhPSAxKQor
ICAgICAgICBrZXJuZWxTaXplICs9IDE7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGVmZmVjdEluQnVm
ZmVyOworICAgIGVmZmVjdEluQnVmZmVyLmRhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4oaW9CdWZm
ZXIuZGF0YSgpKTsKKyAgICBlZmZlY3RJbkJ1ZmZlci53aWR0aCA9IGVmZmVjdFdpZHRoOworICAg
IGVmZmVjdEluQnVmZmVyLmhlaWdodCA9IGVmZmVjdEhlaWdodDsKKyAgICBlZmZlY3RJbkJ1ZmZl
ci5yb3dCeXRlcyA9IHN0cmlkZTsKKworICAgIHZJbWFnZV9CdWZmZXIgZWZmZWN0T3V0QnVmZmVy
OworICAgIGVmZmVjdE91dEJ1ZmZlci5kYXRhID0gdGVtcEJ1ZmZlci5kYXRhKCk7CisgICAgZWZm
ZWN0T3V0QnVmZmVyLndpZHRoID0gZWZmZWN0V2lkdGg7CisgICAgZWZmZWN0T3V0QnVmZmVyLmhl
aWdodCA9IGVmZmVjdEhlaWdodDsKKyAgICBlZmZlY3RPdXRCdWZmZXIucm93Qnl0ZXMgPSBzdHJp
ZGU7CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYSB0ZW1wb3JhcnkgYnVmZmVyIGJ5
IGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGZpcnN0IHdpdGggYSBzcGVjaWFsIGZsYWcuIHZJbWFnZSB3
aWxsIHJldHVybgorICAgIC8vIHRoZSBzaXplIG5lZWRlZCwgb3IgYW4gZXJyb3IgKHdoaWNoIGFy
ZSBhbGwgbmVnYXRpdmUpLgorICAgIHNpemVfdCB0bXBCdWZmZXJTaXplID0gdkltYWdlQm94Q29u
dm9sdmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCAwLCAwLCAw
LCBrZXJuZWxTaXplLCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCB8IGt2SW1hZ2VH
ZXRUZW1wQnVmZmVyU2l6ZSk7CisgICAgaWYgKHRtcEJ1ZmZlclNpemUgPD0gMCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgdm9pZCogdG1wQnVmZmVyID0gZmFzdE1hbGxvYyh0bXBCdWZmZXJTaXpl
KTsKKyAgICB2SW1hZ2VCb3hDb252b2x2ZV9BUkdCODg4OCgmZWZmZWN0SW5CdWZmZXIsICZlZmZl
Y3RPdXRCdWZmZXIsIHRtcEJ1ZmZlciwgMCwgMCwga2VybmVsU2l6ZSwga2VybmVsU2l6ZSwgMCwg
a3ZJbWFnZUVkZ2VFeHRlbmQpOworICAgIHZJbWFnZUJveENvbnZvbHZlX0FSR0I4ODg4KCZlZmZl
Y3RPdXRCdWZmZXIsICZlZmZlY3RJbkJ1ZmZlciwgdG1wQnVmZmVyLCAwLCAwLCBrZXJuZWxTaXpl
LCBrZXJuZWxTaXplLCAwLCBrdkltYWdlRWRnZUV4dGVuZCk7CisgICAgdkltYWdlQm94Q29udm9s
dmVfQVJHQjg4ODgoJmVmZmVjdEluQnVmZmVyLCAmZWZmZWN0T3V0QnVmZmVyLCB0bXBCdWZmZXIs
IDAsIDAsIGtlcm5lbFNpemUsIGtlcm5lbFNpemUsIDAsIGt2SW1hZ2VFZGdlRXh0ZW5kKTsKKyAg
ICBmYXN0RnJlZSh0bXBCdWZmZXIpOworCisgICAgLy8gVGhlIGZpbmFsIHJlc3VsdCBzaG91bGQg
YmUgc3RvcmVkIGluIGlvQnVmZmVyLgorICAgIEFTU0VSVChpb0J1ZmZlci5sZW5ndGgoKSA9PSB0
ZW1wQnVmZmVyLmxlbmd0aCgpKTsKKyAgICBtZW1jcHkoaW9CdWZmZXIuZGF0YSgpLCB0ZW1wQnVm
ZmVyLmRhdGEoKSwgaW9CdWZmZXIubGVuZ3RoKCkpOworfQorI2VuZGlmCisKK2lubGluZSB2b2lk
IEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyVW5hY2NlbGVyYXRlZChVaW50
OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1
bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIElu
dFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9k
ZSkKK3sKKyAgICBpbnQgZHhMZWZ0ID0gMDsKKyAgICBpbnQgZHhSaWdodCA9IDA7CisgICAgaW50
IGR5TGVmdCA9IDA7CisgICAgaW50IGR5UmlnaHQgPSAwOworICAgIAorICAgIFVpbnQ4Q2xhbXBl
ZEFycmF5KiBmcm9tQnVmZmVyID0gJmlvQnVmZmVyOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiB0
b0J1ZmZlciA9ICZ0ZW1wQnVmZmVyOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kp
IHsKKyAgICAgICAgaWYgKGtlcm5lbFNpemVYKSB7CisgICAgICAgICAgICBrZXJuZWxQb3NpdGlv
bihpLCBrZXJuZWxTaXplWCwgZHhMZWZ0LCBkeFJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9OX0lO
VFJJTlNJQ1MpCisgICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAgICAgICAg
ICBib3hCbHVyTkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWCwgZHhMZWZ0
LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0
KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZm
ZXIsICp0b0J1ZmZlciwga2VybmVsU2l6ZVgsIGR4TGVmdCwgZHhSaWdodCwgNCwgc3RyaWRlLCBw
YWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpLCB0cnVlLCBlZGdlTW9kZSk7Cisj
ZWxzZQorICAgICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxT
aXplWCwgZHhMZWZ0LCBkeFJpZ2h0LCA0LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWlu
dFNpemUuaGVpZ2h0KCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisgICAgICAg
ICAgICBzdGQ6OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGtlcm5lbFNpemVZKSB7CisgICAgICAgICAgICBrZXJuZWxQb3NpdGlvbihpLCBrZXJu
ZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0KTsKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1Mp
CisgICAgICAgICAgICBpZiAoIWlzQWxwaGFJbWFnZSkKKyAgICAgICAgICAgICAgICBib3hCbHVy
TkVPTigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlMZWZ0LCBkeVJpZ2h0
LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndpZHRoKCkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJveEJsdXIoKmZyb21CdWZmZXIsICp0b0J1
ZmZlciwga2VybmVsU2l6ZVksIGR5TGVmdCwgZHlSaWdodCwgc3RyaWRlLCA0LCBwYWludFNpemUu
aGVpZ2h0KCksIHBhaW50U2l6ZS53aWR0aCgpLCB0cnVlLCBlZGdlTW9kZSk7CisjZWxzZQorICAg
ICAgICAgICAgYm94Qmx1cigqZnJvbUJ1ZmZlciwgKnRvQnVmZmVyLCBrZXJuZWxTaXplWSwgZHlM
ZWZ0LCBkeVJpZ2h0LCBzdHJpZGUsIDQsIHBhaW50U2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLndp
ZHRoKCksIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOworI2VuZGlmCisgICAgICAgICAgICBzdGQ6
OnN3YXAoZnJvbUJ1ZmZlciwgdG9CdWZmZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
VGhlIGZpbmFsIHJlc3VsdCBzaG91bGQgYmUgc3RvcmVkIGluIGlvQnVmZmVyLgorICAgIGlmICgm
aW9CdWZmZXIgIT0gZnJvbUJ1ZmZlcikgeworICAgICAgICBBU1NFUlQoaW9CdWZmZXIubGVuZ3Ro
KCkgPT0gZnJvbUJ1ZmZlci0+bGVuZ3RoKCkpOworICAgICAgICBtZW1jcHkoaW9CdWZmZXIuZGF0
YSgpLCBmcm9tQnVmZmVyLT5kYXRhKCksIGlvQnVmZmVyLmxlbmd0aCgpKTsKKyAgICB9Cit9CisK
K2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJp
YyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhl
bEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNp
emUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkK
K3sKKyAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOworCisjaWYgVVNFKEFD
Q0VMRVJBVEUpCisgICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNpemVZICYmIChlZGdlTW9k
ZSA9PSBFZGdlTW9kZVR5cGU6Ok5vbmUgfHwgZWRnZU1vZGUgPT0gRWRnZU1vZGVUeXBlOjpEdXBs
aWNhdGUpKSB7CisgICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1ZmZlciwgdG1wUGl4ZWxB
cnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGJveEJsdXJV
bmFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVs
U2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKK30KKwor
I2lmICFVU0UoQUNDRUxFUkFURSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVB
cHBsaWVyOjpib3hCbHVyV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKK3sKKyAg
ICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0
KTsKKyAgICBib3hCbHVyR2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFycmF5LCAqcGFyYW1l
dGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRlcnMt
Pmtlcm5lbFNpemVZLCBwYWludFNpemUsIHBhcmFtZXRlcnMtPmlzQWxwaGFJbWFnZSwgcGFyYW1l
dGVycy0+ZWRnZU1vZGUpOworfQorI2VuZGlmCisKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZl
ciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVY
LCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJ
bWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworI2lmICFVU0UoQUNDRUxFUkFURSkKKyAg
ICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CisgICAgaW50IGV4dHJhSGVp
Z2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41ZjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50
IG1pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icworICAgIGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50
U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChtaW5pbWFsUmVjdERpbWVuc2lv
biArIGV4dHJhSGVpZ2h0ICogcGFpbnRTaXplLndpZHRoKCkpOworCisgICAgaWYgKG9wdGltYWxU
aHJlYWROdW1iZXIgPiAxKSB7CisgICAgICAgIFBhcmFsbGVsSm9iczxBcHBseVBhcmFtZXRlcnM+
IHBhcmFsbGVsSm9icygmYm94Qmx1cldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisKKyAg
ICAgICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisgICAgICAgIGlm
IChqb2JzID4gMSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJibG9ja0hl
aWdodCItc2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xp
Z2h0bHkgbGFyZ2VyIHNpbmNlCisgICAgICAgICAgICAvLyBibG9ja0hlaWdodCAqIGpvYnMgPCB0
b3RhbCBzaXplLiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9i
c1dpdGhFeHRyYSIuCisgICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tIZWlnaHQgPSBwYWludFNp
emUuaGVpZ2h0KCkgLyBqb2JzOworICAgICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEg
PSBwYWludFNpemUuaGVpZ2h0KCkgJSBqb2JzOworCisgICAgICAgICAgICBpbnQgY3VycmVudFkg
PSAwOworICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsK
KyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5w
YXJhbWV0ZXIoam9iKTsKKworICAgICAgICAgICAgICAgIGludCBzdGFydFkgPSAham9iID8gMCA6
IGN1cnJlbnRZIC0gZXh0cmFIZWlnaHQ7CisgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9i
IDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJsb2NrSGVpZ2h0OworICAgICAg
ICAgICAgICAgIGludCBlbmRZID0gam9iID09IGpvYnMgLSAxID8gY3VycmVudFkgOiBjdXJyZW50
WSArIGV4dHJhSGVpZ2h0OworCisgICAgICAgICAgICAgICAgaW50IGJsb2NrU2l6ZSA9IChlbmRZ
IC0gc3RhcnRZKSAqIHNjYW5saW5lOworICAgICAgICAgICAgICAgIGlmICgham9iKSB7CisgICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5pb1BpeGVsQXJyYXkgPSAmaW9CdWZmZXI7CisgICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gJnRtcFBpeGVsQXJyYXk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmlvUGl4ZWxB
cnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKGJsb2NrU2l6ZSk7
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy50bXBQaXhlbEFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYmxvY2tTaXplKTsKKyAgICAgICAgICAgICAgICAg
ICAgbWVtY3B5KHBhcmFtcy5pb1BpeGVsQXJyYXktPmRhdGEoKSwgaW9CdWZmZXIuZGF0YSgpICsg
c3RhcnRZICogc2NhbmxpbmUsIGJsb2NrU2l6ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgcGFyYW1zLndpZHRoID0gcGFpbnRTaXplLndpZHRoKCk7CisgICAgICAgICAg
ICAgICAgcGFyYW1zLmhlaWdodCA9IGVuZFkgLSBzdGFydFk7CisgICAgICAgICAgICAgICAgcGFy
YW1zLmtlcm5lbFNpemVYID0ga2VybmVsU2l6ZVg7CisgICAgICAgICAgICAgICAgcGFyYW1zLmtl
cm5lbFNpemVZID0ga2VybmVsU2l6ZVk7CisgICAgICAgICAgICAgICAgcGFyYW1zLmlzQWxwaGFJ
bWFnZSA9IGlzQWxwaGFJbWFnZTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZWRnZU1vZGUgPSBl
ZGdlTW9kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1
dGUoKTsKKworICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGlt
YWdlLgorICAgICAgICAgICAgY3VycmVudFkgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgam9i
ID0gMTsgam9iIDwgam9iczsgam9iKyspIHsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRl
cnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAg
ICBpbnQgc291cmNlT2Zmc2V0OworICAgICAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbk9mZnNl
dDsKKyAgICAgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAgICAgICBpbnQgYWRqdXN0
ZWRCbG9ja0hlaWdodCA9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBi
bG9ja0hlaWdodDsKKworICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGFkanVzdGVkQmxvY2tI
ZWlnaHQ7CisgICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0ID0gZXh0cmFIZWlnaHQgKiBzY2Fu
bGluZTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9mZnNldCA9IGN1cnJlbnRZICogc2Nh
bmxpbmU7CisgICAgICAgICAgICAgICAgc2l6ZSA9IGFkanVzdGVkQmxvY2tIZWlnaHQgKiBzY2Fu
bGluZTsKKworICAgICAgICAgICAgICAgIG1lbWNweShpb0J1ZmZlci5kYXRhKCkgKyBkZXN0aW5h
dGlvbk9mZnNldCwgcGFyYW1zLmlvUGl4ZWxBcnJheS0+ZGF0YSgpICsgc291cmNlT2Zmc2V0LCBz
aXplKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KKyAgICB9CisjZW5kaWYK
KworICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHlu
YW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCisgICAgYm94Qmx1ckdlbmVyaWMoaW9CdWZmZXIs
IHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplLCBpc0Fs
cGhhSW1hZ2UsIGVkZ2VNb2RlKTsKK30KKworYm9vbCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNb
MF0uZ2V0KCk7CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5w
aXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsK
KyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworCisg
ICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgaW4tPmNvcHlQaXhl
bEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3Qp
OworICAgIGlmICghbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpICYmICFtX2VmZmVjdC5zdGREZXZp
YXRpb25ZKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byBrZXJuZWxTaXplID0g
bV9lZmZlY3QuY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9lZmZlY3Quc3RkRGV2aWF0
aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7CisKKyAgICBJbnRTaXplIHBhaW50
U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworICAgIGF1dG8gdG1w
SW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocGFp
bnRTaXplLmFyZWEoKSAqIDQpOworICAgIGlmICghdG1wSW1hZ2VEYXRhKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXBwbHlQbGF0Zm9ybShkZXN0aW5hdGlvblBpeGVs
QXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWln
aHQoKSwgcGFpbnRTaXplLCBtX2VmZmVjdC5pc0FscGhhSW1hZ2UoKSwgbV9lZmZlY3QuZWRnZU1v
ZGUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdh
cmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxp
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wMjI3ZDMyNzVjMmNjN2MwYzJjZWIyNzdmMzBkNWE2NjkwZTJlMGIz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEs
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBw
bGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJG
aWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZFR2F1c3NpYW5CbHVyOworZW51bSBj
bGFzcyBFZGdlTW9kZVR5cGU7CisKK2NsYXNzIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVy
IDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUdhdXNzaWFuQmx1cj4gewor
ICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVHYXVzc2lhbkJs
dXI+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHko
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgeworICAgICAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsKKyAgICAgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OworICAgICAgICBpbnQgd2lkdGg7Cisg
ICAgICAgIGludCBoZWlnaHQ7CisgICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVYOworICAgICAg
ICB1bnNpZ25lZCBrZXJuZWxTaXplWTsKKyAgICAgICAgYm9vbCBpc0FscGhhSW1hZ2U7CisgICAg
ICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZTsKKyAgICB9OworCisgICAgc3RhdGljIGlubGluZSB2
b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBp
bnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5
LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCYgZHhM
ZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZm
ZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpOwor
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
cmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQg
ZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwg
aW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VN
b2RlVHlwZSk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFjY2VsZXJhdGVkKFVp
bnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIs
IHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVm
ZmVjdEhlaWdodCk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJVbmFjY2VsZXJhdGVk
KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZm
ZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlk
ZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsK
KworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyR2VuZXJpYyhVaW50OENsYW1wZWRBcnJh
eSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBr
ZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9v
bCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJv
eEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQg
YXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVs
U2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlw
ZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMThmNjA4
ODMxOTg0Y2NhYzZjNDg2OTFiNTE2YmFjZTA4NDAxZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5n
U29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDQ0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRh
biBIZXJjemVnCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUg
PHd0Zi9QYXJhbGxlbEpvYnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgSW50
U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBy
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOworICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGJvdHRvbVJpZ2h0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtMiAqIGNlbnRlciArIDIg
KiByaWdodCAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0LAorICAgICAgICAtMiAqIGNlbnRlciAtIHJp
Z2h0ICsgMiAqIGJvdHRvbSArIGJvdHRvbVJpZ2h0CisgICAgfTsKK30KKworaW5saW5lIEludFNp
emUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwo
aW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgYm90dG9t
TGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
Ym90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHJldHVybiB7CisgICAgICAgIC0y
ICogbGVmdCArIDIgKiByaWdodCAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCwKKyAgICAgICAg
LWxlZnQgLSAyICogY2VudGVyIC0gcmlnaHQgKyBib3R0b21MZWZ0ICsgMiAqIGJvdHRvbSArIGJv
dHRvbVJpZ2h0CisgICAgfTsKK30KKworaW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAor
eworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0g
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OworICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgYm90
dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBy
ZXR1cm4geworICAgICAgICAtMiAqIGxlZnQgKyAyICogY2VudGVyIC0gYm90dG9tTGVmdCArIGJv
dHRvbSwKKyAgICAgICAgLWxlZnQgLSAyICogY2VudGVyICsgYm90dG9tTGVmdCArIDIgKiBib3R0
b20KKyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAg
ICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB0b3AgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CisgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0g
MiAqIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCBib3R0b20gPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICByZXR1cm4geworICAg
ICAgICAtdG9wICsgdG9wUmlnaHQgLSAyICogY2VudGVyICsgMiAqIHJpZ2h0IC0gYm90dG9tICsg
Ym90dG9tUmlnaHQsCisgICAgICAgIC0yICogdG9wIC0gdG9wUmlnaHQgKyAyICogYm90dG9tICsg
Ym90dG9tUmlnaHQKKyAgICB9OworfQorCitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhh
V2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKK3sKKyAgICBpbnQgcmlnaHRBbHBoYU9mZnNldCA9
IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0OworICAgIAorICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKHJpZ2h0QWxwaGFPZmZzZXQp
KTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdo
dEFscGhhT2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKKyAgICBpbnQgYm90
dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShyaWdodEFscGhhT2Zmc2V0
ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpKTsKKworICAgIGludCBsZWZ0ID0gYWxwaGFX
aW5kb3cubGVmdCgpOworICAgIGludCB0b3BMZWZ0ID0gYWxwaGFXaW5kb3cudG9wTGVmdCgpOwor
ICAgIGludCB0b3AgPSBhbHBoYVdpbmRvdy50b3AoKTsKKworICAgIGludCBib3R0b21MZWZ0ID0g
YWxwaGFXaW5kb3cuYm90dG9tTGVmdCgpOworICAgIGludCBib3R0b20gPSBhbHBoYVdpbmRvdy5i
b3R0b20oKTsKKworICAgIC8vIFRoZSBhbHBoYVdpbmRvdyBoYXMgYmVlbiBzaGlmdGVkLCBhbmQg
aGVyZSB3ZSBmaWxsIGluIHRoZSByaWdodCBjb2x1bW4uCisgICAgYWxwaGFXaW5kb3cuYWxwaGFb
MF1bMl0gPSB0b3BSaWdodDsKKyAgICBhbHBoYVdpbmRvdy5hbHBoYVsxXVsyXSA9IHJpZ2h0Owor
ICAgIGFscGhhV2luZG93LmFscGhhWzJdWzJdID0gYm90dG9tUmlnaHQ7CisgICAgCisgICAgLy8g
Q2hlY2sgdGhhdCB0aGUgYWxwaGFXaW5kb3cgaXMgd29ya2luZyB3aXRoIHNvbWUgc3BvdC1jaGVj
a3MuCisgICAgQVNTRVJUKGFscGhhV2luZG93LnRvcExlZnQoKSA9PSBwaXhlbHMtPml0ZW0ob2Zm
c2V0IC0gY1BpeGVsU2l6ZSAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOyAvLyB0b3BMZWZ0CisgICAgQVNTRVJUKGFscGhhV2luZG93LnRvcCgpID09
IHBpeGVscy0+aXRlbShvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsgLy8gdG9wCisKKyAgICByZXR1cm4geworICAgICAgICAtdG9wTGVm
dCArIHRvcFJpZ2h0IC0gMiAqIGxlZnQgKyAyICogcmlnaHQgLSBib3R0b21MZWZ0ICsgYm90dG9t
UmlnaHQsCisgICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0ICsgYm90dG9tTGVm
dCArIDIgKiBib3R0b20gKyBib3R0b21SaWdodAorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7CisgICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCB0
b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7CisgICAgb2Zmc2V0ICs9IDIgKiB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsK
KyAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGJvdHRvbSA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtdG9wTGVmdCArIHRvcCAtIDIgKiBsZWZ0ICsg
MiAqIGNlbnRlciAtIGJvdHRvbUxlZnQgKyBib3R0b20sCisgICAgICAgIC10b3BMZWZ0IC0gMiAq
IHRvcCArIGJvdHRvbUxlZnQgKyAyICogYm90dG9tCisgICAgfTsKK30KKworaW5saW5lIEludFNp
emUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0Cit7CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
cmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCB0b3BSaWdodCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgLXRvcCArIHRvcFJpZ2h0IC0gMiAq
IGNlbnRlciArIDIgKiByaWdodCwKKyAgICAgICAgLTIgKiB0b3AgLSB0b3BSaWdodCArIDIgKiBj
ZW50ZXIgKyByaWdodAorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0Cit7CisgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBjZW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgLT0g
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKKyAgICByZXR1cm4geworICAgICAgICAtdG9wTGVmdCArIHRvcFJpZ2h0IC0gMiAq
IGxlZnQgKyAyICogcmlnaHQsCisgICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCAtIHRvcFJpZ2h0
ICsgbGVmdCArIDIgKiBjZW50ZXIgKyByaWdodAorICAgIH07Cit9CisKK2lubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKK3sKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7CisgICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCB0
b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgLXRvcExlZnQgKyB0b3AgLSAyICogbGVm
dCArIDIgKiBjZW50ZXIsCisgICAgICAgIC10b3BMZWZ0IC0gMiAqIHRvcCArIGxlZnQgKyAyICog
Y2VudGVyCisgICAgfTsKK30KKwordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQ
aXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3Qg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZs
b2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0
IGFscGhhKQoreworICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOworICAg
IExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBkYXRhLmxp
Z2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6
KTsKKworICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CisgICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlz
WmVybygpKSB7CisgICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlz
IGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KKyAgICAgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJU
eXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAgICAgICAg
ICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5s
aWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CisgICAg
ICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKKyAgICAgICAgICAgICAg
ICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueSgpLAorICAgICAgICAgICAgICAgIGxpZ2h0aW5n
RGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFs
ZndheVZlY3Rvci5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChkYXRhLnNwZWN1bGFyRXhwb25l
bnQgPT0gMSkKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNv
bnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFy
Q29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aCwg
ZGF0YS5zcGVjdWxhckV4cG9uZW50KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7CisgICAgICAgICAgICBmYWN0b3JYICogbm9y
bWFsMkRWZWN0b3Iud2lkdGgoKSAqIGRhdGEuc3VyZmFjZVNjYWxlLAorICAgICAgICAgICAgZmFj
dG9yWSAqIG5vcm1hbDJEVmVjdG9yLmhlaWdodCgpICogZGF0YS5zdXJmYWNlU2NhbGUsCisgICAg
ICAgICAgICAxLjBmCisgICAgICAgIH07CisgICAgICAgIGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0
aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKKworICAgICAgICBpZiAoZGF0YS5lZmZlY3QtPmZp
bHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQorICAg
ICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZl
Y3RvciAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICog
bGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKKyAgICAgICAgICAgICAgICBsaWdo
dGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLAorICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5s
aWdodFZlY3Rvci55KCksCisgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
LnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0
aCgpOworICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9PSAxKQorICAgICAg
ICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFs
VmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZl
Y3Rvckxlbmd0aCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlnaHRTdHJl
bmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3
YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBk
YXRhLnNwZWN1bGFyRXhwb25lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxpZ2h0
U3RyZW5ndGggPiAxKQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMTsKKyAgICBpZiAobGlnaHRT
dHJlbmd0aCA8IDApCisgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAwOworCisgICAgdWludDhfdCBw
aXhlbFZhbHVlWzNdID0geworICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihsaWdodFN0cmVu
Z3RoICogbGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSAqIDI1NS4wZiksCisgICAgICAgIHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KGxpZ2h0U3RyZW5ndGggKiBsaWdodGluZ0RhdGEuY29sb3JWZWN0
b3IueSgpICogMjU1LjBmKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4obGlnaHRTdHJl
bmd0aCAqIGxpZ2h0aW5nRGF0YS5jb2xvclZlY3Rvci56KCkgKiAyNTUuMGYpCisgICAgfTsKKyAg
ICAKKyAgICBkYXRhLnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsKK30K
Kwordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZ
LCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQoreworICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0
LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbDJEVmVj
dG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cit9
CisKKy8vIFRoaXMgYXBwZWFycyB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBp
eGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVhZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3cml0
ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4KK3ZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNv
bnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwg
aW50IGVuZFkpCit7CisgICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+IDAgc2luY2Ugd2UgcmVh
ZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCisgICAgQVNTRVJUKHN0YXJ0WSk7
CisgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOworCisgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsg
eSA8IGVuZFk7ICsreSkgeworICAgICAgICBpbnQgcm93U3RhcnRPZmZzZXQgPSB5ICogZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50IHByZXZpb3VzUm93U3RhcnQg
PSByb3dTdGFydE9mZnNldCAtIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAg
ICAgIGludCBuZXh0Um93U3RhcnQgPSByb3dTdGFydE9mZnNldCArIGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemU7CisKKyAgICAgICAgLy8gYWxwaGFXaW5kb3cgaXMgYSBsb2NhbCBjYWNo
ZSBvZiBhbHBoYSB2YWx1ZXMuCisgICAgICAgIC8vIEZpbGwgdGhlIHR3byByaWdodCBjb2x1bW5z
IHB1dHRpbmcgdGhlIGxlZnQgZWRnZSB2YWx1ZSBpbiB0aGUgY2VudGVyIGNvbHVtbi4KKyAgICAg
ICAgLy8gRm9yIGVhY2ggcGl4ZWwsIHdlIHNoaWZ0IGVhY2ggcm93IGxlZnQgdGhlbiBmaWxsIHRo
ZSByaWdodCBjb2x1bW4uCisgICAgICAgIEFscGhhV2luZG93IGFscGhhV2luZG93OworICAgICAg
ICBhbHBoYVdpbmRvdy5zZXRUb3AoZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICAgICAgYWxwaGFXaW5kb3cuc2V0VG9wUmlnaHQo
ZGF0YS5waXhlbHMtPml0ZW0ocHJldmlvdXNSb3dTdGFydCArIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisKKyAgICAgICAgYWxwaGFXaW5kb3cuc2V0Q2VudGVyKGRhdGEucGl4
ZWxzLT5pdGVtKHJvd1N0YXJ0T2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgICAg
ICBhbHBoYVdpbmRvdy5zZXRSaWdodChkYXRhLnBpeGVscy0+aXRlbShyb3dTdGFydE9mZnNldCAr
IGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisKKyAgICAgICAgYWxwaGFXaW5k
b3cuc2V0Qm90dG9tKGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFydCArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKKyAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tUmlnaHQoZGF0YS5waXhl
bHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKKworICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQgKyBjUGl4ZWxTaXplOwor
ICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGggLSAxOyArK3gsIG9mZnNldCAr
PSBjUGl4ZWxTaXplKSB7CisgICAgICAgICAgICBhbHBoYVdpbmRvdy5zaGlmdCgpOworICAgICAg
ICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwg
Y0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBh
bHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigpKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dv
cmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCit7CisgICAgYXBwbHlQbGF0Zm9ybUdl
bmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBh
cmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7Cit9CisKKyNpZiAhKENQVShBUk1f
TkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUp
KQordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhj
b25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKK3sKKyAgICB1bnNpZ25lZCByb3dzVG9Qcm9jZXNzID0gZGF0YS5oZWln
aHQgLSAyOworICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsK
KyAgICAKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9IDEw
MCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyAgICB1
bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53
aWR0aCAtIDIpICogcm93c1RvUHJvY2VzcykgLyBtaW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVt
VGhyZWFkcyk7CisKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAgICAgICAg
Ly8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2JzCisgICAgICAgIFBhcmFsbGVsSm9iczxBcHBseVBh
cmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIsIG9wdGlt
YWxUaHJlYWROdW1iZXIpOworCisgICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQor
ICAgICAgICBpbnQgam9iID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOworICAgICAgICBp
ZiAoam9iID4gMSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJ5U3RlcCIt
c2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkg
bGFyZ2VyIHNpbmNlCisgICAgICAgICAgICAvLyB5U3RlcCAqIGpvYnMgPCB0b3RhbCBzaXplLiBU
aGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRyYSIu
CisgICAgICAgICAgICBjb25zdCBpbnQgeVN0ZXAgPSByb3dzVG9Qcm9jZXNzIC8gam9iOworICAg
ICAgICAgICAgY29uc3QgaW50IGpvYnNXaXRoRXh0cmEgPSByb3dzVG9Qcm9jZXNzICUgam9iOwor
CisgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gMTsKKyAgICAgICAgICAgIGZvciAoLS1qb2I7IGpv
YiA+PSAwOyAtLWpvYikgeworICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1z
ID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAgICAgICAgICAgICAgIHBhcmFtcy5k
YXRhID0gZGF0YTsKKyAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gcGFpbnRp
bmdEYXRhOworICAgICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5U3RhcnQ7CisgICAgICAg
ICAgICAgICAgeVN0YXJ0ICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyB5U3RlcCArIDEgOiB5U3Rl
cDsKKyAgICAgICAgICAgICAgICBwYXJhbXMueUVuZCA9IHlTdGFydDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUu
CisgICAgfQorCisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChkYXRhLCBwYWludGluZ0Rh
dGEsIDEsIGRhdGEuaGVpZ2h0IC0gMSk7Cit9CisjZW5kaWYKKwordm9pZCBGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkKK3sK
KyAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5Db2xv
clNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOworICAgIHBhaW50aW5nRGF0YS5pbml0
aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOworCisg
ICAgZGF0YS5saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqZGF0YS5lZmZlY3QsIHBhaW50
aW5nRGF0YSk7CisKKyAgICAvLyBUb3AgbGVmdC4KKyAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJkaXYzLCBj
RmFjdG9yMmRpdjMsIGRhdGEudG9wTGVmdE5vcm1hbChvZmZzZXQpKTsKKworICAgIC8vIFRvcCBy
aWdodC4KKyAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1Bp
eGVsU2l6ZTsKKyAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53
aWR0aCAtIDEsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9y
bWFsKG9mZnNldCkpOworCisgICAgLy8gQm90dG9tIGxlZnQuCisgICAgb2Zmc2V0ID0gKGRhdGEu
aGVpZ2h0IC0gMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIHNldFBp
eGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodCAtIDEsIGNGYWN0
b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0KSk7CisK
KyAgICAvLyBCb3R0b20gcmlnaHQuCisgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHQgKiBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICBzZXRQaXhlbChvZmZz
ZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIGRhdGEuaGVpZ2h0IC0gMSwg
Y0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0
KSk7CisKKyAgICBpZiAoZGF0YS53aWR0aCA+PSAzKSB7CisgICAgICAgIC8vIFRvcCByb3cuCisg
ICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwg
ZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCisgICAgICAgICAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBj
RmFjdG9yMWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9mZnNldCkpOworCisgICAgICAgIC8vIEJv
dHRvbSByb3cuCisgICAgICAgIG9mZnNldCA9IChkYXRhLmhlaWdodCAtIDEpICogZGF0YS53aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHgg
PSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCisgICAg
ICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWln
aHQgLSAxLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwo
b2Zmc2V0KSk7CisgICAgfQorCisgICAgaWYgKGRhdGEuaGVpZ2h0ID49IDMpIHsKKyAgICAgICAg
Ly8gTGVmdCBjb2x1bW4uCisgICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHQgLSAxOyAr
K3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQorICAgICAgICAg
ICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIHksIGNGYWN0b3IxZGl2
MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7CisKKyAgICAg
ICAgLy8gUmlnaHQgY29sdW1uLgorICAgICAgICBvZmZzZXQgPSAyICogZGF0YS53aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHkgPSAxOyB5
IDwgZGF0YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0Rh
dGEsIGRhdGEud2lkdGggLSAxLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5y
aWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKKyAgICB9CisKKyAgICBpZiAoZGF0YS53aWR0aCA+
PSAzICYmIGRhdGEuaGVpZ2h0ID49IDMpIHsKKyAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxzLgor
ICAgICAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhkYXRhLCBwYWludGluZ0RhdGEpOworICAgIH0K
KworICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICog
ZGF0YS5oZWlnaHQ7CisgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVy
RWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykgeworICAgICAgICBmb3IgKGludCBpID0g
Y0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQorICAg
ICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUp
IHsKKyAgICAgICAgICAgIHVpbnQ4X3QgYTEgPSBkYXRhLnBpeGVscy0+aXRlbShpKTsKKyAgICAg
ICAgICAgIHVpbnQ4X3QgYTIgPSBkYXRhLnBpeGVscy0+aXRlbShpICsgMSk7CisgICAgICAgICAg
ICB1aW50OF90IGEzID0gZGF0YS5waXhlbHMtPml0ZW0oaSArIDIpOworICAgICAgICAgICAgLy8g
YWxwaGEgc2V0IHRvIHNldCB0byBtYXgoYTEsIGEyLCBhMykKKyAgICAgICAgICAgIGRhdGEucGl4
ZWxzLT5zZXQoaSArIDMsIGExID49IGEyID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIgPj0g
YTMgPyBhMiA6IGEzKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRkVMaWdodGluZ1Nv
ZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
c1swXS5nZXQoKTsKKworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0
LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
OworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOworCisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKKwor
ICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5UGl4
ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0
KTsKKworICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4g
KDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCisgICAgLy8gc3RhbmRhcmQgaGFz
IG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gp
IGhhcyBzdHJhbmdlCisgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhz
LCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KKyAgICAvLyBBbnl3YXksIGZl
Q29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgorCisgICAg
SW50U2l6ZSBzaXplID0gSW50U2l6ZShtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSk7CisKKyAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3Ig
Ym90aCkgaXMgMSBwaXhlbC4KKyAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhp
cyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCisgICAgaWYgKHNpemUud2lkdGgo
KSA8PSAyIHx8IHNpemUuaGVpZ2h0KCkgPD0gMikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICBkYXRhLmVmZmVjdCA9ICZtX2VmZmVjdDsKKyAgICBk
YXRhLmZpbHRlclR5cGUgPSBtX2VmZmVjdC5maWx0ZXJUeXBlKCk7CisgICAgZGF0YS5saWdodGlu
Z0NvbG9yID0gbV9lZmZlY3QubGlnaHRpbmdDb2xvcigpOworICAgIGRhdGEuc3VyZmFjZVNjYWxl
ID0gbV9lZmZlY3Quc3VyZmFjZVNjYWxlKCkgLyAyNTUuMGY7CisgICAgZGF0YS5kaWZmdXNlQ29u
c3RhbnQgPSBtX2VmZmVjdC5kaWZmdXNlQ29uc3RhbnQoKTsKKyAgICBkYXRhLnNwZWN1bGFyQ29u
c3RhbnQgPSBtX2VmZmVjdC5zcGVjdWxhckNvbnN0YW50KCk7CisgICAgZGF0YS5zcGVjdWxhckV4
cG9uZW50ID0gbV9lZmZlY3Quc3BlY3VsYXJFeHBvbmVudCgpOworICAgIGRhdGEubGlnaHRTb3Vy
Y2UgPSAmbV9lZmZlY3QubGlnaHRTb3VyY2UoKTsKKyAgICBkYXRhLm9wZXJhdGluZ0NvbG9yU3Bh
Y2UgPSAmbV9lZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpOworCisgICAgZGF0YS5waXhlbHMg
PSAmZGVzdGluYXRpb25QaXhlbEFycmF5OworICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemUgPSBzaXplLndpZHRoKCkgKiBjUGl4ZWxTaXplOworICAgIGRhdGEud2lkdGggPSBzaXpl
LndpZHRoKCk7CisgICAgZGF0YS5oZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisgICAgYXBwbHlQ
bGF0Zm9ybShkYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42NzZiOGI3OTU5NTQ2ZTNlMjg2Y2Q5ZmUwYzg2YzRhNjcyYjE5MDhj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSwxMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZworICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MjEgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgor
I2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RkVMaWdodGluZzsKKworY2xhc3MgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVMaWdodGluZz4geworICAgIHVzaW5nIEJhc2Ug
PSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVMaWdodGluZz47CisKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVsU2l6ZSA9IDQ7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYpOworCisg
ICAgLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBjb2VmZmljaWVudHMgY29tZSBmcm9t
IHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNm
ZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFj
dG9yMWRpdjIgPSAtMSAvIDIuZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3Ix
ZGl2MyA9IC0xIC8gMy5mOworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXY0
ID0gLTEgLyA0LmY7CisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMmRpdjMgPSAt
MiAvIDMuZjsKKworICAgIHN0cnVjdCBBbHBoYVdpbmRvdyB7CisgICAgICAgIHVpbnQ4X3QgYWxw
aGFbM11bM10geyB9OworICAgIAorICAgICAgICAvLyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBs
aW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRpY2VzIGVhc2llci4KKyAgICAgICAgdWludDhf
dCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMF07IH0KKyAg
ICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFb
MV1bMF07IH0KKyAgICAgICAgdWludDhfdCBib3R0b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyBy
ZXR1cm4gYWxwaGFbMl1bMF07IH0KKworICAgICAgICB1aW50OF90IHRvcCgpIGNvbnN0ICAgICAg
ICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsxXTsgfQorICAgICAgICB1aW50OF90IGNlbnRl
cigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsxXTsgfQorICAgICAgICB1
aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsg
fQorCisgICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4X3QgdmFsdWUpICAgICAgICAgIHsgYWxwaGFb
MF1bMV0gPSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldENlbnRlcih1aW50OF90IHZhbHVlKSAg
ICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRCb3R0b20odWlu
dDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsxXSA9IHZhbHVlOyB9CisKKyAgICAgICAgdm9p
ZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAgICAgeyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9
CisgICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1b
Ml0gPSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUp
ICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KKworICAgICAgICBzdGF0aWMgdm9pZCBzaGlmdFJv
dyh1aW50OF90IGFscGhhWzNdKQorICAgICAgICB7CisgICAgICAgICAgICBhbHBoYVswXSA9IGFs
cGhhWzFdOworICAgICAgICAgICAgYWxwaGFbMV0gPSBhbHBoYVsyXTsKKyAgICAgICAgfQorICAg
IAorICAgICAgICB2b2lkIHNoaWZ0KCkKKyAgICAgICAgeworICAgICAgICAgICAgc2hpZnRSb3co
YWxwaGFbMF0pOworICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOworICAgICAgICAgICAg
c2hpZnRSb3coYWxwaGFbMl0pOworICAgICAgICB9CisgICAgfTsKKworICAgIHN0cnVjdCBMaWdo
dGluZ0RhdGEgeworICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQt
b25seSAoU01QIHNhZmUpIGRhdGEKKyAgICAgICAgRkVMaWdodGluZyogZWZmZWN0OworICAgICAg
ICBGaWx0ZXJFZmZlY3Q6OlR5cGUgZmlsdGVyVHlwZTsKKyAgICAgICAgQ29sb3IgbGlnaHRpbmdD
b2xvcjsKKyAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOworICAgICAgICBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQ7CisgICAgICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQ7CisgICAgICAgIGZsb2F0
IHNwZWN1bGFyRXhwb25lbnQ7CisgICAgICAgIGNvbnN0IExpZ2h0U291cmNlKiBsaWdodFNvdXJj
ZTsKKyAgICAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlKiBvcGVyYXRpbmdDb2xvclNw
YWNlOworCisgICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7CisgICAgICAgIGludCB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50IHdpZHRoOworICAgICAgICBp
bnQgaGVpZ2h0OworCisgICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9m
ZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zm
c2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9m
ZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9yTm9ybWFsKGlu
dCBvZmZzZXQsIEFscGhhV2luZG93JikgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIHJp
Z2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUgSW50U2l6
ZSBib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUgSW50
U2l6ZSBib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJ
bnRTaXplIGJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIH07CisKKyAg
ICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKKyAgICAgICAgTGlnaHRpbmdEYXRhIGRhdGE7Cisg
ICAgICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOworICAgICAgICBp
bnQgeVN0YXJ0OworICAgICAgICBpbnQgeUVuZDsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQg
c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBM
aWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBm
bG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSk7CisgICAg
c3RhdGljIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29u
c3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9y
WCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3Rvcik7CisKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7CisgICAg
c3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7
CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRh
JiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOworICAgIHN0YXRpYyB2b2lkIGFw
cGx5UGxhdGZvcm0oY29uc3QgTGlnaHRpbmdEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmVBcHBsaWVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kNWQ0YWFiNmQ4NjZlZTRlOWE4Y2VjNDRmNWVjZDA4MmFkZGEzYTk2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRU1lcmdlU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDIxIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGRU1lcmdl
U29mdHdhcmVBcHBsaWVyLmgiCisKKyNpbmNsdWRlICJGRU1lcmdlLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQoreworICAgIEFTU0VS
VChpbnB1dEVmZmVjdHMuc2l6ZSgpID4gMCk7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9l
ZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKTsKKworICAgIGZvciAoYXV0byYgaW4gOiBpbnB1dEVmZmVjdHMpIHsKKyAgICAg
ICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgICAgICBpZiAo
IWluQnVmZmVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxp
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVNZXJnZVNvZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyMWQ4NDQ3ZTVjOTdmYTRmOTQ4
MzVmNmI4ODEwNmI1ZjhlZGFjZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIu
aApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
QXBwbGUgSW5jLiAyMDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZFTWVyZ2U7CisKK2NsYXNzIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTWVyZ2U+IHsKKyAgICB1c2luZyBCYXNlID0gRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTWVyZ2U+OworCitwdWJsaWM6CisgICAgdXNpbmcg
QmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0ZmQ4OTI3YjAwYmZkZmEyZjNiM2Q3ZTRm
ZTEyMTExZDJkNzJlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5j
cHAKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSBBcHBsZSBJbmMuIDIwMTctMjAyMSBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVy
LmgiCisKKyNpbmNsdWRlICJGRU1vcnBob2xvZ3kuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIs
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlOjpFcm9kZSkKKyAgICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihh
LCBiKTsKKworICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7Cit9CisKK2lubGluZSBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpj
b2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50
IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgdHlwZSkKK3sKKyAgICBhdXRvIGV4dHJlbXVtID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21Q
aXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5U3RhcnQs
IHdpZHRoKSkgfSk7CisKKyAgICBmb3IgKGludCB5ID0geVN0YXJ0ICsgMTsgeSA8IHlFbmQ7ICsr
eSkgeworICAgICAgICBhdXRvIHBpeGVsID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZh
bHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQq
PihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpIH0p
OworICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4KGV4dHJlbXVtLCBwaXhlbCwgdHlwZSk7Cisg
ICAgfQorICAgIHJldHVybiBleHRyZW11bTsKK30KKworaW5saW5lIENvbG9yQ29tcG9uZW50czx1
aW50OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbEV4dHJlbXVtKGNv
bnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQor
eworICAgIGF1dG8gZXh0cmVtdW0gPSBrZXJuZWxbMF07CisgICAgZm9yIChzaXplX3QgaSA9IDE7
IGkgPCBrZXJuZWwuc2l6ZSgpOyArK2kpCisgICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXgoZXh0
cmVtdW0sIGtlcm5lbFtpXSwgdHlwZSk7CisKKyAgICByZXR1cm4gZXh0cmVtdW07Cit9CisKK3Zv
aWQgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit7Cisg
ICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOworCisgICAgY29uc3QgYXV0byYgc3JjUGl4ZWxBcnJh
eSA9ICpwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheTsKKyAgICBhdXRvJiBkc3RQaXhlbEFycmF5
ID0gKnBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5OworCisgICAgY29uc3QgaW50IHJhZGl1c1gg
PSBwYWludGluZ0RhdGEucmFkaXVzWDsKKyAgICBjb25zdCBpbnQgcmFkaXVzWSA9IHBhaW50aW5n
RGF0YS5yYWRpdXNZOworICAgIGNvbnN0IGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS53aWR0aDsK
KyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcGFpbnRpbmdEYXRhLmhlaWdodDsKKworICAgIEFTU0VS
VChyYWRpdXNYIDw9IHdpZHRoIHx8IHJhZGl1c1kgPD0gaGVpZ2h0KTsKKyAgICBBU1NFUlQoc3Rh
cnRZID49IDAgJiYgZW5kWSA8PSBoZWlnaHQgJiYgc3RhcnRZIDwgZW5kWSk7CisKKyAgICBDb2x1
bW5FeHRyZW1hIGV4dHJlbWE7CisgICAgZXh0cmVtYS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIg
KiByYWRpdXNYICsgMSk7CisKKyAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5
KSB7CisgICAgICAgIGludCB5UmFkaXVzU3RhcnQgPSBzdGQ6Om1heCgwLCB5IC0gcmFkaXVzWSk7
CisgICAgICAgIGludCB5UmFkaXVzRW5kID0gc3RkOjptaW4oaGVpZ2h0LCB5ICsgcmFkaXVzWSAr
IDEpOworCisgICAgICAgIGV4dHJlbWEuc2hyaW5rKDApOworCisgICAgICAgIC8vIFdlIHN0YXJ0
IGF0IHRoZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29s
dW1ucy4KKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCisgICAgICAg
ICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFk
aXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEudHlwZSkpOworCisgICAg
ICAgIC8vIEtlcm5lbCBpcyBmaWxsZWQsIGdldCBleHRyZW1hIG9mIG5leHQgY29sdW1uCisgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgeworICAgICAgICAgICAgaWYgKHgg
PCB3aWR0aCAtIHJhZGl1c1gpCisgICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1u
RXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCArIHJhZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1
c0VuZCwgd2lkdGgsIHBhaW50aW5nRGF0YS50eXBlKSk7CisKKyAgICAgICAgICAgIGlmICh4ID4g
cmFkaXVzWCkKKyAgICAgICAgICAgICAgICBleHRyZW1hLnJlbW92ZSgwKTsKKworICAgICAgICAg
ICAgdW5zaWduZWQqIGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQ
aXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpOworICAgICAg
ICAgICAgKmRlc3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJu
ZWxFeHRyZW11bShleHRyZW1hLCBwYWludGluZ0RhdGEudHlwZSkpLnZhbHVlOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtcykKK3sKKyAgICBhcHBseVBsYXRmb3Jt
R2VuZXJpYygqcGFyYW1zLT5wYWludGluZ0RhdGEsIHBhcmFtcy0+c3RhcnRZLCBwYXJhbXMtPmVu
ZFkpOworfQorCit2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3sKKyAgICAvLyBFbXBpcmljYWxs
eSwgcnVudGltZSBpcyBhcHByb3hpbWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNvbmFibGUga2VybmVs
IHNpemVzIHdpdGggYSBzbG9wZSBvZiBhYm91dCAwLjY1LgorICAgIGZsb2F0IGtlcm5lbEZhY3Rv
ciA9IHNxcnQocGFpbnRpbmdEYXRhLnJhZGl1c1ggKiBwYWludGluZ0RhdGEucmFkaXVzWSkgKiAw
LjY1OworCisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbWFsQXJlYSA9ICgxNjAgKiAxNjApOyAv
LyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIAorICAgIHVuc2ln
bmVkIG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gODsKKyAgICB1bnNpZ25l
ZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEu
d2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVh
LCBtYXhOdW1UaHJlYWRzKTsKKyAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKKyAg
ICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZhcHBseVBs
YXRmb3JtV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgYXV0byBudW1PZlRo
cmVhZHMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisgICAgICAgIGlmIChudW1PZlRo
cmVhZHMgPiAxKSB7CisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImpvYlNpemUi
LXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5
IGxhcmdlciBzaW5jZQorICAgICAgICAgICAgLy8gam9iU2l6ZSAqIGpvYnMgPCB0b3RhbCBzaXpl
LiBUaGVzZSBleHRyYXMgYXJlIGhhbmRsZWQgYnkgdGhlIHJlbWFpbmRlciAiam9ic1dpdGhFeHRy
YSIuCisgICAgICAgICAgICBpbnQgam9iU2l6ZSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyBudW1P
ZlRocmVhZHM7CisgICAgICAgICAgICBpbnQgam9ic1dpdGhFeHRyYSA9IHBhaW50aW5nRGF0YS5o
ZWlnaHQgJSBudW1PZlRocmVhZHM7CisgICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOworICAg
ICAgICAgICAgZm9yIChpbnQgam9iID0gbnVtT2ZUaHJlYWRzIC0gMTsgam9iID49IDA7IC0tam9i
KSB7CisgICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9i
cy5wYXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50
WTsKKyAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9i
U2l6ZSArIDEgOiBqb2JTaXplOworICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50
WTsKKyAgICAgICAgICAgICAgICBwYXJhbS5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUg
dGhyZWFkIG1vZGVsCisgICAgfQorCisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMocGFpbnRpbmdE
YXRhLCAwLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKK30KKworYm9vbCBGRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3RzWzBdLmdldCgpOworCisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9l
ZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgp
KTsKKworICAgIGF1dG8gaXNEZWdlbmVyYXRlID0gW10oaW50IHJhZGl1c1gsIGludCByYWRpdXNZ
KSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAwIHx8
ICghcmFkaXVzWCAmJiAhcmFkaXVzWSk7CisgICAgfTsKKworICAgIEludFJlY3QgZWZmZWN0RHJh
d2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNp
emUoRmxvYXRTaXplKG1fZWZmZWN0LnJhZGl1c1goKSwgbV9lZmZlY3QucmFkaXVzWSgpKSk7CisK
KyAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKSB7
CisgICAgICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBt
X2VmZmVjdC5yYWRpdXNYKCksIG1fZWZmZWN0LnJhZGl1c1koKSB9KSk7CisgICAgaW50IHJhZGl1
c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRo
KCkpOworICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0
KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOworCisgICAgaWYgKGlzRGVnZW5lcmF0ZShyYWRpdXNY
LCByYWRpdXNZKSkgeworICAgICAgICBpbi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3aW5nUmVjdCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZm
ZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0RHJh
d2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFzb3Vy
Y2VQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgc291cmNl
UGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAg
UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBwYWludGluZ0RhdGEudHlwZSA9IG1fZWZm
ZWN0Lm1vcnBob2xvZ3lPcGVyYXRvcigpOworICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
ID0gJnNvdXJjZVBpeGVsQXJyYXk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAm
ZGVzdGluYXRpb25QaXhlbEFycmF5OworICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVm
ZmVjdERyYXdpbmdSZWN0LndpZHRoKCkpOworICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWls
ZihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSk7CisgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1gg
PSBjZWlsZihyYWRpdXNYKTsKKyAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1
c1kpOworCisgICAgYXBwbHlQbGF0Zm9ybShwYWludGluZ0RhdGEpOworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJl
QXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjI0MTYxYmMz
ZmQ0NTgyNTQ3YTAwZjU3YWQ3Mzk5NjJmMWI1YWJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgQXBwbGUgSW5jLiAyMDIxIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiQ29sb3JU
eXBlcy5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRkVN
b3JwaG9sb2d5OworZW51bSBjbGFzcyBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOworCitjbGFzcyBG
RU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVB
cHBsaWVyPEZFTW9ycGhvbG9neT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25j
cmV0ZUFwcGxpZXI8RkVNb3JwaG9sb2d5PjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJh
c2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZl
Y3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1c2luZyBDb2x1
bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+OworCisg
ICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZTsKKyAgICAgICAgaW50IHJhZGl1c1g7CisgICAgICAgIGludCByYWRpdXNZOworICAgICAg
ICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsKKyAgICAgICAgVWludDhD
bGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7CisgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAg
aW50IGhlaWdodDsKKyAgICB9OworCisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7CisgICAg
ICAgIGNvbnN0IFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgICAgICBpbnQgc3RhcnRZ
OworICAgICAgICBpbnQgZW5kWTsKKyAgICB9OworCisgICAgc3RhdGljIGlubGluZSBpbnQgcGl4
ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKSB7IHJldHVybiAoeSAqIHdpZHRo
ICsgeCkgKiA0OyB9CisgICAgc3RhdGljIGlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBtYWtlUGl4
ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Qs
IDQ+JiBjb21wb25lbnRzKSB7IHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IG1ha2VGcm9tQ29t
cG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsgfQorCisgICAgc3RhdGljIGlu
bGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21Q
aXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKSB7IHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhhc1NSR0JBKHBpeGVsKSk7IH0KKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4m
IGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYiwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSk7CisgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4g
Y29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGlu
dCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJu
ZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUpOworCisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgUGFp
bnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5
UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQ
bGF0Zm9ybShjb25zdCBQYWludGluZ0RhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlQXBwbGllci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjQ3ZjhmZTI5MGQ2MTlkNTZmMWI1NmZmNGZkNjFhNTlkNjc2YzFmZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGRU9mZnNldFNvZnR3YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiRkVPZmZzZXQuaCIK
KyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVPZmZz
ZXRTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3RzWzBdLmdldCgpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0
LmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZl
clJlc3VsdCgpOworICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJ
bWFnZSgpKTsKKworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gbV9lZmZlY3QuZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgZHJhd2lu
Z1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3QuZHgoKSwg
bV9lZmZlY3QuZHkoKSB9KSk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uKTsKKworICAgIHJldHVybiB0cnVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zm
c2V0U29mdHdhcmVBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWMzZmQ4NGYyNTQ3ZjBiYjI0YTQyOWU3
MTZlNzE3MDJiM2UzMmJhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuaApA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGRU9mZnNldDsKKworY2xhc3MgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFT2Zmc2V0PiB7CisgICAgdXNpbmcgQmFzZSA9IEZp
bHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRU9mZnNldD47CisKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVGlsZVNvZnR3YXJlQXBw
bGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDNhMWNmNjQ5ZjU2ZmQ5NDdjYTFkNGM0ZGI5MGEyZGE5MzRk
YmMzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVUaWxlU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDgw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVu
Z3VpbmJvYkBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZFVGlsZVNvZnR3
YXJlQXBwbGllci5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAi
RkVUaWxlLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZFVGlsZVNvZnR3YXJlQXBwbGllcjo6
YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0
KCk7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKKyAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYg
KCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworCisgICAgLy8g
U291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhl
IGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCisgICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNv
dXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0
aW1pemF0aW9uLgorICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7
CisgICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24o
KTsKKyAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbV9lZmZlY3QubWF4RWZmZWN0
UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgaWYgKGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljIHx8IGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkgeworICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0
ZXJSZWdpb24oKTsKKyAgICAgICAgdGlsZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OworICAgIH0KKworICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBub24tcGFsdGZvcm0gY2FsbC4K
KyAgICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVm
ZmVyKHRpbGVSZWN0LCB0aWxlUmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIGZp
bHRlci5yZW5kZXJpbmdNb2RlKCkpOworICAgIGlmICghdGlsZUltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxl
SW1hZ2UtPmNvbnRleHQoKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgtaW5NYXhF
ZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7CisgICAgdGlsZUlt
YWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKS5sb2NhdGlvbigpKTsKKworICAgIGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdlQnVmZmVy
OjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlKSk7CisgICAgaWYgKCF0aWxl
SW1hZ2VDb3B5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
cGF0dGVyblRyYW5zZm9ybTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVm
ZmVjdExvY2F0aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOworCisgICAgYXV0byBwYXR0ZXJuID0g
UGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZUNvcHkucmVsZWFzZU5vbk51bGwoKSwgeyB0cnVlLCB0
cnVlLCBwYXR0ZXJuVHJhbnNmb3JtIH0pOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJD
b250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBmaWx0ZXJDb250ZXh0LnNldEZp
bGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOworICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3Qo
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFVGlsZVNvZnR3YXJlQXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVRpbGVTb2Z0d2FyZUFwcGxpZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44NjA1ZDhiMzhlMWIyMjM1YThiNmMyNjY0NGFiZTYxNjhjZWRiNGY0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RVRpbGVTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGRVRpbGU7CisKK2NsYXNzIEZFVGlsZVNvZnR3YXJl
QXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUaWxlPiB7Cisg
ICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVRpbGU+OworCitw
dWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmls
dGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFw
cGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExOTYyM2Yz
YjJkOTVhMmQ0OGI3N2NmYzQ5OTY5NGQxYTdlNDc4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFuIDxyZW5pQGluZi51LXN6ZWdlZC5o
dT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBMb2tpIDxsb2tpQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyLmgiCisKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIK
KyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8v
IFRoZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9m
IHdoYXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9uOgorLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZQorCitGRVR1cmJ1bGVu
Y2VTb2Z0d2FyZUFwcGxpZXI6OlBhaW50aW5nRGF0YSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxp
ZXI6OmluaXRQYWludGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVkLCBi
b29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpCit7CisgICAgUGFp
bnRpbmdEYXRhIHBhaW50aW5nRGF0YSB7IHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVl
bmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMsIHBhaW50aW5nU2l6ZSwgeyB9LCB7
IH0gfTsKKworICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgc19y
YW5kTWF4aW11bSAtIDFdLgorICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQorICAgICAg
ICBwYWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAoc19yYW5kTWF4aW11
bSAtIDEpKSArIDE7CisgICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4gc19yYW5kTWF4aW11bSAt
IDEpCisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gc19yYW5kTWF4aW11bSAtIDE7CisKKyAg
ICBmbG9hdCogZ3JhZGllbnQ7CisgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0
OyArK2NoYW5uZWwpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZTsg
KytpKSB7CisgICAgICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gaTsK
KyAgICAgICAgICAgIGdyYWRpZW50ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ld
OworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGdyYWRpZW50WzBdID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkg
LSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgICAgICAgICBncmFkaWVudFsx
XSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Js
b2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7CisgICAgICAgICAgICB9IHdo
aWxlICghZ3JhZGllbnRbMF0gJiYgIWdyYWRpZW50WzFdKTsKKyAgICAgICAgICAgIGZsb2F0IG5v
cm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7
CisgICAgICAgICAgICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOworICAgICAg
ICAgICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZvciAoaW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAg
ICAgICAgaW50IGsgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOworICAgICAgICBp
bnQgaiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIHNfYmxvY2tTaXplOworICAgICAgICBBU1NF
UlQoaiA+PSAwKTsKKyAgICAgICAgQVNTRVJUKGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKKyAg
ICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3Jbal07CisgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0g
PSBrOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyAr
K2kpIHsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSAr
IGldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKKyAgICAgICAgZm9yIChpbnQg
Y2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKKyAgICAgICAgICAgIHBhaW50
aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFpbnRpbmdE
YXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdy
YWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1baV1bMV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGFpbnRp
bmdEYXRhOworfQorCitGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OlN0aXRjaERhdGEgRkVU
dXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNp
emUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBib29sIHN0
aXRjaFRpbGVzKQoreworICAgIGlmICghc3RpdGNoVGlsZXMpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOworICAgIGZsb2F0IHRp
bGVIZWlnaHQgPSB0aWxlU2l6ZS5oZWlnaHQoKTsKKyAgICBBU1NFUlQodGlsZVdpZHRoID4gMCAm
JiB0aWxlSGVpZ2h0ID4gMCk7CisKKyAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxl
bmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAorICAgIC8vIHNvIHRoYXQgdGhl
IHRpbGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCisgICAgaWYgKGJhc2VGcmVxdWVuY3lY
KSB7CisgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yZih0aWxlV2lkdGggKiBiYXNl
RnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7CisgICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBj
ZWlsZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7CisgICAgICAgIC8v
IEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0
YW5kYXJkLgorICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdo
RnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9
IGxvd0ZyZXF1ZW5jeTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVgg
PSBoaWdoRnJlcXVlbmN5OworICAgIH0KKyAgICBpZiAoYmFzZUZyZXF1ZW5jeVkpIHsKKyAgICAg
ICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3JmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5
WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbGYodGls
ZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7CisgICAgICAgIGlmIChiYXNl
RnJlcXVlbmN5WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5
WSkKKyAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5OworICAgICAgICBl
bHNlCisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7CisgICAgfQor
CisgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOworICAgIHN0aXRjaERhdGEud2lkdGggPSByb3Vu
ZGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOworICAgIHN0aXRjaERhdGEud3JhcFggPSBz
X3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKKyAgICBzdGl0Y2hEYXRhLmhlaWdodCA9
IHJvdW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpOworICAgIHN0aXRjaERhdGEud3Jh
cFkgPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7CisKKyAgICByZXR1cm4gc3Rp
dGNoRGF0YTsKK30KKworLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCitD
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6bm9p
c2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0YSYg
c3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCit7CisgICAgc3RydWN0
IE5vaXNlUG9zaXRpb24geworICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBz
cGVjIHRleHQuCisgICAgICAgIGludCBuZXh0SW5kZXg7IC8vIGJ4MSwgYnkxIGluIHRoZSBzcGVj
IHRleHQuCisgICAgICAgIGZsb2F0IGZyYWN0aW9uOyAvLyByeDAsIHJ5MCBpbiB0aGUgc3BlYyB0
ZXh0LgorCisgICAgICAgIE5vaXNlUG9zaXRpb24oZmxvYXQgY29tcG9uZW50KQorICAgICAgICB7
CisgICAgICAgICAgICAvLyAgdCA9IHZlY1swXSArIFBlcmxpbk47CisgICAgICAgICAgICAvLyAg
YngwID0gKGludCl0OworICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOworICAgICAgICAgICAg
Ly8gIHJ4MCA9IHQgLSAoaW50KXQ7CisgICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBv
bmVudCArIHNfcGVybGluTm9pc2U7CisgICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PGlu
dD4ocG9zaXRpb24pOworICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXggKyAxOworICAgICAg
ICAgICAgZnJhY3Rpb24gPSBwb3NpdGlvbiAtIGluZGV4OworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2b2lkIHN0aXRjaChpbnQgc2l6ZSwgaW50IHdyYXBTaXplKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBpZiAoYngwID49IHBTdGl0Y2hJbmZvLT5uV3JhcFgpCisgICAgICAgICAg
ICAvLyAgIGJ4MCAtPSBwU3RpdGNoSW5mby0+bldpZHRoOworICAgICAgICAgICAgaWYgKGluZGV4
ID49IHdyYXBTaXplKQorICAgICAgICAgICAgICAgIGluZGV4IC09IHNpemU7CisKKyAgICAgICAg
ICAgIC8vIGlmIChieDEgPj0gcFN0aXRjaEluZm8tPm5XcmFwWCkKKyAgICAgICAgICAgIC8vICAg
YngxIC09IHBTdGl0Y2hJbmZvLT5uV2lkdGg7CisgICAgICAgICAgICBpZiAobmV4dEluZGV4ID49
IHdyYXBTaXplKQorICAgICAgICAgICAgICAgIG5leHRJbmRleCAtPSBzaXplOworICAgICAgICB9
CisgICAgfTsKKworICAgIE5vaXNlUG9zaXRpb24gbm9pc2VYKG5vaXNlVmVjdG9yLngoKSk7Cisg
ICAgTm9pc2VQb3NpdGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKKworICAgIC8vIElmIHN0
aXRjaGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgorICAgIGlmIChwYWlu
dGluZ0RhdGEuc3RpdGNoVGlsZXMpIHsKKyAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRh
LndpZHRoLCBzdGl0Y2hEYXRhLndyYXBYKTsKKyAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hE
YXRhLmhlaWdodCwgc3RpdGNoRGF0YS53cmFwWSk7CisgICAgfQorCisgICAgLy8gYngwICY9IEJN
OworICAgIC8vIGJ4MSAmPSBCTTsKKyAgICAvLyBieTAgJj0gQk07CisgICAgLy8gYnkxICY9IEJN
OworICAgIG5vaXNlWC5pbmRleCAmPSBzX2Jsb2NrTWFzazsKKyAgICBub2lzZVgubmV4dEluZGV4
ICY9IHNfYmxvY2tNYXNrOworICAgIG5vaXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKKyAgICBu
b2lzZVkubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOworCisgICAgLy8gaSA9IHVMYXR0aWNlU2Vs
ZWN0b3JbYngwXTsKKyAgICAvLyBqID0gdUxhdHRpY2VTZWxlY3RvcltieDFdOworICAgIGludCBs
YXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW25vaXNlWC5pbmRleF07
CisgICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9y
W25vaXNlWC5uZXh0SW5kZXhdOworCisgICAgLy8gc3ggPSBkb3VibGUoc19jdXJ2ZShyeDApKTsK
KyAgICAvLyBzeSA9IGRvdWJsZShzX2N1cnZlKHJ5MCkpOworICAgIGZsb2F0IHN4ID0gc21vb3Ro
Q3VydmUobm9pc2VYLmZyYWN0aW9uKTsKKyAgICBmbG9hdCBzeSA9IHNtb290aEN1cnZlKG5vaXNl
WS5mcmFjdGlvbik7CisKKyAgICBhdXRvIG5vaXNlRm9yQ2hhbm5lbCA9IFsmXShpbnQgY2hhbm5l
bCkgeworICAgICAgICAvLyBiMDAgPSB1TGF0dGljZVNlbGVjdG9yW2kgKyBieTBdCisgICAgICAg
IGludCBiMDAgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5v
aXNlWS5pbmRleF07CisgICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjAw
XTsgdSA9IHJ4MCAqIHFbMF0gKyByeTAgKiBxWzFdOworICAgICAgICBjb25zdCBmbG9hdCogcSA9
IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtiMDBdOworICAgICAgICBmbG9hdCB1ID0g
bm9pc2VYLmZyYWN0aW9uICogcVswXSArIG5vaXNlWS5mcmFjdGlvbiAqIHFbMV07CisKKyAgICAg
ICAgLy8gYjEwID0gdUxhdHRpY2VTZWxlY3RvcltqICsgYnkwXTsKKyAgICAgICAgaW50IGIxMCA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5p
bmRleF07CisgICAgICAgIC8vIHJ4MSA9IHJ4MCAtIDEuMGY7CisgICAgICAgIC8vIHEgPSBmR3Jh
ZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjEwXTsgdiA9IHJ4MSAqIHFbMF0gKyByeTAgKiBxWzFdOwor
ICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IxMF07CisgICAgICAg
IGZsb2F0IHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBxWzBdICsgbm9pc2VZLmZyYWN0aW9u
ICogcVsxXTsKKyAgICAgICAgLy8gYSA9IGxlcnAoc3gsIHUsIHYpOworICAgICAgICBmbG9hdCBh
ID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CisKKyAgICAgICAgLy8gYjAxID0gdUxh
dHRpY2VTZWxlY3RvcltpICsgYnkxXTsKKyAgICAgICAgaW50IGIwMSA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJbmRleF07CisgICAgICAg
IC8vIHJ5MSA9IHJ5MCAtIDEuMGY7CisgICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hh
bm5lbF1bYjAxXTsgdSA9IHJ4MCAqIHFbMF0gKyByeTEgKiBxWzFdOworICAgICAgICBxID0gcGFp
bnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2IwMV07CisgICAgICAgIHUgPSBub2lzZVguZnJh
Y3Rpb24gKiBxWzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKKworICAgICAgICAv
LyBiMTEgPSB1TGF0dGljZVNlbGVjdG9yW2ogKyBieTFdOworICAgICAgICBpbnQgYjExID0gcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5leHRJ
bmRleF07CisgICAgICAgIC8vIHEgPSBmR3JhZGllbnRbbkNvbG9yQ2hhbm5lbF1bYjExXTsgdiA9
IHJ4MSAqIHFbMF0gKyByeTEgKiBxWzFdOworICAgICAgICBxID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W2NoYW5uZWxdW2IxMV07CisgICAgICAgIHYgPSAobm9pc2VYLmZyYWN0aW9uIC0gMSkgKiBx
WzBdICsgKG5vaXNlWS5mcmFjdGlvbiAtIDEpICogcVsxXTsKKyAgICAgICAgLy8gYiA9IGxlcnAo
c3gsIHUsIHYpOworICAgICAgICBmbG9hdCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwg
dik7CisKKyAgICAgICAgLy8gcmV0dXJuIGxlcnAoc3ksIGEsIGIpOworICAgICAgICByZXR1cm4g
bGluZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7CisgICAgfTsKKworICAgIHJldHVybiB7Cisg
ICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgwKSwKKyAgICAgICAgbm9pc2VGb3JDaGFubmVsKDEpLAor
ICAgICAgICBub2lzZUZvckNoYW5uZWwoMiksCisgICAgICAgIG5vaXNlRm9yQ2hhbm5lbCgzKQor
ICAgIH07Cit9CisKKy8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2Zl
VHVyYnVsZW5jZUVsZW1lbnQgZGVzY3JpYmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xvciBjb21w
b25lbnRzLgorLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JHQkE8dWlu
dDg+PihTUkdCQTxmbG9hdD4pIHRvIGdldCB0aGUgc2FtZSBiZWhhdmlvci4KK0NvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OnRvSW50QmFzZWRD
b2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21w
b25lbnRzKQoreworICAgIHJldHVybiB7CisgICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3Rh
dGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbMF0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAg
ICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzFd
ICogMjU1KSwgMCwgMjU1KSwKKyAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0aWNfY2Fz
dDxpbnQ+KGZsb2F0Q29tcG9uZW50c1syXSAqIDI1NSksIDAsIDI1NSksCisgICAgICAgIHN0ZDo6
Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNbM10gKiAyNTUp
LCAwLCAyNTUpLAorICAgIH07Cit9CisKK0NvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1
cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0OworICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3Io
cG9pbnQueCgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWlu
dGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVkpOworICAgIGZsb2F0IHJhdGlvID0gMTsKKyAgICBmb3Ig
KGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBwYWludGluZ0RhdGEubnVtT2N0YXZlczsgKytvY3Rh
dmUpIHsKKyAgICAgICAgaWYgKHBhaW50aW5nRGF0YS50eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpG
cmFjdGFsTm9pc2UpCisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9p
c2UyRChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2Uy
RChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJhdGlvOwor
CisgICAgICAgIG5vaXNlVmVjdG9yLnNldFgobm9pc2VWZWN0b3IueCgpICogMik7CisgICAgICAg
IG5vaXNlVmVjdG9yLnNldFkobm9pc2VWZWN0b3IueSgpICogMik7CisgICAgICAgIHJhdGlvICo9
IDI7CisKKyAgICAgICAgaWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxlcykgeworICAgICAgICAg
ICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2UgYmVm
b3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQKKyAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRl
cndhcmQgc2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgorICAgICAgICAgICAgc3Rp
dGNoRGF0YS53aWR0aCAqPSAyOworICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBz
dGl0Y2hEYXRhLndyYXBYIC0gc19wZXJsaW5Ob2lzZTsKKyAgICAgICAgICAgIHN0aXRjaERhdGEu
aGVpZ2h0ICo9IDI7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0aXRjaERh
dGEud3JhcFkgLSBzX3Blcmxpbk5vaXNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhl
IHZhbHVlIG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSArIDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQorICAgIC8v
IGFuZCAodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgorICAg
IGlmIChwYWludGluZ0RhdGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQor
ICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgKiAwLjVmICsgMC41ZjsKKworICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRz
KHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlU29mdHdh
cmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdp
b24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhl
bEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0
Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3sKKyAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0
WSk7CisKKyAgICBGbG9hdFBvaW50IHBvaW50KDAsIGZpbHRlclJlZ2lvbi55KCkgKyBzdGFydFkp
OworICAgIGludCBpbmRleE9mUGl4ZWxDaGFubmVsID0gc3RhcnRZICogKGZpbHRlclJlZ2lvbi53
aWR0aCgpIDw8IDIpOworICAgIEZsb2F0U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBmaWx0ZXJT
Y2FsZS53aWR0aCgpLCAxIC8gZmlsdGVyU2NhbGUuaGVpZ2h0KCkgfTsKKworICAgIGZvciAoaW50
IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKKyAgICAgICAgcG9pbnQuc2V0WShwb2ludC55
KCkgKyAxKTsKKyAgICAgICAgcG9pbnQuc2V0WChmaWx0ZXJSZWdpb24ueCgpKTsKKyAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7CisgICAgICAg
ICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOworICAgICAgICAgICAgRmxvYXRQb2ludCBs
b2NhbFBvaW50ID0gcG9pbnQuc2NhbGVkKGludmVyc2VTY2FsZS53aWR0aCgpLCBpbnZlcnNlU2Nh
bGUuaGVpZ2h0KCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxl
bmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwor
ICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCks
IDQsIGluZGV4T2ZQaXhlbENoYW5uZWwpOworICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5l
bCArPSA0OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMp
Cit7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9uLCBw
YXJhbWV0ZXJzLT5maWx0ZXJTY2FsZSwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0
ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0
YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7Cit9CisKK3ZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3Qg
RmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhKQoreworICAg
IGludCBoZWlnaHQgPSBmaWx0ZXJSZWdpb24uaGVpZ2h0KCk7CisgICAgdW5zaWduZWQgYXJlYSA9
IGZpbHRlclJlZ2lvbi5hcmVhKCk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltYWxSZWN0
RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJh
bGxlbCBqb2JzLgorICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBmaWx0ZXJSZWdpb24uaGVp
Z2h0KCkgLyA4OworICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1
bnNpZ25lZD4oYXJlYSAvIG1pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKKwor
ICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgeworICAgICAgICBQYXJhbGxlbEpvYnM8
QXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJmFwcGx5UGxhdGZvcm1Xb3JrZXIsIG9wdGlt
YWxUaHJlYWROdW1iZXIpOworCisgICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQor
ICAgICAgICBhdXRvIG51bUpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CisgICAg
ICAgIGlmIChudW1Kb2JzID4gMSkgeworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRv
ICJzdGVwWSItc2l6ZWQgam9icywgZGlzdHJpYnV0aW5nIHRoZSBleHRyYSByb3dzIGludG8gdGhl
IGZpcnN0ICJqb2JzV2l0aEV4dHJhIiBqb2JzLgorICAgICAgICAgICAgdW5zaWduZWQgc3RlcFkg
PSBoZWlnaHQgLyBudW1Kb2JzOworICAgICAgICAgICAgdW5zaWduZWQgam9ic1dpdGhFeHRyYSA9
IGhlaWdodCAlIG51bUpvYnM7CisgICAgICAgICAgICB1bnNpZ25lZCBzdGFydFkgPSAwOworCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSm9iczsgKytpKSB7CisgICAg
ICAgICAgICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1l
dGVyKGkpOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdp
b247CisgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlclNjYWxlID0gZmlsdGVyU2NhbGU7Cisg
ICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmcGl4ZWxBcnJheTsKKyAgICAgICAg
ICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKKyAgICAgICAgICAg
ICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CisgICAgICAgICAgICAgICAgcGFy
YW1zLnN0YXJ0WSA9IHN0YXJ0WTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGpvYkhlaWdo
dCA9IChpIDwgam9ic1dpdGhFeHRyYSkgPyBzdGVwWSArIDEgOiBzdGVwWTsKKyAgICAgICAgICAg
ICAgICBwYXJhbXMuZW5kWSA9IHBhcmFtcy5zdGFydFkgKyBqb2JIZWlnaHQ7CisgICAgICAgICAg
ICAgICAgc3RhcnRZICs9IGpvYkhlaWdodDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJl
IGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21h
bGwuCisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwg
cGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworfQorCiti
b29sIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpCit7CisgICAgYXV0byBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2VmZmVj
dC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgaWYgKHJlc3VsdFNpemUuYXJlYSgp
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisg
ICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheS56ZXJvRmlsbCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRv
IHRpbGVTaXplID0gcm91bmRlZEludFNpemUobV9lZmZlY3QuZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCkuc2l6ZSgpKTsKKworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9lZmZlY3QuYmFz
ZUZyZXF1ZW5jeVgoKTsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fZWZmZWN0LmJhc2VG
cmVxdWVuY3lZKCk7CisgICAgYXV0byBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxl
U2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5zdGl0Y2hUaWxl
cygpKTsKKworICAgIGF1dG8gcGFpbnRpbmdEYXRhID0gaW5pdFBhaW50aW5nRGF0YShtX2VmZmVj
dC50eXBlKCksIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbV9lZmZlY3QubnVtT2N0
YXZlcygpLCBtX2VmZmVjdC5zZWVkKCksIG1fZWZmZWN0LnN0aXRjaFRpbGVzKCksIHRpbGVTaXpl
KTsKKworICAgIGFwcGx5UGxhdGZvcm0obV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSwgZmls
dGVyLmZpbHRlclNjYWxlKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
b2Z0d2FyZS9GRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2NlNjhlMzQzNDFiMzg2NjNjMGMxNDg1YTkxMThmMDVjMmRjYzM4
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvc29mdHdhcmUvRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyLmgKQEAgLTAsMCArMSwx
MTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2Rv
dmFuIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
Q29sb3JDb21wb25lbnRzLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZF
VHVyYnVsZW5jZTsKK2VudW0gY2xhc3MgVHVyYnVsZW5jZVR5cGU7CisKK2NsYXNzIEZFVHVyYnVs
ZW5jZVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
RkVUdXJidWxlbmNlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBw
bGllcjxGRVR1cmJ1bGVuY2U+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIC8vIFByb2R1Y2VzIHJlc3Vs
dHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6CisgICAgLy8gciA9
IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFuZAorICAg
IC8vIG0gPSBzX3JhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQu
CisgICAgLy8gU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1
LCBPY3QuIDE5ODgKKyAgICAvLyBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNl
IHRoZSByZXN1bHQgMTA0MzYxODA2NQorICAgIC8vIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQg
bnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCisgICAgc3RhdGljIGNvbnN0IGludCBz
X3Blcmxpbk5vaXNlID0gNDA5NjsKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVt
ID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCisgICAgc3RhdGljIGNvbnN0IGludCBzX3JhbmRB
bXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQorICAgIHN0YXRp
YyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKKyAgICBzdGF0aWMgY29uc3Qg
aW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUgYQorCisgICAgc3RhdGljIGNvbnN0IGludCBzX2Js
b2NrU2l6ZSA9IDI1NjsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9j
a1NpemUgLSAxOworCisgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIC8vIENvbXB1
dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCisgICAgICAgIGxvbmcgcmFuZG9tKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNf
cmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7CisgICAgICAgICAgICBpZiAocmVz
dWx0IDw9IDApCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNfcmFuZE1heGltdW07CisgICAg
ICAgICAgICBzZWVkID0gcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorCisgICAgICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGU7CisgICAgICAgIGZsb2F0IGJhc2VG
cmVxdWVuY3lYOworICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKKyAgICAgICAgaW50IG51
bU9jdGF2ZXM7CisgICAgICAgIGxvbmcgc2VlZDsKKyAgICAgICAgYm9vbCBzdGl0Y2hUaWxlczsK
KyAgICAgICAgSW50U2l6ZSBwYWludGluZ1NpemU7CisKKyAgICAgICAgaW50IGxhdHRpY2VTZWxl
Y3RvclsyICogc19ibG9ja1NpemUgKyAyXTsKKyAgICAgICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAq
IHNfYmxvY2tTaXplICsgMl1bMl07CisgICAgfTsKKworICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsK
KyAgICAgICAgaW50IHdpZHRoIHsgMCB9OyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3cmFw
IGZvciBzdGl0Y2hpbmcuCisgICAgICAgIGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2YWx1
ZSB0byB3cmFwLgorICAgICAgICBpbnQgaGVpZ2h0IHsgMCB9OworICAgICAgICBpbnQgd3JhcFkg
eyAwIH07CisgICAgfTsKKworICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgeworICAgICAgICBJ
bnRSZWN0IGZpbHRlclJlZ2lvbjsKKyAgICAgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlOworICAg
ICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKKyAgICAgICAgUGFpbnRpbmdEYXRh
KiBwYWludGluZ0RhdGE7CisgICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAgICAgICAg
aW50IHN0YXJ0WTsKKyAgICAgICAgaW50IGVuZFk7CisgICAgfTsKKworICAgIHN0YXRpYyBpbmxp
bmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQgdCkgeyByZXR1cm4gdCAqIHQgKiAoMyAtIDIgKiB0
KTsgfQorICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0
LCBmbG9hdCBhLCBmbG9hdCBiKSB7IHJldHVybiBhICsgdCAqIChiIC0gYSk7IH0KKworICAgIHN0
YXRpYyBQYWludGluZ0RhdGEgaW5pdFBhaW50aW5nRGF0YShUdXJidWxlbmNlVHlwZSwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgbG9u
ZyBzZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpOwor
ICAgIHN0YXRpYyBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwg
ZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVksIGJvb2wgc3RpdGNo
VGlsZXMpOworCisgICAgc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChj
b25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYg
bm9pc2VWZWN0b3IpOworICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9J
bnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBm
bG9hdENvbXBvbmVudHMpOworICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4g
Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3Rp
dGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpOworCisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0
Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUm
IGZpbHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRp
bmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworICAgIHN0YXRpYyB2
b2lkIGFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisgICAgc3RhdGljIHZv
aWQgYXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0
U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBQYWludGlu
Z0RhdGEmLCBTdGl0Y2hEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L1NvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjYyMzU4ZGY1OTAzYTMwNDI2MzVkZDgyMzRjYWE1YjVmZmI4N2QxNzEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NvZnR3YXJlL1NvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMCwwICsxLDUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGll
ci5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wg
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQoreworICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZl
Y3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZl
clJlc3VsdCgpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBtX2VmZmVjdC5hYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0
ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3Qo
aW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOworICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlciwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0
aW9uSW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kZjg2MDM1M2E1NzA4MjEwMDk5N2QwNDRlYTUyMjNmM2FkYmM4OWM5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9Tb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5oCkBAIC0wLDAgKzEsMzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU291cmNlQWxwaGE7CisKK2NsYXNzIFNvdXJjZUFscGhh
U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxTb3Vy
Y2VBbHBoYT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
U291cmNlQWxwaGE+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJv
b2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3Vy
Y2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTQ1MWRjM2IxM2Y3MGFmYjVlMWI3MDk3YjJlMmQ4YmJmZDVjOWNkZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHAKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpY1NvZnR3YXJlQXBw
bGllci5oIgorCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpCit7CisgICAgYXV0byByZXN1bHRJbWFn
ZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBzb3VyY2VJbWFnZSA9
IGZpbHRlci5zb3VyY2VJbWFnZSgpOworICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUlt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgp
LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0
d2FyZUFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxOTlh
YjdmMTVhMzg4YzEzZWIwNjgzY2E5ZjVmMWMzYTk0MzFjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdy
YXBoaWNTb2Z0d2FyZUFwcGxpZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU291cmNlR3JhcGhpYzsKKworY2xhc3MgU291cmNlR3JhcGhpY1Nv
ZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNl
R3JhcGhpYz4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
U291cmNlR3JhcGhpYz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAg
Ym9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IGMyZjRhNjI4MTc5OTM3ZWZkM2JjNTg0
ODAwMTlkMzdmYmVkZWM2ZmEuLjNjM2Y1YzE1NWE1NmMwNzkxODlhMzM4ZmViYTFlNTc4MjdmNzMx
ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC03MSw3ICs3MSw3
IEBAIENTU0ZpbHRlcjo6Q1NTRmlsdGVyKGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBi
b29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlCiBzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Y3JlYXRlQmx1ckVmZmVjdChjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9u
LCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKIHsKICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBm
bG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOwotICAg
IHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9u
LCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9O
T05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNy
ZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29uc3Vt
ZXI6OkZpbHRlclByb3BlcnR5ID8gRWRnZU1vZGVUeXBlOjpOb25lIDogRWRnZU1vZGVUeXBlOjpE
dXBsaWNhdGUpOwogfQogCiBzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQnJpZ2h0
bmVzc0VmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBj
b21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCmluZGV4IDFhODEzNGE5YzhiN2ZjMGE1MDc1ZWRl
ODFhMGQzNjk3MGU5OGM0N2YuLjQ4YzkwYjIwNDdjMjQwNWIwNjgzMDQxNTdjNWJiMWVmODM5Yjdm
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50LmNwcApAQCAtNzksNyArNzksNyBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdAogCiAgICAg
aWYgKG5hbWUgPT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikgewogICAgICAgICBFZGdlTW9kZVR5
cGUgcHJvcGVydHlWYWx1ZSA9IFNWR1Byb3BlcnR5VHJhaXRzPEVkZ2VNb2RlVHlwZT46OmZyb21T
dHJpbmcodmFsdWUpOwotICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA+IDApCisgICAgICAgIGlm
IChwcm9wZXJ0eVZhbHVlICE9IEVkZ2VNb2RlVHlwZTo6VW5rbm93bikKICAgICAgICAgICAgIG1f
ZWRnZU1vZGUtPnNldEJhc2VWYWxJbnRlcm5hbDxFZGdlTW9kZVR5cGU+KHByb3BlcnR5VmFsdWUp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5yZXBvcnRXYXJuaW5nKCJmZUNvbnZvbHZlTWF0cml4OiBwcm9ibGVtIHBhcnNpbmcgZWRn
ZU1vZGU9XCIiICsgdmFsdWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQgd2lsbCBub3QgYmUgZGlz
cGxheWVkLiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVN
YXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQuaAppbmRleCAxYjZiYmU0ODcxMjc1YzQyMWM4ZGQ0NDA5YzFiNDg5NzI5NWFhMTBhLi4z
OTY3MGZlNjJmZmJlNmFiYTFjY2M2MjQ3OTQwNDVkZmI2YzJjNWI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaApAQCAtMjcsMTkgKzI3LDE5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgogc3RydWN0IFNWR1Byb3BlcnR5
VHJhaXRzPEVkZ2VNb2RlVHlwZT4gewotICAgIHN0YXRpYyB1bnNpZ25lZCBoaWdoZXN0RW51bVZh
bHVlKCkgeyByZXR1cm4gRURHRU1PREVfTk9ORTsgfQotICAgIHN0YXRpYyBFZGdlTW9kZVR5cGUg
aW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gRURHRU1PREVfTk9ORTsgfQorICAgIHN0YXRpYyB1bnNp
Z25lZCBoaWdoZXN0RW51bVZhbHVlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEVk
Z2VNb2RlVHlwZTo6Tm9uZSk7IH0KKyAgICBzdGF0aWMgRWRnZU1vZGVUeXBlIGluaXRpYWxWYWx1
ZSgpIHsgcmV0dXJuIEVkZ2VNb2RlVHlwZTo6Tm9uZTsgfQogCiAgICAgc3RhdGljIFN0cmluZyB0
b1N0cmluZyhFZGdlTW9kZVR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSkg
ewotICAgICAgICBjYXNlIEVER0VNT0RFX1VOS05PV046CisgICAgICAgIGNhc2UgRWRnZU1vZGVU
eXBlOjpVbmtub3duOgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAg
IGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgorICAgICAgICBjYXNlIEVkZ2VNb2RlVHlwZTo6RHVw
bGljYXRlOgogICAgICAgICAgICAgcmV0dXJuICJkdXBsaWNhdGUiX3M7Ci0gICAgICAgIGNhc2Ug
RURHRU1PREVfV1JBUDoKKyAgICAgICAgY2FzZSBFZGdlTW9kZVR5cGU6OldyYXA6CiAgICAgICAg
ICAgICByZXR1cm4gIndyYXAiX3M7Ci0gICAgICAgIGNhc2UgRURHRU1PREVfTk9ORToKKyAgICAg
ICAgY2FzZSBFZGdlTW9kZVR5cGU6Ok5vbmU6CiAgICAgICAgICAgICByZXR1cm4gIm5vbmUiX3M7
CiAgICAgICAgIH0KIApAQCAtNTAsMTIgKzUwLDEyIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0
czxFZGdlTW9kZVR5cGU+IHsKICAgICBzdGF0aWMgRWRnZU1vZGVUeXBlIGZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAiZHVwbGljYXRl
IikKLSAgICAgICAgICAgIHJldHVybiBFREdFTU9ERV9EVVBMSUNBVEU7CisgICAgICAgICAgICBy
ZXR1cm4gRWRnZU1vZGVUeXBlOjpEdXBsaWNhdGU7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAid3Jh
cCIpCi0gICAgICAgICAgICByZXR1cm4gRURHRU1PREVfV1JBUDsKKyAgICAgICAgICAgIHJldHVy
biBFZGdlTW9kZVR5cGU6OldyYXA7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAibm9uZSIpCi0gICAg
ICAgICAgICByZXR1cm4gRURHRU1PREVfTk9ORTsKLSAgICAgICAgcmV0dXJuIEVER0VNT0RFX1VO
S05PV047CisgICAgICAgICAgICByZXR1cm4gRWRnZU1vZGVUeXBlOjpOb25lOworICAgICAgICBy
ZXR1cm4gRWRnZU1vZGVUeXBlOjpVbmtub3duOwogICAgIH0KIH07CiAKQEAgLTExNCw3ICsxMTQs
NyBAQCBwcml2YXRlOgogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iaWFzIHsgU1ZHQW5p
bWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZEludGVnZXI+
IG1fdGFyZ2V0WCB7IFNWR0FuaW1hdGVkSW50ZWdlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVm
PFNWR0FuaW1hdGVkSW50ZWdlcj4gbV90YXJnZXRZIHsgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpjcmVh
dGUodGhpcykgfTsKLSAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9lZGdlTW9kZSB7
IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBFREdFTU9ERV9EVVBMSUNBVEUp
IH07CisgICAgUmVmPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fZWRnZU1vZGUgeyBTVkdBbmlt
YXRlZEVudW1lcmF0aW9uOjpjcmVhdGUodGhpcywgRWRnZU1vZGVUeXBlOjpEdXBsaWNhdGUpIH07
CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2tlcm5lbFVuaXRMZW5ndGhYIHsgU1ZHQW5p
bWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4g
bV9rZXJuZWxVbml0TGVuZ3RoWSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRCb29sZWFuPiBtX3ByZXNlcnZlQWxwaGEgeyBTVkdBbmltYXRl
ZEJvb2xlYW46OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcAppbmRleCBmMWU2YmY0OWE0ZGIzZGNhNzc1YzliN2VmYTVk
YjlkYzg2OTg4NzJhLi5hMDkwNGZiNTI3MWEwODZjNjU0ZTc5NmU0YzI1NTU4Y2E3YzAxMDgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcApA
QCAtNzQsNyArNzQsNyBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQQogCiAgICAgaWYgKG5hbWUg
PT0gU1ZHTmFtZXM6OmVkZ2VNb2RlQXR0cikgewogICAgICAgICBhdXRvIHByb3BlcnR5VmFsdWUg
PSBTVkdQcm9wZXJ0eVRyYWl0czxFZGdlTW9kZVR5cGU+Ojpmcm9tU3RyaW5nKHZhbHVlKTsKLSAg
ICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPiAwKQorICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSAh
PSBFZGdlTW9kZVR5cGU6OlVua25vd24pCiAgICAgICAgICAgICBtX2VkZ2VNb2RlLT5zZXRCYXNl
VmFsSW50ZXJuYWw8RWRnZU1vZGVUeXBlPihwcm9wZXJ0eVZhbHVlKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fybmlu
ZygiZmVHYXVzc2lhbkJsdXI6IHByb2JsZW0gcGFyc2luZyBlZGdlTW9kZT1cIiIgKyB2YWx1ZSAr
ICJcIi4gRmlsdGVyZWQgZWxlbWVudCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuIik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKaW5kZXggZjQwZWIzMzc3
OGM0M2RmNjFlZTU4OTYzZWVjZjllY2RiYTU0OWNjMS4uNDgwMzIyZmY3MDc1ODQ0Mjk2OTViNDk3
YWU2NjQ1ZWQwOWJmOGMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQuaApAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIFJlZjxTVkdBbmlt
YXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3N0ZERldmlhdGlvblggeyBTVkdBbmltYXRlZE51
bWJlcjo6Y3JlYXRlKHRoaXMpIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3N0ZERl
dmlhdGlvblkgeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07Ci0gICAgUmVmPFNW
R0FuaW1hdGVkRW51bWVyYXRpb24+IG1fZWRnZU1vZGUgeyBTVkdBbmltYXRlZEVudW1lcmF0aW9u
OjpjcmVhdGUodGhpcywgRURHRU1PREVfTk9ORSkgfTsKKyAgICBSZWY8U1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbj4gbV9lZGdlTW9kZSB7IFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNyZWF0ZSh0aGlz
LCBFZGdlTW9kZVR5cGU6Ok5vbmUpIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKaW5kZXggOGIw
NTYwYzRkYTgwMDM5NzAxNDhlMWUxNWUyZjMwOTdiOTE1MzE1Ni4uMDFjY2E0ODY4YjJlOWQzYjZj
NmZkZDA3ZDc3ZGM3MTU3MDM4YTliZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmNwcApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0
IEF0bwogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpIHsKICAgICAg
ICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBwcm9wZXJ0eVZhbHVlID0gU1ZHUHJvcGVydHlUcmFp
dHM8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT46OmZyb21TdHJpbmcodmFsdWUpOwotICAgICAgICBp
ZiAocHJvcGVydHlWYWx1ZSA+IDApCisgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlICE9IE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGU6OlVua25vd24pCiAgICAgICAgICAgICBtX3N2Z09wZXJhdG9yLT5z
ZXRCYXNlVmFsSW50ZXJuYWw8TW9ycGhvbG9neU9wZXJhdG9yVHlwZT4ocHJvcGVydHlWYWx1ZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhv
bG9neUVsZW1lbnQuaAppbmRleCBiMjFiNmY1YzQ3Yjc4NWRmMjhmMDEzZWRlNTQwMWM4NjZkNDBl
OWRkLi5jYWJmMDU4MGMyNTM0ZGViNDUxNjg5MWJhNTI5YTdlYTA2MWRmYTVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKQEAgLTI3LDE2ICsyNywxNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlPD4KIHN0cnVjdCBTVkdQcm9wZXJ0eVRy
YWl0czxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlPiB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hl
c3RFbnVtVmFsdWUoKSB7IHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFOyB9Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhpZ2hlc3RFbnVtVmFsdWUoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oTW9ycGhvbG9neU9wZXJhdG9yVHlwZTo6RGlsYXRlKTsgfQogCiAgICAgc3Rh
dGljIFN0cmluZyB0b1N0cmluZyhNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCiAgICAgewog
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfVU5LTk9XTjoKKyAgICAgICAgY2FzZSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpVbmtub3du
OgogICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIGNhc2UgRkVNT1JQ
SE9MT0dZX09QRVJBVE9SX0VST0RFOgorICAgICAgICBjYXNlIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGU6OkVyb2RlOgogICAgICAgICAgICAgcmV0dXJuICJlcm9kZSJfczsKLSAgICAgICAgY2FzZSBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFOgorICAgICAgICBjYXNlIE1vcnBob2xvZ3lPcGVy
YXRvclR5cGU6OkRpbGF0ZToKICAgICAgICAgICAgIHJldHVybiAiZGlsYXRlIl9zOwogICAgICAg
ICB9CiAKQEAgLTQ3LDEwICs0NywxMCBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8TW9ycGhv
bG9neU9wZXJhdG9yVHlwZT4gewogICAgIHN0YXRpYyBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIGZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9
PSAiZXJvZGUiKQotICAgICAgICAgICAgcmV0dXJuIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9E
RTsKKyAgICAgICAgICAgIHJldHVybiBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpFcm9kZTsKICAg
ICAgICAgaWYgKHZhbHVlID09ICJkaWxhdGUiKQotICAgICAgICAgICAgcmV0dXJuIEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9ESUxBVEU7Ci0gICAgICAgIHJldHVybiBGRU1PUlBIT0xPR1lfT1BFUkFU
T1JfVU5LTk9XTjsKKyAgICAgICAgICAgIHJldHVybiBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpE
aWxhdGU7CisgICAgICAgIHJldHVybiBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpVbmtub3duOwog
ICAgIH0KIH07CiAKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKIAogICAgIFByb3BlcnR5UmVn
aXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwotICAgIFJl
ZjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3N2Z09wZXJhdG9yIHsgU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkgfTsKKyAg
ICBSZWY8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zdmdPcGVyYXRvciB7IFNWR0FuaW1hdGVk
RW51bWVyYXRpb246OmNyZWF0ZSh0aGlzLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlOjpFcm9kZSkg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVzWCB7IFNWR0FuaW1hdGVkTnVt
YmVyOjpjcmVhdGUodGhpcykgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcmFkaXVz
WSB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>