<?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>157016</bug_id>
          
          <creation_ts>2016-04-25 19:36:16 -0700</creation_ts>
          <short_desc>RenderElement::style() should return const RenderStyle</short_desc>
          <delta_ts>2016-04-26 11:21:13 -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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>kling</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1187179</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-25 19:36:16 -0700</bug_when>
    <thetext>Style shouldn&apos;t generally be mutable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187181</commentid>
    <comment_count>1</comment_count>
      <attachid>277310</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-25 19:36:41 -0700</bug_when>
    <thetext>Created attachment 277310
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187188</commentid>
    <comment_count>2</comment_count>
      <attachid>277312</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-25 19:51:07 -0700</bug_when>
    <thetext>Created attachment 277312
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187319</commentid>
    <comment_count>3</comment_count>
      <attachid>277354</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-26 04:47:55 -0700</bug_when>
    <thetext>Created attachment 277354
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187328</commentid>
    <comment_count>4</comment_count>
      <attachid>277359</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-26 05:25:11 -0700</bug_when>
    <thetext>Created attachment 277359
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187330</commentid>
    <comment_count>5</comment_count>
      <attachid>277360</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-26 05:36:20 -0700</bug_when>
    <thetext>Created attachment 277360
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187338</commentid>
    <comment_count>6</comment_count>
      <attachid>277363</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-26 06:08:49 -0700</bug_when>
    <thetext>Created attachment 277363
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187346</commentid>
    <comment_count>7</comment_count>
      <attachid>277364</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-26 07:06:12 -0700</bug_when>
    <thetext>Created attachment 277364
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187357</commentid>
    <comment_count>8</comment_count>
      <attachid>277370</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-26 08:02:56 -0700</bug_when>
    <thetext>Created attachment 277370
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187425</commentid>
    <comment_count>9</comment_count>
      <attachid>277389</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-26 09:41:30 -0700</bug_when>
    <thetext>Created attachment 277389
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187455</commentid>
    <comment_count>10</comment_count>
      <attachid>277396</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-26 10:31:20 -0700</bug_when>
    <thetext>Created attachment 277396
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187476</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-26 11:21:13 -0700</bug_when>
    <thetext>https://trac.webkit.org/r200098</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277310</attachid>
            <date>2016-04-25 19:36:41 -0700</date>
            <delta_ts>2016-04-25 19:51:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>const-renderstyle.patch</filename>
            <type>text/plain</type>
            <size>155346</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjAwMDQwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNCw3
ICsxMTM0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU3R5bGVSYW5nZQogewog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVu
ZGVyZXIgPSByZW5kZXJlcjsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyZXItPnN0
eWxlKCk7CisgICAgYXV0byogc3R5bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CiAKICAgICAvLyB0
cmF2ZXJzZSBiYWNrd2FyZCBieSByZW5kZXJlciB0byBsb29rIGZvciBzdHlsZSBjaGFuZ2UKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogciA9IHJlbmRlcmVyLT5wcmV2aW91c0luUHJlT3JkZXIoKTsg
cjsgciA9IHItPnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjAw
MDQwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMCw3ICs3MDAsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVl
TGlzdD4gY3JlYXRlUG9zaXRpb25MCiAgICAgcmV0dXJuIHBvc2l0aW9uTGlzdDsKIH0KIAotc3Rh
dGljIFJlZlB0cjxDU1NWYWx1ZT4gcG9zaXRpb25PZmZzZXRWYWx1ZShSZW5kZXJTdHlsZSYgc3R5
bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBv
c2l0aW9uT2Zmc2V0VmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQpCiB7CiAgICAgTGVuZ3RoIGxlbmd0aDsKICAgICBzd2l0Y2ggKHByb3BlcnR5
SUQpIHsKQEAgLTczNyw3ICs3MzcsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwb3NpdGlv
bk9mZnNldFZhCiAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRl
clN0eWxlKiBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAorUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjdXJyZW50Q29sb3JPclZhbGlkQ29s
b3IoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7
CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBsb29rIGF0IHZpc2l0ZWQgaW5mb3JtYXRp
b24sIHNvIHRoYXQgY29tcHV0ZWQgc3R5bGUgZG9lc24ndCBleHBvc2UgdGhhdC4KICAgICBpZiAo
IWNvbG9yLmlzVmFsaWQoKSkKQEAgLTExNDMsNyArMTE0Myw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFs
dWVMaXN0PiBnZXRUcmFuc2l0aW9uUHIKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
Ci1zdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xsU25hcERlc3RpbmF0aW9uKFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgTGVuZ3RoU2l6ZSYgZGVzdGluYXRpb24pCitzdGF0aWMgUmVmPENT
U1ZhbHVlTGlzdD4gc2Nyb2xsU25hcERlc3RpbmF0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgTGVuZ3RoU2l6ZSYgZGVzdGluYXRpb24pCiB7CiAgICAgYXV0byBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGxpc3QuZ2V0KCkuYXBwZW5k
KHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoZGVzdGluYXRpb24ud2lkdGgoKSwgc3R5
bGUpKTsKQEAgLTExNTEsNyArMTE1MSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBzY3Jv
bGxTbmFwRGVzdGkKICAgICByZXR1cm4gbGlzdDsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4g
c2Nyb2xsU25hcFBvaW50cyhSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFNjcm9sbFNuYXBQb2lu
dHMqIHBvaW50cykKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBQb2ludHMoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTY3JvbGxTbmFwUG9pbnRzKiBwb2ludHMpCiB7CiAg
ICAgaWYgKCFwb2ludHMpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwpAQCAtMTE2Niw3ICsxMTY2LDcg
QEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcFBvaW50cyhSZQogICAgIHJldHVybiBX
VEZNb3ZlKGxpc3QpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxTbmFwQ29vcmRp
bmF0ZXMoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBWZWN0b3I8TGVuZ3RoU2l6ZT4mIGNvb3Jk
aW5hdGVzKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcENvb3JkaW5hdGVzKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPExlbmd0aFNpemU+JiBjb29yZGluYXRl
cykKIHsKICAgICBpZiAoY29vcmRpbmF0ZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25l
KTsKQEAgLTE4MDcsNyArMTgwNyw3IEBAIHN0YXRpYyB2b2lkIGxvZ1VuaW1wbGVtZW50ZWRQcm9w
ZXJ0eUlEKEMKICAgICBMT0dfRVJST1IoIldlYktpdCBkb2VzIG5vdCB5ZXQgaW1wbGVtZW50IGdl
dENvbXB1dGVkU3R5bGUgZm9yICclcycuIiwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5SUQpKTsK
IH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9tU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9tU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVl
TGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc3R5bGUtPmZvbnRDYXNjYWRlKCkuZmFtaWx5Q291bnQoKTsgKytpKQpAQCAtMTgxNSw3ICsx
ODE1LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9tUwogICAgIHJl
dHVybiBsaXN0OwogfQogCi1zdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lSGVpZ2h0
RnJvbVN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFs
dWU+IGxpbmVIZWlnaHRGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAg
IExlbmd0aCBsZW5ndGggPSBzdHlsZS5saW5lSGVpZ2h0KCk7CiAgICAgaWYgKGxlbmd0aC5pc05l
Z2F0aXZlKCkpIC8vIElmIHRydWUsIGxpbmUtaGVpZ2h0IG5vdCBzZXQ7IHVzZSB0aGUgZm9udCdz
IGxpbmUgc3BhY2luZy4KQEAgLTE4MzAsMTkgKzE4MzAsMTkgQEAgc3RhdGljIFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbGluZUhlaWdodAogICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVl
KGZsb2F0VmFsdWVGb3JMZW5ndGgobGVuZ3RoLCAwKSwgc3R5bGUpOwogfQogCi1zdGF0aWMgUmVm
PENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U2l6ZUZyb21TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUp
CitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U2l6ZUZyb21TdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUo
c3R5bGUuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCksIHN0eWxlKTsKIH0KIAotc3Rh
dGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFN0eWxlRnJvbVN0eWxlKFJlbmRlclN0eWxl
KiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRTdHlsZUZyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKS5pdGFsaWMoKSkKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSXRhbGljKTsKICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3Jt
YWwpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudEZyb21TdHlsZShSZW5k
ZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudEZyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKS52YXJpYW50U2V0dGluZ3MoKS5pc0FsbE5vcm1hbCgpKQogICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b3JtYWwpOwpAQCAtMjAyOSw3ICsyMDI5LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZh
cmlhbnRGcm9tU3R5bAogICAgIHJldHVybiBXVEZNb3ZlKGxpc3QpOwogfQogCi1zdGF0aWMgUmVm
PENTU1ByaW1pdGl2ZVZhbHVlPiBmb250V2VpZ2h0RnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHls
ZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRXZWlnaHRGcm9tU3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHN3aXRjaCAoc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpLndlaWdodCgpKSB7CiAgICAgY2FzZSBGb250V2VpZ2h0MTAwOgpAQCAtMjA1NSw3ICsy
MDU1LDcgQEAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdodAogICAgIHJl
dHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vcm1hbCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRTeW50aGVzaXNGcm9t
U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFN5bnRo
ZXNpc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxl
LmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSA9PSBGb250U3ludGhlc2lzTm9uZSkK
ICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTm9uZSk7CkBAIC0yMDcyLDcgKzIwNzIsNyBAQCB0eXBlZGVmIGNvbnN0
IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqUmVuCiB0eXBlZGVmIExheW91dFVuaXQgKFJlbmRlckJv
eE1vZGVsT2JqZWN0OjoqUmVuZGVyQm94Q29tcHV0ZWRDU1NWYWx1ZUdldHRlcikoKSBjb25zdDsK
IAogdGVtcGxhdGU8UmVuZGVyU3R5bGVMZW5ndGhHZXR0ZXIgbGVuZ3RoR2V0dGVyLCBSZW5kZXJC
b3hDb21wdXRlZENTU1ZhbHVlR2V0dGVyIGNvbXB1dGVkQ1NTVmFsdWVHZXR0ZXI+Ci1pbmxpbmUg
UmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZhbHVlKFJl
bmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK2lubGluZSBSZWZQdHI8
Q1NTVmFsdWU+IHpvb21BZGp1c3RlZFBhZGRpbmdPck1hcmdpblBpeGVsVmFsdWUoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIExlbmd0aCB1
bnpvb216ZWRMZW5ndGggPSAoc3R5bGUuKmxlbmd0aEdldHRlcikoKTsKICAgICBpZiAoIWlzPFJl
bmRlckJveD4ocmVuZGVyZXIpIHx8IHVuem9vbXplZExlbmd0aC5pc0ZpeGVkKCkpCkBAIC0yMDgx
LDcgKzIwODEsNyBAQCBpbmxpbmUgUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRkCiB9
CiAKIHRlbXBsYXRlPFJlbmRlclN0eWxlTGVuZ3RoR2V0dGVyIGxlbmd0aEdldHRlcj4KLWlubGlu
ZSBib29sIHBhZGRpbmdPck1hcmdpbklzUmVuZGVyZXJEZXBlbmRlbnQoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoraW5saW5lIGJvb2wgcGFkZGluZ09yTWFyZ2lu
SXNSZW5kZXJlckRlcGVuZGVudChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzQm94KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxMzksNyArMjEzOSw3IEBAIHN0YXRpYyBDU1NW
YWx1ZUlEIGNvbnZlcnRUb1JlZ2lvbkJyZWFrKEIKIH0KICNlbmRpZgogICAgIAotc3RhdGljIGJv
b2wgaXNMYXlvdXREZXBlbmRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZW5kZXJTdHls
ZSogc3R5bGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMgYm9vbCBpc0xheW91dERl
cGVuZGVudChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsK
ICAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CkBAIC0yMjY3LDcgKzIyNjcsNyBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgdXBkYXRlU3R5bGVJZk5lZWRlZEZvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIGNvbXB1dGVSZW5kZXJTdHlsZUZvclByb3BlcnR5
KE5vZGUqIHN0eWxlZE5vZGUsIFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIsIENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgb3duZWRT
dHlsZSkKK3N0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVSZW5kZXJTdHls
ZUZvclByb3BlcnR5KE5vZGUqIHN0eWxlZE5vZGUsIFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVj
aWZpZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiYgb3duZWRTdHlsZSkKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc3R5bGVk
Tm9kZS0+cmVuZGVyZXIoKTsKIApAQCAtMjM3Myw3ICsyMzczLDcgQEAgUmVmUHRyPENTU1ZhbHVl
PiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gb3duZWRTdHlsZTsKLSAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSBudWxscHRyOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IG51bGxw
dHI7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG51bGxwdHI7CiAgICAgYm9vbCBmb3Jj
ZUZ1bGxMYXlvdXQgPSBmYWxzZTsKICAgICBpZiAodXBkYXRlTGF5b3V0KSB7CkBAIC0zODYxLDcg
KzM4NjEsNyBAQCB1bnNpZ25lZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmxlCiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IG5vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKKyAgICBhdXRv
KiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsK
ICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzg4MCw3ICszODgwLDcg
QEAgU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6aXRlbQogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcik7CisgICAg
YXV0byogc3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmll
cik7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAg
CkBAIC0zODk5LDcgKzM4OTksNyBAQCBib29sIENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3Bl
cnR5TWF0CiB7CiAgICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlGb250U2l6ZSAmJiBp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBtX25vZGUpIHsKICAgICAgICAgbV9ub2Rl
LT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAg
ICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9ub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNl
dWRvRWxlbWVudFNwZWNpZmllcikpIHsKKyAgICAgICAgaWYgKGF1dG8qIHN0eWxlID0gbV9ub2Rl
LT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcikpIHsKICAgICAgICAgICAg
IGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
LmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSAmJiBwcmltaXRpdmVWYWx1
ZS5nZXRWYWx1ZUlEKCkgPT0gc2l6ZUlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAyMDAwNDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBwcml2YXRlOgogICAgIE5vZGUqIHN0eWxl
ZE5vZGUoKSBjb25zdDsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3ZnUHJvcGVydHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0KSBjb25zdDsKLSAgICBSZWZQdHI8U1ZHUGFpbnQ+
IGFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFpbnQ+LCBSZW5k
ZXJTdHlsZSopIGNvbnN0OworICAgIFJlZlB0cjxTVkdQYWludD4gYWRqdXN0U1ZHUGFpbnRGb3JD
dXJyZW50Q29sb3IoUGFzc1JlZlB0cjxTVkdQYWludD4sIGNvbnN0IFJlbmRlclN0eWxlKikgY29u
c3Q7CiAKICAgICBzdGF0aWMgUmVmPENTU1ZhbHVlPiB2YWx1ZUZvclNoYWRvdyhjb25zdCBTaGFk
b3dEYXRhKiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUmLCBBZGp1c3RQaXhlbFZh
bHVlc0ZvckNvbXB1dGVkU3R5bGUgPSBBZGp1c3RQaXhlbFZhbHVlcyk7Ci0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3IoUmVuZGVyU3R5bGUqLCBj
b25zdCBDb2xvciYpIGNvbnN0OworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3VycmVu
dENvbG9yT3JWYWxpZENvbG9yKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQ29sb3ImKSBjb25z
dDsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldENTU1Byb3BlcnR5VmFsdWVzRm9yU2hv
cnRoYW5kUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7CiAg
ICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZ2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3JTaWRlc1Nob3J0
aGFuZChjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwCShyZXZpc2lv
biAyMDAwNDApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgZmxvYXQgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YTo6em9vbSgpIAogZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6
OnZpZXdwb3J0V2lkdGhGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2Nv
bXB1dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7
CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3Bv
cnRVbml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtNTcsNyArNTcsNyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3Bv
CiBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRIZWlnaHRGYWN0b3Io
KSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRTaXplKQotICAg
ICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwogCiAgICAgaWYg
KCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjgsNyArNjgsNyBAQCBkb3Vi
bGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvCiBkb3VibGUgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YTo6dmlld3BvcnRNaW5GYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0
eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3
cG9ydFVuaXRzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+
c2V0SGFzVmlld3BvcnRVbml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtODAsNyArODAsNyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YTo6dmlld3BvCiBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRN
YXhGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRT
aXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7CisgICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwog
CiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oCShyZXZpc2lvbiAy
MDAwNDApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlbmRlclZpZXc7CiAKIGNs
YXNzIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgewogcHVibGljOgotICAgIENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9v
dFN0eWxlLCBjb25zdCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBmbG9hdCB6b29tLCBib29sIGNv
bXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpCisgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YShj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGNv
bnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGZsb2F0IHpvb20sIGJvb2wgY29tcHV0aW5nRm9u
dFNpemUgPSBmYWxzZSkKICAgICAgICAgOiBtX3N0eWxlKHN0eWxlKQogICAgICAgICAsIG1fcm9v
dFN0eWxlKHJvb3RTdHlsZSkKICAgICAgICAgLCBtX3JlbmRlclZpZXcocmVuZGVyVmlldykKQEAg
LTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoem9vbSA+IDApOwogICAgIH0K
IAotICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25zdCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBi
b29sIGNvbXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpCisgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5
bGUsIGNvbnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGJvb2wgY29tcHV0aW5nRm9udFNpemUg
PSBmYWxzZSkKICAgICAgICAgOiBtX3N0eWxlKHN0eWxlKQogICAgICAgICAsIG1fcm9vdFN0eWxl
KHJvb3RTdHlsZSkKICAgICAgICAgLCBtX3JlbmRlclZpZXcocmVuZGVyVmlldykKQEAgLTY3LDcg
KzY3LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQogICAgIGNvbnN0IFJlbmRlclN0eWxlKiByb290
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RTdHlsZTsgfQogICAgIGZsb2F0IHpvb20oKSBj
b25zdDsKICAgICBib29sIGNvbXB1dGluZ0ZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21w
dXRpbmdGb250U2l6ZTsgfQpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBt
X3N0eWxlOwogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RTdHlsZTsKICAgICBjb25zdCBS
ZW5kZXJWaWV3KiBtX3JlbmRlclZpZXc7CiAgICAgZmxvYXQgbV96b29tOwpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkocmV2aXNpb24gMjAwMDQwKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3
IEBAIFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpzdHlsZSgpIGNvbnMKICAgICByZXR1cm4g
bV9yZXNvbHZlci0+c3R5bGUoKTsKIH0KIAotUmVuZGVyU3R5bGUqIENTU1RvU3R5bGVNYXA6OnJv
b3RFbGVtZW50U3R5bGUoKSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIENTU1RvU3R5bGVNYXA6
OnJvb3RFbGVtZW50U3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3Jlc29sdmVyLT5yb290
RWxlbWVudFN0eWxlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1h
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgJKHJl
dmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBzaW1pbGFyIHRv
IGhvdyBQYWludEluZm8vTGF5b3V0U3RhdGUgY2FjaGUgdmFsdWVzIG5lZWRlZCBmb3IKICAgICAv
LyB0aGUgY3VycmVudCBwYWludC9sYXlvdXQuCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29u
c3Q7Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdDsKKyAgICBjb25z
dCBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0OwogICAgIGJvb2wgdXNlU1ZH
Wm9vbVJ1bGVzKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcGFydCBv
ZiBzb21lIHNvcnQgb2YgU3R5bGVJbWFnZUNhY2hlIG9iamVjdCB3aGljaApJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkocmV2aXNpb24gMjAwMDQwKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSwxMCArODUsMTAgQEAgTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2
YWx1YXRvcgogewogfQogCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5RXZhbHVhdG9y
KGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiBmcmFtZSwgUmVuZGVyU3R5
bGUqIHN0eWxlKQorTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihjb25z
dCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkKICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVkTWVkaWFUeXBlKQogICAgICwg
bV9mcmFtZShmcmFtZSkKLSAgICAsIG1fc3R5bGUoV1RGTW92ZShzdHlsZSkpCisgICAgLCBtX3N0
eWxlKHN0eWxlKQogICAgICwgbV9leHBSZXN1bHQoZmFsc2UpIC8vIGRvZXNuJ3QgbWF0dGVyIHdo
ZW4gd2UgaGF2ZSBtX2ZyYW1lIGFuZCBtX3N0eWxlCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcg
KzgwLDcgQEAgcHVibGljOgogCiAgICAgLyoqIENyZWF0ZXMgZXZhbHVhdG9yIHdoaWNoIGV2YWx1
YXRlcyBmdWxsIG1lZGlhIHF1ZXJpZXMKICAgICAgKi8KLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9y
KGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiwgUmVuZGVyU3R5bGUqKTsK
KyAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUs
IEZyYW1lKiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKIAogICAgIH5NZWRpYVF1ZXJ5RXZhbHVhdG9y
KCk7CiAKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9t
ZWRpYVR5cGU7CiAgICAgRnJhbWUqIG1fZnJhbWUgeyBudWxscHRyIH07IC8vIG5vdCBvd25lZAot
ICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlIHsgbnVsbHB0ciB9OworICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBtX3N0eWxlIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9leHBSZXN1bHQ7CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjAwMDQwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NW
R0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcg
KzkzLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gc3Ryb2tlRGFzaEFycmF5VAogICAgIHJl
dHVybiBsaXN0OwogfQogCi1SZWZQdHI8U1ZHUGFpbnQ+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6
OmFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFpbnQ+IG5ld1Bh
aW50LCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitSZWZQdHI8U1ZHUGFpbnQ+IENvbXB1dGVk
U3R5bGVFeHRyYWN0b3I6OmFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8
U1ZHUGFpbnQ+IG5ld1BhaW50LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAg
ICAgUmVmUHRyPFNWR1BhaW50PiBwYWludCA9IG5ld1BhaW50OwogICAgIGlmIChwYWludC0+cGFp
bnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SIHx8IHBhaW50
LT5wYWludFR5cGUoKSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfQ1VSUkVOVENPTE9S
KQpAQCAtMTExLDcgKzExMSw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJh
Y3RvcjoKICAgICBpZiAodXBkYXRlTGF5b3V0KQogICAgICAgICBub2RlLT5kb2N1bWVudCgpLnVw
ZGF0ZUxheW91dCgpOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRT
dHlsZSgpOworICAgIGF1dG8qIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZSgpOwogICAgIGlm
ICghc3R5bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9Tb3VyY2VTaXplTGlzdC5jcHAJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVuaXF1ZV9w
dHI8TWVkaWFRdWVyeUV4cD4mJiBleHByZXNzaW9uLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEZyYW1l
KiBmcmFtZSkKK3N0YXRpYyBib29sIG1hdGNoKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhw
PiYmIGV4cHJlc3Npb24sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRnJhbWUqIGZyYW1lKQog
ewogICAgIGlmIChleHByZXNzaW9uLT5tZWRpYUZlYXR1cmUoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNDcsMTIgKzQ3LDEyIEBAIHN0YXRpYyBib29sIG1hdGNoKHN0ZDo6
dW5pcXVlX3B0cjxNZWRpYVEKICAgICByZXR1cm4gbWVkaWFRdWVyeUV2YWx1YXRvci5ldmFsKG1l
ZGlhUXVlcnlTZXQuZ2V0KCkpOwogfQogCi1zdGF0aWMgZmxvYXQgZGVmYXVsdExlbmd0aChSZW5k
ZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCitzdGF0aWMgZmxvYXQgZGVmYXVsdExl
bmd0aChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCiB7CiAgICAg
cmV0dXJuIGNsYW1wVG88ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTm9uQ2FsY0xl
bmd0aERvdWJsZShDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0eWxlLCB2aWV3
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVywgMTAwLjApKTsKIH0KIAotc3RhdGljIGZsb2F0
IGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRl
clZpZXcqIHZpZXcpCitzdGF0aWMgZmxvYXQgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyVmlldyogdmlldykKIHsKICAgICBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0eWxlLCB2aWV3
KTsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewpAQCAtNzAsNyArNzAs
NyBAQCBmbG9hdCBwYXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcgc2l6CiB7CiAgICAgaWYg
KCF2aWV3KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSB2aWV3
LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gdmlldy0+c3R5bGUoKTsKICAgICBmb3IgKGF1
dG8mIHNvdXJjZVNpemUgOiBDU1NQYXJzZXIoQ1NTU3RyaWN0TW9kZSkucGFyc2VTaXplc0F0dHJp
YnV0ZShzaXplc0F0dHJpYnV0ZSkpIHsKICAgICAgICAgaWYgKG1hdGNoKFdURk1vdmUoc291cmNl
U2l6ZS5leHByZXNzaW9uKSwgc3R5bGUsIGZyYW1lKSkKICAgICAgICAgICAgIHJldHVybiBjb21w
dXRlTGVuZ3RoKHNvdXJjZVNpemUubGVuZ3RoLmdldCgpLCBzdHlsZSwgdmlldyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCShyZXZpc2lvbiAyMDAwNDApCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3NSw3ICs1NzUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0YXRp
YyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlKQorICAg
IHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHls
ZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2UoKTsKICAgICB9CkBAIC02NjQs
NyArNjY0LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaQogCiBp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENsaXAoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7CisgICAgYXV0byogcGFyZW50U3R5bGUgPSBzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7CiAgICAgaWYgKCFwYXJlbnRTdHlsZS0+aGFzQ2xpcCgp
KQogICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsQ2xpcChzdHlsZVJlc29sdmVyKTsKICAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENsaXAocGFyZW50U3R5bGUtPmNsaXBUb3AoKSwgcGFy
ZW50U3R5bGUtPmNsaXBSaWdodCgpLCBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgpLCBwYXJlbnRT
dHlsZS0+Y2xpcExlZnQoKSk7CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCB0ZW1wbGF0ZSA8U3R5bGVC
dWlsZGVyQ3VzdG9tOjpDb3VudGVyQmVoCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdENvdW50ZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKICAg
ICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmFjY2Vz
c0NvdW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IHN0eWxlUmVz
b2x2ZXIucGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkgeworICAgIGZv
ciAoYXV0byYga2V5VmFsdWUgOiBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oc3R5bGVSZXNvbHZl
ci5wYXJlbnRTdHlsZSgpKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkgewogICAgICAgICBD
b3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoa2V5VmFsdWUua2V5LCBDb3Vu
dGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChjb3VudGVyQmVo
YXZpb3IgPT0gUmVzZXQpCiAgICAgICAgICAgICBkaXJlY3RpdmVzLmluaGVyaXRSZXNldChrZXlW
YWx1ZS52YWx1ZSk7CkBAIC0xMzM3LDcgKzEzMzcsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsCiAgICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAg
ICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkt
PnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBj
b250ZW50VmFsdWUuZ2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKICAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdHlsZVJlc29sdmVyLmVsZW1lbnQoKS0+
Z2V0QXR0cmlidXRlKGF0dHIpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRT
ZXQpOwpAQCAtMTcwNiw3ICsxNzA2LDcgQEAgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVBbHQoUwogICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zdHlsZVR5cGUo
KSA9PSBOT1BTRVVETykKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VW5p
cXVlKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5
bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4o
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+c2V0VW5pcXVlKCk7CiAKICAgICAgICAgUXVh
bGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgp
LCBudWxsQXRvbSk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdHlsZVJl
c29sdmVyLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjAwMDQxKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNyArMzM2LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aQogICAgIG1fbWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwID0gMDsKIH0KIAotU3R5bGVSZXNv
bHZlcjo6U3RhdGU6OlN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGRvY3VtZW50RWxlbWVudFN0eWxlLCBjb25zdCBSZW5k
ZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3Rv
ckZpbHRlcikKK1N0eWxlUmVzb2x2ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBk
b2N1bWVudEVsZW1lbnRTdHlsZSwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5n
LCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCiAgICAgOiBtX2VsZW1lbnQo
JmVsZW1lbnQpCiAgICAgLCBtX3BhcmVudFN0eWxlKHBhcmVudFN0eWxlKQogICAgICwgbV9yZWdp
b25Gb3JTdHlsaW5nKHJlZ2lvbkZvclN0eWxpbmcpCkBAIC0zODAsNyArMzgwLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShjbwogICAgIHJldHVybiBwYXJlbnROb2Rl
ICYmIHBhcmVudE5vZGUtPmlzU2hhZG93Um9vdCgpOwogfQogCi1FbGVtZW50U3R5bGUgU3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwg
Y29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRl
ciogc2VsZWN0b3JGaWx0ZXIpCitFbGVtZW50U3R5bGUgU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JF
bGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwgY29uc3QgUmVuZGVy
UmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JG
aWx0ZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5Mb2FkUGVuZGluZ0ltYWdlcyk7CiAK
QEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9y
QW5pCiAgICAgfQogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBQ
c2V1ZG9TdHlsZVJlcXVlc3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgUmVuZGVyU3R5bGUmIHBhcmVu
dFN0eWxlKQorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUHNldWRvU3R5
bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRT
dHlsZSkKIHsKICAgICBtX3N0YXRlID0gU3RhdGUoZWxlbWVudCwgJnBhcmVudFN0eWxlKTsKIApA
QCAtMTYzMSw3ICsxNjMxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1BybwogICAgIH0KIAogICAgIGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBhcmVudFN0eWxlKCkt
Pmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0lu
aGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgc3RhdGUucGFyZW50U3R5bGUoKS0+c2V0SGFz
RXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJTdHlsZSo+KHN0YXRlLnBhcmVudFN0eWxlKCkpLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVk
UHJvcGVydGllcygpOwogICAgIAogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgewog
ICAgICAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBjdXN0b21Qcm9wZXJ0eSA9ICZkb3duY2Fz
dDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqdmFsdWVUb0FwcGx5KTsKQEAgLTE3MzQsNyArMTcz
NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanUKIH0KICNlbmRp
ZgogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSog
c3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hl
Y2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKQogewogICAgIGlmICghcGFyZW50U3R5bGUpCiAgICAgICAgIHJldHVybjsKQEAg
LTE3NDgsNyArMTc0OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdl
KFIKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRl
clN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQordm9pZCBTdHlsZVJlc29s
dmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgY29uc3QgYXV0byYgY2hpbGRGb250
ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSwxOCArMTQxLDE4IEBAIHB1YmxpYzoKICAg
ICBTdHlsZVJlc29sdmVyKERvY3VtZW50Jik7CiAgICAgflN0eWxlUmVzb2x2ZXIoKTsKIAotICAg
IEVsZW1lbnRTdHlsZSBzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBjb25z
dCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25zdCBTZWxlY3Rv
ckZpbHRlciogPSBudWxscHRyKTsKKyAgICBFbGVtZW50U3R5bGUgc3R5bGVGb3JFbGVtZW50KGNv
bnN0IEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJ1bGVNYXRjaGlu
Z0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JT
dHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CiAKICAg
ICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKGNvbnN0IEVsZW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIGNvbnN0IFBzZXVk
b1N0eWxlUmVxdWVzdCYsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYs
IGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHls
ZSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUGFnZShpbnQg
cGFnZUluZGV4KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRlZmF1bHRTdHls
ZUZvckVsZW1lbnQoKTsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuc3R5bGUoKTsgfQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGUoKTsgfQotICAgIFJlbmRlclN0eWxlKiByb290
RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCk7
IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdEVsZW1l
bnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpOyB9CiAg
ICAgY29uc3QgRWxlbWVudCogZWxlbWVudCgpIHsgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCgpOyB9
CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIFNl
dHRpbmdzKiBkb2N1bWVudFNldHRpbmdzKCkgeyByZXR1cm4gbV9kb2N1bWVudC5zZXR0aW5ncygp
OyB9CkBAIC0zMTcsOCArMzE3LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhh
dCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoCi0gICAg
dm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpOwotICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxl
KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0Zh
bWlseUNoYW5nZShSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7
CisgICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpOwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogICAg
IHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChSZW5kZXJTdHlsZSopOwogI2VuZGlmCkBAIC0z
NjEsNyArMzYxLDcgQEAgcHVibGljOgogICAgIGNsYXNzIFN0YXRlIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIFN0YXRlKCkgeyB9Ci0gICAgICAgIFN0YXRlKGNvbnN0IEVsZW1lbnQmLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHlsZSA9IG51
bGxwdHIsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IG51bGxwdHIsIGNv
bnN0IFNlbGVjdG9yRmlsdGVyKiA9IG51bGxwdHIpOworICAgICAgICBTdGF0ZShjb25zdCBFbGVt
ZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSog
ZG9jdW1lbnRFbGVtZW50U3R5bGUgPSBudWxscHRyLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lv
bkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25zdCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsK
IAogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBjbGVhcigpOwpAQCAtMzc0LDggKzM3NCw4IEBA
IHB1YmxpYzoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiB0YWtlU3R5bGUo
KSB7IHJldHVybiBXVEZNb3ZlKG1fc3R5bGUpOyB9CiAKICAgICAgICAgdm9pZCBzZXRQYXJlbnRT
dHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+KTsKLSAgICAgICAgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQotICAgICAgICBS
ZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1l
bnRTdHlsZTsgfQorICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBy
b290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9CiAK
ICAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWdpb25Gb3JTdHlsaW5nOyB9CiAgICAgICAgIEVJbnNpZGVMaW5rIGVsZW1lbnRM
aW5rU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRMaW5rU3RhdGU7IH0KQEAgLTQyNyw5
ICs0MjcsOSBAQCBwdWJsaWM6CiAKICAgICAgICAgY29uc3QgRWxlbWVudCogbV9lbGVtZW50IHsg
bnVsbHB0ciB9OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7
Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlIHsgbnVsbHB0ciB9OworICAgICAg
ICBjb25zdCBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsKICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX293bmVkUGFyZW50U3R5bGU7Ci0gICAgICAg
IFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07CisgICAgICAgIGNv
bnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07CiAKICAgICAg
ICAgY29uc3QgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmcgeyBudWxscHRyIH07CiAg
ICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDA4
LDcgKzIwMDgsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nCiAg
ICAgbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSBvbGRJZ25vcmU7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxlbWVudElnbm9yaW5nUGVu
ZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxlbWVu
dElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBBU1NFUlQoJmVsZW1lbnQuZG9jdW1lbnQoKSA9
PSB0aGlzKTsKIApAQCAtMjUxNSw3ICsyNTE1LDcgQEAgdm9pZCBEb2N1bWVudDo6c2V0VmlzdWFs
bHlPcmRlcmVkKCkKIHsKICAgICBtX3Zpc3VhbGx5T3JkZXJlZCA9IHRydWU7CiAgICAgaWYgKHJl
bmRlclZpZXcoKSkKLSAgICAgICAgcmVuZGVyVmlldygpLT5zdHlsZSgpLnNldFJUTE9yZGVyaW5n
KFZpc3VhbE9yZGVyKTsKKyAgICAgICAgcmVuZGVyVmlldygpLT5tdXRhYmxlU3R5bGUoKS5zZXRS
VExPcmRlcmluZyhWaXN1YWxPcmRlcik7CiB9CiAKIFJlZjxEb2N1bWVudFBhcnNlcj4gRG9jdW1l
bnQ6OmNyZWF0ZVBhcnNlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjAw
MDQwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU3MSw3ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyhSdW5Qb3N0TGF5b3V0VGFza3Mg
PSBSdW5Qb3N0TGF5b3V0VGFza3M6OkFzeW5jaHJvbm91c2x5KTsKIAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5nU3R5bGVzaGVl
dHMoRWxlbWVudCYsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0
cyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiBwYWdlIGJveCAobWFyZ2luIGJveGVzIGFuZCBwYWdlIGJvcmRlcnMpIGlz
IHZpc2libGUuCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BhZ2VCb3hWaXNpYmxlKGludCBw
YWdlSW5kZXgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDQxKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcw
LDcgKzEzNzAsNyBAQCBTdHlsZVJlc29sdmVyJiBFbGVtZW50OjpzdHlsZVJlc29sdmVyKCkKICAg
ICByZXR1cm4gZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CiB9CiAKLUVsZW1lbnRT
dHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorRWxl
bWVudFN0eWxlIEVsZW1lbnQ6OnJlc29sdmVTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpCiB7CiAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKnRo
aXMsIHBhcmVudFN0eWxlKTsKIH0KQEAgLTE3NTgsNyArMTc1OCw3IEBAIGJvb2wgRWxlbWVudDo6
Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSAKIHN0YXRpYyB2b2lkIGNoZWNrRm9yRW1wdHlTdHls
ZUNoYW5nZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LnN0eWxlQWZmZWN0
ZWRCeUVtcHR5KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC5yZW5k
ZXJTdHlsZSgpOworICAgICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVyU3R5bGUoKTsK
ICAgICAgICAgaWYgKCFzdHlsZSB8fCAoIXN0eWxlLT5lbXB0eVN0YXRlKCkgfHwgZWxlbWVudC5o
YXNDaGlsZE5vZGVzKCkpKQogICAgICAgICAgICAgZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxj
KCk7CiAgICAgfQpAQCAtMTc4NCwxNCArMTc4NCwxNCBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNp
YmxpbmdTdHlsZUNoYW5nZXMoCiAKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaW5zZXJ0L2FwcGVu
ZCBjYXNlLgogICAgICAgICBpZiAobmV3Rmlyc3RFbGVtZW50ICE9IGVsZW1lbnRBZnRlckNoYW5n
ZSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudEFmdGVyQ2hhbmdl
LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0byogc3R5bGUgPSBlbGVtZW50QWZ0ZXJD
aGFuZ2UtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5m
aXJzdENoaWxkU3RhdGUoKSkKICAgICAgICAgICAgICAgICBlbGVtZW50QWZ0ZXJDaGFuZ2UtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdlIGFsc28gaGF2
ZSB0byBoYW5kbGUgbm9kZSByZW1vdmFsLgogICAgICAgICBpZiAoY2hlY2tUeXBlID09IFNpYmxp
bmdFbGVtZW50UmVtb3ZlZCAmJiBuZXdGaXJzdEVsZW1lbnQgPT0gZWxlbWVudEFmdGVyQ2hhbmdl
ICYmIG5ld0ZpcnN0RWxlbWVudCkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
bmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0byogc3R5bGUg
PSBuZXdGaXJzdEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxl
IHx8ICFzdHlsZS0+Zmlyc3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgbmV3Rmlyc3RF
bGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KQEAgLTE4MDQsNyArMTgw
NCw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygKICAgICAgICAg
RWxlbWVudCogbmV3TGFzdEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpsYXN0Q2hpbGQocGFy
ZW50KTsKIAogICAgICAgICBpZiAobmV3TGFzdEVsZW1lbnQgIT0gZWxlbWVudEJlZm9yZUNoYW5n
ZSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudEJlZm9yZUNoYW5n
ZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudEJlZm9y
ZUNoYW5nZS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUt
Pmxhc3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudEJlZm9yZUNoYW5nZS0+
c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0xODEyLDcgKzE4MTIsNyBAQCBz
dGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgIC8vIFdlIGFs
c28gaGF2ZSB0byBoYW5kbGUgbm9kZSByZW1vdmFsLiAgVGhlIHBhcnNlciBjYWxsYmFjayBjYXNl
IGlzIHNpbWlsYXIgdG8gbm9kZSByZW1vdmFsIGFzIHdlbGwgaW4gdGhhdCB3ZSBuZWVkIHRvIGNo
YW5nZSB0aGUgbGFzdCBjaGlsZAogICAgICAgICAvLyB0byBtYXRjaCBub3cuCiAgICAgICAgIGlm
ICgoY2hlY2tUeXBlID09IFNpYmxpbmdFbGVtZW50UmVtb3ZlZCB8fCBjaGVja1R5cGUgPT0gRmlu
aXNoZWRQYXJzaW5nQ2hpbGRyZW4pICYmIG5ld0xhc3RFbGVtZW50ID09IGVsZW1lbnRCZWZvcmVD
aGFuZ2UgJiYgbmV3TGFzdEVsZW1lbnQpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IG5ld0xhc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0byogc3R5
bGUgPSBuZXdMYXN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICghc3R5
bGUgfHwgIXN0eWxlLT5sYXN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAgIG5ld0xhc3RF
bGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KQEAgLTI0NjEsNyArMjQ2
MSw3IEBAIHN0YXRpYyBQc2V1ZG9FbGVtZW50KiBiZWZvcmVPckFmdGVyUHNldWQKICAgICB9CiB9
CiAKLVJlbmRlclN0eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3R5bGUoKQorY29uc3Qg
UmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmV4aXN0aW5nQ29tcHV0ZWRTdHlsZSgpCiB7CiAgICAgaWYg
KGF1dG8qIHJlbmRlclRyZWVTdHlsZSA9IHJlbmRlclN0eWxlKCkpCiAgICAgICAgIHJldHVybiBy
ZW5kZXJUcmVlU3R5bGU7CkBAIC0yNDcyLDEzICsyNDcyLDEzIEBAIFJlbmRlclN0eWxlKiBFbGVt
ZW50OjpleGlzdGluZ0NvbXB1dGVkU3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVuZGVy
U3R5bGUmIEVsZW1lbnQ6OnJlc29sdmVDb21wdXRlZFN0eWxlKCkKK2NvbnN0IFJlbmRlclN0eWxl
JiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSgpCiB7CiAgICAgQVNTRVJUKGluRG9jdW1l
bnQoKSk7CiAgICAgQVNTRVJUKCFleGlzdGluZ0NvbXB1dGVkU3R5bGUoKSk7CiAKICAgICBEZXF1
ZTxFbGVtZW50KiwgMzI+IGVsZW1lbnRzUmVxdWlyaW5nQ29tcHV0ZWRTdHlsZSh7IHRoaXMgfSk7
Ci0gICAgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUgPSBudWxscHRyOworICAgIGNvbnN0IFJl
bmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gbnVsbHB0cjsKIAogICAgIC8vIENvbGxlY3QgYW5j
ZXN0b3JzIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgaGFzIHN0eWxlLgogICAgIGF1dG8gY29tcG9z
ZWRBbmNlc3RvcnMgPSBjb21wb3NlZFRyZWVBbmNlc3RvcnMoKnRoaXMpOwpAQCAtMjUwMSw3ICsy
NTAxLDcgQEAgUmVuZGVyU3R5bGUmIEVsZW1lbnQ6OnJlc29sdmVDb21wdXRlZFN0eQogICAgIHJl
dHVybiAqY29tcHV0ZWRTdHlsZTsKIH0KIAotUmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmNvbXB1dGVk
U3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKK2NvbnN0IFJlbmRlclN0eWxl
KiBFbGVtZW50Ojpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIp
CiB7CiAgICAgaWYgKFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBiZWZvcmVPckFmdGVy
UHNldWRvRWxlbWVudCgqdGhpcywgcHNldWRvRWxlbWVudFNwZWNpZmllcikpCiAgICAgICAgIHJl
dHVybiBwc2V1ZG9FbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CkBAIC0zMjk1LDcgKzMyOTUsNyBA
QCB2b2lkIEVsZW1lbnQ6OmRpZERldGFjaFJlbmRlcmVycygpCiAgICAgQVNTRVJUKGhhc0N1c3Rv
bVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBF
bGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSopCitP
cHRpb25hbDxFbGVtZW50U3R5bGU+IEVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikKIHsKICAgICBBU1NFUlQoaGFzQ3VzdG9t
U3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpOwogICAgIHJldHVybiBOdWxsb3B0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0VGFiSW5kZXgoaW50KTsKICAgICB2aXJ0dWFsIEVsZW1lbnQqIGZvY3VzRGVsZWdhdGUo
KTsKIAotICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkID0gTk9QU0VVRE8p
IG92ZXJyaWRlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lk
ID0gTk9QU0VVRE8pIG92ZXJyaWRlOwogCiAgICAgYm9vbCBuZWVkc1N0eWxlSW52YWxpZGF0aW9u
KCkgY29uc3Q7CiAKQEAgLTQ4MCw3ICs0ODAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGRpZEF0dGFjaFJlbmRlcmVycygpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGV0YWNoUmVuZGVy
ZXJzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZERldGFjaFJlbmRlcmVycygpOwotICAgIHZpcnR1
YWwgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUm
IHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKTsKKyAgICB2aXJ0dWFs
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSk7CiAK
ICAgICBMYXlvdXRSZWN0IGFic29sdXRlRXZlbnRIYW5kbGVyQm91bmRzKGJvb2wmIGluY2x1ZGVz
Rml4ZWRQb3NpdGlvbkVsZW1lbnRzKSBvdmVycmlkZTsKIApAQCAtNDk5LDcgKzQ5OSw3IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcigpOwotICAg
IEVsZW1lbnRTdHlsZSByZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAg
ICBFbGVtZW50U3R5bGUgcmVzb2x2ZVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSk7CiAKICAgICBib29sIGhhc0Rpc3BsYXlDb250ZW50cygpIGNvbnN0OwogICAgIHZvaWQgc2V0
SGFzRGlzcGxheUNvbnRlbnRzKGJvb2wpOwpAQCAtNTkyLDggKzU5Miw4IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHJlbW92ZVNoYWRvd1Jvb3QoKTsKIAotICAgIFJlbmRlclN0eWxlKiBleGlzdGlu
Z0NvbXB1dGVkU3R5bGUoKTsKLSAgICBSZW5kZXJTdHlsZSYgcmVzb2x2ZUNvbXB1dGVkU3R5bGUo
KTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogZXhpc3RpbmdDb21wdXRlZFN0eWxlKCk7CisgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIHJlc29sdmVDb21wdXRlZFN0eWxlKCk7CiAKICAgICBib29sIHJh
cmVEYXRhU3R5bGVBZmZlY3RlZEJ5RW1wdHkoKSBjb25zdDsKICAgICBib29sIHJhcmVEYXRhQ2hp
bGRyZW5BZmZlY3RlZEJ5SG92ZXIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlz
aW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjU5LDcgKzY1OSw3IEBAIHN0YXRpYyBOb2RlOjpFZGl0YWJpbGl0eSBjb21wdXRlRWRp
dGFiaWwKICAgICAvLyB3b3VsZCBmaXJlIGluIHRoZSBtaWRkbGUgb2YgRG9jdW1lbnQ6OnNldEZv
Y3VzZWRFbGVtZW50KCkuCiAKICAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSAmc3RhcnROb2Rl
OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG5vZGUtPmlzRG9jdW1lbnROb2RlKCkgPyBub2RlLT5yZW5kZXJTdHlsZSgpIDog
Y29uc3RfY2FzdDxOb2RlKj4obm9kZSktPmNvbXB1dGVkU3R5bGUoKTsKKyAgICAgICAgYXV0byog
c3R5bGUgPSBub2RlLT5pc0RvY3VtZW50Tm9kZSgpID8gbm9kZS0+cmVuZGVyU3R5bGUoKSA6IGNv
bnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLT5jb21wdXRlZFN0eWxlKCk7CiAgICAgICAgIGlmICghc3R5
bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkg
PT0gTk9ORSkKQEAgLTEwMTAsNyArMTAxMCw3IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlTGFz
dENoaWxkKCkgY29uc3QKICAgICByZXR1cm4gbGFzdENoaWxkKCk7CiB9CiAKLVJlbmRlclN0eWxl
KiBOb2RlOjpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpCitj
b25zdCBSZW5kZXJTdHlsZSogTm9kZTo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVt
ZW50U3BlY2lmaWVyKQogewogICAgIGF1dG8qIGNvbXBvc2VkUGFyZW50ID0gY29tcG9zZWRUcmVl
QW5jZXN0b3JzKCp0aGlzKS5maXJzdCgpOwogICAgIGlmICghY29tcG9zZWRQYXJlbnQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw5ICs0NDMsOSBAQCBwdWJsaWM6CiAgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2JqZWN0KCkgY29uc3Q7CiAgICAgCiAgICAg
Ly8gV3JhcHBlciBmb3Igbm9kZXMgdGhhdCBkb24ndCBoYXZlIGEgcmVuZGVyZXIsIGJ1dCBzdGls
bCBjYWNoZSB0aGUgc3R5bGUgKGxpa2UgSFRNTE9wdGlvbkVsZW1lbnQpLgotICAgIFJlbmRlclN0
eWxlKiByZW5kZXJTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJT
dHlsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQ
c2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyID0gTk9QU0VVRE8pOworICAgIHZpcnR1YWwg
Y29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNw
ZWNpZmllciA9IE5PUFNFVURPKTsKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAg
Ly8gTm90aWZpY2F0aW9uIG9mIGRvY3VtZW50IHN0cnVjdHVyZSBjaGFuZ2VzIChzZWUgQ29udGFp
bmVyTm9kZS5oIGZvciBtb3JlIG5vdGlmaWNhdGlvbiBtZXRob2RzKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMjAwMDQwKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGVSZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIFJlbmRlclN0eWxlKiBOb2RlOjpyZW5k
ZXJTdHlsZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIE5vZGU6OnJlbmRlclN0
eWxlKCkgY29uc3QKIHsKICAgICBhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDIwMDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIFBzZXVkb0VsZW1lbnQ6OmNs
ZWFySG9zdEVsZW1lbnQoKQogICAgIG1faG9zdEVsZW1lbnQgPSBudWxscHRyOwogfQogCi1PcHRp
b25hbDxFbGVtZW50U3R5bGU+IFBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShSZW5k
ZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVsZW1lbnRTdHls
ZT4gUHNldWRvRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIGF1dG8qIHN0eWxlID0gbV9o
b3N0RWxlbWVudC0+cmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUobV9wc2V1ZG9JZCwg
JnBhcmVudFN0eWxlKTsKICAgICBpZiAoIXN0eWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1BzZXVkb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRv
RWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRv
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICBF
bGVtZW50KiBob3N0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEVsZW1lbnQ7IH0KICAg
ICB2b2lkIGNsZWFySG9zdEVsZW1lbnQoKTsKIAotICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUq
IHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBy
ZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBS
ZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEF0dGFj
aFJlbmRlcmVycygpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjYWxjU3R5bGUoU3R5bGU6OkNo
YW5nZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0
eWxlJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tF
bGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCShyZXZpc2lvbiAyMDAwNDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OSwxOCArMTc5LDE4IEBAIHN0YXRpYyBib29sIGlzTmV3TGluZUF0UG9zaXRpb24o
Y29uc3QgUG8KICAgICByZXR1cm4gdGV4dEF0UG9zaXRpb25bMF0gPT0gJ1xuJzsKIH0KIAotUmVu
ZGVyU3R5bGUqIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmVuZGVyU3R5bGVPZkVuY2xvc2lu
Z1RleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK2NvbnN0IFJlbmRlclN0eWxlKiBB
cHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgaWYgKHBvc2l0aW9uLmFuY2hvclR5cGUo
KSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yCiAgICAgICAgIHx8ICFwb3Np
dGlvbi5jb250YWluZXJOb2RlKCkKICAgICAgICAgfHwgIXBvc2l0aW9uLmNvbnRhaW5lck5vZGUo
KS0+aXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAogICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCktPnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgcmV0dXJuICZyZW5kZXJlci0+c3R5bGUoKTsKIH0KQEAgLTIwMSw3ICsy
MDEsNyBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQCiAgICAgZW5k
ID0gZW5kT2ZDdXJyZW50UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCk7CiAKICAgICBib29sIGlz
U3RhcnRBbmRFbmRPblNhbWVOb2RlID0gZmFsc2U7Ci0gICAgaWYgKFJlbmRlclN0eWxlKiBzdGFy
dFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHN0YXJ0KSkgeworICAgIGlm
IChhdXRvKiBzdGFydFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHN0YXJ0
KSkgewogICAgICAgICBpc1N0YXJ0QW5kRW5kT25TYW1lTm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNs
b3NpbmdUZXh0Tm9kZShlbmQpICYmIHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBlbmQuY29udGFp
bmVyTm9kZSgpOwogICAgICAgICBib29sIGlzU3RhcnRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNh
bWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKG1fZW5kT2ZMYXN0UGFyYWdy
YXBoKSAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gbV9lbmRPZkxhc3RQYXJhZ3JhcGguY29u
dGFpbmVyTm9kZSgpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVu
dENvbW1hbmQ6OnJhbmdlRm9yUAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFJlbmRlclN0
eWxlKiBlbmRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShlbmQpKSB7Cisg
ICAgaWYgKGF1dG8qIGVuZFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGVu
ZCkpIHsKICAgICAgICAgYm9vbCBpc0VuZEFuZEVuZE9mTGFzdFBhcmFncmFwaE9uU2FtZU5vZGUg
PSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUobV9lbmRPZkxhc3RQYXJhZ3JhcGgpICYm
IGVuZC5kZXByZWNhdGVkTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmRlcHJlY2F0ZWRO
b2RlKCk7CiAgICAgICAgIC8vIEluY2x1ZGUgXG4gYXQgdGhlIGVuZCBvZiBsaW5lIGlmIHdlJ3Jl
IGF0IGFuIGVtcHR5IHBhcmFncmFwaAogICAgICAgICBpZiAoZW5kU3R5bGUtPnByZXNlcnZlTmV3
bGluZSgpICYmIHN0YXJ0ID09IGVuZCAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPCBl
bmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgewpAQCAtMjU4LDcgKzI1
OCw3IEBAIFZpc2libGVQb3NpdGlvbiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQKIHsKICAgICBW
aXNpYmxlUG9zaXRpb24gZW5kT2ZOZXh0UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3JhcGgoZW5kT2ZD
dXJyZW50UGFyYWdyYXBoLm5leHQoKSk7CiAgICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRPZk5l
eHRQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBy
ZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUocG9zaXRpb24pOworICAgIGF1dG8qIHN0eWxl
ID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHBvc2l0aW9uKTsKICAgICBpZiAoIXN0
eWxlKQogICAgICAgICByZXR1cm4gZW5kT2ZOZXh0UGFyYWdyYXBoOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmgJKHJldmlz
aW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICB2b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZm9y
bWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBjb25z
dCBQb3NpdGlvbiYgZW5kT2ZTZWxlY3Rpb24sIFJlZlB0cjxFbGVtZW50PiYpID0gMDsKLSAgICBS
ZW5kZXJTdHlsZSogcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGNvbnN0IFBvc2l0aW9u
Jik7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9k
ZShjb25zdCBQb3NpdGlvbiYpOwogICAgIHZvaWQgcmFuZ2VGb3JQYXJhZ3JhcGhTcGxpdHRpbmdU
ZXh0Tm9kZXNJZk5lZWRlZChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBQb3NpdGlvbiYsIFBvc2l0
aW9uJik7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mTmV4dFBhcmFncmFwaFNwbGl0dGluZ1Rl
eHROb2Rlc0lmTmVlZGVkKFZpc2libGVQb3NpdGlvbiYsIFBvc2l0aW9uJiwgUG9zaXRpb24mKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkocmV2aXNpb24g
MjAwMDQwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OmluaXQoTm9k
ZSogbm9kZSwgUHJvcAogICAgIH0KIAogICAgIGlmIChub2RlICYmIG5vZGUtPmNvbXB1dGVkU3R5
bGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBub2RlLT5jb21wdXRl
ZFN0eWxlKCk7CisgICAgICAgIGF1dG8qIHJlbmRlclN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHls
ZSgpOwogICAgICAgICByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKHJlbmRl
clN0eWxlKTsKICAgICAgICAgaWYgKHJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5rZXl3
b3JkU2l6ZSgpKQogICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5Rm9udFNpemUsIGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uLmdldEZvbnRTaXplQ1NTVmFs
dWVQcmVmZXJyaW5nS2V5d29yZCgpLT5jc3NUZXh0KCkpOwpAQCAtNDcxLDcgKzQ3MSw3IEBAIHZv
aWQgRWRpdGluZ1N0eWxlOjppbml0KE5vZGUqIG5vZGUsIFByb3AKICAgICBleHRyYWN0Rm9udFNp
emVEZWx0YSgpOwogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZpbGxBbmRTdHJv
a2VDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpCit2b2lkIEVkaXRpbmdT
dHlsZTo6cmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChjb25zdCBSZW5kZXJT
dHlsZSogcmVuZGVyU3R5bGUpCiB7CiAgICAgLy8gSWYgYSBub2RlJ3MgdGV4dCBmaWxsIGNvbG9y
IGlzIGludmFsaWQsIHRoZW4gaXRzIGNoaWxkcmVuIHVzZSAKICAgICAvLyB0aGVpciBmb250LWNv
bG9yIGFzIHRoZWlyIHRleHQgZmlsbCBjb2xvciAodGhleSBkb24ndApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiAyMDAwNDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4
LDcgQEAgcHJpdmF0ZToKICAgICBFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CiAgICAgRWRpdGluZ1N0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlSUQp
OwogICAgIHZvaWQgaW5pdChOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7Ci0gICAgdm9pZCBy
ZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKFJlbmRlclN0eWxlKik7CisgICAg
dm9pZCByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKGNvbnN0IFJlbmRlclN0
eWxlKik7CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKICAgICB2b2lkIGV4dHJhY3RGb250U2l6
ZURlbHRhKCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVHJpU3RhdGUgdHJpU3RhdGVPZlN0
eWxlKFQmIHN0eWxlVG9Db21wYXJlLCBTaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiAyMDAwNDApCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzAsOCAr
NDMwLDggQEAgcHVibGljOgogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB3ZWJDb250ZW50
RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxh
aW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoRnJhbWUqICwgTm9kZSAqJm5vZGVUb1JlbW92ZSk7Ci0gICAgdm9pZCBnZXRUZXh0RGVjb3Jh
dGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5bGUoUmVuZGVyU3R5bGUmLCBOU011dGFi
bGVEaWN0aW9uYXJ5KikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiAsIE5vZGUgKiZub2RlVG9S
ZW1vdmUpOworICAgIHZvaWQgZ2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5
cGluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgTlNNdXRhYmxlRGljdGlvbmFyeSopIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnQqIGZvbnRGb3JTZWxlY3Rpb24oYm9vbCYp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIE5TRGljdGlvbmFyeSAqZm9udEF0dHJpYnV0ZXNG
b3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCShyZXZpc2lvbiAyMDAwNDApCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBw
bHkoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzdGFy
dGluZ05vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdGFy
dGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgpOworICAgICAgICBhdXRvKiBz
dGFydGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICBpZiAo
IXN0YXJ0aW5nU3R5bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgTm9kZSogY3Vy
cmVudE5vZGUgPSBzdGFydGluZ05vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0VkaXRvckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRWRpdG9yQ29jb2EubW0JKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IFRoaXMgZmlndXJlcyBvdXQg
dGhlIGN1cnJlbnQgc3R5bGUgYnkgaW5zZXJ0aW5nIGEgPHNwYW4+IQotUmVuZGVyU3R5bGUqIEVk
aXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogZnJhbWUsIE5vZGUgKiZub2RlVG9S
ZW1vdmUpCitjb25zdCBSZW5kZXJTdHlsZSogRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KEZyYW1lKiBmcmFtZSwgTm9kZSAqJm5vZGVUb1JlbW92ZSkKIHsKICAgICBub2RlVG9SZW1vdmUg
PSBudWxscHRyOwogICAgIApAQCAtNzYsNyArNzYsNyBAQCBSZW5kZXJTdHlsZSogRWRpdG9yOjpz
dHlsZUZvclNlbGVjdGlvblN0CiAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+cmVuZGVyZXIoKSA/
ICZzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwogfQogCi12b2lk
IEVkaXRvcjo6Z2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxl
KFJlbmRlclN0eWxlJiBzdHlsZSwgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVzdWx0KSBjb25zdAor
dm9pZCBFZGl0b3I6OmdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3RpbmdUeXBpbmdT
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3Vs
dCkgY29uc3QKIHsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlw
aW5nU3R5bGUtPnN0eWxlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0Vk
aXRvcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0JKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0VkaXRvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIGNvbnN0IEZv
bnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib28KIAogICAgIGlmICghbV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBu
b2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHlsZSA9
IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMg
bm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgRm9udCogcmVzdWx0ID0gbnVsbHB0cjsKICAg
ICAgICAgaWYgKHN0eWxlKSB7CkBAIC0yMjAsNyArMjIwLDcgQEAgY29uc3QgRm9udCogRWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uKGJvbwogTlNEaWN0aW9uYXJ5KiBFZGl0b3I6OmZvbnRBdHRyaWJ1
dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewogICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsK
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1l
LCBub2RlVG9SZW1vdmUpOworICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFy
dCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1
cm4gbmlsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCShy
ZXZpc2lvbiAyMDAwNDApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBjb25zdCBGb250KiBFZGl0b3I6
OmZvbnRGb3JTZWxlY3Rpb24oYm9vCiAKICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCkuaXNS
YW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3Zl
KTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNl
bGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92
ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChz
dHlsZSkgewpAQCAtMTQ2LDcgKzE0Niw3IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNl
bGVjdGlvbihib28KIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclNlbGVj
dGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVt
b3ZlKTsKKyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUs
IG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MDAwNDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIFN0cmluZyBIVE1MVGl0bGVFbGVtZW50Ojp0ZXh0
KCkgY29uc3QKIFN0cmluZ1dpdGhEaXJlY3Rpb24gSFRNTFRpdGxlRWxlbWVudDo6Y29tcHV0ZWRU
ZXh0V2l0aERpcmVjdGlvbigpCiB7CiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFI7
Ci0gICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29tcHV0ZWRTdHls
ZSgpKQorICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29tcHV0ZWRTdHlsZSgp
KQogICAgICAgICBkaXJlY3Rpb24gPSBjb21wdXRlZFN0eWxlLT5kaXJlY3Rpb24oKTsKICAgICBl
bHNlIHsKICAgICAgICAgYXV0byBzdHlsZSA9IHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1l
bnQoKnRoaXMsIHBhcmVudEVsZW1lbnQoKSA/IHBhcmVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUo
KSA6IG51bGxwdHIpLnJlbmRlclN0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAy
MDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eQogICAgIHVwZGF0ZShzZWxlY3Rvcik7CiB9CiAK
LWlubGluZSB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5Ojppbml0aWFs
aXplKEZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCitp
bmxpbmUgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eTo6aW5pdGlhbGl6
ZShGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxl
KQogewogICAgIC8vIEJld2FyZSEgbV9mb250LmZvbnRTZWxlY3RvcigpIG1pZ2h0IG5vdCBwb2lu
dCB0byBkb2N1bWVudC5mb250U2VsZWN0b3IoKSEKICAgICBBU1NFUlQobmV3U3R5bGUuZm9udENh
c2NhZGUoKS5mb250U2VsZWN0b3IoKSA9PSAmZm9udFNlbGVjdG9yKTsKQEAgLTIyMjEsNyArMjIy
MSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKTsKICAgICBkb2N1bWVudC51cGRh
dGVTdHlsZUlmTmVlZGVkKCk7CiAKLSAgICBpZiAoUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUg
PSBjYW52YXMoKS0+Y29tcHV0ZWRTdHlsZSgpKQorICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxl
ID0gY2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgbmV3U3R5bGUtPnNldEZvbnRE
ZXNjcmlwdGlvbihjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVmYXVsdEZvbnREZXNjcmlwdGlvbjsK
QEAgLTIyODQsOSArMjI4NCw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRU
ZXh0QmEKICAgICBtb2RpZmlhYmxlU3RhdGUoKS50ZXh0QmFzZWxpbmUgPSBiYXNlbGluZTsKIH0K
IAotaW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b1RleHRE
aXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxl
KSBjb25zdAoraW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0
b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBj
b21wdXRlZFN0eWxlKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IChjb21wdXRl
ZFN0eWxlIHx8IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OkluaGVyaXQpID8gY2FudmFzKCktPmNv
bXB1dGVkU3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSAoY29tcHV0ZWRTdHls
ZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJbmhlcml0KSA/IGNhbnZhcygpLT5jb21wdXRl
ZFN0eWxlKCkgOiBudWxscHRyOwogICAgIGlmIChjb21wdXRlZFN0eWxlKQogICAgICAgICAqY29t
cHV0ZWRTdHlsZSA9IHN0eWxlOwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CkBAIC0yNDE5LDcg
KzI0MTksNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAKICAg
ICAvLyBGSVhNRTogTmVlZCB0byB0dXJuIG9mZiBmb250IHNtb290aGluZy4KIAotICAgIFJlbmRl
clN0eWxlKiBjb21wdXRlZFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0
eWxlOwogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gdG9UZXh0RGlyZWN0aW9uKHN0YXRl
KCkuZGlyZWN0aW9uLCAmY29tcHV0ZWRTdHlsZSk7CiAgICAgYm9vbCBpc1JUTCA9IGRpcmVjdGlv
biA9PSBSVEw7CiAgICAgYm9vbCBvdmVycmlkZSA9IGNvbXB1dGVkU3R5bGUgPyBpc092ZXJyaWRl
KGNvbXB1dGVkU3R5bGUtPnVuaWNvZGVCaWRpKCkpIDogZmFsc2U7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAko
cmV2aXNpb24gMjAwMDQwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw3ICsyNjIsNyBAQCBwcml2
YXRlOgogICAgICAgICBGb250UHJveHkmIG9wZXJhdG9yPShjb25zdCBGb250UHJveHkmKTsKIAog
ICAgICAgICBib29sIHJlYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmZvbnRTZWxlY3Rv
cigpOyB9Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZShGb250U2VsZWN0b3ImLCBSZW5kZXJTdHls
ZSYpOworICAgICAgICB2b2lkIGluaXRpYWxpemUoRm9udFNlbGVjdG9yJiwgY29uc3QgUmVuZGVy
U3R5bGUmKTsKICAgICAgICAgRm9udE1ldHJpY3MgZm9udE1ldHJpY3MoKSBjb25zdDsKICAgICAg
ICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3Q7
CiAgICAgICAgIGZsb2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKQEAgLTM4OSw3ICsz
ODksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgYm9vbCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9Ci0gICAgVGV4dERpcmVjdGlv
biB0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uLCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5bGUg
PSBudWxscHRyKSBjb25zdDsKKyAgICBUZXh0RGlyZWN0aW9uIHRvVGV4dERpcmVjdGlvbihEaXJl
Y3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHIpIGNvbnN0
OwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAJKHJldmlzaW9u
IDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBIVE1MUmVzb3Vy
Y2VQcmVsb2FkZXI6OnByZWxvYWQoUHJlbAogICAgICAgICBwcmVsb2FkKFdURk1vdmUocmVxdWVz
dCkpOwogfQogCi1zdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNoZXMoRnJhbWUqIGZyYW1l
LCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUp
CitzdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNoZXMoRnJhbWUqIGZyYW1lLCBjb25zdCBS
ZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUpCiB7
CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcyA9IE1lZGlhUXVlcnlTZXQ6
OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoYXR0cmlidXRlVmFsdWUpOwogICAgIE1l
ZGlhUXVlcnlFdmFsdWF0b3IgbWVkaWFRdWVyeUV2YWx1YXRvcigic2NyZWVuIiwgZnJhbWUsIHJl
bmRlclN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1i
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDQxKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMs
MjEgKzgzLDIxIEBAIFJlbmRlclNsaWRlclRodW1iOjpSZW5kZXJTbGlkZXJUaHVtYihTbGkKIHsK
IH0KIAotdm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZShSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCit2b2lkIFJlbmRlclNsaWRlclRodW1iOjp1cGRhdGVBcHBlYXJhbmNl
KGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAocGFyZW50U3R5bGUt
PmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIHN0eWxlKCkuc2V0
QXBwZWFyYW5jZShTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7CisgICAgICAgIG11dGFibGVTdHls
ZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOwogICAgIGVsc2UgaWYg
KHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpCi0gICAg
ICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KTsKKyAg
ICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhvcml6b250YWxQ
YXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xp
ZGVyUGFydCkKLSAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhU2xpZGVyVGh1bWJQ
YXJ0KTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYVNsaWRlclRo
dW1iUGFydCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRp
YVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYVZv
bHVtZVNsaWRlclRodW1iUGFydCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFu
Y2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwogICAgIGVsc2UgaWYgKHBhcmVudFN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyUGFydCkKLSAgICAg
ICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclRodW1i
UGFydCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFGdWxsU2Ny
ZWVuVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKICAgICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpIHsKICAgICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgICAgIHRoZW1lKCkuYWRqdXN0
U2xpZGVyVGh1bWJTaXplKHN0eWxlKCksIGVsZW1lbnQoKSk7CisgICAgICAgIHRoZW1lKCkuYWRq
dXN0U2xpZGVyVGh1bWJTaXplKG11dGFibGVTdHlsZSgpLCBlbGVtZW50KCkpOwogICAgIH0KIH0K
IApAQCAtMTU5LDEzICsxNTksMTMgQEAgdm9pZCBSZW5kZXJTbGlkZXJDb250YWluZXI6OmxheW91
dCgpCiAgICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKICAgICBhdXRvJiBpbnB1
dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7
CiAgICAgYm9vbCBpc1ZlcnRpY2FsID0gaGFzVmVydGljYWxBcHBlYXJhbmNlKGlucHV0KTsKLSAg
ICBzdHlsZSgpLnNldEZsZXhEaXJlY3Rpb24oaXNWZXJ0aWNhbCA/IEZsb3dDb2x1bW4gOiBGbG93
Um93KTsKKyAgICBtdXRhYmxlU3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVydGljYWwgPyBG
bG93Q29sdW1uIDogRmxvd1Jvdyk7CiAgICAgVGV4dERpcmVjdGlvbiBvbGRUZXh0RGlyZWN0aW9u
ID0gc3R5bGUoKS5kaXJlY3Rpb24oKTsKICAgICBpZiAoaXNWZXJ0aWNhbCkgewogICAgICAgICAv
LyBGSVhNRTogV29yayBhcm91bmQgcm91bmRpbmcgaXNzdWVzIGluIFJUTCB2ZXJ0aWNhbCBzbGlk
ZXJzLiBXZSB3YW50IHRoZW0gdG8KICAgICAgICAgLy8gcmVuZGVyIGlkZW50aWNhbGx5IHRvIExU
UiB2ZXJ0aWNhbCBzbGlkZXJzLiBXZSBjYW4gcmVtb3ZlIHRoaXMgd29yayBhcm91bmQgd2hlbgog
ICAgICAgICAvLyBzdWJwaXhlbCByZW5kZXJpbmcgaXMgZW5hYmxlZCBvbiBhbGwgcG9ydHMuCi0g
ICAgICAgIHN0eWxlKCkuc2V0RGlyZWN0aW9uKExUUik7CisgICAgICAgIG11dGFibGVTdHlsZSgp
LnNldERpcmVjdGlvbihMVFIpOwogICAgIH0KIAogICAgIFJlbmRlckJveCogdGh1bWIgPSBpbnB1
dC5zbGlkZXJUaHVtYkVsZW1lbnQoKSA/IGlucHV0LnNsaWRlclRodW1iRWxlbWVudCgpLT5yZW5k
ZXJCb3goKSA6IG51bGxwdHI7CkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBSZW5kZXJTbGlkZXJD
b250YWluZXI6OmxheW91dCgpCiAKICAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7CiAK
LSAgICBzdHlsZSgpLnNldERpcmVjdGlvbihvbGRUZXh0RGlyZWN0aW9uKTsKKyAgICBtdXRhYmxl
U3R5bGUoKS5zZXREaXJlY3Rpb24ob2xkVGV4dERpcmVjdGlvbik7CiAgICAgLy8gVGhlc2Ugc2hv
dWxkIGFsd2F5cyBleGlzdCwgdW5sZXNzIHNvbWVvbmUgbXV0YXRlcyB0aGUgc2hhZG93IERPTSAo
ZS5nLiwgaW4gdGhlIGluc3BlY3RvcikuCiAgICAgaWYgKCF0aHVtYiB8fCAhdHJhY2spCiAgICAg
ICAgIHJldHVybjsKQEAgLTU3NCw3ICs1NzQsNyBAQCBIVE1MSW5wdXRFbGVtZW50KiBTbGlkZXJU
aHVtYkVsZW1lbnQ6OmhvCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHNo
YWRvd0hvc3QoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVyVGh1bWJFbGVt
ZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogaG9zdFN0
eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlkZXJUaHVtYkVsZW1lbnQ6OnJlc29sdmVD
dXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBob3N0U3R5
bGUpCiB7CiAgICAgLy8gVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNvbXB1dGUgc3R5bGUuIFRoaXMg
aXMganVzdCBhIGhhY2sgdG8gcGljayBzaGFkb3cgcHNldWRvIGlkIHdoZW4gaG9zdCBzdHlsZSBp
cyBrbm93bi4KIApAQCAtNjI4LDcgKzYyOCw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBT
bGlkZXJDb250YWluZXIKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2xpZGVyQ29u
dGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5
bGU+IFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHls
ZSYsIFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IFNsaWRl
ckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCiB7CiAgICAgLy8gVGhpcyBkb2Vzbid0IGFj
dHVhbGx5IGNvbXB1dGUgc3R5bGUuIFRoaXMgaXMganVzdCBhIGhhY2sgdG8gcGljayBzaGFkb3cg
cHNldWRvIGlkIHdoZW4gaG9zdCBzdHlsZSBpcyBrbm93bi4KIApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgJKHJldmlzaW9uIDIwMDA0
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lk
IHdpbGxEZXRhY2hSZW5kZXJlcnMoKSBvdmVycmlkZTsKIAotICAgIE9wdGlvbmFsPEVsZW1lbnRT
dHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqKSBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikgb3ZlcnJpZGU7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBzdGFydERyYWdnaW5nKCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgaW5saW5lIFJlZjxTbGlkZXJU
aHVtYkVsZW1lbnQ+IFNsaWRlclRodQogY2xhc3MgUmVuZGVyU2xpZGVyVGh1bWIgZmluYWwgOiBw
dWJsaWMgUmVuZGVyQmxvY2tGbG93IHsKIHB1YmxpYzoKICAgICBSZW5kZXJTbGlkZXJUaHVtYihT
bGlkZXJUaHVtYkVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKLSAgICB2b2lkIHVwZGF0ZUFwcGVh
cmFuY2UoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZUFwcGVhcmFu
Y2UoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogcHJpdmF0ZToKICAgICBib29s
IGlzU2xpZGVyVGh1bWIoKSBjb25zdCBvdmVycmlkZTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIFNsaWRlckNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmKTsKICAg
ICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0
eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAgIE9wdGlvbmFs
PEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5
bGUqKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikgb3ZlcnJpZGU7CiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgQXRvbWljU3RyaW5nIG1fc2hhZG93UHNldWRvSWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJ
KHJldmlzaW9uIDIwMDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgUmVm
PFRleHRDb250cm9sSW5uZXJFbGVtZW50PiBUZXh0Q29udHJvbAogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFRleHRDb250cm9sSW5uZXJFbGVtZW50KGRvY3VtZW50KSk7CiB9CiAKLU9wdGlvbmFs
PEVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHls
ZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCitPcHRpb25hbDxF
bGVtZW50U3R5bGU+IFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQog
ewogICAgIGF1dG8gaW5uZXJDb250YWluZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVQdHIo
KTsKICAgICBpbm5lckNvbnRhaW5lclN0eWxlLT5pbmhlcml0RnJvbShzaGFkb3dIb3N0U3R5bGUp
OwpAQCAtMTM0LDcgKzEzNCw3IEBAIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogVGV4dENv
bnRyb2wKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrPihI
VE1MRGl2RWxlbWVudDo6cmVuZGVyZXIoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5
bGUmLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxl
PiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCiB7CiAgICAg
YXV0byBzdHlsZSA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigqc2hhZG93
SG9zdCgpKS5jcmVhdGVJbm5lclRleHRTdHlsZSgqc2hhZG93SG9zdFN0eWxlKTsKICAgICByZXR1
cm4gRWxlbWVudFN0eWxlKHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU3R5bGU+KFdURk1vdmUoc3R5
bGUpKSk7CkBAIC0xNDksNyArMTQ5LDcgQEAgVGV4dENvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQ6
OlRleHRDb250cgogICAgIHNldEhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpOwogfQog
Ci1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50Ojpy
ZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSog
c2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBUZXh0Q29udHJvbFBsYWNl
aG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJl
bnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKIHsKICAgICBhdXRv
IHN0eWxlID0gcmVzb2x2ZVN0eWxlKCZwYXJlbnRTdHlsZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCShy
ZXZpc2lvbiAyMDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6
CiAKIHByb3RlY3RlZDoKICAgICBUZXh0Q29udHJvbElubmVyRWxlbWVudChEb2N1bWVudCYpOwot
ICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVy
U3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChEb2N1bWVudCYpOwogICAgIFJl
bmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUm
JiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RWxl
bWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBS
ZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVt
ZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOwogICAgIGJv
b2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgYm9vbCBpc1RleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIH07CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgVGV4dENvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQoRG9jdW1lbnQmKTsKICAgICAKLSAgICBP
cHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJp
ZGU7CiB9OwogCiBjbGFzcyBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50IGZpbmFsIDog
cHVibGljIEhUTUxEaXZFbGVtZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4MSw3ICsxMzgxLDcgQEAgT3B0aW9uYWxDdXJz
b3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzbwogICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFu
Z2U7CiAKICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSByZW5kZXJlciA/ICZyZW5kZXJlci0+c3R5bGUoKSA6IG51bGxwdHI7Cisg
ICAgYXV0byogc3R5bGUgPSByZW5kZXJlciA/ICZyZW5kZXJlci0+c3R5bGUoKSA6IG51bGxwdHI7
CiAgICAgYm9vbCBob3Jpem9udGFsVGV4dCA9ICFzdHlsZSB8fCBzdHlsZS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKTsKICAgICBjb25zdCBDdXJzb3ImIGlCZWFtID0gaG9yaXpvbnRhbFRleHQg
PyBpQmVhbUN1cnNvcigpIDogdmVydGljYWxUZXh0Q3Vyc29yKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCShyZXZpc2lvbiAy
MDAwNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTAgKzcwLDEwIEBAIHN0YXRpYyBpbmxpbmUgZG91Ymxl
IHNvbHZlU3RlcHNGdW5jdGlvbigKICAgICByZXR1cm4gZmxvb3IobnVtU3RlcHMgKiB0KSAvIG51
bVN0ZXBzOwogfQogCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKEFuaW1hdGlvbiYgYW5p
bWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21w
b3NpdGVBbmltYXRpb24pCitBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0IEFuaW1h
dGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgOiBtX29iamVjdChyZW5kZXJlcikKICAgICAs
IG1fY29tcG9zaXRlQW5pbWF0aW9uKGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAsIG1fYW5pbWF0
aW9uKGFuaW1hdGlvbikKKyAgICAsIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4o
YW5pbWF0aW9uKSkKIHsKICAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBkdXJhdGlvbgogICAgIGlm
IChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA+IDApCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCShyZXZpc2lvbiAyMDAwNDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgQW5pbWF0aW9uQmFzZSA6IHB1YmxpYyBSZWZD
b3VudGVkPAogICAgIGZyaWVuZCBjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbjsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBBbmltYXRpb25CYXNlKEFuaW1hdGlv
biYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCosIENvbXBvc2l0ZUFuaW1hdGlvbiopOworICAg
IEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBSZW5kZXJFbGVtZW50
KiwgQ29tcG9zaXRlQW5pbWF0aW9uKik7CiAgICAgdmlydHVhbCB+QW5pbWF0aW9uQmFzZSgpIHsg
fQogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX29iamVj
dDsgfQpAQCAtMTM4LDcgKzEzOCw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgcHJvZ3Jlc3MoZG91
YmxlIHNjYWxlID0gMSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiA9
IG51bGxwdHIpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBhbmltYXRpb24g
c3RhdGUgY2hhbmdlZC4KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRp
b24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIC8qY3VycmVudFN0eWxlKi8s
IFJlbmRlclN0eWxlKiAvKnRhcmdldFN0eWxlKi8sIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFuaW1hdGUoQ29t
cG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiAvKmN1
cnJlbnRTdHlsZSovLCBjb25zdCBSZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSovLCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIC8q
YW5pbWF0ZWRTdHlsZSovKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZUV4dGVudE9m
VHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCA9IDA7CkBAIC0xNTAsNyArMTUw
LDcgQEAgcHVibGljOgogICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiYp
IGNvbnN0OwogCiAgICAgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2FuaW1hdGlvbjsgfQotICAgIHZvaWQgc2V0QW5pbWF0aW9uKEFuaW1hdGlvbiYgYW5pbWF0
aW9uKSB7IG1fYW5pbWF0aW9uID0gYW5pbWF0aW9uOyB9CisgICAgdm9pZCBzZXRBbmltYXRpb24o
Y29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgbV9hbmltYXRpb24gPSBjb25zdF9jYXN0PEFu
aW1hdGlvbiY+KGFuaW1hdGlvbik7IH0KIAogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoaXMgYW5p
bWF0aW9uIGlzIG92ZXJyaWRkZW4uIFRoaXMgd2lsbCBvbmx5IGJlIHRoZSBjYXNlIGZvcgogICAg
IC8vIEltcGxpY2l0QW5pbWF0aW9ucyBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBv
ciBub3Qgd2Ugc2hvdWxkIGZvcmNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMjAwMDQxKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5Myw5ICs1OTMsOSBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNhbmNlbEFuaW1hdGlvCiAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMo
U3ludGhldGljU3R5bGVDaGFuZ2UpOwogfQogCi1ib29sIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnVw
ZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlclN0eWxlJiBuZXdT
dHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK2Jvb2wg
QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+JiBhbmltYXRlZFN0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IHJl
bmRlcmVyLmhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZyZW5kZXJlci5zdHlsZSgpIDogbnVsbHB0
cjsKKyAgICBhdXRvKiBvbGRTdHlsZSA9IHJlbmRlcmVyLmhhc0luaXRpYWxpemVkU3R5bGUoKSA/
ICZyZW5kZXJlci5zdHlsZSgpIDogbnVsbHB0cjsKICAgICBpZiAoKCFvbGRTdHlsZSB8fCAoIW9s
ZFN0eWxlLT5hbmltYXRpb25zKCkgJiYgIW9sZFN0eWxlLT50cmFuc2l0aW9ucygpKSkgJiYgKCFu
ZXdTdHlsZS5hbmltYXRpb25zKCkgJiYgIW5ld1N0eWxlLnRyYW5zaXRpb25zKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgfkFuaW1hdGlvbkNvbnRyb2xsZXIo
KTsKIAogICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50Jik7Ci0gICAgYm9v
bCB1cGRhdGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmLCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUs
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpOworICAgIGJvb2wg
dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0
eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihS
ZW5kZXJFbGVtZW50Jik7CiAKICAgICAvLyBJZiBwb3NzaWJsZSwgY29tcHV0ZSB0aGUgdmlzdWFs
IGV4dGVudCBvZiBhbnkgdHJhbnNmb3JtIGFuaW1hdGlvbiBvbiB0aGUgZ2l2ZW4gcmVuZGVyZXIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRl
QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjAwMDQxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyAr
NzcsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgfQog
fQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0
YXJnZXRTdHlsZSkKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogewogICAgIC8vIElmIGN1cnJlbnRTdHls
ZSBpcyBudWxsIG9yIHRoZXJlIGFyZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25zLCBqdXN0IHNr
aXAgaXQKICAgICBpZiAoIWN1cnJlbnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLT50cmFuc2l0aW9u
cygpICYmIG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSkKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgIC8vIENoZWNrIHRvIHNlZSBp
ZiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYWN0aXZlIHRyYW5zaXRpb25zCiAgICAgaWYgKHRhcmdl
dFN0eWxlLT50cmFuc2l0aW9ucygpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBB
bmltYXRpb24mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpLT5hbmltYXRp
b24oaSk7CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+dHJhbnNp
dGlvbnMoKS0+YW5pbWF0aW9uKGkpOwogICAgICAgICAgICAgYm9vbCBpc0FjdGl2ZVRyYW5zaXRp
b24gPSAhbV9zdXNwZW5kZWQgJiYgKGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5k
ZWxheSgpID4gMCk7CiAKICAgICAgICAgICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9uTW9kZSBtb2Rl
ID0gYW5pbWF0aW9uLmFuaW1hdGlvbk1vZGUoKTsKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgICAgICAgICAgLy8gYW5k
IHdlIGhhdmUgdG8gdXNlIHRoZSB1bmFuaW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5pbWF0aW9uLiBX
ZSBkbyB0aGUgdGVzdAogICAgICAgICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHVuYW5pbWF0ZWQg
c3R5bGUgaGVyZSwgYnV0IHdlICJvdmVycmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0ZXIuCiAgICAg
ICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBnZXRB
bmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
ZnJvbVN0eWxlID0ga2V5ZnJhbWVBbmltID8ga2V5ZnJhbWVBbmltLT51bmFuaW1hdGVkU3R5bGUo
KSA6IGN1cnJlbnRTdHlsZTsKKyAgICAgICAgICAgICAgICBhdXRvKiBmcm9tU3R5bGUgPSBrZXlm
cmFtZUFuaW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHlsZSgpIDogY3VycmVudFN0eWxl
OwogCiAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEgY3VycmVudCB0cmFuc2l0
aW9uIGZvciB0aGlzIHByb3AKICAgICAgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogaW1w
bEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgIG1fdHJhbnNpdGlv
bnMucmVtb3ZlKHByb3BlcnR5VG9SZW1vdmUpOwogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBSZW5k
ZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCit2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQq
IHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSogdGFyZ2V0U3R5bGUpCiB7CiAgICAgLy8gTm90aGluZyB0byBkbyBpZiB3ZSBkb24ndCBo
YXZlIGFueSBhbmltYXRpb25zLCBhbmQgZGlkbid0IGhhdmUgYW55IGJlZm9yZQogICAgIGlmICht
X2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLT5oYXNBbmltYXRp
b25zKCkpCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0
ZUtleWZyYW1lQQogICAgICAgICBpZiAodGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSkgewogICAg
ICAgICAgICAgaW50IG51bUFuaW1zID0gdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKS0+c2l6ZSgp
OwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgQW5pbWF0aW9uJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9u
cygpLT5hbmltYXRpb24oaSk7CisgICAgICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFy
Z2V0U3R5bGUtPmFuaW1hdGlvbnMoKS0+YW5pbWF0aW9uKGkpOwogICAgICAgICAgICAgICAgIEF0
b21pY1N0cmluZyBhbmltYXRpb25OYW1lKGFuaW1hdGlvbi5uYW1lKCkpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFuaW1hdGlvbigpKQpAQCAtMjk4LDcgKzI5OCw3
IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUEKICAgICAgICAgbV9r
ZXlmcmFtZUFuaW1hdGlvbnMucmVtb3ZlKG5hbWVGb3JSZW1vdmFsKTsKIH0KIAotYm9vbCBDb21w
b3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlclN0
eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiYgYmxlbmRlZFN0eWxlKQorYm9vbCBDb21wb3NpdGVBbmltYXRpb246
OmFuaW1hdGUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiYgYmxlbmRlZFN0eWxlKQogewogICAgIC8vIFdlIGRvbid0IGRvIGFueSB0
cmFuc2l0aW9ucyBpZiB3ZSBkb24ndCBoYXZlIGEgY3VycmVudFN0eWxlIChvbiBzdGFydHVwKS4K
ICAgICB1cGRhdGVUcmFuc2l0aW9ucygmcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgJnRhcmdldFN0
eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1h
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAyMDAwNDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyAr
NTYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBjbGVhclJlbmRlcmVyKCk7CiAKLSAgICBi
b29sIGFuaW1hdGUoUmVuZGVyRWxlbWVudCYsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJl
bmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYmxl
bmRlZFN0eWxlKTsKKyAgICBib29sIGFuaW1hdGUoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYmxlbmRlZFN0eWxlKTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGUoKSBjb25zdDsKICAgICBib29sIGNv
bXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3Q7CiAKQEAg
LTg4LDggKzg4LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDb21wb3NpdGVBbmltYXRpb24o
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmKTsKIAotICAgIHZvaWQgdXBkYXRlVHJhbnNpdGlv
bnMoUmVuZGVyRWxlbWVudCosIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiB0YXJnZXRTdHlsZSk7Ci0gICAgdm9pZCB1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVy
RWxlbWVudCosIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRT
dHlsZSk7CisgICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxl
KTsKKyAgICB2b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiwgY29u
c3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0
eWxlKTsKICAgICAKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW1wbGljaXRBbmlt
YXRpb24+PiBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxB
dG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPj4gQW5pbWF0aW9uTmFt
ZU1hcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBs
aWNpdEFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
NyArMzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUltcGxpY2l0QW5pbWF0aW9uOjpJ
bXBsaWNpdEFuaW1hdGlvbihBbmltYXRpb24mIHRyYW5zaXRpb24sIENTU1Byb3BlcnR5SUQgYW5p
bWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRp
b24qIGNvbXBBbmltLCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKQorSW1wbGljaXRBbmltYXRpb246
OkltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgQ1NTUHJvcGVy
dHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0
ZUFuaW1hdGlvbiogY29tcEFuaW0sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCiAgICAg
OiBBbmltYXRpb25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVyLCBjb21wQW5pbSkKICAgICAsIG1f
ZnJvbVN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqZnJvbVN0eWxlKSkKICAgICAsIG1fdHJh
bnNpdGlvblByb3BlcnR5KHRyYW5zaXRpb24ucHJvcGVydHkoKSkKQEAgLTYwLDcgKzYwLDcgQEAg
Ym9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6c2hvdWxkU2VuZEV2ZW50RgogICAgIHJldHVybiBtX29i
amVjdC0+ZG9jdW1lbnQoKS5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5cGUpOwogfQogCi1i
b29sIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRl
ckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK2Jvb2wgSW1wbGlj
aXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCos
IGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQogewogICAgIC8vIElmIHdl
IGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBhcmUg
Y2xlYW5pbmcgdXAgYSBqdXN0IGZpbmlzaGVkIGFuaW1hdGlvbi4KICAgICAvLyBTbyBqdXN0IHJl
dHVybi4gRXZlcnl0aGluZyBpcyBhbHJlYWR5IGFsbCBjbGVhbmVkIHVwLgpAQCAtMjA1LDcgKzIw
NSw3IEBAIGJvb2wgSW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXYKICAgICByZXR1
cm4gZmFsc2U7IC8vIERpZG4ndCBkaXNwYXRjaCBhbiBldmVudAogfQogCi12b2lkIEltcGxpY2l0
QW5pbWF0aW9uOjpyZXNldChSZW5kZXJTdHlsZSogdG8pCit2b2lkIEltcGxpY2l0QW5pbWF0aW9u
OjpyZXNldChjb25zdCBSZW5kZXJTdHlsZSogdG8pCiB7CiAgICAgQVNTRVJUKHRvKTsKICAgICBB
U1NFUlQobV9mcm9tU3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
SW1wbGljaXRBbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCShyZXZpc2lvbiAyMDAwNDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiAvLyBmb3IgYSBzaW5nbGUg
UmVuZGVyRWxlbWVudC4KIGNsYXNzIEltcGxpY2l0QW5pbWF0aW9uIDogcHVibGljIEFuaW1hdGlv
bkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SW1wbGljaXRBbmltYXRpb24+IGNyZWF0
ZShBbmltYXRpb24mIGFuaW1hdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwg
UmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5p
bWF0aW9uLCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKQorICAgIHN0YXRpYyBSZWY8SW1wbGljaXRB
bmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgQ1NTUHJvcGVydHlJ
RCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFu
aW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxl
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1wbGljaXRBbmltYXRpb24o
YW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgcmVuZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlv
biwgZnJvbVN0eWxlKSk7CiAgICAgfTsKQEAgLTU0LDkgKzU0LDkgQEAgcHVibGljOgogICAgIHZv
aWQgcGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZW5kQW5pbWF0aW9uKCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5p
bWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUs
IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFuaW1h
dGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4mIGFuaW1hdGVkU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXQoUmVuZGVyU3R5bGUqIHRvKTsKKyAgICB2b2lkIHJlc2V0KGNv
bnN0IFJlbmRlclN0eWxlKiB0byk7CiAKICAgICBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9y
bUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTg3LDcgKzg3LDcg
QEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgSW1wbGljaXRBbmltYXRpb24o
QW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyRWxlbWVudCosIENvbXBvc2l0ZUFuaW1h
dGlvbiosIFJlbmRlclN0eWxlKik7CisgICAgSW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0
aW9uJiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyRWxlbWVudCosIENvbXBvc2l0ZUFuaW1hdGlvbios
IGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB+SW1wbGljaXRBbmltYXRpb24oKTsK
IAogICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJsZW5kaW5nLgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNw
cAkocmV2aXNpb24gMjAwMDQxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5
ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotS2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5pbWF0aW9u
KEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgaW50IGluZGV4
LCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyU3R5bGUqIHVu
YW5pbWF0ZWRTdHlsZSkKK0tleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihjb25z
dCBBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGludCBpbmRl
eCwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0
eWxlKiB1bmFuaW1hdGVkU3R5bGUpCiAgICAgOiBBbmltYXRpb25CYXNlKGFuaW1hdGlvbiwgcmVu
ZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlvbikKICAgICAsIG1fa2V5ZnJhbWVzKGFuaW1hdGlvbi5u
YW1lKCkpCiAgICAgLCBtX3VuYW5pbWF0ZWRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnVu
YW5pbWF0ZWRTdHlsZSkpCkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlv
bjo6ZmV0Y2hJbnRlcnZhbEVuZAogICAgIHByb2cgPSBwcm9ncmVzcyhzY2FsZSwgb2Zmc2V0LCBw
cmV2S2V5ZnJhbWUudGltaW5nRnVuY3Rpb24obmFtZSgpKSk7CiB9CiAKLWJvb2wgS2V5ZnJhbWVB
bmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24s
IFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiB0YXJnZXRT
dHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK2Jvb2wg
S2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVB
bmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0
ZWRTdHlsZSkKIHsKICAgICAvLyBGaXJlIHRoZSBzdGFydCB0aW1lb3V0IGlmIG5lZWRlZAogICAg
IGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAyMDAwNDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAgY2xhc3MgUmVuZGVyU3R5bGU7CiAvLyBB
IEtleWZyYW1lQW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYW4gZXhwbGljaXQgYW5pbWF0
aW9uIGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgogY2xhc3MgS2V5ZnJhbWVBbmltYXRpb24g
ZmluYWwgOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxL
ZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlKEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgaW50IGluZGV4LCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFu
aW1hdGlvbiwgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKKyAgICBzdGF0aWMgUmVmPEtl
eWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9z
aXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9u
LCByZW5kZXJlciwgaW5kZXgsIGNvbXBvc2l0ZUFuaW1hdGlvbiwgdW5hbmltYXRlZFN0eWxlKSk7
CiAgICAgfQogCi0gICAgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVs
ZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpIG92
ZXJyaWRlOworICAgIGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVt
ZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUq
IHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxl
KSBvdmVycmlkZTsKICAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zv
cm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtOTAsNyArOTAsNyBA
QCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBLZXlmcmFtZUFuaW1hdGlvbihB
bmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgaW50IGluZGV4LCBDb21wb3NpdGVBbmltYXRpb24q
LCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKTsKKyAgICBLZXlmcmFtZUFuaW1hdGlvbihj
b25zdCBBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgaW50IGluZGV4LCBDb21wb3NpdGVBbmlt
YXRpb24qLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKTsKICAgICB2aXJ0dWFs
IH5LZXlmcmFtZUFuaW1hdGlvbigpOwogICAgIAogICAgIC8vIEdldCB0aGUgc3R5bGVzIGZvciB0
aGUgZ2l2ZW4gcHJvcGVydHkgc3Vycm91bmRpbmcgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHRpbWUg
YW5kIHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwMDA0MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgUmVuZGVyTmFtZWRGbG93VGhyZWFkJiBGbG93
VGhyZWFkQ29udHJvbAogCiB2b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjpzdHlsZURpZENoYW5n
ZSgpCiB7Ci0gICAgUmVuZGVyU3R5bGUmIHZpZXdTdHlsZSA9IG1fdmlldy0+c3R5bGUoKTsKKyAg
ICBhdXRvJiB2aWV3U3R5bGUgPSBtX3ZpZXctPnN0eWxlKCk7CiAgICAgZm9yIChhdXRvJiBmbG93
UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KQogICAgICAgICBmbG93UmVu
ZGVyZXItPnNldFN0eWxlKFJlbmRlckZsb3dUaHJlYWQ6OmNyZWF0ZUZsb3dUaHJlYWRTdHlsZSgm
dmlld1N0eWxlKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guY3BwCShyZXZpc2lvbiAyMDAwNDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMjgsNyArMTMyOCw3IEBAIHZv
aWQgSW5saW5lRmxvd0JveDo6Y29uc3RyYWluVG9MaW5lVG9wQW4KIHN0YXRpYyBMYXlvdXRSZWN0
IGNsaXBSZWN0Rm9yTmluZVBpZWNlSW1hZ2VTdHJpcChJbmxpbmVGbG93Qm94KiBib3gsIGNvbnN0
IE5pbmVQaWVjZUltYWdlJiBpbWFnZSwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0KQogewog
ICAgIExheW91dFJlY3QgY2xpcFJlY3QocGFpbnRSZWN0KTsKLSAgICBSZW5kZXJTdHlsZSYgc3R5
bGUgPSBib3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGJveC0+cmVu
ZGVyZXIoKS5zdHlsZSgpOwogICAgIExheW91dEJveEV4dGVudCBvdXRzZXRzID0gc3R5bGUuaW1h
Z2VPdXRzZXRzKGltYWdlKTsKICAgICBpZiAoYm94LT5pc0hvcml6b250YWwoKSkgewogICAgICAg
ICBjbGlwUmVjdC5zZXRZKHBhaW50UmVjdC55KCkgLSBvdXRzZXRzLnRvcCgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMjAwMDQxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHN0YXRpYyBib29sIGJvcmRlck9yUGFkZGluZ0xvZ2ljYWxX
aWR0aEMKIAogdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSYg
bmV3U3R5bGUgPSBzdHlsZSgpOworICAgIGF1dG8mIG5ld1N0eWxlID0gc3R5bGUoKTsKIAogICAg
IGJvb2wgaGFkVHJhbnNmb3JtID0gaGFzVHJhbnNmb3JtKCk7CiAgICAgYm9vbCBmbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrSW52YWxpZGF0ZWQgPSBmYWxzZTsKQEAgLTI4MzcsNyArMjgzNyw3IEBA
IExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQoYm9vbCAKICAgICAgICAgcmV0dXJu
IFJlbmRlckJveDo6bGluZUhlaWdodChmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBvc2l0aW9u
TW9kZSk7CiAKICAgICBpZiAoZmlyc3RMaW5lICYmIHZpZXcoKS51c2VzRmlyc3RMaW5lUnVsZXMo
KSkgewotICAgICAgICBSZW5kZXJTdHlsZSYgcyA9IGZpcnN0TGluZSA/IGZpcnN0TGluZVN0eWxl
KCkgOiBzdHlsZSgpOworICAgICAgICBhdXRvJiBzID0gZmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5
bGUoKSA6IHN0eWxlKCk7CiAgICAgICAgIGlmICgmcyAhPSAmc3R5bGUoKSkKICAgICAgICAgICAg
IHJldHVybiBzLmNvbXB1dGVkTGluZUhlaWdodCgpOwogICAgIH0KQEAgLTI5NzYsOSArMjk3Niw5
IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Zmlyc3RMaW5lQmxvY2sKICAgICByZXR1cm4g
Zmlyc3RMaW5lQmxvY2s7CiB9CiAKLXN0YXRpYyBSZW5kZXJTdHlsZSYgc3R5bGVGb3JGaXJzdExl
dHRlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJPYmplY3QqIGZpcnN0
TGV0dGVyQ29udGFpbmVyKQorc3RhdGljIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZUZvckZpcnN0
TGV0dGVyKFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRlck9iamVjdCogZmly
c3RMZXR0ZXJDb250YWluZXIpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gZmly
c3RMZXR0ZXJCbG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSLCAmZmlyc3RM
ZXR0ZXJDb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkpOworICAgIGF1dG8qIHBzZXVkb1N0eWxl
ID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xF
VFRFUiwgJmZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgpKTsKICAgICAKICAg
ICAvLyBJZiB3ZSBoYXZlIGFuIGluaXRpYWwgbGV0dGVyIGRyb3AgdGhhdCBpcyA+PSAxLCB0aGVu
IHdlIG5lZWQgdG8gZm9yY2UgZmxvYXRpbmcgdG8gYmUgb24uCiAgICAgaWYgKHBzZXVkb1N0eWxl
LT5pbml0aWFsTGV0dGVyRHJvcCgpID49IDEgJiYgIXBzZXVkb1N0eWxlLT5pc0Zsb2F0aW5nKCkp
CkBAIC0zMDYxLDcgKzMwNjEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRl
clN0eWxlCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXIgPSBjdXJyZW50Q2hpbGQt
PnBhcmVudCgpOwogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29udGFpbmVyID0gZmly
c3RMZXR0ZXItPnBhcmVudCgpOwotICAgIFJlbmRlclN0eWxlJiBwc2V1ZG9TdHlsZSA9IHN0eWxl
Rm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwor
ICAgIGF1dG8mIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJzdExldHRlckJs
b2NrLCBmaXJzdExldHRlckNvbnRhaW5lcik7CiAgICAgQVNTRVJUKGZpcnN0TGV0dGVyLT5pc0Zs
b2F0aW5nKCkgfHwgZmlyc3RMZXR0ZXItPmlzSW5saW5lKCkpOwogCiAgICAgaWYgKFN0eWxlOjpk
ZXRlcm1pbmVDaGFuZ2UoZmlyc3RMZXR0ZXItPnN0eWxlKCksIHBzZXVkb1N0eWxlKSA9PSBTdHls
ZTo6RGV0YWNoKSB7CkBAIC0zMTAyLDcgKzMxMDIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRh
dGVGaXJzdExldHRlclN0eWxlCiB2b2lkIFJlbmRlckJsb2NrOjpjcmVhdGVGaXJzdExldHRlclJl
bmRlcmVyKFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRlclRleHQqIGN1cnJl
bnRUZXh0Q2hpbGQpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXIg
PSBjdXJyZW50VGV4dENoaWxkLT5wYXJlbnQoKTsKLSAgICBSZW5kZXJTdHlsZSYgcHNldWRvU3R5
bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVyQ29u
dGFpbmVyKTsKKyAgICBhdXRvJiBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmly
c3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwogICAgIFJlbmRlckJveE1vZGVs
T2JqZWN0KiBmaXJzdExldHRlciA9IG51bGxwdHI7CiAgICAgaWYgKHBzZXVkb1N0eWxlLmRpc3Bs
YXkoKSA9PSBJTkxJTkUpCiAgICAgICAgIGZpcnN0TGV0dGVyID0gbmV3IFJlbmRlcklubGluZShk
b2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocHNldWRvU3R5bGUpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAyMDAw
NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zs
b3c6OmFkanVzdEJsb2NrQwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
TGF5b3V0VW5pdCBjYWxjdWxhdGVNaW5pbXVtUGFnZUhlaWdodChSZW5kZXJTdHlsZSYgcmVuZGVy
U3R5bGUsIFJvb3RJbmxpbmVCb3gmIGxhc3RMaW5lLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91
dFVuaXQgbGluZUJvdHRvbSkKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBjYWxjdWxhdGVNaW5p
bXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJTdHlsZSYgcmVuZGVyU3R5bGUsIFJvb3RJbmxpbmVC
b3gmIGxhc3RMaW5lLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkK
IHsKICAgICAvLyBXZSBtYXkgcmVxdWlyZSBhIGNlcnRhaW4gbWluaW11bSBudW1iZXIgb2YgbGlu
ZXMgcGVyIHBhZ2UgaW4gb3JkZXIgdG8gc2F0aXNmeQogICAgIC8vIG9ycGhhbnMgYW5kIHdpZG93
cywgYW5kIHRoYXQgbWF5IGFmZmVjdCB0aGUgbWluaW11bSBwYWdlIGhlaWdodC4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAyMDAwNDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg0LDcgKzM4NCw3IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYK
ICAgICBpZiAoaXNEb2NFbGVtZW50UmVuZGVyZXIgfHwgaXNCb2R5UmVuZGVyZXIpIHsKICAgICAg
ICAgLy8gUHJvcGFnYXRlIHRoZSBuZXcgd3JpdGluZyBtb2RlIGFuZCBkaXJlY3Rpb24gdXAgdG8g
dGhlIFJlbmRlclZpZXcuCiAgICAgICAgIGF1dG8qIGRvY3VtZW50RWxlbWVudFJlbmRlcmVyID0g
ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgUmVuZGVy
U3R5bGUmIHZpZXdTdHlsZSA9IHZpZXcoKS5zdHlsZSgpOworICAgICAgICBhdXRvJiB2aWV3U3R5
bGUgPSB2aWV3KCkubXV0YWJsZVN0eWxlKCk7CiAgICAgICAgIGJvb2wgdmlld0NoYW5nZWRXcml0
aW5nTW9kZSA9IGZhbHNlOwogICAgICAgICBib29sIHJvb3RTdHlsZUNoYW5nZWQgPSBmYWxzZTsK
ICAgICAgICAgYm9vbCB2aWV3U3R5bGVDaGFuZ2VkID0gZmFsc2U7CkBAIC0zOTMsNyArMzkzLDcg
QEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZgogICAgICAgICAgICAg
dmlld1N0eWxlLnNldERpcmVjdGlvbihuZXdTdHlsZS5kaXJlY3Rpb24oKSk7CiAgICAgICAgICAg
ICB2aWV3U3R5bGVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChpc0JvZHlSZW5kZXJl
cikgewotICAgICAgICAgICAgICAgIHJvb3RSZW5kZXJlci0+c3R5bGUoKS5zZXREaXJlY3Rpb24o
bmV3U3R5bGUuZGlyZWN0aW9uKCkpOworICAgICAgICAgICAgICAgIHJvb3RSZW5kZXJlci0+bXV0
YWJsZVN0eWxlKCkuc2V0RGlyZWN0aW9uKG5ld1N0eWxlLmRpcmVjdGlvbigpKTsKICAgICAgICAg
ICAgICAgICByb290U3R5bGVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwpAQCAtNDA3LDcgKzQwNyw3
IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYKICAgICAgICAgICAg
IHZpZXcoKS5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAgICAgICAg
ICAgICBpZiAoaXNCb2R5UmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICByb290U3R5bGVDaGFu
Z2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPnN0eWxlKCkuc2V0V3Jp
dGluZ01vZGUobmV3U3R5bGUud3JpdGluZ01vZGUoKSk7CisgICAgICAgICAgICAgICAgcm9vdFJl
bmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRXcml0aW5nTW9kZShuZXdTdHlsZS53cml0aW5nTW9k
ZSgpKTsKICAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPnNldEhvcml6b250YWxXcml0aW5n
TW9kZShuZXdTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwpAQCAtNDMy
LDggKzQzMiw4IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYKICAg
ICAgICAgICAgIC8vIFByb3BhZ2F0ZSB0aGUgYm9keSBmb250IGJhY2sgdXAgdG8gdGhlIFJlbmRl
clZpZXcgYW5kIHVzZSBpdCBhcwogICAgICAgICAgICAgLy8gdGhlIGJhc2lzIG9mIHRoZSBncmlk
LgogICAgICAgICAgICAgaWYgKG5ld1N0eWxlLmZvbnREZXNjcmlwdGlvbigpICE9IHZpZXcoKS5z
dHlsZSgpLmZvbnREZXNjcmlwdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgdmlldygpLnN0eWxl
KCkuc2V0Rm9udERlc2NyaXB0aW9uKG5ld1N0eWxlLmZvbnREZXNjcmlwdGlvbigpKTsKLSAgICAg
ICAgICAgICAgICB2aWV3KCkuc3R5bGUoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQo
KS5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICAgICAgdmlldygpLm11dGFibGVTdHlsZSgp
LnNldEZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5mb250RGVzY3JpcHRpb24oKSk7CisgICAgICAg
ICAgICAgICAgdmlldygpLm11dGFibGVTdHlsZSgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1
bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC02
ODAsNyArNjgwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnN0cmFpbkNvbnRlbnRCbwog
CiBSb3VuZGVkUmVjdDo6UmFkaWkgUmVuZGVyQm94Ojpib3JkZXJSYWRpaSgpIGNvbnN0CiB7Ci0g
ICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9
IHRoaXMtPnN0eWxlKCk7CiAgICAgTGF5b3V0UmVjdCBib3VuZHMgPSBmcmFtZVJlY3QoKTsKIAog
ICAgIHVuc2lnbmVkIGJvcmRlckxlZnQgPSBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKTsKQEAgLTQ4
MTQsNyArNDgxNCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJCb3g6OmVuY2xvc2luZ0Zsb2F0UGEK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxW
aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
IGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZv
clByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKIHsKICAg
ICBMYXlvdXRSZWN0IHJlY3QgPSB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihwYXJl
bnRTdHlsZSk7CiAgICAgaWYgKCFwYXJlbnRTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKQEAgLTQ4MjIsNyArNDgyMiw3IEBAIExheW91dFJlY3QgUmVuZGVyQm94Ojpsb2dpY2FsVmlz
dWFsT3ZlcmYKICAgICByZXR1cm4gcmVjdDsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnZp
c3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkg
Y29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdh
dGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYg
dGhlIHdyaXRpbmcgbW9kZXMgb2YgdGhlIGNoaWxkIGFuZCBwYXJlbnQgbWF0Y2gsIHRoZW4gd2Ug
ZG9uJ3QgaGF2ZSB0byAKICAgICAvLyBkbyBhbnl0aGluZyBmYW5jeS4gSnVzdCByZXR1cm4gdGhl
IHJlc3VsdC4KQEAgLTQ4NDAsNyArNDg0MCw3IEBAIExheW91dFJlY3QgUmVuZGVyQm94Ojp2aXN1
YWxPdmVyZmxvd1JlY3QKICAgICByZXR1cm4gcmVjdDsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJC
b3g6OmxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9naWNhbExheW91dE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkg
Y29uc3QKIHsKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9w
YWdhdGlvbihwYXJlbnRTdHlsZSk7CiAgICAgaWYgKCFwYXJlbnRTdHlsZS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkKQEAgLTQ4NDgsNyArNDg0OCw3IEBAIExheW91dFJlY3QgUmVuZGVyQm94
Ojpsb2dpY2FsTGF5b3V0T3ZlcmYKICAgICByZXR1cm4gcmVjdDsKIH0KIAotTGF5b3V0UmVjdCBS
ZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94OjpsYXlvdXRPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7
CiAgICAgLy8gT25seSBwcm9wYWdhdGUgaW50ZXJpb3IgbGF5b3V0IG92ZXJmbG93IGlmIHdlIGRv
bid0IGNsaXAgaXQuCiAgICAgTGF5b3V0UmVjdCByZWN0ID0gYm9yZGVyQm94UmVjdCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gMjAwMDQxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NjMsMTAgKzU2MywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBhcHBseVRvcExlZnRMb2NhdGlv
bk9mZnNldFdpdGhGbGlwcGluZyhwb2ludCk7CiAgICAgfQogCi0gICAgTGF5b3V0UmVjdCBsb2dp
Y2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsK
LSAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0
eWxlKikgY29uc3Q7Ci0gICAgTGF5b3V0UmVjdCBsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9y
UHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBMYXlvdXRSZWN0IGxheW91dE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0
UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEZvclByb3Bh
Z2F0aW9uKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBsb2dpY2Fs
TGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqKSBjb25z
dDsKKyAgICBMYXlvdXRSZWN0IGxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0
IFJlbmRlclN0eWxlKikgY29uc3Q7CiAKICAgICBib29sIGhhc1JlbmRlck92ZXJmbG93KCkgY29u
c3QgeyByZXR1cm4gbV9vdmVyZmxvdzsgfSAgICAKICAgICBib29sIGhhc1Zpc3VhbE92ZXJmbG93
KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyAmJiAhYm9yZGVyQm94UmVjdCgpLmNvbnRhaW5z
KG1fb3ZlcmZsb3ctPnZpc3VhbE92ZXJmbG93UmVjdCgpKTsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAy
MDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsNyArNTgxLDcgQEAgUm91bmRlZFJlY3QgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmJhY2tncgogICAgIHJldHVybiBnZXRCYWNrZ3JvdW5kUm91bmRlZFJl
Y3QoYm9yZGVyUmVjdCwgYm94LCBib3hTaXplLndpZHRoKCksIGJveFNpemUuaGVpZ2h0KCksIGlu
Y2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKTsKIH0KIAotc3Rh
dGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JC
YWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKQogewogICAgIGNvbnN0IFNoYWRvd0RhdGEqIGJveFNoYWRvdyA9IHN0eWxlLT5ib3hTaGFk
b3coKTsKICAgICB3aGlsZSAoYm94U2hhZG93LT5zdHlsZSgpICE9IE5vcm1hbCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCShyZXZpc2lvbiAyMDAwNDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6YWRkQ2hpbGQoUmVuZGVy
T2JqZWN0CiAgICAgICAgIC8vIENyZWF0ZSBhbiBhbm9ueW1vdXMgYmxvY2suCiAgICAgICAgIEFT
U0VSVCghZmlyc3RDaGlsZCgpKTsKICAgICAgICAgbV9pbm5lciA9IGNyZWF0ZUFub255bW91c0Js
b2NrKHN0eWxlKCkuZGlzcGxheSgpKTsKLSAgICAgICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVy
LT5zdHlsZSgpKTsKKyAgICAgICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5tdXRhYmxlU3R5
bGUoKSk7CiAgICAgICAgIFJlbmRlckZsZXhpYmxlQm94OjphZGRDaGlsZChtX2lubmVyKTsKICAg
ICB9CiAgICAgCkBAIC05Nyw5ICs5Nyw5IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjpzdHlsZVdpbGxD
aGFuZ2UoU3R5bGUKICAgICAgICAgLy8gaXQgcmlnaHQgYmVsb3cuIEhlcmUgd2UgY2hhbmdlIGl0
IGJhY2sgdG8gMCB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0IGhpbnQKICAgICAg
ICAgLy8gYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW5jZS4gU2FtZSBnb2VzIGZvciB0aGUgb3RoZXIg
cHJvcGVydGllcy4KICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBoYWNrIHVubmVjZXNzYXJ5
LgotICAgICAgICBtX2lubmVyLT5zdHlsZSgpLnNldEZsZXhHcm93KG5ld1N0eWxlLmluaXRpYWxG
bGV4R3JvdygpKTsKLSAgICAgICAgbV9pbm5lci0+c3R5bGUoKS5zZXRNYXJnaW5Ub3AobmV3U3R5
bGUuaW5pdGlhbE1hcmdpbigpKTsKLSAgICAgICAgbV9pbm5lci0+c3R5bGUoKS5zZXRNYXJnaW5C
b3R0b20obmV3U3R5bGUuaW5pdGlhbE1hcmdpbigpKTsKKyAgICAgICAgbV9pbm5lci0+bXV0YWJs
ZVN0eWxlKCkuc2V0RmxleEdyb3cobmV3U3R5bGUuaW5pdGlhbEZsZXhHcm93KCkpOworICAgICAg
ICBtX2lubmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5Ub3AobmV3U3R5bGUuaW5pdGlhbE1h
cmdpbigpKTsKKyAgICAgICAgbV9pbm5lci0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luQm90dG9t
KG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7CiAgICAgfQogICAgIFJlbmRlckJsb2NrOjpzdHls
ZVdpbGxDaGFuZ2UoZGlmZiwgbmV3U3R5bGUpOwogfQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQg
UmVuZGVyQnV0dG9uOjpzdHlsZURpZENoYW5nZShTdHlsZUQKICAgICBSZW5kZXJCbG9jazo6c3R5
bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogCiAgICAgaWYgKG1faW5uZXIpIC8vIFJlbmRl
ckJsb2NrIGhhbmRsZWQgdXBkYXRpbmcgdGhlIGFub255bW91cyBibG9jaydzIHN0eWxlLgotICAg
ICAgICBzZXR1cElubmVyU3R5bGUoJm1faW5uZXItPnN0eWxlKCkpOworICAgICAgICBzZXR1cElu
bmVyU3R5bGUoJm1faW5uZXItPm11dGFibGVTdHlsZSgpKTsKIH0KIAogdm9pZCBSZW5kZXJCdXR0
b246OnNldHVwSW5uZXJTdHlsZShSZW5kZXJTdHlsZSogaW5uZXJTdHlsZSkgCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhp
YmxlQm94LmNwcAkocmV2aXNpb24gMjAwMDQxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3
ICsxNjUsNyBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9yQ2hpbGQoCiAKIHZv
aWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZm
ZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkKIHsKLSAgICBSZW5kZXJT
dHlsZSogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmc3R5bGUoKSA6IG51bGxw
dHI7CisgICAgYXV0byogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmc3R5bGUo
KSA6IG51bGxwdHI7CiAgICAgaWYgKG9sZFN0eWxlICYmICFvbGRTdHlsZS0+bGluZUNsYW1wKCku
aXNOb25lKCkgJiYgbmV3U3R5bGUubGluZUNsYW1wKCkuaXNOb25lKCkpCiAgICAgICAgIGNsZWFy
TGluZUNsYW1wKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIwMDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDExICsyMDUsNiBAQCBSZW5k
ZXJQdHI8UmVuZGVyRWxlbWVudD4gUmVuZGVyRWxlbWVudDo6CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLWVudW0gU3R5bGVDYWNoZVN0YXRlIHsKLSAgICBDYWNoZWQsCi0gICAgVW5jYWNoZWQK
LX07Ci0KIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRWxlbWVudDo6dW5jYWNo
ZWRGaXJzdExpbmVTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKCF2
aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpCkBAIC0yMjEsMTQgKzIxNiwxNCBAQCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVsZW1lCiAgICAgICAgIGlmIChSZW5kZXJCbG9j
ayogZmlyc3RMaW5lQmxvY2sgPSByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmZpcnN0TGluZUJs
b2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2stPmdldFVuY2FjaGVkUHNl
dWRvU3R5bGUoUHNldWRvU3R5bGVSZXF1ZXN0KEZJUlNUX0xJTkUpLCBzdHlsZSwgZmlyc3RMaW5l
QmxvY2sgPT0gdGhpcyA/IHN0eWxlIDogbnVsbHB0cik7CiAgICAgfSBlbHNlIGlmICghcmVuZGVy
ZXJGb3JGaXJzdExpbmVTdHlsZS5pc0Fub255bW91cygpICYmIHJlbmRlcmVyRm9yRmlyc3RMaW5l
U3R5bGUuaXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSYgcGFyZW50U3R5
bGUgPSByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgp
OworICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUu
cGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGlmICgmcGFyZW50U3R5bGUgIT0g
JnJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCktPnN0eWxlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5nZXRVbmNhY2hlZFBzZXVkb1N0eWxl
KFBzZXVkb1N0eWxlUmVxdWVzdChGSVJTVF9MSU5FX0lOSEVSSVRFRCksICZwYXJlbnRTdHlsZSwg
c3R5bGUpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVuZGVyU3R5bGUqIFJl
bmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TGluZVN0eWxlKCkgY29uc3QKK2NvbnN0IFJlbmRlclN0
eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKHZpZXcoKS51c2VzRmlyc3RMaW5lUnVsZXMoKSk7CiAKQEAgLTIzOCwxMCArMjMzLDEw
IEBAIFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdEwKICAgICAgICAgaWYg
KFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jayA9IHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUu
Zmlyc3RMaW5lQmxvY2soKSkKICAgICAgICAgICAgIHJldHVybiBmaXJzdExpbmVCbG9jay0+Z2V0
Q2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTElORSwgJnN0eWxlKCkpOwogICAgIH0gZWxzZSBpZiAo
IXJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuaXNBbm9ueW1vdXMoKSAmJiByZW5kZXJlckZvckZp
cnN0TGluZVN0eWxlLmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUmIHBh
cmVudFN0eWxlID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+Zmlyc3RMaW5l
U3R5bGUoKTsKKyAgICAgICAgYXV0byYgcGFyZW50U3R5bGUgPSByZW5kZXJlckZvckZpcnN0TGlu
ZVN0eWxlLnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBpZiAoJnBhcmVudFN0
eWxlICE9ICZyZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5zdHlsZSgpKSB7CiAg
ICAgICAgICAgICAvLyBBIGZpcnN0LWxpbmUgc3R5bGUgaXMgaW4gZWZmZWN0LiBDYWNoZSBhIGZp
cnN0LWxpbmUgc3R5bGUgZm9yIG91cnNlbHZlcy4KLSAgICAgICAgICAgIHJlbmRlcmVyRm9yRmly
c3RMaW5lU3R5bGUuc3R5bGUoKS5zZXRIYXNQc2V1ZG9TdHlsZShGSVJTVF9MSU5FX0lOSEVSSVRF
RCk7CisgICAgICAgICAgICByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLm1fc3R5bGUuc2V0SGFz
UHNldWRvU3R5bGUoRklSU1RfTElORV9JTkhFUklURUQpOwogICAgICAgICAgICAgcmV0dXJuIHJl
bmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTElORV9J
TkhFUklURUQsICZwYXJlbnRTdHlsZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNDksNyArMjQ0
LDcgQEAgUmVuZGVyU3R5bGUqIFJlbmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TAogICAgIHJldHVy
biAmc3R5bGUoKTsKIH0KIAotUmVuZGVyU3R5bGUmIFJlbmRlckVsZW1lbnQ6OmZpcnN0TGluZVN0
eWxlKCkgY29uc3QKK2NvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJFbGVtZW50OjpmaXJzdExpbmVT
dHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHZpZXcoKS51c2VzRmlyc3RMaW5lUnVsZXMoKSA/
ICpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsKIH0KQEAgLTgwNiw3ICs4MDEsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgcmVuZGVyZXJIYXNCYWNrZ3JvdW5kCiAKIHZvaWQgUmVuZGVy
RWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdHlsZSYgbmV3U3R5bGUpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gaGFzSW5p
dGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8qIG9sZFN0eWxl
ID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOwogICAgIGlmIChv
bGRTdHlsZSkgewogICAgICAgICAvLyBJZiBvdXIgei1pbmRleCBjaGFuZ2VzIHZhbHVlIG9yIG91
ciB2aXNpYmlsaXR5IGNoYW5nZXMsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8gZGlydHkgb3VyIHN0
YWNraW5nIGNvbnRleHQncyB6LW9yZGVyIGxpc3QuCkBAIC0xNTM1LDcgKzE1MzAsMjIgQEAgdm9p
ZCBSZW5kZXJFbGVtZW50OjphZGRDb250cm9sU3RhdGVzRm9yUgogICAgIGNvbnRyb2xTdGF0ZXNS
ZW5kZXJlck1hcCgpLmFkZChvLCBzdGF0ZXMpOwogfQogCi1SZW5kZXJTdHlsZSogUmVuZGVyRWxl
bWVudDo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpIGNvbnN0Citjb25zdCBSZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6Z2V0
Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpIGNvbnN0Cit7CisgICAgaWYgKHBzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVE
T0lEICYmICFzdHlsZSgpLmhhc1BzZXVkb1N0eWxlKHBzZXVkbykpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgUmVuZGVyU3R5bGUqIGNhY2hlZFN0eWxlID0gc3R5bGUoKS5nZXRDYWNo
ZWRQc2V1ZG9TdHlsZShwc2V1ZG8pOworICAgIGlmIChjYWNoZWRTdHlsZSkKKyAgICAgICAgcmV0
dXJuIGNhY2hlZFN0eWxlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiByZXN1
bHQgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChwc2V1ZG8pLCBw
YXJlbnRTdHlsZSk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
UmVuZGVyU3R5bGUmPihtX3N0eWxlKS5hZGRDYWNoZWRQc2V1ZG9TdHlsZShXVEZNb3ZlKHJlc3Vs
dCkpOworICAgIHJldHVybiBudWxscHRyOworfQorCitSZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVu
dDo6Z2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywgY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmIChwc2V1ZG8gPCBGSVJTVF9JTlRFUk5B
TF9QU0VVRE9JRCAmJiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG8pKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTE1NDYsMTEgKzE1NTYsMTEgQEAgUmVuZGVyU3R5bGUqIFJlbmRl
ckVsZW1lbnQ6OmdldENhY2hlZFBzZQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiByZXN1bHQgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChwc2V1
ZG8pLCBwYXJlbnRTdHlsZSk7CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHN0eWxl
KCkuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJu
IG1fc3R5bGUuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RGTW92ZShyZXN1bHQpKTsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVt
ZW50OjpnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYgcHNl
dWRvU3R5bGVSZXF1ZXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBv
d25TdHlsZSkgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRWxlbWVu
dDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmIHBzZXVk
b1N0eWxlUmVxdWVzdCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSogb3duU3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHBzZXVkb1N0eWxlUmVxdWVzdC5w
c2V1ZG9JZCA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEICYmICFvd25TdHlsZSAmJiAhc3R5bGUo
KS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTIwNjYsNyArMjA3Niw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6
cGFpbnRPdXRsaW5lKFBhaW50SW4KICAgICBpZiAoIWhhc091dGxpbmUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGF1dG8m
IHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIGZsb2F0IG91dGxpbmVXaWR0aCA9IGZsb29yVG9E
ZXZpY2VQaXhlbChzdHlsZVRvVXNlLm91dGxpbmVXaWR0aCgpLCBkb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCkpOwogICAgIGZsb2F0IG91dGxpbmVPZmZzZXQgPSBmbG9vclRvRGV2aWNlUGl4
ZWwoc3R5bGVUb1VzZS5vdXRsaW5lT2Zmc2V0KCksIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAko
cmV2aXNpb24gMjAwMDQxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsMTAgQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXNJbml0aWFsaXplZFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbml0aWFsaXplZFN0
eWxlOyB9CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBjb25zdF9j
YXN0PFJlbmRlclN0eWxlJj4obV9zdHlsZSk7IH0KLSAgICBSZW5kZXJTdHlsZSYgZmlyc3RMaW5l
U3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxlKCkg
Y29uc3Q7CisKKyAgICBSZW5kZXJTdHlsZSYgbXV0YWJsZVN0eWxlKCkgeyByZXR1cm4gbV9zdHls
ZTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXplU3R5bGUoKTsKIApAQCAtNTIsOCArNTQsOSBAQCBw
dWJsaWM6CiAKICAgICAvLyBUaGUgcHNldWRvIGVsZW1lbnQgc3R5bGUgY2FuIGJlIGNhY2hlZCBv
ciB1bmNhY2hlZC4gIFVzZSB0aGUgY2FjaGVkIG1ldGhvZCBpZiB0aGUgcHNldWRvIGVsZW1lbnQg
ZG9lc24ndCByZXNwZWN0CiAgICAgLy8gYW55IHBzZXVkbyBjbGFzc2VzIChhbmQgdGhlcmVmb3Jl
IGhhcyBubyBjb25jZXB0IG9mIGNoYW5naW5nIHN0YXRlKS4KLSAgICBSZW5kZXJTdHlsZSogZ2V0
Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51
bGxwdHIpIGNvbnN0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0VW5jYWNo
ZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBudWxscHRyLCBSZW5kZXJTdHlsZSogb3duU3R5bGUgPSBudWxscHRyKSBjb25z
dDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQs
IGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OworICAgIFJl
bmRlclN0eWxlKiBnZXRNdXRhYmxlQ2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQsIGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlcXVl
c3QmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyLCBjb25zdCBSZW5k
ZXJTdHlsZSogb3duU3R5bGUgPSBudWxscHRyKSBjb25zdDsKIAogICAgIC8vIFRoaXMgaXMgbnVs
bCBmb3IgYW5vbnltb3VzIHJlbmRlcmVycy4KICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oUmVuZGVyT2JqZWN0Ojpub2RlKCkpOyB9CkBAIC0y
OTgsNyArMzAxLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgU3R5bGVEaWZmZXJlbmNlIGFk
anVzdFN0eWxlRGlmZmVyZW5jZShTdHlsZURpZmZlcmVuY2UsIHVuc2lnbmVkIGNvbnRleHRTZW5z
aXRpdmVQcm9wZXJ0aWVzKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSogY2FjaGVkRmlyc3RMaW5l
U3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY2FjaGVkRmlyc3RMaW5lU3R5
bGUoKSBjb25zdDsKIAogICAgIHZvaWQgbmV3SW1hZ2VBbmltYXRpb25GcmFtZUF2YWlsYWJsZShD
YWNoZWRJbWFnZSYpIGZpbmFsOwogCkBAIC00NTAsMTQgKzQ1MywxNCBAQCBpbmxpbmUgYm9vbCBS
ZW5kZXJPYmplY3Q6OmlzUmVuZGVySW5saW5lCiAgICAgcmV0dXJuIGlzPFJlbmRlckVsZW1lbnQ+
KCp0aGlzKSAmJiBkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykuaXNSZW5kZXJJbmxpbmUo
KTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxlJiBSZW5kZXJPYmplY3Q6OnN0eWxlKCkgY29uc3QK
K2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpzdHlsZSgpIGNvbnN0CiB7
CiAgICAgaWYgKGlzVGV4dCgpKQogICAgICAgICByZXR1cm4gbV9wYXJlbnQtPnN0eWxlKCk7CiAg
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCp0aGlzKS5zdHlsZSgpOwogfQogCi1p
bmxpbmUgUmVuZGVyU3R5bGUmIFJlbmRlck9iamVjdDo6Zmlyc3RMaW5lU3R5bGUoKSBjb25zdAor
aW5saW5lIGNvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZVN0eWxlKCkg
Y29uc3QKIHsKICAgICBpZiAoaXNUZXh0KCkpCiAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Zmly
c3RMaW5lU3R5bGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJl
ZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjAwMDQxKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIyLDggKzUyMiw4IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgpCiAgICAg
TGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgKnRoaXMsIGxvY2F0aW9u
T2Zmc2V0KCksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpOwogICAgIAogICAgIGNoaWxkQm94LnNldExvY2F0
aW9uKExheW91dFBvaW50KGJvcmRlckxlZnQoKSwgYm9yZGVyVG9wKCkpICsgTGF5b3V0U2l6ZShw
YWRkaW5nTGVmdCgpLCBwYWRkaW5nVG9wKCkpKTsKLSAgICBjaGlsZEJveC5zdHlsZSgpLnNldEhl
aWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBjaGlsZEJveC5zdHls
ZSgpLnNldFdpZHRoKExlbmd0aChuZXdTaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgY2hpbGRC
b3gubXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aChuZXdTaXplLmhlaWdodCgpLCBGaXhl
ZCkpOworICAgIGNoaWxkQm94Lm11dGFibGVTdHlsZSgpLnNldFdpZHRoKExlbmd0aChuZXdTaXpl
LndpZHRoKCksIEZpeGVkKSk7CiAgICAgY2hpbGRCb3guc2V0TmVlZHNMYXlvdXQoTWFya09ubHlU
aGlzKTsKICAgICBjaGlsZEJveC5sYXlvdXQoKTsKICAgICBjbGVhckNoaWxkTmVlZHNMYXlvdXQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5j
cHAJKHJldmlzaW9uIDIwMDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBSZW5kZXJGbG93
VGhyZWFkOjpSZW5kZXJGbG93VGhyZWFkKERvY3VtCiAgICAgc2V0Rmxvd1RocmVhZFN0YXRlKElu
c2lkZU91dE9mRmxvd1RocmVhZCk7CiB9CiAKLVJlbmRlclN0eWxlIFJlbmRlckZsb3dUaHJlYWQ6
OmNyZWF0ZUZsb3dUaHJlYWRTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCitSZW5kZXJT
dHlsZSBSZW5kZXJGbG93VGhyZWFkOjpjcmVhdGVGbG93VGhyZWFkU3R5bGUoY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlKCk7CiAgICAgbmV3U3R5bGUuaW5oZXJpdEZyb20ocGFyZW50U3R5bGUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCShyZXZpc2lvbiAy
MDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgd2hl
biBhIGRlc2NlbmRhbnQgYm94J3MgbGF5b3V0IGlzIGZpbmlzaGVkIGFuZCBpdCBoYXMgYmVlbiBw
b3NpdGlvbmVkIHdpdGhpbiBpdHMgY29udGFpbmVyLgogICAgIHZpcnR1YWwgdm9pZCBmbG93VGhy
ZWFkRGVzY2VuZGFudEJveExhaWRPdXQoUmVuZGVyQm94KikgeyB9CiAKLSAgICBzdGF0aWMgUmVu
ZGVyU3R5bGUgY3JlYXRlRmxvd1RocmVhZFN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7
CisgICAgc3RhdGljIFJlbmRlclN0eWxlIGNyZWF0ZUZsb3dUaHJlYWRTdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpOwogCiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMjAwMDQx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzE2LDggKzcxNiw4IEBAIHZvaWQgUmVuZGVySW1hZ2U6OmxheW91dFNoYWRvd0Nv
bnRyb2xzKGMKIAogICAgIGlmIChzaGFkb3dDb250cm9sc05lZWRDdXN0b21MYXlvdXRNZXRyaWNz
KCkpIHsKICAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c2V0TG9jYXRpb24oTGF5b3V0UG9pbnQo
Ym9yZGVyTGVmdCgpLCBib3JkZXJUb3AoKSkgKyBMYXlvdXRTaXplKHBhZGRpbmdMZWZ0KCksIHBh
ZGRpbmdUb3AoKSkpOwotICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5zdHlsZSgpLnNldEhlaWdo
dChMZW5ndGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICAgICAgY29udHJvbHNSZW5k
ZXJlci0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwor
ICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3Ro
KG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPm11
dGFibGVTdHlsZSgpLnNldFdpZHRoKExlbmd0aChuZXdTaXplLndpZHRoKCksIEZpeGVkKSk7CiAg
ICAgfQogCiAgICAgY29udHJvbHNSZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlz
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZp
c2lvbiAyMDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpz
dHlsZURpZENoYW5nZShTdHlsZUQKICAgICAvLyBlLmcuLCA8Zm9udD5mb28gPGg0PmdvbzwvaDQ+
IG1vbzwvZm9udD4uICBUaGUgPGZvbnQ+IGlubGluZXMgYmVmb3JlCiAgICAgLy8gYW5kIGFmdGVy
IHRoZSBibG9jayBzaGFyZSB0aGUgc2FtZSBzdHlsZSwgYnV0IHRoZSBibG9jayBkb2Vzbid0CiAg
ICAgLy8gbmVlZCB0byBwYXNzIGl0cyBzdHlsZSBvbiB0byBhbnlvbmUgZWxzZS4KLSAgICBSZW5k
ZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOworICAgIGF1dG8mIG5ld1N0eWxlID0gc3R5bGUo
KTsKICAgICBSZW5kZXJJbmxpbmUqIGNvbnRpbnVhdGlvbiA9IGlubGluZUVsZW1lbnRDb250aW51
YXRpb24oKTsKICAgICBpZiAoY29udGludWF0aW9uKSB7CiAgICAgICAgIGZvciAoUmVuZGVySW5s
aW5lKiBjdXJyQ29udCA9IGNvbnRpbnVhdGlvbjsgY3VyckNvbnQ7IGN1cnJDb250ID0gY3VyckNv
bnQtPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkgewpAQCAtMjIwLDcgKzIyMCw3IEBAIHZv
aWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW4KICAgICBpZiAoYWx3YXlzQ3Jl
YXRlTGluZUJveGVzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9ICZwYXJlbnQoKS0+c3R5bGUoKTsKKyAgICBhdXRvKiBwYXJlbnRTdHlsZSA9ICZw
YXJlbnQoKS0+c3R5bGUoKTsKICAgICBSZW5kZXJJbmxpbmUqIHBhcmVudFJlbmRlcklubGluZSA9
IGlzPFJlbmRlcklubGluZT4oKnBhcmVudCgpKSA/IGRvd25jYXN0PFJlbmRlcklubGluZT4ocGFy
ZW50KCkpIDogbnVsbHB0cjsKICAgICBib29sIGNoZWNrRm9udHMgPSBkb2N1bWVudCgpLmluTm9R
dWlya3NNb2RlKCk7CiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJl
YWRDb250YWluaW5nQmxvY2soKTsKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIFJlbmRlcklubGlu
ZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMg
JiYgY2hlY2tGb250cyAmJiB2aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpIHsKICAgICAgICAg
Ly8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3QgbGluZSBzdHlsZSBhcyB3ZWxsLgogICAgICAgICBw
YXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKLSAgICAgICAgUmVuZGVy
U3R5bGUmIGNoaWxkU3R5bGUgPSBmaXJzdExpbmVTdHlsZSgpOworICAgICAgICBhdXRvJiBjaGls
ZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKICAgICAgICAgYWx3YXlzQ3JlYXRlTGluZUJveGVz
ID0gIXBhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2Fs
QXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRy
aWNzKCkpCiAgICAgICAgICAgICB8fCBjaGlsZFN0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNF
TElORQogICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0
eWxlLmxpbmVIZWlnaHQoKTsKQEAgLTE2MDEsNyArMTYwMSw3IEBAIHZvaWQgUmVuZGVySW5saW5l
OjpwYWludE91dGxpbmUoUGFpbnRJbmYKICAgICBpZiAoIWhhc091dGxpbmUoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGF1
dG8mIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIC8vIE9ubHkgcGFpbnQgdGhlIGZvY3VzIHJp
bmcgYnkgaGFuZCBpZiB0aGUgdGhlbWUgaXNuJ3QgYWJsZSB0byBkcmF3IGl0LgogICAgIGlmIChz
dHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNS
aW5nKHN0eWxlVG9Vc2UpKSB7CiAgICAgICAgIFZlY3RvcjxMYXlvdXRSZWN0PiBmb2N1c1JpbmdS
ZWN0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2
aXNpb24gMjAwMDQxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDExMSw3ICs0MTExLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6
c2V0dXBDbGlwUGF0aChHcmFwaGljcwogICAgICAgICByb290UmVsYXRpdmVCb3VuZHNDb21wdXRl
ZCA9IHRydWU7CiAgICAgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXIoKS5z
dHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXIoKS5zdHlsZSgpOwogICAgIEFTU0VS
VChzdHlsZS5jbGlwUGF0aCgpKTsKICAgICBpZiAoaXM8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4o
KnN0eWxlLmNsaXBQYXRoKCkpIHx8IChpczxCb3hDbGlwUGF0aE9wZXJhdGlvbj4oKnN0eWxlLmNs
aXBQYXRoKCkpICYmIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpKSB7CiAgICAgICAgIFdpbmRS
dWxlIHdpbmRSdWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAkocmV2aXNpb24gMjAwMDQxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNyArMzU0LDcgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94OjpwYWludFNjcm9sbGJhcihQYWludAogICAgIG1fdkJhci0+cGFpbnQocGFp
bnRJbmZvLmNvbnRleHQoKSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKIH0KIAot
c3RhdGljIExheW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4s
IFJlbmRlclN0eWxlKiBpdGVtU3R5bGUsIEZvbnRDYXNjYWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0
IGl0ZW1Cb3VkaW5nQm94KQorc3RhdGljIExheW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVu
dChUZXh0UnVuIHRleHRSdW4sIGNvbnN0IFJlbmRlclN0eWxlKiBpdGVtU3R5bGUsIEZvbnRDYXNj
YWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5nQm94KQogewogICAgIEVUZXh0QWxp
Z24gYWN0dWFsQWxpZ25tZW50ID0gaXRlbVN0eWxlLT50ZXh0QWxpZ24oKTsKICAgICAvLyBGSVhN
RTogRmlyZWZveCBkb2Vzbid0IHJlc3BlY3QgSlVTVElGWS4gU2hvdWxkIHdlPwpAQCAtMzc5LDcg
KzM3OSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgKICAgICBj
b25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudCgpLmxp
c3RJdGVtcygpOwogICAgIEhUTUxFbGVtZW50KiBsaXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbXNb
bGlzdEluZGV4XTsKIAotICAgIFJlbmRlclN0eWxlJiBpdGVtU3R5bGUgPSAqbGlzdEl0ZW1FbGVt
ZW50LT5jb21wdXRlZFN0eWxlKCk7CisgICAgYXV0byYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxl
bWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogCiAgICAgaWYgKGl0ZW1TdHlsZS52aXNpYmlsaXR5KCkg
PT0gSElEREVOKQogICAgICAgICByZXR1cm47CkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBSZW5k
ZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKAogewogICAgIGNvbnN0IFZlY3RvcjxIVE1M
RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50KCkubGlzdEl0ZW1zKCk7CiAgICAg
SFRNTEVsZW1lbnQqIGxpc3RJdGVtRWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwotICAg
IFJlbmRlclN0eWxlJiBpdGVtU3R5bGUgPSAqbGlzdEl0ZW1FbGVtZW50LT5jb21wdXRlZFN0eWxl
KCk7CisgICAgYXV0byYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+Y29tcHV0ZWRTdHls
ZSgpOwogCiAgICAgQ29sb3IgYmFja0NvbG9yOwogICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVu
dD4oKmxpc3RJdGVtRWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0
SXRlbUVsZW1lbnQpLnNlbGVjdGVkKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDIwMDA0MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcwOCw4ICsxNzA4LDggQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjp1cGRhdGVNYXJnaW5zKCkK
ICAgICAgICAgCiAgICAgfQogCi0gICAgc3R5bGUoKS5zZXRNYXJnaW5TdGFydChMZW5ndGgobWFy
Z2luU3RhcnQsIEZpeGVkKSk7Ci0gICAgc3R5bGUoKS5zZXRNYXJnaW5FbmQoTGVuZ3RoKG1hcmdp
bkVuZCwgRml4ZWQpKTsKKyAgICBtdXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5TdGFydChMZW5ndGgo
bWFyZ2luU3RhcnQsIEZpeGVkKSk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luRW5kKExl
bmd0aChtYXJnaW5FbmQsIEZpeGVkKSk7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyTGlzdE1hcmtl
cjo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9u
LCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCShyZXZpc2lvbiAyMDAwNDApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMCw3ICsxMTAsNyBAQCBpbnQgUmVuZGVyTWFycXVlZTo6Y29tcHV0ZVBvc2l0aW9u
KEVNYXJxCiB7CiAgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLT5yZW5kZXJCb3goKTsKICAg
ICBBU1NFUlQoYm94KTsKLSAgICBSZW5kZXJTdHlsZSYgYm94U3R5bGUgPSBib3gtPnN0eWxlKCk7
CisgICAgYXV0byYgYm94U3R5bGUgPSBib3gtPnN0eWxlKCk7CiAgICAgaWYgKGlzSG9yaXpvbnRh
bCgpKSB7CiAgICAgICAgIGJvb2wgbHRyID0gYm94U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpOwogICAgICAgICBMYXlvdXRVbml0IGNsaWVudFdpZHRoID0gYm94LT5jbGllbnRXaWR0aCgp
OwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVlZVBv
c2l0aW8KIAogdm9pZCBSZW5kZXJNYXJxdWVlOjp1cGRhdGVNYXJxdWVlU3R5bGUoKQogewotICAg
IFJlbmRlclN0eWxlJiBzdHlsZSA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBh
dXRvJiBzdHlsZSA9IG1fbGF5ZXItPnJlbmRlcmVyKCkubXV0YWJsZVN0eWxlKCk7CiAgICAgCiAg
ICAgaWYgKG1fZGlyZWN0aW9uICE9IHN0eWxlLm1hcnF1ZWVEaXJlY3Rpb24oKSB8fCAobV90b3Rh
bExvb3BzICE9IHN0eWxlLm1hcnF1ZWVMb29wQ291bnQoKSAmJiBtX2N1cnJlbnRMb29wID49IG1f
dG90YWxMb29wcykpCiAgICAgICAgIG1fY3VycmVudExvb3AgPSAwOyAvLyBXaGVuIGRpcmVjdGlv
biBjaGFuZ2VzIG9yIG91ciBsb29wQ291bnQgaXMgYSBzbWFsbGVyIG51bWJlciB0aGFuIG91ciBj
dXJyZW50IGxvb3AsIHJlc2V0IG91ciBsb29wLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiAyMDAwNDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
NyArMTA5LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6Y3JlYXRlSW5uZXJCbG9jaygpCiAKIHZv
aWQgUmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVyU3R5bGUoKQogewotICAgIFJlbmRlclN0eWxl
JiBpbm5lclN0eWxlID0gbV9pbm5lckJsb2NrLT5zdHlsZSgpOworICAgIGF1dG8mIGlubmVyU3R5
bGUgPSBtX2lubmVyQmxvY2stPm11dGFibGVTdHlsZSgpOwogICAgIGlubmVyU3R5bGUuc2V0Rmxl
eEdyb3coMSk7CiAgICAgaW5uZXJTdHlsZS5zZXRGbGV4U2hyaW5rKDEpOwogICAgIC8vIG1pbi13
aWR0aDogMDsgaXMgbmVlZGVkIGZvciBjb3JyZWN0IHNocmlua2luZy4KQEAgLTIxNSw3ICsyMTUs
NyBAQCB2b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgoCiAgICAgICAgIGlm
ICh0aGVtZSgpLnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkpIHsKICAgICAgICAgICAg
IC8vIEFkZCBpbiB0aGUgb3B0aW9uJ3MgdGV4dCBpbmRlbnQuICBXZSBjYW4ndCBjYWxjdWxhdGUg
cGVyY2VudGFnZSB2YWx1ZXMgZm9yIG5vdy4KICAgICAgICAgICAgIGZsb2F0IG9wdGlvbldpZHRo
ID0gMDsKLSAgICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSogb3B0aW9uU3R5bGUgPSBlbGVtZW50
LT5jb21wdXRlZFN0eWxlKCkpCisgICAgICAgICAgICBpZiAoYXV0byogb3B0aW9uU3R5bGUgPSBl
bGVtZW50LT5jb21wdXRlZFN0eWxlKCkpCiAgICAgICAgICAgICAgICAgb3B0aW9uV2lkdGggKz0g
bWluaW11bVZhbHVlRm9yTGVuZ3RoKG9wdGlvblN0eWxlLT50ZXh0SW5kZW50KCksIDApOwogICAg
ICAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwpAQCAtNTE5LDcgKzUxOSw3
IEBAIFBvcHVwTWVudVN0eWxlIFJlbmRlck1lbnVMaXN0OjppdGVtU3R5bGUKICAgICBib29sIGl0
ZW1IYXNDdXN0b21CYWNrZ3JvdW5kQ29sb3I7CiAgICAgZ2V0SXRlbUJhY2tncm91bmRDb2xvcihs
aXN0SW5kZXgsIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIGl0ZW1IYXNDdXN0b21CYWNrZ3JvdW5kQ29s
b3IpOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gKmVsZW1lbnQtPmNvbXB1dGVkU3R5bGUo
KTsKKyAgICBhdXRvJiBzdHlsZSA9ICplbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CiAgICAgcmV0
dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKSwgaXRlbUJhY2tncm91bmRDb2xvciwgc3R5bGUuZm9udENhc2NhZGUoKSwgc3R5bGUu
dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCiAgICAgICAgIHN0eWxlLmRpc3BsYXkoKSA9PSBOT05F
LCB0cnVlLCBzdHlsZS50ZXh0SW5kZW50KCksIHN0eWxlLmRpcmVjdGlvbigpLCBpc092ZXJyaWRl
KHN0eWxlLnVuaWNvZGVCaWRpKCkpLAogICAgICAgICBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENv
bG9yID8gUG9wdXBNZW51U3R5bGU6OkN1c3RvbUJhY2tncm91bmRDb2xvciA6IFBvcHVwTWVudVN0
eWxlOjpEZWZhdWx0QmFja2dyb3VuZENvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCShyZXZp
c2lvbiAyMDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHN0YXRp
YyBib29sIGlzVmFsaWRDb2x1bW5TcGFubmVyKFJlbmRlck0KICAgICBBU1NFUlQoZGVzY2VuZGFu
dC0+aXNEZXNjZW5kYW50T2YoZmxvd1RocmVhZCkpOwogCiAgICAgLy8gRmlyc3QgbWFrZSBzdXJl
IHRoYXQgdGhlIHJlbmRlcmVyIGl0c2VsZiBoYXMgdGhlIHJpZ2h0IHByb3BlcnRpZXMgZm9yIGJl
Y29taW5nIGEgc3Bhbm5lci4KLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBkZXNjZW5kYW50LT5z
dHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gZGVzY2VuZGFudC0+c3R5bGUoKTsKICAgICBpZiAo
c3R5bGUuY29sdW1uU3BhbigpICE9IENvbHVtblNwYW5BbGwgfHwgIWlzPFJlbmRlckJveD4oKmRl
c2NlbmRhbnQpIHx8IGRlc2NlbmRhbnQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhv
bGRlci5jcHAJKHJldmlzaW9uIDIwMDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZW5kZXJNdWx0aUNvbHVt
blNwYW5uZXJQbGFjZWhvbGRlciogUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI6
OmNyZWF0ZUFub255bW91cyhSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqIGZsb3dUaHJlYWQs
IFJlbmRlckJveCogc3Bhbm5lciwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorUmVuZGVyTXVs
dGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNl
aG9sZGVyOjpjcmVhdGVBbm9ueW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBmbG93
VGhyZWFkLCBSZW5kZXJCb3gqIHNwYW5uZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSkKIHsKICAgICBhdXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0
eWxlV2l0aERpc3BsYXkoKnBhcmVudFN0eWxlLCBCTE9DSyk7CiAgICAgbmV3U3R5bGUuc2V0Q2xl
YXIoQ0JPVEgpOyAvLyBXZSBkb24ndCB3YW50IGZsb2F0cyBpbiB0aGUgcm93IHByZWNlZGluZyB0
aGUgc3Bhbm5lciB0byBjb250aW51ZSBvbiB0aGUgb3RoZXIgc2lkZS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNw
YW5uZXJQbGFjZWhvbGRlci5oCShyZXZpc2lvbiAyMDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ7
CiAKIGNsYXNzIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyIGZpbmFsIDogcHVi
bGljIFJlbmRlckJveCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlbmRlck11bHRpQ29sdW1uU3Bh
bm5lclBsYWNlaG9sZGVyKiBjcmVhdGVBbm9ueW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhy
ZWFkKiwgUmVuZGVyQm94KiBzcGFubmVyLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAg
IHN0YXRpYyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciogY3JlYXRlQW5vbnlt
b3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCosIFJlbmRlckJveCogc3Bhbm5lciwgY29u
c3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIFJlbmRlckJveCogc3Bhbm5lcigp
IGNvbnN0IHsgcmV0dXJuIG1fc3Bhbm5lcjsgfQogICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd1RocmVhZDsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQuY3BwCShyZXZpc2lvbiAyMDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsNyArMzQ3LDcg
QEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2hlY2tSZWdpbwogICAgIGRvd25jYXN0
PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKm1fZmxvd1RocmVhZCkuY2hlY2tSZWdpb25zV2l0aFN0
eWxpbmcoKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudDo6Y29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKCFyZW5kZXJlci5pc0Fub255bW91cygpKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgJKHJl
dmlzaW9uIDIwMDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCI7IH0KIAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gY29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYsIFJl
bmRlclN0eWxlJiBwYXJlbnRTdHlsZSkgY29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBjb21wdXRlU3R5bGVJblJlZ2lvbihSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVy
U3R5bGUmIHBhcmVudFN0eWxlKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVDaGlsZHJlblN0eWxl
SW5SZWdpb24oUmVuZGVyRWxlbWVudCYpOwogICAgIHZvaWQgc2V0T2JqZWN0U3R5bGVJblJlZ2lv
bihSZW5kZXJPYmplY3QqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+LCBib29sIG9iamVj
dFJlZ2lvblN0eWxlQ2FjaGVkKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIyLDcgKzE4MjIsNyBA
QCBpbnQgUmVuZGVyT2JqZWN0Ojppbm5lckxpbmVIZWlnaHQoKSBjb25zCiAgICAgcmV0dXJuIHN0
eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CiB9CiAKLXN0YXRpYyBDb2xvciBkZWNvcmF0aW9u
Q29sb3IoUmVuZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIENvbG9yIGRlY29yYXRpb25Db2xvcihj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgQ29sb3IgcmVzdWx0OwogICAgIC8vIENo
ZWNrIGZvciB0ZXh0IGRlY29yYXRpb24gY29sb3IgZmlyc3QuCkBAIC0xODQ0LDcgKzE4NDQsNyBA
QCB2b2lkIFJlbmRlck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvCiAgICAgVGV4dERlY29y
YXRpb25TdHlsZSYgdW5kZXJsaW5lU3R5bGUsIFRleHREZWNvcmF0aW9uU3R5bGUmIG92ZXJsaW5l
U3R5bGUsIFRleHREZWNvcmF0aW9uU3R5bGUmIGxpbmV0aHJvdWdoU3R5bGUsIGJvb2wgZmlyc3Rs
aW5lU3R5bGUpIGNvbnN0CiB7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gdGhp
czsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IG51bGxwdHI7CisgICAgY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBudWxscHRyOwogICAgIFRleHREZWNvcmF0aW9uIGN1cnJE
ZWNzID0gVGV4dERlY29yYXRpb25Ob25lOwogICAgIENvbG9yIHJlc3VsdENvbG9yOwogICAgIGRv
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9u
IDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNjk3LDggKzY5Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91
dFVuaXQgbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJl
dHVybiAwOyB9CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJT
dHlsZSYgZmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUoKSBjb25z
dDsKIAogICAgIC8vIEFub255bW91cyBibG9ja3MgdGhhdCBhcmUgcGFydCBvZiBvZiBhIGNvbnRp
bnVhdGlvbiBjaGFpbiB3aWxsIHJldHVybiB0aGVpciBpbmxpbmUgY29udGludWF0aW9uJ3Mgb3V0
bGluZSBzdHlsZSBpbnN0ZWFkLgogICAgIC8vIFRoaXMgaXMgdHlwaWNhbGx5IG9ubHkgcmVsZXZh
bnQgd2hlbiByZXBhaW50aW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwCShyZXZpc2lvbiAyMDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTEsNyArODExLDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYQogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2NhcHRpb25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX21pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBtX2NhcHRp
b25zW2ldLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSk7CiAKLSAgICBSZW5kZXJTdHlsZSYg
c3R5bGVUb1VzZSA9IHN0eWxlKCk7CisgICAgYXV0byYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGNoZWNraW5nIGZvciBpc1NwZWNp
ZmllZCBzaW5jZSB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHBlcmNlbnRhZ2Ugb3IgY2FsYyB2
YWx1ZXMgZm9yIG1pbi13aWR0aC4KICAgICBpZiAoc3R5bGVUb1VzZS5sb2dpY2FsTWluV2lkdGgo
KS5pc0ZpeGVkKCkgJiYgc3R5bGVUb1VzZS5sb2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpID4gMCkg
ewogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fbWF4UHJl
ZmVycmVkTG9naWNhbFdpZHRoLCBhZGp1c3RDb250ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94U2l6
aW5nKHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkudmFsdWUoKSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9u
IDIwMDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk4LDcgKzExOTgsNyBAQCB2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6cGFpbnRSb3dHcm91cEJvCiAKIH0KIAotc3RhdGljIEJveFNpZGUgcGh5c2ljYWxC
b3JkZXJGb3JEaXJlY3Rpb24oUmVuZGVyU3R5bGUqIHN0eWxlRm9yQ2VsbEZsb3csIENvbGxhcHNl
ZEJvcmRlclNpZGUgc2lkZSkKK3N0YXRpYyBCb3hTaWRlIHBoeXNpY2FsQm9yZGVyRm9yRGlyZWN0
aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93LCBDb2xsYXBzZWRCb3JkZXJT
aWRlIHNpZGUpCiB7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMjAwMDQwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RnJhZ21lbnQoKSBjb25zdDsKIAotICAg
IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0OwotICAgIFJlbmRlclN0eWxlJiBmaXJzdExpbmVT
dHlsZSgpIGNvbnN0OwotICAgIFJlbmRlclN0eWxlKiBnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1
ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0cikgY29uc3Q7CisgICAgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZp
cnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGdldENhY2hlZFBz
ZXVkb1N0eWxlKFBzZXVkb0lkLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxs
cHRyKSBjb25zdDsKIAogICAgIENvbG9yIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
OwogICAgIENvbG9yIHNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwpAQCAtMjUxLDE3
ICsyNTEsMTcgQEAgaW5saW5lIFVDaGFyIFJlbmRlclRleHQ6OmNoYXJhY3RlckF0KHVucwogICAg
IHJldHVybiB1bmNoZWNrZWRDaGFyYWN0ZXJBdChpKTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxl
JiBSZW5kZXJUZXh0OjpzdHlsZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUmIFJl
bmRlclRleHQ6OnN0eWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGFyZW50KCktPnN0eWxlKCk7
CiB9CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVuZGVyVGV4dDo6Zmlyc3RMaW5lU3R5bGUoKSBj
b25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJUZXh0OjpmaXJzdExpbmVTdHls
ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogfQog
Ci1pbmxpbmUgUmVuZGVyU3R5bGUqIFJlbmRlclRleHQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBz
ZXVkb0lkIHBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CitpbmxpbmUg
Y29uc3QgUmVuZGVyU3R5bGUqIFJlbmRlclRleHQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVk
b0lkIHBzZXVkb0lkLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHBhcmVudCgpLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG9JZCwgcGFyZW50
U3R5bGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwCShyZXZpc2lvbiAyMDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw4IEBA
IHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnN0eWxlRGlkQ2hhbmdlKFMKICAgICBpZiAoaW5uZXJU
ZXh0UmVuZGVyZXIpIHsKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgc2V0IHRoZSB3aWR0aCBhbmQg
dGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0eWxlIGluIGxheW91dCgpLgogICAgICAgICAvLyBSZXNl
dCB0aGVtIG5vdyB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0IGhpbnQuCi0gICAg
ICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgoKSk7Ci0gICAg
ICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zdHlsZSgpLnNldFdpZHRoKExlbmd0aCgpKTsKKyAgICAg
ICAgaW5uZXJUZXh0UmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgoKSk7
CisgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5n
dGgoKSk7CiAgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zZXRTdHlsZSh0ZXh0Rm9ybUNvbnRy
b2xFbGVtZW50KCkuY3JlYXRlSW5uZXJUZXh0U3R5bGUoc3R5bGUoKSkpOwogICAgIH0KICAgICB0
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkudXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDIwMDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDcgKzkyLDcgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZQog
ICAgIFJlbmRlck9iamVjdCogcGxhY2Vob2xkZXJSZW5kZXJlciA9IFJlbmRlclRleHRDb250cm9s
OjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZChyZWxheW91dENoaWxkcmVuKTsKICAgICBpZiAo
aXM8UmVuZGVyQm94PihwbGFjZWhvbGRlclJlbmRlcmVyKSkgewogICAgICAgICBhdXRvJiBwbGFj
ZWhvbGRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnBsYWNlaG9sZGVyUmVuZGVyZXIpOwot
ICAgICAgICBwbGFjZWhvbGRlckJveC5zdHlsZSgpLnNldExvZ2ljYWxXaWR0aChMZW5ndGgoY29u
dGVudExvZ2ljYWxXaWR0aCgpIC0gcGxhY2Vob2xkZXJCb3guYm9yZGVyQW5kUGFkZGluZ0xvZ2lj
YWxXaWR0aCgpLCBGaXhlZCkpOworICAgICAgICBwbGFjZWhvbGRlckJveC5tdXRhYmxlU3R5bGUo
KS5zZXRMb2dpY2FsV2lkdGgoTGVuZ3RoKGNvbnRlbnRMb2dpY2FsV2lkdGgoKSAtIHBsYWNlaG9s
ZGVyQm94LmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSwgRml4ZWQpKTsKICAgICAgICAg
cGxhY2Vob2xkZXJCb3gubGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgcGxhY2Vob2xkZXJCb3gu
c2V0WChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKTsKICAgICAgICAgcGxhY2Vob2xkZXJC
b3guc2V0WShib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAkocmV2aXNpb24gMjAwMDQxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMSArMTA4LDEx
IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQKIAogICAgIC8vIFRv
IGVuc3VyZSBjb25zaXN0ZW5jeSBiZXR3ZWVuIGxheW91dHMsIHdlIG5lZWQgdG8gcmVzZXQgYW55
IGNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVuIGhlaWdodC4KICAgICBpZiAoaW5uZXJUZXh0UmVuZGVy
ZXIgJiYgIWlubmVyVGV4dFJlbmRlcmVyLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8o
KSkgewotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0
KExlbmd0aChBdXRvKSk7CisgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUo
KS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChBdXRvKSk7CiAgICAgICAgIHNldE5lZWRzTGF5b3V0
T25BbmNlc3RvcnMoaW5uZXJUZXh0UmVuZGVyZXIsIHRoaXMpOwogICAgIH0KICAgICBpZiAoaW5u
ZXJCbG9ja1JlbmRlcmVyICYmICFpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCkubG9naWNhbEhl
aWdodCgpLmlzQXV0bygpKSB7Ci0gICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS5z
ZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgICAgIGlubmVyQmxvY2tSZW5kZXJl
ci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoQXV0bykpOwogICAgICAg
ICBzZXROZWVkc0xheW91dE9uQW5jZXN0b3JzKGlubmVyQmxvY2tSZW5kZXJlciwgdGhpcyk7CiAg
ICAgfQogCkBAIC0xMjgsMTAgKzEyOCwxMCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6bGF5b3V0CiAgICAgICAgIGlmIChkZXNpcmVkTG9naWNhbEhlaWdodCAhPSBpbm5lclRl
eHRSZW5kZXJlci0+bG9naWNhbEhlaWdodCgpKQogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQo
TWFya09ubHlUaGlzKTsKIAotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRM
b2dpY2FsSGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKKyAgICAg
ICAgaW5uZXJUZXh0UmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVu
Z3RoKGRlc2lyZWRMb2dpY2FsSGVpZ2h0LCBGaXhlZCkpOwogICAgICAgICBpbm5lclRleHRSZW5k
ZXJlci0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgaWYgKGlubmVyQmxv
Y2tSZW5kZXJlcikgewotICAgICAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLnNl
dExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGRlc2lyZWRMb2dpY2FsSGVpZ2h0LCBGaXhlZCkpOworICAg
ICAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVp
Z2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgICAgIGlu
bmVyQmxvY2tSZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTE0MCwxMyArMTQwLDEzIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpsYXlvdXQKICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPmxheW91dElmTmVlZGVk
KCk7CiAgICAgICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbEhlaWdodCA9IGNvbnRhaW5l
clJlbmRlcmVyLT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGlmIChjb250YWluZXJMb2dpY2Fs
SGVpZ2h0ID4gbG9naWNhbEhlaWdodExpbWl0KSB7Ci0gICAgICAgICAgICBjb250YWluZXJSZW5k
ZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChsb2dpY2FsSGVpZ2h0TGltaXQs
IEZpeGVkKSk7CisgICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCku
c2V0TG9naWNhbEhlaWdodChMZW5ndGgobG9naWNhbEhlaWdodExpbWl0LCBGaXhlZCkpOwogICAg
ICAgICAgICAgc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgfSBlbHNlIGlm
IChjb250YWluZXJSZW5kZXJlci0+bG9naWNhbEhlaWdodCgpIDwgY29udGVudExvZ2ljYWxIZWln
aHQoKSkgewotICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNh
bEhlaWdodChMZW5ndGgoY29udGVudExvZ2ljYWxIZWlnaHQoKSwgRml4ZWQpKTsKKyAgICAgICAg
ICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExl
bmd0aChjb250ZW50TG9naWNhbEhlaWdodCgpLCBGaXhlZCkpOwogICAgICAgICAgICAgc2V0TmVl
ZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb250
YWluZXJSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChjb250YWluZXJM
b2dpY2FsSGVpZ2h0LCBGaXhlZCkpOworICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11
dGFibGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGNvbnRhaW5lckxvZ2ljYWxIZWln
aHQsIEZpeGVkKSk7CiAgICAgfQogCiAgICAgLy8gSWYgd2UgbmVlZCBhbm90aGVyIGxheW91dCBw
YXNzLCB3ZSBoYXZlIGNoYW5nZWQgb25lIG9mIGNoaWxkcmVuJ3MgaGVpZ2h0IHNvIHdlIG5lZWQg
dG8gcmVsYXlvdXQgdGhlbS4KQEAgLTE3NCw4ICsxNzQsOCBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgICAgIExheW91dFNpemUgaW5uZXJUZXh0U2l6ZTsK
ICAgICAgICAgaWYgKGlubmVyVGV4dFJlbmRlcmVyKQogICAgICAgICAgICAgaW5uZXJUZXh0U2l6
ZSA9IGlubmVyVGV4dFJlbmRlcmVyLT5zaXplKCk7Ci0gICAgICAgIHBsYWNlaG9sZGVyQm94LT5z
dHlsZSgpLnNldFdpZHRoKExlbmd0aChpbm5lclRleHRTaXplLndpZHRoKCkgLSBwbGFjZWhvbGRl
ckJveC0+aG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgRml4ZWQpKTsKLSAgICAg
ICAgcGxhY2Vob2xkZXJCb3gtPnN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aChpbm5lclRleHRTaXpl
LmhlaWdodCgpIC0gcGxhY2Vob2xkZXJCb3gtPnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVu
dCgpLCBGaXhlZCkpOworICAgICAgICBwbGFjZWhvbGRlckJveC0+bXV0YWJsZVN0eWxlKCkuc2V0
V2lkdGgoTGVuZ3RoKGlubmVyVGV4dFNpemUud2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LT5ob3Jp
em9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCBGaXhlZCkpOworICAgICAgICBwbGFjZWhv
bGRlckJveC0+bXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aChpbm5lclRleHRTaXplLmhl
aWdodCgpIC0gcGxhY2Vob2xkZXJCb3gtPnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgp
LCBGaXhlZCkpOwogICAgICAgICBib29sIG5lZWRlZExheW91dCA9IHBsYWNlaG9sZGVyQm94LT5u
ZWVkc0xheW91dCgpOwogICAgICAgICBib29sIHBsYWNlaG9sZGVyQm94SGFkTGF5b3V0ID0gcGxh
Y2Vob2xkZXJCb3gtPmV2ZXJIYWRMYXlvdXQoKTsKICAgICAgICAgcGxhY2Vob2xkZXJCb3gtPmxh
eW91dElmTmVlZGVkKCk7CkBAIC0yMzYsMTQgKzIzNiwxNCBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6c3R5bGVECiAgICAgLy8gV2UgbWF5IGhhdmUgc2V0IHRoZSB3aWR0aCBh
bmQgdGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0eWxlIGluIGxheW91dCgpLgogICAgIC8vIFJlc2V0
IHRoZW0gbm93IHRvIGF2b2lkIGdldHRpbmcgYSBzcHVyaW91cyBsYXlvdXQgaGludC4KICAgICBI
VE1MRWxlbWVudCogaW5uZXJCbG9jayA9IGlubmVyQmxvY2tFbGVtZW50KCk7Ci0gICAgaWYgKFJl
bmRlck9iamVjdCogaW5uZXJCbG9ja1JlbmRlcmVyID0gaW5uZXJCbG9jayA/IGlubmVyQmxvY2st
PnJlbmRlcmVyKCkgOiAwKSB7Ci0gICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS5z
ZXRIZWlnaHQoTGVuZ3RoKCkpOwotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCku
c2V0V2lkdGgoTGVuZ3RoKCkpOworICAgIGlmIChhdXRvKiBpbm5lckJsb2NrUmVuZGVyZXIgPSBp
bm5lckJsb2NrID8gaW5uZXJCbG9jay0+cmVuZGVyZXIoKSA6IG51bGxwdHIpIHsKKyAgICAgICAg
aW5uZXJCbG9ja1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOwor
ICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldFdpZHRoKExlbmd0
aCgpKTsKICAgICB9CiAgICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9IGNvbnRhaW5lckVsZW1l
bnQoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRhaW5l
ciA/IGNvbnRhaW5lci0+cmVuZGVyZXIoKSA6IDApIHsKLSAgICAgICAgY29udGFpbmVyUmVuZGVy
ZXItPnN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aCgpKTsKLSAgICAgICAgY29udGFpbmVyUmVuZGVy
ZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkpOworICAgIGlmIChhdXRvKiBjb250YWluZXJS
ZW5kZXJlciA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVyZXIoKSA6IG51bGxwdHIpIHsK
KyAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5n
dGgoKSk7CisgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0
aChMZW5ndGgoKSk7CiAgICAgfQogICAgIGlmIChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91
dCkgewogICAgICAgICBpZiAoYXV0byogaW5uZXJUZXh0UmVuZGVyZXIgPSBpbm5lclRleHRFbGVt
ZW50KCktPnJlbmRlcmVyKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dEZyYWdtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dEZyYWdtZW50LmNwcAkocmV2aXNpb24gMjAwMDQwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDcgKzY4LDcgQEAgdm9pZCBSZW5kZXJUZXh0RnJhZ21lbnQ6OnN0eWxlRGlkQ2hhbmdlKAogICAg
IFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKIAogICAgIGlmIChS
ZW5kZXJCbG9jayogYmxvY2sgPSBibG9ja0ZvckFjY29tcGFueWluZ0ZpcnN0TGV0dGVyKCkpIHsK
LSAgICAgICAgYmxvY2stPnN0eWxlKCkucmVtb3ZlQ2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTEVU
VEVSKTsKKyAgICAgICAgYmxvY2stPm11dGFibGVTdHlsZSgpLnJlbW92ZUNhY2hlZFBzZXVkb1N0
eWxlKEZJUlNUX0xFVFRFUik7CiAgICAgICAgIGJsb2NrLT51cGRhdGVGaXJzdExldHRlcigpOwog
ICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIGZsCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gZmxvdy5zdHlsZSgp
OworICAgIGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOwogICAgIGlmIChzdHlsZS52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNDAsNyArMTQwLDcgQEAg
Ym9vbCBoaXRUZXN0Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIAogICAgIGlmICghbGF5b3V0
LnJ1bkNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlbmRlclN0eWxlJiBz
dHlsZSA9IGZsb3cuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKICAg
ICBpZiAoc3R5bGUudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgc3R5bGUucG9pbnRlckV2ZW50
cygpID09IFBFX05PTkUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShyZXZpc2lvbiAyMDAwNDApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgVGV4dFBhaW50U3R5bGUgY29tcHV0ZVRleHRTZWxlY3Rp
b25QYWludAogICAgICAgICBzZWxlY3Rpb25QYWludFN0eWxlLmVtcGhhc2lzTWFya0NvbG9yID0g
ZW1waGFzaXNNYXJrRm9yZWdyb3VuZDsKICAgICB9CiAKLSAgICBpZiAoUmVuZGVyU3R5bGUqIHBz
ZXVkb1N0eWxlID0gcmVuZGVyZXIuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9OKSkgewor
ICAgIGlmIChhdXRvKiBwc2V1ZG9TdHlsZSA9IHJlbmRlcmVyLmdldENhY2hlZFBzZXVkb1N0eWxl
KFNFTEVDVElPTikpIHsKICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gcGFpbnRJ
bmZvLmZvcmNlVGV4dENvbG9yKCkgPyBudWxscHRyIDogcHNldWRvU3R5bGUtPnRleHRTaGFkb3co
KTsKICAgICAgICAgaWYgKHNoYWRvdyAhPSBzZWxlY3Rpb25TaGFkb3cpIHsKICAgICAgICAgICAg
IGlmICghcGFpbnRTZWxlY3RlZFRleHRPbmx5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTIsNyArMjUyLDcgQEAgcHJpdmF0ZToKICAgICAvLyBGaXJlZm94IGFuZCBPcGVy
YSB3aWxsIGFsbG93IGEgdGFibGUgY2VsbCB0byBncm93IHRvIGZpdCBhbiBpbWFnZSBpbnNpZGUg
aXQgdW5kZXIKICAgICAvLyB2ZXJ5IHNwZWNpZmljIGNpcmN1bXN0YW5jZXMgKGluIG9yZGVyIHRv
IG1hdGNoIGNvbW1vbiBXaW5JRSByZW5kZXJpbmdzKS4KICAgICAvLyBOb3Qgc3VwcG9ydGluZyB0
aGUgcXVpcmsgaGFzIGNhdXNlZCB1cyB0byBtaXMtcmVuZGVyIHNvbWUgcmVhbCBzaXRlcy4gKFNl
ZSBCdWd6aWxsYSAxMDUxNy4pCi0gICAgUmVuZGVyU3R5bGUmIG1fYmxvY2tTdHlsZTsKKyAgICBj
b25zdCBSZW5kZXJTdHlsZSYgbV9ibG9ja1N0eWxlOwogCiAgICAgTGluZUluZm8mIG1fbGluZUlu
Zm87CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNpb24gMjAwMDQxKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAxLDEwICszMDEsMTAgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpsYXlvdXQoKQogICAgICAg
ICAgICAgICAgIGJhc2VUb3BNYXJnaW4gLT0gaW5kZXhUb3BNYXJnaW47CiAgICAgICAgICAgICAg
ICAgaW5kZXhUb3BNYXJnaW4gPSAwOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5kZXgt
PnN0eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChpbmRleFRvcE1hcmdpbiwgRml4ZWQpKTsKKyAg
ICAgICAgICAgIGluZGV4LT5tdXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGluZGV4
VG9wTWFyZ2luLCBGaXhlZCkpOwogICAgICAgICB9Ci0gICAgICAgIHJhZGljYWwtPnN0eWxlKCku
c2V0TWFyZ2luVG9wKExlbmd0aChyYWRpY2FsVG9wTWFyZ2luLCBGaXhlZCkpOwotICAgICAgICBi
YXNlLT5zdHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgoYmFzZVRvcE1hcmdpbiwgRml4ZWQpKTsK
KyAgICAgICAgcmFkaWNhbC0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChyYWRp
Y2FsVG9wTWFyZ2luLCBGaXhlZCkpOworICAgICAgICBiYXNlLT5tdXRhYmxlU3R5bGUoKS5zZXRN
YXJnaW5Ub3AoTGVuZ3RoKGJhc2VUb3BNYXJnaW4sIEZpeGVkKSk7CiAgICAgfQogCiAgICAgUmVu
ZGVyTWF0aE1MQmxvY2s6OmxheW91dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDIwMDA0MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjA2
LDcgKzE2MDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb2x1bW5SdWxlV2lkdGgodW5zaWdu
ZWQgc2hvcnQgdykgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV9tdWx0
aUNvbCwgbV9ydWxlLm1fd2lkdGgsIHcpOyB9CiAgICAgdm9pZCByZXNldENvbHVtblJ1bGUoKSB7
IFNFVF9ORVNURURfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX211bHRpQ29sLCBtX3J1bGUs
IEJvcmRlclZhbHVlKCkpOyB9CiAgICAgdm9pZCBzZXRDb2x1bW5TcGFuKENvbHVtblNwYW4gY29s
dW1uU3BhbikgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV9tdWx0aUNv
bCwgbV9jb2x1bW5TcGFuLCBjb2x1bW5TcGFuKTsgfQotICAgIHZvaWQgaW5oZXJpdENvbHVtblBy
b3BlcnRpZXNGcm9tKFJlbmRlclN0eWxlKiBwYXJlbnQpIHsgcmFyZU5vbkluaGVyaXRlZERhdGEu
YWNjZXNzKCktPm1fbXVsdGlDb2wgPSBwYXJlbnQtPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211
bHRpQ29sOyB9CisgICAgdm9pZCBpbmhlcml0Q29sdW1uUHJvcGVydGllc0Zyb20oY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudCkgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9tdWx0
aUNvbCA9IHBhcmVudC0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2w7IH0KICAgICB2
b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvcHMpIHsgU0VUX05F
U1RFRF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fdHJhbnNmb3JtLCBtX29wZXJhdGlvbnMs
IG9wcyk7IH0KICAgICB2b2lkIHNldFRyYW5zZm9ybU9yaWdpblgoTGVuZ3RoIGxlbmd0aCkgeyBT
RVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV90cmFuc2Zvcm0sIG1feCwgV1RG
TW92ZShsZW5ndGgpKTsgfQogICAgIHZvaWQgc2V0VHJhbnNmb3JtT3JpZ2luWShMZW5ndGggbGVu
Z3RoKSB7IFNFVF9ORVNURURfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX3RyYW5zZm9ybSwg
bV95LCBXVEZNb3ZlKGxlbmd0aCkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBmbG9hdCBTVkdJbmxpbmVUZXh0Qm94Ojpwb3NpdGlv
bkZvck9mZnNlCiAgICAgcmV0dXJuIDA7CiB9CiAKLUZsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94
OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJh
Z21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK0Zsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9y
VGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBv
c2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
IHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGFydFBvc2l0aW9uIDwg
ZW5kUG9zaXRpb24pOwogICAgIEFTU0VSVChzdHlsZSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgTGF5
b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdAogICAgIGlmIChzdGFydFBvc2l0
aW9uID49IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAg
UmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXIoKS5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxl
ID0gcmVuZGVyZXIoKS5zdHlsZSgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50VHJh
bnNmb3JtOwogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0OwpAQCAtMjAxLDcgKzIwMSw3IEBA
IHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25CYWMKICAgICBpZiAoIXRleHRT
aG91bGRCZVBhaW50ZWQocmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRl
clN0eWxlJiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUg
PSBwYXJlbnRSZW5kZXJlci5zdHlsZSgpOwogCiAgICAgaW50IHN0YXJ0UG9zaXRpb247CiAgICAg
aW50IGVuZFBvc2l0aW9uOwpAQCAtMjU2LDE0ICsyNTYsMTQgQEAgdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjpwYWludChQYWludEluZm8mIAogICAgIGlmICghdGV4dFNob3VsZEJlUGFpbnRlZChyZW5k
ZXJlcigpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcGFy
ZW50UmVuZGVyZXIuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0
eWxlKCk7CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZS5zdmdT
dHlsZSgpOwogCiAgICAgYm9vbCBoYXNGaWxsID0gc3ZnU3R5bGUuaGFzRmlsbCgpOwogICAgIGJv
b2wgaGFzVmlzaWJsZVN0cm9rZSA9IHN2Z1N0eWxlLmhhc1Zpc2libGVTdHJva2UoKTsKIAotICAg
IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSA9ICZzdHlsZTsKKyAgICBjb25zdCBSZW5kZXJT
dHlsZSogc2VsZWN0aW9uU3R5bGUgPSAmc3R5bGU7CiAgICAgaWYgKGhhc1NlbGVjdGlvbikgewog
ICAgICAgICBzZWxlY3Rpb25TdHlsZSA9IHBhcmVudFJlbmRlcmVyLmdldENhY2hlZFBzZXVkb1N0
eWxlKFNFTEVDVElPTik7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdHlsZSkgewpAQCAtMzM0LDcg
KzMzNCw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBB
U1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJjZSk7CiB9CiAKLWJvb2wgU1ZHSW5saW5lVGV4dEJveDo6
YWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgZmxvYXQg
c2NhbGluZ0ZhY3RvciwgUmVuZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVyLCBSZW5kZXJTdHls
ZSogc3R5bGUpCitib29sIFNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291cmNl
KEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlckJv
eE1vZGVsT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAg
IEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKICAgICBBU1NFUlQoc3R5bGUpOwpAQCAtMzc3LDcgKzM3
Nyw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmUKICAgICBtX3Bh
aW50aW5nUmVzb3VyY2UgPSBudWxscHRyOwogfQogCi1ib29sIFNWR0lubGluZVRleHRCb3g6OnBy
ZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYgY29u
dGV4dCwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlKQorYm9vbCBTVkdJ
bmxpbmVUZXh0Qm94OjpwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBo
aWNzQ29udGV4dComIGNvbnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkKIHsKICAgICByZXR1cm4gYWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoY29udGV4
dCwgc2NhbGluZ0ZhY3RvciwgcGFyZW50KCktPnJlbmRlcmVyKCksIHN0eWxlKTsKIH0KQEAgLTM4
Nyw3ICszODcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJlc3RvcmVHcmFwaGljc0NvCiAg
ICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgLyogcGF0aCAqL251bGxwdHIpOwog
fQogCi1UZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdAorVGV4dFJ1
biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBBU1NF
UlQoc3R5bGUpOwogCkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludERlY29yYXRpb25XaQogICAgIEFTU0VSVCghbV9wYWludGluZ1Jlc291cmNlKTsKICAgICBB
U1NFUlQobV9wYWludGluZ1Jlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCi0g
ICAgUmVuZGVyU3R5bGUmIGRlY29yYXRpb25TdHlsZSA9IGRlY29yYXRpb25SZW5kZXJlci5zdHls
ZSgpOworICAgIGF1dG8mIGRlY29yYXRpb25TdHlsZSA9IGRlY29yYXRpb25SZW5kZXJlci5zdHls
ZSgpOwogCiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IDE7CiAgICAgRm9udENhc2NhZGUgc2Nh
bGVkRm9udDsKQEAgLTU0MCw3ICs1NDAsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50
RGVjb3JhdGlvbldpCiAgICAgICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHRQdHIs
ICZwYXRoKTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZG93
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1biYg
dGV4dFJ1biwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRp
b24sIGludCBlbmRQb3NpdGlvbikKK3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0
aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUsIFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGlu
dCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pCiB7CiAgICAgZmxvYXQgc2NhbGluZ0Zh
Y3RvciA9IHJlbmRlcmVyKCkuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2FsaW5nRmFj
dG9yKTsKQEAgLTU4NSw3ICs1ODUsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4
dFdpdGhTaGFkCiAgICAgfSB3aGlsZSAoc2hhZG93KTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5
bGUsIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBm
cmFnbWVudCwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQor
dm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25T
dHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgYm9vbCBoYXNTZWxlY3Rpb24s
IGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQogewogICAgIEFTU0VSVChzdHlsZSk7CiAgICAg
QVNTRVJUKHNlbGVjdGlvblN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiAyMDAwNDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpA
QCAtNjQsMjMgKzY0LDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXJ0c05ld1RleHRDaHVu
ayhib29sIG5ld1RleHRDaHVuaykgeyBtX3N0YXJ0c05ld1RleHRDaHVuayA9IG5ld1RleHRDaHVu
azsgfQogCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uSW5GcmFnbWVudChjb25zdCBTVkdUZXh0
RnJhZ21lbnQmLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3Q7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiwgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgaW50IGZyYWdtZW50RW5k
UG9zaXRpb24sIFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJl
Y3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IGZyYWdtZW50U3Rh
cnRQb3NpdGlvbiwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKikg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc1NWR0lubGluZVRleHRCb3goKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4o
UmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKKyAgICBUZXh0UnVu
IGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmKSBjb25zdDsKIAotICAgIGJvb2wgYWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3ND
b250ZXh0KiYsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlckJveE1vZGVsT2JqZWN0JiwgUmVu
ZGVyU3R5bGUqKTsKKyAgICBib29sIGFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29u
dGV4dComLCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJCb3hNb2RlbE9iamVjdCYsIGNvbnN0
IFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGlj
c0NvbnRleHQqJiwgY29uc3QgUGF0aCopOwogCi0gICAgYm9vbCBwcmVwYXJlR3JhcGhpY3NDb250
ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComLCBmbG9hdCBzY2FsaW5nRmFjdG9y
LCBSZW5kZXJTdHlsZSopOworICAgIGJvb2wgcHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQ
YWludGluZyhHcmFwaGljc0NvbnRleHQqJiwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgY29uc3QgUmVu
ZGVyU3R5bGUqKTsKICAgICB2b2lkIHJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWlu
dGluZyhHcmFwaGljc0NvbnRleHQqJik7CiAKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFw
aGljc0NvbnRleHQmLCBUZXh0RGVjb3JhdGlvbiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50Jik7CiAg
ICAgdm9pZCBwYWludERlY29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0JiwgVGV4dERl
Y29yYXRpb24sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIFJlbmRlckJveE1vZGVsT2JqZWN0JiBk
ZWNvcmF0aW9uUmVuZGVyZXIpOwotICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhp
Y3NDb250ZXh0JiwgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50
JiwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbik7Ci0gICAgdm9pZCBwYWludFRl
eHQoR3JhcGhpY3NDb250ZXh0JiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9u
U3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBh
aW50U2VsZWN0ZWRUZXh0T25seSk7CisgICAgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSosIFRleHRSdW4mLCBjb25zdCBTVkdUZXh0
RnJhZ21lbnQmLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKTsKKyAgICB2b2lk
IHBhaW50VGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJl
bmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgYm9vbCBo
YXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KTsKIAogICAgIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9t
LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHAJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUGF0aERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw3ICs0NSw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVBhdGhGcm9tQ2lyY2xlRWxlbWVudCgKICAg
ICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAg
ICAgZmxvYXQgciA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUuc3ZnU3R5bGUo
KS5yKCkpOwogICAgIGlmIChyID4gMCkgewogICAgICAgICBmbG9hdCBjeCA9IGxlbmd0aENvbnRl
eHQudmFsdWVGb3JMZW5ndGgoc3R5bGUuc3ZnU3R5bGUoKS5jeCgpLCBMZW5ndGhNb2RlV2lkdGgp
OwpAQCAtNTksNyArNTksNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVQYXRoRnJvbUVsbGlwc2VFbGVt
ZW50CiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJTdHlsZSYgc3R5
bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHls
ZSgpOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChlbGVtZW50KTsKICAgICBm
bG9hdCByeCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUuc3ZnU3R5bGUoKS5y
eCgpLCBMZW5ndGhNb2RlV2lkdGgpOwogICAgIGlmIChyeCA8PSAwKQpAQCAtMTIwLDcgKzEyMCw3
IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVBhdGhGcm9tUmVjdEVsZW1lbnQoU1YKICAgICBpZiAoIXJl
bmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5k
ZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAg
IFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChlbGVtZW50KTsKICAgICBmbG9hdCB3aWR0
aCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUud2lkdGgoKSwgTGVuZ3RoTW9k
ZVdpZHRoKTsKICAgICBpZiAod2lkdGggPD0gMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMjAw
MDQwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OnByZXBhcmVUb1JlbmRlCiAgICAgICAgIG1fcmVuZGVyaW5nRmxhZ3MgfD0gUmVzdG9y
ZUdyYXBoaWNzQ29udGV4dDsKICAgICB9CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBtX3Jl
bmRlcmVyLT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUoKTsK
IAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDIwMDA0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBUcmVlUmVzb2x2ZXI6OlBhcmVu
dDo6UGFyZW50KERvY3VtZW50JiBkCiB7CiB9CiAKLVRyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJl
bnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdlKQor
VHJlZVJlc29sdmVyOjpQYXJlbnQ6OlBhcmVudChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2UpCiAgICAgOiBlbGVtZW50KCZlbGVtZW50KQog
ICAgICwgc3R5bGUoc3R5bGUpCiAgICAgLCBjaGFuZ2UoY2hhbmdlKQpAQCAtMTE5LDcgKzExOSw3
IEBAIHZvaWQgVHJlZVJlc29sdmVyOjpwb3BTY29wZSgpCiAgICAgcmV0dXJuIG1fc2NvcGVTdGFj
ay5yZW1vdmVMYXN0KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gVHJlZVJl
c29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIGlu
aGVyaXRlZFN0eWxlKQorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBUcmVlUmVzb2x2ZXI6
OnN0eWxlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgaW5o
ZXJpdGVkU3R5bGUpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50LmhhdmVTdHlsZXNoZWV0c0xvYWRl
ZCgpICYmICFlbGVtZW50LnJlbmRlcmVyKCkpIHsKICAgICAgICAgbV9kb2N1bWVudC5zZXRIYXNO
b2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCk7CkBAIC0yODIsNyArMjgyLDcgQEAgcHJpdmF0ZToK
IH07CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCi12b2lkIFRyZWVSZXNvbHZlcjo6cHVzaFBh
cmVudChFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2Up
Cit2b2lkIFRyZWVSZXNvbHZlcjo6cHVzaFBhcmVudChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2UpCiB7CiAgICAgc2NvcGUoKS5zZWxlY3Rv
ckZpbHRlci5wdXNoUGFyZW50KCZlbGVtZW50KTsKIApAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQg
VHJlZVJlc29sdmVyOjpyZXNvbHZlQ29tcG9zZWRUcmVlKCkKIAogICAgICAgICBib29sIHNob3Vs
ZFJlc29sdmVGb3JQc2V1ZG9FbGVtZW50ID0gc2hvdWxkUmVzb2x2ZVBzZXVkb0VsZW1lbnQoZWxl
bWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCkpIHx8IHNob3VsZFJlc29sdmVQc2V1ZG9FbGVtZW50
KGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCkpOwogCi0gICAgICAgIFJlbmRlclN0eWxlKiBz
dHlsZTsKKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlOwogICAgICAgICBDaGFuZ2Ug
Y2hhbmdlOwogCiAgICAgICAgIGJvb2wgc2hvdWxkUmVzb2x2ZSA9IHBhcmVudC5jaGFuZ2UgPj0g
SW5oZXJpdCB8fCBlbGVtZW50Lm5lZWRzU3R5bGVSZWNhbGMoKSB8fCBzaG91bGRSZXNvbHZlRm9y
UHNldWRvRWxlbWVudCB8fCBhZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nIHx8IGVsZW1lbnQuaGFz
RGlzcGxheUNvbnRlbnRzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVS
ZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJl
c29sdmVyLmgJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
VHJlZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxVcGRhdGU+IHJlc29sdmUoQ2hhbmdlKTsKIAogcHJpdmF0ZToK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50
JiwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIGlu
aGVyaXRlZFN0eWxlKTsKIAogICAgIHZvaWQgcmVzb2x2ZUNvbXBvc2VkVHJlZSgpOwogICAgIEVs
ZW1lbnRVcGRhdGUgcmVzb2x2ZUVsZW1lbnQoRWxlbWVudCYpOwpAQCAtNzksMTMgKzc5LDEzIEBA
IHByaXZhdGU6CiAKICAgICBzdHJ1Y3QgUGFyZW50IHsKICAgICAgICAgRWxlbWVudCogZWxlbWVu
dDsKLSAgICAgICAgUmVuZGVyU3R5bGUmIHN0eWxlOworICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGU7CiAgICAgICAgIENoYW5nZSBjaGFuZ2U7CiAgICAgICAgIGJvb2wgZGlkUHVzaFNj
b3BlIHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBlbGVtZW50TmVlZGluZ1N0eWxlUmVjYWxjQWZm
ZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlIHsgZmFsc2UgfTsKIAogICAgICAgICBQYXJlbnQo
RG9jdW1lbnQmLCBDaGFuZ2UpOwotICAgICAgICBQYXJlbnQoRWxlbWVudCYsIFJlbmRlclN0eWxl
JiwgQ2hhbmdlKTsKKyAgICAgICAgUGFyZW50KEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYs
IENoYW5nZSk7CiAgICAgfTsKIAogICAgIFNjb3BlJiBzY29wZSgpIHsgcmV0dXJuIG1fc2NvcGVT
dGFjay5sYXN0KCk7IH0KQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHB1c2hF
bmNsb3NpbmdTY29wZSgpOwogICAgIHZvaWQgcG9wU2NvcGUoKTsKIAotICAgIHZvaWQgcHVzaFBh
cmVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUmLCBDaGFuZ2UpOworICAgIHZvaWQgcHVzaFBhcmVu
dChFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBDaGFuZ2UpOwogICAgIHZvaWQgcG9wUGFy
ZW50KCk7CiAgICAgdm9pZCBwb3BQYXJlbnRzVG9EZXB0aCh1bnNpZ25lZCBkZXB0aCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAJKHJldmlzaW9uIDIwMDA0MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjEsMTEgKzYxLDI0IEBAIGJvb2wgVXBkYXRlOjp0ZXh0VXBkYXRlKGNvbnN0IFRleHQmIHRleHQK
ICAgICByZXR1cm4gbV90ZXh0cy5jb250YWlucygmdGV4dCk7CiB9CiAKLVJlbmRlclN0eWxlKiBV
cGRhdGU6OmVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAorY29uc3Qg
UmVuZGVyU3R5bGUqIFVwZGF0ZTo6ZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
IGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIHVwZGF0ZSA9IGVsZW1lbnRVcGRhdGUoZWxlbWVudCkp
CiAgICAgICAgIHJldHVybiB1cGRhdGUtPnN0eWxlLmdldCgpOwotICAgIHJldHVybiBlbGVtZW50
LnJlbmRlclN0eWxlKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7
CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
ICZyZW5kZXJlci0+c3R5bGUoKTsKK30KKworUmVuZGVyU3R5bGUqIFVwZGF0ZTo6ZWxlbWVudFN0
eWxlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKGF1dG8qIHVwZGF0ZSA9IGVs
ZW1lbnRVcGRhdGUoZWxlbWVudCkpCisgICAgICAgIHJldHVybiB1cGRhdGUtPnN0eWxlLmdldCgp
OworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOworICAgIGlmICghcmVu
ZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiAmcmVuZGVyZXItPm11
dGFibGVTdHlsZSgpOwogfQogCiB2b2lkIFVwZGF0ZTo6YWRkRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50LCBFbGVtZW50KiBwYXJlbnQsIEVsZW1lbnRVcGRhdGUmJiBlbGVtZW50VXBkYXRlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5oCShyZXZpc2lvbiAyMDAwNDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2
Myw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdGV4dFVwZGF0ZShjb25zdCBUZXh0JikgY29uc3Q7
CiAKLSAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmKSBjb25zdDsK
KyAgICBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmKSBjb25z
dDsKKyAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmKTsKIAogICAg
IGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDQwKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDYs
NyArNzQ2LDcgQEAgdm9pZCBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YQogICAg
IGNvbnRleHRFbGVtZW50LT5zeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKCk7CiB9CiAKLU9wdGlv
bmFsPEVsZW1lbnRTdHlsZT4gU1ZHRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBT
VkdFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSopCiB7CiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgaW4g
YSA8dXNlPiB0cmVlIHdlIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgZGVmaW5pdGlvbiB0cmVlLgog
ICAgIGlmIChhdXRvKiBzdHlsZUVsZW1lbnQgPSB0aGlzLT5jb3JyZXNwb25kaW5nRWxlbWVudCgp
KQpAQCAtNzczLDEyICs3NzMsMTIgQEAgdm9pZCBTVkdFbGVtZW50OjpzZXRVc2VPdmVycmlkZUNv
bXB1dGVkUwogICAgICAgICBtX3N2Z1JhcmVEYXRhLT5zZXRVc2VPdmVycmlkZUNvbXB1dGVkU3R5
bGUodmFsdWUpOwogfQogCi1SZW5kZXJTdHlsZSogU1ZHRWxlbWVudDo6Y29tcHV0ZWRTdHlsZShQ
c2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQorY29uc3QgUmVuZGVyU3R5bGUqIFNWR0Vs
ZW1lbnQ6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKIHsK
ICAgICBpZiAoIW1fc3ZnUmFyZURhdGEgfHwgIW1fc3ZnUmFyZURhdGEtPnVzZU92ZXJyaWRlQ29t
cHV0ZWRTdHlsZSgpKQogICAgICAgICByZXR1cm4gRWxlbWVudDo6Y29tcHV0ZWRTdHlsZShwc2V1
ZG9FbGVtZW50U3BlY2lmaWVyKTsKIAotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51
bGxwdHI7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0cjsKICAg
ICBpZiAoRWxlbWVudCogcGFyZW50ID0gcGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpKSB7CiAg
ICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpKQogICAgICAgICAg
ICAgcGFyZW50U3R5bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50LmgJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzeW5jaHJvbml6ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBj
b25zdDsKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZUFsbEFuaW1hdGVkU1ZHQXR0cmlidXRl
KFNWR0VsZW1lbnQqKTsKICAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0
b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0
U3R5bGUpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3Rv
bVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUq
IHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6
ZVJlcXVpcmVkRmVhdHVyZXMoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQpOwogICAgIHN0YXRp
YyB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKFNWR0VsZW1lbnQqIGNvbnRleHRF
bGVtZW50KTsKQEAgLTE4MSw3ICsxODEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgY2xhc3MgSW5zdGFu
Y2VJbnZhbGlkYXRpb25HdWFyZDsKIAogcHJpdmF0ZToKLSAgICBSZW5kZXJTdHlsZSogY29tcHV0
ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKSBmaW5hbDsKKyAgICBjb25zdCBSZW5kZXJTdHls
ZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKSBmaW5hbDsKIAogICAgIHZpcnR1
YWwgYm9vbCBpc1N1cHBvcnRlZChTdHJpbmdJbXBsKiBmZWF0dXJlLCBTdHJpbmdJbXBsKiB2ZXJz
aW9uKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEu
aAkocmV2aXNpb24gMjAwMDQwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJl
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksMTAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gKm1fYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzOwogICAgIH0KIAotICAgIFJl
bmRlclN0eWxlKiBvdmVycmlkZUNvbXB1dGVkU3R5bGUoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKQorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBvdmVycmlkZUNvbXB1
dGVkU3R5bGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KQogICAgIHsKICAgICAgICAgaWYgKCFtX3VzZU92ZXJyaWRlQ29tcHV0ZWRTdHlsZSkKLSAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlm
ICghbV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgfHwgbV9uZWVkc092ZXJyaWRlQ29tcHV0ZWRTdHls
ZVVwZGF0ZSkgewogICAgICAgICAgICAgLy8gVGhlIHN0eWxlIGNvbXB1dGVkIGhlcmUgY29udGFp
bnMgbm8gQ1NTIEFuaW1hdGlvbnMvVHJhbnNpdGlvbnMgb3IgU01JTCBpbmR1Y2VkIHJ1bGVzIC0g
dGhpcyBpcyBuZWVkZWQgdG8gY29tcHV0ZSB0aGUgImJhc2UgdmFsdWUiIGZvciB0aGUgU01JTCBh
bmltYXRpb24gc2FuZHdoaWNoIG1vZGVsLgogICAgICAgICAgICAgbV9vdmVycmlkZUNvbXB1dGVk
U3R5bGUgPSBlbGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoZWxlbWVudCwg
cGFyZW50U3R5bGUsIE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKS5yZW5kZXJTdHlsZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MDAwNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHR3JhcGhpY3NF
bGVtZW50OjpnZXRTCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHR3JhcGhpY3NFbGVtZW50OjphbmltYXRl
ZExvY2FsVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4Owot
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUo
KSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRlcmVyKCkt
PnN0eWxlKCkgOiBudWxscHRyOwogCiAgICAgLy8gSWYgQ1NTIHByb3BlcnR5IHdhcyBzZXQsIHVz
ZSB0aGF0LCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gYXR0cmlidXRlIChpZiBzZXQpLgogICAgIGlm
IChzdHlsZSAmJiBzdHlsZS0+aGFzVHJhbnNmb3JtKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAJKHJldmlzaW9uIDIwMDA0MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcgKzIy
Miw3IEBAIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb20KICAgICByZXR1
cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGVGb3JMZW5n
dGhSZXNvbHZpbmcoY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCkKK3N0YXRpYyBpbmxpbmUgY29u
c3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKGNvbnN0IFNWR0Vs
ZW1lbnQqIGNvbnRleHQpCiB7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTIzNiwxMiArMjM2LDEyIEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIHJl
bmRlclN0eWxlRm8KIAogICAgIC8vIFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgYSBSZW5kZXJTVkdS
b290IHJlbmRlcmVyLCBjYXJyeWluZyBhIHN0eWxlLgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBmbG9hdCBTVkdMZW5n
dGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FTVMoZmxvYXQgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRl
clN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSBy
ZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUp
IHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0yNTgsNyArMjU4LDcgQEAgZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJv
bQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tRU1TVG9Vc2VyVW5p
dHMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7Cisg
ICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQp
OwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC0yNjksNyArMjY5LDcgQEAgZmxvYXQgU1ZHTGVuZ3RoQ29udGV4
dDo6Y29udmVydFZhbHVlRnJvbQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFs
dWVGcm9tVXNlclVuaXRzVG9FWFMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2
aW5nKG1fY29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJl
c29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1Rf
U1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yODgsNyArMjg4LDcgQEAgZmxv
YXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbQogCiBmbG9hdCBTVkdMZW5ndGhD
b250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tRVhTVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0
eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSByZW5k
ZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpIHsK
ICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA0MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDcgKzg4LDcgQEAgYm9vbCBTVkdTdG9wRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChjbwog
CiBDb2xvciBTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpIGNvbnN0
CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5z
dHlsZSgpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVy
ZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CiAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgZm9yIG51
bGwgc3R5bGUgZXhpc3RzIHRvIGFkZHJlc3MgQnVnIFdLIDkwODE0LCBhIHJhcmUgY3Jhc2ggY29u
ZGl0aW9uIGluCiAgICAgLy8gd2hpY2ggdGhlIHJlbmRlcmVyIG9yIHN0eWxlIGlzIG51bGwuIFRo
aXMgZW50aXJlIGNsYXNzIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbCAoQnVnIFdLIDg2OTQxKQog
ICAgIC8vIGFuZCB3ZSB3aWxsIHRvbGVyYXRlIHRoaXMgbnVsbCBjaGVjayB1bnRpbCB0aGVuLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw3ICs0NSw3IEBAIFJlZjxTVkdUZXh0RWxlbWVudD4gU1ZHVGV4dEVsZW1lbnQ6OmNy
ZWEKIEFmZmluZVRyYW5zZm9ybSBTVkdUZXh0RWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9y
bSgpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKLSAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwor
ICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVs
bHB0cjsKIAogICAgIC8vIGlmIENTUyBwcm9wZXJ0eSB3YXMgc2V0LCB1c2UgdGhhdCwgb3RoZXJ3
aXNlIGZhbGxiYWNrIHRvIGF0dHJpYnV0ZSAoaWYgc2V0KQogICAgIGlmIChzdHlsZSAmJiBzdHls
ZS0+aGFzVHJhbnNmb3JtKCkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277312</attachid>
            <date>2016-04-25 19:51:07 -0700</date>
            <delta_ts>2016-04-26 04:47:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>const-renderstyle-2.patch</filename>
            <type>text/plain</type>
            <size>155244</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNCw3
ICsxMTM0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU3R5bGVSYW5nZQogewog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVu
ZGVyZXIgPSByZW5kZXJlcjsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyZXItPnN0
eWxlKCk7CisgICAgYXV0byogc3R5bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CiAKICAgICAvLyB0
cmF2ZXJzZSBiYWNrd2FyZCBieSByZW5kZXJlciB0byBsb29rIGZvciBzdHlsZSBjaGFuZ2UKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogciA9IHJlbmRlcmVyLT5wcmV2aW91c0luUHJlT3JkZXIoKTsg
cjsgciA9IHItPnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMCw3ICs3MDAsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVl
TGlzdD4gY3JlYXRlUG9zaXRpb25MCiAgICAgcmV0dXJuIHBvc2l0aW9uTGlzdDsKIH0KIAotc3Rh
dGljIFJlZlB0cjxDU1NWYWx1ZT4gcG9zaXRpb25PZmZzZXRWYWx1ZShSZW5kZXJTdHlsZSYgc3R5
bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBv
c2l0aW9uT2Zmc2V0VmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQpCiB7CiAgICAgTGVuZ3RoIGxlbmd0aDsKICAgICBzd2l0Y2ggKHByb3BlcnR5
SUQpIHsKQEAgLTczNyw3ICs3MzcsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwb3NpdGlv
bk9mZnNldFZhCiAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRl
clN0eWxlKiBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAorUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjdXJyZW50Q29sb3JPclZhbGlkQ29s
b3IoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7
CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBsb29rIGF0IHZpc2l0ZWQgaW5mb3JtYXRp
b24sIHNvIHRoYXQgY29tcHV0ZWQgc3R5bGUgZG9lc24ndCBleHBvc2UgdGhhdC4KICAgICBpZiAo
IWNvbG9yLmlzVmFsaWQoKSkKQEAgLTExNDMsNyArMTE0Myw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFs
dWVMaXN0PiBnZXRUcmFuc2l0aW9uUHIKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
Ci1zdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xsU25hcERlc3RpbmF0aW9uKFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgTGVuZ3RoU2l6ZSYgZGVzdGluYXRpb24pCitzdGF0aWMgUmVmPENT
U1ZhbHVlTGlzdD4gc2Nyb2xsU25hcERlc3RpbmF0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgTGVuZ3RoU2l6ZSYgZGVzdGluYXRpb24pCiB7CiAgICAgYXV0byBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGxpc3QuZ2V0KCkuYXBwZW5k
KHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoZGVzdGluYXRpb24ud2lkdGgoKSwgc3R5
bGUpKTsKQEAgLTExNTEsNyArMTE1MSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBzY3Jv
bGxTbmFwRGVzdGkKICAgICByZXR1cm4gbGlzdDsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4g
c2Nyb2xsU25hcFBvaW50cyhSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFNjcm9sbFNuYXBQb2lu
dHMqIHBvaW50cykKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBQb2ludHMoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTY3JvbGxTbmFwUG9pbnRzKiBwb2ludHMpCiB7CiAg
ICAgaWYgKCFwb2ludHMpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwpAQCAtMTE2Niw3ICsxMTY2LDcg
QEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcFBvaW50cyhSZQogICAgIHJldHVybiBX
VEZNb3ZlKGxpc3QpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxTbmFwQ29vcmRp
bmF0ZXMoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBWZWN0b3I8TGVuZ3RoU2l6ZT4mIGNvb3Jk
aW5hdGVzKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcENvb3JkaW5hdGVzKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPExlbmd0aFNpemU+JiBjb29yZGluYXRl
cykKIHsKICAgICBpZiAoY29vcmRpbmF0ZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25l
KTsKQEAgLTE4MDcsNyArMTgwNyw3IEBAIHN0YXRpYyB2b2lkIGxvZ1VuaW1wbGVtZW50ZWRQcm9w
ZXJ0eUlEKEMKICAgICBMT0dfRVJST1IoIldlYktpdCBkb2VzIG5vdCB5ZXQgaW1wbGVtZW50IGdl
dENvbXB1dGVkU3R5bGUgZm9yICclcycuIiwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5SUQpKTsK
IH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9tU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9tU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVl
TGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc3R5bGUtPmZvbnRDYXNjYWRlKCkuZmFtaWx5Q291bnQoKTsgKytpKQpAQCAtMTgxNSw3ICsx
ODE1LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9tUwogICAgIHJl
dHVybiBsaXN0OwogfQogCi1zdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lSGVpZ2h0
RnJvbVN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFs
dWU+IGxpbmVIZWlnaHRGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAg
IExlbmd0aCBsZW5ndGggPSBzdHlsZS5saW5lSGVpZ2h0KCk7CiAgICAgaWYgKGxlbmd0aC5pc05l
Z2F0aXZlKCkpIC8vIElmIHRydWUsIGxpbmUtaGVpZ2h0IG5vdCBzZXQ7IHVzZSB0aGUgZm9udCdz
IGxpbmUgc3BhY2luZy4KQEAgLTE4MzAsMTkgKzE4MzAsMTkgQEAgc3RhdGljIFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbGluZUhlaWdodAogICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVl
KGZsb2F0VmFsdWVGb3JMZW5ndGgobGVuZ3RoLCAwKSwgc3R5bGUpOwogfQogCi1zdGF0aWMgUmVm
PENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U2l6ZUZyb21TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUp
CitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U2l6ZUZyb21TdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUo
c3R5bGUuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCksIHN0eWxlKTsKIH0KIAotc3Rh
dGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFN0eWxlRnJvbVN0eWxlKFJlbmRlclN0eWxl
KiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRTdHlsZUZyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKS5pdGFsaWMoKSkKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSXRhbGljKTsKICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3Jt
YWwpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudEZyb21TdHlsZShSZW5k
ZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudEZyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKS52YXJpYW50U2V0dGluZ3MoKS5pc0FsbE5vcm1hbCgpKQogICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b3JtYWwpOwpAQCAtMjAyOSw3ICsyMDI5LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZh
cmlhbnRGcm9tU3R5bAogICAgIHJldHVybiBXVEZNb3ZlKGxpc3QpOwogfQogCi1zdGF0aWMgUmVm
PENTU1ByaW1pdGl2ZVZhbHVlPiBmb250V2VpZ2h0RnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHls
ZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRXZWlnaHRGcm9tU3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHN3aXRjaCAoc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpLndlaWdodCgpKSB7CiAgICAgY2FzZSBGb250V2VpZ2h0MTAwOgpAQCAtMjA1NSw3ICsy
MDU1LDcgQEAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdodAogICAgIHJl
dHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vcm1hbCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRTeW50aGVzaXNGcm9t
U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFN5bnRo
ZXNpc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxl
LmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSA9PSBGb250U3ludGhlc2lzTm9uZSkK
ICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTm9uZSk7CkBAIC0yMDcyLDcgKzIwNzIsNyBAQCB0eXBlZGVmIGNvbnN0
IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqUmVuCiB0eXBlZGVmIExheW91dFVuaXQgKFJlbmRlckJv
eE1vZGVsT2JqZWN0OjoqUmVuZGVyQm94Q29tcHV0ZWRDU1NWYWx1ZUdldHRlcikoKSBjb25zdDsK
IAogdGVtcGxhdGU8UmVuZGVyU3R5bGVMZW5ndGhHZXR0ZXIgbGVuZ3RoR2V0dGVyLCBSZW5kZXJC
b3hDb21wdXRlZENTU1ZhbHVlR2V0dGVyIGNvbXB1dGVkQ1NTVmFsdWVHZXR0ZXI+Ci1pbmxpbmUg
UmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZhbHVlKFJl
bmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK2lubGluZSBSZWZQdHI8
Q1NTVmFsdWU+IHpvb21BZGp1c3RlZFBhZGRpbmdPck1hcmdpblBpeGVsVmFsdWUoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIExlbmd0aCB1
bnpvb216ZWRMZW5ndGggPSAoc3R5bGUuKmxlbmd0aEdldHRlcikoKTsKICAgICBpZiAoIWlzPFJl
bmRlckJveD4ocmVuZGVyZXIpIHx8IHVuem9vbXplZExlbmd0aC5pc0ZpeGVkKCkpCkBAIC0yMDgx
LDcgKzIwODEsNyBAQCBpbmxpbmUgUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRkCiB9
CiAKIHRlbXBsYXRlPFJlbmRlclN0eWxlTGVuZ3RoR2V0dGVyIGxlbmd0aEdldHRlcj4KLWlubGlu
ZSBib29sIHBhZGRpbmdPck1hcmdpbklzUmVuZGVyZXJEZXBlbmRlbnQoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoraW5saW5lIGJvb2wgcGFkZGluZ09yTWFyZ2lu
SXNSZW5kZXJlckRlcGVuZGVudChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzQm94KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxMzksNyArMjEzOSw3IEBAIHN0YXRpYyBDU1NW
YWx1ZUlEIGNvbnZlcnRUb1JlZ2lvbkJyZWFrKEIKIH0KICNlbmRpZgogICAgIAotc3RhdGljIGJv
b2wgaXNMYXlvdXREZXBlbmRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZW5kZXJTdHls
ZSogc3R5bGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMgYm9vbCBpc0xheW91dERl
cGVuZGVudChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsK
ICAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CkBAIC0yMjY3LDcgKzIyNjcsNyBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgdXBkYXRlU3R5bGVJZk5lZWRlZEZvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIGNvbXB1dGVSZW5kZXJTdHlsZUZvclByb3BlcnR5
KE5vZGUqIHN0eWxlZE5vZGUsIFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIsIENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgb3duZWRT
dHlsZSkKK3N0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVSZW5kZXJTdHls
ZUZvclByb3BlcnR5KE5vZGUqIHN0eWxlZE5vZGUsIFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVj
aWZpZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiYgb3duZWRTdHlsZSkKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc3R5bGVk
Tm9kZS0+cmVuZGVyZXIoKTsKIApAQCAtMjM3Myw3ICsyMzczLDcgQEAgUmVmUHRyPENTU1ZhbHVl
PiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gb3duZWRTdHlsZTsKLSAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSBudWxscHRyOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSA9IG51bGxw
dHI7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG51bGxwdHI7CiAgICAgYm9vbCBmb3Jj
ZUZ1bGxMYXlvdXQgPSBmYWxzZTsKICAgICBpZiAodXBkYXRlTGF5b3V0KSB7CkBAIC0zODYxLDcg
KzM4NjEsNyBAQCB1bnNpZ25lZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmxlCiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IG5vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKKyAgICBhdXRv
KiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsK
ICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzg4MCw3ICszODgwLDcg
QEAgU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6aXRlbQogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcik7CisgICAg
YXV0byogc3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmll
cik7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAg
CkBAIC0zODk5LDcgKzM4OTksNyBAQCBib29sIENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnByb3Bl
cnR5TWF0CiB7CiAgICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlGb250U2l6ZSAmJiBp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBtX25vZGUpIHsKICAgICAgICAgbV9ub2Rl
LT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAg
ICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9ub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNl
dWRvRWxlbWVudFNwZWNpZmllcikpIHsKKyAgICAgICAgaWYgKGF1dG8qIHN0eWxlID0gbV9ub2Rl
LT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcikpIHsKICAgICAgICAgICAg
IGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
LmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSAmJiBwcmltaXRpdmVWYWx1
ZS5nZXRWYWx1ZUlEKCkgPT0gc2l6ZUlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAyMDAwNjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBwcml2YXRlOgogICAgIE5vZGUqIHN0eWxl
ZE5vZGUoKSBjb25zdDsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3ZnUHJvcGVydHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0KSBjb25zdDsKLSAgICBSZWZQdHI8U1ZHUGFpbnQ+
IGFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFpbnQ+LCBSZW5k
ZXJTdHlsZSopIGNvbnN0OworICAgIFJlZlB0cjxTVkdQYWludD4gYWRqdXN0U1ZHUGFpbnRGb3JD
dXJyZW50Q29sb3IoUGFzc1JlZlB0cjxTVkdQYWludD4sIGNvbnN0IFJlbmRlclN0eWxlKikgY29u
c3Q7CiAKICAgICBzdGF0aWMgUmVmPENTU1ZhbHVlPiB2YWx1ZUZvclNoYWRvdyhjb25zdCBTaGFk
b3dEYXRhKiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUmLCBBZGp1c3RQaXhlbFZh
bHVlc0ZvckNvbXB1dGVkU3R5bGUgPSBBZGp1c3RQaXhlbFZhbHVlcyk7Ci0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3IoUmVuZGVyU3R5bGUqLCBj
b25zdCBDb2xvciYpIGNvbnN0OworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3VycmVu
dENvbG9yT3JWYWxpZENvbG9yKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQ29sb3ImKSBjb25z
dDsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldENTU1Byb3BlcnR5VmFsdWVzRm9yU2hv
cnRoYW5kUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7CiAg
ICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZ2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3JTaWRlc1Nob3J0
aGFuZChjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgZmxvYXQgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YTo6em9vbSgpIAogZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6
OnZpZXdwb3J0V2lkdGhGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2Nv
bXB1dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7
CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3Bv
cnRVbml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtNTcsNyArNTcsNyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3Bv
CiBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRIZWlnaHRGYWN0b3Io
KSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRTaXplKQotICAg
ICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwogCiAgICAgaWYg
KCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjgsNyArNjgsNyBAQCBkb3Vi
bGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvCiBkb3VibGUgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YTo6dmlld3BvcnRNaW5GYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0
eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3
cG9ydFVuaXRzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+
c2V0SGFzVmlld3BvcnRVbml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtODAsNyArODAsNyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YTo6dmlld3BvCiBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRN
YXhGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRT
aXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7CisgICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwog
CiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlbmRlclZpZXc7CiAKIGNs
YXNzIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgewogcHVibGljOgotICAgIENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9v
dFN0eWxlLCBjb25zdCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBmbG9hdCB6b29tLCBib29sIGNv
bXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpCisgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YShj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGNv
bnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGZsb2F0IHpvb20sIGJvb2wgY29tcHV0aW5nRm9u
dFNpemUgPSBmYWxzZSkKICAgICAgICAgOiBtX3N0eWxlKHN0eWxlKQogICAgICAgICAsIG1fcm9v
dFN0eWxlKHJvb3RTdHlsZSkKICAgICAgICAgLCBtX3JlbmRlclZpZXcocmVuZGVyVmlldykKQEAg
LTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoem9vbSA+IDApOwogICAgIH0K
IAotICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25zdCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBi
b29sIGNvbXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpCisgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5
bGUsIGNvbnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGJvb2wgY29tcHV0aW5nRm9udFNpemUg
PSBmYWxzZSkKICAgICAgICAgOiBtX3N0eWxlKHN0eWxlKQogICAgICAgICAsIG1fcm9vdFN0eWxl
KHJvb3RTdHlsZSkKICAgICAgICAgLCBtX3JlbmRlclZpZXcocmVuZGVyVmlldykKQEAgLTY3LDcg
KzY3LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQogICAgIGNvbnN0IFJlbmRlclN0eWxlKiByb290
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RTdHlsZTsgfQogICAgIGZsb2F0IHpvb20oKSBj
b25zdDsKICAgICBib29sIGNvbXB1dGluZ0ZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb21w
dXRpbmdGb250U2l6ZTsgfQpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBt
X3N0eWxlOwogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RTdHlsZTsKICAgICBjb25zdCBS
ZW5kZXJWaWV3KiBtX3JlbmRlclZpZXc7CiAgICAgZmxvYXQgbV96b29tOwpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3
IEBAIFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpzdHlsZSgpIGNvbnMKICAgICByZXR1cm4g
bV9yZXNvbHZlci0+c3R5bGUoKTsKIH0KIAotUmVuZGVyU3R5bGUqIENTU1RvU3R5bGVNYXA6OnJv
b3RFbGVtZW50U3R5bGUoKSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIENTU1RvU3R5bGVNYXA6
OnJvb3RFbGVtZW50U3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3Jlc29sdmVyLT5yb290
RWxlbWVudFN0eWxlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1h
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBzaW1pbGFyIHRv
IGhvdyBQYWludEluZm8vTGF5b3V0U3RhdGUgY2FjaGUgdmFsdWVzIG5lZWRlZCBmb3IKICAgICAv
LyB0aGUgY3VycmVudCBwYWludC9sYXlvdXQuCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29u
c3Q7Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdDsKKyAgICBjb25z
dCBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0OwogICAgIGJvb2wgdXNlU1ZH
Wm9vbVJ1bGVzKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcGFydCBv
ZiBzb21lIHNvcnQgb2YgU3R5bGVJbWFnZUNhY2hlIG9iamVjdCB3aGljaApJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSwxMCArODUsMTAgQEAgTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2
YWx1YXRvcgogewogfQogCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5RXZhbHVhdG9y
KGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiBmcmFtZSwgUmVuZGVyU3R5
bGUqIHN0eWxlKQorTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihjb25z
dCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkKICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVkTWVkaWFUeXBlKQogICAgICwg
bV9mcmFtZShmcmFtZSkKLSAgICAsIG1fc3R5bGUoV1RGTW92ZShzdHlsZSkpCisgICAgLCBtX3N0
eWxlKHN0eWxlKQogICAgICwgbV9leHBSZXN1bHQoZmFsc2UpIC8vIGRvZXNuJ3QgbWF0dGVyIHdo
ZW4gd2UgaGF2ZSBtX2ZyYW1lIGFuZCBtX3N0eWxlCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcg
KzgwLDcgQEAgcHVibGljOgogCiAgICAgLyoqIENyZWF0ZXMgZXZhbHVhdG9yIHdoaWNoIGV2YWx1
YXRlcyBmdWxsIG1lZGlhIHF1ZXJpZXMKICAgICAgKi8KLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9y
KGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiwgUmVuZGVyU3R5bGUqKTsK
KyAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUs
IEZyYW1lKiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKIAogICAgIH5NZWRpYVF1ZXJ5RXZhbHVhdG9y
KCk7CiAKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9t
ZWRpYVR5cGU7CiAgICAgRnJhbWUqIG1fZnJhbWUgeyBudWxscHRyIH07IC8vIG5vdCBvd25lZAot
ICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlIHsgbnVsbHB0ciB9OworICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBtX3N0eWxlIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9leHBSZXN1bHQ7CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NW
R0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcg
KzkzLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gc3Ryb2tlRGFzaEFycmF5VAogICAgIHJl
dHVybiBsaXN0OwogfQogCi1SZWZQdHI8U1ZHUGFpbnQ+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6
OmFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFpbnQ+IG5ld1Bh
aW50LCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitSZWZQdHI8U1ZHUGFpbnQ+IENvbXB1dGVk
U3R5bGVFeHRyYWN0b3I6OmFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8
U1ZHUGFpbnQ+IG5ld1BhaW50LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAg
ICAgUmVmUHRyPFNWR1BhaW50PiBwYWludCA9IG5ld1BhaW50OwogICAgIGlmIChwYWludC0+cGFp
bnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SIHx8IHBhaW50
LT5wYWludFR5cGUoKSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfQ1VSUkVOVENPTE9S
KQpAQCAtMTExLDcgKzExMSw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJh
Y3RvcjoKICAgICBpZiAodXBkYXRlTGF5b3V0KQogICAgICAgICBub2RlLT5kb2N1bWVudCgpLnVw
ZGF0ZUxheW91dCgpOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRT
dHlsZSgpOworICAgIGF1dG8qIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZSgpOwogICAgIGlm
ICghc3R5bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9Tb3VyY2VTaXplTGlzdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVuaXF1ZV9w
dHI8TWVkaWFRdWVyeUV4cD4mJiBleHByZXNzaW9uLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEZyYW1l
KiBmcmFtZSkKK3N0YXRpYyBib29sIG1hdGNoKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhw
PiYmIGV4cHJlc3Npb24sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRnJhbWUqIGZyYW1lKQog
ewogICAgIGlmIChleHByZXNzaW9uLT5tZWRpYUZlYXR1cmUoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNDcsMTIgKzQ3LDEyIEBAIHN0YXRpYyBib29sIG1hdGNoKHN0ZDo6
dW5pcXVlX3B0cjxNZWRpYVEKICAgICByZXR1cm4gbWVkaWFRdWVyeUV2YWx1YXRvci5ldmFsKG1l
ZGlhUXVlcnlTZXQuZ2V0KCkpOwogfQogCi1zdGF0aWMgZmxvYXQgZGVmYXVsdExlbmd0aChSZW5k
ZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCitzdGF0aWMgZmxvYXQgZGVmYXVsdExl
bmd0aChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCiB7CiAgICAg
cmV0dXJuIGNsYW1wVG88ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTm9uQ2FsY0xl
bmd0aERvdWJsZShDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0eWxlLCB2aWV3
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVywgMTAwLjApKTsKIH0KIAotc3RhdGljIGZsb2F0
IGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRl
clZpZXcqIHZpZXcpCitzdGF0aWMgZmxvYXQgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyVmlldyogdmlldykKIHsKICAgICBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0eWxlLCB2aWV3
KTsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewpAQCAtNzAsNyArNzAs
NyBAQCBmbG9hdCBwYXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcgc2l6CiB7CiAgICAgaWYg
KCF2aWV3KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSB2aWV3
LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gdmlldy0+c3R5bGUoKTsKICAgICBmb3IgKGF1
dG8mIHNvdXJjZVNpemUgOiBDU1NQYXJzZXIoQ1NTU3RyaWN0TW9kZSkucGFyc2VTaXplc0F0dHJp
YnV0ZShzaXplc0F0dHJpYnV0ZSkpIHsKICAgICAgICAgaWYgKG1hdGNoKFdURk1vdmUoc291cmNl
U2l6ZS5leHByZXNzaW9uKSwgc3R5bGUsIGZyYW1lKSkKICAgICAgICAgICAgIHJldHVybiBjb21w
dXRlTGVuZ3RoKHNvdXJjZVNpemUubGVuZ3RoLmdldCgpLCBzdHlsZSwgdmlldyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3NSw3ICs1NzUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0YXRp
YyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlKQorICAg
IHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHls
ZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2UoKTsKICAgICB9CkBAIC02NjQs
NyArNjY0LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaQogCiBp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENsaXAoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7CisgICAgYXV0byogcGFyZW50U3R5bGUgPSBzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7CiAgICAgaWYgKCFwYXJlbnRTdHlsZS0+aGFzQ2xpcCgp
KQogICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsQ2xpcChzdHlsZVJlc29sdmVyKTsKICAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENsaXAocGFyZW50U3R5bGUtPmNsaXBUb3AoKSwgcGFy
ZW50U3R5bGUtPmNsaXBSaWdodCgpLCBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgpLCBwYXJlbnRT
dHlsZS0+Y2xpcExlZnQoKSk7CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCB0ZW1wbGF0ZSA8U3R5bGVC
dWlsZGVyQ3VzdG9tOjpDb3VudGVyQmVoCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdENvdW50ZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKICAg
ICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmFjY2Vz
c0NvdW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IHN0eWxlUmVz
b2x2ZXIucGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkgeworICAgIGZv
ciAoYXV0byYga2V5VmFsdWUgOiBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oc3R5bGVSZXNvbHZl
ci5wYXJlbnRTdHlsZSgpKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkgewogICAgICAgICBD
b3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoa2V5VmFsdWUua2V5LCBDb3Vu
dGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChjb3VudGVyQmVo
YXZpb3IgPT0gUmVzZXQpCiAgICAgICAgICAgICBkaXJlY3RpdmVzLmluaGVyaXRSZXNldChrZXlW
YWx1ZS52YWx1ZSk7CkBAIC0xMzM3LDcgKzEzMzcsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsCiAgICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAg
ICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkt
PnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBj
b250ZW50VmFsdWUuZ2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKICAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdHlsZVJlc29sdmVyLmVsZW1lbnQoKS0+
Z2V0QXR0cmlidXRlKGF0dHIpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRT
ZXQpOwpAQCAtMTcwNiw3ICsxNzA2LDcgQEAgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVBbHQoUwogICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zdHlsZVR5cGUo
KSA9PSBOT1BTRVVETykKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VW5p
cXVlKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5
bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4o
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+c2V0VW5pcXVlKCk7CiAKICAgICAgICAgUXVh
bGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgp
LCBudWxsQXRvbSk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdHlsZVJl
c29sdmVyLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNyArMzM2LDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aQogICAgIG1fbWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwID0gMDsKIH0KIAotU3R5bGVSZXNv
bHZlcjo6U3RhdGU6OlN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGRvY3VtZW50RWxlbWVudFN0eWxlLCBjb25zdCBSZW5k
ZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3Rv
ckZpbHRlcikKK1N0eWxlUmVzb2x2ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBk
b2N1bWVudEVsZW1lbnRTdHlsZSwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5n
LCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCiAgICAgOiBtX2VsZW1lbnQo
JmVsZW1lbnQpCiAgICAgLCBtX3BhcmVudFN0eWxlKHBhcmVudFN0eWxlKQogICAgICwgbV9yZWdp
b25Gb3JTdHlsaW5nKHJlZ2lvbkZvclN0eWxpbmcpCkBAIC0zODAsNyArMzgwLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShjbwogICAgIHJldHVybiBwYXJlbnROb2Rl
ICYmIHBhcmVudE5vZGUtPmlzU2hhZG93Um9vdCgpOwogfQogCi1FbGVtZW50U3R5bGUgU3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwg
Y29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRl
ciogc2VsZWN0b3JGaWx0ZXIpCitFbGVtZW50U3R5bGUgU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JF
bGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwgY29uc3QgUmVuZGVy
UmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JG
aWx0ZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5Mb2FkUGVuZGluZ0ltYWdlcyk7CiAK
QEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9y
QW5pCiAgICAgfQogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2
ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBQ
c2V1ZG9TdHlsZVJlcXVlc3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgUmVuZGVyU3R5bGUmIHBhcmVu
dFN0eWxlKQorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1
ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUHNldWRvU3R5
bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRT
dHlsZSkKIHsKICAgICBtX3N0YXRlID0gU3RhdGUoZWxlbWVudCwgJnBhcmVudFN0eWxlKTsKIApA
QCAtMTYzMSw3ICsxNjMxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1BybwogICAgIH0KIAogICAgIGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBhcmVudFN0eWxlKCkt
Pmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3BlcnR5Ojppc0lu
aGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgc3RhdGUucGFyZW50U3R5bGUoKS0+c2V0SGFz
RXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJTdHlsZSo+KHN0YXRlLnBhcmVudFN0eWxlKCkpLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVk
UHJvcGVydGllcygpOwogICAgIAogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgewog
ICAgICAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBjdXN0b21Qcm9wZXJ0eSA9ICZkb3duY2Fz
dDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqdmFsdWVUb0FwcGx5KTsKQEAgLTE3MzQsNyArMTcz
NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanUKIH0KICNlbmRp
ZgogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSog
c3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hl
Y2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKQogewogICAgIGlmICghcGFyZW50U3R5bGUpCiAgICAgICAgIHJldHVybjsKQEAg
LTE3NDgsNyArMTc0OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdl
KFIKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRl
clN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQordm9pZCBTdHlsZVJlc29s
dmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgY29uc3QgYXV0byYgY2hpbGRGb250
ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSwxOCArMTQxLDE4IEBAIHB1YmxpYzoKICAg
ICBTdHlsZVJlc29sdmVyKERvY3VtZW50Jik7CiAgICAgflN0eWxlUmVzb2x2ZXIoKTsKIAotICAg
IEVsZW1lbnRTdHlsZSBzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBjb25z
dCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25zdCBTZWxlY3Rv
ckZpbHRlciogPSBudWxscHRyKTsKKyAgICBFbGVtZW50U3R5bGUgc3R5bGVGb3JFbGVtZW50KGNv
bnN0IEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJ1bGVNYXRjaGlu
Z0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JT
dHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CiAKICAg
ICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKGNvbnN0IEVsZW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIGNvbnN0IFBzZXVk
b1N0eWxlUmVxdWVzdCYsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYs
IGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHls
ZSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUGFnZShpbnQg
cGFnZUluZGV4KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRlZmF1bHRTdHls
ZUZvckVsZW1lbnQoKTsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuc3R5bGUoKTsgfQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGUoKTsgfQotICAgIFJlbmRlclN0eWxlKiByb290
RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCk7
IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdEVsZW1l
bnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpOyB9CiAg
ICAgY29uc3QgRWxlbWVudCogZWxlbWVudCgpIHsgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCgpOyB9
CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIFNl
dHRpbmdzKiBkb2N1bWVudFNldHRpbmdzKCkgeyByZXR1cm4gbV9kb2N1bWVudC5zZXR0aW5ncygp
OyB9CkBAIC0zMTcsOCArMzE3LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhh
dCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoCi0gICAg
dm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpOwotICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxl
KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yR2VuZXJpY0Zh
bWlseUNoYW5nZShSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7
CisgICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpOwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogICAg
IHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChSZW5kZXJTdHlsZSopOwogI2VuZGlmCkBAIC0z
NjEsNyArMzYxLDcgQEAgcHVibGljOgogICAgIGNsYXNzIFN0YXRlIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIFN0YXRlKCkgeyB9Ci0gICAgICAgIFN0YXRlKGNvbnN0IEVsZW1lbnQmLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHlsZSA9IG51
bGxwdHIsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IG51bGxwdHIsIGNv
bnN0IFNlbGVjdG9yRmlsdGVyKiA9IG51bGxwdHIpOworICAgICAgICBTdGF0ZShjb25zdCBFbGVt
ZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSog
ZG9jdW1lbnRFbGVtZW50U3R5bGUgPSBudWxscHRyLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lv
bkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25zdCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsK
IAogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBjbGVhcigpOwpAQCAtMzc0LDggKzM3NCw4IEBA
IHB1YmxpYzoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiB0YWtlU3R5bGUo
KSB7IHJldHVybiBXVEZNb3ZlKG1fc3R5bGUpOyB9CiAKICAgICAgICAgdm9pZCBzZXRQYXJlbnRT
dHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+KTsKLSAgICAgICAgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQotICAgICAgICBS
ZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1l
bnRTdHlsZTsgfQorICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBy
b290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9CiAK
ICAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWdpb25Gb3JTdHlsaW5nOyB9CiAgICAgICAgIEVJbnNpZGVMaW5rIGVsZW1lbnRM
aW5rU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRMaW5rU3RhdGU7IH0KQEAgLTQyNyw5
ICs0MjcsOSBAQCBwdWJsaWM6CiAKICAgICAgICAgY29uc3QgRWxlbWVudCogbV9lbGVtZW50IHsg
bnVsbHB0ciB9OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7
Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlIHsgbnVsbHB0ciB9OworICAgICAg
ICBjb25zdCBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsKICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX293bmVkUGFyZW50U3R5bGU7Ci0gICAgICAg
IFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07CisgICAgICAgIGNv
bnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07CiAKICAgICAg
ICAgY29uc3QgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmcgeyBudWxscHRyIH07CiAg
ICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDA4
LDcgKzIwMDgsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nCiAg
ICAgbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSBvbGRJZ25vcmU7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxlbWVudElnbm9yaW5nUGVu
ZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxlbWVu
dElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBBU1NFUlQoJmVsZW1lbnQuZG9jdW1lbnQoKSA9
PSB0aGlzKTsKIApAQCAtMjUxNSw3ICsyNTE1LDcgQEAgdm9pZCBEb2N1bWVudDo6c2V0VmlzdWFs
bHlPcmRlcmVkKCkKIHsKICAgICBtX3Zpc3VhbGx5T3JkZXJlZCA9IHRydWU7CiAgICAgaWYgKHJl
bmRlclZpZXcoKSkKLSAgICAgICAgcmVuZGVyVmlldygpLT5zdHlsZSgpLnNldFJUTE9yZGVyaW5n
KFZpc3VhbE9yZGVyKTsKKyAgICAgICAgcmVuZGVyVmlldygpLT5tdXRhYmxlU3R5bGUoKS5zZXRS
VExPcmRlcmluZyhWaXN1YWxPcmRlcik7CiB9CiAKIFJlZjxEb2N1bWVudFBhcnNlcj4gRG9jdW1l
bnQ6OmNyZWF0ZVBhcnNlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU3MSw3ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyhSdW5Qb3N0TGF5b3V0VGFza3Mg
PSBSdW5Qb3N0TGF5b3V0VGFza3M6OkFzeW5jaHJvbm91c2x5KTsKIAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5nU3R5bGVzaGVl
dHMoRWxlbWVudCYsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0
cyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiBwYWdlIGJveCAobWFyZ2luIGJveGVzIGFuZCBwYWdlIGJvcmRlcnMpIGlz
IHZpc2libGUuCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BhZ2VCb3hWaXNpYmxlKGludCBw
YWdlSW5kZXgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcw
LDcgKzEzNzAsNyBAQCBTdHlsZVJlc29sdmVyJiBFbGVtZW50OjpzdHlsZVJlc29sdmVyKCkKICAg
ICByZXR1cm4gZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CiB9CiAKLUVsZW1lbnRT
dHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorRWxl
bWVudFN0eWxlIEVsZW1lbnQ6OnJlc29sdmVTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpCiB7CiAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKnRo
aXMsIHBhcmVudFN0eWxlKTsKIH0KQEAgLTE3NTgsNyArMTc1OCw3IEBAIGJvb2wgRWxlbWVudDo6
Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSAKIHN0YXRpYyB2b2lkIGNoZWNrRm9yRW1wdHlTdHls
ZUNoYW5nZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LnN0eWxlQWZmZWN0
ZWRCeUVtcHR5KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC5yZW5k
ZXJTdHlsZSgpOworICAgICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVyU3R5bGUoKTsK
ICAgICAgICAgaWYgKCFzdHlsZSB8fCAoIXN0eWxlLT5lbXB0eVN0YXRlKCkgfHwgZWxlbWVudC5o
YXNDaGlsZE5vZGVzKCkpKQogICAgICAgICAgICAgZWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxj
KCk7CiAgICAgfQpAQCAtMTc4NCwxNCArMTc4NCwxNCBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNp
YmxpbmdTdHlsZUNoYW5nZXMoCiAKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaW5zZXJ0L2FwcGVu
ZCBjYXNlLgogICAgICAgICBpZiAobmV3Rmlyc3RFbGVtZW50ICE9IGVsZW1lbnRBZnRlckNoYW5n
ZSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudEFmdGVyQ2hhbmdl
LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0byogc3R5bGUgPSBlbGVtZW50QWZ0ZXJD
aGFuZ2UtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5m
aXJzdENoaWxkU3RhdGUoKSkKICAgICAgICAgICAgICAgICBlbGVtZW50QWZ0ZXJDaGFuZ2UtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdlIGFsc28gaGF2
ZSB0byBoYW5kbGUgbm9kZSByZW1vdmFsLgogICAgICAgICBpZiAoY2hlY2tUeXBlID09IFNpYmxp
bmdFbGVtZW50UmVtb3ZlZCAmJiBuZXdGaXJzdEVsZW1lbnQgPT0gZWxlbWVudEFmdGVyQ2hhbmdl
ICYmIG5ld0ZpcnN0RWxlbWVudCkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
bmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0byogc3R5bGUg
PSBuZXdGaXJzdEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxl
IHx8ICFzdHlsZS0+Zmlyc3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgbmV3Rmlyc3RF
bGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KQEAgLTE4MDQsNyArMTgw
NCw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygKICAgICAgICAg
RWxlbWVudCogbmV3TGFzdEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpsYXN0Q2hpbGQocGFy
ZW50KTsKIAogICAgICAgICBpZiAobmV3TGFzdEVsZW1lbnQgIT0gZWxlbWVudEJlZm9yZUNoYW5n
ZSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudEJlZm9yZUNoYW5n
ZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudEJlZm9y
ZUNoYW5nZS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUt
Pmxhc3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudEJlZm9yZUNoYW5nZS0+
c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0xODEyLDcgKzE4MTIsNyBAQCBz
dGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgIC8vIFdlIGFs
c28gaGF2ZSB0byBoYW5kbGUgbm9kZSByZW1vdmFsLiAgVGhlIHBhcnNlciBjYWxsYmFjayBjYXNl
IGlzIHNpbWlsYXIgdG8gbm9kZSByZW1vdmFsIGFzIHdlbGwgaW4gdGhhdCB3ZSBuZWVkIHRvIGNo
YW5nZSB0aGUgbGFzdCBjaGlsZAogICAgICAgICAvLyB0byBtYXRjaCBub3cuCiAgICAgICAgIGlm
ICgoY2hlY2tUeXBlID09IFNpYmxpbmdFbGVtZW50UmVtb3ZlZCB8fCBjaGVja1R5cGUgPT0gRmlu
aXNoZWRQYXJzaW5nQ2hpbGRyZW4pICYmIG5ld0xhc3RFbGVtZW50ID09IGVsZW1lbnRCZWZvcmVD
aGFuZ2UgJiYgbmV3TGFzdEVsZW1lbnQpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IG5ld0xhc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0byogc3R5
bGUgPSBuZXdMYXN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICghc3R5
bGUgfHwgIXN0eWxlLT5sYXN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAgIG5ld0xhc3RF
bGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KQEAgLTI0NjEsNyArMjQ2
MSw3IEBAIHN0YXRpYyBQc2V1ZG9FbGVtZW50KiBiZWZvcmVPckFmdGVyUHNldWQKICAgICB9CiB9
CiAKLVJlbmRlclN0eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3R5bGUoKQorY29uc3Qg
UmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmV4aXN0aW5nQ29tcHV0ZWRTdHlsZSgpCiB7CiAgICAgaWYg
KGF1dG8qIHJlbmRlclRyZWVTdHlsZSA9IHJlbmRlclN0eWxlKCkpCiAgICAgICAgIHJldHVybiBy
ZW5kZXJUcmVlU3R5bGU7CkBAIC0yNDcyLDEzICsyNDcyLDEzIEBAIFJlbmRlclN0eWxlKiBFbGVt
ZW50OjpleGlzdGluZ0NvbXB1dGVkU3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVuZGVy
U3R5bGUmIEVsZW1lbnQ6OnJlc29sdmVDb21wdXRlZFN0eWxlKCkKK2NvbnN0IFJlbmRlclN0eWxl
JiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSgpCiB7CiAgICAgQVNTRVJUKGluRG9jdW1l
bnQoKSk7CiAgICAgQVNTRVJUKCFleGlzdGluZ0NvbXB1dGVkU3R5bGUoKSk7CiAKICAgICBEZXF1
ZTxFbGVtZW50KiwgMzI+IGVsZW1lbnRzUmVxdWlyaW5nQ29tcHV0ZWRTdHlsZSh7IHRoaXMgfSk7
Ci0gICAgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUgPSBudWxscHRyOworICAgIGNvbnN0IFJl
bmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gbnVsbHB0cjsKIAogICAgIC8vIENvbGxlY3QgYW5j
ZXN0b3JzIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgaGFzIHN0eWxlLgogICAgIGF1dG8gY29tcG9z
ZWRBbmNlc3RvcnMgPSBjb21wb3NlZFRyZWVBbmNlc3RvcnMoKnRoaXMpOwpAQCAtMjUwMSw3ICsy
NTAxLDcgQEAgUmVuZGVyU3R5bGUmIEVsZW1lbnQ6OnJlc29sdmVDb21wdXRlZFN0eQogICAgIHJl
dHVybiAqY29tcHV0ZWRTdHlsZTsKIH0KIAotUmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmNvbXB1dGVk
U3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKK2NvbnN0IFJlbmRlclN0eWxl
KiBFbGVtZW50Ojpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIp
CiB7CiAgICAgaWYgKFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBiZWZvcmVPckFmdGVy
UHNldWRvRWxlbWVudCgqdGhpcywgcHNldWRvRWxlbWVudFNwZWNpZmllcikpCiAgICAgICAgIHJl
dHVybiBwc2V1ZG9FbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CkBAIC0zMjk1LDcgKzMyOTUsNyBA
QCB2b2lkIEVsZW1lbnQ6OmRpZERldGFjaFJlbmRlcmVycygpCiAgICAgQVNTRVJUKGhhc0N1c3Rv
bVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBF
bGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSopCitP
cHRpb25hbDxFbGVtZW50U3R5bGU+IEVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikKIHsKICAgICBBU1NFUlQoaGFzQ3VzdG9t
U3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpOwogICAgIHJldHVybiBOdWxsb3B0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0VGFiSW5kZXgoaW50KTsKICAgICB2aXJ0dWFsIEVsZW1lbnQqIGZvY3VzRGVsZWdhdGUo
KTsKIAotICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkID0gTk9QU0VVRE8p
IG92ZXJyaWRlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lk
ID0gTk9QU0VVRE8pIG92ZXJyaWRlOwogCiAgICAgYm9vbCBuZWVkc1N0eWxlSW52YWxpZGF0aW9u
KCkgY29uc3Q7CiAKQEAgLTQ4MCw3ICs0ODAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGRpZEF0dGFjaFJlbmRlcmVycygpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGV0YWNoUmVuZGVy
ZXJzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZERldGFjaFJlbmRlcmVycygpOwotICAgIHZpcnR1
YWwgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUm
IHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKTsKKyAgICB2aXJ0dWFs
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSk7CiAK
ICAgICBMYXlvdXRSZWN0IGFic29sdXRlRXZlbnRIYW5kbGVyQm91bmRzKGJvb2wmIGluY2x1ZGVz
Rml4ZWRQb3NpdGlvbkVsZW1lbnRzKSBvdmVycmlkZTsKIApAQCAtNDk5LDcgKzQ5OSw3IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcigpOwotICAg
IEVsZW1lbnRTdHlsZSByZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAg
ICBFbGVtZW50U3R5bGUgcmVzb2x2ZVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSk7CiAKICAgICBib29sIGhhc0Rpc3BsYXlDb250ZW50cygpIGNvbnN0OwogICAgIHZvaWQgc2V0
SGFzRGlzcGxheUNvbnRlbnRzKGJvb2wpOwpAQCAtNTkyLDggKzU5Miw4IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHJlbW92ZVNoYWRvd1Jvb3QoKTsKIAotICAgIFJlbmRlclN0eWxlKiBleGlzdGlu
Z0NvbXB1dGVkU3R5bGUoKTsKLSAgICBSZW5kZXJTdHlsZSYgcmVzb2x2ZUNvbXB1dGVkU3R5bGUo
KTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogZXhpc3RpbmdDb21wdXRlZFN0eWxlKCk7CisgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIHJlc29sdmVDb21wdXRlZFN0eWxlKCk7CiAKICAgICBib29sIHJh
cmVEYXRhU3R5bGVBZmZlY3RlZEJ5RW1wdHkoKSBjb25zdDsKICAgICBib29sIHJhcmVEYXRhQ2hp
bGRyZW5BZmZlY3RlZEJ5SG92ZXIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlz
aW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjU5LDcgKzY1OSw3IEBAIHN0YXRpYyBOb2RlOjpFZGl0YWJpbGl0eSBjb21wdXRlRWRp
dGFiaWwKICAgICAvLyB3b3VsZCBmaXJlIGluIHRoZSBtaWRkbGUgb2YgRG9jdW1lbnQ6OnNldEZv
Y3VzZWRFbGVtZW50KCkuCiAKICAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSAmc3RhcnROb2Rl
OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG5vZGUtPmlzRG9jdW1lbnROb2RlKCkgPyBub2RlLT5yZW5kZXJTdHlsZSgpIDog
Y29uc3RfY2FzdDxOb2RlKj4obm9kZSktPmNvbXB1dGVkU3R5bGUoKTsKKyAgICAgICAgYXV0byog
c3R5bGUgPSBub2RlLT5pc0RvY3VtZW50Tm9kZSgpID8gbm9kZS0+cmVuZGVyU3R5bGUoKSA6IGNv
bnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLT5jb21wdXRlZFN0eWxlKCk7CiAgICAgICAgIGlmICghc3R5
bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkg
PT0gTk9ORSkKQEAgLTEwMTAsNyArMTAxMCw3IEBAIE5vZGUqIE5vZGU6OnBzZXVkb0F3YXJlTGFz
dENoaWxkKCkgY29uc3QKICAgICByZXR1cm4gbGFzdENoaWxkKCk7CiB9CiAKLVJlbmRlclN0eWxl
KiBOb2RlOjpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpCitj
b25zdCBSZW5kZXJTdHlsZSogTm9kZTo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVt
ZW50U3BlY2lmaWVyKQogewogICAgIGF1dG8qIGNvbXBvc2VkUGFyZW50ID0gY29tcG9zZWRUcmVl
QW5jZXN0b3JzKCp0aGlzKS5maXJzdCgpOwogICAgIGlmICghY29tcG9zZWRQYXJlbnQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw5ICs0NDMsOSBAQCBwdWJsaWM6CiAgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2JqZWN0KCkgY29uc3Q7CiAgICAgCiAgICAg
Ly8gV3JhcHBlciBmb3Igbm9kZXMgdGhhdCBkb24ndCBoYXZlIGEgcmVuZGVyZXIsIGJ1dCBzdGls
bCBjYWNoZSB0aGUgc3R5bGUgKGxpa2UgSFRNTE9wdGlvbkVsZW1lbnQpLgotICAgIFJlbmRlclN0
eWxlKiByZW5kZXJTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJT
dHlsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQ
c2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyID0gTk9QU0VVRE8pOworICAgIHZpcnR1YWwg
Y29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNw
ZWNpZmllciA9IE5PUFNFVURPKTsKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAg
Ly8gTm90aWZpY2F0aW9uIG9mIGRvY3VtZW50IHN0cnVjdHVyZSBjaGFuZ2VzIChzZWUgQ29udGFp
bmVyTm9kZS5oIGZvciBtb3JlIG5vdGlmaWNhdGlvbiBtZXRob2RzKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGVSZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIFJlbmRlclN0eWxlKiBOb2RlOjpyZW5k
ZXJTdHlsZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIE5vZGU6OnJlbmRlclN0
eWxlKCkgY29uc3QKIHsKICAgICBhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIFBzZXVkb0VsZW1lbnQ6OmNs
ZWFySG9zdEVsZW1lbnQoKQogICAgIG1faG9zdEVsZW1lbnQgPSBudWxscHRyOwogfQogCi1PcHRp
b25hbDxFbGVtZW50U3R5bGU+IFBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShSZW5k
ZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVsZW1lbnRTdHls
ZT4gUHNldWRvRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIGF1dG8qIHN0eWxlID0gbV9o
b3N0RWxlbWVudC0+cmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUobV9wc2V1ZG9JZCwg
JnBhcmVudFN0eWxlKTsKICAgICBpZiAoIXN0eWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1BzZXVkb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRv
RWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRv
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICBF
bGVtZW50KiBob3N0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEVsZW1lbnQ7IH0KICAg
ICB2b2lkIGNsZWFySG9zdEVsZW1lbnQoKTsKIAotICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUq
IHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBy
ZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBS
ZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZEF0dGFj
aFJlbmRlcmVycygpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjYWxjU3R5bGUoU3R5bGU6OkNo
YW5nZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0
eWxlJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tF
bGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OSwxOCArMTc5LDE4IEBAIHN0YXRpYyBib29sIGlzTmV3TGluZUF0UG9zaXRpb24o
Y29uc3QgUG8KICAgICByZXR1cm4gdGV4dEF0UG9zaXRpb25bMF0gPT0gJ1xuJzsKIH0KIAotUmVu
ZGVyU3R5bGUqIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmVuZGVyU3R5bGVPZkVuY2xvc2lu
Z1RleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK2NvbnN0IFJlbmRlclN0eWxlKiBB
cHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgaWYgKHBvc2l0aW9uLmFuY2hvclR5cGUo
KSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yCiAgICAgICAgIHx8ICFwb3Np
dGlvbi5jb250YWluZXJOb2RlKCkKICAgICAgICAgfHwgIXBvc2l0aW9uLmNvbnRhaW5lck5vZGUo
KS0+aXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAogICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCktPnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgcmV0dXJuICZyZW5kZXJlci0+c3R5bGUoKTsKIH0KQEAgLTIwMSw3ICsy
MDEsNyBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQCiAgICAgZW5k
ID0gZW5kT2ZDdXJyZW50UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCk7CiAKICAgICBib29sIGlz
U3RhcnRBbmRFbmRPblNhbWVOb2RlID0gZmFsc2U7Ci0gICAgaWYgKFJlbmRlclN0eWxlKiBzdGFy
dFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHN0YXJ0KSkgeworICAgIGlm
IChhdXRvKiBzdGFydFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHN0YXJ0
KSkgewogICAgICAgICBpc1N0YXJ0QW5kRW5kT25TYW1lTm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNs
b3NpbmdUZXh0Tm9kZShlbmQpICYmIHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBlbmQuY29udGFp
bmVyTm9kZSgpOwogICAgICAgICBib29sIGlzU3RhcnRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNh
bWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKG1fZW5kT2ZMYXN0UGFyYWdy
YXBoKSAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gbV9lbmRPZkxhc3RQYXJhZ3JhcGguY29u
dGFpbmVyTm9kZSgpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVu
dENvbW1hbmQ6OnJhbmdlRm9yUAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFJlbmRlclN0
eWxlKiBlbmRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShlbmQpKSB7Cisg
ICAgaWYgKGF1dG8qIGVuZFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGVu
ZCkpIHsKICAgICAgICAgYm9vbCBpc0VuZEFuZEVuZE9mTGFzdFBhcmFncmFwaE9uU2FtZU5vZGUg
PSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUobV9lbmRPZkxhc3RQYXJhZ3JhcGgpICYm
IGVuZC5kZXByZWNhdGVkTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmRlcHJlY2F0ZWRO
b2RlKCk7CiAgICAgICAgIC8vIEluY2x1ZGUgXG4gYXQgdGhlIGVuZCBvZiBsaW5lIGlmIHdlJ3Jl
IGF0IGFuIGVtcHR5IHBhcmFncmFwaAogICAgICAgICBpZiAoZW5kU3R5bGUtPnByZXNlcnZlTmV3
bGluZSgpICYmIHN0YXJ0ID09IGVuZCAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPCBl
bmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgewpAQCAtMjU4LDcgKzI1
OCw3IEBAIFZpc2libGVQb3NpdGlvbiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQKIHsKICAgICBW
aXNpYmxlUG9zaXRpb24gZW5kT2ZOZXh0UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3JhcGgoZW5kT2ZD
dXJyZW50UGFyYWdyYXBoLm5leHQoKSk7CiAgICAgUG9zaXRpb24gcG9zaXRpb24gPSBlbmRPZk5l
eHRQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBy
ZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUocG9zaXRpb24pOworICAgIGF1dG8qIHN0eWxl
ID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHBvc2l0aW9uKTsKICAgICBpZiAoIXN0
eWxlKQogICAgICAgICByZXR1cm4gZW5kT2ZOZXh0UGFyYWdyYXBoOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmgJKHJldmlz
aW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICB2b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZm9y
bWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBjb25z
dCBQb3NpdGlvbiYgZW5kT2ZTZWxlY3Rpb24sIFJlZlB0cjxFbGVtZW50PiYpID0gMDsKLSAgICBS
ZW5kZXJTdHlsZSogcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGNvbnN0IFBvc2l0aW9u
Jik7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9k
ZShjb25zdCBQb3NpdGlvbiYpOwogICAgIHZvaWQgcmFuZ2VGb3JQYXJhZ3JhcGhTcGxpdHRpbmdU
ZXh0Tm9kZXNJZk5lZWRlZChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBQb3NpdGlvbiYsIFBvc2l0
aW9uJik7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mTmV4dFBhcmFncmFwaFNwbGl0dGluZ1Rl
eHROb2Rlc0lmTmVlZGVkKFZpc2libGVQb3NpdGlvbiYsIFBvc2l0aW9uJiwgUG9zaXRpb24mKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OmluaXQoTm9k
ZSogbm9kZSwgUHJvcAogICAgIH0KIAogICAgIGlmIChub2RlICYmIG5vZGUtPmNvbXB1dGVkU3R5
bGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBub2RlLT5jb21wdXRl
ZFN0eWxlKCk7CisgICAgICAgIGF1dG8qIHJlbmRlclN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHls
ZSgpOwogICAgICAgICByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKHJlbmRl
clN0eWxlKTsKICAgICAgICAgaWYgKHJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5rZXl3
b3JkU2l6ZSgpKQogICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5Rm9udFNpemUsIGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uLmdldEZvbnRTaXplQ1NTVmFs
dWVQcmVmZXJyaW5nS2V5d29yZCgpLT5jc3NUZXh0KCkpOwpAQCAtNDcxLDcgKzQ3MSw3IEBAIHZv
aWQgRWRpdGluZ1N0eWxlOjppbml0KE5vZGUqIG5vZGUsIFByb3AKICAgICBleHRyYWN0Rm9udFNp
emVEZWx0YSgpOwogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZpbGxBbmRTdHJv
a2VDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpCit2b2lkIEVkaXRpbmdT
dHlsZTo6cmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChjb25zdCBSZW5kZXJT
dHlsZSogcmVuZGVyU3R5bGUpCiB7CiAgICAgLy8gSWYgYSBub2RlJ3MgdGV4dCBmaWxsIGNvbG9y
IGlzIGludmFsaWQsIHRoZW4gaXRzIGNoaWxkcmVuIHVzZSAKICAgICAvLyB0aGVpciBmb250LWNv
bG9yIGFzIHRoZWlyIHRleHQgZmlsbCBjb2xvciAodGhleSBkb24ndApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4
LDcgQEAgcHJpdmF0ZToKICAgICBFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CiAgICAgRWRpdGluZ1N0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlSUQp
OwogICAgIHZvaWQgaW5pdChOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7Ci0gICAgdm9pZCBy
ZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKFJlbmRlclN0eWxlKik7CisgICAg
dm9pZCByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKGNvbnN0IFJlbmRlclN0
eWxlKik7CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKICAgICB2b2lkIGV4dHJhY3RGb250U2l6
ZURlbHRhKCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVHJpU3RhdGUgdHJpU3RhdGVPZlN0
eWxlKFQmIHN0eWxlVG9Db21wYXJlLCBTaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzAsOCAr
NDMwLDggQEAgcHVibGljOgogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB3ZWJDb250ZW50
RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxh
aW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoRnJhbWUqICwgTm9kZSAqJm5vZGVUb1JlbW92ZSk7Ci0gICAgdm9pZCBnZXRUZXh0RGVjb3Jh
dGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5bGUoUmVuZGVyU3R5bGUmLCBOU011dGFi
bGVEaWN0aW9uYXJ5KikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiAsIE5vZGUgKiZub2RlVG9S
ZW1vdmUpOworICAgIHZvaWQgZ2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5
cGluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgTlNNdXRhYmxlRGljdGlvbmFyeSopIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnQqIGZvbnRGb3JTZWxlY3Rpb24oYm9vbCYp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIE5TRGljdGlvbmFyeSAqZm9udEF0dHJpYnV0ZXNG
b3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBw
bHkoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzdGFy
dGluZ05vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdGFy
dGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgpOworICAgICAgICBhdXRvKiBz
dGFydGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICBpZiAo
IXN0YXJ0aW5nU3R5bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgTm9kZSogY3Vy
cmVudE5vZGUgPSBzdGFydGluZ05vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0VkaXRvckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRWRpdG9yQ29jb2EubW0JKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IFRoaXMgZmlndXJlcyBvdXQg
dGhlIGN1cnJlbnQgc3R5bGUgYnkgaW5zZXJ0aW5nIGEgPHNwYW4+IQotUmVuZGVyU3R5bGUqIEVk
aXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogZnJhbWUsIE5vZGUgKiZub2RlVG9S
ZW1vdmUpCitjb25zdCBSZW5kZXJTdHlsZSogRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KEZyYW1lKiBmcmFtZSwgTm9kZSAqJm5vZGVUb1JlbW92ZSkKIHsKICAgICBub2RlVG9SZW1vdmUg
PSBudWxscHRyOwogICAgIApAQCAtNzYsNyArNzYsNyBAQCBSZW5kZXJTdHlsZSogRWRpdG9yOjpz
dHlsZUZvclNlbGVjdGlvblN0CiAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+cmVuZGVyZXIoKSA/
ICZzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwogfQogCi12b2lk
IEVkaXRvcjo6Z2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxl
KFJlbmRlclN0eWxlJiBzdHlsZSwgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVzdWx0KSBjb25zdAor
dm9pZCBFZGl0b3I6OmdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3RpbmdUeXBpbmdT
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3Vs
dCkgY29uc3QKIHsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlw
aW5nU3R5bGUtPnN0eWxlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0Vk
aXRvcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0JKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0VkaXRvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIGNvbnN0IEZv
bnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib28KIAogICAgIGlmICghbV9mcmFtZS5zZWxl
Y3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBu
b2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHlsZSA9
IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMg
bm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgRm9udCogcmVzdWx0ID0gbnVsbHB0cjsKICAg
ICAgICAgaWYgKHN0eWxlKSB7CkBAIC0yMjAsNyArMjIwLDcgQEAgY29uc3QgRm9udCogRWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uKGJvbwogTlNEaWN0aW9uYXJ5KiBFZGl0b3I6OmZvbnRBdHRyaWJ1
dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewogICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsK
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1l
LCBub2RlVG9SZW1vdmUpOworICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFy
dCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1
cm4gbmlsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBjb25zdCBGb250KiBFZGl0b3I6
OmZvbnRGb3JTZWxlY3Rpb24oYm9vCiAKICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCkuaXNS
YW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3Zl
KTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNl
bGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92
ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIGlmIChz
dHlsZSkgewpAQCAtMTQ2LDcgKzE0Niw3IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNl
bGVjdGlvbihib28KIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclNlbGVj
dGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVt
b3ZlKTsKKyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUs
IG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIFN0cmluZyBIVE1MVGl0bGVFbGVtZW50Ojp0ZXh0
KCkgY29uc3QKIFN0cmluZ1dpdGhEaXJlY3Rpb24gSFRNTFRpdGxlRWxlbWVudDo6Y29tcHV0ZWRU
ZXh0V2l0aERpcmVjdGlvbigpCiB7CiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFI7
Ci0gICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29tcHV0ZWRTdHls
ZSgpKQorICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29tcHV0ZWRTdHlsZSgp
KQogICAgICAgICBkaXJlY3Rpb24gPSBjb21wdXRlZFN0eWxlLT5kaXJlY3Rpb24oKTsKICAgICBl
bHNlIHsKICAgICAgICAgYXV0byBzdHlsZSA9IHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1l
bnQoKnRoaXMsIHBhcmVudEVsZW1lbnQoKSA/IHBhcmVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUo
KSA6IG51bGxwdHIpLnJlbmRlclN0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eQogICAgIHVwZGF0ZShzZWxlY3Rvcik7CiB9CiAK
LWlubGluZSB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5Ojppbml0aWFs
aXplKEZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCitp
bmxpbmUgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eTo6aW5pdGlhbGl6
ZShGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxl
KQogewogICAgIC8vIEJld2FyZSEgbV9mb250LmZvbnRTZWxlY3RvcigpIG1pZ2h0IG5vdCBwb2lu
dCB0byBkb2N1bWVudC5mb250U2VsZWN0b3IoKSEKICAgICBBU1NFUlQobmV3U3R5bGUuZm9udENh
c2NhZGUoKS5mb250U2VsZWN0b3IoKSA9PSAmZm9udFNlbGVjdG9yKTsKQEAgLTIxOTYsNyArMjE5
Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKTsKICAgICBkb2N1bWVudC51cGRh
dGVTdHlsZUlmTmVlZGVkKCk7CiAKLSAgICBpZiAoUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUg
PSBjYW52YXMoKS0+Y29tcHV0ZWRTdHlsZSgpKQorICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxl
ID0gY2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgbmV3U3R5bGUtPnNldEZvbnRE
ZXNjcmlwdGlvbihjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVmYXVsdEZvbnREZXNjcmlwdGlvbjsK
QEAgLTIyNTksOSArMjI1OSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRU
ZXh0QmEKICAgICBtb2RpZmlhYmxlU3RhdGUoKS50ZXh0QmFzZWxpbmUgPSBiYXNlbGluZTsKIH0K
IAotaW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b1RleHRE
aXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxl
KSBjb25zdAoraW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0
b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKiBj
b21wdXRlZFN0eWxlKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IChjb21wdXRl
ZFN0eWxlIHx8IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OkluaGVyaXQpID8gY2FudmFzKCktPmNv
bXB1dGVkU3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSAoY29tcHV0ZWRTdHls
ZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJbmhlcml0KSA/IGNhbnZhcygpLT5jb21wdXRl
ZFN0eWxlKCkgOiBudWxscHRyOwogICAgIGlmIChjb21wdXRlZFN0eWxlKQogICAgICAgICAqY29t
cHV0ZWRTdHlsZSA9IHN0eWxlOwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CkBAIC0yMzg0LDcg
KzIzODQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAKICAg
ICAvLyBGSVhNRTogTmVlZCB0byB0dXJuIG9mZiBmb250IHNtb290aGluZy4KIAotICAgIFJlbmRl
clN0eWxlKiBjb21wdXRlZFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0
eWxlOwogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gdG9UZXh0RGlyZWN0aW9uKHN0YXRl
KCkuZGlyZWN0aW9uLCAmY29tcHV0ZWRTdHlsZSk7CiAgICAgYm9vbCBpc1JUTCA9IGRpcmVjdGlv
biA9PSBSVEw7CiAgICAgYm9vbCBvdmVycmlkZSA9IGNvbXB1dGVkU3R5bGUgPyBpc092ZXJyaWRl
KGNvbXB1dGVkU3R5bGUtPnVuaWNvZGVCaWRpKCkpIDogZmFsc2U7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUsNyBAQCBwcml2
YXRlOgogICAgICAgICBGb250UHJveHkmIG9wZXJhdG9yPShjb25zdCBGb250UHJveHkmKTsKIAog
ICAgICAgICBib29sIHJlYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmZvbnRTZWxlY3Rv
cigpOyB9Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZShGb250U2VsZWN0b3ImLCBSZW5kZXJTdHls
ZSYpOworICAgICAgICB2b2lkIGluaXRpYWxpemUoRm9udFNlbGVjdG9yJiwgY29uc3QgUmVuZGVy
U3R5bGUmKTsKICAgICAgICAgRm9udE1ldHJpY3MgZm9udE1ldHJpY3MoKSBjb25zdDsKICAgICAg
ICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgY29uc3Q7
CiAgICAgICAgIGZsb2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKQEAgLTM4Miw3ICsz
ODIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgYm9vbCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9Ci0gICAgVGV4dERpcmVjdGlv
biB0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uLCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5bGUg
PSBudWxscHRyKSBjb25zdDsKKyAgICBUZXh0RGlyZWN0aW9uIHRvVGV4dERpcmVjdGlvbihEaXJl
Y3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHIpIGNvbnN0
OwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBIVE1MUmVzb3Vy
Y2VQcmVsb2FkZXI6OnByZWxvYWQoUHJlbAogICAgICAgICBwcmVsb2FkKFdURk1vdmUocmVxdWVz
dCkpOwogfQogCi1zdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNoZXMoRnJhbWUqIGZyYW1l
LCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUp
CitzdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNoZXMoRnJhbWUqIGZyYW1lLCBjb25zdCBS
ZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUpCiB7
CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcyA9IE1lZGlhUXVlcnlTZXQ6
OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoYXR0cmlidXRlVmFsdWUpOwogICAgIE1l
ZGlhUXVlcnlFdmFsdWF0b3IgbWVkaWFRdWVyeUV2YWx1YXRvcigic2NyZWVuIiwgZnJhbWUsIHJl
bmRlclN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1i
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMs
MjEgKzgzLDIxIEBAIFJlbmRlclNsaWRlclRodW1iOjpSZW5kZXJTbGlkZXJUaHVtYihTbGkKIHsK
IH0KIAotdm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZShSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCit2b2lkIFJlbmRlclNsaWRlclRodW1iOjp1cGRhdGVBcHBlYXJhbmNl
KGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAocGFyZW50U3R5bGUt
PmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIHN0eWxlKCkuc2V0
QXBwZWFyYW5jZShTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7CisgICAgICAgIG11dGFibGVTdHls
ZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOwogICAgIGVsc2UgaWYg
KHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpCi0gICAg
ICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KTsKKyAg
ICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhvcml6b250YWxQ
YXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xp
ZGVyUGFydCkKLSAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhU2xpZGVyVGh1bWJQ
YXJ0KTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYVNsaWRlclRo
dW1iUGFydCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRp
YVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYVZv
bHVtZVNsaWRlclRodW1iUGFydCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFu
Y2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwogICAgIGVsc2UgaWYgKHBhcmVudFN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyUGFydCkKLSAgICAg
ICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclRodW1i
UGFydCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFGdWxsU2Ny
ZWVuVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKICAgICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNl
KCkpIHsKICAgICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgICAgIHRoZW1lKCkuYWRqdXN0
U2xpZGVyVGh1bWJTaXplKHN0eWxlKCksIGVsZW1lbnQoKSk7CisgICAgICAgIHRoZW1lKCkuYWRq
dXN0U2xpZGVyVGh1bWJTaXplKG11dGFibGVTdHlsZSgpLCBlbGVtZW50KCkpOwogICAgIH0KIH0K
IApAQCAtMTU5LDEzICsxNTksMTMgQEAgdm9pZCBSZW5kZXJTbGlkZXJDb250YWluZXI6OmxheW91
dCgpCiAgICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKICAgICBhdXRvJiBpbnB1
dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7
CiAgICAgYm9vbCBpc1ZlcnRpY2FsID0gaGFzVmVydGljYWxBcHBlYXJhbmNlKGlucHV0KTsKLSAg
ICBzdHlsZSgpLnNldEZsZXhEaXJlY3Rpb24oaXNWZXJ0aWNhbCA/IEZsb3dDb2x1bW4gOiBGbG93
Um93KTsKKyAgICBtdXRhYmxlU3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVydGljYWwgPyBG
bG93Q29sdW1uIDogRmxvd1Jvdyk7CiAgICAgVGV4dERpcmVjdGlvbiBvbGRUZXh0RGlyZWN0aW9u
ID0gc3R5bGUoKS5kaXJlY3Rpb24oKTsKICAgICBpZiAoaXNWZXJ0aWNhbCkgewogICAgICAgICAv
LyBGSVhNRTogV29yayBhcm91bmQgcm91bmRpbmcgaXNzdWVzIGluIFJUTCB2ZXJ0aWNhbCBzbGlk
ZXJzLiBXZSB3YW50IHRoZW0gdG8KICAgICAgICAgLy8gcmVuZGVyIGlkZW50aWNhbGx5IHRvIExU
UiB2ZXJ0aWNhbCBzbGlkZXJzLiBXZSBjYW4gcmVtb3ZlIHRoaXMgd29yayBhcm91bmQgd2hlbgog
ICAgICAgICAvLyBzdWJwaXhlbCByZW5kZXJpbmcgaXMgZW5hYmxlZCBvbiBhbGwgcG9ydHMuCi0g
ICAgICAgIHN0eWxlKCkuc2V0RGlyZWN0aW9uKExUUik7CisgICAgICAgIG11dGFibGVTdHlsZSgp
LnNldERpcmVjdGlvbihMVFIpOwogICAgIH0KIAogICAgIFJlbmRlckJveCogdGh1bWIgPSBpbnB1
dC5zbGlkZXJUaHVtYkVsZW1lbnQoKSA/IGlucHV0LnNsaWRlclRodW1iRWxlbWVudCgpLT5yZW5k
ZXJCb3goKSA6IG51bGxwdHI7CkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBSZW5kZXJTbGlkZXJD
b250YWluZXI6OmxheW91dCgpCiAKICAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7CiAK
LSAgICBzdHlsZSgpLnNldERpcmVjdGlvbihvbGRUZXh0RGlyZWN0aW9uKTsKKyAgICBtdXRhYmxl
U3R5bGUoKS5zZXREaXJlY3Rpb24ob2xkVGV4dERpcmVjdGlvbik7CiAgICAgLy8gVGhlc2Ugc2hv
dWxkIGFsd2F5cyBleGlzdCwgdW5sZXNzIHNvbWVvbmUgbXV0YXRlcyB0aGUgc2hhZG93IERPTSAo
ZS5nLiwgaW4gdGhlIGluc3BlY3RvcikuCiAgICAgaWYgKCF0aHVtYiB8fCAhdHJhY2spCiAgICAg
ICAgIHJldHVybjsKQEAgLTU3NCw3ICs1NzQsNyBAQCBIVE1MSW5wdXRFbGVtZW50KiBTbGlkZXJU
aHVtYkVsZW1lbnQ6OmhvCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHNo
YWRvd0hvc3QoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVyVGh1bWJFbGVt
ZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogaG9zdFN0
eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlkZXJUaHVtYkVsZW1lbnQ6OnJlc29sdmVD
dXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBob3N0U3R5
bGUpCiB7CiAgICAgLy8gVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNvbXB1dGUgc3R5bGUuIFRoaXMg
aXMganVzdCBhIGhhY2sgdG8gcGljayBzaGFkb3cgcHNldWRvIGlkIHdoZW4gaG9zdCBzdHlsZSBp
cyBrbm93bi4KIApAQCAtNjI4LDcgKzYyOCw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBT
bGlkZXJDb250YWluZXIKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2xpZGVyQ29u
dGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5
bGU+IFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHls
ZSYsIFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IFNsaWRl
ckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCiB7CiAgICAgLy8gVGhpcyBkb2Vzbid0IGFj
dHVhbGx5IGNvbXB1dGUgc3R5bGUuIFRoaXMgaXMganVzdCBhIGhhY2sgdG8gcGljayBzaGFkb3cg
cHNldWRvIGlkIHdoZW4gaG9zdCBzdHlsZSBpcyBrbm93bi4KIApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lk
IHdpbGxEZXRhY2hSZW5kZXJlcnMoKSBvdmVycmlkZTsKIAotICAgIE9wdGlvbmFsPEVsZW1lbnRT
dHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqKSBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikgb3ZlcnJpZGU7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBzdGFydERyYWdnaW5nKCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgaW5saW5lIFJlZjxTbGlkZXJU
aHVtYkVsZW1lbnQ+IFNsaWRlclRodQogY2xhc3MgUmVuZGVyU2xpZGVyVGh1bWIgZmluYWwgOiBw
dWJsaWMgUmVuZGVyQmxvY2tGbG93IHsKIHB1YmxpYzoKICAgICBSZW5kZXJTbGlkZXJUaHVtYihT
bGlkZXJUaHVtYkVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKLSAgICB2b2lkIHVwZGF0ZUFwcGVh
cmFuY2UoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZUFwcGVhcmFu
Y2UoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogcHJpdmF0ZToKICAgICBib29s
IGlzU2xpZGVyVGh1bWIoKSBjb25zdCBvdmVycmlkZTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIFNsaWRlckNvbnRhaW5lckVsZW1lbnQoRG9jdW1lbnQmKTsKICAg
ICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0
eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAgIE9wdGlvbmFs
PEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5
bGUqKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikgb3ZlcnJpZGU7CiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgQXRvbWljU3RyaW5nIG1fc2hhZG93UHNldWRvSWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgUmVm
PFRleHRDb250cm9sSW5uZXJFbGVtZW50PiBUZXh0Q29udHJvbAogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFRleHRDb250cm9sSW5uZXJFbGVtZW50KGRvY3VtZW50KSk7CiB9CiAKLU9wdGlvbmFs
PEVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHls
ZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCitPcHRpb25hbDxF
bGVtZW50U3R5bGU+IFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQog
ewogICAgIGF1dG8gaW5uZXJDb250YWluZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVQdHIo
KTsKICAgICBpbm5lckNvbnRhaW5lclN0eWxlLT5pbmhlcml0RnJvbShzaGFkb3dIb3N0U3R5bGUp
OwpAQCAtMTM0LDcgKzEzNCw3IEBAIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogVGV4dENv
bnRyb2wKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrPihI
VE1MRGl2RWxlbWVudDo6cmVuZGVyZXIoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5
bGUmLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxl
PiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCiB7CiAgICAg
YXV0byBzdHlsZSA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigqc2hhZG93
SG9zdCgpKS5jcmVhdGVJbm5lclRleHRTdHlsZSgqc2hhZG93SG9zdFN0eWxlKTsKICAgICByZXR1
cm4gRWxlbWVudFN0eWxlKHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU3R5bGU+KFdURk1vdmUoc3R5
bGUpKSk7CkBAIC0xNDksNyArMTQ5LDcgQEAgVGV4dENvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQ6
OlRleHRDb250cgogICAgIHNldEhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpOwogfQog
Ci1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50Ojpy
ZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSog
c2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBUZXh0Q29udHJvbFBsYWNl
aG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJl
bnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKIHsKICAgICBhdXRv
IHN0eWxlID0gcmVzb2x2ZVN0eWxlKCZwYXJlbnRTdHlsZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6
CiAKIHByb3RlY3RlZDoKICAgICBUZXh0Q29udHJvbElubmVyRWxlbWVudChEb2N1bWVudCYpOwot
ICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVy
U3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChEb2N1bWVudCYpOwogICAgIFJl
bmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUm
JiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RWxl
bWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBS
ZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVt
ZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOwogICAgIGJv
b2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgYm9vbCBpc1RleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIH07CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgVGV4dENvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQoRG9jdW1lbnQmKTsKICAgICAKLSAgICBP
cHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJp
ZGU7CiB9OwogCiBjbGFzcyBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50IGZpbmFsIDog
cHVibGljIEhUTUxEaXZFbGVtZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4MSw3ICsxMzgxLDcgQEAgT3B0aW9uYWxDdXJz
b3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzbwogICAgICAgICByZXR1cm4gTm9DdXJzb3JDaGFu
Z2U7CiAKICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSByZW5kZXJlciA/ICZyZW5kZXJlci0+c3R5bGUoKSA6IG51bGxwdHI7Cisg
ICAgYXV0byogc3R5bGUgPSByZW5kZXJlciA/ICZyZW5kZXJlci0+c3R5bGUoKSA6IG51bGxwdHI7
CiAgICAgYm9vbCBob3Jpem9udGFsVGV4dCA9ICFzdHlsZSB8fCBzdHlsZS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKTsKICAgICBjb25zdCBDdXJzb3ImIGlCZWFtID0gaG9yaXpvbnRhbFRleHQg
PyBpQmVhbUN1cnNvcigpIDogdmVydGljYWxUZXh0Q3Vyc29yKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTAgKzcwLDEwIEBAIHN0YXRpYyBpbmxpbmUgZG91Ymxl
IHNvbHZlU3RlcHNGdW5jdGlvbigKICAgICByZXR1cm4gZmxvb3IobnVtU3RlcHMgKiB0KSAvIG51
bVN0ZXBzOwogfQogCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKEFuaW1hdGlvbiYgYW5p
bWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21w
b3NpdGVBbmltYXRpb24pCitBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0IEFuaW1h
dGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgOiBtX29iamVjdChyZW5kZXJlcikKICAgICAs
IG1fY29tcG9zaXRlQW5pbWF0aW9uKGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAsIG1fYW5pbWF0
aW9uKGFuaW1hdGlvbikKKyAgICAsIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4o
YW5pbWF0aW9uKSkKIHsKICAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBkdXJhdGlvbgogICAgIGlm
IChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA+IDApCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgQW5pbWF0aW9uQmFzZSA6IHB1YmxpYyBSZWZD
b3VudGVkPAogICAgIGZyaWVuZCBjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbjsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBBbmltYXRpb25CYXNlKEFuaW1hdGlv
biYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCosIENvbXBvc2l0ZUFuaW1hdGlvbiopOworICAg
IEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBSZW5kZXJFbGVtZW50
KiwgQ29tcG9zaXRlQW5pbWF0aW9uKik7CiAgICAgdmlydHVhbCB+QW5pbWF0aW9uQmFzZSgpIHsg
fQogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX29iamVj
dDsgfQpAQCAtMTM4LDcgKzEzOCw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgcHJvZ3Jlc3MoZG91
YmxlIHNjYWxlID0gMSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiA9
IG51bGxwdHIpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBhbmltYXRpb24g
c3RhdGUgY2hhbmdlZC4KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRp
b24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIC8qY3VycmVudFN0eWxlKi8s
IFJlbmRlclN0eWxlKiAvKnRhcmdldFN0eWxlKi8sIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFuaW1hdGUoQ29t
cG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiAvKmN1
cnJlbnRTdHlsZSovLCBjb25zdCBSZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSovLCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIC8q
YW5pbWF0ZWRTdHlsZSovKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgY29tcHV0ZUV4dGVudE9m
VHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCA9IDA7CkBAIC0xNTAsNyArMTUw
LDcgQEAgcHVibGljOgogICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiYp
IGNvbnN0OwogCiAgICAgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2FuaW1hdGlvbjsgfQotICAgIHZvaWQgc2V0QW5pbWF0aW9uKEFuaW1hdGlvbiYgYW5pbWF0
aW9uKSB7IG1fYW5pbWF0aW9uID0gYW5pbWF0aW9uOyB9CisgICAgdm9pZCBzZXRBbmltYXRpb24o
Y29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgbV9hbmltYXRpb24gPSBjb25zdF9jYXN0PEFu
aW1hdGlvbiY+KGFuaW1hdGlvbik7IH0KIAogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoaXMgYW5p
bWF0aW9uIGlzIG92ZXJyaWRkZW4uIFRoaXMgd2lsbCBvbmx5IGJlIHRoZSBjYXNlIGZvcgogICAg
IC8vIEltcGxpY2l0QW5pbWF0aW9ucyBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBv
ciBub3Qgd2Ugc2hvdWxkIGZvcmNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5Myw5ICs1OTMsOSBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xs
ZXI6OmNhbmNlbEFuaW1hdGlvCiAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMo
U3ludGhldGljU3R5bGVDaGFuZ2UpOwogfQogCi1ib29sIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnVw
ZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlclN0eWxlJiBuZXdT
dHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKK2Jvb2wg
QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+JiBhbmltYXRlZFN0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IHJl
bmRlcmVyLmhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZyZW5kZXJlci5zdHlsZSgpIDogbnVsbHB0
cjsKKyAgICBhdXRvKiBvbGRTdHlsZSA9IHJlbmRlcmVyLmhhc0luaXRpYWxpemVkU3R5bGUoKSA/
ICZyZW5kZXJlci5zdHlsZSgpIDogbnVsbHB0cjsKICAgICBpZiAoKCFvbGRTdHlsZSB8fCAoIW9s
ZFN0eWxlLT5hbmltYXRpb25zKCkgJiYgIW9sZFN0eWxlLT50cmFuc2l0aW9ucygpKSkgJiYgKCFu
ZXdTdHlsZS5hbmltYXRpb25zKCkgJiYgIW5ld1N0eWxlLnRyYW5zaXRpb25zKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgfkFuaW1hdGlvbkNvbnRyb2xsZXIo
KTsKIAogICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50Jik7Ci0gICAgYm9v
bCB1cGRhdGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmLCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUs
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpOworICAgIGJvb2wg
dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0
eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihS
ZW5kZXJFbGVtZW50Jik7CiAKICAgICAvLyBJZiBwb3NzaWJsZSwgY29tcHV0ZSB0aGUgdmlzdWFs
IGV4dGVudCBvZiBhbnkgdHJhbnNmb3JtIGFuaW1hdGlvbiBvbiB0aGUgZ2l2ZW4gcmVuZGVyZXIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRl
QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyAr
NzcsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgfQog
fQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxl
bWVudCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0
YXJnZXRTdHlsZSkKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogewogICAgIC8vIElmIGN1cnJlbnRTdHls
ZSBpcyBudWxsIG9yIHRoZXJlIGFyZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25zLCBqdXN0IHNr
aXAgaXQKICAgICBpZiAoIWN1cnJlbnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLT50cmFuc2l0aW9u
cygpICYmIG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSkKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgIC8vIENoZWNrIHRvIHNlZSBp
ZiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYWN0aXZlIHRyYW5zaXRpb25zCiAgICAgaWYgKHRhcmdl
dFN0eWxlLT50cmFuc2l0aW9ucygpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBB
bmltYXRpb24mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpLT5hbmltYXRp
b24oaSk7CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+dHJhbnNp
dGlvbnMoKS0+YW5pbWF0aW9uKGkpOwogICAgICAgICAgICAgYm9vbCBpc0FjdGl2ZVRyYW5zaXRp
b24gPSAhbV9zdXNwZW5kZWQgJiYgKGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5k
ZWxheSgpID4gMCk7CiAKICAgICAgICAgICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9uTW9kZSBtb2Rl
ID0gYW5pbWF0aW9uLmFuaW1hdGlvbk1vZGUoKTsKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgICAgICAgICAgLy8gYW5k
IHdlIGhhdmUgdG8gdXNlIHRoZSB1bmFuaW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5pbWF0aW9uLiBX
ZSBkbyB0aGUgdGVzdAogICAgICAgICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHVuYW5pbWF0ZWQg
c3R5bGUgaGVyZSwgYnV0IHdlICJvdmVycmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0ZXIuCiAgICAg
ICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBnZXRB
bmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
ZnJvbVN0eWxlID0ga2V5ZnJhbWVBbmltID8ga2V5ZnJhbWVBbmltLT51bmFuaW1hdGVkU3R5bGUo
KSA6IGN1cnJlbnRTdHlsZTsKKyAgICAgICAgICAgICAgICBhdXRvKiBmcm9tU3R5bGUgPSBrZXlm
cmFtZUFuaW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHlsZSgpIDogY3VycmVudFN0eWxl
OwogCiAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEgY3VycmVudCB0cmFuc2l0
aW9uIGZvciB0aGlzIHByb3AKICAgICAgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogaW1w
bEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgIG1fdHJhbnNpdGlv
bnMucmVtb3ZlKHByb3BlcnR5VG9SZW1vdmUpOwogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBSZW5k
ZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCit2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQq
IHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSogdGFyZ2V0U3R5bGUpCiB7CiAgICAgLy8gTm90aGluZyB0byBkbyBpZiB3ZSBkb24ndCBo
YXZlIGFueSBhbmltYXRpb25zLCBhbmQgZGlkbid0IGhhdmUgYW55IGJlZm9yZQogICAgIGlmICht
X2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLT5oYXNBbmltYXRp
b25zKCkpCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0
ZUtleWZyYW1lQQogICAgIGlmICh0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpKSB7CiAgICAgICAg
IGludCBudW1BbmltcyA9IHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCktPnNpemUoKTsKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAgICAgICBBbmlt
YXRpb24mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCktPmFuaW1hdGlvbihp
KTsKKyAgICAgICAgICAgIGF1dG8mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT5hbmltYXRpb25z
KCktPmFuaW1hdGlvbihpKTsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBhbmltYXRpb25OYW1l
KGFuaW1hdGlvbi5uYW1lKCkpOwogCiAgICAgICAgICAgICBpZiAoIWFuaW1hdGlvbi5pc1ZhbGlk
QW5pbWF0aW9uKCkpCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246
OnVwZGF0ZUtleWZyYW1lQQogICAgIHN0ZDo6c3dhcChuZXdBbmltYXRpb25zLCBtX2tleWZyYW1l
QW5pbWF0aW9ucyk7CiB9CiAKLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHls
ZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5kZWRTdHls
ZSkKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYg
dGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5kZWRTdHlsZSkK
IHsKICAgICAvLyBXZSBkb24ndCBkbyBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9uJ3QgaGF2ZSBh
IGN1cnJlbnRTdHlsZSAob24gc3RhcnR1cCkuCiAgICAgdXBkYXRlVHJhbnNpdGlvbnMoJnJlbmRl
cmVyLCBjdXJyZW50U3R5bGUsICZ0YXJnZXRTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgY2xlYXJSZW5kZXJlcigpOwogCi0gICAgYm9vbCBhbmltYXRlKFJlbmRlckVsZW1lbnQmLCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5kZWRTdHlsZSk7CisgICAgYm9vbCBhbmltYXRl
KFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBS
ZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJs
ZW5kZWRTdHlsZSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBnZXRBbmltYXRl
ZFN0eWxlKCkgY29uc3Q7CiAgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRp
b24oTGF5b3V0UmVjdCYpIGNvbnN0OwogCkBAIC04OCw4ICs4OCw4IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJik7
CiAKLSAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVsZW1lbnQqLCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwotICAgIHZvaWQgdXBk
YXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqLCBSZW5kZXJTdHlsZSogY3VycmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIHZvaWQgdXBkYXRlVHJhbnNp
dGlvbnMoUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVLZXlmcmFtZUFu
aW1hdGlvbnMoUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CiAgICAgCiAgICAgdHlwZWRlZiBIYXNo
TWFwPGludCwgUmVmUHRyPEltcGxpY2l0QW5pbWF0aW9uPj4gQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFJlZlB0cjxLZXlm
cmFtZUFuaW1hdGlvbj4+IEFuaW1hdGlvbk5hbWVNYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oQW5pbWF0aW9uJiB0
cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJFbGVtZW50
KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSwgUmVuZGVyU3R5bGUqIGZy
b21TdHlsZSkKK0ltcGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmlt
YXRpb24mIHRyYW5zaXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltLCBjb25zdCBS
ZW5kZXJTdHlsZSogZnJvbVN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCBy
ZW5kZXJlciwgY29tcEFuaW0pCiAgICAgLCBtX2Zyb21TdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQ
dHIoKmZyb21TdHlsZSkpCiAgICAgLCBtX3RyYW5zaXRpb25Qcm9wZXJ0eSh0cmFuc2l0aW9uLnBy
b3BlcnR5KCkpCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgSW1wbGljaXRBbmltYXRpb246OnNob3Vs
ZFNlbmRFdmVudEYKICAgICByZXR1cm4gbV9vYmplY3QtPmRvY3VtZW50KCkuaGFzTGlzdGVuZXJU
eXBlKGluTGlzdGVuZXJUeXBlKTsKIH0KIAotYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0
ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUq
LCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4m
IGFuaW1hdGVkU3R5bGUpCitib29sIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0
ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJl
bmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5p
bWF0ZWRTdHlsZSkKIHsKICAgICAvLyBJZiB3ZSBnZXQgdGhpcyBmYXIgYW5kIHRoZSBhbmltYXRp
b24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFuaW5nIHVwIGEganVzdCBmaW5pc2hlZCBh
bmltYXRpb24uCiAgICAgLy8gU28ganVzdCByZXR1cm4uIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBh
bGwgY2xlYW5lZCB1cC4KQEAgLTIwNSw3ICsyMDUsNyBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9u
OjpzZW5kVHJhbnNpdGlvbkV2CiAgICAgcmV0dXJuIGZhbHNlOyAvLyBEaWRuJ3QgZGlzcGF0Y2gg
YW4gZXZlbnQKIH0KIAotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoUmVuZGVyU3R5bGUq
IHRvKQordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoY29uc3QgUmVuZGVyU3R5bGUqIHRv
KQogewogICAgIEFTU0VSVCh0byk7CiAgICAgQVNTRVJUKG1fZnJvbVN0eWxlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGlj
aXRBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBSZW5k
ZXJFbGVtZW50OwogLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFzcyBJbXBsaWNp
dEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1By
b3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21w
b3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyU3R5bGUqIGZyb21TdHls
ZSkKKyAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0
aW9uJiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwg
Y29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEltcGxpY2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5nUHJvcGVydHks
IHJlbmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24sIGZyb21TdHlsZSkpOwogICAgIH07CkBAIC01
NCw5ICs1NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1l
T2Zmc2V0KSBvdmVycmlkZTsKICAgICB2b2lkIGVuZEFuaW1hdGlvbigpIG92ZXJyaWRlOwogCi0g
ICAgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25z
dCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpIG92ZXJyaWRlOworICAg
IGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxl
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsK
ICAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0KFJlbmRlclN0
eWxlKiB0byk7CisgICAgdm9pZCByZXNldChjb25zdCBSZW5kZXJTdHlsZSogdG8pOwogCiAgICAg
Ym9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0
IG92ZXJyaWRlOwogCkBAIC04Nyw3ICs4Nyw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIEltcGxpY2l0QW5pbWF0aW9uKEFuaW1hdGlvbiYsIENTU1Byb3BlcnR5SUQsIFJl
bmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJTdHlsZSopOworICAgIElt
cGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIENTU1Byb3BlcnR5SUQsIFJlbmRlckVs
ZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZp
cnR1YWwgfkltcGxpY2l0QW5pbWF0aW9uKCk7CiAKICAgICAvLyBUaGUgdHdvIHN0eWxlcyB0aGF0
IHdlIGFyZSBibGVuZGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tl
eWZyYW1lQW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUtleWZyYW1l
QW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9u
LCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorS2V5ZnJhbWVBbmltYXRpb246OktleWZy
YW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCiAgICAgOiBBbmltYXRpb25CYXNlKGFuaW1hdGlv
biwgcmVuZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlvbikKICAgICAsIG1fa2V5ZnJhbWVzKGFuaW1h
dGlvbi5uYW1lKCkpCiAgICAgLCBtX3VuYW5pbWF0ZWRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQ
dHIoKnVuYW5pbWF0ZWRTdHlsZSkpCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6ZmV0Y2hJbnRlcnZhbEVuZAogICAgIHByb2cgPSBwcm9ncmVzcyhzY2FsZSwgb2Zm
c2V0LCBwcmV2S2V5ZnJhbWUudGltaW5nRnVuY3Rpb24obmFtZSgpKSk7CiB9CiAKLWJvb2wgS2V5
ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmlt
YXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiB0
YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkK
K2Jvb2wgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21w
b3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSkKIHsKICAgICAvLyBGaXJlIHRoZSBzdGFydCB0aW1lb3V0IGlmIG5lZWRl
ZAogICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAgY2xhc3MgUmVuZGVyU3R5bGU7
CiAvLyBBIEtleWZyYW1lQW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYW4gZXhwbGljaXQg
YW5pbWF0aW9uIGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgogY2xhc3MgS2V5ZnJhbWVBbmlt
YXRpb24gZmluYWwgOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxLZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlKEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5k
ZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRp
b24sIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCisgICAgc3RhdGljIFJlZjxLZXlmcmFt
ZUFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIHJlbmRlcmVyLCBjb21w
b3NpdGVBbmltYXRpb24sIHVuYW5pbWF0ZWRTdHlsZSkpOwogICAgIH0KIAotICAgIGJvb2wgYW5p
bWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5
bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKKyAgICBib29sIGFuaW1h
dGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxl
KiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBn
ZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mKSBvdmVycmlkZTsK
IAogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKQEAgLTg4LDcgKzg4LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAK
IHByaXZhdGU6Ci0gICAgS2V5ZnJhbWVBbmltYXRpb24oQW5pbWF0aW9uJiwgUmVuZGVyRWxlbWVu
dCosIENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpOwor
ICAgIEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIFJlbmRlckVsZW1lbnQqLCBD
b21wb3NpdGVBbmltYXRpb24qLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKTsK
ICAgICB2aXJ0dWFsIH5LZXlmcmFtZUFuaW1hdGlvbigpOwogICAgIAogICAgIC8vIEdldCB0aGUg
c3R5bGVzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgc3Vycm91bmRpbmcgdGhlIGN1cnJlbnQgYW5p
bWF0aW9uIHRpbWUgYW5kIHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0uCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgUmVuZGVyTmFtZWRGbG93
VGhyZWFkJiBGbG93VGhyZWFkQ29udHJvbAogCiB2b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjpz
dHlsZURpZENoYW5nZSgpCiB7Ci0gICAgUmVuZGVyU3R5bGUmIHZpZXdTdHlsZSA9IG1fdmlldy0+
c3R5bGUoKTsKKyAgICBhdXRvJiB2aWV3U3R5bGUgPSBtX3ZpZXctPnN0eWxlKCk7CiAgICAgZm9y
IChhdXRvJiBmbG93UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KQogICAg
ICAgICBmbG93UmVuZGVyZXItPnNldFN0eWxlKFJlbmRlckZsb3dUaHJlYWQ6OmNyZWF0ZUZsb3dU
aHJlYWRTdHlsZSgmdmlld1N0eWxlKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMjgsNyAr
MTMyOCw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29uc3RyYWluVG9MaW5lVG9wQW4KIHN0YXRp
YyBMYXlvdXRSZWN0IGNsaXBSZWN0Rm9yTmluZVBpZWNlSW1hZ2VTdHJpcChJbmxpbmVGbG93Qm94
KiBib3gsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSwgY29uc3QgTGF5b3V0UmVjdCYgcGFp
bnRSZWN0KQogewogICAgIExheW91dFJlY3QgY2xpcFJlY3QocGFpbnRSZWN0KTsKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBib3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHls
ZSA9IGJveC0+cmVuZGVyZXIoKS5zdHlsZSgpOwogICAgIExheW91dEJveEV4dGVudCBvdXRzZXRz
ID0gc3R5bGUuaW1hZ2VPdXRzZXRzKGltYWdlKTsKICAgICBpZiAoYm94LT5pc0hvcml6b250YWwo
KSkgewogICAgICAgICBjbGlwUmVjdC5zZXRZKHBhaW50UmVjdC55KCkgLSBvdXRzZXRzLnRvcCgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNp
b24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHN0YXRpYyBib29sIGJvcmRlck9yUGFk
ZGluZ0xvZ2ljYWxXaWR0aEMKIAogdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKLSAgICBS
ZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOworICAgIGF1dG8mIG5ld1N0eWxlID0gc3R5
bGUoKTsKIAogICAgIGJvb2wgaGFkVHJhbnNmb3JtID0gaGFzVHJhbnNmb3JtKCk7CiAgICAgYm9v
bCBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrSW52YWxpZGF0ZWQgPSBmYWxzZTsKQEAgLTI4Mzcs
NyArMjgzNyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQoYm9vbCAKICAg
ICAgICAgcmV0dXJuIFJlbmRlckJveDo6bGluZUhlaWdodChmaXJzdExpbmUsIGRpcmVjdGlvbiwg
bGluZVBvc2l0aW9uTW9kZSk7CiAKICAgICBpZiAoZmlyc3RMaW5lICYmIHZpZXcoKS51c2VzRmly
c3RMaW5lUnVsZXMoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSYgcyA9IGZpcnN0TGluZSA/IGZp
cnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOworICAgICAgICBhdXRvJiBzID0gZmlyc3RMaW5lID8g
Zmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7CiAgICAgICAgIGlmICgmcyAhPSAmc3R5bGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBzLmNvbXB1dGVkTGluZUhlaWdodCgpOwogICAgIH0KQEAgLTI5
NzYsOSArMjk3Niw5IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Zmlyc3RMaW5lQmxvY2sK
ICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2s7CiB9CiAKLXN0YXRpYyBSZW5kZXJTdHlsZSYgc3R5
bGVGb3JGaXJzdExldHRlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJP
YmplY3QqIGZpcnN0TGV0dGVyQ29udGFpbmVyKQorc3RhdGljIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZUZvckZpcnN0TGV0dGVyKFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRl
ck9iamVjdCogZmlyc3RMZXR0ZXJDb250YWluZXIpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIHBzZXVk
b1N0eWxlID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTEVU
VEVSLCAmZmlyc3RMZXR0ZXJDb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkpOworICAgIGF1dG8q
IHBzZXVkb1N0eWxlID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0
eWxlKEZJUlNUX0xFVFRFUiwgJmZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgp
KTsKICAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGFuIGluaXRpYWwgbGV0dGVyIGRyb3AgdGhhdCBp
cyA+PSAxLCB0aGVuIHdlIG5lZWQgdG8gZm9yY2UgZmxvYXRpbmcgdG8gYmUgb24uCiAgICAgaWYg
KHBzZXVkb1N0eWxlLT5pbml0aWFsTGV0dGVyRHJvcCgpID49IDEgJiYgIXBzZXVkb1N0eWxlLT5p
c0Zsb2F0aW5nKCkpCkBAIC0zMDYxLDcgKzMwNjEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRh
dGVGaXJzdExldHRlclN0eWxlCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXIgPSBj
dXJyZW50Q2hpbGQtPnBhcmVudCgpOwogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29u
dGFpbmVyID0gZmlyc3RMZXR0ZXItPnBhcmVudCgpOwotICAgIFJlbmRlclN0eWxlJiBwc2V1ZG9T
dHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJD
b250YWluZXIpOworICAgIGF1dG8mIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihm
aXJzdExldHRlckJsb2NrLCBmaXJzdExldHRlckNvbnRhaW5lcik7CiAgICAgQVNTRVJUKGZpcnN0
TGV0dGVyLT5pc0Zsb2F0aW5nKCkgfHwgZmlyc3RMZXR0ZXItPmlzSW5saW5lKCkpOwogCiAgICAg
aWYgKFN0eWxlOjpkZXRlcm1pbmVDaGFuZ2UoZmlyc3RMZXR0ZXItPnN0eWxlKCksIHBzZXVkb1N0
eWxlKSA9PSBTdHlsZTo6RGV0YWNoKSB7CkBAIC0zMTAyLDcgKzMxMDIsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjp1cGRhdGVGaXJzdExldHRlclN0eWxlCiB2b2lkIFJlbmRlckJsb2NrOjpjcmVhdGVG
aXJzdExldHRlclJlbmRlcmVyKFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRl
clRleHQqIGN1cnJlbnRUZXh0Q2hpbGQpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0
ZXJDb250YWluZXIgPSBjdXJyZW50VGV4dENoaWxkLT5wYXJlbnQoKTsKLSAgICBSZW5kZXJTdHls
ZSYgcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZp
cnN0TGV0dGVyQ29udGFpbmVyKTsKKyAgICBhdXRvJiBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmly
c3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwogICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBmaXJzdExldHRlciA9IG51bGxwdHI7CiAgICAgaWYgKHBzZXVk
b1N0eWxlLmRpc3BsYXkoKSA9PSBJTkxJTkUpCiAgICAgICAgIGZpcnN0TGV0dGVyID0gbmV3IFJl
bmRlcklubGluZShkb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocHNldWRvU3R5bGUpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEJsb2NrQwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBjYWxjdWxhdGVNaW5pbXVtUGFnZUhlaWdodChSZW5kZXJT
dHlsZSYgcmVuZGVyU3R5bGUsIFJvb3RJbmxpbmVCb3gmIGxhc3RMaW5lLCBMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBj
YWxjdWxhdGVNaW5pbXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJTdHlsZSYgcmVuZGVyU3R5bGUs
IFJvb3RJbmxpbmVCb3gmIGxhc3RMaW5lLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQg
bGluZUJvdHRvbSkKIHsKICAgICAvLyBXZSBtYXkgcmVxdWlyZSBhIGNlcnRhaW4gbWluaW11bSBu
dW1iZXIgb2YgbGluZXMgcGVyIHBhZ2UgaW4gb3JkZXIgdG8gc2F0aXNmeQogICAgIC8vIG9ycGhh
bnMgYW5kIHdpZG93cywgYW5kIHRoYXQgbWF5IGFmZmVjdCB0aGUgbWluaW11bSBwYWdlIGhlaWdo
dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmYKICAgICBpZiAoaXNEb2NFbGVtZW50UmVuZGVyZXIgfHwgaXNCb2R5UmVuZGVy
ZXIpIHsKICAgICAgICAgLy8gUHJvcGFnYXRlIHRoZSBuZXcgd3JpdGluZyBtb2RlIGFuZCBkaXJl
Y3Rpb24gdXAgdG8gdGhlIFJlbmRlclZpZXcuCiAgICAgICAgIGF1dG8qIGRvY3VtZW50RWxlbWVu
dFJlbmRlcmVyID0gZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKLSAg
ICAgICAgUmVuZGVyU3R5bGUmIHZpZXdTdHlsZSA9IHZpZXcoKS5zdHlsZSgpOworICAgICAgICBh
dXRvJiB2aWV3U3R5bGUgPSB2aWV3KCkubXV0YWJsZVN0eWxlKCk7CiAgICAgICAgIGJvb2wgdmll
d0NoYW5nZWRXcml0aW5nTW9kZSA9IGZhbHNlOwogICAgICAgICBib29sIHJvb3RTdHlsZUNoYW5n
ZWQgPSBmYWxzZTsKICAgICAgICAgYm9vbCB2aWV3U3R5bGVDaGFuZ2VkID0gZmFsc2U7CkBAIC0z
OTMsNyArMzkzLDcgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZgog
ICAgICAgICAgICAgdmlld1N0eWxlLnNldERpcmVjdGlvbihuZXdTdHlsZS5kaXJlY3Rpb24oKSk7
CiAgICAgICAgICAgICB2aWV3U3R5bGVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGlmIChp
c0JvZHlSZW5kZXJlcikgewotICAgICAgICAgICAgICAgIHJvb3RSZW5kZXJlci0+c3R5bGUoKS5z
ZXREaXJlY3Rpb24obmV3U3R5bGUuZGlyZWN0aW9uKCkpOworICAgICAgICAgICAgICAgIHJvb3RS
ZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0RGlyZWN0aW9uKG5ld1N0eWxlLmRpcmVjdGlvbigp
KTsKICAgICAgICAgICAgICAgICByb290U3R5bGVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwpAQCAt
NDA3LDcgKzQwNyw3IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYK
ICAgICAgICAgICAgIHZpZXcoKS5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0
KCk7CiAgICAgICAgICAgICBpZiAoaXNCb2R5UmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICBy
b290U3R5bGVDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPnN0
eWxlKCkuc2V0V3JpdGluZ01vZGUobmV3U3R5bGUud3JpdGluZ01vZGUoKSk7CisgICAgICAgICAg
ICAgICAgcm9vdFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRXcml0aW5nTW9kZShuZXdTdHls
ZS53cml0aW5nTW9kZSgpKTsKICAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPnNldEhvcml6
b250YWxXcml0aW5nTW9kZShuZXdTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOwpAQCAtNDMyLDggKzQzMiw4IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShT
dHlsZURpZmYKICAgICAgICAgICAgIC8vIFByb3BhZ2F0ZSB0aGUgYm9keSBmb250IGJhY2sgdXAg
dG8gdGhlIFJlbmRlclZpZXcgYW5kIHVzZSBpdCBhcwogICAgICAgICAgICAgLy8gdGhlIGJhc2lz
IG9mIHRoZSBncmlkLgogICAgICAgICAgICAgaWYgKG5ld1N0eWxlLmZvbnREZXNjcmlwdGlvbigp
ICE9IHZpZXcoKS5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAg
dmlldygpLnN0eWxlKCkuc2V0Rm9udERlc2NyaXB0aW9uKG5ld1N0eWxlLmZvbnREZXNjcmlwdGlv
bigpKTsKLSAgICAgICAgICAgICAgICB2aWV3KCkuc3R5bGUoKS5mb250Q2FzY2FkZSgpLnVwZGF0
ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICAgICAgdmlldygpLm11
dGFibGVTdHlsZSgpLnNldEZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5mb250RGVzY3JpcHRpb24o
KSk7CisgICAgICAgICAgICAgICAgdmlldygpLm11dGFibGVTdHlsZSgpLmZvbnRDYXNjYWRlKCku
dXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCkBAIC02ODAsNyArNjgwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnN0cmFp
bkNvbnRlbnRCbwogCiBSb3VuZGVkUmVjdDo6UmFkaWkgUmVuZGVyQm94Ojpib3JkZXJSYWRpaSgp
IGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKKyAgICBh
dXRvJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CiAgICAgTGF5b3V0UmVjdCBib3VuZHMgPSBmcmFt
ZVJlY3QoKTsKIAogICAgIHVuc2lnbmVkIGJvcmRlckxlZnQgPSBzdHlsZS5ib3JkZXJMZWZ0V2lk
dGgoKTsKQEAgLTQ4MTQsNyArNDgxNCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJCb3g6OmVuY2xv
c2luZ0Zsb2F0UGEKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJC
b3g6OmxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9naWNhbFZpc3VhbE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkg
Y29uc3QKIHsKICAgICBMYXlvdXRSZWN0IHJlY3QgPSB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9w
YWdhdGlvbihwYXJlbnRTdHlsZSk7CiAgICAgaWYgKCFwYXJlbnRTdHlsZS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkKQEAgLTQ4MjIsNyArNDgyMiw3IEBAIExheW91dFJlY3QgUmVuZGVyQm94
Ojpsb2dpY2FsVmlzdWFsT3ZlcmYKICAgICByZXR1cm4gcmVjdDsKIH0KIAotTGF5b3V0UmVjdCBS
ZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7
CiAgICAgLy8gSWYgdGhlIHdyaXRpbmcgbW9kZXMgb2YgdGhlIGNoaWxkIGFuZCBwYXJlbnQgbWF0
Y2gsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0byAKICAgICAvLyBkbyBhbnl0aGluZyBmYW5jeS4gSnVz
dCByZXR1cm4gdGhlIHJlc3VsdC4KQEAgLTQ4NDAsNyArNDg0MCw3IEBAIExheW91dFJlY3QgUmVu
ZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3QKICAgICByZXR1cm4gcmVjdDsKIH0KIAotTGF5b3V0
UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9n
aWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkgY29uc3QKIHsKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBsYXlvdXRPdmVyZmxv
d1JlY3RGb3JQcm9wYWdhdGlvbihwYXJlbnRTdHlsZSk7CiAgICAgaWYgKCFwYXJlbnRTdHlsZS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTQ4NDgsNyArNDg0OCw3IEBAIExheW91dFJl
Y3QgUmVuZGVyQm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmYKICAgICByZXR1cm4gcmVjdDsKIH0KIAot
TGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94OjpsYXlv
dXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUpIGNvbnN0CiB7CiAgICAgLy8gT25seSBwcm9wYWdhdGUgaW50ZXJpb3IgbGF5b3V0IG92ZXJm
bG93IGlmIHdlIGRvbid0IGNsaXAgaXQuCiAgICAgTGF5b3V0UmVjdCByZWN0ID0gYm9yZGVyQm94
UmVjdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NjMsMTAgKzU2MywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBhcHBseVRv
cExlZnRMb2NhdGlvbk9mZnNldFdpdGhGbGlwcGluZyhwb2ludCk7CiAgICAgfQogCi0gICAgTGF5
b3V0UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5
bGUqKSBjb25zdDsKLSAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0
aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTGF5b3V0UmVjdCBsb2dpY2FsTGF5b3V0T3Zl
cmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBMYXlvdXRS
ZWN0IGxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7
CisgICAgTGF5b3V0UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24o
Y29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93
UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0
UmVjdCBsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGxheW91dE92ZXJmbG93UmVjdEZvclByb3Bh
Z2F0aW9uKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CiAKICAgICBib29sIGhhc1JlbmRlck92
ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdzsgfSAgICAKICAgICBib29sIGhhc1Zp
c3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyAmJiAhYm9yZGVyQm94UmVj
dCgpLmNvbnRhaW5zKG1fb3ZlcmZsb3ctPnZpc3VhbE92ZXJmbG93UmVjdCgpKTsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsNyArNTgxLDcgQEAgUm91bmRl
ZFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmJhY2tncgogICAgIHJldHVybiBnZXRCYWNrZ3Jv
dW5kUm91bmRlZFJlY3QoYm9yZGVyUmVjdCwgYm94LCBib3hTaXplLndpZHRoKCksIGJveFNpemUu
aGVpZ2h0KCksIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdl
KTsKIH0KIAotc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIHZvaWQgYXBwbHlC
b3hTaGFkb3dGb3JCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGNvbnN0IFNoYWRvd0RhdGEqIGJveFNoYWRvdyA9IHN0
eWxlLT5ib3hTaGFkb3coKTsKICAgICB3aGlsZSAoYm94U2hhZG93LT5zdHlsZSgpICE9IE5vcm1h
bCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCShyZXZp
c2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6YWRk
Q2hpbGQoUmVuZGVyT2JqZWN0CiAgICAgICAgIC8vIENyZWF0ZSBhbiBhbm9ueW1vdXMgYmxvY2su
CiAgICAgICAgIEFTU0VSVCghZmlyc3RDaGlsZCgpKTsKICAgICAgICAgbV9pbm5lciA9IGNyZWF0
ZUFub255bW91c0Jsb2NrKHN0eWxlKCkuZGlzcGxheSgpKTsKLSAgICAgICAgc2V0dXBJbm5lclN0
eWxlKCZtX2lubmVyLT5zdHlsZSgpKTsKKyAgICAgICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVy
LT5tdXRhYmxlU3R5bGUoKSk7CiAgICAgICAgIFJlbmRlckZsZXhpYmxlQm94OjphZGRDaGlsZCht
X2lubmVyKTsKICAgICB9CiAgICAgCkBAIC05Nyw5ICs5Nyw5IEBAIHZvaWQgUmVuZGVyQnV0dG9u
OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGUKICAgICAgICAgLy8gaXQgcmlnaHQgYmVsb3cuIEhlcmUg
d2UgY2hhbmdlIGl0IGJhY2sgdG8gMCB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0
IGhpbnQKICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW5jZS4gU2FtZSBnb2VzIGZv
ciB0aGUgb3RoZXIgcHJvcGVydGllcy4KICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBoYWNr
IHVubmVjZXNzYXJ5LgotICAgICAgICBtX2lubmVyLT5zdHlsZSgpLnNldEZsZXhHcm93KG5ld1N0
eWxlLmluaXRpYWxGbGV4R3JvdygpKTsKLSAgICAgICAgbV9pbm5lci0+c3R5bGUoKS5zZXRNYXJn
aW5Ub3AobmV3U3R5bGUuaW5pdGlhbE1hcmdpbigpKTsKLSAgICAgICAgbV9pbm5lci0+c3R5bGUo
KS5zZXRNYXJnaW5Cb3R0b20obmV3U3R5bGUuaW5pdGlhbE1hcmdpbigpKTsKKyAgICAgICAgbV9p
bm5lci0+bXV0YWJsZVN0eWxlKCkuc2V0RmxleEdyb3cobmV3U3R5bGUuaW5pdGlhbEZsZXhHcm93
KCkpOworICAgICAgICBtX2lubmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5Ub3AobmV3U3R5
bGUuaW5pdGlhbE1hcmdpbigpKTsKKyAgICAgICAgbV9pbm5lci0+bXV0YWJsZVN0eWxlKCkuc2V0
TWFyZ2luQm90dG9tKG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7CiAgICAgfQogICAgIFJlbmRl
ckJsb2NrOjpzdHlsZVdpbGxDaGFuZ2UoZGlmZiwgbmV3U3R5bGUpOwogfQpAQCAtMTA5LDcgKzEw
OSw3IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjpzdHlsZURpZENoYW5nZShTdHlsZUQKICAgICBSZW5k
ZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogCiAgICAgaWYgKG1faW5u
ZXIpIC8vIFJlbmRlckJsb2NrIGhhbmRsZWQgdXBkYXRpbmcgdGhlIGFub255bW91cyBibG9jaydz
IHN0eWxlLgotICAgICAgICBzZXR1cElubmVyU3R5bGUoJm1faW5uZXItPnN0eWxlKCkpOworICAg
ICAgICBzZXR1cElubmVyU3R5bGUoJm1faW5uZXItPm11dGFibGVTdHlsZSgpKTsKIH0KIAogdm9p
ZCBSZW5kZXJCdXR0b246OnNldHVwSW5uZXJTdHlsZShSZW5kZXJTdHlsZSogaW5uZXJTdHlsZSkg
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxl
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVw
cmVjYXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9y
Q2hpbGQoCiAKIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpzdHlsZVdpbGxDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkKIHsK
LSAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmc3R5
bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxl
KCkgPyAmc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKG9sZFN0eWxlICYmICFvbGRTdHlsZS0+
bGluZUNsYW1wKCkuaXNOb25lKCkgJiYgbmV3U3R5bGUubGluZUNsYW1wKCkuaXNOb25lKCkpCiAg
ICAgICAgIGNsZWFyTGluZUNsYW1wKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDExICsy
MDUsNiBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gUmVuZGVyRWxlbWVudDo6CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLWVudW0gU3R5bGVDYWNoZVN0YXRlIHsKLSAgICBDYWNoZWQsCi0g
ICAgVW5jYWNoZWQKLX07Ci0KIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRWxl
bWVudDo6dW5jYWNoZWRGaXJzdExpbmVTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7
CiAgICAgaWYgKCF2aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpCkBAIC0yMjEsMTQgKzIxNiwx
NCBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVsZW1lCiAgICAgICAgIGlm
IChSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2sgPSByZW5kZXJlckZvckZpcnN0TGluZVN0eWxl
LmZpcnN0TGluZUJsb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2stPmdl
dFVuY2FjaGVkUHNldWRvU3R5bGUoUHNldWRvU3R5bGVSZXF1ZXN0KEZJUlNUX0xJTkUpLCBzdHls
ZSwgZmlyc3RMaW5lQmxvY2sgPT0gdGhpcyA/IHN0eWxlIDogbnVsbHB0cik7CiAgICAgfSBlbHNl
IGlmICghcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5pc0Fub255bW91cygpICYmIHJlbmRlcmVy
Rm9yRmlyc3RMaW5lU3R5bGUuaXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICBSZW5kZXJTdHls
ZSYgcGFyZW50U3R5bGUgPSByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5maXJz
dExpbmVTdHlsZSgpOworICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IHJlbmRlcmVyRm9yRmly
c3RMaW5lU3R5bGUucGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGlmICgmcGFy
ZW50U3R5bGUgIT0gJnJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCktPnN0eWxlKCkp
CiAgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5nZXRVbmNhY2hl
ZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChGSVJTVF9MSU5FX0lOSEVSSVRFRCksICZw
YXJlbnRTdHlsZSwgc3R5bGUpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVu
ZGVyU3R5bGUqIFJlbmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TGluZVN0eWxlKCkgY29uc3QKK2Nv
bnN0IFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKHZpZXcoKS51c2VzRmlyc3RMaW5lUnVsZXMoKSk7CiAKQEAgLTIz
OCwxMCArMjMzLDEwIEBAIFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdEwK
ICAgICAgICAgaWYgKFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jayA9IHJlbmRlcmVyRm9yRmly
c3RMaW5lU3R5bGUuZmlyc3RMaW5lQmxvY2soKSkKICAgICAgICAgICAgIHJldHVybiBmaXJzdExp
bmVCbG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTElORSwgJnN0eWxlKCkpOwogICAg
IH0gZWxzZSBpZiAoIXJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuaXNBbm9ueW1vdXMoKSAmJiBy
ZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgUmVu
ZGVyU3R5bGUmIHBhcmVudFN0eWxlID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQo
KS0+Zmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAgYXV0byYgcGFyZW50U3R5bGUgPSByZW5kZXJl
ckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBp
ZiAoJnBhcmVudFN0eWxlICE9ICZyZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5z
dHlsZSgpKSB7CiAgICAgICAgICAgICAvLyBBIGZpcnN0LWxpbmUgc3R5bGUgaXMgaW4gZWZmZWN0
LiBDYWNoZSBhIGZpcnN0LWxpbmUgc3R5bGUgZm9yIG91cnNlbHZlcy4KLSAgICAgICAgICAgIHJl
bmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuc3R5bGUoKS5zZXRIYXNQc2V1ZG9TdHlsZShGSVJTVF9M
SU5FX0lOSEVSSVRFRCk7CisgICAgICAgICAgICByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLm1f
c3R5bGUuc2V0SGFzUHNldWRvU3R5bGUoRklSU1RfTElORV9JTkhFUklURUQpOwogICAgICAgICAg
ICAgcmV0dXJuIHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuZ2V0Q2FjaGVkUHNldWRvU3R5bGUo
RklSU1RfTElORV9JTkhFUklURUQsICZwYXJlbnRTdHlsZSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0yNDksNyArMjQ0LDcgQEAgUmVuZGVyU3R5bGUqIFJlbmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0
TAogICAgIHJldHVybiAmc3R5bGUoKTsKIH0KIAotUmVuZGVyU3R5bGUmIFJlbmRlckVsZW1lbnQ6
OmZpcnN0TGluZVN0eWxlKCkgY29uc3QKK2NvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJFbGVtZW50
OjpmaXJzdExpbmVTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHZpZXcoKS51c2VzRmlyc3RM
aW5lUnVsZXMoKSA/ICpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsKIH0KQEAgLTgw
Niw3ICs4MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmVuZGVyZXJIYXNCYWNrZ3JvdW5kCiAK
IHZvaWQgUmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1
dG8qIG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRy
OwogICAgIGlmIChvbGRTdHlsZSkgewogICAgICAgICAvLyBJZiBvdXIgei1pbmRleCBjaGFuZ2Vz
IHZhbHVlIG9yIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8g
ZGlydHkgb3VyIHN0YWNraW5nIGNvbnRleHQncyB6LW9yZGVyIGxpc3QuCkBAIC0xNTM1LDcgKzE1
MzAsMjIgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjphZGRDb250cm9sU3RhdGVzRm9yUgogICAgIGNv
bnRyb2xTdGF0ZXNSZW5kZXJlck1hcCgpLmFkZChvLCBzdGF0ZXMpOwogfQogCi1SZW5kZXJTdHls
ZSogUmVuZGVyRWxlbWVudDo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0Citjb25zdCBSZW5kZXJTdHlsZSogUmVuZGVy
RWxlbWVudDo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBjb25zdCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0Cit7CisgICAgaWYgKHBzZXVkbyA8IEZJUlNUX0lO
VEVSTkFMX1BTRVVET0lEICYmICFzdHlsZSgpLmhhc1BzZXVkb1N0eWxlKHBzZXVkbykpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVuZGVyU3R5bGUqIGNhY2hlZFN0eWxlID0gc3R5
bGUoKS5nZXRDYWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG8pOworICAgIGlmIChjYWNoZWRTdHlsZSkK
KyAgICAgICAgcmV0dXJuIGNhY2hlZFN0eWxlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiByZXN1bHQgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVz
dChwc2V1ZG8pLCBwYXJlbnRTdHlsZSk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUmPihtX3N0eWxlKS5hZGRDYWNoZWRQc2V1ZG9TdHlsZShX
VEZNb3ZlKHJlc3VsdCkpOworICAgIHJldHVybiBudWxscHRyOworfQorCitSZW5kZXJTdHlsZSog
UmVuZGVyRWxlbWVudDo6Z2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVk
bywgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmIChwc2V1ZG8gPCBG
SVJTVF9JTlRFUk5BTF9QU0VVRE9JRCAmJiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG8p
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE1NDYsMTEgKzE1NTYsMTEgQEAgUmVuZGVy
U3R5bGUqIFJlbmRlckVsZW1lbnQ6OmdldENhY2hlZFBzZQogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiByZXN1bHQgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxl
UmVxdWVzdChwc2V1ZG8pLCBwYXJlbnRTdHlsZSk7CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIHN0eWxlKCkuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RGTW92ZShyZXN1bHQpKTsKKyAg
ICAgICAgcmV0dXJuIG1fc3R5bGUuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RGTW92ZShyZXN1bHQp
KTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiBSZW5kZXJFbGVtZW50OjpnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKGNvbnN0IFBzZXVkb1N0eWxl
UmVxdWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJl
bmRlclN0eWxlKiBvd25TdHlsZSkgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
UmVuZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJl
cXVlc3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogb3duU3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHBzZXVkb1N0
eWxlUmVxdWVzdC5wc2V1ZG9JZCA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEICYmICFvd25TdHls
ZSAmJiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwNjYsNyArMjA3Niw3IEBAIHZvaWQgUmVu
ZGVyRWxlbWVudDo6cGFpbnRPdXRsaW5lKFBhaW50SW4KICAgICBpZiAoIWhhc091dGxpbmUoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgp
OworICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIGZsb2F0IG91dGxpbmVXaWR0
aCA9IGZsb29yVG9EZXZpY2VQaXhlbChzdHlsZVRvVXNlLm91dGxpbmVXaWR0aCgpLCBkb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIGZsb2F0IG91dGxpbmVPZmZzZXQgPSBmbG9v
clRvRGV2aWNlUGl4ZWwoc3R5bGVUb1VzZS5vdXRsaW5lT2Zmc2V0KCksIGRvY3VtZW50KCkuZGV2
aWNlU2NhbGVGYWN0b3IoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsMTAgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBoYXNJbml0aWFsaXplZFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJ
bml0aWFsaXplZFN0eWxlOyB9CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PFJlbmRlclN0eWxlJj4obV9zdHlsZSk7IH0KLSAgICBSZW5kZXJTdHls
ZSYgZmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0
TGluZVN0eWxlKCkgY29uc3Q7CisKKyAgICBSZW5kZXJTdHlsZSYgbXV0YWJsZVN0eWxlKCkgeyBy
ZXR1cm4gbV9zdHlsZTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXplU3R5bGUoKTsKIApAQCAtNTIs
OCArNTQsOSBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGUgcHNldWRvIGVsZW1lbnQgc3R5bGUgY2Fu
IGJlIGNhY2hlZCBvciB1bmNhY2hlZC4gIFVzZSB0aGUgY2FjaGVkIG1ldGhvZCBpZiB0aGUgcHNl
dWRvIGVsZW1lbnQgZG9lc24ndCByZXNwZWN0CiAgICAgLy8gYW55IHBzZXVkbyBjbGFzc2VzIChh
bmQgdGhlcmVmb3JlIGhhcyBubyBjb25jZXB0IG9mIGNoYW5naW5nIHN0YXRlKS4KLSAgICBSZW5k
ZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyLCBSZW5kZXJTdHlsZSogb3duU3R5bGUgPSBu
dWxscHRyKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRvU3R5
bGUoUHNldWRvSWQsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpIGNv
bnN0OworICAgIFJlbmRlclN0eWxlKiBnZXRNdXRhYmxlQ2FjaGVkUHNldWRvU3R5bGUoUHNldWRv
SWQsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1
ZG9TdHlsZVJlcXVlc3QmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRy
LCBjb25zdCBSZW5kZXJTdHlsZSogb3duU3R5bGUgPSBudWxscHRyKSBjb25zdDsKIAogICAgIC8v
IFRoaXMgaXMgbnVsbCBmb3IgYW5vbnltb3VzIHJlbmRlcmVycy4KICAgICBFbGVtZW50KiBlbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4oUmVuZGVyT2JqZWN0Ojpub2Rl
KCkpOyB9CkBAIC0yOTgsNyArMzAxLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgU3R5bGVE
aWZmZXJlbmNlIGFkanVzdFN0eWxlRGlmZmVyZW5jZShTdHlsZURpZmZlcmVuY2UsIHVuc2lnbmVk
IGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSogY2Fj
aGVkRmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY2FjaGVk
Rmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKIAogICAgIHZvaWQgbmV3SW1hZ2VBbmltYXRpb25GcmFt
ZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYpIGZpbmFsOwogCkBAIC00NTAsMTQgKzQ1MywxNCBAQCBp
bmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6OmlzUmVuZGVySW5saW5lCiAgICAgcmV0dXJuIGlzPFJl
bmRlckVsZW1lbnQ+KCp0aGlzKSAmJiBkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykuaXNS
ZW5kZXJJbmxpbmUoKTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxlJiBSZW5kZXJPYmplY3Q6OnN0
eWxlKCkgY29uc3QKK2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpzdHls
ZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4dCgpKQogICAgICAgICByZXR1cm4gbV9wYXJlbnQt
PnN0eWxlKCk7CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCp0aGlzKS5zdHls
ZSgpOwogfQogCi1pbmxpbmUgUmVuZGVyU3R5bGUmIFJlbmRlck9iamVjdDo6Zmlyc3RMaW5lU3R5
bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJPYmplY3Q6OmZpcnN0
TGluZVN0eWxlKCkgY29uc3QKIHsKICAgICBpZiAoaXNUZXh0KCkpCiAgICAgICAgIHJldHVybiBt
X3BhcmVudC0+Zmlyc3RMaW5lU3R5bGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIyLDggKzUyMiw4IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6Omxh
eW91dCgpCiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgKnRo
aXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSB8
fCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpOwogICAgIAogICAgIGNoaWxk
Qm94LnNldExvY2F0aW9uKExheW91dFBvaW50KGJvcmRlckxlZnQoKSwgYm9yZGVyVG9wKCkpICsg
TGF5b3V0U2l6ZShwYWRkaW5nTGVmdCgpLCBwYWRkaW5nVG9wKCkpKTsKLSAgICBjaGlsZEJveC5z
dHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBj
aGlsZEJveC5zdHlsZSgpLnNldFdpZHRoKExlbmd0aChuZXdTaXplLndpZHRoKCksIEZpeGVkKSk7
CisgICAgY2hpbGRCb3gubXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aChuZXdTaXplLmhl
aWdodCgpLCBGaXhlZCkpOworICAgIGNoaWxkQm94Lm11dGFibGVTdHlsZSgpLnNldFdpZHRoKExl
bmd0aChuZXdTaXplLndpZHRoKCksIEZpeGVkKSk7CiAgICAgY2hpbGRCb3guc2V0TmVlZHNMYXlv
dXQoTWFya09ubHlUaGlzKTsKICAgICBjaGlsZEJveC5sYXlvdXQoKTsKICAgICBjbGVhckNoaWxk
TmVlZHNMYXlvdXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBA
QCBSZW5kZXJGbG93VGhyZWFkOjpSZW5kZXJGbG93VGhyZWFkKERvY3VtCiAgICAgc2V0Rmxvd1Ro
cmVhZFN0YXRlKEluc2lkZU91dE9mRmxvd1RocmVhZCk7CiB9CiAKLVJlbmRlclN0eWxlIFJlbmRl
ckZsb3dUaHJlYWQ6OmNyZWF0ZUZsb3dUaHJlYWRTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUpCitSZW5kZXJTdHlsZSBSZW5kZXJGbG93VGhyZWFkOjpjcmVhdGVGbG93VGhyZWFkU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGF1dG8gbmV3U3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgbmV3U3R5bGUuaW5oZXJpdEZyb20ocGFyZW50U3R5
bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5o
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICAv
LyBDYWxsZWQgd2hlbiBhIGRlc2NlbmRhbnQgYm94J3MgbGF5b3V0IGlzIGZpbmlzaGVkIGFuZCBp
dCBoYXMgYmVlbiBwb3NpdGlvbmVkIHdpdGhpbiBpdHMgY29udGFpbmVyLgogICAgIHZpcnR1YWwg
dm9pZCBmbG93VGhyZWFkRGVzY2VuZGFudEJveExhaWRPdXQoUmVuZGVyQm94KikgeyB9CiAKLSAg
ICBzdGF0aWMgUmVuZGVyU3R5bGUgY3JlYXRlRmxvd1RocmVhZFN0eWxlKFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSk7CisgICAgc3RhdGljIFJlbmRlclN0eWxlIGNyZWF0ZUZsb3dUaHJlYWRTdHls
ZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwogCiAgICAgdm9pZCBzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJp
ZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzE2LDggKzcxNiw4IEBAIHZvaWQgUmVuZGVySW1hZ2U6Omxh
eW91dFNoYWRvd0NvbnRyb2xzKGMKIAogICAgIGlmIChzaGFkb3dDb250cm9sc05lZWRDdXN0b21M
YXlvdXRNZXRyaWNzKCkpIHsKICAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c2V0TG9jYXRpb24o
TGF5b3V0UG9pbnQoYm9yZGVyTGVmdCgpLCBib3JkZXJUb3AoKSkgKyBMYXlvdXRTaXplKHBhZGRp
bmdMZWZ0KCksIHBhZGRpbmdUb3AoKSkpOwotICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5zdHls
ZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICAgICAg
Y29udHJvbHNSZW5kZXJlci0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgp
LCBGaXhlZCkpOworICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRI
ZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgICAgIGNvbnRyb2xz
UmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldFdpZHRoKExlbmd0aChuZXdTaXplLndpZHRoKCks
IEZpeGVkKSk7CiAgICAgfQogCiAgICAgY29udHJvbHNSZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQo
TWFya09ubHlUaGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShTdHlsZUQKICAgICAvLyBlLmcuLCA8Zm9udD5mb28g
PGg0PmdvbzwvaDQ+IG1vbzwvZm9udD4uICBUaGUgPGZvbnQ+IGlubGluZXMgYmVmb3JlCiAgICAg
Ly8gYW5kIGFmdGVyIHRoZSBibG9jayBzaGFyZSB0aGUgc2FtZSBzdHlsZSwgYnV0IHRoZSBibG9j
ayBkb2Vzbid0CiAgICAgLy8gbmVlZCB0byBwYXNzIGl0cyBzdHlsZSBvbiB0byBhbnlvbmUgZWxz
ZS4KLSAgICBSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOworICAgIGF1dG8mIG5ld1N0
eWxlID0gc3R5bGUoKTsKICAgICBSZW5kZXJJbmxpbmUqIGNvbnRpbnVhdGlvbiA9IGlubGluZUVs
ZW1lbnRDb250aW51YXRpb24oKTsKICAgICBpZiAoY29udGludWF0aW9uKSB7CiAgICAgICAgIGZv
ciAoUmVuZGVySW5saW5lKiBjdXJyQ29udCA9IGNvbnRpbnVhdGlvbjsgY3VyckNvbnQ7IGN1cnJD
b250ID0gY3VyckNvbnQtPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkgewpAQCAtMjIwLDcg
KzIyMCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW4KICAgICBp
ZiAoYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+c3R5bGUoKTsKKyAgICBhdXRvKiBwYXJl
bnRTdHlsZSA9ICZwYXJlbnQoKS0+c3R5bGUoKTsKICAgICBSZW5kZXJJbmxpbmUqIHBhcmVudFJl
bmRlcklubGluZSA9IGlzPFJlbmRlcklubGluZT4oKnBhcmVudCgpKSA/IGRvd25jYXN0PFJlbmRl
cklubGluZT4ocGFyZW50KCkpIDogbnVsbHB0cjsKICAgICBib29sIGNoZWNrRm9udHMgPSBkb2N1
bWVudCgpLmluTm9RdWlya3NNb2RlKCk7CiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVh
ZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lk
IFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgaWYgKCFhbHdheXNDcmVh
dGVMaW5lQm94ZXMgJiYgY2hlY2tGb250cyAmJiB2aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkp
IHsKICAgICAgICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3QgbGluZSBzdHlsZSBhcyB3ZWxs
LgogICAgICAgICBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKLSAg
ICAgICAgUmVuZGVyU3R5bGUmIGNoaWxkU3R5bGUgPSBmaXJzdExpbmVTdHlsZSgpOworICAgICAg
ICBhdXRvJiBjaGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKICAgICAgICAgYWx3YXlzQ3Jl
YXRlTGluZUJveGVzID0gIXBhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCku
aGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRTdHlsZS5mb250Q2FzY2Fk
ZSgpLmZvbnRNZXRyaWNzKCkpCiAgICAgICAgICAgICB8fCBjaGlsZFN0eWxlLnZlcnRpY2FsQWxp
Z24oKSAhPSBCQVNFTElORQogICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQo
KSAhPSBjaGlsZFN0eWxlLmxpbmVIZWlnaHQoKTsKQEAgLTE2MDEsNyArMTYwMSw3IEBAIHZvaWQg
UmVuZGVySW5saW5lOjpwYWludE91dGxpbmUoUGFpbnRJbmYKICAgICBpZiAoIWhhc091dGxpbmUo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHls
ZSgpOworICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIC8vIE9ubHkgcGFpbnQg
dGhlIGZvY3VzIHJpbmcgYnkgaGFuZCBpZiB0aGUgdGhlbWUgaXNuJ3QgYWJsZSB0byBkcmF3IGl0
LgogICAgIGlmIChzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1
cHBvcnRzRm9jdXNSaW5nKHN0eWxlVG9Vc2UpKSB7CiAgICAgICAgIFZlY3RvcjxMYXlvdXRSZWN0
PiBmb2N1c1JpbmdSZWN0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExMSw3ICs0MTExLDcgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aChHcmFwaGljcwogICAgICAgICByb290UmVsYXRpdmVC
b3VuZHNDb21wdXRlZCA9IHRydWU7CiAgICAgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0g
cmVuZGVyZXIoKS5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXIoKS5zdHlsZSgp
OwogICAgIEFTU0VSVChzdHlsZS5jbGlwUGF0aCgpKTsKICAgICBpZiAoaXM8U2hhcGVDbGlwUGF0
aE9wZXJhdGlvbj4oKnN0eWxlLmNsaXBQYXRoKCkpIHx8IChpczxCb3hDbGlwUGF0aE9wZXJhdGlv
bj4oKnN0eWxlLmNsaXBQYXRoKCkpICYmIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpKSB7CiAg
ICAgICAgIFdpbmRSdWxlIHdpbmRSdWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNyArMzU0
LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludFNjcm9sbGJhcihQYWludAogICAgIG1fdkJh
ci0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQoKSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJl
Y3QpKTsKIH0KIAotc3RhdGljIExheW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0
UnVuIHRleHRSdW4sIFJlbmRlclN0eWxlKiBpdGVtU3R5bGUsIEZvbnRDYXNjYWRlIGl0ZW1Gb250
LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5nQm94KQorc3RhdGljIExheW91dFNpemUgaXRlbU9mZnNl
dEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4sIGNvbnN0IFJlbmRlclN0eWxlKiBpdGVtU3R5
bGUsIEZvbnRDYXNjYWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5nQm94KQogewog
ICAgIEVUZXh0QWxpZ24gYWN0dWFsQWxpZ25tZW50ID0gaXRlbVN0eWxlLT50ZXh0QWxpZ24oKTsK
ICAgICAvLyBGSVhNRTogRmlyZWZveCBkb2Vzbid0IHJlc3BlY3QgSlVTVElGWS4gU2hvdWxkIHdl
PwpAQCAtMzc5LDcgKzM3OSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdy
b3VuZCgKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0
RWxlbWVudCgpLmxpc3RJdGVtcygpOwogICAgIEhUTUxFbGVtZW50KiBsaXN0SXRlbUVsZW1lbnQg
PSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKIAotICAgIFJlbmRlclN0eWxlJiBpdGVtU3R5bGUgPSAq
bGlzdEl0ZW1FbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CisgICAgYXV0byYgaXRlbVN0eWxlID0g
Kmxpc3RJdGVtRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogCiAgICAgaWYgKGl0ZW1TdHlsZS52
aXNpYmlsaXR5KCkgPT0gSElEREVOKQogICAgICAgICByZXR1cm47CkBAIC00MjMsNyArNDIzLDcg
QEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKAogewogICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50KCkubGlzdEl0
ZW1zKCk7CiAgICAgSFRNTEVsZW1lbnQqIGxpc3RJdGVtRWxlbWVudCA9IGxpc3RJdGVtc1tsaXN0
SW5kZXhdOwotICAgIFJlbmRlclN0eWxlJiBpdGVtU3R5bGUgPSAqbGlzdEl0ZW1FbGVtZW50LT5j
b21wdXRlZFN0eWxlKCk7CisgICAgYXV0byYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+
Y29tcHV0ZWRTdHlsZSgpOwogCiAgICAgQ29sb3IgYmFja0NvbG9yOwogICAgIGlmIChpczxIVE1M
T3B0aW9uRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpLnNlbGVjdGVkKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcwOCw4ICsxNzA4LDggQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjp1cGRh
dGVNYXJnaW5zKCkKICAgICAgICAgCiAgICAgfQogCi0gICAgc3R5bGUoKS5zZXRNYXJnaW5TdGFy
dChMZW5ndGgobWFyZ2luU3RhcnQsIEZpeGVkKSk7Ci0gICAgc3R5bGUoKS5zZXRNYXJnaW5FbmQo
TGVuZ3RoKG1hcmdpbkVuZCwgRml4ZWQpKTsKKyAgICBtdXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5T
dGFydChMZW5ndGgobWFyZ2luU3RhcnQsIEZpeGVkKSk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0
TWFyZ2luRW5kKExlbmd0aChtYXJnaW5FbmQsIEZpeGVkKSk7CiB9CiAKIExheW91dFVuaXQgUmVu
ZGVyTGlzdE1hcmtlcjo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1v
ZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBpbnQgUmVuZGVyTWFycXVlZTo6Y29t
cHV0ZVBvc2l0aW9uKEVNYXJxCiB7CiAgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLT5yZW5k
ZXJCb3goKTsKICAgICBBU1NFUlQoYm94KTsKLSAgICBSZW5kZXJTdHlsZSYgYm94U3R5bGUgPSBi
b3gtPnN0eWxlKCk7CisgICAgYXV0byYgYm94U3R5bGUgPSBib3gtPnN0eWxlKCk7CiAgICAgaWYg
KGlzSG9yaXpvbnRhbCgpKSB7CiAgICAgICAgIGJvb2wgbHRyID0gYm94U3R5bGUuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpOwogICAgICAgICBMYXlvdXRVbml0IGNsaWVudFdpZHRoID0gYm94LT5j
bGllbnRXaWR0aCgpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6dXBk
YXRlTWFycXVlZVBvc2l0aW8KIAogdm9pZCBSZW5kZXJNYXJxdWVlOjp1cGRhdGVNYXJxdWVlU3R5
bGUoKQogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG1fbGF5ZXItPnJlbmRlcmVyKCkuc3R5
bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IG1fbGF5ZXItPnJlbmRlcmVyKCkubXV0YWJsZVN0eWxl
KCk7CiAgICAgCiAgICAgaWYgKG1fZGlyZWN0aW9uICE9IHN0eWxlLm1hcnF1ZWVEaXJlY3Rpb24o
KSB8fCAobV90b3RhbExvb3BzICE9IHN0eWxlLm1hcnF1ZWVMb29wQ291bnQoKSAmJiBtX2N1cnJl
bnRMb29wID49IG1fdG90YWxMb29wcykpCiAgICAgICAgIG1fY3VycmVudExvb3AgPSAwOyAvLyBX
aGVuIGRpcmVjdGlvbiBjaGFuZ2VzIG9yIG91ciBsb29wQ291bnQgaXMgYSBzbWFsbGVyIG51bWJl
ciB0aGFuIG91ciBjdXJyZW50IGxvb3AsIHJlc2V0IG91ciBsb29wLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6Y3JlYXRlSW5uZXJC
bG9jaygpCiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVyU3R5bGUoKQogewotICAg
IFJlbmRlclN0eWxlJiBpbm5lclN0eWxlID0gbV9pbm5lckJsb2NrLT5zdHlsZSgpOworICAgIGF1
dG8mIGlubmVyU3R5bGUgPSBtX2lubmVyQmxvY2stPm11dGFibGVTdHlsZSgpOwogICAgIGlubmVy
U3R5bGUuc2V0RmxleEdyb3coMSk7CiAgICAgaW5uZXJTdHlsZS5zZXRGbGV4U2hyaW5rKDEpOwog
ICAgIC8vIG1pbi13aWR0aDogMDsgaXMgbmVlZGVkIGZvciBjb3JyZWN0IHNocmlua2luZy4KQEAg
LTIxNSw3ICsyMTUsNyBAQCB2b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgo
CiAgICAgICAgIGlmICh0aGVtZSgpLnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkpIHsK
ICAgICAgICAgICAgIC8vIEFkZCBpbiB0aGUgb3B0aW9uJ3MgdGV4dCBpbmRlbnQuICBXZSBjYW4n
dCBjYWxjdWxhdGUgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIG5vdy4KICAgICAgICAgICAgIGZsb2F0
IG9wdGlvbldpZHRoID0gMDsKLSAgICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSogb3B0aW9uU3R5
bGUgPSBlbGVtZW50LT5jb21wdXRlZFN0eWxlKCkpCisgICAgICAgICAgICBpZiAoYXV0byogb3B0
aW9uU3R5bGUgPSBlbGVtZW50LT5jb21wdXRlZFN0eWxlKCkpCiAgICAgICAgICAgICAgICAgb3B0
aW9uV2lkdGggKz0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKG9wdGlvblN0eWxlLT50ZXh0SW5kZW50
KCksIDApOwogICAgICAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
ICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpOwpAQCAt
NTE5LDcgKzUxOSw3IEBAIFBvcHVwTWVudVN0eWxlIFJlbmRlck1lbnVMaXN0OjppdGVtU3R5bGUK
ICAgICBib29sIGl0ZW1IYXNDdXN0b21CYWNrZ3JvdW5kQ29sb3I7CiAgICAgZ2V0SXRlbUJhY2tn
cm91bmRDb2xvcihsaXN0SW5kZXgsIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIGl0ZW1IYXNDdXN0b21C
YWNrZ3JvdW5kQ29sb3IpOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gKmVsZW1lbnQtPmNv
bXB1dGVkU3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9ICplbGVtZW50LT5jb21wdXRlZFN0eWxl
KCk7CiAgICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUNvbG9yKSwgaXRlbUJhY2tncm91bmRDb2xvciwgc3R5bGUuZm9udENhc2Nh
ZGUoKSwgc3R5bGUudmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCiAgICAgICAgIHN0eWxlLmRpc3Bs
YXkoKSA9PSBOT05FLCB0cnVlLCBzdHlsZS50ZXh0SW5kZW50KCksIHN0eWxlLmRpcmVjdGlvbigp
LCBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRpKCkpLAogICAgICAgICBpdGVtSGFzQ3VzdG9t
QmFja2dyb3VuZENvbG9yID8gUG9wdXBNZW51U3R5bGU6OkN1c3RvbUJhY2tncm91bmRDb2xvciA6
IFBvcHVwTWVudVN0eWxlOjpEZWZhdWx0QmFja2dyb3VuZENvbG9yKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIz
OSw3IEBAIHN0YXRpYyBib29sIGlzVmFsaWRDb2x1bW5TcGFubmVyKFJlbmRlck0KICAgICBBU1NF
UlQoZGVzY2VuZGFudC0+aXNEZXNjZW5kYW50T2YoZmxvd1RocmVhZCkpOwogCiAgICAgLy8gRmly
c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHJlbmRlcmVyIGl0c2VsZiBoYXMgdGhlIHJpZ2h0IHByb3Bl
cnRpZXMgZm9yIGJlY29taW5nIGEgc3Bhbm5lci4KLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBk
ZXNjZW5kYW50LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gZGVzY2VuZGFudC0+c3R5bGUo
KTsKICAgICBpZiAoc3R5bGUuY29sdW1uU3BhbigpICE9IENvbHVtblNwYW5BbGwgfHwgIWlzPFJl
bmRlckJveD4oKmRlc2NlbmRhbnQpIHx8IGRlc2NlbmRhbnQtPmlzRmxvYXRpbmdPck91dE9mRmxv
d1Bvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNw
YW5uZXJQbGFjZWhvbGRlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZW5k
ZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciogUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXI6OmNyZWF0ZUFub255bW91cyhSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQq
IGZsb3dUaHJlYWQsIFJlbmRlckJveCogc3Bhbm5lciwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KQorUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIFJlbmRlck11bHRpQ29sdW1u
U3Bhbm5lclBsYWNlaG9sZGVyOjpjcmVhdGVBbm9ueW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93
VGhyZWFkKiBmbG93VGhyZWFkLCBSZW5kZXJCb3gqIHNwYW5uZXIsIGNvbnN0IFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSkKIHsKICAgICBhdXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoKnBhcmVudFN0eWxlLCBCTE9DSyk7CiAgICAgbmV3
U3R5bGUuc2V0Q2xlYXIoQ0JPVEgpOyAvLyBXZSBkb24ndCB3YW50IGZsb2F0cyBpbiB0aGUgcm93
IHByZWNlZGluZyB0aGUgc3Bhbm5lciB0byBjb250aW51ZSBvbiB0aGUgb3RoZXIgc2lkZS4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBSZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQ7CiAKIGNsYXNzIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVy
IGZpbmFsIDogcHVibGljIFJlbmRlckJveCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlbmRlck11
bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBjcmVhdGVBbm9ueW1vdXMoUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkKiwgUmVuZGVyQm94KiBzcGFubmVyLCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpOworICAgIHN0YXRpYyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciog
Y3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCosIFJlbmRlckJveCog
c3Bhbm5lciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIFJlbmRlckJv
eCogc3Bhbm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Bhbm5lcjsgfQogICAgIFJlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZCogZmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd1RocmVh
ZDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDcsNyArMzQ3LDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2hlY2tSZWdpbwog
ICAgIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKm1fZmxvd1RocmVhZCkuY2hlY2tS
ZWdpb25zV2l0aFN0eWxpbmcoKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkgY29uc3QKK3N0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNvbXB1dGVTdHlsZUlu
UmVnaW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50
U3R5bGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFyZW5kZXJlci5pc0Fub255bW91cygpKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0Zy
YWdtZW50LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCI7IH0KIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gY29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVy
RWxlbWVudCYsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkgY29uc3Q7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBjb21wdXRlU3R5bGVJblJlZ2lvbihSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKSBjb25zdDsKICAgICB2b2lkIGNvbXB1dGVD
aGlsZHJlblN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYpOwogICAgIHZvaWQgc2V0T2JqZWN0
U3R5bGVJblJlZ2lvbihSZW5kZXJPYmplY3QqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
LCBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIy
LDcgKzE4MjIsNyBAQCBpbnQgUmVuZGVyT2JqZWN0Ojppbm5lckxpbmVIZWlnaHQoKSBjb25zCiAg
ICAgcmV0dXJuIHN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CiB9CiAKLXN0YXRpYyBDb2xv
ciBkZWNvcmF0aW9uQ29sb3IoUmVuZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIENvbG9yIGRlY29y
YXRpb25Db2xvcihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgQ29sb3IgcmVzdWx0
OwogICAgIC8vIENoZWNrIGZvciB0ZXh0IGRlY29yYXRpb24gY29sb3IgZmlyc3QuCkBAIC0xODQ0
LDcgKzE4NDQsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvCiAg
ICAgVGV4dERlY29yYXRpb25TdHlsZSYgdW5kZXJsaW5lU3R5bGUsIFRleHREZWNvcmF0aW9uU3R5
bGUmIG92ZXJsaW5lU3R5bGUsIFRleHREZWNvcmF0aW9uU3R5bGUmIGxpbmV0aHJvdWdoU3R5bGUs
IGJvb2wgZmlyc3RsaW5lU3R5bGUpIGNvbnN0CiB7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBj
dXJyZW50ID0gdGhpczsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IG51bGxwdHI7Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBudWxscHRyOwogICAgIFRleHREZWNv
cmF0aW9uIGN1cnJEZWNzID0gVGV4dERlY29yYXRpb25Ob25lOwogICAgIENvbG9yIHJlc3VsdENv
bG9yOwogICAgIGRvIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjk3LDggKzY5Nyw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIExheW91dFVuaXQgbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gMDsgfQogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsK
LSAgICBSZW5kZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgZmlyc3RMaW5l
U3R5bGUoKSBjb25zdDsKIAogICAgIC8vIEFub255bW91cyBibG9ja3MgdGhhdCBhcmUgcGFydCBv
ZiBvZiBhIGNvbnRpbnVhdGlvbiBjaGFpbiB3aWxsIHJldHVybiB0aGVpciBpbmxpbmUgY29udGlu
dWF0aW9uJ3Mgb3V0bGluZSBzdHlsZSBpbnN0ZWFkLgogICAgIC8vIFRoaXMgaXMgdHlwaWNhbGx5
IG9ubHkgcmVsZXZhbnQgd2hlbiByZXBhaW50aW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTEsNyArODEx
LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYQogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhcHRpb25zLnNpemUoKTsgaSsrKQogICAgICAgICBtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoLCBtX2NhcHRpb25zW2ldLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSk7CiAKLSAgICBS
ZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CisgICAgYXV0byYgc3R5bGVUb1VzZSA9
IHN0eWxlKCk7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGNoZWNraW5n
IGZvciBpc1NwZWNpZmllZCBzaW5jZSB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIHBlcmNlbnRh
Z2Ugb3IgY2FsYyB2YWx1ZXMgZm9yIG1pbi13aWR0aC4KICAgICBpZiAoc3R5bGVUb1VzZS5sb2dp
Y2FsTWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGVUb1VzZS5sb2dpY2FsTWluV2lkdGgoKS52
YWx1ZSgpID4gMCkgewogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0ZDo6
bWF4KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBhZGp1c3RDb250ZW50Qm94TG9naWNhbFdp
ZHRoRm9yQm94U2l6aW5nKHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkudmFsdWUoKSkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5j
cHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk4LDcgKzExOTgsNyBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRSb3dHcm91cEJvCiAKIH0KIAotc3RhdGljIEJveFNp
ZGUgcGh5c2ljYWxCb3JkZXJGb3JEaXJlY3Rpb24oUmVuZGVyU3R5bGUqIHN0eWxlRm9yQ2VsbEZs
b3csIENvbGxhcHNlZEJvcmRlclNpZGUgc2lkZSkKK3N0YXRpYyBCb3hTaWRlIHBoeXNpY2FsQm9y
ZGVyRm9yRGlyZWN0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93LCBDb2xs
YXBzZWRCb3JkZXJTaWRlIHNpZGUpCiB7CiAKICAgICBzd2l0Y2ggKHNpZGUpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
OSArNDgsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RnJhZ21lbnQoKSBj
b25zdDsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0OwotICAgIFJlbmRlclN0eWxl
JiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0OwotICAgIFJlbmRlclN0eWxlKiBnZXRDYWNoZWRQc2V1
ZG9TdHlsZShQc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0cikgY29u
c3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVu
ZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUq
IGdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBudWxscHRyKSBjb25zdDsKIAogICAgIENvbG9yIHNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpIGNvbnN0OwogICAgIENvbG9yIHNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0
OwpAQCAtMjUxLDE3ICsyNTEsMTcgQEAgaW5saW5lIFVDaGFyIFJlbmRlclRleHQ6OmNoYXJhY3Rl
ckF0KHVucwogICAgIHJldHVybiB1bmNoZWNrZWRDaGFyYWN0ZXJBdChpKTsKIH0KIAotaW5saW5l
IFJlbmRlclN0eWxlJiBSZW5kZXJUZXh0OjpzdHlsZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgUmVu
ZGVyU3R5bGUmIFJlbmRlclRleHQ6OnN0eWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGFyZW50
KCktPnN0eWxlKCk7CiB9CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVuZGVyVGV4dDo6Zmlyc3RM
aW5lU3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJUZXh0Ojpm
aXJzdExpbmVTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcmVudCgpLT5maXJzdExpbmVT
dHlsZSgpOwogfQogCi1pbmxpbmUgUmVuZGVyU3R5bGUqIFJlbmRlclRleHQ6OmdldENhY2hlZFBz
ZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNv
bnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIFJlbmRlclRleHQ6OmdldENhY2hlZFBzZXVk
b1N0eWxlKFBzZXVkb0lkIHBzZXVkb0lkLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcmVudCgpLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShwc2V1
ZG9JZCwgcGFyZW50U3R5bGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw4ICs2NSw4IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnN0eWxlRGlkQ2hhbmdlKFMKICAg
ICBpZiAoaW5uZXJUZXh0UmVuZGVyZXIpIHsKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgc2V0IHRo
ZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0eWxlIGluIGxheW91dCgpLgogICAg
ICAgICAvLyBSZXNldCB0aGVtIG5vdyB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0
IGhpbnQuCi0gICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zdHlsZSgpLnNldEhlaWdodChMZW5n
dGgoKSk7Ci0gICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zdHlsZSgpLnNldFdpZHRoKExlbmd0
aCgpKTsKKyAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldEhlaWdo
dChMZW5ndGgoKSk7CisgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5z
ZXRXaWR0aChMZW5ndGgoKSk7CiAgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zZXRTdHlsZSh0
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkuY3JlYXRlSW5uZXJUZXh0U3R5bGUoc3R5bGUoKSkpOwog
ICAgIH0KICAgICB0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkudXBkYXRlUGxhY2Vob2xkZXJWaXNp
YmlsaXR5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZQogICAgIFJlbmRlck9iamVjdCogcGxhY2Vob2xkZXJSZW5kZXJlciA9IFJlbmRl
clRleHRDb250cm9sOjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZChyZWxheW91dENoaWxkcmVu
KTsKICAgICBpZiAoaXM8UmVuZGVyQm94PihwbGFjZWhvbGRlclJlbmRlcmVyKSkgewogICAgICAg
ICBhdXRvJiBwbGFjZWhvbGRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnBsYWNlaG9sZGVy
UmVuZGVyZXIpOwotICAgICAgICBwbGFjZWhvbGRlckJveC5zdHlsZSgpLnNldExvZ2ljYWxXaWR0
aChMZW5ndGgoY29udGVudExvZ2ljYWxXaWR0aCgpIC0gcGxhY2Vob2xkZXJCb3guYm9yZGVyQW5k
UGFkZGluZ0xvZ2ljYWxXaWR0aCgpLCBGaXhlZCkpOworICAgICAgICBwbGFjZWhvbGRlckJveC5t
dXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsV2lkdGgoTGVuZ3RoKGNvbnRlbnRMb2dpY2FsV2lkdGgo
KSAtIHBsYWNlaG9sZGVyQm94LmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSwgRml4ZWQp
KTsKICAgICAgICAgcGxhY2Vob2xkZXJCb3gubGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgcGxh
Y2Vob2xkZXJCb3guc2V0WChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKTsKICAgICAgICAg
cGxhY2Vob2xkZXJCb3guc2V0WShib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
OCwxMSArMTA4LDExIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQK
IAogICAgIC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBiZXR3ZWVuIGxheW91dHMsIHdlIG5lZWQg
dG8gcmVzZXQgYW55IGNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVuIGhlaWdodC4KICAgICBpZiAoaW5u
ZXJUZXh0UmVuZGVyZXIgJiYgIWlubmVyVGV4dFJlbmRlcmVyLT5zdHlsZSgpLmxvZ2ljYWxIZWln
aHQoKS5pc0F1dG8oKSkgewotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRM
b2dpY2FsSGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5t
dXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChBdXRvKSk7CiAgICAgICAgIHNl
dE5lZWRzTGF5b3V0T25BbmNlc3RvcnMoaW5uZXJUZXh0UmVuZGVyZXIsIHRoaXMpOwogICAgIH0K
ICAgICBpZiAoaW5uZXJCbG9ja1JlbmRlcmVyICYmICFpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxl
KCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygpKSB7Ci0gICAgICAgIGlubmVyQmxvY2tSZW5kZXJl
ci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgICAgIGlubmVy
QmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoQXV0
bykpOwogICAgICAgICBzZXROZWVkc0xheW91dE9uQW5jZXN0b3JzKGlubmVyQmxvY2tSZW5kZXJl
ciwgdGhpcyk7CiAgICAgfQogCkBAIC0xMjgsMTAgKzEyOCwxMCBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgICAgIGlmIChkZXNpcmVkTG9naWNhbEhlaWdo
dCAhPSBpbm5lclRleHRSZW5kZXJlci0+bG9naWNhbEhlaWdodCgpKQogICAgICAgICAgICAgc2V0
TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKIAotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+
c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4
ZWQpKTsKKyAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldExvZ2lj
YWxIZWlnaHQoTGVuZ3RoKGRlc2lyZWRMb2dpY2FsSGVpZ2h0LCBGaXhlZCkpOwogICAgICAgICBp
bm5lclRleHRSZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAg
aWYgKGlubmVyQmxvY2tSZW5kZXJlcikgewotICAgICAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVy
LT5zdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGRlc2lyZWRMb2dpY2FsSGVpZ2h0LCBG
aXhlZCkpOworICAgICAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5z
ZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKICAg
ICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlz
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTE0MCwxMyArMTQwLDEzIEBAIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQKICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPmxh
eW91dElmTmVlZGVkKCk7CiAgICAgICAgIExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbEhlaWdo
dCA9IGNvbnRhaW5lclJlbmRlcmVyLT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGlmIChjb250
YWluZXJMb2dpY2FsSGVpZ2h0ID4gbG9naWNhbEhlaWdodExpbWl0KSB7Ci0gICAgICAgICAgICBj
b250YWluZXJSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChsb2dpY2Fs
SGVpZ2h0TGltaXQsIEZpeGVkKSk7CisgICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+bXV0
YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgobG9naWNhbEhlaWdodExpbWl0LCBG
aXhlZCkpOwogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAg
ICAgfSBlbHNlIGlmIChjb250YWluZXJSZW5kZXJlci0+bG9naWNhbEhlaWdodCgpIDwgY29udGVu
dExvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxl
KCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoY29udGVudExvZ2ljYWxIZWlnaHQoKSwgRml4ZWQp
KTsKKyAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dp
Y2FsSGVpZ2h0KExlbmd0aChjb250ZW50TG9naWNhbEhlaWdodCgpLCBGaXhlZCkpOwogICAgICAg
ICAgICAgc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0
aChjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBGaXhlZCkpOworICAgICAgICAgICAgY29udGFpbmVy
UmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGNvbnRhaW5l
ckxvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CiAgICAgfQogCiAgICAgLy8gSWYgd2UgbmVlZCBhbm90
aGVyIGxheW91dCBwYXNzLCB3ZSBoYXZlIGNoYW5nZWQgb25lIG9mIGNoaWxkcmVuJ3MgaGVpZ2h0
IHNvIHdlIG5lZWQgdG8gcmVsYXlvdXQgdGhlbS4KQEAgLTE3NCw4ICsxNzQsOCBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgICAgIExheW91dFNpemUgaW5u
ZXJUZXh0U2l6ZTsKICAgICAgICAgaWYgKGlubmVyVGV4dFJlbmRlcmVyKQogICAgICAgICAgICAg
aW5uZXJUZXh0U2l6ZSA9IGlubmVyVGV4dFJlbmRlcmVyLT5zaXplKCk7Ci0gICAgICAgIHBsYWNl
aG9sZGVyQm94LT5zdHlsZSgpLnNldFdpZHRoKExlbmd0aChpbm5lclRleHRTaXplLndpZHRoKCkg
LSBwbGFjZWhvbGRlckJveC0+aG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgRml4
ZWQpKTsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3gtPnN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aChp
bm5lclRleHRTaXplLmhlaWdodCgpIC0gcGxhY2Vob2xkZXJCb3gtPnZlcnRpY2FsQm9yZGVyQW5k
UGFkZGluZ0V4dGVudCgpLCBGaXhlZCkpOworICAgICAgICBwbGFjZWhvbGRlckJveC0+bXV0YWJs
ZVN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKGlubmVyVGV4dFNpemUud2lkdGgoKSAtIHBsYWNlaG9s
ZGVyQm94LT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCBGaXhlZCkpOworICAg
ICAgICBwbGFjZWhvbGRlckJveC0+bXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aChpbm5l
clRleHRTaXplLmhlaWdodCgpIC0gcGxhY2Vob2xkZXJCb3gtPnZlcnRpY2FsQm9yZGVyQW5kUGFk
ZGluZ0V4dGVudCgpLCBGaXhlZCkpOwogICAgICAgICBib29sIG5lZWRlZExheW91dCA9IHBsYWNl
aG9sZGVyQm94LT5uZWVkc0xheW91dCgpOwogICAgICAgICBib29sIHBsYWNlaG9sZGVyQm94SGFk
TGF5b3V0ID0gcGxhY2Vob2xkZXJCb3gtPmV2ZXJIYWRMYXlvdXQoKTsKICAgICAgICAgcGxhY2Vo
b2xkZXJCb3gtPmxheW91dElmTmVlZGVkKCk7CkBAIC0yMzYsMTQgKzIzNiwxNCBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5bGVECiAgICAgLy8gV2UgbWF5IGhhdmUgc2V0
IHRoZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0eWxlIGluIGxheW91dCgpLgog
ICAgIC8vIFJlc2V0IHRoZW0gbm93IHRvIGF2b2lkIGdldHRpbmcgYSBzcHVyaW91cyBsYXlvdXQg
aGludC4KICAgICBIVE1MRWxlbWVudCogaW5uZXJCbG9jayA9IGlubmVyQmxvY2tFbGVtZW50KCk7
Ci0gICAgaWYgKFJlbmRlck9iamVjdCogaW5uZXJCbG9ja1JlbmRlcmVyID0gaW5uZXJCbG9jayA/
IGlubmVyQmxvY2stPnJlbmRlcmVyKCkgOiAwKSB7Ci0gICAgICAgIGlubmVyQmxvY2tSZW5kZXJl
ci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOwotICAgICAgICBpbm5lckJsb2NrUmVuZGVy
ZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkpOworICAgIGlmIChhdXRvKiBpbm5lckJsb2Nr
UmVuZGVyZXIgPSBpbm5lckJsb2NrID8gaW5uZXJCbG9jay0+cmVuZGVyZXIoKSA6IG51bGxwdHIp
IHsKKyAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQo
TGVuZ3RoKCkpOworICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNl
dFdpZHRoKExlbmd0aCgpKTsKICAgICB9CiAgICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9IGNv
bnRhaW5lckVsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBjb250YWluZXJSZW5kZXJl
ciA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVyZXIoKSA6IDApIHsKLSAgICAgICAgY29u
dGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aCgpKTsKLSAgICAgICAgY29u
dGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkpOworICAgIGlmIChhdXRv
KiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVyZXIoKSA6
IG51bGxwdHIpIHsKKyAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNl
dEhlaWdodChMZW5ndGgoKSk7CisgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxlU3R5
bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7CiAgICAgfQogICAgIGlmIChkaWZmID09IFN0eWxlRGlm
ZmVyZW5jZUxheW91dCkgewogICAgICAgICBpZiAoYXV0byogaW5uZXJUZXh0UmVuZGVyZXIgPSBp
bm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBSZW5kZXJUZXh0RnJhZ21lbnQ6OnN0eWxlRGlk
Q2hhbmdlKAogICAgIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsK
IAogICAgIGlmIChSZW5kZXJCbG9jayogYmxvY2sgPSBibG9ja0ZvckFjY29tcGFueWluZ0ZpcnN0
TGV0dGVyKCkpIHsKLSAgICAgICAgYmxvY2stPnN0eWxlKCkucmVtb3ZlQ2FjaGVkUHNldWRvU3R5
bGUoRklSU1RfTEVUVEVSKTsKKyAgICAgICAgYmxvY2stPm11dGFibGVTdHlsZSgpLnJlbW92ZUNh
Y2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUik7CiAgICAgICAgIGJsb2NrLT51cGRhdGVGaXJz
dExldHRlcigpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIHBhaW50Rmxvdyhjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
Rm9yZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0g
Zmxvdy5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOwogICAgIGlmIChz
dHlsZS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNDAs
NyArMTQwLDcgQEAgYm9vbCBoaXRUZXN0Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIAogICAg
IGlmICghbGF5b3V0LnJ1bkNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJl
bmRlclN0eWxlJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGZsb3cu
c3R5bGUoKTsKICAgICBpZiAoc3R5bGUudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgc3R5bGUu
cG9pbnRlckV2ZW50cygpID09IFBFX05PTkUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgVGV4dFBhaW50U3R5bGUgY29tcHV0
ZVRleHRTZWxlY3Rpb25QYWludAogICAgICAgICBzZWxlY3Rpb25QYWludFN0eWxlLmVtcGhhc2lz
TWFya0NvbG9yID0gZW1waGFzaXNNYXJrRm9yZWdyb3VuZDsKICAgICB9CiAKLSAgICBpZiAoUmVu
ZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gcmVuZGVyZXIuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoU0VM
RUNUSU9OKSkgeworICAgIGlmIChhdXRvKiBwc2V1ZG9TdHlsZSA9IHJlbmRlcmVyLmdldENhY2hl
ZFBzZXVkb1N0eWxlKFNFTEVDVElPTikpIHsKICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93ID0gcGFpbnRJbmZvLmZvcmNlVGV4dENvbG9yKCkgPyBudWxscHRyIDogcHNldWRvU3R5bGUt
PnRleHRTaGFkb3coKTsKICAgICAgICAgaWYgKHNoYWRvdyAhPSBzZWxlY3Rpb25TaGFkb3cpIHsK
ICAgICAgICAgICAgIGlmICghcGFpbnRTZWxlY3RlZFRleHRPbmx5KQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDcgQEAgcHJpdmF0ZToKICAgICAvLyBGaXJl
Zm94IGFuZCBPcGVyYSB3aWxsIGFsbG93IGEgdGFibGUgY2VsbCB0byBncm93IHRvIGZpdCBhbiBp
bWFnZSBpbnNpZGUgaXQgdW5kZXIKICAgICAvLyB2ZXJ5IHNwZWNpZmljIGNpcmN1bXN0YW5jZXMg
KGluIG9yZGVyIHRvIG1hdGNoIGNvbW1vbiBXaW5JRSByZW5kZXJpbmdzKS4KICAgICAvLyBOb3Qg
c3VwcG9ydGluZyB0aGUgcXVpcmsgaGFzIGNhdXNlZCB1cyB0byBtaXMtcmVuZGVyIHNvbWUgcmVh
bCBzaXRlcy4gKFNlZSBCdWd6aWxsYSAxMDUxNy4pCi0gICAgUmVuZGVyU3R5bGUmIG1fYmxvY2tT
dHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbV9ibG9ja1N0eWxlOwogCiAgICAgTGluZUlu
Zm8mIG1fbGluZUluZm87CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAxLDEwICszMDEsMTAgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpsYXlv
dXQoKQogICAgICAgICAgICAgICAgIGJhc2VUb3BNYXJnaW4gLT0gaW5kZXhUb3BNYXJnaW47CiAg
ICAgICAgICAgICAgICAgaW5kZXhUb3BNYXJnaW4gPSAwOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaW5kZXgtPnN0eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChpbmRleFRvcE1hcmdpbiwg
Rml4ZWQpKTsKKyAgICAgICAgICAgIGluZGV4LT5tdXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5Ub3Ao
TGVuZ3RoKGluZGV4VG9wTWFyZ2luLCBGaXhlZCkpOwogICAgICAgICB9Ci0gICAgICAgIHJhZGlj
YWwtPnN0eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChyYWRpY2FsVG9wTWFyZ2luLCBGaXhlZCkp
OwotICAgICAgICBiYXNlLT5zdHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgoYmFzZVRvcE1hcmdp
biwgRml4ZWQpKTsKKyAgICAgICAgcmFkaWNhbC0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9w
KExlbmd0aChyYWRpY2FsVG9wTWFyZ2luLCBGaXhlZCkpOworICAgICAgICBiYXNlLT5tdXRhYmxl
U3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGJhc2VUb3BNYXJnaW4sIEZpeGVkKSk7CiAgICAg
fQogCiAgICAgUmVuZGVyTWF0aE1MQmxvY2s6OmxheW91dCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjA2LDcgKzE2MDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb2x1bW5SdWxl
V2lkdGgodW5zaWduZWQgc2hvcnQgdykgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVk
RGF0YSwgbV9tdWx0aUNvbCwgbV9ydWxlLm1fd2lkdGgsIHcpOyB9CiAgICAgdm9pZCByZXNldENv
bHVtblJ1bGUoKSB7IFNFVF9ORVNURURfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX211bHRp
Q29sLCBtX3J1bGUsIEJvcmRlclZhbHVlKCkpOyB9CiAgICAgdm9pZCBzZXRDb2x1bW5TcGFuKENv
bHVtblNwYW4gY29sdW1uU3BhbikgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0
YSwgbV9tdWx0aUNvbCwgbV9jb2x1bW5TcGFuLCBjb2x1bW5TcGFuKTsgfQotICAgIHZvaWQgaW5o
ZXJpdENvbHVtblByb3BlcnRpZXNGcm9tKFJlbmRlclN0eWxlKiBwYXJlbnQpIHsgcmFyZU5vbklu
aGVyaXRlZERhdGEuYWNjZXNzKCktPm1fbXVsdGlDb2wgPSBwYXJlbnQtPnJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX211bHRpQ29sOyB9CisgICAgdm9pZCBpbmhlcml0Q29sdW1uUHJvcGVydGllc0Zy
b20oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudCkgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nl
c3MoKS0+bV9tdWx0aUNvbCA9IHBhcmVudC0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlD
b2w7IH0KICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBv
cHMpIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fdHJhbnNmb3JtLCBt
X29wZXJhdGlvbnMsIG9wcyk7IH0KICAgICB2b2lkIHNldFRyYW5zZm9ybU9yaWdpblgoTGVuZ3Ro
IGxlbmd0aCkgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV90cmFuc2Zv
cm0sIG1feCwgV1RGTW92ZShsZW5ndGgpKTsgfQogICAgIHZvaWQgc2V0VHJhbnNmb3JtT3JpZ2lu
WShMZW5ndGggbGVuZ3RoKSB7IFNFVF9ORVNURURfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBt
X3RyYW5zZm9ybSwgbV95LCBXVEZNb3ZlKGxlbmd0aCkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBmbG9hdCBTVkdJbmxpbmVUZXh0
Qm94Ojpwb3NpdGlvbkZvck9mZnNlCiAgICAgcmV0dXJuIDA7CiB9CiAKLUZsb2F0UmVjdCBTVkdJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRG
cmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK0Zsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxl
Y3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQs
IGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGFy
dFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pOwogICAgIEFTU0VSVChzdHlsZSk7CkBAIC0xNDIsNyAr
MTQyLDcgQEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdAogICAgIGlm
IChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVj
dCgpOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXIoKS5zdHlsZSgpOworICAg
IGF1dG8mIHN0eWxlID0gcmVuZGVyZXIoKS5zdHlsZSgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3Jt
IGZyYWdtZW50VHJhbnNmb3JtOwogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0OwpAQCAtMjAx
LDcgKzIwMSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25CYWMKICAg
ICBpZiAoIXRleHRTaG91bGRCZVBhaW50ZWQocmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CisgICAg
YXV0byYgc3R5bGUgPSBwYXJlbnRSZW5kZXJlci5zdHlsZSgpOwogCiAgICAgaW50IHN0YXJ0UG9z
aXRpb247CiAgICAgaW50IGVuZFBvc2l0aW9uOwpAQCAtMjU2LDE0ICsyNTYsMTQgQEAgdm9pZCBT
VkdJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIAogICAgIGlmICghdGV4dFNob3VsZEJl
UGFpbnRlZChyZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUm
IHN0eWxlID0gcGFyZW50UmVuZGVyZXIuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHBhcmVu
dFJlbmRlcmVyLnN0eWxlKCk7CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUg
PSBzdHlsZS5zdmdTdHlsZSgpOwogCiAgICAgYm9vbCBoYXNGaWxsID0gc3ZnU3R5bGUuaGFzRmls
bCgpOwogICAgIGJvb2wgaGFzVmlzaWJsZVN0cm9rZSA9IHN2Z1N0eWxlLmhhc1Zpc2libGVTdHJv
a2UoKTsKIAotICAgIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSA9ICZzdHlsZTsKKyAgICBj
b25zdCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUgPSAmc3R5bGU7CiAgICAgaWYgKGhhc1Nl
bGVjdGlvbikgewogICAgICAgICBzZWxlY3Rpb25TdHlsZSA9IHBhcmVudFJlbmRlcmVyLmdldENh
Y2hlZFBzZXVkb1N0eWxlKFNFTEVDVElPTik7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdHlsZSkg
ewpAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJ
bmZvJiAKICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJjZSk7CiB9CiAKLWJvb2wgU1ZHSW5s
aW5lVGV4dEJveDo6YWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29u
dGV4dCwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVy
LCBSZW5kZXJTdHlsZSogc3R5bGUpCitib29sIFNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQYWlu
dGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0
b3IsIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKQogewogICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKICAgICBBU1NFUlQoc3R5bGUpOwpA
QCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5n
UmUKICAgICBtX3BhaW50aW5nUmVzb3VyY2UgPSBudWxscHRyOwogfQogCi1ib29sIFNWR0lubGlu
ZVRleHRCb3g6OnByZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3ND
b250ZXh0KiYgY29udGV4dCwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
KQorYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjpwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBh
aW50aW5nKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICByZXR1cm4gYWNxdWlyZVBhaW50aW5nUmVz
b3VyY2UoY29udGV4dCwgc2NhbGluZ0ZhY3RvciwgcGFyZW50KCktPnJlbmRlcmVyKCksIHN0eWxl
KTsKIH0KQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJlc3RvcmVH
cmFwaGljc0NvCiAgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgLyogcGF0aCAq
L251bGxwdHIpOwogfQogCi1UZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRS
dW4oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBj
b25zdAorVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QK
IHsKICAgICBBU1NFUlQoc3R5bGUpOwogCkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBTVkdJbmxp
bmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaQogICAgIEFTU0VSVCghbV9wYWludGluZ1Jlc291
cmNlKTsKICAgICBBU1NFUlQobV9wYWludGluZ1Jlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVs
dE1vZGUpOwogCi0gICAgUmVuZGVyU3R5bGUmIGRlY29yYXRpb25TdHlsZSA9IGRlY29yYXRpb25S
ZW5kZXJlci5zdHlsZSgpOworICAgIGF1dG8mIGRlY29yYXRpb25TdHlsZSA9IGRlY29yYXRpb25S
ZW5kZXJlci5zdHlsZSgpOwogCiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IDE7CiAgICAgRm9u
dENhc2NhZGUgc2NhbGVkRm9udDsKQEAgLTU0MCw3ICs1NDAsNyBAQCB2b2lkIFNWR0lubGluZVRl
eHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAgICAgICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNl
KGNvbnRleHRQdHIsICZwYXRoKTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRl
eHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHls
ZSwgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50
IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbikKK3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6
cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYg
ZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pCiB7CiAgICAgZmxv
YXQgc2NhbGluZ0ZhY3RvciA9IHJlbmRlcmVyKCkuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VS
VChzY2FsaW5nRmFjdG9yKTsKQEAgLTU4NSw3ICs1ODUsNyBAQCB2b2lkIFNWR0lubGluZVRleHRC
b3g6OnBhaW50VGV4dFdpdGhTaGFkCiAgICAgfSB3aGlsZSAoc2hhZG93KTsKIH0KIAotdm9pZCBT
VkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiBmcmFnbWVudCwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3Rl
ZFRleHRPbmx5KQordm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
KiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgYm9vbCBo
YXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQogewogICAgIEFTU0VSVChz
dHlsZSk7CiAgICAgQVNTRVJUKHNlbGVjdGlvblN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiAyMDAwNjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtNjQsMjMgKzY0LDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXJ0
c05ld1RleHRDaHVuayhib29sIG5ld1RleHRDaHVuaykgeyBtX3N0YXJ0c05ld1RleHRDaHVuayA9
IG5ld1RleHRDaHVuazsgfQogCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uSW5GcmFnbWVudChj
b25zdCBTVkdUZXh0RnJhZ21lbnQmLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21l
bnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgaW50
IGZyYWdtZW50RW5kUG9zaXRpb24sIFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgRmxvYXRSZWN0
IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50
IGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlKikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc1NWR0lubGluZVRleHRC
b3goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBUZXh0UnVuIGNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsK
KyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBT
VkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKIAotICAgIGJvb2wgYWNxdWlyZVBhaW50aW5nUmVzb3Vy
Y2UoR3JhcGhpY3NDb250ZXh0KiYsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlckJveE1vZGVs
T2JqZWN0JiwgUmVuZGVyU3R5bGUqKTsKKyAgICBib29sIGFjcXVpcmVQYWludGluZ1Jlc291cmNl
KEdyYXBoaWNzQ29udGV4dComLCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJCb3hNb2RlbE9i
amVjdCYsIGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCByZWxlYXNlUGFpbnRpbmdSZXNv
dXJjZShHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUGF0aCopOwogCi0gICAgYm9vbCBwcmVwYXJl
R3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComLCBmbG9hdCBz
Y2FsaW5nRmFjdG9yLCBSZW5kZXJTdHlsZSopOworICAgIGJvb2wgcHJlcGFyZUdyYXBoaWNzQ29u
dGV4dEZvclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiwgZmxvYXQgc2NhbGluZ0ZhY3Rv
ciwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHJlc3RvcmVHcmFwaGljc0NvbnRleHRB
ZnRlclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJik7CiAKICAgICB2b2lkIHBhaW50RGVj
b3JhdGlvbihHcmFwaGljc0NvbnRleHQmLCBUZXh0RGVjb3JhdGlvbiwgY29uc3QgU1ZHVGV4dEZy
YWdtZW50Jik7CiAgICAgdm9pZCBwYWludERlY29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250
ZXh0JiwgVGV4dERlY29yYXRpb24sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIFJlbmRlckJveE1v
ZGVsT2JqZWN0JiBkZWNvcmF0aW9uUmVuZGVyZXIpOwotICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNo
YWRvd3MoR3JhcGhpY3NDb250ZXh0JiwgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwgY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbik7Ci0gICAg
dm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHls
ZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGJvb2wgaGFzU2VsZWN0
aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CisgICAgdm9pZCBwYWludFRleHRXaXRo
U2hhZG93cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSosIFRleHRSdW4mLCBj
b25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9u
KTsKKyAgICB2b2lkIHBhaW50VGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KTsKIAog
ICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5p
dCBsaW5lQm90dG9tLCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHAJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUGF0aERhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVBhdGhGcm9tQ2lyY2xl
RWxlbWVudCgKICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlclN0eWxl
JiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXIt
PnN0eWxlKCk7CiAgICAgZmxvYXQgciA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5
bGUuc3ZnU3R5bGUoKS5yKCkpOwogICAgIGlmIChyID4gMCkgewogICAgICAgICBmbG9hdCBjeCA9
IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUuc3ZnU3R5bGUoKS5jeCgpLCBMZW5n
dGhNb2RlV2lkdGgpOwpAQCAtNTksNyArNTksNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVQYXRoRnJv
bUVsbGlwc2VFbGVtZW50CiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBlbGVtZW50LT5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChlbGVt
ZW50KTsKICAgICBmbG9hdCByeCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUu
c3ZnU3R5bGUoKS5yeCgpLCBMZW5ndGhNb2RlV2lkdGgpOwogICAgIGlmIChyeCA8PSAwKQpAQCAt
MTIwLDcgKzEyMCw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVBhdGhGcm9tUmVjdEVsZW1lbnQoU1YK
ICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTdHlsZSYg
c3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChlbGVtZW50KTsKICAg
ICBmbG9hdCB3aWR0aCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUud2lkdGgo
KSwgTGVuZ3RoTW9kZVdpZHRoKTsKICAgICBpZiAod2lkdGggPD0gMCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFNW
R1JlbmRlcmluZ0NvbnRleHQ6OnByZXBhcmVUb1JlbmRlCiAgICAgICAgIG1fcmVuZGVyaW5nRmxh
Z3MgfD0gUmVzdG9yZUdyYXBoaWNzQ29udGV4dDsKICAgICB9CiAKLSAgICBSZW5kZXJTdHlsZSYg
c3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gbV9yZW5kZXJl
ci0+c3R5bGUoKTsKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxl
LnN2Z1N0eWxlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29s
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
VHJlZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBUcmVlUmVz
b2x2ZXI6OlBhcmVudDo6UGFyZW50KERvY3VtZW50JiBkCiB7CiB9CiAKLVRyZWVSZXNvbHZlcjo6
UGFyZW50OjpQYXJlbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFu
Z2UgY2hhbmdlKQorVHJlZVJlc29sdmVyOjpQYXJlbnQ6OlBhcmVudChFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2UpCiAgICAgOiBlbGVtZW50
KCZlbGVtZW50KQogICAgICwgc3R5bGUoc3R5bGUpCiAgICAgLCBjaGFuZ2UoY2hhbmdlKQpAQCAt
MTE5LDcgKzExOSw3IEBAIHZvaWQgVHJlZVJlc29sdmVyOjpwb3BTY29wZSgpCiAgICAgcmV0dXJu
IG1fc2NvcGVTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gVHJlZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgUmVu
ZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKQorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBU
cmVlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5k
ZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50LmhhdmVTdHls
ZXNoZWV0c0xvYWRlZCgpICYmICFlbGVtZW50LnJlbmRlcmVyKCkpIHsKICAgICAgICAgbV9kb2N1
bWVudC5zZXRIYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCk7CkBAIC0yODIsNyArMjgyLDcg
QEAgcHJpdmF0ZToKIH07CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCi12b2lkIFRyZWVSZXNv
bHZlcjo6cHVzaFBhcmVudChFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYgc3R5bGUsIENo
YW5nZSBjaGFuZ2UpCit2b2lkIFRyZWVSZXNvbHZlcjo6cHVzaFBhcmVudChFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2UpCiB7CiAgICAgc2Nv
cGUoKS5zZWxlY3RvckZpbHRlci5wdXNoUGFyZW50KCZlbGVtZW50KTsKIApAQCAtMzc1LDcgKzM3
NSw3IEBAIHZvaWQgVHJlZVJlc29sdmVyOjpyZXNvbHZlQ29tcG9zZWRUcmVlKCkKIAogICAgICAg
ICBib29sIHNob3VsZFJlc29sdmVGb3JQc2V1ZG9FbGVtZW50ID0gc2hvdWxkUmVzb2x2ZVBzZXVk
b0VsZW1lbnQoZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCkpIHx8IHNob3VsZFJlc29sdmVQ
c2V1ZG9FbGVtZW50KGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCkpOwogCi0gICAgICAgIFJl
bmRlclN0eWxlKiBzdHlsZTsKKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlOwogICAg
ICAgICBDaGFuZ2UgY2hhbmdlOwogCiAgICAgICAgIGJvb2wgc2hvdWxkUmVzb2x2ZSA9IHBhcmVu
dC5jaGFuZ2UgPj0gSW5oZXJpdCB8fCBlbGVtZW50Lm5lZWRzU3R5bGVSZWNhbGMoKSB8fCBzaG91
bGRSZXNvbHZlRm9yUHNldWRvRWxlbWVudCB8fCBhZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nIHx8
IGVsZW1lbnQuaGFzRGlzcGxheUNvbnRlbnRzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVRyZWVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlVHJlZVJlc29sdmVyLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcg
QEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxVcGRhdGU+IHJlc29sdmUoQ2hhbmdlKTsK
IAogcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxl
bWVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50JiwgY29uc3QgUmVu
ZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKTsKIAogICAgIHZvaWQgcmVzb2x2ZUNvbXBvc2VkVHJl
ZSgpOwogICAgIEVsZW1lbnRVcGRhdGUgcmVzb2x2ZUVsZW1lbnQoRWxlbWVudCYpOwpAQCAtNzks
MTMgKzc5LDEzIEBAIHByaXZhdGU6CiAKICAgICBzdHJ1Y3QgUGFyZW50IHsKICAgICAgICAgRWxl
bWVudCogZWxlbWVudDsKLSAgICAgICAgUmVuZGVyU3R5bGUmIHN0eWxlOworICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGU7CiAgICAgICAgIENoYW5nZSBjaGFuZ2U7CiAgICAgICAgIGJv
b2wgZGlkUHVzaFNjb3BlIHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBlbGVtZW50TmVlZGluZ1N0
eWxlUmVjYWxjQWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlIHsgZmFsc2UgfTsKIAogICAg
ICAgICBQYXJlbnQoRG9jdW1lbnQmLCBDaGFuZ2UpOwotICAgICAgICBQYXJlbnQoRWxlbWVudCYs
IFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKKyAgICAgICAgUGFyZW50KEVsZW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIENoYW5nZSk7CiAgICAgfTsKIAogICAgIFNjb3BlJiBzY29wZSgpIHsgcmV0
dXJuIG1fc2NvcGVTdGFjay5sYXN0KCk7IH0KQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHB1c2hFbmNsb3NpbmdTY29wZSgpOwogICAgIHZvaWQgcG9wU2NvcGUoKTsKIAotICAg
IHZvaWQgcHVzaFBhcmVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUmLCBDaGFuZ2UpOworICAgIHZv
aWQgcHVzaFBhcmVudChFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBDaGFuZ2UpOwogICAg
IHZvaWQgcG9wUGFyZW50KCk7CiAgICAgdm9pZCBwb3BQYXJlbnRzVG9EZXB0aCh1bnNpZ25lZCBk
ZXB0aCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsMTEgKzYxLDI0IEBAIGJvb2wgVXBkYXRlOjp0ZXh0VXBkYXRlKGNvbnN0
IFRleHQmIHRleHQKICAgICByZXR1cm4gbV90ZXh0cy5jb250YWlucygmdGV4dCk7CiB9CiAKLVJl
bmRlclN0eWxlKiBVcGRhdGU6OmVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JiBlbGVtZW50KSBj
b25zdAorY29uc3QgUmVuZGVyU3R5bGUqIFVwZGF0ZTo6ZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIHVwZGF0ZSA9IGVsZW1lbnRVcGRh
dGUoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiB1cGRhdGUtPnN0eWxlLmdldCgpOwotICAgIHJl
dHVybiBlbGVtZW50LnJlbmRlclN0eWxlKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50
LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuICZyZW5kZXJlci0+c3R5bGUoKTsKK30KKworUmVuZGVyU3R5bGUqIFVwZGF0
ZTo6ZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKGF1dG8q
IHVwZGF0ZSA9IGVsZW1lbnRVcGRhdGUoZWxlbWVudCkpCisgICAgICAgIHJldHVybiB1cGRhdGUt
PnN0eWxlLmdldCgpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwor
ICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiAm
cmVuZGVyZXItPm11dGFibGVTdHlsZSgpOwogfQogCiB2b2lkIFVwZGF0ZTo6YWRkRWxlbWVudChF
bGVtZW50JiBlbGVtZW50LCBFbGVtZW50KiBwYXJlbnQsIEVsZW1lbnRVcGRhdGUmJiBlbGVtZW50
VXBkYXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5oCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdGV4dFVwZGF0ZShjb25zdCBU
ZXh0JikgY29uc3Q7CiAKLSAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1l
bnQmKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlKGNvbnN0IEVs
ZW1lbnQmKSBjb25zdDsKKyAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1l
bnQmKTsKIAogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZG9jdW1lbnQ7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NDYsNyArNzQ2LDcgQEAgdm9pZCBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVN5c3Rl
bUxhbmd1YQogICAgIGNvbnRleHRFbGVtZW50LT5zeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKCk7
CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU1ZHRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0
eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqKQorT3B0aW9uYWw8RWxl
bWVudFN0eWxlPiBTVkdFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5
bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSopCiB7CiAgICAgLy8gSWYgdGhlIGVs
ZW1lbnQgaXMgaW4gYSA8dXNlPiB0cmVlIHdlIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgZGVmaW5p
dGlvbiB0cmVlLgogICAgIGlmIChhdXRvKiBzdHlsZUVsZW1lbnQgPSB0aGlzLT5jb3JyZXNwb25k
aW5nRWxlbWVudCgpKQpAQCAtNzczLDEyICs3NzMsMTIgQEAgdm9pZCBTVkdFbGVtZW50OjpzZXRV
c2VPdmVycmlkZUNvbXB1dGVkUwogICAgICAgICBtX3N2Z1JhcmVEYXRhLT5zZXRVc2VPdmVycmlk
ZUNvbXB1dGVkU3R5bGUodmFsdWUpOwogfQogCi1SZW5kZXJTdHlsZSogU1ZHRWxlbWVudDo6Y29t
cHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQorY29uc3QgUmVuZGVy
U3R5bGUqIFNWR0VsZW1lbnQ6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNw
ZWNpZmllcikKIHsKICAgICBpZiAoIW1fc3ZnUmFyZURhdGEgfHwgIW1fc3ZnUmFyZURhdGEtPnVz
ZU92ZXJyaWRlQ29tcHV0ZWRTdHlsZSgpKQogICAgICAgICByZXR1cm4gRWxlbWVudDo6Y29tcHV0
ZWRTdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKIAotICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IG51bGxwdHI7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
bnVsbHB0cjsKICAgICBpZiAoRWxlbWVudCogcGFyZW50ID0gcGFyZW50T3JTaGFkb3dIb3N0RWxl
bWVudCgpKSB7CiAgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigp
KQogICAgICAgICAgICAgcGFyZW50U3R5bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBjb25zdDsKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZUFsbEFuaW1hdGVk
U1ZHQXR0cmlidXRlKFNWR0VsZW1lbnQqKTsKICAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+
IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgdm9p
ZCBzeW5jaHJvbml6ZVJlcXVpcmVkRmVhdHVyZXMoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQp
OwogICAgIHN0YXRpYyB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKFNWR0VsZW1l
bnQqIGNvbnRleHRFbGVtZW50KTsKQEAgLTE4MSw3ICsxODEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
Y2xhc3MgSW5zdGFuY2VJbnZhbGlkYXRpb25HdWFyZDsKIAogcHJpdmF0ZToKLSAgICBSZW5kZXJT
dHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKSBmaW5hbDsKKyAgICBjb25z
dCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKSBmaW5hbDsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc1N1cHBvcnRlZChTdHJpbmdJbXBsKiBmZWF0dXJlLCBTdHJp
bmdJbXBsKiB2ZXJzaW9uKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50UmFyZURhdGEuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnRSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksMTAgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gKm1fYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzOwogICAg
IH0KIAotICAgIFJlbmRlclN0eWxlKiBvdmVycmlkZUNvbXB1dGVkU3R5bGUoRWxlbWVudCYgZWxl
bWVudCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBv
dmVycmlkZUNvbXB1dGVkU3R5bGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKQogICAgIHsKICAgICAgICAgaWYgKCFtX3VzZU92ZXJyaWRlQ29tcHV0ZWRT
dHlsZSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIGlmICghbV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgfHwgbV9uZWVkc092ZXJyaWRl
Q29tcHV0ZWRTdHlsZVVwZGF0ZSkgewogICAgICAgICAgICAgLy8gVGhlIHN0eWxlIGNvbXB1dGVk
IGhlcmUgY29udGFpbnMgbm8gQ1NTIEFuaW1hdGlvbnMvVHJhbnNpdGlvbnMgb3IgU01JTCBpbmR1
Y2VkIHJ1bGVzIC0gdGhpcyBpcyBuZWVkZWQgdG8gY29tcHV0ZSB0aGUgImJhc2UgdmFsdWUiIGZv
ciB0aGUgU01JTCBhbmltYXRpb24gc2FuZHdoaWNoIG1vZGVsLgogICAgICAgICAgICAgbV9vdmVy
cmlkZUNvbXB1dGVkU3R5bGUgPSBlbGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1l
bnQoZWxlbWVudCwgcGFyZW50U3R5bGUsIE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKS5yZW5k
ZXJTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBBZmZpbmVUcmFuc2Zvcm0g
U1ZHR3JhcGhpY3NFbGVtZW50OjpnZXRTCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHR3JhcGhpY3NFbGVt
ZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICBBZmZpbmVUcmFuc2Zv
cm0gbWF0cml4OwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVy
ZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJlcigpID8g
JnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwogCiAgICAgLy8gSWYgQ1NTIHByb3BlcnR5
IHdhcyBzZXQsIHVzZSB0aGF0LCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gYXR0cmlidXRlIChpZiBz
ZXQpLgogICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+aGFzVHJhbnNmb3JtKCkpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIyLDcgKzIyMiw3IEBAIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZy
b20KICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJTdHlsZSogcmVuZGVy
U3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcoY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCkKK3N0YXRp
YyBpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5n
KGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQpCiB7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTIzNiwxMiArMjM2LDEyIEBAIHN0YXRpYyBpbmxpbmUgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlRm8KIAogICAgIC8vIFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qg
YSBSZW5kZXJTVkdSb290IHJlbmRlcmVyLCBjYXJyeWluZyBhIHN0eWxlLgogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBm
bG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FTVMoZmxv
YXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CisgICAgYXV0
byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAg
IGlmICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0yNTgsNyArMjU4LDcgQEAgZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29u
dmVydFZhbHVlRnJvbQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9t
RU1TVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewot
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1f
Y29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmlu
ZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9S
VEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNjksNyArMjY5LDcgQEAgZmxvYXQgU1ZH
TGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0
Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FWFMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9y
TGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHls
ZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAg
ICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yODgsNyAr
Mjg4LDcgQEAgZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbQogCiBmbG9h
dCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tRVhTVG9Vc2VyVW5pdHMoZmxvYXQg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CisgICAgYXV0byog
c3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlm
ICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBTVkdTdG9wRWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZChjbwogCiBDb2xvciBTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3Bh
Y2l0eSgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZy
ZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBzdHlsZSA9IHJlbmRlcmVy
KCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CiAgICAgLy8gRklYTUU6IFRoaXMg
Y2hlY2sgZm9yIG51bGwgc3R5bGUgZXhpc3RzIHRvIGFkZHJlc3MgQnVnIFdLIDkwODE0LCBhIHJh
cmUgY3Jhc2ggY29uZGl0aW9uIGluCiAgICAgLy8gd2hpY2ggdGhlIHJlbmRlcmVyIG9yIHN0eWxl
IGlzIG51bGwuIFRoaXMgZW50aXJlIGNsYXNzIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbCAoQnVn
IFdLIDg2OTQxKQogICAgIC8vIGFuZCB3ZSB3aWxsIHRvbGVyYXRlIHRoaXMgbnVsbCBjaGVjayB1
bnRpbCB0aGVuLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFJlZjxTVkdUZXh0RWxlbWVudD4gU1ZHVGV4
dEVsZW1lbnQ6OmNyZWEKIEFmZmluZVRyYW5zZm9ybSBTVkdUZXh0RWxlbWVudDo6YW5pbWF0ZWRM
b2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkg
OiBudWxscHRyOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5z
dHlsZSgpIDogbnVsbHB0cjsKIAogICAgIC8vIGlmIENTUyBwcm9wZXJ0eSB3YXMgc2V0LCB1c2Ug
dGhhdCwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGF0dHJpYnV0ZSAoaWYgc2V0KQogICAgIGlmIChz
dHlsZSAmJiBzdHlsZS0+aGFzVHJhbnNmb3JtKCkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277354</attachid>
            <date>2016-04-26 04:47:55 -0700</date>
            <delta_ts>2016-04-26 05:25:11 -0700</delta_ts>
            <desc>patch</desc>
            <filename>const-renderstyle-3.patch</filename>
            <type>text/plain</type>
            <size>157612</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNCw3
ICsxMTM0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU3R5bGVSYW5nZQogewog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVu
ZGVyZXIgPSByZW5kZXJlcjsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyZXItPnN0
eWxlKCk7CisgICAgYXV0byogc3R5bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CiAKICAgICAvLyB0
cmF2ZXJzZSBiYWNrd2FyZCBieSByZW5kZXJlciB0byBsb29rIGZvciBzdHlsZSBjaGFuZ2UKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogciA9IHJlbmRlcmVyLT5wcmV2aW91c0luUHJlT3JkZXIoKTsg
cjsgciA9IHItPnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0
cmlidXRlU2V0RgogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBvYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gJnJlbmRl
cmVyLT5zdHlsZSgpOworICAgIGF1dG8qIHN0eWxlID0gJnJlbmRlcmVyLT5zdHlsZSgpOwogCiAg
ICAgQXRrQXR0cmlidXRlU2V0KiByZXN1bHQgPSBudWxscHRyOwogICAgIEdVbmlxdWVQdHI8Z2No
YXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoIiVpIiwgc3R5bGUtPmZvbnRTaXplKCkpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDk5
LDcgKzQ5OSw3IEBAIC0gKFdLUXVhZClpbm5lckZyYW1lUXVhZCAgICAgICAvLyB0YWtlcyAKICAg
ICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZW1wdHlRdWFkKCk7CiAKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwogICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSByZW5kZXJlci0+YWJz
b2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSAvKiB1c2UgdHJhbnNmb3JtcyovKTsKIAogICAgIGJv
dW5kaW5nQm94Lm1vdmUoc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLmJvcmRlclRvcFdp
ZHRoKCkpOwpAQCAtNTEzLDcgKzUxMyw3IEBAIC0gKFdLUXVhZClpbm5lckZyYW1lUXVhZCAgICAg
ICAvLyB0YWtlcyAKIC0gKGZsb2F0KWNvbXB1dGVkRm9udFNpemUKIHsKICAgICBXZWJDb3JlOjpO
b2RlICpub2RlID0gY29yZShzZWxmKTsKLSAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSBub2RlLT5y
ZW5kZXJTdHlsZSgpOworICAgIGF1dG8gKnN0eWxlID0gbm9kZS0+cmVuZGVyU3R5bGUoKTsKICAg
ICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMC4wZjsKICAgICByZXR1cm4gc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MDAsNyArNzAwLDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxp
c3Q+IGNyZWF0ZVBvc2l0aW9uTAogICAgIHJldHVybiBwb3NpdGlvbkxpc3Q7CiB9CiAKLXN0YXRp
YyBSZWZQdHI8Q1NTVmFsdWU+IHBvc2l0aW9uT2Zmc2V0VmFsdWUoUmVuZGVyU3R5bGUmIHN0eWxl
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwb3Np
dGlvbk9mZnNldFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEKQogewogICAgIExlbmd0aCBsZW5ndGg7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlE
KSB7CkBAIC03MzcsNyArNzM3LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcG9zaXRpb25P
ZmZzZXRWYQogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJT
dHlsZSogc3R5bGUsIGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKK1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENvbG9y
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgbG9vayBhdCB2aXNpdGVkIGluZm9ybWF0aW9u
LCBzbyB0aGF0IGNvbXB1dGVkIHN0eWxlIGRvZXNuJ3QgZXhwb3NlIHRoYXQuCiAgICAgaWYgKCFj
b2xvci5pc1ZhbGlkKCkpCkBAIC0xMTQzLDcgKzExNDMsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVl
TGlzdD4gZ2V0VHJhbnNpdGlvblByCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
c3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IHNjcm9sbFNuYXBEZXN0aW5hdGlvbihSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IExlbmd0aFNpemUmIGRlc3RpbmF0aW9uKQorc3RhdGljIFJlZjxDU1NW
YWx1ZUxpc3Q+IHNjcm9sbFNuYXBEZXN0aW5hdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IExlbmd0aFNpemUmIGRlc3RpbmF0aW9uKQogewogICAgIGF1dG8gbGlzdCA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBsaXN0LmdldCgpLmFwcGVuZCh6
b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKGRlc3RpbmF0aW9uLndpZHRoKCksIHN0eWxl
KSk7CkBAIC0xMTUxLDcgKzExNTEsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xs
U25hcERlc3RpCiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IHNj
cm9sbFNuYXBQb2ludHMoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTY3JvbGxTbmFwUG9pbnRz
KiBwb2ludHMpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxTbmFwUG9pbnRzKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgU2Nyb2xsU25hcFBvaW50cyogcG9pbnRzKQogewogICAg
IGlmICghcG9pbnRzKQogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKQEAgLTExNjYsNyArMTE2Niw3IEBA
IHN0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBQb2ludHMoUmUKICAgICByZXR1cm4gV1RG
TW92ZShsaXN0KTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcENvb3JkaW5h
dGVzKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPExlbmd0aFNpemU+JiBjb29yZGlu
YXRlcykKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBDb29yZGluYXRlcyhjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFZlY3RvcjxMZW5ndGhTaXplPiYgY29vcmRpbmF0ZXMp
CiB7CiAgICAgaWYgKGNvb3JkaW5hdGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7
CkBAIC0xODA3LDcgKzE4MDcsNyBAQCBzdGF0aWMgdm9pZCBsb2dVbmltcGxlbWVudGVkUHJvcGVy
dHlJRChDCiAgICAgTE9HX0VSUk9SKCJXZWJLaXQgZG9lcyBub3QgeWV0IGltcGxlbWVudCBnZXRD
b21wdXRlZFN0eWxlIGZvciAnJXMnLiIsIGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eUlEKSk7CiB9
CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0eWxlLT5mb250Q2FzY2FkZSgpLmZhbWlseUNvdW50KCk7ICsraSkKQEAgLTE4MTUsNyArMTgx
NSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVMKICAgICByZXR1
cm4gbGlzdDsKIH0KIAotc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZUhlaWdodEZy
b21TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiBsaW5lSGVpZ2h0RnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICBM
ZW5ndGggbGVuZ3RoID0gc3R5bGUubGluZUhlaWdodCgpOwogICAgIGlmIChsZW5ndGguaXNOZWdh
dGl2ZSgpKSAvLyBJZiB0cnVlLCBsaW5lLWhlaWdodCBub3Qgc2V0OyB1c2UgdGhlIGZvbnQncyBs
aW5lIHNwYWNpbmcuCkBAIC0xODMwLDE5ICsxODMwLDE5IEBAIHN0YXRpYyBSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IGxpbmVIZWlnaHQKICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShm
bG9hdFZhbHVlRm9yTGVuZ3RoKGxlbmd0aCwgMCksIHN0eWxlKTsKIH0KIAotc3RhdGljIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gZm9udFNpemVGcm9tU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQor
c3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFNpemVGcm9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlKQogewogICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0
eWxlLmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpLCBzdHlsZSk7CiB9CiAKLXN0YXRp
YyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRTdHlsZUZyb21TdHlsZShSZW5kZXJTdHlsZSog
c3R5bGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U3R5bGVGcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkuaXRhbGljKCkpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUl0YWxpYyk7CiAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFs
KTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRGcm9tU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRGcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkudmFyaWFudFNldHRpbmdzKCkuaXNBbGxOb3JtYWwoKSkKICAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9y
bWFsKTsKQEAgLTIwMjksNyArMjAyOSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJp
YW50RnJvbVN0eWwKICAgICByZXR1cm4gV1RGTW92ZShsaXN0KTsKIH0KIAotc3RhdGljIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdodEZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUp
CitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250V2VpZ2h0RnJvbVN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBzd2l0Y2ggKHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS53ZWlnaHQoKSkgewogICAgIGNhc2UgRm9udFdlaWdodDEwMDoKQEAgLTIwNTUsNyArMjA1
NSw3IEBAIHN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRXZWlnaHQKICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb3JtYWwpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250U3ludGhlc2lzRnJvbVN0
eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRTeW50aGVz
aXNGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIGlmIChzdHlsZS5m
b250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgPT0gRm9udFN5bnRoZXNpc05vbmUpCiAg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOwpAQCAtMjA3Miw3ICsyMDcyLDcgQEAgdHlwZWRlZiBjb25zdCBM
ZW5ndGgmIChSZW5kZXJTdHlsZTo6KlJlbgogdHlwZWRlZiBMYXlvdXRVbml0IChSZW5kZXJCb3hN
b2RlbE9iamVjdDo6KlJlbmRlckJveENvbXB1dGVkQ1NTVmFsdWVHZXR0ZXIpKCkgY29uc3Q7CiAK
IHRlbXBsYXRlPFJlbmRlclN0eWxlTGVuZ3RoR2V0dGVyIGxlbmd0aEdldHRlciwgUmVuZGVyQm94
Q29tcHV0ZWRDU1NWYWx1ZUdldHRlciBjb21wdXRlZENTU1ZhbHVlR2V0dGVyPgotaW5saW5lIFJl
ZlB0cjxDU1NWYWx1ZT4gem9vbUFkanVzdGVkUGFkZGluZ09yTWFyZ2luUGl4ZWxWYWx1ZShSZW5k
ZXJTdHlsZSYgc3R5bGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitpbmxpbmUgUmVmUHRyPENT
U1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZhbHVlKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBMZW5ndGggdW56
b29temVkTGVuZ3RoID0gKHN0eWxlLipsZW5ndGhHZXR0ZXIpKCk7CiAgICAgaWYgKCFpczxSZW5k
ZXJCb3g+KHJlbmRlcmVyKSB8fCB1bnpvb216ZWRMZW5ndGguaXNGaXhlZCgpKQpAQCAtMjA4MSw3
ICsyMDgxLDcgQEAgaW5saW5lIFJlZlB0cjxDU1NWYWx1ZT4gem9vbUFkanVzdGVkUGFkZAogfQog
CiB0ZW1wbGF0ZTxSZW5kZXJTdHlsZUxlbmd0aEdldHRlciBsZW5ndGhHZXR0ZXI+Ci1pbmxpbmUg
Ym9vbCBwYWRkaW5nT3JNYXJnaW5Jc1JlbmRlcmVyRGVwZW5kZW50KFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK2lubGluZSBib29sIHBhZGRpbmdPck1hcmdpbklz
UmVuZGVyZXJEZXBlbmRlbnQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogewogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTM5LDcgKzIxMzksNyBAQCBzdGF0aWMgQ1NTVmFs
dWVJRCBjb252ZXJ0VG9SZWdpb25CcmVhayhCCiB9CiAjZW5kaWYKICAgICAKLXN0YXRpYyBib29s
IGlzTGF5b3V0RGVwZW5kZW50KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGljIGJvb2wgaXNMYXlvdXREZXBl
bmRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgpAQCAtMjI2Nyw3ICsyMjY3LDcgQEAgc3RhdGljIGlu
bGluZSBib29sIHVwZGF0ZVN0eWxlSWZOZWVkZWRGbwogICAgIHJldHVybiB0cnVlOwogfQogCi1z
dGF0aWMgaW5saW5lIFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5bGVGb3JQcm9wZXJ0eShO
b2RlKiBzdHlsZWROb2RlLCBQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIG93bmVkU3R5
bGUpCitzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5bGVG
b3JQcm9wZXJ0eShOb2RlKiBzdHlsZWROb2RlLCBQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lm
aWVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4mIG93bmVkU3R5bGUpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHN0eWxlZE5v
ZGUtPnJlbmRlcmVyKCk7CiAKQEAgLTIzNzMsNyArMjM3Myw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4g
Q29tcHV0ZWRTdHlsZUV4dHJhY3RvcjoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG93bmVkU3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gbnVsbHB0cjsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSBudWxscHRy
OwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBudWxscHRyOwogICAgIGJvb2wgZm9yY2VG
dWxsTGF5b3V0ID0gZmFsc2U7CiAgICAgaWYgKHVwZGF0ZUxheW91dCkgewpAQCAtMzg2MSw3ICsz
ODYxLDcgQEAgdW5zaWduZWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpsZQogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBu
b2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcik7CisgICAgYXV0byog
c3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcik7CiAg
ICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM4ODAsNyArMzg4MCw3IEBA
IFN0cmluZyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246Oml0ZW0KICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOworICAgIGF1
dG8qIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIp
OwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIApA
QCAtMzg5OSw3ICszODk5LDcgQEAgYm9vbCBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0
eU1hdAogewogICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Rm9udFNpemUgJiYgaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgbV9ub2RlKSB7CiAgICAgICAgIG1fbm9kZS0+
ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAg
ICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVk
b0VsZW1lbnRTcGVjaWZpZXIpKSB7CisgICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IG1fbm9kZS0+
Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpKSB7CiAgICAgICAgICAgICBp
ZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5r
ZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkgJiYgcHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IHNpemVJZGVudGlmaWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCwxMCArNzAsMTAgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBzdHlsZWRO
b2RlKCkgY29uc3Q7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN2Z1Byb3BlcnR5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgRVVwZGF0ZUxheW91dCkgY29uc3Q7Ci0gICAgUmVmUHRyPFNWR1BhaW50PiBh
ZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNWR1BhaW50PiwgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICBSZWZQdHI8U1ZHUGFpbnQ+IGFkanVzdFNWR1BhaW50Rm9yQ3Vy
cmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFpbnQ+LCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0
OwogCiAgICAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gdmFsdWVGb3JTaGFkb3coY29uc3QgU2hhZG93
RGF0YSosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlJiwgQWRqdXN0UGl4ZWxWYWx1
ZXNGb3JDb21wdXRlZFN0eWxlID0gQWRqdXN0UGl4ZWxWYWx1ZXMpOwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiwgY29u
c3QgQ29sb3ImKSBjb25zdDsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGN1cnJlbnRD
b2xvck9yVmFsaWRDb2xvcihjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IENvbG9yJikgY29uc3Q7
CiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBnZXRDU1NQcm9wZXJ0eVZhbHVlc0ZvclNob3J0
aGFuZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYpIGNvbnN0OwogICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldENTU1Byb3BlcnR5VmFsdWVzRm9yU2lkZXNTaG9ydGhh
bmQoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGZsb2F0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGE6Onpvb20oKSAKIGRvdWJsZSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2
aWV3cG9ydFdpZHRoRmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21w
dXRpbmdGb250U2l6ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwor
ICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0
VW5pdHMoKTsKIAogICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKQEAg
LTU3LDcgKzU3LDcgQEAgZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwbwog
ZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwb3J0SGVpZ2h0RmFjdG9yKCkg
Y29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21wdXRpbmdGb250U2l6ZSkKLSAgICAg
ICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOworICAgICAgICBjb25zdF9jYXN0PFJl
bmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGlmICgh
bV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKQEAgLTY4LDcgKzY4LDcgQEAgZG91Ymxl
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwbwogZG91YmxlIENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGE6OnZpZXdwb3J0TWluRmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHls
ZSAmJiAhbV9jb21wdXRpbmdGb250U2l6ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3Bv
cnRVbml0cygpOworICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNl
dEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTgwLDcgKzgwLDcgQEAgZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGE6OnZpZXdwbwogZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwb3J0TWF4
RmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21wdXRpbmdGb250U2l6
ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOworICAgICAgICBjb25z
dF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAog
ICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBSZW5kZXJWaWV3OwogCiBjbGFz
cyBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIHsKIHB1YmxpYzoKLSAgICBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSwgY29uc3QgUmVuZGVyVmlldyogcmVuZGVyVmlldywgZmxvYXQgem9vbSwgYm9vbCBjb21w
dXRpbmdGb250U2l6ZSA9IGZhbHNlKQorICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25z
dCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBmbG9hdCB6b29tLCBib29sIGNvbXB1dGluZ0ZvbnRT
aXplID0gZmFsc2UpCiAgICAgICAgIDogbV9zdHlsZShzdHlsZSkKICAgICAgICAgLCBtX3Jvb3RT
dHlsZShyb290U3R5bGUpCiAgICAgICAgICwgbV9yZW5kZXJWaWV3KHJlbmRlclZpZXcpCkBAIC01
Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHpvb20gPiAwKTsKICAgICB9CiAK
LSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgY29uc3QgUmVuZGVyVmlldyogcmVuZGVyVmlldywgYm9v
bCBjb21wdXRpbmdGb250U2l6ZSA9IGZhbHNlKQorICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxl
LCBjb25zdCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0g
ZmFsc2UpCiAgICAgICAgIDogbV9zdHlsZShzdHlsZSkKICAgICAgICAgLCBtX3Jvb3RTdHlsZShy
b290U3R5bGUpCiAgICAgICAgICwgbV9yZW5kZXJWaWV3KHJlbmRlclZpZXcpCkBAIC02Nyw3ICs2
Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KICAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290U3R5bGU7IH0KICAgICBmbG9hdCB6b29tKCkgY29u
c3Q7CiAgICAgYm9vbCBjb21wdXRpbmdGb250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0
aW5nRm9udFNpemU7IH0KQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9z
dHlsZTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9yb290U3R5bGU7CiAgICAgY29uc3QgUmVu
ZGVyVmlldyogbV9yZW5kZXJWaWV3OwogICAgIGZsb2F0IG1fem9vbTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBA
QCBSZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6c3R5bGUoKSBjb25zCiAgICAgcmV0dXJuIG1f
cmVzb2x2ZXItPnN0eWxlKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpyb290
RWxlbWVudFN0eWxlKCkgY29uc3QKK2NvbnN0IFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpy
b290RWxlbWVudFN0eWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCShyZXZp
c2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gc2ltaWxhciB0byBo
b3cgUGFpbnRJbmZvL0xheW91dFN0YXRlIGNhY2hlIHZhbHVlcyBuZWVkZWQgZm9yCiAgICAgLy8g
dGhlIGN1cnJlbnQgcGFpbnQvbGF5b3V0LgogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
OwotICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3Q7CisgICAgY29uc3Qg
UmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdDsKICAgICBib29sIHVzZVNWR1pv
b21SdWxlcygpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2Yg
c29tZSBzb3J0IG9mIFN0eWxlSW1hZ2VDYWNoZSBvYmplY3Qgd2hpY2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODUsMTAgKzg1LDEwIEBAIE1lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFs
dWF0b3IKIHsKIH0KIAotTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihj
b25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSogZnJhbWUsIFJlbmRlclN0eWxl
KiBzdHlsZSkKK01lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3Qg
U3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgRnJhbWUqIGZyYW1lLCBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUpCiAgICAgOiBtX21lZGlhVHlwZShhY2NlcHRlZE1lZGlhVHlwZSkKICAgICAsIG1f
ZnJhbWUoZnJhbWUpCi0gICAgLCBtX3N0eWxlKFdURk1vdmUoc3R5bGUpKQorICAgICwgbV9zdHls
ZShzdHlsZSkKICAgICAsIG1fZXhwUmVzdWx0KGZhbHNlKSAvLyBkb2Vzbid0IG1hdHRlciB3aGVu
IHdlIGhhdmUgbV9mcmFtZSBhbmQgbV9zdHlsZQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4
MCw3IEBAIHB1YmxpYzoKIAogICAgIC8qKiBDcmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0
ZXMgZnVsbCBtZWRpYSBxdWVyaWVzCiAgICAgICovCi0gICAgTWVkaWFRdWVyeUV2YWx1YXRvcihj
b25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSosIFJlbmRlclN0eWxlKik7Cisg
ICAgTWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBG
cmFtZSosIGNvbnN0IFJlbmRlclN0eWxlKik7CiAKICAgICB+TWVkaWFRdWVyeUV2YWx1YXRvcigp
OwogCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbWVk
aWFUeXBlOwogICAgIEZyYW1lKiBtX2ZyYW1lIHsgbnVsbHB0ciB9OyAvLyBub3Qgb3duZWQKLSAg
ICBSZW5kZXJTdHlsZSogbV9zdHlsZSB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBSZW5kZXJTdHls
ZSogbV9zdHlsZSB7IG51bGxwdHIgfTsKICAgICBib29sIG1fZXhwUmVzdWx0OwogfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5
Myw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHN0cm9rZURhc2hBcnJheVQKICAgICByZXR1
cm4gbGlzdDsKIH0KIAotUmVmUHRyPFNWR1BhaW50PiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjph
ZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNWR1BhaW50PiBuZXdQYWlu
dCwgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorUmVmUHRyPFNWR1BhaW50PiBDb21wdXRlZFN0
eWxlRXh0cmFjdG9yOjphZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNW
R1BhaW50PiBuZXdQYWludCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAg
IFJlZlB0cjxTVkdQYWludD4gcGFpbnQgPSBuZXdQYWludDsKICAgICBpZiAocGFpbnQtPnBhaW50
VHlwZSgpID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUiB8fCBwYWludC0+
cGFpbnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfVVJJX0NVUlJFTlRDT0xPUikK
QEAgLTExMSw3ICsxMTEsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6CiAgICAgaWYgKHVwZGF0ZUxheW91dCkKICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS51cGRh
dGVMYXlvdXQoKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5
bGUoKTsKKyAgICBhdXRvKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUoKTsKICAgICBpZiAo
IXN0eWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1NvdXJjZVNpemVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U291cmNlU2l6ZUxpc3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvU291cmNlU2l6ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgbWF0Y2goc3RkOjp1bmlxdWVfcHRy
PE1lZGlhUXVlcnlFeHA+JiYgZXhwcmVzc2lvbiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBGcmFtZSog
ZnJhbWUpCitzdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4m
JiBleHByZXNzaW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEZyYW1lKiBmcmFtZSkKIHsK
ICAgICBpZiAoZXhwcmVzc2lvbi0+bWVkaWFGZWF0dXJlKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTQ3LDEyICs0NywxMiBAQCBzdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVu
aXF1ZV9wdHI8TWVkaWFRCiAgICAgcmV0dXJuIG1lZGlhUXVlcnlFdmFsdWF0b3IuZXZhbChtZWRp
YVF1ZXJ5U2V0LmdldCgpKTsKIH0KIAotc3RhdGljIGZsb2F0IGRlZmF1bHRMZW5ndGgoUmVuZGVy
U3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQorc3RhdGljIGZsb2F0IGRlZmF1bHRMZW5n
dGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQogewogICAgIHJl
dHVybiBjbGFtcFRvPGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5n
dGhEb3VibGUoQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgmc3R5bGUsICZzdHlsZSwgdmlldyks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcsIDEwMC4wKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBj
b21wdXRlTGVuZ3RoKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJW
aWV3KiB2aWV3KQorc3RhdGljIGZsb2F0IGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCiB7CiAgICAgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSgmc3R5bGUsICZzdHlsZSwgdmlldyk7
CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKQEAgLTcwLDcgKzcwLDcg
QEAgZmxvYXQgcGFyc2VTaXplc0F0dHJpYnV0ZShTdHJpbmdWaWV3IHNpegogewogICAgIGlmICgh
dmlldykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gdmlldy0+
c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHZpZXctPnN0eWxlKCk7CiAgICAgZm9yIChhdXRv
JiBzb3VyY2VTaXplIDogQ1NTUGFyc2VyKENTU1N0cmljdE1vZGUpLnBhcnNlU2l6ZXNBdHRyaWJ1
dGUoc2l6ZXNBdHRyaWJ1dGUpKSB7CiAgICAgICAgIGlmIChtYXRjaChXVEZNb3ZlKHNvdXJjZVNp
emUuZXhwcmVzc2lvbiksIHN0eWxlLCBmcmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gY29tcHV0
ZUxlbmd0aChzb3VyY2VTaXplLmxlbmd0aC5nZXQoKSwgc3R5bGUsIHZpZXcpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NzUsNyArNTc1LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMg
Y29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSkKKyAgICBz
dGF0aWMgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUt
PmJvcmRlckltYWdlKCkgOiBzdHlsZS0+bWFza0JveEltYWdlKCk7CiAgICAgfQpAQCAtNjY0LDcg
KzY2NCw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmkKIAogaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDbGlwKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpOworICAgIGF1dG8qIHBhcmVudFN0eWxlID0gc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmhhc0NsaXAoKSkK
ICAgICAgICAgcmV0dXJuIGFwcGx5SW5pdGlhbENsaXAoc3R5bGVSZXNvbHZlcik7CiAgICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKHBhcmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVu
dFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5
bGUtPmNsaXBMZWZ0KCkpOwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAgdGVtcGxhdGUgPFN0eWxlQnVp
bGRlckN1c3RvbTo6Q291bnRlckJlaAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7CiAgICAg
Q291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3ND
b3VudGVyRGlyZWN0aXZlcygpOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBzdHlsZVJlc29s
dmVyLnBhcmVudFN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIGtleVZhbHVlIDogY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIu
cGFyZW50U3R5bGUoKSktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKICAgICAgICAgQ291
bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGtleVZhbHVlLmtleSwgQ291bnRl
ckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoY291bnRlckJlaGF2
aW9yID09IFJlc2V0KQogICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0UmVzZXQoa2V5VmFs
dWUudmFsdWUpOwpAQCAtMTMzNyw3ICsxMzM3LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbAogICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCiAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRVbmlxdWUoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAg
IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpLT5z
ZXRVbmlxdWUoKTsKICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgY29u
dGVudFZhbHVlLmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxsQXRvbSk7CiAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNvbHZlci5lbGVtZW50KCktPmdl
dEF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0
KTsKQEAgLTE3MDYsNyArMTcwNiw3IEBAIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlQWx0KFMKICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c3R5bGVUeXBlKCkg
PT0gTk9QU0VVRE8pCiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFVuaXF1
ZSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxl
KCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0
eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSktPnNldFVuaXF1ZSgpOwogCiAgICAgICAgIFF1YWxp
ZmllZE5hbWUgYXR0cihudWxsQXRvbSwgcHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSwg
bnVsbEF0b20pOwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNv
bHZlci5lbGVtZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGkKICAgICBtX21hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA9IDA7CiB9CiAKLVN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHlsZSwgY29uc3QgUmVuZGVy
UmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JG
aWx0ZXIpCitTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogZG9j
dW1lbnRFbGVtZW50U3R5bGUsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZywg
Y29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKQogICAgIDogbV9lbGVtZW50KCZl
bGVtZW50KQogICAgICwgbV9wYXJlbnRTdHlsZShwYXJlbnRTdHlsZSkKICAgICAsIG1fcmVnaW9u
Rm9yU3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKQpAQCAtMzgwLDcgKzM4MCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY28KICAgICByZXR1cm4gcGFyZW50Tm9kZSAm
JiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKIH0KIAotRWxlbWVudFN0eWxlIFN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNv
bnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIq
IHNlbGVjdG9yRmlsdGVyKQorRWxlbWVudFN0eWxlIFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxl
bWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNvbnN0IFJlbmRlclJl
Z2lvbiogcmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmls
dGVyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2luTG9hZFBlbmRpbmdJbWFnZXMpOwogCkBA
IC01NTgsNyArNTU4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFu
aQogICAgIH0KIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
Ojpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUHNl
dWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIFJlbmRlclN0eWxlJiBwYXJlbnRT
dHlsZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRv
U3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFBzZXVkb1N0eWxl
UmVxdWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0LCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5
bGUpCiB7CiAgICAgbV9zdGF0ZSA9IFN0YXRlKGVsZW1lbnQsICZwYXJlbnRTdHlsZSk7CiAKQEAg
LTE2MzEsNyArMTYzMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm8KICAgICB9CiAKICAgICBpZiAoaXNJbmhlcml0ICYmICFzdGF0ZS5wYXJlbnRTdHlsZSgpLT5o
YXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhl
cml0ZWRQcm9wZXJ0eShpZCkpCi0gICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldEhhc0V4
cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVy
U3R5bGUqPihzdGF0ZS5wYXJlbnRTdHlsZSgpKS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFBy
b3BlcnRpZXMoKTsKICAgICAKICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlDdXN0b20pIHsKICAg
ICAgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSogY3VzdG9tUHJvcGVydHkgPSAmZG93bmNhc3Q8
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnZhbHVlVG9BcHBseSk7CkBAIC0xNzM0LDcgKzE3MzQs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1CiB9CiAjZW5kaWYK
IAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNr
Rm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkKIHsKICAgICBpZiAoIXBhcmVudFN0eWxlKQogICAgICAgICByZXR1cm47CkBAIC0x
NzQ4LDcgKzE3NDgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShS
CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGNvbnN0IGF1dG8mIGNoaWxkRm9udCA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsMTggKzE0MSwxOCBAQCBwdWJsaWM6CiAgICAg
U3R5bGVSZXNvbHZlcihEb2N1bWVudCYpOwogICAgIH5TdHlsZVJlc29sdmVyKCk7CiAKLSAgICBF
bGVtZW50U3R5bGUgc3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgY29uc3Qg
UmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JG
aWx0ZXIqID0gbnVsbHB0cik7CisgICAgRWxlbWVudFN0eWxlIHN0eWxlRm9yRWxlbWVudChjb25z
dCBFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSdWxlTWF0Y2hpbmdC
ZWhhdmlvciA9IE1hdGNoQWxsUnVsZXMsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5
bGluZyA9IG51bGxwdHIsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiA9IG51bGxwdHIpOwogCiAgICAg
dm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihjb25zdCBFbGVtZW50JiwgY29uc3QgUmVu
ZGVyU3R5bGUqLCBLZXlmcmFtZUxpc3QmKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBjb25zdCBQc2V1ZG9T
dHlsZVJlcXVlc3QmLCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBj
b25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUp
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBh
Z2VJbmRleCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBkZWZhdWx0U3R5bGVG
b3JFbGVtZW50KCk7CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0eWxlKCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcm9vdEVs
ZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpOyB9
CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5wYXJlbnRTdHlsZSgpOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsgfQogICAg
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQoKSB7IHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKTsgfQog
ICAgIERvY3VtZW50JiBkb2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBTZXR0
aW5ncyogZG9jdW1lbnRTZXR0aW5ncygpIHsgcmV0dXJuIG1fZG9jdW1lbnQuc2V0dGluZ3MoKTsg
fQpAQCAtMzE3LDggKzMxNyw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQg
dGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAotICAgIHZv
aWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSos
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1p
bHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwor
ICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKTsKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICB2
b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoUmVuZGVyU3R5bGUqKTsKICNlbmRpZgpAQCAtMzYx
LDcgKzM2MSw3IEBAIHB1YmxpYzoKICAgICBjbGFzcyBTdGF0ZSB7CiAgICAgcHVibGljOgogICAg
ICAgICBTdGF0ZSgpIHsgfQotICAgICAgICBTdGF0ZShjb25zdCBFbGVtZW50JiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogZG9jdW1lbnRFbGVtZW50U3R5bGUgPSBudWxs
cHRyLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25z
dCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKKyAgICAgICAgU3RhdGUoY29uc3QgRWxlbWVu
dCYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIGRv
Y3VtZW50RWxlbWVudFN0eWxlID0gbnVsbHB0ciwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25G
b3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CiAK
ICAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKQEAgLTM3NCw4ICszNzQsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gdGFrZVN0eWxlKCkg
eyByZXR1cm4gV1RGTW92ZShtX3N0eWxlKTsgfQogCiAgICAgICAgIHZvaWQgc2V0UGFyZW50U3R5
bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPik7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KLSAgICAgICAgUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50
U3R5bGU7IH0KKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQorICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9v
dEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsgfQogCiAg
ICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVnaW9uRm9yU3R5bGluZzsgfQogICAgICAgICBFSW5zaWRlTGluayBlbGVtZW50TGlu
a1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50TGlua1N0YXRlOyB9CkBAIC00MjcsOSAr
NDI3LDkgQEAgcHVibGljOgogCiAgICAgICAgIGNvbnN0IEVsZW1lbnQqIG1fZWxlbWVudCB7IG51
bGxwdHIgfTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwot
ICAgICAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsKKyAgICAgICAg
Y29uc3QgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGUgeyBudWxscHRyIH07CiAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV9vd25lZFBhcmVudFN0eWxlOwotICAgICAgICBS
ZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OworICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OwogCiAgICAgICAg
IGNvbnN0IFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nIHsgbnVsbHB0ciB9OwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwOCw3
ICsyMDA4LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZwogICAg
IG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzID0gb2xkSWdub3JlOwogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IERvY3VtZW50OjpzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRp
bmdTdHlsZXNoZWV0cyhFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IERvY3VtZW50OjpzdHlsZUZvckVsZW1lbnRJ
Z25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0cyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgQVNTRVJUKCZlbGVtZW50LmRvY3VtZW50KCkgPT0g
dGhpcyk7CiAKQEAgLTI1MTUsNyArMjUxNSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFZpc3VhbGx5
T3JkZXJlZCgpCiB7CiAgICAgbV92aXN1YWxseU9yZGVyZWQgPSB0cnVlOwogICAgIGlmIChyZW5k
ZXJWaWV3KCkpCi0gICAgICAgIHJlbmRlclZpZXcoKS0+c3R5bGUoKS5zZXRSVExPcmRlcmluZyhW
aXN1YWxPcmRlcik7CisgICAgICAgIHJlbmRlclZpZXcoKS0+bXV0YWJsZVN0eWxlKCkuc2V0UlRM
T3JkZXJpbmcoVmlzdWFsT3JkZXIpOwogfQogCiBSZWY8RG9jdW1lbnRQYXJzZXI+IERvY3VtZW50
OjpjcmVhdGVQYXJzZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NzEsNyArNTcxLDcgQEAgcHVibGljOgogICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoUnVuUG9zdExheW91dFRhc2tzID0g
UnVuUG9zdExheW91dFRhc2tzOjpBc3luY2hyb25vdXNseSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRz
KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5nU3R5bGVzaGVldHMo
RWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgcGFnZSBib3ggKG1hcmdpbiBib3hlcyBhbmQgcGFnZSBib3JkZXJzKSBpcyB2
aXNpYmxlLgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQYWdlQm94VmlzaWJsZShpbnQgcGFn
ZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3MCw3
ICsxMzcwLDcgQEAgU3R5bGVSZXNvbHZlciYgRWxlbWVudDo6c3R5bGVSZXNvbHZlcigpCiAgICAg
cmV0dXJuIGRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwogfQogCi1FbGVtZW50U3R5
bGUgRWxlbWVudDo6cmVzb2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK0VsZW1l
bnRTdHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQogewogICAgIHJldHVybiBzdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50KCp0aGlz
LCBwYXJlbnRTdHlsZSk7CiB9CkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBib29sIEVsZW1lbnQ6OmNo
aWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUgCiBzdGF0aWMgdm9pZCBjaGVja0ZvckVtcHR5U3R5bGVD
aGFuZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoZWxlbWVudC5zdHlsZUFmZmVjdGVk
QnlFbXB0eSgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgYXV0byogc3R5bGUgPSBlbGVtZW50LnJlbmRlclN0eWxlKCk7CiAg
ICAgICAgIGlmICghc3R5bGUgfHwgKCFzdHlsZS0+ZW1wdHlTdGF0ZSgpIHx8IGVsZW1lbnQuaGFz
Q2hpbGROb2RlcygpKSkKICAgICAgICAgICAgIGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygp
OwogICAgIH0KQEAgLTE3ODQsMTQgKzE3ODQsMTQgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JTaWJs
aW5nU3R5bGVDaGFuZ2VzKAogCiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGluc2VydC9hcHBlbmQg
Y2FzZS4KICAgICAgICAgaWYgKG5ld0ZpcnN0RWxlbWVudCAhPSBlbGVtZW50QWZ0ZXJDaGFuZ2Up
IHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnRBZnRlckNoYW5nZS0+
cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudEFmdGVyQ2hh
bmdlLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+Zmly
c3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBhbHNvIGhhdmUg
dG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4KICAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBTaWJsaW5n
RWxlbWVudFJlbW92ZWQgJiYgbmV3Rmlyc3RFbGVtZW50ID09IGVsZW1lbnRBZnRlckNoYW5nZSAm
JiBuZXdGaXJzdEVsZW1lbnQpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG5l
d0ZpcnN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0g
bmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8
fCAhc3R5bGUtPmZpcnN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAgIG5ld0ZpcnN0RWxl
bWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0xODA0LDcgKzE4MDQs
NyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgIEVs
ZW1lbnQqIG5ld0xhc3RFbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bGFzdENoaWxkKHBhcmVu
dCk7CiAKICAgICAgICAgaWYgKG5ld0xhc3RFbGVtZW50ICE9IGVsZW1lbnRCZWZvcmVDaGFuZ2Up
IHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnRCZWZvcmVDaGFuZ2Ut
PnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnRCZWZvcmVD
aGFuZ2UtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5s
YXN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAgIGVsZW1lbnRCZWZvcmVDaGFuZ2UtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQpAQCAtMTgxMiw3ICsxODEyLDcgQEAgc3Rh
dGljIHZvaWQgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgICAgICAvLyBXZSBhbHNv
IGhhdmUgdG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4gIFRoZSBwYXJzZXIgY2FsbGJhY2sgY2FzZSBp
cyBzaW1pbGFyIHRvIG5vZGUgcmVtb3ZhbCBhcyB3ZWxsIGluIHRoYXQgd2UgbmVlZCB0byBjaGFu
Z2UgdGhlIGxhc3QgY2hpbGQKICAgICAgICAgLy8gdG8gbWF0Y2ggbm93LgogICAgICAgICBpZiAo
KGNoZWNrVHlwZSA9PSBTaWJsaW5nRWxlbWVudFJlbW92ZWQgfHwgY2hlY2tUeXBlID09IEZpbmlz
aGVkUGFyc2luZ0NoaWxkcmVuKSAmJiBuZXdMYXN0RWxlbWVudCA9PSBlbGVtZW50QmVmb3JlQ2hh
bmdlICYmIG5ld0xhc3RFbGVtZW50KSB7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBuZXdMYXN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxl
ID0gbmV3TGFzdEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxl
IHx8ICFzdHlsZS0+bGFzdENoaWxkU3RhdGUoKSkKICAgICAgICAgICAgICAgICBuZXdMYXN0RWxl
bWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0yNDYxLDcgKzI0NjEs
NyBAQCBzdGF0aWMgUHNldWRvRWxlbWVudCogYmVmb3JlT3JBZnRlclBzZXVkCiAgICAgfQogfQog
Ci1SZW5kZXJTdHlsZSogRWxlbWVudDo6ZXhpc3RpbmdDb21wdXRlZFN0eWxlKCkKK2NvbnN0IFJl
bmRlclN0eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3R5bGUoKQogewogICAgIGlmIChh
dXRvKiByZW5kZXJUcmVlU3R5bGUgPSByZW5kZXJTdHlsZSgpKQogICAgICAgICByZXR1cm4gcmVu
ZGVyVHJlZVN0eWxlOwpAQCAtMjQ3MiwxMyArMjQ3MiwxMyBAQCBSZW5kZXJTdHlsZSogRWxlbWVu
dDo6ZXhpc3RpbmdDb21wdXRlZFN0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJlbmRlclN0
eWxlJiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSgpCitjb25zdCBSZW5kZXJTdHlsZSYg
RWxlbWVudDo6cmVzb2x2ZUNvbXB1dGVkU3R5bGUoKQogewogICAgIEFTU0VSVChpbkRvY3VtZW50
KCkpOwogICAgIEFTU0VSVCghZXhpc3RpbmdDb21wdXRlZFN0eWxlKCkpOwogCiAgICAgRGVxdWU8
RWxlbWVudCosIDMyPiBlbGVtZW50c1JlcXVpcmluZ0NvbXB1dGVkU3R5bGUoeyB0aGlzIH0pOwot
ICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gbnVsbHB0cjsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHI7CiAKICAgICAvLyBDb2xsZWN0IGFuY2Vz
dG9ycyB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IGhhcyBzdHlsZS4KICAgICBhdXRvIGNvbXBvc2Vk
QW5jZXN0b3JzID0gY29tcG9zZWRUcmVlQW5jZXN0b3JzKCp0aGlzKTsKQEAgLTI1MDEsNyArMjUw
MSw3IEBAIFJlbmRlclN0eWxlJiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHkKICAgICByZXR1
cm4gKmNvbXB1dGVkU3R5bGU7CiB9CiAKLVJlbmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0
eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpCitjb25zdCBSZW5kZXJTdHlsZSog
RWxlbWVudDo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQog
ewogICAgIGlmIChQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gYmVmb3JlT3JBZnRlclBz
ZXVkb0VsZW1lbnQoKnRoaXMsIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpKQogICAgICAgICByZXR1
cm4gcHNldWRvRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwpAQCAtMzI5NSw3ICszMjk1LDcgQEAg
dm9pZCBFbGVtZW50OjpkaWREZXRhY2hSZW5kZXJlcnMoKQogICAgIEFTU0VSVChoYXNDdXN0b21T
dHlsZVJlc29sdmVDYWxsYmFja3MoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gRWxl
bWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqKQorT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiBFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopCiB7CiAgICAgQVNTRVJUKGhhc0N1c3RvbVN0
eWxlUmVzb2x2ZUNhbGxiYWNrcygpKTsKICAgICByZXR1cm4gTnVsbG9wdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFRhYkluZGV4KGludCk7CiAgICAgdmlydHVhbCBFbGVtZW50KiBmb2N1c0RlbGVnYXRlKCk7
CiAKLSAgICBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKSBv
dmVycmlkZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9
IE5PUFNFVURPKSBvdmVycmlkZTsKIAogICAgIGJvb2wgbmVlZHNTdHlsZUludmFsaWRhdGlvbigp
IGNvbnN0OwogCkBAIC00ODAsNyArNDgwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRBdHRhY2hSZW5kZXJlcnMoKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERldGFjaFJlbmRlcmVy
cygpOwogICAgIHZpcnR1YWwgdm9pZCBkaWREZXRhY2hSZW5kZXJlcnMoKTsKLSAgICB2aXJ0dWFs
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSk7CisgICAgdmlydHVhbCBP
cHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHls
ZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpOwogCiAg
ICAgTGF5b3V0UmVjdCBhYnNvbHV0ZUV2ZW50SGFuZGxlckJvdW5kcyhib29sJiBpbmNsdWRlc0Zp
eGVkUG9zaXRpb25FbGVtZW50cykgb3ZlcnJpZGU7CiAKQEAgLTQ5OSw3ICs0OTksNyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKTsKLSAgICBF
bGVtZW50U3R5bGUgcmVzb2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAg
RWxlbWVudFN0eWxlIHJlc29sdmVTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
OwogCiAgICAgYm9vbCBoYXNEaXNwbGF5Q29udGVudHMoKSBjb25zdDsKICAgICB2b2lkIHNldEhh
c0Rpc3BsYXlDb250ZW50cyhib29sKTsKQEAgLTU5Miw4ICs1OTIsOCBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCByZW1vdmVTaGFkb3dSb290KCk7CiAKLSAgICBSZW5kZXJTdHlsZSogZXhpc3RpbmdD
b21wdXRlZFN0eWxlKCk7Ci0gICAgUmVuZGVyU3R5bGUmIHJlc29sdmVDb21wdXRlZFN0eWxlKCk7
CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGV4aXN0aW5nQ29tcHV0ZWRTdHlsZSgpOworICAgIGNv
bnN0IFJlbmRlclN0eWxlJiByZXNvbHZlQ29tcHV0ZWRTdHlsZSgpOwogCiAgICAgYm9vbCByYXJl
RGF0YVN0eWxlQWZmZWN0ZWRCeUVtcHR5KCkgY29uc3Q7CiAgICAgYm9vbCByYXJlRGF0YUNoaWxk
cmVuQWZmZWN0ZWRCeUhvdmVyKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1OSw3ICs2NTksNyBAQCBzdGF0aWMgTm9kZTo6RWRpdGFiaWxpdHkgY29tcHV0ZUVkaXRh
YmlsCiAgICAgLy8gd291bGQgZmlyZSBpbiB0aGUgbWlkZGxlIG9mIERvY3VtZW50OjpzZXRGb2N1
c2VkRWxlbWVudCgpLgogCiAgICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gJnN0YXJ0Tm9kZTsg
bm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBub2RlLT5pc0RvY3VtZW50Tm9kZSgpID8gbm9kZS0+cmVuZGVyU3R5bGUoKSA6IGNv
bnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLT5jb21wdXRlZFN0eWxlKCk7CisgICAgICAgIGF1dG8qIHN0
eWxlID0gbm9kZS0+aXNEb2N1bWVudE5vZGUoKSA/IG5vZGUtPnJlbmRlclN0eWxlKCkgOiBjb25z
dF9jYXN0PE5vZGUqPihub2RlKS0+Y29tcHV0ZWRTdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxl
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09
IE5PTkUpCkBAIC0xMDEwLDcgKzEwMTAsNyBAQCBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUxhc3RD
aGlsZCgpIGNvbnN0CiAgICAgcmV0dXJuIGxhc3RDaGlsZCgpOwogfQogCi1SZW5kZXJTdHlsZSog
Tm9kZTo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQorY29u
c3QgUmVuZGVyU3R5bGUqIE5vZGU6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVu
dFNwZWNpZmllcikKIHsKICAgICBhdXRvKiBjb21wb3NlZFBhcmVudCA9IGNvbXBvc2VkVHJlZUFu
Y2VzdG9ycygqdGhpcykuZmlyc3QoKTsKICAgICBpZiAoIWNvbXBvc2VkUGFyZW50KQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NDMsOSArNDQzLDkgQEAgcHVibGljOgogICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2RlbE9iamVjdCgpIGNvbnN0OwogICAgIAogICAgIC8v
IFdyYXBwZXIgZm9yIG5vZGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIHJlbmRlcmVyLCBidXQgc3RpbGwg
Y2FjaGUgdGhlIHN0eWxlIChsaWtlIEhUTUxPcHRpb25FbGVtZW50KS4KLSAgICBSZW5kZXJTdHls
ZSogcmVuZGVyU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5
bGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNl
dWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllciA9IE5PUFNFVURPKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVj
aWZpZXIgPSBOT1BTRVVETyk7CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8v
IE5vdGlmaWNhdGlvbiBvZiBkb2N1bWVudCBzdHJ1Y3R1cmUgY2hhbmdlcyAoc2VlIENvbnRhaW5l
ck5vZGUuaCBmb3IgbW9yZSBub3RpZmljYXRpb24gbWV0aG9kcykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVJlbmRlclN0eWxlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBSZW5kZXJTdHlsZSogTm9kZTo6cmVuZGVy
U3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBOb2RlOjpyZW5kZXJTdHls
ZSgpIGNvbnN0CiB7CiAgICAgYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAg
IGlmICghcmVuZGVyZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBQc2V1ZG9FbGVtZW50OjpjbGVh
ckhvc3RFbGVtZW50KCkKICAgICBtX2hvc3RFbGVtZW50ID0gbnVsbHB0cjsKIH0KIAotT3B0aW9u
YWw8RWxlbWVudFN0eWxlPiBQc2V1ZG9FbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVy
U3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSopCitPcHRpb25hbDxFbGVtZW50U3R5bGU+
IFBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKikKIHsKICAgICBhdXRvKiBzdHlsZSA9IG1faG9z
dEVsZW1lbnQtPnJlbmRlcmVyKCktPmdldENhY2hlZFBzZXVkb1N0eWxlKG1fcHNldWRvSWQsICZw
YXJlbnRTdHlsZSk7CiAgICAgaWYgKCFzdHlsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Q
c2V1ZG9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0Vs
ZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgRWxl
bWVudCogaG9zdEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RFbGVtZW50OyB9CiAgICAg
dm9pZCBjbGVhckhvc3RFbGVtZW50KCk7CiAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJl
c29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBz
aGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVz
b2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRBdHRhY2hS
ZW5kZXJlcnMoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFu
Z2UpIG92ZXJyaWRlOwogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHls
ZSYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzksMTggKzE3OSwxOCBAQCBzdGF0aWMgYm9vbCBpc05ld0xpbmVBdFBvc2l0aW9uKGNv
bnN0IFBvCiAgICAgcmV0dXJuIHRleHRBdFBvc2l0aW9uWzBdID09ICdcbic7CiB9CiAKLVJlbmRl
clN0eWxlKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxlT2ZFbmNsb3NpbmdU
ZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCitjb25zdCBSZW5kZXJTdHlsZSogQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkg
IT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcgogICAgICAgICB8fCAhcG9zaXRp
b24uY29udGFpbmVyTm9kZSgpCiAgICAgICAgIHx8ICFwb3NpdGlvbi5jb250YWluZXJOb2RlKCkt
PmlzVGV4dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIHJldHVybiAmcmVuZGVyZXItPnN0eWxlKCk7CiB9CkBAIC0yMDEsNyArMjAx
LDcgQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgIGVuZCA9
IGVuZE9mQ3VycmVudFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpOwogCiAgICAgYm9vbCBpc1N0
YXJ0QW5kRW5kT25TYW1lTm9kZSA9IGZhbHNlOwotICAgIGlmIChSZW5kZXJTdHlsZSogc3RhcnRT
dHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShzdGFydCkpIHsKKyAgICBpZiAo
YXV0byogc3RhcnRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShzdGFydCkp
IHsKICAgICAgICAgaXNTdGFydEFuZEVuZE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9z
aW5nVGV4dE5vZGUoZW5kKSAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5l
ck5vZGUoKTsKICAgICAgICAgYm9vbCBpc1N0YXJ0QW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1l
Tm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFw
aCkgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmNvbnRh
aW5lck5vZGUoKTsKIApAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kOjpyYW5nZUZvclAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChSZW5kZXJTdHls
ZSogZW5kU3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoZW5kKSkgeworICAg
IGlmIChhdXRvKiBlbmRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShlbmQp
KSB7CiAgICAgICAgIGJvb2wgaXNFbmRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlID0g
cmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKG1fZW5kT2ZMYXN0UGFyYWdyYXBoKSAmJiBl
bmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBtX2VuZE9mTGFzdFBhcmFncmFwaC5kZXByZWNhdGVkTm9k
ZSgpOwogICAgICAgICAvLyBJbmNsdWRlIFxuIGF0IHRoZSBlbmQgb2YgbGluZSBpZiB3ZSdyZSBh
dCBhbiBlbXB0eSBwYXJhZ3JhcGgKICAgICAgICAgaWYgKGVuZFN0eWxlLT5wcmVzZXJ2ZU5ld2xp
bmUoKSAmJiBzdGFydCA9PSBlbmQgJiYgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDwgZW5k
LmNvbnRhaW5lck5vZGUoKS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHsKQEAgLTI1OCw3ICsyNTgs
NyBAQCBWaXNpYmxlUG9zaXRpb24gQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kCiB7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZE9mTmV4dFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGVuZE9mQ3Vy
cmVudFBhcmFncmFwaC5uZXh0KCkpOwogICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kT2ZOZXh0
UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVu
ZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHBvc2l0aW9uKTsKKyAgICBhdXRvKiBzdHlsZSA9
IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShwb3NpdGlvbik7CiAgICAgaWYgKCFzdHls
ZSkKICAgICAgICAgcmV0dXJuIGVuZE9mTmV4dFBhcmFncmFwaDsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29t
bWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHByb3RlY3RlZDoKIHByaXZh
dGU6CiAgICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZvcm1h
dFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgY29uc3Qg
UG9zaXRpb24mIGVuZE9mU2VsZWN0aW9uLCBSZWZQdHI8RWxlbWVudD4mKSA9IDA7Ci0gICAgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYp
OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUo
Y29uc3QgUG9zaXRpb24mKTsKICAgICB2b2lkIHJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5nVGV4
dE5vZGVzSWZOZWVkZWQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgUG9zaXRpb24mLCBQb3NpdGlv
biYpOwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZk5leHRQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0
Tm9kZXNJZk5lZWRlZChWaXNpYmxlUG9zaXRpb24mLCBQb3NpdGlvbiYsIFBvc2l0aW9uJik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjppbml0KE5vZGUq
IG5vZGUsIFByb3AKICAgICB9CiAKICAgICBpZiAobm9kZSAmJiBub2RlLT5jb21wdXRlZFN0eWxl
KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gbm9kZS0+Y29tcHV0ZWRT
dHlsZSgpOworICAgICAgICBhdXRvKiByZW5kZXJTdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUo
KTsKICAgICAgICAgcmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChyZW5kZXJT
dHlsZSk7CiAgICAgICAgIGlmIChyZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29y
ZFNpemUoKSkKICAgICAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBjb21wdXRlZFN0eWxlQXRQb3NpdGlvbi5nZXRGb250U2l6ZUNTU1ZhbHVl
UHJlZmVycmluZ0tleXdvcmQoKS0+Y3NzVGV4dCgpKTsKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lk
IEVkaXRpbmdTdHlsZTo6aW5pdChOb2RlKiBub2RlLCBQcm9wCiAgICAgZXh0cmFjdEZvbnRTaXpl
RGVsdGEoKTsKIH0KIAotdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVRleHRGaWxsQW5kU3Ryb2tl
Q29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKQordm9pZCBFZGl0aW5nU3R5
bGU6OnJlbW92ZVRleHRGaWxsQW5kU3Ryb2tlQ29sb3JzSWZOZWVkZWQoY29uc3QgUmVuZGVyU3R5
bGUqIHJlbmRlclN0eWxlKQogewogICAgIC8vIElmIGEgbm9kZSdzIHRleHQgZmlsbCBjb2xvciBp
cyBpbnZhbGlkLCB0aGVuIGl0cyBjaGlsZHJlbiB1c2UgCiAgICAgLy8gdGhlaXIgZm9udC1jb2xv
ciBhcyB0aGVpciB0ZXh0IGZpbGwgY29sb3IgKHRoZXkgZG9uJ3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3
IEBAIHByaXZhdGU6CiAgICAgRWRpdGluZ1N0eWxlKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOwogICAgIEVkaXRpbmdTdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZUlEKTsK
ICAgICB2b2lkIGluaXQoTm9kZSosIFByb3BlcnRpZXNUb0luY2x1ZGUpOwotICAgIHZvaWQgcmVt
b3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSopOworICAgIHZv
aWQgcmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChjb25zdCBSZW5kZXJTdHls
ZSopOwogICAgIHZvaWQgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAgICAgdm9pZCBleHRyYWN0Rm9udFNpemVE
ZWx0YSgpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHls
ZShUJiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDggKzQz
MCw4IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gd2ViQ29udGVudEZy
b21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWlu
VGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KEZyYW1lKiAsIE5vZGUgKiZub2RlVG9SZW1vdmUpOwotICAgIHZvaWQgZ2V0VGV4dERlY29yYXRp
b25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKFJlbmRlclN0eWxlJiwgTlNNdXRhYmxl
RGljdGlvbmFyeSopIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVt
b3ZlKTsKKyAgICB2b2lkIGdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3RpbmdUeXBp
bmdTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIE5TTXV0YWJsZURpY3Rpb25hcnkqKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9uKGJvb2wmKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZvbnRBdHRyaWJ1dGVzRm9y
U2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RyaW5n
U2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
aW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5
KCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgTm9kZSogc3RhcnRp
bmdOb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICBSZW5kZXJTdHlsZSogc3RhcnRp
bmdTdHlsZSA9IHN0YXJ0aW5nTm9kZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgYXV0byogc3Rh
cnRpbmdTdHlsZSA9IHN0YXJ0aW5nTm9kZS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgaWYgKCFz
dGFydGluZ1N0eWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIE5vZGUqIGN1cnJl
bnROb2RlID0gc3RhcnRpbmdOb2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9FZGl0b3JDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0VkaXRvckNvY29hLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZJWE1FOiBUaGlzIGZpZ3VyZXMgb3V0IHRo
ZSBjdXJyZW50IHN0eWxlIGJ5IGluc2VydGluZyBhIDxzcGFuPiEKLVJlbmRlclN0eWxlKiBFZGl0
b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoRnJhbWUqIGZyYW1lLCBOb2RlICombm9kZVRvUmVt
b3ZlKQorY29uc3QgUmVuZGVyU3R5bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChG
cmFtZSogZnJhbWUsIE5vZGUgKiZub2RlVG9SZW1vdmUpCiB7CiAgICAgbm9kZVRvUmVtb3ZlID0g
bnVsbHB0cjsKICAgICAKQEAgLTc2LDcgKzc2LDcgQEAgUmVuZGVyU3R5bGUqIEVkaXRvcjo6c3R5
bGVGb3JTZWxlY3Rpb25TdAogICAgIHJldHVybiBzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCkgPyAm
c3R5bGVFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKIH0KIAotdm9pZCBF
ZGl0b3I6OmdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3RpbmdUeXBpbmdTdHlsZShS
ZW5kZXJTdHlsZSYgc3R5bGUsIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCkgY29uc3QKK3Zv
aWQgRWRpdG9yOjpnZXRUZXh0RGVjb3JhdGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQp
IGNvbnN0CiB7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAgICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGlu
Z1N0eWxlLT5zdHlsZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9F
ZGl0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsNyBAQCBjb25zdCBGb250
KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vCiAKICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9k
ZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5bGUgPSBz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5v
ZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAg
ICAgIGlmIChzdHlsZSkgewpAQCAtMjIwLDcgKzIyMCw3IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6
Zm9udEZvclNlbGVjdGlvbihib28KIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRl
c0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwg
bm9kZVRvUmVtb3ZlKTsKKyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQo
Jm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgY29uc3QgRm9udCogRWRpdG9yOjpm
b250Rm9yU2VsZWN0aW9uKGJvbwogCiAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7
IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisgICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxl
Y3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUK
IAogICAgICAgICBjb25zdCBGb250KiByZXN1bHQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5
bGUpIHsKQEAgLTE0Niw3ICsxNDYsNyBAQCBjb25zdCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxl
Y3Rpb24oYm9vCiBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rp
b25TdGFydCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92
ZSk7CisgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBu
b2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBTdHJpbmcgSFRNTFRpdGxlRWxlbWVudDo6dGV4dCgp
IGNvbnN0CiBTdHJpbmdXaXRoRGlyZWN0aW9uIEhUTUxUaXRsZUVsZW1lbnQ6OmNvbXB1dGVkVGV4
dFdpdGhEaXJlY3Rpb24oKQogewogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSOwot
ICAgIGlmIChSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IHRoaXMtPmNvbXB1dGVkU3R5bGUo
KSkKKyAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9IHRoaXMtPmNvbXB1dGVkU3R5bGUoKSkK
ICAgICAgICAgZGlyZWN0aW9uID0gY29tcHV0ZWRTdHlsZS0+ZGlyZWN0aW9uKCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIGF1dG8gc3R5bGUgPSBzdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50
KCp0aGlzLCBwYXJlbnRFbGVtZW50KCkgPyBwYXJlbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCkg
OiBudWxscHRyKS5yZW5kZXJTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHkKICAgICB1cGRhdGUoc2VsZWN0b3IpOwogfQogCi1p
bmxpbmUgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eTo6aW5pdGlhbGl6
ZShGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKQoraW5s
aW5lIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6OmluaXRpYWxpemUo
Rm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3IsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkK
IHsKICAgICAvLyBCZXdhcmUhIG1fZm9udC5mb250U2VsZWN0b3IoKSBtaWdodCBub3QgcG9pbnQg
dG8gZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkhCiAgICAgQVNTRVJUKG5ld1N0eWxlLmZvbnRDYXNj
YWRlKCkuZm9udFNlbGVjdG9yKCkgPT0gJmZvbnRTZWxlY3Rvcik7CkBAIC0yMTk2LDcgKzIxOTYs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgRG9jdW1l
bnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCk7CiAgICAgZG9jdW1lbnQudXBkYXRl
U3R5bGVJZk5lZWRlZCgpOwogCi0gICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0g
Y2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKKyAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9
IGNhbnZhcygpLT5jb21wdXRlZFN0eWxlKCkpCiAgICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVz
Y3JpcHRpb24oY29tcHV0ZWRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOwogICAgIGVsc2Ugewog
ICAgICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGRlZmF1bHRGb250RGVzY3JpcHRpb247CkBA
IC0yMjU5LDkgKzIyNTksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VGV4
dEJhCiAgICAgbW9kaWZpYWJsZVN0YXRlKCkudGV4dEJhc2VsaW5lID0gYmFzZWxpbmU7CiB9CiAK
LWlubGluZSBUZXh0RGlyZWN0aW9uIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9UZXh0RGly
ZWN0aW9uKERpcmVjdGlvbiBkaXJlY3Rpb24sIFJlbmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSkg
Y29uc3QKK2lubGluZSBUZXh0RGlyZWN0aW9uIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9U
ZXh0RGlyZWN0aW9uKERpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiogY29t
cHV0ZWRTdHlsZSkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAoY29tcHV0ZWRT
dHlsZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJbmhlcml0KSA/IGNhbnZhcygpLT5jb21w
dXRlZFN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8qIHN0eWxlID0gKGNvbXB1dGVkU3R5bGUg
fHwgZGlyZWN0aW9uID09IERpcmVjdGlvbjo6SW5oZXJpdCkgPyBjYW52YXMoKS0+Y29tcHV0ZWRT
dHlsZSgpIDogbnVsbHB0cjsKICAgICBpZiAoY29tcHV0ZWRTdHlsZSkKICAgICAgICAgKmNvbXB1
dGVkU3R5bGUgPSBzdHlsZTsKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewpAQCAtMjM4NCw3ICsy
Mzg0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogCiAgICAg
Ly8gRklYTUU6IE5lZWQgdG8gdHVybiBvZmYgZm9udCBzbW9vdGhpbmcuCiAKLSAgICBSZW5kZXJT
dHlsZSogY29tcHV0ZWRTdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHls
ZTsKICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHRvVGV4dERpcmVjdGlvbihzdGF0ZSgp
LmRpcmVjdGlvbiwgJmNvbXB1dGVkU3R5bGUpOwogICAgIGJvb2wgaXNSVEwgPSBkaXJlY3Rpb24g
PT0gUlRMOwogICAgIGJvb2wgb3ZlcnJpZGUgPSBjb21wdXRlZFN0eWxlID8gaXNPdmVycmlkZShj
b21wdXRlZFN0eWxlLT51bmljb2RlQmlkaSgpKSA6IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNyArMjU1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgRm9udFByb3h5JiBvcGVyYXRvcj0oY29uc3QgRm9udFByb3h5Jik7CiAKICAg
ICAgICAgYm9vbCByZWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5mb250U2VsZWN0b3Io
KTsgfQotICAgICAgICB2b2lkIGluaXRpYWxpemUoRm9udFNlbGVjdG9yJiwgUmVuZGVyU3R5bGUm
KTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplKEZvbnRTZWxlY3RvciYsIGNvbnN0IFJlbmRlclN0
eWxlJik7CiAgICAgICAgIEZvbnRNZXRyaWNzIGZvbnRNZXRyaWNzKCkgY29uc3Q7CiAgICAgICAg
IGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0Owog
ICAgICAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJikgY29uc3Q7CkBAIC0zODIsNyArMzgy
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsgfQotICAgIFRleHREaXJlY3Rpb24g
dG9UZXh0RGlyZWN0aW9uKERpcmVjdGlvbiwgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxlID0g
bnVsbHB0cikgY29uc3Q7CisgICAgVGV4dERpcmVjdGlvbiB0b1RleHREaXJlY3Rpb24oRGlyZWN0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5bGUgPSBudWxscHRyKSBjb25zdDsK
IAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgSFRNTFJlc291cmNl
UHJlbG9hZGVyOjpwcmVsb2FkKFByZWwKICAgICAgICAgcHJlbG9hZChXVEZNb3ZlKHJlcXVlc3Qp
KTsKIH0KIAotc3RhdGljIGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKEZyYW1lKiBmcmFtZSwg
UmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQor
c3RhdGljIGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKEZyYW1lKiBmcmFtZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQogewog
ICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYVF1ZXJpZXMgPSBNZWRpYVF1ZXJ5U2V0Ojpj
cmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KGF0dHJpYnV0ZVZhbHVlKTsKICAgICBNZWRp
YVF1ZXJ5RXZhbHVhdG9yIG1lZGlhUXVlcnlFdmFsdWF0b3IoInNjcmVlbiIsIGZyYW1lLCByZW5k
ZXJTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRl
clRodW1iRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDIx
ICs4MywyMSBAQCBSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIoU2xpCiB7CiB9
CiAKLXZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UoUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKQordm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZShj
b25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgaWYgKHBhcmVudFN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBzdHlsZSgpLnNldEFw
cGVhcmFuY2UoU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOworICAgICAgICBtdXRhYmxlU3R5bGUo
KS5zZXRBcHBlYXJhbmNlKFNsaWRlclRodW1iVmVydGljYWxQYXJ0KTsKICAgICBlbHNlIGlmIChw
YXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KQotICAgICAg
ICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCk7CisgICAg
ICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFy
dCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRl
clBhcnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYVNsaWRlclRodW1iUGFy
dCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFTbGlkZXJUaHVt
YlBhcnQpOwogICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFW
b2x1bWVTbGlkZXJQYXJ0KQotICAgICAgICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFWb2x1
bWVTbGlkZXJUaHVtYlBhcnQpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5zZXRBcHBlYXJhbmNl
KE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+
YXBwZWFyYW5jZSgpID09IE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAg
IHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYlBh
cnQpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhRnVsbFNjcmVl
blZvbHVtZVNsaWRlclRodW1iUGFydCk7CiAgICAgaWYgKHN0eWxlKCkuaGFzQXBwZWFyYW5jZSgp
KSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgICAgICB0aGVtZSgpLmFkanVzdFNs
aWRlclRodW1iU2l6ZShzdHlsZSgpLCBlbGVtZW50KCkpOworICAgICAgICB0aGVtZSgpLmFkanVz
dFNsaWRlclRodW1iU2l6ZShtdXRhYmxlU3R5bGUoKSwgZWxlbWVudCgpKTsKICAgICB9CiB9CiAK
QEAgLTE1OSwxMyArMTU5LDEzIEBAIHZvaWQgUmVuZGVyU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQo
KQogICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CiAgICAgYXV0byYgaW5wdXQg
PSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCgpLT5zaGFkb3dIb3N0KCkpOwog
ICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGhhc1ZlcnRpY2FsQXBwZWFyYW5jZShpbnB1dCk7Ci0gICAg
c3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVydGljYWwgPyBGbG93Q29sdW1uIDogRmxvd1Jv
dyk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0RmxleERpcmVjdGlvbihpc1ZlcnRpY2FsID8gRmxv
d0NvbHVtbiA6IEZsb3dSb3cpOwogICAgIFRleHREaXJlY3Rpb24gb2xkVGV4dERpcmVjdGlvbiA9
IHN0eWxlKCkuZGlyZWN0aW9uKCk7CiAgICAgaWYgKGlzVmVydGljYWwpIHsKICAgICAgICAgLy8g
RklYTUU6IFdvcmsgYXJvdW5kIHJvdW5kaW5nIGlzc3VlcyBpbiBSVEwgdmVydGljYWwgc2xpZGVy
cy4gV2Ugd2FudCB0aGVtIHRvCiAgICAgICAgIC8vIHJlbmRlciBpZGVudGljYWxseSB0byBMVFIg
dmVydGljYWwgc2xpZGVycy4gV2UgY2FuIHJlbW92ZSB0aGlzIHdvcmsgYXJvdW5kIHdoZW4KICAg
ICAgICAgLy8gc3VicGl4ZWwgcmVuZGVyaW5nIGlzIGVuYWJsZWQgb24gYWxsIHBvcnRzLgotICAg
ICAgICBzdHlsZSgpLnNldERpcmVjdGlvbihMVFIpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5z
ZXREaXJlY3Rpb24oTFRSKTsKICAgICB9CiAKICAgICBSZW5kZXJCb3gqIHRodW1iID0gaW5wdXQu
c2xpZGVyVGh1bWJFbGVtZW50KCkgPyBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVuZGVy
Qm94KCkgOiBudWxscHRyOwpAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyQ29u
dGFpbmVyOjpsYXlvdXQoKQogCiAgICAgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dCgpOwogCi0g
ICAgc3R5bGUoKS5zZXREaXJlY3Rpb24ob2xkVGV4dERpcmVjdGlvbik7CisgICAgbXV0YWJsZVN0
eWxlKCkuc2V0RGlyZWN0aW9uKG9sZFRleHREaXJlY3Rpb24pOwogICAgIC8vIFRoZXNlIHNob3Vs
ZCBhbHdheXMgZXhpc3QsIHVubGVzcyBzb21lb25lIG11dGF0ZXMgdGhlIHNoYWRvdyBET00gKGUu
Zy4sIGluIHRoZSBpbnNwZWN0b3IpLgogICAgIGlmICghdGh1bWIgfHwgIXRyYWNrKQogICAgICAg
ICByZXR1cm47CkBAIC01NzQsNyArNTc0LDcgQEAgSFRNTElucHV0RWxlbWVudCogU2xpZGVyVGh1
bWJFbGVtZW50OjpobwogICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihzaGFk
b3dIb3N0KCkpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFNsaWRlclRodW1iRWxlbWVu
dDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqIGhvc3RTdHls
ZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVyVGh1bWJFbGVtZW50OjpyZXNvbHZlQ3Vz
dG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogaG9zdFN0eWxl
KQogewogICAgIC8vIFRoaXMgZG9lc24ndCBhY3R1YWxseSBjb21wdXRlIHN0eWxlLiBUaGlzIGlz
IGp1c3QgYSBoYWNrIHRvIHBpY2sgc2hhZG93IHBzZXVkbyBpZCB3aGVuIGhvc3Qgc3R5bGUgaXMg
a25vd24uCiAKQEAgLTYyOCw3ICs2MjgsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gU2xp
ZGVyQ29udGFpbmVyCiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNsaWRlckNvbnRh
aW5lcj4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVudFN0eWxl
PiBTbGlkZXJDb250YWluZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUm
LCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlkZXJD
b250YWluZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQogewogICAgIC8vIFRoaXMgZG9lc24ndCBhY3R1
YWxseSBjb21wdXRlIHN0eWxlLiBUaGlzIGlzIGp1c3QgYSBoYWNrIHRvIHBpY2sgc2hhZG93IHBz
ZXVkbyBpZCB3aGVuIGhvc3Qgc3R5bGUgaXMga25vd24uCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgdm9pZCB3
aWxsRGV0YWNoUmVuZGVyZXJzKCkgb3ZlcnJpZGU7CiAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5
bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKikgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOwogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQg
c3RhcnREcmFnZ2luZygpOwpAQCAtMTIwLDcgKzEyMCw3IEBAIGlubGluZSBSZWY8U2xpZGVyVGh1
bWJFbGVtZW50PiBTbGlkZXJUaHUKIGNsYXNzIFJlbmRlclNsaWRlclRodW1iIGZpbmFsIDogcHVi
bGljIFJlbmRlckJsb2NrRmxvdyB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU2xpZGVyVGh1bWIoU2xp
ZGVyVGh1bWJFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7Ci0gICAgdm9pZCB1cGRhdGVBcHBlYXJh
bmNlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVBcHBlYXJhbmNl
KGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBp
c1NsaWRlclRodW1iKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMzUsNyArMTM1LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBTbGlkZXJDb250YWluZXJFbGVtZW50KERvY3VtZW50Jik7CiAgICAg
UmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHls
ZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxF
bGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxl
Kikgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOwogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIEF0b21pY1N0cmluZyBtX3NoYWRvd1BzZXVkb0lkOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIFJlZjxU
ZXh0Q29udHJvbElubmVyRWxlbWVudD4gVGV4dENvbnRyb2wKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBUZXh0Q29udHJvbElubmVyRWxlbWVudChkb2N1bWVudCkpOwogfQogCi1PcHRpb25hbDxF
bGVtZW50U3R5bGU+IFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUo
UmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxl
bWVudFN0eWxlPiBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKIHsK
ICAgICBhdXRvIGlubmVyQ29udGFpbmVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCk7
CiAgICAgaW5uZXJDb250YWluZXJTdHlsZS0+aW5oZXJpdEZyb20oc2hhZG93SG9zdFN0eWxlKTsK
QEAgLTEzNCw3ICsxMzQsNyBAQCBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sqIFRleHRDb250
cm9sCiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jaz4oSFRN
TERpdkVsZW1lbnQ6OnJlbmRlcmVyKCkpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFRl
eHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxl
JiwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQogewogICAgIGF1
dG8gc3R5bGUgPSBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKnNoYWRvd0hv
c3QoKSkuY3JlYXRlSW5uZXJUZXh0U3R5bGUoKnNoYWRvd0hvc3RTdHlsZSk7CiAgICAgcmV0dXJu
IEVsZW1lbnRTdHlsZShzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclN0eWxlPihXVEZNb3ZlKHN0eWxl
KSkpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpU
ZXh0Q29udHIKICAgICBzZXRIYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKTsKIH0KIAot
T3B0aW9uYWw8RWxlbWVudFN0eWxlPiBUZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6cmVz
b2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNo
YWRvd0hvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xQbGFjZWhv
bGRlckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCiB7CiAgICAgYXV0byBz
dHlsZSA9IHJlc29sdmVTdHlsZSgmcGFyZW50U3R5bGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
CiBwcm90ZWN0ZWQ6CiAgICAgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLSAg
ICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoRG9jdW1lbnQmKTsKICAgICBSZW5k
ZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYs
IGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVu
dFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKICAgICBib29s
IGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAg
IGJvb2wgaXNUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiB9OwpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50KERvY3VtZW50Jik7CiAgICAgCi0gICAgT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OwogfTsKIAogY2xhc3MgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1
YmxpYyBIVE1MRGl2RWxlbWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODEsNyArMTM4MSw3IEBAIE9wdGlvbmFsQ3Vyc29y
IEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc28KICAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdl
OwogCiAgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gcmVuZGVyZXIgPyAmcmVuZGVyZXItPnN0eWxlKCkgOiBudWxscHRyOworICAg
IGF1dG8qIHN0eWxlID0gcmVuZGVyZXIgPyAmcmVuZGVyZXItPnN0eWxlKCkgOiBudWxscHRyOwog
ICAgIGJvb2wgaG9yaXpvbnRhbFRleHQgPSAhc3R5bGUgfHwgc3R5bGUtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCk7CiAgICAgY29uc3QgQ3Vyc29yJiBpQmVhbSA9IGhvcml6b250YWxUZXh0ID8g
aUJlYW1DdXJzb3IoKSA6IHZlcnRpY2FsVGV4dEN1cnNvcigpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBzdGF0aWMgaW5saW5lIGRvdWJsZSBz
b2x2ZVN0ZXBzRnVuY3Rpb24oCiAgICAgcmV0dXJuIGZsb29yKG51bVN0ZXBzICogdCkgLyBudW1T
dGVwczsKIH0KIAotQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShBbmltYXRpb24mIGFuaW1h
dGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9z
aXRlQW5pbWF0aW9uKQorQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRp
b24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcG9zaXRlQW5pbWF0aW9uKQogICAgIDogbV9vYmplY3QocmVuZGVyZXIpCiAgICAgLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbihjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBtX2FuaW1hdGlv
bihhbmltYXRpb24pCisgICAgLCBtX2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFu
aW1hdGlvbikpCiB7CiAgICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgZHVyYXRpb24KICAgICBpZiAo
bV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMgUmVmQ291
bnRlZDwKICAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb247CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQW5pbWF0aW9uQmFzZShBbmltYXRpb24m
IHRyYW5zaXRpb24sIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qKTsKKyAgICBB
bmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCos
IENvbXBvc2l0ZUFuaW1hdGlvbiopOwogICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKSB7IH0K
IAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7
IH0KQEAgLTEzOCw3ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHByb2dyZXNzKGRvdWJs
ZSBzY2FsZSA9IDEsIGRvdWJsZSBvZmZzZXQgPSAwLCBjb25zdCBUaW1pbmdGdW5jdGlvbiogPSBu
dWxscHRyKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIHN0
YXRlIGNoYW5nZWQuCi0gICAgdmlydHVhbCBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9u
KiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBS
ZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSovLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRlKENvbXBv
c2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogLypjdXJy
ZW50U3R5bGUqLywgY29uc3QgUmVuZGVyU3R5bGUqIC8qdGFyZ2V0U3R5bGUqLywgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0eWxlKi8pID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFu
aW1hdGVkU3R5bGUqLykgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGNvbXB1dGVFeHRlbnRPZlRy
YW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3QgPSAwOwpAQCAtMTUwLDcgKzE1MCw3
IEBAIHB1YmxpYzoKICAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mKSBj
b25zdDsKIAogICAgIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb247IH0KLSAgICB2b2lkIHNldEFuaW1hdGlvbihBbmltYXRpb24mIGFuaW1hdGlv
bikgeyBtX2FuaW1hdGlvbiA9IGFuaW1hdGlvbjsgfQorICAgIHZvaWQgc2V0QW5pbWF0aW9uKGNv
bnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7IG1fYW5pbWF0aW9uID0gY29uc3RfY2FzdDxBbmlt
YXRpb24mPihhbmltYXRpb24pOyB9CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGFuaW1h
dGlvbiBpcyBvdmVycmlkZGVuLiBUaGlzIHdpbGwgb25seSBiZSB0aGUgY2FzZSBmb3IKICAgICAv
LyBJbXBsaWNpdEFuaW1hdGlvbnMgYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Ig
bm90IHdlIHNob3VsZCBmb3JjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OTMsOSArNTkzLDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVy
OjpjYW5jZWxBbmltYXRpbwogICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5
bnRoZXRpY1N0eWxlQ2hhbmdlKTsKIH0KIAotYm9vbCBBbmltYXRpb25Db250cm9sbGVyOjp1cGRh
dGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSYgbmV3U3R5
bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCitib29sIEFu
aW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSByZW5k
ZXJlci5oYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmcmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7
CisgICAgYXV0byogb2xkU3R5bGUgPSByZW5kZXJlci5oYXNJbml0aWFsaXplZFN0eWxlKCkgPyAm
cmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKCghb2xkU3R5bGUgfHwgKCFvbGRT
dHlsZS0+YW5pbWF0aW9ucygpICYmICFvbGRTdHlsZS0+dHJhbnNpdGlvbnMoKSkpICYmICghbmV3
U3R5bGUuYW5pbWF0aW9ucygpICYmICFuZXdTdHlsZS50cmFuc2l0aW9ucygpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIH5BbmltYXRpb25Db250cm9sbGVyKCk7
CiAKICAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYpOwotICAgIGJvb2wg
dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKKyAgICBib29sIHVw
ZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHls
ZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVu
ZGVyRWxlbWVudCYpOwogCiAgICAgLy8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBl
eHRlbnQgb2YgYW55IHRyYW5zZm9ybSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgIH0KIH0K
IAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKIHsKICAgICAvLyBJZiBjdXJyZW50U3R5bGUg
aXMgbnVsbCBvciB0aGVyZSBhcmUgbm8gb2xkIG9yIG5ldyB0cmFuc2l0aW9ucywganVzdCBza2lw
IGl0CiAgICAgaWYgKCFjdXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMo
KSAmJiBtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkpCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAvLyBDaGVjayB0byBzZWUgaWYg
d2UgbmVlZCB0byB1cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwogICAgIGlmICh0YXJnZXRT
dHlsZS0+dHJhbnNpdGlvbnMoKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRh
cmdldFN0eWxlLT50cmFuc2l0aW9ucygpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQW5p
bWF0aW9uJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9u
KGkpOworICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRp
b25zKCktPmFuaW1hdGlvbihpKTsKICAgICAgICAgICAgIGJvb2wgaXNBY3RpdmVUcmFuc2l0aW9u
ID0gIW1fc3VzcGVuZGVkICYmIChhbmltYXRpb24uZHVyYXRpb24oKSB8fCBhbmltYXRpb24uZGVs
YXkoKSA+IDApOwogCiAgICAgICAgICAgICBBbmltYXRpb246OkFuaW1hdGlvbk1vZGUgbW9kZSA9
IGFuaW1hdGlvbi5hbmltYXRpb25Nb2RlKCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgICAgICAgICAgICAgIC8vIGFuZCB3
ZSBoYXZlIHRvIHVzZSB0aGUgdW5hbmltYXRlZFN0eWxlIGZyb20gdGhlIGFuaW1hdGlvbi4gV2Ug
ZG8gdGhlIHRlc3QKICAgICAgICAgICAgICAgICAvLyBhZ2FpbnN0IHRoZSB1bmFuaW1hdGVkIHN0
eWxlIGhlcmUsIGJ1dCB3ZSAib3ZlcnJpZGUiIHRoZSB0cmFuc2l0aW9uIGxhdGVyLgogICAgICAg
ICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gZ2V0QW5p
bWF0aW9uRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGZy
b21TdHlsZSA9IGtleWZyYW1lQW5pbSA/IGtleWZyYW1lQW5pbS0+dW5hbmltYXRlZFN0eWxlKCkg
OiBjdXJyZW50U3R5bGU7CisgICAgICAgICAgICAgICAgYXV0byogZnJvbVN0eWxlID0ga2V5ZnJh
bWVBbmltID8ga2V5ZnJhbWVBbmltLT51bmFuaW1hdGVkU3R5bGUoKSA6IGN1cnJlbnRTdHlsZTsK
IAogICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgdHJhbnNpdGlv
biBmb3IgdGhpcyBwcm9wCiAgICAgICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxB
bmltID0gbV90cmFuc2l0aW9ucy5nZXQocHJvcCk7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgICAgICBtX3RyYW5zaXRpb25z
LnJlbW92ZShwcm9wZXJ0eVRvUmVtb3ZlKTsKIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246
OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQordm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRhcmdldFN0eWxlKQogewogICAgIC8vIE5vdGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2
ZSBhbnkgYW5pbWF0aW9ucywgYW5kIGRpZG4ndCBoYXZlIGFueSBiZWZvcmUKICAgICBpZiAobV9r
ZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpICYmICF0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9u
cygpKQpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVL
ZXlmcmFtZUEKICAgICBpZiAodGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSkgewogICAgICAgICBp
bnQgbnVtQW5pbXMgPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5zaXplKCk7CiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkgewotICAgICAgICAgICAgQW5pbWF0
aW9uJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7
CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygp
LT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgYW5pbWF0aW9uTmFtZShh
bmltYXRpb24ubmFtZSgpKTsKIAogICAgICAgICAgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFu
aW1hdGlvbigpKQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1
cGRhdGVLZXlmcmFtZUEKICAgICBzdGQ6OnN3YXAobmV3QW5pbWF0aW9ucywgbV9rZXlmcmFtZUFu
aW1hdGlvbnMpOwogfQogCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUm
IHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUp
Citib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRh
cmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpCiB7
CiAgICAgLy8gV2UgZG9uJ3QgZG8gYW55IHRyYW5zaXRpb25zIGlmIHdlIGRvbid0IGhhdmUgYSBj
dXJyZW50U3R5bGUgKG9uIHN0YXJ0dXApLgogICAgIHVwZGF0ZVRyYW5zaXRpb25zKCZyZW5kZXJl
ciwgY3VycmVudFN0eWxlLCAmdGFyZ2V0U3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lk
IGNsZWFyUmVuZGVyZXIoKTsKIAotICAgIGJvb2wgYW5pbWF0ZShSZW5kZXJFbGVtZW50JiwgUmVu
ZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpOworICAgIGJvb2wgYW5pbWF0ZShS
ZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVu
ZGVkU3R5bGUpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRT
dHlsZSgpIGNvbnN0OwogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9u
KExheW91dFJlY3QmKSBjb25zdDsKIApAQCAtODgsOCArODgsOCBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIENvbXBvc2l0ZUFuaW1hdGlvbihBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYpOwog
Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiwgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0
ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRp
b25zKFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmlt
YXRpb25zKFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwogICAgIAogICAgIHR5cGVkZWYgSGFzaE1h
cDxpbnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4+IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8S2V5ZnJh
bWVBbmltYXRpb24+PiBBbmltYXRpb25OYW1lTWFwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9uKEFuaW1hdGlvbiYgdHJh
bnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCog
cmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIFJlbmRlclN0eWxlKiBmcm9t
U3R5bGUpCitJbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0
aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJF
bGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGZyb21TdHlsZSkKICAgICA6IEFuaW1hdGlvbkJhc2UodHJhbnNpdGlvbiwgcmVu
ZGVyZXIsIGNvbXBBbmltKQogICAgICwgbV9mcm9tU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCpmcm9tU3R5bGUpKQogICAgICwgbV90cmFuc2l0aW9uUHJvcGVydHkodHJhbnNpdGlvbi5wcm9w
ZXJ0eSgpKQpAQCAtNjAsNyArNjAsNyBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzaG91bGRT
ZW5kRXZlbnRGCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlw
ZShpbkxpc3RlbmVyVHlwZSk7CiB9CiAKLWJvb2wgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUo
Q29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwg
UmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBh
bmltYXRlZFN0eWxlKQorYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVB
bmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5k
ZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpCiB7CiAgICAgLy8gSWYgd2UgZ2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9u
IGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBjbGVhbmluZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5p
bWF0aW9uLgogICAgIC8vIFNvIGp1c3QgcmV0dXJuLiBFdmVyeXRoaW5nIGlzIGFscmVhZHkgYWxs
IGNsZWFuZWQgdXAuCkBAIC0yMDUsNyArMjA1LDcgQEAgYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6
c2VuZFRyYW5zaXRpb25FdgogICAgIHJldHVybiBmYWxzZTsgLy8gRGlkbid0IGRpc3BhdGNoIGFu
IGV2ZW50CiB9CiAKLXZvaWQgSW1wbGljaXRBbmltYXRpb246OnJlc2V0KFJlbmRlclN0eWxlKiB0
bykKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlKiB0bykK
IHsKICAgICBBU1NFUlQodG8pOwogICAgIEFTU0VSVChtX2Zyb21TdHlsZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0
QW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgUmVuZGVy
RWxlbWVudDsKIC8vIGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgogY2xhc3MgSW1wbGljaXRB
bmltYXRpb24gOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBDU1NQcm9w
ZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9z
aXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUp
CisgICAgc3RhdGljIFJlZjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlv
biYgYW5pbWF0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBJbXBsaWNpdEFuaW1hdGlvbihhbmltYXRpb24sIGFuaW1hdGluZ1Byb3BlcnR5LCBy
ZW5kZXJlciwgY29tcG9zaXRlQW5pbWF0aW9uLCBmcm9tU3R5bGUpKTsKICAgICB9OwpAQCAtNTQs
OSArNTQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgdGltZU9m
ZnNldCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRBbmltYXRpb24oKSBvdmVycmlkZTsKIAotICAg
IGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKKyAgICBi
b29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFu
aW1hdGVkU3R5bGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXNldChSZW5kZXJTdHls
ZSogdG8pOworICAgIHZvaWQgcmVzZXQoY29uc3QgUmVuZGVyU3R5bGUqIHRvKTsKIAogICAgIGJv
b2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCBv
dmVycmlkZTsKIApAQCAtODcsNyArODcsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0
ZToKLSAgICBJbXBsaWNpdEFuaW1hdGlvbihBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBSZW5k
ZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyU3R5bGUqKTsKKyAgICBJbXBs
aWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBSZW5kZXJFbGVt
ZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0
dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpOwogCiAgICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3
ZSBhcmUgYmxlbmRpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LZXlmcmFtZUFu
aW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRpb24oQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwg
UmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKK0tleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFt
ZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVu
ZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZShhbmltYXRpb24s
IHJlbmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgLCBtX2tleWZyYW1lcyhhbmltYXRp
b24ubmFtZSgpKQogICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCp1bmFuaW1hdGVkU3R5bGUpKQpAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OmZldGNoSW50ZXJ2YWxFbmQKICAgICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNl
dCwgcHJldktleWZyYW1lLnRpbWluZ0Z1bmN0aW9uKG5hbWUoKSkpOwogfQogCi1ib29sIEtleWZy
YW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0
aW9uLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCiti
b29sIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9z
aXRlQW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBS
ZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFu
aW1hdGVkU3R5bGUpCiB7CiAgICAgLy8gRmlyZSB0aGUgc3RhcnQgdGltZW91dCBpZiBuZWVkZWQK
ICAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQwLDEyIEBAIGNsYXNzIFJlbmRlclN0eWxlOwog
Ly8gQSBLZXlmcmFtZUFuaW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGFuIGV4cGxpY2l0IGFu
aW1hdGlvbiBmb3IgYSBzaW5nbGUgUmVuZGVyRWxlbWVudC4KIGNsYXNzIEtleWZyYW1lQW5pbWF0
aW9uIGZpbmFsIDogcHVibGljIEFuaW1hdGlvbkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8S2V5ZnJhbWVBbmltYXRpb24+IGNyZWF0ZShBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9u
LCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorICAgIHN0YXRpYyBSZWY8S2V5ZnJhbWVB
bmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCByZW5kZXJlciwgY29tcG9z
aXRlQW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKICAgICB9CiAKLSAgICBib29sIGFuaW1h
dGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxl
KiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBhbmltYXRl
KENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSog
Y3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZ2V0
QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+Jikgb3ZlcnJpZGU7CiAK
ICAgICBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC04OCw3ICs4OCw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBw
cml2YXRlOgotICAgIEtleWZyYW1lQW5pbWF0aW9uKEFuaW1hdGlvbiYsIFJlbmRlckVsZW1lbnQq
LCBDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKTsKKyAg
ICBLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgQ29t
cG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSk7CiAg
ICAgdmlydHVhbCB+S2V5ZnJhbWVBbmltYXRpb24oKTsKICAgICAKICAgICAvLyBHZXQgdGhlIHN0
eWxlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IHN1cnJvdW5kaW5nIHRoZSBjdXJyZW50IGFuaW1h
dGlvbiB0aW1lIGFuZCB0aGUgcHJvZ3Jlc3MgYmV0d2VlbiB0aGVtLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIFJlbmRlck5hbWVkRmxvd1Ro
cmVhZCYgRmxvd1RocmVhZENvbnRyb2wKIAogdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6c3R5
bGVEaWRDaGFuZ2UoKQogewotICAgIFJlbmRlclN0eWxlJiB2aWV3U3R5bGUgPSBtX3ZpZXctPnN0
eWxlKCk7CisgICAgYXV0byYgdmlld1N0eWxlID0gbV92aWV3LT5zdHlsZSgpOwogICAgIGZvciAo
YXV0byYgZmxvd1JlbmRlcmVyIDogKm1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCkKICAgICAg
ICAgZmxvd1JlbmRlcmVyLT5zZXRTdHlsZShSZW5kZXJGbG93VGhyZWFkOjpjcmVhdGVGbG93VGhy
ZWFkU3R5bGUoJnZpZXdTdHlsZSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI4LDcgKzEz
MjgsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmNvbnN0cmFpblRvTGluZVRvcEFuCiBzdGF0aWMg
TGF5b3V0UmVjdCBjbGlwUmVjdEZvck5pbmVQaWVjZUltYWdlU3RyaXAoSW5saW5lRmxvd0JveCog
Ym94LCBjb25zdCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UsIGNvbnN0IExheW91dFJlY3QmIHBhaW50
UmVjdCkKIHsKICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0KHBhaW50UmVjdCk7Ci0gICAgUmVuZGVy
U3R5bGUmIHN0eWxlID0gYm94LT5yZW5kZXJlcigpLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUg
PSBib3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKICAgICBMYXlvdXRCb3hFeHRlbnQgb3V0c2V0cyA9
IHN0eWxlLmltYWdlT3V0c2V0cyhpbWFnZSk7CiAgICAgaWYgKGJveC0+aXNIb3Jpem9udGFsKCkp
IHsKICAgICAgICAgY2xpcFJlY3Quc2V0WShwYWludFJlY3QueSgpIC0gb3V0c2V0cy50b3AoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4Nyw3ICsyODcsNyBAQCBzdGF0aWMgYm9vbCBib3JkZXJPclBhZGRp
bmdMb2dpY2FsV2lkdGhDCiAKIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7Ci0gICAgUmVu
ZGVyU3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBuZXdTdHlsZSA9IHN0eWxl
KCk7CiAKICAgICBib29sIGhhZFRyYW5zZm9ybSA9IGhhc1RyYW5zZm9ybSgpOwogICAgIGJvb2wg
Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja0ludmFsaWRhdGVkID0gZmFsc2U7CkBAIC0yODM3LDcg
KzI4MzcsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KGJvb2wgCiAgICAg
ICAgIHJldHVybiBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxp
bmVQb3NpdGlvbk1vZGUpOwogCiAgICAgaWYgKGZpcnN0TGluZSAmJiB2aWV3KCkudXNlc0ZpcnN0
TGluZVJ1bGVzKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUmIHMgPSBmaXJzdExpbmUgPyBmaXJz
dExpbmVTdHlsZSgpIDogc3R5bGUoKTsKKyAgICAgICAgYXV0byYgcyA9IGZpcnN0TGluZSA/IGZp
cnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwogICAgICAgICBpZiAoJnMgIT0gJnN0eWxlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gcy5jb21wdXRlZExpbmVIZWlnaHQoKTsKICAgICB9CkBAIC0yOTc2
LDkgKzI5NzYsOSBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJsb2NrCiAg
ICAgcmV0dXJuIGZpcnN0TGluZUJsb2NrOwogfQogCi1zdGF0aWMgUmVuZGVyU3R5bGUmIHN0eWxl
Rm9yRmlyc3RMZXR0ZXIoUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2Jq
ZWN0KiBmaXJzdExldHRlckNvbnRhaW5lcikKK3N0YXRpYyBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGVGb3JGaXJzdExldHRlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJP
YmplY3QqIGZpcnN0TGV0dGVyQ29udGFpbmVyKQogewotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9T
dHlsZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRF
UiwgJmZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgpKTsKKyAgICBhdXRvKiBw
c2V1ZG9TdHlsZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldE11dGFibGVDYWNoZWRQc2V1ZG9TdHls
ZShGSVJTVF9MRVRURVIsICZmaXJzdExldHRlckNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSk7
CiAgICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpbml0aWFsIGxldHRlciBkcm9wIHRoYXQgaXMg
Pj0gMSwgdGhlbiB3ZSBuZWVkIHRvIGZvcmNlIGZsb2F0aW5nIHRvIGJlIG9uLgogICAgIGlmIChw
c2V1ZG9TdHlsZS0+aW5pdGlhbExldHRlckRyb3AoKSA+PSAxICYmICFwc2V1ZG9TdHlsZS0+aXNG
bG9hdGluZygpKQpAQCAtMzA2MSw3ICszMDYxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRl
Rmlyc3RMZXR0ZXJTdHlsZQogewogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyID0gY3Vy
cmVudENoaWxkLT5wYXJlbnQoKTsKICAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckNvbnRh
aW5lciA9IGZpcnN0TGV0dGVyLT5wYXJlbnQoKTsKLSAgICBSZW5kZXJTdHlsZSYgcHNldWRvU3R5
bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVyQ29u
dGFpbmVyKTsKKyAgICBhdXRvJiBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmly
c3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwogICAgIEFTU0VSVChmaXJzdExl
dHRlci0+aXNGbG9hdGluZygpIHx8IGZpcnN0TGV0dGVyLT5pc0lubGluZSgpKTsKIAogICAgIGlm
IChTdHlsZTo6ZGV0ZXJtaW5lQ2hhbmdlKGZpcnN0TGV0dGVyLT5zdHlsZSgpLCBwc2V1ZG9TdHls
ZSkgPT0gU3R5bGU6OkRldGFjaCkgewpAQCAtMzEwMiw3ICszMTAyLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6dXBkYXRlRmlyc3RMZXR0ZXJTdHlsZQogdm9pZCBSZW5kZXJCbG9jazo6Y3JlYXRlRmly
c3RMZXR0ZXJSZW5kZXJlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJU
ZXh0KiBjdXJyZW50VGV4dENoaWxkKQogewogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVy
Q29udGFpbmVyID0gY3VycmVudFRleHRDaGlsZC0+cGFyZW50KCk7Ci0gICAgUmVuZGVyU3R5bGUm
IHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJzdExldHRlckJsb2NrLCBmaXJz
dExldHRlckNvbnRhaW5lcik7CisgICAgYXV0byYgcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0
TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKICAgICBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogZmlyc3RMZXR0ZXIgPSBudWxscHRyOwogICAgIGlmIChwc2V1ZG9T
dHlsZS5kaXNwbGF5KCkgPT0gSU5MSU5FKQogICAgICAgICBmaXJzdExldHRlciA9IG5ldyBSZW5k
ZXJJbmxpbmUoZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNsb25lKHBzZXVkb1N0eWxlKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MTUsNyArMTYxNSw3IEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2tGbG93OjphZGp1c3RCbG9ja0MKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0
aWMgaW5saW5lIExheW91dFVuaXQgY2FsY3VsYXRlTWluaW11bVBhZ2VIZWlnaHQoUmVuZGVyU3R5
bGUmIHJlbmRlclN0eWxlLCBSb290SW5saW5lQm94JiBsYXN0TGluZSwgTGF5b3V0VW5pdCBsaW5l
VG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgY2Fs
Y3VsYXRlTWluaW11bVBhZ2VIZWlnaHQoY29uc3QgUmVuZGVyU3R5bGUmIHJlbmRlclN0eWxlLCBS
b290SW5saW5lQm94JiBsYXN0TGluZSwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxp
bmVCb3R0b20pCiB7CiAgICAgLy8gV2UgbWF5IHJlcXVpcmUgYSBjZXJ0YWluIG1pbmltdW0gbnVt
YmVyIG9mIGxpbmVzIHBlciBwYWdlIGluIG9yZGVyIHRvIHNhdGlzZnkKICAgICAvLyBvcnBoYW5z
IGFuZCB3aWRvd3MsIGFuZCB0aGF0IG1heSBhZmZlY3QgdGhlIG1pbmltdW0gcGFnZSBoZWlnaHQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmCiAgICAgaWYgKGlzRG9jRWxlbWVudFJlbmRlcmVyIHx8IGlzQm9keVJlbmRlcmVy
KSB7CiAgICAgICAgIC8vIFByb3BhZ2F0ZSB0aGUgbmV3IHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0
aW9uIHVwIHRvIHRoZSBSZW5kZXJWaWV3LgogICAgICAgICBhdXRvKiBkb2N1bWVudEVsZW1lbnRS
ZW5kZXJlciA9IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCk7Ci0gICAg
ICAgIFJlbmRlclN0eWxlJiB2aWV3U3R5bGUgPSB2aWV3KCkuc3R5bGUoKTsKKyAgICAgICAgYXV0
byYgdmlld1N0eWxlID0gdmlldygpLm11dGFibGVTdHlsZSgpOwogICAgICAgICBib29sIHZpZXdD
aGFuZ2VkV3JpdGluZ01vZGUgPSBmYWxzZTsKICAgICAgICAgYm9vbCByb290U3R5bGVDaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgICAgIGJvb2wgdmlld1N0eWxlQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMzkz
LDcgKzM5Myw3IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYKICAg
ICAgICAgICAgIHZpZXdTdHlsZS5zZXREaXJlY3Rpb24obmV3U3R5bGUuZGlyZWN0aW9uKCkpOwog
ICAgICAgICAgICAgdmlld1N0eWxlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBpZiAoaXNC
b2R5UmVuZGVyZXIpIHsKLSAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPnN0eWxlKCkuc2V0
RGlyZWN0aW9uKG5ld1N0eWxlLmRpcmVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICByb290UmVu
ZGVyZXItPm11dGFibGVTdHlsZSgpLnNldERpcmVjdGlvbihuZXdTdHlsZS5kaXJlY3Rpb24oKSk7
CiAgICAgICAgICAgICAgICAgcm9vdFN0eWxlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKQEAgLTQw
Nyw3ICs0MDcsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmCiAg
ICAgICAgICAgICB2aWV3KCkubWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgp
OwogICAgICAgICAgICAgaWYgKGlzQm9keVJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgcm9v
dFN0eWxlQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5zdHls
ZSgpLnNldFdyaXRpbmdNb2RlKG5ld1N0eWxlLndyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAg
ICAgIHJvb3RSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0V3JpdGluZ01vZGUobmV3U3R5bGUu
d3JpdGluZ01vZGUoKSk7CiAgICAgICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5zZXRIb3Jpem9u
dGFsV3JpdGluZ01vZGUobmV3U3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMo
KTsKQEAgLTQzMiw4ICs0MzIsOCBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmCiAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgdGhlIGJvZHkgZm9udCBiYWNrIHVwIHRv
IHRoZSBSZW5kZXJWaWV3IGFuZCB1c2UgaXQgYXMKICAgICAgICAgICAgIC8vIHRoZSBiYXNpcyBv
ZiB0aGUgZ3JpZC4KICAgICAgICAgICAgIGlmIChuZXdTdHlsZS5mb250RGVzY3JpcHRpb24oKSAh
PSB2aWV3KCkuc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKSkgewotICAgICAgICAgICAgICAgIHZp
ZXcoKS5zdHlsZSgpLnNldEZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5mb250RGVzY3JpcHRpb24o
KSk7Ci0gICAgICAgICAgICAgICAgdmlldygpLnN0eWxlKCkuZm9udENhc2NhZGUoKS51cGRhdGUo
JmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgICAgIHZpZXcoKS5tdXRh
YmxlU3R5bGUoKS5zZXRGb250RGVzY3JpcHRpb24obmV3U3R5bGUuZm9udERlc2NyaXB0aW9uKCkp
OworICAgICAgICAgICAgICAgIHZpZXcoKS5tdXRhYmxlU3R5bGUoKS5mb250Q2FzY2FkZSgpLnVw
ZGF0ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIApAQCAtNjgwLDcgKzY4MCw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb25zdHJhaW5D
b250ZW50Qm8KIAogUm91bmRlZFJlY3Q6OlJhZGlpIFJlbmRlckJveDo6Ym9yZGVyUmFkaWkoKSBj
b25zdAogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CisgICAgYXV0
byYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogICAgIExheW91dFJlY3QgYm91bmRzID0gZnJhbWVS
ZWN0KCk7CiAKICAgICB1bnNpZ25lZCBib3JkZXJMZWZ0ID0gc3R5bGUuYm9yZGVyTGVmdFdpZHRo
KCk7CkBAIC00ODE0LDcgKzQ4MTQsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyQm94OjplbmNsb3Np
bmdGbG9hdFBhCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQm94
Ojpsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxWaXN1YWxPdmVy
Zmxvd1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNv
bnN0CiB7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFn
YXRpb24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCkBAIC00ODIyLDcgKzQ4MjIsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6
bG9naWNhbFZpc3VhbE92ZXJmCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91dFJlY3QgUmVu
ZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0
Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewog
ICAgIC8vIElmIHRoZSB3cml0aW5nIG1vZGVzIG9mIHRoZSBjaGlsZCBhbmQgcGFyZW50IG1hdGNo
LCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gCiAgICAgLy8gZG8gYW55dGhpbmcgZmFuY3kuIEp1c3Qg
cmV0dXJuIHRoZSByZXN1bHQuCkBAIC00ODQwLDcgKzQ4NDAsNyBAQCBMYXlvdXRSZWN0IFJlbmRl
ckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91dFJl
Y3QgUmVuZGVyQm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2lj
YWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gbGF5b3V0T3ZlcmZsb3dS
ZWN0Rm9yUHJvcGFnYXRpb24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC00ODQ4LDcgKzQ4NDgsNyBAQCBMYXlvdXRSZWN0
IFJlbmRlckJveDo6bG9naWNhbExheW91dE92ZXJmCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxh
eW91dFJlY3QgUmVuZGVyQm94OjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6bGF5b3V0
T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KSBjb25zdAogewogICAgIC8vIE9ubHkgcHJvcGFnYXRlIGludGVyaW9yIGxheW91dCBvdmVyZmxv
dyBpZiB3ZSBkb24ndCBjbGlwIGl0LgogICAgIExheW91dFJlY3QgcmVjdCA9IGJvcmRlckJveFJl
Y3QoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtNTYzLDEwICs1NjMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgYXBwbHlUb3BM
ZWZ0TG9jYXRpb25PZmZzZXRXaXRoRmxpcHBpbmcocG9pbnQpOwogICAgIH0KIAotICAgIExheW91
dFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxl
KikgY29uc3Q7Ci0gICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlv
bihSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIExheW91dFJlY3QgbG9naWNhbExheW91dE92ZXJm
bG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTGF5b3V0UmVj
dCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0Owor
ICAgIExheW91dFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNv
bnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJl
Y3QgbG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0
eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdh
dGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgYm9vbCBoYXNSZW5kZXJPdmVy
ZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3c7IH0gICAgCiAgICAgYm9vbCBoYXNWaXN1
YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgJiYgIWJvcmRlckJveFJlY3Qo
KS5jb250YWlucyhtX292ZXJmbG93LT52aXN1YWxPdmVyZmxvd1JlY3QoKSk7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgxLDcgKzU4MSw3IEBAIFJvdW5kZWRS
ZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpiYWNrZ3IKICAgICByZXR1cm4gZ2V0QmFja2dyb3Vu
ZFJvdW5kZWRSZWN0KGJvcmRlclJlY3QsIGJveCwgYm94U2l6ZS53aWR0aCgpLCBib3hTaXplLmhl
aWdodCgpLCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7
CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyB2b2lkIGFwcGx5Qm94
U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSkKIHsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBib3hTaGFkb3cgPSBzdHls
ZS0+Ym94U2hhZG93KCk7CiAgICAgd2hpbGUgKGJveFNoYWRvdy0+c3R5bGUoKSAhPSBOb3JtYWwp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkocmV2aXNp
b24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBSZW5kZXJCdXR0b246OmFkZENo
aWxkKFJlbmRlck9iamVjdAogICAgICAgICAvLyBDcmVhdGUgYW4gYW5vbnltb3VzIGJsb2NrLgog
ICAgICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7CiAgICAgICAgIG1faW5uZXIgPSBjcmVhdGVB
bm9ueW1vdXNCbG9jayhzdHlsZSgpLmRpc3BsYXkoKSk7Ci0gICAgICAgIHNldHVwSW5uZXJTdHls
ZSgmbV9pbm5lci0+c3R5bGUoKSk7CisgICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5lci0+
bXV0YWJsZVN0eWxlKCkpOwogICAgICAgICBSZW5kZXJGbGV4aWJsZUJveDo6YWRkQ2hpbGQobV9p
bm5lcik7CiAgICAgfQogICAgIApAQCAtOTcsOSArOTcsOSBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6
c3R5bGVXaWxsQ2hhbmdlKFN0eWxlCiAgICAgICAgIC8vIGl0IHJpZ2h0IGJlbG93LiBIZXJlIHdl
IGNoYW5nZSBpdCBiYWNrIHRvIDAgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBo
aW50CiAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVuY2UuIFNhbWUgZ29lcyBmb3Ig
dGhlIG90aGVyIHByb3BlcnRpZXMuCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgaGFjayB1
bm5lY2Vzc2FyeS4KLSAgICAgICAgbV9pbm5lci0+c3R5bGUoKS5zZXRGbGV4R3JvdyhuZXdTdHls
ZS5pbml0aWFsRmxleEdyb3coKSk7Ci0gICAgICAgIG1faW5uZXItPnN0eWxlKCkuc2V0TWFyZ2lu
VG9wKG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7Ci0gICAgICAgIG1faW5uZXItPnN0eWxlKCku
c2V0TWFyZ2luQm90dG9tKG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7CisgICAgICAgIG1faW5u
ZXItPm11dGFibGVTdHlsZSgpLnNldEZsZXhHcm93KG5ld1N0eWxlLmluaXRpYWxGbGV4R3Jvdygp
KTsKKyAgICAgICAgbV9pbm5lci0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9wKG5ld1N0eWxl
LmluaXRpYWxNYXJnaW4oKSk7CisgICAgICAgIG1faW5uZXItPm11dGFibGVTdHlsZSgpLnNldE1h
cmdpbkJvdHRvbShuZXdTdHlsZS5pbml0aWFsTWFyZ2luKCkpOwogICAgIH0KICAgICBSZW5kZXJC
bG9jazo6c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5ld1N0eWxlKTsKIH0KQEAgLTEwOSw3ICsxMDks
NyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiAgICAgUmVuZGVy
QmxvY2s6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKIAogICAgIGlmIChtX2lubmVy
KSAvLyBSZW5kZXJCbG9jayBoYW5kbGVkIHVwZGF0aW5nIHRoZSBhbm9ueW1vdXMgYmxvY2sncyBz
dHlsZS4KLSAgICAgICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5zdHlsZSgpKTsKKyAgICAg
ICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5tdXRhYmxlU3R5bGUoKSk7CiB9CiAKIHZvaWQg
UmVuZGVyQnV0dG9uOjpzZXR1cElubmVyU3R5bGUoUmVuZGVyU3R5bGUqIGlubmVyU3R5bGUpIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJl
Y2F0ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjUsNyArMTY1LDcgQEAgc3RhdGljIExheW91dFVuaXQgY29udGVudEhlaWdodEZvckNo
aWxkKAogCiB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6c3R5bGVXaWxsQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCiB7Ci0g
ICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxl
KCkgOiBudWxscHRyOworICAgIGF1dG8qIG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgp
ID8gJnN0eWxlKCkgOiBudWxscHRyOwogICAgIGlmIChvbGRTdHlsZSAmJiAhb2xkU3R5bGUtPmxp
bmVDbGFtcCgpLmlzTm9uZSgpICYmIG5ld1N0eWxlLmxpbmVDbGFtcCgpLmlzTm9uZSgpKQogICAg
ICAgICBjbGVhckxpbmVDbGFtcCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxMSArMjA1
LDYgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFJlbmRlckVsZW1lbnQ6OgogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1lbnVtIFN0eWxlQ2FjaGVTdGF0ZSB7Ci0gICAgQ2FjaGVkLAotICAg
IFVuY2FjaGVkCi19OwotCiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVsZW1l
bnQ6OnVuY2FjaGVkRmlyc3RMaW5lU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewog
ICAgIGlmICghdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKQpAQCAtMjIxLDE0ICsyMTYsMTQg
QEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZQogICAgICAgICBpZiAo
UmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5m
aXJzdExpbmVCbG9jaygpKQogICAgICAgICAgICAgcmV0dXJuIGZpcnN0TGluZUJsb2NrLT5nZXRV
bmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChGSVJTVF9MSU5FKSwgc3R5bGUs
IGZpcnN0TGluZUJsb2NrID09IHRoaXMgPyBzdHlsZSA6IG51bGxwdHIpOwogICAgIH0gZWxzZSBp
ZiAoIXJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuaXNBbm9ueW1vdXMoKSAmJiByZW5kZXJlckZv
ckZpcnN0TGluZVN0eWxlLmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUm
IHBhcmVudFN0eWxlID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+Zmlyc3RM
aW5lU3R5bGUoKTsKKyAgICAgICAgYXV0byYgcGFyZW50U3R5bGUgPSByZW5kZXJlckZvckZpcnN0
TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBpZiAoJnBhcmVu
dFN0eWxlICE9ICZyZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5zdHlsZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuZ2V0VW5jYWNoZWRQ
c2V1ZG9TdHlsZShQc2V1ZG9TdHlsZVJlcXVlc3QoRklSU1RfTElORV9JTkhFUklURUQpLCAmcGFy
ZW50U3R5bGUsIHN0eWxlKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJlbmRl
clN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIGNvbnN0Citjb25z
dCBSZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6Y2FjaGVkRmlyc3RMaW5lU3R5bGUoKSBjb25z
dAogewogICAgIEFTU0VSVCh2aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpOwogCkBAIC0yMzgs
MTAgKzIzMywxMCBAQCBSZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6Y2FjaGVkRmlyc3RMCiAg
ICAgICAgIGlmIChSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2sgPSByZW5kZXJlckZvckZpcnN0
TGluZVN0eWxlLmZpcnN0TGluZUJsb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMaW5l
QmxvY2stPmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xJTkUsICZzdHlsZSgpKTsKICAgICB9
IGVsc2UgaWYgKCFyZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmlzQW5vbnltb3VzKCkgJiYgcmVu
ZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgIFJlbmRl
clN0eWxlJiBwYXJlbnRTdHlsZSA9IHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCkt
PmZpcnN0TGluZVN0eWxlKCk7CisgICAgICAgIGF1dG8mIHBhcmVudFN0eWxlID0gcmVuZGVyZXJG
b3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKICAgICAgICAgaWYg
KCZwYXJlbnRTdHlsZSAhPSAmcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+c3R5
bGUoKSkgewogICAgICAgICAgICAgLy8gQSBmaXJzdC1saW5lIHN0eWxlIGlzIGluIGVmZmVjdC4g
Q2FjaGUgYSBmaXJzdC1saW5lIHN0eWxlIGZvciBvdXJzZWx2ZXMuCi0gICAgICAgICAgICByZW5k
ZXJlckZvckZpcnN0TGluZVN0eWxlLnN0eWxlKCkuc2V0SGFzUHNldWRvU3R5bGUoRklSU1RfTElO
RV9JTkhFUklURUQpOworICAgICAgICAgICAgcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5tX3N0
eWxlLnNldEhhc1BzZXVkb1N0eWxlKEZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKICAgICAgICAgICAg
IHJldHVybiByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmdldENhY2hlZFBzZXVkb1N0eWxlKEZJ
UlNUX0xJTkVfSU5IRVJJVEVELCAmcGFyZW50U3R5bGUpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MjQ5LDcgKzI0NCw3IEBAIFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdEwK
ICAgICByZXR1cm4gJnN0eWxlKCk7CiB9CiAKLVJlbmRlclN0eWxlJiBSZW5kZXJFbGVtZW50Ojpm
aXJzdExpbmVTdHlsZSgpIGNvbnN0Citjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyRWxlbWVudDo6
Zmlyc3RMaW5lU3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiB2aWV3KCkudXNlc0ZpcnN0TGlu
ZVJ1bGVzKCkgPyAqY2FjaGVkRmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7CiB9CkBAIC04MDYs
NyArODAxLDcgQEAgc3RhdGljIGlubGluZSBib29sIHJlbmRlcmVySGFzQmFja2dyb3VuZAogCiB2
b2lkIFJlbmRlckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRTdHls
ZSA9IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZzdHlsZSgpIDogbnVsbHB0cjsKKyAgICBhdXRv
KiBvbGRTdHlsZSA9IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZzdHlsZSgpIDogbnVsbHB0cjsK
ICAgICBpZiAob2xkU3R5bGUpIHsKICAgICAgICAgLy8gSWYgb3VyIHotaW5kZXggY2hhbmdlcyB2
YWx1ZSBvciBvdXIgdmlzaWJpbGl0eSBjaGFuZ2VzLAogICAgICAgICAvLyB3ZSBuZWVkIHRvIGRp
cnR5IG91ciBzdGFja2luZyBjb250ZXh0J3Mgei1vcmRlciBsaXN0LgpAQCAtMTUzNSw3ICsxNTMw
LDIyIEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6YWRkQ29udHJvbFN0YXRlc0ZvclIKICAgICBjb250
cm9sU3RhdGVzUmVuZGVyZXJNYXAoKS5hZGQobywgc3RhdGVzKTsKIH0KIAotUmVuZGVyU3R5bGUq
IFJlbmRlckVsZW1lbnQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIFJlbmRlckVs
ZW1lbnQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywgY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAoreworICAgIGlmIChwc2V1ZG8gPCBGSVJTVF9JTlRF
Uk5BTF9QU0VVRE9JRCAmJiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG8pKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlbmRlclN0eWxlKiBjYWNoZWRTdHlsZSA9IHN0eWxl
KCkuZ2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvKTsKKyAgICBpZiAoY2FjaGVkU3R5bGUpCisg
ICAgICAgIHJldHVybiBjYWNoZWRTdHlsZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gcmVzdWx0ID0gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9TdHlsZVJlcXVlc3Qo
cHNldWRvKSwgcGFyZW50U3R5bGUpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBj
b25zdF9jYXN0PFJlbmRlclN0eWxlJj4obV9zdHlsZSkuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RG
TW92ZShyZXN1bHQpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUmVuZGVyU3R5bGUqIFJl
bmRlckVsZW1lbnQ6OmdldE11dGFibGVDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8s
IGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAocHNldWRvIDwgRklS
U1RfSU5URVJOQUxfUFNFVURPSUQgJiYgIXN0eWxlKCkuaGFzUHNldWRvU3R5bGUocHNldWRvKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNTQ2LDExICsxNTU2LDExIEBAIFJlbmRlclN0
eWxlKiBSZW5kZXJFbGVtZW50OjpnZXRDYWNoZWRQc2UKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gcmVzdWx0ID0gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9TdHlsZVJl
cXVlc3QocHNldWRvKSwgcGFyZW50U3R5bGUpOwogICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHJl
dHVybiBzdHlsZSgpLmFkZENhY2hlZFBzZXVkb1N0eWxlKFdURk1vdmUocmVzdWx0KSk7CisgICAg
ICAgIHJldHVybiBtX3N0eWxlLmFkZENhY2hlZFBzZXVkb1N0eWxlKFdURk1vdmUocmVzdWx0KSk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
UmVuZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJl
cXVlc3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSZW5k
ZXJTdHlsZSogb3duU3R5bGUpIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJl
bmRlckVsZW1lbnQ6OmdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1
ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIG93blN0eWxlKSBjb25zdAogewogICAgIGlmIChwc2V1ZG9TdHls
ZVJlcXVlc3QucHNldWRvSWQgPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCAmJiAhb3duU3R5bGUg
JiYgIXN0eWxlKCkuaGFzUHNldWRvU3R5bGUocHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDY2LDcgKzIwNzYsNyBAQCB2b2lkIFJlbmRl
ckVsZW1lbnQ6OnBhaW50T3V0bGluZShQYWludEluCiAgICAgaWYgKCFoYXNPdXRsaW5lKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsK
KyAgICBhdXRvJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICBmbG9hdCBvdXRsaW5lV2lkdGgg
PSBmbG9vclRvRGV2aWNlUGl4ZWwoc3R5bGVUb1VzZS5vdXRsaW5lV2lkdGgoKSwgZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICBmbG9hdCBvdXRsaW5lT2Zmc2V0ID0gZmxvb3JU
b0RldmljZVBpeGVsKHN0eWxlVG9Vc2Uub3V0bGluZU9mZnNldCgpLCBkb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDEwIEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaGFzSW5pdGlhbGl6ZWRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSW5p
dGlhbGl6ZWRTdHlsZTsgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1
cm4gY29uc3RfY2FzdDxSZW5kZXJTdHlsZSY+KG1fc3R5bGUpOyB9Ci0gICAgUmVuZGVyU3R5bGUm
IGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlJiBmaXJzdExp
bmVTdHlsZSgpIGNvbnN0OworCisgICAgUmVuZGVyU3R5bGUmIG11dGFibGVTdHlsZSgpIHsgcmV0
dXJuIG1fc3R5bGU7IH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0eWxlKCk7CiAKQEAgLTUyLDgg
KzU0LDkgQEAgcHVibGljOgogCiAgICAgLy8gVGhlIHBzZXVkbyBlbGVtZW50IHN0eWxlIGNhbiBi
ZSBjYWNoZWQgb3IgdW5jYWNoZWQuICBVc2UgdGhlIGNhY2hlZCBtZXRob2QgaWYgdGhlIHBzZXVk
byBlbGVtZW50IGRvZXNuJ3QgcmVzcGVjdAogICAgIC8vIGFueSBwc2V1ZG8gY2xhc3NlcyAoYW5k
IHRoZXJlZm9yZSBoYXMgbm8gY29uY2VwdCBvZiBjaGFuZ2luZyBzdGF0ZSkuCi0gICAgUmVuZGVy
U3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBudWxscHRyKSBjb25zdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0ciwgUmVuZGVyU3R5bGUqIG93blN0eWxlID0gbnVs
bHB0cikgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxl
KFBzZXVkb0lkLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKSBjb25z
dDsKKyAgICBSZW5kZXJTdHlsZSogZ2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lk
LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRv
U3R5bGVSZXF1ZXN0JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0ciwg
Y29uc3QgUmVuZGVyU3R5bGUqIG93blN0eWxlID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICAvLyBU
aGlzIGlzIG51bGwgZm9yIGFub255bW91cyByZW5kZXJlcnMuCiAgICAgRWxlbWVudCogZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6bm9kZSgp
KTsgfQpAQCAtMjk4LDcgKzMwMSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFN0eWxlRGlm
ZmVyZW5jZSBhZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlLCB1bnNpZ25lZCBj
b250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcykgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUqIGNhY2hl
ZEZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNhY2hlZEZp
cnN0TGluZVN0eWxlKCkgY29uc3Q7CiAKICAgICB2b2lkIG5ld0ltYWdlQW5pbWF0aW9uRnJhbWVB
dmFpbGFibGUoQ2FjaGVkSW1hZ2UmKSBmaW5hbDsKIApAQCAtNDUwLDE0ICs0NTMsMTQgQEAgaW5s
aW5lIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1JlbmRlcklubGluZQogICAgIHJldHVybiBpczxSZW5k
ZXJFbGVtZW50PigqdGhpcykgJiYgZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpLmlzUmVu
ZGVySW5saW5lKCk7CiB9CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpzdHls
ZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUmIFJlbmRlck9iamVjdDo6c3R5bGUo
KSBjb25zdAogewogICAgIGlmIChpc1RleHQoKSkKICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5z
dHlsZSgpOwogICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykuc3R5bGUo
KTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxlJiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZVN0eWxl
KCkgY29uc3QKK2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpmaXJzdExp
bmVTdHlsZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4dCgpKQogICAgICAgICByZXR1cm4gbV9w
YXJlbnQtPmZpcnN0TGluZVN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyMiw4ICs1MjIsOCBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpsYXlv
dXQoKQogICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksICp0aGlz
LCBsb2NhdGlvbk9mZnNldCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwg
c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKICAgICAKICAgICBjaGlsZEJv
eC5zZXRMb2NhdGlvbihMYXlvdXRQb2ludChib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSArIExh
eW91dFNpemUocGFkZGluZ0xlZnQoKSwgcGFkZGluZ1RvcCgpKSk7Ci0gICAgY2hpbGRCb3guc3R5
bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgY2hp
bGRCb3guc3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwor
ICAgIGNoaWxkQm94Lm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWln
aHQoKSwgRml4ZWQpKTsKKyAgICBjaGlsZEJveC5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5n
dGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwogICAgIGNoaWxkQm94LnNldE5lZWRzTGF5b3V0
KE1hcmtPbmx5VGhpcyk7CiAgICAgY2hpbGRCb3gubGF5b3V0KCk7CiAgICAgY2xlYXJDaGlsZE5l
ZWRzTGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1Ro
cmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAg
UmVuZGVyRmxvd1RocmVhZDo6UmVuZGVyRmxvd1RocmVhZChEb2N1bQogICAgIHNldEZsb3dUaHJl
YWRTdGF0ZShJbnNpZGVPdXRPZkZsb3dUaHJlYWQpOwogfQogCi1SZW5kZXJTdHlsZSBSZW5kZXJG
bG93VGhyZWFkOjpjcmVhdGVGbG93VGhyZWFkU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KQorUmVuZGVyU3R5bGUgUmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRlRmxvd1RocmVhZFN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBhdXRvIG5ld1N0eWxlID0gUmVu
ZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgIG5ld1N0eWxlLmluaGVyaXRGcm9tKHBhcmVudFN0eWxl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dU
aHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgLy8g
Q2FsbGVkIHdoZW4gYSBkZXNjZW5kYW50IGJveCdzIGxheW91dCBpcyBmaW5pc2hlZCBhbmQgaXQg
aGFzIGJlZW4gcG9zaXRpb25lZCB3aXRoaW4gaXRzIGNvbnRhaW5lci4KICAgICB2aXJ0dWFsIHZv
aWQgZmxvd1RocmVhZERlc2NlbmRhbnRCb3hMYWlkT3V0KFJlbmRlckJveCopIHsgfQogCi0gICAg
c3RhdGljIFJlbmRlclN0eWxlIGNyZWF0ZUZsb3dUaHJlYWRTdHlsZShSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpOworICAgIHN0YXRpYyBSZW5kZXJTdHlsZSBjcmVhdGVGbG93VGhyZWFkU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRl
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlz
aW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcxNiw4ICs3MTYsOCBAQCB2b2lkIFJlbmRlckltYWdlOjpsYXlv
dXRTaGFkb3dDb250cm9scyhjCiAKICAgICBpZiAoc2hhZG93Q29udHJvbHNOZWVkQ3VzdG9tTGF5
b3V0TWV0cmljcygpKSB7CiAgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldExvY2F0aW9uKExh
eW91dFBvaW50KGJvcmRlckxlZnQoKSwgYm9yZGVyVG9wKCkpICsgTGF5b3V0U2l6ZShwYWRkaW5n
TGVmdCgpLCBwYWRkaW5nVG9wKCkpKTsKLSAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c3R5bGUo
KS5zZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgICAgIGNv
bnRyb2xzUmVuZGVyZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKG5ld1NpemUud2lkdGgoKSwg
Rml4ZWQpKTsKKyAgICAgICAgY29udHJvbHNSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0SGVp
Z2h0KExlbmd0aChuZXdTaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgICAgICBjb250cm9sc1Jl
bmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBG
aXhlZCkpOwogICAgIH0KIAogICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1h
cmtPbmx5VGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIFJlbmRl
cklubGluZTo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiAgICAgLy8gZS5nLiwgPGZvbnQ+Zm9vIDxo
ND5nb288L2g0PiBtb288L2ZvbnQ+LiAgVGhlIDxmb250PiBpbmxpbmVzIGJlZm9yZQogICAgIC8v
IGFuZCBhZnRlciB0aGUgYmxvY2sgc2hhcmUgdGhlIHNhbWUgc3R5bGUsIGJ1dCB0aGUgYmxvY2sg
ZG9lc24ndAogICAgIC8vIG5lZWQgdG8gcGFzcyBpdHMgc3R5bGUgb24gdG8gYW55b25lIGVsc2Uu
Ci0gICAgUmVuZGVyU3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBuZXdTdHls
ZSA9IHN0eWxlKCk7CiAgICAgUmVuZGVySW5saW5lKiBjb250aW51YXRpb24gPSBpbmxpbmVFbGVt
ZW50Q29udGludWF0aW9uKCk7CiAgICAgaWYgKGNvbnRpbnVhdGlvbikgewogICAgICAgICBmb3Ig
KFJlbmRlcklubGluZSogY3VyckNvbnQgPSBjb250aW51YXRpb247IGN1cnJDb250OyBjdXJyQ29u
dCA9IGN1cnJDb250LT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpIHsKQEAgLTIyMCw3ICsy
MjAsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgaWYg
KGFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSAmcGFyZW50KCktPnN0eWxlKCk7CisgICAgYXV0byogcGFyZW50
U3R5bGUgPSAmcGFyZW50KCktPnN0eWxlKCk7CiAgICAgUmVuZGVySW5saW5lKiBwYXJlbnRSZW5k
ZXJJbmxpbmUgPSBpczxSZW5kZXJJbmxpbmU+KCpwYXJlbnQoKSkgPyBkb3duY2FzdDxSZW5kZXJJ
bmxpbmU+KHBhcmVudCgpKSA6IG51bGxwdHI7CiAgICAgYm9vbCBjaGVja0ZvbnRzID0gZG9jdW1l
bnQoKS5pbk5vUXVpcmtzTW9kZSgpOwogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQg
PSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBS
ZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbgogICAgIGlmICghYWx3YXlzQ3JlYXRl
TGluZUJveGVzICYmIGNoZWNrRm9udHMgJiYgdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKSB7
CiAgICAgICAgIC8vIEhhdmUgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5bGUgYXMgd2VsbC4K
ICAgICAgICAgcGFyZW50U3R5bGUgPSAmcGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7Ci0gICAg
ICAgIFJlbmRlclN0eWxlJiBjaGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAg
YXV0byYgY2hpbGRTdHlsZSA9IGZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGFsd2F5c0NyZWF0
ZUxpbmVCb3hlcyA9ICFwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhh
c0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUo
KS5mb250TWV0cmljcygpKQogICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWdu
KCkgIT0gQkFTRUxJTkUKICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkg
IT0gY2hpbGRTdHlsZS5saW5lSGVpZ2h0KCk7CkBAIC0xNjAxLDcgKzE2MDEsNyBAQCB2b2lkIFJl
bmRlcklubGluZTo6cGFpbnRPdXRsaW5lKFBhaW50SW5mCiAgICAgaWYgKCFoYXNPdXRsaW5lKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUo
KTsKKyAgICBhdXRvJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICAvLyBPbmx5IHBhaW50IHRo
ZSBmb2N1cyByaW5nIGJ5IGhhbmQgaWYgdGhlIHRoZW1lIGlzbid0IGFibGUgdG8gZHJhdyBpdC4K
ICAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBw
b3J0c0ZvY3VzUmluZyhzdHlsZVRvVXNlKSkgewogICAgICAgICBWZWN0b3I8TGF5b3V0UmVjdD4g
Zm9jdXNSaW5nUmVjdHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMTEsNyArNDExMSw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgoR3JhcGhpY3MKICAgICAgICAgcm9vdFJlbGF0aXZlQm91
bmRzQ29tcHV0ZWQgPSB0cnVlOwogICAgIH0KIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJl
bmRlcmVyKCkuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsK
ICAgICBBU1NFUlQoc3R5bGUuY2xpcFBhdGgoKSk7CiAgICAgaWYgKGlzPFNoYXBlQ2xpcFBhdGhP
cGVyYXRpb24+KCpzdHlsZS5jbGlwUGF0aCgpKSB8fCAoaXM8Qm94Q2xpcFBhdGhPcGVyYXRpb24+
KCpzdHlsZS5jbGlwUGF0aCgpKSAmJiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSkgewogICAg
ICAgICBXaW5kUnVsZSB3aW5kUnVsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3
IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICBtX3ZCYXIt
PnBhaW50KHBhaW50SW5mby5jb250ZXh0KCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0
KSk7CiB9CiAKLXN0YXRpYyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1
biB0ZXh0UnVuLCBSZW5kZXJTdHlsZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBpdGVtRm9udCwg
TGF5b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKK3N0YXRpYyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRG
b3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBjb25zdCBSZW5kZXJTdHlsZSogaXRlbVN0eWxl
LCBGb250Q2FzY2FkZSBpdGVtRm9udCwgTGF5b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKIHsKICAg
ICBFVGV4dEFsaWduIGFjdHVhbEFsaWdubWVudCA9IGl0ZW1TdHlsZS0+dGV4dEFsaWduKCk7CiAg
ICAgLy8gRklYTUU6IEZpcmVmb3ggZG9lc24ndCByZXNwZWN0IEpVU1RJRlkuIFNob3VsZCB3ZT8K
QEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91
bmQoCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdEVs
ZW1lbnQoKS5saXN0SXRlbXMoKTsKICAgICBIVE1MRWxlbWVudCogbGlzdEl0ZW1FbGVtZW50ID0g
bGlzdEl0ZW1zW2xpc3RJbmRleF07CiAKLSAgICBSZW5kZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxp
c3RJdGVtRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOworICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICps
aXN0SXRlbUVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsKIAogICAgIGlmIChpdGVtU3R5bGUudmlz
aWJpbGl0eSgpID09IEhJRERFTikKICAgICAgICAgcmV0dXJuOwpAQCAtNDIzLDcgKzQyMyw3IEBA
IHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCgKIHsKICAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudCgpLmxpc3RJdGVt
cygpOwogICAgIEhUTUxFbGVtZW50KiBsaXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdElu
ZGV4XTsKLSAgICBSZW5kZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+Y29t
cHV0ZWRTdHlsZSgpOworICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICpsaXN0SXRlbUVsZW1lbnQtPmNv
bXB1dGVkU3R5bGUoKTsKIAogICAgIENvbG9yIGJhY2tDb2xvcjsKICAgICBpZiAoaXM8SFRNTE9w
dGlvbkVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVt
ZW50PigqbGlzdEl0ZW1FbGVtZW50KS5zZWxlY3RlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MDgsOCArMTcwOCw4IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRl
TWFyZ2lucygpCiAgICAgICAgIAogICAgIH0KIAotICAgIHN0eWxlKCkuc2V0TWFyZ2luU3RhcnQo
TGVuZ3RoKG1hcmdpblN0YXJ0LCBGaXhlZCkpOwotICAgIHN0eWxlKCkuc2V0TWFyZ2luRW5kKExl
bmd0aChtYXJnaW5FbmQsIEZpeGVkKSk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luU3Rh
cnQoTGVuZ3RoKG1hcmdpblN0YXJ0LCBGaXhlZCkpOworICAgIG11dGFibGVTdHlsZSgpLnNldE1h
cmdpbkVuZChMZW5ndGgobWFyZ2luRW5kLCBGaXhlZCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRl
ckxpc3RNYXJrZXI6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2Rl
IGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgaW50IFJlbmRlck1hcnF1ZWU6OmNvbXB1
dGVQb3NpdGlvbihFTWFycQogewogICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci0+cmVuZGVy
Qm94KCk7CiAgICAgQVNTRVJUKGJveCk7Ci0gICAgUmVuZGVyU3R5bGUmIGJveFN0eWxlID0gYm94
LT5zdHlsZSgpOworICAgIGF1dG8mIGJveFN0eWxlID0gYm94LT5zdHlsZSgpOwogICAgIGlmIChp
c0hvcml6b250YWwoKSkgewogICAgICAgICBib29sIGx0ciA9IGJveFN0eWxlLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKTsKICAgICAgICAgTGF5b3V0VW5pdCBjbGllbnRXaWR0aCA9IGJveC0+Y2xp
ZW50V2lkdGgoKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnVwZGF0
ZU1hcnF1ZWVQb3NpdGlvCiAKIHZvaWQgUmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVlZVN0eWxl
KCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxl
KCk7CisgICAgYXV0byYgc3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLm11dGFibGVTdHlsZSgp
OwogICAgIAogICAgIGlmIChtX2RpcmVjdGlvbiAhPSBzdHlsZS5tYXJxdWVlRGlyZWN0aW9uKCkg
fHwgKG1fdG90YWxMb29wcyAhPSBzdHlsZS5tYXJxdWVlTG9vcENvdW50KCkgJiYgbV9jdXJyZW50
TG9vcCA+PSBtX3RvdGFsTG9vcHMpKQogICAgICAgICBtX2N1cnJlbnRMb29wID0gMDsgLy8gV2hl
biBkaXJlY3Rpb24gY2hhbmdlcyBvciBvdXIgbG9vcENvdW50IGlzIGEgc21hbGxlciBudW1iZXIg
dGhhbiBvdXIgY3VycmVudCBsb29wLCByZXNldCBvdXIgbG9vcC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZUlubmVyQmxv
Y2soKQogCiB2b2lkIFJlbmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKCkKIHsKLSAgICBS
ZW5kZXJTdHlsZSYgaW5uZXJTdHlsZSA9IG1faW5uZXJCbG9jay0+c3R5bGUoKTsKKyAgICBhdXRv
JiBpbm5lclN0eWxlID0gbV9pbm5lckJsb2NrLT5tdXRhYmxlU3R5bGUoKTsKICAgICBpbm5lclN0
eWxlLnNldEZsZXhHcm93KDEpOwogICAgIGlubmVyU3R5bGUuc2V0RmxleFNocmluaygxKTsKICAg
ICAvLyBtaW4td2lkdGg6IDA7IGlzIG5lZWRlZCBmb3IgY29ycmVjdCBzaHJpbmtpbmcuCkBAIC0y
MTUsNyArMjE1LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKAog
ICAgICAgICBpZiAodGhlbWUoKS5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAg
ICAgICAgICAgICAvLyBBZGQgaW4gdGhlIG9wdGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3Qg
Y2FsY3VsYXRlIHBlcmNlbnRhZ2UgdmFsdWVzIGZvciBub3cuCiAgICAgICAgICAgICBmbG9hdCBv
cHRpb25XaWR0aCA9IDA7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIG9wdGlvblN0eWxl
ID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpKQorICAgICAgICAgICAgaWYgKGF1dG8qIG9wdGlv
blN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICAgICAgICAgIG9wdGlv
bldpZHRoICs9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChvcHRpb25TdHlsZS0+dGV4dEluZGVudCgp
LCAwKTsKICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKQEAgLTUx
OSw3ICs1MTksNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAg
ICAgYm9vbCBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENvbG9yOwogICAgIGdldEl0ZW1CYWNrZ3Jv
dW5kQ29sb3IobGlzdEluZGV4LCBpdGVtQmFja2dyb3VuZENvbG9yLCBpdGVtSGFzQ3VzdG9tQmFj
a2dyb3VuZENvbG9yKTsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9ICplbGVtZW50LT5jb21w
dXRlZFN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSAqZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgp
OwogICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLmZvbnRDYXNjYWRl
KCksIHN0eWxlLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZS5kaXNwbGF5
KCkgPT0gTk9ORSwgdHJ1ZSwgc3R5bGUudGV4dEluZGVudCgpLCBzdHlsZS5kaXJlY3Rpb24oKSwg
aXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSwKICAgICAgICAgaXRlbUhhc0N1c3RvbUJh
Y2tncm91bmRDb2xvciA/IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IgOiBQ
b3B1cE1lbnVTdHlsZTo6RGVmYXVsdEJhY2tncm91bmRDb2xvcik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzks
NyBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkQ29sdW1uU3Bhbm5lcihSZW5kZXJNCiAgICAgQVNTRVJU
KGRlc2NlbmRhbnQtPmlzRGVzY2VuZGFudE9mKGZsb3dUaHJlYWQpKTsKIAogICAgIC8vIEZpcnN0
IG1ha2Ugc3VyZSB0aGF0IHRoZSByZW5kZXJlciBpdHNlbGYgaGFzIHRoZSByaWdodCBwcm9wZXJ0
aWVzIGZvciBiZWNvbWluZyBhIHNwYW5uZXIuCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gZGVz
Y2VuZGFudC0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGRlc2NlbmRhbnQtPnN0eWxlKCk7
CiAgICAgaWYgKHN0eWxlLmNvbHVtblNwYW4oKSAhPSBDb2x1bW5TcGFuQWxsIHx8ICFpczxSZW5k
ZXJCb3g+KCpkZXNjZW5kYW50KSB8fCBkZXNjZW5kYW50LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyOjpjcmVhdGVBbm9ueW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBm
bG93VGhyZWFkLCBSZW5kZXJCb3gqIHNwYW5uZXIsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkK
K1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBSZW5kZXJNdWx0aUNvbHVtblNw
YW5uZXJQbGFjZWhvbGRlcjo6Y3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCwgUmVuZGVyQm94KiBzcGFubmVyLCBjb25zdCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpCiB7CiAgICAgYXV0byBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVB
bm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KCpwYXJlbnRTdHlsZSwgQkxPQ0spOwogICAgIG5ld1N0
eWxlLnNldENsZWFyKENCT1RIKTsgLy8gV2UgZG9uJ3Qgd2FudCBmbG9hdHMgaW4gdGhlIHJvdyBw
cmVjZWRpbmcgdGhlIHNwYW5uZXIgdG8gY29udGludWUgb24gdGhlIG90aGVyIHNpZGUuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vo
b2xkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkOwogCiBjbGFzcyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciBm
aW5hbCA6IHB1YmxpYyBSZW5kZXJCb3ggewogcHVibGljOgotICAgIHN0YXRpYyBSZW5kZXJNdWx0
aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciogY3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29s
dW1uRmxvd1RocmVhZCosIFJlbmRlckJveCogc3Bhbm5lciwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKTsKKyAgICBzdGF0aWMgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIGNy
ZWF0ZUFub255bW91cyhSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqLCBSZW5kZXJCb3gqIHNw
YW5uZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICBSZW5kZXJCb3gq
IHNwYW5uZXIoKSBjb25zdCB7IHJldHVybiBtX3NwYW5uZXI7IH0KICAgICBSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQqIGZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2Zsb3dUaHJlYWQ7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3
LDcgKzM0Nyw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNoZWNrUmVnaW8KICAg
ICBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCptX2Zsb3dUaHJlYWQpLmNoZWNrUmVn
aW9uc1dpdGhTdHlsaW5nKCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0CitzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJl
Z2lvbihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0
eWxlKSBjb25zdAogewogICAgIEFTU0VSVCghcmVuZGVyZXIuaXNBbm9ueW1vdXMoKSk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFn
bWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQiOyB9CiAKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVs
ZW1lbnQmLCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gY29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYsIGNv
bnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlQ2hp
bGRyZW5TdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmKTsKICAgICB2b2lkIHNldE9iamVjdFN0
eWxlSW5SZWdpb24oUmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiwg
Ym9vbCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyMiw3
ICsxODIyLDcgQEAgaW50IFJlbmRlck9iamVjdDo6aW5uZXJMaW5lSGVpZ2h0KCkgY29ucwogICAg
IHJldHVybiBzdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpOwogfQogCi1zdGF0aWMgQ29sb3Ig
ZGVjb3JhdGlvbkNvbG9yKFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBDb2xvciBkZWNvcmF0
aW9uQ29sb3IoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIENvbG9yIHJlc3VsdDsK
ICAgICAvLyBDaGVjayBmb3IgdGV4dCBkZWNvcmF0aW9uIGNvbG9yIGZpcnN0LgpAQCAtMTg0NCw3
ICsxODQ0LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sbwogICAg
IFRleHREZWNvcmF0aW9uU3R5bGUmIHVuZGVybGluZVN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxl
JiBvdmVybGluZVN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxlJiBsaW5ldGhyb3VnaFN0eWxlLCBi
b29sIGZpcnN0bGluZVN0eWxlKSBjb25zdAogewogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY3Vy
cmVudCA9IHRoaXM7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBudWxscHRyOworICAg
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gbnVsbHB0cjsKICAgICBUZXh0RGVjb3Jh
dGlvbiBjdXJyRGVjcyA9IFRleHREZWNvcmF0aW9uTm9uZTsKICAgICBDb2xvciByZXN1bHRDb2xv
cjsKICAgICBkbyB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5Nyw4ICs2OTcsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBMYXlvdXRVbml0IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3Q7Ci0g
ICAgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0
eWxlKCkgY29uc3Q7CiAKICAgICAvLyBBbm9ueW1vdXMgYmxvY2tzIHRoYXQgYXJlIHBhcnQgb2Yg
b2YgYSBjb250aW51YXRpb24gY2hhaW4gd2lsbCByZXR1cm4gdGhlaXIgaW5saW5lIGNvbnRpbnVh
dGlvbidzIG91dGxpbmUgc3R5bGUgaW5zdGVhZC4KICAgICAvLyBUaGlzIGlzIHR5cGljYWxseSBv
bmx5IHJlbGV2YW50IHdoZW4gcmVwYWludGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODExLDcgKzgxMSw3
IEBAIHZvaWQgUmVuZGVyVGFibGU6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2EKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9jYXB0aW9ucy5zaXplKCk7IGkrKykKICAgICAgICAgbV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdGQ6Om1heChtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0
aCwgbV9jYXB0aW9uc1tpXS0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkpOwogCi0gICAgUmVu
ZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBz
dHlsZSgpOwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBjaGVja2luZyBm
b3IgaXNTcGVjaWZpZWQgc2luY2UgeW91IHNob3VsZCBiZSBhYmxlIHRvIHVzZSBwZXJjZW50YWdl
IG9yIGNhbGMgdmFsdWVzIGZvciBtaW4td2lkdGguCiAgICAgaWYgKHN0eWxlVG9Vc2UubG9naWNh
bE1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkudmFs
dWUoKSA+IDApIHsKICAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdGQ6Om1h
eChtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgYWRqdXN0Q29udGVudEJveExvZ2ljYWxXaWR0
aEZvckJveFNpemluZyhzdHlsZVRvVXNlLmxvZ2ljYWxNaW5XaWR0aCgpLnZhbHVlKCkpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5OCw3ICsxMTk4LDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Um93R3JvdXBCbwogCiB9CiAKLXN0YXRpYyBCb3hTaWRl
IHBoeXNpY2FsQm9yZGVyRm9yRGlyZWN0aW9uKFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93
LCBDb2xsYXBzZWRCb3JkZXJTaWRlIHNpZGUpCitzdGF0aWMgQm94U2lkZSBwaHlzaWNhbEJvcmRl
ckZvckRpcmVjdGlvbihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JDZWxsRmxvdywgQ29sbGFw
c2VkQm9yZGVyU2lkZSBzaWRlKQogewogCiAgICAgc3dpdGNoIChzaWRlKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkg
KzQ4LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzVGV4dEZyYWdtZW50KCkgY29u
c3Q7CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSYg
Zmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRv
U3R5bGUoUHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpIGNvbnN0
OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBn
ZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICBDb2xvciBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdDsKICAgICBDb2xvciBzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsK
QEAgLTI1MSwxNyArMjUxLDE3IEBAIGlubGluZSBVQ2hhciBSZW5kZXJUZXh0OjpjaGFyYWN0ZXJB
dCh1bnMKICAgICByZXR1cm4gdW5jaGVja2VkQ2hhcmFjdGVyQXQoaSk7CiB9CiAKLWlubGluZSBS
ZW5kZXJTdHlsZSYgUmVuZGVyVGV4dDo6c3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRl
clN0eWxlJiBSZW5kZXJUZXh0OjpzdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcmVudCgp
LT5zdHlsZSgpOwogfQogCi1pbmxpbmUgUmVuZGVyU3R5bGUmIFJlbmRlclRleHQ6OmZpcnN0TGlu
ZVN0eWxlKCkgY29uc3QKK2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyVGV4dDo6Zmly
c3RMaW5lU3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBwYXJlbnQoKS0+Zmlyc3RMaW5lU3R5
bGUoKTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1
ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25z
dAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1ZG9T
dHlsZShQc2V1ZG9JZCBwc2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBj
b25zdAogewogICAgIHJldHVybiBwYXJlbnQoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRv
SWQsIHBhcmVudFN0eWxlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUs
OCArNjUsOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZShTCiAgICAg
aWYgKGlubmVyVGV4dFJlbmRlcmVyKSB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHNldCB0aGUg
d2lkdGggYW5kIHRoZSBoZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KICAgICAg
ICAgLy8gUmVzZXQgdGhlbSBub3cgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBo
aW50LgotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3Ro
KCkpOwotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgo
KSk7CisgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQo
TGVuZ3RoKCkpOworICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0
V2lkdGgoTGVuZ3RoKCkpOwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0U3R5bGUodGV4
dEZvcm1Db250cm9sRWxlbWVudCgpLmNyZWF0ZUlubmVyVGV4dFN0eWxlKHN0eWxlKCkpKTsKICAg
ICB9CiAgICAgdGV4dEZvcm1Db250cm9sRWxlbWVudCgpLnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJp
bGl0eSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
TXVsdGlMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUKICAgICBSZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyUmVuZGVyZXIgPSBSZW5kZXJU
ZXh0Q29udHJvbDo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7
CiAgICAgaWYgKGlzPFJlbmRlckJveD4ocGxhY2Vob2xkZXJSZW5kZXJlcikpIHsKICAgICAgICAg
YXV0byYgcGxhY2Vob2xkZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpwbGFjZWhvbGRlclJl
bmRlcmVyKTsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3guc3R5bGUoKS5zZXRMb2dpY2FsV2lkdGgo
TGVuZ3RoKGNvbnRlbnRMb2dpY2FsV2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LmJvcmRlckFuZFBh
ZGRpbmdMb2dpY2FsV2lkdGgoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gubXV0
YWJsZVN0eWxlKCkuc2V0TG9naWNhbFdpZHRoKExlbmd0aChjb250ZW50TG9naWNhbFdpZHRoKCkg
LSBwbGFjZWhvbGRlckJveC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCksIEZpeGVkKSk7
CiAgICAgICAgIHBsYWNlaG9sZGVyQm94LmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIHBsYWNl
aG9sZGVyQm94LnNldFgoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSk7CiAgICAgICAgIHBs
YWNlaG9sZGVyQm94LnNldFkoYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgs
MTEgKzEwOCwxMSBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAK
ICAgICAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYmV0d2VlbiBsYXlvdXRzLCB3ZSBuZWVkIHRv
IHJlc2V0IGFueSBjb25kaXRpb25hbGx5IG92ZXJyaWRlbiBoZWlnaHQuCiAgICAgaWYgKGlubmVy
VGV4dFJlbmRlcmVyICYmICFpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0
KCkuaXNBdXRvKCkpIHsKLSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9n
aWNhbEhlaWdodChMZW5ndGgoQXV0bykpOworICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0
YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoQXV0bykpOwogICAgICAgICBzZXRO
ZWVkc0xheW91dE9uQW5jZXN0b3JzKGlubmVyVGV4dFJlbmRlcmVyLCB0aGlzKTsKICAgICB9CiAg
ICAgaWYgKGlubmVyQmxvY2tSZW5kZXJlciAmJiAhaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgp
LmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXIt
PnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoQXV0bykpOworICAgICAgICBpbm5lckJs
b2NrUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKEF1dG8p
KTsKICAgICAgICAgc2V0TmVlZHNMYXlvdXRPbkFuY2VzdG9ycyhpbm5lckJsb2NrUmVuZGVyZXIs
IHRoaXMpOwogICAgIH0KIApAQCAtMTI4LDEwICsxMjgsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxheW91dAogICAgICAgICBpZiAoZGVzaXJlZExvZ2ljYWxIZWlnaHQg
IT0gaW5uZXJUZXh0UmVuZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgIHNldE5l
ZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAKLSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0
eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVk
KSk7CisgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2Fs
SGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgaW5u
ZXJUZXh0UmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIGlm
IChpbm5lckJsb2NrUmVuZGVyZXIpIHsKLSAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+
c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4
ZWQpKTsKKyAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0
TG9naWNhbEhlaWdodChMZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CiAgICAg
ICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDAsMTMgKzE0MCwxMyBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5sYXlv
dXRJZk5lZWRlZCgpOwogICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQg
PSBjb250YWluZXJSZW5kZXJlci0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICBpZiAoY29udGFp
bmVyTG9naWNhbEhlaWdodCA+IGxvZ2ljYWxIZWlnaHRMaW1pdCkgewotICAgICAgICAgICAgY29u
dGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgobG9naWNhbEhl
aWdodExpbWl0LCBGaXhlZCkpOworICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFi
bGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGxvZ2ljYWxIZWlnaHRMaW1pdCwgRml4
ZWQpKTsKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAg
IH0gZWxzZSBpZiAoY29udGFpbmVyUmVuZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSA8IGNvbnRlbnRM
b2dpY2FsSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgp
LnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCksIEZpeGVkKSk7
CisgICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNh
bEhlaWdodChMZW5ndGgoY29udGVudExvZ2ljYWxIZWlnaHQoKSwgRml4ZWQpKTsKICAgICAgICAg
ICAgIHNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgo
Y29udGFpbmVyTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgICAgIGNvbnRhaW5lclJl
bmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChjb250YWluZXJM
b2dpY2FsSGVpZ2h0LCBGaXhlZCkpOwogICAgIH0KIAogICAgIC8vIElmIHdlIG5lZWQgYW5vdGhl
ciBsYXlvdXQgcGFzcywgd2UgaGF2ZSBjaGFuZ2VkIG9uZSBvZiBjaGlsZHJlbidzIGhlaWdodCBz
byB3ZSBuZWVkIHRvIHJlbGF5b3V0IHRoZW0uCkBAIC0xNzQsOCArMTc0LDggQEAgdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dAogICAgICAgICBMYXlvdXRTaXplIGlubmVy
VGV4dFNpemU7CiAgICAgICAgIGlmIChpbm5lclRleHRSZW5kZXJlcikKICAgICAgICAgICAgIGlu
bmVyVGV4dFNpemUgPSBpbm5lclRleHRSZW5kZXJlci0+c2l6ZSgpOwotICAgICAgICBwbGFjZWhv
bGRlckJveC0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoaW5uZXJUZXh0U2l6ZS53aWR0aCgpIC0g
cGxhY2Vob2xkZXJCb3gtPmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCksIEZpeGVk
KSk7Ci0gICAgICAgIHBsYWNlaG9sZGVyQm94LT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5u
ZXJUZXh0U2l6ZS5oZWlnaHQoKSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBh
ZGRpbmdFeHRlbnQoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gtPm11dGFibGVT
dHlsZSgpLnNldFdpZHRoKExlbmd0aChpbm5lclRleHRTaXplLndpZHRoKCkgLSBwbGFjZWhvbGRl
ckJveC0+aG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgRml4ZWQpKTsKKyAgICAg
ICAgcGxhY2Vob2xkZXJCb3gtPm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5uZXJU
ZXh0U2l6ZS5oZWlnaHQoKSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRp
bmdFeHRlbnQoKSwgRml4ZWQpKTsKICAgICAgICAgYm9vbCBuZWVkZWRMYXlvdXQgPSBwbGFjZWhv
bGRlckJveC0+bmVlZHNMYXlvdXQoKTsKICAgICAgICAgYm9vbCBwbGFjZWhvbGRlckJveEhhZExh
eW91dCA9IHBsYWNlaG9sZGVyQm94LT5ldmVySGFkTGF5b3V0KCk7CiAgICAgICAgIHBsYWNlaG9s
ZGVyQm94LT5sYXlvdXRJZk5lZWRlZCgpOwpAQCAtMjM2LDE0ICsyMzYsMTQgQEAgdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0eWxlRAogICAgIC8vIFdlIG1heSBoYXZlIHNldCB0
aGUgd2lkdGggYW5kIHRoZSBoZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KICAg
ICAvLyBSZXNldCB0aGVtIG5vdyB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0IGhp
bnQuCiAgICAgSFRNTEVsZW1lbnQqIGlubmVyQmxvY2sgPSBpbm5lckJsb2NrRWxlbWVudCgpOwot
ICAgIGlmIChSZW5kZXJPYmplY3QqIGlubmVyQmxvY2tSZW5kZXJlciA9IGlubmVyQmxvY2sgPyBp
bm5lckJsb2NrLT5yZW5kZXJlcigpIDogMCkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXIt
PnN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aCgpKTsKLSAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVy
LT5zdHlsZSgpLnNldFdpZHRoKExlbmd0aCgpKTsKKyAgICBpZiAoYXV0byogaW5uZXJCbG9ja1Jl
bmRlcmVyID0gaW5uZXJCbG9jayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCkgOiBudWxscHRyKSB7
CisgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExl
bmd0aCgpKTsKKyAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRX
aWR0aChMZW5ndGgoKSk7CiAgICAgfQogICAgIEhUTUxFbGVtZW50KiBjb250YWluZXIgPSBjb250
YWluZXJFbGVtZW50KCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogY29udGFpbmVyUmVuZGVyZXIg
PSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRlcmVyKCkgOiAwKSB7Ci0gICAgICAgIGNvbnRh
aW5lclJlbmRlcmVyLT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgoKSk7Ci0gICAgICAgIGNvbnRh
aW5lclJlbmRlcmVyLT5zdHlsZSgpLnNldFdpZHRoKExlbmd0aCgpKTsKKyAgICBpZiAoYXV0byog
Y29udGFpbmVyUmVuZGVyZXIgPSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRlcmVyKCkgOiBu
dWxscHRyKSB7CisgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRI
ZWlnaHQoTGVuZ3RoKCkpOworICAgICAgICBjb250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxl
KCkuc2V0V2lkdGgoTGVuZ3RoKCkpOwogICAgIH0KICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZl
cmVuY2VMYXlvdXQpIHsKICAgICAgICAgaWYgKGF1dG8qIGlubmVyVGV4dFJlbmRlcmVyID0gaW5u
ZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgUmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENo
YW5nZSgKICAgICBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAK
ICAgICBpZiAoUmVuZGVyQmxvY2sqIGJsb2NrID0gYmxvY2tGb3JBY2NvbXBhbnlpbmdGaXJzdExl
dHRlcigpKSB7Ci0gICAgICAgIGJsb2NrLT5zdHlsZSgpLnJlbW92ZUNhY2hlZFBzZXVkb1N0eWxl
KEZJUlNUX0xFVFRFUik7CisgICAgICAgIGJsb2NrLT5tdXRhYmxlU3R5bGUoKS5yZW1vdmVDYWNo
ZWRQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpOwogICAgICAgICBibG9jay0+dXBkYXRlRmlyc3RM
ZXR0ZXIoKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBwYWludEZsb3coY29uc3QgUmVu
ZGVyQmxvY2tGbG93JiBmbAogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZv
cmVncm91bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGZs
b3cuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKICAgICBpZiAoc3R5
bGUudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTQwLDcg
KzE0MCw3IEBAIGJvb2wgaGl0VGVzdEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiAKICAgICBp
ZiAoIWxheW91dC5ydW5Db3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBmbG93LnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBmbG93LnN0
eWxlKCk7CiAgICAgaWYgKHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHN0eWxlLnBv
aW50ZXJFdmVudHMoKSA9PSBQRV9OT05FKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIFRleHRQYWludFN0eWxlIGNvbXB1dGVU
ZXh0U2VsZWN0aW9uUGFpbnQKICAgICAgICAgc2VsZWN0aW9uUGFpbnRTdHlsZS5lbXBoYXNpc01h
cmtDb2xvciA9IGVtcGhhc2lzTWFya0ZvcmVncm91bmQ7CiAgICAgfQogCi0gICAgaWYgKFJlbmRl
clN0eWxlKiBwc2V1ZG9TdHlsZSA9IHJlbmRlcmVyLmdldENhY2hlZFBzZXVkb1N0eWxlKFNFTEVD
VElPTikpIHsKKyAgICBpZiAoYXV0byogcHNldWRvU3R5bGUgPSByZW5kZXJlci5nZXRDYWNoZWRQ
c2V1ZG9TdHlsZShTRUxFQ1RJT04pKSB7CiAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRv
dyA9IHBhaW50SW5mby5mb3JjZVRleHRDb2xvcigpID8gbnVsbHB0ciA6IHBzZXVkb1N0eWxlLT50
ZXh0U2hhZG93KCk7CiAgICAgICAgIGlmIChzaGFkb3cgIT0gc2VsZWN0aW9uU2hhZG93KSB7CiAg
ICAgICAgICAgICBpZiAoIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIHByaXZhdGU6CiAgICAgLy8gRmlyZWZv
eCBhbmQgT3BlcmEgd2lsbCBhbGxvdyBhIHRhYmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4gaW1h
Z2UgaW5zaWRlIGl0IHVuZGVyCiAgICAgLy8gdmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIChp
biBvcmRlciB0byBtYXRjaCBjb21tb24gV2luSUUgcmVuZGVyaW5ncykuCiAgICAgLy8gTm90IHN1
cHBvcnRpbmcgdGhlIHF1aXJrIGhhcyBjYXVzZWQgdXMgdG8gbWlzLXJlbmRlciBzb21lIHJlYWwg
c2l0ZXMuIChTZWUgQnVnemlsbGEgMTA1MTcuKQotICAgIFJlbmRlclN0eWxlJiBtX2Jsb2NrU3R5
bGU7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fYmxvY2tTdHlsZTsKIAogICAgIExpbmVJbmZv
JiBtX2xpbmVJbmZvOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFJvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwMSwxMCArMzAxLDEwIEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0
KCkKICAgICAgICAgICAgICAgICBiYXNlVG9wTWFyZ2luIC09IGluZGV4VG9wTWFyZ2luOwogICAg
ICAgICAgICAgICAgIGluZGV4VG9wTWFyZ2luID0gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGluZGV4LT5zdHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgoaW5kZXhUb3BNYXJnaW4sIEZp
eGVkKSk7CisgICAgICAgICAgICBpbmRleC0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9wKExl
bmd0aChpbmRleFRvcE1hcmdpbiwgRml4ZWQpKTsKICAgICAgICAgfQotICAgICAgICByYWRpY2Fs
LT5zdHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgocmFkaWNhbFRvcE1hcmdpbiwgRml4ZWQpKTsK
LSAgICAgICAgYmFzZS0+c3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGJhc2VUb3BNYXJnaW4s
IEZpeGVkKSk7CisgICAgICAgIHJhZGljYWwtPm11dGFibGVTdHlsZSgpLnNldE1hcmdpblRvcChM
ZW5ndGgocmFkaWNhbFRvcE1hcmdpbiwgRml4ZWQpKTsKKyAgICAgICAgYmFzZS0+bXV0YWJsZVN0
eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChiYXNlVG9wTWFyZ2luLCBGaXhlZCkpOwogICAgIH0K
IAogICAgIFJlbmRlck1hdGhNTEJsb2NrOjpsYXlvdXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTYwNiw3ICsxNjA2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29sdW1uUnVsZVdp
ZHRoKHVuc2lnbmVkIHNob3J0IHcpIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVyaXRlZERh
dGEsIG1fbXVsdGlDb2wsIG1fcnVsZS5tX3dpZHRoLCB3KTsgfQogICAgIHZvaWQgcmVzZXRDb2x1
bW5SdWxlKCkgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV9tdWx0aUNv
bCwgbV9ydWxlLCBCb3JkZXJWYWx1ZSgpKTsgfQogICAgIHZvaWQgc2V0Q29sdW1uU3BhbihDb2x1
bW5TcGFuIGNvbHVtblNwYW4pIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEs
IG1fbXVsdGlDb2wsIG1fY29sdW1uU3BhbiwgY29sdW1uU3Bhbik7IH0KLSAgICB2b2lkIGluaGVy
aXRDb2x1bW5Qcm9wZXJ0aWVzRnJvbShSZW5kZXJTdHlsZSogcGFyZW50KSB7IHJhcmVOb25Jbmhl
cml0ZWREYXRhLmFjY2VzcygpLT5tX211bHRpQ29sID0gcGFyZW50LT5yYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9tdWx0aUNvbDsgfQorICAgIHZvaWQgaW5oZXJpdENvbHVtblByb3BlcnRpZXNGcm9t
KGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnQpIHsgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNz
KCktPm1fbXVsdGlDb2wgPSBwYXJlbnQtPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211bHRpQ29s
OyB9CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3Bz
KSB7IFNFVF9ORVNURURfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX3RyYW5zZm9ybSwgbV9v
cGVyYXRpb25zLCBvcHMpOyB9CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm1PcmlnaW5YKExlbmd0aCBs
ZW5ndGgpIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fdHJhbnNmb3Jt
LCBtX3gsIFdURk1vdmUobGVuZ3RoKSk7IH0KICAgICB2b2lkIHNldFRyYW5zZm9ybU9yaWdpblko
TGVuZ3RoIGxlbmd0aCkgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV90
cmFuc2Zvcm0sIG1feSwgV1RGTW92ZShsZW5ndGgpKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgZmxvYXQgU1ZHSW5saW5lVGV4dEJv
eDo6cG9zaXRpb25Gb3JPZmZzZQogICAgIHJldHVybiAwOwogfQogCi1GbG9hdFJlY3QgU1ZHSW5s
aW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJh
Z21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CitGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0
aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBp
bnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhcnRQ
b3NpdGlvbiA8IGVuZFBvc2l0aW9uKTsKICAgICBBU1NFUlQoc3R5bGUpOwpAQCAtMTQyLDcgKzE0
Miw3IEBAIExheW91dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3QKICAgICBpZiAo
c3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJuIExheW91dFJlY3Qo
KTsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBh
dXRvJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBm
cmFnbWVudFRyYW5zZm9ybTsKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdDsKQEAgLTIwMSw3
ICsyMDEsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFjCiAgICAg
aWYgKCF0ZXh0U2hvdWxkQmVQYWludGVkKHJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBwYXJlbnRSZW5kZXJlci5zdHlsZSgpOworICAgIGF1
dG8mIHN0eWxlID0gcGFyZW50UmVuZGVyZXIuc3R5bGUoKTsKIAogICAgIGludCBzdGFydFBvc2l0
aW9uOwogICAgIGludCBlbmRQb3NpdGlvbjsKQEAgLTI1NiwxNCArMjU2LDE0IEBAIHZvaWQgU1ZH
SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBpZiAoIXRleHRTaG91bGRCZVBh
aW50ZWQocmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBz
dHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBwYXJlbnRS
ZW5kZXJlci5zdHlsZSgpOwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0g
c3R5bGUuc3ZnU3R5bGUoKTsKIAogICAgIGJvb2wgaGFzRmlsbCA9IHN2Z1N0eWxlLmhhc0ZpbGwo
KTsKICAgICBib29sIGhhc1Zpc2libGVTdHJva2UgPSBzdmdTdHlsZS5oYXNWaXNpYmxlU3Ryb2tl
KCk7CiAKLSAgICBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUgPSAmc3R5bGU7CisgICAgY29u
c3QgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlID0gJnN0eWxlOwogICAgIGlmIChoYXNTZWxl
Y3Rpb24pIHsKICAgICAgICAgc2VsZWN0aW9uU3R5bGUgPSBwYXJlbnRSZW5kZXJlci5nZXRDYWNo
ZWRQc2V1ZG9TdHlsZShTRUxFQ1RJT04pOwogICAgICAgICBpZiAoc2VsZWN0aW9uU3R5bGUpIHsK
QEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5m
byYgCiAgICAgQVNTRVJUKCFtX3BhaW50aW5nUmVzb3VyY2UpOwogfQogCi1ib29sIFNWR0lubGlu
ZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRl
eHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciwg
UmVuZGVyU3R5bGUqIHN0eWxlKQorYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjphY3F1aXJlUGFpbnRp
bmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBmbG9hdCBzY2FsaW5nRmFjdG9y
LCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSkKIHsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAgICAgQVNTRVJUKHN0eWxlKTsKQEAg
LTM3Nyw3ICszNzcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1Jl
CiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gbnVsbHB0cjsKIH0KIAotYm9vbCBTVkdJbmxpbmVU
ZXh0Qm94OjpwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29u
dGV4dComIGNvbnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSkK
K2Jvb2wgU1ZHSW5saW5lVGV4dEJveDo6cHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWlu
dGluZyhHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgcmV0dXJuIGFjcXVpcmVQYWludGluZ1Jlc291
cmNlKGNvbnRleHQsIHNjYWxpbmdGYWN0b3IsIHBhcmVudCgpLT5yZW5kZXJlcigpLCBzdHlsZSk7
CiB9CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZXN0b3JlR3Jh
cGhpY3NDbwogICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQsIC8qIHBhdGggKi9u
dWxscHRyKTsKIH0KIAotVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVu
KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29u
c3QKK1RleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKHN0eWxlKTsKIApAQCAtNTA2LDcgKzUwNiw3IEBAIHZvaWQgU1ZHSW5saW5l
VGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2kKICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJj
ZSk7CiAgICAgQVNTRVJUKG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRN
b2RlKTsKIAotICAgIFJlbmRlclN0eWxlJiBkZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9uUmVu
ZGVyZXIuc3R5bGUoKTsKKyAgICBhdXRvJiBkZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9uUmVu
ZGVyZXIuc3R5bGUoKTsKIAogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSAxOwogICAgIEZvbnRD
YXNjYWRlIHNjYWxlZEZvbnQ7CkBAIC01NDAsNyArNTQwLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjpwYWludERlY29yYXRpb25XaQogICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShj
b250ZXh0UHRyLCAmcGF0aCk7CiB9CiAKLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0
V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUs
IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBz
dGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBh
aW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlLCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZy
YWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKQogewogICAgIGZsb2F0
IHNjYWxpbmdGYWN0b3IgPSByZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQo
c2NhbGluZ0ZhY3Rvcik7CkBAIC01ODUsNyArNTg1LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94
OjpwYWludFRleHRXaXRoU2hhZAogICAgIH0gd2hpbGUgKHNoYWRvdyk7CiB9CiAKLXZvaWQgU1ZH
SW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRG
cmFnbWVudCYgZnJhZ21lbnQsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRU
ZXh0T25seSkKK3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSog
c2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGJvb2wgaGFz
U2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSkKIHsKICAgICBBU1NFUlQoc3R5
bGUpOwogICAgIEFTU0VSVChzZWxlY3Rpb25TdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDIzICs2NCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGFydHNO
ZXdUZXh0Q2h1bmsoYm9vbCBuZXdUZXh0Q2h1bmspIHsgbV9zdGFydHNOZXdUZXh0Q2h1bmsgPSBu
ZXdUZXh0Q2h1bms7IH0KIAogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21lbnQoY29u
c3QgU1ZHVGV4dEZyYWdtZW50JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50
KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGludCBm
cmFnbWVudEVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIEZsb2F0UmVjdCBz
ZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBm
cmFnbWVudFN0YXJ0UG9zaXRpb24sIGludCBmcmFnbWVudEVuZFBvc2l0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSopIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNTVkdJbmxpbmVUZXh0Qm94
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgVGV4dFJ1biBjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7Cisg
ICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU1ZH
VGV4dEZyYWdtZW50JikgY29uc3Q7CiAKLSAgICBib29sIGFjcXVpcmVQYWludGluZ1Jlc291cmNl
KEdyYXBoaWNzQ29udGV4dComLCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJCb3hNb2RlbE9i
amVjdCYsIFJlbmRlclN0eWxlKik7CisgICAgYm9vbCBhY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShH
cmFwaGljc0NvbnRleHQqJiwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyQm94TW9kZWxPYmpl
Y3QmLCBjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcmVsZWFzZVBhaW50aW5nUmVzb3Vy
Y2UoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFBhdGgqKTsKIAotICAgIGJvb2wgcHJlcGFyZUdy
YXBoaWNzQ29udGV4dEZvclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiwgZmxvYXQgc2Nh
bGluZ0ZhY3RvciwgUmVuZGVyU3R5bGUqKTsKKyAgICBib29sIHByZXBhcmVHcmFwaGljc0NvbnRl
eHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYsIGZsb2F0IHNjYWxpbmdGYWN0b3Is
IGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCByZXN0b3JlR3JhcGhpY3NDb250ZXh0QWZ0
ZXJUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYpOwogCiAgICAgdm9pZCBwYWludERlY29y
YXRpb24oR3JhcGhpY3NDb250ZXh0JiwgVGV4dERlY29yYXRpb24sIGNvbnN0IFNWR1RleHRGcmFn
bWVudCYpOwogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29udGV4
dCYsIFRleHREZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCYgZGVjb3JhdGlvblJlbmRlcmVyKTsKLSAgICB2b2lkIHBhaW50VGV4dFdpdGhTaGFk
b3dzKEdyYXBoaWNzQ29udGV4dCYsIFJlbmRlclN0eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pOwotICAgIHZv
aWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUq
IHNlbGVjdGlvblN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBib29sIGhhc1NlbGVjdGlv
biwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkpOworICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNo
YWRvd3MoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwgY29u
c3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbik7
CisgICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVu
dCYsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CiAKICAg
ICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQg
bGluZUJvdHRvbSwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUGF0aERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUGF0aERhdGEuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1BhdGhEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVQYXRoRnJvbUNpcmNsZUVs
ZW1lbnQoCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigp
OwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJTdHlsZSYg
c3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOwogICAgIGZsb2F0IHIgPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxl
LnN2Z1N0eWxlKCkucigpKTsKICAgICBpZiAociA+IDApIHsKICAgICAgICAgZmxvYXQgY3ggPSBs
ZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN2Z1N0eWxlKCkuY3goKSwgTGVuZ3Ro
TW9kZVdpZHRoKTsKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlUGF0aEZyb21F
bGxpcHNlRWxlbWVudAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVu
ZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47Ci0gICAgUmVuZGVy
U3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSByZW5k
ZXJlci0+c3R5bGUoKTsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoZWxlbWVu
dCk7CiAgICAgZmxvYXQgcnggPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN2
Z1N0eWxlKCkucngoKSwgTGVuZ3RoTW9kZVdpZHRoKTsKICAgICBpZiAocnggPD0gMCkKQEAgLTEy
MCw3ICsxMjAsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVQYXRoRnJvbVJlY3RFbGVtZW50KFNWCiAg
ICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlci0+c3R5
bGUoKTsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoZWxlbWVudCk7CiAgICAg
ZmxvYXQgd2lkdGggPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLndpZHRoKCks
IExlbmd0aE1vZGVXaWR0aCk7CiAgICAgaWYgKHdpZHRoIDw9IDApCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZQogICAgICAgICBtX3JlbmRlcmluZ0ZsYWdz
IHw9IFJlc3RvcmVHcmFwaGljc0NvbnRleHQ7CiAgICAgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0
eWxlID0gbV9yZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IG1fcmVuZGVyZXIt
PnN0eWxlKCk7CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZS5z
dmdTdHlsZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2
ZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRy
ZWVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgVHJlZVJlc29s
dmVyOjpQYXJlbnQ6OlBhcmVudChEb2N1bWVudCYgZAogewogfQogCi1UcmVlUmVzb2x2ZXI6OlBh
cmVudDo6UGFyZW50KEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiBzdHlsZSwgQ2hhbmdl
IGNoYW5nZSkKK1RyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQoRWxlbWVudCYgZWxlbWVudCwg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdlKQogICAgIDogZWxlbWVudCgm
ZWxlbWVudCkKICAgICAsIHN0eWxlKHN0eWxlKQogICAgICwgY2hhbmdlKGNoYW5nZSkKQEAgLTEx
OSw3ICsxMTksNyBAQCB2b2lkIFRyZWVSZXNvbHZlcjo6cG9wU2NvcGUoKQogICAgIHJldHVybiBt
X3Njb3BlU3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+IFRyZWVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRl
clN0eWxlJiBpbmhlcml0ZWRTdHlsZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gVHJl
ZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVy
U3R5bGUmIGluaGVyaXRlZFN0eWxlKQogewogICAgIGlmICghbV9kb2N1bWVudC5oYXZlU3R5bGVz
aGVldHNMb2FkZWQoKSAmJiAhZWxlbWVudC5yZW5kZXJlcigpKSB7CiAgICAgICAgIG1fZG9jdW1l
bnQuc2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOwpAQCAtMjgyLDcgKzI4Miw3IEBA
IHByaXZhdGU6CiB9OwogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAotdm9pZCBUcmVlUmVzb2x2
ZXI6OnB1c2hQYXJlbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFu
Z2UgY2hhbmdlKQordm9pZCBUcmVlUmVzb2x2ZXI6OnB1c2hQYXJlbnQoRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdlKQogewogICAgIHNjb3Bl
KCkuc2VsZWN0b3JGaWx0ZXIucHVzaFBhcmVudCgmZWxlbWVudCk7CiAKQEAgLTM3NSw3ICszNzUs
NyBAQCB2b2lkIFRyZWVSZXNvbHZlcjo6cmVzb2x2ZUNvbXBvc2VkVHJlZSgpCiAKICAgICAgICAg
Ym9vbCBzaG91bGRSZXNvbHZlRm9yUHNldWRvRWxlbWVudCA9IHNob3VsZFJlc29sdmVQc2V1ZG9F
bGVtZW50KGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpKSB8fCBzaG91bGRSZXNvbHZlUHNl
dWRvRWxlbWVudChlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpKTsKIAotICAgICAgICBSZW5k
ZXJTdHlsZSogc3R5bGU7CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZTsKICAgICAg
ICAgQ2hhbmdlIGNoYW5nZTsKIAogICAgICAgICBib29sIHNob3VsZFJlc29sdmUgPSBwYXJlbnQu
Y2hhbmdlID49IEluaGVyaXQgfHwgZWxlbWVudC5uZWVkc1N0eWxlUmVjYWxjKCkgfHwgc2hvdWxk
UmVzb2x2ZUZvclBzZXVkb0VsZW1lbnQgfHwgYWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyB8fCBl
bGVtZW50Lmhhc0Rpc3BsYXlDb250ZW50cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVUcmVlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVRyZWVSZXNvbHZlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVRyZWVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBA
IHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VXBkYXRlPiByZXNvbHZlKENoYW5nZSk7CiAK
IHByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1l
bnQoRWxlbWVudCYsIFJlbmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYsIGNvbnN0IFJlbmRl
clN0eWxlJiBpbmhlcml0ZWRTdHlsZSk7CiAKICAgICB2b2lkIHJlc29sdmVDb21wb3NlZFRyZWUo
KTsKICAgICBFbGVtZW50VXBkYXRlIHJlc29sdmVFbGVtZW50KEVsZW1lbnQmKTsKQEAgLTc5LDEz
ICs3OSwxMyBAQCBwcml2YXRlOgogCiAgICAgc3RydWN0IFBhcmVudCB7CiAgICAgICAgIEVsZW1l
bnQqIGVsZW1lbnQ7Ci0gICAgICAgIFJlbmRlclN0eWxlJiBzdHlsZTsKKyAgICAgICAgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlOwogICAgICAgICBDaGFuZ2UgY2hhbmdlOwogICAgICAgICBib29s
IGRpZFB1c2hTY29wZSB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgZWxlbWVudE5lZWRpbmdTdHls
ZVJlY2FsY0FmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSB7IGZhbHNlIH07CiAKICAgICAg
ICAgUGFyZW50KERvY3VtZW50JiwgQ2hhbmdlKTsKLSAgICAgICAgUGFyZW50KEVsZW1lbnQmLCBS
ZW5kZXJTdHlsZSYsIENoYW5nZSk7CisgICAgICAgIFBhcmVudChFbGVtZW50JiwgY29uc3QgUmVu
ZGVyU3R5bGUmLCBDaGFuZ2UpOwogICAgIH07CiAKICAgICBTY29wZSYgc2NvcGUoKSB7IHJldHVy
biBtX3Njb3BlU3RhY2subGFzdCgpOyB9CkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwdXNoRW5jbG9zaW5nU2NvcGUoKTsKICAgICB2b2lkIHBvcFNjb3BlKCk7CiAKLSAgICB2
b2lkIHB1c2hQYXJlbnQoRWxlbWVudCYsIFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKKyAgICB2b2lk
IHB1c2hQYXJlbnQoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKICAgICB2
b2lkIHBvcFBhcmVudCgpOwogICAgIHZvaWQgcG9wUGFyZW50c1RvRGVwdGgodW5zaWduZWQgZGVw
dGgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDExICs2MSwyNCBAQCBib29sIFVwZGF0ZTo6dGV4dFVwZGF0ZShjb25zdCBU
ZXh0JiB0ZXh0CiAgICAgcmV0dXJuIG1fdGV4dHMuY29udGFpbnMoJnRleHQpOwogfQogCi1SZW5k
ZXJTdHlsZSogVXBkYXRlOjplbGVtZW50U3R5bGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29u
c3QKK2NvbnN0IFJlbmRlclN0eWxlKiBVcGRhdGU6OmVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50
JiBlbGVtZW50KSBjb25zdAogewogICAgIGlmIChhdXRvKiB1cGRhdGUgPSBlbGVtZW50VXBkYXRl
KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gdXBkYXRlLT5zdHlsZS5nZXQoKTsKLSAgICByZXR1
cm4gZWxlbWVudC5yZW5kZXJTdHlsZSgpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5y
ZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiAmcmVuZGVyZXItPnN0eWxlKCk7Cit9CisKK1JlbmRlclN0eWxlKiBVcGRhdGU6
OmVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JiBlbGVtZW50KQoreworICAgIGlmIChhdXRvKiB1
cGRhdGUgPSBlbGVtZW50VXBkYXRlKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gdXBkYXRlLT5z
dHlsZS5nZXQoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAg
ICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gJnJl
bmRlcmVyLT5tdXRhYmxlU3R5bGUoKTsKIH0KIAogdm9pZCBVcGRhdGU6OmFkZEVsZW1lbnQoRWxl
bWVudCYgZWxlbWVudCwgRWxlbWVudCogcGFyZW50LCBFbGVtZW50VXBkYXRlJiYgZWxlbWVudFVw
ZGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNyArNjMsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHRleHRVcGRhdGUoY29uc3QgVGV4
dCYpIGNvbnN0OwogCi0gICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50
JikgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBFbGVt
ZW50JikgY29uc3Q7CisgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50
Jik7CiAKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Rv
Y3VtZW50OyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzQ2LDcgKzc0Niw3IEBAIHZvaWQgU1ZHRWxlbWVudDo6c3luY2hyb25pemVTeXN0ZW1M
YW5ndWEKICAgICBjb250ZXh0RWxlbWVudC0+c3luY2hyb25pemVTeXN0ZW1MYW5ndWFnZSgpOwog
fQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFNWR0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHls
ZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gU1ZHRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIC8vIElmIHRoZSBlbGVt
ZW50IGlzIGluIGEgPHVzZT4gdHJlZSB3ZSBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIGRlZmluaXRp
b24gdHJlZS4KICAgICBpZiAoYXV0byogc3R5bGVFbGVtZW50ID0gdGhpcy0+Y29ycmVzcG9uZGlu
Z0VsZW1lbnQoKSkKQEAgLTc3MywxMiArNzczLDEyIEBAIHZvaWQgU1ZHRWxlbWVudDo6c2V0VXNl
T3ZlcnJpZGVDb21wdXRlZFMKICAgICAgICAgbV9zdmdSYXJlRGF0YS0+c2V0VXNlT3ZlcnJpZGVD
b21wdXRlZFN0eWxlKHZhbHVlKTsKIH0KIAotUmVuZGVyU3R5bGUqIFNWR0VsZW1lbnQ6OmNvbXB1
dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKK2NvbnN0IFJlbmRlclN0
eWxlKiBTVkdFbGVtZW50Ojpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVj
aWZpZXIpCiB7CiAgICAgaWYgKCFtX3N2Z1JhcmVEYXRhIHx8ICFtX3N2Z1JhcmVEYXRhLT51c2VP
dmVycmlkZUNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIEVsZW1lbnQ6OmNvbXB1dGVk
U3R5bGUocHNldWRvRWxlbWVudFNwZWNpZmllcik7CiAKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBudWxscHRyOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51
bGxwdHI7CiAgICAgaWYgKEVsZW1lbnQqIHBhcmVudCA9IHBhcmVudE9yU2hhZG93SG9zdEVsZW1l
bnQoKSkgewogICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKSkK
ICAgICAgICAgICAgIHBhcmVudFN0eWxlID0gJnJlbmRlcmVyLT5zdHlsZSgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc3luY2hyb25pemVBbmltYXRlZFNWR0F0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJikgY29uc3Q7CiAgICAgc3RhdGljIHZvaWQgc3luY2hyb25pemVBbGxBbmltYXRlZFNW
R0F0dHJpYnV0ZShTVkdFbGVtZW50Kik7CiAgCi0gICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBy
ZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSog
c2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJl
c29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIHZvaWQg
c3luY2hyb25pemVSZXF1aXJlZEZlYXR1cmVzKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsK
ICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucyhTVkdFbGVtZW50
KiBjb250ZXh0RWxlbWVudCk7CkBAIC0xODEsNyArMTgxLDcgQEAgcHJvdGVjdGVkOgogICAgIGNs
YXNzIEluc3RhbmNlSW52YWxpZGF0aW9uR3VhcmQ7CiAKIHByaXZhdGU6Ci0gICAgUmVuZGVyU3R5
bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETykgZmluYWw7CisgICAgY29uc3Qg
UmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETykgZmluYWw7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNTdXBwb3J0ZWQoU3RyaW5nSW1wbCogZmVhdHVyZSwgU3RyaW5n
SW1wbCogdmVyc2lvbikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50UmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dFJhcmVEYXRhLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50UmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTAgKzU5LDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuICptX2FuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllczsKICAgICB9
CiAKLSAgICBSZW5kZXJTdHlsZSogb3ZlcnJpZGVDb21wdXRlZFN0eWxlKEVsZW1lbnQmIGVsZW1l
bnQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogb3Zl
cnJpZGVDb21wdXRlZFN0eWxlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkKICAgICB7CiAgICAgICAgIGlmICghbV91c2VPdmVycmlkZUNvbXB1dGVkU3R5
bGUpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICBpZiAoIW1fb3ZlcnJpZGVDb21wdXRlZFN0eWxlIHx8IG1fbmVlZHNPdmVycmlkZUNv
bXB1dGVkU3R5bGVVcGRhdGUpIHsKICAgICAgICAgICAgIC8vIFRoZSBzdHlsZSBjb21wdXRlZCBo
ZXJlIGNvbnRhaW5zIG5vIENTUyBBbmltYXRpb25zL1RyYW5zaXRpb25zIG9yIFNNSUwgaW5kdWNl
ZCBydWxlcyAtIHRoaXMgaXMgbmVlZGVkIHRvIGNvbXB1dGUgdGhlICJiYXNlIHZhbHVlIiBmb3Ig
dGhlIFNNSUwgYW5pbWF0aW9uIHNhbmR3aGljaCBtb2RlbC4KICAgICAgICAgICAgIG1fb3ZlcnJp
ZGVDb21wdXRlZFN0eWxlID0gZWxlbWVudC5zdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50
KGVsZW1lbnQsIHBhcmVudFN0eWxlLCBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCkucmVuZGVy
U3R5bGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgQWZmaW5lVHJhbnNmb3JtIFNW
R0dyYXBoaWNzRWxlbWVudDo6Z2V0UwogQWZmaW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNzRWxlbWVu
dDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IG1hdHJpeDsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRlcmVy
KCktPnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZy
ZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKIAogICAgIC8vIElmIENTUyBwcm9wZXJ0eSB3
YXMgc2V0LCB1c2UgdGhhdCwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGF0dHJpYnV0ZSAoaWYgc2V0
KS4KICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmhhc1RyYW5zZm9ybSgpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyMiw3ICsyMjIsNyBAQCBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9t
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIHJlbmRlclN0
eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQpCitzdGF0aWMg
aW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhj
b25zdCBTVkdFbGVtZW50KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0yMzYsMTIgKzIzNiwxMiBAQCBzdGF0aWMgaW5saW5lIFJlbmRl
clN0eWxlKiByZW5kZXJTdHlsZUZvCiAKICAgICAvLyBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IGEg
UmVuZGVyU1ZHUm9vdCByZW5kZXJlciwgY2FycnlpbmcgYSBzdHlsZS4KICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogZmxv
YXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRU1TKGZsb2F0
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOworICAgIGF1dG8q
IHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBp
ZiAoIXN0eWxlKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjU4LDcgKzI1OCw3IEBAIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZl
cnRWYWx1ZUZyb20KIAogZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVN
U1RvVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2Nv
bnRleHQpOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmco
bV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRF
RF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjY5LDcgKzI2OSw3IEBAIGZsb2F0IFNWR0xl
bmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb20KIAogZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6
Y29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRVhTKGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxl
bmd0aFJlc29sdmluZyhtX2NvbnRleHQpOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVG
b3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAg
IGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjg4LDcgKzI4
OCw3IEBAIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb20KIAogZmxvYXQg
U1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVYU1RvVXNlclVuaXRzKGZsb2F0IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOworICAgIGF1dG8qIHN0
eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBpZiAo
IXN0eWxlKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVy
biAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIGJvb2wgU1ZHU3RvcEVsZW1lbnQ6OnJlbmRlcmVySXNO
ZWVkZWQoY28KIAogQ29sb3IgU1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09wYWNp
dHkoKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVu
ZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJlcigp
ID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlzIGNo
ZWNrIGZvciBudWxsIHN0eWxlIGV4aXN0cyB0byBhZGRyZXNzIEJ1ZyBXSyA5MDgxNCwgYSByYXJl
IGNyYXNoIGNvbmRpdGlvbiBpbgogICAgIC8vIHdoaWNoIHRoZSByZW5kZXJlciBvciBzdHlsZSBp
cyBudWxsLiBUaGlzIGVudGlyZSBjbGFzcyBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwgKEJ1ZyBX
SyA4Njk0MSkKICAgICAvLyBhbmQgd2Ugd2lsbCB0b2xlcmF0ZSB0aGlzIG51bGwgY2hlY2sgdW50
aWwgdGhlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkocmV2aXNp
b24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBSZWY8U1ZHVGV4dEVsZW1lbnQ+IFNWR1RleHRF
bGVtZW50OjpjcmVhCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmFuaW1hdGVkTG9j
YWxUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDog
bnVsbHB0cjsKKyAgICBhdXRvKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5
bGUoKSA6IG51bGxwdHI7CiAKICAgICAvLyBpZiBDU1MgcHJvcGVydHkgd2FzIHNldCwgdXNlIHRo
YXQsIG90aGVyd2lzZSBmYWxsYmFjayB0byBhdHRyaWJ1dGUgKGlmIHNldCkKICAgICBpZiAoc3R5
bGUgJiYgc3R5bGUtPmhhc1RyYW5zZm9ybSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyMyw3ICs4MjMsNyBAQCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZShJbmNs
dWRlCiAgICAgICAgIGF1dG8mIHBvc3RMYXlvdXREYXRhID0gcmVzdWx0LnBvc3RMYXlvdXREYXRh
KCk7CiAgICAgICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7CiAgICAgICAgICAgICBOb2Rl
KiBub2RlVG9SZW1vdmU7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gRWRp
dG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZmcmFtZSwgbm9kZVRvUmVtb3ZlKSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8qIHN0eWxlID0gRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KCZmcmFtZSwgbm9kZVRvUmVtb3ZlKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+Zm9u
dENhc2NhZGUoKS53ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkKICAgICAgICAgICAgICAgICAg
ICAgcG9zdExheW91dERhdGEudHlwaW5nQXR0cmlidXRlcyB8PSBBdHRyaWJ1dGVCb2xkOwogICAg
ICAgICAgICAgICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS5pdGFsaWMoKSA9PSBGb250SXRh
bGljT24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277359</attachid>
            <date>2016-04-26 05:25:11 -0700</date>
            <delta_ts>2016-04-26 05:36:20 -0700</delta_ts>
            <desc>patch</desc>
            <filename>const-renderstyle-4.patch</filename>
            <type>text/plain</type>
            <size>160370</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNCw3
ICsxMTM0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU3R5bGVSYW5nZQogewog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVu
ZGVyZXIgPSByZW5kZXJlcjsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyZXItPnN0
eWxlKCk7CisgICAgYXV0byogc3R5bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CiAKICAgICAvLyB0
cmF2ZXJzZSBiYWNrd2FyZCBieSByZW5kZXJlciB0byBsb29rIGZvciBzdHlsZSBjaGFuZ2UKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogciA9IHJlbmRlcmVyLT5wcmV2aW91c0luUHJlT3JkZXIoKTsg
cjsgciA9IHItPnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0
cmlidXRlU2V0RgogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBvYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gJnJlbmRl
cmVyLT5zdHlsZSgpOworICAgIGF1dG8qIHN0eWxlID0gJnJlbmRlcmVyLT5zdHlsZSgpOwogCiAg
ICAgQXRrQXR0cmlidXRlU2V0KiByZXN1bHQgPSBudWxscHRyOwogICAgIEdVbmlxdWVQdHI8Z2No
YXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoIiVpIiwgc3R5bGUtPmZvbnRTaXplKCkpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDk5
LDcgKzQ5OSw3IEBAIC0gKFdLUXVhZClpbm5lckZyYW1lUXVhZCAgICAgICAvLyB0YWtlcyAKICAg
ICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZW1wdHlRdWFkKCk7CiAKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwogICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSByZW5kZXJlci0+YWJz
b2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSAvKiB1c2UgdHJhbnNmb3JtcyovKTsKIAogICAgIGJv
dW5kaW5nQm94Lm1vdmUoc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLmJvcmRlclRvcFdp
ZHRoKCkpOwpAQCAtNTEzLDcgKzUxMyw3IEBAIC0gKFdLUXVhZClpbm5lckZyYW1lUXVhZCAgICAg
ICAvLyB0YWtlcyAKIC0gKGZsb2F0KWNvbXB1dGVkRm9udFNpemUKIHsKICAgICBXZWJDb3JlOjpO
b2RlICpub2RlID0gY29yZShzZWxmKTsKLSAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSBub2RlLT5y
ZW5kZXJTdHlsZSgpOworICAgIGF1dG8gKnN0eWxlID0gbm9kZS0+cmVuZGVyU3R5bGUoKTsKICAg
ICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMC4wZjsKICAgICByZXR1cm4gc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MDAsNyArNzAwLDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxp
c3Q+IGNyZWF0ZVBvc2l0aW9uTAogICAgIHJldHVybiBwb3NpdGlvbkxpc3Q7CiB9CiAKLXN0YXRp
YyBSZWZQdHI8Q1NTVmFsdWU+IHBvc2l0aW9uT2Zmc2V0VmFsdWUoUmVuZGVyU3R5bGUmIHN0eWxl
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwb3Np
dGlvbk9mZnNldFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEKQogewogICAgIExlbmd0aCBsZW5ndGg7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlE
KSB7CkBAIC03MzcsNyArNzM3LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcG9zaXRpb25P
ZmZzZXRWYQogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJT
dHlsZSogc3R5bGUsIGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKK1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENvbG9y
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgbG9vayBhdCB2aXNpdGVkIGluZm9ybWF0aW9u
LCBzbyB0aGF0IGNvbXB1dGVkIHN0eWxlIGRvZXNuJ3QgZXhwb3NlIHRoYXQuCiAgICAgaWYgKCFj
b2xvci5pc1ZhbGlkKCkpCkBAIC0xMTQzLDcgKzExNDMsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVl
TGlzdD4gZ2V0VHJhbnNpdGlvblByCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
c3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IHNjcm9sbFNuYXBEZXN0aW5hdGlvbihSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IExlbmd0aFNpemUmIGRlc3RpbmF0aW9uKQorc3RhdGljIFJlZjxDU1NW
YWx1ZUxpc3Q+IHNjcm9sbFNuYXBEZXN0aW5hdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IExlbmd0aFNpemUmIGRlc3RpbmF0aW9uKQogewogICAgIGF1dG8gbGlzdCA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBsaXN0LmdldCgpLmFwcGVuZCh6
b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKGRlc3RpbmF0aW9uLndpZHRoKCksIHN0eWxl
KSk7CkBAIC0xMTUxLDcgKzExNTEsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xs
U25hcERlc3RpCiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IHNj
cm9sbFNuYXBQb2ludHMoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTY3JvbGxTbmFwUG9pbnRz
KiBwb2ludHMpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxTbmFwUG9pbnRzKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgU2Nyb2xsU25hcFBvaW50cyogcG9pbnRzKQogewogICAg
IGlmICghcG9pbnRzKQogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKQEAgLTExNjYsNyArMTE2Niw3IEBA
IHN0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBQb2ludHMoUmUKICAgICByZXR1cm4gV1RG
TW92ZShsaXN0KTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcENvb3JkaW5h
dGVzKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPExlbmd0aFNpemU+JiBjb29yZGlu
YXRlcykKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBDb29yZGluYXRlcyhjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFZlY3RvcjxMZW5ndGhTaXplPiYgY29vcmRpbmF0ZXMp
CiB7CiAgICAgaWYgKGNvb3JkaW5hdGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7
CkBAIC0xODA3LDcgKzE4MDcsNyBAQCBzdGF0aWMgdm9pZCBsb2dVbmltcGxlbWVudGVkUHJvcGVy
dHlJRChDCiAgICAgTE9HX0VSUk9SKCJXZWJLaXQgZG9lcyBub3QgeWV0IGltcGxlbWVudCBnZXRD
b21wdXRlZFN0eWxlIGZvciAnJXMnLiIsIGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eUlEKSk7CiB9
CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0eWxlLT5mb250Q2FzY2FkZSgpLmZhbWlseUNvdW50KCk7ICsraSkKQEAgLTE4MTUsNyArMTgx
NSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVMKICAgICByZXR1
cm4gbGlzdDsKIH0KIAotc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZUhlaWdodEZy
b21TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiBsaW5lSGVpZ2h0RnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICBM
ZW5ndGggbGVuZ3RoID0gc3R5bGUubGluZUhlaWdodCgpOwogICAgIGlmIChsZW5ndGguaXNOZWdh
dGl2ZSgpKSAvLyBJZiB0cnVlLCBsaW5lLWhlaWdodCBub3Qgc2V0OyB1c2UgdGhlIGZvbnQncyBs
aW5lIHNwYWNpbmcuCkBAIC0xODMwLDE5ICsxODMwLDE5IEBAIHN0YXRpYyBSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IGxpbmVIZWlnaHQKICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShm
bG9hdFZhbHVlRm9yTGVuZ3RoKGxlbmd0aCwgMCksIHN0eWxlKTsKIH0KIAotc3RhdGljIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gZm9udFNpemVGcm9tU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQor
c3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFNpemVGcm9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlKQogewogICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0
eWxlLmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpLCBzdHlsZSk7CiB9CiAKLXN0YXRp
YyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRTdHlsZUZyb21TdHlsZShSZW5kZXJTdHlsZSog
c3R5bGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U3R5bGVGcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkuaXRhbGljKCkpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUl0YWxpYyk7CiAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFs
KTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRGcm9tU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRGcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkudmFyaWFudFNldHRpbmdzKCkuaXNBbGxOb3JtYWwoKSkKICAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9y
bWFsKTsKQEAgLTIwMjksNyArMjAyOSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJp
YW50RnJvbVN0eWwKICAgICByZXR1cm4gV1RGTW92ZShsaXN0KTsKIH0KIAotc3RhdGljIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdodEZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUp
CitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250V2VpZ2h0RnJvbVN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBzd2l0Y2ggKHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS53ZWlnaHQoKSkgewogICAgIGNhc2UgRm9udFdlaWdodDEwMDoKQEAgLTIwNTUsNyArMjA1
NSw3IEBAIHN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRXZWlnaHQKICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb3JtYWwpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250U3ludGhlc2lzRnJvbVN0
eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRTeW50aGVz
aXNGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIGlmIChzdHlsZS5m
b250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgPT0gRm9udFN5bnRoZXNpc05vbmUpCiAg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOwpAQCAtMjA3Miw3ICsyMDcyLDcgQEAgdHlwZWRlZiBjb25zdCBM
ZW5ndGgmIChSZW5kZXJTdHlsZTo6KlJlbgogdHlwZWRlZiBMYXlvdXRVbml0IChSZW5kZXJCb3hN
b2RlbE9iamVjdDo6KlJlbmRlckJveENvbXB1dGVkQ1NTVmFsdWVHZXR0ZXIpKCkgY29uc3Q7CiAK
IHRlbXBsYXRlPFJlbmRlclN0eWxlTGVuZ3RoR2V0dGVyIGxlbmd0aEdldHRlciwgUmVuZGVyQm94
Q29tcHV0ZWRDU1NWYWx1ZUdldHRlciBjb21wdXRlZENTU1ZhbHVlR2V0dGVyPgotaW5saW5lIFJl
ZlB0cjxDU1NWYWx1ZT4gem9vbUFkanVzdGVkUGFkZGluZ09yTWFyZ2luUGl4ZWxWYWx1ZShSZW5k
ZXJTdHlsZSYgc3R5bGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitpbmxpbmUgUmVmUHRyPENT
U1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZhbHVlKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBMZW5ndGggdW56
b29temVkTGVuZ3RoID0gKHN0eWxlLipsZW5ndGhHZXR0ZXIpKCk7CiAgICAgaWYgKCFpczxSZW5k
ZXJCb3g+KHJlbmRlcmVyKSB8fCB1bnpvb216ZWRMZW5ndGguaXNGaXhlZCgpKQpAQCAtMjA4MSw3
ICsyMDgxLDcgQEAgaW5saW5lIFJlZlB0cjxDU1NWYWx1ZT4gem9vbUFkanVzdGVkUGFkZAogfQog
CiB0ZW1wbGF0ZTxSZW5kZXJTdHlsZUxlbmd0aEdldHRlciBsZW5ndGhHZXR0ZXI+Ci1pbmxpbmUg
Ym9vbCBwYWRkaW5nT3JNYXJnaW5Jc1JlbmRlcmVyRGVwZW5kZW50KFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK2lubGluZSBib29sIHBhZGRpbmdPck1hcmdpbklz
UmVuZGVyZXJEZXBlbmRlbnQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogewogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTM5LDcgKzIxMzksNyBAQCBzdGF0aWMgQ1NTVmFs
dWVJRCBjb252ZXJ0VG9SZWdpb25CcmVhayhCCiB9CiAjZW5kaWYKICAgICAKLXN0YXRpYyBib29s
IGlzTGF5b3V0RGVwZW5kZW50KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGljIGJvb2wgaXNMYXlvdXREZXBl
bmRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgpAQCAtMjI2Nyw3ICsyMjY3LDcgQEAgc3RhdGljIGlu
bGluZSBib29sIHVwZGF0ZVN0eWxlSWZOZWVkZWRGbwogICAgIHJldHVybiB0cnVlOwogfQogCi1z
dGF0aWMgaW5saW5lIFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5bGVGb3JQcm9wZXJ0eShO
b2RlKiBzdHlsZWROb2RlLCBQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIG93bmVkU3R5
bGUpCitzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5bGVG
b3JQcm9wZXJ0eShOb2RlKiBzdHlsZWROb2RlLCBQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lm
aWVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4mIG93bmVkU3R5bGUpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHN0eWxlZE5v
ZGUtPnJlbmRlcmVyKCk7CiAKQEAgLTIzNzMsNyArMjM3Myw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4g
Q29tcHV0ZWRTdHlsZUV4dHJhY3RvcjoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG93bmVkU3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gbnVsbHB0cjsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSBudWxscHRy
OwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBudWxscHRyOwogICAgIGJvb2wgZm9yY2VG
dWxsTGF5b3V0ID0gZmFsc2U7CiAgICAgaWYgKHVwZGF0ZUxheW91dCkgewpAQCAtMzg2MSw3ICsz
ODYxLDcgQEAgdW5zaWduZWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpsZQogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBu
b2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcik7CisgICAgYXV0byog
c3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcik7CiAg
ICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM4ODAsNyArMzg4MCw3IEBA
IFN0cmluZyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246Oml0ZW0KICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOworICAgIGF1
dG8qIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIp
OwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIApA
QCAtMzg5OSw3ICszODk5LDcgQEAgYm9vbCBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0
eU1hdAogewogICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Rm9udFNpemUgJiYgaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgbV9ub2RlKSB7CiAgICAgICAgIG1fbm9kZS0+
ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAg
ICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVk
b0VsZW1lbnRTcGVjaWZpZXIpKSB7CisgICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IG1fbm9kZS0+
Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpKSB7CiAgICAgICAgICAgICBp
ZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5r
ZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkgJiYgcHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IHNpemVJZGVudGlmaWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCwxMCArNzAsMTAgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBzdHlsZWRO
b2RlKCkgY29uc3Q7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN2Z1Byb3BlcnR5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgRVVwZGF0ZUxheW91dCkgY29uc3Q7Ci0gICAgUmVmUHRyPFNWR1BhaW50PiBh
ZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNWR1BhaW50PiwgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICBSZWZQdHI8U1ZHUGFpbnQ+IGFkanVzdFNWR1BhaW50Rm9yQ3Vy
cmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFpbnQ+LCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0
OwogCiAgICAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gdmFsdWVGb3JTaGFkb3coY29uc3QgU2hhZG93
RGF0YSosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlJiwgQWRqdXN0UGl4ZWxWYWx1
ZXNGb3JDb21wdXRlZFN0eWxlID0gQWRqdXN0UGl4ZWxWYWx1ZXMpOwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiwgY29u
c3QgQ29sb3ImKSBjb25zdDsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGN1cnJlbnRD
b2xvck9yVmFsaWRDb2xvcihjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IENvbG9yJikgY29uc3Q7
CiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBnZXRDU1NQcm9wZXJ0eVZhbHVlc0ZvclNob3J0
aGFuZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYpIGNvbnN0OwogICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldENTU1Byb3BlcnR5VmFsdWVzRm9yU2lkZXNTaG9ydGhh
bmQoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGZsb2F0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGE6Onpvb20oKSAKIGRvdWJsZSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2
aWV3cG9ydFdpZHRoRmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21w
dXRpbmdGb250U2l6ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwor
ICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0
VW5pdHMoKTsKIAogICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKQEAg
LTU3LDcgKzU3LDcgQEAgZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwbwog
ZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwb3J0SGVpZ2h0RmFjdG9yKCkg
Y29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21wdXRpbmdGb250U2l6ZSkKLSAgICAg
ICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOworICAgICAgICBjb25zdF9jYXN0PFJl
bmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGlmICgh
bV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKQEAgLTY4LDcgKzY4LDcgQEAgZG91Ymxl
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwbwogZG91YmxlIENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGE6OnZpZXdwb3J0TWluRmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHls
ZSAmJiAhbV9jb21wdXRpbmdGb250U2l6ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3Bv
cnRVbml0cygpOworICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNl
dEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTgwLDcgKzgwLDcgQEAgZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGE6OnZpZXdwbwogZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwb3J0TWF4
RmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21wdXRpbmdGb250U2l6
ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOworICAgICAgICBjb25z
dF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAog
ICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBSZW5kZXJWaWV3OwogCiBjbGFz
cyBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIHsKIHB1YmxpYzoKLSAgICBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSwgY29uc3QgUmVuZGVyVmlldyogcmVuZGVyVmlldywgZmxvYXQgem9vbSwgYm9vbCBjb21w
dXRpbmdGb250U2l6ZSA9IGZhbHNlKQorICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25z
dCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBmbG9hdCB6b29tLCBib29sIGNvbXB1dGluZ0ZvbnRT
aXplID0gZmFsc2UpCiAgICAgICAgIDogbV9zdHlsZShzdHlsZSkKICAgICAgICAgLCBtX3Jvb3RT
dHlsZShyb290U3R5bGUpCiAgICAgICAgICwgbV9yZW5kZXJWaWV3KHJlbmRlclZpZXcpCkBAIC01
Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHpvb20gPiAwKTsKICAgICB9CiAK
LSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgY29uc3QgUmVuZGVyVmlldyogcmVuZGVyVmlldywgYm9v
bCBjb21wdXRpbmdGb250U2l6ZSA9IGZhbHNlKQorICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxl
LCBjb25zdCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0g
ZmFsc2UpCiAgICAgICAgIDogbV9zdHlsZShzdHlsZSkKICAgICAgICAgLCBtX3Jvb3RTdHlsZShy
b290U3R5bGUpCiAgICAgICAgICwgbV9yZW5kZXJWaWV3KHJlbmRlclZpZXcpCkBAIC02Nyw3ICs2
Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KICAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290U3R5bGU7IH0KICAgICBmbG9hdCB6b29tKCkgY29u
c3Q7CiAgICAgYm9vbCBjb21wdXRpbmdGb250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0
aW5nRm9udFNpemU7IH0KQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9z
dHlsZTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9yb290U3R5bGU7CiAgICAgY29uc3QgUmVu
ZGVyVmlldyogbV9yZW5kZXJWaWV3OwogICAgIGZsb2F0IG1fem9vbTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBA
QCBSZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6c3R5bGUoKSBjb25zCiAgICAgcmV0dXJuIG1f
cmVzb2x2ZXItPnN0eWxlKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpyb290
RWxlbWVudFN0eWxlKCkgY29uc3QKK2NvbnN0IFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpy
b290RWxlbWVudFN0eWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCShyZXZp
c2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gc2ltaWxhciB0byBo
b3cgUGFpbnRJbmZvL0xheW91dFN0YXRlIGNhY2hlIHZhbHVlcyBuZWVkZWQgZm9yCiAgICAgLy8g
dGhlIGN1cnJlbnQgcGFpbnQvbGF5b3V0LgogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
OwotICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3Q7CisgICAgY29uc3Qg
UmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdDsKICAgICBib29sIHVzZVNWR1pv
b21SdWxlcygpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2Yg
c29tZSBzb3J0IG9mIFN0eWxlSW1hZ2VDYWNoZSBvYmplY3Qgd2hpY2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODUsMTAgKzg1LDEwIEBAIE1lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFs
dWF0b3IKIHsKIH0KIAotTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihj
b25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSogZnJhbWUsIFJlbmRlclN0eWxl
KiBzdHlsZSkKK01lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3Qg
U3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgRnJhbWUqIGZyYW1lLCBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUpCiAgICAgOiBtX21lZGlhVHlwZShhY2NlcHRlZE1lZGlhVHlwZSkKICAgICAsIG1f
ZnJhbWUoZnJhbWUpCi0gICAgLCBtX3N0eWxlKFdURk1vdmUoc3R5bGUpKQorICAgICwgbV9zdHls
ZShzdHlsZSkKICAgICAsIG1fZXhwUmVzdWx0KGZhbHNlKSAvLyBkb2Vzbid0IG1hdHRlciB3aGVu
IHdlIGhhdmUgbV9mcmFtZSBhbmQgbV9zdHlsZQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4
MCw3IEBAIHB1YmxpYzoKIAogICAgIC8qKiBDcmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0
ZXMgZnVsbCBtZWRpYSBxdWVyaWVzCiAgICAgICovCi0gICAgTWVkaWFRdWVyeUV2YWx1YXRvcihj
b25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSosIFJlbmRlclN0eWxlKik7Cisg
ICAgTWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBG
cmFtZSosIGNvbnN0IFJlbmRlclN0eWxlKik7CiAKICAgICB+TWVkaWFRdWVyeUV2YWx1YXRvcigp
OwogCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbWVk
aWFUeXBlOwogICAgIEZyYW1lKiBtX2ZyYW1lIHsgbnVsbHB0ciB9OyAvLyBub3Qgb3duZWQKLSAg
ICBSZW5kZXJTdHlsZSogbV9zdHlsZSB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBSZW5kZXJTdHls
ZSogbV9zdHlsZSB7IG51bGxwdHIgfTsKICAgICBib29sIG1fZXhwUmVzdWx0OwogfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5
Myw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHN0cm9rZURhc2hBcnJheVQKICAgICByZXR1
cm4gbGlzdDsKIH0KIAotUmVmUHRyPFNWR1BhaW50PiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjph
ZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNWR1BhaW50PiBuZXdQYWlu
dCwgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorUmVmUHRyPFNWR1BhaW50PiBDb21wdXRlZFN0
eWxlRXh0cmFjdG9yOjphZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNW
R1BhaW50PiBuZXdQYWludCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAg
IFJlZlB0cjxTVkdQYWludD4gcGFpbnQgPSBuZXdQYWludDsKICAgICBpZiAocGFpbnQtPnBhaW50
VHlwZSgpID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUiB8fCBwYWludC0+
cGFpbnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfVVJJX0NVUlJFTlRDT0xPUikK
QEAgLTExMSw3ICsxMTEsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6CiAgICAgaWYgKHVwZGF0ZUxheW91dCkKICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS51cGRh
dGVMYXlvdXQoKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5
bGUoKTsKKyAgICBhdXRvKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUoKTsKICAgICBpZiAo
IXN0eWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1NvdXJjZVNpemVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U291cmNlU2l6ZUxpc3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvU291cmNlU2l6ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgbWF0Y2goc3RkOjp1bmlxdWVfcHRy
PE1lZGlhUXVlcnlFeHA+JiYgZXhwcmVzc2lvbiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBGcmFtZSog
ZnJhbWUpCitzdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4m
JiBleHByZXNzaW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEZyYW1lKiBmcmFtZSkKIHsK
ICAgICBpZiAoZXhwcmVzc2lvbi0+bWVkaWFGZWF0dXJlKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTQ3LDEyICs0NywxMiBAQCBzdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVu
aXF1ZV9wdHI8TWVkaWFRCiAgICAgcmV0dXJuIG1lZGlhUXVlcnlFdmFsdWF0b3IuZXZhbChtZWRp
YVF1ZXJ5U2V0LmdldCgpKTsKIH0KIAotc3RhdGljIGZsb2F0IGRlZmF1bHRMZW5ndGgoUmVuZGVy
U3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQorc3RhdGljIGZsb2F0IGRlZmF1bHRMZW5n
dGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQogewogICAgIHJl
dHVybiBjbGFtcFRvPGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5n
dGhEb3VibGUoQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgmc3R5bGUsICZzdHlsZSwgdmlldyks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcsIDEwMC4wKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBj
b21wdXRlTGVuZ3RoKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJW
aWV3KiB2aWV3KQorc3RhdGljIGZsb2F0IGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCiB7CiAgICAgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSgmc3R5bGUsICZzdHlsZSwgdmlldyk7
CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKQEAgLTcwLDcgKzcwLDcg
QEAgZmxvYXQgcGFyc2VTaXplc0F0dHJpYnV0ZShTdHJpbmdWaWV3IHNpegogewogICAgIGlmICgh
dmlldykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gdmlldy0+
c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHZpZXctPnN0eWxlKCk7CiAgICAgZm9yIChhdXRv
JiBzb3VyY2VTaXplIDogQ1NTUGFyc2VyKENTU1N0cmljdE1vZGUpLnBhcnNlU2l6ZXNBdHRyaWJ1
dGUoc2l6ZXNBdHRyaWJ1dGUpKSB7CiAgICAgICAgIGlmIChtYXRjaChXVEZNb3ZlKHNvdXJjZVNp
emUuZXhwcmVzc2lvbiksIHN0eWxlLCBmcmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gY29tcHV0
ZUxlbmd0aChzb3VyY2VTaXplLmxlbmd0aC5nZXQoKSwgc3R5bGUsIHZpZXcpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NzUsNyArNTc1LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMg
Y29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSkKKyAgICBz
dGF0aWMgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUt
PmJvcmRlckltYWdlKCkgOiBzdHlsZS0+bWFza0JveEltYWdlKCk7CiAgICAgfQpAQCAtNjY0LDcg
KzY2NCw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmkKIAogaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDbGlwKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpOworICAgIGF1dG8qIHBhcmVudFN0eWxlID0gc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmhhc0NsaXAoKSkK
ICAgICAgICAgcmV0dXJuIGFwcGx5SW5pdGlhbENsaXAoc3R5bGVSZXNvbHZlcik7CiAgICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKHBhcmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVu
dFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5
bGUtPmNsaXBMZWZ0KCkpOwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAgdGVtcGxhdGUgPFN0eWxlQnVp
bGRlckN1c3RvbTo6Q291bnRlckJlaAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7CiAgICAg
Q291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3ND
b3VudGVyRGlyZWN0aXZlcygpOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBzdHlsZVJlc29s
dmVyLnBhcmVudFN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIGtleVZhbHVlIDogY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIu
cGFyZW50U3R5bGUoKSktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKICAgICAgICAgQ291
bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGtleVZhbHVlLmtleSwgQ291bnRl
ckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoY291bnRlckJlaGF2
aW9yID09IFJlc2V0KQogICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0UmVzZXQoa2V5VmFs
dWUudmFsdWUpOwpAQCAtMTMzNyw3ICsxMzM3LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbAogICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCiAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRVbmlxdWUoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAg
IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpLT5z
ZXRVbmlxdWUoKTsKICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgY29u
dGVudFZhbHVlLmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxsQXRvbSk7CiAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNvbHZlci5lbGVtZW50KCktPmdl
dEF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0
KTsKQEAgLTE3MDYsNyArMTcwNiw3IEBAIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlQWx0KFMKICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c3R5bGVUeXBlKCkg
PT0gTk9QU0VVRE8pCiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFVuaXF1
ZSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxl
KCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0
eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSktPnNldFVuaXF1ZSgpOwogCiAgICAgICAgIFF1YWxp
ZmllZE5hbWUgYXR0cihudWxsQXRvbSwgcHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSwg
bnVsbEF0b20pOwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNv
bHZlci5lbGVtZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGkKICAgICBtX21hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA9IDA7CiB9CiAKLVN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHlsZSwgY29uc3QgUmVuZGVy
UmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JG
aWx0ZXIpCitTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogZG9j
dW1lbnRFbGVtZW50U3R5bGUsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZywg
Y29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKQogICAgIDogbV9lbGVtZW50KCZl
bGVtZW50KQogICAgICwgbV9wYXJlbnRTdHlsZShwYXJlbnRTdHlsZSkKICAgICAsIG1fcmVnaW9u
Rm9yU3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKQpAQCAtMzgwLDcgKzM4MCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY28KICAgICByZXR1cm4gcGFyZW50Tm9kZSAm
JiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKIH0KIAotRWxlbWVudFN0eWxlIFN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNv
bnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIq
IHNlbGVjdG9yRmlsdGVyKQorRWxlbWVudFN0eWxlIFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxl
bWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNvbnN0IFJlbmRlclJl
Z2lvbiogcmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmls
dGVyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2luTG9hZFBlbmRpbmdJbWFnZXMpOwogCkBA
IC01NTgsNyArNTU4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFu
aQogICAgIH0KIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
Ojpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUHNl
dWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIFJlbmRlclN0eWxlJiBwYXJlbnRT
dHlsZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRv
U3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFBzZXVkb1N0eWxl
UmVxdWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0LCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5
bGUpCiB7CiAgICAgbV9zdGF0ZSA9IFN0YXRlKGVsZW1lbnQsICZwYXJlbnRTdHlsZSk7CiAKQEAg
LTE2MzEsNyArMTYzMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm8KICAgICB9CiAKICAgICBpZiAoaXNJbmhlcml0ICYmICFzdGF0ZS5wYXJlbnRTdHlsZSgpLT5o
YXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhl
cml0ZWRQcm9wZXJ0eShpZCkpCi0gICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldEhhc0V4
cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVy
U3R5bGUqPihzdGF0ZS5wYXJlbnRTdHlsZSgpKS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFBy
b3BlcnRpZXMoKTsKICAgICAKICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlDdXN0b20pIHsKICAg
ICAgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSogY3VzdG9tUHJvcGVydHkgPSAmZG93bmNhc3Q8
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnZhbHVlVG9BcHBseSk7CkBAIC0xNzM0LDcgKzE3MzQs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1CiB9CiAjZW5kaWYK
IAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNr
Rm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkKIHsKICAgICBpZiAoIXBhcmVudFN0eWxlKQogICAgICAgICByZXR1cm47CkBAIC0x
NzQ4LDcgKzE3NDgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShS
CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGNvbnN0IGF1dG8mIGNoaWxkRm9udCA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsMTggKzE0MSwxOCBAQCBwdWJsaWM6CiAgICAg
U3R5bGVSZXNvbHZlcihEb2N1bWVudCYpOwogICAgIH5TdHlsZVJlc29sdmVyKCk7CiAKLSAgICBF
bGVtZW50U3R5bGUgc3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgY29uc3Qg
UmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JG
aWx0ZXIqID0gbnVsbHB0cik7CisgICAgRWxlbWVudFN0eWxlIHN0eWxlRm9yRWxlbWVudChjb25z
dCBFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSdWxlTWF0Y2hpbmdC
ZWhhdmlvciA9IE1hdGNoQWxsUnVsZXMsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5
bGluZyA9IG51bGxwdHIsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiA9IG51bGxwdHIpOwogCiAgICAg
dm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihjb25zdCBFbGVtZW50JiwgY29uc3QgUmVu
ZGVyU3R5bGUqLCBLZXlmcmFtZUxpc3QmKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBjb25zdCBQc2V1ZG9T
dHlsZVJlcXVlc3QmLCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBj
b25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUp
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBh
Z2VJbmRleCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBkZWZhdWx0U3R5bGVG
b3JFbGVtZW50KCk7CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0eWxlKCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcm9vdEVs
ZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpOyB9
CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5wYXJlbnRTdHlsZSgpOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsgfQogICAg
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQoKSB7IHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKTsgfQog
ICAgIERvY3VtZW50JiBkb2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBTZXR0
aW5ncyogZG9jdW1lbnRTZXR0aW5ncygpIHsgcmV0dXJuIG1fZG9jdW1lbnQuc2V0dGluZ3MoKTsg
fQpAQCAtMzE3LDggKzMxNyw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQg
dGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAotICAgIHZv
aWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSos
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1p
bHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwor
ICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKTsKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICB2
b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoUmVuZGVyU3R5bGUqKTsKICNlbmRpZgpAQCAtMzYx
LDcgKzM2MSw3IEBAIHB1YmxpYzoKICAgICBjbGFzcyBTdGF0ZSB7CiAgICAgcHVibGljOgogICAg
ICAgICBTdGF0ZSgpIHsgfQotICAgICAgICBTdGF0ZShjb25zdCBFbGVtZW50JiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogZG9jdW1lbnRFbGVtZW50U3R5bGUgPSBudWxs
cHRyLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25z
dCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKKyAgICAgICAgU3RhdGUoY29uc3QgRWxlbWVu
dCYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIGRv
Y3VtZW50RWxlbWVudFN0eWxlID0gbnVsbHB0ciwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25G
b3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CiAK
ICAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKQEAgLTM3NCw4ICszNzQsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gdGFrZVN0eWxlKCkg
eyByZXR1cm4gV1RGTW92ZShtX3N0eWxlKTsgfQogCiAgICAgICAgIHZvaWQgc2V0UGFyZW50U3R5
bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPik7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KLSAgICAgICAgUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50
U3R5bGU7IH0KKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQorICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9v
dEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsgfQogCiAg
ICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVnaW9uRm9yU3R5bGluZzsgfQogICAgICAgICBFSW5zaWRlTGluayBlbGVtZW50TGlu
a1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50TGlua1N0YXRlOyB9CkBAIC00MjcsOSAr
NDI3LDkgQEAgcHVibGljOgogCiAgICAgICAgIGNvbnN0IEVsZW1lbnQqIG1fZWxlbWVudCB7IG51
bGxwdHIgfTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwot
ICAgICAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsKKyAgICAgICAg
Y29uc3QgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGUgeyBudWxscHRyIH07CiAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV9vd25lZFBhcmVudFN0eWxlOwotICAgICAgICBS
ZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OworICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OwogCiAgICAgICAg
IGNvbnN0IFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nIHsgbnVsbHB0ciB9OwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwOCw3
ICsyMDA4LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZwogICAg
IG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzID0gb2xkSWdub3JlOwogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IERvY3VtZW50OjpzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRp
bmdTdHlsZXNoZWV0cyhFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IERvY3VtZW50OjpzdHlsZUZvckVsZW1lbnRJ
Z25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0cyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgQVNTRVJUKCZlbGVtZW50LmRvY3VtZW50KCkgPT0g
dGhpcyk7CiAKQEAgLTI1MTUsNyArMjUxNSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFZpc3VhbGx5
T3JkZXJlZCgpCiB7CiAgICAgbV92aXN1YWxseU9yZGVyZWQgPSB0cnVlOwogICAgIGlmIChyZW5k
ZXJWaWV3KCkpCi0gICAgICAgIHJlbmRlclZpZXcoKS0+c3R5bGUoKS5zZXRSVExPcmRlcmluZyhW
aXN1YWxPcmRlcik7CisgICAgICAgIHJlbmRlclZpZXcoKS0+bXV0YWJsZVN0eWxlKCkuc2V0UlRM
T3JkZXJpbmcoVmlzdWFsT3JkZXIpOwogfQogCiBSZWY8RG9jdW1lbnRQYXJzZXI+IERvY3VtZW50
OjpjcmVhdGVQYXJzZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NzEsNyArNTcxLDcgQEAgcHVibGljOgogICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoUnVuUG9zdExheW91dFRhc2tzID0g
UnVuUG9zdExheW91dFRhc2tzOjpBc3luY2hyb25vdXNseSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRz
KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5nU3R5bGVzaGVldHMo
RWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgcGFnZSBib3ggKG1hcmdpbiBib3hlcyBhbmQgcGFnZSBib3JkZXJzKSBpcyB2
aXNpYmxlLgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQYWdlQm94VmlzaWJsZShpbnQgcGFn
ZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3MCw3
ICsxMzcwLDcgQEAgU3R5bGVSZXNvbHZlciYgRWxlbWVudDo6c3R5bGVSZXNvbHZlcigpCiAgICAg
cmV0dXJuIGRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwogfQogCi1FbGVtZW50U3R5
bGUgRWxlbWVudDo6cmVzb2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK0VsZW1l
bnRTdHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQogewogICAgIHJldHVybiBzdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50KCp0aGlz
LCBwYXJlbnRTdHlsZSk7CiB9CkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBib29sIEVsZW1lbnQ6OmNo
aWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUgCiBzdGF0aWMgdm9pZCBjaGVja0ZvckVtcHR5U3R5bGVD
aGFuZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoZWxlbWVudC5zdHlsZUFmZmVjdGVk
QnlFbXB0eSgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgYXV0byogc3R5bGUgPSBlbGVtZW50LnJlbmRlclN0eWxlKCk7CiAg
ICAgICAgIGlmICghc3R5bGUgfHwgKCFzdHlsZS0+ZW1wdHlTdGF0ZSgpIHx8IGVsZW1lbnQuaGFz
Q2hpbGROb2RlcygpKSkKICAgICAgICAgICAgIGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygp
OwogICAgIH0KQEAgLTE3ODQsMTQgKzE3ODQsMTQgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JTaWJs
aW5nU3R5bGVDaGFuZ2VzKAogCiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGluc2VydC9hcHBlbmQg
Y2FzZS4KICAgICAgICAgaWYgKG5ld0ZpcnN0RWxlbWVudCAhPSBlbGVtZW50QWZ0ZXJDaGFuZ2Up
IHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnRBZnRlckNoYW5nZS0+
cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudEFmdGVyQ2hh
bmdlLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+Zmly
c3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBhbHNvIGhhdmUg
dG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4KICAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBTaWJsaW5n
RWxlbWVudFJlbW92ZWQgJiYgbmV3Rmlyc3RFbGVtZW50ID09IGVsZW1lbnRBZnRlckNoYW5nZSAm
JiBuZXdGaXJzdEVsZW1lbnQpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG5l
d0ZpcnN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0g
bmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8
fCAhc3R5bGUtPmZpcnN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAgIG5ld0ZpcnN0RWxl
bWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0xODA0LDcgKzE4MDQs
NyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgIEVs
ZW1lbnQqIG5ld0xhc3RFbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bGFzdENoaWxkKHBhcmVu
dCk7CiAKICAgICAgICAgaWYgKG5ld0xhc3RFbGVtZW50ICE9IGVsZW1lbnRCZWZvcmVDaGFuZ2Up
IHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnRCZWZvcmVDaGFuZ2Ut
PnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnRCZWZvcmVD
aGFuZ2UtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5s
YXN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAgIGVsZW1lbnRCZWZvcmVDaGFuZ2UtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQpAQCAtMTgxMiw3ICsxODEyLDcgQEAgc3Rh
dGljIHZvaWQgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgICAgICAvLyBXZSBhbHNv
IGhhdmUgdG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4gIFRoZSBwYXJzZXIgY2FsbGJhY2sgY2FzZSBp
cyBzaW1pbGFyIHRvIG5vZGUgcmVtb3ZhbCBhcyB3ZWxsIGluIHRoYXQgd2UgbmVlZCB0byBjaGFu
Z2UgdGhlIGxhc3QgY2hpbGQKICAgICAgICAgLy8gdG8gbWF0Y2ggbm93LgogICAgICAgICBpZiAo
KGNoZWNrVHlwZSA9PSBTaWJsaW5nRWxlbWVudFJlbW92ZWQgfHwgY2hlY2tUeXBlID09IEZpbmlz
aGVkUGFyc2luZ0NoaWxkcmVuKSAmJiBuZXdMYXN0RWxlbWVudCA9PSBlbGVtZW50QmVmb3JlQ2hh
bmdlICYmIG5ld0xhc3RFbGVtZW50KSB7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBuZXdMYXN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxl
ID0gbmV3TGFzdEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxl
IHx8ICFzdHlsZS0+bGFzdENoaWxkU3RhdGUoKSkKICAgICAgICAgICAgICAgICBuZXdMYXN0RWxl
bWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0yNDYxLDcgKzI0NjEs
NyBAQCBzdGF0aWMgUHNldWRvRWxlbWVudCogYmVmb3JlT3JBZnRlclBzZXVkCiAgICAgfQogfQog
Ci1SZW5kZXJTdHlsZSogRWxlbWVudDo6ZXhpc3RpbmdDb21wdXRlZFN0eWxlKCkKK2NvbnN0IFJl
bmRlclN0eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3R5bGUoKQogewogICAgIGlmIChh
dXRvKiByZW5kZXJUcmVlU3R5bGUgPSByZW5kZXJTdHlsZSgpKQogICAgICAgICByZXR1cm4gcmVu
ZGVyVHJlZVN0eWxlOwpAQCAtMjQ3MiwxMyArMjQ3MiwxMyBAQCBSZW5kZXJTdHlsZSogRWxlbWVu
dDo6ZXhpc3RpbmdDb21wdXRlZFN0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJlbmRlclN0
eWxlJiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSgpCitjb25zdCBSZW5kZXJTdHlsZSYg
RWxlbWVudDo6cmVzb2x2ZUNvbXB1dGVkU3R5bGUoKQogewogICAgIEFTU0VSVChpbkRvY3VtZW50
KCkpOwogICAgIEFTU0VSVCghZXhpc3RpbmdDb21wdXRlZFN0eWxlKCkpOwogCiAgICAgRGVxdWU8
RWxlbWVudCosIDMyPiBlbGVtZW50c1JlcXVpcmluZ0NvbXB1dGVkU3R5bGUoeyB0aGlzIH0pOwot
ICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gbnVsbHB0cjsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHI7CiAKICAgICAvLyBDb2xsZWN0IGFuY2Vz
dG9ycyB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IGhhcyBzdHlsZS4KICAgICBhdXRvIGNvbXBvc2Vk
QW5jZXN0b3JzID0gY29tcG9zZWRUcmVlQW5jZXN0b3JzKCp0aGlzKTsKQEAgLTI1MDEsNyArMjUw
MSw3IEBAIFJlbmRlclN0eWxlJiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHkKICAgICByZXR1
cm4gKmNvbXB1dGVkU3R5bGU7CiB9CiAKLVJlbmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0
eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpCitjb25zdCBSZW5kZXJTdHlsZSog
RWxlbWVudDo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQog
ewogICAgIGlmIChQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gYmVmb3JlT3JBZnRlclBz
ZXVkb0VsZW1lbnQoKnRoaXMsIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpKQogICAgICAgICByZXR1
cm4gcHNldWRvRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwpAQCAtMzI5NSw3ICszMjk1LDcgQEAg
dm9pZCBFbGVtZW50OjpkaWREZXRhY2hSZW5kZXJlcnMoKQogICAgIEFTU0VSVChoYXNDdXN0b21T
dHlsZVJlc29sdmVDYWxsYmFja3MoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gRWxl
bWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqKQorT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiBFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopCiB7CiAgICAgQVNTRVJUKGhhc0N1c3RvbVN0
eWxlUmVzb2x2ZUNhbGxiYWNrcygpKTsKICAgICByZXR1cm4gTnVsbG9wdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFRhYkluZGV4KGludCk7CiAgICAgdmlydHVhbCBFbGVtZW50KiBmb2N1c0RlbGVnYXRlKCk7
CiAKLSAgICBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKSBv
dmVycmlkZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9
IE5PUFNFVURPKSBvdmVycmlkZTsKIAogICAgIGJvb2wgbmVlZHNTdHlsZUludmFsaWRhdGlvbigp
IGNvbnN0OwogCkBAIC00ODAsNyArNDgwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRBdHRhY2hSZW5kZXJlcnMoKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERldGFjaFJlbmRlcmVy
cygpOwogICAgIHZpcnR1YWwgdm9pZCBkaWREZXRhY2hSZW5kZXJlcnMoKTsKLSAgICB2aXJ0dWFs
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSk7CisgICAgdmlydHVhbCBP
cHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHls
ZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpOwogCiAg
ICAgTGF5b3V0UmVjdCBhYnNvbHV0ZUV2ZW50SGFuZGxlckJvdW5kcyhib29sJiBpbmNsdWRlc0Zp
eGVkUG9zaXRpb25FbGVtZW50cykgb3ZlcnJpZGU7CiAKQEAgLTQ5OSw3ICs0OTksNyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKTsKLSAgICBF
bGVtZW50U3R5bGUgcmVzb2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAg
RWxlbWVudFN0eWxlIHJlc29sdmVTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
OwogCiAgICAgYm9vbCBoYXNEaXNwbGF5Q29udGVudHMoKSBjb25zdDsKICAgICB2b2lkIHNldEhh
c0Rpc3BsYXlDb250ZW50cyhib29sKTsKQEAgLTU5Miw4ICs1OTIsOCBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCByZW1vdmVTaGFkb3dSb290KCk7CiAKLSAgICBSZW5kZXJTdHlsZSogZXhpc3RpbmdD
b21wdXRlZFN0eWxlKCk7Ci0gICAgUmVuZGVyU3R5bGUmIHJlc29sdmVDb21wdXRlZFN0eWxlKCk7
CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGV4aXN0aW5nQ29tcHV0ZWRTdHlsZSgpOworICAgIGNv
bnN0IFJlbmRlclN0eWxlJiByZXNvbHZlQ29tcHV0ZWRTdHlsZSgpOwogCiAgICAgYm9vbCByYXJl
RGF0YVN0eWxlQWZmZWN0ZWRCeUVtcHR5KCkgY29uc3Q7CiAgICAgYm9vbCByYXJlRGF0YUNoaWxk
cmVuQWZmZWN0ZWRCeUhvdmVyKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1OSw3ICs2NTksNyBAQCBzdGF0aWMgTm9kZTo6RWRpdGFiaWxpdHkgY29tcHV0ZUVkaXRh
YmlsCiAgICAgLy8gd291bGQgZmlyZSBpbiB0aGUgbWlkZGxlIG9mIERvY3VtZW50OjpzZXRGb2N1
c2VkRWxlbWVudCgpLgogCiAgICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gJnN0YXJ0Tm9kZTsg
bm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBub2RlLT5pc0RvY3VtZW50Tm9kZSgpID8gbm9kZS0+cmVuZGVyU3R5bGUoKSA6IGNv
bnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLT5jb21wdXRlZFN0eWxlKCk7CisgICAgICAgIGF1dG8qIHN0
eWxlID0gbm9kZS0+aXNEb2N1bWVudE5vZGUoKSA/IG5vZGUtPnJlbmRlclN0eWxlKCkgOiBjb25z
dF9jYXN0PE5vZGUqPihub2RlKS0+Y29tcHV0ZWRTdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxl
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09
IE5PTkUpCkBAIC0xMDEwLDcgKzEwMTAsNyBAQCBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUxhc3RD
aGlsZCgpIGNvbnN0CiAgICAgcmV0dXJuIGxhc3RDaGlsZCgpOwogfQogCi1SZW5kZXJTdHlsZSog
Tm9kZTo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQorY29u
c3QgUmVuZGVyU3R5bGUqIE5vZGU6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVu
dFNwZWNpZmllcikKIHsKICAgICBhdXRvKiBjb21wb3NlZFBhcmVudCA9IGNvbXBvc2VkVHJlZUFu
Y2VzdG9ycygqdGhpcykuZmlyc3QoKTsKICAgICBpZiAoIWNvbXBvc2VkUGFyZW50KQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NDMsOSArNDQzLDkgQEAgcHVibGljOgogICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2RlbE9iamVjdCgpIGNvbnN0OwogICAgIAogICAgIC8v
IFdyYXBwZXIgZm9yIG5vZGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIHJlbmRlcmVyLCBidXQgc3RpbGwg
Y2FjaGUgdGhlIHN0eWxlIChsaWtlIEhUTUxPcHRpb25FbGVtZW50KS4KLSAgICBSZW5kZXJTdHls
ZSogcmVuZGVyU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5
bGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNl
dWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllciA9IE5PUFNFVURPKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVj
aWZpZXIgPSBOT1BTRVVETyk7CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8v
IE5vdGlmaWNhdGlvbiBvZiBkb2N1bWVudCBzdHJ1Y3R1cmUgY2hhbmdlcyAoc2VlIENvbnRhaW5l
ck5vZGUuaCBmb3IgbW9yZSBub3RpZmljYXRpb24gbWV0aG9kcykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVJlbmRlclN0eWxlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBSZW5kZXJTdHlsZSogTm9kZTo6cmVuZGVy
U3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBOb2RlOjpyZW5kZXJTdHls
ZSgpIGNvbnN0CiB7CiAgICAgYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAg
IGlmICghcmVuZGVyZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBQc2V1ZG9FbGVtZW50OjpjbGVh
ckhvc3RFbGVtZW50KCkKICAgICBtX2hvc3RFbGVtZW50ID0gbnVsbHB0cjsKIH0KIAotT3B0aW9u
YWw8RWxlbWVudFN0eWxlPiBQc2V1ZG9FbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVy
U3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSopCitPcHRpb25hbDxFbGVtZW50U3R5bGU+
IFBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKikKIHsKICAgICBhdXRvKiBzdHlsZSA9IG1faG9z
dEVsZW1lbnQtPnJlbmRlcmVyKCktPmdldENhY2hlZFBzZXVkb1N0eWxlKG1fcHNldWRvSWQsICZw
YXJlbnRTdHlsZSk7CiAgICAgaWYgKCFzdHlsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Q
c2V1ZG9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0Vs
ZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgRWxl
bWVudCogaG9zdEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RFbGVtZW50OyB9CiAgICAg
dm9pZCBjbGVhckhvc3RFbGVtZW50KCk7CiAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJl
c29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBz
aGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVz
b2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRBdHRhY2hS
ZW5kZXJlcnMoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFu
Z2UpIG92ZXJyaWRlOwogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHls
ZSYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzksMTggKzE3OSwxOCBAQCBzdGF0aWMgYm9vbCBpc05ld0xpbmVBdFBvc2l0aW9uKGNv
bnN0IFBvCiAgICAgcmV0dXJuIHRleHRBdFBvc2l0aW9uWzBdID09ICdcbic7CiB9CiAKLVJlbmRl
clN0eWxlKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxlT2ZFbmNsb3NpbmdU
ZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCitjb25zdCBSZW5kZXJTdHlsZSogQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkg
IT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcgogICAgICAgICB8fCAhcG9zaXRp
b24uY29udGFpbmVyTm9kZSgpCiAgICAgICAgIHx8ICFwb3NpdGlvbi5jb250YWluZXJOb2RlKCkt
PmlzVGV4dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIHJldHVybiAmcmVuZGVyZXItPnN0eWxlKCk7CiB9CkBAIC0yMDEsNyArMjAx
LDcgQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgIGVuZCA9
IGVuZE9mQ3VycmVudFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpOwogCiAgICAgYm9vbCBpc1N0
YXJ0QW5kRW5kT25TYW1lTm9kZSA9IGZhbHNlOwotICAgIGlmIChSZW5kZXJTdHlsZSogc3RhcnRT
dHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShzdGFydCkpIHsKKyAgICBpZiAo
YXV0byogc3RhcnRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShzdGFydCkp
IHsKICAgICAgICAgaXNTdGFydEFuZEVuZE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9z
aW5nVGV4dE5vZGUoZW5kKSAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5l
ck5vZGUoKTsKICAgICAgICAgYm9vbCBpc1N0YXJ0QW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1l
Tm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFw
aCkgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmNvbnRh
aW5lck5vZGUoKTsKIApAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kOjpyYW5nZUZvclAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChSZW5kZXJTdHls
ZSogZW5kU3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoZW5kKSkgeworICAg
IGlmIChhdXRvKiBlbmRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShlbmQp
KSB7CiAgICAgICAgIGJvb2wgaXNFbmRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlID0g
cmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKG1fZW5kT2ZMYXN0UGFyYWdyYXBoKSAmJiBl
bmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBtX2VuZE9mTGFzdFBhcmFncmFwaC5kZXByZWNhdGVkTm9k
ZSgpOwogICAgICAgICAvLyBJbmNsdWRlIFxuIGF0IHRoZSBlbmQgb2YgbGluZSBpZiB3ZSdyZSBh
dCBhbiBlbXB0eSBwYXJhZ3JhcGgKICAgICAgICAgaWYgKGVuZFN0eWxlLT5wcmVzZXJ2ZU5ld2xp
bmUoKSAmJiBzdGFydCA9PSBlbmQgJiYgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDwgZW5k
LmNvbnRhaW5lck5vZGUoKS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHsKQEAgLTI1OCw3ICsyNTgs
NyBAQCBWaXNpYmxlUG9zaXRpb24gQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kCiB7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZE9mTmV4dFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGVuZE9mQ3Vy
cmVudFBhcmFncmFwaC5uZXh0KCkpOwogICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kT2ZOZXh0
UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVu
ZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHBvc2l0aW9uKTsKKyAgICBhdXRvKiBzdHlsZSA9
IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShwb3NpdGlvbik7CiAgICAgaWYgKCFzdHls
ZSkKICAgICAgICAgcmV0dXJuIGVuZE9mTmV4dFBhcmFncmFwaDsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29t
bWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHByb3RlY3RlZDoKIHByaXZh
dGU6CiAgICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZvcm1h
dFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgY29uc3Qg
UG9zaXRpb24mIGVuZE9mU2VsZWN0aW9uLCBSZWZQdHI8RWxlbWVudD4mKSA9IDA7Ci0gICAgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYp
OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUo
Y29uc3QgUG9zaXRpb24mKTsKICAgICB2b2lkIHJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5nVGV4
dE5vZGVzSWZOZWVkZWQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgUG9zaXRpb24mLCBQb3NpdGlv
biYpOwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZk5leHRQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0
Tm9kZXNJZk5lZWRlZChWaXNpYmxlUG9zaXRpb24mLCBQb3NpdGlvbiYsIFBvc2l0aW9uJik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjppbml0KE5vZGUq
IG5vZGUsIFByb3AKICAgICB9CiAKICAgICBpZiAobm9kZSAmJiBub2RlLT5jb21wdXRlZFN0eWxl
KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gbm9kZS0+Y29tcHV0ZWRT
dHlsZSgpOworICAgICAgICBhdXRvKiByZW5kZXJTdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUo
KTsKICAgICAgICAgcmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChyZW5kZXJT
dHlsZSk7CiAgICAgICAgIGlmIChyZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29y
ZFNpemUoKSkKICAgICAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBjb21wdXRlZFN0eWxlQXRQb3NpdGlvbi5nZXRGb250U2l6ZUNTU1ZhbHVl
UHJlZmVycmluZ0tleXdvcmQoKS0+Y3NzVGV4dCgpKTsKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lk
IEVkaXRpbmdTdHlsZTo6aW5pdChOb2RlKiBub2RlLCBQcm9wCiAgICAgZXh0cmFjdEZvbnRTaXpl
RGVsdGEoKTsKIH0KIAotdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVRleHRGaWxsQW5kU3Ryb2tl
Q29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKQordm9pZCBFZGl0aW5nU3R5
bGU6OnJlbW92ZVRleHRGaWxsQW5kU3Ryb2tlQ29sb3JzSWZOZWVkZWQoY29uc3QgUmVuZGVyU3R5
bGUqIHJlbmRlclN0eWxlKQogewogICAgIC8vIElmIGEgbm9kZSdzIHRleHQgZmlsbCBjb2xvciBp
cyBpbnZhbGlkLCB0aGVuIGl0cyBjaGlsZHJlbiB1c2UgCiAgICAgLy8gdGhlaXIgZm9udC1jb2xv
ciBhcyB0aGVpciB0ZXh0IGZpbGwgY29sb3IgKHRoZXkgZG9uJ3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3
IEBAIHByaXZhdGU6CiAgICAgRWRpdGluZ1N0eWxlKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOwogICAgIEVkaXRpbmdTdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZUlEKTsK
ICAgICB2b2lkIGluaXQoTm9kZSosIFByb3BlcnRpZXNUb0luY2x1ZGUpOwotICAgIHZvaWQgcmVt
b3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSopOworICAgIHZv
aWQgcmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChjb25zdCBSZW5kZXJTdHls
ZSopOwogICAgIHZvaWQgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAgICAgdm9pZCBleHRyYWN0Rm9udFNpemVE
ZWx0YSgpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHls
ZShUJiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDggKzQz
MCw4IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gd2ViQ29udGVudEZy
b21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWlu
VGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KEZyYW1lKiAsIE5vZGUgKiZub2RlVG9SZW1vdmUpOwotICAgIHZvaWQgZ2V0VGV4dERlY29yYXRp
b25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKFJlbmRlclN0eWxlJiwgTlNNdXRhYmxl
RGljdGlvbmFyeSopIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVt
b3ZlKTsKKyAgICB2b2lkIGdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3RpbmdUeXBp
bmdTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIE5TTXV0YWJsZURpY3Rpb25hcnkqKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9uKGJvb2wmKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZvbnRBdHRyaWJ1dGVzRm9y
U2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RyaW5n
U2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
aW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5
KCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgTm9kZSogc3RhcnRp
bmdOb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICBSZW5kZXJTdHlsZSogc3RhcnRp
bmdTdHlsZSA9IHN0YXJ0aW5nTm9kZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgYXV0byogc3Rh
cnRpbmdTdHlsZSA9IHN0YXJ0aW5nTm9kZS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgaWYgKCFz
dGFydGluZ1N0eWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIE5vZGUqIGN1cnJl
bnROb2RlID0gc3RhcnRpbmdOb2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9FZGl0b3JDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0VkaXRvckNvY29hLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZJWE1FOiBUaGlzIGZpZ3VyZXMgb3V0IHRo
ZSBjdXJyZW50IHN0eWxlIGJ5IGluc2VydGluZyBhIDxzcGFuPiEKLVJlbmRlclN0eWxlKiBFZGl0
b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoRnJhbWUqIGZyYW1lLCBOb2RlICombm9kZVRvUmVt
b3ZlKQorY29uc3QgUmVuZGVyU3R5bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChG
cmFtZSogZnJhbWUsIE5vZGUgKiZub2RlVG9SZW1vdmUpCiB7CiAgICAgbm9kZVRvUmVtb3ZlID0g
bnVsbHB0cjsKICAgICAKQEAgLTc2LDcgKzc2LDcgQEAgUmVuZGVyU3R5bGUqIEVkaXRvcjo6c3R5
bGVGb3JTZWxlY3Rpb25TdAogICAgIHJldHVybiBzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCkgPyAm
c3R5bGVFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKIH0KIAotdm9pZCBF
ZGl0b3I6OmdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3RpbmdUeXBpbmdTdHlsZShS
ZW5kZXJTdHlsZSYgc3R5bGUsIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCkgY29uc3QKK3Zv
aWQgRWRpdG9yOjpnZXRUZXh0RGVjb3JhdGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQp
IGNvbnN0CiB7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAgICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGlu
Z1N0eWxlLT5zdHlsZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9F
ZGl0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsNyBAQCBjb25zdCBGb250
KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vCiAKICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9k
ZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5bGUgPSBz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5v
ZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAg
ICAgIGlmIChzdHlsZSkgewpAQCAtMjIwLDcgKzIyMCw3IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6
Zm9udEZvclNlbGVjdGlvbihib28KIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRl
c0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwg
bm9kZVRvUmVtb3ZlKTsKKyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQo
Jm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgY29uc3QgRm9udCogRWRpdG9yOjpm
b250Rm9yU2VsZWN0aW9uKGJvbwogCiAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7
IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisgICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxl
Y3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUK
IAogICAgICAgICBjb25zdCBGb250KiByZXN1bHQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5
bGUpIHsKQEAgLTE0Niw3ICsxNDYsNyBAQCBjb25zdCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxl
Y3Rpb24oYm9vCiBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rp
b25TdGFydCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92
ZSk7CisgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBu
b2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBTdHJpbmcgSFRNTFRpdGxlRWxlbWVudDo6dGV4dCgp
IGNvbnN0CiBTdHJpbmdXaXRoRGlyZWN0aW9uIEhUTUxUaXRsZUVsZW1lbnQ6OmNvbXB1dGVkVGV4
dFdpdGhEaXJlY3Rpb24oKQogewogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSOwot
ICAgIGlmIChSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IHRoaXMtPmNvbXB1dGVkU3R5bGUo
KSkKKyAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9IHRoaXMtPmNvbXB1dGVkU3R5bGUoKSkK
ICAgICAgICAgZGlyZWN0aW9uID0gY29tcHV0ZWRTdHlsZS0+ZGlyZWN0aW9uKCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIGF1dG8gc3R5bGUgPSBzdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50
KCp0aGlzLCBwYXJlbnRFbGVtZW50KCkgPyBwYXJlbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCkg
OiBudWxscHRyKS5yZW5kZXJTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHkKICAgICB1cGRhdGUoc2VsZWN0b3IpOwogfQogCi1p
bmxpbmUgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eTo6aW5pdGlhbGl6
ZShGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKQoraW5s
aW5lIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6OmluaXRpYWxpemUo
Rm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3IsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkK
IHsKICAgICAvLyBCZXdhcmUhIG1fZm9udC5mb250U2VsZWN0b3IoKSBtaWdodCBub3QgcG9pbnQg
dG8gZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkhCiAgICAgQVNTRVJUKG5ld1N0eWxlLmZvbnRDYXNj
YWRlKCkuZm9udFNlbGVjdG9yKCkgPT0gJmZvbnRTZWxlY3Rvcik7CkBAIC0yMTk2LDcgKzIxOTYs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgRG9jdW1l
bnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCk7CiAgICAgZG9jdW1lbnQudXBkYXRl
U3R5bGVJZk5lZWRlZCgpOwogCi0gICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0g
Y2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKKyAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9
IGNhbnZhcygpLT5jb21wdXRlZFN0eWxlKCkpCiAgICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVz
Y3JpcHRpb24oY29tcHV0ZWRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOwogICAgIGVsc2Ugewog
ICAgICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGRlZmF1bHRGb250RGVzY3JpcHRpb247CkBA
IC0yMjU5LDkgKzIyNTksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VGV4
dEJhCiAgICAgbW9kaWZpYWJsZVN0YXRlKCkudGV4dEJhc2VsaW5lID0gYmFzZWxpbmU7CiB9CiAK
LWlubGluZSBUZXh0RGlyZWN0aW9uIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9UZXh0RGly
ZWN0aW9uKERpcmVjdGlvbiBkaXJlY3Rpb24sIFJlbmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSkg
Y29uc3QKK2lubGluZSBUZXh0RGlyZWN0aW9uIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9U
ZXh0RGlyZWN0aW9uKERpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiogY29t
cHV0ZWRTdHlsZSkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAoY29tcHV0ZWRT
dHlsZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJbmhlcml0KSA/IGNhbnZhcygpLT5jb21w
dXRlZFN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8qIHN0eWxlID0gKGNvbXB1dGVkU3R5bGUg
fHwgZGlyZWN0aW9uID09IERpcmVjdGlvbjo6SW5oZXJpdCkgPyBjYW52YXMoKS0+Y29tcHV0ZWRT
dHlsZSgpIDogbnVsbHB0cjsKICAgICBpZiAoY29tcHV0ZWRTdHlsZSkKICAgICAgICAgKmNvbXB1
dGVkU3R5bGUgPSBzdHlsZTsKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewpAQCAtMjM4NCw3ICsy
Mzg0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogCiAgICAg
Ly8gRklYTUU6IE5lZWQgdG8gdHVybiBvZmYgZm9udCBzbW9vdGhpbmcuCiAKLSAgICBSZW5kZXJT
dHlsZSogY29tcHV0ZWRTdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHls
ZTsKICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHRvVGV4dERpcmVjdGlvbihzdGF0ZSgp
LmRpcmVjdGlvbiwgJmNvbXB1dGVkU3R5bGUpOwogICAgIGJvb2wgaXNSVEwgPSBkaXJlY3Rpb24g
PT0gUlRMOwogICAgIGJvb2wgb3ZlcnJpZGUgPSBjb21wdXRlZFN0eWxlID8gaXNPdmVycmlkZShj
b21wdXRlZFN0eWxlLT51bmljb2RlQmlkaSgpKSA6IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNyArMjU1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgRm9udFByb3h5JiBvcGVyYXRvcj0oY29uc3QgRm9udFByb3h5Jik7CiAKICAg
ICAgICAgYm9vbCByZWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5mb250U2VsZWN0b3Io
KTsgfQotICAgICAgICB2b2lkIGluaXRpYWxpemUoRm9udFNlbGVjdG9yJiwgUmVuZGVyU3R5bGUm
KTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplKEZvbnRTZWxlY3RvciYsIGNvbnN0IFJlbmRlclN0
eWxlJik7CiAgICAgICAgIEZvbnRNZXRyaWNzIGZvbnRNZXRyaWNzKCkgY29uc3Q7CiAgICAgICAg
IGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0Owog
ICAgICAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJikgY29uc3Q7CkBAIC0zODIsNyArMzgy
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsgfQotICAgIFRleHREaXJlY3Rpb24g
dG9UZXh0RGlyZWN0aW9uKERpcmVjdGlvbiwgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxlID0g
bnVsbHB0cikgY29uc3Q7CisgICAgVGV4dERpcmVjdGlvbiB0b1RleHREaXJlY3Rpb24oRGlyZWN0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5bGUgPSBudWxscHRyKSBjb25zdDsK
IAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgSFRNTFJlc291cmNl
UHJlbG9hZGVyOjpwcmVsb2FkKFByZWwKICAgICAgICAgcHJlbG9hZChXVEZNb3ZlKHJlcXVlc3Qp
KTsKIH0KIAotc3RhdGljIGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKEZyYW1lKiBmcmFtZSwg
UmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQor
c3RhdGljIGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKEZyYW1lKiBmcmFtZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQogewog
ICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYVF1ZXJpZXMgPSBNZWRpYVF1ZXJ5U2V0Ojpj
cmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KGF0dHJpYnV0ZVZhbHVlKTsKICAgICBNZWRp
YVF1ZXJ5RXZhbHVhdG9yIG1lZGlhUXVlcnlFdmFsdWF0b3IoInNjcmVlbiIsIGZyYW1lLCByZW5k
ZXJTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRl
clRodW1iRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDIx
ICs4MywyMSBAQCBSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIoU2xpCiB7CiB9
CiAKLXZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UoUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKQordm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZShj
b25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgaWYgKHBhcmVudFN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBzdHlsZSgpLnNldEFw
cGVhcmFuY2UoU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOworICAgICAgICBtdXRhYmxlU3R5bGUo
KS5zZXRBcHBlYXJhbmNlKFNsaWRlclRodW1iVmVydGljYWxQYXJ0KTsKICAgICBlbHNlIGlmIChw
YXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KQotICAgICAg
ICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCk7CisgICAg
ICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFy
dCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRl
clBhcnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYVNsaWRlclRodW1iUGFy
dCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFTbGlkZXJUaHVt
YlBhcnQpOwogICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFW
b2x1bWVTbGlkZXJQYXJ0KQotICAgICAgICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFWb2x1
bWVTbGlkZXJUaHVtYlBhcnQpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5zZXRBcHBlYXJhbmNl
KE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+
YXBwZWFyYW5jZSgpID09IE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAg
IHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYlBh
cnQpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhRnVsbFNjcmVl
blZvbHVtZVNsaWRlclRodW1iUGFydCk7CiAgICAgaWYgKHN0eWxlKCkuaGFzQXBwZWFyYW5jZSgp
KSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgICAgICB0aGVtZSgpLmFkanVzdFNs
aWRlclRodW1iU2l6ZShzdHlsZSgpLCBlbGVtZW50KCkpOworICAgICAgICB0aGVtZSgpLmFkanVz
dFNsaWRlclRodW1iU2l6ZShtdXRhYmxlU3R5bGUoKSwgZWxlbWVudCgpKTsKICAgICB9CiB9CiAK
QEAgLTE1OSwxMyArMTU5LDEzIEBAIHZvaWQgUmVuZGVyU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQo
KQogICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CiAgICAgYXV0byYgaW5wdXQg
PSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCgpLT5zaGFkb3dIb3N0KCkpOwog
ICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGhhc1ZlcnRpY2FsQXBwZWFyYW5jZShpbnB1dCk7Ci0gICAg
c3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVydGljYWwgPyBGbG93Q29sdW1uIDogRmxvd1Jv
dyk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0RmxleERpcmVjdGlvbihpc1ZlcnRpY2FsID8gRmxv
d0NvbHVtbiA6IEZsb3dSb3cpOwogICAgIFRleHREaXJlY3Rpb24gb2xkVGV4dERpcmVjdGlvbiA9
IHN0eWxlKCkuZGlyZWN0aW9uKCk7CiAgICAgaWYgKGlzVmVydGljYWwpIHsKICAgICAgICAgLy8g
RklYTUU6IFdvcmsgYXJvdW5kIHJvdW5kaW5nIGlzc3VlcyBpbiBSVEwgdmVydGljYWwgc2xpZGVy
cy4gV2Ugd2FudCB0aGVtIHRvCiAgICAgICAgIC8vIHJlbmRlciBpZGVudGljYWxseSB0byBMVFIg
dmVydGljYWwgc2xpZGVycy4gV2UgY2FuIHJlbW92ZSB0aGlzIHdvcmsgYXJvdW5kIHdoZW4KICAg
ICAgICAgLy8gc3VicGl4ZWwgcmVuZGVyaW5nIGlzIGVuYWJsZWQgb24gYWxsIHBvcnRzLgotICAg
ICAgICBzdHlsZSgpLnNldERpcmVjdGlvbihMVFIpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5z
ZXREaXJlY3Rpb24oTFRSKTsKICAgICB9CiAKICAgICBSZW5kZXJCb3gqIHRodW1iID0gaW5wdXQu
c2xpZGVyVGh1bWJFbGVtZW50KCkgPyBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVuZGVy
Qm94KCkgOiBudWxscHRyOwpAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyQ29u
dGFpbmVyOjpsYXlvdXQoKQogCiAgICAgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dCgpOwogCi0g
ICAgc3R5bGUoKS5zZXREaXJlY3Rpb24ob2xkVGV4dERpcmVjdGlvbik7CisgICAgbXV0YWJsZVN0
eWxlKCkuc2V0RGlyZWN0aW9uKG9sZFRleHREaXJlY3Rpb24pOwogICAgIC8vIFRoZXNlIHNob3Vs
ZCBhbHdheXMgZXhpc3QsIHVubGVzcyBzb21lb25lIG11dGF0ZXMgdGhlIHNoYWRvdyBET00gKGUu
Zy4sIGluIHRoZSBpbnNwZWN0b3IpLgogICAgIGlmICghdGh1bWIgfHwgIXRyYWNrKQogICAgICAg
ICByZXR1cm47CkBAIC01NzQsNyArNTc0LDcgQEAgSFRNTElucHV0RWxlbWVudCogU2xpZGVyVGh1
bWJFbGVtZW50OjpobwogICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihzaGFk
b3dIb3N0KCkpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFNsaWRlclRodW1iRWxlbWVu
dDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqIGhvc3RTdHls
ZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVyVGh1bWJFbGVtZW50OjpyZXNvbHZlQ3Vz
dG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogaG9zdFN0eWxl
KQogewogICAgIC8vIFRoaXMgZG9lc24ndCBhY3R1YWxseSBjb21wdXRlIHN0eWxlLiBUaGlzIGlz
IGp1c3QgYSBoYWNrIHRvIHBpY2sgc2hhZG93IHBzZXVkbyBpZCB3aGVuIGhvc3Qgc3R5bGUgaXMg
a25vd24uCiAKQEAgLTYyOCw3ICs2MjgsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gU2xp
ZGVyQ29udGFpbmVyCiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNsaWRlckNvbnRh
aW5lcj4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVudFN0eWxl
PiBTbGlkZXJDb250YWluZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUm
LCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlkZXJD
b250YWluZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQogewogICAgIC8vIFRoaXMgZG9lc24ndCBhY3R1
YWxseSBjb21wdXRlIHN0eWxlLiBUaGlzIGlzIGp1c3QgYSBoYWNrIHRvIHBpY2sgc2hhZG93IHBz
ZXVkbyBpZCB3aGVuIGhvc3Qgc3R5bGUgaXMga25vd24uCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgdm9pZCB3
aWxsRGV0YWNoUmVuZGVyZXJzKCkgb3ZlcnJpZGU7CiAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5
bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKikgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOwogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQg
c3RhcnREcmFnZ2luZygpOwpAQCAtMTIwLDcgKzEyMCw3IEBAIGlubGluZSBSZWY8U2xpZGVyVGh1
bWJFbGVtZW50PiBTbGlkZXJUaHUKIGNsYXNzIFJlbmRlclNsaWRlclRodW1iIGZpbmFsIDogcHVi
bGljIFJlbmRlckJsb2NrRmxvdyB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU2xpZGVyVGh1bWIoU2xp
ZGVyVGh1bWJFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7Ci0gICAgdm9pZCB1cGRhdGVBcHBlYXJh
bmNlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVBcHBlYXJhbmNl
KGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBp
c1NsaWRlclRodW1iKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMzUsNyArMTM1LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBTbGlkZXJDb250YWluZXJFbGVtZW50KERvY3VtZW50Jik7CiAgICAg
UmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHls
ZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxF
bGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxl
Kikgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOwogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIEF0b21pY1N0cmluZyBtX3NoYWRvd1BzZXVkb0lkOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIFJlZjxU
ZXh0Q29udHJvbElubmVyRWxlbWVudD4gVGV4dENvbnRyb2wKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBUZXh0Q29udHJvbElubmVyRWxlbWVudChkb2N1bWVudCkpOwogfQogCi1PcHRpb25hbDxF
bGVtZW50U3R5bGU+IFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUo
UmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxl
bWVudFN0eWxlPiBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKIHsK
ICAgICBhdXRvIGlubmVyQ29udGFpbmVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCk7
CiAgICAgaW5uZXJDb250YWluZXJTdHlsZS0+aW5oZXJpdEZyb20oc2hhZG93SG9zdFN0eWxlKTsK
QEAgLTEzNCw3ICsxMzQsNyBAQCBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sqIFRleHRDb250
cm9sCiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jaz4oSFRN
TERpdkVsZW1lbnQ6OnJlbmRlcmVyKCkpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFRl
eHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxl
JiwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQogewogICAgIGF1
dG8gc3R5bGUgPSBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKnNoYWRvd0hv
c3QoKSkuY3JlYXRlSW5uZXJUZXh0U3R5bGUoKnNoYWRvd0hvc3RTdHlsZSk7CiAgICAgcmV0dXJu
IEVsZW1lbnRTdHlsZShzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclN0eWxlPihXVEZNb3ZlKHN0eWxl
KSkpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpU
ZXh0Q29udHIKICAgICBzZXRIYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKTsKIH0KIAot
T3B0aW9uYWw8RWxlbWVudFN0eWxlPiBUZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6cmVz
b2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNo
YWRvd0hvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xQbGFjZWhv
bGRlckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCiB7CiAgICAgYXV0byBz
dHlsZSA9IHJlc29sdmVTdHlsZSgmcGFyZW50U3R5bGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
CiBwcm90ZWN0ZWQ6CiAgICAgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLSAg
ICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoRG9jdW1lbnQmKTsKICAgICBSZW5k
ZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYs
IGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVu
dFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKICAgICBib29s
IGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAg
IGJvb2wgaXNUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiB9OwpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50KERvY3VtZW50Jik7CiAgICAgCi0gICAgT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OwogfTsKIAogY2xhc3MgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1
YmxpYyBIVE1MRGl2RWxlbWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODEsNyArMTM4MSw3IEBAIE9wdGlvbmFsQ3Vyc29y
IEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc28KICAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdl
OwogCiAgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gcmVuZGVyZXIgPyAmcmVuZGVyZXItPnN0eWxlKCkgOiBudWxscHRyOworICAg
IGF1dG8qIHN0eWxlID0gcmVuZGVyZXIgPyAmcmVuZGVyZXItPnN0eWxlKCkgOiBudWxscHRyOwog
ICAgIGJvb2wgaG9yaXpvbnRhbFRleHQgPSAhc3R5bGUgfHwgc3R5bGUtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCk7CiAgICAgY29uc3QgQ3Vyc29yJiBpQmVhbSA9IGhvcml6b250YWxUZXh0ID8g
aUJlYW1DdXJzb3IoKSA6IHZlcnRpY2FsVGV4dEN1cnNvcigpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBzdGF0aWMgaW5saW5lIGRvdWJsZSBz
b2x2ZVN0ZXBzRnVuY3Rpb24oCiAgICAgcmV0dXJuIGZsb29yKG51bVN0ZXBzICogdCkgLyBudW1T
dGVwczsKIH0KIAotQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShBbmltYXRpb24mIGFuaW1h
dGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9z
aXRlQW5pbWF0aW9uKQorQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRp
b24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcG9zaXRlQW5pbWF0aW9uKQogICAgIDogbV9vYmplY3QocmVuZGVyZXIpCiAgICAgLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbihjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBtX2FuaW1hdGlv
bihhbmltYXRpb24pCisgICAgLCBtX2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFu
aW1hdGlvbikpCiB7CiAgICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgZHVyYXRpb24KICAgICBpZiAo
bV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMgUmVmQ291
bnRlZDwKICAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb247CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQW5pbWF0aW9uQmFzZShBbmltYXRpb24m
IHRyYW5zaXRpb24sIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qKTsKKyAgICBB
bmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCos
IENvbXBvc2l0ZUFuaW1hdGlvbiopOwogICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKSB7IH0K
IAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7
IH0KQEAgLTEzOCw3ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHByb2dyZXNzKGRvdWJs
ZSBzY2FsZSA9IDEsIGRvdWJsZSBvZmZzZXQgPSAwLCBjb25zdCBUaW1pbmdGdW5jdGlvbiogPSBu
dWxscHRyKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIHN0
YXRlIGNoYW5nZWQuCi0gICAgdmlydHVhbCBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9u
KiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBS
ZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSovLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRlKENvbXBv
c2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogLypjdXJy
ZW50U3R5bGUqLywgY29uc3QgUmVuZGVyU3R5bGUqIC8qdGFyZ2V0U3R5bGUqLywgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0eWxlKi8pID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFu
aW1hdGVkU3R5bGUqLykgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGNvbXB1dGVFeHRlbnRPZlRy
YW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3QgPSAwOwpAQCAtMTUwLDcgKzE1MCw3
IEBAIHB1YmxpYzoKICAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mKSBj
b25zdDsKIAogICAgIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb247IH0KLSAgICB2b2lkIHNldEFuaW1hdGlvbihBbmltYXRpb24mIGFuaW1hdGlv
bikgeyBtX2FuaW1hdGlvbiA9IGFuaW1hdGlvbjsgfQorICAgIHZvaWQgc2V0QW5pbWF0aW9uKGNv
bnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7IG1fYW5pbWF0aW9uID0gY29uc3RfY2FzdDxBbmlt
YXRpb24mPihhbmltYXRpb24pOyB9CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGFuaW1h
dGlvbiBpcyBvdmVycmlkZGVuLiBUaGlzIHdpbGwgb25seSBiZSB0aGUgY2FzZSBmb3IKICAgICAv
LyBJbXBsaWNpdEFuaW1hdGlvbnMgYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Ig
bm90IHdlIHNob3VsZCBmb3JjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OTMsOSArNTkzLDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVy
OjpjYW5jZWxBbmltYXRpbwogICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5
bnRoZXRpY1N0eWxlQ2hhbmdlKTsKIH0KIAotYm9vbCBBbmltYXRpb25Db250cm9sbGVyOjp1cGRh
dGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSYgbmV3U3R5
bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCitib29sIEFu
aW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSByZW5k
ZXJlci5oYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmcmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7
CisgICAgYXV0byogb2xkU3R5bGUgPSByZW5kZXJlci5oYXNJbml0aWFsaXplZFN0eWxlKCkgPyAm
cmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKCghb2xkU3R5bGUgfHwgKCFvbGRT
dHlsZS0+YW5pbWF0aW9ucygpICYmICFvbGRTdHlsZS0+dHJhbnNpdGlvbnMoKSkpICYmICghbmV3
U3R5bGUuYW5pbWF0aW9ucygpICYmICFuZXdTdHlsZS50cmFuc2l0aW9ucygpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIH5BbmltYXRpb25Db250cm9sbGVyKCk7
CiAKICAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYpOwotICAgIGJvb2wg
dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKKyAgICBib29sIHVw
ZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHls
ZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVu
ZGVyRWxlbWVudCYpOwogCiAgICAgLy8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBl
eHRlbnQgb2YgYW55IHRyYW5zZm9ybSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgIH0KIH0K
IAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKIHsKICAgICAvLyBJZiBjdXJyZW50U3R5bGUg
aXMgbnVsbCBvciB0aGVyZSBhcmUgbm8gb2xkIG9yIG5ldyB0cmFuc2l0aW9ucywganVzdCBza2lw
IGl0CiAgICAgaWYgKCFjdXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMo
KSAmJiBtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkpCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAvLyBDaGVjayB0byBzZWUgaWYg
d2UgbmVlZCB0byB1cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwogICAgIGlmICh0YXJnZXRT
dHlsZS0+dHJhbnNpdGlvbnMoKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRh
cmdldFN0eWxlLT50cmFuc2l0aW9ucygpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQW5p
bWF0aW9uJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9u
KGkpOworICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRp
b25zKCktPmFuaW1hdGlvbihpKTsKICAgICAgICAgICAgIGJvb2wgaXNBY3RpdmVUcmFuc2l0aW9u
ID0gIW1fc3VzcGVuZGVkICYmIChhbmltYXRpb24uZHVyYXRpb24oKSB8fCBhbmltYXRpb24uZGVs
YXkoKSA+IDApOwogCiAgICAgICAgICAgICBBbmltYXRpb246OkFuaW1hdGlvbk1vZGUgbW9kZSA9
IGFuaW1hdGlvbi5hbmltYXRpb25Nb2RlKCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgICAgICAgICAgICAgIC8vIGFuZCB3
ZSBoYXZlIHRvIHVzZSB0aGUgdW5hbmltYXRlZFN0eWxlIGZyb20gdGhlIGFuaW1hdGlvbi4gV2Ug
ZG8gdGhlIHRlc3QKICAgICAgICAgICAgICAgICAvLyBhZ2FpbnN0IHRoZSB1bmFuaW1hdGVkIHN0
eWxlIGhlcmUsIGJ1dCB3ZSAib3ZlcnJpZGUiIHRoZSB0cmFuc2l0aW9uIGxhdGVyLgogICAgICAg
ICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gZ2V0QW5p
bWF0aW9uRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGZy
b21TdHlsZSA9IGtleWZyYW1lQW5pbSA/IGtleWZyYW1lQW5pbS0+dW5hbmltYXRlZFN0eWxlKCkg
OiBjdXJyZW50U3R5bGU7CisgICAgICAgICAgICAgICAgYXV0byogZnJvbVN0eWxlID0ga2V5ZnJh
bWVBbmltID8ga2V5ZnJhbWVBbmltLT51bmFuaW1hdGVkU3R5bGUoKSA6IGN1cnJlbnRTdHlsZTsK
IAogICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgdHJhbnNpdGlv
biBmb3IgdGhpcyBwcm9wCiAgICAgICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxB
bmltID0gbV90cmFuc2l0aW9ucy5nZXQocHJvcCk7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgICAgICBtX3RyYW5zaXRpb25z
LnJlbW92ZShwcm9wZXJ0eVRvUmVtb3ZlKTsKIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246
OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQordm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRhcmdldFN0eWxlKQogewogICAgIC8vIE5vdGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2
ZSBhbnkgYW5pbWF0aW9ucywgYW5kIGRpZG4ndCBoYXZlIGFueSBiZWZvcmUKICAgICBpZiAobV9r
ZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpICYmICF0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9u
cygpKQpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVL
ZXlmcmFtZUEKICAgICBpZiAodGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSkgewogICAgICAgICBp
bnQgbnVtQW5pbXMgPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5zaXplKCk7CiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkgewotICAgICAgICAgICAgQW5pbWF0
aW9uJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7
CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygp
LT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgYW5pbWF0aW9uTmFtZShh
bmltYXRpb24ubmFtZSgpKTsKIAogICAgICAgICAgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFu
aW1hdGlvbigpKQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1
cGRhdGVLZXlmcmFtZUEKICAgICBzdGQ6OnN3YXAobmV3QW5pbWF0aW9ucywgbV9rZXlmcmFtZUFu
aW1hdGlvbnMpOwogfQogCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUm
IHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUp
Citib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRh
cmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpCiB7
CiAgICAgLy8gV2UgZG9uJ3QgZG8gYW55IHRyYW5zaXRpb25zIGlmIHdlIGRvbid0IGhhdmUgYSBj
dXJyZW50U3R5bGUgKG9uIHN0YXJ0dXApLgogICAgIHVwZGF0ZVRyYW5zaXRpb25zKCZyZW5kZXJl
ciwgY3VycmVudFN0eWxlLCAmdGFyZ2V0U3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lk
IGNsZWFyUmVuZGVyZXIoKTsKIAotICAgIGJvb2wgYW5pbWF0ZShSZW5kZXJFbGVtZW50JiwgUmVu
ZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpOworICAgIGJvb2wgYW5pbWF0ZShS
ZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVu
ZGVkU3R5bGUpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRT
dHlsZSgpIGNvbnN0OwogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9u
KExheW91dFJlY3QmKSBjb25zdDsKIApAQCAtODgsOCArODgsOCBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIENvbXBvc2l0ZUFuaW1hdGlvbihBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYpOwog
Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiwgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0
ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRp
b25zKFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmlt
YXRpb25zKFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwogICAgIAogICAgIHR5cGVkZWYgSGFzaE1h
cDxpbnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4+IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8S2V5ZnJh
bWVBbmltYXRpb24+PiBBbmltYXRpb25OYW1lTWFwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9uKEFuaW1hdGlvbiYgdHJh
bnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCog
cmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIFJlbmRlclN0eWxlKiBmcm9t
U3R5bGUpCitJbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0
aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJF
bGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGZyb21TdHlsZSkKICAgICA6IEFuaW1hdGlvbkJhc2UodHJhbnNpdGlvbiwgcmVu
ZGVyZXIsIGNvbXBBbmltKQogICAgICwgbV9mcm9tU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCpmcm9tU3R5bGUpKQogICAgICwgbV90cmFuc2l0aW9uUHJvcGVydHkodHJhbnNpdGlvbi5wcm9w
ZXJ0eSgpKQpAQCAtNjAsNyArNjAsNyBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzaG91bGRT
ZW5kRXZlbnRGCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlw
ZShpbkxpc3RlbmVyVHlwZSk7CiB9CiAKLWJvb2wgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUo
Q29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwg
UmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBh
bmltYXRlZFN0eWxlKQorYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVB
bmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5k
ZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpCiB7CiAgICAgLy8gSWYgd2UgZ2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9u
IGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBjbGVhbmluZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5p
bWF0aW9uLgogICAgIC8vIFNvIGp1c3QgcmV0dXJuLiBFdmVyeXRoaW5nIGlzIGFscmVhZHkgYWxs
IGNsZWFuZWQgdXAuCkBAIC0yMDUsNyArMjA1LDcgQEAgYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6
c2VuZFRyYW5zaXRpb25FdgogICAgIHJldHVybiBmYWxzZTsgLy8gRGlkbid0IGRpc3BhdGNoIGFu
IGV2ZW50CiB9CiAKLXZvaWQgSW1wbGljaXRBbmltYXRpb246OnJlc2V0KFJlbmRlclN0eWxlKiB0
bykKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlKiB0bykK
IHsKICAgICBBU1NFUlQodG8pOwogICAgIEFTU0VSVChtX2Zyb21TdHlsZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0
QW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgUmVuZGVy
RWxlbWVudDsKIC8vIGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgogY2xhc3MgSW1wbGljaXRB
bmltYXRpb24gOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBDU1NQcm9w
ZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9z
aXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUp
CisgICAgc3RhdGljIFJlZjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlv
biYgYW5pbWF0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBJbXBsaWNpdEFuaW1hdGlvbihhbmltYXRpb24sIGFuaW1hdGluZ1Byb3BlcnR5LCBy
ZW5kZXJlciwgY29tcG9zaXRlQW5pbWF0aW9uLCBmcm9tU3R5bGUpKTsKICAgICB9OwpAQCAtNTQs
OSArNTQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgdGltZU9m
ZnNldCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRBbmltYXRpb24oKSBvdmVycmlkZTsKIAotICAg
IGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKKyAgICBi
b29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFu
aW1hdGVkU3R5bGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXNldChSZW5kZXJTdHls
ZSogdG8pOworICAgIHZvaWQgcmVzZXQoY29uc3QgUmVuZGVyU3R5bGUqIHRvKTsKIAogICAgIGJv
b2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCBv
dmVycmlkZTsKIApAQCAtODcsNyArODcsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0
ZToKLSAgICBJbXBsaWNpdEFuaW1hdGlvbihBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBSZW5k
ZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyU3R5bGUqKTsKKyAgICBJbXBs
aWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBSZW5kZXJFbGVt
ZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0
dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpOwogCiAgICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3
ZSBhcmUgYmxlbmRpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LZXlmcmFtZUFu
aW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRpb24oQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwg
UmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKK0tleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFt
ZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVu
ZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZShhbmltYXRpb24s
IHJlbmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgLCBtX2tleWZyYW1lcyhhbmltYXRp
b24ubmFtZSgpKQogICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCp1bmFuaW1hdGVkU3R5bGUpKQpAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OmZldGNoSW50ZXJ2YWxFbmQKICAgICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNl
dCwgcHJldktleWZyYW1lLnRpbWluZ0Z1bmN0aW9uKG5hbWUoKSkpOwogfQogCi1ib29sIEtleWZy
YW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0
aW9uLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCiti
b29sIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9z
aXRlQW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBS
ZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFu
aW1hdGVkU3R5bGUpCiB7CiAgICAgLy8gRmlyZSB0aGUgc3RhcnQgdGltZW91dCBpZiBuZWVkZWQK
ICAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQwLDEyIEBAIGNsYXNzIFJlbmRlclN0eWxlOwog
Ly8gQSBLZXlmcmFtZUFuaW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGFuIGV4cGxpY2l0IGFu
aW1hdGlvbiBmb3IgYSBzaW5nbGUgUmVuZGVyRWxlbWVudC4KIGNsYXNzIEtleWZyYW1lQW5pbWF0
aW9uIGZpbmFsIDogcHVibGljIEFuaW1hdGlvbkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8S2V5ZnJhbWVBbmltYXRpb24+IGNyZWF0ZShBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9u
LCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorICAgIHN0YXRpYyBSZWY8S2V5ZnJhbWVB
bmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCByZW5kZXJlciwgY29tcG9z
aXRlQW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKICAgICB9CiAKLSAgICBib29sIGFuaW1h
dGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxl
KiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBhbmltYXRl
KENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSog
Y3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZ2V0
QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+Jikgb3ZlcnJpZGU7CiAK
ICAgICBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC04OCw3ICs4OCw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBw
cml2YXRlOgotICAgIEtleWZyYW1lQW5pbWF0aW9uKEFuaW1hdGlvbiYsIFJlbmRlckVsZW1lbnQq
LCBDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKTsKKyAg
ICBLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgQ29t
cG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSk7CiAg
ICAgdmlydHVhbCB+S2V5ZnJhbWVBbmltYXRpb24oKTsKICAgICAKICAgICAvLyBHZXQgdGhlIHN0
eWxlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IHN1cnJvdW5kaW5nIHRoZSBjdXJyZW50IGFuaW1h
dGlvbiB0aW1lIGFuZCB0aGUgcHJvZ3Jlc3MgYmV0d2VlbiB0aGVtLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIFJlbmRlck5hbWVkRmxvd1Ro
cmVhZCYgRmxvd1RocmVhZENvbnRyb2wKIAogdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6c3R5
bGVEaWRDaGFuZ2UoKQogewotICAgIFJlbmRlclN0eWxlJiB2aWV3U3R5bGUgPSBtX3ZpZXctPnN0
eWxlKCk7CisgICAgYXV0byYgdmlld1N0eWxlID0gbV92aWV3LT5zdHlsZSgpOwogICAgIGZvciAo
YXV0byYgZmxvd1JlbmRlcmVyIDogKm1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCkKICAgICAg
ICAgZmxvd1JlbmRlcmVyLT5zZXRTdHlsZShSZW5kZXJGbG93VGhyZWFkOjpjcmVhdGVGbG93VGhy
ZWFkU3R5bGUoJnZpZXdTdHlsZSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI4LDcgKzEz
MjgsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmNvbnN0cmFpblRvTGluZVRvcEFuCiBzdGF0aWMg
TGF5b3V0UmVjdCBjbGlwUmVjdEZvck5pbmVQaWVjZUltYWdlU3RyaXAoSW5saW5lRmxvd0JveCog
Ym94LCBjb25zdCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UsIGNvbnN0IExheW91dFJlY3QmIHBhaW50
UmVjdCkKIHsKICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0KHBhaW50UmVjdCk7Ci0gICAgUmVuZGVy
U3R5bGUmIHN0eWxlID0gYm94LT5yZW5kZXJlcigpLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUg
PSBib3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKICAgICBMYXlvdXRCb3hFeHRlbnQgb3V0c2V0cyA9
IHN0eWxlLmltYWdlT3V0c2V0cyhpbWFnZSk7CiAgICAgaWYgKGJveC0+aXNIb3Jpem9udGFsKCkp
IHsKICAgICAgICAgY2xpcFJlY3Quc2V0WShwYWludFJlY3QueSgpIC0gb3V0c2V0cy50b3AoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4Nyw3ICsyODcsNyBAQCBzdGF0aWMgYm9vbCBib3JkZXJPclBhZGRp
bmdMb2dpY2FsV2lkdGhDCiAKIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7Ci0gICAgUmVu
ZGVyU3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBuZXdTdHlsZSA9IHN0eWxl
KCk7CiAKICAgICBib29sIGhhZFRyYW5zZm9ybSA9IGhhc1RyYW5zZm9ybSgpOwogICAgIGJvb2wg
Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9ja0ludmFsaWRhdGVkID0gZmFsc2U7CkBAIC0yODM3LDcg
KzI4MzcsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KGJvb2wgCiAgICAg
ICAgIHJldHVybiBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxp
bmVQb3NpdGlvbk1vZGUpOwogCiAgICAgaWYgKGZpcnN0TGluZSAmJiB2aWV3KCkudXNlc0ZpcnN0
TGluZVJ1bGVzKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUmIHMgPSBmaXJzdExpbmUgPyBmaXJz
dExpbmVTdHlsZSgpIDogc3R5bGUoKTsKKyAgICAgICAgYXV0byYgcyA9IGZpcnN0TGluZSA/IGZp
cnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwogICAgICAgICBpZiAoJnMgIT0gJnN0eWxlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gcy5jb21wdXRlZExpbmVIZWlnaHQoKTsKICAgICB9CkBAIC0yOTc2
LDkgKzI5NzYsOSBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJsb2NrCiAg
ICAgcmV0dXJuIGZpcnN0TGluZUJsb2NrOwogfQogCi1zdGF0aWMgUmVuZGVyU3R5bGUmIHN0eWxl
Rm9yRmlyc3RMZXR0ZXIoUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2Jq
ZWN0KiBmaXJzdExldHRlckNvbnRhaW5lcikKK3N0YXRpYyBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGVGb3JGaXJzdExldHRlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJP
YmplY3QqIGZpcnN0TGV0dGVyQ29udGFpbmVyKQogewotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9T
dHlsZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRF
UiwgJmZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgpKTsKKyAgICBhdXRvKiBw
c2V1ZG9TdHlsZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldE11dGFibGVDYWNoZWRQc2V1ZG9TdHls
ZShGSVJTVF9MRVRURVIsICZmaXJzdExldHRlckNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSk7
CiAgICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpbml0aWFsIGxldHRlciBkcm9wIHRoYXQgaXMg
Pj0gMSwgdGhlbiB3ZSBuZWVkIHRvIGZvcmNlIGZsb2F0aW5nIHRvIGJlIG9uLgogICAgIGlmIChw
c2V1ZG9TdHlsZS0+aW5pdGlhbExldHRlckRyb3AoKSA+PSAxICYmICFwc2V1ZG9TdHlsZS0+aXNG
bG9hdGluZygpKQpAQCAtMzA2MSw3ICszMDYxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRl
Rmlyc3RMZXR0ZXJTdHlsZQogewogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyID0gY3Vy
cmVudENoaWxkLT5wYXJlbnQoKTsKICAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckNvbnRh
aW5lciA9IGZpcnN0TGV0dGVyLT5wYXJlbnQoKTsKLSAgICBSZW5kZXJTdHlsZSYgcHNldWRvU3R5
bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVyQ29u
dGFpbmVyKTsKKyAgICBhdXRvJiBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmly
c3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwogICAgIEFTU0VSVChmaXJzdExl
dHRlci0+aXNGbG9hdGluZygpIHx8IGZpcnN0TGV0dGVyLT5pc0lubGluZSgpKTsKIAogICAgIGlm
IChTdHlsZTo6ZGV0ZXJtaW5lQ2hhbmdlKGZpcnN0TGV0dGVyLT5zdHlsZSgpLCBwc2V1ZG9TdHls
ZSkgPT0gU3R5bGU6OkRldGFjaCkgewpAQCAtMzEwMiw3ICszMTAyLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6dXBkYXRlRmlyc3RMZXR0ZXJTdHlsZQogdm9pZCBSZW5kZXJCbG9jazo6Y3JlYXRlRmly
c3RMZXR0ZXJSZW5kZXJlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJU
ZXh0KiBjdXJyZW50VGV4dENoaWxkKQogewogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVy
Q29udGFpbmVyID0gY3VycmVudFRleHRDaGlsZC0+cGFyZW50KCk7Ci0gICAgUmVuZGVyU3R5bGUm
IHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJzdExldHRlckJsb2NrLCBmaXJz
dExldHRlckNvbnRhaW5lcik7CisgICAgYXV0byYgcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0
TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKICAgICBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogZmlyc3RMZXR0ZXIgPSBudWxscHRyOwogICAgIGlmIChwc2V1ZG9T
dHlsZS5kaXNwbGF5KCkgPT0gSU5MSU5FKQogICAgICAgICBmaXJzdExldHRlciA9IG5ldyBSZW5k
ZXJJbmxpbmUoZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNsb25lKHBzZXVkb1N0eWxlKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MTUsNyArMTYxNSw3IEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2tGbG93OjphZGp1c3RCbG9ja0MKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0
aWMgaW5saW5lIExheW91dFVuaXQgY2FsY3VsYXRlTWluaW11bVBhZ2VIZWlnaHQoUmVuZGVyU3R5
bGUmIHJlbmRlclN0eWxlLCBSb290SW5saW5lQm94JiBsYXN0TGluZSwgTGF5b3V0VW5pdCBsaW5l
VG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgY2Fs
Y3VsYXRlTWluaW11bVBhZ2VIZWlnaHQoY29uc3QgUmVuZGVyU3R5bGUmIHJlbmRlclN0eWxlLCBS
b290SW5saW5lQm94JiBsYXN0TGluZSwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxp
bmVCb3R0b20pCiB7CiAgICAgLy8gV2UgbWF5IHJlcXVpcmUgYSBjZXJ0YWluIG1pbmltdW0gbnVt
YmVyIG9mIGxpbmVzIHBlciBwYWdlIGluIG9yZGVyIHRvIHNhdGlzZnkKICAgICAvLyBvcnBoYW5z
IGFuZCB3aWRvd3MsIGFuZCB0aGF0IG1heSBhZmZlY3QgdGhlIG1pbmltdW0gcGFnZSBoZWlnaHQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmCiAgICAgaWYgKGlzRG9jRWxlbWVudFJlbmRlcmVyIHx8IGlzQm9keVJlbmRlcmVy
KSB7CiAgICAgICAgIC8vIFByb3BhZ2F0ZSB0aGUgbmV3IHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0
aW9uIHVwIHRvIHRoZSBSZW5kZXJWaWV3LgogICAgICAgICBhdXRvKiBkb2N1bWVudEVsZW1lbnRS
ZW5kZXJlciA9IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCk7Ci0gICAg
ICAgIFJlbmRlclN0eWxlJiB2aWV3U3R5bGUgPSB2aWV3KCkuc3R5bGUoKTsKKyAgICAgICAgYXV0
byYgdmlld1N0eWxlID0gdmlldygpLm11dGFibGVTdHlsZSgpOwogICAgICAgICBib29sIHZpZXdD
aGFuZ2VkV3JpdGluZ01vZGUgPSBmYWxzZTsKICAgICAgICAgYm9vbCByb290U3R5bGVDaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgICAgIGJvb2wgdmlld1N0eWxlQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMzkz
LDcgKzM5Myw3IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYKICAg
ICAgICAgICAgIHZpZXdTdHlsZS5zZXREaXJlY3Rpb24obmV3U3R5bGUuZGlyZWN0aW9uKCkpOwog
ICAgICAgICAgICAgdmlld1N0eWxlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBpZiAoaXNC
b2R5UmVuZGVyZXIpIHsKLSAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPnN0eWxlKCkuc2V0
RGlyZWN0aW9uKG5ld1N0eWxlLmRpcmVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICByb290UmVu
ZGVyZXItPm11dGFibGVTdHlsZSgpLnNldERpcmVjdGlvbihuZXdTdHlsZS5kaXJlY3Rpb24oKSk7
CiAgICAgICAgICAgICAgICAgcm9vdFN0eWxlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKQEAgLTQw
Nyw3ICs0MDcsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmCiAg
ICAgICAgICAgICB2aWV3KCkubWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgp
OwogICAgICAgICAgICAgaWYgKGlzQm9keVJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgcm9v
dFN0eWxlQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5zdHls
ZSgpLnNldFdyaXRpbmdNb2RlKG5ld1N0eWxlLndyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAg
ICAgIHJvb3RSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0V3JpdGluZ01vZGUobmV3U3R5bGUu
d3JpdGluZ01vZGUoKSk7CiAgICAgICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5zZXRIb3Jpem9u
dGFsV3JpdGluZ01vZGUobmV3U3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMo
KTsKQEAgLTQzMiw4ICs0MzIsOCBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmCiAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgdGhlIGJvZHkgZm9udCBiYWNrIHVwIHRv
IHRoZSBSZW5kZXJWaWV3IGFuZCB1c2UgaXQgYXMKICAgICAgICAgICAgIC8vIHRoZSBiYXNpcyBv
ZiB0aGUgZ3JpZC4KICAgICAgICAgICAgIGlmIChuZXdTdHlsZS5mb250RGVzY3JpcHRpb24oKSAh
PSB2aWV3KCkuc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKSkgewotICAgICAgICAgICAgICAgIHZp
ZXcoKS5zdHlsZSgpLnNldEZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5mb250RGVzY3JpcHRpb24o
KSk7Ci0gICAgICAgICAgICAgICAgdmlldygpLnN0eWxlKCkuZm9udENhc2NhZGUoKS51cGRhdGUo
JmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgICAgIHZpZXcoKS5tdXRh
YmxlU3R5bGUoKS5zZXRGb250RGVzY3JpcHRpb24obmV3U3R5bGUuZm9udERlc2NyaXB0aW9uKCkp
OworICAgICAgICAgICAgICAgIHZpZXcoKS5tdXRhYmxlU3R5bGUoKS5mb250Q2FzY2FkZSgpLnVw
ZGF0ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIApAQCAtNjgwLDcgKzY4MCw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb25zdHJhaW5D
b250ZW50Qm8KIAogUm91bmRlZFJlY3Q6OlJhZGlpIFJlbmRlckJveDo6Ym9yZGVyUmFkaWkoKSBj
b25zdAogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CisgICAgYXV0
byYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogICAgIExheW91dFJlY3QgYm91bmRzID0gZnJhbWVS
ZWN0KCk7CiAKICAgICB1bnNpZ25lZCBib3JkZXJMZWZ0ID0gc3R5bGUuYm9yZGVyTGVmdFdpZHRo
KCk7CkBAIC00ODE0LDcgKzQ4MTQsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyQm94OjplbmNsb3Np
bmdGbG9hdFBhCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQm94
Ojpsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxWaXN1YWxPdmVy
Zmxvd1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNv
bnN0CiB7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFn
YXRpb24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCkBAIC00ODIyLDcgKzQ4MjIsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6
bG9naWNhbFZpc3VhbE92ZXJmCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91dFJlY3QgUmVu
ZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0
Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewog
ICAgIC8vIElmIHRoZSB3cml0aW5nIG1vZGVzIG9mIHRoZSBjaGlsZCBhbmQgcGFyZW50IG1hdGNo
LCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gCiAgICAgLy8gZG8gYW55dGhpbmcgZmFuY3kuIEp1c3Qg
cmV0dXJuIHRoZSByZXN1bHQuCkBAIC00ODQwLDcgKzQ4NDAsNyBAQCBMYXlvdXRSZWN0IFJlbmRl
ckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91dFJl
Y3QgUmVuZGVyQm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2lj
YWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gbGF5b3V0T3ZlcmZsb3dS
ZWN0Rm9yUHJvcGFnYXRpb24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC00ODQ4LDcgKzQ4NDgsNyBAQCBMYXlvdXRSZWN0
IFJlbmRlckJveDo6bG9naWNhbExheW91dE92ZXJmCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxh
eW91dFJlY3QgUmVuZGVyQm94OjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6bGF5b3V0
T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KSBjb25zdAogewogICAgIC8vIE9ubHkgcHJvcGFnYXRlIGludGVyaW9yIGxheW91dCBvdmVyZmxv
dyBpZiB3ZSBkb24ndCBjbGlwIGl0LgogICAgIExheW91dFJlY3QgcmVjdCA9IGJvcmRlckJveFJl
Y3QoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtNTYzLDEwICs1NjMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgYXBwbHlUb3BM
ZWZ0TG9jYXRpb25PZmZzZXRXaXRoRmxpcHBpbmcocG9pbnQpOwogICAgIH0KIAotICAgIExheW91
dFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxl
KikgY29uc3Q7Ci0gICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlv
bihSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIExheW91dFJlY3QgbG9naWNhbExheW91dE92ZXJm
bG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTGF5b3V0UmVj
dCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0Owor
ICAgIExheW91dFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNv
bnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJl
Y3QgbG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0
eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdh
dGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgYm9vbCBoYXNSZW5kZXJPdmVy
ZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3c7IH0gICAgCiAgICAgYm9vbCBoYXNWaXN1
YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgJiYgIWJvcmRlckJveFJlY3Qo
KS5jb250YWlucyhtX292ZXJmbG93LT52aXN1YWxPdmVyZmxvd1JlY3QoKSk7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgxLDcgKzU4MSw3IEBAIFJvdW5kZWRS
ZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpiYWNrZ3IKICAgICByZXR1cm4gZ2V0QmFja2dyb3Vu
ZFJvdW5kZWRSZWN0KGJvcmRlclJlY3QsIGJveCwgYm94U2l6ZS53aWR0aCgpLCBib3hTaXplLmhl
aWdodCgpLCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7
CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyB2b2lkIGFwcGx5Qm94
U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSkKIHsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBib3hTaGFkb3cgPSBzdHls
ZS0+Ym94U2hhZG93KCk7CiAgICAgd2hpbGUgKGJveFNoYWRvdy0+c3R5bGUoKSAhPSBOb3JtYWwp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkocmV2aXNp
b24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBSZW5kZXJCdXR0b246OmFkZENo
aWxkKFJlbmRlck9iamVjdAogICAgICAgICAvLyBDcmVhdGUgYW4gYW5vbnltb3VzIGJsb2NrLgog
ICAgICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7CiAgICAgICAgIG1faW5uZXIgPSBjcmVhdGVB
bm9ueW1vdXNCbG9jayhzdHlsZSgpLmRpc3BsYXkoKSk7Ci0gICAgICAgIHNldHVwSW5uZXJTdHls
ZSgmbV9pbm5lci0+c3R5bGUoKSk7CisgICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5lci0+
bXV0YWJsZVN0eWxlKCkpOwogICAgICAgICBSZW5kZXJGbGV4aWJsZUJveDo6YWRkQ2hpbGQobV9p
bm5lcik7CiAgICAgfQogICAgIApAQCAtOTcsOSArOTcsOSBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6
c3R5bGVXaWxsQ2hhbmdlKFN0eWxlCiAgICAgICAgIC8vIGl0IHJpZ2h0IGJlbG93LiBIZXJlIHdl
IGNoYW5nZSBpdCBiYWNrIHRvIDAgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBo
aW50CiAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVuY2UuIFNhbWUgZ29lcyBmb3Ig
dGhlIG90aGVyIHByb3BlcnRpZXMuCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgaGFjayB1
bm5lY2Vzc2FyeS4KLSAgICAgICAgbV9pbm5lci0+c3R5bGUoKS5zZXRGbGV4R3JvdyhuZXdTdHls
ZS5pbml0aWFsRmxleEdyb3coKSk7Ci0gICAgICAgIG1faW5uZXItPnN0eWxlKCkuc2V0TWFyZ2lu
VG9wKG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7Ci0gICAgICAgIG1faW5uZXItPnN0eWxlKCku
c2V0TWFyZ2luQm90dG9tKG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7CisgICAgICAgIG1faW5u
ZXItPm11dGFibGVTdHlsZSgpLnNldEZsZXhHcm93KG5ld1N0eWxlLmluaXRpYWxGbGV4R3Jvdygp
KTsKKyAgICAgICAgbV9pbm5lci0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9wKG5ld1N0eWxl
LmluaXRpYWxNYXJnaW4oKSk7CisgICAgICAgIG1faW5uZXItPm11dGFibGVTdHlsZSgpLnNldE1h
cmdpbkJvdHRvbShuZXdTdHlsZS5pbml0aWFsTWFyZ2luKCkpOwogICAgIH0KICAgICBSZW5kZXJC
bG9jazo6c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5ld1N0eWxlKTsKIH0KQEAgLTEwOSw3ICsxMDks
NyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiAgICAgUmVuZGVy
QmxvY2s6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKIAogICAgIGlmIChtX2lubmVy
KSAvLyBSZW5kZXJCbG9jayBoYW5kbGVkIHVwZGF0aW5nIHRoZSBhbm9ueW1vdXMgYmxvY2sncyBz
dHlsZS4KLSAgICAgICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5zdHlsZSgpKTsKKyAgICAg
ICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5tdXRhYmxlU3R5bGUoKSk7CiB9CiAKIHZvaWQg
UmVuZGVyQnV0dG9uOjpzZXR1cElubmVyU3R5bGUoUmVuZGVyU3R5bGUqIGlubmVyU3R5bGUpIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJl
Y2F0ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjUsNyArMTY1LDcgQEAgc3RhdGljIExheW91dFVuaXQgY29udGVudEhlaWdodEZvckNo
aWxkKAogCiB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6c3R5bGVXaWxsQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCiB7Ci0g
ICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxl
KCkgOiBudWxscHRyOworICAgIGF1dG8qIG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgp
ID8gJnN0eWxlKCkgOiBudWxscHRyOwogICAgIGlmIChvbGRTdHlsZSAmJiAhb2xkU3R5bGUtPmxp
bmVDbGFtcCgpLmlzTm9uZSgpICYmIG5ld1N0eWxlLmxpbmVDbGFtcCgpLmlzTm9uZSgpKQogICAg
ICAgICBjbGVhckxpbmVDbGFtcCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxMSArMjA1
LDYgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFJlbmRlckVsZW1lbnQ6OgogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1lbnVtIFN0eWxlQ2FjaGVTdGF0ZSB7Ci0gICAgQ2FjaGVkLAotICAg
IFVuY2FjaGVkCi19OwotCiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVsZW1l
bnQ6OnVuY2FjaGVkRmlyc3RMaW5lU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewog
ICAgIGlmICghdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKQpAQCAtMjIxLDE0ICsyMTYsMTQg
QEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZQogICAgICAgICBpZiAo
UmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5m
aXJzdExpbmVCbG9jaygpKQogICAgICAgICAgICAgcmV0dXJuIGZpcnN0TGluZUJsb2NrLT5nZXRV
bmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChGSVJTVF9MSU5FKSwgc3R5bGUs
IGZpcnN0TGluZUJsb2NrID09IHRoaXMgPyBzdHlsZSA6IG51bGxwdHIpOwogICAgIH0gZWxzZSBp
ZiAoIXJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuaXNBbm9ueW1vdXMoKSAmJiByZW5kZXJlckZv
ckZpcnN0TGluZVN0eWxlLmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUm
IHBhcmVudFN0eWxlID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+Zmlyc3RM
aW5lU3R5bGUoKTsKKyAgICAgICAgYXV0byYgcGFyZW50U3R5bGUgPSByZW5kZXJlckZvckZpcnN0
TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBpZiAoJnBhcmVu
dFN0eWxlICE9ICZyZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5zdHlsZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuZ2V0VW5jYWNoZWRQ
c2V1ZG9TdHlsZShQc2V1ZG9TdHlsZVJlcXVlc3QoRklSU1RfTElORV9JTkhFUklURUQpLCAmcGFy
ZW50U3R5bGUsIHN0eWxlKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJlbmRl
clN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIGNvbnN0Citjb25z
dCBSZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6Y2FjaGVkRmlyc3RMaW5lU3R5bGUoKSBjb25z
dAogewogICAgIEFTU0VSVCh2aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpOwogCkBAIC0yMzgs
MTAgKzIzMywxMCBAQCBSZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6Y2FjaGVkRmlyc3RMCiAg
ICAgICAgIGlmIChSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2sgPSByZW5kZXJlckZvckZpcnN0
TGluZVN0eWxlLmZpcnN0TGluZUJsb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMaW5l
QmxvY2stPmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xJTkUsICZzdHlsZSgpKTsKICAgICB9
IGVsc2UgaWYgKCFyZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmlzQW5vbnltb3VzKCkgJiYgcmVu
ZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgIFJlbmRl
clN0eWxlJiBwYXJlbnRTdHlsZSA9IHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCkt
PmZpcnN0TGluZVN0eWxlKCk7CisgICAgICAgIGF1dG8mIHBhcmVudFN0eWxlID0gcmVuZGVyZXJG
b3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKICAgICAgICAgaWYg
KCZwYXJlbnRTdHlsZSAhPSAmcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+c3R5
bGUoKSkgewogICAgICAgICAgICAgLy8gQSBmaXJzdC1saW5lIHN0eWxlIGlzIGluIGVmZmVjdC4g
Q2FjaGUgYSBmaXJzdC1saW5lIHN0eWxlIGZvciBvdXJzZWx2ZXMuCi0gICAgICAgICAgICByZW5k
ZXJlckZvckZpcnN0TGluZVN0eWxlLnN0eWxlKCkuc2V0SGFzUHNldWRvU3R5bGUoRklSU1RfTElO
RV9JTkhFUklURUQpOworICAgICAgICAgICAgcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5tX3N0
eWxlLnNldEhhc1BzZXVkb1N0eWxlKEZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKICAgICAgICAgICAg
IHJldHVybiByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmdldENhY2hlZFBzZXVkb1N0eWxlKEZJ
UlNUX0xJTkVfSU5IRVJJVEVELCAmcGFyZW50U3R5bGUpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MjQ5LDcgKzI0NCw3IEBAIFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdEwK
ICAgICByZXR1cm4gJnN0eWxlKCk7CiB9CiAKLVJlbmRlclN0eWxlJiBSZW5kZXJFbGVtZW50Ojpm
aXJzdExpbmVTdHlsZSgpIGNvbnN0Citjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyRWxlbWVudDo6
Zmlyc3RMaW5lU3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiB2aWV3KCkudXNlc0ZpcnN0TGlu
ZVJ1bGVzKCkgPyAqY2FjaGVkRmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7CiB9CkBAIC04MDYs
NyArODAxLDcgQEAgc3RhdGljIGlubGluZSBib29sIHJlbmRlcmVySGFzQmFja2dyb3VuZAogCiB2
b2lkIFJlbmRlckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRTdHls
ZSA9IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZzdHlsZSgpIDogbnVsbHB0cjsKKyAgICBhdXRv
KiBvbGRTdHlsZSA9IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZzdHlsZSgpIDogbnVsbHB0cjsK
ICAgICBpZiAob2xkU3R5bGUpIHsKICAgICAgICAgLy8gSWYgb3VyIHotaW5kZXggY2hhbmdlcyB2
YWx1ZSBvciBvdXIgdmlzaWJpbGl0eSBjaGFuZ2VzLAogICAgICAgICAvLyB3ZSBuZWVkIHRvIGRp
cnR5IG91ciBzdGFja2luZyBjb250ZXh0J3Mgei1vcmRlciBsaXN0LgpAQCAtMTUzNSw3ICsxNTMw
LDIyIEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6YWRkQ29udHJvbFN0YXRlc0ZvclIKICAgICBjb250
cm9sU3RhdGVzUmVuZGVyZXJNYXAoKS5hZGQobywgc3RhdGVzKTsKIH0KIAotUmVuZGVyU3R5bGUq
IFJlbmRlckVsZW1lbnQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIFJlbmRlckVs
ZW1lbnQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywgY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAoreworICAgIGlmIChwc2V1ZG8gPCBGSVJTVF9JTlRF
Uk5BTF9QU0VVRE9JRCAmJiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG8pKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlbmRlclN0eWxlKiBjYWNoZWRTdHlsZSA9IHN0eWxl
KCkuZ2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvKTsKKyAgICBpZiAoY2FjaGVkU3R5bGUpCisg
ICAgICAgIHJldHVybiBjYWNoZWRTdHlsZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gcmVzdWx0ID0gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9TdHlsZVJlcXVlc3Qo
cHNldWRvKSwgcGFyZW50U3R5bGUpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBj
b25zdF9jYXN0PFJlbmRlclN0eWxlJj4obV9zdHlsZSkuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RG
TW92ZShyZXN1bHQpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUmVuZGVyU3R5bGUqIFJl
bmRlckVsZW1lbnQ6OmdldE11dGFibGVDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8s
IGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAocHNldWRvIDwgRklS
U1RfSU5URVJOQUxfUFNFVURPSUQgJiYgIXN0eWxlKCkuaGFzUHNldWRvU3R5bGUocHNldWRvKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNTQ2LDExICsxNTU2LDExIEBAIFJlbmRlclN0
eWxlKiBSZW5kZXJFbGVtZW50OjpnZXRDYWNoZWRQc2UKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gcmVzdWx0ID0gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9TdHlsZVJl
cXVlc3QocHNldWRvKSwgcGFyZW50U3R5bGUpOwogICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHJl
dHVybiBzdHlsZSgpLmFkZENhY2hlZFBzZXVkb1N0eWxlKFdURk1vdmUocmVzdWx0KSk7CisgICAg
ICAgIHJldHVybiBtX3N0eWxlLmFkZENhY2hlZFBzZXVkb1N0eWxlKFdURk1vdmUocmVzdWx0KSk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
UmVuZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJl
cXVlc3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSZW5k
ZXJTdHlsZSogb3duU3R5bGUpIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJl
bmRlckVsZW1lbnQ6OmdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1
ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIG93blN0eWxlKSBjb25zdAogewogICAgIGlmIChwc2V1ZG9TdHls
ZVJlcXVlc3QucHNldWRvSWQgPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCAmJiAhb3duU3R5bGUg
JiYgIXN0eWxlKCkuaGFzUHNldWRvU3R5bGUocHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDY2LDcgKzIwNzYsNyBAQCB2b2lkIFJlbmRl
ckVsZW1lbnQ6OnBhaW50T3V0bGluZShQYWludEluCiAgICAgaWYgKCFoYXNPdXRsaW5lKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsK
KyAgICBhdXRvJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICBmbG9hdCBvdXRsaW5lV2lkdGgg
PSBmbG9vclRvRGV2aWNlUGl4ZWwoc3R5bGVUb1VzZS5vdXRsaW5lV2lkdGgoKSwgZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICBmbG9hdCBvdXRsaW5lT2Zmc2V0ID0gZmxvb3JU
b0RldmljZVBpeGVsKHN0eWxlVG9Vc2Uub3V0bGluZU9mZnNldCgpLCBkb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDEwIEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaGFzSW5pdGlhbGl6ZWRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSW5p
dGlhbGl6ZWRTdHlsZTsgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1
cm4gY29uc3RfY2FzdDxSZW5kZXJTdHlsZSY+KG1fc3R5bGUpOyB9Ci0gICAgUmVuZGVyU3R5bGUm
IGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlJiBmaXJzdExp
bmVTdHlsZSgpIGNvbnN0OworCisgICAgUmVuZGVyU3R5bGUmIG11dGFibGVTdHlsZSgpIHsgcmV0
dXJuIG1fc3R5bGU7IH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0eWxlKCk7CiAKQEAgLTUyLDgg
KzU0LDkgQEAgcHVibGljOgogCiAgICAgLy8gVGhlIHBzZXVkbyBlbGVtZW50IHN0eWxlIGNhbiBi
ZSBjYWNoZWQgb3IgdW5jYWNoZWQuICBVc2UgdGhlIGNhY2hlZCBtZXRob2QgaWYgdGhlIHBzZXVk
byBlbGVtZW50IGRvZXNuJ3QgcmVzcGVjdAogICAgIC8vIGFueSBwc2V1ZG8gY2xhc3NlcyAoYW5k
IHRoZXJlZm9yZSBoYXMgbm8gY29uY2VwdCBvZiBjaGFuZ2luZyBzdGF0ZSkuCi0gICAgUmVuZGVy
U3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBudWxscHRyKSBjb25zdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0ciwgUmVuZGVyU3R5bGUqIG93blN0eWxlID0gbnVs
bHB0cikgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxl
KFBzZXVkb0lkLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKSBjb25z
dDsKKyAgICBSZW5kZXJTdHlsZSogZ2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lk
LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRv
U3R5bGVSZXF1ZXN0JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0ciwg
Y29uc3QgUmVuZGVyU3R5bGUqIG93blN0eWxlID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICAvLyBU
aGlzIGlzIG51bGwgZm9yIGFub255bW91cyByZW5kZXJlcnMuCiAgICAgRWxlbWVudCogZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6bm9kZSgp
KTsgfQpAQCAtMjk4LDcgKzMwMSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFN0eWxlRGlm
ZmVyZW5jZSBhZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlLCB1bnNpZ25lZCBj
b250ZXh0U2Vuc2l0aXZlUHJvcGVydGllcykgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUqIGNhY2hl
ZEZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNhY2hlZEZp
cnN0TGluZVN0eWxlKCkgY29uc3Q7CiAKICAgICB2b2lkIG5ld0ltYWdlQW5pbWF0aW9uRnJhbWVB
dmFpbGFibGUoQ2FjaGVkSW1hZ2UmKSBmaW5hbDsKIApAQCAtNDUwLDE0ICs0NTMsMTQgQEAgaW5s
aW5lIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1JlbmRlcklubGluZQogICAgIHJldHVybiBpczxSZW5k
ZXJFbGVtZW50PigqdGhpcykgJiYgZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpLmlzUmVu
ZGVySW5saW5lKCk7CiB9CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpzdHls
ZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUmIFJlbmRlck9iamVjdDo6c3R5bGUo
KSBjb25zdAogewogICAgIGlmIChpc1RleHQoKSkKICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5z
dHlsZSgpOwogICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykuc3R5bGUo
KTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxlJiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZVN0eWxl
KCkgY29uc3QKK2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpmaXJzdExp
bmVTdHlsZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4dCgpKQogICAgICAgICByZXR1cm4gbV9w
YXJlbnQtPmZpcnN0TGluZVN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyMiw4ICs1MjIsOCBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpsYXlv
dXQoKQogICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksICp0aGlz
LCBsb2NhdGlvbk9mZnNldCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwg
c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKICAgICAKICAgICBjaGlsZEJv
eC5zZXRMb2NhdGlvbihMYXlvdXRQb2ludChib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSArIExh
eW91dFNpemUocGFkZGluZ0xlZnQoKSwgcGFkZGluZ1RvcCgpKSk7Ci0gICAgY2hpbGRCb3guc3R5
bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgY2hp
bGRCb3guc3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwor
ICAgIGNoaWxkQm94Lm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWln
aHQoKSwgRml4ZWQpKTsKKyAgICBjaGlsZEJveC5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5n
dGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwogICAgIGNoaWxkQm94LnNldE5lZWRzTGF5b3V0
KE1hcmtPbmx5VGhpcyk7CiAgICAgY2hpbGRCb3gubGF5b3V0KCk7CiAgICAgY2xlYXJDaGlsZE5l
ZWRzTGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1Ro
cmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAg
UmVuZGVyRmxvd1RocmVhZDo6UmVuZGVyRmxvd1RocmVhZChEb2N1bQogICAgIHNldEZsb3dUaHJl
YWRTdGF0ZShJbnNpZGVPdXRPZkZsb3dUaHJlYWQpOwogfQogCi1SZW5kZXJTdHlsZSBSZW5kZXJG
bG93VGhyZWFkOjpjcmVhdGVGbG93VGhyZWFkU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KQorUmVuZGVyU3R5bGUgUmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRlRmxvd1RocmVhZFN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBhdXRvIG5ld1N0eWxlID0gUmVu
ZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgIG5ld1N0eWxlLmluaGVyaXRGcm9tKHBhcmVudFN0eWxl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dU
aHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgLy8g
Q2FsbGVkIHdoZW4gYSBkZXNjZW5kYW50IGJveCdzIGxheW91dCBpcyBmaW5pc2hlZCBhbmQgaXQg
aGFzIGJlZW4gcG9zaXRpb25lZCB3aXRoaW4gaXRzIGNvbnRhaW5lci4KICAgICB2aXJ0dWFsIHZv
aWQgZmxvd1RocmVhZERlc2NlbmRhbnRCb3hMYWlkT3V0KFJlbmRlckJveCopIHsgfQogCi0gICAg
c3RhdGljIFJlbmRlclN0eWxlIGNyZWF0ZUZsb3dUaHJlYWRTdHlsZShSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpOworICAgIHN0YXRpYyBSZW5kZXJTdHlsZSBjcmVhdGVGbG93VGhyZWFkU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRl
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlz
aW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcxNiw4ICs3MTYsOCBAQCB2b2lkIFJlbmRlckltYWdlOjpsYXlv
dXRTaGFkb3dDb250cm9scyhjCiAKICAgICBpZiAoc2hhZG93Q29udHJvbHNOZWVkQ3VzdG9tTGF5
b3V0TWV0cmljcygpKSB7CiAgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldExvY2F0aW9uKExh
eW91dFBvaW50KGJvcmRlckxlZnQoKSwgYm9yZGVyVG9wKCkpICsgTGF5b3V0U2l6ZShwYWRkaW5n
TGVmdCgpLCBwYWRkaW5nVG9wKCkpKTsKLSAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c3R5bGUo
KS5zZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgICAgIGNv
bnRyb2xzUmVuZGVyZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKG5ld1NpemUud2lkdGgoKSwg
Rml4ZWQpKTsKKyAgICAgICAgY29udHJvbHNSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0SGVp
Z2h0KExlbmd0aChuZXdTaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgICAgICBjb250cm9sc1Jl
bmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBG
aXhlZCkpOwogICAgIH0KIAogICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1h
cmtPbmx5VGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIFJlbmRl
cklubGluZTo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiAgICAgLy8gZS5nLiwgPGZvbnQ+Zm9vIDxo
ND5nb288L2g0PiBtb288L2ZvbnQ+LiAgVGhlIDxmb250PiBpbmxpbmVzIGJlZm9yZQogICAgIC8v
IGFuZCBhZnRlciB0aGUgYmxvY2sgc2hhcmUgdGhlIHNhbWUgc3R5bGUsIGJ1dCB0aGUgYmxvY2sg
ZG9lc24ndAogICAgIC8vIG5lZWQgdG8gcGFzcyBpdHMgc3R5bGUgb24gdG8gYW55b25lIGVsc2Uu
Ci0gICAgUmVuZGVyU3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBuZXdTdHls
ZSA9IHN0eWxlKCk7CiAgICAgUmVuZGVySW5saW5lKiBjb250aW51YXRpb24gPSBpbmxpbmVFbGVt
ZW50Q29udGludWF0aW9uKCk7CiAgICAgaWYgKGNvbnRpbnVhdGlvbikgewogICAgICAgICBmb3Ig
KFJlbmRlcklubGluZSogY3VyckNvbnQgPSBjb250aW51YXRpb247IGN1cnJDb250OyBjdXJyQ29u
dCA9IGN1cnJDb250LT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpIHsKQEAgLTIyMCw3ICsy
MjAsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgaWYg
KGFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSAmcGFyZW50KCktPnN0eWxlKCk7CisgICAgYXV0byogcGFyZW50
U3R5bGUgPSAmcGFyZW50KCktPnN0eWxlKCk7CiAgICAgUmVuZGVySW5saW5lKiBwYXJlbnRSZW5k
ZXJJbmxpbmUgPSBpczxSZW5kZXJJbmxpbmU+KCpwYXJlbnQoKSkgPyBkb3duY2FzdDxSZW5kZXJJ
bmxpbmU+KHBhcmVudCgpKSA6IG51bGxwdHI7CiAgICAgYm9vbCBjaGVja0ZvbnRzID0gZG9jdW1l
bnQoKS5pbk5vUXVpcmtzTW9kZSgpOwogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQg
PSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBS
ZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbgogICAgIGlmICghYWx3YXlzQ3JlYXRl
TGluZUJveGVzICYmIGNoZWNrRm9udHMgJiYgdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKSB7
CiAgICAgICAgIC8vIEhhdmUgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5bGUgYXMgd2VsbC4K
ICAgICAgICAgcGFyZW50U3R5bGUgPSAmcGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7Ci0gICAg
ICAgIFJlbmRlclN0eWxlJiBjaGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAg
YXV0byYgY2hpbGRTdHlsZSA9IGZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGFsd2F5c0NyZWF0
ZUxpbmVCb3hlcyA9ICFwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhh
c0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUo
KS5mb250TWV0cmljcygpKQogICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWdu
KCkgIT0gQkFTRUxJTkUKICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkg
IT0gY2hpbGRTdHlsZS5saW5lSGVpZ2h0KCk7CkBAIC0xNjAxLDcgKzE2MDEsNyBAQCB2b2lkIFJl
bmRlcklubGluZTo6cGFpbnRPdXRsaW5lKFBhaW50SW5mCiAgICAgaWYgKCFoYXNPdXRsaW5lKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUo
KTsKKyAgICBhdXRvJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICAvLyBPbmx5IHBhaW50IHRo
ZSBmb2N1cyByaW5nIGJ5IGhhbmQgaWYgdGhlIHRoZW1lIGlzbid0IGFibGUgdG8gZHJhdyBpdC4K
ICAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBw
b3J0c0ZvY3VzUmluZyhzdHlsZVRvVXNlKSkgewogICAgICAgICBWZWN0b3I8TGF5b3V0UmVjdD4g
Zm9jdXNSaW5nUmVjdHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMTEsNyArNDExMSw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgoR3JhcGhpY3MKICAgICAgICAgcm9vdFJlbGF0aXZlQm91
bmRzQ29tcHV0ZWQgPSB0cnVlOwogICAgIH0KIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJl
bmRlcmVyKCkuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsK
ICAgICBBU1NFUlQoc3R5bGUuY2xpcFBhdGgoKSk7CiAgICAgaWYgKGlzPFNoYXBlQ2xpcFBhdGhP
cGVyYXRpb24+KCpzdHlsZS5jbGlwUGF0aCgpKSB8fCAoaXM8Qm94Q2xpcFBhdGhPcGVyYXRpb24+
KCpzdHlsZS5jbGlwUGF0aCgpKSAmJiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSkgewogICAg
ICAgICBXaW5kUnVsZSB3aW5kUnVsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3
IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICBtX3ZCYXIt
PnBhaW50KHBhaW50SW5mby5jb250ZXh0KCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0
KSk7CiB9CiAKLXN0YXRpYyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1
biB0ZXh0UnVuLCBSZW5kZXJTdHlsZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBpdGVtRm9udCwg
TGF5b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKK3N0YXRpYyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRG
b3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBjb25zdCBSZW5kZXJTdHlsZSogaXRlbVN0eWxl
LCBGb250Q2FzY2FkZSBpdGVtRm9udCwgTGF5b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKIHsKICAg
ICBFVGV4dEFsaWduIGFjdHVhbEFsaWdubWVudCA9IGl0ZW1TdHlsZS0+dGV4dEFsaWduKCk7CiAg
ICAgLy8gRklYTUU6IEZpcmVmb3ggZG9lc24ndCByZXNwZWN0IEpVU1RJRlkuIFNob3VsZCB3ZT8K
QEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91
bmQoCiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdEVs
ZW1lbnQoKS5saXN0SXRlbXMoKTsKICAgICBIVE1MRWxlbWVudCogbGlzdEl0ZW1FbGVtZW50ID0g
bGlzdEl0ZW1zW2xpc3RJbmRleF07CiAKLSAgICBSZW5kZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxp
c3RJdGVtRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOworICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICps
aXN0SXRlbUVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsKIAogICAgIGlmIChpdGVtU3R5bGUudmlz
aWJpbGl0eSgpID09IEhJRERFTikKICAgICAgICAgcmV0dXJuOwpAQCAtNDIzLDcgKzQyMyw3IEBA
IHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCgKIHsKICAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudCgpLmxpc3RJdGVt
cygpOwogICAgIEhUTUxFbGVtZW50KiBsaXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdElu
ZGV4XTsKLSAgICBSZW5kZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+Y29t
cHV0ZWRTdHlsZSgpOworICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICpsaXN0SXRlbUVsZW1lbnQtPmNv
bXB1dGVkU3R5bGUoKTsKIAogICAgIENvbG9yIGJhY2tDb2xvcjsKICAgICBpZiAoaXM8SFRNTE9w
dGlvbkVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVt
ZW50PigqbGlzdEl0ZW1FbGVtZW50KS5zZWxlY3RlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MDgsOCArMTcwOCw4IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRl
TWFyZ2lucygpCiAgICAgICAgIAogICAgIH0KIAotICAgIHN0eWxlKCkuc2V0TWFyZ2luU3RhcnQo
TGVuZ3RoKG1hcmdpblN0YXJ0LCBGaXhlZCkpOwotICAgIHN0eWxlKCkuc2V0TWFyZ2luRW5kKExl
bmd0aChtYXJnaW5FbmQsIEZpeGVkKSk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luU3Rh
cnQoTGVuZ3RoKG1hcmdpblN0YXJ0LCBGaXhlZCkpOworICAgIG11dGFibGVTdHlsZSgpLnNldE1h
cmdpbkVuZChMZW5ndGgobWFyZ2luRW5kLCBGaXhlZCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRl
ckxpc3RNYXJrZXI6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2Rl
IGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgaW50IFJlbmRlck1hcnF1ZWU6OmNvbXB1
dGVQb3NpdGlvbihFTWFycQogewogICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci0+cmVuZGVy
Qm94KCk7CiAgICAgQVNTRVJUKGJveCk7Ci0gICAgUmVuZGVyU3R5bGUmIGJveFN0eWxlID0gYm94
LT5zdHlsZSgpOworICAgIGF1dG8mIGJveFN0eWxlID0gYm94LT5zdHlsZSgpOwogICAgIGlmIChp
c0hvcml6b250YWwoKSkgewogICAgICAgICBib29sIGx0ciA9IGJveFN0eWxlLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKTsKICAgICAgICAgTGF5b3V0VW5pdCBjbGllbnRXaWR0aCA9IGJveC0+Y2xp
ZW50V2lkdGgoKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnVwZGF0
ZU1hcnF1ZWVQb3NpdGlvCiAKIHZvaWQgUmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVlZVN0eWxl
KCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxl
KCk7CisgICAgYXV0byYgc3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLm11dGFibGVTdHlsZSgp
OwogICAgIAogICAgIGlmIChtX2RpcmVjdGlvbiAhPSBzdHlsZS5tYXJxdWVlRGlyZWN0aW9uKCkg
fHwgKG1fdG90YWxMb29wcyAhPSBzdHlsZS5tYXJxdWVlTG9vcENvdW50KCkgJiYgbV9jdXJyZW50
TG9vcCA+PSBtX3RvdGFsTG9vcHMpKQogICAgICAgICBtX2N1cnJlbnRMb29wID0gMDsgLy8gV2hl
biBkaXJlY3Rpb24gY2hhbmdlcyBvciBvdXIgbG9vcENvdW50IGlzIGEgc21hbGxlciBudW1iZXIg
dGhhbiBvdXIgY3VycmVudCBsb29wLCByZXNldCBvdXIgbG9vcC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZUlubmVyQmxv
Y2soKQogCiB2b2lkIFJlbmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKCkKIHsKLSAgICBS
ZW5kZXJTdHlsZSYgaW5uZXJTdHlsZSA9IG1faW5uZXJCbG9jay0+c3R5bGUoKTsKKyAgICBhdXRv
JiBpbm5lclN0eWxlID0gbV9pbm5lckJsb2NrLT5tdXRhYmxlU3R5bGUoKTsKICAgICBpbm5lclN0
eWxlLnNldEZsZXhHcm93KDEpOwogICAgIGlubmVyU3R5bGUuc2V0RmxleFNocmluaygxKTsKICAg
ICAvLyBtaW4td2lkdGg6IDA7IGlzIG5lZWRlZCBmb3IgY29ycmVjdCBzaHJpbmtpbmcuCkBAIC0y
MTUsNyArMjE1LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKAog
ICAgICAgICBpZiAodGhlbWUoKS5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAg
ICAgICAgICAgICAvLyBBZGQgaW4gdGhlIG9wdGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3Qg
Y2FsY3VsYXRlIHBlcmNlbnRhZ2UgdmFsdWVzIGZvciBub3cuCiAgICAgICAgICAgICBmbG9hdCBv
cHRpb25XaWR0aCA9IDA7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIG9wdGlvblN0eWxl
ID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpKQorICAgICAgICAgICAgaWYgKGF1dG8qIG9wdGlv
blN0eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICAgICAgICAgIG9wdGlv
bldpZHRoICs9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChvcHRpb25TdHlsZS0+dGV4dEluZGVudCgp
LCAwKTsKICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKQEAgLTUx
OSw3ICs1MTksNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAg
ICAgYm9vbCBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENvbG9yOwogICAgIGdldEl0ZW1CYWNrZ3Jv
dW5kQ29sb3IobGlzdEluZGV4LCBpdGVtQmFja2dyb3VuZENvbG9yLCBpdGVtSGFzQ3VzdG9tQmFj
a2dyb3VuZENvbG9yKTsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9ICplbGVtZW50LT5jb21w
dXRlZFN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSAqZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgp
OwogICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLmZvbnRDYXNjYWRl
KCksIHN0eWxlLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZS5kaXNwbGF5
KCkgPT0gTk9ORSwgdHJ1ZSwgc3R5bGUudGV4dEluZGVudCgpLCBzdHlsZS5kaXJlY3Rpb24oKSwg
aXNPdmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSwKICAgICAgICAgaXRlbUhhc0N1c3RvbUJh
Y2tncm91bmRDb2xvciA/IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IgOiBQ
b3B1cE1lbnVTdHlsZTo6RGVmYXVsdEJhY2tncm91bmRDb2xvcik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzks
NyBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkQ29sdW1uU3Bhbm5lcihSZW5kZXJNCiAgICAgQVNTRVJU
KGRlc2NlbmRhbnQtPmlzRGVzY2VuZGFudE9mKGZsb3dUaHJlYWQpKTsKIAogICAgIC8vIEZpcnN0
IG1ha2Ugc3VyZSB0aGF0IHRoZSByZW5kZXJlciBpdHNlbGYgaGFzIHRoZSByaWdodCBwcm9wZXJ0
aWVzIGZvciBiZWNvbWluZyBhIHNwYW5uZXIuCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gZGVz
Y2VuZGFudC0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGRlc2NlbmRhbnQtPnN0eWxlKCk7
CiAgICAgaWYgKHN0eWxlLmNvbHVtblNwYW4oKSAhPSBDb2x1bW5TcGFuQWxsIHx8ICFpczxSZW5k
ZXJCb3g+KCpkZXNjZW5kYW50KSB8fCBkZXNjZW5kYW50LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyOjpjcmVhdGVBbm9ueW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBm
bG93VGhyZWFkLCBSZW5kZXJCb3gqIHNwYW5uZXIsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkK
K1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBSZW5kZXJNdWx0aUNvbHVtblNw
YW5uZXJQbGFjZWhvbGRlcjo6Y3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCwgUmVuZGVyQm94KiBzcGFubmVyLCBjb25zdCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpCiB7CiAgICAgYXV0byBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVB
bm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KCpwYXJlbnRTdHlsZSwgQkxPQ0spOwogICAgIG5ld1N0
eWxlLnNldENsZWFyKENCT1RIKTsgLy8gV2UgZG9uJ3Qgd2FudCBmbG9hdHMgaW4gdGhlIHJvdyBw
cmVjZWRpbmcgdGhlIHNwYW5uZXIgdG8gY29udGludWUgb24gdGhlIG90aGVyIHNpZGUuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vo
b2xkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkOwogCiBjbGFzcyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciBm
aW5hbCA6IHB1YmxpYyBSZW5kZXJCb3ggewogcHVibGljOgotICAgIHN0YXRpYyBSZW5kZXJNdWx0
aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciogY3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29s
dW1uRmxvd1RocmVhZCosIFJlbmRlckJveCogc3Bhbm5lciwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKTsKKyAgICBzdGF0aWMgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIGNy
ZWF0ZUFub255bW91cyhSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqLCBSZW5kZXJCb3gqIHNw
YW5uZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICBSZW5kZXJCb3gq
IHNwYW5uZXIoKSBjb25zdCB7IHJldHVybiBtX3NwYW5uZXI7IH0KICAgICBSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQqIGZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2Zsb3dUaHJlYWQ7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3
LDcgKzM0Nyw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNoZWNrUmVnaW8KICAg
ICBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCptX2Zsb3dUaHJlYWQpLmNoZWNrUmVn
aW9uc1dpdGhTdHlsaW5nKCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0CitzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJl
Z2lvbihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0
eWxlKSBjb25zdAogewogICAgIEFTU0VSVCghcmVuZGVyZXIuaXNBbm9ueW1vdXMoKSk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFn
bWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQiOyB9CiAKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVs
ZW1lbnQmLCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gY29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYsIGNv
bnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlQ2hp
bGRyZW5TdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmKTsKICAgICB2b2lkIHNldE9iamVjdFN0
eWxlSW5SZWdpb24oUmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiwg
Ym9vbCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyMiw3
ICsxODIyLDcgQEAgaW50IFJlbmRlck9iamVjdDo6aW5uZXJMaW5lSGVpZ2h0KCkgY29ucwogICAg
IHJldHVybiBzdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpOwogfQogCi1zdGF0aWMgQ29sb3Ig
ZGVjb3JhdGlvbkNvbG9yKFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBDb2xvciBkZWNvcmF0
aW9uQ29sb3IoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIENvbG9yIHJlc3VsdDsK
ICAgICAvLyBDaGVjayBmb3IgdGV4dCBkZWNvcmF0aW9uIGNvbG9yIGZpcnN0LgpAQCAtMTg0NCw3
ICsxODQ0LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sbwogICAg
IFRleHREZWNvcmF0aW9uU3R5bGUmIHVuZGVybGluZVN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxl
JiBvdmVybGluZVN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxlJiBsaW5ldGhyb3VnaFN0eWxlLCBi
b29sIGZpcnN0bGluZVN0eWxlKSBjb25zdAogewogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY3Vy
cmVudCA9IHRoaXM7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBudWxscHRyOworICAg
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gbnVsbHB0cjsKICAgICBUZXh0RGVjb3Jh
dGlvbiBjdXJyRGVjcyA9IFRleHREZWNvcmF0aW9uTm9uZTsKICAgICBDb2xvciByZXN1bHRDb2xv
cjsKICAgICBkbyB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5Nyw4ICs2OTcsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBMYXlvdXRVbml0IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3Q7Ci0g
ICAgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0
eWxlKCkgY29uc3Q7CiAKICAgICAvLyBBbm9ueW1vdXMgYmxvY2tzIHRoYXQgYXJlIHBhcnQgb2Yg
b2YgYSBjb250aW51YXRpb24gY2hhaW4gd2lsbCByZXR1cm4gdGhlaXIgaW5saW5lIGNvbnRpbnVh
dGlvbidzIG91dGxpbmUgc3R5bGUgaW5zdGVhZC4KICAgICAvLyBUaGlzIGlzIHR5cGljYWxseSBv
bmx5IHJlbGV2YW50IHdoZW4gcmVwYWludGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODExLDcgKzgxMSw3
IEBAIHZvaWQgUmVuZGVyVGFibGU6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2EKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9jYXB0aW9ucy5zaXplKCk7IGkrKykKICAgICAgICAgbV9taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdGQ6Om1heChtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0
aCwgbV9jYXB0aW9uc1tpXS0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkpOwogCi0gICAgUmVu
ZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBz
dHlsZSgpOwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBjaGVja2luZyBm
b3IgaXNTcGVjaWZpZWQgc2luY2UgeW91IHNob3VsZCBiZSBhYmxlIHRvIHVzZSBwZXJjZW50YWdl
IG9yIGNhbGMgdmFsdWVzIGZvciBtaW4td2lkdGguCiAgICAgaWYgKHN0eWxlVG9Vc2UubG9naWNh
bE1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkudmFs
dWUoKSA+IDApIHsKICAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdGQ6Om1h
eChtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgYWRqdXN0Q29udGVudEJveExvZ2ljYWxXaWR0
aEZvckJveFNpemluZyhzdHlsZVRvVXNlLmxvZ2ljYWxNaW5XaWR0aCgpLnZhbHVlKCkpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5OCw3ICsxMTk4LDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Um93R3JvdXBCbwogCiB9CiAKLXN0YXRpYyBCb3hTaWRl
IHBoeXNpY2FsQm9yZGVyRm9yRGlyZWN0aW9uKFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93
LCBDb2xsYXBzZWRCb3JkZXJTaWRlIHNpZGUpCitzdGF0aWMgQm94U2lkZSBwaHlzaWNhbEJvcmRl
ckZvckRpcmVjdGlvbihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JDZWxsRmxvdywgQ29sbGFw
c2VkQm9yZGVyU2lkZSBzaWRlKQogewogCiAgICAgc3dpdGNoIChzaWRlKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkg
KzQ4LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzVGV4dEZyYWdtZW50KCkgY29u
c3Q7CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSYg
Zmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRv
U3R5bGUoUHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpIGNvbnN0
OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBn
ZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICBDb2xvciBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdDsKICAgICBDb2xvciBzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsK
QEAgLTI1MSwxNyArMjUxLDE3IEBAIGlubGluZSBVQ2hhciBSZW5kZXJUZXh0OjpjaGFyYWN0ZXJB
dCh1bnMKICAgICByZXR1cm4gdW5jaGVja2VkQ2hhcmFjdGVyQXQoaSk7CiB9CiAKLWlubGluZSBS
ZW5kZXJTdHlsZSYgUmVuZGVyVGV4dDo6c3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRl
clN0eWxlJiBSZW5kZXJUZXh0OjpzdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcmVudCgp
LT5zdHlsZSgpOwogfQogCi1pbmxpbmUgUmVuZGVyU3R5bGUmIFJlbmRlclRleHQ6OmZpcnN0TGlu
ZVN0eWxlKCkgY29uc3QKK2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyVGV4dDo6Zmly
c3RMaW5lU3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBwYXJlbnQoKS0+Zmlyc3RMaW5lU3R5
bGUoKTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1
ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25z
dAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1ZG9T
dHlsZShQc2V1ZG9JZCBwc2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBj
b25zdAogewogICAgIHJldHVybiBwYXJlbnQoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRv
SWQsIHBhcmVudFN0eWxlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUs
OCArNjUsOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZShTCiAgICAg
aWYgKGlubmVyVGV4dFJlbmRlcmVyKSB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHNldCB0aGUg
d2lkdGggYW5kIHRoZSBoZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KICAgICAg
ICAgLy8gUmVzZXQgdGhlbSBub3cgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBo
aW50LgotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3Ro
KCkpOwotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgo
KSk7CisgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQo
TGVuZ3RoKCkpOworICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0
V2lkdGgoTGVuZ3RoKCkpOwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0U3R5bGUodGV4
dEZvcm1Db250cm9sRWxlbWVudCgpLmNyZWF0ZUlubmVyVGV4dFN0eWxlKHN0eWxlKCkpKTsKICAg
ICB9CiAgICAgdGV4dEZvcm1Db250cm9sRWxlbWVudCgpLnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJp
bGl0eSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
TXVsdGlMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUKICAgICBSZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyUmVuZGVyZXIgPSBSZW5kZXJU
ZXh0Q29udHJvbDo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7
CiAgICAgaWYgKGlzPFJlbmRlckJveD4ocGxhY2Vob2xkZXJSZW5kZXJlcikpIHsKICAgICAgICAg
YXV0byYgcGxhY2Vob2xkZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpwbGFjZWhvbGRlclJl
bmRlcmVyKTsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3guc3R5bGUoKS5zZXRMb2dpY2FsV2lkdGgo
TGVuZ3RoKGNvbnRlbnRMb2dpY2FsV2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LmJvcmRlckFuZFBh
ZGRpbmdMb2dpY2FsV2lkdGgoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gubXV0
YWJsZVN0eWxlKCkuc2V0TG9naWNhbFdpZHRoKExlbmd0aChjb250ZW50TG9naWNhbFdpZHRoKCkg
LSBwbGFjZWhvbGRlckJveC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCksIEZpeGVkKSk7
CiAgICAgICAgIHBsYWNlaG9sZGVyQm94LmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIHBsYWNl
aG9sZGVyQm94LnNldFgoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSk7CiAgICAgICAgIHBs
YWNlaG9sZGVyQm94LnNldFkoYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgs
MTEgKzEwOCwxMSBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAK
ICAgICAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYmV0d2VlbiBsYXlvdXRzLCB3ZSBuZWVkIHRv
IHJlc2V0IGFueSBjb25kaXRpb25hbGx5IG92ZXJyaWRlbiBoZWlnaHQuCiAgICAgaWYgKGlubmVy
VGV4dFJlbmRlcmVyICYmICFpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0
KCkuaXNBdXRvKCkpIHsKLSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9n
aWNhbEhlaWdodChMZW5ndGgoQXV0bykpOworICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0
YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoQXV0bykpOwogICAgICAgICBzZXRO
ZWVkc0xheW91dE9uQW5jZXN0b3JzKGlubmVyVGV4dFJlbmRlcmVyLCB0aGlzKTsKICAgICB9CiAg
ICAgaWYgKGlubmVyQmxvY2tSZW5kZXJlciAmJiAhaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgp
LmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXIt
PnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoQXV0bykpOworICAgICAgICBpbm5lckJs
b2NrUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKEF1dG8p
KTsKICAgICAgICAgc2V0TmVlZHNMYXlvdXRPbkFuY2VzdG9ycyhpbm5lckJsb2NrUmVuZGVyZXIs
IHRoaXMpOwogICAgIH0KIApAQCAtMTI4LDEwICsxMjgsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxheW91dAogICAgICAgICBpZiAoZGVzaXJlZExvZ2ljYWxIZWlnaHQg
IT0gaW5uZXJUZXh0UmVuZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgIHNldE5l
ZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAKLSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0
eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVk
KSk7CisgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2Fs
SGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgaW5u
ZXJUZXh0UmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIGlm
IChpbm5lckJsb2NrUmVuZGVyZXIpIHsKLSAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+
c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4
ZWQpKTsKKyAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0
TG9naWNhbEhlaWdodChMZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CiAgICAg
ICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDAsMTMgKzE0MCwxMyBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5sYXlv
dXRJZk5lZWRlZCgpOwogICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQg
PSBjb250YWluZXJSZW5kZXJlci0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICBpZiAoY29udGFp
bmVyTG9naWNhbEhlaWdodCA+IGxvZ2ljYWxIZWlnaHRMaW1pdCkgewotICAgICAgICAgICAgY29u
dGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgobG9naWNhbEhl
aWdodExpbWl0LCBGaXhlZCkpOworICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFi
bGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGxvZ2ljYWxIZWlnaHRMaW1pdCwgRml4
ZWQpKTsKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAg
IH0gZWxzZSBpZiAoY29udGFpbmVyUmVuZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSA8IGNvbnRlbnRM
b2dpY2FsSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgp
LnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCksIEZpeGVkKSk7
CisgICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNh
bEhlaWdodChMZW5ndGgoY29udGVudExvZ2ljYWxIZWlnaHQoKSwgRml4ZWQpKTsKICAgICAgICAg
ICAgIHNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgo
Y29udGFpbmVyTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgICAgIGNvbnRhaW5lclJl
bmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChjb250YWluZXJM
b2dpY2FsSGVpZ2h0LCBGaXhlZCkpOwogICAgIH0KIAogICAgIC8vIElmIHdlIG5lZWQgYW5vdGhl
ciBsYXlvdXQgcGFzcywgd2UgaGF2ZSBjaGFuZ2VkIG9uZSBvZiBjaGlsZHJlbidzIGhlaWdodCBz
byB3ZSBuZWVkIHRvIHJlbGF5b3V0IHRoZW0uCkBAIC0xNzQsOCArMTc0LDggQEAgdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dAogICAgICAgICBMYXlvdXRTaXplIGlubmVy
VGV4dFNpemU7CiAgICAgICAgIGlmIChpbm5lclRleHRSZW5kZXJlcikKICAgICAgICAgICAgIGlu
bmVyVGV4dFNpemUgPSBpbm5lclRleHRSZW5kZXJlci0+c2l6ZSgpOwotICAgICAgICBwbGFjZWhv
bGRlckJveC0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoaW5uZXJUZXh0U2l6ZS53aWR0aCgpIC0g
cGxhY2Vob2xkZXJCb3gtPmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCksIEZpeGVk
KSk7Ci0gICAgICAgIHBsYWNlaG9sZGVyQm94LT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5u
ZXJUZXh0U2l6ZS5oZWlnaHQoKSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBh
ZGRpbmdFeHRlbnQoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gtPm11dGFibGVT
dHlsZSgpLnNldFdpZHRoKExlbmd0aChpbm5lclRleHRTaXplLndpZHRoKCkgLSBwbGFjZWhvbGRl
ckJveC0+aG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgRml4ZWQpKTsKKyAgICAg
ICAgcGxhY2Vob2xkZXJCb3gtPm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5uZXJU
ZXh0U2l6ZS5oZWlnaHQoKSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRp
bmdFeHRlbnQoKSwgRml4ZWQpKTsKICAgICAgICAgYm9vbCBuZWVkZWRMYXlvdXQgPSBwbGFjZWhv
bGRlckJveC0+bmVlZHNMYXlvdXQoKTsKICAgICAgICAgYm9vbCBwbGFjZWhvbGRlckJveEhhZExh
eW91dCA9IHBsYWNlaG9sZGVyQm94LT5ldmVySGFkTGF5b3V0KCk7CiAgICAgICAgIHBsYWNlaG9s
ZGVyQm94LT5sYXlvdXRJZk5lZWRlZCgpOwpAQCAtMjM2LDE0ICsyMzYsMTQgQEAgdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0eWxlRAogICAgIC8vIFdlIG1heSBoYXZlIHNldCB0
aGUgd2lkdGggYW5kIHRoZSBoZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KICAg
ICAvLyBSZXNldCB0aGVtIG5vdyB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0IGhp
bnQuCiAgICAgSFRNTEVsZW1lbnQqIGlubmVyQmxvY2sgPSBpbm5lckJsb2NrRWxlbWVudCgpOwot
ICAgIGlmIChSZW5kZXJPYmplY3QqIGlubmVyQmxvY2tSZW5kZXJlciA9IGlubmVyQmxvY2sgPyBp
bm5lckJsb2NrLT5yZW5kZXJlcigpIDogMCkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXIt
PnN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aCgpKTsKLSAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVy
LT5zdHlsZSgpLnNldFdpZHRoKExlbmd0aCgpKTsKKyAgICBpZiAoYXV0byogaW5uZXJCbG9ja1Jl
bmRlcmVyID0gaW5uZXJCbG9jayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCkgOiBudWxscHRyKSB7
CisgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExl
bmd0aCgpKTsKKyAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRX
aWR0aChMZW5ndGgoKSk7CiAgICAgfQogICAgIEhUTUxFbGVtZW50KiBjb250YWluZXIgPSBjb250
YWluZXJFbGVtZW50KCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogY29udGFpbmVyUmVuZGVyZXIg
PSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRlcmVyKCkgOiAwKSB7Ci0gICAgICAgIGNvbnRh
aW5lclJlbmRlcmVyLT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgoKSk7Ci0gICAgICAgIGNvbnRh
aW5lclJlbmRlcmVyLT5zdHlsZSgpLnNldFdpZHRoKExlbmd0aCgpKTsKKyAgICBpZiAoYXV0byog
Y29udGFpbmVyUmVuZGVyZXIgPSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRlcmVyKCkgOiBu
dWxscHRyKSB7CisgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRI
ZWlnaHQoTGVuZ3RoKCkpOworICAgICAgICBjb250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxl
KCkuc2V0V2lkdGgoTGVuZ3RoKCkpOwogICAgIH0KICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZl
cmVuY2VMYXlvdXQpIHsKICAgICAgICAgaWYgKGF1dG8qIGlubmVyVGV4dFJlbmRlcmVyID0gaW5u
ZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgUmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENo
YW5nZSgKICAgICBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAK
ICAgICBpZiAoUmVuZGVyQmxvY2sqIGJsb2NrID0gYmxvY2tGb3JBY2NvbXBhbnlpbmdGaXJzdExl
dHRlcigpKSB7Ci0gICAgICAgIGJsb2NrLT5zdHlsZSgpLnJlbW92ZUNhY2hlZFBzZXVkb1N0eWxl
KEZJUlNUX0xFVFRFUik7CisgICAgICAgIGJsb2NrLT5tdXRhYmxlU3R5bGUoKS5yZW1vdmVDYWNo
ZWRQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpOwogICAgICAgICBibG9jay0+dXBkYXRlRmlyc3RM
ZXR0ZXIoKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUd0ay5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMzYsNyArMjAzNiw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmEKIAogICAgIGZsb2F0
IG1lZGlhRHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7CiAgICAgZmxvYXQgdG90
YWxUcmFja1dpZHRoID0gci53aWR0aCgpOwotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG8uc3R5
bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IG8uc3R5bGUoKTsKICAgICBSZWZQdHI8VGltZVJhbmdl
cz4gdGltZVJhbmdlcyA9IG1lZGlhRWxlbWVudC0+YnVmZmVyZWQoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCB0aW1lUmFuZ2VzLT5sZW5ndGgoKTsgKytpbmRleCkgewog
ICAgICAgICBmbG9hdCBzdGFydCA9IHRpbWVSYW5nZXMtPnN0YXJ0KGluZGV4LCBJR05PUkVfRVhD
RVBUSU9OKTsKQEAgLTIwNTksNyArMjA1OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFTbGlkZXJUcmEKIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRo
dW1iKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHIpCiB7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gby5zdHlsZSgpOwor
ICAgIGF1dG8mIHN0eWxlID0gby5zdHlsZSgpOwogICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmls
bFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QociwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5
bGUpKSwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMDgwLDcgKzIwODAsNyBAQCBib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1lZGlhVm9sdW1lU2xpCiAKICAgICBpbnQgcmVjdEhlaWdodCA9IHJlY3QuaGVp
Z2h0KCk7CiAgICAgZmxvYXQgdHJhY2tIZWlnaHQgPSByZWN0SGVpZ2h0ICogdm9sdW1lOwotICAg
IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlck9iamVjdC5zdHlsZSgpOworICAgIGF1dG8mIHN0
eWxlID0gcmVuZGVyT2JqZWN0LnN0eWxlKCk7CiAgICAgSW50UmVjdCB2b2x1bWVSZWN0KHJlY3Qp
OwogICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0SGVpZ2h0IC0gdHJhY2tIZWlnaHQpOwogICAg
IHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJhY2tIZWlnaHQpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5j
cHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2
b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgaWYgKHBhaW50SW5m
by5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVuZGVyU3R5bGUmIHN0eWxlID0gZmxvdy5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gZmxv
dy5zdHlsZSgpOwogICAgIGlmIChzdHlsZS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBoaXRUZXN0Rmxvdyhjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIAogICAgIGlmICghbGF5b3V0LnJ1bkNvdW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKKyAg
ICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKICAgICBpZiAoc3R5bGUudmlzaWJpbGl0eSgp
ICE9IFZJU0lCTEUgfHwgc3R5bGUucG9pbnRlckV2ZW50cygpID09IFBFX05PTkUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRv
U2l6aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1
dG9TaXppbmcuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEF1dG9TaXppbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIFRl
eHRBdXRvU2l6aW5nS2V5OjpUZXh0QXV0b1NpemluZ0tleShEZWwKIHsKIH0KIAotVGV4dEF1dG9T
aXppbmdLZXk6OlRleHRBdXRvU2l6aW5nS2V5KFJlbmRlclN0eWxlKiBzdHlsZSkKK1RleHRBdXRv
U2l6aW5nS2V5OjpUZXh0QXV0b1NpemluZ0tleShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiAg
ICAgOiBtX3N0eWxlKHN0eWxlID8gUmVuZGVyU3R5bGU6OmNsb25lUHRyKCpzdHlsZSkgOiBudWxs
cHRyKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5n
LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0
b1NpemluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMiArNDMsMTIgQEAgcHVibGljOgogICAg
IFRleHRBdXRvU2l6aW5nS2V5KCkgPSBkZWZhdWx0OwogICAgIGVudW0gRGVsZXRlZFRhZyB7IERl
bGV0ZWQgfTsKICAgICBleHBsaWNpdCBUZXh0QXV0b1NpemluZ0tleShEZWxldGVkVGFnKTsKLSAg
ICBleHBsaWNpdCBUZXh0QXV0b1NpemluZ0tleShSZW5kZXJTdHlsZSopOworICAgIGV4cGxpY2l0
IFRleHRBdXRvU2l6aW5nS2V5KGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgVGV4dEF1dG9TaXpp
bmdLZXkoVGV4dEF1dG9TaXppbmdLZXkmJikgPSBkZWZhdWx0OwogCiAgICAgVGV4dEF1dG9TaXpp
bmdLZXkmIG9wZXJhdG9yPShUZXh0QXV0b1NpemluZ0tleSYmKSA9IGRlZmF1bHQ7CiAKLSAgICBS
ZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisgICAg
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsg
fQogICAgIGlubGluZSBib29sIGlzRGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZWxldGVk
OyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50
U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRTdHlsZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0UGFpbnRTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYsNyBAQCBU
ZXh0UGFpbnRTdHlsZSBjb21wdXRlVGV4dFNlbGVjdGlvblBhaW50CiAgICAgICAgIHNlbGVjdGlv
blBhaW50U3R5bGUuZW1waGFzaXNNYXJrQ29sb3IgPSBlbXBoYXNpc01hcmtGb3JlZ3JvdW5kOwog
ICAgIH0KIAotICAgIGlmIChSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSByZW5kZXJlci5nZXRD
YWNoZWRQc2V1ZG9TdHlsZShTRUxFQ1RJT04pKSB7CisgICAgaWYgKGF1dG8qIHBzZXVkb1N0eWxl
ID0gcmVuZGVyZXIuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9OKSkgewogICAgICAgICBj
b25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBwYWludEluZm8uZm9yY2VUZXh0Q29sb3IoKSA/IG51
bGxwdHIgOiBwc2V1ZG9TdHlsZS0+dGV4dFNoYWRvdygpOwogICAgICAgICBpZiAoc2hhZG93ICE9
IHNlbGVjdGlvblNoYWRvdykgewogICAgICAgICAgICAgaWYgKCFwYWludFNlbGVjdGVkVGV4dE9u
bHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0Nv
bnRleHQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xp
bmUvQnJlYWtpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIsNyBAQCBw
cml2YXRlOgogICAgIC8vIEZpcmVmb3ggYW5kIE9wZXJhIHdpbGwgYWxsb3cgYSB0YWJsZSBjZWxs
IHRvIGdyb3cgdG8gZml0IGFuIGltYWdlIGluc2lkZSBpdCB1bmRlcgogICAgIC8vIHZlcnkgc3Bl
Y2lmaWMgY2lyY3Vtc3RhbmNlcyAoaW4gb3JkZXIgdG8gbWF0Y2ggY29tbW9uIFdpbklFIHJlbmRl
cmluZ3MpLgogICAgIC8vIE5vdCBzdXBwb3J0aW5nIHRoZSBxdWlyayBoYXMgY2F1c2VkIHVzIHRv
IG1pcy1yZW5kZXIgc29tZSByZWFsIHNpdGVzLiAoU2VlIEJ1Z3ppbGxhIDEwNTE3LikKLSAgICBS
ZW5kZXJTdHlsZSYgbV9ibG9ja1N0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX2Jsb2Nr
U3R5bGU7CiAKICAgICBMaW5lSW5mbyYgbV9saW5lSW5mbzsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCShyZXZp
c2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTAgKzMwMSwxMCBAQCB2b2lkIFJl
bmRlck1hdGhNTFJvb3Q6OmxheW91dCgpCiAgICAgICAgICAgICAgICAgYmFzZVRvcE1hcmdpbiAt
PSBpbmRleFRvcE1hcmdpbjsKICAgICAgICAgICAgICAgICBpbmRleFRvcE1hcmdpbiA9IDA7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmRleC0+c3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVu
Z3RoKGluZGV4VG9wTWFyZ2luLCBGaXhlZCkpOworICAgICAgICAgICAgaW5kZXgtPm11dGFibGVT
dHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgoaW5kZXhUb3BNYXJnaW4sIEZpeGVkKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmFkaWNhbC0+c3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKHJhZGlj
YWxUb3BNYXJnaW4sIEZpeGVkKSk7Ci0gICAgICAgIGJhc2UtPnN0eWxlKCkuc2V0TWFyZ2luVG9w
KExlbmd0aChiYXNlVG9wTWFyZ2luLCBGaXhlZCkpOworICAgICAgICByYWRpY2FsLT5tdXRhYmxl
U3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKHJhZGljYWxUb3BNYXJnaW4sIEZpeGVkKSk7Cisg
ICAgICAgIGJhc2UtPm11dGFibGVTdHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgoYmFzZVRvcE1h
cmdpbiwgRml4ZWQpKTsKICAgICB9CiAKICAgICBSZW5kZXJNYXRoTUxCbG9jazo6bGF5b3V0KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyArMTYwNiw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldENvbHVtblJ1bGVXaWR0aCh1bnNpZ25lZCBzaG9ydCB3KSB7IFNFVF9ORVNURURf
VkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX211bHRpQ29sLCBtX3J1bGUubV93aWR0aCwgdyk7
IH0KICAgICB2b2lkIHJlc2V0Q29sdW1uUnVsZSgpIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbklu
aGVyaXRlZERhdGEsIG1fbXVsdGlDb2wsIG1fcnVsZSwgQm9yZGVyVmFsdWUoKSk7IH0KICAgICB2
b2lkIHNldENvbHVtblNwYW4oQ29sdW1uU3BhbiBjb2x1bW5TcGFuKSB7IFNFVF9ORVNURURfVkFS
KHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX211bHRpQ29sLCBtX2NvbHVtblNwYW4sIGNvbHVtblNw
YW4pOyB9Ci0gICAgdm9pZCBpbmhlcml0Q29sdW1uUHJvcGVydGllc0Zyb20oUmVuZGVyU3R5bGUq
IHBhcmVudCkgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9tdWx0aUNvbCA9IHBh
cmVudC0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2w7IH0KKyAgICB2b2lkIGluaGVy
aXRDb2x1bW5Qcm9wZXJ0aWVzRnJvbShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50KSB7IHJhcmVO
b25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX211bHRpQ29sID0gcGFyZW50LT5yYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bV9tdWx0aUNvbDsgfQogICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMmIG9wcykgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVk
RGF0YSwgbV90cmFuc2Zvcm0sIG1fb3BlcmF0aW9ucywgb3BzKTsgfQogICAgIHZvaWQgc2V0VHJh
bnNmb3JtT3JpZ2luWChMZW5ndGggbGVuZ3RoKSB7IFNFVF9ORVNURURfVkFSKHJhcmVOb25Jbmhl
cml0ZWREYXRhLCBtX3RyYW5zZm9ybSwgbV94LCBXVEZNb3ZlKGxlbmd0aCkpOyB9CiAgICAgdm9p
ZCBzZXRUcmFuc2Zvcm1PcmlnaW5ZKExlbmd0aCBsZW5ndGgpIHsgU0VUX05FU1RFRF9WQVIocmFy
ZU5vbkluaGVyaXRlZERhdGEsIG1fdHJhbnNmb3JtLCBtX3ksIFdURk1vdmUobGVuZ3RoKSk7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBA
IGZsb2F0IFNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2UKICAgICByZXR1cm4gMDsK
IH0KIAotRmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJh
Z21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24s
IGludCBlbmRQb3NpdGlvbiwgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorRmxvYXRSZWN0IFNW
R0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbiwg
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbik7CiAgICAgQVNTRVJU
KHN0eWxlKTsKQEAgLTE0Miw3ICsxNDIsNyBAQCBMYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6
OmxvY2FsU2VsZWN0CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCiAgICAg
ICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5k
ZXJlcigpLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlcigpLnN0eWxlKCk7CiAK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zvcm07CiAgICAgRmxvYXRSZWN0IHNl
bGVjdGlvblJlY3Q7CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludFNlbGVjdGlvbkJhYwogICAgIGlmICghdGV4dFNob3VsZEJlUGFpbnRlZChyZW5kZXJlcigp
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcGFyZW50UmVu
ZGVyZXIuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7
CiAKICAgICBpbnQgc3RhcnRQb3NpdGlvbjsKICAgICBpbnQgZW5kUG9zaXRpb247CkBAIC0yNTYs
MTQgKzI1NiwxNCBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgCiAg
ICAgaWYgKCF0ZXh0U2hvdWxkQmVQYWludGVkKHJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBwYXJlbnRSZW5kZXJlci5zdHlsZSgpOworICAg
IGF1dG8mIHN0eWxlID0gcGFyZW50UmVuZGVyZXIuc3R5bGUoKTsKIAogICAgIGNvbnN0IFNWR1Jl
bmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAKICAgICBib29sIGhhc0Zp
bGwgPSBzdmdTdHlsZS5oYXNGaWxsKCk7CiAgICAgYm9vbCBoYXNWaXNpYmxlU3Ryb2tlID0gc3Zn
U3R5bGUuaGFzVmlzaWJsZVN0cm9rZSgpOwogCi0gICAgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0
eWxlID0gJnN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSA9ICZz
dHlsZTsKICAgICBpZiAoaGFzU2VsZWN0aW9uKSB7CiAgICAgICAgIHNlbGVjdGlvblN0eWxlID0g
cGFyZW50UmVuZGVyZXIuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9OKTsKICAgICAgICAg
aWYgKHNlbGVjdGlvblN0eWxlKSB7CkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBTVkdJbmxpbmVU
ZXh0Qm94OjpwYWludChQYWludEluZm8mIAogICAgIEFTU0VSVCghbV9wYWludGluZ1Jlc291cmNl
KTsKIH0KIAotYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjphY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShH
cmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJCb3hN
b2RlbE9iamVjdCYgcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBzdHlsZSkKK2Jvb2wgU1ZHSW5saW5l
VGV4dEJveDo6YWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4
dCwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVyLCBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwog
ICAgIEFTU0VSVChzdHlsZSk7CkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjpyZWxlYXNlUGFpbnRpbmdSZQogICAgIG1fcGFpbnRpbmdSZXNvdXJjZSA9IG51bGxwdHI7
CiB9CiAKLWJvb2wgU1ZHSW5saW5lVGV4dEJveDo6cHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRl
eHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBmbG9hdCBzY2FsaW5nRmFjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUpCitib29sIFNWR0lubGluZVRleHRCb3g6OnByZXBhcmVHcmFw
aGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgZmxv
YXQgc2NhbGluZ0ZhY3RvciwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHJldHVy
biBhY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCBzY2FsaW5nRmFjdG9yLCBwYXJlbnQo
KS0+cmVuZGVyZXIoKSwgc3R5bGUpOwogfQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgU1ZHSW5s
aW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ28KICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJj
ZShjb250ZXh0LCAvKiBwYXRoICovbnVsbHB0cik7CiB9CiAKLVRleHRSdW4gU1ZHSW5saW5lVGV4
dEJveDo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFNWR1RleHRG
cmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CitUZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0
cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmIGZyYWdtZW50KSBjb25zdAogewogICAgIEFTU0VSVChzdHlsZSk7CiAKQEAgLTUwNiw3ICs1
MDYsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAgICAgQVNT
RVJUKCFtX3BhaW50aW5nUmVzb3VyY2UpOwogICAgIEFTU0VSVChtX3BhaW50aW5nUmVzb3VyY2VN
b2RlICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKLSAgICBSZW5kZXJTdHlsZSYgZGVjb3JhdGlv
blN0eWxlID0gZGVjb3JhdGlvblJlbmRlcmVyLnN0eWxlKCk7CisgICAgYXV0byYgZGVjb3JhdGlv
blN0eWxlID0gZGVjb3JhdGlvblJlbmRlcmVyLnN0eWxlKCk7CiAKICAgICBmbG9hdCBzY2FsaW5n
RmFjdG9yID0gMTsKICAgICBGb250Q2FzY2FkZSBzY2FsZWRGb250OwpAQCAtNTQwLDcgKzU0MCw3
IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2kKICAgICAgICAgcmVs
ZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dFB0ciwgJnBhdGgpOwogfQogCi12b2lkIFNWR0lu
bGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBTVkdUZXh0RnJh
Z21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKQordm9p
ZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1biYgdGV4dFJ1biwgY29u
c3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQ
b3NpdGlvbikKIHsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gcmVuZGVyZXIoKS5zY2FsaW5n
RmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwpAQCAtNTg1LDcgKzU4NSw3IEBA
IHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWQKICAgICB9IHdoaWxlIChz
aGFkb3cpOwogfQogCi12b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHNlbGVjdGlv
blN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBib29sIGhhc1NlbGVjdGlv
biwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkpCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBh
aW50VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmIGZyYWdtZW50LCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9u
bHkpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQoc2VsZWN0aW9uU3R5bGUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwyMyArNjQsMjMgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0U3RhcnRzTmV3VGV4dENodW5rKGJvb2wgbmV3VGV4dENodW5rKSB7IG1f
c3RhcnRzTmV3VGV4dENodW5rID0gbmV3VGV4dENodW5rOyB9CiAKICAgICBpbnQgb2Zmc2V0Rm9y
UG9zaXRpb25JbkZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGZsb2F0IHBvc2l0aW9u
LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0
aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgZnJhZ21l
bnRTdGFydFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiwgUmVuZGVyU3R5bGUqKSBj
b25zdDsKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBT
VkdUZXh0RnJhZ21lbnQmLCBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRF
bmRQb3NpdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBi
b29sIGlzU1ZHSW5saW5lVGV4dEJveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
IAotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYpIGNvbnN0OworICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBS
ZW5kZXJTdHlsZSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0OwogCi0gICAgYm9vbCBh
Y3F1aXJlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiwgZmxvYXQgc2NhbGluZ0Zh
Y3RvciwgUmVuZGVyQm94TW9kZWxPYmplY3QmLCBSZW5kZXJTdHlsZSopOworICAgIGJvb2wgYWNx
dWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYsIGZsb2F0IHNjYWxpbmdGYWN0
b3IsIFJlbmRlckJveE1vZGVsT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lk
IHJlbGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBQYXRoKik7
CiAKLSAgICBib29sIHByZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhp
Y3NDb250ZXh0KiYsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlclN0eWxlKik7CisgICAgYm9v
bCBwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCom
LCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcmVz
dG9yZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComKTsK
IAogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYsIFRleHREZWNvcmF0
aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKTsKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbldp
dGhTdHlsZShHcmFwaGljc0NvbnRleHQmLCBUZXh0RGVjb3JhdGlvbiwgY29uc3QgU1ZHVGV4dEZy
YWdtZW50JiwgUmVuZGVyQm94TW9kZWxPYmplY3QmIGRlY29yYXRpb25SZW5kZXJlcik7Ci0gICAg
dm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmLCBSZW5kZXJTdHlsZSos
IFRleHRSdW4mLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50
IGVuZFBvc2l0aW9uKTsKLSAgICB2b2lkIHBhaW50VGV4dChHcmFwaGljc0NvbnRleHQmLCBSZW5k
ZXJTdHlsZSosIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KTsKKyAg
ICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRl
clN0eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBzdGFydFBvc2l0
aW9uLCBpbnQgZW5kUG9zaXRpb24pOworICAgIHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxl
LCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNl
bGVjdGVkVGV4dE9ubHkpOwogCiAgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5p
dCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRl
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1BhdGhEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1BhdGhEYXRhLmNw
cAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdQ
YXRoRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIHZvaWQg
dXBkYXRlUGF0aEZyb21DaXJjbGVFbGVtZW50KAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVy
ID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1
cm47Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0
byYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICBmbG9hdCByID0gbGVuZ3RoQ29udGV4
dC52YWx1ZUZvckxlbmd0aChzdHlsZS5zdmdTdHlsZSgpLnIoKSk7CiAgICAgaWYgKHIgPiAwKSB7
CiAgICAgICAgIGZsb2F0IGN4ID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdHlsZS5z
dmdTdHlsZSgpLmN4KCksIExlbmd0aE1vZGVXaWR0aCk7CkBAIC01OSw3ICs1OSw3IEBAIHN0YXRp
YyB2b2lkIHVwZGF0ZVBhdGhGcm9tRWxsaXBzZUVsZW1lbnQKICAgICBSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuOwotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwor
ICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgU1ZHTGVuZ3RoQ29udGV4
dCBsZW5ndGhDb250ZXh0KGVsZW1lbnQpOwogICAgIGZsb2F0IHJ4ID0gbGVuZ3RoQ29udGV4dC52
YWx1ZUZvckxlbmd0aChzdHlsZS5zdmdTdHlsZSgpLnJ4KCksIExlbmd0aE1vZGVXaWR0aCk7CiAg
ICAgaWYgKHJ4IDw9IDApCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlUGF0
aEZyb21SZWN0RWxlbWVudChTVgogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgIGF1dG8m
IHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhD
b250ZXh0KGVsZW1lbnQpOwogICAgIGZsb2F0IHdpZHRoID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZv
ckxlbmd0aChzdHlsZS53aWR0aCgpLCBMZW5ndGhNb2RlV2lkdGgpOwogICAgIGlmICh3aWR0aCA8
PSAwKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MCw3ICs5MCw3IEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGUKICAg
ICAgICAgbV9yZW5kZXJpbmdGbGFncyB8PSBSZXN0b3JlR3JhcGhpY3NDb250ZXh0OwogICAgIH0K
IAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0
byYgc3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZSgpOwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5
bGUmIHN2Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Myw3ICs5Myw3IEBAIFRyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQoRG9jdW1lbnQmIGQKIHsK
IH0KIAotVHJlZVJlc29sdmVyOjpQYXJlbnQ6OlBhcmVudChFbGVtZW50JiBlbGVtZW50LCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2UpCitUcmVlUmVzb2x2ZXI6OlBhcmVudDo6UGFy
ZW50KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgQ2hhbmdlIGNo
YW5nZSkKICAgICA6IGVsZW1lbnQoJmVsZW1lbnQpCiAgICAgLCBzdHlsZShzdHlsZSkKICAgICAs
IGNoYW5nZShjaGFuZ2UpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBUcmVlUmVzb2x2ZXI6OnBv
cFNjb3BlKCkKICAgICByZXR1cm4gbV9zY29wZVN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBUcmVlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChF
bGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUpCitzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IFRyZWVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSkKIHsKICAgICBpZiAo
IW1fZG9jdW1lbnQuaGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgJiYgIWVsZW1lbnQucmVuZGVyZXIo
KSkgewogICAgICAgICBtX2RvY3VtZW50LnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUo
KTsKQEAgLTI4Miw3ICsyODIsNyBAQCBwcml2YXRlOgogfTsKICNlbmRpZiAvLyBQTEFURk9STShJ
T1MpCiAKLXZvaWQgVHJlZVJlc29sdmVyOjpwdXNoUGFyZW50KEVsZW1lbnQmIGVsZW1lbnQsIFJl
bmRlclN0eWxlJiBzdHlsZSwgQ2hhbmdlIGNoYW5nZSkKK3ZvaWQgVHJlZVJlc29sdmVyOjpwdXNo
UGFyZW50KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgQ2hhbmdl
IGNoYW5nZSkKIHsKICAgICBzY29wZSgpLnNlbGVjdG9yRmlsdGVyLnB1c2hQYXJlbnQoJmVsZW1l
bnQpOwogCkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBUcmVlUmVzb2x2ZXI6OnJlc29sdmVDb21w
b3NlZFRyZWUoKQogCiAgICAgICAgIGJvb2wgc2hvdWxkUmVzb2x2ZUZvclBzZXVkb0VsZW1lbnQg
PSBzaG91bGRSZXNvbHZlUHNldWRvRWxlbWVudChlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQo
KSkgfHwgc2hvdWxkUmVzb2x2ZVBzZXVkb0VsZW1lbnQoZWxlbWVudC5hZnRlclBzZXVkb0VsZW1l
bnQoKSk7CiAKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlOworICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGU7CiAgICAgICAgIENoYW5nZSBjaGFuZ2U7CiAKICAgICAgICAgYm9vbCBz
aG91bGRSZXNvbHZlID0gcGFyZW50LmNoYW5nZSA+PSBJbmhlcml0IHx8IGVsZW1lbnQubmVlZHNT
dHlsZVJlY2FsYygpIHx8IHNob3VsZFJlc29sdmVGb3JQc2V1ZG9FbGVtZW50IHx8IGFmZmVjdGVk
QnlQcmV2aW91c1NpYmxpbmcgfHwgZWxlbWVudC5oYXNEaXNwbGF5Q29udGVudHMoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuaAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFVwZGF0
ZT4gcmVzb2x2ZShDaGFuZ2UpOwogCiBwcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVk
U3R5bGUpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50
KEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUpOwogCiAgICAgdm9p
ZCByZXNvbHZlQ29tcG9zZWRUcmVlKCk7CiAgICAgRWxlbWVudFVwZGF0ZSByZXNvbHZlRWxlbWVu
dChFbGVtZW50Jik7CkBAIC03OSwxMyArNzksMTMgQEAgcHJpdmF0ZToKIAogICAgIHN0cnVjdCBQ
YXJlbnQgewogICAgICAgICBFbGVtZW50KiBlbGVtZW50OwotICAgICAgICBSZW5kZXJTdHlsZSYg
c3R5bGU7CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZTsKICAgICAgICAgQ2hhbmdl
IGNoYW5nZTsKICAgICAgICAgYm9vbCBkaWRQdXNoU2NvcGUgeyBmYWxzZSB9OwogICAgICAgICBi
b29sIGVsZW1lbnROZWVkaW5nU3R5bGVSZWNhbGNBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5
bGUgeyBmYWxzZSB9OwogCiAgICAgICAgIFBhcmVudChEb2N1bWVudCYsIENoYW5nZSk7Ci0gICAg
ICAgIFBhcmVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUmLCBDaGFuZ2UpOworICAgICAgICBQYXJl
bnQoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKICAgICB9OwogCiAgICAg
U2NvcGUmIHNjb3BlKCkgeyByZXR1cm4gbV9zY29wZVN0YWNrLmxhc3QoKTsgfQpAQCAtOTUsNyAr
OTUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcHVzaEVuY2xvc2luZ1Njb3BlKCk7CiAgICAgdm9p
ZCBwb3BTY29wZSgpOwogCi0gICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQmLCBSZW5kZXJTdHls
ZSYsIENoYW5nZSk7CisgICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQmLCBjb25zdCBSZW5kZXJT
dHlsZSYsIENoYW5nZSk7CiAgICAgdm9pZCBwb3BQYXJlbnQoKTsKICAgICB2b2lkIHBvcFBhcmVu
dHNUb0RlcHRoKHVuc2lnbmVkIGRlcHRoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVVcGRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
VXBkYXRlLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVVcGRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMSArNjEsMjQgQEAgYm9vbCBVcGRh
dGU6OnRleHRVcGRhdGUoY29uc3QgVGV4dCYgdGV4dAogICAgIHJldHVybiBtX3RleHRzLmNvbnRh
aW5zKCZ0ZXh0KTsKIH0KIAotUmVuZGVyU3R5bGUqIFVwZGF0ZTo6ZWxlbWVudFN0eWxlKGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0Citjb25zdCBSZW5kZXJTdHlsZSogVXBkYXRlOjplbGVt
ZW50U3R5bGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoYXV0byog
dXBkYXRlID0gZWxlbWVudFVwZGF0ZShlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIHVwZGF0ZS0+
c3R5bGUuZ2V0KCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQucmVuZGVyU3R5bGUoKTsKKyAgICBhdXRv
KiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gJnJlbmRlcmVyLT5zdHlsZSgpOworfQor
CitSZW5kZXJTdHlsZSogVXBkYXRlOjplbGVtZW50U3R5bGUoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCkKK3sKKyAgICBpZiAoYXV0byogdXBkYXRlID0gZWxlbWVudFVwZGF0ZShlbGVtZW50KSkKKyAg
ICAgICAgcmV0dXJuIHVwZGF0ZS0+c3R5bGUuZ2V0KCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBl
bGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuICZyZW5kZXJlci0+bXV0YWJsZVN0eWxlKCk7CiB9CiAKIHZvaWQg
VXBkYXRlOjphZGRFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIEVsZW1lbnQqIHBhcmVudCwgRWxl
bWVudFVwZGF0ZSYmIGVsZW1lbnRVcGRhdGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVVwZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBk
YXRlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBk
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDggQEAgcHVibGljOgogCiAgICAgYm9v
bCB0ZXh0VXBkYXRlKGNvbnN0IFRleHQmKSBjb25zdDsKIAotICAgIFJlbmRlclN0eWxlKiBlbGVt
ZW50U3R5bGUoY29uc3QgRWxlbWVudCYpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBl
bGVtZW50U3R5bGUoY29uc3QgRWxlbWVudCYpIGNvbnN0OworICAgIFJlbmRlclN0eWxlKiBlbGVt
ZW50U3R5bGUoY29uc3QgRWxlbWVudCYpOwogCiAgICAgY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0Niw3ICs3NDYsNyBAQCB2b2lkIFNWR0VsZW1l
bnQ6OnN5bmNocm9uaXplU3lzdGVtTGFuZ3VhCiAgICAgY29udGV4dEVsZW1lbnQtPnN5bmNocm9u
aXplU3lzdGVtTGFuZ3VhZ2UoKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTVkdFbGVt
ZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJT
dHlsZSopCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IFNWR0VsZW1lbnQ6OnJlc29sdmVDdXN0b21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKikK
IHsKICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBpbiBhIDx1c2U+IHRyZWUgd2UgZ2V0IHRoZSBz
dHlsZSBmcm9tIHRoZSBkZWZpbml0aW9uIHRyZWUuCiAgICAgaWYgKGF1dG8qIHN0eWxlRWxlbWVu
dCA9IHRoaXMtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkpCkBAIC03NzMsMTIgKzc3MywxMiBAQCB2
b2lkIFNWR0VsZW1lbnQ6OnNldFVzZU92ZXJyaWRlQ29tcHV0ZWRTCiAgICAgICAgIG1fc3ZnUmFy
ZURhdGEtPnNldFVzZU92ZXJyaWRlQ29tcHV0ZWRTdHlsZSh2YWx1ZSk7CiB9CiAKLVJlbmRlclN0
eWxlKiBTVkdFbGVtZW50Ojpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVj
aWZpZXIpCitjb25zdCBSZW5kZXJTdHlsZSogU1ZHRWxlbWVudDo6Y29tcHV0ZWRTdHlsZShQc2V1
ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQogewogICAgIGlmICghbV9zdmdSYXJlRGF0YSB8
fCAhbV9zdmdSYXJlRGF0YS0+dXNlT3ZlcnJpZGVDb21wdXRlZFN0eWxlKCkpCiAgICAgICAgIHJl
dHVybiBFbGVtZW50Ojpjb21wdXRlZFN0eWxlKHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwogCi0g
ICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0cjsKKyAgICBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyOwogICAgIGlmIChFbGVtZW50KiBwYXJlbnQgPSBw
YXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkpIHsKICAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIg
PSBwYXJlbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBwYXJlbnRTdHlsZSA9ICZyZW5kZXJl
ci0+c3R5bGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTEyLDcgKzExMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN5bmNocm9uaXplQW5pbWF0ZWRTVkdB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIHN5
bmNocm9uaXplQWxsQW5pbWF0ZWRTVkdBdHRyaWJ1dGUoU1ZHRWxlbWVudCopOwogIAotICAgIE9w
dGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJl
bnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAgT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
IHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlk
ZTsKIAogICAgIHN0YXRpYyB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRGZWF0dXJlcyhTVkdFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCk7CiAgICAgc3RhdGljIHZvaWQgc3luY2hyb25pemVSZXF1aXJl
ZEV4dGVuc2lvbnMoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQpOwpAQCAtMTgxLDcgKzE4MSw3
IEBAIHByb3RlY3RlZDoKICAgICBjbGFzcyBJbnN0YW5jZUludmFsaWRhdGlvbkd1YXJkOwogCiBw
cml2YXRlOgotICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkID0gTk9QU0VV
RE8pIGZpbmFsOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lk
ID0gTk9QU0VVRE8pIGZpbmFsOwogCiAgICAgdmlydHVhbCBib29sIGlzU3VwcG9ydGVkKFN0cmlu
Z0ltcGwqIGZlYXR1cmUsIFN0cmluZ0ltcGwqIHZlcnNpb24pIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDEwICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9hbmltYXRlZFNNSUxT
dHlsZVByb3BlcnRpZXM7CiAgICAgfQogCi0gICAgUmVuZGVyU3R5bGUqIG92ZXJyaWRlQ29tcHV0
ZWRTdHlsZShFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCisgICAg
Y29uc3QgUmVuZGVyU3R5bGUqIG92ZXJyaWRlQ29tcHV0ZWRTdHlsZShFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiAgICAgewogICAgICAgICBpZiAoIW1f
dXNlT3ZlcnJpZGVDb21wdXRlZFN0eWxlKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgaWYgKCFtX292ZXJyaWRlQ29tcHV0ZWRTdHls
ZSB8fCBtX25lZWRzT3ZlcnJpZGVDb21wdXRlZFN0eWxlVXBkYXRlKSB7CiAgICAgICAgICAgICAv
LyBUaGUgc3R5bGUgY29tcHV0ZWQgaGVyZSBjb250YWlucyBubyBDU1MgQW5pbWF0aW9ucy9UcmFu
c2l0aW9ucyBvciBTTUlMIGluZHVjZWQgcnVsZXMgLSB0aGlzIGlzIG5lZWRlZCB0byBjb21wdXRl
IHRoZSAiYmFzZSB2YWx1ZSIgZm9yIHRoZSBTTUlMIGFuaW1hdGlvbiBzYW5kd2hpY2ggbW9kZWwu
CiAgICAgICAgICAgICBtX292ZXJyaWRlQ29tcHV0ZWRTdHlsZSA9IGVsZW1lbnQuc3R5bGVSZXNv
bHZlcigpLnN0eWxlRm9yRWxlbWVudChlbGVtZW50LCBwYXJlbnRTdHlsZSwgTWF0Y2hBbGxSdWxl
c0V4Y2x1ZGluZ1NNSUwpLnJlbmRlclN0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0dyYXBoaWNzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0dyYXBoaWNzRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3
IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdHcmFwaGljc0VsZW1lbnQ6OmdldFMKIEFmZmluZVRyYW5z
Zm9ybSBTVkdHcmFwaGljc0VsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdAog
ewogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
cmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBz
dHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CiAKICAg
ICAvLyBJZiBDU1MgcHJvcGVydHkgd2FzIHNldCwgdXNlIHRoYXQsIG90aGVyd2lzZSBmYWxsYmFj
ayB0byBhdHRyaWJ1dGUgKGlmIHNldCkuCiAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5oYXNUcmFu
c2Zvcm0oKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAgZmxvYXQgU1ZHTGVuZ3RoQ29u
dGV4dDo6Y29udmVydFZhbHVlRnJvbQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5l
IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhjb25zdCBTVkdFbGVt
ZW50KiBjb250ZXh0KQorc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5
bGVGb3JMZW5ndGhSZXNvbHZpbmcoY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCkKIHsKICAgICBp
ZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjM2LDEyICsyMzYsMTIg
QEAgc3RhdGljIGlubGluZSBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGVGbwogCiAgICAgLy8gVGhl
cmUgbXVzdCBiZSBhdCBsZWFzdCBhIFJlbmRlclNWR1Jvb3QgcmVuZGVyZXIsIGNhcnJ5aW5nIGEg
c3R5bGUuCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZy
b21Vc2VyVW5pdHNUb0VNUyhmbG9hdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7
Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmco
bV9jb250ZXh0KTsKKyAgICBhdXRvKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2
aW5nKG1fY29udGV4dCk7CiAgICAgaWYgKCFzdHlsZSkgewogICAgICAgICBlYyA9IE5PVF9TVVBQ
T1JURURfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTI1OCw3ICsyNTgsNyBAQCBmbG9hdCBT
VkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tCiAKIGZsb2F0IFNWR0xlbmd0aENvbnRl
eHQ6OmNvbnZlcnRWYWx1ZUZyb21FTVNUb1VzZXJVbml0cyhmbG9hdCB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyU3R5bGVG
b3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKKyAgICBhdXRvKiBzdHlsZSA9IHJlbmRlclN0
eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CiAgICAgaWYgKCFzdHlsZSkgewogICAg
ICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTI2OSw3
ICsyNjksNyBAQCBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tCiAKIGZs
b2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VYUyhmbG9h
dCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKKyAgICBhdXRv
KiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CiAgICAg
aWYgKCFzdHlsZSkgewogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTI4OCw3ICsyODgsNyBAQCBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252
ZXJ0VmFsdWVGcm9tCiAKIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21F
WFNUb1VzZXJVbml0cyhmbG9hdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9j
b250ZXh0KTsKKyAgICBhdXRvKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5n
KG1fY29udGV4dCk7CiAgICAgaWYgKCFzdHlsZSkgewogICAgICAgICBlYyA9IE5PVF9TVVBQT1JU
RURfRVJSOwogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdT
dG9wRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BF
bGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0
b3BFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBib29sIFNWR1N0
b3BFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKGNvCiAKIENvbG9yIFNWR1N0b3BFbGVtZW50Ojpz
dG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5KCkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSByZW5kZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1
dG8qIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsK
ICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBmb3IgbnVsbCBzdHlsZSBleGlzdHMgdG8gYWRkcmVz
cyBCdWcgV0sgOTA4MTQsIGEgcmFyZSBjcmFzaCBjb25kaXRpb24gaW4KICAgICAvLyB3aGljaCB0
aGUgcmVuZGVyZXIgb3Igc3R5bGUgaXMgbnVsbC4gVGhpcyBlbnRpcmUgY2xhc3MgaXMgc2NoZWR1
bGVkIGZvciByZW1vdmFsIChCdWcgV0sgODY5NDEpCiAgICAgLy8gYW5kIHdlIHdpbGwgdG9sZXJh
dGUgdGhpcyBudWxsIGNoZWNrIHVudGlsIHRoZW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVGV4dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
ZXh0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUZXh0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgUmVmPFNW
R1RleHRFbGVtZW50PiBTVkdUZXh0RWxlbWVudDo6Y3JlYQogQWZmaW5lVHJhbnNmb3JtIFNWR1Rl
eHRFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gbWF0cml4OwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAm
cmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJl
cigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwogCiAgICAgLy8gaWYgQ1NTIHBy
b3BlcnR5IHdhcyBzZXQsIHVzZSB0aGF0LCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gYXR0cmlidXRl
IChpZiBzZXQpCiAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5oYXNUcmFuc2Zvcm0oKSkgewpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjMsNyArODIzLDcgQEAgRWRpdG9yU3RhdGUgV2Vi
UGFnZTo6ZWRpdG9yU3RhdGUoSW5jbHVkZQogICAgICAgICBhdXRvJiBwb3N0TGF5b3V0RGF0YSA9
IHJlc3VsdC5wb3N0TGF5b3V0RGF0YSgpOwogICAgICAgICBpZiAoIXNlbGVjdGlvbi5pc05vbmUo
KSkgewogICAgICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgICAgICAgICAgaWYgKFJl
bmRlclN0eWxlKiBzdHlsZSA9IEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmZnJhbWUs
IG5vZGVUb1JlbW92ZSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IEVkaXRvcjo6
c3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmZnJhbWUsIG5vZGVUb1JlbW92ZSkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkgPj0gRm9udFdlaWdodEJv
bGQpCiAgICAgICAgICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnR5cGluZ0F0dHJpYnV0ZXMg
fD0gQXR0cmlidXRlQm9sZDsKICAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPmZvbnRDYXNjYWRl
KCkuaXRhbGljKCkgPT0gRm9udEl0YWxpY09uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277360</attachid>
            <date>2016-04-26 05:36:20 -0700</date>
            <delta_ts>2016-04-26 06:08:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>const-renderstyle-5.patch</filename>
            <type>text/plain</type>
            <size>161320</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNCw3
ICsxMTM0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU3R5bGVSYW5nZQogewog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVu
ZGVyZXIgPSByZW5kZXJlcjsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyZXItPnN0
eWxlKCk7CisgICAgYXV0byogc3R5bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CiAKICAgICAvLyB0
cmF2ZXJzZSBiYWNrd2FyZCBieSByZW5kZXJlciB0byBsb29rIGZvciBzdHlsZSBjaGFuZ2UKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogciA9IHJlbmRlcmVyLT5wcmV2aW91c0luUHJlT3JkZXIoKTsg
cjsgciA9IHItPnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0
cmlidXRlU2V0RgogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBvYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gJnJlbmRl
cmVyLT5zdHlsZSgpOworICAgIGF1dG8qIHN0eWxlID0gJnJlbmRlcmVyLT5zdHlsZSgpOwogCiAg
ICAgQXRrQXR0cmlidXRlU2V0KiByZXN1bHQgPSBudWxscHRyOwogICAgIEdVbmlxdWVQdHI8Z2No
YXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoIiVpIiwgc3R5bGUtPmZvbnRTaXplKCkpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDk5
LDcgKzQ5OSw3IEBAIC0gKFdLUXVhZClpbm5lckZyYW1lUXVhZCAgICAgICAvLyB0YWtlcyAKICAg
ICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZW1wdHlRdWFkKCk7CiAKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwogICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSByZW5kZXJlci0+YWJz
b2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSAvKiB1c2UgdHJhbnNmb3JtcyovKTsKIAogICAgIGJv
dW5kaW5nQm94Lm1vdmUoc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLmJvcmRlclRvcFdp
ZHRoKCkpOwpAQCAtNTEzLDcgKzUxMyw3IEBAIC0gKFdLUXVhZClpbm5lckZyYW1lUXVhZCAgICAg
ICAvLyB0YWtlcyAKIC0gKGZsb2F0KWNvbXB1dGVkRm9udFNpemUKIHsKICAgICBXZWJDb3JlOjpO
b2RlICpub2RlID0gY29yZShzZWxmKTsKLSAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSBub2RlLT5y
ZW5kZXJTdHlsZSgpOworICAgIGF1dG8gKnN0eWxlID0gbm9kZS0+cmVuZGVyU3R5bGUoKTsKICAg
ICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMC4wZjsKICAgICByZXR1cm4gc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MDAsNyArNzAwLDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxp
c3Q+IGNyZWF0ZVBvc2l0aW9uTAogICAgIHJldHVybiBwb3NpdGlvbkxpc3Q7CiB9CiAKLXN0YXRp
YyBSZWZQdHI8Q1NTVmFsdWU+IHBvc2l0aW9uT2Zmc2V0VmFsdWUoUmVuZGVyU3R5bGUmIHN0eWxl
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwb3Np
dGlvbk9mZnNldFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEKQogewogICAgIExlbmd0aCBsZW5ndGg7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlE
KSB7CkBAIC03MzcsNyArNzM3LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcG9zaXRpb25P
ZmZzZXRWYQogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJT
dHlsZSogc3R5bGUsIGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKK1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENvbG9y
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgbG9vayBhdCB2aXNpdGVkIGluZm9ybWF0aW9u
LCBzbyB0aGF0IGNvbXB1dGVkIHN0eWxlIGRvZXNuJ3QgZXhwb3NlIHRoYXQuCiAgICAgaWYgKCFj
b2xvci5pc1ZhbGlkKCkpCkBAIC0xMTQzLDcgKzExNDMsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVl
TGlzdD4gZ2V0VHJhbnNpdGlvblByCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
c3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IHNjcm9sbFNuYXBEZXN0aW5hdGlvbihSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IExlbmd0aFNpemUmIGRlc3RpbmF0aW9uKQorc3RhdGljIFJlZjxDU1NW
YWx1ZUxpc3Q+IHNjcm9sbFNuYXBEZXN0aW5hdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IExlbmd0aFNpemUmIGRlc3RpbmF0aW9uKQogewogICAgIGF1dG8gbGlzdCA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBsaXN0LmdldCgpLmFwcGVuZCh6
b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKGRlc3RpbmF0aW9uLndpZHRoKCksIHN0eWxl
KSk7CkBAIC0xMTUxLDcgKzExNTEsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xs
U25hcERlc3RpCiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IHNj
cm9sbFNuYXBQb2ludHMoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTY3JvbGxTbmFwUG9pbnRz
KiBwb2ludHMpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxTbmFwUG9pbnRzKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgU2Nyb2xsU25hcFBvaW50cyogcG9pbnRzKQogewogICAg
IGlmICghcG9pbnRzKQogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKQEAgLTExNjYsNyArMTE2Niw3IEBA
IHN0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBQb2ludHMoUmUKICAgICByZXR1cm4gV1RG
TW92ZShsaXN0KTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcENvb3JkaW5h
dGVzKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPExlbmd0aFNpemU+JiBjb29yZGlu
YXRlcykKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBDb29yZGluYXRlcyhjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFZlY3RvcjxMZW5ndGhTaXplPiYgY29vcmRpbmF0ZXMp
CiB7CiAgICAgaWYgKGNvb3JkaW5hdGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7
CkBAIC0xODA3LDcgKzE4MDcsNyBAQCBzdGF0aWMgdm9pZCBsb2dVbmltcGxlbWVudGVkUHJvcGVy
dHlJRChDCiAgICAgTE9HX0VSUk9SKCJXZWJLaXQgZG9lcyBub3QgeWV0IGltcGxlbWVudCBnZXRD
b21wdXRlZFN0eWxlIGZvciAnJXMnLiIsIGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eUlEKSk7CiB9
CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0eWxlLT5mb250Q2FzY2FkZSgpLmZhbWlseUNvdW50KCk7ICsraSkKQEAgLTE4MTUsNyArMTgx
NSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVMKICAgICByZXR1
cm4gbGlzdDsKIH0KIAotc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZUhlaWdodEZy
b21TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiBsaW5lSGVpZ2h0RnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICBM
ZW5ndGggbGVuZ3RoID0gc3R5bGUubGluZUhlaWdodCgpOwogICAgIGlmIChsZW5ndGguaXNOZWdh
dGl2ZSgpKSAvLyBJZiB0cnVlLCBsaW5lLWhlaWdodCBub3Qgc2V0OyB1c2UgdGhlIGZvbnQncyBs
aW5lIHNwYWNpbmcuCkBAIC0xODMwLDE5ICsxODMwLDE5IEBAIHN0YXRpYyBSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IGxpbmVIZWlnaHQKICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShm
bG9hdFZhbHVlRm9yTGVuZ3RoKGxlbmd0aCwgMCksIHN0eWxlKTsKIH0KIAotc3RhdGljIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gZm9udFNpemVGcm9tU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQor
c3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFNpemVGcm9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlKQogewogICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0
eWxlLmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpLCBzdHlsZSk7CiB9CiAKLXN0YXRp
YyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRTdHlsZUZyb21TdHlsZShSZW5kZXJTdHlsZSog
c3R5bGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U3R5bGVGcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkuaXRhbGljKCkpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUl0YWxpYyk7CiAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFs
KTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRGcm9tU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRGcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkudmFyaWFudFNldHRpbmdzKCkuaXNBbGxOb3JtYWwoKSkKICAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9y
bWFsKTsKQEAgLTIwMjksNyArMjAyOSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJp
YW50RnJvbVN0eWwKICAgICByZXR1cm4gV1RGTW92ZShsaXN0KTsKIH0KIAotc3RhdGljIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdodEZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUp
CitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250V2VpZ2h0RnJvbVN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBzd2l0Y2ggKHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS53ZWlnaHQoKSkgewogICAgIGNhc2UgRm9udFdlaWdodDEwMDoKQEAgLTIwNTUsNyArMjA1
NSw3IEBAIHN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRXZWlnaHQKICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb3JtYWwpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250U3ludGhlc2lzRnJvbVN0
eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRTeW50aGVz
aXNGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIGlmIChzdHlsZS5m
b250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgPT0gRm9udFN5bnRoZXNpc05vbmUpCiAg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOwpAQCAtMjA3Miw3ICsyMDcyLDcgQEAgdHlwZWRlZiBjb25zdCBM
ZW5ndGgmIChSZW5kZXJTdHlsZTo6KlJlbgogdHlwZWRlZiBMYXlvdXRVbml0IChSZW5kZXJCb3hN
b2RlbE9iamVjdDo6KlJlbmRlckJveENvbXB1dGVkQ1NTVmFsdWVHZXR0ZXIpKCkgY29uc3Q7CiAK
IHRlbXBsYXRlPFJlbmRlclN0eWxlTGVuZ3RoR2V0dGVyIGxlbmd0aEdldHRlciwgUmVuZGVyQm94
Q29tcHV0ZWRDU1NWYWx1ZUdldHRlciBjb21wdXRlZENTU1ZhbHVlR2V0dGVyPgotaW5saW5lIFJl
ZlB0cjxDU1NWYWx1ZT4gem9vbUFkanVzdGVkUGFkZGluZ09yTWFyZ2luUGl4ZWxWYWx1ZShSZW5k
ZXJTdHlsZSYgc3R5bGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitpbmxpbmUgUmVmUHRyPENT
U1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZhbHVlKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBMZW5ndGggdW56
b29temVkTGVuZ3RoID0gKHN0eWxlLipsZW5ndGhHZXR0ZXIpKCk7CiAgICAgaWYgKCFpczxSZW5k
ZXJCb3g+KHJlbmRlcmVyKSB8fCB1bnpvb216ZWRMZW5ndGguaXNGaXhlZCgpKQpAQCAtMjA4MSw3
ICsyMDgxLDcgQEAgaW5saW5lIFJlZlB0cjxDU1NWYWx1ZT4gem9vbUFkanVzdGVkUGFkZAogfQog
CiB0ZW1wbGF0ZTxSZW5kZXJTdHlsZUxlbmd0aEdldHRlciBsZW5ndGhHZXR0ZXI+Ci1pbmxpbmUg
Ym9vbCBwYWRkaW5nT3JNYXJnaW5Jc1JlbmRlcmVyRGVwZW5kZW50KFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK2lubGluZSBib29sIHBhZGRpbmdPck1hcmdpbklz
UmVuZGVyZXJEZXBlbmRlbnQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogewogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTM5LDcgKzIxMzksNyBAQCBzdGF0aWMgQ1NTVmFs
dWVJRCBjb252ZXJ0VG9SZWdpb25CcmVhayhCCiB9CiAjZW5kaWYKICAgICAKLXN0YXRpYyBib29s
IGlzTGF5b3V0RGVwZW5kZW50KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGljIGJvb2wgaXNMYXlvdXREZXBl
bmRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgpAQCAtMjI2Nyw3ICsyMjY3LDcgQEAgc3RhdGljIGlu
bGluZSBib29sIHVwZGF0ZVN0eWxlSWZOZWVkZWRGbwogICAgIHJldHVybiB0cnVlOwogfQogCi1z
dGF0aWMgaW5saW5lIFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5bGVGb3JQcm9wZXJ0eShO
b2RlKiBzdHlsZWROb2RlLCBQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIG93bmVkU3R5
bGUpCitzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5bGVG
b3JQcm9wZXJ0eShOb2RlKiBzdHlsZWROb2RlLCBQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lm
aWVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4mIG93bmVkU3R5bGUpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHN0eWxlZE5v
ZGUtPnJlbmRlcmVyKCk7CiAKQEAgLTIzNzMsNyArMjM3Myw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4g
Q29tcHV0ZWRTdHlsZUV4dHJhY3RvcjoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG93bmVkU3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gbnVsbHB0cjsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSBudWxscHRy
OwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBudWxscHRyOwogICAgIGJvb2wgZm9yY2VG
dWxsTGF5b3V0ID0gZmFsc2U7CiAgICAgaWYgKHVwZGF0ZUxheW91dCkgewpAQCAtMzg2MSw3ICsz
ODYxLDcgQEAgdW5zaWduZWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpsZQogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBu
b2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcik7CisgICAgYXV0byog
c3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcik7CiAg
ICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM4ODAsNyArMzg4MCw3IEBA
IFN0cmluZyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246Oml0ZW0KICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOworICAgIGF1
dG8qIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIp
OwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIApA
QCAtMzg5OSw3ICszODk5LDcgQEAgYm9vbCBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0
eU1hdAogewogICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Rm9udFNpemUgJiYgaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgbV9ub2RlKSB7CiAgICAgICAgIG1fbm9kZS0+
ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAg
ICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVk
b0VsZW1lbnRTcGVjaWZpZXIpKSB7CisgICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IG1fbm9kZS0+
Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpKSB7CiAgICAgICAgICAgICBp
ZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5r
ZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkgJiYgcHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IHNpemVJZGVudGlmaWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCwxMCArNzAsMTAgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBzdHlsZWRO
b2RlKCkgY29uc3Q7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN2Z1Byb3BlcnR5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgRVVwZGF0ZUxheW91dCkgY29uc3Q7Ci0gICAgUmVmUHRyPFNWR1BhaW50PiBh
ZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNWR1BhaW50PiwgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICBSZWZQdHI8U1ZHUGFpbnQ+IGFkanVzdFNWR1BhaW50Rm9yQ3Vy
cmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFpbnQ+LCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0
OwogCiAgICAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gdmFsdWVGb3JTaGFkb3coY29uc3QgU2hhZG93
RGF0YSosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlJiwgQWRqdXN0UGl4ZWxWYWx1
ZXNGb3JDb21wdXRlZFN0eWxlID0gQWRqdXN0UGl4ZWxWYWx1ZXMpOwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiwgY29u
c3QgQ29sb3ImKSBjb25zdDsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGN1cnJlbnRD
b2xvck9yVmFsaWRDb2xvcihjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IENvbG9yJikgY29uc3Q7
CiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBnZXRDU1NQcm9wZXJ0eVZhbHVlc0ZvclNob3J0
aGFuZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYpIGNvbnN0OwogICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldENTU1Byb3BlcnR5VmFsdWVzRm9yU2lkZXNTaG9ydGhh
bmQoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGZsb2F0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGE6Onpvb20oKSAKIGRvdWJsZSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2
aWV3cG9ydFdpZHRoRmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21w
dXRpbmdGb250U2l6ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwor
ICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0
VW5pdHMoKTsKIAogICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKQEAg
LTU3LDcgKzU3LDcgQEAgZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwbwog
ZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwb3J0SGVpZ2h0RmFjdG9yKCkg
Y29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21wdXRpbmdGb250U2l6ZSkKLSAgICAg
ICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOworICAgICAgICBjb25zdF9jYXN0PFJl
bmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGlmICgh
bV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKQEAgLTY4LDcgKzY4LDcgQEAgZG91Ymxl
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwbwogZG91YmxlIENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGE6OnZpZXdwb3J0TWluRmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHls
ZSAmJiAhbV9jb21wdXRpbmdGb250U2l6ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3Bv
cnRVbml0cygpOworICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNl
dEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTgwLDcgKzgwLDcgQEAgZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGE6OnZpZXdwbwogZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwb3J0TWF4
RmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21wdXRpbmdGb250U2l6
ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOworICAgICAgICBjb25z
dF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAog
ICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBSZW5kZXJWaWV3OwogCiBjbGFz
cyBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIHsKIHB1YmxpYzoKLSAgICBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSwgY29uc3QgUmVuZGVyVmlldyogcmVuZGVyVmlldywgZmxvYXQgem9vbSwgYm9vbCBjb21w
dXRpbmdGb250U2l6ZSA9IGZhbHNlKQorICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25z
dCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBmbG9hdCB6b29tLCBib29sIGNvbXB1dGluZ0ZvbnRT
aXplID0gZmFsc2UpCiAgICAgICAgIDogbV9zdHlsZShzdHlsZSkKICAgICAgICAgLCBtX3Jvb3RT
dHlsZShyb290U3R5bGUpCiAgICAgICAgICwgbV9yZW5kZXJWaWV3KHJlbmRlclZpZXcpCkBAIC01
Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHpvb20gPiAwKTsKICAgICB9CiAK
LSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgY29uc3QgUmVuZGVyVmlldyogcmVuZGVyVmlldywgYm9v
bCBjb21wdXRpbmdGb250U2l6ZSA9IGZhbHNlKQorICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxl
LCBjb25zdCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0g
ZmFsc2UpCiAgICAgICAgIDogbV9zdHlsZShzdHlsZSkKICAgICAgICAgLCBtX3Jvb3RTdHlsZShy
b290U3R5bGUpCiAgICAgICAgICwgbV9yZW5kZXJWaWV3KHJlbmRlclZpZXcpCkBAIC02Nyw3ICs2
Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KICAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290U3R5bGU7IH0KICAgICBmbG9hdCB6b29tKCkgY29u
c3Q7CiAgICAgYm9vbCBjb21wdXRpbmdGb250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0
aW5nRm9udFNpemU7IH0KQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9z
dHlsZTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9yb290U3R5bGU7CiAgICAgY29uc3QgUmVu
ZGVyVmlldyogbV9yZW5kZXJWaWV3OwogICAgIGZsb2F0IG1fem9vbTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBA
QCBSZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6c3R5bGUoKSBjb25zCiAgICAgcmV0dXJuIG1f
cmVzb2x2ZXItPnN0eWxlKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpyb290
RWxlbWVudFN0eWxlKCkgY29uc3QKK2NvbnN0IFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpy
b290RWxlbWVudFN0eWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCShyZXZp
c2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gc2ltaWxhciB0byBo
b3cgUGFpbnRJbmZvL0xheW91dFN0YXRlIGNhY2hlIHZhbHVlcyBuZWVkZWQgZm9yCiAgICAgLy8g
dGhlIGN1cnJlbnQgcGFpbnQvbGF5b3V0LgogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
OwotICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3Q7CisgICAgY29uc3Qg
UmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdDsKICAgICBib29sIHVzZVNWR1pv
b21SdWxlcygpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2Yg
c29tZSBzb3J0IG9mIFN0eWxlSW1hZ2VDYWNoZSBvYmplY3Qgd2hpY2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODUsMTAgKzg1LDEwIEBAIE1lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFs
dWF0b3IKIHsKIH0KIAotTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihj
b25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSogZnJhbWUsIFJlbmRlclN0eWxl
KiBzdHlsZSkKK01lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3Qg
U3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgRnJhbWUqIGZyYW1lLCBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUpCiAgICAgOiBtX21lZGlhVHlwZShhY2NlcHRlZE1lZGlhVHlwZSkKICAgICAsIG1f
ZnJhbWUoZnJhbWUpCi0gICAgLCBtX3N0eWxlKFdURk1vdmUoc3R5bGUpKQorICAgICwgbV9zdHls
ZShzdHlsZSkKICAgICAsIG1fZXhwUmVzdWx0KGZhbHNlKSAvLyBkb2Vzbid0IG1hdHRlciB3aGVu
IHdlIGhhdmUgbV9mcmFtZSBhbmQgbV9zdHlsZQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4
MCw3IEBAIHB1YmxpYzoKIAogICAgIC8qKiBDcmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0
ZXMgZnVsbCBtZWRpYSBxdWVyaWVzCiAgICAgICovCi0gICAgTWVkaWFRdWVyeUV2YWx1YXRvcihj
b25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSosIFJlbmRlclN0eWxlKik7Cisg
ICAgTWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBG
cmFtZSosIGNvbnN0IFJlbmRlclN0eWxlKik7CiAKICAgICB+TWVkaWFRdWVyeUV2YWx1YXRvcigp
OwogCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbWVk
aWFUeXBlOwogICAgIEZyYW1lKiBtX2ZyYW1lIHsgbnVsbHB0ciB9OyAvLyBub3Qgb3duZWQKLSAg
ICBSZW5kZXJTdHlsZSogbV9zdHlsZSB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBSZW5kZXJTdHls
ZSogbV9zdHlsZSB7IG51bGxwdHIgfTsKICAgICBib29sIG1fZXhwUmVzdWx0OwogfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5
Myw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHN0cm9rZURhc2hBcnJheVQKICAgICByZXR1
cm4gbGlzdDsKIH0KIAotUmVmUHRyPFNWR1BhaW50PiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjph
ZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNWR1BhaW50PiBuZXdQYWlu
dCwgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorUmVmUHRyPFNWR1BhaW50PiBDb21wdXRlZFN0
eWxlRXh0cmFjdG9yOjphZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNW
R1BhaW50PiBuZXdQYWludCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAg
IFJlZlB0cjxTVkdQYWludD4gcGFpbnQgPSBuZXdQYWludDsKICAgICBpZiAocGFpbnQtPnBhaW50
VHlwZSgpID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUiB8fCBwYWludC0+
cGFpbnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfVVJJX0NVUlJFTlRDT0xPUikK
QEAgLTExMSw3ICsxMTEsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6CiAgICAgaWYgKHVwZGF0ZUxheW91dCkKICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS51cGRh
dGVMYXlvdXQoKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5
bGUoKTsKKyAgICBhdXRvKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUoKTsKICAgICBpZiAo
IXN0eWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1NvdXJjZVNpemVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U291cmNlU2l6ZUxpc3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvU291cmNlU2l6ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgbWF0Y2goc3RkOjp1bmlxdWVfcHRy
PE1lZGlhUXVlcnlFeHA+JiYgZXhwcmVzc2lvbiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBGcmFtZSog
ZnJhbWUpCitzdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4m
JiBleHByZXNzaW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEZyYW1lKiBmcmFtZSkKIHsK
ICAgICBpZiAoZXhwcmVzc2lvbi0+bWVkaWFGZWF0dXJlKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTQ3LDEyICs0NywxMiBAQCBzdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVu
aXF1ZV9wdHI8TWVkaWFRCiAgICAgcmV0dXJuIG1lZGlhUXVlcnlFdmFsdWF0b3IuZXZhbChtZWRp
YVF1ZXJ5U2V0LmdldCgpKTsKIH0KIAotc3RhdGljIGZsb2F0IGRlZmF1bHRMZW5ndGgoUmVuZGVy
U3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQorc3RhdGljIGZsb2F0IGRlZmF1bHRMZW5n
dGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQogewogICAgIHJl
dHVybiBjbGFtcFRvPGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5n
dGhEb3VibGUoQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgmc3R5bGUsICZzdHlsZSwgdmlldyks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcsIDEwMC4wKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBj
b21wdXRlTGVuZ3RoKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJW
aWV3KiB2aWV3KQorc3RhdGljIGZsb2F0IGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCiB7CiAgICAgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSgmc3R5bGUsICZzdHlsZSwgdmlldyk7
CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKQEAgLTcwLDcgKzcwLDcg
QEAgZmxvYXQgcGFyc2VTaXplc0F0dHJpYnV0ZShTdHJpbmdWaWV3IHNpegogewogICAgIGlmICgh
dmlldykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gdmlldy0+
c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHZpZXctPnN0eWxlKCk7CiAgICAgZm9yIChhdXRv
JiBzb3VyY2VTaXplIDogQ1NTUGFyc2VyKENTU1N0cmljdE1vZGUpLnBhcnNlU2l6ZXNBdHRyaWJ1
dGUoc2l6ZXNBdHRyaWJ1dGUpKSB7CiAgICAgICAgIGlmIChtYXRjaChXVEZNb3ZlKHNvdXJjZVNp
emUuZXhwcmVzc2lvbiksIHN0eWxlLCBmcmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gY29tcHV0
ZUxlbmd0aChzb3VyY2VTaXplLmxlbmd0aC5nZXQoKSwgc3R5bGUsIHZpZXcpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NzUsNyArNTc1LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMg
Y29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSkKKyAgICBz
dGF0aWMgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUt
PmJvcmRlckltYWdlKCkgOiBzdHlsZS0+bWFza0JveEltYWdlKCk7CiAgICAgfQpAQCAtNjY0LDcg
KzY2NCw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmkKIAogaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDbGlwKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpOworICAgIGF1dG8qIHBhcmVudFN0eWxlID0gc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmhhc0NsaXAoKSkK
ICAgICAgICAgcmV0dXJuIGFwcGx5SW5pdGlhbENsaXAoc3R5bGVSZXNvbHZlcik7CiAgICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKHBhcmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVu
dFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5
bGUtPmNsaXBMZWZ0KCkpOwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAgdGVtcGxhdGUgPFN0eWxlQnVp
bGRlckN1c3RvbTo6Q291bnRlckJlaAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7CiAgICAg
Q291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3ND
b3VudGVyRGlyZWN0aXZlcygpOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBzdHlsZVJlc29s
dmVyLnBhcmVudFN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIGtleVZhbHVlIDogY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIu
cGFyZW50U3R5bGUoKSktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKICAgICAgICAgQ291
bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGtleVZhbHVlLmtleSwgQ291bnRl
ckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoY291bnRlckJlaGF2
aW9yID09IFJlc2V0KQogICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0UmVzZXQoa2V5VmFs
dWUudmFsdWUpOwpAQCAtMTMzNyw3ICsxMzM3LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbAogICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCiAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRVbmlxdWUoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAg
IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpLT5z
ZXRVbmlxdWUoKTsKICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgY29u
dGVudFZhbHVlLmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxsQXRvbSk7CiAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNvbHZlci5lbGVtZW50KCktPmdl
dEF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0
KTsKQEAgLTE3MDYsNyArMTcwNiw3IEBAIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlQWx0KFMKICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c3R5bGVUeXBlKCkg
PT0gTk9QU0VVRE8pCiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFVuaXF1
ZSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxl
KCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0
eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSktPnNldFVuaXF1ZSgpOwogCiAgICAgICAgIFF1YWxp
ZmllZE5hbWUgYXR0cihudWxsQXRvbSwgcHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSwg
bnVsbEF0b20pOwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNv
bHZlci5lbGVtZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGkKICAgICBtX21hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA9IDA7CiB9CiAKLVN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHlsZSwgY29uc3QgUmVuZGVy
UmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JG
aWx0ZXIpCitTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogZG9j
dW1lbnRFbGVtZW50U3R5bGUsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZywg
Y29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKQogICAgIDogbV9lbGVtZW50KCZl
bGVtZW50KQogICAgICwgbV9wYXJlbnRTdHlsZShwYXJlbnRTdHlsZSkKICAgICAsIG1fcmVnaW9u
Rm9yU3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKQpAQCAtMzgwLDcgKzM4MCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY28KICAgICByZXR1cm4gcGFyZW50Tm9kZSAm
JiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKIH0KIAotRWxlbWVudFN0eWxlIFN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNv
bnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIq
IHNlbGVjdG9yRmlsdGVyKQorRWxlbWVudFN0eWxlIFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxl
bWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNvbnN0IFJlbmRlclJl
Z2lvbiogcmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmls
dGVyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2luTG9hZFBlbmRpbmdJbWFnZXMpOwogCkBA
IC01NTgsNyArNTU4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFu
aQogICAgIH0KIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
Ojpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUHNl
dWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIFJlbmRlclN0eWxlJiBwYXJlbnRT
dHlsZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRv
U3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFBzZXVkb1N0eWxl
UmVxdWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0LCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5
bGUpCiB7CiAgICAgbV9zdGF0ZSA9IFN0YXRlKGVsZW1lbnQsICZwYXJlbnRTdHlsZSk7CiAKQEAg
LTE2MzEsNyArMTYzMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm8KICAgICB9CiAKICAgICBpZiAoaXNJbmhlcml0ICYmICFzdGF0ZS5wYXJlbnRTdHlsZSgpLT5o
YXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhl
cml0ZWRQcm9wZXJ0eShpZCkpCi0gICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldEhhc0V4
cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVy
U3R5bGUqPihzdGF0ZS5wYXJlbnRTdHlsZSgpKS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFBy
b3BlcnRpZXMoKTsKICAgICAKICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlDdXN0b20pIHsKICAg
ICAgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSogY3VzdG9tUHJvcGVydHkgPSAmZG93bmNhc3Q8
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnZhbHVlVG9BcHBseSk7CkBAIC0xNzM0LDcgKzE3MzQs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1CiB9CiAjZW5kaWYK
IAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNr
Rm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkKIHsKICAgICBpZiAoIXBhcmVudFN0eWxlKQogICAgICAgICByZXR1cm47CkBAIC0x
NzQ4LDcgKzE3NDgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShS
CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGNvbnN0IGF1dG8mIGNoaWxkRm9udCA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsMTggKzE0MSwxOCBAQCBwdWJsaWM6CiAgICAg
U3R5bGVSZXNvbHZlcihEb2N1bWVudCYpOwogICAgIH5TdHlsZVJlc29sdmVyKCk7CiAKLSAgICBF
bGVtZW50U3R5bGUgc3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgY29uc3Qg
UmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JG
aWx0ZXIqID0gbnVsbHB0cik7CisgICAgRWxlbWVudFN0eWxlIHN0eWxlRm9yRWxlbWVudChjb25z
dCBFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSdWxlTWF0Y2hpbmdC
ZWhhdmlvciA9IE1hdGNoQWxsUnVsZXMsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5
bGluZyA9IG51bGxwdHIsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiA9IG51bGxwdHIpOwogCiAgICAg
dm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihjb25zdCBFbGVtZW50JiwgY29uc3QgUmVu
ZGVyU3R5bGUqLCBLZXlmcmFtZUxpc3QmKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBjb25zdCBQc2V1ZG9T
dHlsZVJlcXVlc3QmLCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBj
b25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUp
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBh
Z2VJbmRleCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBkZWZhdWx0U3R5bGVG
b3JFbGVtZW50KCk7CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0eWxlKCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcm9vdEVs
ZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpOyB9
CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5wYXJlbnRTdHlsZSgpOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsgfQogICAg
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQoKSB7IHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKTsgfQog
ICAgIERvY3VtZW50JiBkb2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBTZXR0
aW5ncyogZG9jdW1lbnRTZXR0aW5ncygpIHsgcmV0dXJuIG1fZG9jdW1lbnQuc2V0dGluZ3MoKTsg
fQpAQCAtMzE3LDggKzMxNyw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQg
dGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAotICAgIHZv
aWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSos
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1p
bHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwor
ICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKTsKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICB2
b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoUmVuZGVyU3R5bGUqKTsKICNlbmRpZgpAQCAtMzYx
LDcgKzM2MSw3IEBAIHB1YmxpYzoKICAgICBjbGFzcyBTdGF0ZSB7CiAgICAgcHVibGljOgogICAg
ICAgICBTdGF0ZSgpIHsgfQotICAgICAgICBTdGF0ZShjb25zdCBFbGVtZW50JiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogZG9jdW1lbnRFbGVtZW50U3R5bGUgPSBudWxs
cHRyLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25z
dCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKKyAgICAgICAgU3RhdGUoY29uc3QgRWxlbWVu
dCYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIGRv
Y3VtZW50RWxlbWVudFN0eWxlID0gbnVsbHB0ciwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25G
b3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CiAK
ICAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKQEAgLTM3NCw4ICszNzQsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gdGFrZVN0eWxlKCkg
eyByZXR1cm4gV1RGTW92ZShtX3N0eWxlKTsgfQogCiAgICAgICAgIHZvaWQgc2V0UGFyZW50U3R5
bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPik7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KLSAgICAgICAgUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50
U3R5bGU7IH0KKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQorICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9v
dEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsgfQogCiAg
ICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVnaW9uRm9yU3R5bGluZzsgfQogICAgICAgICBFSW5zaWRlTGluayBlbGVtZW50TGlu
a1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50TGlua1N0YXRlOyB9CkBAIC00MjcsOSAr
NDI3LDkgQEAgcHVibGljOgogCiAgICAgICAgIGNvbnN0IEVsZW1lbnQqIG1fZWxlbWVudCB7IG51
bGxwdHIgfTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwot
ICAgICAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsKKyAgICAgICAg
Y29uc3QgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGUgeyBudWxscHRyIH07CiAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV9vd25lZFBhcmVudFN0eWxlOwotICAgICAgICBS
ZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OworICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OwogCiAgICAgICAg
IGNvbnN0IFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nIHsgbnVsbHB0ciB9OwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwOCw3
ICsyMDA4LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZwogICAg
IG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzID0gb2xkSWdub3JlOwogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IERvY3VtZW50OjpzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRp
bmdTdHlsZXNoZWV0cyhFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IERvY3VtZW50OjpzdHlsZUZvckVsZW1lbnRJ
Z25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0cyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgQVNTRVJUKCZlbGVtZW50LmRvY3VtZW50KCkgPT0g
dGhpcyk7CiAKQEAgLTI1MTUsNyArMjUxNSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFZpc3VhbGx5
T3JkZXJlZCgpCiB7CiAgICAgbV92aXN1YWxseU9yZGVyZWQgPSB0cnVlOwogICAgIGlmIChyZW5k
ZXJWaWV3KCkpCi0gICAgICAgIHJlbmRlclZpZXcoKS0+c3R5bGUoKS5zZXRSVExPcmRlcmluZyhW
aXN1YWxPcmRlcik7CisgICAgICAgIHJlbmRlclZpZXcoKS0+bXV0YWJsZVN0eWxlKCkuc2V0UlRM
T3JkZXJpbmcoVmlzdWFsT3JkZXIpOwogfQogCiBSZWY8RG9jdW1lbnRQYXJzZXI+IERvY3VtZW50
OjpjcmVhdGVQYXJzZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NzEsNyArNTcxLDcgQEAgcHVibGljOgogICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoUnVuUG9zdExheW91dFRhc2tzID0g
UnVuUG9zdExheW91dFRhc2tzOjpBc3luY2hyb25vdXNseSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRz
KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5nU3R5bGVzaGVldHMo
RWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgcGFnZSBib3ggKG1hcmdpbiBib3hlcyBhbmQgcGFnZSBib3JkZXJzKSBpcyB2
aXNpYmxlLgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQYWdlQm94VmlzaWJsZShpbnQgcGFn
ZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3MCw3
ICsxMzcwLDcgQEAgU3R5bGVSZXNvbHZlciYgRWxlbWVudDo6c3R5bGVSZXNvbHZlcigpCiAgICAg
cmV0dXJuIGRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwogfQogCi1FbGVtZW50U3R5
bGUgRWxlbWVudDo6cmVzb2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK0VsZW1l
bnRTdHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQogewogICAgIHJldHVybiBzdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50KCp0aGlz
LCBwYXJlbnRTdHlsZSk7CiB9CkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBib29sIEVsZW1lbnQ6OmNo
aWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUgCiBzdGF0aWMgdm9pZCBjaGVja0ZvckVtcHR5U3R5bGVD
aGFuZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoZWxlbWVudC5zdHlsZUFmZmVjdGVk
QnlFbXB0eSgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgYXV0byogc3R5bGUgPSBlbGVtZW50LnJlbmRlclN0eWxlKCk7CiAg
ICAgICAgIGlmICghc3R5bGUgfHwgKCFzdHlsZS0+ZW1wdHlTdGF0ZSgpIHx8IGVsZW1lbnQuaGFz
Q2hpbGROb2RlcygpKSkKICAgICAgICAgICAgIGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygp
OwogICAgIH0KQEAgLTE3ODQsMTQgKzE3ODQsMTQgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JTaWJs
aW5nU3R5bGVDaGFuZ2VzKAogCiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGluc2VydC9hcHBlbmQg
Y2FzZS4KICAgICAgICAgaWYgKG5ld0ZpcnN0RWxlbWVudCAhPSBlbGVtZW50QWZ0ZXJDaGFuZ2Up
IHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnRBZnRlckNoYW5nZS0+
cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudEFmdGVyQ2hh
bmdlLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+Zmly
c3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBhbHNvIGhhdmUg
dG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4KICAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBTaWJsaW5n
RWxlbWVudFJlbW92ZWQgJiYgbmV3Rmlyc3RFbGVtZW50ID09IGVsZW1lbnRBZnRlckNoYW5nZSAm
JiBuZXdGaXJzdEVsZW1lbnQpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG5l
d0ZpcnN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0g
bmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8
fCAhc3R5bGUtPmZpcnN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAgIG5ld0ZpcnN0RWxl
bWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0xODA0LDcgKzE4MDQs
NyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgIEVs
ZW1lbnQqIG5ld0xhc3RFbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bGFzdENoaWxkKHBhcmVu
dCk7CiAKICAgICAgICAgaWYgKG5ld0xhc3RFbGVtZW50ICE9IGVsZW1lbnRCZWZvcmVDaGFuZ2Up
IHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnRCZWZvcmVDaGFuZ2Ut
PnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnRCZWZvcmVD
aGFuZ2UtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5s
YXN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAgIGVsZW1lbnRCZWZvcmVDaGFuZ2UtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQpAQCAtMTgxMiw3ICsxODEyLDcgQEAgc3Rh
dGljIHZvaWQgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgICAgICAvLyBXZSBhbHNv
IGhhdmUgdG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4gIFRoZSBwYXJzZXIgY2FsbGJhY2sgY2FzZSBp
cyBzaW1pbGFyIHRvIG5vZGUgcmVtb3ZhbCBhcyB3ZWxsIGluIHRoYXQgd2UgbmVlZCB0byBjaGFu
Z2UgdGhlIGxhc3QgY2hpbGQKICAgICAgICAgLy8gdG8gbWF0Y2ggbm93LgogICAgICAgICBpZiAo
KGNoZWNrVHlwZSA9PSBTaWJsaW5nRWxlbWVudFJlbW92ZWQgfHwgY2hlY2tUeXBlID09IEZpbmlz
aGVkUGFyc2luZ0NoaWxkcmVuKSAmJiBuZXdMYXN0RWxlbWVudCA9PSBlbGVtZW50QmVmb3JlQ2hh
bmdlICYmIG5ld0xhc3RFbGVtZW50KSB7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBuZXdMYXN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxl
ID0gbmV3TGFzdEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxl
IHx8ICFzdHlsZS0+bGFzdENoaWxkU3RhdGUoKSkKICAgICAgICAgICAgICAgICBuZXdMYXN0RWxl
bWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0yNDYxLDcgKzI0NjEs
NyBAQCBzdGF0aWMgUHNldWRvRWxlbWVudCogYmVmb3JlT3JBZnRlclBzZXVkCiAgICAgfQogfQog
Ci1SZW5kZXJTdHlsZSogRWxlbWVudDo6ZXhpc3RpbmdDb21wdXRlZFN0eWxlKCkKK2NvbnN0IFJl
bmRlclN0eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3R5bGUoKQogewogICAgIGlmIChh
dXRvKiByZW5kZXJUcmVlU3R5bGUgPSByZW5kZXJTdHlsZSgpKQogICAgICAgICByZXR1cm4gcmVu
ZGVyVHJlZVN0eWxlOwpAQCAtMjQ3MiwxMyArMjQ3MiwxMyBAQCBSZW5kZXJTdHlsZSogRWxlbWVu
dDo6ZXhpc3RpbmdDb21wdXRlZFN0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJlbmRlclN0
eWxlJiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSgpCitjb25zdCBSZW5kZXJTdHlsZSYg
RWxlbWVudDo6cmVzb2x2ZUNvbXB1dGVkU3R5bGUoKQogewogICAgIEFTU0VSVChpbkRvY3VtZW50
KCkpOwogICAgIEFTU0VSVCghZXhpc3RpbmdDb21wdXRlZFN0eWxlKCkpOwogCiAgICAgRGVxdWU8
RWxlbWVudCosIDMyPiBlbGVtZW50c1JlcXVpcmluZ0NvbXB1dGVkU3R5bGUoeyB0aGlzIH0pOwot
ICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gbnVsbHB0cjsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHI7CiAKICAgICAvLyBDb2xsZWN0IGFuY2Vz
dG9ycyB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IGhhcyBzdHlsZS4KICAgICBhdXRvIGNvbXBvc2Vk
QW5jZXN0b3JzID0gY29tcG9zZWRUcmVlQW5jZXN0b3JzKCp0aGlzKTsKQEAgLTI1MDEsNyArMjUw
MSw3IEBAIFJlbmRlclN0eWxlJiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHkKICAgICByZXR1
cm4gKmNvbXB1dGVkU3R5bGU7CiB9CiAKLVJlbmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0
eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpCitjb25zdCBSZW5kZXJTdHlsZSog
RWxlbWVudDo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQog
ewogICAgIGlmIChQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gYmVmb3JlT3JBZnRlclBz
ZXVkb0VsZW1lbnQoKnRoaXMsIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpKQogICAgICAgICByZXR1
cm4gcHNldWRvRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwpAQCAtMzI5NSw3ICszMjk1LDcgQEAg
dm9pZCBFbGVtZW50OjpkaWREZXRhY2hSZW5kZXJlcnMoKQogICAgIEFTU0VSVChoYXNDdXN0b21T
dHlsZVJlc29sdmVDYWxsYmFja3MoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gRWxl
bWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqKQorT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiBFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopCiB7CiAgICAgQVNTRVJUKGhhc0N1c3RvbVN0
eWxlUmVzb2x2ZUNhbGxiYWNrcygpKTsKICAgICByZXR1cm4gTnVsbG9wdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFRhYkluZGV4KGludCk7CiAgICAgdmlydHVhbCBFbGVtZW50KiBmb2N1c0RlbGVnYXRlKCk7
CiAKLSAgICBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKSBv
dmVycmlkZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9
IE5PUFNFVURPKSBvdmVycmlkZTsKIAogICAgIGJvb2wgbmVlZHNTdHlsZUludmFsaWRhdGlvbigp
IGNvbnN0OwogCkBAIC00ODAsNyArNDgwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRBdHRhY2hSZW5kZXJlcnMoKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERldGFjaFJlbmRlcmVy
cygpOwogICAgIHZpcnR1YWwgdm9pZCBkaWREZXRhY2hSZW5kZXJlcnMoKTsKLSAgICB2aXJ0dWFs
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSk7CisgICAgdmlydHVhbCBP
cHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHls
ZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpOwogCiAg
ICAgTGF5b3V0UmVjdCBhYnNvbHV0ZUV2ZW50SGFuZGxlckJvdW5kcyhib29sJiBpbmNsdWRlc0Zp
eGVkUG9zaXRpb25FbGVtZW50cykgb3ZlcnJpZGU7CiAKQEAgLTQ5OSw3ICs0OTksNyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKTsKLSAgICBF
bGVtZW50U3R5bGUgcmVzb2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAg
RWxlbWVudFN0eWxlIHJlc29sdmVTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
OwogCiAgICAgYm9vbCBoYXNEaXNwbGF5Q29udGVudHMoKSBjb25zdDsKICAgICB2b2lkIHNldEhh
c0Rpc3BsYXlDb250ZW50cyhib29sKTsKQEAgLTU5Miw4ICs1OTIsOCBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCByZW1vdmVTaGFkb3dSb290KCk7CiAKLSAgICBSZW5kZXJTdHlsZSogZXhpc3RpbmdD
b21wdXRlZFN0eWxlKCk7Ci0gICAgUmVuZGVyU3R5bGUmIHJlc29sdmVDb21wdXRlZFN0eWxlKCk7
CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGV4aXN0aW5nQ29tcHV0ZWRTdHlsZSgpOworICAgIGNv
bnN0IFJlbmRlclN0eWxlJiByZXNvbHZlQ29tcHV0ZWRTdHlsZSgpOwogCiAgICAgYm9vbCByYXJl
RGF0YVN0eWxlQWZmZWN0ZWRCeUVtcHR5KCkgY29uc3Q7CiAgICAgYm9vbCByYXJlRGF0YUNoaWxk
cmVuQWZmZWN0ZWRCeUhvdmVyKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1OSw3ICs2NTksNyBAQCBzdGF0aWMgTm9kZTo6RWRpdGFiaWxpdHkgY29tcHV0ZUVkaXRh
YmlsCiAgICAgLy8gd291bGQgZmlyZSBpbiB0aGUgbWlkZGxlIG9mIERvY3VtZW50OjpzZXRGb2N1
c2VkRWxlbWVudCgpLgogCiAgICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gJnN0YXJ0Tm9kZTsg
bm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBub2RlLT5pc0RvY3VtZW50Tm9kZSgpID8gbm9kZS0+cmVuZGVyU3R5bGUoKSA6IGNv
bnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLT5jb21wdXRlZFN0eWxlKCk7CisgICAgICAgIGF1dG8qIHN0
eWxlID0gbm9kZS0+aXNEb2N1bWVudE5vZGUoKSA/IG5vZGUtPnJlbmRlclN0eWxlKCkgOiBjb25z
dF9jYXN0PE5vZGUqPihub2RlKS0+Y29tcHV0ZWRTdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxl
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09
IE5PTkUpCkBAIC0xMDEwLDcgKzEwMTAsNyBAQCBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUxhc3RD
aGlsZCgpIGNvbnN0CiAgICAgcmV0dXJuIGxhc3RDaGlsZCgpOwogfQogCi1SZW5kZXJTdHlsZSog
Tm9kZTo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQorY29u
c3QgUmVuZGVyU3R5bGUqIE5vZGU6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVu
dFNwZWNpZmllcikKIHsKICAgICBhdXRvKiBjb21wb3NlZFBhcmVudCA9IGNvbXBvc2VkVHJlZUFu
Y2VzdG9ycygqdGhpcykuZmlyc3QoKTsKICAgICBpZiAoIWNvbXBvc2VkUGFyZW50KQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NDMsOSArNDQzLDkgQEAgcHVibGljOgogICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2RlbE9iamVjdCgpIGNvbnN0OwogICAgIAogICAgIC8v
IFdyYXBwZXIgZm9yIG5vZGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIHJlbmRlcmVyLCBidXQgc3RpbGwg
Y2FjaGUgdGhlIHN0eWxlIChsaWtlIEhUTUxPcHRpb25FbGVtZW50KS4KLSAgICBSZW5kZXJTdHls
ZSogcmVuZGVyU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5
bGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNl
dWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllciA9IE5PUFNFVURPKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVj
aWZpZXIgPSBOT1BTRVVETyk7CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8v
IE5vdGlmaWNhdGlvbiBvZiBkb2N1bWVudCBzdHJ1Y3R1cmUgY2hhbmdlcyAoc2VlIENvbnRhaW5l
ck5vZGUuaCBmb3IgbW9yZSBub3RpZmljYXRpb24gbWV0aG9kcykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVJlbmRlclN0eWxlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBSZW5kZXJTdHlsZSogTm9kZTo6cmVuZGVy
U3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBOb2RlOjpyZW5kZXJTdHls
ZSgpIGNvbnN0CiB7CiAgICAgYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAg
IGlmICghcmVuZGVyZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBQc2V1ZG9FbGVtZW50OjpjbGVh
ckhvc3RFbGVtZW50KCkKICAgICBtX2hvc3RFbGVtZW50ID0gbnVsbHB0cjsKIH0KIAotT3B0aW9u
YWw8RWxlbWVudFN0eWxlPiBQc2V1ZG9FbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVy
U3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSopCitPcHRpb25hbDxFbGVtZW50U3R5bGU+
IFBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKikKIHsKICAgICBhdXRvKiBzdHlsZSA9IG1faG9z
dEVsZW1lbnQtPnJlbmRlcmVyKCktPmdldENhY2hlZFBzZXVkb1N0eWxlKG1fcHNldWRvSWQsICZw
YXJlbnRTdHlsZSk7CiAgICAgaWYgKCFzdHlsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Q
c2V1ZG9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0Vs
ZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgRWxl
bWVudCogaG9zdEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RFbGVtZW50OyB9CiAgICAg
dm9pZCBjbGVhckhvc3RFbGVtZW50KCk7CiAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJl
c29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBz
aGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVz
b2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRBdHRhY2hS
ZW5kZXJlcnMoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFu
Z2UpIG92ZXJyaWRlOwogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHls
ZSYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzksMTggKzE3OSwxOCBAQCBzdGF0aWMgYm9vbCBpc05ld0xpbmVBdFBvc2l0aW9uKGNv
bnN0IFBvCiAgICAgcmV0dXJuIHRleHRBdFBvc2l0aW9uWzBdID09ICdcbic7CiB9CiAKLVJlbmRl
clN0eWxlKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxlT2ZFbmNsb3NpbmdU
ZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCitjb25zdCBSZW5kZXJTdHlsZSogQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkg
IT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcgogICAgICAgICB8fCAhcG9zaXRp
b24uY29udGFpbmVyTm9kZSgpCiAgICAgICAgIHx8ICFwb3NpdGlvbi5jb250YWluZXJOb2RlKCkt
PmlzVGV4dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIHJldHVybiAmcmVuZGVyZXItPnN0eWxlKCk7CiB9CkBAIC0yMDEsNyArMjAx
LDcgQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgIGVuZCA9
IGVuZE9mQ3VycmVudFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpOwogCiAgICAgYm9vbCBpc1N0
YXJ0QW5kRW5kT25TYW1lTm9kZSA9IGZhbHNlOwotICAgIGlmIChSZW5kZXJTdHlsZSogc3RhcnRT
dHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShzdGFydCkpIHsKKyAgICBpZiAo
YXV0byogc3RhcnRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShzdGFydCkp
IHsKICAgICAgICAgaXNTdGFydEFuZEVuZE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9z
aW5nVGV4dE5vZGUoZW5kKSAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5l
ck5vZGUoKTsKICAgICAgICAgYm9vbCBpc1N0YXJ0QW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1l
Tm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFw
aCkgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmNvbnRh
aW5lck5vZGUoKTsKIApAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kOjpyYW5nZUZvclAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChSZW5kZXJTdHls
ZSogZW5kU3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoZW5kKSkgeworICAg
IGlmIChhdXRvKiBlbmRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShlbmQp
KSB7CiAgICAgICAgIGJvb2wgaXNFbmRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlID0g
cmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKG1fZW5kT2ZMYXN0UGFyYWdyYXBoKSAmJiBl
bmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBtX2VuZE9mTGFzdFBhcmFncmFwaC5kZXByZWNhdGVkTm9k
ZSgpOwogICAgICAgICAvLyBJbmNsdWRlIFxuIGF0IHRoZSBlbmQgb2YgbGluZSBpZiB3ZSdyZSBh
dCBhbiBlbXB0eSBwYXJhZ3JhcGgKICAgICAgICAgaWYgKGVuZFN0eWxlLT5wcmVzZXJ2ZU5ld2xp
bmUoKSAmJiBzdGFydCA9PSBlbmQgJiYgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDwgZW5k
LmNvbnRhaW5lck5vZGUoKS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHsKQEAgLTI1OCw3ICsyNTgs
NyBAQCBWaXNpYmxlUG9zaXRpb24gQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kCiB7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZE9mTmV4dFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGVuZE9mQ3Vy
cmVudFBhcmFncmFwaC5uZXh0KCkpOwogICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kT2ZOZXh0
UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVu
ZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHBvc2l0aW9uKTsKKyAgICBhdXRvKiBzdHlsZSA9
IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShwb3NpdGlvbik7CiAgICAgaWYgKCFzdHls
ZSkKICAgICAgICAgcmV0dXJuIGVuZE9mTmV4dFBhcmFncmFwaDsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29t
bWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHByb3RlY3RlZDoKIHByaXZh
dGU6CiAgICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZvcm1h
dFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgY29uc3Qg
UG9zaXRpb24mIGVuZE9mU2VsZWN0aW9uLCBSZWZQdHI8RWxlbWVudD4mKSA9IDA7Ci0gICAgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYp
OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUo
Y29uc3QgUG9zaXRpb24mKTsKICAgICB2b2lkIHJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5nVGV4
dE5vZGVzSWZOZWVkZWQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgUG9zaXRpb24mLCBQb3NpdGlv
biYpOwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZk5leHRQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0
Tm9kZXNJZk5lZWRlZChWaXNpYmxlUG9zaXRpb24mLCBQb3NpdGlvbiYsIFBvc2l0aW9uJik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjppbml0KE5vZGUq
IG5vZGUsIFByb3AKICAgICB9CiAKICAgICBpZiAobm9kZSAmJiBub2RlLT5jb21wdXRlZFN0eWxl
KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gbm9kZS0+Y29tcHV0ZWRT
dHlsZSgpOworICAgICAgICBhdXRvKiByZW5kZXJTdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUo
KTsKICAgICAgICAgcmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChyZW5kZXJT
dHlsZSk7CiAgICAgICAgIGlmIChyZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29y
ZFNpemUoKSkKICAgICAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBjb21wdXRlZFN0eWxlQXRQb3NpdGlvbi5nZXRGb250U2l6ZUNTU1ZhbHVl
UHJlZmVycmluZ0tleXdvcmQoKS0+Y3NzVGV4dCgpKTsKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lk
IEVkaXRpbmdTdHlsZTo6aW5pdChOb2RlKiBub2RlLCBQcm9wCiAgICAgZXh0cmFjdEZvbnRTaXpl
RGVsdGEoKTsKIH0KIAotdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVRleHRGaWxsQW5kU3Ryb2tl
Q29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKQordm9pZCBFZGl0aW5nU3R5
bGU6OnJlbW92ZVRleHRGaWxsQW5kU3Ryb2tlQ29sb3JzSWZOZWVkZWQoY29uc3QgUmVuZGVyU3R5
bGUqIHJlbmRlclN0eWxlKQogewogICAgIC8vIElmIGEgbm9kZSdzIHRleHQgZmlsbCBjb2xvciBp
cyBpbnZhbGlkLCB0aGVuIGl0cyBjaGlsZHJlbiB1c2UgCiAgICAgLy8gdGhlaXIgZm9udC1jb2xv
ciBhcyB0aGVpciB0ZXh0IGZpbGwgY29sb3IgKHRoZXkgZG9uJ3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3
IEBAIHByaXZhdGU6CiAgICAgRWRpdGluZ1N0eWxlKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOwogICAgIEVkaXRpbmdTdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZUlEKTsK
ICAgICB2b2lkIGluaXQoTm9kZSosIFByb3BlcnRpZXNUb0luY2x1ZGUpOwotICAgIHZvaWQgcmVt
b3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSopOworICAgIHZv
aWQgcmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChjb25zdCBSZW5kZXJTdHls
ZSopOwogICAgIHZvaWQgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAgICAgdm9pZCBleHRyYWN0Rm9udFNpemVE
ZWx0YSgpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHls
ZShUJiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDggKzQz
MCw4IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gd2ViQ29udGVudEZy
b21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWlu
VGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KEZyYW1lKiAsIE5vZGUgKiZub2RlVG9SZW1vdmUpOwotICAgIHZvaWQgZ2V0VGV4dERlY29yYXRp
b25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKFJlbmRlclN0eWxlJiwgTlNNdXRhYmxl
RGljdGlvbmFyeSopIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVt
b3ZlKTsKKyAgICB2b2lkIGdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3RpbmdUeXBp
bmdTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIE5TTXV0YWJsZURpY3Rpb25hcnkqKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9uKGJvb2wmKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZvbnRBdHRyaWJ1dGVzRm9y
U2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RyaW5n
U2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
aW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5
KCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgTm9kZSogc3RhcnRp
bmdOb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICBSZW5kZXJTdHlsZSogc3RhcnRp
bmdTdHlsZSA9IHN0YXJ0aW5nTm9kZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgYXV0byogc3Rh
cnRpbmdTdHlsZSA9IHN0YXJ0aW5nTm9kZS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgaWYgKCFz
dGFydGluZ1N0eWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIE5vZGUqIGN1cnJl
bnROb2RlID0gc3RhcnRpbmdOb2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9FZGl0b3JDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0VkaXRvckNvY29hLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZJWE1FOiBUaGlzIGZpZ3VyZXMgb3V0IHRo
ZSBjdXJyZW50IHN0eWxlIGJ5IGluc2VydGluZyBhIDxzcGFuPiEKLVJlbmRlclN0eWxlKiBFZGl0
b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoRnJhbWUqIGZyYW1lLCBOb2RlICombm9kZVRvUmVt
b3ZlKQorY29uc3QgUmVuZGVyU3R5bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChG
cmFtZSogZnJhbWUsIE5vZGUgKiZub2RlVG9SZW1vdmUpCiB7CiAgICAgbm9kZVRvUmVtb3ZlID0g
bnVsbHB0cjsKICAgICAKQEAgLTc2LDcgKzc2LDcgQEAgUmVuZGVyU3R5bGUqIEVkaXRvcjo6c3R5
bGVGb3JTZWxlY3Rpb25TdAogICAgIHJldHVybiBzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCkgPyAm
c3R5bGVFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKIH0KIAotdm9pZCBF
ZGl0b3I6OmdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3RpbmdUeXBpbmdTdHlsZShS
ZW5kZXJTdHlsZSYgc3R5bGUsIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCkgY29uc3QKK3Zv
aWQgRWRpdG9yOjpnZXRUZXh0RGVjb3JhdGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQp
IGNvbnN0CiB7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAgICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGlu
Z1N0eWxlLT5zdHlsZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9F
ZGl0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsNyBAQCBjb25zdCBGb250
KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vCiAKICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9k
ZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5bGUgPSBz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5v
ZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAg
ICAgIGlmIChzdHlsZSkgewpAQCAtMjIwLDcgKzIyMCw3IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6
Zm9udEZvclNlbGVjdGlvbihib28KIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRl
c0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwg
bm9kZVRvUmVtb3ZlKTsKKyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQo
Jm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgY29uc3QgRm9udCogRWRpdG9yOjpm
b250Rm9yU2VsZWN0aW9uKGJvbwogCiAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7
IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisgICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxl
Y3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUK
IAogICAgICAgICBjb25zdCBGb250KiByZXN1bHQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5
bGUpIHsKQEAgLTE0Niw3ICsxNDYsNyBAQCBjb25zdCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxl
Y3Rpb24oYm9vCiBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rp
b25TdGFydCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92
ZSk7CisgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBu
b2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBTdHJpbmcgSFRNTFRpdGxlRWxlbWVudDo6dGV4dCgp
IGNvbnN0CiBTdHJpbmdXaXRoRGlyZWN0aW9uIEhUTUxUaXRsZUVsZW1lbnQ6OmNvbXB1dGVkVGV4
dFdpdGhEaXJlY3Rpb24oKQogewogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSOwot
ICAgIGlmIChSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IHRoaXMtPmNvbXB1dGVkU3R5bGUo
KSkKKyAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9IHRoaXMtPmNvbXB1dGVkU3R5bGUoKSkK
ICAgICAgICAgZGlyZWN0aW9uID0gY29tcHV0ZWRTdHlsZS0+ZGlyZWN0aW9uKCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIGF1dG8gc3R5bGUgPSBzdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50
KCp0aGlzLCBwYXJlbnRFbGVtZW50KCkgPyBwYXJlbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCkg
OiBudWxscHRyKS5yZW5kZXJTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHkKICAgICB1cGRhdGUoc2VsZWN0b3IpOwogfQogCi1p
bmxpbmUgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eTo6aW5pdGlhbGl6
ZShGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKQoraW5s
aW5lIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6OmluaXRpYWxpemUo
Rm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3IsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkK
IHsKICAgICAvLyBCZXdhcmUhIG1fZm9udC5mb250U2VsZWN0b3IoKSBtaWdodCBub3QgcG9pbnQg
dG8gZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkhCiAgICAgQVNTRVJUKG5ld1N0eWxlLmZvbnRDYXNj
YWRlKCkuZm9udFNlbGVjdG9yKCkgPT0gJmZvbnRTZWxlY3Rvcik7CkBAIC0yMTk2LDcgKzIxOTYs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgRG9jdW1l
bnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCk7CiAgICAgZG9jdW1lbnQudXBkYXRl
U3R5bGVJZk5lZWRlZCgpOwogCi0gICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0g
Y2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKKyAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9
IGNhbnZhcygpLT5jb21wdXRlZFN0eWxlKCkpCiAgICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVz
Y3JpcHRpb24oY29tcHV0ZWRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOwogICAgIGVsc2Ugewog
ICAgICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGRlZmF1bHRGb250RGVzY3JpcHRpb247CkBA
IC0yMjU5LDkgKzIyNTksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VGV4
dEJhCiAgICAgbW9kaWZpYWJsZVN0YXRlKCkudGV4dEJhc2VsaW5lID0gYmFzZWxpbmU7CiB9CiAK
LWlubGluZSBUZXh0RGlyZWN0aW9uIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9UZXh0RGly
ZWN0aW9uKERpcmVjdGlvbiBkaXJlY3Rpb24sIFJlbmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSkg
Y29uc3QKK2lubGluZSBUZXh0RGlyZWN0aW9uIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9U
ZXh0RGlyZWN0aW9uKERpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiogY29t
cHV0ZWRTdHlsZSkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAoY29tcHV0ZWRT
dHlsZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJbmhlcml0KSA/IGNhbnZhcygpLT5jb21w
dXRlZFN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8qIHN0eWxlID0gKGNvbXB1dGVkU3R5bGUg
fHwgZGlyZWN0aW9uID09IERpcmVjdGlvbjo6SW5oZXJpdCkgPyBjYW52YXMoKS0+Y29tcHV0ZWRT
dHlsZSgpIDogbnVsbHB0cjsKICAgICBpZiAoY29tcHV0ZWRTdHlsZSkKICAgICAgICAgKmNvbXB1
dGVkU3R5bGUgPSBzdHlsZTsKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewpAQCAtMjM4NCw3ICsy
Mzg0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogCiAgICAg
Ly8gRklYTUU6IE5lZWQgdG8gdHVybiBvZmYgZm9udCBzbW9vdGhpbmcuCiAKLSAgICBSZW5kZXJT
dHlsZSogY29tcHV0ZWRTdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHls
ZTsKICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHRvVGV4dERpcmVjdGlvbihzdGF0ZSgp
LmRpcmVjdGlvbiwgJmNvbXB1dGVkU3R5bGUpOwogICAgIGJvb2wgaXNSVEwgPSBkaXJlY3Rpb24g
PT0gUlRMOwogICAgIGJvb2wgb3ZlcnJpZGUgPSBjb21wdXRlZFN0eWxlID8gaXNPdmVycmlkZShj
b21wdXRlZFN0eWxlLT51bmljb2RlQmlkaSgpKSA6IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNyArMjU1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgRm9udFByb3h5JiBvcGVyYXRvcj0oY29uc3QgRm9udFByb3h5Jik7CiAKICAg
ICAgICAgYm9vbCByZWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5mb250U2VsZWN0b3Io
KTsgfQotICAgICAgICB2b2lkIGluaXRpYWxpemUoRm9udFNlbGVjdG9yJiwgUmVuZGVyU3R5bGUm
KTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplKEZvbnRTZWxlY3RvciYsIGNvbnN0IFJlbmRlclN0
eWxlJik7CiAgICAgICAgIEZvbnRNZXRyaWNzIGZvbnRNZXRyaWNzKCkgY29uc3Q7CiAgICAgICAg
IGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0Owog
ICAgICAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJikgY29uc3Q7CkBAIC0zODIsNyArMzgy
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsgfQotICAgIFRleHREaXJlY3Rpb24g
dG9UZXh0RGlyZWN0aW9uKERpcmVjdGlvbiwgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxlID0g
bnVsbHB0cikgY29uc3Q7CisgICAgVGV4dERpcmVjdGlvbiB0b1RleHREaXJlY3Rpb24oRGlyZWN0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5bGUgPSBudWxscHRyKSBjb25zdDsK
IAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgSFRNTFJlc291cmNl
UHJlbG9hZGVyOjpwcmVsb2FkKFByZWwKICAgICAgICAgcHJlbG9hZChXVEZNb3ZlKHJlcXVlc3Qp
KTsKIH0KIAotc3RhdGljIGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKEZyYW1lKiBmcmFtZSwg
UmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQor
c3RhdGljIGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKEZyYW1lKiBmcmFtZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQogewog
ICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYVF1ZXJpZXMgPSBNZWRpYVF1ZXJ5U2V0Ojpj
cmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KGF0dHJpYnV0ZVZhbHVlKTsKICAgICBNZWRp
YVF1ZXJ5RXZhbHVhdG9yIG1lZGlhUXVlcnlFdmFsdWF0b3IoInNjcmVlbiIsIGZyYW1lLCByZW5k
ZXJTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRl
clRodW1iRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDIx
ICs4MywyMSBAQCBSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIoU2xpCiB7CiB9
CiAKLXZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UoUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKQordm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZShj
b25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgaWYgKHBhcmVudFN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBzdHlsZSgpLnNldEFw
cGVhcmFuY2UoU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOworICAgICAgICBtdXRhYmxlU3R5bGUo
KS5zZXRBcHBlYXJhbmNlKFNsaWRlclRodW1iVmVydGljYWxQYXJ0KTsKICAgICBlbHNlIGlmIChw
YXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KQotICAgICAg
ICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCk7CisgICAg
ICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFy
dCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRl
clBhcnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYVNsaWRlclRodW1iUGFy
dCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFTbGlkZXJUaHVt
YlBhcnQpOwogICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFW
b2x1bWVTbGlkZXJQYXJ0KQotICAgICAgICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFWb2x1
bWVTbGlkZXJUaHVtYlBhcnQpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5zZXRBcHBlYXJhbmNl
KE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+
YXBwZWFyYW5jZSgpID09IE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAg
IHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYlBh
cnQpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhRnVsbFNjcmVl
blZvbHVtZVNsaWRlclRodW1iUGFydCk7CiAgICAgaWYgKHN0eWxlKCkuaGFzQXBwZWFyYW5jZSgp
KSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgICAgICB0aGVtZSgpLmFkanVzdFNs
aWRlclRodW1iU2l6ZShzdHlsZSgpLCBlbGVtZW50KCkpOworICAgICAgICB0aGVtZSgpLmFkanVz
dFNsaWRlclRodW1iU2l6ZShtdXRhYmxlU3R5bGUoKSwgZWxlbWVudCgpKTsKICAgICB9CiB9CiAK
QEAgLTE1OSwxMyArMTU5LDEzIEBAIHZvaWQgUmVuZGVyU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQo
KQogICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CiAgICAgYXV0byYgaW5wdXQg
PSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCgpLT5zaGFkb3dIb3N0KCkpOwog
ICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGhhc1ZlcnRpY2FsQXBwZWFyYW5jZShpbnB1dCk7Ci0gICAg
c3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVydGljYWwgPyBGbG93Q29sdW1uIDogRmxvd1Jv
dyk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0RmxleERpcmVjdGlvbihpc1ZlcnRpY2FsID8gRmxv
d0NvbHVtbiA6IEZsb3dSb3cpOwogICAgIFRleHREaXJlY3Rpb24gb2xkVGV4dERpcmVjdGlvbiA9
IHN0eWxlKCkuZGlyZWN0aW9uKCk7CiAgICAgaWYgKGlzVmVydGljYWwpIHsKICAgICAgICAgLy8g
RklYTUU6IFdvcmsgYXJvdW5kIHJvdW5kaW5nIGlzc3VlcyBpbiBSVEwgdmVydGljYWwgc2xpZGVy
cy4gV2Ugd2FudCB0aGVtIHRvCiAgICAgICAgIC8vIHJlbmRlciBpZGVudGljYWxseSB0byBMVFIg
dmVydGljYWwgc2xpZGVycy4gV2UgY2FuIHJlbW92ZSB0aGlzIHdvcmsgYXJvdW5kIHdoZW4KICAg
ICAgICAgLy8gc3VicGl4ZWwgcmVuZGVyaW5nIGlzIGVuYWJsZWQgb24gYWxsIHBvcnRzLgotICAg
ICAgICBzdHlsZSgpLnNldERpcmVjdGlvbihMVFIpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5z
ZXREaXJlY3Rpb24oTFRSKTsKICAgICB9CiAKICAgICBSZW5kZXJCb3gqIHRodW1iID0gaW5wdXQu
c2xpZGVyVGh1bWJFbGVtZW50KCkgPyBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVuZGVy
Qm94KCkgOiBudWxscHRyOwpAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyQ29u
dGFpbmVyOjpsYXlvdXQoKQogCiAgICAgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dCgpOwogCi0g
ICAgc3R5bGUoKS5zZXREaXJlY3Rpb24ob2xkVGV4dERpcmVjdGlvbik7CisgICAgbXV0YWJsZVN0
eWxlKCkuc2V0RGlyZWN0aW9uKG9sZFRleHREaXJlY3Rpb24pOwogICAgIC8vIFRoZXNlIHNob3Vs
ZCBhbHdheXMgZXhpc3QsIHVubGVzcyBzb21lb25lIG11dGF0ZXMgdGhlIHNoYWRvdyBET00gKGUu
Zy4sIGluIHRoZSBpbnNwZWN0b3IpLgogICAgIGlmICghdGh1bWIgfHwgIXRyYWNrKQogICAgICAg
ICByZXR1cm47CkBAIC01NzQsNyArNTc0LDcgQEAgSFRNTElucHV0RWxlbWVudCogU2xpZGVyVGh1
bWJFbGVtZW50OjpobwogICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihzaGFk
b3dIb3N0KCkpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFNsaWRlclRodW1iRWxlbWVu
dDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqIGhvc3RTdHls
ZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVyVGh1bWJFbGVtZW50OjpyZXNvbHZlQ3Vz
dG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogaG9zdFN0eWxl
KQogewogICAgIC8vIFRoaXMgZG9lc24ndCBhY3R1YWxseSBjb21wdXRlIHN0eWxlLiBUaGlzIGlz
IGp1c3QgYSBoYWNrIHRvIHBpY2sgc2hhZG93IHBzZXVkbyBpZCB3aGVuIGhvc3Qgc3R5bGUgaXMg
a25vd24uCiAKQEAgLTYyOCw3ICs2MjgsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gU2xp
ZGVyQ29udGFpbmVyCiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNsaWRlckNvbnRh
aW5lcj4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVudFN0eWxl
PiBTbGlkZXJDb250YWluZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUm
LCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlkZXJD
b250YWluZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQogewogICAgIC8vIFRoaXMgZG9lc24ndCBhY3R1
YWxseSBjb21wdXRlIHN0eWxlLiBUaGlzIGlzIGp1c3QgYSBoYWNrIHRvIHBpY2sgc2hhZG93IHBz
ZXVkbyBpZCB3aGVuIGhvc3Qgc3R5bGUgaXMga25vd24uCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgdm9pZCB3
aWxsRGV0YWNoUmVuZGVyZXJzKCkgb3ZlcnJpZGU7CiAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5
bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKikgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOwogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQg
c3RhcnREcmFnZ2luZygpOwpAQCAtMTIwLDcgKzEyMCw3IEBAIGlubGluZSBSZWY8U2xpZGVyVGh1
bWJFbGVtZW50PiBTbGlkZXJUaHUKIGNsYXNzIFJlbmRlclNsaWRlclRodW1iIGZpbmFsIDogcHVi
bGljIFJlbmRlckJsb2NrRmxvdyB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU2xpZGVyVGh1bWIoU2xp
ZGVyVGh1bWJFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7Ci0gICAgdm9pZCB1cGRhdGVBcHBlYXJh
bmNlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVBcHBlYXJhbmNl
KGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBp
c1NsaWRlclRodW1iKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMzUsNyArMTM1LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBTbGlkZXJDb250YWluZXJFbGVtZW50KERvY3VtZW50Jik7CiAgICAg
UmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHls
ZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxF
bGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxl
Kikgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOwogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIEF0b21pY1N0cmluZyBtX3NoYWRvd1BzZXVkb0lkOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIFJlZjxU
ZXh0Q29udHJvbElubmVyRWxlbWVudD4gVGV4dENvbnRyb2wKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBUZXh0Q29udHJvbElubmVyRWxlbWVudChkb2N1bWVudCkpOwogfQogCi1PcHRpb25hbDxF
bGVtZW50U3R5bGU+IFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUo
UmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxl
bWVudFN0eWxlPiBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKIHsK
ICAgICBhdXRvIGlubmVyQ29udGFpbmVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCk7
CiAgICAgaW5uZXJDb250YWluZXJTdHlsZS0+aW5oZXJpdEZyb20oc2hhZG93SG9zdFN0eWxlKTsK
QEAgLTEzNCw3ICsxMzQsNyBAQCBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sqIFRleHRDb250
cm9sCiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jaz4oSFRN
TERpdkVsZW1lbnQ6OnJlbmRlcmVyKCkpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFRl
eHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxl
JiwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQogewogICAgIGF1
dG8gc3R5bGUgPSBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKnNoYWRvd0hv
c3QoKSkuY3JlYXRlSW5uZXJUZXh0U3R5bGUoKnNoYWRvd0hvc3RTdHlsZSk7CiAgICAgcmV0dXJu
IEVsZW1lbnRTdHlsZShzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclN0eWxlPihXVEZNb3ZlKHN0eWxl
KSkpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpU
ZXh0Q29udHIKICAgICBzZXRIYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKTsKIH0KIAot
T3B0aW9uYWw8RWxlbWVudFN0eWxlPiBUZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6cmVz
b2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNo
YWRvd0hvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xQbGFjZWhv
bGRlckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCiB7CiAgICAgYXV0byBz
dHlsZSA9IHJlc29sdmVTdHlsZSgmcGFyZW50U3R5bGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
CiBwcm90ZWN0ZWQ6CiAgICAgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLSAg
ICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoRG9jdW1lbnQmKTsKICAgICBSZW5k
ZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYs
IGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVu
dFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKICAgICBib29s
IGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAg
IGJvb2wgaXNUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiB9OwpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50KERvY3VtZW50Jik7CiAgICAgCi0gICAgT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OwogfTsKIAogY2xhc3MgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1
YmxpYyBIVE1MRGl2RWxlbWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODEsNyArMTM4MSw3IEBAIE9wdGlvbmFsQ3Vyc29y
IEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc28KICAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdl
OwogCiAgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gcmVuZGVyZXIgPyAmcmVuZGVyZXItPnN0eWxlKCkgOiBudWxscHRyOworICAg
IGF1dG8qIHN0eWxlID0gcmVuZGVyZXIgPyAmcmVuZGVyZXItPnN0eWxlKCkgOiBudWxscHRyOwog
ICAgIGJvb2wgaG9yaXpvbnRhbFRleHQgPSAhc3R5bGUgfHwgc3R5bGUtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCk7CiAgICAgY29uc3QgQ3Vyc29yJiBpQmVhbSA9IGhvcml6b250YWxUZXh0ID8g
aUJlYW1DdXJzb3IoKSA6IHZlcnRpY2FsVGV4dEN1cnNvcigpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBzdGF0aWMgaW5saW5lIGRvdWJsZSBz
b2x2ZVN0ZXBzRnVuY3Rpb24oCiAgICAgcmV0dXJuIGZsb29yKG51bVN0ZXBzICogdCkgLyBudW1T
dGVwczsKIH0KIAotQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShBbmltYXRpb24mIGFuaW1h
dGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9z
aXRlQW5pbWF0aW9uKQorQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRp
b24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcG9zaXRlQW5pbWF0aW9uKQogICAgIDogbV9vYmplY3QocmVuZGVyZXIpCiAgICAgLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbihjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBtX2FuaW1hdGlv
bihhbmltYXRpb24pCisgICAgLCBtX2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFu
aW1hdGlvbikpCiB7CiAgICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgZHVyYXRpb24KICAgICBpZiAo
bV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMgUmVmQ291
bnRlZDwKICAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb247CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQW5pbWF0aW9uQmFzZShBbmltYXRpb24m
IHRyYW5zaXRpb24sIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qKTsKKyAgICBB
bmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCos
IENvbXBvc2l0ZUFuaW1hdGlvbiopOwogICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKSB7IH0K
IAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7
IH0KQEAgLTEzOCw3ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHByb2dyZXNzKGRvdWJs
ZSBzY2FsZSA9IDEsIGRvdWJsZSBvZmZzZXQgPSAwLCBjb25zdCBUaW1pbmdGdW5jdGlvbiogPSBu
dWxscHRyKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIHN0
YXRlIGNoYW5nZWQuCi0gICAgdmlydHVhbCBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9u
KiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBS
ZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSovLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRlKENvbXBv
c2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogLypjdXJy
ZW50U3R5bGUqLywgY29uc3QgUmVuZGVyU3R5bGUqIC8qdGFyZ2V0U3R5bGUqLywgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0eWxlKi8pID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFu
aW1hdGVkU3R5bGUqLykgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGNvbXB1dGVFeHRlbnRPZlRy
YW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3QgPSAwOwpAQCAtMTUwLDcgKzE1MCw3
IEBAIHB1YmxpYzoKICAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mKSBj
b25zdDsKIAogICAgIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb247IH0KLSAgICB2b2lkIHNldEFuaW1hdGlvbihBbmltYXRpb24mIGFuaW1hdGlv
bikgeyBtX2FuaW1hdGlvbiA9IGFuaW1hdGlvbjsgfQorICAgIHZvaWQgc2V0QW5pbWF0aW9uKGNv
bnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7IG1fYW5pbWF0aW9uID0gY29uc3RfY2FzdDxBbmlt
YXRpb24mPihhbmltYXRpb24pOyB9CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGFuaW1h
dGlvbiBpcyBvdmVycmlkZGVuLiBUaGlzIHdpbGwgb25seSBiZSB0aGUgY2FzZSBmb3IKICAgICAv
LyBJbXBsaWNpdEFuaW1hdGlvbnMgYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Ig
bm90IHdlIHNob3VsZCBmb3JjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OTMsOSArNTkzLDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVy
OjpjYW5jZWxBbmltYXRpbwogICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5
bnRoZXRpY1N0eWxlQ2hhbmdlKTsKIH0KIAotYm9vbCBBbmltYXRpb25Db250cm9sbGVyOjp1cGRh
dGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSYgbmV3U3R5
bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCitib29sIEFu
aW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSByZW5k
ZXJlci5oYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmcmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7
CisgICAgYXV0byogb2xkU3R5bGUgPSByZW5kZXJlci5oYXNJbml0aWFsaXplZFN0eWxlKCkgPyAm
cmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKCghb2xkU3R5bGUgfHwgKCFvbGRT
dHlsZS0+YW5pbWF0aW9ucygpICYmICFvbGRTdHlsZS0+dHJhbnNpdGlvbnMoKSkpICYmICghbmV3
U3R5bGUuYW5pbWF0aW9ucygpICYmICFuZXdTdHlsZS50cmFuc2l0aW9ucygpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIH5BbmltYXRpb25Db250cm9sbGVyKCk7
CiAKICAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYpOwotICAgIGJvb2wg
dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKKyAgICBib29sIHVw
ZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHls
ZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVu
ZGVyRWxlbWVudCYpOwogCiAgICAgLy8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBl
eHRlbnQgb2YgYW55IHRyYW5zZm9ybSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgIH0KIH0K
IAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKIHsKICAgICAvLyBJZiBjdXJyZW50U3R5bGUg
aXMgbnVsbCBvciB0aGVyZSBhcmUgbm8gb2xkIG9yIG5ldyB0cmFuc2l0aW9ucywganVzdCBza2lw
IGl0CiAgICAgaWYgKCFjdXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMo
KSAmJiBtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkpCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAvLyBDaGVjayB0byBzZWUgaWYg
d2UgbmVlZCB0byB1cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwogICAgIGlmICh0YXJnZXRT
dHlsZS0+dHJhbnNpdGlvbnMoKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRh
cmdldFN0eWxlLT50cmFuc2l0aW9ucygpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQW5p
bWF0aW9uJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9u
KGkpOworICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRp
b25zKCktPmFuaW1hdGlvbihpKTsKICAgICAgICAgICAgIGJvb2wgaXNBY3RpdmVUcmFuc2l0aW9u
ID0gIW1fc3VzcGVuZGVkICYmIChhbmltYXRpb24uZHVyYXRpb24oKSB8fCBhbmltYXRpb24uZGVs
YXkoKSA+IDApOwogCiAgICAgICAgICAgICBBbmltYXRpb246OkFuaW1hdGlvbk1vZGUgbW9kZSA9
IGFuaW1hdGlvbi5hbmltYXRpb25Nb2RlKCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgICAgICAgICAgICAgIC8vIGFuZCB3
ZSBoYXZlIHRvIHVzZSB0aGUgdW5hbmltYXRlZFN0eWxlIGZyb20gdGhlIGFuaW1hdGlvbi4gV2Ug
ZG8gdGhlIHRlc3QKICAgICAgICAgICAgICAgICAvLyBhZ2FpbnN0IHRoZSB1bmFuaW1hdGVkIHN0
eWxlIGhlcmUsIGJ1dCB3ZSAib3ZlcnJpZGUiIHRoZSB0cmFuc2l0aW9uIGxhdGVyLgogICAgICAg
ICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gZ2V0QW5p
bWF0aW9uRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGZy
b21TdHlsZSA9IGtleWZyYW1lQW5pbSA/IGtleWZyYW1lQW5pbS0+dW5hbmltYXRlZFN0eWxlKCkg
OiBjdXJyZW50U3R5bGU7CisgICAgICAgICAgICAgICAgYXV0byogZnJvbVN0eWxlID0ga2V5ZnJh
bWVBbmltID8ga2V5ZnJhbWVBbmltLT51bmFuaW1hdGVkU3R5bGUoKSA6IGN1cnJlbnRTdHlsZTsK
IAogICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgdHJhbnNpdGlv
biBmb3IgdGhpcyBwcm9wCiAgICAgICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxB
bmltID0gbV90cmFuc2l0aW9ucy5nZXQocHJvcCk7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgICAgICBtX3RyYW5zaXRpb25z
LnJlbW92ZShwcm9wZXJ0eVRvUmVtb3ZlKTsKIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246
OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQordm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRhcmdldFN0eWxlKQogewogICAgIC8vIE5vdGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2
ZSBhbnkgYW5pbWF0aW9ucywgYW5kIGRpZG4ndCBoYXZlIGFueSBiZWZvcmUKICAgICBpZiAobV9r
ZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpICYmICF0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9u
cygpKQpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVL
ZXlmcmFtZUEKICAgICBpZiAodGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSkgewogICAgICAgICBp
bnQgbnVtQW5pbXMgPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5zaXplKCk7CiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkgewotICAgICAgICAgICAgQW5pbWF0
aW9uJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7
CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygp
LT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgYW5pbWF0aW9uTmFtZShh
bmltYXRpb24ubmFtZSgpKTsKIAogICAgICAgICAgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFu
aW1hdGlvbigpKQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1
cGRhdGVLZXlmcmFtZUEKICAgICBzdGQ6OnN3YXAobmV3QW5pbWF0aW9ucywgbV9rZXlmcmFtZUFu
aW1hdGlvbnMpOwogfQogCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUm
IHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUp
Citib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRh
cmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpCiB7
CiAgICAgLy8gV2UgZG9uJ3QgZG8gYW55IHRyYW5zaXRpb25zIGlmIHdlIGRvbid0IGhhdmUgYSBj
dXJyZW50U3R5bGUgKG9uIHN0YXJ0dXApLgogICAgIHVwZGF0ZVRyYW5zaXRpb25zKCZyZW5kZXJl
ciwgY3VycmVudFN0eWxlLCAmdGFyZ2V0U3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lk
IGNsZWFyUmVuZGVyZXIoKTsKIAotICAgIGJvb2wgYW5pbWF0ZShSZW5kZXJFbGVtZW50JiwgUmVu
ZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpOworICAgIGJvb2wgYW5pbWF0ZShS
ZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVu
ZGVkU3R5bGUpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRT
dHlsZSgpIGNvbnN0OwogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9u
KExheW91dFJlY3QmKSBjb25zdDsKIApAQCAtODgsOCArODgsOCBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIENvbXBvc2l0ZUFuaW1hdGlvbihBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYpOwog
Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiwgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0
ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRp
b25zKFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmlt
YXRpb25zKFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwogICAgIAogICAgIHR5cGVkZWYgSGFzaE1h
cDxpbnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4+IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8S2V5ZnJh
bWVBbmltYXRpb24+PiBBbmltYXRpb25OYW1lTWFwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9uKEFuaW1hdGlvbiYgdHJh
bnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCog
cmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIFJlbmRlclN0eWxlKiBmcm9t
U3R5bGUpCitJbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0
aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJF
bGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGZyb21TdHlsZSkKICAgICA6IEFuaW1hdGlvbkJhc2UodHJhbnNpdGlvbiwgcmVu
ZGVyZXIsIGNvbXBBbmltKQogICAgICwgbV9mcm9tU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCpmcm9tU3R5bGUpKQogICAgICwgbV90cmFuc2l0aW9uUHJvcGVydHkodHJhbnNpdGlvbi5wcm9w
ZXJ0eSgpKQpAQCAtNjAsNyArNjAsNyBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzaG91bGRT
ZW5kRXZlbnRGCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlw
ZShpbkxpc3RlbmVyVHlwZSk7CiB9CiAKLWJvb2wgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUo
Q29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwg
UmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBh
bmltYXRlZFN0eWxlKQorYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVB
bmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5k
ZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpCiB7CiAgICAgLy8gSWYgd2UgZ2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9u
IGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBjbGVhbmluZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5p
bWF0aW9uLgogICAgIC8vIFNvIGp1c3QgcmV0dXJuLiBFdmVyeXRoaW5nIGlzIGFscmVhZHkgYWxs
IGNsZWFuZWQgdXAuCkBAIC0yMDUsNyArMjA1LDcgQEAgYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6
c2VuZFRyYW5zaXRpb25FdgogICAgIHJldHVybiBmYWxzZTsgLy8gRGlkbid0IGRpc3BhdGNoIGFu
IGV2ZW50CiB9CiAKLXZvaWQgSW1wbGljaXRBbmltYXRpb246OnJlc2V0KFJlbmRlclN0eWxlKiB0
bykKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlKiB0bykK
IHsKICAgICBBU1NFUlQodG8pOwogICAgIEFTU0VSVChtX2Zyb21TdHlsZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0
QW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgUmVuZGVy
RWxlbWVudDsKIC8vIGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgogY2xhc3MgSW1wbGljaXRB
bmltYXRpb24gOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBDU1NQcm9w
ZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9z
aXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUp
CisgICAgc3RhdGljIFJlZjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlv
biYgYW5pbWF0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBJbXBsaWNpdEFuaW1hdGlvbihhbmltYXRpb24sIGFuaW1hdGluZ1Byb3BlcnR5LCBy
ZW5kZXJlciwgY29tcG9zaXRlQW5pbWF0aW9uLCBmcm9tU3R5bGUpKTsKICAgICB9OwpAQCAtNTQs
OSArNTQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgdGltZU9m
ZnNldCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRBbmltYXRpb24oKSBvdmVycmlkZTsKIAotICAg
IGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKKyAgICBi
b29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFu
aW1hdGVkU3R5bGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXNldChSZW5kZXJTdHls
ZSogdG8pOworICAgIHZvaWQgcmVzZXQoY29uc3QgUmVuZGVyU3R5bGUqIHRvKTsKIAogICAgIGJv
b2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCBv
dmVycmlkZTsKIApAQCAtODcsNyArODcsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0
ZToKLSAgICBJbXBsaWNpdEFuaW1hdGlvbihBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBSZW5k
ZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyU3R5bGUqKTsKKyAgICBJbXBs
aWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBSZW5kZXJFbGVt
ZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0
dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpOwogCiAgICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3
ZSBhcmUgYmxlbmRpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LZXlmcmFtZUFu
aW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRpb24oQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwg
UmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKK0tleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFt
ZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVu
ZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZShhbmltYXRpb24s
IHJlbmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgLCBtX2tleWZyYW1lcyhhbmltYXRp
b24ubmFtZSgpKQogICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCp1bmFuaW1hdGVkU3R5bGUpKQpAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OmZldGNoSW50ZXJ2YWxFbmQKICAgICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNl
dCwgcHJldktleWZyYW1lLnRpbWluZ0Z1bmN0aW9uKG5hbWUoKSkpOwogfQogCi1ib29sIEtleWZy
YW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0
aW9uLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCiti
b29sIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9z
aXRlQW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBS
ZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFu
aW1hdGVkU3R5bGUpCiB7CiAgICAgLy8gRmlyZSB0aGUgc3RhcnQgdGltZW91dCBpZiBuZWVkZWQK
ICAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQwLDEyIEBAIGNsYXNzIFJlbmRlclN0eWxlOwog
Ly8gQSBLZXlmcmFtZUFuaW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGFuIGV4cGxpY2l0IGFu
aW1hdGlvbiBmb3IgYSBzaW5nbGUgUmVuZGVyRWxlbWVudC4KIGNsYXNzIEtleWZyYW1lQW5pbWF0
aW9uIGZpbmFsIDogcHVibGljIEFuaW1hdGlvbkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8S2V5ZnJhbWVBbmltYXRpb24+IGNyZWF0ZShBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9u
LCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorICAgIHN0YXRpYyBSZWY8S2V5ZnJhbWVB
bmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCByZW5kZXJlciwgY29tcG9z
aXRlQW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKICAgICB9CiAKLSAgICBib29sIGFuaW1h
dGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxl
KiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBhbmltYXRl
KENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSog
Y3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZ2V0
QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+Jikgb3ZlcnJpZGU7CiAK
ICAgICBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC04OCw3ICs4OCw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBw
cml2YXRlOgotICAgIEtleWZyYW1lQW5pbWF0aW9uKEFuaW1hdGlvbiYsIFJlbmRlckVsZW1lbnQq
LCBDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKTsKKyAg
ICBLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgQ29t
cG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSk7CiAg
ICAgdmlydHVhbCB+S2V5ZnJhbWVBbmltYXRpb24oKTsKICAgICAKICAgICAvLyBHZXQgdGhlIHN0
eWxlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IHN1cnJvdW5kaW5nIHRoZSBjdXJyZW50IGFuaW1h
dGlvbiB0aW1lIGFuZCB0aGUgcHJvZ3Jlc3MgYmV0d2VlbiB0aGVtLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0JKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsNyArMjg3LDcgQEAg
c3RhdGljIE5vZGUqIGFuY2VzdG9yUmVzcG9uZGluZ1RvU2Nyb2xsVwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJl
ci0+c3R5bGUoKTsKKyAgICAgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKIAog
ICAgICAgICBpZiAocmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpICYmCiAgICAgICAgICAgICAo
c3R5bGUub3ZlcmZsb3dZKCkgPT0gT0FVVE8gfHwgc3R5bGUub3ZlcmZsb3dZKCkgPT0gT1NDUk9M
TCB8fCBzdHlsZS5vdmVyZmxvd1koKSA9PSBPT1ZFUkxBWSB8fApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIFJlbmRlck5hbWVkRmxvd1RocmVh
ZCYgRmxvd1RocmVhZENvbnRyb2wKIAogdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6c3R5bGVE
aWRDaGFuZ2UoKQogewotICAgIFJlbmRlclN0eWxlJiB2aWV3U3R5bGUgPSBtX3ZpZXctPnN0eWxl
KCk7CisgICAgYXV0byYgdmlld1N0eWxlID0gbV92aWV3LT5zdHlsZSgpOwogICAgIGZvciAoYXV0
byYgZmxvd1JlbmRlcmVyIDogKm1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCkKICAgICAgICAg
Zmxvd1JlbmRlcmVyLT5zZXRTdHlsZShSZW5kZXJGbG93VGhyZWFkOjpjcmVhdGVGbG93VGhyZWFk
U3R5bGUoJnZpZXdTdHlsZSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI4LDcgKzEzMjgs
NyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmNvbnN0cmFpblRvTGluZVRvcEFuCiBzdGF0aWMgTGF5
b3V0UmVjdCBjbGlwUmVjdEZvck5pbmVQaWVjZUltYWdlU3RyaXAoSW5saW5lRmxvd0JveCogYm94
LCBjb25zdCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UsIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVj
dCkKIHsKICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0KHBhaW50UmVjdCk7Ci0gICAgUmVuZGVyU3R5
bGUmIHN0eWxlID0gYm94LT5yZW5kZXJlcigpLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBi
b3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKICAgICBMYXlvdXRCb3hFeHRlbnQgb3V0c2V0cyA9IHN0
eWxlLmltYWdlT3V0c2V0cyhpbWFnZSk7CiAgICAgaWYgKGJveC0+aXNIb3Jpem9udGFsKCkpIHsK
ICAgICAgICAgY2xpcFJlY3Quc2V0WShwYWludFJlY3QueSgpIC0gb3V0c2V0cy50b3AoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4Nyw3ICsyODcsNyBAQCBzdGF0aWMgYm9vbCBib3JkZXJPclBhZGRpbmdM
b2dpY2FsV2lkdGhDCiAKIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7Ci0gICAgUmVuZGVy
U3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBuZXdTdHlsZSA9IHN0eWxlKCk7
CiAKICAgICBib29sIGhhZFRyYW5zZm9ybSA9IGhhc1RyYW5zZm9ybSgpOwogICAgIGJvb2wgZmxv
d1RocmVhZENvbnRhaW5pbmdCbG9ja0ludmFsaWRhdGVkID0gZmFsc2U7CkBAIC0yODM3LDcgKzI4
MzcsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KGJvb2wgCiAgICAgICAg
IHJldHVybiBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQ
b3NpdGlvbk1vZGUpOwogCiAgICAgaWYgKGZpcnN0TGluZSAmJiB2aWV3KCkudXNlc0ZpcnN0TGlu
ZVJ1bGVzKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUmIHMgPSBmaXJzdExpbmUgPyBmaXJzdExp
bmVTdHlsZSgpIDogc3R5bGUoKTsKKyAgICAgICAgYXV0byYgcyA9IGZpcnN0TGluZSA/IGZpcnN0
TGluZVN0eWxlKCkgOiBzdHlsZSgpOwogICAgICAgICBpZiAoJnMgIT0gJnN0eWxlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gcy5jb21wdXRlZExpbmVIZWlnaHQoKTsKICAgICB9CkBAIC0yOTc2LDkg
KzI5NzYsOSBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJsb2NrCiAgICAg
cmV0dXJuIGZpcnN0TGluZUJsb2NrOwogfQogCi1zdGF0aWMgUmVuZGVyU3R5bGUmIHN0eWxlRm9y
Rmlyc3RMZXR0ZXIoUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0
KiBmaXJzdExldHRlckNvbnRhaW5lcikKK3N0YXRpYyBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGVG
b3JGaXJzdExldHRlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJPYmpl
Y3QqIGZpcnN0TGV0dGVyQ29udGFpbmVyKQogewotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHls
ZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUiwg
JmZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgpKTsKKyAgICBhdXRvKiBwc2V1
ZG9TdHlsZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldE11dGFibGVDYWNoZWRQc2V1ZG9TdHlsZShG
SVJTVF9MRVRURVIsICZmaXJzdExldHRlckNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSk7CiAg
ICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpbml0aWFsIGxldHRlciBkcm9wIHRoYXQgaXMgPj0g
MSwgdGhlbiB3ZSBuZWVkIHRvIGZvcmNlIGZsb2F0aW5nIHRvIGJlIG9uLgogICAgIGlmIChwc2V1
ZG9TdHlsZS0+aW5pdGlhbExldHRlckRyb3AoKSA+PSAxICYmICFwc2V1ZG9TdHlsZS0+aXNGbG9h
dGluZygpKQpAQCAtMzA2MSw3ICszMDYxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRmly
c3RMZXR0ZXJTdHlsZQogewogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyID0gY3VycmVu
dENoaWxkLT5wYXJlbnQoKTsKICAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckNvbnRhaW5l
ciA9IGZpcnN0TGV0dGVyLT5wYXJlbnQoKTsKLSAgICBSZW5kZXJTdHlsZSYgcHNldWRvU3R5bGUg
PSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVyQ29udGFp
bmVyKTsKKyAgICBhdXRvJiBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RM
ZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwogICAgIEFTU0VSVChmaXJzdExldHRl
ci0+aXNGbG9hdGluZygpIHx8IGZpcnN0TGV0dGVyLT5pc0lubGluZSgpKTsKIAogICAgIGlmIChT
dHlsZTo6ZGV0ZXJtaW5lQ2hhbmdlKGZpcnN0TGV0dGVyLT5zdHlsZSgpLCBwc2V1ZG9TdHlsZSkg
PT0gU3R5bGU6OkRldGFjaCkgewpAQCAtMzEwMiw3ICszMTAyLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6dXBkYXRlRmlyc3RMZXR0ZXJTdHlsZQogdm9pZCBSZW5kZXJCbG9jazo6Y3JlYXRlRmlyc3RM
ZXR0ZXJSZW5kZXJlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJUZXh0
KiBjdXJyZW50VGV4dENoaWxkKQogewogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29u
dGFpbmVyID0gY3VycmVudFRleHRDaGlsZC0+cGFyZW50KCk7Ci0gICAgUmVuZGVyU3R5bGUmIHBz
ZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJzdExldHRlckJsb2NrLCBmaXJzdExl
dHRlckNvbnRhaW5lcik7CisgICAgYXV0byYgcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0
dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKICAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogZmlyc3RMZXR0ZXIgPSBudWxscHRyOwogICAgIGlmIChwc2V1ZG9TdHls
ZS5kaXNwbGF5KCkgPT0gSU5MSU5FKQogICAgICAgICBmaXJzdExldHRlciA9IG5ldyBSZW5kZXJJ
bmxpbmUoZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNsb25lKHBzZXVkb1N0eWxlKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2aXNp
b24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MTUsNyArMTYxNSw3IEBAIExheW91dFVuaXQgUmVuZGVy
QmxvY2tGbG93OjphZGp1c3RCbG9ja0MKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
aW5saW5lIExheW91dFVuaXQgY2FsY3VsYXRlTWluaW11bVBhZ2VIZWlnaHQoUmVuZGVyU3R5bGUm
IHJlbmRlclN0eWxlLCBSb290SW5saW5lQm94JiBsYXN0TGluZSwgTGF5b3V0VW5pdCBsaW5lVG9w
LCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgY2FsY3Vs
YXRlTWluaW11bVBhZ2VIZWlnaHQoY29uc3QgUmVuZGVyU3R5bGUmIHJlbmRlclN0eWxlLCBSb290
SW5saW5lQm94JiBsYXN0TGluZSwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVC
b3R0b20pCiB7CiAgICAgLy8gV2UgbWF5IHJlcXVpcmUgYSBjZXJ0YWluIG1pbmltdW0gbnVtYmVy
IG9mIGxpbmVzIHBlciBwYWdlIGluIG9yZGVyIHRvIHNhdGlzZnkKICAgICAvLyBvcnBoYW5zIGFu
ZCB3aWRvd3MsIGFuZCB0aGF0IG1heSBhZmZlY3QgdGhlIG1pbmltdW0gcGFnZSBoZWlnaHQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmCiAgICAgaWYgKGlzRG9jRWxlbWVudFJlbmRlcmVyIHx8IGlzQm9keVJlbmRlcmVyKSB7
CiAgICAgICAgIC8vIFByb3BhZ2F0ZSB0aGUgbmV3IHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0aW9u
IHVwIHRvIHRoZSBSZW5kZXJWaWV3LgogICAgICAgICBhdXRvKiBkb2N1bWVudEVsZW1lbnRSZW5k
ZXJlciA9IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCk7Ci0gICAgICAg
IFJlbmRlclN0eWxlJiB2aWV3U3R5bGUgPSB2aWV3KCkuc3R5bGUoKTsKKyAgICAgICAgYXV0byYg
dmlld1N0eWxlID0gdmlldygpLm11dGFibGVTdHlsZSgpOwogICAgICAgICBib29sIHZpZXdDaGFu
Z2VkV3JpdGluZ01vZGUgPSBmYWxzZTsKICAgICAgICAgYm9vbCByb290U3R5bGVDaGFuZ2VkID0g
ZmFsc2U7CiAgICAgICAgIGJvb2wgdmlld1N0eWxlQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMzkzLDcg
KzM5Myw3IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYKICAgICAg
ICAgICAgIHZpZXdTdHlsZS5zZXREaXJlY3Rpb24obmV3U3R5bGUuZGlyZWN0aW9uKCkpOwogICAg
ICAgICAgICAgdmlld1N0eWxlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBpZiAoaXNCb2R5
UmVuZGVyZXIpIHsKLSAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPnN0eWxlKCkuc2V0RGly
ZWN0aW9uKG5ld1N0eWxlLmRpcmVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICByb290UmVuZGVy
ZXItPm11dGFibGVTdHlsZSgpLnNldERpcmVjdGlvbihuZXdTdHlsZS5kaXJlY3Rpb24oKSk7CiAg
ICAgICAgICAgICAgICAgcm9vdFN0eWxlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKQEAgLTQwNyw3
ICs0MDcsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmCiAgICAg
ICAgICAgICB2aWV3KCkubWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwog
ICAgICAgICAgICAgaWYgKGlzQm9keVJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgcm9vdFN0
eWxlQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5zdHlsZSgp
LnNldFdyaXRpbmdNb2RlKG5ld1N0eWxlLndyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgICAg
IHJvb3RSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0V3JpdGluZ01vZGUobmV3U3R5bGUud3Jp
dGluZ01vZGUoKSk7CiAgICAgICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5zZXRIb3Jpem9udGFs
V3JpdGluZ01vZGUobmV3U3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
QEAgLTQzMiw4ICs0MzIsOCBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmCiAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgdGhlIGJvZHkgZm9udCBiYWNrIHVwIHRvIHRo
ZSBSZW5kZXJWaWV3IGFuZCB1c2UgaXQgYXMKICAgICAgICAgICAgIC8vIHRoZSBiYXNpcyBvZiB0
aGUgZ3JpZC4KICAgICAgICAgICAgIGlmIChuZXdTdHlsZS5mb250RGVzY3JpcHRpb24oKSAhPSB2
aWV3KCkuc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKSkgewotICAgICAgICAgICAgICAgIHZpZXco
KS5zdHlsZSgpLnNldEZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5mb250RGVzY3JpcHRpb24oKSk7
Ci0gICAgICAgICAgICAgICAgdmlldygpLnN0eWxlKCkuZm9udENhc2NhZGUoKS51cGRhdGUoJmRv
Y3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgICAgIHZpZXcoKS5tdXRhYmxl
U3R5bGUoKS5zZXRGb250RGVzY3JpcHRpb24obmV3U3R5bGUuZm9udERlc2NyaXB0aW9uKCkpOwor
ICAgICAgICAgICAgICAgIHZpZXcoKS5tdXRhYmxlU3R5bGUoKS5mb250Q2FzY2FkZSgpLnVwZGF0
ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IApAQCAtNjgwLDcgKzY4MCw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb25zdHJhaW5Db250
ZW50Qm8KIAogUm91bmRlZFJlY3Q6OlJhZGlpIFJlbmRlckJveDo6Ym9yZGVyUmFkaWkoKSBjb25z
dAogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CisgICAgYXV0byYg
c3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogICAgIExheW91dFJlY3QgYm91bmRzID0gZnJhbWVSZWN0
KCk7CiAKICAgICB1bnNpZ25lZCBib3JkZXJMZWZ0ID0gc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCk7
CkBAIC00ODE0LDcgKzQ4MTQsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyQm94OjplbmNsb3NpbmdG
bG9hdFBhCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQm94Ojps
b2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxWaXN1YWxPdmVyZmxv
d1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0
CiB7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRp
b24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCkBAIC00ODIyLDcgKzQ4MjIsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9n
aWNhbFZpc3VhbE92ZXJmCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVy
Qm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9y
UHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAg
IC8vIElmIHRoZSB3cml0aW5nIG1vZGVzIG9mIHRoZSBjaGlsZCBhbmQgcGFyZW50IG1hdGNoLCB0
aGVuIHdlIGRvbid0IGhhdmUgdG8gCiAgICAgLy8gZG8gYW55dGhpbmcgZmFuY3kuIEp1c3QgcmV0
dXJuIHRoZSByZXN1bHQuCkBAIC00ODQwLDcgKzQ4NDAsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJv
eDo6dmlzdWFsT3ZlcmZsb3dSZWN0CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91dFJlY3Qg
UmVuZGVyQm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxM
YXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpIGNvbnN0CiB7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gbGF5b3V0T3ZlcmZsb3dSZWN0
Rm9yUHJvcGFnYXRpb24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC00ODQ4LDcgKzQ4NDgsNyBAQCBMYXlvdXRSZWN0IFJl
bmRlckJveDo6bG9naWNhbExheW91dE92ZXJmCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91
dFJlY3QgUmVuZGVyQm94OjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6bGF5b3V0T3Zl
cmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBj
b25zdAogewogICAgIC8vIE9ubHkgcHJvcGFnYXRlIGludGVyaW9yIGxheW91dCBvdmVyZmxvdyBp
ZiB3ZSBkb24ndCBjbGlwIGl0LgogICAgIExheW91dFJlY3QgcmVjdCA9IGJvcmRlckJveFJlY3Qo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5
KQpAQCAtNTYzLDEwICs1NjMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgYXBwbHlUb3BMZWZ0
TG9jYXRpb25PZmZzZXRXaXRoRmxpcHBpbmcocG9pbnQpOwogICAgIH0KIAotICAgIExheW91dFJl
Y3QgbG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikg
Y29uc3Q7Ci0gICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihS
ZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIExheW91dFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93
UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTGF5b3V0UmVjdCBs
YXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OworICAg
IExheW91dFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0
IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RG
b3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJlY3Qg
bG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxl
KikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlv
bihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgYm9vbCBoYXNSZW5kZXJPdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3c7IH0gICAgCiAgICAgYm9vbCBoYXNWaXN1YWxP
dmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgJiYgIWJvcmRlckJveFJlY3QoKS5j
b250YWlucyhtX292ZXJmbG93LT52aXN1YWxPdmVyZmxvd1JlY3QoKSk7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgxLDcgKzU4MSw3IEBAIFJvdW5kZWRSZWN0
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpiYWNrZ3IKICAgICByZXR1cm4gZ2V0QmFja2dyb3VuZFJv
dW5kZWRSZWN0KGJvcmRlclJlY3QsIGJveCwgYm94U2l6ZS53aWR0aCgpLCBib3hTaXplLmhlaWdo
dCgpLCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7CiB9
CiAKLXN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyB2b2lkIGFwcGx5Qm94U2hh
ZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkKIHsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBib3hTaGFkb3cgPSBzdHlsZS0+
Ym94U2hhZG93KCk7CiAgICAgd2hpbGUgKGJveFNoYWRvdy0+c3R5bGUoKSAhPSBOb3JtYWwpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBSZW5kZXJCdXR0b246OmFkZENoaWxk
KFJlbmRlck9iamVjdAogICAgICAgICAvLyBDcmVhdGUgYW4gYW5vbnltb3VzIGJsb2NrLgogICAg
ICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7CiAgICAgICAgIG1faW5uZXIgPSBjcmVhdGVBbm9u
eW1vdXNCbG9jayhzdHlsZSgpLmRpc3BsYXkoKSk7Ci0gICAgICAgIHNldHVwSW5uZXJTdHlsZSgm
bV9pbm5lci0+c3R5bGUoKSk7CisgICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5lci0+bXV0
YWJsZVN0eWxlKCkpOwogICAgICAgICBSZW5kZXJGbGV4aWJsZUJveDo6YWRkQ2hpbGQobV9pbm5l
cik7CiAgICAgfQogICAgIApAQCAtOTcsOSArOTcsOSBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6c3R5
bGVXaWxsQ2hhbmdlKFN0eWxlCiAgICAgICAgIC8vIGl0IHJpZ2h0IGJlbG93LiBIZXJlIHdlIGNo
YW5nZSBpdCBiYWNrIHRvIDAgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBoaW50
CiAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVuY2UuIFNhbWUgZ29lcyBmb3IgdGhl
IG90aGVyIHByb3BlcnRpZXMuCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgaGFjayB1bm5l
Y2Vzc2FyeS4KLSAgICAgICAgbV9pbm5lci0+c3R5bGUoKS5zZXRGbGV4R3JvdyhuZXdTdHlsZS5p
bml0aWFsRmxleEdyb3coKSk7Ci0gICAgICAgIG1faW5uZXItPnN0eWxlKCkuc2V0TWFyZ2luVG9w
KG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7Ci0gICAgICAgIG1faW5uZXItPnN0eWxlKCkuc2V0
TWFyZ2luQm90dG9tKG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7CisgICAgICAgIG1faW5uZXIt
Pm11dGFibGVTdHlsZSgpLnNldEZsZXhHcm93KG5ld1N0eWxlLmluaXRpYWxGbGV4R3JvdygpKTsK
KyAgICAgICAgbV9pbm5lci0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9wKG5ld1N0eWxlLmlu
aXRpYWxNYXJnaW4oKSk7CisgICAgICAgIG1faW5uZXItPm11dGFibGVTdHlsZSgpLnNldE1hcmdp
bkJvdHRvbShuZXdTdHlsZS5pbml0aWFsTWFyZ2luKCkpOwogICAgIH0KICAgICBSZW5kZXJCbG9j
azo6c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5ld1N0eWxlKTsKIH0KQEAgLTEwOSw3ICsxMDksNyBA
QCB2b2lkIFJlbmRlckJ1dHRvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiAgICAgUmVuZGVyQmxv
Y2s6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKIAogICAgIGlmIChtX2lubmVyKSAv
LyBSZW5kZXJCbG9jayBoYW5kbGVkIHVwZGF0aW5nIHRoZSBhbm9ueW1vdXMgYmxvY2sncyBzdHls
ZS4KLSAgICAgICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5zdHlsZSgpKTsKKyAgICAgICAg
c2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5tdXRhYmxlU3R5bGUoKSk7CiB9CiAKIHZvaWQgUmVu
ZGVyQnV0dG9uOjpzZXR1cElubmVyU3R5bGUoUmVuZGVyU3R5bGUqIGlubmVyU3R5bGUpIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0
ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjUsNyArMTY1LDcgQEAgc3RhdGljIExheW91dFVuaXQgY29udGVudEhlaWdodEZvckNoaWxk
KAogCiB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6c3R5bGVXaWxsQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCiB7Ci0gICAg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkg
OiBudWxscHRyOworICAgIGF1dG8qIG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8g
JnN0eWxlKCkgOiBudWxscHRyOwogICAgIGlmIChvbGRTdHlsZSAmJiAhb2xkU3R5bGUtPmxpbmVD
bGFtcCgpLmlzTm9uZSgpICYmIG5ld1N0eWxlLmxpbmVDbGFtcCgpLmlzTm9uZSgpKQogICAgICAg
ICBjbGVhckxpbmVDbGFtcCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxMSArMjA1LDYg
QEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFJlbmRlckVsZW1lbnQ6OgogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1lbnVtIFN0eWxlQ2FjaGVTdGF0ZSB7Ci0gICAgQ2FjaGVkLAotICAgIFVu
Y2FjaGVkCi19OwotCiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVsZW1lbnQ6
OnVuY2FjaGVkRmlyc3RMaW5lU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAg
IGlmICghdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKQpAQCAtMjIxLDE0ICsyMTYsMTQgQEAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZQogICAgICAgICBpZiAoUmVu
ZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5maXJz
dExpbmVCbG9jaygpKQogICAgICAgICAgICAgcmV0dXJuIGZpcnN0TGluZUJsb2NrLT5nZXRVbmNh
Y2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChGSVJTVF9MSU5FKSwgc3R5bGUsIGZp
cnN0TGluZUJsb2NrID09IHRoaXMgPyBzdHlsZSA6IG51bGxwdHIpOwogICAgIH0gZWxzZSBpZiAo
IXJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuaXNBbm9ueW1vdXMoKSAmJiByZW5kZXJlckZvckZp
cnN0TGluZVN0eWxlLmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUmIHBh
cmVudFN0eWxlID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+Zmlyc3RMaW5l
U3R5bGUoKTsKKyAgICAgICAgYXV0byYgcGFyZW50U3R5bGUgPSByZW5kZXJlckZvckZpcnN0TGlu
ZVN0eWxlLnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBpZiAoJnBhcmVudFN0
eWxlICE9ICZyZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5zdHlsZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuZ2V0VW5jYWNoZWRQc2V1
ZG9TdHlsZShQc2V1ZG9TdHlsZVJlcXVlc3QoRklSU1RfTElORV9JTkhFUklURUQpLCAmcGFyZW50
U3R5bGUsIHN0eWxlKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJlbmRlclN0
eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIGNvbnN0Citjb25zdCBS
ZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6Y2FjaGVkRmlyc3RMaW5lU3R5bGUoKSBjb25zdAog
ewogICAgIEFTU0VSVCh2aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpOwogCkBAIC0yMzgsMTAg
KzIzMywxMCBAQCBSZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6Y2FjaGVkRmlyc3RMCiAgICAg
ICAgIGlmIChSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2sgPSByZW5kZXJlckZvckZpcnN0TGlu
ZVN0eWxlLmZpcnN0TGluZUJsb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMaW5lQmxv
Y2stPmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xJTkUsICZzdHlsZSgpKTsKICAgICB9IGVs
c2UgaWYgKCFyZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmlzQW5vbnltb3VzKCkgJiYgcmVuZGVy
ZXJGb3JGaXJzdExpbmVTdHlsZS5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgIFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSA9IHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCktPmZp
cnN0TGluZVN0eWxlKCk7CisgICAgICAgIGF1dG8mIHBhcmVudFN0eWxlID0gcmVuZGVyZXJGb3JG
aXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKICAgICAgICAgaWYgKCZw
YXJlbnRTdHlsZSAhPSAmcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+c3R5bGUo
KSkgewogICAgICAgICAgICAgLy8gQSBmaXJzdC1saW5lIHN0eWxlIGlzIGluIGVmZmVjdC4gQ2Fj
aGUgYSBmaXJzdC1saW5lIHN0eWxlIGZvciBvdXJzZWx2ZXMuCi0gICAgICAgICAgICByZW5kZXJl
ckZvckZpcnN0TGluZVN0eWxlLnN0eWxlKCkuc2V0SGFzUHNldWRvU3R5bGUoRklSU1RfTElORV9J
TkhFUklURUQpOworICAgICAgICAgICAgcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5tX3N0eWxl
LnNldEhhc1BzZXVkb1N0eWxlKEZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKICAgICAgICAgICAgIHJl
dHVybiByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNU
X0xJTkVfSU5IRVJJVEVELCAmcGFyZW50U3R5bGUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjQ5
LDcgKzI0NCw3IEBAIFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdEwKICAg
ICByZXR1cm4gJnN0eWxlKCk7CiB9CiAKLVJlbmRlclN0eWxlJiBSZW5kZXJFbGVtZW50OjpmaXJz
dExpbmVTdHlsZSgpIGNvbnN0Citjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyRWxlbWVudDo6Zmly
c3RMaW5lU3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiB2aWV3KCkudXNlc0ZpcnN0TGluZVJ1
bGVzKCkgPyAqY2FjaGVkRmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7CiB9CkBAIC04MDYsNyAr
ODAxLDcgQEAgc3RhdGljIGlubGluZSBib29sIHJlbmRlcmVySGFzQmFja2dyb3VuZAogCiB2b2lk
IFJlbmRlckVsZW1lbnQ6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9
IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZzdHlsZSgpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBv
bGRTdHlsZSA9IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZzdHlsZSgpIDogbnVsbHB0cjsKICAg
ICBpZiAob2xkU3R5bGUpIHsKICAgICAgICAgLy8gSWYgb3VyIHotaW5kZXggY2hhbmdlcyB2YWx1
ZSBvciBvdXIgdmlzaWJpbGl0eSBjaGFuZ2VzLAogICAgICAgICAvLyB3ZSBuZWVkIHRvIGRpcnR5
IG91ciBzdGFja2luZyBjb250ZXh0J3Mgei1vcmRlciBsaXN0LgpAQCAtMTUzNSw3ICsxNTMwLDIy
IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6YWRkQ29udHJvbFN0YXRlc0ZvclIKICAgICBjb250cm9s
U3RhdGVzUmVuZGVyZXJNYXAoKS5hZGQobywgc3RhdGVzKTsKIH0KIAotUmVuZGVyU3R5bGUqIFJl
bmRlckVsZW1lbnQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIFJlbmRlckVsZW1l
bnQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywgY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKSBjb25zdAoreworICAgIGlmIChwc2V1ZG8gPCBGSVJTVF9JTlRFUk5B
TF9QU0VVRE9JRCAmJiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG8pKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIFJlbmRlclN0eWxlKiBjYWNoZWRTdHlsZSA9IHN0eWxlKCku
Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvKTsKKyAgICBpZiAoY2FjaGVkU3R5bGUpCisgICAg
ICAgIHJldHVybiBjYWNoZWRTdHlsZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gcmVzdWx0ID0gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9TdHlsZVJlcXVlc3QocHNl
dWRvKSwgcGFyZW50U3R5bGUpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBjb25z
dF9jYXN0PFJlbmRlclN0eWxlJj4obV9zdHlsZSkuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RGTW92
ZShyZXN1bHQpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUmVuZGVyU3R5bGUqIFJlbmRl
ckVsZW1lbnQ6OmdldE11dGFibGVDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8sIGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAocHNldWRvIDwgRklSU1Rf
SU5URVJOQUxfUFNFVURPSUQgJiYgIXN0eWxlKCkuaGFzUHNldWRvU3R5bGUocHNldWRvKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNTQ2LDExICsxNTU2LDExIEBAIFJlbmRlclN0eWxl
KiBSZW5kZXJFbGVtZW50OjpnZXRDYWNoZWRQc2UKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTdHlsZT4gcmVzdWx0ID0gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9TdHlsZVJlcXVl
c3QocHNldWRvKSwgcGFyZW50U3R5bGUpOwogICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHJldHVy
biBzdHlsZSgpLmFkZENhY2hlZFBzZXVkb1N0eWxlKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAg
IHJldHVybiBtX3N0eWxlLmFkZENhY2hlZFBzZXVkb1N0eWxlKFdURk1vdmUocmVzdWx0KSk7CiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVu
ZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlcXVl
c3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSZW5kZXJT
dHlsZSogb3duU3R5bGUpIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRl
ckVsZW1lbnQ6OmdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0
JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG93blN0eWxlKSBjb25zdAogewogICAgIGlmIChwc2V1ZG9TdHlsZVJl
cXVlc3QucHNldWRvSWQgPCBGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCAmJiAhb3duU3R5bGUgJiYg
IXN0eWxlKCkuaGFzUHNldWRvU3R5bGUocHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDY2LDcgKzIwNzYsNyBAQCB2b2lkIFJlbmRlckVs
ZW1lbnQ6OnBhaW50T3V0bGluZShQYWludEluCiAgICAgaWYgKCFoYXNPdXRsaW5lKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKKyAg
ICBhdXRvJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICBmbG9hdCBvdXRsaW5lV2lkdGggPSBm
bG9vclRvRGV2aWNlUGl4ZWwoc3R5bGVUb1VzZS5vdXRsaW5lV2lkdGgoKSwgZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICBmbG9hdCBvdXRsaW5lT2Zmc2V0ID0gZmxvb3JUb0Rl
dmljZVBpeGVsKHN0eWxlVG9Vc2Uub3V0bGluZU9mZnNldCgpLCBkb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDEwIEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaGFzSW5pdGlhbGl6ZWRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSW5pdGlh
bGl6ZWRTdHlsZTsgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxSZW5kZXJTdHlsZSY+KG1fc3R5bGUpOyB9Ci0gICAgUmVuZGVyU3R5bGUmIGZp
cnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlJiBmaXJzdExpbmVT
dHlsZSgpIGNvbnN0OworCisgICAgUmVuZGVyU3R5bGUmIG11dGFibGVTdHlsZSgpIHsgcmV0dXJu
IG1fc3R5bGU7IH0KIAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0eWxlKCk7CiAKQEAgLTUyLDggKzU0
LDkgQEAgcHVibGljOgogCiAgICAgLy8gVGhlIHBzZXVkbyBlbGVtZW50IHN0eWxlIGNhbiBiZSBj
YWNoZWQgb3IgdW5jYWNoZWQuICBVc2UgdGhlIGNhY2hlZCBtZXRob2QgaWYgdGhlIHBzZXVkbyBl
bGVtZW50IGRvZXNuJ3QgcmVzcGVjdAogICAgIC8vIGFueSBwc2V1ZG8gY2xhc3NlcyAoYW5kIHRo
ZXJlZm9yZSBoYXMgbm8gY29uY2VwdCBvZiBjaGFuZ2luZyBzdGF0ZSkuCi0gICAgUmVuZGVyU3R5
bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSBudWxscHRyKSBjb25zdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdl
dFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0ciwgUmVuZGVyU3R5bGUqIG93blN0eWxlID0gbnVsbHB0
cikgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFBz
ZXVkb0lkLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKSBjb25zdDsK
KyAgICBSZW5kZXJTdHlsZSogZ2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBj
b25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5
bGVSZXF1ZXN0JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0ciwgY29u
c3QgUmVuZGVyU3R5bGUqIG93blN0eWxlID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICAvLyBUaGlz
IGlzIG51bGwgZm9yIGFub255bW91cyByZW5kZXJlcnMuCiAgICAgRWxlbWVudCogZWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6bm9kZSgpKTsg
fQpAQCAtMjk4LDcgKzMwMSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFN0eWxlRGlmZmVy
ZW5jZSBhZGp1c3RTdHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlLCB1bnNpZ25lZCBjb250
ZXh0U2Vuc2l0aXZlUHJvcGVydGllcykgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUqIGNhY2hlZEZp
cnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNhY2hlZEZpcnN0
TGluZVN0eWxlKCkgY29uc3Q7CiAKICAgICB2b2lkIG5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFp
bGFibGUoQ2FjaGVkSW1hZ2UmKSBmaW5hbDsKIApAQCAtNDUwLDE0ICs0NTMsMTQgQEAgaW5saW5l
IGJvb2wgUmVuZGVyT2JqZWN0Ojppc1JlbmRlcklubGluZQogICAgIHJldHVybiBpczxSZW5kZXJF
bGVtZW50PigqdGhpcykgJiYgZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpLmlzUmVuZGVy
SW5saW5lKCk7CiB9CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpzdHlsZSgp
IGNvbnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUmIFJlbmRlck9iamVjdDo6c3R5bGUoKSBj
b25zdAogewogICAgIGlmIChpc1RleHQoKSkKICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zdHls
ZSgpOwogICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykuc3R5bGUoKTsK
IH0KIAotaW5saW5lIFJlbmRlclN0eWxlJiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZVN0eWxlKCkg
Y29uc3QKK2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVT
dHlsZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4dCgpKQogICAgICAgICByZXR1cm4gbV9wYXJl
bnQtPmZpcnN0TGluZVN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyMiw4ICs1MjIsOCBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQo
KQogICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksICp0aGlzLCBs
b2NhdGlvbk9mZnNldCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5
bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKICAgICAKICAgICBjaGlsZEJveC5z
ZXRMb2NhdGlvbihMYXlvdXRQb2ludChib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSArIExheW91
dFNpemUocGFkZGluZ0xlZnQoKSwgcGFkZGluZ1RvcCgpKSk7Ci0gICAgY2hpbGRCb3guc3R5bGUo
KS5zZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgY2hpbGRC
b3guc3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAg
IGNoaWxkQm94Lm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQo
KSwgRml4ZWQpKTsKKyAgICBjaGlsZEJveC5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5ndGgo
bmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwogICAgIGNoaWxkQm94LnNldE5lZWRzTGF5b3V0KE1h
cmtPbmx5VGhpcyk7CiAgICAgY2hpbGRCb3gubGF5b3V0KCk7CiAgICAgY2xlYXJDaGlsZE5lZWRz
TGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dU
aHJlYWQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgUmVu
ZGVyRmxvd1RocmVhZDo6UmVuZGVyRmxvd1RocmVhZChEb2N1bQogICAgIHNldEZsb3dUaHJlYWRT
dGF0ZShJbnNpZGVPdXRPZkZsb3dUaHJlYWQpOwogfQogCi1SZW5kZXJTdHlsZSBSZW5kZXJGbG93
VGhyZWFkOjpjcmVhdGVGbG93VGhyZWFkU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQor
UmVuZGVyU3R5bGUgUmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRlRmxvd1RocmVhZFN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBhdXRvIG5ld1N0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpOwogICAgIG5ld1N0eWxlLmluaGVyaXRGcm9tKHBhcmVudFN0eWxlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2Fs
bGVkIHdoZW4gYSBkZXNjZW5kYW50IGJveCdzIGxheW91dCBpcyBmaW5pc2hlZCBhbmQgaXQgaGFz
IGJlZW4gcG9zaXRpb25lZCB3aXRoaW4gaXRzIGNvbnRhaW5lci4KICAgICB2aXJ0dWFsIHZvaWQg
Zmxvd1RocmVhZERlc2NlbmRhbnRCb3hMYWlkT3V0KFJlbmRlckJveCopIHsgfQogCi0gICAgc3Rh
dGljIFJlbmRlclN0eWxlIGNyZWF0ZUZsb3dUaHJlYWRTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpOworICAgIHN0YXRpYyBSZW5kZXJTdHlsZSBjcmVhdGVGbG93VGhyZWFkU3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcxNiw4ICs3MTYsOCBAQCB2b2lkIFJlbmRlckltYWdlOjpsYXlvdXRT
aGFkb3dDb250cm9scyhjCiAKICAgICBpZiAoc2hhZG93Q29udHJvbHNOZWVkQ3VzdG9tTGF5b3V0
TWV0cmljcygpKSB7CiAgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldExvY2F0aW9uKExheW91
dFBvaW50KGJvcmRlckxlZnQoKSwgYm9yZGVyVG9wKCkpICsgTGF5b3V0U2l6ZShwYWRkaW5nTGVm
dCgpLCBwYWRkaW5nVG9wKCkpKTsKLSAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c3R5bGUoKS5z
ZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgICAgIGNvbnRy
b2xzUmVuZGVyZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKG5ld1NpemUud2lkdGgoKSwgRml4
ZWQpKTsKKyAgICAgICAgY29udHJvbHNSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0
KExlbmd0aChuZXdTaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgICAgICBjb250cm9sc1JlbmRl
cmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOwogICAgIH0KIAogICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtP
bmx5VGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIFJlbmRlcklu
bGluZTo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiAgICAgLy8gZS5nLiwgPGZvbnQ+Zm9vIDxoND5n
b288L2g0PiBtb288L2ZvbnQ+LiAgVGhlIDxmb250PiBpbmxpbmVzIGJlZm9yZQogICAgIC8vIGFu
ZCBhZnRlciB0aGUgYmxvY2sgc2hhcmUgdGhlIHNhbWUgc3R5bGUsIGJ1dCB0aGUgYmxvY2sgZG9l
c24ndAogICAgIC8vIG5lZWQgdG8gcGFzcyBpdHMgc3R5bGUgb24gdG8gYW55b25lIGVsc2UuCi0g
ICAgUmVuZGVyU3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBuZXdTdHlsZSA9
IHN0eWxlKCk7CiAgICAgUmVuZGVySW5saW5lKiBjb250aW51YXRpb24gPSBpbmxpbmVFbGVtZW50
Q29udGludWF0aW9uKCk7CiAgICAgaWYgKGNvbnRpbnVhdGlvbikgewogICAgICAgICBmb3IgKFJl
bmRlcklubGluZSogY3VyckNvbnQgPSBjb250aW51YXRpb247IGN1cnJDb250OyBjdXJyQ29udCA9
IGN1cnJDb250LT5pbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpIHsKQEAgLTIyMCw3ICsyMjAs
NyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgaWYgKGFs
d2F5c0NyZWF0ZUxpbmVCb3hlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSAmcGFyZW50KCktPnN0eWxlKCk7CisgICAgYXV0byogcGFyZW50U3R5
bGUgPSAmcGFyZW50KCktPnN0eWxlKCk7CiAgICAgUmVuZGVySW5saW5lKiBwYXJlbnRSZW5kZXJJ
bmxpbmUgPSBpczxSZW5kZXJJbmxpbmU+KCpwYXJlbnQoKSkgPyBkb3duY2FzdDxSZW5kZXJJbmxp
bmU+KHBhcmVudCgpKSA6IG51bGxwdHI7CiAgICAgYm9vbCBjaGVja0ZvbnRzID0gZG9jdW1lbnQo
KS5pbk5vUXVpcmtzTW9kZSgpOwogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBm
bG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbgogICAgIGlmICghYWx3YXlzQ3JlYXRlTGlu
ZUJveGVzICYmIGNoZWNrRm9udHMgJiYgdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CiAg
ICAgICAgIC8vIEhhdmUgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5bGUgYXMgd2VsbC4KICAg
ICAgICAgcGFyZW50U3R5bGUgPSAmcGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7Ci0gICAgICAg
IFJlbmRlclN0eWxlJiBjaGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAgYXV0
byYgY2hpbGRTdHlsZSA9IGZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGFsd2F5c0NyZWF0ZUxp
bmVCb3hlcyA9ICFwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhhc0lk
ZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUoKS5m
b250TWV0cmljcygpKQogICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWduKCkg
IT0gQkFTRUxJTkUKICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0g
Y2hpbGRTdHlsZS5saW5lSGVpZ2h0KCk7CkBAIC0xNjAxLDcgKzE2MDEsNyBAQCB2b2lkIFJlbmRl
cklubGluZTo6cGFpbnRPdXRsaW5lKFBhaW50SW5mCiAgICAgaWYgKCFoYXNPdXRsaW5lKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsK
KyAgICBhdXRvJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICAvLyBPbmx5IHBhaW50IHRoZSBm
b2N1cyByaW5nIGJ5IGhhbmQgaWYgdGhlIHRoZW1lIGlzbid0IGFibGUgdG8gZHJhdyBpdC4KICAg
ICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0
c0ZvY3VzUmluZyhzdHlsZVRvVXNlKSkgewogICAgICAgICBWZWN0b3I8TGF5b3V0UmVjdD4gZm9j
dXNSaW5nUmVjdHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMTEsNyArNDExMSw3IEBAIGJvb2wgUmVuZGVy
TGF5ZXI6OnNldHVwQ2xpcFBhdGgoR3JhcGhpY3MKICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRz
Q29tcHV0ZWQgPSB0cnVlOwogICAgIH0KIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRl
cmVyKCkuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKICAg
ICBBU1NFUlQoc3R5bGUuY2xpcFBhdGgoKSk7CiAgICAgaWYgKGlzPFNoYXBlQ2xpcFBhdGhPcGVy
YXRpb24+KCpzdHlsZS5jbGlwUGF0aCgpKSB8fCAoaXM8Qm94Q2xpcFBhdGhPcGVyYXRpb24+KCpz
dHlsZS5jbGlwUGF0aCgpKSAmJiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSkgewogICAgICAg
ICBXaW5kUnVsZSB3aW5kUnVsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3IEBA
IHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICBtX3ZCYXItPnBh
aW50KHBhaW50SW5mby5jb250ZXh0KCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7
CiB9CiAKLXN0YXRpYyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0
ZXh0UnVuLCBSZW5kZXJTdHlsZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBpdGVtRm9udCwgTGF5
b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKK3N0YXRpYyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JB
bGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBjb25zdCBSZW5kZXJTdHlsZSogaXRlbVN0eWxlLCBG
b250Q2FzY2FkZSBpdGVtRm9udCwgTGF5b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKIHsKICAgICBF
VGV4dEFsaWduIGFjdHVhbEFsaWdubWVudCA9IGl0ZW1TdHlsZS0+dGV4dEFsaWduKCk7CiAgICAg
Ly8gRklYTUU6IEZpcmVmb3ggZG9lc24ndCByZXNwZWN0IEpVU1RJRlkuIFNob3VsZCB3ZT8KQEAg
LTM3OSw3ICszNzksNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQo
CiAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdEVsZW1l
bnQoKS5saXN0SXRlbXMoKTsKICAgICBIVE1MRWxlbWVudCogbGlzdEl0ZW1FbGVtZW50ID0gbGlz
dEl0ZW1zW2xpc3RJbmRleF07CiAKLSAgICBSZW5kZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxpc3RJ
dGVtRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOworICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICpsaXN0
SXRlbUVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsKIAogICAgIGlmIChpdGVtU3R5bGUudmlzaWJp
bGl0eSgpID09IEhJRERFTikKICAgICAgICAgcmV0dXJuOwpAQCAtNDIzLDcgKzQyMyw3IEBAIHZv
aWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCgKIHsKICAgICBjb25zdCBWZWN0
b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudCgpLmxpc3RJdGVtcygp
OwogICAgIEhUTUxFbGVtZW50KiBsaXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4
XTsKLSAgICBSZW5kZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+Y29tcHV0
ZWRTdHlsZSgpOworICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICpsaXN0SXRlbUVsZW1lbnQtPmNvbXB1
dGVkU3R5bGUoKTsKIAogICAgIENvbG9yIGJhY2tDb2xvcjsKICAgICBpZiAoaXM8SFRNTE9wdGlv
bkVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50
PigqbGlzdEl0ZW1FbGVtZW50KS5zZWxlY3RlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MDgsOCArMTcwOCw4IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFy
Z2lucygpCiAgICAgICAgIAogICAgIH0KIAotICAgIHN0eWxlKCkuc2V0TWFyZ2luU3RhcnQoTGVu
Z3RoKG1hcmdpblN0YXJ0LCBGaXhlZCkpOwotICAgIHN0eWxlKCkuc2V0TWFyZ2luRW5kKExlbmd0
aChtYXJnaW5FbmQsIEZpeGVkKSk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luU3RhcnQo
TGVuZ3RoKG1hcmdpblN0YXJ0LCBGaXhlZCkpOworICAgIG11dGFibGVTdHlsZSgpLnNldE1hcmdp
bkVuZChMZW5ndGgobWFyZ2luRW5kLCBGaXhlZCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckxp
c3RNYXJrZXI6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRp
cmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgaW50IFJlbmRlck1hcnF1ZWU6OmNvbXB1dGVQ
b3NpdGlvbihFTWFycQogewogICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci0+cmVuZGVyQm94
KCk7CiAgICAgQVNTRVJUKGJveCk7Ci0gICAgUmVuZGVyU3R5bGUmIGJveFN0eWxlID0gYm94LT5z
dHlsZSgpOworICAgIGF1dG8mIGJveFN0eWxlID0gYm94LT5zdHlsZSgpOwogICAgIGlmIChpc0hv
cml6b250YWwoKSkgewogICAgICAgICBib29sIGx0ciA9IGJveFN0eWxlLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKTsKICAgICAgICAgTGF5b3V0VW5pdCBjbGllbnRXaWR0aCA9IGJveC0+Y2xpZW50
V2lkdGgoKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnVwZGF0ZU1h
cnF1ZWVQb3NpdGlvCiAKIHZvaWQgUmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVlZVN0eWxlKCkK
IHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCk7
CisgICAgYXV0byYgc3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLm11dGFibGVTdHlsZSgpOwog
ICAgIAogICAgIGlmIChtX2RpcmVjdGlvbiAhPSBzdHlsZS5tYXJxdWVlRGlyZWN0aW9uKCkgfHwg
KG1fdG90YWxMb29wcyAhPSBzdHlsZS5tYXJxdWVlTG9vcENvdW50KCkgJiYgbV9jdXJyZW50TG9v
cCA+PSBtX3RvdGFsTG9vcHMpKQogICAgICAgICBtX2N1cnJlbnRMb29wID0gMDsgLy8gV2hlbiBk
aXJlY3Rpb24gY2hhbmdlcyBvciBvdXIgbG9vcENvdW50IGlzIGEgc21hbGxlciBudW1iZXIgdGhh
biBvdXIgY3VycmVudCBsb29wLCByZXNldCBvdXIgbG9vcC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZUlubmVyQmxvY2so
KQogCiB2b2lkIFJlbmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKCkKIHsKLSAgICBSZW5k
ZXJTdHlsZSYgaW5uZXJTdHlsZSA9IG1faW5uZXJCbG9jay0+c3R5bGUoKTsKKyAgICBhdXRvJiBp
bm5lclN0eWxlID0gbV9pbm5lckJsb2NrLT5tdXRhYmxlU3R5bGUoKTsKICAgICBpbm5lclN0eWxl
LnNldEZsZXhHcm93KDEpOwogICAgIGlubmVyU3R5bGUuc2V0RmxleFNocmluaygxKTsKICAgICAv
LyBtaW4td2lkdGg6IDA7IGlzIG5lZWRlZCBmb3IgY29ycmVjdCBzaHJpbmtpbmcuCkBAIC0yMTUs
NyArMjE1LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKAogICAg
ICAgICBpZiAodGhlbWUoKS5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAgICAg
ICAgICAgICAvLyBBZGQgaW4gdGhlIG9wdGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3QgY2Fs
Y3VsYXRlIHBlcmNlbnRhZ2UgdmFsdWVzIGZvciBub3cuCiAgICAgICAgICAgICBmbG9hdCBvcHRp
b25XaWR0aCA9IDA7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIG9wdGlvblN0eWxlID0g
ZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpKQorICAgICAgICAgICAgaWYgKGF1dG8qIG9wdGlvblN0
eWxlID0gZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICAgICAgICAgIG9wdGlvbldp
ZHRoICs9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChvcHRpb25TdHlsZS0+dGV4dEluZGVudCgpLCAw
KTsKICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKQEAgLTUxOSw3
ICs1MTksNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAgICAg
Ym9vbCBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENvbG9yOwogICAgIGdldEl0ZW1CYWNrZ3JvdW5k
Q29sb3IobGlzdEluZGV4LCBpdGVtQmFja2dyb3VuZENvbG9yLCBpdGVtSGFzQ3VzdG9tQmFja2dy
b3VuZENvbG9yKTsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9ICplbGVtZW50LT5jb21wdXRl
ZFN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSAqZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwog
ICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLmZvbnRDYXNjYWRlKCks
IHN0eWxlLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZS5kaXNwbGF5KCkg
PT0gTk9ORSwgdHJ1ZSwgc3R5bGUudGV4dEluZGVudCgpLCBzdHlsZS5kaXJlY3Rpb24oKSwgaXNP
dmVycmlkZShzdHlsZS51bmljb2RlQmlkaSgpKSwKICAgICAgICAgaXRlbUhhc0N1c3RvbUJhY2tn
cm91bmRDb2xvciA/IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IgOiBQb3B1
cE1lbnVTdHlsZTo6RGVmYXVsdEJhY2tncm91bmRDb2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNw
cAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBA
QCBzdGF0aWMgYm9vbCBpc1ZhbGlkQ29sdW1uU3Bhbm5lcihSZW5kZXJNCiAgICAgQVNTRVJUKGRl
c2NlbmRhbnQtPmlzRGVzY2VuZGFudE9mKGZsb3dUaHJlYWQpKTsKIAogICAgIC8vIEZpcnN0IG1h
a2Ugc3VyZSB0aGF0IHRoZSByZW5kZXJlciBpdHNlbGYgaGFzIHRoZSByaWdodCBwcm9wZXJ0aWVz
IGZvciBiZWNvbWluZyBhIHNwYW5uZXIuCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gZGVzY2Vu
ZGFudC0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGRlc2NlbmRhbnQtPnN0eWxlKCk7CiAg
ICAgaWYgKHN0eWxlLmNvbHVtblNwYW4oKSAhPSBDb2x1bW5TcGFuQWxsIHx8ICFpczxSZW5kZXJC
b3g+KCpkZXNjZW5kYW50KSB8fCBkZXNjZW5kYW50LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3Np
dGlvbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyTXVs
dGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNl
aG9sZGVyOjpjcmVhdGVBbm9ueW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBmbG93
VGhyZWFkLCBSZW5kZXJCb3gqIHNwYW5uZXIsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK1Jl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5u
ZXJQbGFjZWhvbGRlcjo6Y3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZCogZmxvd1RocmVhZCwgUmVuZGVyQm94KiBzcGFubmVyLCBjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpCiB7CiAgICAgYXV0byBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVBbm9u
eW1vdXNTdHlsZVdpdGhEaXNwbGF5KCpwYXJlbnRTdHlsZSwgQkxPQ0spOwogICAgIG5ld1N0eWxl
LnNldENsZWFyKENCT1RIKTsgLy8gV2UgZG9uJ3Qgd2FudCBmbG9hdHMgaW4gdGhlIHJvdyBwcmVj
ZWRpbmcgdGhlIHNwYW5uZXIgdG8gY29udGludWUgb24gdGhlIG90aGVyIHNpZGUuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5GbG93
VGhyZWFkOwogCiBjbGFzcyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciBmaW5h
bCA6IHB1YmxpYyBSZW5kZXJCb3ggewogcHVibGljOgotICAgIHN0YXRpYyBSZW5kZXJNdWx0aUNv
bHVtblNwYW5uZXJQbGFjZWhvbGRlciogY3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZCosIFJlbmRlckJveCogc3Bhbm5lciwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KTsKKyAgICBzdGF0aWMgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIGNyZWF0
ZUFub255bW91cyhSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqLCBSZW5kZXJCb3gqIHNwYW5u
ZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICBSZW5kZXJCb3gqIHNw
YW5uZXIoKSBjb25zdCB7IHJldHVybiBtX3NwYW5uZXI7IH0KICAgICBSZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQqIGZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2Zsb3dUaHJlYWQ7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxv
d0ZyYWdtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcg
KzM0Nyw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNoZWNrUmVnaW8KICAgICBk
b3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCptX2Zsb3dUaHJlYWQpLmNoZWNrUmVnaW9u
c1dpdGhTdHlsaW5nKCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lv
bihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxl
KSBjb25zdAogewogICAgIEFTU0VSVCghcmVuZGVyZXIuaXNBbm9ueW1vdXMoKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQiOyB9CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1l
bnQmLCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gY29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYsIGNvbnN0
IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlQ2hpbGRy
ZW5TdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmKTsKICAgICB2b2lkIHNldE9iamVjdFN0eWxl
SW5SZWdpb24oUmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiwgYm9v
bCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyMiw3ICsx
ODIyLDcgQEAgaW50IFJlbmRlck9iamVjdDo6aW5uZXJMaW5lSGVpZ2h0KCkgY29ucwogICAgIHJl
dHVybiBzdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpOwogfQogCi1zdGF0aWMgQ29sb3IgZGVj
b3JhdGlvbkNvbG9yKFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBDb2xvciBkZWNvcmF0aW9u
Q29sb3IoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIENvbG9yIHJlc3VsdDsKICAg
ICAvLyBDaGVjayBmb3IgdGV4dCBkZWNvcmF0aW9uIGNvbG9yIGZpcnN0LgpAQCAtMTg0NCw3ICsx
ODQ0LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sbwogICAgIFRl
eHREZWNvcmF0aW9uU3R5bGUmIHVuZGVybGluZVN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxlJiBv
dmVybGluZVN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxlJiBsaW5ldGhyb3VnaFN0eWxlLCBib29s
IGZpcnN0bGluZVN0eWxlKSBjb25zdAogewogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVu
dCA9IHRoaXM7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBudWxscHRyOworICAgIGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gbnVsbHB0cjsKICAgICBUZXh0RGVjb3JhdGlv
biBjdXJyRGVjcyA9IFRleHREZWNvcmF0aW9uTm9uZTsKICAgICBDb2xvciByZXN1bHRDb2xvcjsK
ICAgICBkbyB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5Nyw4ICs2OTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBMYXlvdXRVbml0IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29u
c3QgeyByZXR1cm4gMDsgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3Q7Ci0gICAg
UmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxl
KCkgY29uc3Q7CiAKICAgICAvLyBBbm9ueW1vdXMgYmxvY2tzIHRoYXQgYXJlIHBhcnQgb2Ygb2Yg
YSBjb250aW51YXRpb24gY2hhaW4gd2lsbCByZXR1cm4gdGhlaXIgaW5saW5lIGNvbnRpbnVhdGlv
bidzIG91dGxpbmUgc3R5bGUgaW5zdGVhZC4KICAgICAvLyBUaGlzIGlzIHR5cGljYWxseSBvbmx5
IHJlbGV2YW50IHdoZW4gcmVwYWludGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODExLDcgKzgxMSw3IEBA
IHZvaWQgUmVuZGVyVGFibGU6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2EKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9jYXB0aW9ucy5zaXplKCk7IGkrKykKICAgICAgICAgbV9taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSBzdGQ6Om1heChtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwg
bV9jYXB0aW9uc1tpXS0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkpOwogCi0gICAgUmVuZGVy
U3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBzdHls
ZSgpOwogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBjaGVja2luZyBmb3Ig
aXNTcGVjaWZpZWQgc2luY2UgeW91IHNob3VsZCBiZSBhYmxlIHRvIHVzZSBwZXJjZW50YWdlIG9y
IGNhbGMgdmFsdWVzIGZvciBtaW4td2lkdGguCiAgICAgaWYgKHN0eWxlVG9Vc2UubG9naWNhbE1p
bldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkudmFsdWUo
KSA+IDApIHsKICAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdGQ6Om1heCht
X21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgYWRqdXN0Q29udGVudEJveExvZ2ljYWxXaWR0aEZv
ckJveFNpemluZyhzdHlsZVRvVXNlLmxvZ2ljYWxNaW5XaWR0aCgpLnZhbHVlKCkpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5OCw3ICsxMTk4LDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OnBhaW50Um93R3JvdXBCbwogCiB9CiAKLXN0YXRpYyBCb3hTaWRlIHBo
eXNpY2FsQm9yZGVyRm9yRGlyZWN0aW9uKFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93LCBD
b2xsYXBzZWRCb3JkZXJTaWRlIHNpZGUpCitzdGF0aWMgQm94U2lkZSBwaHlzaWNhbEJvcmRlckZv
ckRpcmVjdGlvbihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JDZWxsRmxvdywgQ29sbGFwc2Vk
Qm9yZGVyU2lkZSBzaWRlKQogewogCiAgICAgc3dpdGNoIChzaWRlKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4
LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzVGV4dEZyYWdtZW50KCkgY29uc3Q7
CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSYgZmly
c3RMaW5lU3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRvU3R5
bGUoUHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpIGNvbnN0Owor
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBnZXRD
YWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICBDb2xvciBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdDsKICAgICBDb2xvciBzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKQEAg
LTI1MSwxNyArMjUxLDE3IEBAIGlubGluZSBVQ2hhciBSZW5kZXJUZXh0OjpjaGFyYWN0ZXJBdCh1
bnMKICAgICByZXR1cm4gdW5jaGVja2VkQ2hhcmFjdGVyQXQoaSk7CiB9CiAKLWlubGluZSBSZW5k
ZXJTdHlsZSYgUmVuZGVyVGV4dDo6c3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0
eWxlJiBSZW5kZXJUZXh0OjpzdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcmVudCgpLT5z
dHlsZSgpOwogfQogCi1pbmxpbmUgUmVuZGVyU3R5bGUmIFJlbmRlclRleHQ6OmZpcnN0TGluZVN0
eWxlKCkgY29uc3QKK2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyVGV4dDo6Zmlyc3RM
aW5lU3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBwYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUo
KTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1ZG9T
dHlsZShQc2V1ZG9JZCBwc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAor
aW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1ZG9TdHls
ZShQc2V1ZG9JZCBwc2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25z
dAogewogICAgIHJldHVybiBwYXJlbnQoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvSWQs
IHBhcmVudFN0eWxlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCAr
NjUsOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZShTCiAgICAgaWYg
KGlubmVyVGV4dFJlbmRlcmVyKSB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHNldCB0aGUgd2lk
dGggYW5kIHRoZSBoZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KICAgICAgICAg
Ly8gUmVzZXQgdGhlbSBub3cgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBoaW50
LgotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkp
OwotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7
CisgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQoTGVu
Z3RoKCkpOworICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0V2lk
dGgoTGVuZ3RoKCkpOwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0U3R5bGUodGV4dEZv
cm1Db250cm9sRWxlbWVudCgpLmNyZWF0ZUlubmVyVGV4dFN0eWxlKHN0eWxlKCkpKTsKICAgICB9
CiAgICAgdGV4dEZvcm1Db250cm9sRWxlbWVudCgpLnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0
eSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVs
dGlMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Miw3ICs5Miw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUKICAgICBSZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyUmVuZGVyZXIgPSBSZW5kZXJUZXh0
Q29udHJvbDo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7CiAg
ICAgaWYgKGlzPFJlbmRlckJveD4ocGxhY2Vob2xkZXJSZW5kZXJlcikpIHsKICAgICAgICAgYXV0
byYgcGxhY2Vob2xkZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpwbGFjZWhvbGRlclJlbmRl
cmVyKTsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3guc3R5bGUoKS5zZXRMb2dpY2FsV2lkdGgoTGVu
Z3RoKGNvbnRlbnRMb2dpY2FsV2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LmJvcmRlckFuZFBhZGRp
bmdMb2dpY2FsV2lkdGgoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gubXV0YWJs
ZVN0eWxlKCkuc2V0TG9naWNhbFdpZHRoKExlbmd0aChjb250ZW50TG9naWNhbFdpZHRoKCkgLSBw
bGFjZWhvbGRlckJveC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCksIEZpeGVkKSk7CiAg
ICAgICAgIHBsYWNlaG9sZGVyQm94LmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIHBsYWNlaG9s
ZGVyQm94LnNldFgoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSk7CiAgICAgICAgIHBsYWNl
aG9sZGVyQm94LnNldFkoYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTEg
KzEwOCwxMSBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAKICAg
ICAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYmV0d2VlbiBsYXlvdXRzLCB3ZSBuZWVkIHRvIHJl
c2V0IGFueSBjb25kaXRpb25hbGx5IG92ZXJyaWRlbiBoZWlnaHQuCiAgICAgaWYgKGlubmVyVGV4
dFJlbmRlcmVyICYmICFpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCku
aXNBdXRvKCkpIHsKLSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNh
bEhlaWdodChMZW5ndGgoQXV0bykpOworICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0YWJs
ZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoQXV0bykpOwogICAgICAgICBzZXROZWVk
c0xheW91dE9uQW5jZXN0b3JzKGlubmVyVGV4dFJlbmRlcmVyLCB0aGlzKTsKICAgICB9CiAgICAg
aWYgKGlubmVyQmxvY2tSZW5kZXJlciAmJiAhaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLmxv
Z2ljYWxIZWlnaHQoKS5pc0F1dG8oKSkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0
eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoQXV0bykpOworICAgICAgICBpbm5lckJsb2Nr
UmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKEF1dG8pKTsK
ICAgICAgICAgc2V0TmVlZHNMYXlvdXRPbkFuY2VzdG9ycyhpbm5lckJsb2NrUmVuZGVyZXIsIHRo
aXMpOwogICAgIH0KIApAQCAtMTI4LDEwICsxMjgsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmxheW91dAogICAgICAgICBpZiAoZGVzaXJlZExvZ2ljYWxIZWlnaHQgIT0g
aW5uZXJUZXh0UmVuZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgIHNldE5lZWRz
TGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAKLSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxl
KCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7
CisgICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVp
Z2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgaW5uZXJU
ZXh0UmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIGlmIChp
bm5lckJsb2NrUmVuZGVyZXIpIHsKLSAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5
bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQp
KTsKKyAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9n
aWNhbEhlaWdodChMZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CiAgICAgICAg
ICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xNDAsMTMgKzE0MCwxMyBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5sYXlvdXRJ
Zk5lZWRlZCgpOwogICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgPSBj
b250YWluZXJSZW5kZXJlci0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICBpZiAoY29udGFpbmVy
TG9naWNhbEhlaWdodCA+IGxvZ2ljYWxIZWlnaHRMaW1pdCkgewotICAgICAgICAgICAgY29udGFp
bmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgobG9naWNhbEhlaWdo
dExpbWl0LCBGaXhlZCkpOworICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFibGVT
dHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGxvZ2ljYWxIZWlnaHRMaW1pdCwgRml4ZWQp
KTsKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoY29udGFpbmVyUmVuZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSA8IGNvbnRlbnRMb2dp
Y2FsSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLnNl
dExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCksIEZpeGVkKSk7Cisg
ICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhl
aWdodChMZW5ndGgoY29udGVudExvZ2ljYWxIZWlnaHQoKSwgRml4ZWQpKTsKICAgICAgICAgICAg
IHNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoY29u
dGFpbmVyTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgICAgIGNvbnRhaW5lclJlbmRl
cmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChjb250YWluZXJMb2dp
Y2FsSGVpZ2h0LCBGaXhlZCkpOwogICAgIH0KIAogICAgIC8vIElmIHdlIG5lZWQgYW5vdGhlciBs
YXlvdXQgcGFzcywgd2UgaGF2ZSBjaGFuZ2VkIG9uZSBvZiBjaGlsZHJlbidzIGhlaWdodCBzbyB3
ZSBuZWVkIHRvIHJlbGF5b3V0IHRoZW0uCkBAIC0xNzQsOCArMTc0LDggQEAgdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dAogICAgICAgICBMYXlvdXRTaXplIGlubmVyVGV4
dFNpemU7CiAgICAgICAgIGlmIChpbm5lclRleHRSZW5kZXJlcikKICAgICAgICAgICAgIGlubmVy
VGV4dFNpemUgPSBpbm5lclRleHRSZW5kZXJlci0+c2l6ZSgpOwotICAgICAgICBwbGFjZWhvbGRl
ckJveC0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoaW5uZXJUZXh0U2l6ZS53aWR0aCgpIC0gcGxh
Y2Vob2xkZXJCb3gtPmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCksIEZpeGVkKSk7
Ci0gICAgICAgIHBsYWNlaG9sZGVyQm94LT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5uZXJU
ZXh0U2l6ZS5oZWlnaHQoKSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRp
bmdFeHRlbnQoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gtPm11dGFibGVTdHls
ZSgpLnNldFdpZHRoKExlbmd0aChpbm5lclRleHRTaXplLndpZHRoKCkgLSBwbGFjZWhvbGRlckJv
eC0+aG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgRml4ZWQpKTsKKyAgICAgICAg
cGxhY2Vob2xkZXJCb3gtPm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5uZXJUZXh0
U2l6ZS5oZWlnaHQoKSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdF
eHRlbnQoKSwgRml4ZWQpKTsKICAgICAgICAgYm9vbCBuZWVkZWRMYXlvdXQgPSBwbGFjZWhvbGRl
ckJveC0+bmVlZHNMYXlvdXQoKTsKICAgICAgICAgYm9vbCBwbGFjZWhvbGRlckJveEhhZExheW91
dCA9IHBsYWNlaG9sZGVyQm94LT5ldmVySGFkTGF5b3V0KCk7CiAgICAgICAgIHBsYWNlaG9sZGVy
Qm94LT5sYXlvdXRJZk5lZWRlZCgpOwpAQCAtMjM2LDE0ICsyMzYsMTQgQEAgdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0eWxlRAogICAgIC8vIFdlIG1heSBoYXZlIHNldCB0aGUg
d2lkdGggYW5kIHRoZSBoZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KICAgICAv
LyBSZXNldCB0aGVtIG5vdyB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0IGhpbnQu
CiAgICAgSFRNTEVsZW1lbnQqIGlubmVyQmxvY2sgPSBpbm5lckJsb2NrRWxlbWVudCgpOwotICAg
IGlmIChSZW5kZXJPYmplY3QqIGlubmVyQmxvY2tSZW5kZXJlciA9IGlubmVyQmxvY2sgPyBpbm5l
ckJsb2NrLT5yZW5kZXJlcigpIDogMCkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0
eWxlKCkuc2V0SGVpZ2h0KExlbmd0aCgpKTsKLSAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5z
dHlsZSgpLnNldFdpZHRoKExlbmd0aCgpKTsKKyAgICBpZiAoYXV0byogaW5uZXJCbG9ja1JlbmRl
cmVyID0gaW5uZXJCbG9jayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCkgOiBudWxscHRyKSB7Cisg
ICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0
aCgpKTsKKyAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0
aChMZW5ndGgoKSk7CiAgICAgfQogICAgIEhUTUxFbGVtZW50KiBjb250YWluZXIgPSBjb250YWlu
ZXJFbGVtZW50KCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogY29udGFpbmVyUmVuZGVyZXIgPSBj
b250YWluZXIgPyBjb250YWluZXItPnJlbmRlcmVyKCkgOiAwKSB7Ci0gICAgICAgIGNvbnRhaW5l
clJlbmRlcmVyLT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgoKSk7Ci0gICAgICAgIGNvbnRhaW5l
clJlbmRlcmVyLT5zdHlsZSgpLnNldFdpZHRoKExlbmd0aCgpKTsKKyAgICBpZiAoYXV0byogY29u
dGFpbmVyUmVuZGVyZXIgPSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRlcmVyKCkgOiBudWxs
cHRyKSB7CisgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWln
aHQoTGVuZ3RoKCkpOworICAgICAgICBjb250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCku
c2V0V2lkdGgoTGVuZ3RoKCkpOwogICAgIH0KICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVu
Y2VMYXlvdXQpIHsKICAgICAgICAgaWYgKGF1dG8qIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJU
ZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRGcmFnbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgUmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5n
ZSgKICAgICBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAKICAg
ICBpZiAoUmVuZGVyQmxvY2sqIGJsb2NrID0gYmxvY2tGb3JBY2NvbXBhbnlpbmdGaXJzdExldHRl
cigpKSB7Ci0gICAgICAgIGJsb2NrLT5zdHlsZSgpLnJlbW92ZUNhY2hlZFBzZXVkb1N0eWxlKEZJ
UlNUX0xFVFRFUik7CisgICAgICAgIGJsb2NrLT5tdXRhYmxlU3R5bGUoKS5yZW1vdmVDYWNoZWRQ
c2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpOwogICAgICAgICBibG9jay0+dXBkYXRlRmlyc3RMZXR0
ZXIoKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUd0ay5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMTUsNyArMjAxNSw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFUb2dnbGVDbG8KIH0KICNlbmRpZgogCi1z
dGF0aWMgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkgYm9yZGVyUmFkaWlGcm9tU3R5bGUoUmVuZGVy
U3R5bGUmIHN0eWxlKQorc3RhdGljIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIGJvcmRlclJhZGlp
RnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICByZXR1cm4gRmxvYXRS
b3VuZGVkUmVjdDo6UmFkaWkoCiAgICAgICAgIEludFNpemUoc3R5bGUuYm9yZGVyVG9wTGVmdFJh
ZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygpLmhl
aWdodCgpLmludFZhbHVlKCkpLApAQCAtMjAzNiw3ICsyMDM2LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYQogCiAgICAgZmxvYXQgbWVkaWFEdXJhdGlvbiA9IG1l
ZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsKICAgICBmbG9hdCB0b3RhbFRyYWNrV2lkdGggPSByLndp
ZHRoKCk7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gby5zdHlsZSgpOworICAgIGF1dG8mIHN0
eWxlID0gby5zdHlsZSgpOwogICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gbWVk
aWFFbGVtZW50LT5idWZmZXJlZCgpOwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRl
eCA8IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2luZGV4KSB7CiAgICAgICAgIGZsb2F0IHN0YXJ0
ID0gdGltZVJhbmdlcy0+c3RhcnQoaW5kZXgsIElHTk9SRV9FWENFUFRJT04pOwpAQCAtMjA1OSw3
ICsyMDU5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYQogCiBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsK
LSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBvLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBv
LnN0eWxlKCk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3QoRmxvYXRS
b3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLCBzdHlsZS52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
QEAgLTIwODAsNyArMjA4MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1
bWVTbGkKIAogICAgIGludCByZWN0SGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKICAgICBmbG9hdCB0
cmFja0hlaWdodCA9IHJlY3RIZWlnaHQgKiB2b2x1bWU7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxl
ID0gcmVuZGVyT2JqZWN0LnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSByZW5kZXJPYmplY3Qu
c3R5bGUoKTsKICAgICBJbnRSZWN0IHZvbHVtZVJlY3QocmVjdCk7CiAgICAgdm9sdW1lUmVjdC5t
b3ZlKDAsIHJlY3RIZWlnaHQgLSB0cmFja0hlaWdodCk7CiAgICAgdm9sdW1lUmVjdC5zZXRIZWln
aHQoY2VpbCh0cmFja0hlaWdodCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcGFpbnRGbG93KGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgZmwKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhh
c2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUg
PSBmbG93LnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7CiAgICAgaWYg
KHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm47CiAKQEAgLTE0
MCw3ICsxNDAsNyBAQCBib29sIGhpdFRlc3RGbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgCiAg
ICAgaWYgKCFsYXlvdXQucnVuQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
UmVuZGVyU3R5bGUmIHN0eWxlID0gZmxvdy5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gZmxv
dy5zdHlsZSgpOwogICAgIGlmIChzdHlsZS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBzdHls
ZS5wb2ludGVyRXZlbnRzKCkgPT0gUEVfTk9ORSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAJKHJldmlz
aW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgVGV4dEF1dG9TaXppbmdLZXk6OlRl
eHRBdXRvU2l6aW5nS2V5KERlbAogewogfQogCi1UZXh0QXV0b1NpemluZ0tleTo6VGV4dEF1dG9T
aXppbmdLZXkoUmVuZGVyU3R5bGUqIHN0eWxlKQorVGV4dEF1dG9TaXppbmdLZXk6OlRleHRBdXRv
U2l6aW5nS2V5KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICA6IG1fc3R5bGUoc3R5bGUg
PyBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKnN0eWxlKSA6IG51bGxwdHIpCiB7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuaAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDEyICs0MywxMiBAQCBwdWJsaWM6CiAgICAgVGV4dEF1dG9TaXppbmdLZXko
KSA9IGRlZmF1bHQ7CiAgICAgZW51bSBEZWxldGVkVGFnIHsgRGVsZXRlZCB9OwogICAgIGV4cGxp
Y2l0IFRleHRBdXRvU2l6aW5nS2V5KERlbGV0ZWRUYWcpOwotICAgIGV4cGxpY2l0IFRleHRBdXRv
U2l6aW5nS2V5KFJlbmRlclN0eWxlKik7CisgICAgZXhwbGljaXQgVGV4dEF1dG9TaXppbmdLZXko
Y29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICBUZXh0QXV0b1NpemluZ0tleShUZXh0QXV0b1Npemlu
Z0tleSYmKSA9IGRlZmF1bHQ7CiAKICAgICBUZXh0QXV0b1NpemluZ0tleSYgb3BlcmF0b3I9KFRl
eHRBdXRvU2l6aW5nS2V5JiYpID0gZGVmYXVsdDsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CiAgICAgaW5saW5lIGJvb2wg
aXNEZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0RlbGV0ZWQ7IH0KIAogcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkocmV2aXNp
b24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIFRleHRQYWludFN0eWxlIGNvbXB1
dGVUZXh0U2VsZWN0aW9uUGFpbnQKICAgICAgICAgc2VsZWN0aW9uUGFpbnRTdHlsZS5lbXBoYXNp
c01hcmtDb2xvciA9IGVtcGhhc2lzTWFya0ZvcmVncm91bmQ7CiAgICAgfQogCi0gICAgaWYgKFJl
bmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IHJlbmRlcmVyLmdldENhY2hlZFBzZXVkb1N0eWxlKFNF
TEVDVElPTikpIHsKKyAgICBpZiAoYXV0byogcHNldWRvU3R5bGUgPSByZW5kZXJlci5nZXRDYWNo
ZWRQc2V1ZG9TdHlsZShTRUxFQ1RJT04pKSB7CiAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNo
YWRvdyA9IHBhaW50SW5mby5mb3JjZVRleHRDb2xvcigpID8gbnVsbHB0ciA6IHBzZXVkb1N0eWxl
LT50ZXh0U2hhZG93KCk7CiAgICAgICAgIGlmIChzaGFkb3cgIT0gc2VsZWN0aW9uU2hhZG93KSB7
CiAgICAgICAgICAgICBpZiAoIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIHByaXZhdGU6CiAgICAgLy8gRmly
ZWZveCBhbmQgT3BlcmEgd2lsbCBhbGxvdyBhIHRhYmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4g
aW1hZ2UgaW5zaWRlIGl0IHVuZGVyCiAgICAgLy8gdmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2Vz
IChpbiBvcmRlciB0byBtYXRjaCBjb21tb24gV2luSUUgcmVuZGVyaW5ncykuCiAgICAgLy8gTm90
IHN1cHBvcnRpbmcgdGhlIHF1aXJrIGhhcyBjYXVzZWQgdXMgdG8gbWlzLXJlbmRlciBzb21lIHJl
YWwgc2l0ZXMuIChTZWUgQnVnemlsbGEgMTA1MTcuKQotICAgIFJlbmRlclN0eWxlJiBtX2Jsb2Nr
U3R5bGU7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fYmxvY2tTdHlsZTsKIAogICAgIExpbmVJ
bmZvJiBtX2xpbmVJbmZvOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwMSwxMCArMzAxLDEwIEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6bGF5
b3V0KCkKICAgICAgICAgICAgICAgICBiYXNlVG9wTWFyZ2luIC09IGluZGV4VG9wTWFyZ2luOwog
ICAgICAgICAgICAgICAgIGluZGV4VG9wTWFyZ2luID0gMDsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGluZGV4LT5zdHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgoaW5kZXhUb3BNYXJnaW4s
IEZpeGVkKSk7CisgICAgICAgICAgICBpbmRleC0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9w
KExlbmd0aChpbmRleFRvcE1hcmdpbiwgRml4ZWQpKTsKICAgICAgICAgfQotICAgICAgICByYWRp
Y2FsLT5zdHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgocmFkaWNhbFRvcE1hcmdpbiwgRml4ZWQp
KTsKLSAgICAgICAgYmFzZS0+c3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGJhc2VUb3BNYXJn
aW4sIEZpeGVkKSk7CisgICAgICAgIHJhZGljYWwtPm11dGFibGVTdHlsZSgpLnNldE1hcmdpblRv
cChMZW5ndGgocmFkaWNhbFRvcE1hcmdpbiwgRml4ZWQpKTsKKyAgICAgICAgYmFzZS0+bXV0YWJs
ZVN0eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChiYXNlVG9wTWFyZ2luLCBGaXhlZCkpOwogICAg
IH0KIAogICAgIFJlbmRlck1hdGhNTEJsb2NrOjpsYXlvdXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTYwNiw3ICsxNjA2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29sdW1uUnVs
ZVdpZHRoKHVuc2lnbmVkIHNob3J0IHcpIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVyaXRl
ZERhdGEsIG1fbXVsdGlDb2wsIG1fcnVsZS5tX3dpZHRoLCB3KTsgfQogICAgIHZvaWQgcmVzZXRD
b2x1bW5SdWxlKCkgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV9tdWx0
aUNvbCwgbV9ydWxlLCBCb3JkZXJWYWx1ZSgpKTsgfQogICAgIHZvaWQgc2V0Q29sdW1uU3BhbihD
b2x1bW5TcGFuIGNvbHVtblNwYW4pIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVyaXRlZERh
dGEsIG1fbXVsdGlDb2wsIG1fY29sdW1uU3BhbiwgY29sdW1uU3Bhbik7IH0KLSAgICB2b2lkIGlu
aGVyaXRDb2x1bW5Qcm9wZXJ0aWVzRnJvbShSZW5kZXJTdHlsZSogcGFyZW50KSB7IHJhcmVOb25J
bmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX211bHRpQ29sID0gcGFyZW50LT5yYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV9tdWx0aUNvbDsgfQorICAgIHZvaWQgaW5oZXJpdENvbHVtblByb3BlcnRpZXNG
cm9tKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnQpIHsgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNj
ZXNzKCktPm1fbXVsdGlDb2wgPSBwYXJlbnQtPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211bHRp
Q29sOyB9CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYg
b3BzKSB7IFNFVF9ORVNURURfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX3RyYW5zZm9ybSwg
bV9vcGVyYXRpb25zLCBvcHMpOyB9CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm1PcmlnaW5YKExlbmd0
aCBsZW5ndGgpIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fdHJhbnNm
b3JtLCBtX3gsIFdURk1vdmUobGVuZ3RoKSk7IH0KICAgICB2b2lkIHNldFRyYW5zZm9ybU9yaWdp
blkoTGVuZ3RoIGxlbmd0aCkgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwg
bV90cmFuc2Zvcm0sIG1feSwgV1RGTW92ZShsZW5ndGgpKTsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgZmxvYXQgU1ZHSW5saW5lVGV4
dEJveDo6cG9zaXRpb25Gb3JPZmZzZQogICAgIHJldHVybiAwOwogfQogCi1GbG9hdFJlY3QgU1ZH
SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0
RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2Vs
ZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50
LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3Rh
cnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uKTsKICAgICBBU1NFUlQoc3R5bGUpOwpAQCAtMTQyLDcg
KzE0Miw3IEBAIExheW91dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3QKICAgICBp
ZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoKTsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKKyAg
ICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKIAogICAgIEFmZmluZVRyYW5zZm9y
bSBmcmFnbWVudFRyYW5zZm9ybTsKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdDsKQEAgLTIw
MSw3ICsyMDEsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFjCiAg
ICAgaWYgKCF0ZXh0U2hvdWxkQmVQYWludGVkKHJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBwYXJlbnRSZW5kZXJlci5zdHlsZSgpOworICAg
IGF1dG8mIHN0eWxlID0gcGFyZW50UmVuZGVyZXIuc3R5bGUoKTsKIAogICAgIGludCBzdGFydFBv
c2l0aW9uOwogICAgIGludCBlbmRQb3NpdGlvbjsKQEAgLTI1NiwxNCArMjU2LDE0IEBAIHZvaWQg
U1ZHSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBpZiAoIXRleHRTaG91bGRC
ZVBhaW50ZWQocmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxl
JiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBwYXJl
bnRSZW5kZXJlci5zdHlsZSgpOwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxl
ID0gc3R5bGUuc3ZnU3R5bGUoKTsKIAogICAgIGJvb2wgaGFzRmlsbCA9IHN2Z1N0eWxlLmhhc0Zp
bGwoKTsKICAgICBib29sIGhhc1Zpc2libGVTdHJva2UgPSBzdmdTdHlsZS5oYXNWaXNpYmxlU3Ry
b2tlKCk7CiAKLSAgICBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUgPSAmc3R5bGU7CisgICAg
Y29uc3QgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlID0gJnN0eWxlOwogICAgIGlmIChoYXNT
ZWxlY3Rpb24pIHsKICAgICAgICAgc2VsZWN0aW9uU3R5bGUgPSBwYXJlbnRSZW5kZXJlci5nZXRD
YWNoZWRQc2V1ZG9TdHlsZShTRUxFQ1RJT04pOwogICAgICAgICBpZiAoc2VsZWN0aW9uU3R5bGUp
IHsKQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50
SW5mbyYgCiAgICAgQVNTRVJUKCFtX3BhaW50aW5nUmVzb3VyY2UpOwogfQogCi1ib29sIFNWR0lu
bGluZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJl
ciwgUmVuZGVyU3R5bGUqIHN0eWxlKQorYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjphY3F1aXJlUGFp
bnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBmbG9hdCBzY2FsaW5nRmFj
dG9yLCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSkKIHsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAgICAgQVNTRVJUKHN0eWxlKTsK
QEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGlu
Z1JlCiAgICAgbV9wYWludGluZ1Jlc291cmNlID0gbnVsbHB0cjsKIH0KIAotYm9vbCBTVkdJbmxp
bmVUZXh0Qm94OjpwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNz
Q29udGV4dComIGNvbnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSkKK2Jvb2wgU1ZHSW5saW5lVGV4dEJveDo6cHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQ
YWludGluZyhHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgcmV0dXJuIGFjcXVpcmVQYWludGluZ1Jl
c291cmNlKGNvbnRleHQsIHNjYWxpbmdGYWN0b3IsIHBhcmVudCgpLT5yZW5kZXJlcigpLCBzdHls
ZSk7CiB9CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZXN0b3Jl
R3JhcGhpY3NDbwogICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQsIC8qIHBhdGgg
Ki9udWxscHRyKTsKIH0KIAotVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0
UnVuKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkg
Y29uc3QKK1RleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKIApAQCAtNTA2LDcgKzUwNiw3IEBAIHZvaWQgU1ZHSW5s
aW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2kKICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNv
dXJjZSk7CiAgICAgQVNTRVJUKG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1
bHRNb2RlKTsKIAotICAgIFJlbmRlclN0eWxlJiBkZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9u
UmVuZGVyZXIuc3R5bGUoKTsKKyAgICBhdXRvJiBkZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9u
UmVuZGVyZXIuc3R5bGUoKTsKIAogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSAxOwogICAgIEZv
bnRDYXNjYWRlIHNjYWxlZEZvbnQ7CkBAIC01NDAsNyArNTQwLDcgQEAgdm9pZCBTVkdJbmxpbmVU
ZXh0Qm94OjpwYWludERlY29yYXRpb25XaQogICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJj
ZShjb250ZXh0UHRyLCAmcGF0aCk7CiB9CiAKLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRU
ZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5
bGUsIFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGlu
dCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pCit2b2lkIFNWR0lubGluZVRleHRCb3g6
OnBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKQogewogICAgIGZs
b2F0IHNjYWxpbmdGYWN0b3IgPSByZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NF
UlQoc2NhbGluZ0ZhY3Rvcik7CkBAIC01ODUsNyArNTg1LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjpwYWludFRleHRXaXRoU2hhZAogICAgIH0gd2hpbGUgKHNoYWRvdyk7CiB9CiAKLXZvaWQg
U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYgZnJhZ21lbnQsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0
ZWRUZXh0T25seSkKK3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHls
ZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGJvb2wg
aGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSkKIHsKICAgICBBU1NFUlQo
c3R5bGUpOwogICAgIEFTU0VSVChzZWxlY3Rpb25TdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDIzICs2NCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGFy
dHNOZXdUZXh0Q2h1bmsoYm9vbCBuZXdUZXh0Q2h1bmspIHsgbV9zdGFydHNOZXdUZXh0Q2h1bmsg
PSBuZXdUZXh0Q2h1bms7IH0KIAogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21lbnQo
Y29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdt
ZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGlu
dCBmcmFnbWVudEVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIEZsb2F0UmVj
dCBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGlu
dCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGludCBmcmFnbWVudEVuZFBvc2l0aW9uLCBjb25zdCBS
ZW5kZXJTdHlsZSopIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNTVkdJbmxpbmVUZXh0
Qm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgVGV4dFJ1biBjb25z
dHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7
CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3Qg
U1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7CiAKLSAgICBib29sIGFjcXVpcmVQYWludGluZ1Jlc291
cmNlKEdyYXBoaWNzQ29udGV4dComLCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCYsIFJlbmRlclN0eWxlKik7CisgICAgYm9vbCBhY3F1aXJlUGFpbnRpbmdSZXNvdXJj
ZShHcmFwaGljc0NvbnRleHQqJiwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyQm94TW9kZWxP
YmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcmVsZWFzZVBhaW50aW5nUmVz
b3VyY2UoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFBhdGgqKTsKIAotICAgIGJvb2wgcHJlcGFy
ZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiwgZmxvYXQg
c2NhbGluZ0ZhY3RvciwgUmVuZGVyU3R5bGUqKTsKKyAgICBib29sIHByZXBhcmVHcmFwaGljc0Nv
bnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYsIGZsb2F0IHNjYWxpbmdGYWN0
b3IsIGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCByZXN0b3JlR3JhcGhpY3NDb250ZXh0
QWZ0ZXJUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYpOwogCiAgICAgdm9pZCBwYWludERl
Y29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiwgVGV4dERlY29yYXRpb24sIGNvbnN0IFNWR1RleHRG
cmFnbWVudCYpOwogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29u
dGV4dCYsIFRleHREZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBSZW5kZXJCb3hN
b2RlbE9iamVjdCYgZGVjb3JhdGlvblJlbmRlcmVyKTsKLSAgICB2b2lkIHBhaW50VGV4dFdpdGhT
aGFkb3dzKEdyYXBoaWNzQ29udGV4dCYsIFJlbmRlclN0eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNW
R1RleHRGcmFnbWVudCYsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pOwotICAg
IHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIHNlbGVjdGlvblN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBib29sIGhhc1NlbGVj
dGlvbiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkpOworICAgIHZvaWQgcGFpbnRUZXh0V2l0
aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwg
Y29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlv
bik7CisgICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgUmVuZGVyU3R5
bGUqLCBjb25zdCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFn
bWVudCYsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CiAK
ICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVu
aXQgbGluZUJvdHRvbSwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUGF0aERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUGF0aERhdGEuY3BwCShyZXZpc2lvbiAyMDAwNjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1BhdGhEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVQYXRoRnJvbUNpcmNs
ZUVsZW1lbnQoCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJl
cigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJTdHls
ZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVy
LT5zdHlsZSgpOwogICAgIGZsb2F0IHIgPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0
eWxlLnN2Z1N0eWxlKCkucigpKTsKICAgICBpZiAociA+IDApIHsKICAgICAgICAgZmxvYXQgY3gg
PSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN2Z1N0eWxlKCkuY3goKSwgTGVu
Z3RoTW9kZVdpZHRoKTsKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlUGF0aEZy
b21FbGxpcHNlRWxlbWVudAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gZWxlbWVudC0+
cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47Ci0gICAgUmVu
ZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBy
ZW5kZXJlci0+c3R5bGUoKTsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoZWxl
bWVudCk7CiAgICAgZmxvYXQgcnggPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxl
LnN2Z1N0eWxlKCkucngoKSwgTGVuZ3RoTW9kZVdpZHRoKTsKICAgICBpZiAocnggPD0gMCkKQEAg
LTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVQYXRoRnJvbVJlY3RFbGVtZW50KFNW
CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUm
IHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlci0+
c3R5bGUoKTsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoZWxlbWVudCk7CiAg
ICAgZmxvYXQgd2lkdGggPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLndpZHRo
KCksIExlbmd0aE1vZGVXaWR0aCk7CiAgICAgaWYgKHdpZHRoIDw9IDApCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBT
VkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZQogICAgICAgICBtX3JlbmRlcmluZ0Zs
YWdzIHw9IFJlc3RvcmVHcmFwaGljc0NvbnRleHQ7CiAgICAgfQogCi0gICAgUmVuZGVyU3R5bGUm
IHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IG1fcmVuZGVy
ZXItPnN0eWxlKCk7CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHls
ZS5zdmdTdHlsZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVz
b2x2ZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVRyZWVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgVHJlZVJl
c29sdmVyOjpQYXJlbnQ6OlBhcmVudChEb2N1bWVudCYgZAogewogfQogCi1UcmVlUmVzb2x2ZXI6
OlBhcmVudDo6UGFyZW50KEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiBzdHlsZSwgQ2hh
bmdlIGNoYW5nZSkKK1RyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQoRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdlKQogICAgIDogZWxlbWVu
dCgmZWxlbWVudCkKICAgICAsIHN0eWxlKHN0eWxlKQogICAgICwgY2hhbmdlKGNoYW5nZSkKQEAg
LTExOSw3ICsxMTksNyBAQCB2b2lkIFRyZWVSZXNvbHZlcjo6cG9wU2NvcGUoKQogICAgIHJldHVy
biBtX3Njb3BlU3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IFRyZWVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIFJl
bmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
VHJlZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVu
ZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKQogewogICAgIGlmICghbV9kb2N1bWVudC5oYXZlU3R5
bGVzaGVldHNMb2FkZWQoKSAmJiAhZWxlbWVudC5yZW5kZXJlcigpKSB7CiAgICAgICAgIG1fZG9j
dW1lbnQuc2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOwpAQCAtMjgyLDcgKzI4Miw3
IEBAIHByaXZhdGU6CiB9OwogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAotdm9pZCBUcmVlUmVz
b2x2ZXI6OnB1c2hQYXJlbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIHN0eWxlLCBD
aGFuZ2UgY2hhbmdlKQordm9pZCBUcmVlUmVzb2x2ZXI6OnB1c2hQYXJlbnQoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdlKQogewogICAgIHNj
b3BlKCkuc2VsZWN0b3JGaWx0ZXIucHVzaFBhcmVudCgmZWxlbWVudCk7CiAKQEAgLTM3NSw3ICsz
NzUsNyBAQCB2b2lkIFRyZWVSZXNvbHZlcjo6cmVzb2x2ZUNvbXBvc2VkVHJlZSgpCiAKICAgICAg
ICAgYm9vbCBzaG91bGRSZXNvbHZlRm9yUHNldWRvRWxlbWVudCA9IHNob3VsZFJlc29sdmVQc2V1
ZG9FbGVtZW50KGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpKSB8fCBzaG91bGRSZXNvbHZl
UHNldWRvRWxlbWVudChlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpKTsKIAotICAgICAgICBS
ZW5kZXJTdHlsZSogc3R5bGU7CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZTsKICAg
ICAgICAgQ2hhbmdlIGNoYW5nZTsKIAogICAgICAgICBib29sIHNob3VsZFJlc29sdmUgPSBwYXJl
bnQuY2hhbmdlID49IEluaGVyaXQgfHwgZWxlbWVudC5uZWVkc1N0eWxlUmVjYWxjKCkgfHwgc2hv
dWxkUmVzb2x2ZUZvclBzZXVkb0VsZW1lbnQgfHwgYWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyB8
fCBlbGVtZW50Lmhhc0Rpc3BsYXlDb250ZW50cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVUcmVlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVRyZWVSZXNvbHZlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3
IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VXBkYXRlPiByZXNvbHZlKENoYW5nZSk7
CiAKIHByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVs
ZW1lbnQoRWxlbWVudCYsIFJlbmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSk7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYsIGNvbnN0IFJl
bmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSk7CiAKICAgICB2b2lkIHJlc29sdmVDb21wb3NlZFRy
ZWUoKTsKICAgICBFbGVtZW50VXBkYXRlIHJlc29sdmVFbGVtZW50KEVsZW1lbnQmKTsKQEAgLTc5
LDEzICs3OSwxMyBAQCBwcml2YXRlOgogCiAgICAgc3RydWN0IFBhcmVudCB7CiAgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQ7Ci0gICAgICAgIFJlbmRlclN0eWxlJiBzdHlsZTsKKyAgICAgICAgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlOwogICAgICAgICBDaGFuZ2UgY2hhbmdlOwogICAgICAgICBi
b29sIGRpZFB1c2hTY29wZSB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgZWxlbWVudE5lZWRpbmdT
dHlsZVJlY2FsY0FmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSB7IGZhbHNlIH07CiAKICAg
ICAgICAgUGFyZW50KERvY3VtZW50JiwgQ2hhbmdlKTsKLSAgICAgICAgUGFyZW50KEVsZW1lbnQm
LCBSZW5kZXJTdHlsZSYsIENoYW5nZSk7CisgICAgICAgIFBhcmVudChFbGVtZW50JiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBDaGFuZ2UpOwogICAgIH07CiAKICAgICBTY29wZSYgc2NvcGUoKSB7IHJl
dHVybiBtX3Njb3BlU3RhY2subGFzdCgpOyB9CkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwdXNoRW5jbG9zaW5nU2NvcGUoKTsKICAgICB2b2lkIHBvcFNjb3BlKCk7CiAKLSAg
ICB2b2lkIHB1c2hQYXJlbnQoRWxlbWVudCYsIFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKKyAgICB2
b2lkIHB1c2hQYXJlbnQoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKICAg
ICB2b2lkIHBvcFBhcmVudCgpOwogICAgIHZvaWQgcG9wUGFyZW50c1RvRGVwdGgodW5zaWduZWQg
ZGVwdGgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDExICs2MSwyNCBAQCBib29sIFVwZGF0ZTo6dGV4dFVwZGF0ZShjb25z
dCBUZXh0JiB0ZXh0CiAgICAgcmV0dXJuIG1fdGV4dHMuY29udGFpbnMoJnRleHQpOwogfQogCi1S
ZW5kZXJTdHlsZSogVXBkYXRlOjplbGVtZW50U3R5bGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkg
Y29uc3QKK2NvbnN0IFJlbmRlclN0eWxlKiBVcGRhdGU6OmVsZW1lbnRTdHlsZShjb25zdCBFbGVt
ZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGlmIChhdXRvKiB1cGRhdGUgPSBlbGVtZW50VXBk
YXRlKGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gdXBkYXRlLT5zdHlsZS5nZXQoKTsKLSAgICBy
ZXR1cm4gZWxlbWVudC5yZW5kZXJTdHlsZSgpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVu
dC5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiAmcmVuZGVyZXItPnN0eWxlKCk7Cit9CisKK1JlbmRlclN0eWxlKiBVcGRh
dGU6OmVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JiBlbGVtZW50KQoreworICAgIGlmIChhdXRv
KiB1cGRhdGUgPSBlbGVtZW50VXBkYXRlKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gdXBkYXRl
LT5zdHlsZS5nZXQoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsK
KyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
JnJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKTsKIH0KIAogdm9pZCBVcGRhdGU6OmFkZEVsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCwgRWxlbWVudCogcGFyZW50LCBFbGVtZW50VXBkYXRlJiYgZWxlbWVu
dFVwZGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNyArNjMsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHRleHRVcGRhdGUoY29uc3Qg
VGV4dCYpIGNvbnN0OwogCi0gICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBFbGVt
ZW50JikgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBF
bGVtZW50JikgY29uc3Q7CisgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBFbGVt
ZW50Jik7CiAKICAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzQ2LDcgKzc0Niw3IEBAIHZvaWQgU1ZHRWxlbWVudDo6c3luY2hyb25pemVTeXN0
ZW1MYW5ndWEKICAgICBjb250ZXh0RWxlbWVudC0+c3luY2hyb25pemVTeXN0ZW1MYW5ndWFnZSgp
OwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFNWR0VsZW1lbnQ6OnJlc29sdmVDdXN0b21T
dHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVs
ZW1lbnRTdHlsZT4gU1ZHRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIC8vIElmIHRoZSBl
bGVtZW50IGlzIGluIGEgPHVzZT4gdHJlZSB3ZSBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIGRlZmlu
aXRpb24gdHJlZS4KICAgICBpZiAoYXV0byogc3R5bGVFbGVtZW50ID0gdGhpcy0+Y29ycmVzcG9u
ZGluZ0VsZW1lbnQoKSkKQEAgLTc3MywxMiArNzczLDEyIEBAIHZvaWQgU1ZHRWxlbWVudDo6c2V0
VXNlT3ZlcnJpZGVDb21wdXRlZFMKICAgICAgICAgbV9zdmdSYXJlRGF0YS0+c2V0VXNlT3ZlcnJp
ZGVDb21wdXRlZFN0eWxlKHZhbHVlKTsKIH0KIAotUmVuZGVyU3R5bGUqIFNWR0VsZW1lbnQ6OmNv
bXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKK2NvbnN0IFJlbmRl
clN0eWxlKiBTVkdFbGVtZW50Ojpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRT
cGVjaWZpZXIpCiB7CiAgICAgaWYgKCFtX3N2Z1JhcmVEYXRhIHx8ICFtX3N2Z1JhcmVEYXRhLT51
c2VPdmVycmlkZUNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIEVsZW1lbnQ6OmNvbXB1
dGVkU3R5bGUocHNldWRvRWxlbWVudFNwZWNpZmllcik7CiAKLSAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBudWxscHRyOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IG51bGxwdHI7CiAgICAgaWYgKEVsZW1lbnQqIHBhcmVudCA9IHBhcmVudE9yU2hhZG93SG9zdEVs
ZW1lbnQoKSkgewogICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIo
KSkKICAgICAgICAgICAgIHBhcmVudFN0eWxlID0gJnJlbmRlcmVyLT5zdHlsZSgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc3luY2hyb25pemVBbmltYXRlZFNWR0F0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJikgY29uc3Q7CiAgICAgc3RhdGljIHZvaWQgc3luY2hyb25pemVBbGxBbmltYXRl
ZFNWR0F0dHJpYnV0ZShTVkdFbGVtZW50Kik7CiAgCi0gICAgT3B0aW9uYWw8RWxlbWVudFN0eWxl
PiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHls
ZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+
IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIHZv
aWQgc3luY2hyb25pemVSZXF1aXJlZEZlYXR1cmVzKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50
KTsKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucyhTVkdFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCk7CkBAIC0xODEsNyArMTgxLDcgQEAgcHJvdGVjdGVkOgogICAg
IGNsYXNzIEluc3RhbmNlSW52YWxpZGF0aW9uR3VhcmQ7CiAKIHByaXZhdGU6Ci0gICAgUmVuZGVy
U3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETykgZmluYWw7CisgICAgY29u
c3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETykgZmluYWw7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTdXBwb3J0ZWQoU3RyaW5nSW1wbCogZmVhdHVyZSwgU3Ry
aW5nSW1wbCogdmVyc2lvbikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdF
bGVtZW50UmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50UmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTAgKzU5LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuICptX2FuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllczsKICAg
ICB9CiAKLSAgICBSZW5kZXJTdHlsZSogb3ZlcnJpZGVDb21wdXRlZFN0eWxlKEVsZW1lbnQmIGVs
ZW1lbnQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKKyAgICBjb25zdCBSZW5kZXJTdHlsZSog
b3ZlcnJpZGVDb21wdXRlZFN0eWxlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSkKICAgICB7CiAgICAgICAgIGlmICghbV91c2VPdmVycmlkZUNvbXB1dGVk
U3R5bGUpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICBpZiAoIW1fb3ZlcnJpZGVDb21wdXRlZFN0eWxlIHx8IG1fbmVlZHNPdmVycmlk
ZUNvbXB1dGVkU3R5bGVVcGRhdGUpIHsKICAgICAgICAgICAgIC8vIFRoZSBzdHlsZSBjb21wdXRl
ZCBoZXJlIGNvbnRhaW5zIG5vIENTUyBBbmltYXRpb25zL1RyYW5zaXRpb25zIG9yIFNNSUwgaW5k
dWNlZCBydWxlcyAtIHRoaXMgaXMgbmVlZGVkIHRvIGNvbXB1dGUgdGhlICJiYXNlIHZhbHVlIiBm
b3IgdGhlIFNNSUwgYW5pbWF0aW9uIHNhbmR3aGljaCBtb2RlbC4KICAgICAgICAgICAgIG1fb3Zl
cnJpZGVDb21wdXRlZFN0eWxlID0gZWxlbWVudC5zdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVt
ZW50KGVsZW1lbnQsIHBhcmVudFN0eWxlLCBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCkucmVu
ZGVyU3R5bGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNw
cAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgQWZmaW5lVHJhbnNmb3Jt
IFNWR0dyYXBoaWNzRWxlbWVudDo6Z2V0UwogQWZmaW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNzRWxl
bWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIG1hdHJpeDsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRl
cmVyKCktPnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyZXIoKSA/
ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKIAogICAgIC8vIElmIENTUyBwcm9wZXJ0
eSB3YXMgc2V0LCB1c2UgdGhhdCwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGF0dHJpYnV0ZSAoaWYg
c2V0KS4KICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmhhc1RyYW5zZm9ybSgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyMiw3ICsyMjIsNyBAQCBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVG
cm9tCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIHJlbmRl
clN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQpCitzdGF0
aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmlu
Zyhjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMzYsMTIgKzIzNiwxMiBAQCBzdGF0aWMgaW5saW5lIFJl
bmRlclN0eWxlKiByZW5kZXJTdHlsZUZvCiAKICAgICAvLyBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0
IGEgUmVuZGVyU1ZHUm9vdCByZW5kZXJlciwgY2FycnlpbmcgYSBzdHlsZS4KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAog
ZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRU1TKGZs
b2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOworICAgIGF1
dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAg
ICBpZiAoIXN0eWxlKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAg
IHJldHVybiAwOwpAQCAtMjU4LDcgKzI1OCw3IEBAIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNv
bnZlcnRWYWx1ZUZyb20KIAogZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJv
bUVNU1RvVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsK
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyht
X2NvbnRleHQpOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZp
bmcobV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBP
UlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjY5LDcgKzI2OSw3IEBAIGZsb2F0IFNW
R0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb20KIAogZmxvYXQgU1ZHTGVuZ3RoQ29udGV4
dDo6Y29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRVhTKGZsb2F0IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJTdHlsZUZv
ckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5
bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKSB7CiAgICAg
ICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjg4LDcg
KzI4OCw3IEBAIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb20KIAogZmxv
YXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVYU1RvVXNlclVuaXRzKGZsb2F0
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOworICAgIGF1dG8q
IHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBp
ZiAoIXN0eWxlKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIGJvb2wgU1ZHU3RvcEVsZW1lbnQ6OnJlbmRlcmVy
SXNOZWVkZWQoY28KIAogQ29sb3IgU1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09w
YWNpdHkoKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAm
cmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJl
cigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlz
IGNoZWNrIGZvciBudWxsIHN0eWxlIGV4aXN0cyB0byBhZGRyZXNzIEJ1ZyBXSyA5MDgxNCwgYSBy
YXJlIGNyYXNoIGNvbmRpdGlvbiBpbgogICAgIC8vIHdoaWNoIHRoZSByZW5kZXJlciBvciBzdHls
ZSBpcyBudWxsLiBUaGlzIGVudGlyZSBjbGFzcyBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwgKEJ1
ZyBXSyA4Njk0MSkKICAgICAvLyBhbmQgd2Ugd2lsbCB0b2xlcmF0ZSB0aGlzIG51bGwgY2hlY2sg
dW50aWwgdGhlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBSZWY8U1ZHVGV4dEVsZW1lbnQ+IFNWR1Rl
eHRFbGVtZW50OjpjcmVhCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmFuaW1hdGVk
TG9jYWxUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgp
IDogbnVsbHB0cjsKKyAgICBhdXRvKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+
c3R5bGUoKSA6IG51bGxwdHI7CiAKICAgICAvLyBpZiBDU1MgcHJvcGVydHkgd2FzIHNldCwgdXNl
IHRoYXQsIG90aGVyd2lzZSBmYWxsYmFjayB0byBhdHRyaWJ1dGUgKGlmIHNldCkKICAgICBpZiAo
c3R5bGUgJiYgc3R5bGUtPmhhc1RyYW5zZm9ybSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgyMyw3ICs4MjMsNyBAQCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZShJ
bmNsdWRlCiAgICAgICAgIGF1dG8mIHBvc3RMYXlvdXREYXRhID0gcmVzdWx0LnBvc3RMYXlvdXRE
YXRhKCk7CiAgICAgICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7CiAgICAgICAgICAgICBO
b2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0g
RWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZmcmFtZSwgbm9kZVRvUmVtb3ZlKSkgewor
ICAgICAgICAgICAgaWYgKGF1dG8qIHN0eWxlID0gRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0
YXJ0KCZmcmFtZSwgbm9kZVRvUmVtb3ZlKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+
Zm9udENhc2NhZGUoKS53ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkKICAgICAgICAgICAgICAg
ICAgICAgcG9zdExheW91dERhdGEudHlwaW5nQXR0cmlidXRlcyB8PSBBdHRyaWJ1dGVCb2xkOwog
ICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS5pdGFsaWMoKSA9PSBGb250
SXRhbGljT24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277363</attachid>
            <date>2016-04-26 06:08:49 -0700</date>
            <delta_ts>2016-04-26 07:06:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>const-renderstyle-6.patch</filename>
            <type>text/plain</type>
            <size>161685</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNCw3
ICsxMTM0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU3R5bGVSYW5nZQogewog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVu
ZGVyZXIgPSByZW5kZXJlcjsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyZXItPnN0
eWxlKCk7CisgICAgYXV0byogc3R5bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CiAKICAgICAvLyB0
cmF2ZXJzZSBiYWNrd2FyZCBieSByZW5kZXJlciB0byBsb29rIGZvciBzdHlsZSBjaGFuZ2UKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogciA9IHJlbmRlcmVyLT5wcmV2aW91c0luUHJlT3JkZXIoKTsg
cjsgciA9IHItPnByZXZpb3VzSW5QcmVPcmRlcigpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0QXR0
cmlidXRlU2V0RgogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBvYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gJnJlbmRl
cmVyLT5zdHlsZSgpOworICAgIGF1dG8qIHN0eWxlID0gJnJlbmRlcmVyLT5zdHlsZSgpOwogCiAg
ICAgQXRrQXR0cmlidXRlU2V0KiByZXN1bHQgPSBudWxscHRyOwogICAgIEdVbmlxdWVQdHI8Z2No
YXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoIiVpIiwgc3R5bGUtPmZvbnRTaXplKCkpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDk5
LDcgKzQ5OSw3IEBAIC0gKFdLUXVhZClpbm5lckZyYW1lUXVhZCAgICAgICAvLyB0YWtlcyAKICAg
ICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZW1wdHlRdWFkKCk7CiAKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwogICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSByZW5kZXJlci0+YWJz
b2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSAvKiB1c2UgdHJhbnNmb3JtcyovKTsKIAogICAgIGJv
dW5kaW5nQm94Lm1vdmUoc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLmJvcmRlclRvcFdp
ZHRoKCkpOwpAQCAtNTEzLDcgKzUxMyw3IEBAIC0gKFdLUXVhZClpbm5lckZyYW1lUXVhZCAgICAg
ICAvLyB0YWtlcyAKIC0gKGZsb2F0KWNvbXB1dGVkRm9udFNpemUKIHsKICAgICBXZWJDb3JlOjpO
b2RlICpub2RlID0gY29yZShzZWxmKTsKLSAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSBub2RlLT5y
ZW5kZXJTdHlsZSgpOworICAgIGF1dG8gKnN0eWxlID0gbm9kZS0+cmVuZGVyU3R5bGUoKTsKICAg
ICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMC4wZjsKICAgICByZXR1cm4gc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MDAsNyArNzAwLDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxp
c3Q+IGNyZWF0ZVBvc2l0aW9uTAogICAgIHJldHVybiBwb3NpdGlvbkxpc3Q7CiB9CiAKLXN0YXRp
YyBSZWZQdHI8Q1NTVmFsdWU+IHBvc2l0aW9uT2Zmc2V0VmFsdWUoUmVuZGVyU3R5bGUmIHN0eWxl
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwb3Np
dGlvbk9mZnNldFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEKQogewogICAgIExlbmd0aCBsZW5ndGg7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlE
KSB7CkBAIC03MzcsNyArNzM3LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcG9zaXRpb25P
ZmZzZXRWYQogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJT
dHlsZSogc3R5bGUsIGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKK1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENvbG9y
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgbG9vayBhdCB2aXNpdGVkIGluZm9ybWF0aW9u
LCBzbyB0aGF0IGNvbXB1dGVkIHN0eWxlIGRvZXNuJ3QgZXhwb3NlIHRoYXQuCiAgICAgaWYgKCFj
b2xvci5pc1ZhbGlkKCkpCkBAIC0xMTQzLDcgKzExNDMsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVl
TGlzdD4gZ2V0VHJhbnNpdGlvblByCiB9CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
c3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IHNjcm9sbFNuYXBEZXN0aW5hdGlvbihSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IExlbmd0aFNpemUmIGRlc3RpbmF0aW9uKQorc3RhdGljIFJlZjxDU1NW
YWx1ZUxpc3Q+IHNjcm9sbFNuYXBEZXN0aW5hdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IExlbmd0aFNpemUmIGRlc3RpbmF0aW9uKQogewogICAgIGF1dG8gbGlzdCA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBsaXN0LmdldCgpLmFwcGVuZCh6
b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKGRlc3RpbmF0aW9uLndpZHRoKCksIHN0eWxl
KSk7CkBAIC0xMTUxLDcgKzExNTEsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xs
U25hcERlc3RpCiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IHNj
cm9sbFNuYXBQb2ludHMoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTY3JvbGxTbmFwUG9pbnRz
KiBwb2ludHMpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxTbmFwUG9pbnRzKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgU2Nyb2xsU25hcFBvaW50cyogcG9pbnRzKQogewogICAg
IGlmICghcG9pbnRzKQogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKQEAgLTExNjYsNyArMTE2Niw3IEBA
IHN0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBQb2ludHMoUmUKICAgICByZXR1cm4gV1RG
TW92ZShsaXN0KTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcENvb3JkaW5h
dGVzKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPExlbmd0aFNpemU+JiBjb29yZGlu
YXRlcykKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBDb29yZGluYXRlcyhjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFZlY3RvcjxMZW5ndGhTaXplPiYgY29vcmRpbmF0ZXMp
CiB7CiAgICAgaWYgKGNvb3JkaW5hdGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7
CkBAIC0xODA3LDcgKzE4MDcsNyBAQCBzdGF0aWMgdm9pZCBsb2dVbmltcGxlbWVudGVkUHJvcGVy
dHlJRChDCiAgICAgTE9HX0VSUk9SKCJXZWJLaXQgZG9lcyBub3QgeWV0IGltcGxlbWVudCBnZXRD
b21wdXRlZFN0eWxlIGZvciAnJXMnLiIsIGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eUlEKSk7CiB9
CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0eWxlLT5mb250Q2FzY2FkZSgpLmZhbWlseUNvdW50KCk7ICsraSkKQEAgLTE4MTUsNyArMTgx
NSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVMKICAgICByZXR1
cm4gbGlzdDsKIH0KIAotc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZUhlaWdodEZy
b21TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiBsaW5lSGVpZ2h0RnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICBM
ZW5ndGggbGVuZ3RoID0gc3R5bGUubGluZUhlaWdodCgpOwogICAgIGlmIChsZW5ndGguaXNOZWdh
dGl2ZSgpKSAvLyBJZiB0cnVlLCBsaW5lLWhlaWdodCBub3Qgc2V0OyB1c2UgdGhlIGZvbnQncyBs
aW5lIHNwYWNpbmcuCkBAIC0xODMwLDE5ICsxODMwLDE5IEBAIHN0YXRpYyBSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IGxpbmVIZWlnaHQKICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShm
bG9hdFZhbHVlRm9yTGVuZ3RoKGxlbmd0aCwgMCksIHN0eWxlKTsKIH0KIAotc3RhdGljIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gZm9udFNpemVGcm9tU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQor
c3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFNpemVGcm9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlKQogewogICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0
eWxlLmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpLCBzdHlsZSk7CiB9CiAKLXN0YXRp
YyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRTdHlsZUZyb21TdHlsZShSZW5kZXJTdHlsZSog
c3R5bGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U3R5bGVGcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkuaXRhbGljKCkpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUl0YWxpYyk7CiAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFs
KTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRGcm9tU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFZhcmlhbnRGcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkudmFyaWFudFNldHRpbmdzKCkuaXNBbGxOb3JtYWwoKSkKICAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9y
bWFsKTsKQEAgLTIwMjksNyArMjAyOSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJp
YW50RnJvbVN0eWwKICAgICByZXR1cm4gV1RGTW92ZShsaXN0KTsKIH0KIAotc3RhdGljIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdodEZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUp
CitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250V2VpZ2h0RnJvbVN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBzd2l0Y2ggKHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS53ZWlnaHQoKSkgewogICAgIGNhc2UgRm9udFdlaWdodDEwMDoKQEAgLTIwNTUsNyArMjA1
NSw3IEBAIHN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRXZWlnaHQKICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb3JtYWwpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250U3ludGhlc2lzRnJvbVN0
eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRTeW50aGVz
aXNGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIGlmIChzdHlsZS5m
b250RGVzY3JpcHRpb24oKS5mb250U3ludGhlc2lzKCkgPT0gRm9udFN5bnRoZXNpc05vbmUpCiAg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOwpAQCAtMjA3Miw3ICsyMDcyLDcgQEAgdHlwZWRlZiBjb25zdCBM
ZW5ndGgmIChSZW5kZXJTdHlsZTo6KlJlbgogdHlwZWRlZiBMYXlvdXRVbml0IChSZW5kZXJCb3hN
b2RlbE9iamVjdDo6KlJlbmRlckJveENvbXB1dGVkQ1NTVmFsdWVHZXR0ZXIpKCkgY29uc3Q7CiAK
IHRlbXBsYXRlPFJlbmRlclN0eWxlTGVuZ3RoR2V0dGVyIGxlbmd0aEdldHRlciwgUmVuZGVyQm94
Q29tcHV0ZWRDU1NWYWx1ZUdldHRlciBjb21wdXRlZENTU1ZhbHVlR2V0dGVyPgotaW5saW5lIFJl
ZlB0cjxDU1NWYWx1ZT4gem9vbUFkanVzdGVkUGFkZGluZ09yTWFyZ2luUGl4ZWxWYWx1ZShSZW5k
ZXJTdHlsZSYgc3R5bGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitpbmxpbmUgUmVmUHRyPENT
U1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZhbHVlKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBMZW5ndGggdW56
b29temVkTGVuZ3RoID0gKHN0eWxlLipsZW5ndGhHZXR0ZXIpKCk7CiAgICAgaWYgKCFpczxSZW5k
ZXJCb3g+KHJlbmRlcmVyKSB8fCB1bnpvb216ZWRMZW5ndGguaXNGaXhlZCgpKQpAQCAtMjA4MSw3
ICsyMDgxLDcgQEAgaW5saW5lIFJlZlB0cjxDU1NWYWx1ZT4gem9vbUFkanVzdGVkUGFkZAogfQog
CiB0ZW1wbGF0ZTxSZW5kZXJTdHlsZUxlbmd0aEdldHRlciBsZW5ndGhHZXR0ZXI+Ci1pbmxpbmUg
Ym9vbCBwYWRkaW5nT3JNYXJnaW5Jc1JlbmRlcmVyRGVwZW5kZW50KFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK2lubGluZSBib29sIHBhZGRpbmdPck1hcmdpbklz
UmVuZGVyZXJEZXBlbmRlbnQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogewogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTM5LDcgKzIxMzksNyBAQCBzdGF0aWMgQ1NTVmFs
dWVJRCBjb252ZXJ0VG9SZWdpb25CcmVhayhCCiB9CiAjZW5kaWYKICAgICAKLXN0YXRpYyBib29s
IGlzTGF5b3V0RGVwZW5kZW50KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorc3RhdGljIGJvb2wgaXNMYXlvdXREZXBl
bmRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgpAQCAtMjI2Nyw3ICsyMjY3LDcgQEAgc3RhdGljIGlu
bGluZSBib29sIHVwZGF0ZVN0eWxlSWZOZWVkZWRGbwogICAgIHJldHVybiB0cnVlOwogfQogCi1z
dGF0aWMgaW5saW5lIFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5bGVGb3JQcm9wZXJ0eShO
b2RlKiBzdHlsZWROb2RlLCBQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIG93bmVkU3R5
bGUpCitzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5bGVG
b3JQcm9wZXJ0eShOb2RlKiBzdHlsZWROb2RlLCBQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lm
aWVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4mIG93bmVkU3R5bGUpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHN0eWxlZE5v
ZGUtPnJlbmRlcmVyKCk7CiAKQEAgLTIzNzMsNyArMjM3Myw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4g
Q29tcHV0ZWRTdHlsZUV4dHJhY3RvcjoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG93bmVkU3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gbnVsbHB0cjsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSBudWxscHRy
OwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBudWxscHRyOwogICAgIGJvb2wgZm9yY2VG
dWxsTGF5b3V0ID0gZmFsc2U7CiAgICAgaWYgKHVwZGF0ZUxheW91dCkgewpAQCAtMzg2MSw3ICsz
ODYxLDcgQEAgdW5zaWduZWQgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpsZQogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBu
b2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcik7CisgICAgYXV0byog
c3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcik7CiAg
ICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM4ODAsNyArMzg4MCw3IEBA
IFN0cmluZyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246Oml0ZW0KICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOworICAgIGF1
dG8qIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIp
OwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIApA
QCAtMzg5OSw3ICszODk5LDcgQEAgYm9vbCBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0
eU1hdAogewogICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Rm9udFNpemUgJiYgaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgbV9ub2RlKSB7CiAgICAgICAgIG1fbm9kZS0+
ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAg
ICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVk
b0VsZW1lbnRTcGVjaWZpZXIpKSB7CisgICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IG1fbm9kZS0+
Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpKSB7CiAgICAgICAgICAgICBp
ZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5r
ZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkgJiYgcHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IHNpemVJZGVudGlmaWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCwxMCArNzAsMTAgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBzdHlsZWRO
b2RlKCkgY29uc3Q7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN2Z1Byb3BlcnR5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgRVVwZGF0ZUxheW91dCkgY29uc3Q7Ci0gICAgUmVmUHRyPFNWR1BhaW50PiBh
ZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNWR1BhaW50PiwgUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICBSZWZQdHI8U1ZHUGFpbnQ+IGFkanVzdFNWR1BhaW50Rm9yQ3Vy
cmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFpbnQ+LCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0
OwogCiAgICAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gdmFsdWVGb3JTaGFkb3coY29uc3QgU2hhZG93
RGF0YSosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlJiwgQWRqdXN0UGl4ZWxWYWx1
ZXNGb3JDb21wdXRlZFN0eWxlID0gQWRqdXN0UGl4ZWxWYWx1ZXMpOwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiwgY29u
c3QgQ29sb3ImKSBjb25zdDsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGN1cnJlbnRD
b2xvck9yVmFsaWRDb2xvcihjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IENvbG9yJikgY29uc3Q7
CiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBnZXRDU1NQcm9wZXJ0eVZhbHVlc0ZvclNob3J0
aGFuZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYpIGNvbnN0OwogICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldENTU1Byb3BlcnR5VmFsdWVzRm9yU2lkZXNTaG9ydGhh
bmQoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGZsb2F0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGE6Onpvb20oKSAKIGRvdWJsZSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2
aWV3cG9ydFdpZHRoRmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21w
dXRpbmdGb250U2l6ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwor
ICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0
VW5pdHMoKTsKIAogICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKQEAg
LTU3LDcgKzU3LDcgQEAgZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwbwog
ZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwb3J0SGVpZ2h0RmFjdG9yKCkg
Y29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21wdXRpbmdGb250U2l6ZSkKLSAgICAg
ICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOworICAgICAgICBjb25zdF9jYXN0PFJl
bmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGlmICgh
bV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKQEAgLTY4LDcgKzY4LDcgQEAgZG91Ymxl
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwbwogZG91YmxlIENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGE6OnZpZXdwb3J0TWluRmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHls
ZSAmJiAhbV9jb21wdXRpbmdGb250U2l6ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3Bv
cnRVbml0cygpOworICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNl
dEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTgwLDcgKzgwLDcgQEAgZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGE6OnZpZXdwbwogZG91YmxlIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OnZpZXdwb3J0TWF4
RmFjdG9yKCkgY29uc3QKIHsKICAgICBpZiAobV9zdHlsZSAmJiAhbV9jb21wdXRpbmdGb250U2l6
ZSkKLSAgICAgICAgbV9zdHlsZS0+c2V0SGFzVmlld3BvcnRVbml0cygpOworICAgICAgICBjb25z
dF9jYXN0PFJlbmRlclN0eWxlKj4obV9zdHlsZSktPnNldEhhc1ZpZXdwb3J0VW5pdHMoKTsKIAog
ICAgIGlmICghbV9yZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBSZW5kZXJWaWV3OwogCiBjbGFz
cyBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIHsKIHB1YmxpYzoKLSAgICBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSwgY29uc3QgUmVuZGVyVmlldyogcmVuZGVyVmlldywgZmxvYXQgem9vbSwgYm9vbCBjb21w
dXRpbmdGb250U2l6ZSA9IGZhbHNlKQorICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25z
dCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBmbG9hdCB6b29tLCBib29sIGNvbXB1dGluZ0ZvbnRT
aXplID0gZmFsc2UpCiAgICAgICAgIDogbV9zdHlsZShzdHlsZSkKICAgICAgICAgLCBtX3Jvb3RT
dHlsZShyb290U3R5bGUpCiAgICAgICAgICwgbV9yZW5kZXJWaWV3KHJlbmRlclZpZXcpCkBAIC01
Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHpvb20gPiAwKTsKICAgICB9CiAK
LSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgY29uc3QgUmVuZGVyVmlldyogcmVuZGVyVmlldywgYm9v
bCBjb21wdXRpbmdGb250U2l6ZSA9IGZhbHNlKQorICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxl
LCBjb25zdCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0g
ZmFsc2UpCiAgICAgICAgIDogbV9zdHlsZShzdHlsZSkKICAgICAgICAgLCBtX3Jvb3RTdHlsZShy
b290U3R5bGUpCiAgICAgICAgICwgbV9yZW5kZXJWaWV3KHJlbmRlclZpZXcpCkBAIC02Nyw3ICs2
Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KICAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290U3R5bGU7IH0KICAgICBmbG9hdCB6b29tKCkgY29u
c3Q7CiAgICAgYm9vbCBjb21wdXRpbmdGb250U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0
aW5nRm9udFNpemU7IH0KQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9z
dHlsZTsKICAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9yb290U3R5bGU7CiAgICAgY29uc3QgUmVu
ZGVyVmlldyogbV9yZW5kZXJWaWV3OwogICAgIGZsb2F0IG1fem9vbTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBA
QCBSZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6c3R5bGUoKSBjb25zCiAgICAgcmV0dXJuIG1f
cmVzb2x2ZXItPnN0eWxlKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpyb290
RWxlbWVudFN0eWxlKCkgY29uc3QKK2NvbnN0IFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpy
b290RWxlbWVudFN0eWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCShyZXZp
c2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gc2ltaWxhciB0byBo
b3cgUGFpbnRJbmZvL0xheW91dFN0YXRlIGNhY2hlIHZhbHVlcyBuZWVkZWQgZm9yCiAgICAgLy8g
dGhlIGN1cnJlbnQgcGFpbnQvbGF5b3V0LgogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
OwotICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3Q7CisgICAgY29uc3Qg
UmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdDsKICAgICBib29sIHVzZVNWR1pv
b21SdWxlcygpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2Yg
c29tZSBzb3J0IG9mIFN0eWxlSW1hZ2VDYWNoZSBvYmplY3Qgd2hpY2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODUsMTAgKzg1LDEwIEBAIE1lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFs
dWF0b3IKIHsKIH0KIAotTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihj
b25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSogZnJhbWUsIFJlbmRlclN0eWxl
KiBzdHlsZSkKK01lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3Qg
U3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgRnJhbWUqIGZyYW1lLCBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUpCiAgICAgOiBtX21lZGlhVHlwZShhY2NlcHRlZE1lZGlhVHlwZSkKICAgICAsIG1f
ZnJhbWUoZnJhbWUpCi0gICAgLCBtX3N0eWxlKFdURk1vdmUoc3R5bGUpKQorICAgICwgbV9zdHls
ZShzdHlsZSkKICAgICAsIG1fZXhwUmVzdWx0KGZhbHNlKSAvLyBkb2Vzbid0IG1hdHRlciB3aGVu
IHdlIGhhdmUgbV9mcmFtZSBhbmQgbV9zdHlsZQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4
MCw3IEBAIHB1YmxpYzoKIAogICAgIC8qKiBDcmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0
ZXMgZnVsbCBtZWRpYSBxdWVyaWVzCiAgICAgICovCi0gICAgTWVkaWFRdWVyeUV2YWx1YXRvcihj
b25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSosIFJlbmRlclN0eWxlKik7Cisg
ICAgTWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBG
cmFtZSosIGNvbnN0IFJlbmRlclN0eWxlKik7CiAKICAgICB+TWVkaWFRdWVyeUV2YWx1YXRvcigp
OwogCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbWVk
aWFUeXBlOwogICAgIEZyYW1lKiBtX2ZyYW1lIHsgbnVsbHB0ciB9OyAvLyBub3Qgb3duZWQKLSAg
ICBSZW5kZXJTdHlsZSogbV9zdHlsZSB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBSZW5kZXJTdHls
ZSogbV9zdHlsZSB7IG51bGxwdHIgfTsKICAgICBib29sIG1fZXhwUmVzdWx0OwogfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5
Myw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHN0cm9rZURhc2hBcnJheVQKICAgICByZXR1
cm4gbGlzdDsKIH0KIAotUmVmUHRyPFNWR1BhaW50PiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjph
ZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNWR1BhaW50PiBuZXdQYWlu
dCwgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorUmVmUHRyPFNWR1BhaW50PiBDb21wdXRlZFN0
eWxlRXh0cmFjdG9yOjphZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xvcihQYXNzUmVmUHRyPFNW
R1BhaW50PiBuZXdQYWludCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAg
IFJlZlB0cjxTVkdQYWludD4gcGFpbnQgPSBuZXdQYWludDsKICAgICBpZiAocGFpbnQtPnBhaW50
VHlwZSgpID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUiB8fCBwYWludC0+
cGFpbnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfVVJJX0NVUlJFTlRDT0xPUikK
QEAgLTExMSw3ICsxMTEsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6CiAgICAgaWYgKHVwZGF0ZUxheW91dCkKICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS51cGRh
dGVMYXlvdXQoKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5
bGUoKTsKKyAgICBhdXRvKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUoKTsKICAgICBpZiAo
IXN0eWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1NvdXJjZVNpemVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U291cmNlU2l6ZUxpc3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvU291cmNlU2l6ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgbWF0Y2goc3RkOjp1bmlxdWVfcHRy
PE1lZGlhUXVlcnlFeHA+JiYgZXhwcmVzc2lvbiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBGcmFtZSog
ZnJhbWUpCitzdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4m
JiBleHByZXNzaW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEZyYW1lKiBmcmFtZSkKIHsK
ICAgICBpZiAoZXhwcmVzc2lvbi0+bWVkaWFGZWF0dXJlKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTQ3LDEyICs0NywxMiBAQCBzdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVu
aXF1ZV9wdHI8TWVkaWFRCiAgICAgcmV0dXJuIG1lZGlhUXVlcnlFdmFsdWF0b3IuZXZhbChtZWRp
YVF1ZXJ5U2V0LmdldCgpKTsKIH0KIAotc3RhdGljIGZsb2F0IGRlZmF1bHRMZW5ndGgoUmVuZGVy
U3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQorc3RhdGljIGZsb2F0IGRlZmF1bHRMZW5n
dGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQogewogICAgIHJl
dHVybiBjbGFtcFRvPGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5n
dGhEb3VibGUoQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgmc3R5bGUsICZzdHlsZSwgdmlldyks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcsIDEwMC4wKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBj
b21wdXRlTGVuZ3RoKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJW
aWV3KiB2aWV3KQorc3RhdGljIGZsb2F0IGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCiB7CiAgICAgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSgmc3R5bGUsICZzdHlsZSwgdmlldyk7
CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKQEAgLTcwLDcgKzcwLDcg
QEAgZmxvYXQgcGFyc2VTaXplc0F0dHJpYnV0ZShTdHJpbmdWaWV3IHNpegogewogICAgIGlmICgh
dmlldykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gdmlldy0+
c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHZpZXctPnN0eWxlKCk7CiAgICAgZm9yIChhdXRv
JiBzb3VyY2VTaXplIDogQ1NTUGFyc2VyKENTU1N0cmljdE1vZGUpLnBhcnNlU2l6ZXNBdHRyaWJ1
dGUoc2l6ZXNBdHRyaWJ1dGUpKSB7CiAgICAgICAgIGlmIChtYXRjaChXVEZNb3ZlKHNvdXJjZVNp
emUuZXhwcmVzc2lvbiksIHN0eWxlLCBmcmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gY29tcHV0
ZUxlbmd0aChzb3VyY2VTaXplLmxlbmd0aC5nZXQoKSwgc3R5bGUsIHZpZXcpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NzUsNyArNTc1LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMg
Y29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSkKKyAgICBz
dGF0aWMgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUt
PmJvcmRlckltYWdlKCkgOiBzdHlsZS0+bWFza0JveEltYWdlKCk7CiAgICAgfQpAQCAtNjY0LDcg
KzY2NCw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmkKIAogaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDbGlwKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpOworICAgIGF1dG8qIHBhcmVudFN0eWxlID0gc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmhhc0NsaXAoKSkK
ICAgICAgICAgcmV0dXJuIGFwcGx5SW5pdGlhbENsaXAoc3R5bGVSZXNvbHZlcik7CiAgICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKHBhcmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVu
dFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5
bGUtPmNsaXBMZWZ0KCkpOwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAgdGVtcGxhdGUgPFN0eWxlQnVp
bGRlckN1c3RvbTo6Q291bnRlckJlaAogaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCiB7CiAgICAg
Q291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3ND
b3VudGVyRGlyZWN0aXZlcygpOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBzdHlsZVJlc29s
dmVyLnBhcmVudFN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIGtleVZhbHVlIDogY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIu
cGFyZW50U3R5bGUoKSktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKICAgICAgICAgQ291
bnRlckRpcmVjdGl2ZXMmIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGtleVZhbHVlLmtleSwgQ291bnRl
ckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBpZiAoY291bnRlckJlaGF2
aW9yID09IFJlc2V0KQogICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0UmVzZXQoa2V5VmFs
dWUudmFsdWUpOwpAQCAtMTMzNyw3ICsxMzM3LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbAogICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCiAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRVbmlxdWUoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAg
IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpLT5z
ZXRVbmlxdWUoKTsKICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgY29u
dGVudFZhbHVlLmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxsQXRvbSk7CiAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNvbHZlci5lbGVtZW50KCktPmdl
dEF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0
KTsKQEAgLTE3MDYsNyArMTcwNiw3IEBAIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlQWx0KFMKICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c3R5bGVUeXBlKCkg
PT0gTk9QU0VVRE8pCiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFVuaXF1
ZSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxl
KCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0
eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSktPnNldFVuaXF1ZSgpOwogCiAgICAgICAgIFF1YWxp
ZmllZE5hbWUgYXR0cihudWxsQXRvbSwgcHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSwg
bnVsbEF0b20pOwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNv
bHZlci5lbGVtZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGkKICAgICBtX21hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA9IDA7CiB9CiAKLVN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHlsZSwgY29uc3QgUmVuZGVy
UmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JG
aWx0ZXIpCitTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogZG9j
dW1lbnRFbGVtZW50U3R5bGUsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZywg
Y29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKQogICAgIDogbV9lbGVtZW50KCZl
bGVtZW50KQogICAgICwgbV9wYXJlbnRTdHlsZShwYXJlbnRTdHlsZSkKICAgICAsIG1fcmVnaW9u
Rm9yU3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKQpAQCAtMzgwLDcgKzM4MCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY28KICAgICByZXR1cm4gcGFyZW50Tm9kZSAm
JiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKIH0KIAotRWxlbWVudFN0eWxlIFN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNv
bnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIq
IHNlbGVjdG9yRmlsdGVyKQorRWxlbWVudFN0eWxlIFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxl
bWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIGNvbnN0IFJlbmRlclJl
Z2lvbiogcmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmls
dGVyKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2luTG9hZFBlbmRpbmdJbWFnZXMpOwogCkBA
IC01NTgsNyArNTU4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFu
aQogICAgIH0KIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
Ojpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUHNl
dWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIFJlbmRlclN0eWxlJiBwYXJlbnRT
dHlsZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRv
U3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFBzZXVkb1N0eWxl
UmVxdWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0LCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5
bGUpCiB7CiAgICAgbV9zdGF0ZSA9IFN0YXRlKGVsZW1lbnQsICZwYXJlbnRTdHlsZSk7CiAKQEAg
LTE2MzEsNyArMTYzMSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm8KICAgICB9CiAKICAgICBpZiAoaXNJbmhlcml0ICYmICFzdGF0ZS5wYXJlbnRTdHlsZSgpLT5o
YXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhl
cml0ZWRQcm9wZXJ0eShpZCkpCi0gICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldEhhc0V4
cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVy
U3R5bGUqPihzdGF0ZS5wYXJlbnRTdHlsZSgpKS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFBy
b3BlcnRpZXMoKTsKICAgICAKICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlDdXN0b20pIHsKICAg
ICAgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSogY3VzdG9tUHJvcGVydHkgPSAmZG93bmNhc3Q8
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnZhbHVlVG9BcHBseSk7CkBAIC0xNzM0LDcgKzE3MzQs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1CiB9CiAjZW5kaWYK
IAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNr
Rm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkKIHsKICAgICBpZiAoIXBhcmVudFN0eWxlKQogICAgICAgICByZXR1cm47CkBAIC0x
NzQ4LDcgKzE3NDgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShS
CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGNvbnN0IGF1dG8mIGNoaWxkRm9udCA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsMTggKzE0MSwxOCBAQCBwdWJsaWM6CiAgICAg
U3R5bGVSZXNvbHZlcihEb2N1bWVudCYpOwogICAgIH5TdHlsZVJlc29sdmVyKCk7CiAKLSAgICBF
bGVtZW50U3R5bGUgc3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgY29uc3Qg
UmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JG
aWx0ZXIqID0gbnVsbHB0cik7CisgICAgRWxlbWVudFN0eWxlIHN0eWxlRm9yRWxlbWVudChjb25z
dCBFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSdWxlTWF0Y2hpbmdC
ZWhhdmlvciA9IE1hdGNoQWxsUnVsZXMsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5
bGluZyA9IG51bGxwdHIsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiA9IG51bGxwdHIpOwogCiAgICAg
dm9pZCBrZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihjb25zdCBFbGVtZW50JiwgY29uc3QgUmVu
ZGVyU3R5bGUqLCBLZXlmcmFtZUxpc3QmKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBjb25zdCBQc2V1ZG9T
dHlsZVJlcXVlc3QmLCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmLCBj
b25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUp
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBh
Z2VJbmRleCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBkZWZhdWx0U3R5bGVG
b3JFbGVtZW50KCk7CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0eWxlKCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KLSAgICBSZW5kZXJTdHlsZSogcm9vdEVs
ZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpOyB9
CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5wYXJlbnRTdHlsZSgpOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsgfQogICAg
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQoKSB7IHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKTsgfQog
ICAgIERvY3VtZW50JiBkb2N1bWVudCgpIHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBTZXR0
aW5ncyogZG9jdW1lbnRTZXR0aW5ncygpIHsgcmV0dXJuIG1fZG9jdW1lbnQuc2V0dGluZ3MoKTsg
fQpAQCAtMzE3LDggKzMxNyw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGZpeGVzIHVwIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQg
dGhlIGN1cnJlbnQgZ2VuZXJpYyBmb250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAotICAgIHZv
aWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKTsKLSAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSos
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1p
bHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwor
ICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKTsKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICB2
b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1c3QoUmVuZGVyU3R5bGUqKTsKICNlbmRpZgpAQCAtMzYx
LDcgKzM2MSw3IEBAIHB1YmxpYzoKICAgICBjbGFzcyBTdGF0ZSB7CiAgICAgcHVibGljOgogICAg
ICAgICBTdGF0ZSgpIHsgfQotICAgICAgICBTdGF0ZShjb25zdCBFbGVtZW50JiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogZG9jdW1lbnRFbGVtZW50U3R5bGUgPSBudWxs
cHRyLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25z
dCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKKyAgICAgICAgU3RhdGUoY29uc3QgRWxlbWVu
dCYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIGRv
Y3VtZW50RWxlbWVudFN0eWxlID0gbnVsbHB0ciwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25G
b3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CiAK
ICAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgY2xlYXIoKTsKQEAgLTM3NCw4ICszNzQsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gdGFrZVN0eWxlKCkg
eyByZXR1cm4gV1RGTW92ZShtX3N0eWxlKTsgfQogCiAgICAgICAgIHZvaWQgc2V0UGFyZW50U3R5
bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPik7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50U3R5bGU7IH0KLSAgICAgICAgUmVu
ZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50
U3R5bGU7IH0KKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQorICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9v
dEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsgfQogCiAg
ICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVnaW9uRm9yU3R5bGluZzsgfQogICAgICAgICBFSW5zaWRlTGluayBlbGVtZW50TGlu
a1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50TGlua1N0YXRlOyB9CkBAIC00MjcsOSAr
NDI3LDkgQEAgcHVibGljOgogCiAgICAgICAgIGNvbnN0IEVsZW1lbnQqIG1fZWxlbWVudCB7IG51
bGxwdHIgfTsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwot
ICAgICAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsKKyAgICAgICAg
Y29uc3QgUmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGUgeyBudWxscHRyIH07CiAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV9vd25lZFBhcmVudFN0eWxlOwotICAgICAgICBS
ZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OworICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSogbV9yb290RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OwogCiAgICAgICAg
IGNvbnN0IFJlbmRlclJlZ2lvbiogbV9yZWdpb25Gb3JTdHlsaW5nIHsgbnVsbHB0ciB9OwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwOCw3
ICsyMDA4LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZwogICAg
IG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzID0gb2xkSWdub3JlOwogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IERvY3VtZW50OjpzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRp
bmdTdHlsZXNoZWV0cyhFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IERvY3VtZW50OjpzdHlsZUZvckVsZW1lbnRJ
Z25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0cyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgQVNTRVJUKCZlbGVtZW50LmRvY3VtZW50KCkgPT0g
dGhpcyk7CiAKQEAgLTI1MTUsNyArMjUxNSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFZpc3VhbGx5
T3JkZXJlZCgpCiB7CiAgICAgbV92aXN1YWxseU9yZGVyZWQgPSB0cnVlOwogICAgIGlmIChyZW5k
ZXJWaWV3KCkpCi0gICAgICAgIHJlbmRlclZpZXcoKS0+c3R5bGUoKS5zZXRSVExPcmRlcmluZyhW
aXN1YWxPcmRlcik7CisgICAgICAgIHJlbmRlclZpZXcoKS0+bXV0YWJsZVN0eWxlKCkuc2V0UlRM
T3JkZXJpbmcoVmlzdWFsT3JkZXIpOwogfQogCiBSZWY8RG9jdW1lbnRQYXJzZXI+IERvY3VtZW50
OjpjcmVhdGVQYXJzZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NzEsNyArNTcxLDcgQEAgcHVibGljOgogICAgIH07CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoUnVuUG9zdExheW91dFRhc2tzID0g
UnVuUG9zdExheW91dFRhc2tzOjpBc3luY2hyb25vdXNseSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRz
KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5nU3R5bGVzaGVldHMo
RWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgcGFnZSBib3ggKG1hcmdpbiBib3hlcyBhbmQgcGFnZSBib3JkZXJzKSBpcyB2
aXNpYmxlLgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQYWdlQm94VmlzaWJsZShpbnQgcGFn
ZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3MCw3
ICsxMzcwLDcgQEAgU3R5bGVSZXNvbHZlciYgRWxlbWVudDo6c3R5bGVSZXNvbHZlcigpCiAgICAg
cmV0dXJuIGRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpOwogfQogCi1FbGVtZW50U3R5
bGUgRWxlbWVudDo6cmVzb2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK0VsZW1l
bnRTdHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQogewogICAgIHJldHVybiBzdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50KCp0aGlz
LCBwYXJlbnRTdHlsZSk7CiB9CkBAIC0xNzU4LDcgKzE3NTgsNyBAQCBib29sIEVsZW1lbnQ6OmNo
aWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUgCiBzdGF0aWMgdm9pZCBjaGVja0ZvckVtcHR5U3R5bGVD
aGFuZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoZWxlbWVudC5zdHlsZUFmZmVjdGVk
QnlFbXB0eSgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgYXV0byogc3R5bGUgPSBlbGVtZW50LnJlbmRlclN0eWxlKCk7CiAg
ICAgICAgIGlmICghc3R5bGUgfHwgKCFzdHlsZS0+ZW1wdHlTdGF0ZSgpIHx8IGVsZW1lbnQuaGFz
Q2hpbGROb2RlcygpKSkKICAgICAgICAgICAgIGVsZW1lbnQuc2V0TmVlZHNTdHlsZVJlY2FsYygp
OwogICAgIH0KQEAgLTE3ODQsMTQgKzE3ODQsMTQgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JTaWJs
aW5nU3R5bGVDaGFuZ2VzKAogCiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGluc2VydC9hcHBlbmQg
Y2FzZS4KICAgICAgICAgaWYgKG5ld0ZpcnN0RWxlbWVudCAhPSBlbGVtZW50QWZ0ZXJDaGFuZ2Up
IHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnRBZnRlckNoYW5nZS0+
cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudEFmdGVyQ2hh
bmdlLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+Zmly
c3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudEFmdGVyQ2hhbmdlLT5zZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSBhbHNvIGhhdmUg
dG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4KICAgICAgICAgaWYgKGNoZWNrVHlwZSA9PSBTaWJsaW5n
RWxlbWVudFJlbW92ZWQgJiYgbmV3Rmlyc3RFbGVtZW50ID09IGVsZW1lbnRBZnRlckNoYW5nZSAm
JiBuZXdGaXJzdEVsZW1lbnQpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG5l
d0ZpcnN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0g
bmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8
fCAhc3R5bGUtPmZpcnN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAgIG5ld0ZpcnN0RWxl
bWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0xODA0LDcgKzE4MDQs
NyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAgIEVs
ZW1lbnQqIG5ld0xhc3RFbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bGFzdENoaWxkKHBhcmVu
dCk7CiAKICAgICAgICAgaWYgKG5ld0xhc3RFbGVtZW50ICE9IGVsZW1lbnRCZWZvcmVDaGFuZ2Up
IHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnRCZWZvcmVDaGFuZ2Ut
PnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnRCZWZvcmVD
aGFuZ2UtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5s
YXN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAgIGVsZW1lbnRCZWZvcmVDaGFuZ2UtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQpAQCAtMTgxMiw3ICsxODEyLDcgQEAgc3Rh
dGljIHZvaWQgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgICAgICAvLyBXZSBhbHNv
IGhhdmUgdG8gaGFuZGxlIG5vZGUgcmVtb3ZhbC4gIFRoZSBwYXJzZXIgY2FsbGJhY2sgY2FzZSBp
cyBzaW1pbGFyIHRvIG5vZGUgcmVtb3ZhbCBhcyB3ZWxsIGluIHRoYXQgd2UgbmVlZCB0byBjaGFu
Z2UgdGhlIGxhc3QgY2hpbGQKICAgICAgICAgLy8gdG8gbWF0Y2ggbm93LgogICAgICAgICBpZiAo
KGNoZWNrVHlwZSA9PSBTaWJsaW5nRWxlbWVudFJlbW92ZWQgfHwgY2hlY2tUeXBlID09IEZpbmlz
aGVkUGFyc2luZ0NoaWxkcmVuKSAmJiBuZXdMYXN0RWxlbWVudCA9PSBlbGVtZW50QmVmb3JlQ2hh
bmdlICYmIG5ld0xhc3RFbGVtZW50KSB7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBuZXdMYXN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxl
ID0gbmV3TGFzdEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxl
IHx8ICFzdHlsZS0+bGFzdENoaWxkU3RhdGUoKSkKICAgICAgICAgICAgICAgICBuZXdMYXN0RWxl
bWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0yNDYxLDcgKzI0NjEs
NyBAQCBzdGF0aWMgUHNldWRvRWxlbWVudCogYmVmb3JlT3JBZnRlclBzZXVkCiAgICAgfQogfQog
Ci1SZW5kZXJTdHlsZSogRWxlbWVudDo6ZXhpc3RpbmdDb21wdXRlZFN0eWxlKCkKK2NvbnN0IFJl
bmRlclN0eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3R5bGUoKQogewogICAgIGlmIChh
dXRvKiByZW5kZXJUcmVlU3R5bGUgPSByZW5kZXJTdHlsZSgpKQogICAgICAgICByZXR1cm4gcmVu
ZGVyVHJlZVN0eWxlOwpAQCAtMjQ3MiwxMyArMjQ3MiwxMyBAQCBSZW5kZXJTdHlsZSogRWxlbWVu
dDo6ZXhpc3RpbmdDb21wdXRlZFN0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJlbmRlclN0
eWxlJiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSgpCitjb25zdCBSZW5kZXJTdHlsZSYg
RWxlbWVudDo6cmVzb2x2ZUNvbXB1dGVkU3R5bGUoKQogewogICAgIEFTU0VSVChpbkRvY3VtZW50
KCkpOwogICAgIEFTU0VSVCghZXhpc3RpbmdDb21wdXRlZFN0eWxlKCkpOwogCiAgICAgRGVxdWU8
RWxlbWVudCosIDMyPiBlbGVtZW50c1JlcXVpcmluZ0NvbXB1dGVkU3R5bGUoeyB0aGlzIH0pOwot
ICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gbnVsbHB0cjsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHI7CiAKICAgICAvLyBDb2xsZWN0IGFuY2Vz
dG9ycyB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IGhhcyBzdHlsZS4KICAgICBhdXRvIGNvbXBvc2Vk
QW5jZXN0b3JzID0gY29tcG9zZWRUcmVlQW5jZXN0b3JzKCp0aGlzKTsKQEAgLTI1MDEsNyArMjUw
MSw3IEBAIFJlbmRlclN0eWxlJiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHkKICAgICByZXR1
cm4gKmNvbXB1dGVkU3R5bGU7CiB9CiAKLVJlbmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0
eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpCitjb25zdCBSZW5kZXJTdHlsZSog
RWxlbWVudDo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQog
ewogICAgIGlmIChQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gYmVmb3JlT3JBZnRlclBz
ZXVkb0VsZW1lbnQoKnRoaXMsIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpKQogICAgICAgICByZXR1
cm4gcHNldWRvRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwpAQCAtMzI5NSw3ICszMjk1LDcgQEAg
dm9pZCBFbGVtZW50OjpkaWREZXRhY2hSZW5kZXJlcnMoKQogICAgIEFTU0VSVChoYXNDdXN0b21T
dHlsZVJlc29sdmVDYWxsYmFja3MoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gRWxl
bWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqKQorT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiBFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopCiB7CiAgICAgQVNTRVJUKGhhc0N1c3RvbVN0
eWxlUmVzb2x2ZUNhbGxiYWNrcygpKTsKICAgICByZXR1cm4gTnVsbG9wdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFRhYkluZGV4KGludCk7CiAgICAgdmlydHVhbCBFbGVtZW50KiBmb2N1c0RlbGVnYXRlKCk7
CiAKLSAgICBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKSBv
dmVycmlkZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9
IE5PUFNFVURPKSBvdmVycmlkZTsKIAogICAgIGJvb2wgbmVlZHNTdHlsZUludmFsaWRhdGlvbigp
IGNvbnN0OwogCkBAIC00ODAsNyArNDgwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRBdHRhY2hSZW5kZXJlcnMoKTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbERldGFjaFJlbmRlcmVy
cygpOwogICAgIHZpcnR1YWwgdm9pZCBkaWREZXRhY2hSZW5kZXJlcnMoKTsKLSAgICB2aXJ0dWFs
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSk7CisgICAgdmlydHVhbCBP
cHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHls
ZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpOwogCiAg
ICAgTGF5b3V0UmVjdCBhYnNvbHV0ZUV2ZW50SGFuZGxlckJvdW5kcyhib29sJiBpbmNsdWRlc0Zp
eGVkUG9zaXRpb25FbGVtZW50cykgb3ZlcnJpZGU7CiAKQEAgLTQ5OSw3ICs0OTksNyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKTsKLSAgICBF
bGVtZW50U3R5bGUgcmVzb2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAg
RWxlbWVudFN0eWxlIHJlc29sdmVTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
OwogCiAgICAgYm9vbCBoYXNEaXNwbGF5Q29udGVudHMoKSBjb25zdDsKICAgICB2b2lkIHNldEhh
c0Rpc3BsYXlDb250ZW50cyhib29sKTsKQEAgLTU5Miw4ICs1OTIsOCBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCByZW1vdmVTaGFkb3dSb290KCk7CiAKLSAgICBSZW5kZXJTdHlsZSogZXhpc3RpbmdD
b21wdXRlZFN0eWxlKCk7Ci0gICAgUmVuZGVyU3R5bGUmIHJlc29sdmVDb21wdXRlZFN0eWxlKCk7
CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGV4aXN0aW5nQ29tcHV0ZWRTdHlsZSgpOworICAgIGNv
bnN0IFJlbmRlclN0eWxlJiByZXNvbHZlQ29tcHV0ZWRTdHlsZSgpOwogCiAgICAgYm9vbCByYXJl
RGF0YVN0eWxlQWZmZWN0ZWRCeUVtcHR5KCkgY29uc3Q7CiAgICAgYm9vbCByYXJlRGF0YUNoaWxk
cmVuQWZmZWN0ZWRCeUhvdmVyKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1OSw3ICs2NTksNyBAQCBzdGF0aWMgTm9kZTo6RWRpdGFiaWxpdHkgY29tcHV0ZUVkaXRh
YmlsCiAgICAgLy8gd291bGQgZmlyZSBpbiB0aGUgbWlkZGxlIG9mIERvY3VtZW50OjpzZXRGb2N1
c2VkRWxlbWVudCgpLgogCiAgICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gJnN0YXJ0Tm9kZTsg
bm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBub2RlLT5pc0RvY3VtZW50Tm9kZSgpID8gbm9kZS0+cmVuZGVyU3R5bGUoKSA6IGNv
bnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLT5jb21wdXRlZFN0eWxlKCk7CisgICAgICAgIGF1dG8qIHN0
eWxlID0gbm9kZS0+aXNEb2N1bWVudE5vZGUoKSA/IG5vZGUtPnJlbmRlclN0eWxlKCkgOiBjb25z
dF9jYXN0PE5vZGUqPihub2RlKS0+Y29tcHV0ZWRTdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxl
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09
IE5PTkUpCkBAIC0xMDEwLDcgKzEwMTAsNyBAQCBOb2RlKiBOb2RlOjpwc2V1ZG9Bd2FyZUxhc3RD
aGlsZCgpIGNvbnN0CiAgICAgcmV0dXJuIGxhc3RDaGlsZCgpOwogfQogCi1SZW5kZXJTdHlsZSog
Tm9kZTo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQorY29u
c3QgUmVuZGVyU3R5bGUqIE5vZGU6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVu
dFNwZWNpZmllcikKIHsKICAgICBhdXRvKiBjb21wb3NlZFBhcmVudCA9IGNvbXBvc2VkVHJlZUFu
Y2VzdG9ycygqdGhpcykuZmlyc3QoKTsKICAgICBpZiAoIWNvbXBvc2VkUGFyZW50KQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NDMsOSArNDQzLDkgQEAgcHVibGljOgogICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2RlbE9iamVjdCgpIGNvbnN0OwogICAgIAogICAgIC8v
IFdyYXBwZXIgZm9yIG5vZGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIHJlbmRlcmVyLCBidXQgc3RpbGwg
Y2FjaGUgdGhlIHN0eWxlIChsaWtlIEhUTUxPcHRpb25FbGVtZW50KS4KLSAgICBSZW5kZXJTdHls
ZSogcmVuZGVyU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5
bGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNl
dWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllciA9IE5PUFNFVURPKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVj
aWZpZXIgPSBOT1BTRVVETyk7CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8v
IE5vdGlmaWNhdGlvbiBvZiBkb2N1bWVudCBzdHJ1Y3R1cmUgY2hhbmdlcyAoc2VlIENvbnRhaW5l
ck5vZGUuaCBmb3IgbW9yZSBub3RpZmljYXRpb24gbWV0aG9kcykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVJlbmRlclN0eWxlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlubGluZSBSZW5kZXJTdHlsZSogTm9kZTo6cmVuZGVy
U3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBOb2RlOjpyZW5kZXJTdHls
ZSgpIGNvbnN0CiB7CiAgICAgYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAg
IGlmICghcmVuZGVyZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBQc2V1ZG9FbGVtZW50OjpjbGVh
ckhvc3RFbGVtZW50KCkKICAgICBtX2hvc3RFbGVtZW50ID0gbnVsbHB0cjsKIH0KIAotT3B0aW9u
YWw8RWxlbWVudFN0eWxlPiBQc2V1ZG9FbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVy
U3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSopCitPcHRpb25hbDxFbGVtZW50U3R5bGU+
IFBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKikKIHsKICAgICBhdXRvKiBzdHlsZSA9IG1faG9z
dEVsZW1lbnQtPnJlbmRlcmVyKCktPmdldENhY2hlZFBzZXVkb1N0eWxlKG1fcHNldWRvSWQsICZw
YXJlbnRTdHlsZSk7CiAgICAgaWYgKCFzdHlsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Q
c2V1ZG9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0Vs
ZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgRWxl
bWVudCogaG9zdEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RFbGVtZW50OyB9CiAgICAg
dm9pZCBjbGVhckhvc3RFbGVtZW50KCk7CiAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJl
c29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBz
aGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVz
b2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRBdHRhY2hS
ZW5kZXJlcnMoKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFu
Z2UpIG92ZXJyaWRlOwogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHls
ZSYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzksMTggKzE3OSwxOCBAQCBzdGF0aWMgYm9vbCBpc05ld0xpbmVBdFBvc2l0aW9uKGNv
bnN0IFBvCiAgICAgcmV0dXJuIHRleHRBdFBvc2l0aW9uWzBdID09ICdcbic7CiB9CiAKLVJlbmRl
clN0eWxlKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxlT2ZFbmNsb3NpbmdU
ZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCitjb25zdCBSZW5kZXJTdHlsZSogQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkg
IT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcgogICAgICAgICB8fCAhcG9zaXRp
b24uY29udGFpbmVyTm9kZSgpCiAgICAgICAgIHx8ICFwb3NpdGlvbi5jb250YWluZXJOb2RlKCkt
PmlzVGV4dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIHJldHVybiAmcmVuZGVyZXItPnN0eWxlKCk7CiB9CkBAIC0yMDEsNyArMjAx
LDcgQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgIGVuZCA9
IGVuZE9mQ3VycmVudFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpOwogCiAgICAgYm9vbCBpc1N0
YXJ0QW5kRW5kT25TYW1lTm9kZSA9IGZhbHNlOwotICAgIGlmIChSZW5kZXJTdHlsZSogc3RhcnRT
dHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShzdGFydCkpIHsKKyAgICBpZiAo
YXV0byogc3RhcnRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShzdGFydCkp
IHsKICAgICAgICAgaXNTdGFydEFuZEVuZE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9z
aW5nVGV4dE5vZGUoZW5kKSAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5l
ck5vZGUoKTsKICAgICAgICAgYm9vbCBpc1N0YXJ0QW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1l
Tm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFw
aCkgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmNvbnRh
aW5lck5vZGUoKTsKIApAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kOjpyYW5nZUZvclAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChSZW5kZXJTdHls
ZSogZW5kU3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoZW5kKSkgeworICAg
IGlmIChhdXRvKiBlbmRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShlbmQp
KSB7CiAgICAgICAgIGJvb2wgaXNFbmRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlID0g
cmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKG1fZW5kT2ZMYXN0UGFyYWdyYXBoKSAmJiBl
bmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBtX2VuZE9mTGFzdFBhcmFncmFwaC5kZXByZWNhdGVkTm9k
ZSgpOwogICAgICAgICAvLyBJbmNsdWRlIFxuIGF0IHRoZSBlbmQgb2YgbGluZSBpZiB3ZSdyZSBh
dCBhbiBlbXB0eSBwYXJhZ3JhcGgKICAgICAgICAgaWYgKGVuZFN0eWxlLT5wcmVzZXJ2ZU5ld2xp
bmUoKSAmJiBzdGFydCA9PSBlbmQgJiYgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDwgZW5k
LmNvbnRhaW5lck5vZGUoKS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHsKQEAgLTI1OCw3ICsyNTgs
NyBAQCBWaXNpYmxlUG9zaXRpb24gQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kCiB7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZE9mTmV4dFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGVuZE9mQ3Vy
cmVudFBhcmFncmFwaC5uZXh0KCkpOwogICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kT2ZOZXh0
UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVu
ZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHBvc2l0aW9uKTsKKyAgICBhdXRvKiBzdHlsZSA9
IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShwb3NpdGlvbik7CiAgICAgaWYgKCFzdHls
ZSkKICAgICAgICAgcmV0dXJuIGVuZE9mTmV4dFBhcmFncmFwaDsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29t
bWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHByb3RlY3RlZDoKIHByaXZh
dGU6CiAgICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZvcm1h
dFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgY29uc3Qg
UG9zaXRpb24mIGVuZE9mU2VsZWN0aW9uLCBSZWZQdHI8RWxlbWVudD4mKSA9IDA7Ci0gICAgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYp
OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUo
Y29uc3QgUG9zaXRpb24mKTsKICAgICB2b2lkIHJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5nVGV4
dE5vZGVzSWZOZWVkZWQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgUG9zaXRpb24mLCBQb3NpdGlv
biYpOwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZk5leHRQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0
Tm9kZXNJZk5lZWRlZChWaXNpYmxlUG9zaXRpb24mLCBQb3NpdGlvbiYsIFBvc2l0aW9uJik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjppbml0KE5vZGUq
IG5vZGUsIFByb3AKICAgICB9CiAKICAgICBpZiAobm9kZSAmJiBub2RlLT5jb21wdXRlZFN0eWxl
KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gbm9kZS0+Y29tcHV0ZWRT
dHlsZSgpOworICAgICAgICBhdXRvKiByZW5kZXJTdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUo
KTsKICAgICAgICAgcmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChyZW5kZXJT
dHlsZSk7CiAgICAgICAgIGlmIChyZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29y
ZFNpemUoKSkKICAgICAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBjb21wdXRlZFN0eWxlQXRQb3NpdGlvbi5nZXRGb250U2l6ZUNTU1ZhbHVl
UHJlZmVycmluZ0tleXdvcmQoKS0+Y3NzVGV4dCgpKTsKQEAgLTQ3MSw3ICs0NzEsNyBAQCB2b2lk
IEVkaXRpbmdTdHlsZTo6aW5pdChOb2RlKiBub2RlLCBQcm9wCiAgICAgZXh0cmFjdEZvbnRTaXpl
RGVsdGEoKTsKIH0KIAotdm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVRleHRGaWxsQW5kU3Ryb2tl
Q29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKQordm9pZCBFZGl0aW5nU3R5
bGU6OnJlbW92ZVRleHRGaWxsQW5kU3Ryb2tlQ29sb3JzSWZOZWVkZWQoY29uc3QgUmVuZGVyU3R5
bGUqIHJlbmRlclN0eWxlKQogewogICAgIC8vIElmIGEgbm9kZSdzIHRleHQgZmlsbCBjb2xvciBp
cyBpbnZhbGlkLCB0aGVuIGl0cyBjaGlsZHJlbiB1c2UgCiAgICAgLy8gdGhlaXIgZm9udC1jb2xv
ciBhcyB0aGVpciB0ZXh0IGZpbGwgY29sb3IgKHRoZXkgZG9uJ3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3
IEBAIHByaXZhdGU6CiAgICAgRWRpdGluZ1N0eWxlKENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOwogICAgIEVkaXRpbmdTdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZUlEKTsK
ICAgICB2b2lkIGluaXQoTm9kZSosIFByb3BlcnRpZXNUb0luY2x1ZGUpOwotICAgIHZvaWQgcmVt
b3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSopOworICAgIHZv
aWQgcmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChjb25zdCBSZW5kZXJTdHls
ZSopOwogICAgIHZvaWQgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7CiAgICAgdm9pZCBleHRyYWN0Rm9udFNpemVE
ZWx0YSgpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFRyaVN0YXRlIHRyaVN0YXRlT2ZTdHls
ZShUJiBzdHlsZVRvQ29tcGFyZSwgU2hvdWxkSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDggKzQz
MCw4IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gd2ViQ29udGVudEZy
b21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWlu
VGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KEZyYW1lKiAsIE5vZGUgKiZub2RlVG9SZW1vdmUpOwotICAgIHZvaWQgZ2V0VGV4dERlY29yYXRp
b25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKFJlbmRlclN0eWxlJiwgTlNNdXRhYmxl
RGljdGlvbmFyeSopIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVt
b3ZlKTsKKyAgICB2b2lkIGdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3RpbmdUeXBp
bmdTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIE5TTXV0YWJsZURpY3Rpb25hcnkqKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9uKGJvb2wmKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOU0RpY3Rpb25hcnkgKmZvbnRBdHRyaWJ1dGVzRm9y
U2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RyaW5n
U2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
aW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5
KCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgTm9kZSogc3RhcnRp
bmdOb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICBSZW5kZXJTdHlsZSogc3RhcnRp
bmdTdHlsZSA9IHN0YXJ0aW5nTm9kZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgYXV0byogc3Rh
cnRpbmdTdHlsZSA9IHN0YXJ0aW5nTm9kZS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgaWYgKCFz
dGFydGluZ1N0eWxlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIE5vZGUqIGN1cnJl
bnROb2RlID0gc3RhcnRpbmdOb2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9FZGl0b3JDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0VkaXRvckNvY29hLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEZJWE1FOiBUaGlzIGZpZ3VyZXMgb3V0IHRo
ZSBjdXJyZW50IHN0eWxlIGJ5IGluc2VydGluZyBhIDxzcGFuPiEKLVJlbmRlclN0eWxlKiBFZGl0
b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoRnJhbWUqIGZyYW1lLCBOb2RlICombm9kZVRvUmVt
b3ZlKQorY29uc3QgUmVuZGVyU3R5bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChG
cmFtZSogZnJhbWUsIE5vZGUgKiZub2RlVG9SZW1vdmUpCiB7CiAgICAgbm9kZVRvUmVtb3ZlID0g
bnVsbHB0cjsKICAgICAKQEAgLTc2LDcgKzc2LDcgQEAgUmVuZGVyU3R5bGUqIEVkaXRvcjo6c3R5
bGVGb3JTZWxlY3Rpb25TdAogICAgIHJldHVybiBzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCkgPyAm
c3R5bGVFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKIH0KIAotdm9pZCBF
ZGl0b3I6OmdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3RpbmdUeXBpbmdTdHlsZShS
ZW5kZXJTdHlsZSYgc3R5bGUsIE5TTXV0YWJsZURpY3Rpb25hcnkqIHJlc3VsdCkgY29uc3QKK3Zv
aWQgRWRpdG9yOjpnZXRUZXh0RGVjb3JhdGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQp
IGNvbnN0CiB7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnR5cGluZ1N0eWxlKCk7CiAgICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGlu
Z1N0eWxlLT5zdHlsZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9y
SU9TLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9F
ZGl0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsNyBAQCBjb25zdCBGb250
KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vCiAKICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9k
ZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5bGUgPSBz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5v
ZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAg
ICAgIGlmIChzdHlsZSkgewpAQCAtMjIwLDcgKzIyMCw3IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6
Zm9udEZvclNlbGVjdGlvbihib28KIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRl
c0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwg
bm9kZVRvUmVtb3ZlKTsKKyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQo
Jm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgY29uc3QgRm9udCogRWRpdG9yOjpm
b250Rm9yU2VsZWN0aW9uKGJvbwogCiAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7
IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisgICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxl
Y3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUK
IAogICAgICAgICBjb25zdCBGb250KiByZXN1bHQgPSBudWxscHRyOwogICAgICAgICBpZiAoc3R5
bGUpIHsKQEAgLTE0Niw3ICsxNDYsNyBAQCBjb25zdCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxl
Y3Rpb24oYm9vCiBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rp
b25TdGFydCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92
ZSk7CisgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBu
b2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBTdHJpbmcgSFRNTFRpdGxlRWxlbWVudDo6dGV4dCgp
IGNvbnN0CiBTdHJpbmdXaXRoRGlyZWN0aW9uIEhUTUxUaXRsZUVsZW1lbnQ6OmNvbXB1dGVkVGV4
dFdpdGhEaXJlY3Rpb24oKQogewogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSOwot
ICAgIGlmIChSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IHRoaXMtPmNvbXB1dGVkU3R5bGUo
KSkKKyAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9IHRoaXMtPmNvbXB1dGVkU3R5bGUoKSkK
ICAgICAgICAgZGlyZWN0aW9uID0gY29tcHV0ZWRTdHlsZS0+ZGlyZWN0aW9uKCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIGF1dG8gc3R5bGUgPSBzdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50
KCp0aGlzLCBwYXJlbnRFbGVtZW50KCkgPyBwYXJlbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCkg
OiBudWxscHRyKS5yZW5kZXJTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHkKICAgICB1cGRhdGUoc2VsZWN0b3IpOwogfQogCi1p
bmxpbmUgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eTo6aW5pdGlhbGl6
ZShGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKQoraW5s
aW5lIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6OmluaXRpYWxpemUo
Rm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3IsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkK
IHsKICAgICAvLyBCZXdhcmUhIG1fZm9udC5mb250U2VsZWN0b3IoKSBtaWdodCBub3QgcG9pbnQg
dG8gZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkhCiAgICAgQVNTRVJUKG5ld1N0eWxlLmZvbnRDYXNj
YWRlKCkuZm9udFNlbGVjdG9yKCkgPT0gJmZvbnRTZWxlY3Rvcik7CkBAIC0yMTk2LDcgKzIxOTYs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgRG9jdW1l
bnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCk7CiAgICAgZG9jdW1lbnQudXBkYXRl
U3R5bGVJZk5lZWRlZCgpOwogCi0gICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0g
Y2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKKyAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9
IGNhbnZhcygpLT5jb21wdXRlZFN0eWxlKCkpCiAgICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVz
Y3JpcHRpb24oY29tcHV0ZWRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOwogICAgIGVsc2Ugewog
ICAgICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGRlZmF1bHRGb250RGVzY3JpcHRpb247CkBA
IC0yMjU5LDkgKzIyNTksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VGV4
dEJhCiAgICAgbW9kaWZpYWJsZVN0YXRlKCkudGV4dEJhc2VsaW5lID0gYmFzZWxpbmU7CiB9CiAK
LWlubGluZSBUZXh0RGlyZWN0aW9uIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9UZXh0RGly
ZWN0aW9uKERpcmVjdGlvbiBkaXJlY3Rpb24sIFJlbmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSkg
Y29uc3QKK2lubGluZSBUZXh0RGlyZWN0aW9uIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9U
ZXh0RGlyZWN0aW9uKERpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiogY29t
cHV0ZWRTdHlsZSkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAoY29tcHV0ZWRT
dHlsZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJbmhlcml0KSA/IGNhbnZhcygpLT5jb21w
dXRlZFN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8qIHN0eWxlID0gKGNvbXB1dGVkU3R5bGUg
fHwgZGlyZWN0aW9uID09IERpcmVjdGlvbjo6SW5oZXJpdCkgPyBjYW52YXMoKS0+Y29tcHV0ZWRT
dHlsZSgpIDogbnVsbHB0cjsKICAgICBpZiAoY29tcHV0ZWRTdHlsZSkKICAgICAgICAgKmNvbXB1
dGVkU3R5bGUgPSBzdHlsZTsKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewpAQCAtMjM4NCw3ICsy
Mzg0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogCiAgICAg
Ly8gRklYTUU6IE5lZWQgdG8gdHVybiBvZmYgZm9udCBzbW9vdGhpbmcuCiAKLSAgICBSZW5kZXJT
dHlsZSogY29tcHV0ZWRTdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHls
ZTsKICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHRvVGV4dERpcmVjdGlvbihzdGF0ZSgp
LmRpcmVjdGlvbiwgJmNvbXB1dGVkU3R5bGUpOwogICAgIGJvb2wgaXNSVEwgPSBkaXJlY3Rpb24g
PT0gUlRMOwogICAgIGJvb2wgb3ZlcnJpZGUgPSBjb21wdXRlZFN0eWxlID8gaXNPdmVycmlkZShj
b21wdXRlZFN0eWxlLT51bmljb2RlQmlkaSgpKSA6IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNyArMjU1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgRm9udFByb3h5JiBvcGVyYXRvcj0oY29uc3QgRm9udFByb3h5Jik7CiAKICAg
ICAgICAgYm9vbCByZWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5mb250U2VsZWN0b3Io
KTsgfQotICAgICAgICB2b2lkIGluaXRpYWxpemUoRm9udFNlbGVjdG9yJiwgUmVuZGVyU3R5bGUm
KTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplKEZvbnRTZWxlY3RvciYsIGNvbnN0IFJlbmRlclN0
eWxlJik7CiAgICAgICAgIEZvbnRNZXRyaWNzIGZvbnRNZXRyaWNzKCkgY29uc3Q7CiAgICAgICAg
IGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIGNvbnN0Owog
ICAgICAgICBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVuJikgY29uc3Q7CkBAIC0zODIsNyArMzgy
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsgfQotICAgIFRleHREaXJlY3Rpb24g
dG9UZXh0RGlyZWN0aW9uKERpcmVjdGlvbiwgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxlID0g
bnVsbHB0cikgY29uc3Q7CisgICAgVGV4dERpcmVjdGlvbiB0b1RleHREaXJlY3Rpb24oRGlyZWN0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5bGUgPSBudWxscHRyKSBjb25zdDsK
IAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgSFRNTFJlc291cmNl
UHJlbG9hZGVyOjpwcmVsb2FkKFByZWwKICAgICAgICAgcHJlbG9hZChXVEZNb3ZlKHJlcXVlc3Qp
KTsKIH0KIAotc3RhdGljIGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKEZyYW1lKiBmcmFtZSwg
UmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQor
c3RhdGljIGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKEZyYW1lKiBmcmFtZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQogewog
ICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYVF1ZXJpZXMgPSBNZWRpYVF1ZXJ5U2V0Ojpj
cmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KGF0dHJpYnV0ZVZhbHVlKTsKICAgICBNZWRp
YVF1ZXJ5RXZhbHVhdG9yIG1lZGlhUXVlcnlFdmFsdWF0b3IoInNjcmVlbiIsIGZyYW1lLCByZW5k
ZXJTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRl
clRodW1iRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDIx
ICs4MywyMSBAQCBSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIoU2xpCiB7CiB9
CiAKLXZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UoUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKQordm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZShj
b25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgaWYgKHBhcmVudFN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBzdHlsZSgpLnNldEFw
cGVhcmFuY2UoU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOworICAgICAgICBtdXRhYmxlU3R5bGUo
KS5zZXRBcHBlYXJhbmNlKFNsaWRlclRodW1iVmVydGljYWxQYXJ0KTsKICAgICBlbHNlIGlmIChw
YXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlckhvcml6b250YWxQYXJ0KQotICAgICAg
ICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCk7CisgICAg
ICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFy
dCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRl
clBhcnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYVNsaWRlclRodW1iUGFy
dCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFTbGlkZXJUaHVt
YlBhcnQpOwogICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFW
b2x1bWVTbGlkZXJQYXJ0KQotICAgICAgICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFWb2x1
bWVTbGlkZXJUaHVtYlBhcnQpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5zZXRBcHBlYXJhbmNl
KE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+
YXBwZWFyYW5jZSgpID09IE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAg
IHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYlBh
cnQpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhRnVsbFNjcmVl
blZvbHVtZVNsaWRlclRodW1iUGFydCk7CiAgICAgaWYgKHN0eWxlKCkuaGFzQXBwZWFyYW5jZSgp
KSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAgICAgICB0aGVtZSgpLmFkanVzdFNs
aWRlclRodW1iU2l6ZShzdHlsZSgpLCBlbGVtZW50KCkpOworICAgICAgICB0aGVtZSgpLmFkanVz
dFNsaWRlclRodW1iU2l6ZShtdXRhYmxlU3R5bGUoKSwgZWxlbWVudCgpKTsKICAgICB9CiB9CiAK
QEAgLTE1OSwxMyArMTU5LDEzIEBAIHZvaWQgUmVuZGVyU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQo
KQogICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CiAgICAgYXV0byYgaW5wdXQg
PSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCgpLT5zaGFkb3dIb3N0KCkpOwog
ICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGhhc1ZlcnRpY2FsQXBwZWFyYW5jZShpbnB1dCk7Ci0gICAg
c3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVydGljYWwgPyBGbG93Q29sdW1uIDogRmxvd1Jv
dyk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0RmxleERpcmVjdGlvbihpc1ZlcnRpY2FsID8gRmxv
d0NvbHVtbiA6IEZsb3dSb3cpOwogICAgIFRleHREaXJlY3Rpb24gb2xkVGV4dERpcmVjdGlvbiA9
IHN0eWxlKCkuZGlyZWN0aW9uKCk7CiAgICAgaWYgKGlzVmVydGljYWwpIHsKICAgICAgICAgLy8g
RklYTUU6IFdvcmsgYXJvdW5kIHJvdW5kaW5nIGlzc3VlcyBpbiBSVEwgdmVydGljYWwgc2xpZGVy
cy4gV2Ugd2FudCB0aGVtIHRvCiAgICAgICAgIC8vIHJlbmRlciBpZGVudGljYWxseSB0byBMVFIg
dmVydGljYWwgc2xpZGVycy4gV2UgY2FuIHJlbW92ZSB0aGlzIHdvcmsgYXJvdW5kIHdoZW4KICAg
ICAgICAgLy8gc3VicGl4ZWwgcmVuZGVyaW5nIGlzIGVuYWJsZWQgb24gYWxsIHBvcnRzLgotICAg
ICAgICBzdHlsZSgpLnNldERpcmVjdGlvbihMVFIpOworICAgICAgICBtdXRhYmxlU3R5bGUoKS5z
ZXREaXJlY3Rpb24oTFRSKTsKICAgICB9CiAKICAgICBSZW5kZXJCb3gqIHRodW1iID0gaW5wdXQu
c2xpZGVyVGh1bWJFbGVtZW50KCkgPyBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVuZGVy
Qm94KCkgOiBudWxscHRyOwpAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgUmVuZGVyU2xpZGVyQ29u
dGFpbmVyOjpsYXlvdXQoKQogCiAgICAgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dCgpOwogCi0g
ICAgc3R5bGUoKS5zZXREaXJlY3Rpb24ob2xkVGV4dERpcmVjdGlvbik7CisgICAgbXV0YWJsZVN0
eWxlKCkuc2V0RGlyZWN0aW9uKG9sZFRleHREaXJlY3Rpb24pOwogICAgIC8vIFRoZXNlIHNob3Vs
ZCBhbHdheXMgZXhpc3QsIHVubGVzcyBzb21lb25lIG11dGF0ZXMgdGhlIHNoYWRvdyBET00gKGUu
Zy4sIGluIHRoZSBpbnNwZWN0b3IpLgogICAgIGlmICghdGh1bWIgfHwgIXRyYWNrKQogICAgICAg
ICByZXR1cm47CkBAIC01NzQsNyArNTc0LDcgQEAgSFRNTElucHV0RWxlbWVudCogU2xpZGVyVGh1
bWJFbGVtZW50OjpobwogICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihzaGFk
b3dIb3N0KCkpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFNsaWRlclRodW1iRWxlbWVu
dDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqIGhvc3RTdHls
ZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVyVGh1bWJFbGVtZW50OjpyZXNvbHZlQ3Vz
dG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogaG9zdFN0eWxl
KQogewogICAgIC8vIFRoaXMgZG9lc24ndCBhY3R1YWxseSBjb21wdXRlIHN0eWxlLiBUaGlzIGlz
IGp1c3QgYSBoYWNrIHRvIHBpY2sgc2hhZG93IHBzZXVkbyBpZCB3aGVuIGhvc3Qgc3R5bGUgaXMg
a25vd24uCiAKQEAgLTYyOCw3ICs2MjgsNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gU2xp
ZGVyQ29udGFpbmVyCiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNsaWRlckNvbnRh
aW5lcj4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVudFN0eWxl
PiBTbGlkZXJDb250YWluZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUm
LCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlkZXJD
b250YWluZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQogewogICAgIC8vIFRoaXMgZG9lc24ndCBhY3R1
YWxseSBjb21wdXRlIHN0eWxlLiBUaGlzIGlzIGp1c3QgYSBoYWNrIHRvIHBpY2sgc2hhZG93IHBz
ZXVkbyBpZCB3aGVuIGhvc3Qgc3R5bGUgaXMga25vd24uCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgdm9pZCB3
aWxsRGV0YWNoUmVuZGVyZXJzKCkgb3ZlcnJpZGU7CiAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5
bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKikgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOwogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQg
c3RhcnREcmFnZ2luZygpOwpAQCAtMTIwLDcgKzEyMCw3IEBAIGlubGluZSBSZWY8U2xpZGVyVGh1
bWJFbGVtZW50PiBTbGlkZXJUaHUKIGNsYXNzIFJlbmRlclNsaWRlclRodW1iIGZpbmFsIDogcHVi
bGljIFJlbmRlckJsb2NrRmxvdyB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU2xpZGVyVGh1bWIoU2xp
ZGVyVGh1bWJFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7Ci0gICAgdm9pZCB1cGRhdGVBcHBlYXJh
bmNlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVBcHBlYXJhbmNl
KGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBp
c1NsaWRlclRodW1iKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMzUsNyArMTM1LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBTbGlkZXJDb250YWluZXJFbGVtZW50KERvY3VtZW50Jik7CiAgICAg
UmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHls
ZSYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxF
bGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxl
Kikgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOwogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIEF0b21pY1N0cmluZyBtX3NoYWRvd1BzZXVkb0lkOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIFJlZjxU
ZXh0Q29udHJvbElubmVyRWxlbWVudD4gVGV4dENvbnRyb2wKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBUZXh0Q29udHJvbElubmVyRWxlbWVudChkb2N1bWVudCkpOwogfQogCi1PcHRpb25hbDxF
bGVtZW50U3R5bGU+IFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUo
UmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxl
bWVudFN0eWxlPiBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKIHsK
ICAgICBhdXRvIGlubmVyQ29udGFpbmVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCk7
CiAgICAgaW5uZXJDb250YWluZXJTdHlsZS0+aW5oZXJpdEZyb20oc2hhZG93SG9zdFN0eWxlKTsK
QEAgLTEzNCw3ICsxMzQsNyBAQCBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sqIFRleHRDb250
cm9sCiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jaz4oSFRN
TERpdkVsZW1lbnQ6OnJlbmRlcmVyKCkpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFRl
eHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxl
JiwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQogewogICAgIGF1
dG8gc3R5bGUgPSBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKnNoYWRvd0hv
c3QoKSkuY3JlYXRlSW5uZXJUZXh0U3R5bGUoKnNoYWRvd0hvc3RTdHlsZSk7CiAgICAgcmV0dXJu
IEVsZW1lbnRTdHlsZShzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclN0eWxlPihXVEZNb3ZlKHN0eWxl
KSkpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpU
ZXh0Q29udHIKICAgICBzZXRIYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKTsKIH0KIAot
T3B0aW9uYWw8RWxlbWVudFN0eWxlPiBUZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6cmVz
b2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNo
YWRvd0hvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xQbGFjZWhv
bGRlckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCiB7CiAgICAgYXV0byBz
dHlsZSA9IHJlc29sdmVTdHlsZSgmcGFyZW50U3R5bGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
CiBwcm90ZWN0ZWQ6CiAgICAgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLSAg
ICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoRG9jdW1lbnQmKTsKICAgICBSZW5k
ZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYs
IGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVu
dFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKICAgICBib29s
IGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAg
IGJvb2wgaXNUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiB9OwpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50KERvY3VtZW50Jik7CiAgICAgCi0gICAgT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OwogfTsKIAogY2xhc3MgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudCBmaW5hbCA6IHB1
YmxpYyBIVE1MRGl2RWxlbWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODEsNyArMTM4MSw3IEBAIE9wdGlvbmFsQ3Vyc29y
IEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc28KICAgICAgICAgcmV0dXJuIE5vQ3Vyc29yQ2hhbmdl
OwogCiAgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gcmVuZGVyZXIgPyAmcmVuZGVyZXItPnN0eWxlKCkgOiBudWxscHRyOworICAg
IGF1dG8qIHN0eWxlID0gcmVuZGVyZXIgPyAmcmVuZGVyZXItPnN0eWxlKCkgOiBudWxscHRyOwog
ICAgIGJvb2wgaG9yaXpvbnRhbFRleHQgPSAhc3R5bGUgfHwgc3R5bGUtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCk7CiAgICAgY29uc3QgQ3Vyc29yJiBpQmVhbSA9IGhvcml6b250YWxUZXh0ID8g
aUJlYW1DdXJzb3IoKSA6IHZlcnRpY2FsVGV4dEN1cnNvcigpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBzdGF0aWMgaW5saW5lIGRvdWJsZSBz
b2x2ZVN0ZXBzRnVuY3Rpb24oCiAgICAgcmV0dXJuIGZsb29yKG51bVN0ZXBzICogdCkgLyBudW1T
dGVwczsKIH0KIAotQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShBbmltYXRpb24mIGFuaW1h
dGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9z
aXRlQW5pbWF0aW9uKQorQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRp
b24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlv
biogY29tcG9zaXRlQW5pbWF0aW9uKQogICAgIDogbV9vYmplY3QocmVuZGVyZXIpCiAgICAgLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbihjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBtX2FuaW1hdGlv
bihhbmltYXRpb24pCisgICAgLCBtX2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFu
aW1hdGlvbikpCiB7CiAgICAgLy8gQ29tcHV0ZSB0aGUgdG90YWwgZHVyYXRpb24KICAgICBpZiAo
bV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMgUmVmQ291
bnRlZDwKICAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb247CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQW5pbWF0aW9uQmFzZShBbmltYXRpb24m
IHRyYW5zaXRpb24sIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qKTsKKyAgICBB
bmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCos
IENvbXBvc2l0ZUFuaW1hdGlvbiopOwogICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKSB7IH0K
IAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7
IH0KQEAgLTEzOCw3ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgZG91YmxlIHByb2dyZXNzKGRvdWJs
ZSBzY2FsZSA9IDEsIGRvdWJsZSBvZmZzZXQgPSAwLCBjb25zdCBUaW1pbmdGdW5jdGlvbiogPSBu
dWxscHRyKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIHN0
YXRlIGNoYW5nZWQuCi0gICAgdmlydHVhbCBib29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9u
KiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBS
ZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSovLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRlKENvbXBv
c2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogLypjdXJy
ZW50U3R5bGUqLywgY29uc3QgUmVuZGVyU3R5bGUqIC8qdGFyZ2V0U3R5bGUqLywgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0eWxlKi8pID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFu
aW1hdGVkU3R5bGUqLykgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGNvbXB1dGVFeHRlbnRPZlRy
YW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3QgPSAwOwpAQCAtMTUwLDcgKzE1MCw3
IEBAIHB1YmxpYzoKICAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mKSBj
b25zdDsKIAogICAgIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb247IH0KLSAgICB2b2lkIHNldEFuaW1hdGlvbihBbmltYXRpb24mIGFuaW1hdGlv
bikgeyBtX2FuaW1hdGlvbiA9IGFuaW1hdGlvbjsgfQorICAgIHZvaWQgc2V0QW5pbWF0aW9uKGNv
bnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7IG1fYW5pbWF0aW9uID0gY29uc3RfY2FzdDxBbmlt
YXRpb24mPihhbmltYXRpb24pOyB9CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGFuaW1h
dGlvbiBpcyBvdmVycmlkZGVuLiBUaGlzIHdpbGwgb25seSBiZSB0aGUgY2FzZSBmb3IKICAgICAv
LyBJbXBsaWNpdEFuaW1hdGlvbnMgYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Ig
bm90IHdlIHNob3VsZCBmb3JjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OTMsOSArNTkzLDkgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVy
OjpjYW5jZWxBbmltYXRpbwogICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5
bnRoZXRpY1N0eWxlQ2hhbmdlKTsKIH0KIAotYm9vbCBBbmltYXRpb25Db250cm9sbGVyOjp1cGRh
dGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSYgbmV3U3R5
bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCitib29sIEFu
aW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSByZW5k
ZXJlci5oYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmcmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7
CisgICAgYXV0byogb2xkU3R5bGUgPSByZW5kZXJlci5oYXNJbml0aWFsaXplZFN0eWxlKCkgPyAm
cmVuZGVyZXIuc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKCghb2xkU3R5bGUgfHwgKCFvbGRT
dHlsZS0+YW5pbWF0aW9ucygpICYmICFvbGRTdHlsZS0+dHJhbnNpdGlvbnMoKSkpICYmICghbmV3
U3R5bGUuYW5pbWF0aW9ucygpICYmICFuZXdTdHlsZS50cmFuc2l0aW9ucygpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIH5BbmltYXRpb25Db250cm9sbGVyKCk7
CiAKICAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYpOwotICAgIGJvb2wg
dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKKyAgICBib29sIHVw
ZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHls
ZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVu
ZGVyRWxlbWVudCYpOwogCiAgICAgLy8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBl
eHRlbnQgb2YgYW55IHRyYW5zZm9ybSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgIH0KIH0K
IAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKIHsKICAgICAvLyBJZiBjdXJyZW50U3R5bGUg
aXMgbnVsbCBvciB0aGVyZSBhcmUgbm8gb2xkIG9yIG5ldyB0cmFuc2l0aW9ucywganVzdCBza2lw
IGl0CiAgICAgaWYgKCFjdXJyZW50U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMo
KSAmJiBtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkpCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAvLyBDaGVjayB0byBzZWUgaWYg
d2UgbmVlZCB0byB1cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwogICAgIGlmICh0YXJnZXRT
dHlsZS0+dHJhbnNpdGlvbnMoKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRh
cmdldFN0eWxlLT50cmFuc2l0aW9ucygpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgQW5p
bWF0aW9uJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9u
KGkpOworICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRp
b25zKCktPmFuaW1hdGlvbihpKTsKICAgICAgICAgICAgIGJvb2wgaXNBY3RpdmVUcmFuc2l0aW9u
ID0gIW1fc3VzcGVuZGVkICYmIChhbmltYXRpb24uZHVyYXRpb24oKSB8fCBhbmltYXRpb24uZGVs
YXkoKSA+IDApOwogCiAgICAgICAgICAgICBBbmltYXRpb246OkFuaW1hdGlvbk1vZGUgbW9kZSA9
IGFuaW1hdGlvbi5hbmltYXRpb25Nb2RlKCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgICAgICAgICAgICAgIC8vIGFuZCB3
ZSBoYXZlIHRvIHVzZSB0aGUgdW5hbmltYXRlZFN0eWxlIGZyb20gdGhlIGFuaW1hdGlvbi4gV2Ug
ZG8gdGhlIHRlc3QKICAgICAgICAgICAgICAgICAvLyBhZ2FpbnN0IHRoZSB1bmFuaW1hdGVkIHN0
eWxlIGhlcmUsIGJ1dCB3ZSAib3ZlcnJpZGUiIHRoZSB0cmFuc2l0aW9uIGxhdGVyLgogICAgICAg
ICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gZ2V0QW5p
bWF0aW9uRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGZy
b21TdHlsZSA9IGtleWZyYW1lQW5pbSA/IGtleWZyYW1lQW5pbS0+dW5hbmltYXRlZFN0eWxlKCkg
OiBjdXJyZW50U3R5bGU7CisgICAgICAgICAgICAgICAgYXV0byogZnJvbVN0eWxlID0ga2V5ZnJh
bWVBbmltID8ga2V5ZnJhbWVBbmltLT51bmFuaW1hdGVkU3R5bGUoKSA6IGN1cnJlbnRTdHlsZTsK
IAogICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgdHJhbnNpdGlv
biBmb3IgdGhpcyBwcm9wCiAgICAgICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxB
bmltID0gbV90cmFuc2l0aW9ucy5nZXQocHJvcCk7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgICAgICBtX3RyYW5zaXRpb25z
LnJlbW92ZShwcm9wZXJ0eVRvUmVtb3ZlKTsKIH0KIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb246
OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQordm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRhcmdldFN0eWxlKQogewogICAgIC8vIE5vdGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2
ZSBhbnkgYW5pbWF0aW9ucywgYW5kIGRpZG4ndCBoYXZlIGFueSBiZWZvcmUKICAgICBpZiAobV9r
ZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpICYmICF0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9u
cygpKQpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVL
ZXlmcmFtZUEKICAgICBpZiAodGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSkgewogICAgICAgICBp
bnQgbnVtQW5pbXMgPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5zaXplKCk7CiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkgewotICAgICAgICAgICAgQW5pbWF0
aW9uJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7
CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygp
LT5hbmltYXRpb24oaSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgYW5pbWF0aW9uTmFtZShh
bmltYXRpb24ubmFtZSgpKTsKIAogICAgICAgICAgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFu
aW1hdGlvbigpKQpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1
cGRhdGVLZXlmcmFtZUEKICAgICBzdGQ6OnN3YXAobmV3QW5pbWF0aW9ucywgbV9rZXlmcmFtZUFu
aW1hdGlvbnMpOwogfQogCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUm
IHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUp
Citib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRh
cmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpCiB7
CiAgICAgLy8gV2UgZG9uJ3QgZG8gYW55IHRyYW5zaXRpb25zIGlmIHdlIGRvbid0IGhhdmUgYSBj
dXJyZW50U3R5bGUgKG9uIHN0YXJ0dXApLgogICAgIHVwZGF0ZVRyYW5zaXRpb25zKCZyZW5kZXJl
ciwgY3VycmVudFN0eWxlLCAmdGFyZ2V0U3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lk
IGNsZWFyUmVuZGVyZXIoKTsKIAotICAgIGJvb2wgYW5pbWF0ZShSZW5kZXJFbGVtZW50JiwgUmVu
ZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVuZGVkU3R5bGUpOworICAgIGJvb2wgYW5pbWF0ZShS
ZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBibGVu
ZGVkU3R5bGUpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRT
dHlsZSgpIGNvbnN0OwogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9u
KExheW91dFJlY3QmKSBjb25zdDsKIApAQCAtODgsOCArODgsOCBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIENvbXBvc2l0ZUFuaW1hdGlvbihBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYpOwog
Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiwgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0
ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRp
b25zKFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmlt
YXRpb25zKFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwogICAgIAogICAgIHR5cGVkZWYgSGFzaE1h
cDxpbnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4+IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8S2V5ZnJh
bWVBbmltYXRpb24+PiBBbmltYXRpb25OYW1lTWFwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9uKEFuaW1hdGlvbiYgdHJh
bnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCog
cmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIFJlbmRlclN0eWxlKiBmcm9t
U3R5bGUpCitJbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0
aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJF
bGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGZyb21TdHlsZSkKICAgICA6IEFuaW1hdGlvbkJhc2UodHJhbnNpdGlvbiwgcmVu
ZGVyZXIsIGNvbXBBbmltKQogICAgICwgbV9mcm9tU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCpmcm9tU3R5bGUpKQogICAgICwgbV90cmFuc2l0aW9uUHJvcGVydHkodHJhbnNpdGlvbi5wcm9w
ZXJ0eSgpKQpAQCAtNjAsNyArNjAsNyBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzaG91bGRT
ZW5kRXZlbnRGCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlw
ZShpbkxpc3RlbmVyVHlwZSk7CiB9CiAKLWJvb2wgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUo
Q29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwg
UmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBh
bmltYXRlZFN0eWxlKQorYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVB
bmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5k
ZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpCiB7CiAgICAgLy8gSWYgd2UgZ2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9u
IGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBjbGVhbmluZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5p
bWF0aW9uLgogICAgIC8vIFNvIGp1c3QgcmV0dXJuLiBFdmVyeXRoaW5nIGlzIGFscmVhZHkgYWxs
IGNsZWFuZWQgdXAuCkBAIC0yMDUsNyArMjA1LDcgQEAgYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6
c2VuZFRyYW5zaXRpb25FdgogICAgIHJldHVybiBmYWxzZTsgLy8gRGlkbid0IGRpc3BhdGNoIGFu
IGV2ZW50CiB9CiAKLXZvaWQgSW1wbGljaXRBbmltYXRpb246OnJlc2V0KFJlbmRlclN0eWxlKiB0
bykKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlKiB0bykK
IHsKICAgICBBU1NFUlQodG8pOwogICAgIEFTU0VSVChtX2Zyb21TdHlsZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0
QW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgUmVuZGVy
RWxlbWVudDsKIC8vIGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgogY2xhc3MgSW1wbGljaXRB
bmltYXRpb24gOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBDU1NQcm9w
ZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9z
aXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUp
CisgICAgc3RhdGljIFJlZjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlv
biYgYW5pbWF0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBJbXBsaWNpdEFuaW1hdGlvbihhbmltYXRpb24sIGFuaW1hdGluZ1Byb3BlcnR5LCBy
ZW5kZXJlciwgY29tcG9zaXRlQW5pbWF0aW9uLCBmcm9tU3R5bGUpKTsKICAgICB9OwpAQCAtNTQs
OSArNTQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgdGltZU9m
ZnNldCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRBbmltYXRpb24oKSBvdmVycmlkZTsKIAotICAg
IGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKKyAgICBi
b29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFu
aW1hdGVkU3R5bGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZXNldChSZW5kZXJTdHls
ZSogdG8pOworICAgIHZvaWQgcmVzZXQoY29uc3QgUmVuZGVyU3R5bGUqIHRvKTsKIAogICAgIGJv
b2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCBv
dmVycmlkZTsKIApAQCAtODcsNyArODcsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0
ZToKLSAgICBJbXBsaWNpdEFuaW1hdGlvbihBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBSZW5k
ZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyU3R5bGUqKTsKKyAgICBJbXBs
aWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBSZW5kZXJFbGVt
ZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0
dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpOwogCiAgICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3
ZSBhcmUgYmxlbmRpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LZXlmcmFtZUFu
aW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRpb24oQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwg
UmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKK0tleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFt
ZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVu
ZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZShhbmltYXRpb24s
IHJlbmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgLCBtX2tleWZyYW1lcyhhbmltYXRp
b24ubmFtZSgpKQogICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCp1bmFuaW1hdGVkU3R5bGUpKQpAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OmZldGNoSW50ZXJ2YWxFbmQKICAgICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNl
dCwgcHJldktleWZyYW1lLnRpbWluZ0Z1bmN0aW9uKG5hbWUoKSkpOwogfQogCi1ib29sIEtleWZy
YW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0
aW9uLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCiti
b29sIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9z
aXRlQW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBS
ZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFu
aW1hdGVkU3R5bGUpCiB7CiAgICAgLy8gRmlyZSB0aGUgc3RhcnQgdGltZW91dCBpZiBuZWVkZWQK
ICAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQwLDEyIEBAIGNsYXNzIFJlbmRlclN0eWxlOwog
Ly8gQSBLZXlmcmFtZUFuaW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGFuIGV4cGxpY2l0IGFu
aW1hdGlvbiBmb3IgYSBzaW5nbGUgUmVuZGVyRWxlbWVudC4KIGNsYXNzIEtleWZyYW1lQW5pbWF0
aW9uIGZpbmFsIDogcHVibGljIEFuaW1hdGlvbkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8S2V5ZnJhbWVBbmltYXRpb24+IGNyZWF0ZShBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9u
LCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorICAgIHN0YXRpYyBSZWY8S2V5ZnJhbWVB
bmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25z
dCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCByZW5kZXJlciwgY29tcG9z
aXRlQW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKICAgICB9CiAKLSAgICBib29sIGFuaW1h
dGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxl
KiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBhbmltYXRl
KENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSog
Y3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZ2V0
QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+Jikgb3ZlcnJpZGU7CiAK
ICAgICBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC04OCw3ICs4OCw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBw
cml2YXRlOgotICAgIEtleWZyYW1lQW5pbWF0aW9uKEFuaW1hdGlvbiYsIFJlbmRlckVsZW1lbnQq
LCBDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKTsKKyAg
ICBLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgQ29t
cG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSk7CiAg
ICAgdmlydHVhbCB+S2V5ZnJhbWVBbmltYXRpb24oKTsKICAgICAKICAgICAvLyBHZXQgdGhlIHN0
eWxlcyBmb3IgdGhlIGdpdmVuIHByb3BlcnR5IHN1cnJvdW5kaW5nIHRoZSBjdXJyZW50IGFuaW1h
dGlvbiB0aW1lIGFuZCB0aGUgcHJvZ3Jlc3MgYmV0d2VlbiB0aGVtLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0JKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsNyArMjg3LDcgQEAg
c3RhdGljIE5vZGUqIGFuY2VzdG9yUmVzcG9uZGluZ1RvU2Nyb2xsVwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJl
ci0+c3R5bGUoKTsKKyAgICAgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKIAog
ICAgICAgICBpZiAocmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpICYmCiAgICAgICAgICAgICAo
c3R5bGUub3ZlcmZsb3dZKCkgPT0gT0FVVE8gfHwgc3R5bGUub3ZlcmZsb3dZKCkgPT0gT1NDUk9M
TCB8fCBzdHlsZS5vdmVyZmxvd1koKSA9PSBPT1ZFUkxBWSB8fApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIFJlbmRlck5hbWVkRmxvd1RocmVh
ZCYgRmxvd1RocmVhZENvbnRyb2wKIAogdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6c3R5bGVE
aWRDaGFuZ2UoKQogewotICAgIFJlbmRlclN0eWxlJiB2aWV3U3R5bGUgPSBtX3ZpZXctPnN0eWxl
KCk7CisgICAgYXV0byYgdmlld1N0eWxlID0gbV92aWV3LT5zdHlsZSgpOwogICAgIGZvciAoYXV0
byYgZmxvd1JlbmRlcmVyIDogKm1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCkKICAgICAgICAg
Zmxvd1JlbmRlcmVyLT5zZXRTdHlsZShSZW5kZXJGbG93VGhyZWFkOjpjcmVhdGVGbG93VGhyZWFk
U3R5bGUoJnZpZXdTdHlsZSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI4LDcgKzEzMjgs
NyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmNvbnN0cmFpblRvTGluZVRvcEFuCiBzdGF0aWMgTGF5
b3V0UmVjdCBjbGlwUmVjdEZvck5pbmVQaWVjZUltYWdlU3RyaXAoSW5saW5lRmxvd0JveCogYm94
LCBjb25zdCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UsIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVj
dCkKIHsKICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0KHBhaW50UmVjdCk7Ci0gICAgUmVuZGVyU3R5
bGUmIHN0eWxlID0gYm94LT5yZW5kZXJlcigpLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBi
b3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKICAgICBMYXlvdXRCb3hFeHRlbnQgb3V0c2V0cyA9IHN0
eWxlLmltYWdlT3V0c2V0cyhpbWFnZSk7CiAgICAgaWYgKGJveC0+aXNIb3Jpem9udGFsKCkpIHsK
ICAgICAgICAgY2xpcFJlY3Quc2V0WShwYWludFJlY3QueSgpIC0gb3V0c2V0cy50b3AoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4Nyw3ICsyODcsNyBAQCBzdGF0aWMgYm9vbCBib3JkZXJPclBhZGRpbmdM
b2dpY2FsV2lkdGhDCiAKIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7Ci0gICAgUmVuZGVy
U3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBuZXdTdHlsZSA9IHN0eWxlKCk7
CiAKICAgICBib29sIGhhZFRyYW5zZm9ybSA9IGhhc1RyYW5zZm9ybSgpOwogICAgIGJvb2wgZmxv
d1RocmVhZENvbnRhaW5pbmdCbG9ja0ludmFsaWRhdGVkID0gZmFsc2U7CkBAIC0yODM3LDcgKzI4
MzcsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KGJvb2wgCiAgICAgICAg
IHJldHVybiBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQ
b3NpdGlvbk1vZGUpOwogCiAgICAgaWYgKGZpcnN0TGluZSAmJiB2aWV3KCkudXNlc0ZpcnN0TGlu
ZVJ1bGVzKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUmIHMgPSBmaXJzdExpbmUgPyBmaXJzdExp
bmVTdHlsZSgpIDogc3R5bGUoKTsKKyAgICAgICAgYXV0byYgcyA9IGZpcnN0TGluZSA/IGZpcnN0
TGluZVN0eWxlKCkgOiBzdHlsZSgpOwogICAgICAgICBpZiAoJnMgIT0gJnN0eWxlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gcy5jb21wdXRlZExpbmVIZWlnaHQoKTsKICAgICB9CkBAIC0yOTc2LDkg
KzI5NzYsOSBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJsb2NrCiAgICAg
cmV0dXJuIGZpcnN0TGluZUJsb2NrOwogfQogCi1zdGF0aWMgUmVuZGVyU3R5bGUmIHN0eWxlRm9y
Rmlyc3RMZXR0ZXIoUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0
KiBmaXJzdExldHRlckNvbnRhaW5lcikKK3N0YXRpYyBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGVG
b3JGaXJzdExldHRlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJPYmpl
Y3QqIGZpcnN0TGV0dGVyQ29udGFpbmVyKQogewotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHls
ZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldENhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUiwg
JmZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgpKTsKKyAgICBhdXRvKiBwc2V1
ZG9TdHlsZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldE11dGFibGVDYWNoZWRQc2V1ZG9TdHlsZShG
SVJTVF9MRVRURVIsICZmaXJzdExldHRlckNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSk7CiAg
ICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpbml0aWFsIGxldHRlciBkcm9wIHRoYXQgaXMgPj0g
MSwgdGhlbiB3ZSBuZWVkIHRvIGZvcmNlIGZsb2F0aW5nIHRvIGJlIG9uLgogICAgIGlmIChwc2V1
ZG9TdHlsZS0+aW5pdGlhbExldHRlckRyb3AoKSA+PSAxICYmICFwc2V1ZG9TdHlsZS0+aXNGbG9h
dGluZygpKQpAQCAtMzA2MSw3ICszMDYxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRmly
c3RMZXR0ZXJTdHlsZQogewogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyID0gY3VycmVu
dENoaWxkLT5wYXJlbnQoKTsKICAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckNvbnRhaW5l
ciA9IGZpcnN0TGV0dGVyLT5wYXJlbnQoKTsKLSAgICBSZW5kZXJTdHlsZSYgcHNldWRvU3R5bGUg
PSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVyQ29udGFp
bmVyKTsKKyAgICBhdXRvJiBwc2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RM
ZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwogICAgIEFTU0VSVChmaXJzdExldHRl
ci0+aXNGbG9hdGluZygpIHx8IGZpcnN0TGV0dGVyLT5pc0lubGluZSgpKTsKIAogICAgIGlmIChT
dHlsZTo6ZGV0ZXJtaW5lQ2hhbmdlKGZpcnN0TGV0dGVyLT5zdHlsZSgpLCBwc2V1ZG9TdHlsZSkg
PT0gU3R5bGU6OkRldGFjaCkgewpAQCAtMzEwMiw3ICszMTAyLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6dXBkYXRlRmlyc3RMZXR0ZXJTdHlsZQogdm9pZCBSZW5kZXJCbG9jazo6Y3JlYXRlRmlyc3RM
ZXR0ZXJSZW5kZXJlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBSZW5kZXJUZXh0
KiBjdXJyZW50VGV4dENoaWxkKQogewogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29u
dGFpbmVyID0gY3VycmVudFRleHRDaGlsZC0+cGFyZW50KCk7Ci0gICAgUmVuZGVyU3R5bGUmIHBz
ZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJzdExldHRlckJsb2NrLCBmaXJzdExl
dHRlckNvbnRhaW5lcik7CisgICAgYXV0byYgcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0
dGVyKGZpcnN0TGV0dGVyQmxvY2ssIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKICAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogZmlyc3RMZXR0ZXIgPSBudWxscHRyOwogICAgIGlmIChwc2V1ZG9TdHls
ZS5kaXNwbGF5KCkgPT0gSU5MSU5FKQogICAgICAgICBmaXJzdExldHRlciA9IG5ldyBSZW5kZXJJ
bmxpbmUoZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNsb25lKHBzZXVkb1N0eWxlKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2aXNp
b24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MTUsNyArMTYxNSw3IEBAIExheW91dFVuaXQgUmVuZGVy
QmxvY2tGbG93OjphZGp1c3RCbG9ja0MKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
aW5saW5lIExheW91dFVuaXQgY2FsY3VsYXRlTWluaW11bVBhZ2VIZWlnaHQoUmVuZGVyU3R5bGUm
IHJlbmRlclN0eWxlLCBSb290SW5saW5lQm94JiBsYXN0TGluZSwgTGF5b3V0VW5pdCBsaW5lVG9w
LCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgY2FsY3Vs
YXRlTWluaW11bVBhZ2VIZWlnaHQoY29uc3QgUmVuZGVyU3R5bGUmIHJlbmRlclN0eWxlLCBSb290
SW5saW5lQm94JiBsYXN0TGluZSwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVC
b3R0b20pCiB7CiAgICAgLy8gV2UgbWF5IHJlcXVpcmUgYSBjZXJ0YWluIG1pbmltdW0gbnVtYmVy
IG9mIGxpbmVzIHBlciBwYWdlIGluIG9yZGVyIHRvIHNhdGlzZnkKICAgICAvLyBvcnBoYW5zIGFu
ZCB3aWRvd3MsIGFuZCB0aGF0IG1heSBhZmZlY3QgdGhlIG1pbmltdW0gcGFnZSBoZWlnaHQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmCiAgICAgaWYgKGlzRG9jRWxlbWVudFJlbmRlcmVyIHx8IGlzQm9keVJlbmRlcmVyKSB7
CiAgICAgICAgIC8vIFByb3BhZ2F0ZSB0aGUgbmV3IHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0aW9u
IHVwIHRvIHRoZSBSZW5kZXJWaWV3LgogICAgICAgICBhdXRvKiBkb2N1bWVudEVsZW1lbnRSZW5k
ZXJlciA9IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCk7Ci0gICAgICAg
IFJlbmRlclN0eWxlJiB2aWV3U3R5bGUgPSB2aWV3KCkuc3R5bGUoKTsKKyAgICAgICAgYXV0byYg
dmlld1N0eWxlID0gdmlldygpLm11dGFibGVTdHlsZSgpOwogICAgICAgICBib29sIHZpZXdDaGFu
Z2VkV3JpdGluZ01vZGUgPSBmYWxzZTsKICAgICAgICAgYm9vbCByb290U3R5bGVDaGFuZ2VkID0g
ZmFsc2U7CiAgICAgICAgIGJvb2wgdmlld1N0eWxlQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMzkzLDcg
KzM5Myw3IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYKICAgICAg
ICAgICAgIHZpZXdTdHlsZS5zZXREaXJlY3Rpb24obmV3U3R5bGUuZGlyZWN0aW9uKCkpOwogICAg
ICAgICAgICAgdmlld1N0eWxlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBpZiAoaXNCb2R5
UmVuZGVyZXIpIHsKLSAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPnN0eWxlKCkuc2V0RGly
ZWN0aW9uKG5ld1N0eWxlLmRpcmVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICByb290UmVuZGVy
ZXItPm11dGFibGVTdHlsZSgpLnNldERpcmVjdGlvbihuZXdTdHlsZS5kaXJlY3Rpb24oKSk7CiAg
ICAgICAgICAgICAgICAgcm9vdFN0eWxlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKQEAgLTQwNyw3
ICs0MDcsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmCiAgICAg
ICAgICAgICB2aWV3KCkubWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwog
ICAgICAgICAgICAgaWYgKGlzQm9keVJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgcm9vdFN0
eWxlQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5zdHlsZSgp
LnNldFdyaXRpbmdNb2RlKG5ld1N0eWxlLndyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgICAg
IHJvb3RSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0V3JpdGluZ01vZGUobmV3U3R5bGUud3Jp
dGluZ01vZGUoKSk7CiAgICAgICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5zZXRIb3Jpem9udGFs
V3JpdGluZ01vZGUobmV3U3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
QEAgLTQzMiw4ICs0MzIsOCBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmCiAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgdGhlIGJvZHkgZm9udCBiYWNrIHVwIHRvIHRo
ZSBSZW5kZXJWaWV3IGFuZCB1c2UgaXQgYXMKICAgICAgICAgICAgIC8vIHRoZSBiYXNpcyBvZiB0
aGUgZ3JpZC4KICAgICAgICAgICAgIGlmIChuZXdTdHlsZS5mb250RGVzY3JpcHRpb24oKSAhPSB2
aWV3KCkuc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKSkgewotICAgICAgICAgICAgICAgIHZpZXco
KS5zdHlsZSgpLnNldEZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5mb250RGVzY3JpcHRpb24oKSk7
Ci0gICAgICAgICAgICAgICAgdmlldygpLnN0eWxlKCkuZm9udENhc2NhZGUoKS51cGRhdGUoJmRv
Y3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgICAgIHZpZXcoKS5tdXRhYmxl
U3R5bGUoKS5zZXRGb250RGVzY3JpcHRpb24obmV3U3R5bGUuZm9udERlc2NyaXB0aW9uKCkpOwor
ICAgICAgICAgICAgICAgIHZpZXcoKS5tdXRhYmxlU3R5bGUoKS5mb250Q2FzY2FkZSgpLnVwZGF0
ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IApAQCAtNjgwLDcgKzY4MCw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb25zdHJhaW5Db250
ZW50Qm8KIAogUm91bmRlZFJlY3Q6OlJhZGlpIFJlbmRlckJveDo6Ym9yZGVyUmFkaWkoKSBjb25z
dAogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CisgICAgYXV0byYg
c3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogICAgIExheW91dFJlY3QgYm91bmRzID0gZnJhbWVSZWN0
KCk7CiAKICAgICB1bnNpZ25lZCBib3JkZXJMZWZ0ID0gc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCk7
CkBAIC00ODE0LDcgKzQ4MTQsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyQm94OjplbmNsb3NpbmdG
bG9hdFBhCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQm94Ojps
b2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxWaXN1YWxPdmVyZmxv
d1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0
CiB7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRp
b24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCkBAIC00ODIyLDcgKzQ4MjIsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9n
aWNhbFZpc3VhbE92ZXJmCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVy
Qm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9y
UHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAg
IC8vIElmIHRoZSB3cml0aW5nIG1vZGVzIG9mIHRoZSBjaGlsZCBhbmQgcGFyZW50IG1hdGNoLCB0
aGVuIHdlIGRvbid0IGhhdmUgdG8gCiAgICAgLy8gZG8gYW55dGhpbmcgZmFuY3kuIEp1c3QgcmV0
dXJuIHRoZSByZXN1bHQuCkBAIC00ODQwLDcgKzQ4NDAsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJv
eDo6dmlzdWFsT3ZlcmZsb3dSZWN0CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91dFJlY3Qg
UmVuZGVyQm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxM
YXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpIGNvbnN0CiB7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gbGF5b3V0T3ZlcmZsb3dSZWN0
Rm9yUHJvcGFnYXRpb24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC00ODQ4LDcgKzQ4NDgsNyBAQCBMYXlvdXRSZWN0IFJl
bmRlckJveDo6bG9naWNhbExheW91dE92ZXJmCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91
dFJlY3QgUmVuZGVyQm94OjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6bGF5b3V0T3Zl
cmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBj
b25zdAogewogICAgIC8vIE9ubHkgcHJvcGFnYXRlIGludGVyaW9yIGxheW91dCBvdmVyZmxvdyBp
ZiB3ZSBkb24ndCBjbGlwIGl0LgogICAgIExheW91dFJlY3QgcmVjdCA9IGJvcmRlckJveFJlY3Qo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5
KQpAQCAtNTYzLDEwICs1NjMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgYXBwbHlUb3BMZWZ0
TG9jYXRpb25PZmZzZXRXaXRoRmxpcHBpbmcocG9pbnQpOwogICAgIH0KIAotICAgIExheW91dFJl
Y3QgbG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikg
Y29uc3Q7Ci0gICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihS
ZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIExheW91dFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93
UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTGF5b3V0UmVjdCBs
YXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OworICAg
IExheW91dFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0
IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RG
b3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJlY3Qg
bG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxl
KikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlv
bihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgYm9vbCBoYXNSZW5kZXJPdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3c7IH0gICAgCiAgICAgYm9vbCBoYXNWaXN1YWxP
dmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgJiYgIWJvcmRlckJveFJlY3QoKS5j
b250YWlucyhtX292ZXJmbG93LT52aXN1YWxPdmVyZmxvd1JlY3QoKSk7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgxLDcgKzU4MSw3IEBAIFJvdW5kZWRSZWN0
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpiYWNrZ3IKICAgICByZXR1cm4gZ2V0QmFja2dyb3VuZFJv
dW5kZWRSZWN0KGJvcmRlclJlY3QsIGJveCwgYm94U2l6ZS53aWR0aCgpLCBib3hTaXplLmhlaWdo
dCgpLCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7CiB9
CiAKLXN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyB2b2lkIGFwcGx5Qm94U2hh
ZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkKIHsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBib3hTaGFkb3cgPSBzdHlsZS0+
Ym94U2hhZG93KCk7CiAgICAgd2hpbGUgKGJveFNoYWRvdy0+c3R5bGUoKSAhPSBOb3JtYWwpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBSZW5kZXJCdXR0b246OmFkZENoaWxk
KFJlbmRlck9iamVjdAogICAgICAgICAvLyBDcmVhdGUgYW4gYW5vbnltb3VzIGJsb2NrLgogICAg
ICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7CiAgICAgICAgIG1faW5uZXIgPSBjcmVhdGVBbm9u
eW1vdXNCbG9jayhzdHlsZSgpLmRpc3BsYXkoKSk7Ci0gICAgICAgIHNldHVwSW5uZXJTdHlsZSgm
bV9pbm5lci0+c3R5bGUoKSk7CisgICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5lci0+bXV0
YWJsZVN0eWxlKCkpOwogICAgICAgICBSZW5kZXJGbGV4aWJsZUJveDo6YWRkQ2hpbGQobV9pbm5l
cik7CiAgICAgfQogICAgIApAQCAtOTcsOSArOTcsOSBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6c3R5
bGVXaWxsQ2hhbmdlKFN0eWxlCiAgICAgICAgIC8vIGl0IHJpZ2h0IGJlbG93LiBIZXJlIHdlIGNo
YW5nZSBpdCBiYWNrIHRvIDAgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBoaW50
CiAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVuY2UuIFNhbWUgZ29lcyBmb3IgdGhl
IG90aGVyIHByb3BlcnRpZXMuCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgaGFjayB1bm5l
Y2Vzc2FyeS4KLSAgICAgICAgbV9pbm5lci0+c3R5bGUoKS5zZXRGbGV4R3JvdyhuZXdTdHlsZS5p
bml0aWFsRmxleEdyb3coKSk7Ci0gICAgICAgIG1faW5uZXItPnN0eWxlKCkuc2V0TWFyZ2luVG9w
KG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7Ci0gICAgICAgIG1faW5uZXItPnN0eWxlKCkuc2V0
TWFyZ2luQm90dG9tKG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7CisgICAgICAgIG1faW5uZXIt
Pm11dGFibGVTdHlsZSgpLnNldEZsZXhHcm93KG5ld1N0eWxlLmluaXRpYWxGbGV4R3JvdygpKTsK
KyAgICAgICAgbV9pbm5lci0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9wKG5ld1N0eWxlLmlu
aXRpYWxNYXJnaW4oKSk7CisgICAgICAgIG1faW5uZXItPm11dGFibGVTdHlsZSgpLnNldE1hcmdp
bkJvdHRvbShuZXdTdHlsZS5pbml0aWFsTWFyZ2luKCkpOwogICAgIH0KICAgICBSZW5kZXJCbG9j
azo6c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5ld1N0eWxlKTsKIH0KQEAgLTEwOSw3ICsxMDksNyBA
QCB2b2lkIFJlbmRlckJ1dHRvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiAgICAgUmVuZGVyQmxv
Y2s6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKIAogICAgIGlmIChtX2lubmVyKSAv
LyBSZW5kZXJCbG9jayBoYW5kbGVkIHVwZGF0aW5nIHRoZSBhbm9ueW1vdXMgYmxvY2sncyBzdHls
ZS4KLSAgICAgICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5zdHlsZSgpKTsKKyAgICAgICAg
c2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5tdXRhYmxlU3R5bGUoKSk7CiB9CiAKIHZvaWQgUmVu
ZGVyQnV0dG9uOjpzZXR1cElubmVyU3R5bGUoUmVuZGVyU3R5bGUqIGlubmVyU3R5bGUpIApAQCAt
MTc0LDcgKzE3NCw3IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjpsYXlvdXQoKQogICAgIFJlbmRlckZs
ZXhpYmxlQm94OjpsYXlvdXQoKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJlIGFk
anVzdGluZyBzdHlsZXMgZHVyaW5nIGxheW91dC4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njc1NDkz
Pi4KLSAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoc3R5bGUoKSwg
KnRoaXMpOworICAgIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhtdXRh
YmxlU3R5bGUoKSwgKnRoaXMpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHN0
YXRpYyBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHRGb3JDaGlsZCgKIAogdm9pZCBSZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3g6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRTdHls
ZSA9IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZzdHlsZSgpIDogbnVsbHB0cjsKKyAgICBhdXRv
KiBvbGRTdHlsZSA9IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZzdHlsZSgpIDogbnVsbHB0cjsK
ICAgICBpZiAob2xkU3R5bGUgJiYgIW9sZFN0eWxlLT5saW5lQ2xhbXAoKS5pc05vbmUoKSAmJiBu
ZXdTdHlsZS5saW5lQ2xhbXAoKS5pc05vbmUoKSkKICAgICAgICAgY2xlYXJMaW5lQ2xhbXAoKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsMTEgKzIwNSw2IEBAIFJlbmRlclB0cjxSZW5kZXJF
bGVtZW50PiBSZW5kZXJFbGVtZW50OjoKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotZW51bSBT
dHlsZUNhY2hlU3RhdGUgewotICAgIENhY2hlZCwKLSAgICBVbmNhY2hlZAotfTsKLQogc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZW50Ojp1bmNhY2hlZEZpcnN0TGluZVN0
eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoIXZpZXcoKS51c2VzRmly
c3RMaW5lUnVsZXMoKSkKQEAgLTIyMSwxNCArMjE2LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTdHlsZT4gUmVuZGVyRWxlbWUKICAgICAgICAgaWYgKFJlbmRlckJsb2NrKiBmaXJzdExpbmVC
bG9jayA9IHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuZmlyc3RMaW5lQmxvY2soKSkKICAgICAg
ICAgICAgIHJldHVybiBmaXJzdExpbmVCbG9jay0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShQc2V1
ZG9TdHlsZVJlcXVlc3QoRklSU1RfTElORSksIHN0eWxlLCBmaXJzdExpbmVCbG9jayA9PSB0aGlz
ID8gc3R5bGUgOiBudWxscHRyKTsKICAgICB9IGVsc2UgaWYgKCFyZW5kZXJlckZvckZpcnN0TGlu
ZVN0eWxlLmlzQW5vbnltb3VzKCkgJiYgcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5pc1JlbmRl
cklubGluZSgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSA9IHJlbmRlcmVy
Rm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CisgICAgICAgIGF1
dG8mIHBhcmVudFN0eWxlID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+Zmly
c3RMaW5lU3R5bGUoKTsKICAgICAgICAgaWYgKCZwYXJlbnRTdHlsZSAhPSAmcmVuZGVyZXJGb3JG
aXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+c3R5bGUoKSkKICAgICAgICAgICAgIHJldHVybiByZW5k
ZXJlckZvckZpcnN0TGluZVN0eWxlLmdldFVuY2FjaGVkUHNldWRvU3R5bGUoUHNldWRvU3R5bGVS
ZXF1ZXN0KEZJUlNUX0xJTkVfSU5IRVJJVEVEKSwgJnBhcmVudFN0eWxlLCBzdHlsZSk7CiAgICAg
fQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1SZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6
Y2FjaGVkRmlyc3RMaW5lU3R5bGUoKSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIFJlbmRlckVs
ZW1lbnQ6OmNhY2hlZEZpcnN0TGluZVN0eWxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQodmlldygp
LnVzZXNGaXJzdExpbmVSdWxlcygpKTsKIApAQCAtMjM4LDEwICsyMzMsMTAgQEAgUmVuZGVyU3R5
bGUqIFJlbmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TAogICAgICAgICBpZiAoUmVuZGVyQmxvY2sq
IGZpcnN0TGluZUJsb2NrID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5maXJzdExpbmVCbG9j
aygpKQogICAgICAgICAgICAgcmV0dXJuIGZpcnN0TGluZUJsb2NrLT5nZXRDYWNoZWRQc2V1ZG9T
dHlsZShGSVJTVF9MSU5FLCAmc3R5bGUoKSk7CiAgICAgfSBlbHNlIGlmICghcmVuZGVyZXJGb3JG
aXJzdExpbmVTdHlsZS5pc0Fub255bW91cygpICYmIHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUu
aXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUgPSBy
ZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOworICAg
ICAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50
KCktPmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGlmICgmcGFyZW50U3R5bGUgIT0gJnJlbmRl
cmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCktPnN0eWxlKCkpIHsKICAgICAgICAgICAgIC8v
IEEgZmlyc3QtbGluZSBzdHlsZSBpcyBpbiBlZmZlY3QuIENhY2hlIGEgZmlyc3QtbGluZSBzdHls
ZSBmb3Igb3Vyc2VsdmVzLgotICAgICAgICAgICAgcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5z
dHlsZSgpLnNldEhhc1BzZXVkb1N0eWxlKEZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKKyAgICAgICAg
ICAgIHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUubV9zdHlsZS5zZXRIYXNQc2V1ZG9TdHlsZShG
SVJTVF9MSU5FX0lOSEVSSVRFRCk7CiAgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXJGb3JGaXJz
dExpbmVTdHlsZS5nZXRDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MSU5FX0lOSEVSSVRFRCwgJnBh
cmVudFN0eWxlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0OSw3ICsyNDQsNyBAQCBSZW5kZXJT
dHlsZSogUmVuZGVyRWxlbWVudDo6Y2FjaGVkRmlyc3RMCiAgICAgcmV0dXJuICZzdHlsZSgpOwog
fQogCi1SZW5kZXJTdHlsZSYgUmVuZGVyRWxlbWVudDo6Zmlyc3RMaW5lU3R5bGUoKSBjb25zdAor
Y29uc3QgUmVuZGVyU3R5bGUmIFJlbmRlckVsZW1lbnQ6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpID8gKmNhY2hlZEZpcnN0
TGluZVN0eWxlKCkgOiBzdHlsZSgpOwogfQpAQCAtODA2LDcgKzgwMSw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCByZW5kZXJlckhhc0JhY2tncm91bmQKIAogdm9pZCBSZW5kZXJFbGVtZW50OjpzdHls
ZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdT
dHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxl
KCkgPyAmc3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogb2xkU3R5bGUgPSBoYXNJbml0aWFs
aXplZFN0eWxlKCkgPyAmc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKG9sZFN0eWxlKSB7CiAg
ICAgICAgIC8vIElmIG91ciB6LWluZGV4IGNoYW5nZXMgdmFsdWUgb3Igb3VyIHZpc2liaWxpdHkg
Y2hhbmdlcywKICAgICAgICAgLy8gd2UgbmVlZCB0byBkaXJ0eSBvdXIgc3RhY2tpbmcgY29udGV4
dCdzIHotb3JkZXIgbGlzdC4KQEAgLTE1MzUsNyArMTUzMCwyMiBAQCB2b2lkIFJlbmRlckVsZW1l
bnQ6OmFkZENvbnRyb2xTdGF0ZXNGb3JSCiAgICAgY29udHJvbFN0YXRlc1JlbmRlcmVyTWFwKCku
YWRkKG8sIHN0YXRlcyk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpnZXRDYWNo
ZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8sIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkg
Y29uc3QKK2NvbnN0IFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpnZXRDYWNoZWRQc2V1ZG9T
dHlsZShQc2V1ZG9JZCBwc2V1ZG8sIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29u
c3QKK3sKKyAgICBpZiAocHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQgJiYgIXN0eWxl
KCkuaGFzUHNldWRvU3R5bGUocHNldWRvKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBSZW5kZXJTdHlsZSogY2FjaGVkU3R5bGUgPSBzdHlsZSgpLmdldENhY2hlZFBzZXVkb1N0eWxl
KHBzZXVkbyk7CisgICAgaWYgKGNhY2hlZFN0eWxlKQorICAgICAgICByZXR1cm4gY2FjaGVkU3R5
bGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdCA9IGdldFVuY2Fj
aGVkUHNldWRvU3R5bGUoUHNldWRvU3R5bGVSZXF1ZXN0KHBzZXVkbyksIHBhcmVudFN0eWxlKTsK
KyAgICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJTdHlsZSY+
KG1fc3R5bGUpLmFkZENhY2hlZFBzZXVkb1N0eWxlKFdURk1vdmUocmVzdWx0KSk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK1JlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpnZXRNdXRhYmxl
Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpCiB7CiAgICAgaWYgKHBzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEICYm
ICFzdHlsZSgpLmhhc1BzZXVkb1N0eWxlKHBzZXVkbykpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtMTU0NiwxMSArMTU1NiwxMSBAQCBSZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6Z2V0
Q2FjaGVkUHNlCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdCA9IGdl
dFVuY2FjaGVkUHNldWRvU3R5bGUoUHNldWRvU3R5bGVSZXF1ZXN0KHBzZXVkbyksIHBhcmVudFN0
eWxlKTsKICAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gc3R5bGUoKS5hZGRDYWNoZWRQ
c2V1ZG9TdHlsZShXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICByZXR1cm4gbV9zdHlsZS5hZGRD
YWNoZWRQc2V1ZG9TdHlsZShXVEZNb3ZlKHJlc3VsdCkpOwogICAgIHJldHVybiBudWxscHRyOwog
fQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVsZW1lbnQ6OmdldFVuY2Fj
aGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVl
c3QsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIG93blN0eWxlKSBjb25z
dAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZW50OjpnZXRVbmNhY2hl
ZFBzZXVkb1N0eWxlKGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0
LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBvd25T
dHlsZSkgY29uc3QKIHsKICAgICBpZiAocHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkIDwgRklS
U1RfSU5URVJOQUxfUFNFVURPSUQgJiYgIW93blN0eWxlICYmICFzdHlsZSgpLmhhc1BzZXVkb1N0
eWxlKHBzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtMjA2Niw3ICsyMDc2LDcgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjpwYWludE91dGxpbmUo
UGFpbnRJbgogICAgIGlmICghaGFzT3V0bGluZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CisgICAgYXV0byYgc3R5bGVUb1VzZSA9
IHN0eWxlKCk7CiAgICAgZmxvYXQgb3V0bGluZVdpZHRoID0gZmxvb3JUb0RldmljZVBpeGVsKHN0
eWxlVG9Vc2Uub3V0bGluZVdpZHRoKCksIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CiAgICAgZmxvYXQgb3V0bGluZU9mZnNldCA9IGZsb29yVG9EZXZpY2VQaXhlbChzdHlsZVRvVXNl
Lm91dGxpbmVPZmZzZXQoKSwgZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw4ICs0MCwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0luaXRpYWxp
emVkU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2hhc0luaXRpYWxpemVkU3R5bGU7IH0KIAotICAg
IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5
bGUmPihtX3N0eWxlKTsgfQotICAgIFJlbmRlclN0eWxlJiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0
OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7
IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKKworICAg
IC8vIEZJWE1FOiBTdHlsZSBzaG91bGRuJ3QgYmUgbXV0YXRlZC4KKyAgICBSZW5kZXJTdHlsZSYg
bXV0YWJsZVN0eWxlKCkgeyByZXR1cm4gbV9zdHlsZTsgfQogCiAgICAgdm9pZCBpbml0aWFsaXpl
U3R5bGUoKTsKIApAQCAtNTIsOCArNTUsOSBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGUgcHNldWRv
IGVsZW1lbnQgc3R5bGUgY2FuIGJlIGNhY2hlZCBvciB1bmNhY2hlZC4gIFVzZSB0aGUgY2FjaGVk
IG1ldGhvZCBpZiB0aGUgcHNldWRvIGVsZW1lbnQgZG9lc24ndCByZXNwZWN0CiAgICAgLy8gYW55
IHBzZXVkbyBjbGFzc2VzIChhbmQgdGhlcmVmb3JlIGhhcyBubyBjb25jZXB0IG9mIGNoYW5naW5n
IHN0YXRlKS4KLSAgICBSZW5kZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9T
dHlsZVJlcXVlc3QmLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyLCBSZW5kZXJT
dHlsZSogb3duU3R5bGUgPSBudWxscHRyKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSog
Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IG51bGxwdHIpIGNvbnN0OworICAgIFJlbmRlclN0eWxlKiBnZXRNdXRhYmxlQ2FjaGVk
UHNldWRvU3R5bGUoUHNldWRvSWQsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51
bGxwdHIpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0VW5jYWNoZWRQc2V1
ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBudWxscHRyLCBjb25zdCBSZW5kZXJTdHlsZSogb3duU3R5bGUgPSBudWxscHRy
KSBjb25zdDsKIAogICAgIC8vIFRoaXMgaXMgbnVsbCBmb3IgYW5vbnltb3VzIHJlbmRlcmVycy4K
ICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4o
UmVuZGVyT2JqZWN0Ojpub2RlKCkpOyB9CkBAIC0yOTgsNyArMzAyLDcgQEAgcHJpdmF0ZToKICNl
bmRpZgogCiAgICAgU3R5bGVEaWZmZXJlbmNlIGFkanVzdFN0eWxlRGlmZmVyZW5jZShTdHlsZURp
ZmZlcmVuY2UsIHVuc2lnbmVkIGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKSBjb25zdDsKLSAg
ICBSZW5kZXJTdHlsZSogY2FjaGVkRmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBS
ZW5kZXJTdHlsZSogY2FjaGVkRmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKIAogICAgIHZvaWQgbmV3
SW1hZ2VBbmltYXRpb25GcmFtZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYpIGZpbmFsOwogCkBAIC00
NTAsMTQgKzQ1NCwxNCBAQCBpbmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6OmlzUmVuZGVySW5saW5l
CiAgICAgcmV0dXJuIGlzPFJlbmRlckVsZW1lbnQ+KCp0aGlzKSAmJiBkb3duY2FzdDxSZW5kZXJF
bGVtZW50PigqdGhpcykuaXNSZW5kZXJJbmxpbmUoKTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxl
JiBSZW5kZXJPYmplY3Q6OnN0eWxlKCkgY29uc3QKK2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYg
UmVuZGVyT2JqZWN0OjpzdHlsZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4dCgpKQogICAgICAg
ICByZXR1cm4gbV9wYXJlbnQtPnN0eWxlKCk7CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckVs
ZW1lbnQ+KCp0aGlzKS5zdHlsZSgpOwogfQogCi1pbmxpbmUgUmVuZGVyU3R5bGUmIFJlbmRlck9i
amVjdDo6Zmlyc3RMaW5lU3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlJiBS
ZW5kZXJPYmplY3Q6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QKIHsKICAgICBpZiAoaXNUZXh0KCkp
CiAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Zmlyc3RMaW5lU3R5bGUoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVk
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIyLDggKzUyMiw4IEBAIHZvaWQgUmVuZGVy
RW1iZWRkZWRPYmplY3Q6OmxheW91dCgpCiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRl
UHVzaGVyKHZpZXcoKSwgKnRoaXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc1RyYW5zZm9ybSgpIHx8
IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkp
OwogICAgIAogICAgIGNoaWxkQm94LnNldExvY2F0aW9uKExheW91dFBvaW50KGJvcmRlckxlZnQo
KSwgYm9yZGVyVG9wKCkpICsgTGF5b3V0U2l6ZShwYWRkaW5nTGVmdCgpLCBwYWRkaW5nVG9wKCkp
KTsKLSAgICBjaGlsZEJveC5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQo
KSwgRml4ZWQpKTsKLSAgICBjaGlsZEJveC5zdHlsZSgpLnNldFdpZHRoKExlbmd0aChuZXdTaXpl
LndpZHRoKCksIEZpeGVkKSk7CisgICAgY2hpbGRCb3gubXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0
KExlbmd0aChuZXdTaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIGNoaWxkQm94Lm11dGFibGVT
dHlsZSgpLnNldFdpZHRoKExlbmd0aChuZXdTaXplLndpZHRoKCksIEZpeGVkKSk7CiAgICAgY2hp
bGRCb3guc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICBjaGlsZEJveC5sYXlvdXQo
KTsKICAgICBjbGVhckNoaWxkTmVlZHNMYXlvdXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjksNyArNjksNyBAQCBSZW5kZXJGbG93VGhyZWFkOjpSZW5kZXJGbG93VGhyZWFkKERv
Y3VtCiAgICAgc2V0Rmxvd1RocmVhZFN0YXRlKEluc2lkZU91dE9mRmxvd1RocmVhZCk7CiB9CiAK
LVJlbmRlclN0eWxlIFJlbmRlckZsb3dUaHJlYWQ6OmNyZWF0ZUZsb3dUaHJlYWRTdHlsZShSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpCitSZW5kZXJTdHlsZSBSZW5kZXJGbG93VGhyZWFkOjpjcmVh
dGVGbG93VGhyZWFkU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAg
IGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgbmV3U3R5bGUuaW5o
ZXJpdEZyb20ocGFyZW50U3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3
IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgd2hlbiBhIGRlc2NlbmRhbnQgYm94J3MgbGF5b3V0
IGlzIGZpbmlzaGVkIGFuZCBpdCBoYXMgYmVlbiBwb3NpdGlvbmVkIHdpdGhpbiBpdHMgY29udGFp
bmVyLgogICAgIHZpcnR1YWwgdm9pZCBmbG93VGhyZWFkRGVzY2VuZGFudEJveExhaWRPdXQoUmVu
ZGVyQm94KikgeyB9CiAKLSAgICBzdGF0aWMgUmVuZGVyU3R5bGUgY3JlYXRlRmxvd1RocmVhZFN0
eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgc3RhdGljIFJlbmRlclN0eWxlIGNy
ZWF0ZUZsb3dUaHJlYWRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwogCiAg
ICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE2LDggKzcxNiw4IEBAIHZv
aWQgUmVuZGVySW1hZ2U6OmxheW91dFNoYWRvd0NvbnRyb2xzKGMKIAogICAgIGlmIChzaGFkb3dD
b250cm9sc05lZWRDdXN0b21MYXlvdXRNZXRyaWNzKCkpIHsKICAgICAgICAgY29udHJvbHNSZW5k
ZXJlci0+c2V0TG9jYXRpb24oTGF5b3V0UG9pbnQoYm9yZGVyTGVmdCgpLCBib3JkZXJUb3AoKSkg
KyBMYXlvdXRTaXplKHBhZGRpbmdMZWZ0KCksIHBhZGRpbmdUb3AoKSkpOwotICAgICAgICBjb250
cm9sc1JlbmRlcmVyLT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKLSAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c3R5bGUoKS5zZXRXaWR0aChMZW5n
dGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5t
dXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7
CisgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldFdpZHRoKExlbmd0
aChuZXdTaXplLndpZHRoKCksIEZpeGVkKSk7CiAgICAgfQogCiAgICAgY29udHJvbHNSZW5kZXJl
ci0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDcg
KzE4Nyw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShTdHlsZUQKICAgICAv
LyBlLmcuLCA8Zm9udD5mb28gPGg0PmdvbzwvaDQ+IG1vbzwvZm9udD4uICBUaGUgPGZvbnQ+IGlu
bGluZXMgYmVmb3JlCiAgICAgLy8gYW5kIGFmdGVyIHRoZSBibG9jayBzaGFyZSB0aGUgc2FtZSBz
dHlsZSwgYnV0IHRoZSBibG9jayBkb2Vzbid0CiAgICAgLy8gbmVlZCB0byBwYXNzIGl0cyBzdHls
ZSBvbiB0byBhbnlvbmUgZWxzZS4KLSAgICBSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgp
OworICAgIGF1dG8mIG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICBSZW5kZXJJbmxpbmUqIGNvbnRp
bnVhdGlvbiA9IGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKICAgICBpZiAoY29udGludWF0
aW9uKSB7CiAgICAgICAgIGZvciAoUmVuZGVySW5saW5lKiBjdXJyQ29udCA9IGNvbnRpbnVhdGlv
bjsgY3VyckNvbnQ7IGN1cnJDb250ID0gY3VyckNvbnQtPmlubGluZUVsZW1lbnRDb250aW51YXRp
b24oKSkgewpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdh
eXNDcmVhdGVMaW4KICAgICBpZiAoYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+c3R5bGUo
KTsKKyAgICBhdXRvKiBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+c3R5bGUoKTsKICAgICBSZW5k
ZXJJbmxpbmUqIHBhcmVudFJlbmRlcklubGluZSA9IGlzPFJlbmRlcklubGluZT4oKnBhcmVudCgp
KSA/IGRvd25jYXN0PFJlbmRlcklubGluZT4ocGFyZW50KCkpIDogbnVsbHB0cjsKICAgICBib29s
IGNoZWNrRm9udHMgPSBkb2N1bWVudCgpLmluTm9RdWlya3NNb2RlKCk7CiAgICAgUmVuZGVyRmxv
d1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKQEAgLTIz
NSw3ICsyMzUsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAg
ICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMgJiYgY2hlY2tGb250cyAmJiB2aWV3KCkudXNl
c0ZpcnN0TGluZVJ1bGVzKCkpIHsKICAgICAgICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3Qg
bGluZSBzdHlsZSBhcyB3ZWxsLgogICAgICAgICBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+Zmly
c3RMaW5lU3R5bGUoKTsKLSAgICAgICAgUmVuZGVyU3R5bGUmIGNoaWxkU3R5bGUgPSBmaXJzdExp
bmVTdHlsZSgpOworICAgICAgICBhdXRvJiBjaGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsK
ICAgICAgICAgYWx3YXlzQ3JlYXRlTGluZUJveGVzID0gIXBhcmVudFN0eWxlLT5mb250Q2FzY2Fk
ZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hp
bGRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkpCiAgICAgICAgICAgICB8fCBjaGls
ZFN0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICAgICAgfHwgcGFyZW50
U3R5bGUtPmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0eWxlLmxpbmVIZWlnaHQoKTsKQEAgLTE2MDEs
NyArMTYwMSw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmUoUGFpbnRJbmYKICAg
ICBpZiAoIWhhc091dGxpbmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUm
IHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwog
ICAgIC8vIE9ubHkgcGFpbnQgdGhlIGZvY3VzIHJpbmcgYnkgaGFuZCBpZiB0aGUgdGhlbWUgaXNu
J3QgYWJsZSB0byBkcmF3IGl0LgogICAgIGlmIChzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0
bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKHN0eWxlVG9Vc2UpKSB7CiAgICAgICAg
IFZlY3RvcjxMYXlvdXRSZWN0PiBmb2N1c1JpbmdSZWN0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExMSw3
ICs0MTExLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aChHcmFwaGljcwogICAg
ICAgICByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCA9IHRydWU7CiAgICAgfQogCi0gICAgUmVu
ZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXIoKS5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0g
cmVuZGVyZXIoKS5zdHlsZSgpOwogICAgIEFTU0VSVChzdHlsZS5jbGlwUGF0aCgpKTsKICAgICBp
ZiAoaXM8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKnN0eWxlLmNsaXBQYXRoKCkpIHx8IChpczxC
b3hDbGlwUGF0aE9wZXJhdGlvbj4oKnN0eWxlLmNsaXBQYXRoKCkpICYmIGlzPFJlbmRlckJveD4o
cmVuZGVyZXIoKSkpKSB7CiAgICAgICAgIFdpbmRSdWxlIHdpbmRSdWxlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTQsNyArMzU0LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludFNjcm9sbGJh
cihQYWludAogICAgIG1fdkJhci0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQoKSwgc25hcHBlZElu
dFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKIH0KIAotc3RhdGljIExheW91dFNpemUgaXRlbU9mZnNl
dEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4sIFJlbmRlclN0eWxlKiBpdGVtU3R5bGUsIEZv
bnRDYXNjYWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5nQm94KQorc3RhdGljIExh
eW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4sIGNvbnN0IFJl
bmRlclN0eWxlKiBpdGVtU3R5bGUsIEZvbnRDYXNjYWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0
ZW1Cb3VkaW5nQm94KQogewogICAgIEVUZXh0QWxpZ24gYWN0dWFsQWxpZ25tZW50ID0gaXRlbVN0
eWxlLT50ZXh0QWxpZ24oKTsKICAgICAvLyBGSVhNRTogRmlyZWZveCBkb2Vzbid0IHJlc3BlY3Qg
SlVTVElGWS4gU2hvdWxkIHdlPwpAQCAtMzc5LDcgKzM3OSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJv
eDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYg
bGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudCgpLmxpc3RJdGVtcygpOwogICAgIEhUTUxFbGVtZW50
KiBsaXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKIAotICAgIFJlbmRlclN0
eWxlJiBpdGVtU3R5bGUgPSAqbGlzdEl0ZW1FbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CisgICAg
YXV0byYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogCiAg
ICAgaWYgKGl0ZW1TdHlsZS52aXNpYmlsaXR5KCkgPT0gSElEREVOKQogICAgICAgICByZXR1cm47
CkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3Jv
dW5kKAogewogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxl
Y3RFbGVtZW50KCkubGlzdEl0ZW1zKCk7CiAgICAgSFRNTEVsZW1lbnQqIGxpc3RJdGVtRWxlbWVu
dCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwotICAgIFJlbmRlclN0eWxlJiBpdGVtU3R5bGUgPSAq
bGlzdEl0ZW1FbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CisgICAgYXV0byYgaXRlbVN0eWxlID0g
Kmxpc3RJdGVtRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogCiAgICAgQ29sb3IgYmFja0NvbG9y
OwogICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVudCkgJiYgZG93
bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpLnNlbGVjdGVkKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwOCw4ICsxNzA4LDggQEAgdm9pZCBSZW5k
ZXJMaXN0TWFya2VyOjp1cGRhdGVNYXJnaW5zKCkKICAgICAgICAgCiAgICAgfQogCi0gICAgc3R5
bGUoKS5zZXRNYXJnaW5TdGFydChMZW5ndGgobWFyZ2luU3RhcnQsIEZpeGVkKSk7Ci0gICAgc3R5
bGUoKS5zZXRNYXJnaW5FbmQoTGVuZ3RoKG1hcmdpbkVuZCwgRml4ZWQpKTsKKyAgICBtdXRhYmxl
U3R5bGUoKS5zZXRNYXJnaW5TdGFydChMZW5ndGgobWFyZ2luU3RhcnQsIEZpeGVkKSk7CisgICAg
bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luRW5kKExlbmd0aChtYXJnaW5FbmQsIEZpeGVkKSk7CiB9
CiAKIExheW91dFVuaXQgUmVuZGVyTGlzdE1hcmtlcjo6bGluZUhlaWdodChib29sIGZpcnN0TGlu
ZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3Np
dGlvbk1vZGUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFy
cXVlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1h
cnF1ZWUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWFycXVlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBpbnQg
UmVuZGVyTWFycXVlZTo6Y29tcHV0ZVBvc2l0aW9uKEVNYXJxCiB7CiAgICAgUmVuZGVyQm94KiBi
b3ggPSBtX2xheWVyLT5yZW5kZXJCb3goKTsKICAgICBBU1NFUlQoYm94KTsKLSAgICBSZW5kZXJT
dHlsZSYgYm94U3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgYXV0byYgYm94U3R5bGUgPSBib3gt
PnN0eWxlKCk7CiAgICAgaWYgKGlzSG9yaXpvbnRhbCgpKSB7CiAgICAgICAgIGJvb2wgbHRyID0g
Ym94U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogICAgICAgICBMYXlvdXRVbml0IGNs
aWVudFdpZHRoID0gYm94LT5jbGllbnRXaWR0aCgpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQg
UmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVlZVBvc2l0aW8KIAogdm9pZCBSZW5kZXJNYXJxdWVl
Ojp1cGRhdGVNYXJxdWVlU3R5bGUoKQogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG1fbGF5
ZXItPnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IG1fbGF5ZXItPnJlbmRl
cmVyKCkubXV0YWJsZVN0eWxlKCk7CiAgICAgCiAgICAgaWYgKG1fZGlyZWN0aW9uICE9IHN0eWxl
Lm1hcnF1ZWVEaXJlY3Rpb24oKSB8fCAobV90b3RhbExvb3BzICE9IHN0eWxlLm1hcnF1ZWVMb29w
Q291bnQoKSAmJiBtX2N1cnJlbnRMb29wID49IG1fdG90YWxMb29wcykpCiAgICAgICAgIG1fY3Vy
cmVudExvb3AgPSAwOyAvLyBXaGVuIGRpcmVjdGlvbiBjaGFuZ2VzIG9yIG91ciBsb29wQ291bnQg
aXMgYSBzbWFsbGVyIG51bWJlciB0aGFuIG91ciBjdXJyZW50IGxvb3AsIHJlc2V0IG91ciBsb29w
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBSZW5kZXJNZW51
TGlzdDo6Y3JlYXRlSW5uZXJCbG9jaygpCiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkanVzdElu
bmVyU3R5bGUoKQogewotICAgIFJlbmRlclN0eWxlJiBpbm5lclN0eWxlID0gbV9pbm5lckJsb2Nr
LT5zdHlsZSgpOworICAgIGF1dG8mIGlubmVyU3R5bGUgPSBtX2lubmVyQmxvY2stPm11dGFibGVT
dHlsZSgpOwogICAgIGlubmVyU3R5bGUuc2V0RmxleEdyb3coMSk7CiAgICAgaW5uZXJTdHlsZS5z
ZXRGbGV4U2hyaW5rKDEpOwogICAgIC8vIG1pbi13aWR0aDogMDsgaXMgbmVlZGVkIGZvciBjb3Jy
ZWN0IHNocmlua2luZy4KQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIFJlbmRlck1lbnVMaXN0Ojp1
cGRhdGVPcHRpb25zV2lkdGgoCiAgICAgICAgIGlmICh0aGVtZSgpLnBvcHVwT3B0aW9uU3VwcG9y
dHNUZXh0SW5kZW50KCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBpbiB0aGUgb3B0aW9uJ3MgdGV4
dCBpbmRlbnQuICBXZSBjYW4ndCBjYWxjdWxhdGUgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIG5vdy4K
ICAgICAgICAgICAgIGZsb2F0IG9wdGlvbldpZHRoID0gMDsKLSAgICAgICAgICAgIGlmIChSZW5k
ZXJTdHlsZSogb3B0aW9uU3R5bGUgPSBlbGVtZW50LT5jb21wdXRlZFN0eWxlKCkpCisgICAgICAg
ICAgICBpZiAoYXV0byogb3B0aW9uU3R5bGUgPSBlbGVtZW50LT5jb21wdXRlZFN0eWxlKCkpCiAg
ICAgICAgICAgICAgICAgb3B0aW9uV2lkdGggKz0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKG9wdGlv
blN0eWxlLT50ZXh0SW5kZW50KCksIDApOwogICAgICAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHko
KSkgewogICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5m
b250Q2FzY2FkZSgpOwpAQCAtNTE5LDcgKzUxOSw3IEBAIFBvcHVwTWVudVN0eWxlIFJlbmRlck1l
bnVMaXN0OjppdGVtU3R5bGUKICAgICBib29sIGl0ZW1IYXNDdXN0b21CYWNrZ3JvdW5kQ29sb3I7
CiAgICAgZ2V0SXRlbUJhY2tncm91bmRDb2xvcihsaXN0SW5kZXgsIGl0ZW1CYWNrZ3JvdW5kQ29s
b3IsIGl0ZW1IYXNDdXN0b21CYWNrZ3JvdW5kQ29sb3IpOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0
eWxlID0gKmVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9ICplbGVt
ZW50LT5jb21wdXRlZFN0eWxlKCk7CiAgICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgaXRlbUJhY2tncm91bmRDb2xv
ciwgc3R5bGUuZm9udENhc2NhZGUoKSwgc3R5bGUudmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCiAg
ICAgICAgIHN0eWxlLmRpc3BsYXkoKSA9PSBOT05FLCB0cnVlLCBzdHlsZS50ZXh0SW5kZW50KCks
IHN0eWxlLmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRpKCkpLAogICAg
ICAgICBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENvbG9yID8gUG9wdXBNZW51U3R5bGU6OkN1c3Rv
bUJhY2tncm91bmRDb2xvciA6IFBvcHVwTWVudVN0eWxlOjpEZWZhdWx0QmFja2dyb3VuZENvbG9y
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dU
aHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHN0YXRpYyBib29sIGlzVmFsaWRDb2x1bW5TcGFubmVy
KFJlbmRlck0KICAgICBBU1NFUlQoZGVzY2VuZGFudC0+aXNEZXNjZW5kYW50T2YoZmxvd1RocmVh
ZCkpOwogCiAgICAgLy8gRmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIHJlbmRlcmVyIGl0c2VsZiBo
YXMgdGhlIHJpZ2h0IHByb3BlcnRpZXMgZm9yIGJlY29taW5nIGEgc3Bhbm5lci4KLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBkZXNjZW5kYW50LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0g
ZGVzY2VuZGFudC0+c3R5bGUoKTsKICAgICBpZiAoc3R5bGUuY29sdW1uU3BhbigpICE9IENvbHVt
blNwYW5BbGwgfHwgIWlzPFJlbmRlckJveD4oKmRlc2NlbmRhbnQpIHx8IGRlc2NlbmRhbnQtPmlz
RmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciogUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI6OmNyZWF0ZUFub255bW91cyhSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQqIGZsb3dUaHJlYWQsIFJlbmRlckJveCogc3Bhbm5lciwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKQorUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIq
IFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyOjpjcmVhdGVBbm9ueW1vdXMoUmVu
ZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBmbG93VGhyZWFkLCBSZW5kZXJCb3gqIHNwYW5uZXIs
IGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBhdXRvIG5ld1N0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoKnBhcmVudFN0eWxl
LCBCTE9DSyk7CiAgICAgbmV3U3R5bGUuc2V0Q2xlYXIoQ0JPVEgpOyAvLyBXZSBkb24ndCB3YW50
IGZsb2F0cyBpbiB0aGUgcm93IHByZWNlZGluZyB0aGUgc3Bhbm5lciB0byBjb250aW51ZSBvbiB0
aGUgb3RoZXIgc2lkZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5T
cGFubmVyUGxhY2Vob2xkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBjbGFz
cyBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ7CiAKIGNsYXNzIFJlbmRlck11bHRpQ29sdW1u
U3Bhbm5lclBsYWNlaG9sZGVyIGZpbmFsIDogcHVibGljIFJlbmRlckJveCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBjcmVhdGVBbm9u
eW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiwgUmVuZGVyQm94KiBzcGFubmVyLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHN0YXRpYyBSZW5kZXJNdWx0aUNvbHVtblNw
YW5uZXJQbGFjZWhvbGRlciogY3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZCosIFJlbmRlckJveCogc3Bhbm5lciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KTsKIAogICAgIFJlbmRlckJveCogc3Bhbm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Bhbm5lcjsg
fQogICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogZmxvd1RocmVhZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmxvd1RocmVhZDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDcsNyArMzQ3LDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDo6Y2hlY2tSZWdpbwogICAgIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKm1f
Zmxvd1RocmVhZCkuY2hlY2tSZWdpb25zV2l0aFN0eWxpbmcoKTsKIH0KIAotc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y29tcHV0ZVN0eWxlSW5S
ZWdpb24oUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkg
Y29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFyZW5kZXJlci5p
c0Fub255bW91cygpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd0ZyYWdtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjMsNyArMTIzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCI7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gY29tcHV0ZVN0
eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkgY29u
c3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBjb21wdXRlU3R5bGVJblJlZ2lv
bihSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKSBjb25zdDsK
ICAgICB2b2lkIGNvbXB1dGVDaGlsZHJlblN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYpOwog
ICAgIHZvaWQgc2V0T2JqZWN0U3R5bGVJblJlZ2lvbihSZW5kZXJPYmplY3QqLCBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+LCBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODIyLDcgKzE4MjIsNyBAQCBpbnQgUmVuZGVyT2JqZWN0Ojppbm5lckxp
bmVIZWlnaHQoKSBjb25zCiAgICAgcmV0dXJuIHN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7
CiB9CiAKLXN0YXRpYyBDb2xvciBkZWNvcmF0aW9uQ29sb3IoUmVuZGVyU3R5bGUqIHN0eWxlKQor
c3RhdGljIENvbG9yIGRlY29yYXRpb25Db2xvcihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7
CiAgICAgQ29sb3IgcmVzdWx0OwogICAgIC8vIENoZWNrIGZvciB0ZXh0IGRlY29yYXRpb24gY29s
b3IgZmlyc3QuCkBAIC0xODQ0LDcgKzE4NDQsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6Z2V0VGV4
dERlY29yYXRpb25Db2xvCiAgICAgVGV4dERlY29yYXRpb25TdHlsZSYgdW5kZXJsaW5lU3R5bGUs
IFRleHREZWNvcmF0aW9uU3R5bGUmIG92ZXJsaW5lU3R5bGUsIFRleHREZWNvcmF0aW9uU3R5bGUm
IGxpbmV0aHJvdWdoU3R5bGUsIGJvb2wgZmlyc3RsaW5lU3R5bGUpIGNvbnN0CiB7CiAgICAgY29u
c3QgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gdGhpczsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGVU
b1VzZSA9IG51bGxwdHI7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBudWxs
cHRyOwogICAgIFRleHREZWNvcmF0aW9uIGN1cnJEZWNzID0gVGV4dERlY29yYXRpb25Ob25lOwog
ICAgIENvbG9yIHJlc3VsdENvbG9yOwogICAgIGRvIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjk3LDggKzY5Nyw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICBSZW5kZXJTdHls
ZSYgc3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUoKSBjb25z
dDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKIAogICAgIC8vIEFub255bW91cyBibG9j
a3MgdGhhdCBhcmUgcGFydCBvZiBvZiBhIGNvbnRpbnVhdGlvbiBjaGFpbiB3aWxsIHJldHVybiB0
aGVpciBpbmxpbmUgY29udGludWF0aW9uJ3Mgb3V0bGluZSBzdHlsZSBpbnN0ZWFkLgogICAgIC8v
IFRoaXMgaXMgdHlwaWNhbGx5IG9ubHkgcmVsZXZhbnQgd2hlbiByZXBhaW50aW5nLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiAyMDAwNjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MTEsNyArODExLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhcHRpb25zLnNpemUoKTsg
aSsrKQogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoLCBtX2NhcHRpb25zW2ldLT5taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSk7CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CisgICAg
YXV0byYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHBy
b2JhYmx5IGJlIGNoZWNraW5nIGZvciBpc1NwZWNpZmllZCBzaW5jZSB5b3Ugc2hvdWxkIGJlIGFi
bGUgdG8gdXNlIHBlcmNlbnRhZ2Ugb3IgY2FsYyB2YWx1ZXMgZm9yIG1pbi13aWR0aC4KICAgICBp
ZiAoc3R5bGVUb1VzZS5sb2dpY2FsTWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGVUb1VzZS5s
b2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpID4gMCkgewogICAgICAgICBtX21heFByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBhZGp1c3RD
b250ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKHN0eWxlVG9Vc2UubG9naWNhbE1pbldp
ZHRoKCkudmFsdWUoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk4
LDcgKzExOTgsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRSb3dHcm91cEJvCiAK
IH0KIAotc3RhdGljIEJveFNpZGUgcGh5c2ljYWxCb3JkZXJGb3JEaXJlY3Rpb24oUmVuZGVyU3R5
bGUqIHN0eWxlRm9yQ2VsbEZsb3csIENvbGxhcHNlZEJvcmRlclNpZGUgc2lkZSkKK3N0YXRpYyBC
b3hTaWRlIHBoeXNpY2FsQm9yZGVyRm9yRGlyZWN0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZUZvckNlbGxGbG93LCBDb2xsYXBzZWRCb3JkZXJTaWRlIHNpZGUpCiB7CiAKICAgICBzd2l0Y2gg
KHNpZGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNp
b24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0RnJhZ21lbnQoKSBjb25zdDsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0
OwotICAgIFJlbmRlclN0eWxlJiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0OwotICAgIFJlbmRlclN0
eWxlKiBnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gbnVsbHB0cikgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29u
c3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAg
Y29uc3QgUmVuZGVyU3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBjb25zdCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKSBjb25zdDsKIAogICAgIENvbG9yIHNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogICAgIENvbG9yIHNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcigpIGNvbnN0OwpAQCAtMjUxLDE3ICsyNTEsMTcgQEAgaW5saW5lIFVDaGFyIFJl
bmRlclRleHQ6OmNoYXJhY3RlckF0KHVucwogICAgIHJldHVybiB1bmNoZWNrZWRDaGFyYWN0ZXJB
dChpKTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxlJiBSZW5kZXJUZXh0OjpzdHlsZSgpIGNvbnN0
CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUmIFJlbmRlclRleHQ6OnN0eWxlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gcGFyZW50KCktPnN0eWxlKCk7CiB9CiAKLWlubGluZSBSZW5kZXJTdHlsZSYg
UmVuZGVyVGV4dDo6Zmlyc3RMaW5lU3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0
eWxlJiBSZW5kZXJUZXh0OjpmaXJzdExpbmVTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBh
cmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogfQogCi1pbmxpbmUgUmVuZGVyU3R5bGUqIFJlbmRl
clRleHQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkb0lkLCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpIGNvbnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIFJlbmRlclRl
eHQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkb0lkLCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcmVudCgpLT5nZXRDYWNo
ZWRQc2V1ZG9TdHlsZShwc2V1ZG9JZCwgcGFyZW50U3R5bGUpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw4IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnN0
eWxlRGlkQ2hhbmdlKFMKICAgICBpZiAoaW5uZXJUZXh0UmVuZGVyZXIpIHsKICAgICAgICAgLy8g
V2UgbWF5IGhhdmUgc2V0IHRoZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0eWxl
IGluIGxheW91dCgpLgogICAgICAgICAvLyBSZXNldCB0aGVtIG5vdyB0byBhdm9pZCBnZXR0aW5n
IGEgc3B1cmlvdXMgbGF5b3V0IGhpbnQuCi0gICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zdHls
ZSgpLnNldEhlaWdodChMZW5ndGgoKSk7Ci0gICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zdHls
ZSgpLnNldFdpZHRoKExlbmd0aCgpKTsKKyAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPm11dGFi
bGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgoKSk7CisgICAgICAgIGlubmVyVGV4dFJlbmRlcmVy
LT5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7CiAgICAgICAgIGlubmVyVGV4dFJl
bmRlcmVyLT5zZXRTdHlsZSh0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkuY3JlYXRlSW5uZXJUZXh0
U3R5bGUoc3R5bGUoKSkpOwogICAgIH0KICAgICB0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkudXBk
YXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgUmVuZGVyT2JqZWN0
KiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZQogICAgIFJlbmRlck9iamVjdCogcGxhY2Vob2xk
ZXJSZW5kZXJlciA9IFJlbmRlclRleHRDb250cm9sOjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGls
ZChyZWxheW91dENoaWxkcmVuKTsKICAgICBpZiAoaXM8UmVuZGVyQm94PihwbGFjZWhvbGRlclJl
bmRlcmVyKSkgewogICAgICAgICBhdXRvJiBwbGFjZWhvbGRlckJveCA9IGRvd25jYXN0PFJlbmRl
ckJveD4oKnBsYWNlaG9sZGVyUmVuZGVyZXIpOwotICAgICAgICBwbGFjZWhvbGRlckJveC5zdHls
ZSgpLnNldExvZ2ljYWxXaWR0aChMZW5ndGgoY29udGVudExvZ2ljYWxXaWR0aCgpIC0gcGxhY2Vo
b2xkZXJCb3guYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpLCBGaXhlZCkpOworICAgICAg
ICBwbGFjZWhvbGRlckJveC5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsV2lkdGgoTGVuZ3RoKGNv
bnRlbnRMb2dpY2FsV2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LmJvcmRlckFuZFBhZGRpbmdMb2dp
Y2FsV2lkdGgoKSwgRml4ZWQpKTsKICAgICAgICAgcGxhY2Vob2xkZXJCb3gubGF5b3V0SWZOZWVk
ZWQoKTsKICAgICAgICAgcGxhY2Vob2xkZXJCb3guc2V0WChib3JkZXJMZWZ0KCkgKyBwYWRkaW5n
TGVmdCgpKTsKICAgICAgICAgcGxhY2Vob2xkZXJCb3guc2V0WShib3JkZXJUb3AoKSArIHBhZGRp
bmdUb3AoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCwxMSArMTA4LDExIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpsYXlvdXQKIAogICAgIC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBiZXR3ZWVu
IGxheW91dHMsIHdlIG5lZWQgdG8gcmVzZXQgYW55IGNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVuIGhl
aWdodC4KICAgICBpZiAoaW5uZXJUZXh0UmVuZGVyZXIgJiYgIWlubmVyVGV4dFJlbmRlcmVyLT5z
dHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSkgewotICAgICAgICBpbm5lclRleHRSZW5k
ZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgICAgIGlu
bmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChB
dXRvKSk7CiAgICAgICAgIHNldE5lZWRzTGF5b3V0T25BbmNlc3RvcnMoaW5uZXJUZXh0UmVuZGVy
ZXIsIHRoaXMpOwogICAgIH0KICAgICBpZiAoaW5uZXJCbG9ja1JlbmRlcmVyICYmICFpbm5lckJs
b2NrUmVuZGVyZXItPnN0eWxlKCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygpKSB7Ci0gICAgICAg
IGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChBdXRv
KSk7CisgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNh
bEhlaWdodChMZW5ndGgoQXV0bykpOwogICAgICAgICBzZXROZWVkc0xheW91dE9uQW5jZXN0b3Jz
KGlubmVyQmxvY2tSZW5kZXJlciwgdGhpcyk7CiAgICAgfQogCkBAIC0xMjgsMTAgKzEyOCwxMCBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgICAgIGlmIChk
ZXNpcmVkTG9naWNhbEhlaWdodCAhPSBpbm5lclRleHRSZW5kZXJlci0+bG9naWNhbEhlaWdodCgp
KQogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKIAotICAgICAgICBp
bm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChkZXNpcmVk
TG9naWNhbEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPm11dGFi
bGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGRlc2lyZWRMb2dpY2FsSGVpZ2h0LCBG
aXhlZCkpOwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQoTWFya09u
bHlUaGlzKTsKICAgICAgICAgaWYgKGlubmVyQmxvY2tSZW5kZXJlcikgewotICAgICAgICAgICAg
aW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGRlc2ly
ZWRMb2dpY2FsSGVpZ2h0LCBGaXhlZCkpOworICAgICAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVy
LT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhl
aWdodCwgRml4ZWQpKTsKICAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c2V0TmVlZHNM
YXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE0MCwxMyArMTQwLDEz
IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQKICAgICAgICAgY29u
dGFpbmVyUmVuZGVyZXItPmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIExheW91dFVuaXQgY29u
dGFpbmVyTG9naWNhbEhlaWdodCA9IGNvbnRhaW5lclJlbmRlcmVyLT5sb2dpY2FsSGVpZ2h0KCk7
CiAgICAgICAgIGlmIChjb250YWluZXJMb2dpY2FsSGVpZ2h0ID4gbG9naWNhbEhlaWdodExpbWl0
KSB7Ci0gICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVp
Z2h0KExlbmd0aChsb2dpY2FsSGVpZ2h0TGltaXQsIEZpeGVkKSk7CisgICAgICAgICAgICBjb250
YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgobG9n
aWNhbEhlaWdodExpbWl0LCBGaXhlZCkpOwogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQoTWFy
a09ubHlUaGlzKTsKICAgICAgICAgfSBlbHNlIGlmIChjb250YWluZXJSZW5kZXJlci0+bG9naWNh
bEhlaWdodCgpIDwgY29udGVudExvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICAgICAgY29udGFp
bmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoY29udGVudExvZ2lj
YWxIZWlnaHQoKSwgRml4ZWQpKTsKKyAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRh
YmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChjb250ZW50TG9naWNhbEhlaWdodCgp
LCBGaXhlZCkpOwogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS5zZXRM
b2dpY2FsSGVpZ2h0KExlbmd0aChjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBGaXhlZCkpOworICAg
ICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldExvZ2ljYWxIZWln
aHQoTGVuZ3RoKGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CiAgICAgfQogCiAgICAg
Ly8gSWYgd2UgbmVlZCBhbm90aGVyIGxheW91dCBwYXNzLCB3ZSBoYXZlIGNoYW5nZWQgb25lIG9m
IGNoaWxkcmVuJ3MgaGVpZ2h0IHNvIHdlIG5lZWQgdG8gcmVsYXlvdXQgdGhlbS4KQEAgLTE3NCw4
ICsxNzQsOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAg
ICAgIExheW91dFNpemUgaW5uZXJUZXh0U2l6ZTsKICAgICAgICAgaWYgKGlubmVyVGV4dFJlbmRl
cmVyKQogICAgICAgICAgICAgaW5uZXJUZXh0U2l6ZSA9IGlubmVyVGV4dFJlbmRlcmVyLT5zaXpl
KCk7Ci0gICAgICAgIHBsYWNlaG9sZGVyQm94LT5zdHlsZSgpLnNldFdpZHRoKExlbmd0aChpbm5l
clRleHRTaXplLndpZHRoKCkgLSBwbGFjZWhvbGRlckJveC0+aG9yaXpvbnRhbEJvcmRlckFuZFBh
ZGRpbmdFeHRlbnQoKSwgRml4ZWQpKTsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3gtPnN0eWxlKCku
c2V0SGVpZ2h0KExlbmd0aChpbm5lclRleHRTaXplLmhlaWdodCgpIC0gcGxhY2Vob2xkZXJCb3gt
PnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCBGaXhlZCkpOworICAgICAgICBwbGFj
ZWhvbGRlckJveC0+bXV0YWJsZVN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKGlubmVyVGV4dFNpemUu
d2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVu
dCgpLCBGaXhlZCkpOworICAgICAgICBwbGFjZWhvbGRlckJveC0+bXV0YWJsZVN0eWxlKCkuc2V0
SGVpZ2h0KExlbmd0aChpbm5lclRleHRTaXplLmhlaWdodCgpIC0gcGxhY2Vob2xkZXJCb3gtPnZl
cnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCBGaXhlZCkpOwogICAgICAgICBib29sIG5l
ZWRlZExheW91dCA9IHBsYWNlaG9sZGVyQm94LT5uZWVkc0xheW91dCgpOwogICAgICAgICBib29s
IHBsYWNlaG9sZGVyQm94SGFkTGF5b3V0ID0gcGxhY2Vob2xkZXJCb3gtPmV2ZXJIYWRMYXlvdXQo
KTsKICAgICAgICAgcGxhY2Vob2xkZXJCb3gtPmxheW91dElmTmVlZGVkKCk7CkBAIC0yMzYsMTQg
KzIzNiwxNCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5bGVECiAgICAg
Ly8gV2UgbWF5IGhhdmUgc2V0IHRoZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0
eWxlIGluIGxheW91dCgpLgogICAgIC8vIFJlc2V0IHRoZW0gbm93IHRvIGF2b2lkIGdldHRpbmcg
YSBzcHVyaW91cyBsYXlvdXQgaGludC4KICAgICBIVE1MRWxlbWVudCogaW5uZXJCbG9jayA9IGlu
bmVyQmxvY2tFbGVtZW50KCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogaW5uZXJCbG9ja1JlbmRl
cmVyID0gaW5uZXJCbG9jayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCkgOiAwKSB7Ci0gICAgICAg
IGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOwotICAgICAg
ICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkpOworICAgIGlm
IChhdXRvKiBpbm5lckJsb2NrUmVuZGVyZXIgPSBpbm5lckJsb2NrID8gaW5uZXJCbG9jay0+cmVu
ZGVyZXIoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5tdXRhYmxl
U3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOworICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXIt
Pm11dGFibGVTdHlsZSgpLnNldFdpZHRoKExlbmd0aCgpKTsKICAgICB9CiAgICAgSFRNTEVsZW1l
bnQqIGNvbnRhaW5lciA9IGNvbnRhaW5lckVsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0
KiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVyZXIoKSA6
IDApIHsKLSAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0
aCgpKTsKLSAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3Ro
KCkpOworICAgIGlmIChhdXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRhaW5lciA/IGNvbnRh
aW5lci0+cmVuZGVyZXIoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgY29udGFpbmVyUmVuZGVyZXIt
Pm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgoKSk7CisgICAgICAgIGNvbnRhaW5lclJl
bmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7CiAgICAgfQogICAgIGlm
IChkaWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91dCkgewogICAgICAgICBpZiAoYXV0byogaW5u
ZXJUZXh0UmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFn
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBSZW5kZXJUZXh0
RnJhZ21lbnQ6OnN0eWxlRGlkQ2hhbmdlKAogICAgIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdl
KGRpZmYsIG9sZFN0eWxlKTsKIAogICAgIGlmIChSZW5kZXJCbG9jayogYmxvY2sgPSBibG9ja0Zv
ckFjY29tcGFueWluZ0ZpcnN0TGV0dGVyKCkpIHsKLSAgICAgICAgYmxvY2stPnN0eWxlKCkucmVt
b3ZlQ2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKTsKKyAgICAgICAgYmxvY2stPm11dGFi
bGVTdHlsZSgpLnJlbW92ZUNhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUik7CiAgICAgICAg
IGJsb2NrLT51cGRhdGVGaXJzdExldHRlcigpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAxNSw3ICsyMDE1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVRv
Z2dsZUNsbwogfQogI2VuZGlmCiAKLXN0YXRpYyBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSBib3Jk
ZXJSYWRpaUZyb21TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgRmxvYXRSb3VuZGVk
UmVjdDo6UmFkaWkgYm9yZGVyUmFkaWlGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQogewogICAgIHJldHVybiBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSgKICAgICAgICAgSW50U2l6
ZShzdHlsZS5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS5i
b3JkZXJUb3BMZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCkBAIC0yMDM2LDcgKzIw
MzYsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhCiAKICAgICBm
bG9hdCBtZWRpYUR1cmF0aW9uID0gbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwogICAgIGZsb2F0
IHRvdGFsVHJhY2tXaWR0aCA9IHIud2lkdGgoKTsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBv
LnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBvLnN0eWxlKCk7CiAgICAgUmVmUHRyPFRpbWVS
YW5nZXM+IHRpbWVSYW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgp
IHsKICAgICAgICAgZmxvYXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JF
X0VYQ0VQVElPTik7CkBAIC0yMDU5LDcgKzIwNTksNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludE1lZGlhU2xpZGVyVHJhCiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlk
ZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG8uc3R5bGUo
KTsKKyAgICBhdXRvJiBzdHlsZSA9IG8uc3R5bGUoKTsKICAgICBwYWludEluZm8uY29udGV4dCgp
LmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHIsIGJvcmRlclJhZGlpRnJvbVN0eWxl
KHN0eWxlKSksIHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaQogCiAgICAgaW50IHJlY3RIZWlnaHQgPSByZWN0
LmhlaWdodCgpOwogICAgIGZsb2F0IHRyYWNrSGVpZ2h0ID0gcmVjdEhlaWdodCAqIHZvbHVtZTsK
LSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJPYmplY3Quc3R5bGUoKTsKKyAgICBhdXRv
JiBzdHlsZSA9IHJlbmRlck9iamVjdC5zdHlsZSgpOwogICAgIEludFJlY3Qgdm9sdW1lUmVjdChy
ZWN0KTsKICAgICB2b2x1bWVSZWN0Lm1vdmUoMCwgcmVjdEhlaWdodCAtIHRyYWNrSGVpZ2h0KTsK
ICAgICB2b2x1bWVSZWN0LnNldEhlaWdodChjZWlsKHRyYWNrSGVpZ2h0KSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcg
QEAgdm9pZCBwYWludEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbAogICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9
IGZsb3cuc3R5bGUoKTsKICAgICBpZiAoc3R5bGUudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTQwLDcgKzE0MCw3IEBAIGJvb2wgaGl0VGVzdEZsb3coY29u
c3QgUmVuZGVyQmxvY2tGbG93JiAKICAgICBpZiAoIWxheW91dC5ydW5Db3VudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBmbG93LnN0eWxlKCk7
CisgICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7CiAgICAgaWYgKHN0eWxlLnZpc2liaWxp
dHkoKSAhPSBWSVNJQkxFIHx8IHN0eWxlLnBvaW50ZXJFdmVudHMoKSA9PSBQRV9OT05FKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
QXV0b1NpemluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvU2l6aW5nLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QCBUZXh0QXV0b1NpemluZ0tleTo6VGV4dEF1dG9TaXppbmdLZXkoRGVsCiB7CiB9CiAKLVRleHRB
dXRvU2l6aW5nS2V5OjpUZXh0QXV0b1NpemluZ0tleShSZW5kZXJTdHlsZSogc3R5bGUpCitUZXh0
QXV0b1NpemluZ0tleTo6VGV4dEF1dG9TaXppbmdLZXkoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
KQogICAgIDogbV9zdHlsZShzdHlsZSA/IFJlbmRlclN0eWxlOjpjbG9uZVB0cigqc3R5bGUpIDog
bnVsbHB0cikKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1Np
emluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1Np
emluZy5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dEF1dG9TaXppbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDEyIEBAIHB1YmxpYzoK
ICAgICBUZXh0QXV0b1NpemluZ0tleSgpID0gZGVmYXVsdDsKICAgICBlbnVtIERlbGV0ZWRUYWcg
eyBEZWxldGVkIH07CiAgICAgZXhwbGljaXQgVGV4dEF1dG9TaXppbmdLZXkoRGVsZXRlZFRhZyk7
Ci0gICAgZXhwbGljaXQgVGV4dEF1dG9TaXppbmdLZXkoUmVuZGVyU3R5bGUqKTsKKyAgICBleHBs
aWNpdCBUZXh0QXV0b1NpemluZ0tleShjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIFRleHRBdXRv
U2l6aW5nS2V5KFRleHRBdXRvU2l6aW5nS2V5JiYpID0gZGVmYXVsdDsKIAogICAgIFRleHRBdXRv
U2l6aW5nS2V5JiBvcGVyYXRvcj0oVGV4dEF1dG9TaXppbmdLZXkmJikgPSBkZWZhdWx0OwogCi0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQor
ICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0
KCk7IH0KICAgICBpbmxpbmUgYm9vbCBpc0RlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRGVs
ZXRlZDsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQ
YWludFN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dFBhaW50U3R5bGUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcg
QEAgVGV4dFBhaW50U3R5bGUgY29tcHV0ZVRleHRTZWxlY3Rpb25QYWludAogICAgICAgICBzZWxl
Y3Rpb25QYWludFN0eWxlLmVtcGhhc2lzTWFya0NvbG9yID0gZW1waGFzaXNNYXJrRm9yZWdyb3Vu
ZDsKICAgICB9CiAKLSAgICBpZiAoUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gcmVuZGVyZXIu
Z2V0Q2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9OKSkgeworICAgIGlmIChhdXRvKiBwc2V1ZG9T
dHlsZSA9IHJlbmRlcmVyLmdldENhY2hlZFBzZXVkb1N0eWxlKFNFTEVDVElPTikpIHsKICAgICAg
ICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gcGFpbnRJbmZvLmZvcmNlVGV4dENvbG9yKCkg
PyBudWxscHRyIDogcHNldWRvU3R5bGUtPnRleHRTaGFkb3coKTsKICAgICAgICAgaWYgKHNoYWRv
dyAhPSBzZWxlY3Rpb25TaGFkb3cpIHsKICAgICAgICAgICAgIGlmICghcGFpbnRTZWxlY3RlZFRl
eHRPbmx5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtp
bmdDb250ZXh0LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9saW5lL0JyZWFraW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDcg
QEAgcHJpdmF0ZToKICAgICAvLyBGaXJlZm94IGFuZCBPcGVyYSB3aWxsIGFsbG93IGEgdGFibGUg
Y2VsbCB0byBncm93IHRvIGZpdCBhbiBpbWFnZSBpbnNpZGUgaXQgdW5kZXIKICAgICAvLyB2ZXJ5
IHNwZWNpZmljIGNpcmN1bXN0YW5jZXMgKGluIG9yZGVyIHRvIG1hdGNoIGNvbW1vbiBXaW5JRSBy
ZW5kZXJpbmdzKS4KICAgICAvLyBOb3Qgc3VwcG9ydGluZyB0aGUgcXVpcmsgaGFzIGNhdXNlZCB1
cyB0byBtaXMtcmVuZGVyIHNvbWUgcmVhbCBzaXRlcy4gKFNlZSBCdWd6aWxsYSAxMDUxNy4pCi0g
ICAgUmVuZGVyU3R5bGUmIG1fYmxvY2tTdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbV9i
bG9ja1N0eWxlOwogCiAgICAgTGluZUluZm8mIG1fbGluZUluZm87CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDEwICszMDEsMTAgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxSb290OjpsYXlvdXQoKQogICAgICAgICAgICAgICAgIGJhc2VUb3BNYXJn
aW4gLT0gaW5kZXhUb3BNYXJnaW47CiAgICAgICAgICAgICAgICAgaW5kZXhUb3BNYXJnaW4gPSAw
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5kZXgtPnN0eWxlKCkuc2V0TWFyZ2luVG9w
KExlbmd0aChpbmRleFRvcE1hcmdpbiwgRml4ZWQpKTsKKyAgICAgICAgICAgIGluZGV4LT5tdXRh
YmxlU3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGluZGV4VG9wTWFyZ2luLCBGaXhlZCkpOwog
ICAgICAgICB9Ci0gICAgICAgIHJhZGljYWwtPnN0eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChy
YWRpY2FsVG9wTWFyZ2luLCBGaXhlZCkpOwotICAgICAgICBiYXNlLT5zdHlsZSgpLnNldE1hcmdp
blRvcChMZW5ndGgoYmFzZVRvcE1hcmdpbiwgRml4ZWQpKTsKKyAgICAgICAgcmFkaWNhbC0+bXV0
YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChyYWRpY2FsVG9wTWFyZ2luLCBGaXhlZCkp
OworICAgICAgICBiYXNlLT5tdXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGJhc2VU
b3BNYXJnaW4sIEZpeGVkKSk7CiAgICAgfQogCiAgICAgUmVuZGVyTWF0aE1MQmxvY2s6OmxheW91
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjA2LDcgKzE2MDYsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRDb2x1bW5SdWxlV2lkdGgodW5zaWduZWQgc2hvcnQgdykgeyBTRVRfTkVT
VEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV9tdWx0aUNvbCwgbV9ydWxlLm1fd2lkdGgs
IHcpOyB9CiAgICAgdm9pZCByZXNldENvbHVtblJ1bGUoKSB7IFNFVF9ORVNURURfVkFSKHJhcmVO
b25Jbmhlcml0ZWREYXRhLCBtX211bHRpQ29sLCBtX3J1bGUsIEJvcmRlclZhbHVlKCkpOyB9CiAg
ICAgdm9pZCBzZXRDb2x1bW5TcGFuKENvbHVtblNwYW4gY29sdW1uU3BhbikgeyBTRVRfTkVTVEVE
X1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV9tdWx0aUNvbCwgbV9jb2x1bW5TcGFuLCBjb2x1
bW5TcGFuKTsgfQotICAgIHZvaWQgaW5oZXJpdENvbHVtblByb3BlcnRpZXNGcm9tKFJlbmRlclN0
eWxlKiBwYXJlbnQpIHsgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fbXVsdGlDb2wg
PSBwYXJlbnQtPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211bHRpQ29sOyB9CisgICAgdm9pZCBp
bmhlcml0Q29sdW1uUHJvcGVydGllc0Zyb20oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudCkgeyBy
YXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9tdWx0aUNvbCA9IHBhcmVudC0+cmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2w7IH0KICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvcHMpIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVy
aXRlZERhdGEsIG1fdHJhbnNmb3JtLCBtX29wZXJhdGlvbnMsIG9wcyk7IH0KICAgICB2b2lkIHNl
dFRyYW5zZm9ybU9yaWdpblgoTGVuZ3RoIGxlbmd0aCkgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9u
SW5oZXJpdGVkRGF0YSwgbV90cmFuc2Zvcm0sIG1feCwgV1RGTW92ZShsZW5ndGgpKTsgfQogICAg
IHZvaWQgc2V0VHJhbnNmb3JtT3JpZ2luWShMZW5ndGggbGVuZ3RoKSB7IFNFVF9ORVNURURfVkFS
KHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX3RyYW5zZm9ybSwgbV95LCBXVEZNb3ZlKGxlbmd0aCkp
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcs
NyBAQCBmbG9hdCBTVkdJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNlCiAgICAgcmV0dXJu
IDA7CiB9CiAKLUZsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4
dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0
aW9uLCBpbnQgZW5kUG9zaXRpb24sIFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK0Zsb2F0UmVj
dCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNW
R1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRp
b24sIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pOwogICAgIEFT
U0VSVChzdHlsZSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0
Qm94Ojpsb2NhbFNlbGVjdAogICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uKQog
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0g
cmVuZGVyZXIoKS5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXIoKS5zdHlsZSgp
OwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwogICAgIEZsb2F0UmVj
dCBzZWxlY3Rpb25SZWN0OwpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJv
eDo6cGFpbnRTZWxlY3Rpb25CYWMKICAgICBpZiAoIXRleHRTaG91bGRCZVBhaW50ZWQocmVuZGVy
ZXIoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHBhcmVu
dFJlbmRlcmVyLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBwYXJlbnRSZW5kZXJlci5zdHls
ZSgpOwogCiAgICAgaW50IHN0YXJ0UG9zaXRpb247CiAgICAgaW50IGVuZFBvc2l0aW9uOwpAQCAt
MjU2LDE0ICsyNTYsMTQgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8m
IAogICAgIGlmICghdGV4dFNob3VsZEJlUGFpbnRlZChyZW5kZXJlcigpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcGFyZW50UmVuZGVyZXIuc3R5bGUoKTsK
KyAgICBhdXRvJiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CiAKICAgICBjb25zdCBT
VkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZS5zdmdTdHlsZSgpOwogCiAgICAgYm9vbCBo
YXNGaWxsID0gc3ZnU3R5bGUuaGFzRmlsbCgpOwogICAgIGJvb2wgaGFzVmlzaWJsZVN0cm9rZSA9
IHN2Z1N0eWxlLmhhc1Zpc2libGVTdHJva2UoKTsKIAotICAgIFJlbmRlclN0eWxlKiBzZWxlY3Rp
b25TdHlsZSA9ICZzdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUg
PSAmc3R5bGU7CiAgICAgaWYgKGhhc1NlbGVjdGlvbikgewogICAgICAgICBzZWxlY3Rpb25TdHls
ZSA9IHBhcmVudFJlbmRlcmVyLmdldENhY2hlZFBzZXVkb1N0eWxlKFNFTEVDVElPTik7CiAgICAg
ICAgIGlmIChzZWxlY3Rpb25TdHlsZSkgewpAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgU1ZHSW5s
aW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNv
dXJjZSk7CiB9CiAKLWJvb2wgU1ZHSW5saW5lVGV4dEJveDo6YWNxdWlyZVBhaW50aW5nUmVzb3Vy
Y2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVy
Qm94TW9kZWxPYmplY3QmIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogc3R5bGUpCitib29sIFNWR0lu
bGluZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIEFTU0VSVChzY2FsaW5nRmFjdG9y
KTsKICAgICBBU1NFUlQoc3R5bGUpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgU1ZHSW5saW5l
VGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmUKICAgICBtX3BhaW50aW5nUmVzb3VyY2UgPSBudWxs
cHRyOwogfQogCi1ib29sIFNWR0lubGluZVRleHRCb3g6OnByZXBhcmVHcmFwaGljc0NvbnRleHRG
b3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgZmxvYXQgc2NhbGluZ0Zh
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlKQorYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjpwcmVwYXJl
R3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQs
IGZsb2F0IHNjYWxpbmdGYWN0b3IsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBy
ZXR1cm4gYWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgc2NhbGluZ0ZhY3RvciwgcGFy
ZW50KCktPnJlbmRlcmVyKCksIHN0eWxlKTsKIH0KQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIFNW
R0lubGluZVRleHRCb3g6OnJlc3RvcmVHcmFwaGljc0NvCiAgICAgcmVsZWFzZVBhaW50aW5nUmVz
b3VyY2UoY29udGV4dCwgLyogcGF0aCAqL251bGxwdHIpOwogfQogCi1UZXh0UnVuIFNWR0lubGlu
ZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBTVkdU
ZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdAorVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpj
b25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgU1ZHVGV4dEZy
YWdtZW50JiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoc3R5bGUpOwogCkBAIC01MDYs
NyArNTA2LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaQogICAg
IEFTU0VSVCghbV9wYWludGluZ1Jlc291cmNlKTsKICAgICBBU1NFUlQobV9wYWludGluZ1Jlc291
cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCi0gICAgUmVuZGVyU3R5bGUmIGRlY29y
YXRpb25TdHlsZSA9IGRlY29yYXRpb25SZW5kZXJlci5zdHlsZSgpOworICAgIGF1dG8mIGRlY29y
YXRpb25TdHlsZSA9IGRlY29yYXRpb25SZW5kZXJlci5zdHlsZSgpOwogCiAgICAgZmxvYXQgc2Nh
bGluZ0ZhY3RvciA9IDE7CiAgICAgRm9udENhc2NhZGUgc2NhbGVkRm9udDsKQEAgLTU0MCw3ICs1
NDAsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAgICAgICAg
IHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHRQdHIsICZwYXRoKTsKIH0KIAotdm9pZCBT
VkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbikK
K3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW4mIHRleHRSdW4s
IGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQg
ZW5kUG9zaXRpb24pCiB7CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHJlbmRlcmVyKCkuc2Nh
bGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKQEAgLTU4NSw3ICs1ODUs
NyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFkCiAgICAgfSB3aGls
ZSAoc2hhZG93KTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBzZWxl
Y3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgYm9vbCBoYXNTZWxl
Y3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQordm9pZCBTVkdJbmxpbmVUZXh0Qm94
OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZy
YWdtZW50JiBmcmFnbWVudCwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRl
eHRPbmx5KQogewogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKHNlbGVjdGlvblN0eWxl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4
dEJveC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNjQsMjMgKzY0LDIzIEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFN0YXJ0c05ld1RleHRDaHVuayhib29sIG5ld1RleHRDaHVuaykg
eyBtX3N0YXJ0c05ld1RleHRDaHVuayA9IG5ld1RleHRDaHVuazsgfQogCiAgICAgaW50IG9mZnNl
dEZvclBvc2l0aW9uSW5GcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBmbG9hdCBwb3Np
dGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHNl
bGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IGZy
YWdtZW50U3RhcnRQb3NpdGlvbiwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24sIFJlbmRlclN0eWxl
KikgY29uc3Q7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29u
c3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgaW50IGZyYWdt
ZW50RW5kUG9zaXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgYm9vbCBpc1NWR0lubGluZVRleHRCb3goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBT
VkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29u
c3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKIAotICAgIGJv
b2wgYWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYsIGZsb2F0IHNjYWxp
bmdGYWN0b3IsIFJlbmRlckJveE1vZGVsT2JqZWN0JiwgUmVuZGVyU3R5bGUqKTsKKyAgICBib29s
IGFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComLCBmbG9hdCBzY2FsaW5n
RmFjdG9yLCBSZW5kZXJCb3hNb2RlbE9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAg
dm9pZCByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUGF0
aCopOwogCi0gICAgYm9vbCBwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdy
YXBoaWNzQ29udGV4dComLCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJTdHlsZSopOworICAg
IGJvb2wgcHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWludGluZyhHcmFwaGljc0NvbnRl
eHQqJiwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lk
IHJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQq
Jik7CiAKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmLCBUZXh0RGVj
b3JhdGlvbiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50Jik7CiAgICAgdm9pZCBwYWludERlY29yYXRp
b25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0JiwgVGV4dERlY29yYXRpb24sIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYsIFJlbmRlckJveE1vZGVsT2JqZWN0JiBkZWNvcmF0aW9uUmVuZGVyZXIpOwot
ICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiwgUmVuZGVyU3R5
bGUqLCBUZXh0UnVuJiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IHN0YXJ0UG9zaXRpb24s
IGludCBlbmRQb3NpdGlvbik7Ci0gICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0Jiwg
UmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRG
cmFnbWVudCYsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7
CisgICAgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBS
ZW5kZXJTdHlsZSosIFRleHRSdW4mLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgc3RhcnRQ
b3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKTsKKyAgICB2b2lkIHBhaW50VGV4dChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25T
dHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFp
bnRTZWxlY3RlZFRleHRPbmx5KTsKIAogICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlv
bkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91
dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRUZXN0QWN0aW9uKSBvdmVy
cmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdQYXRoRGF0
YS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUGF0aERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHN0YXRpYyB2
b2lkIHVwZGF0ZVBhdGhGcm9tQ2lyY2xlRWxlbWVudCgKICAgICBSZW5kZXJFbGVtZW50KiByZW5k
ZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
cmV0dXJuOwotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAg
IGF1dG8mIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgZmxvYXQgciA9IGxlbmd0aENv
bnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUuc3ZnU3R5bGUoKS5yKCkpOwogICAgIGlmIChyID4g
MCkgewogICAgICAgICBmbG9hdCBjeCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5
bGUuc3ZnU3R5bGUoKS5jeCgpLCBMZW5ndGhNb2RlV2lkdGgpOwpAQCAtNTksNyArNTksNyBAQCBz
dGF0aWMgdm9pZCB1cGRhdGVQYXRoRnJvbUVsbGlwc2VFbGVtZW50CiAgICAgUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUo
KTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIFNWR0xlbmd0aENv
bnRleHQgbGVuZ3RoQ29udGV4dChlbGVtZW50KTsKICAgICBmbG9hdCByeCA9IGxlbmd0aENvbnRl
eHQudmFsdWVGb3JMZW5ndGgoc3R5bGUuc3ZnU3R5bGUoKS5yeCgpLCBMZW5ndGhNb2RlV2lkdGgp
OwogICAgIGlmIChyeCA8PSAwKQpAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0
ZVBhdGhGcm9tUmVjdEVsZW1lbnQoU1YKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBh
dXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVu
Z3RoQ29udGV4dChlbGVtZW50KTsKICAgICBmbG9hdCB3aWR0aCA9IGxlbmd0aENvbnRleHQudmFs
dWVGb3JMZW5ndGgoc3R5bGUud2lkdGgoKSwgTGVuZ3RoTW9kZVdpZHRoKTsKICAgICBpZiAod2lk
dGggPD0gMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5n
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTAsNyArOTAsNyBAQCB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnByZXBhcmVUb1JlbmRl
CiAgICAgICAgIG1fcmVuZGVyaW5nRmxhZ3MgfD0gUmVzdG9yZUdyYXBoaWNzQ29udGV4dDsKICAg
ICB9CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZSgpOworICAg
IGF1dG8mIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUoKTsKIAogICAgIGNvbnN0IFNWR1JlbmRl
clN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTMsNyArOTMsNyBAQCBUcmVlUmVzb2x2ZXI6OlBhcmVudDo6UGFyZW50KERvY3VtZW50JiBk
CiB7CiB9CiAKLVRyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQoRWxlbWVudCYgZWxlbWVudCwg
UmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdlKQorVHJlZVJlc29sdmVyOjpQYXJlbnQ6
OlBhcmVudChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIENoYW5n
ZSBjaGFuZ2UpCiAgICAgOiBlbGVtZW50KCZlbGVtZW50KQogICAgICwgc3R5bGUoc3R5bGUpCiAg
ICAgLCBjaGFuZ2UoY2hhbmdlKQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgVHJlZVJlc29sdmVy
Ojpwb3BTY29wZSgpCiAgICAgcmV0dXJuIG1fc2NvcGVTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gVHJlZVJlc29sdmVyOjpzdHlsZUZvckVsZW1l
bnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKQorc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBUcmVlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUpCiB7CiAgICAg
aWYgKCFtX2RvY3VtZW50LmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpICYmICFlbGVtZW50LnJlbmRl
cmVyKCkpIHsKICAgICAgICAgbV9kb2N1bWVudC5zZXRIYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0
eWxlKCk7CkBAIC0yODIsNyArMjgyLDcgQEAgcHJpdmF0ZToKIH07CiAjZW5kaWYgLy8gUExBVEZP
Uk0oSU9TKQogCi12b2lkIFRyZWVSZXNvbHZlcjo6cHVzaFBhcmVudChFbGVtZW50JiBlbGVtZW50
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2UpCit2b2lkIFRyZWVSZXNvbHZlcjo6
cHVzaFBhcmVudChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIENo
YW5nZSBjaGFuZ2UpCiB7CiAgICAgc2NvcGUoKS5zZWxlY3RvckZpbHRlci5wdXNoUGFyZW50KCZl
bGVtZW50KTsKIApAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgVHJlZVJlc29sdmVyOjpyZXNvbHZl
Q29tcG9zZWRUcmVlKCkKIAogICAgICAgICBib29sIHNob3VsZFJlc29sdmVGb3JQc2V1ZG9FbGVt
ZW50ID0gc2hvdWxkUmVzb2x2ZVBzZXVkb0VsZW1lbnQoZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVt
ZW50KCkpIHx8IHNob3VsZFJlc29sdmVQc2V1ZG9FbGVtZW50KGVsZW1lbnQuYWZ0ZXJQc2V1ZG9F
bGVtZW50KCkpOwogCi0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZTsKKyAgICAgICAgY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlOwogICAgICAgICBDaGFuZ2UgY2hhbmdlOwogCiAgICAgICAgIGJv
b2wgc2hvdWxkUmVzb2x2ZSA9IHBhcmVudC5jaGFuZ2UgPj0gSW5oZXJpdCB8fCBlbGVtZW50Lm5l
ZWRzU3R5bGVSZWNhbGMoKSB8fCBzaG91bGRSZXNvbHZlRm9yUHNldWRvRWxlbWVudCB8fCBhZmZl
Y3RlZEJ5UHJldmlvdXNTaWJsaW5nIHx8IGVsZW1lbnQuaGFzRGlzcGxheUNvbnRlbnRzKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmgJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxV
cGRhdGU+IHJlc29sdmUoQ2hhbmdlKTsKIAogcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUmIGluaGVy
aXRlZFN0eWxlKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxl
bWVudChFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKTsKIAogICAg
IHZvaWQgcmVzb2x2ZUNvbXBvc2VkVHJlZSgpOwogICAgIEVsZW1lbnRVcGRhdGUgcmVzb2x2ZUVs
ZW1lbnQoRWxlbWVudCYpOwpAQCAtNzksMTMgKzc5LDEzIEBAIHByaXZhdGU6CiAKICAgICBzdHJ1
Y3QgUGFyZW50IHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudDsKLSAgICAgICAgUmVuZGVyU3R5
bGUmIHN0eWxlOworICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGU7CiAgICAgICAgIENo
YW5nZSBjaGFuZ2U7CiAgICAgICAgIGJvb2wgZGlkUHVzaFNjb3BlIHsgZmFsc2UgfTsKICAgICAg
ICAgYm9vbCBlbGVtZW50TmVlZGluZ1N0eWxlUmVjYWxjQWZmZWN0c05leHRTaWJsaW5nRWxlbWVu
dFN0eWxlIHsgZmFsc2UgfTsKIAogICAgICAgICBQYXJlbnQoRG9jdW1lbnQmLCBDaGFuZ2UpOwot
ICAgICAgICBQYXJlbnQoRWxlbWVudCYsIFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKKyAgICAgICAg
UGFyZW50KEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIENoYW5nZSk7CiAgICAgfTsKIAog
ICAgIFNjb3BlJiBzY29wZSgpIHsgcmV0dXJuIG1fc2NvcGVTdGFjay5sYXN0KCk7IH0KQEAgLTk1
LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHB1c2hFbmNsb3NpbmdTY29wZSgpOwogICAg
IHZvaWQgcG9wU2NvcGUoKTsKIAotICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50JiwgUmVuZGVy
U3R5bGUmLCBDaGFuZ2UpOworICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50JiwgY29uc3QgUmVu
ZGVyU3R5bGUmLCBDaGFuZ2UpOwogICAgIHZvaWQgcG9wUGFyZW50KCk7CiAgICAgdm9pZCBwb3BQ
YXJlbnRzVG9EZXB0aCh1bnNpZ25lZCBkZXB0aCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlVXBkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVVwZGF0ZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlVXBkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTEgKzYxLDI0IEBAIGJvb2wg
VXBkYXRlOjp0ZXh0VXBkYXRlKGNvbnN0IFRleHQmIHRleHQKICAgICByZXR1cm4gbV90ZXh0cy5j
b250YWlucygmdGV4dCk7CiB9CiAKLVJlbmRlclN0eWxlKiBVcGRhdGU6OmVsZW1lbnRTdHlsZShj
b25zdCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIFVwZGF0ZTo6
ZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKGF1
dG8qIHVwZGF0ZSA9IGVsZW1lbnRVcGRhdGUoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiB1cGRh
dGUtPnN0eWxlLmdldCgpOwotICAgIHJldHVybiBlbGVtZW50LnJlbmRlclN0eWxlKCk7CisgICAg
YXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICZyZW5kZXJlci0+c3R5bGUoKTsK
K30KKworUmVuZGVyU3R5bGUqIFVwZGF0ZTo6ZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQpCit7CisgICAgaWYgKGF1dG8qIHVwZGF0ZSA9IGVsZW1lbnRVcGRhdGUoZWxlbWVudCkp
CisgICAgICAgIHJldHVybiB1cGRhdGUtPnN0eWxlLmdldCgpOworICAgIGF1dG8qIHJlbmRlcmVy
ID0gZWxlbWVudC5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiAmcmVuZGVyZXItPm11dGFibGVTdHlsZSgpOwogfQogCiB2
b2lkIFVwZGF0ZTo6YWRkRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBFbGVtZW50KiBwYXJlbnQs
IEVsZW1lbnRVcGRhdGUmJiBlbGVtZW50VXBkYXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVVcGRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVVwZGF0ZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVVwZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgdGV4dFVwZGF0ZShjb25zdCBUZXh0JikgY29uc3Q7CiAKLSAgICBSZW5kZXJTdHlsZSog
ZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHls
ZSogZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmKSBjb25zdDsKKyAgICBSZW5kZXJTdHlsZSog
ZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmKTsKIAogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDYsNyArNzQ2LDcgQEAgdm9pZCBTVkdF
bGVtZW50OjpzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YQogICAgIGNvbnRleHRFbGVtZW50LT5zeW5j
aHJvbml6ZVN5c3RlbUxhbmd1YWdlKCk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU1ZH
RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTVkdFbGVtZW50OjpyZXNvbHZlQ3Vz
dG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHls
ZSopCiB7CiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgaW4gYSA8dXNlPiB0cmVlIHdlIGdldCB0
aGUgc3R5bGUgZnJvbSB0aGUgZGVmaW5pdGlvbiB0cmVlLgogICAgIGlmIChhdXRvKiBzdHlsZUVs
ZW1lbnQgPSB0aGlzLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKQpAQCAtNzczLDEyICs3NzMsMTIg
QEAgdm9pZCBTVkdFbGVtZW50OjpzZXRVc2VPdmVycmlkZUNvbXB1dGVkUwogICAgICAgICBtX3N2
Z1JhcmVEYXRhLT5zZXRVc2VPdmVycmlkZUNvbXB1dGVkU3R5bGUodmFsdWUpOwogfQogCi1SZW5k
ZXJTdHlsZSogU1ZHRWxlbWVudDo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50
U3BlY2lmaWVyKQorY29uc3QgUmVuZGVyU3R5bGUqIFNWR0VsZW1lbnQ6OmNvbXB1dGVkU3R5bGUo
UHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKIHsKICAgICBpZiAoIW1fc3ZnUmFyZURh
dGEgfHwgIW1fc3ZnUmFyZURhdGEtPnVzZU92ZXJyaWRlQ29tcHV0ZWRTdHlsZSgpKQogICAgICAg
ICByZXR1cm4gRWxlbWVudDo6Y29tcHV0ZWRTdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsK
IAotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHI7CisgICAgY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0cjsKICAgICBpZiAoRWxlbWVudCogcGFyZW50
ID0gcGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChhdXRvIHJlbmRl
cmVyID0gcGFyZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcGFyZW50U3R5bGUgPSAmcmVu
ZGVyZXItPnN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMiw3ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGVk
U1ZHQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICBzdGF0aWMgdm9p
ZCBzeW5jaHJvbml6ZUFsbEFuaW1hdGVkU1ZHQXR0cmlidXRlKFNWR0VsZW1lbnQqKTsKICAKLSAg
ICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3Zl
cnJpZGU7CiAKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRmVhdHVyZXMoU1ZH
RWxlbWVudCogY29udGV4dEVsZW1lbnQpOwogICAgIHN0YXRpYyB2b2lkIHN5bmNocm9uaXplUmVx
dWlyZWRFeHRlbnNpb25zKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKQEAgLTE4MSw3ICsx
ODEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgY2xhc3MgSW5zdGFuY2VJbnZhbGlkYXRpb25HdWFyZDsK
IAogcHJpdmF0ZToKLSAgICBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5P
UFNFVURPKSBmaW5hbDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1
ZG9JZCA9IE5PUFNFVURPKSBmaW5hbDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1N1cHBvcnRlZChT
dHJpbmdJbXBsKiBmZWF0dXJlLCBTdHJpbmdJbXBsKiB2ZXJzaW9uKSBjb25zdDsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSwxMCArNTksMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fYW5pbWF0ZWRT
TUlMU3R5bGVQcm9wZXJ0aWVzOwogICAgIH0KIAotICAgIFJlbmRlclN0eWxlKiBvdmVycmlkZUNv
bXB1dGVkU3R5bGUoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQor
ICAgIGNvbnN0IFJlbmRlclN0eWxlKiBvdmVycmlkZUNvbXB1dGVkU3R5bGUoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogICAgIHsKICAgICAgICAgaWYg
KCFtX3VzZU92ZXJyaWRlQ29tcHV0ZWRTdHlsZSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmICghbV9vdmVycmlkZUNvbXB1dGVk
U3R5bGUgfHwgbV9uZWVkc092ZXJyaWRlQ29tcHV0ZWRTdHlsZVVwZGF0ZSkgewogICAgICAgICAg
ICAgLy8gVGhlIHN0eWxlIGNvbXB1dGVkIGhlcmUgY29udGFpbnMgbm8gQ1NTIEFuaW1hdGlvbnMv
VHJhbnNpdGlvbnMgb3IgU01JTCBpbmR1Y2VkIHJ1bGVzIC0gdGhpcyBpcyBuZWVkZWQgdG8gY29t
cHV0ZSB0aGUgImJhc2UgdmFsdWUiIGZvciB0aGUgU01JTCBhbmltYXRpb24gc2FuZHdoaWNoIG1v
ZGVsLgogICAgICAgICAgICAgbV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgPSBlbGVtZW50LnN0eWxl
UmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgcGFyZW50U3R5bGUsIE1hdGNoQWxs
UnVsZXNFeGNsdWRpbmdTTUlMKS5yZW5kZXJTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyAr
NjMsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHR3JhcGhpY3NFbGVtZW50OjpnZXRTCiBBZmZpbmVU
cmFuc2Zvcm0gU1ZHR3JhcGhpY3NFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29u
c3QKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwotICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0
byogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwog
CiAgICAgLy8gSWYgQ1NTIHByb3BlcnR5IHdhcyBzZXQsIHVzZSB0aGF0LCBvdGhlcndpc2UgZmFs
bGJhY2sgdG8gYXR0cmlidXRlIChpZiBzZXQpLgogICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+aGFz
VHJhbnNmb3JtKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5j
cHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIGZsb2F0IFNWR0xlbmd0
aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb20KICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGlu
bGluZSBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcoY29uc3QgU1ZH
RWxlbWVudCogY29udGV4dCkKK3N0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIHJlbmRl
clN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQpCiB7CiAg
ICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIzNiwxMiArMjM2
LDEyIEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlRm8KIAogICAgIC8v
IFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgYSBSZW5kZXJTVkdSb290IHJlbmRlcmVyLCBjYXJyeWlu
ZyBhIHN0eWxlLgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOworICAg
IHJldHVybiBudWxscHRyOwogfQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFs
dWVGcm9tVXNlclVuaXRzVG9FTVMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2
aW5nKG1fY29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJl
c29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1Rf
U1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNTgsNyArMjU4LDcgQEAgZmxv
YXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbQogCiBmbG9hdCBTVkdMZW5ndGhD
b250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tRU1TVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0
eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSByZW5k
ZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpIHsK
ICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0y
NjksNyArMjY5LDcgQEAgZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbQog
CiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FWFMo
ZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CisgICAg
YXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwog
ICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0yODgsNyArMjg4LDcgQEAgZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6
Y29udmVydFZhbHVlRnJvbQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVG
cm9tRVhTVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAog
ewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5n
KG1fY29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29s
dmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQ
UE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdT
dG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBT
VkdTdG9wRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChjbwogCiBDb2xvciBTVkdTdG9wRWxlbWVu
dDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKKyAg
ICBhdXRvKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxw
dHI7CiAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgZm9yIG51bGwgc3R5bGUgZXhpc3RzIHRvIGFk
ZHJlc3MgQnVnIFdLIDkwODE0LCBhIHJhcmUgY3Jhc2ggY29uZGl0aW9uIGluCiAgICAgLy8gd2hp
Y2ggdGhlIHJlbmRlcmVyIG9yIHN0eWxlIGlzIG51bGwuIFRoaXMgZW50aXJlIGNsYXNzIGlzIHNj
aGVkdWxlZCBmb3IgcmVtb3ZhbCAoQnVnIFdLIDg2OTQxKQogICAgIC8vIGFuZCB3ZSB3aWxsIHRv
bGVyYXRlIHRoaXMgbnVsbCBjaGVjayB1bnRpbCB0aGVuLgpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RleHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVGV4dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFJl
ZjxTVkdUZXh0RWxlbWVudD4gU1ZHVGV4dEVsZW1lbnQ6OmNyZWEKIEFmZmluZVRyYW5zZm9ybSBT
VkdUZXh0RWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIG1hdHJpeDsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigp
ID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8qIHN0eWxlID0gcmVu
ZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKIAogICAgIC8vIGlmIENT
UyBwcm9wZXJ0eSB3YXMgc2V0LCB1c2UgdGhhdCwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGF0dHJp
YnV0ZSAoaWYgc2V0KQogICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+aGFzVHJhbnNmb3JtKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIzLDcgKzgyMyw3IEBAIEVkaXRvclN0YXRl
IFdlYlBhZ2U6OmVkaXRvclN0YXRlKEluY2x1ZGUKICAgICAgICAgYXV0byYgcG9zdExheW91dERh
dGEgPSByZXN1bHQucG9zdExheW91dERhdGEoKTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb24uaXNO
b25lKCkpIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAgICAgIGlm
IChSZW5kZXJTdHlsZSogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJmZy
YW1lLCBub2RlVG9SZW1vdmUpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogc3R5bGUgPSBFZGl0
b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJmZyYW1lLCBub2RlVG9SZW1vdmUpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLndlaWdodCgpID49IEZvbnRXZWln
aHRCb2xkKQogICAgICAgICAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1
dGVzIHw9IEF0dHJpYnV0ZUJvbGQ7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5mb250Q2Fz
Y2FkZSgpLml0YWxpYygpID09IEZvbnRJdGFsaWNPbikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277364</attachid>
            <date>2016-04-26 07:06:12 -0700</date>
            <delta_ts>2016-04-26 08:02:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>const-renderstyle-7.patch</filename>
            <type>text/plain</type>
            <size>184336</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDA4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyOCBAQAorMjAxNi0wNC0yNiAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVyRWxlbWVudDo6c3R5
bGUoKSBzaG91bGQgcmV0dXJuIGNvbnN0IFJlbmRlclN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTcwMTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdHlsZSBzaG91bGQgYmUgY2hhbmdlZCB2aWEg
c2V0U3R5bGUsIG5vdCBieSBtdXRhdGluZyBpdCBkaXJlY3RseS4KKworICAgICAgICBQdWxsaW5n
IHRoaXMgc3RyaW5nIHR1cm5zIFJlbmRlclN0eWxlIGNvbnN0IGluIG1hbnkgcGxhY2VzLgorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnN0YXJ0T2ZTdHlsZVJhbmdlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1
dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RP
TS5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBpbm5lckZyYW1lUXVhZF0pOgorICAgICAgICAoLVtE
T01Ob2RlIGNvbXB1dGVkRm9udFNpemVdKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uTGlzdEZv
ckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uT2Zmc2V0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFRyYW5zaXRpb25Qcm9wZXJ0eVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbFNuYXBEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JvbGxTbmFwUG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbFNuYXBDb29yZGlu
YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpsb2dVbmltcGxlbWVudGVkUHJvcGVydHlJRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5RnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmxpbmVIZWlnaHRGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFNpemVGcm9tU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFN0eWxlRnJvbVN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvbnRWYXJpYW50RnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRXZWln
aHRGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFN5bnRoZXNpc0Zyb21TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjp6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhZGRpbmdPck1hcmdpbklzUmVuZGVyZXJEZXBlbmRlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUmVnaW9uQnJlYWspOgorICAgICAgICAoV2Vi
Q29yZTo6aXNMYXlvdXREZXBlbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU3R5bGVJ
Zk5lZWRlZEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVJlbmRlclN0eWxlRm9y
UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJv
cGVydHlNYXRjaGVzKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
Lmg6CisgICAgICAgICogY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRXaWR0aEZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2aWV3cG9y
dEhlaWdodEZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhOjp2aWV3cG9ydE1pbkZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhOjp2aWV3cG9ydE1heEZhY3Rvcik6CisgICAgICAgICogY3NzL0NTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGE6OkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6cm9vdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OmNvbXB1dGluZ0ZvbnRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OmNvcHlXaXRoQWRqdXN0ZWRab29tKToK
KyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpyb290
RWxlbWVudFN0eWxlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5oOgorICAgICAgICAq
IGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVl
cnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IpOgorICAgICAgICAqIGNzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmg6CisgICAgICAgICogY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJva2VEYXNoQXJyYXlUb0NTU1ZhbHVlTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjphZGp1c3RTVkdQ
YWludEZvckN1cnJlbnRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0
cmFjdG9yOjpzdmdQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKiBjc3MvU291cmNlU2l6ZUxpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVs
dExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlU2l6ZXNBdHRyaWJ1dGUpOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJD
dXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlm
aWVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJ
bWFnZU1vZGlmaWVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaGVyaXRDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQWx0KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQXRTaGFkb3dCb3VuZGFyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmRvY3VtZW50U2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjp0
YWtlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnBhcmVu
dFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpyb290RWxl
bWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpyZWdp
b25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpl
bGVtZW50TGlua1N0YXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5k
aW5nU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFZpc3VhbGx5
T3JkZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3JlYXRlUGFyc2VyKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpzdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OnJlc29sdmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0ZvckVtcHR5
U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmJlZm9yZU9yQWZ0ZXJQc2V1ZG9FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmV4aXN0aW5nQ29tcHV0ZWRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50Ojpjb21wdXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmRpZERldGFjaFJlbmRlcmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZXNvbHZl
Q3VzdG9tU3R5bGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUVkaXRhYmlsaXR5RnJvbUNvbXB1dGVk
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cHNldWRvQXdhcmVMYXN0Q2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29tcHV0ZWRTdHlsZSk6CisgICAgICAgICogZG9tL05v
ZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZVJlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpyZW5kZXJTdHlsZSk6CisgICAgICAgICogZG9tL1BzZXVkb0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUpOgorICAgICAg
ICAqIGRvbS9Qc2V1ZG9FbGVtZW50Lmg6CisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNOZXdMaW5lQXRQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxl
T2ZFbmNsb3NpbmdUZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVu
dENvbW1hbmQ6OnJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjplbmRPZk5leHRQYXJh
Z3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZCk6CisgICAgICAgICogZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmluaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVk
KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAqIGVkaXRpbmcv
RWRpdG9yLmg6CisgICAgICAgICogZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5KToKKyAgICAg
ICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
Z2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKToKKyAgICAg
ICAgKiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmli
dXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRpdGxlRWxlbWVudDo6Y29tcHV0ZWRUZXh0V2l0aERpcmVjdGlvbik6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5Ojpmb250c05lZWRVcGRhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6Omlu
aXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
VGV4dEJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6dG9UZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFJlc291cmNl
UHJlbG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxSZXNvdXJjZVByZWxvYWRlcjo6
cHJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjptZWRpYUF0dHJpYnV0ZU1hdGNoZXMpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
U2xpZGVyVGh1bWJFbGVtZW50Ojpob3N0SW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVy
VGh1bWJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2xp
ZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDb250cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
bnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpUZXh0Q29udHJv
bFBsYWNlaG9sZGVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbFBsYWNl
aG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKyAgICAgICAgKiBodG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6Cisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzb2x2ZVN0ZXBzRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uQmFzZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6fkFuaW1hdGlvbkJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6cmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkJhc2U6OnNldEFuaW1hdGlvbik6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVy
OjpjYW5jZWxBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRl
cmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNp
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlm
cmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjph
bmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDoK
KyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpyZXNldCk6CisgICAgICAgICogcGFn
ZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkltcGxp
Y2l0QW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpLZXlm
cmFtZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6ZmV0
Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OktleWZy
YW1lQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFt
ZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHBhZ2UvaW9zL0ZyYW1lSU9TLm1tOgorICAgICAgICAo
V2ViQ29yZTo6YW5jZXN0b3JSZXNwb25kaW5nVG9TY3JvbGxXaGVlbEV2ZW50cyk6CisgICAgICAg
ICogcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZsb3dUaHJlYWRDb250cm9sbGVyOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcFJlY3RGb3JOaW5l
UGllY2VJbWFnZVN0cmlwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpmaXJzdExpbmVCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZUZvckZp
cnN0TGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExl
dHRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjcmVhdGVGaXJzdExl
dHRlclJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRqdXN0QmxvY2tDaGlsZEZvclBh
Z2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlTWluaW11bVBhZ2VIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGp1c3RDb21wdXRlZEZvbnRT
aXplcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6Ym9yZGVyUmFkaWkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjplbmNsb3Np
bmdGbG9hdFBhaW50aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dp
Y2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclBy
b3BhZ2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmFwcGx5VG9wTGVmdExvY2F0aW9uT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6aGFzUmVuZGVyT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpoYXNWaXN1YWxPdmVyZmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpiYWNrZ3JvdW5kUm91bmRlZFJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
dXR0b246OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6c3R5bGVX
aWxsQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6c3R5bGVEaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpzZXR1cElubmVyU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpzdHlsZVdpbGxDaGFuZ2UpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OmNyZWF0ZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp1bmNh
Y2hlZEZpcnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmNh
Y2hlZEZpcnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmZp
cnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnN0eWxlV2ls
bENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjphZGRDb250cm9sU3Rh
dGVzRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Z2V0Q2Fj
aGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Z2V0TXV0
YWJsZUNhY2hlZFBzZXVkb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6
OmdldFVuY2FjaGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVu
dDo6cGFpbnRPdXRsaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6aGFzSW5pdGlhbGl6ZWRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpzdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJFbGVtZW50OjptdXRhYmxlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RWxlbWVudDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUmVu
ZGVySW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OlJlbmRl
ckZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRl
Rmxvd1RocmVhZFN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6bGF5b3V0U2hhZG93Q29udHJvbHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzdHls
ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5
c0NyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnBhaW50
T3V0bGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpw
YWludFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjppdGVtT2Zmc2V0Rm9yQWxpZ25tZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0TWFya2VyOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpjb21wdXRl
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVl
ZVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVyU3R5bGUpOgorICAgICAgICAo
UmVuZGVyTWVudUxpc3Q6OnVwZGF0ZU9wdGlvbnNXaWR0aCk6CisgICAgICAgIChSZW5kZXJNZW51
TGlzdDo6aXRlbVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRDb2x1bW5TcGFubmVyKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXI6OmNyZWF0ZUFub255bW91cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50OjpjaGVja1JlZ2lvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlubmVyTGluZUhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpkZWNvcmF0aW9uQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG9yc0FuZFN0eWxlcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjptaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjptYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludFJv
d0dyb3VwQm9yZGVySWZSZXF1aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpwaHlzaWNhbEJvcmRl
ckZvckRpcmVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNoYXJhY3RlckF0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHQ6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmZpcnN0
TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmdldENhY2hlZFBzZXVk
b1N0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmxheW91dFNwZWNpYWxFeGNsdWRl
ZENoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5
b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5
bGVEaWRDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5nZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyUmFkaWlGcm9tU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2spOgor
ICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnBhaW50Rmxvdyk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpoaXRUZXN0Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5n
L1RleHRBdXRvU2l6aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvU2l6aW5nS2V5
OjpUZXh0QXV0b1NpemluZ0tleSk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5n
Lmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b1NpemluZ0tleTo6c3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9TaXppbmdLZXk6OmlzRGVsZXRlZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVUZXh0
U2VsZWN0aW9uUGFpbnRTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdD
b250ZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OmxheW91dCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpyZXNldENvbHVtblJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNl
dENvbHVtblNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmluaGVyaXRDb2x1
bW5Qcm9wZXJ0aWVzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0VHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1Pcmln
aW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5Z
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25C
YWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGlu
Z1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnByZXBhcmVH
cmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFk
b3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVQYXRo
RnJvbUNpcmNsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUGF0aEZyb21FbGxp
cHNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVQYXRoRnJvbVJlY3RFbGVtZW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29u
dGVudCk6CisgICAgICAgICogc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6cG9wU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OnB1c2hQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlRyZWVSZXNvbHZlcjo6cmVzb2x2ZUNvbXBvc2VkVHJlZSk6CisgICAgICAgICogc3R5
bGUvU3R5bGVUcmVlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVz
b2x2ZXI6OnNjb3BlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVVwZGF0ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6VXBkYXRlOjp0ZXh0VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpVcGRhdGU6OmVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
VXBkYXRlOjphZGRFbGVtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVVwZGF0ZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlVwZGF0ZTo6ZG9jdW1lbnQpOgorICAgICAgICAqIHN2Zy9T
VkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnN5bmNocm9uaXpl
U3lzdGVtTGFuZ3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6cmVzb2x2ZUN1
c3RvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnNldFVzZU92ZXJyaWRl
Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpjb21wdXRlZFN0
eWxlKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVt
ZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6ZW5z
dXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnRSYXJlRGF0YTo6b3ZlcnJpZGVDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBzdmcvU1ZH
R3JhcGhpY3NFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYXBoaWNzRWxlbWVu
dDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSk6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aENvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVl
RnJvbVBlcmNlbnRhZ2VUb1VzZXJVbml0cyk6CisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJTdHls
ZUZvckxlbmd0aFJlc29sdmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0
Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FTVMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVNU1RvVXNlclVuaXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VY
Uyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9t
RVhTVG9Vc2VyVW5pdHMpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSk6
CisgICAgICAgICogc3ZnL1NWR1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKToKKwogMjAxNi0wNC0yNiAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIERyb3Ag
W1VzZVBvaW50ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFNwZWVj
aFN5bnRoZXNpcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTM0LDcgKzExMzQsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHls
ZVJhbmdlCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHZpc2libGVQb3MuZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIFJlbmRlck9iamVj
dCogc3RhcnRSZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZy
ZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvKiBzdHlsZSA9ICZyZW5kZXJlci0+c3R5bGUoKTsK
IAogICAgIC8vIHRyYXZlcnNlIGJhY2t3YXJkIGJ5IHJlbmRlcmVyIHRvIGxvb2sgZm9yIHN0eWxl
IGNoYW5nZQogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByID0gcmVuZGVyZXItPnByZXZpb3VzSW5Q
cmVPcmRlcigpOyByOyByID0gci0+cHJldmlvdXNJblByZU9yZGVyKCkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgQXRrQXR0cmlidXRl
U2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IG9iamVjdC0+cmVuZGVyZXIoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byogc3R5bGUgPSAmcmVuZGVyZXItPnN0
eWxlKCk7CiAKICAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gYnVmZmVyKGdfc3RyZHVwX3ByaW50ZigiJWkiLCBzdHlsZS0+Zm9udFNp
emUoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00OTksNyArNDk5LDcgQEAgLSAoV0tRdWFkKWlubmVyRnJhbWVRdWFkICAgICAgIC8v
IHRha2VzIAogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBlbXB0eVF1YWQoKTsK
IAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgIGF1dG8m
IHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IHJl
bmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlIC8qIHVzZSB0cmFuc2Zvcm1zKi8p
OwogCiAgICAgYm91bmRpbmdCb3gubW92ZShzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUu
Ym9yZGVyVG9wV2lkdGgoKSk7CkBAIC01MTMsNyArNTEzLDcgQEAgLSAoV0tRdWFkKWlubmVyRnJh
bWVRdWFkICAgICAgIC8vIHRha2VzIAogLSAoZmxvYXQpY29tcHV0ZWRGb250U2l6ZQogewogICAg
IFdlYkNvcmU6Ok5vZGUgKm5vZGUgPSBjb3JlKHNlbGYpOwotICAgIFJlbmRlclN0eWxlICpzdHls
ZSA9IG5vZGUtPnJlbmRlclN0eWxlKCk7CisgICAgYXV0byAqc3R5bGUgPSBub2RlLT5yZW5kZXJT
dHlsZSgpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiAwLjBmOwogICAgIHJldHVy
biBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMCw3ICs3MDAsNyBAQCBzdGF0aWMgUmVm
PENTU1ZhbHVlTGlzdD4gY3JlYXRlUG9zaXRpb25MCiAgICAgcmV0dXJuIHBvc2l0aW9uTGlzdDsK
IH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcG9zaXRpb25PZmZzZXRWYWx1ZShSZW5kZXJT
dHlsZSYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IHBvc2l0aW9uT2Zmc2V0VmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgTGVuZ3RoIGxlbmd0aDsKICAgICBzd2l0Y2gg
KHByb3BlcnR5SUQpIHsKQEAgLTczNyw3ICs3MzcsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBwb3NpdGlvbk9mZnNldFZhCiAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiB9CiAKLVJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENv
bG9yKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAorUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjdXJyZW50Q29sb3JP
clZhbGlkQ29sb3IoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBDb2xvciYgY29sb3Ip
IGNvbnN0CiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBsb29rIGF0IHZpc2l0ZWQg
aW5mb3JtYXRpb24sIHNvIHRoYXQgY29tcHV0ZWQgc3R5bGUgZG9lc24ndCBleHBvc2UgdGhhdC4K
ICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKQEAgLTExNDMsNyArMTE0Myw3IEBAIHN0YXRpYyBS
ZWY8Q1NTVmFsdWVMaXN0PiBnZXRUcmFuc2l0aW9uUHIKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCi1zdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xsU25hcERlc3RpbmF0aW9u
KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgTGVuZ3RoU2l6ZSYgZGVzdGluYXRpb24pCitzdGF0
aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xsU25hcERlc3RpbmF0aW9uKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgTGVuZ3RoU2l6ZSYgZGVzdGluYXRpb24pCiB7CiAgICAgYXV0byBs
aXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGxpc3QuZ2V0
KCkuYXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoZGVzdGluYXRpb24ud2lk
dGgoKSwgc3R5bGUpKTsKQEAgLTExNTEsNyArMTE1MSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVM
aXN0PiBzY3JvbGxTbmFwRGVzdGkKICAgICByZXR1cm4gbGlzdDsKIH0KIAotc3RhdGljIFJlZjxD
U1NWYWx1ZT4gc2Nyb2xsU25hcFBvaW50cyhSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFNjcm9s
bFNuYXBQb2ludHMqIHBvaW50cykKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBQb2lu
dHMoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTY3JvbGxTbmFwUG9pbnRzKiBwb2lu
dHMpCiB7CiAgICAgaWYgKCFwb2ludHMpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwpAQCAtMTE2Niw3
ICsxMTY2LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcFBvaW50cyhSZQogICAg
IHJldHVybiBXVEZNb3ZlKGxpc3QpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxT
bmFwQ29vcmRpbmF0ZXMoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBWZWN0b3I8TGVuZ3RoU2l6
ZT4mIGNvb3JkaW5hdGVzKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcENvb3JkaW5h
dGVzKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPExlbmd0aFNpemU+JiBj
b29yZGluYXRlcykKIHsKICAgICBpZiAoY29vcmRpbmF0ZXMuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKQEAgLTE4MDcsNyArMTgwNyw3IEBAIHN0YXRpYyB2b2lkIGxvZ1VuaW1wbGVt
ZW50ZWRQcm9wZXJ0eUlEKEMKICAgICBMT0dfRVJST1IoIldlYktpdCBkb2VzIG5vdCB5ZXQgaW1w
bGVtZW50IGdldENvbXB1dGVkU3R5bGUgZm9yICclcycuIiwgZ2V0UHJvcGVydHlOYW1lKHByb3Bl
cnR5SUQpKTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9tU3R5
bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1p
bHlGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGF1dG8gbGlzdCA9
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3R5bGUtPmZvbnRDYXNjYWRlKCkuZmFtaWx5Q291bnQoKTsgKytpKQpAQCAt
MTgxNSw3ICsxODE1LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9t
UwogICAgIHJldHVybiBsaXN0OwogfQogCi1zdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBs
aW5lSGVpZ2h0RnJvbVN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+IGxpbmVIZWlnaHRGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQogewogICAgIExlbmd0aCBsZW5ndGggPSBzdHlsZS5saW5lSGVpZ2h0KCk7CiAgICAgaWYgKGxl
bmd0aC5pc05lZ2F0aXZlKCkpIC8vIElmIHRydWUsIGxpbmUtaGVpZ2h0IG5vdCBzZXQ7IHVzZSB0
aGUgZm9udCdzIGxpbmUgc3BhY2luZy4KQEAgLTE4MzAsMTkgKzE4MzAsMTkgQEAgc3RhdGljIFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZUhlaWdodAogICAgIHJldHVybiB6b29tQWRqdXN0ZWRQ
aXhlbFZhbHVlKGZsb2F0VmFsdWVGb3JMZW5ndGgobGVuZ3RoLCAwKSwgc3R5bGUpOwogfQogCi1z
dGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U2l6ZUZyb21TdHlsZShSZW5kZXJTdHls
ZSYgc3R5bGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U2l6ZUZyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBp
eGVsVmFsdWUoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCksIHN0eWxlKTsK
IH0KIAotc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFN0eWxlRnJvbVN0eWxlKFJl
bmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRTdHls
ZUZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS5pdGFsaWMoKSkKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSXRhbGljKTsKICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb3JtYWwpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudEZyb21T
dHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFu
dEZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS52YXJpYW50U2V0dGluZ3MoKS5pc0FsbE5vcm1hbCgpKQogICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb3JtYWwpOwpAQCAtMjAyOSw3ICsyMDI5LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1
ZT4gZm9udFZhcmlhbnRGcm9tU3R5bAogICAgIHJldHVybiBXVEZNb3ZlKGxpc3QpOwogfQogCi1z
dGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250V2VpZ2h0RnJvbVN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRXZWlnaHRGcm9t
U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHN3aXRjaCAoc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLndlaWdodCgpKSB7CiAgICAgY2FzZSBGb250V2VpZ2h0MTAwOgpAQCAt
MjA1NSw3ICsyMDU1LDcgQEAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdo
dAogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRTeW50
aGVzaXNGcm9tU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4g
Zm9udFN5bnRoZXNpc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAg
aWYgKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSA9PSBGb250U3ludGhl
c2lzTm9uZSkKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CkBAIC0yMDcyLDcgKzIwNzIsNyBAQCB0eXBl
ZGVmIGNvbnN0IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqUmVuCiB0eXBlZGVmIExheW91dFVuaXQg
KFJlbmRlckJveE1vZGVsT2JqZWN0OjoqUmVuZGVyQm94Q29tcHV0ZWRDU1NWYWx1ZUdldHRlciko
KSBjb25zdDsKIAogdGVtcGxhdGU8UmVuZGVyU3R5bGVMZW5ndGhHZXR0ZXIgbGVuZ3RoR2V0dGVy
LCBSZW5kZXJCb3hDb21wdXRlZENTU1ZhbHVlR2V0dGVyIGNvbXB1dGVkQ1NTVmFsdWVHZXR0ZXI+
Ci1pbmxpbmUgUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhl
bFZhbHVlKFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK2lubGlu
ZSBSZWZQdHI8Q1NTVmFsdWU+IHpvb21BZGp1c3RlZFBhZGRpbmdPck1hcmdpblBpeGVsVmFsdWUo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAg
IExlbmd0aCB1bnpvb216ZWRMZW5ndGggPSAoc3R5bGUuKmxlbmd0aEdldHRlcikoKTsKICAgICBp
ZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIpIHx8IHVuem9vbXplZExlbmd0aC5pc0ZpeGVkKCkp
CkBAIC0yMDgxLDcgKzIwODEsNyBAQCBpbmxpbmUgUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0
ZWRQYWRkCiB9CiAKIHRlbXBsYXRlPFJlbmRlclN0eWxlTGVuZ3RoR2V0dGVyIGxlbmd0aEdldHRl
cj4KLWlubGluZSBib29sIHBhZGRpbmdPck1hcmdpbklzUmVuZGVyZXJEZXBlbmRlbnQoUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoraW5saW5lIGJvb2wgcGFkZGlu
Z09yTWFyZ2luSXNSZW5kZXJlckRlcGVuZGVudChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXIt
PmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxMzksNyArMjEzOSw3IEBAIHN0
YXRpYyBDU1NWYWx1ZUlEIGNvbnZlcnRUb1JlZ2lvbkJyZWFrKEIKIH0KICNlbmRpZgogICAgIAot
c3RhdGljIGJvb2wgaXNMYXlvdXREZXBlbmRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMgYm9vbCBp
c0xheW91dERlcGVuZGVudChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBzd2l0Y2ggKHByb3Bl
cnR5SUQpIHsKICAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CkBAIC0yMjY3LDcgKzIyNjcsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgdXBkYXRlU3R5bGVJZk5lZWRlZEZvCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIGNvbXB1dGVSZW5kZXJTdHlsZUZv
clByb3BlcnR5KE5vZGUqIHN0eWxlZE5vZGUsIFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZp
ZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiYgb3duZWRTdHlsZSkKK3N0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVS
ZW5kZXJTdHlsZUZvclByb3BlcnR5KE5vZGUqIHN0eWxlZE5vZGUsIFBzZXVkb0lkIHBzZXVkb0Vs
ZW1lbnRTcGVjaWZpZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiYgb3duZWRTdHlsZSkKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gc3R5bGVkTm9kZS0+cmVuZGVyZXIoKTsKIApAQCAtMjM3Myw3ICsyMzczLDcgQEAgUmVmUHRy
PENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOgogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gb3duZWRTdHlsZTsKLSAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBudWxscHRyOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSA9IG51bGxwdHI7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG51bGxwdHI7CiAgICAg
Ym9vbCBmb3JjZUZ1bGxMYXlvdXQgPSBmYWxzZTsKICAgICBpZiAodXBkYXRlTGF5b3V0KSB7CkBA
IC0zODYxLDcgKzM4NjEsNyBAQCB1bnNpZ25lZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246
OmxlCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsK
KyAgICBhdXRvKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3Bl
Y2lmaWVyKTsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzg4MCw3
ICszODgwLDcgQEAgU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6aXRlbQogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmll
cik7CisgICAgYXV0byogc3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVu
dFNwZWNpZmllcik7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CiAgICAgCkBAIC0zODk5LDcgKzM4OTksNyBAQCBib29sIENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OnByb3BlcnR5TWF0CiB7CiAgICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlGb250
U2l6ZSAmJiBpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBtX25vZGUpIHsKICAgICAg
ICAgbV9ub2RlLT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwotICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9ub2RlLT5jb21wdXRlZFN0
eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcikpIHsKKyAgICAgICAgaWYgKGF1dG8qIHN0eWxl
ID0gbV9ub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcikpIHsKICAg
ICAgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgICAgICBh
dXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
OwogICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSAmJiBwcmlt
aXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gc2l6ZUlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBwcml2YXRlOgogICAgIE5v
ZGUqIHN0eWxlZE5vZGUoKSBjb25zdDsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3ZnUHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0KSBjb25zdDsKLSAgICBSZWZQdHI8
U1ZHUGFpbnQ+IGFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFp
bnQ+LCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIFJlZlB0cjxTVkdQYWludD4gYWRqdXN0U1ZH
UGFpbnRGb3JDdXJyZW50Q29sb3IoUGFzc1JlZlB0cjxTVkdQYWludD4sIGNvbnN0IFJlbmRlclN0
eWxlKikgY29uc3Q7CiAKICAgICBzdGF0aWMgUmVmPENTU1ZhbHVlPiB2YWx1ZUZvclNoYWRvdyhj
b25zdCBTaGFkb3dEYXRhKiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUmLCBBZGp1
c3RQaXhlbFZhbHVlc0ZvckNvbXB1dGVkU3R5bGUgPSBBZGp1c3RQaXhlbFZhbHVlcyk7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3IoUmVuZGVy
U3R5bGUqLCBjb25zdCBDb2xvciYpIGNvbnN0OworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQ29s
b3ImKSBjb25zdDsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldENTU1Byb3BlcnR5VmFs
dWVzRm9yU2hvcnRoYW5kUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikg
Y29uc3Q7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZ2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3JT
aWRlc1Nob3J0aGFuZChjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3Bw
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgZmxvYXQgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6em9vbSgpIAogZG91YmxlIENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGE6OnZpZXdwb3J0V2lkdGhGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxl
ICYmICFtX2NvbXB1dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9y
dFVuaXRzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0
SGFzVmlld3BvcnRVbml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtNTcsNyArNTcsNyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YTo6dmlld3BvCiBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRIZWln
aHRGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRT
aXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7CisgICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwog
CiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjgsNyArNjgs
NyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvCiBkb3VibGUgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRNaW5GYWN0b3IoKSBjb25zdAogewogICAg
IGlmIChtX3N0eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5z
ZXRIYXNWaWV3cG9ydFVuaXRzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPiht
X3N0eWxlKS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtODAsNyArODAsNyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YTo6dmlld3BvCiBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6
dmlld3BvcnRNYXhGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2NvbXB1
dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7Cisg
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3BvcnRV
bml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlbmRlclZp
ZXc7CiAKIGNsYXNzIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgewogcHVibGljOgotICAgIENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSogcm9vdFN0eWxlLCBjb25zdCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBmbG9hdCB6b29t
LCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpCisgICAgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290
U3R5bGUsIGNvbnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGZsb2F0IHpvb20sIGJvb2wgY29t
cHV0aW5nRm9udFNpemUgPSBmYWxzZSkKICAgICAgICAgOiBtX3N0eWxlKHN0eWxlKQogICAgICAg
ICAsIG1fcm9vdFN0eWxlKHJvb3RTdHlsZSkKICAgICAgICAgLCBtX3JlbmRlclZpZXcocmVuZGVy
VmlldykKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoem9vbSA+IDAp
OwogICAgIH0KIAotICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25zdCBSZW5kZXJWaWV3KiByZW5k
ZXJWaWV3LCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpCisgICAgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGNvbnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGJvb2wgY29tcHV0aW5n
Rm9udFNpemUgPSBmYWxzZSkKICAgICAgICAgOiBtX3N0eWxlKHN0eWxlKQogICAgICAgICAsIG1f
cm9vdFN0eWxlKHJvb3RTdHlsZSkKICAgICAgICAgLCBtX3JlbmRlclZpZXcocmVuZGVyVmlldykK
QEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBSZW5kZXJTdHls
ZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQogICAgIGNvbnN0IFJlbmRlclN0
eWxlKiByb290U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RTdHlsZTsgfQogICAgIGZsb2F0
IHpvb20oKSBjb25zdDsKICAgICBib29sIGNvbXB1dGluZ0ZvbnRTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9jb21wdXRpbmdGb250U2l6ZTsgfQpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBtX3N0eWxlOwogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RTdHlsZTsKICAg
ICBjb25zdCBSZW5kZXJWaWV3KiBtX3JlbmRlclZpZXc7CiAgICAgZmxvYXQgbV96b29tOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw3ICs1Niw3IEBAIFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpzdHlsZSgpIGNvbnMKICAg
ICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGUoKTsKIH0KIAotUmVuZGVyU3R5bGUqIENTU1RvU3R5
bGVNYXA6OnJvb3RFbGVtZW50U3R5bGUoKSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIENTU1Rv
U3R5bGVNYXA6OnJvb3RFbGVtZW50U3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3Jlc29s
dmVyLT5yb290RWxlbWVudFN0eWxlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VG9TdHlsZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBz
aW1pbGFyIHRvIGhvdyBQYWludEluZm8vTGF5b3V0U3RhdGUgY2FjaGUgdmFsdWVzIG5lZWRlZCBm
b3IKICAgICAvLyB0aGUgY3VycmVudCBwYWludC9sYXlvdXQuCiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlKCkgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdDsK
KyAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0OwogICAgIGJv
b2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgcGFydCBvZiBzb21lIHNvcnQgb2YgU3R5bGVJbWFnZUNhY2hlIG9iamVjdCB3aGljaApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSwxMCArODUsMTAgQEAgTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVk
aWFRdWVyeUV2YWx1YXRvcgogewogfQogCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5
RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiBmcmFtZSwg
UmVuZGVyU3R5bGUqIHN0eWxlKQorTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1
YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSogZnJhbWUsIGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVkTWVkaWFUeXBl
KQogICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fc3R5bGUoV1RGTW92ZShzdHlsZSkpCisg
ICAgLCBtX3N0eWxlKHN0eWxlKQogICAgICwgbV9leHBSZXN1bHQoZmFsc2UpIC8vIGRvZXNuJ3Qg
bWF0dGVyIHdoZW4gd2UgaGF2ZSBtX2ZyYW1lIGFuZCBtX3N0eWxlCiB7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogCiAgICAgLyoqIENyZWF0ZXMgZXZhbHVhdG9yIHdo
aWNoIGV2YWx1YXRlcyBmdWxsIG1lZGlhIHF1ZXJpZXMKICAgICAgKi8KLSAgICBNZWRpYVF1ZXJ5
RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiwgUmVuZGVy
U3R5bGUqKTsKKyAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRN
ZWRpYVR5cGUsIEZyYW1lKiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKIAogICAgIH5NZWRpYVF1ZXJ5
RXZhbHVhdG9yKCk7CiAKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBT
dHJpbmcgbV9tZWRpYVR5cGU7CiAgICAgRnJhbWUqIG1fZnJhbWUgeyBudWxscHRyIH07IC8vIG5v
dCBvd25lZAotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlIHsgbnVsbHB0ciB9OworICAgIGNvbnN0
IFJlbmRlclN0eWxlKiBtX3N0eWxlIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9leHBSZXN1bHQ7
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gc3Ryb2tlRGFzaEFycmF5
VAogICAgIHJldHVybiBsaXN0OwogfQogCi1SZWZQdHI8U1ZHUGFpbnQ+IENvbXB1dGVkU3R5bGVF
eHRyYWN0b3I6OmFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFp
bnQ+IG5ld1BhaW50LCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitSZWZQdHI8U1ZHUGFpbnQ+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBh
c3NSZWZQdHI8U1ZHUGFpbnQ+IG5ld1BhaW50LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CiB7CiAgICAgUmVmUHRyPFNWR1BhaW50PiBwYWludCA9IG5ld1BhaW50OwogICAgIGlmIChw
YWludC0+cGFpbnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9S
IHx8IHBhaW50LT5wYWludFR5cGUoKSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfQ1VS
UkVOVENPTE9SKQpAQCAtMTExLDcgKzExMSw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRT
dHlsZUV4dHJhY3RvcjoKICAgICBpZiAodXBkYXRlTGF5b3V0KQogICAgICAgICBub2RlLT5kb2N1
bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbm9kZS0+
Y29tcHV0ZWRTdHlsZSgpOworICAgIGF1dG8qIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZSgp
OwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBtYXRjaChzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4mJiBleHByZXNzaW9uLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBib29sIG1hdGNoKHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YVF1ZXJ5RXhwPiYmIGV4cHJlc3Npb24sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRnJhbWUq
IGZyYW1lKQogewogICAgIGlmIChleHByZXNzaW9uLT5tZWRpYUZlYXR1cmUoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDcsMTIgKzQ3LDEyIEBAIHN0YXRpYyBib29sIG1h
dGNoKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVEKICAgICByZXR1cm4gbWVkaWFRdWVyeUV2YWx1YXRv
ci5ldmFsKG1lZGlhUXVlcnlTZXQuZ2V0KCkpOwogfQogCi1zdGF0aWMgZmxvYXQgZGVmYXVsdExl
bmd0aChSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCitzdGF0aWMgZmxvYXQg
ZGVmYXVsdExlbmd0aChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcp
CiB7CiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRl
Tm9uQ2FsY0xlbmd0aERvdWJsZShDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0
eWxlLCB2aWV3KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVywgMTAwLjApKTsKIH0KIAotc3Rh
dGljIGZsb2F0IGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFJlbmRlclZpZXcqIHZpZXcpCitzdGF0aWMgZmxvYXQgY29tcHV0ZUxlbmd0aChDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyVmlldyogdmlldykKIHsK
ICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0
eWxlLCB2aWV3KTsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewpAQCAt
NzAsNyArNzAsNyBAQCBmbG9hdCBwYXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcgc2l6CiB7
CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJTdHlsZSYgc3R5
bGUgPSB2aWV3LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gdmlldy0+c3R5bGUoKTsKICAg
ICBmb3IgKGF1dG8mIHNvdXJjZVNpemUgOiBDU1NQYXJzZXIoQ1NTU3RyaWN0TW9kZSkucGFyc2VT
aXplc0F0dHJpYnV0ZShzaXplc0F0dHJpYnV0ZSkpIHsKICAgICAgICAgaWYgKG1hdGNoKFdURk1v
dmUoc291cmNlU2l6ZS5leHByZXNzaW9uKSwgc3R5bGUsIGZyYW1lKSkKICAgICAgICAgICAgIHJl
dHVybiBjb21wdXRlTGVuZ3RoKHNvdXJjZVNpemUubGVuZ3RoLmdldCgpLCBzdHlsZSwgdmlldyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3NSw3ICs1NzUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0
eWxlKQorICAgIHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1h
Z2UgPyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2UoKTsKICAgICB9
CkBAIC02NjQsNyArNjY0LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaQogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENsaXAo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7CisgICAgYXV0byogcGFyZW50U3R5
bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7CiAgICAgaWYgKCFwYXJlbnRTdHlsZS0+
aGFzQ2xpcCgpKQogICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsQ2xpcChzdHlsZVJlc29sdmVy
KTsKICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENsaXAocGFyZW50U3R5bGUtPmNsaXBU
b3AoKSwgcGFyZW50U3R5bGUtPmNsaXBSaWdodCgpLCBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgp
LCBwYXJlbnRTdHlsZS0+Y2xpcExlZnQoKSk7CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCB0ZW1wbGF0
ZSA8U3R5bGVCdWlsZGVyQ3VzdG9tOjpDb3VudGVyQmVoCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKIHsKICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6
IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkg
eworICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkgewog
ICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoa2V5VmFsdWUu
a2V5LCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChj
b3VudGVyQmVoYXZpb3IgPT0gUmVzZXQpCiAgICAgICAgICAgICBkaXJlY3RpdmVzLmluaGVyaXRS
ZXNldChrZXlWYWx1ZS52YWx1ZSk7CkBAIC0xMzM3LDcgKzEzMzcsNyBAQCBpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiAgICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAg
ICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKSktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51
bGxBdG9tLCBjb250ZW50VmFsdWUuZ2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsK
ICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdHlsZVJlc29sdmVyLmVs
ZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1w
bCgpLCBkaWRTZXQpOwpAQCAtMTcwNiw3ICsxNzA2LDcgQEAgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVBbHQoUwogICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
dHlsZVR5cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0VW5pcXVlKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIu
cGFyZW50U3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRl
clN0eWxlKj4oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+c2V0VW5pcXVlKCk7CiAKICAg
ICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJp
bmdWYWx1ZSgpLCBudWxsQXRvbSk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBzdHlsZVJlc29sdmVyLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNyAr
MzM2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aQogICAgIG1f
bWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwID0gMDsKIH0KIAot
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGRvY3VtZW50RWxlbWVudFN0eWxlLCBj
b25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVjdG9yRmlsdGVy
KiBzZWxlY3RvckZpbHRlcikKK1N0eWxlUmVzb2x2ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRl
clN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHlsZSwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25G
b3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCiAgICAgOiBt
X2VsZW1lbnQoJmVsZW1lbnQpCiAgICAgLCBtX3BhcmVudFN0eWxlKHBhcmVudFN0eWxlKQogICAg
ICwgbV9yZWdpb25Gb3JTdHlsaW5nKHJlZ2lvbkZvclN0eWxpbmcpCkBAIC0zODAsNyArMzgwLDcg
QEAgc3RhdGljIGlubGluZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShjbwogICAgIHJldHVybiBw
YXJlbnROb2RlICYmIHBhcmVudE5vZGUtPmlzU2hhZG93Um9vdCgpOwogfQogCi1FbGVtZW50U3R5
bGUgU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdC
ZWhhdmlvciwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxl
Y3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCitFbGVtZW50U3R5bGUgU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwgY29u
c3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciog
c2VsZWN0b3JGaWx0ZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5Mb2FkUGVuZGluZ0lt
YWdlcyk7CiAKQEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1l
U3R5bGVzRm9yQW5pCiAgICAgfQogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgUmVuZGVyU3R5
bGUmIHBhcmVudFN0eWxlKQorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
UHNldWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIGNvbnN0IFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSkKIHsKICAgICBtX3N0YXRlID0gU3RhdGUoZWxlbWVudCwgJnBhcmVudFN0
eWxlKTsKIApAQCAtMTYzMSw3ICsxNjMxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1BybwogICAgIH0KIAogICAgIGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBhcmVu
dFN0eWxlKCktPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3Bl
cnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgc3RhdGUucGFyZW50U3R5bGUo
KS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKyAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJTdHlsZSo+KHN0YXRlLnBhcmVudFN0eWxlKCkpLT5zZXRIYXNFeHBsaWNpdGx5
SW5oZXJpdGVkUHJvcGVydGllcygpOwogICAgIAogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1
c3RvbSkgewogICAgICAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBjdXN0b21Qcm9wZXJ0eSA9
ICZkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqdmFsdWVUb0FwcGx5KTsKQEAgLTE3
MzQsNyArMTczNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanUK
IH0KICNlbmRpZgogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5k
ZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmICghcGFyZW50U3R5bGUpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3NDgsNyArMTc0OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Ja
b29tQ2hhbmdlKFIKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlw
dGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hh
bmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQordm9pZCBT
dHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgY29uc3QgYXV0byYg
Y2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSwxOCArMTQxLDE4IEBAIHB1
YmxpYzoKICAgICBTdHlsZVJlc29sdmVyKERvY3VtZW50Jik7CiAgICAgflN0eWxlUmVzb2x2ZXIo
KTsKIAotICAgIEVsZW1lbnRTdHlsZSBzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1
bGVzLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25z
dCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKKyAgICBFbGVtZW50U3R5bGUgc3R5bGVGb3JF
bGVtZW50KGNvbnN0IEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJ1
bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgY29uc3QgUmVuZGVyUmVnaW9uKiBy
ZWdpb25Gb3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0
cik7CiAKICAgICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKGNvbnN0IEVsZW1lbnQm
LCBjb25zdCBSZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYpOwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIGNv
bnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3Qg
RWxlbWVudCYsIGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIGNvbnN0IFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9y
UGFnZShpbnQgcGFnZUluZGV4KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUoKTsgfQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGUoKTsgfQotICAgIFJlbmRlclN0
eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCk7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSog
cm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpOyB9CiAgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCgpIHsgcmV0dXJuIG1fc3RhdGUuZWxl
bWVudCgpOyB9CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgeyByZXR1cm4gbV9kb2N1bWVudDsg
fQogICAgIFNldHRpbmdzKiBkb2N1bWVudFNldHRpbmdzKCkgeyByZXR1cm4gbV9kb2N1bWVudC5z
ZXR0aW5ncygpOyB9CkBAIC0zMTcsOCArMzE3LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRl
dGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAt
ZHdoCi0gICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwotICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJl
bmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9y
R2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0la
SU5HKQogICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChSZW5kZXJTdHlsZSopOwogI2Vu
ZGlmCkBAIC0zNjEsNyArMzYxLDcgQEAgcHVibGljOgogICAgIGNsYXNzIFN0YXRlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFN0YXRlKCkgeyB9Ci0gICAgICAgIFN0YXRlKGNvbnN0IEVsZW1lbnQm
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRT
dHlsZSA9IG51bGxwdHIsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IG51
bGxwdHIsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiA9IG51bGxwdHIpOworICAgICAgICBTdGF0ZShj
b25zdCBFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSogZG9jdW1lbnRFbGVtZW50U3R5bGUgPSBudWxscHRyLCBjb25zdCBSZW5kZXJSZWdp
b24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25zdCBTZWxlY3RvckZpbHRlciogPSBu
dWxscHRyKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBjbGVhcigpOwpAQCAtMzc0LDgg
KzM3NCw4IEBAIHB1YmxpYzoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiB0
YWtlU3R5bGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fc3R5bGUpOyB9CiAKICAgICAgICAgdm9pZCBz
ZXRQYXJlbnRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+KTsKLSAgICAgICAgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQot
ICAgICAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdEVsZW1lbnRTdHlsZTsgfQorICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0
eWxlOyB9CiAKICAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9yZWdpb25Gb3JTdHlsaW5nOyB9CiAgICAgICAgIEVJbnNpZGVMaW5r
IGVsZW1lbnRMaW5rU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRMaW5rU3RhdGU7IH0K
QEAgLTQyNyw5ICs0MjcsOSBAQCBwdWJsaWM6CiAKICAgICAgICAgY29uc3QgRWxlbWVudCogbV9l
bGVtZW50IHsgbnVsbHB0ciB9OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IG1fc3R5bGU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlIHsgbnVsbHB0ciB9
OworICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsK
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX293bmVkUGFyZW50U3R5bGU7
Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07Cisg
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07
CiAKICAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmcgeyBudWxs
cHRyIH07CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDA4LDcgKzIwMDgsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nCiAgICAgbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSBvbGRJZ25vcmU7CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxlbWVudEln
bm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxl
Rm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQmIGVsZW1lbnQsIGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBBU1NFUlQoJmVsZW1lbnQuZG9j
dW1lbnQoKSA9PSB0aGlzKTsKIApAQCAtMjUxNSw3ICsyNTE1LDcgQEAgdm9pZCBEb2N1bWVudDo6
c2V0VmlzdWFsbHlPcmRlcmVkKCkKIHsKICAgICBtX3Zpc3VhbGx5T3JkZXJlZCA9IHRydWU7CiAg
ICAgaWYgKHJlbmRlclZpZXcoKSkKLSAgICAgICAgcmVuZGVyVmlldygpLT5zdHlsZSgpLnNldFJU
TE9yZGVyaW5nKFZpc3VhbE9yZGVyKTsKKyAgICAgICAgcmVuZGVyVmlldygpLT5tdXRhYmxlU3R5
bGUoKS5zZXRSVExPcmRlcmluZyhWaXN1YWxPcmRlcik7CiB9CiAKIFJlZjxEb2N1bWVudFBhcnNl
cj4gRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3MSw3ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyhSdW5Qb3N0TGF5
b3V0VGFza3MgPSBSdW5Qb3N0TGF5b3V0VGFza3M6OkFzeW5jaHJvbm91c2x5KTsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5n
U3R5bGVzaGVldHMoRWxlbWVudCYsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRpbmdT
dHlsZXNoZWV0cyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBwYWdlIGJveCAobWFyZ2luIGJveGVzIGFuZCBwYWdlIGJv
cmRlcnMpIGlzIHZpc2libGUuCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BhZ2VCb3hWaXNp
YmxlKGludCBwYWdlSW5kZXgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcwLDcgKzEzNzAsNyBAQCBTdHlsZVJlc29sdmVyJiBFbGVtZW50OjpzdHlsZVJlc29s
dmVyKCkKICAgICByZXR1cm4gZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CiB9CiAK
LUVsZW1lbnRTdHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQorRWxlbWVudFN0eWxlIEVsZW1lbnQ6OnJlc29sdmVTdHlsZShjb25zdCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCiB7CiAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVs
ZW1lbnQoKnRoaXMsIHBhcmVudFN0eWxlKTsKIH0KQEAgLTE3NTgsNyArMTc1OCw3IEBAIGJvb2wg
RWxlbWVudDo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSAKIHN0YXRpYyB2b2lkIGNoZWNrRm9y
RW1wdHlTdHlsZUNoYW5nZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LnN0
eWxlQWZmZWN0ZWRCeUVtcHR5KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxl
bWVudC5yZW5kZXJTdHlsZSgpOworICAgICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVy
U3R5bGUoKTsKICAgICAgICAgaWYgKCFzdHlsZSB8fCAoIXN0eWxlLT5lbXB0eVN0YXRlKCkgfHwg
ZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpKQogICAgICAgICAgICAgZWxlbWVudC5zZXROZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgfQpAQCAtMTc4NCwxNCArMTc4NCwxNCBAQCBzdGF0aWMgdm9pZCBj
aGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaW5z
ZXJ0L2FwcGVuZCBjYXNlLgogICAgICAgICBpZiAobmV3Rmlyc3RFbGVtZW50ICE9IGVsZW1lbnRB
ZnRlckNoYW5nZSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudEFm
dGVyQ2hhbmdlLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0byogc3R5bGUgPSBlbGVt
ZW50QWZ0ZXJDaGFuZ2UtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlIHx8
IHN0eWxlLT5maXJzdENoaWxkU3RhdGUoKSkKICAgICAgICAgICAgICAgICBlbGVtZW50QWZ0ZXJD
aGFuZ2UtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdl
IGFsc28gaGF2ZSB0byBoYW5kbGUgbm9kZSByZW1vdmFsLgogICAgICAgICBpZiAoY2hlY2tUeXBl
ID09IFNpYmxpbmdFbGVtZW50UmVtb3ZlZCAmJiBuZXdGaXJzdEVsZW1lbnQgPT0gZWxlbWVudEFm
dGVyQ2hhbmdlICYmIG5ld0ZpcnN0RWxlbWVudCkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gbmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0
byogc3R5bGUgPSBuZXdGaXJzdEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBp
ZiAoIXN0eWxlIHx8ICFzdHlsZS0+Zmlyc3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAg
bmV3Rmlyc3RFbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KQEAgLTE4
MDQsNyArMTgwNCw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygK
ICAgICAgICAgRWxlbWVudCogbmV3TGFzdEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpsYXN0
Q2hpbGQocGFyZW50KTsKIAogICAgICAgICBpZiAobmV3TGFzdEVsZW1lbnQgIT0gZWxlbWVudEJl
Zm9yZUNoYW5nZSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudEJl
Zm9yZUNoYW5nZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxl
bWVudEJlZm9yZUNoYW5nZS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICghc3R5bGUg
fHwgc3R5bGUtPmxhc3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudEJlZm9y
ZUNoYW5nZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0xODEyLDcgKzE4
MTIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAg
IC8vIFdlIGFsc28gaGF2ZSB0byBoYW5kbGUgbm9kZSByZW1vdmFsLiAgVGhlIHBhcnNlciBjYWxs
YmFjayBjYXNlIGlzIHNpbWlsYXIgdG8gbm9kZSByZW1vdmFsIGFzIHdlbGwgaW4gdGhhdCB3ZSBu
ZWVkIHRvIGNoYW5nZSB0aGUgbGFzdCBjaGlsZAogICAgICAgICAvLyB0byBtYXRjaCBub3cuCiAg
ICAgICAgIGlmICgoY2hlY2tUeXBlID09IFNpYmxpbmdFbGVtZW50UmVtb3ZlZCB8fCBjaGVja1R5
cGUgPT0gRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4pICYmIG5ld0xhc3RFbGVtZW50ID09IGVsZW1l
bnRCZWZvcmVDaGFuZ2UgJiYgbmV3TGFzdEVsZW1lbnQpIHsKLSAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IG5ld0xhc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAg
YXV0byogc3R5bGUgPSBuZXdMYXN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAg
IGlmICghc3R5bGUgfHwgIXN0eWxlLT5sYXN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAg
IG5ld0xhc3RFbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KQEAgLTI0
NjEsNyArMjQ2MSw3IEBAIHN0YXRpYyBQc2V1ZG9FbGVtZW50KiBiZWZvcmVPckFmdGVyUHNldWQK
ICAgICB9CiB9CiAKLVJlbmRlclN0eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3R5bGUo
KQorY29uc3QgUmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmV4aXN0aW5nQ29tcHV0ZWRTdHlsZSgpCiB7
CiAgICAgaWYgKGF1dG8qIHJlbmRlclRyZWVTdHlsZSA9IHJlbmRlclN0eWxlKCkpCiAgICAgICAg
IHJldHVybiByZW5kZXJUcmVlU3R5bGU7CkBAIC0yNDcyLDEzICsyNDcyLDEzIEBAIFJlbmRlclN0
eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotUmVuZGVyU3R5bGUmIEVsZW1lbnQ6OnJlc29sdmVDb21wdXRlZFN0eWxlKCkKK2NvbnN0IFJl
bmRlclN0eWxlJiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSgpCiB7CiAgICAgQVNTRVJU
KGluRG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKCFleGlzdGluZ0NvbXB1dGVkU3R5bGUoKSk7CiAK
ICAgICBEZXF1ZTxFbGVtZW50KiwgMzI+IGVsZW1lbnRzUmVxdWlyaW5nQ29tcHV0ZWRTdHlsZSh7
IHRoaXMgfSk7Ci0gICAgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUgPSBudWxscHRyOworICAg
IGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gbnVsbHB0cjsKIAogICAgIC8vIENv
bGxlY3QgYW5jZXN0b3JzIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgaGFzIHN0eWxlLgogICAgIGF1
dG8gY29tcG9zZWRBbmNlc3RvcnMgPSBjb21wb3NlZFRyZWVBbmNlc3RvcnMoKnRoaXMpOwpAQCAt
MjUwMSw3ICsyNTAxLDcgQEAgUmVuZGVyU3R5bGUmIEVsZW1lbnQ6OnJlc29sdmVDb21wdXRlZFN0
eQogICAgIHJldHVybiAqY29tcHV0ZWRTdHlsZTsKIH0KIAotUmVuZGVyU3R5bGUqIEVsZW1lbnQ6
OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKK2NvbnN0IFJl
bmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRT
cGVjaWZpZXIpCiB7CiAgICAgaWYgKFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBiZWZv
cmVPckFmdGVyUHNldWRvRWxlbWVudCgqdGhpcywgcHNldWRvRWxlbWVudFNwZWNpZmllcikpCiAg
ICAgICAgIHJldHVybiBwc2V1ZG9FbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CkBAIC0zMjk1LDcg
KzMyOTUsNyBAQCB2b2lkIEVsZW1lbnQ6OmRpZERldGFjaFJlbmRlcmVycygpCiAgICAgQVNTRVJU
KGhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVu
dFN0eWxlPiBFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJT
dHlsZSopCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IEVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikKIHsKICAgICBBU1NFUlQo
aGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpOwogICAgIHJldHVybiBOdWxsb3B0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VGFiSW5kZXgoaW50KTsKICAgICB2aXJ0dWFsIEVsZW1lbnQqIGZvY3Vz
RGVsZWdhdGUoKTsKIAotICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkID0g
Tk9QU0VVRE8pIG92ZXJyaWRlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxl
KFBzZXVkb0lkID0gTk9QU0VVRE8pIG92ZXJyaWRlOwogCiAgICAgYm9vbCBuZWVkc1N0eWxlSW52
YWxpZGF0aW9uKCkgY29uc3Q7CiAKQEAgLTQ4MCw3ICs0ODAsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGV0
YWNoUmVuZGVyZXJzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZERldGFjaFJlbmRlcmVycygpOwot
ICAgIHZpcnR1YWwgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVu
ZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RT
dHlsZSk7CiAKICAgICBMYXlvdXRSZWN0IGFic29sdXRlRXZlbnRIYW5kbGVyQm91bmRzKGJvb2wm
IGluY2x1ZGVzRml4ZWRQb3NpdGlvbkVsZW1lbnRzKSBvdmVycmlkZTsKIApAQCAtNDk5LDcgKzQ5
OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cigpOwotICAgIEVsZW1lbnRTdHlsZSByZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKTsKKyAgICBFbGVtZW50U3R5bGUgcmVzb2x2ZVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSk7CiAKICAgICBib29sIGhhc0Rpc3BsYXlDb250ZW50cygpIGNvbnN0OwogICAg
IHZvaWQgc2V0SGFzRGlzcGxheUNvbnRlbnRzKGJvb2wpOwpAQCAtNTkyLDggKzU5Miw4IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHJlbW92ZVNoYWRvd1Jvb3QoKTsKIAotICAgIFJlbmRlclN0eWxl
KiBleGlzdGluZ0NvbXB1dGVkU3R5bGUoKTsKLSAgICBSZW5kZXJTdHlsZSYgcmVzb2x2ZUNvbXB1
dGVkU3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogZXhpc3RpbmdDb21wdXRlZFN0eWxl
KCk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHJlc29sdmVDb21wdXRlZFN0eWxlKCk7CiAKICAg
ICBib29sIHJhcmVEYXRhU3R5bGVBZmZlY3RlZEJ5RW1wdHkoKSBjb25zdDsKICAgICBib29sIHJh
cmVEYXRhQ2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjU5LDcgKzY1OSw3IEBAIHN0YXRpYyBOb2RlOjpFZGl0YWJpbGl0eSBj
b21wdXRlRWRpdGFiaWwKICAgICAvLyB3b3VsZCBmaXJlIGluIHRoZSBtaWRkbGUgb2YgRG9jdW1l
bnQ6OnNldEZvY3VzZWRFbGVtZW50KCkuCiAKICAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSAm
c3RhcnROb2RlOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IG5vZGUtPmlzRG9jdW1lbnROb2RlKCkgPyBub2RlLT5yZW5kZXJT
dHlsZSgpIDogY29uc3RfY2FzdDxOb2RlKj4obm9kZSktPmNvbXB1dGVkU3R5bGUoKTsKKyAgICAg
ICAgYXV0byogc3R5bGUgPSBub2RlLT5pc0RvY3VtZW50Tm9kZSgpID8gbm9kZS0+cmVuZGVyU3R5
bGUoKSA6IGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLT5jb21wdXRlZFN0eWxlKCk7CiAgICAgICAg
IGlmICghc3R5bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0eWxlLT5k
aXNwbGF5KCkgPT0gTk9ORSkKQEAgLTEwMTAsNyArMTAxMCw3IEBAIE5vZGUqIE5vZGU6OnBzZXVk
b0F3YXJlTGFzdENoaWxkKCkgY29uc3QKICAgICByZXR1cm4gbGFzdENoaWxkKCk7CiB9CiAKLVJl
bmRlclN0eWxlKiBOb2RlOjpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVj
aWZpZXIpCitjb25zdCBSZW5kZXJTdHlsZSogTm9kZTo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBw
c2V1ZG9FbGVtZW50U3BlY2lmaWVyKQogewogICAgIGF1dG8qIGNvbXBvc2VkUGFyZW50ID0gY29t
cG9zZWRUcmVlQW5jZXN0b3JzKCp0aGlzKS5maXJzdCgpOwogICAgIGlmICghY29tcG9zZWRQYXJl
bnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw5ICs0NDMsOSBAQCBwdWJsaWM6CiAg
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2JqZWN0KCkgY29uc3Q7CiAg
ICAgCiAgICAgLy8gV3JhcHBlciBmb3Igbm9kZXMgdGhhdCBkb24ndCBoYXZlIGEgcmVuZGVyZXIs
IGJ1dCBzdGlsbCBjYWNoZSB0aGUgc3R5bGUgKGxpa2UgSFRNTE9wdGlvbkVsZW1lbnQpLgotICAg
IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxl
KiByZW5kZXJTdHlsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBSZW5kZXJTdHlsZSogY29tcHV0
ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyID0gTk9QU0VVRE8pOworICAg
IHZpcnR1YWwgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRv
RWxlbWVudFNwZWNpZmllciA9IE5PUFNFVURPKTsKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAgICAgLy8gTm90aWZpY2F0aW9uIG9mIGRvY3VtZW50IHN0cnVjdHVyZSBjaGFuZ2VzIChz
ZWUgQ29udGFpbmVyTm9kZS5oIGZvciBtb3JlIG5vdGlmaWNhdGlvbiBtZXRob2RzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIFJlbmRlclN0eWxlKiBO
b2RlOjpyZW5kZXJTdHlsZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIE5vZGU6
OnJlbmRlclN0eWxlKCkgY29uc3QKIHsKICAgICBhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1
ZG9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIFBzZXVkb0Vs
ZW1lbnQ6OmNsZWFySG9zdEVsZW1lbnQoKQogICAgIG1faG9zdEVsZW1lbnQgPSBudWxscHRyOwog
fQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21T
dHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVs
ZW1lbnRTdHlsZT4gUHNldWRvRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIGF1dG8qIHN0
eWxlID0gbV9ob3N0RWxlbWVudC0+cmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUobV9w
c2V1ZG9JZCwgJnBhcmVudFN0eWxlKTsKICAgICBpZiAoIXN0eWxlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vUHNldWRvRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vUHNldWRvRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICBFbGVtZW50KiBob3N0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEVsZW1l
bnQ7IH0KICAgICB2b2lkIGNsZWFySG9zdEVsZW1lbnQoKTsKIAotICAgIE9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVu
dFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lk
IGRpZEF0dGFjaFJlbmRlcmVycygpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjYWxjU3R5bGUo
U3R5bGU6OkNoYW5nZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0
IFJlbmRlclN0eWxlJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3OSwxOCArMTc5LDE4IEBAIHN0YXRpYyBib29sIGlzTmV3TGluZUF0
UG9zaXRpb24oY29uc3QgUG8KICAgICByZXR1cm4gdGV4dEF0UG9zaXRpb25bMF0gPT0gJ1xuJzsK
IH0KIAotUmVuZGVyU3R5bGUqIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmVuZGVyU3R5bGVP
ZkVuY2xvc2luZ1RleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK2NvbnN0IFJlbmRl
clN0eWxlKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxlT2ZFbmNsb3NpbmdU
ZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgaWYgKHBvc2l0aW9uLmFu
Y2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yCiAgICAgICAg
IHx8ICFwb3NpdGlvbi5jb250YWluZXJOb2RlKCkKICAgICAgICAgfHwgIXBvc2l0aW9uLmNvbnRh
aW5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCktPnJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuICZyZW5kZXJlci0+c3R5bGUoKTsKIH0KQEAg
LTIwMSw3ICsyMDEsNyBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQ
CiAgICAgZW5kID0gZW5kT2ZDdXJyZW50UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCk7CiAKICAg
ICBib29sIGlzU3RhcnRBbmRFbmRPblNhbWVOb2RlID0gZmFsc2U7Ci0gICAgaWYgKFJlbmRlclN0
eWxlKiBzdGFydFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHN0YXJ0KSkg
eworICAgIGlmIChhdXRvKiBzdGFydFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHRO
b2RlKHN0YXJ0KSkgewogICAgICAgICBpc1N0YXJ0QW5kRW5kT25TYW1lTm9kZSA9IHJlbmRlclN0
eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShlbmQpICYmIHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBl
bmQuY29udGFpbmVyTm9kZSgpOwogICAgICAgICBib29sIGlzU3RhcnRBbmRFbmRPZkxhc3RQYXJh
Z3JhcGhPblNhbWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKG1fZW5kT2ZM
YXN0UGFyYWdyYXBoKSAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gbV9lbmRPZkxhc3RQYXJh
Z3JhcGguY29udGFpbmVyTm9kZSgpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBBcHBseUJs
b2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KFJlbmRlclN0eWxlKiBlbmRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShl
bmQpKSB7CisgICAgaWYgKGF1dG8qIGVuZFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1Rl
eHROb2RlKGVuZCkpIHsKICAgICAgICAgYm9vbCBpc0VuZEFuZEVuZE9mTGFzdFBhcmFncmFwaE9u
U2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUobV9lbmRPZkxhc3RQYXJh
Z3JhcGgpICYmIGVuZC5kZXByZWNhdGVkTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmRl
cHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIC8vIEluY2x1ZGUgXG4gYXQgdGhlIGVuZCBvZiBsaW5l
IGlmIHdlJ3JlIGF0IGFuIGVtcHR5IHBhcmFncmFwaAogICAgICAgICBpZiAoZW5kU3R5bGUtPnBy
ZXNlcnZlTmV3bGluZSgpICYmIHN0YXJ0ID09IGVuZCAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJO
b2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgewpAQCAt
MjU4LDcgKzI1OCw3IEBAIFZpc2libGVQb3NpdGlvbiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQK
IHsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZOZXh0UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3Jh
cGgoZW5kT2ZDdXJyZW50UGFyYWdyYXBoLm5leHQoKSk7CiAgICAgUG9zaXRpb24gcG9zaXRpb24g
PSBlbmRPZk5leHRQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUocG9zaXRpb24pOworICAgIGF1
dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHBvc2l0aW9uKTsKICAg
ICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gZW5kT2ZOZXh0UGFyYWdyYXBoOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5k
LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9j
a0VsZW1lbnRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJvdGVj
dGVkOgogcHJpdmF0ZToKICAgICB2b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgZm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZTZWxlY3Rpb24sIFJlZlB0cjxFbGVtZW50PiYpID0g
MDsKLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGNvbnN0
IFBvc2l0aW9uJik7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlT2ZFbmNsb3Np
bmdUZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYpOwogICAgIHZvaWQgcmFuZ2VGb3JQYXJhZ3JhcGhT
cGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBQb3NpdGlv
biYsIFBvc2l0aW9uJik7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mTmV4dFBhcmFncmFwaFNw
bGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKFZpc2libGVQb3NpdGlvbiYsIFBvc2l0aW9uJiwgUG9z
aXRpb24mKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6
OmluaXQoTm9kZSogbm9kZSwgUHJvcAogICAgIH0KIAogICAgIGlmIChub2RlICYmIG5vZGUtPmNv
bXB1dGVkU3R5bGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBub2Rl
LT5jb21wdXRlZFN0eWxlKCk7CisgICAgICAgIGF1dG8qIHJlbmRlclN0eWxlID0gbm9kZS0+Y29t
cHV0ZWRTdHlsZSgpOwogICAgICAgICByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVl
ZGVkKHJlbmRlclN0eWxlKTsKICAgICAgICAgaWYgKHJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5rZXl3b3JkU2l6ZSgpKQogICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uLmdldEZvbnRT
aXplQ1NTVmFsdWVQcmVmZXJyaW5nS2V5d29yZCgpLT5jc3NUZXh0KCkpOwpAQCAtNDcxLDcgKzQ3
MSw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjppbml0KE5vZGUqIG5vZGUsIFByb3AKICAgICBleHRy
YWN0Rm9udFNpemVEZWx0YSgpOwogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZp
bGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpCit2b2lk
IEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChjb25z
dCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpCiB7CiAgICAgLy8gSWYgYSBub2RlJ3MgdGV4dCBm
aWxsIGNvbG9yIGlzIGludmFsaWQsIHRoZW4gaXRzIGNoaWxkcmVuIHVzZSAKICAgICAvLyB0aGVp
ciBmb250LWNvbG9yIGFzIHRoZWlyIHRleHQgZmlsbCBjb2xvciAodGhleSBkb24ndApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzgsNyArMTc4LDcgQEAgcHJpdmF0ZToKICAgICBFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgRWRpdGluZ1N0eWxlKENTU1Byb3BlcnR5SUQsIENT
U1ZhbHVlSUQpOwogICAgIHZvaWQgaW5pdChOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7Ci0g
ICAgdm9pZCByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKFJlbmRlclN0eWxl
Kik7CisgICAgdm9pZCByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKGNvbnN0
IFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKICAgICB2b2lkIGV4dHJh
Y3RGb250U2l6ZURlbHRhKCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVHJpU3RhdGUgdHJp
U3RhdGVPZlN0eWxlKFQmIHN0eWxlVG9Db21wYXJlLCBTaG91bGRJZ25vcmVUZXh0T25seVByb3Bl
cnRpZXMpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MzAsOCArNDMwLDggQEAgcHVibGljOgogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB3
ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYsIFJhbmdlJiBjb250ZXh0LCBib29s
IGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CiAKICNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2Vs
ZWN0aW9uU3RhcnQoRnJhbWUqICwgTm9kZSAqJm5vZGVUb1JlbW92ZSk7Ci0gICAgdm9pZCBnZXRU
ZXh0RGVjb3JhdGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5bGUoUmVuZGVyU3R5bGUm
LCBOU011dGFibGVEaWN0aW9uYXJ5KikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiAsIE5vZGUg
KiZub2RlVG9SZW1vdmUpOworICAgIHZvaWQgZ2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVz
cGVjdGluZ1R5cGluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgTlNNdXRhYmxlRGljdGlvbmFy
eSopIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnQqIGZvbnRGb3JTZWxlY3Rp
b24oYm9vbCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIE5TRGljdGlvbmFyeSAqZm9udEF0
dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBTaW1wbGlmeU1hcmt1cENvbW1h
bmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBO
b2RlKiBzdGFydGluZ05vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIFJlbmRlclN0
eWxlKiBzdGFydGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgpOworICAgICAg
ICBhdXRvKiBzdGFydGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgpOwogICAg
ICAgICBpZiAoIXN0YXJ0aW5nU3R5bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Tm9kZSogY3VycmVudE5vZGUgPSBzdGFydGluZ05vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0JKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IFRoaXMgZmln
dXJlcyBvdXQgdGhlIGN1cnJlbnQgc3R5bGUgYnkgaW5zZXJ0aW5nIGEgPHNwYW4+IQotUmVuZGVy
U3R5bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogZnJhbWUsIE5vZGUg
KiZub2RlVG9SZW1vdmUpCitjb25zdCBSZW5kZXJTdHlsZSogRWRpdG9yOjpzdHlsZUZvclNlbGVj
dGlvblN0YXJ0KEZyYW1lKiBmcmFtZSwgTm9kZSAqJm5vZGVUb1JlbW92ZSkKIHsKICAgICBub2Rl
VG9SZW1vdmUgPSBudWxscHRyOwogICAgIApAQCAtNzYsNyArNzYsNyBAQCBSZW5kZXJTdHlsZSog
RWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0CiAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+cmVu
ZGVyZXIoKSA/ICZzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwog
fQogCi12b2lkIEVkaXRvcjo6Z2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5
cGluZ1N0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVzdWx0
KSBjb25zdAordm9pZCBFZGl0b3I6OmdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3Rp
bmdUeXBpbmdTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIE5TTXV0YWJsZURpY3Rpb25h
cnkqIHJlc3VsdCkgY29uc3QKIHsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHls
ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKICAgICBpZiAodHlwaW5nU3R5
bGUgJiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaW9zL0VkaXRvcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0JKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBA
IGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib28KIAogICAgIGlmICghbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3Zl
OwotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZt
X2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRv
KiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7
IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgRm9udCogcmVzdWx0ID0gbnVs
bHB0cjsKICAgICAgICAgaWYgKHN0eWxlKSB7CkBAIC0yMjAsNyArMjIwLDcgQEAgY29uc3QgRm9u
dCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvbwogTlNEaWN0aW9uYXJ5KiBFZGl0b3I6OmZv
bnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewogICAgIE5vZGUqIG5vZGVU
b1JlbW92ZTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOworICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxl
Y3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKICAgICBpZiAoIXN0eWxlKQogICAg
ICAgICByZXR1cm4gbmlsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0
b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9y
TWFjLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBjb25zdCBGb250
KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vCiAKICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9k
ZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5bGUgPSBz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5v
ZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAg
ICAgIGlmIChzdHlsZSkgewpAQCAtMTQ2LDcgKzE0Niw3IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6
Zm9udEZvclNlbGVjdGlvbihib28KIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRl
c0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwg
bm9kZVRvUmVtb3ZlKTsKKyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQo
Jm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIFN0cmluZyBIVE1MVGl0bGVFbGVt
ZW50Ojp0ZXh0KCkgY29uc3QKIFN0cmluZ1dpdGhEaXJlY3Rpb24gSFRNTFRpdGxlRWxlbWVudDo6
Y29tcHV0ZWRUZXh0V2l0aERpcmVjdGlvbigpCiB7CiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBMVFI7Ci0gICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29t
cHV0ZWRTdHlsZSgpKQorICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29tcHV0
ZWRTdHlsZSgpKQogICAgICAgICBkaXJlY3Rpb24gPSBjb21wdXRlZFN0eWxlLT5kaXJlY3Rpb24o
KTsKICAgICBlbHNlIHsKICAgICAgICAgYXV0byBzdHlsZSA9IHN0eWxlUmVzb2x2ZXIoKS5zdHls
ZUZvckVsZW1lbnQoKnRoaXMsIHBhcmVudEVsZW1lbnQoKSA/IHBhcmVudEVsZW1lbnQoKS0+cmVu
ZGVyU3R5bGUoKSA6IG51bGxwdHIpLnJlbmRlclN0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eQogICAgIHVwZGF0ZShzZWxlY3Rv
cik7CiB9CiAKLWlubGluZSB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5
Ojppbml0aWFsaXplKEZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgbmV3
U3R5bGUpCitpbmxpbmUgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eTo6
aW5pdGlhbGl6ZShGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgY29uc3QgUmVuZGVyU3R5bGUm
IG5ld1N0eWxlKQogewogICAgIC8vIEJld2FyZSEgbV9mb250LmZvbnRTZWxlY3RvcigpIG1pZ2h0
IG5vdCBwb2ludCB0byBkb2N1bWVudC5mb250U2VsZWN0b3IoKSEKICAgICBBU1NFUlQobmV3U3R5
bGUuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSA9PSAmZm9udFNlbGVjdG9yKTsKQEAgLTIx
OTYsNyArMjE5Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMK
ICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKTsKICAgICBkb2N1
bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKLSAgICBpZiAoUmVuZGVyU3R5bGUqIGNvbXB1
dGVkU3R5bGUgPSBjYW52YXMoKS0+Y29tcHV0ZWRTdHlsZSgpKQorICAgIGlmIChhdXRvKiBjb21w
dXRlZFN0eWxlID0gY2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgbmV3U3R5bGUt
PnNldEZvbnREZXNjcmlwdGlvbihjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVmYXVsdEZvbnREZXNj
cmlwdGlvbjsKQEAgLTIyNTksOSArMjI1OSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRUZXh0QmEKICAgICBtb2RpZmlhYmxlU3RhdGUoKS50ZXh0QmFzZWxpbmUgPSBiYXNl
bGluZTsKIH0KIAotaW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgUmVuZGVyU3R5bGUqKiBjb21w
dXRlZFN0eWxlKSBjb25zdAoraW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjp0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVy
U3R5bGUqKiBjb21wdXRlZFN0eWxlKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IChjb21wdXRlZFN0eWxlIHx8IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OkluaGVyaXQpID8gY2Fu
dmFzKCktPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSAoY29t
cHV0ZWRTdHlsZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJbmhlcml0KSA/IGNhbnZhcygp
LT5jb21wdXRlZFN0eWxlKCkgOiBudWxscHRyOwogICAgIGlmIChjb21wdXRlZFN0eWxlKQogICAg
ICAgICAqY29tcHV0ZWRTdHlsZSA9IHN0eWxlOwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CkBA
IC0yMzg0LDcgKzIzODQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1Rl
eHRJCiAKICAgICAvLyBGSVhNRTogTmVlZCB0byB0dXJuIG9mZiBmb250IHNtb290aGluZy4KIAot
ICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBj
b21wdXRlZFN0eWxlOwogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gdG9UZXh0RGlyZWN0
aW9uKHN0YXRlKCkuZGlyZWN0aW9uLCAmY29tcHV0ZWRTdHlsZSk7CiAgICAgYm9vbCBpc1JUTCA9
IGRpcmVjdGlvbiA9PSBSVEw7CiAgICAgYm9vbCBvdmVycmlkZSA9IGNvbXB1dGVkU3R5bGUgPyBp
c092ZXJyaWRlKGNvbXB1dGVkU3R5bGUtPnVuaWNvZGVCaWRpKCkpIDogZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUs
NyBAQCBwcml2YXRlOgogICAgICAgICBGb250UHJveHkmIG9wZXJhdG9yPShjb25zdCBGb250UHJv
eHkmKTsKIAogICAgICAgICBib29sIHJlYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmZv
bnRTZWxlY3RvcigpOyB9Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZShGb250U2VsZWN0b3ImLCBS
ZW5kZXJTdHlsZSYpOworICAgICAgICB2b2lkIGluaXRpYWxpemUoRm9udFNlbGVjdG9yJiwgY29u
c3QgUmVuZGVyU3R5bGUmKTsKICAgICAgICAgRm9udE1ldHJpY3MgZm9udE1ldHJpY3MoKSBjb25z
dDsKICAgICAgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KCkgY29uc3Q7CiAgICAgICAgIGZsb2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKQEAg
LTM4Miw3ICszODIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgYm9vbCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9Ci0gICAgVGV4
dERpcmVjdGlvbiB0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uLCBSZW5kZXJTdHlsZSoqIGNvbXB1
dGVkU3R5bGUgPSBudWxscHRyKSBjb25zdDsKKyAgICBUZXh0RGlyZWN0aW9uIHRvVGV4dERpcmVj
dGlvbihEaXJlY3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSA9IG51bGxw
dHIpIGNvbnN0OwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNv
dXJjZVByZWxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBI
VE1MUmVzb3VyY2VQcmVsb2FkZXI6OnByZWxvYWQoUHJlbAogICAgICAgICBwcmVsb2FkKFdURk1v
dmUocmVxdWVzdCkpOwogfQogCi1zdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNoZXMoRnJh
bWUqIGZyYW1lLCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNvbnN0IFN0cmluZyYgYXR0cmli
dXRlVmFsdWUpCitzdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNoZXMoRnJhbWUqIGZyYW1l
LCBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRl
VmFsdWUpCiB7CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcyA9IE1lZGlh
UXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoYXR0cmlidXRlVmFsdWUp
OwogICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgbWVkaWFRdWVyeUV2YWx1YXRvcigic2NyZWVuIiwg
ZnJhbWUsIHJlbmRlclN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Ns
aWRlclRodW1iRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODMsMjEgKzgzLDIxIEBAIFJlbmRlclNsaWRlclRodW1iOjpSZW5kZXJTbGlkZXJUaHVt
YihTbGkKIHsKIH0KIAotdm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZShS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFJlbmRlclNsaWRlclRodW1iOjp1cGRhdGVB
cHBlYXJhbmNlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAocGFy
ZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIHN0
eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7CisgICAgICAgIG11
dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOwogICAg
IGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVySG9yaXpvbnRhbFBh
cnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhvcml6b250YWxQ
YXJ0KTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhv
cml6b250YWxQYXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09
IE1lZGlhU2xpZGVyUGFydCkKLSAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhU2xp
ZGVyVGh1bWJQYXJ0KTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRp
YVNsaWRlclRodW1iUGFydCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5j
ZShNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNl
dEFwcGVhcmFuY2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwogICAgIGVsc2UgaWYgKHBh
cmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyUGFy
dCkKLSAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhRnVsbFNjcmVlblZvbHVtZVNs
aWRlclRodW1iUGFydCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVk
aWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKICAgICBpZiAoc3R5bGUoKS5oYXNB
cHBlYXJhbmNlKCkpIHsKICAgICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgICAgIHRoZW1l
KCkuYWRqdXN0U2xpZGVyVGh1bWJTaXplKHN0eWxlKCksIGVsZW1lbnQoKSk7CisgICAgICAgIHRo
ZW1lKCkuYWRqdXN0U2xpZGVyVGh1bWJTaXplKG11dGFibGVTdHlsZSgpLCBlbGVtZW50KCkpOwog
ICAgIH0KIH0KIApAQCAtMTU5LDEzICsxNTksMTMgQEAgdm9pZCBSZW5kZXJTbGlkZXJDb250YWlu
ZXI6OmxheW91dCgpCiAgICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKICAgICBh
dXRvJiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KCktPnNoYWRv
d0hvc3QoKSk7CiAgICAgYm9vbCBpc1ZlcnRpY2FsID0gaGFzVmVydGljYWxBcHBlYXJhbmNlKGlu
cHV0KTsKLSAgICBzdHlsZSgpLnNldEZsZXhEaXJlY3Rpb24oaXNWZXJ0aWNhbCA/IEZsb3dDb2x1
bW4gOiBGbG93Um93KTsKKyAgICBtdXRhYmxlU3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVy
dGljYWwgPyBGbG93Q29sdW1uIDogRmxvd1Jvdyk7CiAgICAgVGV4dERpcmVjdGlvbiBvbGRUZXh0
RGlyZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rpb24oKTsKICAgICBpZiAoaXNWZXJ0aWNhbCkgewog
ICAgICAgICAvLyBGSVhNRTogV29yayBhcm91bmQgcm91bmRpbmcgaXNzdWVzIGluIFJUTCB2ZXJ0
aWNhbCBzbGlkZXJzLiBXZSB3YW50IHRoZW0gdG8KICAgICAgICAgLy8gcmVuZGVyIGlkZW50aWNh
bGx5IHRvIExUUiB2ZXJ0aWNhbCBzbGlkZXJzLiBXZSBjYW4gcmVtb3ZlIHRoaXMgd29yayBhcm91
bmQgd2hlbgogICAgICAgICAvLyBzdWJwaXhlbCByZW5kZXJpbmcgaXMgZW5hYmxlZCBvbiBhbGwg
cG9ydHMuCi0gICAgICAgIHN0eWxlKCkuc2V0RGlyZWN0aW9uKExUUik7CisgICAgICAgIG11dGFi
bGVTdHlsZSgpLnNldERpcmVjdGlvbihMVFIpOwogICAgIH0KIAogICAgIFJlbmRlckJveCogdGh1
bWIgPSBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKSA/IGlucHV0LnNsaWRlclRodW1iRWxlbWVu
dCgpLT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBSZW5k
ZXJTbGlkZXJDb250YWluZXI6OmxheW91dCgpCiAKICAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5
b3V0KCk7CiAKLSAgICBzdHlsZSgpLnNldERpcmVjdGlvbihvbGRUZXh0RGlyZWN0aW9uKTsKKyAg
ICBtdXRhYmxlU3R5bGUoKS5zZXREaXJlY3Rpb24ob2xkVGV4dERpcmVjdGlvbik7CiAgICAgLy8g
VGhlc2Ugc2hvdWxkIGFsd2F5cyBleGlzdCwgdW5sZXNzIHNvbWVvbmUgbXV0YXRlcyB0aGUgc2hh
ZG93IERPTSAoZS5nLiwgaW4gdGhlIGluc3BlY3RvcikuCiAgICAgaWYgKCF0aHVtYiB8fCAhdHJh
Y2spCiAgICAgICAgIHJldHVybjsKQEAgLTU3NCw3ICs1NzQsNyBAQCBIVE1MSW5wdXRFbGVtZW50
KiBTbGlkZXJUaHVtYkVsZW1lbnQ6OmhvCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KHNoYWRvd0hvc3QoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVy
VGh1bWJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHls
ZSogaG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlkZXJUaHVtYkVsZW1lbnQ6
OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxl
KiBob3N0U3R5bGUpCiB7CiAgICAgLy8gVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNvbXB1dGUgc3R5
bGUuIFRoaXMgaXMganVzdCBhIGhhY2sgdG8gcGljayBzaGFkb3cgcHNldWRvIGlkIHdoZW4gaG9z
dCBzdHlsZSBpcyBrbm93bi4KIApAQCAtNjI4LDcgKzYyOCw3IEBAIFJlbmRlclB0cjxSZW5kZXJF
bGVtZW50PiBTbGlkZXJDb250YWluZXIKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
U2xpZGVyQ29udGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwogfQogCi1PcHRpb25hbDxF
bGVtZW50U3R5bGU+IFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShS
ZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50U3R5
bGU+IFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCiB7CiAgICAgLy8gVGhpcyBk
b2Vzbid0IGFjdHVhbGx5IGNvbXB1dGUgc3R5bGUuIFRoaXMgaXMganVzdCBhIGhhY2sgdG8gcGlj
ayBzaGFkb3cgcHNldWRvIGlkIHdoZW4gaG9zdCBzdHlsZSBpcyBrbm93bi4KIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgJKHJldmlz
aW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiAjZW5kaWYK
ICAgICB2b2lkIHdpbGxEZXRhY2hSZW5kZXJlcnMoKSBvdmVycmlkZTsKIAotICAgIE9wdGlvbmFs
PEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5
bGUqKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikgb3ZlcnJpZGU7CiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgdm9pZCBzdGFydERyYWdnaW5nKCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgaW5saW5lIFJl
ZjxTbGlkZXJUaHVtYkVsZW1lbnQ+IFNsaWRlclRodQogY2xhc3MgUmVuZGVyU2xpZGVyVGh1bWIg
ZmluYWwgOiBwdWJsaWMgUmVuZGVyQmxvY2tGbG93IHsKIHB1YmxpYzoKICAgICBSZW5kZXJTbGlk
ZXJUaHVtYihTbGlkZXJUaHVtYkVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKLSAgICB2b2lkIHVw
ZGF0ZUFwcGVhcmFuY2UoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0
ZUFwcGVhcmFuY2UoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogcHJpdmF0ZToK
ICAgICBib29sIGlzU2xpZGVyVGh1bWIoKSBjb25zdCBvdmVycmlkZTsKQEAgLTEzNSw3ICsxMzUs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNsaWRlckNvbnRhaW5lckVsZW1lbnQoRG9jdW1l
bnQmKTsKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVy
KFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAg
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwg
UmVuZGVyU3R5bGUqKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29s
dmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikgb3Zl
cnJpZGU7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgQXRvbWljU3RyaW5nIG1fc2hhZG93UHNldWRvSWQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1
LDcgQEAgUmVmPFRleHRDb250cm9sSW5uZXJFbGVtZW50PiBUZXh0Q29udHJvbAogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFRleHRDb250cm9sSW5uZXJFbGVtZW50KGRvY3VtZW50KSk7CiB9CiAK
LU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVD
dXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCitP
cHRpb25hbDxFbGVtZW50U3R5bGU+IFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3Vz
dG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9z
dFN0eWxlKQogewogICAgIGF1dG8gaW5uZXJDb250YWluZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGVQdHIoKTsKICAgICBpbm5lckNvbnRhaW5lclN0eWxlLT5pbmhlcml0RnJvbShzaGFkb3dI
b3N0U3R5bGUpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9j
ayogVGV4dENvbnRyb2wKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2xJbm5l
ckJsb2NrPihIVE1MRGl2RWxlbWVudDo6cmVuZGVyZXIoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUo
UmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxl
bWVudFN0eWxlPiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUp
CiB7CiAgICAgYXV0byBzdHlsZSA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
Pigqc2hhZG93SG9zdCgpKS5jcmVhdGVJbm5lclRleHRTdHlsZSgqc2hhZG93SG9zdFN0eWxlKTsK
ICAgICByZXR1cm4gRWxlbWVudFN0eWxlKHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU3R5bGU+KFdU
Rk1vdmUoc3R5bGUpKSk7CkBAIC0xNDksNyArMTQ5LDcgQEAgVGV4dENvbnRyb2xQbGFjZWhvbGRl
ckVsZW1lbnQ6OlRleHRDb250cgogICAgIHNldEhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNr
cygpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFRleHRDb250cm9sUGxhY2Vob2xkZXJF
bGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5k
ZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBUZXh0Q29u
dHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKIHsK
ICAgICBhdXRvIHN0eWxlID0gcmVzb2x2ZVN0eWxlKCZwYXJlbnRTdHlsZSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBA
QCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBUZXh0Q29udHJvbElubmVyRWxlbWVudChEb2N1
bWVudCYpOwotICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJl
bmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3Zl
cnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9z
dFN0eWxlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzTW91c2VGb2N1c2FibGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpAQCAtNjUsNyArNjUsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChEb2N1bWVudCYp
OwogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVu
ZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0gICAgT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OwogICAgIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgYm9vbCBpc1RleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIH07CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgVGV4dENvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQoRG9jdW1lbnQmKTsKICAg
ICAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHls
ZSkgb3ZlcnJpZGU7CiB9OwogCiBjbGFzcyBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50
IGZpbmFsIDogcHVibGljIEhUTUxEaXZFbGVtZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4MSw3ICsxMzgxLDcgQEAgT3B0
aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzbwogICAgICAgICByZXR1cm4gTm9D
dXJzb3JDaGFuZ2U7CiAKICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlciA/ICZyZW5kZXJlci0+c3R5bGUoKSA6IG51
bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJlciA/ICZyZW5kZXJlci0+c3R5bGUoKSA6
IG51bGxwdHI7CiAgICAgYm9vbCBob3Jpem9udGFsVGV4dCA9ICFzdHlsZSB8fCBzdHlsZS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKTsKICAgICBjb25zdCBDdXJzb3ImIGlCZWFtID0gaG9yaXpv
bnRhbFRleHQgPyBpQmVhbUN1cnNvcigpIDogdmVydGljYWxUZXh0Q3Vyc29yKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTAgKzcwLDEwIEBAIHN0YXRpYyBpbmxp
bmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlvbigKICAgICByZXR1cm4gZmxvb3IobnVtU3RlcHMg
KiB0KSAvIG51bVN0ZXBzOwogfQogCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKEFuaW1h
dGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wb3NpdGVBbmltYXRpb24pCitBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNv
bnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9z
aXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgOiBtX29iamVjdChyZW5kZXJl
cikKICAgICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAs
IG1fYW5pbWF0aW9uKGFuaW1hdGlvbikKKyAgICAsIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8QW5p
bWF0aW9uJj4oYW5pbWF0aW9uKSkKIHsKICAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBkdXJhdGlv
bgogICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA+IDApCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgQW5pbWF0aW9uQmFzZSA6IHB1
YmxpYyBSZWZDb3VudGVkPAogICAgIGZyaWVuZCBjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbjsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBBbmltYXRpb25CYXNl
KEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCosIENvbXBvc2l0ZUFuaW1hdGlv
biopOworICAgIEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBSZW5k
ZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKik7CiAgICAgdmlydHVhbCB+QW5pbWF0aW9u
QmFzZSgpIHsgfQogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBtX29iamVjdDsgfQpAQCAtMTM4LDcgKzEzOCw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgcHJv
Z3Jlc3MoZG91YmxlIHNjYWxlID0gMSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1
bmN0aW9uKiA9IG51bGxwdHIpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBh
bmltYXRpb24gc3RhdGUgY2hhbmdlZC4KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShDb21wb3Np
dGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIC8qY3VycmVu
dFN0eWxlKi8sIFJlbmRlclN0eWxlKiAvKnRhcmdldFN0eWxlKi8sIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFu
aW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0
eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBjb25zdCBSZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSov
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgY29tcHV0
ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCA9IDA7CkBAIC0x
NTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFu
aW1hdGlvbiYpIGNvbnN0OwogCiAgICAgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2FuaW1hdGlvbjsgfQotICAgIHZvaWQgc2V0QW5pbWF0aW9uKEFuaW1hdGlv
biYgYW5pbWF0aW9uKSB7IG1fYW5pbWF0aW9uID0gYW5pbWF0aW9uOyB9CisgICAgdm9pZCBzZXRB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgbV9hbmltYXRpb24gPSBjb25z
dF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbik7IH0KIAogICAgIC8vIFJldHVybiB0cnVlIGlm
IHRoaXMgYW5pbWF0aW9uIGlzIG92ZXJyaWRkZW4uIFRoaXMgd2lsbCBvbmx5IGJlIHRoZSBjYXNl
IGZvcgogICAgIC8vIEltcGxpY2l0QW5pbWF0aW9ucyBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUg
d2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGZvcmNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw5ICs1OTMsOSBAQCB2b2lkIEFuaW1hdGlv
bkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvCiAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5
bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwogfQogCi1ib29sIEFuaW1hdGlvbkNvbnRy
b2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlclN0
eWxlJiBuZXdTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHls
ZSkKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRT
dHlsZSA9IHJlbmRlcmVyLmhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZyZW5kZXJlci5zdHlsZSgp
IDogbnVsbHB0cjsKKyAgICBhdXRvKiBvbGRTdHlsZSA9IHJlbmRlcmVyLmhhc0luaXRpYWxpemVk
U3R5bGUoKSA/ICZyZW5kZXJlci5zdHlsZSgpIDogbnVsbHB0cjsKICAgICBpZiAoKCFvbGRTdHls
ZSB8fCAoIW9sZFN0eWxlLT5hbmltYXRpb25zKCkgJiYgIW9sZFN0eWxlLT50cmFuc2l0aW9ucygp
KSkgJiYgKCFuZXdTdHlsZS5hbmltYXRpb25zKCkgJiYgIW5ld1N0eWxlLnRyYW5zaXRpb25zKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgfkFuaW1hdGlvbkNv
bnRyb2xsZXIoKTsKIAogICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50Jik7
Ci0gICAgYm9vbCB1cGRhdGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmLCBSZW5kZXJTdHlsZSYg
bmV3U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpOwor
ICAgIGJvb2wgdXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5
bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxl
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGVGb3JS
ZW5kZXJlcihSZW5kZXJFbGVtZW50Jik7CiAKICAgICAvLyBJZiBwb3NzaWJsZSwgY29tcHV0ZSB0
aGUgdmlzdWFsIGV4dGVudCBvZiBhbnkgdHJhbnNmb3JtIGFuaW1hdGlvbiBvbiB0aGUgZ2l2ZW4g
cmVuZGVyZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzcsNyArNzcsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigp
CiAgICAgfQogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMo
UmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSkKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFu
c2l0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJl
bnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogewogICAgIC8vIElmIGN1
cnJlbnRTdHlsZSBpcyBudWxsIG9yIHRoZXJlIGFyZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25z
LCBqdXN0IHNraXAgaXQKICAgICBpZiAoIWN1cnJlbnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLT50
cmFuc2l0aW9ucygpICYmIG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSkKQEAgLTkzLDcgKzkzLDcg
QEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgIC8vIENoZWNr
IHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYWN0aXZlIHRyYW5zaXRpb25zCiAgICAg
aWYgKHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCktPnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBBbmltYXRpb24mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygp
LT5hbmltYXRpb24oaSk7CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHls
ZS0+dHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9uKGkpOwogICAgICAgICAgICAgYm9vbCBpc0FjdGl2
ZVRyYW5zaXRpb24gPSAhbV9zdXNwZW5kZWQgJiYgKGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFu
aW1hdGlvbi5kZWxheSgpID4gMCk7CiAKICAgICAgICAgICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9u
TW9kZSBtb2RlID0gYW5pbWF0aW9uLmFuaW1hdGlvbk1vZGUoKTsKQEAgLTEyMiw3ICsxMjIsNyBA
QCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgICAgICAg
ICAgLy8gYW5kIHdlIGhhdmUgdG8gdXNlIHRoZSB1bmFuaW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5p
bWF0aW9uLiBXZSBkbyB0aGUgdGVzdAogICAgICAgICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHVu
YW5pbWF0ZWQgc3R5bGUgaGVyZSwgYnV0IHdlICJvdmVycmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0
ZXIuCiAgICAgICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFu
aW0gPSBnZXRBbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogZnJvbVN0eWxlID0ga2V5ZnJhbWVBbmltID8ga2V5ZnJhbWVBbmltLT51bmFuaW1h
dGVkU3R5bGUoKSA6IGN1cnJlbnRTdHlsZTsKKyAgICAgICAgICAgICAgICBhdXRvKiBmcm9tU3R5
bGUgPSBrZXlmcmFtZUFuaW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHlsZSgpIDogY3Vy
cmVudFN0eWxlOwogCiAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEgY3VycmVu
dCB0cmFuc2l0aW9uIGZvciB0aGlzIHByb3AKICAgICAgICAgICAgICAgICBJbXBsaWNpdEFuaW1h
dGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wKTsKQEAgLTE5NSw3ICsxOTUs
NyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgIG1f
dHJhbnNpdGlvbnMucmVtb3ZlKHByb3BlcnR5VG9SZW1vdmUpOwogfQogCi12b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUp
Cit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCiB7CiAgICAgLy8gTm90aGluZyB0byBkbyBpZiB3
ZSBkb24ndCBoYXZlIGFueSBhbmltYXRpb25zLCBhbmQgZGlkbid0IGhhdmUgYW55IGJlZm9yZQog
ICAgIGlmIChtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLT5o
YXNBbmltYXRpb25zKCkpCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRp
b246OnVwZGF0ZUtleWZyYW1lQQogICAgIGlmICh0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpKSB7
CiAgICAgICAgIGludCBudW1BbmltcyA9IHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCktPnNpemUo
KTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAg
ICAgICBBbmltYXRpb24mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCktPmFu
aW1hdGlvbihpKTsKKyAgICAgICAgICAgIGF1dG8mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT5h
bmltYXRpb25zKCktPmFuaW1hdGlvbihpKTsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBhbmlt
YXRpb25OYW1lKGFuaW1hdGlvbi5uYW1lKCkpOwogCiAgICAgICAgICAgICBpZiAoIWFuaW1hdGlv
bi5pc1ZhbGlkQW5pbWF0aW9uKCkpCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBDb21wb3NpdGVB
bmltYXRpb246OnVwZGF0ZUtleWZyYW1lQQogICAgIHN0ZDo6c3dhcChuZXdBbmltYXRpb25zLCBt
X2tleWZyYW1lQW5pbWF0aW9ucyk7CiB9CiAKLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmlt
YXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBS
ZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJs
ZW5kZWRTdHlsZSkKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5k
ZWRTdHlsZSkKIHsKICAgICAvLyBXZSBkb24ndCBkbyBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9u
J3QgaGF2ZSBhIGN1cnJlbnRTdHlsZSAob24gc3RhcnR1cCkuCiAgICAgdXBkYXRlVHJhbnNpdGlv
bnMoJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUsICZ0YXJnZXRTdHlsZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRl
QW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgY2xlYXJSZW5kZXJlcigpOwogCi0gICAgYm9vbCBhbmltYXRlKFJlbmRlckVs
ZW1lbnQmLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5
bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5kZWRTdHlsZSk7CisgICAgYm9v
bCBhbmltYXRlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4mIGJsZW5kZWRTdHlsZSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBn
ZXRBbmltYXRlZFN0eWxlKCkgY29uc3Q7CiAgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zv
cm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0OwogCkBAIC04OCw4ICs4OCw4IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlJik7CiAKLSAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVsZW1lbnQqLCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwotICAg
IHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqLCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIHZvaWQgdXBk
YXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVL
ZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CiAgICAgCiAgICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEltcGxpY2l0QW5pbWF0aW9uPj4gQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFJl
ZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4+IEFuaW1hdGlvbk5hbWVNYXA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNp
dEFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oQW5p
bWF0aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5k
ZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSwgUmVuZGVy
U3R5bGUqIGZyb21TdHlsZSkKK0ltcGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbihj
b25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVy
dHksIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmlt
LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZSh0cmFu
c2l0aW9uLCByZW5kZXJlciwgY29tcEFuaW0pCiAgICAgLCBtX2Zyb21TdHlsZShSZW5kZXJTdHls
ZTo6Y2xvbmVQdHIoKmZyb21TdHlsZSkpCiAgICAgLCBtX3RyYW5zaXRpb25Qcm9wZXJ0eSh0cmFu
c2l0aW9uLnByb3BlcnR5KCkpCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgSW1wbGljaXRBbmltYXRp
b246OnNob3VsZFNlbmRFdmVudEYKICAgICByZXR1cm4gbV9vYmplY3QtPmRvY3VtZW50KCkuaGFz
TGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKIH0KIAotYm9vbCBJbXBsaWNpdEFuaW1hdGlv
bjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVu
ZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCitib29sIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRl
KENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICAvLyBJZiB3ZSBnZXQgdGhpcyBmYXIgYW5kIHRo
ZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFuaW5nIHVwIGEganVzdCBm
aW5pc2hlZCBhbmltYXRpb24uCiAgICAgLy8gU28ganVzdCByZXR1cm4uIEV2ZXJ5dGhpbmcgaXMg
YWxyZWFkeSBhbGwgY2xlYW5lZCB1cC4KQEAgLTIwNSw3ICsyMDUsNyBAQCBib29sIEltcGxpY2l0
QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2CiAgICAgcmV0dXJuIGZhbHNlOyAvLyBEaWRuJ3Qg
ZGlzcGF0Y2ggYW4gZXZlbnQKIH0KIAotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoUmVu
ZGVyU3R5bGUqIHRvKQordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoY29uc3QgUmVuZGVy
U3R5bGUqIHRvKQogewogICAgIEFTU0VSVCh0byk7CiAgICAgQVNTRVJUKG1fZnJvbVN0eWxlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmlt
YXRpb24uaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vSW1wbGljaXRBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBj
bGFzcyBSZW5kZXJFbGVtZW50OwogLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFz
cyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoQW5pbWF0aW9uJiBhbmltYXRp
b24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyU3R5bGUq
IGZyb21TdHlsZSkKKyAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29u
c3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHks
IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFu
aW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEltcGxpY2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5n
UHJvcGVydHksIHJlbmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24sIGZyb21TdHlsZSkpOwogICAg
IH07CkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGRv
dWJsZSB0aW1lT2Zmc2V0KSBvdmVycmlkZTsKICAgICB2b2lkIGVuZEFuaW1hdGlvbigpIG92ZXJy
aWRlOwogCi0gICAgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1l
bnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpIG92ZXJy
aWRlOworICAgIGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50
KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRh
cmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBv
dmVycmlkZTsKICAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0
KFJlbmRlclN0eWxlKiB0byk7CisgICAgdm9pZCByZXNldChjb25zdCBSZW5kZXJTdHlsZSogdG8p
OwogCiAgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVj
dCYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04Nyw3ICs4Nyw3IEBAIHByb3RlY3RlZDoKICNlbmRp
ZgogCiBwcml2YXRlOgotICAgIEltcGxpY2l0QW5pbWF0aW9uKEFuaW1hdGlvbiYsIENTU1Byb3Bl
cnR5SUQsIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJTdHlsZSop
OworICAgIEltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIENTU1Byb3BlcnR5SUQs
IFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBjb25zdCBSZW5kZXJTdHlsZSop
OwogICAgIHZpcnR1YWwgfkltcGxpY2l0QW5pbWF0aW9uKCk7CiAKICAgICAvLyBUaGUgdHdvIHN0
eWxlcyB0aGF0IHdlIGFyZSBibGVuZGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihBbmltYXRpb24mIGFuaW1hdGlv
biwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRl
QW5pbWF0aW9uLCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorS2V5ZnJhbWVBbmltYXRp
b246OktleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJF
bGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24s
IGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCiAgICAgOiBBbmltYXRpb25CYXNl
KGFuaW1hdGlvbiwgcmVuZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlvbikKICAgICAsIG1fa2V5ZnJh
bWVzKGFuaW1hdGlvbi5uYW1lKCkpCiAgICAgLCBtX3VuYW5pbWF0ZWRTdHlsZShSZW5kZXJTdHls
ZTo6Y2xvbmVQdHIoKnVuYW5pbWF0ZWRTdHlsZSkpCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBL
ZXlmcmFtZUFuaW1hdGlvbjo6ZmV0Y2hJbnRlcnZhbEVuZAogICAgIHByb2cgPSBwcm9ncmVzcyhz
Y2FsZSwgb2Zmc2V0LCBwcmV2S2V5ZnJhbWUudGltaW5nRnVuY3Rpb24obmFtZSgpKSk7CiB9CiAK
LWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21w
b3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0
ZWRTdHlsZSkKK2Jvb2wgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICAvLyBGaXJlIHRoZSBzdGFydCB0aW1lb3V0
IGlmIG5lZWRlZAogICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFt
ZUFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAgY2xhc3MgUmVu
ZGVyU3R5bGU7CiAvLyBBIEtleWZyYW1lQW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYW4g
ZXhwbGljaXQgYW5pbWF0aW9uIGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgogY2xhc3MgS2V5
ZnJhbWVBbmltYXRpb24gZmluYWwgOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxLZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlKEFuaW1hdGlvbiYgYW5pbWF0
aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3Np
dGVBbmltYXRpb24sIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCisgICAgc3RhdGljIFJl
ZjxLZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmlt
YXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIHJlbmRl
cmVyLCBjb21wb3NpdGVBbmltYXRpb24sIHVuYW5pbWF0ZWRTdHlsZSkpOwogICAgIH0KIAotICAg
IGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKKyAgICBi
b29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mKSBv
dmVycmlkZTsKIAogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExh
eW91dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKQEAgLTg4LDcgKzg4LDcgQEAgcHJvdGVjdGVkOgog
I2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgS2V5ZnJhbWVBbmltYXRpb24oQW5pbWF0aW9uJiwgUmVu
ZGVyRWxlbWVudCosIENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVk
U3R5bGUpOworICAgIEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIFJlbmRlckVs
ZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRl
ZFN0eWxlKTsKICAgICB2aXJ0dWFsIH5LZXlmcmFtZUFuaW1hdGlvbigpOwogICAgIAogICAgIC8v
IEdldCB0aGUgc3R5bGVzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgc3Vycm91bmRpbmcgdGhlIGN1
cnJlbnQgYW5pbWF0aW9uIHRpbWUgYW5kIHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0uCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4Nyw3
ICsyODcsNyBAQCBzdGF0aWMgTm9kZSogYW5jZXN0b3JSZXNwb25kaW5nVG9TY3JvbGxXCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJlbmRlclN0eWxlJiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOwogCiAgICAgICAgIGlmIChyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYKICAg
ICAgICAgICAgIChzdHlsZS5vdmVyZmxvd1koKSA9PSBPQVVUTyB8fCBzdHlsZS5vdmVyZmxvd1ko
KSA9PSBPU0NST0xMIHx8IHN0eWxlLm92ZXJmbG93WSgpID09IE9PVkVSTEFZIHx8CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFk
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkJiBGbG93VGhyZWFkQ29udHJvbAogCiB2b2lkIEZsb3dUaHJlYWRDb250cm9s
bGVyOjpzdHlsZURpZENoYW5nZSgpCiB7Ci0gICAgUmVuZGVyU3R5bGUmIHZpZXdTdHlsZSA9IG1f
dmlldy0+c3R5bGUoKTsKKyAgICBhdXRvJiB2aWV3U3R5bGUgPSBtX3ZpZXctPnN0eWxlKCk7CiAg
ICAgZm9yIChhdXRvJiBmbG93UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0
KQogICAgICAgICBmbG93UmVuZGVyZXItPnNldFN0eWxlKFJlbmRlckZsb3dUaHJlYWQ6OmNyZWF0
ZUZsb3dUaHJlYWRTdHlsZSgmdmlld1N0eWxlKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MjgsNyArMTMyOCw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29uc3RyYWluVG9MaW5lVG9wQW4K
IHN0YXRpYyBMYXlvdXRSZWN0IGNsaXBSZWN0Rm9yTmluZVBpZWNlSW1hZ2VTdHJpcChJbmxpbmVG
bG93Qm94KiBib3gsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSwgY29uc3QgTGF5b3V0UmVj
dCYgcGFpbnRSZWN0KQogewogICAgIExheW91dFJlY3QgY2xpcFJlY3QocGFpbnRSZWN0KTsKLSAg
ICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBhdXRv
JiBzdHlsZSA9IGJveC0+cmVuZGVyZXIoKS5zdHlsZSgpOwogICAgIExheW91dEJveEV4dGVudCBv
dXRzZXRzID0gc3R5bGUuaW1hZ2VPdXRzZXRzKGltYWdlKTsKICAgICBpZiAoYm94LT5pc0hvcml6
b250YWwoKSkgewogICAgICAgICBjbGlwUmVjdC5zZXRZKHBhaW50UmVjdC55KCkgLSBvdXRzZXRz
LnRvcCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHN0YXRpYyBib29sIGJvcmRl
ck9yUGFkZGluZ0xvZ2ljYWxXaWR0aEMKIAogdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsK
LSAgICBSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOworICAgIGF1dG8mIG5ld1N0eWxl
ID0gc3R5bGUoKTsKIAogICAgIGJvb2wgaGFkVHJhbnNmb3JtID0gaGFzVHJhbnNmb3JtKCk7CiAg
ICAgYm9vbCBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrSW52YWxpZGF0ZWQgPSBmYWxzZTsKQEAg
LTI4MzcsNyArMjgzNyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQoYm9v
bCAKICAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6bGluZUhlaWdodChmaXJzdExpbmUsIGRpcmVj
dGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7CiAKICAgICBpZiAoZmlyc3RMaW5lICYmIHZpZXcoKS51
c2VzRmlyc3RMaW5lUnVsZXMoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSYgcyA9IGZpcnN0TGlu
ZSA/IGZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOworICAgICAgICBhdXRvJiBzID0gZmlyc3RM
aW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7CiAgICAgICAgIGlmICgmcyAhPSAmc3R5
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBzLmNvbXB1dGVkTGluZUhlaWdodCgpOwogICAgIH0K
QEAgLTI5NzYsOSArMjk3Niw5IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Zmlyc3RMaW5l
QmxvY2sKICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2s7CiB9CiAKLXN0YXRpYyBSZW5kZXJTdHls
ZSYgc3R5bGVGb3JGaXJzdExldHRlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBS
ZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyQ29udGFpbmVyKQorc3RhdGljIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZUZvckZpcnN0TGV0dGVyKFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ss
IFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJDb250YWluZXIpCiB7Ci0gICAgUmVuZGVyU3R5bGUq
IHBzZXVkb1N0eWxlID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoRklS
U1RfTEVUVEVSLCAmZmlyc3RMZXR0ZXJDb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkpOworICAg
IGF1dG8qIHBzZXVkb1N0eWxlID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0TXV0YWJsZUNhY2hlZFBz
ZXVkb1N0eWxlKEZJUlNUX0xFVFRFUiwgJmZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVT
dHlsZSgpKTsKICAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGFuIGluaXRpYWwgbGV0dGVyIGRyb3Ag
dGhhdCBpcyA+PSAxLCB0aGVuIHdlIG5lZWQgdG8gZm9yY2UgZmxvYXRpbmcgdG8gYmUgb24uCiAg
ICAgaWYgKHBzZXVkb1N0eWxlLT5pbml0aWFsTGV0dGVyRHJvcCgpID49IDEgJiYgIXBzZXVkb1N0
eWxlLT5pc0Zsb2F0aW5nKCkpCkBAIC0zMDYxLDcgKzMwNjEsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
Ojp1cGRhdGVGaXJzdExldHRlclN0eWxlCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0
ZXIgPSBjdXJyZW50Q2hpbGQtPnBhcmVudCgpOwogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0
dGVyQ29udGFpbmVyID0gZmlyc3RMZXR0ZXItPnBhcmVudCgpOwotICAgIFJlbmRlclN0eWxlJiBw
c2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RM
ZXR0ZXJDb250YWluZXIpOworICAgIGF1dG8mIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExl
dHRlcihmaXJzdExldHRlckJsb2NrLCBmaXJzdExldHRlckNvbnRhaW5lcik7CiAgICAgQVNTRVJU
KGZpcnN0TGV0dGVyLT5pc0Zsb2F0aW5nKCkgfHwgZmlyc3RMZXR0ZXItPmlzSW5saW5lKCkpOwog
CiAgICAgaWYgKFN0eWxlOjpkZXRlcm1pbmVDaGFuZ2UoZmlyc3RMZXR0ZXItPnN0eWxlKCksIHBz
ZXVkb1N0eWxlKSA9PSBTdHlsZTo6RGV0YWNoKSB7CkBAIC0zMTAyLDcgKzMxMDIsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlclN0eWxlCiB2b2lkIFJlbmRlckJsb2NrOjpj
cmVhdGVGaXJzdExldHRlclJlbmRlcmVyKFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ss
IFJlbmRlclRleHQqIGN1cnJlbnRUZXh0Q2hpbGQpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmly
c3RMZXR0ZXJDb250YWluZXIgPSBjdXJyZW50VGV4dENoaWxkLT5wYXJlbnQoKTsKLSAgICBSZW5k
ZXJTdHlsZSYgcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxv
Y2ssIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKKyAgICBhdXRvJiBwc2V1ZG9TdHlsZSA9IHN0eWxl
Rm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwog
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmaXJzdExldHRlciA9IG51bGxwdHI7CiAgICAgaWYg
KHBzZXVkb1N0eWxlLmRpc3BsYXkoKSA9PSBJTkxJTkUpCiAgICAgICAgIGZpcnN0TGV0dGVyID0g
bmV3IFJlbmRlcklubGluZShkb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocHNldWRvU3R5
bGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cu
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEJsb2NrQwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBjYWxjdWxhdGVNaW5pbXVtUGFnZUhlaWdodChS
ZW5kZXJTdHlsZSYgcmVuZGVyU3R5bGUsIFJvb3RJbmxpbmVCb3gmIGxhc3RMaW5lLCBMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKK3N0YXRpYyBpbmxpbmUgTGF5b3V0
VW5pdCBjYWxjdWxhdGVNaW5pbXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJTdHlsZSYgcmVuZGVy
U3R5bGUsIFJvb3RJbmxpbmVCb3gmIGxhc3RMaW5lLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91
dFVuaXQgbGluZUJvdHRvbSkKIHsKICAgICAvLyBXZSBtYXkgcmVxdWlyZSBhIGNlcnRhaW4gbWlu
aW11bSBudW1iZXIgb2YgbGluZXMgcGVyIHBhZ2UgaW4gb3JkZXIgdG8gc2F0aXNmeQogICAgIC8v
IG9ycGhhbnMgYW5kIHdpZG93cywgYW5kIHRoYXQgbWF5IGFmZmVjdCB0aGUgbWluaW11bSBwYWdl
IGhlaWdodC4KQEAgLTM3MjMsNyArMzcyMyw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGp1
c3RDb21wdXRlZEZvbnQKICAgICBmb3IgKFJlbmRlck9iamVjdCogZGVzY2VuZGVudCA9IHRyYXZl
cnNlTmV4dCh0aGlzLCBpc05vbkJsb2Nrc09yTm9uRml4ZWRIZWlnaHRMaXN0SXRlbXMpOyBkZXNj
ZW5kZW50OyBkZXNjZW5kZW50ID0gZGVzY2VuZGVudC0+dHJhdmVyc2VOZXh0KHRoaXMsIGlzTm9u
QmxvY2tzT3JOb25GaXhlZEhlaWdodExpc3RJdGVtcykpIHsKICAgICAgICAgaWYgKGlzVmlzaWJs
ZVJlbmRlclRleHQoZGVzY2VuZGVudCkgJiYgcmVzaXplVGV4dFBlcm1pdHRlZChkZXNjZW5kZW50
KSkgewogICAgICAgICAgICAgUmVuZGVyVGV4dCYgdGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+
KCpkZXNjZW5kZW50KTsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlJiBvbGRTdHlsZSA9IHRleHQu
c3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8mIG9sZFN0eWxlID0gdGV4dC5zdHlsZSgpOwogICAg
ICAgICAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBvbGRTdHlsZS5mb250RGVzY3JpcHRpb24o
KTsKICAgICAgICAgICAgIGZsb2F0IHNwZWNpZmllZFNpemUgPSBmb250RGVzY3JpcHRpb24uc3Bl
Y2lmaWVkU2l6ZSgpOwogICAgICAgICAgICAgZmxvYXQgc2NhbGVkU2l6ZSA9IHJvdW5kZihzcGVj
aWZpZWRTaXplICogc2NhbGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODQsNyArMzg0LDcgQEAgdm9pZCBSZW5kZXJC
b3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZgogICAgIGlmIChpc0RvY0VsZW1lbnRSZW5kZXJl
ciB8fCBpc0JvZHlSZW5kZXJlcikgewogICAgICAgICAvLyBQcm9wYWdhdGUgdGhlIG5ldyB3cml0
aW5nIG1vZGUgYW5kIGRpcmVjdGlvbiB1cCB0byB0aGUgUmVuZGVyVmlldy4KICAgICAgICAgYXV0
byogZG9jdW1lbnRFbGVtZW50UmVuZGVyZXIgPSBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgp
LT5yZW5kZXJlcigpOwotICAgICAgICBSZW5kZXJTdHlsZSYgdmlld1N0eWxlID0gdmlldygpLnN0
eWxlKCk7CisgICAgICAgIGF1dG8mIHZpZXdTdHlsZSA9IHZpZXcoKS5tdXRhYmxlU3R5bGUoKTsK
ICAgICAgICAgYm9vbCB2aWV3Q2hhbmdlZFdyaXRpbmdNb2RlID0gZmFsc2U7CiAgICAgICAgIGJv
b2wgcm9vdFN0eWxlQ2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBib29sIHZpZXdTdHlsZUNoYW5n
ZWQgPSBmYWxzZTsKQEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmCiAgICAgICAgICAgICB2aWV3U3R5bGUuc2V0RGlyZWN0aW9uKG5ld1N0
eWxlLmRpcmVjdGlvbigpKTsKICAgICAgICAgICAgIHZpZXdTdHlsZUNoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgaWYgKGlzQm9keVJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAgICAgcm9vdFJl
bmRlcmVyLT5zdHlsZSgpLnNldERpcmVjdGlvbihuZXdTdHlsZS5kaXJlY3Rpb24oKSk7CisgICAg
ICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXREaXJlY3Rpb24obmV3
U3R5bGUuZGlyZWN0aW9uKCkpOwogICAgICAgICAgICAgICAgIHJvb3RTdHlsZUNoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7CkBAIC00MDcsNyArNDA3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZgogICAgICAgICAgICAgdmlldygpLm1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgICAgIGlmIChpc0JvZHlSZW5kZXJlcikgewog
ICAgICAgICAgICAgICAgIHJvb3RTdHlsZUNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IHJvb3RSZW5kZXJlci0+c3R5bGUoKS5zZXRXcml0aW5nTW9kZShuZXdTdHlsZS53cml0aW5nTW9k
ZSgpKTsKKyAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldFdy
aXRpbmdNb2RlKG5ld1N0eWxlLndyaXRpbmdNb2RlKCkpOwogICAgICAgICAgICAgICAgIHJvb3RS
ZW5kZXJlci0+c2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKG5ld1N0eWxlLmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7CkBAIC00MzIsOCArNDMyLDggQEAgdm9pZCBSZW5kZXJCb3g6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZgogICAgICAgICAgICAgLy8gUHJvcGFnYXRlIHRoZSBi
b2R5IGZvbnQgYmFjayB1cCB0byB0aGUgUmVuZGVyVmlldyBhbmQgdXNlIGl0IGFzCiAgICAgICAg
ICAgICAvLyB0aGUgYmFzaXMgb2YgdGhlIGdyaWQuCiAgICAgICAgICAgICBpZiAobmV3U3R5bGUu
Zm9udERlc2NyaXB0aW9uKCkgIT0gdmlldygpLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCkpIHsK
LSAgICAgICAgICAgICAgICB2aWV3KCkuc3R5bGUoKS5zZXRGb250RGVzY3JpcHRpb24obmV3U3R5
bGUuZm9udERlc2NyaXB0aW9uKCkpOwotICAgICAgICAgICAgICAgIHZpZXcoKS5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAg
ICAgICAgICB2aWV3KCkubXV0YWJsZVN0eWxlKCkuc2V0Rm9udERlc2NyaXB0aW9uKG5ld1N0eWxl
LmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgICAgICB2aWV3KCkubXV0YWJsZVN0eWxl
KCkuZm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCBMYXlvdXRVbml0IFJl
bmRlckJveDo6Y29uc3RyYWluQ29udGVudEJvCiAKIFJvdW5kZWRSZWN0OjpSYWRpaSBSZW5kZXJC
b3g6OmJvcmRlclJhZGlpKCkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlz
LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKICAgICBMYXlvdXRS
ZWN0IGJvdW5kcyA9IGZyYW1lUmVjdCgpOwogCiAgICAgdW5zaWduZWQgYm9yZGVyTGVmdCA9IHN0
eWxlLmJvcmRlckxlZnRXaWR0aCgpOwpAQCAtNDgxNCw3ICs0ODE0LDcgQEAgUmVuZGVyTGF5ZXIq
IFJlbmRlckJveDo6ZW5jbG9zaW5nRmxvYXRQYQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1M
YXlvdXRSZWN0IFJlbmRlckJveDo6bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0
aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94
Ojpsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAgIExheW91dFJlY3QgcmVjdCA9IHZpc3VhbE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHBhcmVudFN0eWxlKTsKICAgICBpZiAoIXBhcmVudFN0
eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQpAQCAtNDgyMiw3ICs0ODIyLDcgQEAgTGF5
b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxWaXN1YWxPdmVyZgogICAgIHJldHVybiByZWN0Owog
fQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRp
b24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6
OnZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgd3JpdGluZyBtb2RlcyBvZiB0aGUgY2hp
bGQgYW5kIHBhcmVudCBtYXRjaCwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIAogICAgIC8vIGRvIGFu
eXRoaW5nIGZhbmN5LiBKdXN0IHJldHVybiB0aGUgcmVzdWx0LgpAQCAtNDg0MCw3ICs0ODQwLDcg
QEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVjdAogICAgIHJldHVybiBy
ZWN0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6bG9naWNhbExheW91dE92ZXJmbG93UmVj
dEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJl
Y3QgUmVuZGVyQm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29u
c3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAgIExheW91dFJlY3QgcmVj
dCA9IGxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHBhcmVudFN0eWxlKTsKICAgICBp
ZiAoIXBhcmVudFN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQpAQCAtNDg0OCw3ICs0
ODQ4LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxMYXlvdXRPdmVyZgogICAgIHJl
dHVybiByZWN0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6bGF5b3V0T3ZlcmZsb3dSZWN0
Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVj
dCBSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKIHsKICAgICAvLyBPbmx5IHByb3BhZ2F0ZSBpbnRl
cmlvciBsYXlvdXQgb3ZlcmZsb3cgaWYgd2UgZG9uJ3QgY2xpcCBpdC4KICAgICBMYXlvdXRSZWN0
IHJlY3QgPSBib3JkZXJCb3hSZWN0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2MywxMCArNTYzLDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGFwcGx5VG9wTGVmdExvY2F0aW9uT2Zmc2V0V2l0aEZsaXBwaW5nKHBvaW50KTsK
ICAgICB9CiAKLSAgICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9w
YWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZs
b3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBMYXlvdXRSZWN0
IGxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNv
bnN0OwotICAgIExheW91dFJlY3QgbGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJl
Y3QgdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqKSBj
b25zdDsKKyAgICBMYXlvdXRSZWN0IGxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdh
dGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJlY3QgbGF5b3V0T3Zl
cmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogICAg
IGJvb2wgaGFzUmVuZGVyT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93OyB9ICAg
IAogICAgIGJvb2wgaGFzVmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93
ICYmICFib3JkZXJCb3hSZWN0KCkuY29udGFpbnMobV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dS
ZWN0KCkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MSw3
ICs1ODEsNyBAQCBSb3VuZGVkUmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6YmFja2dyCiAgICAg
cmV0dXJuIGdldEJhY2tncm91bmRSb3VuZGVkUmVjdChib3JkZXJSZWN0LCBib3gsIGJveFNpemUu
d2lkdGgoKSwgYm94U2l6ZS5oZWlnaHQoKSwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVk
ZUxvZ2ljYWxSaWdodEVkZ2UpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUpCitz
dGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgY29uc3QgU2hhZG93RGF0
YSogYm94U2hhZG93ID0gc3R5bGUtPmJveFNoYWRvdygpOwogICAgIHdoaWxlIChib3hTaGFkb3ct
PnN0eWxlKCkgIT0gTm9ybWFsKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJ1dHRvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJ1dHRvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCdXR0b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQg
UmVuZGVyQnV0dG9uOjphZGRDaGlsZChSZW5kZXJPYmplY3QKICAgICAgICAgLy8gQ3JlYXRlIGFu
IGFub255bW91cyBibG9jay4KICAgICAgICAgQVNTRVJUKCFmaXJzdENoaWxkKCkpOwogICAgICAg
ICBtX2lubmVyID0gY3JlYXRlQW5vbnltb3VzQmxvY2soc3R5bGUoKS5kaXNwbGF5KCkpOwotICAg
ICAgICBzZXR1cElubmVyU3R5bGUoJm1faW5uZXItPnN0eWxlKCkpOworICAgICAgICBzZXR1cElu
bmVyU3R5bGUoJm1faW5uZXItPm11dGFibGVTdHlsZSgpKTsKICAgICAgICAgUmVuZGVyRmxleGli
bGVCb3g6OmFkZENoaWxkKG1faW5uZXIpOwogICAgIH0KICAgICAKQEAgLTk3LDkgKzk3LDkgQEAg
dm9pZCBSZW5kZXJCdXR0b246OnN0eWxlV2lsbENoYW5nZShTdHlsZQogICAgICAgICAvLyBpdCBy
aWdodCBiZWxvdy4gSGVyZSB3ZSBjaGFuZ2UgaXQgYmFjayB0byAwIHRvIGF2b2lkIGdldHRpbmcg
YSBzcHVyaW91cyBsYXlvdXQgaGludAogICAgICAgICAvLyBiZWNhdXNlIG9mIHRoZSBkaWZmZXJl
bmNlLiBTYW1lIGdvZXMgZm9yIHRoZSBvdGhlciBwcm9wZXJ0aWVzLgogICAgICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIGhhY2sgdW5uZWNlc3NhcnkuCi0gICAgICAgIG1faW5uZXItPnN0eWxlKCku
c2V0RmxleEdyb3cobmV3U3R5bGUuaW5pdGlhbEZsZXhHcm93KCkpOwotICAgICAgICBtX2lubmVy
LT5zdHlsZSgpLnNldE1hcmdpblRvcChuZXdTdHlsZS5pbml0aWFsTWFyZ2luKCkpOwotICAgICAg
ICBtX2lubmVyLT5zdHlsZSgpLnNldE1hcmdpbkJvdHRvbShuZXdTdHlsZS5pbml0aWFsTWFyZ2lu
KCkpOworICAgICAgICBtX2lubmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRGbGV4R3JvdyhuZXdTdHls
ZS5pbml0aWFsRmxleEdyb3coKSk7CisgICAgICAgIG1faW5uZXItPm11dGFibGVTdHlsZSgpLnNl
dE1hcmdpblRvcChuZXdTdHlsZS5pbml0aWFsTWFyZ2luKCkpOworICAgICAgICBtX2lubmVyLT5t
dXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5Cb3R0b20obmV3U3R5bGUuaW5pdGlhbE1hcmdpbigpKTsK
ICAgICB9CiAgICAgUmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZShkaWZmLCBuZXdTdHlsZSk7
CiB9CkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBSZW5kZXJCdXR0b246OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRAogICAgIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7
CiAKICAgICBpZiAobV9pbm5lcikgLy8gUmVuZGVyQmxvY2sgaGFuZGxlZCB1cGRhdGluZyB0aGUg
YW5vbnltb3VzIGJsb2NrJ3Mgc3R5bGUuCi0gICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5l
ci0+c3R5bGUoKSk7CisgICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5lci0+bXV0YWJsZVN0
eWxlKCkpOwogfQogCiB2b2lkIFJlbmRlckJ1dHRvbjo6c2V0dXBJbm5lclN0eWxlKFJlbmRlclN0
eWxlKiBpbm5lclN0eWxlKSAKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6
bGF5b3V0KCkKICAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7CiAKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIG5vdCBiZSBhZGp1c3Rpbmcgc3R5bGVzIGR1cmluZyBsYXlvdXQuIFNlZSA8
cmRhcjovL3Byb2JsZW0vNzY3NTQ5Mz4uCi0gICAgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJvdW5k
Qm9yZGVyUmFkaXVzKHN0eWxlKCksICp0aGlzKTsKKyAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0
Um91bmRCb3JkZXJSYWRpdXMobXV0YWJsZVN0eWxlKCksICp0aGlzKTsKIH0KICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2NSw3ICsxNjUsNyBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9yQ2hp
bGQoCiAKIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpzdHlsZVdpbGxDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkKIHsKLSAg
ICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmc3R5bGUo
KSA6IG51bGxwdHI7CisgICAgYXV0byogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkg
PyAmc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKG9sZFN0eWxlICYmICFvbGRTdHlsZS0+bGlu
ZUNsYW1wKCkuaXNOb25lKCkgJiYgbmV3U3R5bGUubGluZUNsYW1wKCkuaXNOb25lKCkpCiAgICAg
ICAgIGNsZWFyTGluZUNsYW1wKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDExICsyMDUs
NiBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gUmVuZGVyRWxlbWVudDo6CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLWVudW0gU3R5bGVDYWNoZVN0YXRlIHsKLSAgICBDYWNoZWQsCi0gICAg
VW5jYWNoZWQKLX07Ci0KIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRWxlbWVu
dDo6dW5jYWNoZWRGaXJzdExpbmVTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAg
ICAgaWYgKCF2aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpCkBAIC0yMjEsMTQgKzIxNiwxNCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVsZW1lCiAgICAgICAgIGlmIChS
ZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2sgPSByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmZp
cnN0TGluZUJsb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2stPmdldFVu
Y2FjaGVkUHNldWRvU3R5bGUoUHNldWRvU3R5bGVSZXF1ZXN0KEZJUlNUX0xJTkUpLCBzdHlsZSwg
Zmlyc3RMaW5lQmxvY2sgPT0gdGhpcyA/IHN0eWxlIDogbnVsbHB0cik7CiAgICAgfSBlbHNlIGlm
ICghcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5pc0Fub255bW91cygpICYmIHJlbmRlcmVyRm9y
Rmlyc3RMaW5lU3R5bGUuaXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUgPSByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExp
bmVTdHlsZSgpOworICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IHJlbmRlcmVyRm9yRmlyc3RM
aW5lU3R5bGUucGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGlmICgmcGFyZW50
U3R5bGUgIT0gJnJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCktPnN0eWxlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5nZXRVbmNhY2hlZFBz
ZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChGSVJTVF9MSU5FX0lOSEVSSVRFRCksICZwYXJl
bnRTdHlsZSwgc3R5bGUpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVuZGVy
U3R5bGUqIFJlbmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TGluZVN0eWxlKCkgY29uc3QKK2NvbnN0
IFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKHZpZXcoKS51c2VzRmlyc3RMaW5lUnVsZXMoKSk7CiAKQEAgLTIzOCwx
MCArMjMzLDEwIEBAIFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdEwKICAg
ICAgICAgaWYgKFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jayA9IHJlbmRlcmVyRm9yRmlyc3RM
aW5lU3R5bGUuZmlyc3RMaW5lQmxvY2soKSkKICAgICAgICAgICAgIHJldHVybiBmaXJzdExpbmVC
bG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTElORSwgJnN0eWxlKCkpOwogICAgIH0g
ZWxzZSBpZiAoIXJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuaXNBbm9ueW1vdXMoKSAmJiByZW5k
ZXJlckZvckZpcnN0TGluZVN0eWxlLmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgUmVuZGVy
U3R5bGUmIHBhcmVudFN0eWxlID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+
Zmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAgYXV0byYgcGFyZW50U3R5bGUgPSByZW5kZXJlckZv
ckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBpZiAo
JnBhcmVudFN0eWxlICE9ICZyZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5zdHls
ZSgpKSB7CiAgICAgICAgICAgICAvLyBBIGZpcnN0LWxpbmUgc3R5bGUgaXMgaW4gZWZmZWN0LiBD
YWNoZSBhIGZpcnN0LWxpbmUgc3R5bGUgZm9yIG91cnNlbHZlcy4KLSAgICAgICAgICAgIHJlbmRl
cmVyRm9yRmlyc3RMaW5lU3R5bGUuc3R5bGUoKS5zZXRIYXNQc2V1ZG9TdHlsZShGSVJTVF9MSU5F
X0lOSEVSSVRFRCk7CisgICAgICAgICAgICByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLm1fc3R5
bGUuc2V0SGFzUHNldWRvU3R5bGUoRklSU1RfTElORV9JTkhFUklURUQpOwogICAgICAgICAgICAg
cmV0dXJuIHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoRklS
U1RfTElORV9JTkhFUklURUQsICZwYXJlbnRTdHlsZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0y
NDksNyArMjQ0LDcgQEAgUmVuZGVyU3R5bGUqIFJlbmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TAog
ICAgIHJldHVybiAmc3R5bGUoKTsKIH0KIAotUmVuZGVyU3R5bGUmIFJlbmRlckVsZW1lbnQ6OmZp
cnN0TGluZVN0eWxlKCkgY29uc3QKK2NvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJFbGVtZW50Ojpm
aXJzdExpbmVTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHZpZXcoKS51c2VzRmlyc3RMaW5l
UnVsZXMoKSA/ICpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsKIH0KQEAgLTgwNiw3
ICs4MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmVuZGVyZXJIYXNCYWNrZ3JvdW5kCiAKIHZv
aWQgUmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
ID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8q
IG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOwog
ICAgIGlmIChvbGRTdHlsZSkgewogICAgICAgICAvLyBJZiBvdXIgei1pbmRleCBjaGFuZ2VzIHZh
bHVlIG9yIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8gZGly
dHkgb3VyIHN0YWNraW5nIGNvbnRleHQncyB6LW9yZGVyIGxpc3QuCkBAIC0xNTM1LDcgKzE1MzAs
MjIgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjphZGRDb250cm9sU3RhdGVzRm9yUgogICAgIGNvbnRy
b2xTdGF0ZXNSZW5kZXJlck1hcCgpLmFkZChvLCBzdGF0ZXMpOwogfQogCi1SZW5kZXJTdHlsZSog
UmVuZGVyRWxlbWVudDo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0Citjb25zdCBSZW5kZXJTdHlsZSogUmVuZGVyRWxl
bWVudDo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpIGNvbnN0Cit7CisgICAgaWYgKHBzZXVkbyA8IEZJUlNUX0lOVEVS
TkFMX1BTRVVET0lEICYmICFzdHlsZSgpLmhhc1BzZXVkb1N0eWxlKHBzZXVkbykpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgUmVuZGVyU3R5bGUqIGNhY2hlZFN0eWxlID0gc3R5bGUo
KS5nZXRDYWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG8pOworICAgIGlmIChjYWNoZWRTdHlsZSkKKyAg
ICAgICAgcmV0dXJuIGNhY2hlZFN0eWxlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiByZXN1bHQgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChw
c2V1ZG8pLCBwYXJlbnRTdHlsZSk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUmPihtX3N0eWxlKS5hZGRDYWNoZWRQc2V1ZG9TdHlsZShXVEZN
b3ZlKHJlc3VsdCkpOworICAgIHJldHVybiBudWxscHRyOworfQorCitSZW5kZXJTdHlsZSogUmVu
ZGVyRWxlbWVudDo6Z2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywg
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmIChwc2V1ZG8gPCBGSVJT
VF9JTlRFUk5BTF9QU0VVRE9JRCAmJiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG8pKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE1NDYsMTEgKzE1NTYsMTEgQEAgUmVuZGVyU3R5
bGUqIFJlbmRlckVsZW1lbnQ6OmdldENhY2hlZFBzZQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiByZXN1bHQgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVx
dWVzdChwc2V1ZG8pLCBwYXJlbnRTdHlsZSk7CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0
dXJuIHN0eWxlKCkuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAg
ICAgcmV0dXJuIG1fc3R5bGUuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RGTW92ZShyZXN1bHQpKTsK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBS
ZW5kZXJFbGVtZW50OjpnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKGNvbnN0IFBzZXVkb1N0eWxlUmVx
dWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRl
clN0eWxlKiBvd25TdHlsZSkgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVu
ZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlcXVl
c3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogb3duU3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHBzZXVkb1N0eWxl
UmVxdWVzdC5wc2V1ZG9JZCA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEICYmICFvd25TdHlsZSAm
JiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwNjYsNyArMjA3Niw3IEBAIHZvaWQgUmVuZGVy
RWxlbWVudDo6cGFpbnRPdXRsaW5lKFBhaW50SW4KICAgICBpZiAoIWhhc091dGxpbmUoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwor
ICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIGZsb2F0IG91dGxpbmVXaWR0aCA9
IGZsb29yVG9EZXZpY2VQaXhlbChzdHlsZVRvVXNlLm91dGxpbmVXaWR0aCgpLCBkb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIGZsb2F0IG91dGxpbmVPZmZzZXQgPSBmbG9vclRv
RGV2aWNlUGl4ZWwoc3R5bGVUb1VzZS5vdXRsaW5lT2Zmc2V0KCksIGRvY3VtZW50KCkuZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsMTEgQEAgcHVibGljOgog
CiAgICAgYm9vbCBoYXNJbml0aWFsaXplZFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbml0
aWFsaXplZFN0eWxlOyB9CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVy
biBjb25zdF9jYXN0PFJlbmRlclN0eWxlJj4obV9zdHlsZSk7IH0KLSAgICBSZW5kZXJTdHlsZSYg
Zmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGlu
ZVN0eWxlKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogU3R5bGUgc2hvdWxkbid0IGJlIG11dGF0
ZWQuCisgICAgUmVuZGVyU3R5bGUmIG11dGFibGVTdHlsZSgpIHsgcmV0dXJuIG1fc3R5bGU7IH0K
IAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0eWxlKCk7CiAKQEAgLTUyLDggKzU1LDkgQEAgcHVibGlj
OgogCiAgICAgLy8gVGhlIHBzZXVkbyBlbGVtZW50IHN0eWxlIGNhbiBiZSBjYWNoZWQgb3IgdW5j
YWNoZWQuICBVc2UgdGhlIGNhY2hlZCBtZXRob2QgaWYgdGhlIHBzZXVkbyBlbGVtZW50IGRvZXNu
J3QgcmVzcGVjdAogICAgIC8vIGFueSBwc2V1ZG8gY2xhc3NlcyAoYW5kIHRoZXJlZm9yZSBoYXMg
bm8gY29uY2VwdCBvZiBjaGFuZ2luZyBzdGF0ZSkuCi0gICAgUmVuZGVyU3R5bGUqIGdldENhY2hl
ZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRy
KSBjb25zdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldFVuY2FjaGVkUHNl
dWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gbnVsbHB0ciwgUmVuZGVyU3R5bGUqIG93blN0eWxlID0gbnVsbHB0cikgY29uc3Q7Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKSBjb25zdDsKKyAgICBSZW5kZXJT
dHlsZSogZ2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0Jiwg
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0ciwgY29uc3QgUmVuZGVyU3R5
bGUqIG93blN0eWxlID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICAvLyBUaGlzIGlzIG51bGwgZm9y
IGFub255bW91cyByZW5kZXJlcnMuCiAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6bm9kZSgpKTsgfQpAQCAtMjk4LDcg
KzMwMiw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFN0eWxlRGlmZmVyZW5jZSBhZGp1c3RT
dHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlLCB1bnNpZ25lZCBjb250ZXh0U2Vuc2l0aXZl
UHJvcGVydGllcykgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUqIGNhY2hlZEZpcnN0TGluZVN0eWxl
KCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNhY2hlZEZpcnN0TGluZVN0eWxlKCkg
Y29uc3Q7CiAKICAgICB2b2lkIG5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUoQ2FjaGVk
SW1hZ2UmKSBmaW5hbDsKIApAQCAtNDUwLDE0ICs0NTQsMTQgQEAgaW5saW5lIGJvb2wgUmVuZGVy
T2JqZWN0Ojppc1JlbmRlcklubGluZQogICAgIHJldHVybiBpczxSZW5kZXJFbGVtZW50PigqdGhp
cykgJiYgZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpLmlzUmVuZGVySW5saW5lKCk7CiB9
CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpzdHlsZSgpIGNvbnN0Citpbmxp
bmUgY29uc3QgUmVuZGVyU3R5bGUmIFJlbmRlck9iamVjdDo6c3R5bGUoKSBjb25zdAogewogICAg
IGlmIChpc1RleHQoKSkKICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zdHlsZSgpOwogICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykuc3R5bGUoKTsKIH0KIAotaW5saW5l
IFJlbmRlclN0eWxlJiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QKK2lubGlu
ZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZSgpIGNvbnN0
CiB7CiAgICAgaWYgKGlzVGV4dCgpKQogICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmZpcnN0TGlu
ZVN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMiw4
ICs1MjIsOCBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQoKQogICAgIExheW91
dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksICp0aGlzLCBsb2NhdGlvbk9mZnNl
dCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGUoKS5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKICAgICAKICAgICBjaGlsZEJveC5zZXRMb2NhdGlvbihM
YXlvdXRQb2ludChib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSArIExheW91dFNpemUocGFkZGlu
Z0xlZnQoKSwgcGFkZGluZ1RvcCgpKSk7Ci0gICAgY2hpbGRCb3guc3R5bGUoKS5zZXRIZWlnaHQo
TGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgY2hpbGRCb3guc3R5bGUoKS5z
ZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGNoaWxkQm94Lm11
dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
KyAgICBjaGlsZEJveC5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0
aCgpLCBGaXhlZCkpOwogICAgIGNoaWxkQm94LnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
CiAgICAgY2hpbGRCb3gubGF5b3V0KCk7CiAgICAgY2xlYXJDaGlsZE5lZWRzTGF5b3V0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1Ro
cmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgUmVuZGVyRmxvd1RocmVh
ZDo6UmVuZGVyRmxvd1RocmVhZChEb2N1bQogICAgIHNldEZsb3dUaHJlYWRTdGF0ZShJbnNpZGVP
dXRPZkZsb3dUaHJlYWQpOwogfQogCi1SZW5kZXJTdHlsZSBSZW5kZXJGbG93VGhyZWFkOjpjcmVh
dGVGbG93VGhyZWFkU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorUmVuZGVyU3R5bGUg
UmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRlRmxvd1RocmVhZFN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSkKIHsKICAgICBhdXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpOwogICAgIG5ld1N0eWxlLmluaGVyaXRGcm9tKHBhcmVudFN0eWxlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBk
ZXNjZW5kYW50IGJveCdzIGxheW91dCBpcyBmaW5pc2hlZCBhbmQgaXQgaGFzIGJlZW4gcG9zaXRp
b25lZCB3aXRoaW4gaXRzIGNvbnRhaW5lci4KICAgICB2aXJ0dWFsIHZvaWQgZmxvd1RocmVhZERl
c2NlbmRhbnRCb3hMYWlkT3V0KFJlbmRlckJveCopIHsgfQogCi0gICAgc3RhdGljIFJlbmRlclN0
eWxlIGNyZWF0ZUZsb3dUaHJlYWRTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAg
IHN0YXRpYyBSZW5kZXJTdHlsZSBjcmVhdGVGbG93VGhyZWFkU3R5bGUoY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcxNiw4ICs3MTYsOCBAQCB2b2lkIFJlbmRlckltYWdlOjpsYXlvdXRTaGFkb3dDb250cm9s
cyhjCiAKICAgICBpZiAoc2hhZG93Q29udHJvbHNOZWVkQ3VzdG9tTGF5b3V0TWV0cmljcygpKSB7
CiAgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldExvY2F0aW9uKExheW91dFBvaW50KGJvcmRl
ckxlZnQoKSwgYm9yZGVyVG9wKCkpICsgTGF5b3V0U2l6ZShwYWRkaW5nTGVmdCgpLCBwYWRkaW5n
VG9wKCkpKTsKLSAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVu
Z3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgICAgIGNvbnRyb2xzUmVuZGVyZXIt
PnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKG5ld1NpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICAg
ICAgY29udHJvbHNSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aChuZXdT
aXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5tdXRhYmxl
U3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwogICAgIH0K
IAogICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3R5bGVE
aWRDaGFuZ2UoU3R5bGVECiAgICAgLy8gZS5nLiwgPGZvbnQ+Zm9vIDxoND5nb288L2g0PiBtb288
L2ZvbnQ+LiAgVGhlIDxmb250PiBpbmxpbmVzIGJlZm9yZQogICAgIC8vIGFuZCBhZnRlciB0aGUg
YmxvY2sgc2hhcmUgdGhlIHNhbWUgc3R5bGUsIGJ1dCB0aGUgYmxvY2sgZG9lc24ndAogICAgIC8v
IG5lZWQgdG8gcGFzcyBpdHMgc3R5bGUgb24gdG8gYW55b25lIGVsc2UuCi0gICAgUmVuZGVyU3R5
bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAg
ICAgUmVuZGVySW5saW5lKiBjb250aW51YXRpb24gPSBpbmxpbmVFbGVtZW50Q29udGludWF0aW9u
KCk7CiAgICAgaWYgKGNvbnRpbnVhdGlvbikgewogICAgICAgICBmb3IgKFJlbmRlcklubGluZSog
Y3VyckNvbnQgPSBjb250aW51YXRpb247IGN1cnJDb250OyBjdXJyQ29udCA9IGN1cnJDb250LT5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpIHsKQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIFJl
bmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgaWYgKGFsd2F5c0NyZWF0ZUxp
bmVCb3hlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSAmcGFyZW50KCktPnN0eWxlKCk7CisgICAgYXV0byogcGFyZW50U3R5bGUgPSAmcGFyZW50
KCktPnN0eWxlKCk7CiAgICAgUmVuZGVySW5saW5lKiBwYXJlbnRSZW5kZXJJbmxpbmUgPSBpczxS
ZW5kZXJJbmxpbmU+KCpwYXJlbnQoKSkgPyBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBhcmVudCgp
KSA6IG51bGxwdHI7CiAgICAgYm9vbCBjaGVja0ZvbnRzID0gZG9jdW1lbnQoKS5pbk5vUXVpcmtz
TW9kZSgpOwogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnVw
ZGF0ZUFsd2F5c0NyZWF0ZUxpbgogICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzICYmIGNo
ZWNrRm9udHMgJiYgdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CiAgICAgICAgIC8vIEhh
dmUgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5bGUgYXMgd2VsbC4KICAgICAgICAgcGFyZW50
U3R5bGUgPSAmcGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7Ci0gICAgICAgIFJlbmRlclN0eWxl
JiBjaGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAgYXV0byYgY2hpbGRTdHls
ZSA9IGZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9ICFw
YXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2Vu
dERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygp
KQogICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUK
ICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gY2hpbGRTdHlsZS5s
aW5lSGVpZ2h0KCk7CkBAIC0xNjAxLDcgKzE2MDEsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFp
bnRPdXRsaW5lKFBhaW50SW5mCiAgICAgaWYgKCFoYXNPdXRsaW5lKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBz
dHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICAvLyBPbmx5IHBhaW50IHRoZSBmb2N1cyByaW5nIGJ5
IGhhbmQgaWYgdGhlIHRoZW1lIGlzbid0IGFibGUgdG8gZHJhdyBpdC4KICAgICBpZiAoc3R5bGVU
b1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZyhz
dHlsZVRvVXNlKSkgewogICAgICAgICBWZWN0b3I8TGF5b3V0UmVjdD4gZm9jdXNSaW5nUmVjdHM7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxMTEsNyArNDExMSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVw
Q2xpcFBhdGgoR3JhcGhpY3MKICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQgPSB0
cnVlOwogICAgIH0KIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUo
KTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKICAgICBBU1NFUlQoc3R5
bGUuY2xpcFBhdGgoKSk7CiAgICAgaWYgKGlzPFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCpzdHls
ZS5jbGlwUGF0aCgpKSB8fCAoaXM8Qm94Q2xpcFBhdGhPcGVyYXRpb24+KCpzdHlsZS5jbGlwUGF0
aCgpKSAmJiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSkgewogICAgICAgICBXaW5kUnVsZSB3
aW5kUnVsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICBtX3ZCYXItPnBhaW50KHBhaW50SW5m
by5jb250ZXh0KCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKLXN0YXRp
YyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5k
ZXJTdHlsZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBpdGVtRm9udCwgTGF5b3V0UmVjdCBpdGVt
Qm91ZGluZ0JveCkKK3N0YXRpYyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4
dFJ1biB0ZXh0UnVuLCBjb25zdCBSZW5kZXJTdHlsZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBp
dGVtRm9udCwgTGF5b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKIHsKICAgICBFVGV4dEFsaWduIGFj
dHVhbEFsaWdubWVudCA9IGl0ZW1TdHlsZS0+dGV4dEFsaWduKCk7CiAgICAgLy8gRklYTUU6IEZp
cmVmb3ggZG9lc24ndCByZXNwZWN0IEpVU1RJRlkuIFNob3VsZCB3ZT8KQEAgLTM3OSw3ICszNzks
NyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoCiAgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdEVsZW1lbnQoKS5saXN0SXRl
bXMoKTsKICAgICBIVE1MRWxlbWVudCogbGlzdEl0ZW1FbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJ
bmRleF07CiAKLSAgICBSZW5kZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+
Y29tcHV0ZWRTdHlsZSgpOworICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICpsaXN0SXRlbUVsZW1lbnQt
PmNvbXB1dGVkU3R5bGUoKTsKIAogICAgIGlmIChpdGVtU3R5bGUudmlzaWJpbGl0eSgpID09IEhJ
RERFTikKICAgICAgICAgcmV0dXJuOwpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgUmVuZGVyTGlz
dEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCgKIHsKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudCgpLmxpc3RJdGVtcygpOwogICAgIEhUTUxF
bGVtZW50KiBsaXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKLSAgICBSZW5k
ZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwor
ICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICpsaXN0SXRlbUVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsK
IAogICAgIENvbG9yIGJhY2tDb2xvcjsKICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCps
aXN0SXRlbUVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1F
bGVtZW50KS5zZWxlY3RlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDgs
OCArMTcwOCw4IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucygpCiAgICAg
ICAgIAogICAgIH0KIAotICAgIHN0eWxlKCkuc2V0TWFyZ2luU3RhcnQoTGVuZ3RoKG1hcmdpblN0
YXJ0LCBGaXhlZCkpOwotICAgIHN0eWxlKCkuc2V0TWFyZ2luRW5kKExlbmd0aChtYXJnaW5FbmQs
IEZpeGVkKSk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luU3RhcnQoTGVuZ3RoKG1hcmdp
blN0YXJ0LCBGaXhlZCkpOworICAgIG11dGFibGVTdHlsZSgpLnNldE1hcmdpbkVuZChMZW5ndGgo
bWFyZ2luRW5kLCBGaXhlZCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckxpc3RNYXJrZXI6Omxp
bmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGlu
ZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTAsNyArMTEwLDcgQEAgaW50IFJlbmRlck1hcnF1ZWU6OmNvbXB1dGVQb3NpdGlvbihFTWFy
cQogewogICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci0+cmVuZGVyQm94KCk7CiAgICAgQVNT
RVJUKGJveCk7Ci0gICAgUmVuZGVyU3R5bGUmIGJveFN0eWxlID0gYm94LT5zdHlsZSgpOworICAg
IGF1dG8mIGJveFN0eWxlID0gYm94LT5zdHlsZSgpOwogICAgIGlmIChpc0hvcml6b250YWwoKSkg
ewogICAgICAgICBib29sIGx0ciA9IGJveFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsK
ICAgICAgICAgTGF5b3V0VW5pdCBjbGllbnRXaWR0aCA9IGJveC0+Y2xpZW50V2lkdGgoKTsKQEAg
LTE5Nyw3ICsxOTcsNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlv
CiAKIHZvaWQgUmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVlZVN0eWxlKCkKIHsKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCk7CisgICAgYXV0byYg
c3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLm11dGFibGVTdHlsZSgpOwogICAgIAogICAgIGlm
IChtX2RpcmVjdGlvbiAhPSBzdHlsZS5tYXJxdWVlRGlyZWN0aW9uKCkgfHwgKG1fdG90YWxMb29w
cyAhPSBzdHlsZS5tYXJxdWVlTG9vcENvdW50KCkgJiYgbV9jdXJyZW50TG9vcCA+PSBtX3RvdGFs
TG9vcHMpKQogICAgICAgICBtX2N1cnJlbnRMb29wID0gMDsgLy8gV2hlbiBkaXJlY3Rpb24gY2hh
bmdlcyBvciBvdXIgbG9vcENvdW50IGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiBvdXIgY3VycmVu
dCBsb29wLCByZXNldCBvdXIgbG9vcC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEw
OSw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZUlubmVyQmxvY2soKQogCiB2b2lkIFJl
bmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgaW5u
ZXJTdHlsZSA9IG1faW5uZXJCbG9jay0+c3R5bGUoKTsKKyAgICBhdXRvJiBpbm5lclN0eWxlID0g
bV9pbm5lckJsb2NrLT5tdXRhYmxlU3R5bGUoKTsKICAgICBpbm5lclN0eWxlLnNldEZsZXhHcm93
KDEpOwogICAgIGlubmVyU3R5bGUuc2V0RmxleFNocmluaygxKTsKICAgICAvLyBtaW4td2lkdGg6
IDA7IGlzIG5lZWRlZCBmb3IgY29ycmVjdCBzaHJpbmtpbmcuCkBAIC0yMTUsNyArMjE1LDcgQEAg
dm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKAogICAgICAgICBpZiAodGhl
bWUoKS5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAgICAgICAgICAgICAvLyBB
ZGQgaW4gdGhlIG9wdGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3QgY2FsY3VsYXRlIHBlcmNl
bnRhZ2UgdmFsdWVzIGZvciBub3cuCiAgICAgICAgICAgICBmbG9hdCBvcHRpb25XaWR0aCA9IDA7
Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIG9wdGlvblN0eWxlID0gZWxlbWVudC0+Y29t
cHV0ZWRTdHlsZSgpKQorICAgICAgICAgICAgaWYgKGF1dG8qIG9wdGlvblN0eWxlID0gZWxlbWVu
dC0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICAgICAgICAgIG9wdGlvbldpZHRoICs9IG1pbmlt
dW1WYWx1ZUZvckxlbmd0aChvcHRpb25TdHlsZS0+dGV4dEluZGVudCgpLCAwKTsKICAgICAgICAg
ICAgIGlmICghdGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKQEAgLTUxOSw3ICs1MTksNyBAQCBQ
b3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAgICAgYm9vbCBpdGVtSGFz
Q3VzdG9tQmFja2dyb3VuZENvbG9yOwogICAgIGdldEl0ZW1CYWNrZ3JvdW5kQ29sb3IobGlzdElu
ZGV4LCBpdGVtQmFja2dyb3VuZENvbG9yLCBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENvbG9yKTsK
IAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9ICplbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7Cisg
ICAgYXV0byYgc3R5bGUgPSAqZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogICAgIHJldHVybiBQ
b3B1cE1lbnVTdHlsZShzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
ciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLmZvbnRDYXNjYWRlKCksIHN0eWxlLnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZS5kaXNwbGF5KCkgPT0gTk9ORSwgdHJ1
ZSwgc3R5bGUudGV4dEluZGVudCgpLCBzdHlsZS5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShzdHls
ZS51bmljb2RlQmlkaSgpKSwKICAgICAgICAgaXRlbUhhc0N1c3RvbUJhY2tncm91bmRDb2xvciA/
IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IgOiBQb3B1cE1lbnVTdHlsZTo6
RGVmYXVsdEJhY2tncm91bmRDb2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBzdGF0aWMgYm9v
bCBpc1ZhbGlkQ29sdW1uU3Bhbm5lcihSZW5kZXJNCiAgICAgQVNTRVJUKGRlc2NlbmRhbnQtPmlz
RGVzY2VuZGFudE9mKGZsb3dUaHJlYWQpKTsKIAogICAgIC8vIEZpcnN0IG1ha2Ugc3VyZSB0aGF0
IHRoZSByZW5kZXJlciBpdHNlbGYgaGFzIHRoZSByaWdodCBwcm9wZXJ0aWVzIGZvciBiZWNvbWlu
ZyBhIHNwYW5uZXIuCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gZGVzY2VuZGFudC0+c3R5bGUo
KTsKKyAgICBhdXRvJiBzdHlsZSA9IGRlc2NlbmRhbnQtPnN0eWxlKCk7CiAgICAgaWYgKHN0eWxl
LmNvbHVtblNwYW4oKSAhPSBDb2x1bW5TcGFuQWxsIHx8ICFpczxSZW5kZXJCb3g+KCpkZXNjZW5k
YW50KSB8fCBkZXNjZW5kYW50LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIu
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIqIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyOjpjcmVh
dGVBbm9ueW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBmbG93VGhyZWFkLCBSZW5k
ZXJCb3gqIHNwYW5uZXIsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK1JlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
cjo6Y3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogZmxvd1RocmVh
ZCwgUmVuZGVyQm94KiBzcGFubmVyLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7
CiAgICAgYXV0byBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdp
dGhEaXNwbGF5KCpwYXJlbnRTdHlsZSwgQkxPQ0spOwogICAgIG5ld1N0eWxlLnNldENsZWFyKENC
T1RIKTsgLy8gV2UgZG9uJ3Qgd2FudCBmbG9hdHMgaW4gdGhlIHJvdyBwcmVjZWRpbmcgdGhlIHNw
YW5uZXIgdG8gY29udGludWUgb24gdGhlIG90aGVyIHNpZGUuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXIuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOwogCiBj
bGFzcyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciBmaW5hbCA6IHB1YmxpYyBS
ZW5kZXJCb3ggewogcHVibGljOgotICAgIHN0YXRpYyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlciogY3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCos
IFJlbmRlckJveCogc3Bhbm5lciwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICBzdGF0
aWMgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIGNyZWF0ZUFub255bW91cyhS
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqLCBSZW5kZXJCb3gqIHNwYW5uZXIsIGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICBSZW5kZXJCb3gqIHNwYW5uZXIoKSBjb25z
dCB7IHJldHVybiBtX3NwYW5uZXI7IH0KICAgICBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQq
IGZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2Zsb3dUaHJlYWQ7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNw
cAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd0ZyYWdtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZv
aWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNoZWNrUmVnaW8KICAgICBkb3duY2FzdDxSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQ+KCptX2Zsb3dUaHJlYWQpLmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5n
KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5k
ZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbihSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKSBjb25zdAogewog
ICAgIEFTU0VSVCghcmVuZGVyZXIuaXNBbm9ueW1vdXMoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQiOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IGNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmLCBSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gY29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSkgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVn
aW9uKFJlbmRlckVsZW1lbnQmKTsKICAgICB2b2lkIHNldE9iamVjdFN0eWxlSW5SZWdpb24oUmVu
ZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiwgYm9vbCBvYmplY3RSZWdp
b25TdHlsZUNhY2hlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyMiw3ICsxODIyLDcgQEAgaW50
IFJlbmRlck9iamVjdDo6aW5uZXJMaW5lSGVpZ2h0KCkgY29ucwogICAgIHJldHVybiBzdHlsZSgp
LmNvbXB1dGVkTGluZUhlaWdodCgpOwogfQogCi1zdGF0aWMgQ29sb3IgZGVjb3JhdGlvbkNvbG9y
KFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBDb2xvciBkZWNvcmF0aW9uQ29sb3IoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIENvbG9yIHJlc3VsdDsKICAgICAvLyBDaGVjayBm
b3IgdGV4dCBkZWNvcmF0aW9uIGNvbG9yIGZpcnN0LgpAQCAtMTg0NCw3ICsxODQ0LDcgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sbwogICAgIFRleHREZWNvcmF0aW9u
U3R5bGUmIHVuZGVybGluZVN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxlJiBvdmVybGluZVN0eWxl
LCBUZXh0RGVjb3JhdGlvblN0eWxlJiBsaW5ldGhyb3VnaFN0eWxlLCBib29sIGZpcnN0bGluZVN0
eWxlKSBjb25zdAogewogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCA9IHRoaXM7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBudWxscHRyOworICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZVRvVXNlID0gbnVsbHB0cjsKICAgICBUZXh0RGVjb3JhdGlvbiBjdXJyRGVjcyA9
IFRleHREZWNvcmF0aW9uTm9uZTsKICAgICBDb2xvciByZXN1bHRDb2xvcjsKICAgICBkbyB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY5Nyw4ICs2OTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0
IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0
dWFsIExheW91dFVuaXQgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
MDsgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUm
IGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkg
Y29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CiAK
ICAgICAvLyBBbm9ueW1vdXMgYmxvY2tzIHRoYXQgYXJlIHBhcnQgb2Ygb2YgYSBjb250aW51YXRp
b24gY2hhaW4gd2lsbCByZXR1cm4gdGhlaXIgaW5saW5lIGNvbnRpbnVhdGlvbidzIG91dGxpbmUg
c3R5bGUgaW5zdGVhZC4KICAgICAvLyBUaGlzIGlzIHR5cGljYWxseSBvbmx5IHJlbGV2YW50IHdo
ZW4gcmVwYWludGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQgUmVuZGVy
VGFibGU6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2EKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jYXB0aW9ucy5zaXplKCk7IGkrKykKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSBzdGQ6Om1heChtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgbV9jYXB0aW9uc1tp
XS0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkpOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxl
VG9Vc2UgPSBzdHlsZSgpOworICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBjaGVja2luZyBmb3IgaXNTcGVjaWZpZWQg
c2luY2UgeW91IHNob3VsZCBiZSBhYmxlIHRvIHVzZSBwZXJjZW50YWdlIG9yIGNhbGMgdmFsdWVz
IGZvciBtaW4td2lkdGguCiAgICAgaWYgKHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkuaXNG
aXhlZCgpICYmIHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsKICAg
ICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdGQ6Om1heChtX21heFByZWZlcnJl
ZExvZ2ljYWxXaWR0aCwgYWRqdXN0Q29udGVudEJveExvZ2ljYWxXaWR0aEZvckJveFNpemluZyhz
dHlsZVRvVXNlLmxvZ2ljYWxNaW5XaWR0aCgpLnZhbHVlKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE5OCw3ICsxMTk4LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rp
b246OnBhaW50Um93R3JvdXBCbwogCiB9CiAKLXN0YXRpYyBCb3hTaWRlIHBoeXNpY2FsQm9yZGVy
Rm9yRGlyZWN0aW9uKFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93LCBDb2xsYXBzZWRCb3Jk
ZXJTaWRlIHNpZGUpCitzdGF0aWMgQm94U2lkZSBwaHlzaWNhbEJvcmRlckZvckRpcmVjdGlvbihj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JDZWxsRmxvdywgQ29sbGFwc2VkQm9yZGVyU2lkZSBz
aWRlKQogewogCiAgICAgc3dpdGNoIChzaWRlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGlzVGV4dEZyYWdtZW50KCkgY29uc3Q7CiAKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUo
KSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OworICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBmaXJzdExp
bmVTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBnZXRDYWNoZWRQc2V1ZG9T
dHlsZShQc2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0cikg
Y29uc3Q7CiAKICAgICBDb2xvciBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAg
ICBDb2xvciBzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKQEAgLTI1MSwxNyArMjUx
LDE3IEBAIGlubGluZSBVQ2hhciBSZW5kZXJUZXh0OjpjaGFyYWN0ZXJBdCh1bnMKICAgICByZXR1
cm4gdW5jaGVja2VkQ2hhcmFjdGVyQXQoaSk7CiB9CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVu
ZGVyVGV4dDo6c3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJU
ZXh0OjpzdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcmVudCgpLT5zdHlsZSgpOwogfQog
Ci1pbmxpbmUgUmVuZGVyU3R5bGUmIFJlbmRlclRleHQ6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QK
K2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyVGV4dDo6Zmlyc3RMaW5lU3R5bGUoKSBj
b25zdAogewogICAgIHJldHVybiBwYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKIH0KIAotaW5s
aW5lIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9J
ZCBwc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAoraW5saW5lIGNvbnN0
IFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBw
c2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAgIHJl
dHVybiBwYXJlbnQoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvSWQsIHBhcmVudFN0eWxl
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsOCBAQCB2b2lk
IFJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZShTCiAgICAgaWYgKGlubmVyVGV4dFJl
bmRlcmVyKSB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHNldCB0aGUgd2lkdGggYW5kIHRoZSBo
ZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KICAgICAgICAgLy8gUmVzZXQgdGhl
bSBub3cgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBoaW50LgotICAgICAgICBp
bm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOwotICAgICAgICBp
bm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7CisgICAgICAgIGlu
bmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOworICAg
ICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkp
OwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0U3R5bGUodGV4dEZvcm1Db250cm9sRWxl
bWVudCgpLmNyZWF0ZUlubmVyVGV4dFN0eWxlKHN0eWxlKCkpKTsKICAgICB9CiAgICAgdGV4dEZv
cm1Db250cm9sRWxlbWVudCgpLnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3
ICs5Miw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUKICAgICBS
ZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyUmVuZGVyZXIgPSBSZW5kZXJUZXh0Q29udHJvbDo6bGF5
b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7CiAgICAgaWYgKGlzPFJl
bmRlckJveD4ocGxhY2Vob2xkZXJSZW5kZXJlcikpIHsKICAgICAgICAgYXV0byYgcGxhY2Vob2xk
ZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpwbGFjZWhvbGRlclJlbmRlcmVyKTsKLSAgICAg
ICAgcGxhY2Vob2xkZXJCb3guc3R5bGUoKS5zZXRMb2dpY2FsV2lkdGgoTGVuZ3RoKGNvbnRlbnRM
b2dpY2FsV2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lk
dGgoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gubXV0YWJsZVN0eWxlKCkuc2V0
TG9naWNhbFdpZHRoKExlbmd0aChjb250ZW50TG9naWNhbFdpZHRoKCkgLSBwbGFjZWhvbGRlckJv
eC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCksIEZpeGVkKSk7CiAgICAgICAgIHBsYWNl
aG9sZGVyQm94LmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIHBsYWNlaG9sZGVyQm94LnNldFgo
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSk7CiAgICAgICAgIHBsYWNlaG9sZGVyQm94LnNl
dFkoYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTEgKzEwOCwxMSBAQCB2
b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAKICAgICAvLyBUbyBlbnN1
cmUgY29uc2lzdGVuY3kgYmV0d2VlbiBsYXlvdXRzLCB3ZSBuZWVkIHRvIHJlc2V0IGFueSBjb25k
aXRpb25hbGx5IG92ZXJyaWRlbiBoZWlnaHQuCiAgICAgaWYgKGlubmVyVGV4dFJlbmRlcmVyICYm
ICFpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkpIHsK
LSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5n
dGgoQXV0bykpOworICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0
TG9naWNhbEhlaWdodChMZW5ndGgoQXV0bykpOwogICAgICAgICBzZXROZWVkc0xheW91dE9uQW5j
ZXN0b3JzKGlubmVyVGV4dFJlbmRlcmVyLCB0aGlzKTsKICAgICB9CiAgICAgaWYgKGlubmVyQmxv
Y2tSZW5kZXJlciAmJiAhaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQo
KS5pc0F1dG8oKSkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9n
aWNhbEhlaWdodChMZW5ndGgoQXV0bykpOworICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPm11
dGFibGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKICAgICAgICAgc2V0
TmVlZHNMYXlvdXRPbkFuY2VzdG9ycyhpbm5lckJsb2NrUmVuZGVyZXIsIHRoaXMpOwogICAgIH0K
IApAQCAtMTI4LDEwICsxMjgsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmxheW91dAogICAgICAgICBpZiAoZGVzaXJlZExvZ2ljYWxIZWlnaHQgIT0gaW5uZXJUZXh0UmVu
ZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KE1hcmtP
bmx5VGhpcyk7CiAKLSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNh
bEhlaWdodChMZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIGlu
bmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChk
ZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXIt
PnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIGlmIChpbm5lckJsb2NrUmVu
ZGVyZXIpIHsKLSAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dp
Y2FsSGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAg
ICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChM
ZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CiAgICAgICAgICAgICBpbm5lckJs
b2NrUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xNDAsMTMgKzE0MCwxMyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6bGF5b3V0CiAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5sYXlvdXRJZk5lZWRlZCgpOwog
ICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJSZW5k
ZXJlci0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICBpZiAoY29udGFpbmVyTG9naWNhbEhlaWdo
dCA+IGxvZ2ljYWxIZWlnaHRMaW1pdCkgewotICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXIt
PnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgobG9naWNhbEhlaWdodExpbWl0LCBGaXhl
ZCkpOworICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldExv
Z2ljYWxIZWlnaHQoTGVuZ3RoKGxvZ2ljYWxIZWlnaHRMaW1pdCwgRml4ZWQpKTsKICAgICAgICAg
ICAgIHNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29u
dGFpbmVyUmVuZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSA8IGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkp
IHsKLSAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLnNldExvZ2ljYWxIZWln
aHQoTGVuZ3RoKGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCksIEZpeGVkKSk7CisgICAgICAgICAgICBj
b250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgo
Y29udGVudExvZ2ljYWxIZWlnaHQoKSwgRml4ZWQpKTsKICAgICAgICAgICAgIHNldE5lZWRzTGF5
b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29udGFpbmVy
UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoY29udGFpbmVyTG9naWNh
bEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxl
U3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBG
aXhlZCkpOwogICAgIH0KIAogICAgIC8vIElmIHdlIG5lZWQgYW5vdGhlciBsYXlvdXQgcGFzcywg
d2UgaGF2ZSBjaGFuZ2VkIG9uZSBvZiBjaGlsZHJlbidzIGhlaWdodCBzbyB3ZSBuZWVkIHRvIHJl
bGF5b3V0IHRoZW0uCkBAIC0xNzQsOCArMTc0LDggQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmxheW91dAogICAgICAgICBMYXlvdXRTaXplIGlubmVyVGV4dFNpemU7CiAgICAg
ICAgIGlmIChpbm5lclRleHRSZW5kZXJlcikKICAgICAgICAgICAgIGlubmVyVGV4dFNpemUgPSBp
bm5lclRleHRSZW5kZXJlci0+c2l6ZSgpOwotICAgICAgICBwbGFjZWhvbGRlckJveC0+c3R5bGUo
KS5zZXRXaWR0aChMZW5ndGgoaW5uZXJUZXh0U2l6ZS53aWR0aCgpIC0gcGxhY2Vob2xkZXJCb3gt
Pmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCksIEZpeGVkKSk7Ci0gICAgICAgIHBs
YWNlaG9sZGVyQm94LT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5uZXJUZXh0U2l6ZS5oZWln
aHQoKSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwg
Rml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gtPm11dGFibGVTdHlsZSgpLnNldFdpZHRo
KExlbmd0aChpbm5lclRleHRTaXplLndpZHRoKCkgLSBwbGFjZWhvbGRlckJveC0+aG9yaXpvbnRh
bEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJC
b3gtPm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5uZXJUZXh0U2l6ZS5oZWlnaHQo
KSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgRml4
ZWQpKTsKICAgICAgICAgYm9vbCBuZWVkZWRMYXlvdXQgPSBwbGFjZWhvbGRlckJveC0+bmVlZHNM
YXlvdXQoKTsKICAgICAgICAgYm9vbCBwbGFjZWhvbGRlckJveEhhZExheW91dCA9IHBsYWNlaG9s
ZGVyQm94LT5ldmVySGFkTGF5b3V0KCk7CiAgICAgICAgIHBsYWNlaG9sZGVyQm94LT5sYXlvdXRJ
Zk5lZWRlZCgpOwpAQCAtMjM2LDE0ICsyMzYsMTQgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnN0eWxlRAogICAgIC8vIFdlIG1heSBoYXZlIHNldCB0aGUgd2lkdGggYW5kIHRo
ZSBoZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KICAgICAvLyBSZXNldCB0aGVt
IG5vdyB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0IGhpbnQuCiAgICAgSFRNTEVs
ZW1lbnQqIGlubmVyQmxvY2sgPSBpbm5lckJsb2NrRWxlbWVudCgpOwotICAgIGlmIChSZW5kZXJP
YmplY3QqIGlubmVyQmxvY2tSZW5kZXJlciA9IGlubmVyQmxvY2sgPyBpbm5lckJsb2NrLT5yZW5k
ZXJlcigpIDogMCkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCkuc2V0SGVp
Z2h0KExlbmd0aCgpKTsKLSAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLnNldFdp
ZHRoKExlbmd0aCgpKTsKKyAgICBpZiAoYXV0byogaW5uZXJCbG9ja1JlbmRlcmVyID0gaW5uZXJC
bG9jayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCkgOiBudWxscHRyKSB7CisgICAgICAgIGlubmVy
QmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aCgpKTsKKyAgICAg
ICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7
CiAgICAgfQogICAgIEhUTUxFbGVtZW50KiBjb250YWluZXIgPSBjb250YWluZXJFbGVtZW50KCk7
Ci0gICAgaWYgKFJlbmRlck9iamVjdCogY29udGFpbmVyUmVuZGVyZXIgPSBjb250YWluZXIgPyBj
b250YWluZXItPnJlbmRlcmVyKCkgOiAwKSB7Ci0gICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5z
dHlsZSgpLnNldEhlaWdodChMZW5ndGgoKSk7Ci0gICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5z
dHlsZSgpLnNldFdpZHRoKExlbmd0aCgpKTsKKyAgICBpZiAoYXV0byogY29udGFpbmVyUmVuZGVy
ZXIgPSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRlcmVyKCkgOiBudWxscHRyKSB7CisgICAg
ICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkp
OworICAgICAgICBjb250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0V2lkdGgoTGVu
Z3RoKCkpOwogICAgIH0KICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQpIHsK
ICAgICAgICAgaWYgKGF1dG8qIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgp
LT5yZW5kZXJlcigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRG
cmFnbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRGcmFnbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2
OCw3IEBAIHZvaWQgUmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5nZSgKICAgICBSZW5k
ZXJUZXh0OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAKICAgICBpZiAoUmVuZGVy
QmxvY2sqIGJsb2NrID0gYmxvY2tGb3JBY2NvbXBhbnlpbmdGaXJzdExldHRlcigpKSB7Ci0gICAg
ICAgIGJsb2NrLT5zdHlsZSgpLnJlbW92ZUNhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUik7
CisgICAgICAgIGJsb2NrLT5tdXRhYmxlU3R5bGUoKS5yZW1vdmVDYWNoZWRQc2V1ZG9TdHlsZShG
SVJTVF9MRVRURVIpOwogICAgICAgICBibG9jay0+dXBkYXRlRmlyc3RMZXR0ZXIoKTsKICAgICB9
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMTUsNyArMjAxNSw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50TWVkaWFUb2dnbGVDbG8KIH0KICNlbmRpZgogCi1zdGF0aWMgRmxvYXRS
b3VuZGVkUmVjdDo6UmFkaWkgYm9yZGVyUmFkaWlGcm9tU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxl
KQorc3RhdGljIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIGJvcmRlclJhZGlpRnJvbVN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICByZXR1cm4gRmxvYXRSb3VuZGVkUmVjdDo6
UmFkaWkoCiAgICAgICAgIEludFNpemUoc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygpLndpZHRo
KCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodCgpLmludFZh
bHVlKCkpLApAQCAtMjAzNiw3ICsyMDM2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZWRpYVNsaWRlclRyYQogCiAgICAgZmxvYXQgbWVkaWFEdXJhdGlvbiA9IG1lZGlhRWxlbWVudC0+
ZHVyYXRpb24oKTsKICAgICBmbG9hdCB0b3RhbFRyYWNrV2lkdGggPSByLndpZHRoKCk7Ci0gICAg
UmVuZGVyU3R5bGUmIHN0eWxlID0gby5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gby5zdHls
ZSgpOwogICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gbWVkaWFFbGVtZW50LT5i
dWZmZXJlZCgpOwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHRpbWVSYW5n
ZXMtPmxlbmd0aCgpOyArK2luZGV4KSB7CiAgICAgICAgIGZsb2F0IHN0YXJ0ID0gdGltZVJhbmdl
cy0+c3RhcnQoaW5kZXgsIElHTk9SRV9FWENFUFRJT04pOwpAQCAtMjA1OSw3ICsyMDU5LDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYQogCiBib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBSZW5kZXJT
dHlsZSYgc3R5bGUgPSBvLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBvLnN0eWxlKCk7CiAg
ICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChy
LCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlDb2xvcikpOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIwODAsNyAr
MjA4MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGkKIAogICAg
IGludCByZWN0SGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKICAgICBmbG9hdCB0cmFja0hlaWdodCA9
IHJlY3RIZWlnaHQgKiB2b2x1bWU7Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyT2Jq
ZWN0LnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSByZW5kZXJPYmplY3Quc3R5bGUoKTsKICAg
ICBJbnRSZWN0IHZvbHVtZVJlY3QocmVjdCk7CiAgICAgdm9sdW1lUmVjdC5tb3ZlKDAsIHJlY3RI
ZWlnaHQgLSB0cmFja0hlaWdodCk7CiAgICAgdm9sdW1lUmVjdC5zZXRIZWlnaHQoY2VpbCh0cmFj
a0hlaWdodCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgcGFpbnRGbG93KGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYgZmwKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5k
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBmbG93LnN0eWxl
KCk7CisgICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7CiAgICAgaWYgKHN0eWxlLnZpc2li
aWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm47CiAKQEAgLTE0MCw3ICsxNDAsNyBA
QCBib29sIGhpdFRlc3RGbG93KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgCiAgICAgaWYgKCFsYXlv
dXQucnVuQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVuZGVyU3R5bGUm
IHN0eWxlID0gZmxvdy5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gZmxvdy5zdHlsZSgpOwog
ICAgIGlmIChzdHlsZS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBzdHlsZS5wb2ludGVyRXZl
bnRzKCkgPT0gUEVfTk9ORSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDcgKzUxLDcgQEAgVGV4dEF1dG9TaXppbmdLZXk6OlRleHRBdXRvU2l6aW5n
S2V5KERlbAogewogfQogCi1UZXh0QXV0b1NpemluZ0tleTo6VGV4dEF1dG9TaXppbmdLZXkoUmVu
ZGVyU3R5bGUqIHN0eWxlKQorVGV4dEF1dG9TaXppbmdLZXk6OlRleHRBdXRvU2l6aW5nS2V5KGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICA6IG1fc3R5bGUoc3R5bGUgPyBSZW5kZXJTdHls
ZTo6Y2xvbmVQdHIoKnN0eWxlKSA6IG51bGxwdHIpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDEyICs0MywxMiBAQCBwdWJsaWM6CiAgICAgVGV4dEF1dG9TaXppbmdLZXkoKSA9IGRlZmF1bHQ7
CiAgICAgZW51bSBEZWxldGVkVGFnIHsgRGVsZXRlZCB9OwogICAgIGV4cGxpY2l0IFRleHRBdXRv
U2l6aW5nS2V5KERlbGV0ZWRUYWcpOwotICAgIGV4cGxpY2l0IFRleHRBdXRvU2l6aW5nS2V5KFJl
bmRlclN0eWxlKik7CisgICAgZXhwbGljaXQgVGV4dEF1dG9TaXppbmdLZXkoY29uc3QgUmVuZGVy
U3R5bGUqKTsKICAgICBUZXh0QXV0b1NpemluZ0tleShUZXh0QXV0b1NpemluZ0tleSYmKSA9IGRl
ZmF1bHQ7CiAKICAgICBUZXh0QXV0b1NpemluZ0tleSYgb3BlcmF0b3I9KFRleHRBdXRvU2l6aW5n
S2V5JiYpID0gZGVmYXVsdDsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CiAgICAgaW5saW5lIGJvb2wgaXNEZWxldGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0RlbGV0ZWQ7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIFRleHRQYWludFN0eWxlIGNvbXB1dGVUZXh0U2VsZWN0
aW9uUGFpbnQKICAgICAgICAgc2VsZWN0aW9uUGFpbnRTdHlsZS5lbXBoYXNpc01hcmtDb2xvciA9
IGVtcGhhc2lzTWFya0ZvcmVncm91bmQ7CiAgICAgfQogCi0gICAgaWYgKFJlbmRlclN0eWxlKiBw
c2V1ZG9TdHlsZSA9IHJlbmRlcmVyLmdldENhY2hlZFBzZXVkb1N0eWxlKFNFTEVDVElPTikpIHsK
KyAgICBpZiAoYXV0byogcHNldWRvU3R5bGUgPSByZW5kZXJlci5nZXRDYWNoZWRQc2V1ZG9TdHls
ZShTRUxFQ1RJT04pKSB7CiAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHBhaW50
SW5mby5mb3JjZVRleHRDb2xvcigpID8gbnVsbHB0ciA6IHBzZXVkb1N0eWxlLT50ZXh0U2hhZG93
KCk7CiAgICAgICAgIGlmIChzaGFkb3cgIT0gc2VsZWN0aW9uU2hhZG93KSB7CiAgICAgICAgICAg
ICBpZiAoIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIHByaXZhdGU6CiAgICAgLy8gRmlyZWZveCBhbmQgT3Bl
cmEgd2lsbCBhbGxvdyBhIHRhYmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4gaW1hZ2UgaW5zaWRl
IGl0IHVuZGVyCiAgICAgLy8gdmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIChpbiBvcmRlciB0
byBtYXRjaCBjb21tb24gV2luSUUgcmVuZGVyaW5ncykuCiAgICAgLy8gTm90IHN1cHBvcnRpbmcg
dGhlIHF1aXJrIGhhcyBjYXVzZWQgdXMgdG8gbWlzLXJlbmRlciBzb21lIHJlYWwgc2l0ZXMuIChT
ZWUgQnVnemlsbGEgMTA1MTcuKQotICAgIFJlbmRlclN0eWxlJiBtX2Jsb2NrU3R5bGU7CisgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIG1fYmxvY2tTdHlsZTsKIAogICAgIExpbmVJbmZvJiBtX2xpbmVJ
bmZvOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFJvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MUm9vdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMSwxMCArMzAxLDEwIEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0KCkKICAgICAg
ICAgICAgICAgICBiYXNlVG9wTWFyZ2luIC09IGluZGV4VG9wTWFyZ2luOwogICAgICAgICAgICAg
ICAgIGluZGV4VG9wTWFyZ2luID0gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluZGV4
LT5zdHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgoaW5kZXhUb3BNYXJnaW4sIEZpeGVkKSk7Cisg
ICAgICAgICAgICBpbmRleC0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChpbmRl
eFRvcE1hcmdpbiwgRml4ZWQpKTsKICAgICAgICAgfQotICAgICAgICByYWRpY2FsLT5zdHlsZSgp
LnNldE1hcmdpblRvcChMZW5ndGgocmFkaWNhbFRvcE1hcmdpbiwgRml4ZWQpKTsKLSAgICAgICAg
YmFzZS0+c3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGJhc2VUb3BNYXJnaW4sIEZpeGVkKSk7
CisgICAgICAgIHJhZGljYWwtPm11dGFibGVTdHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgocmFk
aWNhbFRvcE1hcmdpbiwgRml4ZWQpKTsKKyAgICAgICAgYmFzZS0+bXV0YWJsZVN0eWxlKCkuc2V0
TWFyZ2luVG9wKExlbmd0aChiYXNlVG9wTWFyZ2luLCBGaXhlZCkpOwogICAgIH0KIAogICAgIFJl
bmRlck1hdGhNTEJsb2NrOjpsYXlvdXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTYw
Niw3ICsxNjA2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29sdW1uUnVsZVdpZHRoKHVuc2ln
bmVkIHNob3J0IHcpIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fbXVs
dGlDb2wsIG1fcnVsZS5tX3dpZHRoLCB3KTsgfQogICAgIHZvaWQgcmVzZXRDb2x1bW5SdWxlKCkg
eyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV9tdWx0aUNvbCwgbV9ydWxl
LCBCb3JkZXJWYWx1ZSgpKTsgfQogICAgIHZvaWQgc2V0Q29sdW1uU3BhbihDb2x1bW5TcGFuIGNv
bHVtblNwYW4pIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fbXVsdGlD
b2wsIG1fY29sdW1uU3BhbiwgY29sdW1uU3Bhbik7IH0KLSAgICB2b2lkIGluaGVyaXRDb2x1bW5Q
cm9wZXJ0aWVzRnJvbShSZW5kZXJTdHlsZSogcGFyZW50KSB7IHJhcmVOb25Jbmhlcml0ZWREYXRh
LmFjY2VzcygpLT5tX211bHRpQ29sID0gcGFyZW50LT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9t
dWx0aUNvbDsgfQorICAgIHZvaWQgaW5oZXJpdENvbHVtblByb3BlcnRpZXNGcm9tKGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnQpIHsgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fbXVs
dGlDb2wgPSBwYXJlbnQtPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211bHRpQ29sOyB9CiAgICAg
dm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3BzKSB7IFNFVF9O
RVNURURfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX3RyYW5zZm9ybSwgbV9vcGVyYXRpb25z
LCBvcHMpOyB9CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm1PcmlnaW5YKExlbmd0aCBsZW5ndGgpIHsg
U0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fdHJhbnNmb3JtLCBtX3gsIFdU
Rk1vdmUobGVuZ3RoKSk7IH0KICAgICB2b2lkIHNldFRyYW5zZm9ybU9yaWdpblkoTGVuZ3RoIGxl
bmd0aCkgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV90cmFuc2Zvcm0s
IG1feSwgV1RGTW92ZShsZW5ndGgpKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgZmxvYXQgU1ZHSW5saW5lVGV4dEJveDo6cG9zaXRp
b25Gb3JPZmZzZQogICAgIHJldHVybiAwOwogfQogCi1GbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJv
eDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZy
YWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0CitGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZv
clRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQ
b3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhcnRQb3NpdGlvbiA8
IGVuZFBvc2l0aW9uKTsKICAgICBBU1NFUlQoc3R5bGUpOwpAQCAtMTQyLDcgKzE0Miw3IEBAIExh
eW91dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3QKICAgICBpZiAoc3RhcnRQb3Np
dGlvbiA+PSBlbmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAotICAg
IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHls
ZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBmcmFnbWVudFRy
YW5zZm9ybTsKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdDsKQEAgLTIwMSw3ICsyMDEsNyBA
QCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFjCiAgICAgaWYgKCF0ZXh0
U2hvdWxkQmVQYWludGVkKHJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBwYXJlbnRSZW5kZXJlci5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxl
ID0gcGFyZW50UmVuZGVyZXIuc3R5bGUoKTsKIAogICAgIGludCBzdGFydFBvc2l0aW9uOwogICAg
IGludCBlbmRQb3NpdGlvbjsKQEAgLTI1NiwxNCArMjU2LDE0IEBAIHZvaWQgU1ZHSW5saW5lVGV4
dEJveDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBpZiAoIXRleHRTaG91bGRCZVBhaW50ZWQocmVu
ZGVyZXIoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHBh
cmVudFJlbmRlcmVyLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBwYXJlbnRSZW5kZXJlci5z
dHlsZSgpOwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUuc3Zn
U3R5bGUoKTsKIAogICAgIGJvb2wgaGFzRmlsbCA9IHN2Z1N0eWxlLmhhc0ZpbGwoKTsKICAgICBi
b29sIGhhc1Zpc2libGVTdHJva2UgPSBzdmdTdHlsZS5oYXNWaXNpYmxlU3Ryb2tlKCk7CiAKLSAg
ICBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUgPSAmc3R5bGU7CisgICAgY29uc3QgUmVuZGVy
U3R5bGUqIHNlbGVjdGlvblN0eWxlID0gJnN0eWxlOwogICAgIGlmIChoYXNTZWxlY3Rpb24pIHsK
ICAgICAgICAgc2VsZWN0aW9uU3R5bGUgPSBwYXJlbnRSZW5kZXJlci5nZXRDYWNoZWRQc2V1ZG9T
dHlsZShTRUxFQ1RJT04pOwogICAgICAgICBpZiAoc2VsZWN0aW9uU3R5bGUpIHsKQEAgLTMzNCw3
ICszMzQsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgCiAgICAg
QVNTRVJUKCFtX3BhaW50aW5nUmVzb3VyY2UpOwogfQogCi1ib29sIFNWR0lubGluZVRleHRCb3g6
OmFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGZsb2F0
IHNjYWxpbmdGYWN0b3IsIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciwgUmVuZGVyU3R5
bGUqIHN0eWxlKQorYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjphY3F1aXJlUGFpbnRpbmdSZXNvdXJj
ZShHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJC
b3hNb2RlbE9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAg
ICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CiAgICAgQVNTRVJUKHN0eWxlKTsKQEAgLTM3Nyw3ICsz
NzcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGluZ1JlCiAgICAgbV9w
YWludGluZ1Jlc291cmNlID0gbnVsbHB0cjsKIH0KIAotYm9vbCBTVkdJbmxpbmVUZXh0Qm94Ojpw
cmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComIGNv
bnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSkKK2Jvb2wgU1ZH
SW5saW5lVGV4dEJveDo6cHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWludGluZyhHcmFw
aGljc0NvbnRleHQqJiBjb250ZXh0LCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUpCiB7CiAgICAgcmV0dXJuIGFjcXVpcmVQYWludGluZ1Jlc291cmNlKGNvbnRl
eHQsIHNjYWxpbmdGYWN0b3IsIHBhcmVudCgpLT5yZW5kZXJlcigpLCBzdHlsZSk7CiB9CkBAIC0z
ODcsNyArMzg3LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZXN0b3JlR3JhcGhpY3NDbwog
ICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQsIC8qIHBhdGggKi9udWxscHRyKTsK
IH0KIAotVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0
eWxlKiBzdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QKK1RleHRS
dW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKHN0eWxlKTsKIApAQCAtNTA2LDcgKzUwNiw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6
cGFpbnREZWNvcmF0aW9uV2kKICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJjZSk7CiAgICAg
QVNTRVJUKG1fcGFpbnRpbmdSZXNvdXJjZU1vZGUgIT0gQXBwbHlUb0RlZmF1bHRNb2RlKTsKIAot
ICAgIFJlbmRlclN0eWxlJiBkZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9uUmVuZGVyZXIuc3R5
bGUoKTsKKyAgICBhdXRvJiBkZWNvcmF0aW9uU3R5bGUgPSBkZWNvcmF0aW9uUmVuZGVyZXIuc3R5
bGUoKTsKIAogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSAxOwogICAgIEZvbnRDYXNjYWRlIHNj
YWxlZEZvbnQ7CkBAIC01NDAsNyArNTQwLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWlu
dERlY29yYXRpb25XaQogICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0UHRy
LCAmcGF0aCk7CiB9CiAKLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRv
d3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW4m
IHRleHRSdW4sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0
aW9uLCBpbnQgZW5kUG9zaXRpb24pCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdp
dGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlLCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBp
bnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKQogewogICAgIGZsb2F0IHNjYWxpbmdG
YWN0b3IgPSByZW5kZXJlcigpLnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0Zh
Y3Rvcik7CkBAIC01ODUsNyArNTg1LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRl
eHRXaXRoU2hhZAogICAgIH0gd2hpbGUgKHNoYWRvdyk7CiB9CiAKLXZvaWQgU1ZHSW5saW5lVGV4
dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYg
ZnJhZ21lbnQsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSkK
K3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogc2VsZWN0aW9u
U3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGJvb2wgaGFzU2VsZWN0aW9u
LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSkKIHsKICAgICBBU1NFUlQoc3R5bGUpOwogICAg
IEFTU0VSVChzZWxlY3Rpb25TdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDIzICs2NCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGFydHNOZXdUZXh0Q2h1
bmsoYm9vbCBuZXdUZXh0Q2h1bmspIHsgbV9zdGFydHNOZXdUZXh0Q2h1bmsgPSBuZXdUZXh0Q2h1
bms7IH0KIAogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21lbnQoY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNW
R1RleHRGcmFnbWVudCYsIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGludCBmcmFnbWVudEVu
ZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25S
ZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBmcmFnbWVudFN0
YXJ0UG9zaXRpb24sIGludCBmcmFnbWVudEVuZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSop
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNTVkdJbmxpbmVUZXh0Qm94KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVu
KFJlbmRlclN0eWxlKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7CisgICAgVGV4dFJ1
biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JikgY29uc3Q7CiAKLSAgICBib29sIGFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNz
Q29udGV4dComLCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJCb3hNb2RlbE9iamVjdCYsIFJl
bmRlclN0eWxlKik7CisgICAgYm9vbCBhY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0Nv
bnRleHQqJiwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyQm94TW9kZWxPYmplY3QmLCBjb25z
dCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhp
Y3NDb250ZXh0KiYsIGNvbnN0IFBhdGgqKTsKIAotICAgIGJvb2wgcHJlcGFyZUdyYXBoaWNzQ29u
dGV4dEZvclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiwgZmxvYXQgc2NhbGluZ0ZhY3Rv
ciwgUmVuZGVyU3R5bGUqKTsKKyAgICBib29sIHByZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0
UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIGNvbnN0IFJl
bmRlclN0eWxlKik7CiAgICAgdm9pZCByZXN0b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0UGFp
bnRpbmcoR3JhcGhpY3NDb250ZXh0KiYpOwogCiAgICAgdm9pZCBwYWludERlY29yYXRpb24oR3Jh
cGhpY3NDb250ZXh0JiwgVGV4dERlY29yYXRpb24sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpOwog
ICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29udGV4dCYsIFRleHRE
ZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBSZW5kZXJCb3hNb2RlbE9iamVjdCYg
ZGVjb3JhdGlvblJlbmRlcmVyKTsKLSAgICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBo
aWNzQ29udGV4dCYsIFJlbmRlclN0eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNWR1RleHRGcmFnbWVu
dCYsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pOwotICAgIHZvaWQgcGFpbnRU
ZXh0KEdyYXBoaWNzQ29udGV4dCYsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHNlbGVjdGlv
blN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBw
YWludFNlbGVjdGVkVGV4dE9ubHkpOworICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwgY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbik7CisgICAgdm9p
ZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBS
ZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGJvb2wg
aGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CiAKICAgICBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRv
bSwgSGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUGF0aERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUGF0aERhdGEuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1BhdGhEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVQYXRoRnJvbUNpcmNsZUVsZW1lbnQoCiAg
ICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOwogICAgIGlm
ICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBy
ZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwog
ICAgIGZsb2F0IHIgPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN2Z1N0eWxl
KCkucigpKTsKICAgICBpZiAociA+IDApIHsKICAgICAgICAgZmxvYXQgY3ggPSBsZW5ndGhDb250
ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN2Z1N0eWxlKCkuY3goKSwgTGVuZ3RoTW9kZVdpZHRo
KTsKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlUGF0aEZyb21FbGxpcHNlRWxl
bWVudAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsK
ICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47Ci0gICAgUmVuZGVyU3R5bGUmIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlci0+c3R5
bGUoKTsKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoZWxlbWVudCk7CiAgICAg
ZmxvYXQgcnggPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN2Z1N0eWxlKCku
cngoKSwgTGVuZ3RoTW9kZVdpZHRoKTsKICAgICBpZiAocnggPD0gMCkKQEAgLTEyMCw3ICsxMjAs
NyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVQYXRoRnJvbVJlY3RFbGVtZW50KFNWCiAgICAgaWYgKCFy
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVu
ZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAg
ICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoZWxlbWVudCk7CiAgICAgZmxvYXQgd2lk
dGggPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLndpZHRoKCksIExlbmd0aE1v
ZGVXaWR0aCk7CiAgICAgaWYgKHdpZHRoIDw9IDApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBTVkdSZW5kZXJpbmdD
b250ZXh0OjpwcmVwYXJlVG9SZW5kZQogICAgICAgICBtX3JlbmRlcmluZ0ZsYWdzIHw9IFJlc3Rv
cmVHcmFwaGljc0NvbnRleHQ7CiAgICAgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gbV9y
ZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKCk7
CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZS5zdmdTdHlsZSgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgVHJlZVJlc29sdmVyOjpQYXJl
bnQ6OlBhcmVudChEb2N1bWVudCYgZAogewogfQogCi1UcmVlUmVzb2x2ZXI6OlBhcmVudDo6UGFy
ZW50KEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiBzdHlsZSwgQ2hhbmdlIGNoYW5nZSkK
K1RyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdlKQogICAgIDogZWxlbWVudCgmZWxlbWVudCkK
ICAgICAsIHN0eWxlKHN0eWxlKQogICAgICwgY2hhbmdlKGNoYW5nZSkKQEAgLTExOSw3ICsxMTks
NyBAQCB2b2lkIFRyZWVSZXNvbHZlcjo6cG9wU2NvcGUoKQogICAgIHJldHVybiBtX3Njb3BlU3Rh
Y2sucmVtb3ZlTGFzdCgpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFRyZWVS
ZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiBp
bmhlcml0ZWRTdHlsZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gVHJlZVJlc29sdmVy
OjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIGlu
aGVyaXRlZFN0eWxlKQogewogICAgIGlmICghbV9kb2N1bWVudC5oYXZlU3R5bGVzaGVldHNMb2Fk
ZWQoKSAmJiAhZWxlbWVudC5yZW5kZXJlcigpKSB7CiAgICAgICAgIG1fZG9jdW1lbnQuc2V0SGFz
Tm9kZXNXaXRoUGxhY2Vob2xkZXJTdHlsZSgpOwpAQCAtMjgyLDcgKzI4Miw3IEBAIHByaXZhdGU6
CiB9OwogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAotdm9pZCBUcmVlUmVzb2x2ZXI6OnB1c2hQ
YXJlbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdl
KQordm9pZCBUcmVlUmVzb2x2ZXI6OnB1c2hQYXJlbnQoRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdlKQogewogICAgIHNjb3BlKCkuc2VsZWN0
b3JGaWx0ZXIucHVzaFBhcmVudCgmZWxlbWVudCk7CiAKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lk
IFRyZWVSZXNvbHZlcjo6cmVzb2x2ZUNvbXBvc2VkVHJlZSgpCiAKICAgICAgICAgYm9vbCBzaG91
bGRSZXNvbHZlRm9yUHNldWRvRWxlbWVudCA9IHNob3VsZFJlc29sdmVQc2V1ZG9FbGVtZW50KGVs
ZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpKSB8fCBzaG91bGRSZXNvbHZlUHNldWRvRWxlbWVu
dChlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpKTsKIAotICAgICAgICBSZW5kZXJTdHlsZSog
c3R5bGU7CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZTsKICAgICAgICAgQ2hhbmdl
IGNoYW5nZTsKIAogICAgICAgICBib29sIHNob3VsZFJlc29sdmUgPSBwYXJlbnQuY2hhbmdlID49
IEluaGVyaXQgfHwgZWxlbWVudC5uZWVkc1N0eWxlUmVjYWxjKCkgfHwgc2hvdWxkUmVzb2x2ZUZv
clBzZXVkb0VsZW1lbnQgfHwgYWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyB8fCBlbGVtZW50Lmhh
c0Rpc3BsYXlDb250ZW50cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVl
UmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVS
ZXNvbHZlci5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVRyZWVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8VXBkYXRlPiByZXNvbHZlKENoYW5nZSk7CiAKIHByaXZhdGU6
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVu
dCYsIFJlbmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBp
bmhlcml0ZWRTdHlsZSk7CiAKICAgICB2b2lkIHJlc29sdmVDb21wb3NlZFRyZWUoKTsKICAgICBF
bGVtZW50VXBkYXRlIHJlc29sdmVFbGVtZW50KEVsZW1lbnQmKTsKQEAgLTc5LDEzICs3OSwxMyBA
QCBwcml2YXRlOgogCiAgICAgc3RydWN0IFBhcmVudCB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1l
bnQ7Ci0gICAgICAgIFJlbmRlclN0eWxlJiBzdHlsZTsKKyAgICAgICAgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlOwogICAgICAgICBDaGFuZ2UgY2hhbmdlOwogICAgICAgICBib29sIGRpZFB1c2hT
Y29wZSB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgZWxlbWVudE5lZWRpbmdTdHlsZVJlY2FsY0Fm
ZmVjdHNOZXh0U2libGluZ0VsZW1lbnRTdHlsZSB7IGZhbHNlIH07CiAKICAgICAgICAgUGFyZW50
KERvY3VtZW50JiwgQ2hhbmdlKTsKLSAgICAgICAgUGFyZW50KEVsZW1lbnQmLCBSZW5kZXJTdHls
ZSYsIENoYW5nZSk7CisgICAgICAgIFBhcmVudChFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUm
LCBDaGFuZ2UpOwogICAgIH07CiAKICAgICBTY29wZSYgc2NvcGUoKSB7IHJldHVybiBtX3Njb3Bl
U3RhY2subGFzdCgpOyB9CkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwdXNo
RW5jbG9zaW5nU2NvcGUoKTsKICAgICB2b2lkIHBvcFNjb3BlKCk7CiAKLSAgICB2b2lkIHB1c2hQ
YXJlbnQoRWxlbWVudCYsIFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKKyAgICB2b2lkIHB1c2hQYXJl
bnQoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKICAgICB2b2lkIHBvcFBh
cmVudCgpOwogICAgIHZvaWQgcG9wUGFyZW50c1RvRGVwdGgodW5zaWduZWQgZGVwdGgpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYxLDExICs2MSwyNCBAQCBib29sIFVwZGF0ZTo6dGV4dFVwZGF0ZShjb25zdCBUZXh0JiB0ZXh0
CiAgICAgcmV0dXJuIG1fdGV4dHMuY29udGFpbnMoJnRleHQpOwogfQogCi1SZW5kZXJTdHlsZSog
VXBkYXRlOjplbGVtZW50U3R5bGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKK2NvbnN0
IFJlbmRlclN0eWxlKiBVcGRhdGU6OmVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JiBlbGVtZW50
KSBjb25zdAogewogICAgIGlmIChhdXRvKiB1cGRhdGUgPSBlbGVtZW50VXBkYXRlKGVsZW1lbnQp
KQogICAgICAgICByZXR1cm4gdXBkYXRlLT5zdHlsZS5nZXQoKTsKLSAgICByZXR1cm4gZWxlbWVu
dC5yZW5kZXJTdHlsZSgpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigp
OworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biAmcmVuZGVyZXItPnN0eWxlKCk7Cit9CisKK1JlbmRlclN0eWxlKiBVcGRhdGU6OmVsZW1lbnRT
dHlsZShjb25zdCBFbGVtZW50JiBlbGVtZW50KQoreworICAgIGlmIChhdXRvKiB1cGRhdGUgPSBl
bGVtZW50VXBkYXRlKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gdXBkYXRlLT5zdHlsZS5nZXQo
KTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJl
bmRlcmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gJnJlbmRlcmVyLT5t
dXRhYmxlU3R5bGUoKTsKIH0KIAogdm9pZCBVcGRhdGU6OmFkZEVsZW1lbnQoRWxlbWVudCYgZWxl
bWVudCwgRWxlbWVudCogcGFyZW50LCBFbGVtZW50VXBkYXRlJiYgZWxlbWVudFVwZGF0ZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyAr
NjMsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHRleHRVcGRhdGUoY29uc3QgVGV4dCYpIGNvbnN0
OwogCi0gICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JikgY29uc3Q7
CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JikgY29u
c3Q7CisgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50Jik7CiAKICAg
ICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ2
LDcgKzc0Niw3IEBAIHZvaWQgU1ZHRWxlbWVudDo6c3luY2hyb25pemVTeXN0ZW1MYW5ndWEKICAg
ICBjb250ZXh0RWxlbWVudC0+c3luY2hyb25pemVTeXN0ZW1MYW5ndWFnZSgpOwogfQogCi1PcHRp
b25hbDxFbGVtZW50U3R5bGU+IFNWR0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
U1ZHRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRT
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGlu
IGEgPHVzZT4gdHJlZSB3ZSBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIGRlZmluaXRpb24gdHJlZS4K
ICAgICBpZiAoYXV0byogc3R5bGVFbGVtZW50ID0gdGhpcy0+Y29ycmVzcG9uZGluZ0VsZW1lbnQo
KSkKQEAgLTc3MywxMiArNzczLDEyIEBAIHZvaWQgU1ZHRWxlbWVudDo6c2V0VXNlT3ZlcnJpZGVD
b21wdXRlZFMKICAgICAgICAgbV9zdmdSYXJlRGF0YS0+c2V0VXNlT3ZlcnJpZGVDb21wdXRlZFN0
eWxlKHZhbHVlKTsKIH0KIAotUmVuZGVyU3R5bGUqIFNWR0VsZW1lbnQ6OmNvbXB1dGVkU3R5bGUo
UHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKK2NvbnN0IFJlbmRlclN0eWxlKiBTVkdF
bGVtZW50Ojpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpCiB7
CiAgICAgaWYgKCFtX3N2Z1JhcmVEYXRhIHx8ICFtX3N2Z1JhcmVEYXRhLT51c2VPdmVycmlkZUNv
bXB1dGVkU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIEVsZW1lbnQ6OmNvbXB1dGVkU3R5bGUocHNl
dWRvRWxlbWVudFNwZWNpZmllcik7CiAKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBu
dWxscHRyOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHI7CiAg
ICAgaWYgKEVsZW1lbnQqIHBhcmVudCA9IHBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkgewog
ICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKSkKICAgICAgICAg
ICAgIHBhcmVudFN0eWxlID0gJnJlbmRlcmVyLT5zdHlsZSgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgcHVibGljOgogICAgIHZv
aWQgc3luY2hyb25pemVBbmltYXRlZFNWR0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikg
Y29uc3Q7CiAgICAgc3RhdGljIHZvaWQgc3luY2hyb25pemVBbGxBbmltYXRlZFNWR0F0dHJpYnV0
ZShTVkdFbGVtZW50Kik7CiAgCi0gICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3Vz
dG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9z
dFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0
b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
KiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIHZvaWQgc3luY2hyb25p
emVSZXF1aXJlZEZlYXR1cmVzKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKICAgICBzdGF0
aWMgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucyhTVkdFbGVtZW50KiBjb250ZXh0
RWxlbWVudCk7CkBAIC0xODEsNyArMTgxLDcgQEAgcHJvdGVjdGVkOgogICAgIGNsYXNzIEluc3Rh
bmNlSW52YWxpZGF0aW9uR3VhcmQ7CiAKIHByaXZhdGU6Ci0gICAgUmVuZGVyU3R5bGUqIGNvbXB1
dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETykgZmluYWw7CisgICAgY29uc3QgUmVuZGVyU3R5
bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETykgZmluYWw7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNTdXBwb3J0ZWQoU3RyaW5nSW1wbCogZmVhdHVyZSwgU3RyaW5nSW1wbCogdmVy
c2lvbikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRh
LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFy
ZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTAgKzU5LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuICptX2FuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllczsKICAgICB9CiAKLSAgICBS
ZW5kZXJTdHlsZSogb3ZlcnJpZGVDb21wdXRlZFN0eWxlKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSkKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogb3ZlcnJpZGVDb21w
dXRlZFN0eWxlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSkKICAgICB7CiAgICAgICAgIGlmICghbV91c2VPdmVycmlkZUNvbXB1dGVkU3R5bGUpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBp
ZiAoIW1fb3ZlcnJpZGVDb21wdXRlZFN0eWxlIHx8IG1fbmVlZHNPdmVycmlkZUNvbXB1dGVkU3R5
bGVVcGRhdGUpIHsKICAgICAgICAgICAgIC8vIFRoZSBzdHlsZSBjb21wdXRlZCBoZXJlIGNvbnRh
aW5zIG5vIENTUyBBbmltYXRpb25zL1RyYW5zaXRpb25zIG9yIFNNSUwgaW5kdWNlZCBydWxlcyAt
IHRoaXMgaXMgbmVlZGVkIHRvIGNvbXB1dGUgdGhlICJiYXNlIHZhbHVlIiBmb3IgdGhlIFNNSUwg
YW5pbWF0aW9uIHNhbmR3aGljaCBtb2RlbC4KICAgICAgICAgICAgIG1fb3ZlcnJpZGVDb21wdXRl
ZFN0eWxlID0gZWxlbWVudC5zdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50KGVsZW1lbnQs
IHBhcmVudFN0eWxlLCBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCkucmVuZGVyU3R5bGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNz
RWxlbWVudDo6Z2V0UwogQWZmaW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0
ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsK
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxl
KCkgOiBudWxscHRyOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigp
LT5zdHlsZSgpIDogbnVsbHB0cjsKIAogICAgIC8vIElmIENTUyBwcm9wZXJ0eSB3YXMgc2V0LCB1
c2UgdGhhdCwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGF0dHJpYnV0ZSAoaWYgc2V0KS4KICAgICBp
ZiAoc3R5bGUgJiYgc3R5bGUtPmhhc1RyYW5zZm9ybSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw3ICsy
MjIsNyBAQCBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tCiAgICAgcmV0
dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlRm9yTGVu
Z3RoUmVzb2x2aW5nKGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQpCitzdGF0aWMgaW5saW5lIGNv
bnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhjb25zdCBTVkdF
bGVtZW50KiBjb250ZXh0KQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0yMzYsMTIgKzIzNiwxMiBAQCBzdGF0aWMgaW5saW5lIFJlbmRlclN0eWxlKiBy
ZW5kZXJTdHlsZUZvCiAKICAgICAvLyBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IGEgUmVuZGVyU1ZH
Um9vdCByZW5kZXJlciwgY2FycnlpbmcgYSBzdHlsZS4KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogZmxvYXQgU1ZHTGVu
Z3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRU1TKGZsb2F0IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5k
ZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOworICAgIGF1dG8qIHN0eWxlID0g
cmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxl
KSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpA
QCAtMjU4LDcgKzI1OCw3IEBAIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZy
b20KIAogZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVNU1RvVXNlclVu
aXRzKGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwor
ICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0
KTsKICAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwpAQCAtMjY5LDcgKzI2OSw3IEBAIGZsb2F0IFNWR0xlbmd0aENvbnRl
eHQ6OmNvbnZlcnRWYWx1ZUZyb20KIAogZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZh
bHVlRnJvbVVzZXJVbml0c1RvRVhTKGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29s
dmluZyhtX2NvbnRleHQpOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhS
ZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAgIGVjID0gTk9U
X1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjg4LDcgKzI4OCw3IEBAIGZs
b2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb20KIAogZmxvYXQgU1ZHTGVuZ3Ro
Q29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVYU1RvVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJT
dHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOworICAgIGF1dG8qIHN0eWxlID0gcmVu
ZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKSB7
CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OCw3ICs4OCw3IEBAIGJvb2wgU1ZHU3RvcEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY28K
IAogQ29sb3IgU1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09wYWNpdHkoKSBjb25z
dAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+
c3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRl
cmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGZvciBu
dWxsIHN0eWxlIGV4aXN0cyB0byBhZGRyZXNzIEJ1ZyBXSyA5MDgxNCwgYSByYXJlIGNyYXNoIGNv
bmRpdGlvbiBpbgogICAgIC8vIHdoaWNoIHRoZSByZW5kZXJlciBvciBzdHlsZSBpcyBudWxsLiBU
aGlzIGVudGlyZSBjbGFzcyBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwgKEJ1ZyBXSyA4Njk0MSkK
ICAgICAvLyBhbmQgd2Ugd2lsbCB0b2xlcmF0ZSB0aGlzIG51bGwgY2hlY2sgdW50aWwgdGhlbi4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNyArNDUsNyBAQCBSZWY8U1ZHVGV4dEVsZW1lbnQ+IFNWR1RleHRFbGVtZW50Ojpj
cmVhCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zv
cm0oKSBjb25zdAogewogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAgUmVuZGVyU3R5
bGUqIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsK
KyAgICBhdXRvKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51
bGxwdHI7CiAKICAgICAvLyBpZiBDU1MgcHJvcGVydHkgd2FzIHNldCwgdXNlIHRoYXQsIG90aGVy
d2lzZSBmYWxsYmFjayB0byBhdHRyaWJ1dGUgKGlmIHNldCkKICAgICBpZiAoc3R5bGUgJiYgc3R5
bGUtPmhhc1RyYW5zZm9ybSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyMyw3
ICs4MjMsNyBAQCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZShJbmNsdWRlCiAgICAg
ICAgIGF1dG8mIHBvc3RMYXlvdXREYXRhID0gcmVzdWx0LnBvc3RMYXlvdXREYXRhKCk7CiAgICAg
ICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlVG9S
ZW1vdmU7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gRWRpdG9yOjpzdHls
ZUZvclNlbGVjdGlvblN0YXJ0KCZmcmFtZSwgbm9kZVRvUmVtb3ZlKSkgeworICAgICAgICAgICAg
aWYgKGF1dG8qIHN0eWxlID0gRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZmcmFtZSwg
bm9kZVRvUmVtb3ZlKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUo
KS53ZWlnaHQoKSA+PSBGb250V2VpZ2h0Qm9sZCkKICAgICAgICAgICAgICAgICAgICAgcG9zdExh
eW91dERhdGEudHlwaW5nQXR0cmlidXRlcyB8PSBBdHRyaWJ1dGVCb2xkOwogICAgICAgICAgICAg
ICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS5pdGFsaWMoKSA9PSBGb250SXRhbGljT24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277370</attachid>
            <date>2016-04-26 08:02:56 -0700</date>
            <delta_ts>2016-04-26 09:41:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>const-renderstyle-8.patch</filename>
            <type>text/plain</type>
            <size>184698</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDA4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyOCBAQAorMjAxNi0wNC0yNiAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVyRWxlbWVudDo6c3R5
bGUoKSBzaG91bGQgcmV0dXJuIGNvbnN0IFJlbmRlclN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTcwMTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdHlsZSBzaG91bGQgYmUgY2hhbmdlZCB2aWEg
c2V0U3R5bGUsIG5vdCBieSBtdXRhdGluZyBpdCBkaXJlY3RseS4KKworICAgICAgICBQdWxsaW5n
IHRoaXMgc3RyaW5nIHR1cm5zIFJlbmRlclN0eWxlIGNvbnN0IGluIG1hbnkgcGxhY2VzLgorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnN0YXJ0T2ZTdHlsZVJhbmdlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1
dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RP
TS5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBpbm5lckZyYW1lUXVhZF0pOgorICAgICAgICAoLVtE
T01Ob2RlIGNvbXB1dGVkRm9udFNpemVdKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uTGlzdEZv
ckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uT2Zmc2V0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFRyYW5zaXRpb25Qcm9wZXJ0eVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbFNuYXBEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JvbGxTbmFwUG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbFNuYXBDb29yZGlu
YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpsb2dVbmltcGxlbWVudGVkUHJvcGVydHlJRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5RnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmxpbmVIZWlnaHRGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFNpemVGcm9tU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFN0eWxlRnJvbVN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvbnRWYXJpYW50RnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRXZWln
aHRGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFN5bnRoZXNpc0Zyb21TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjp6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhZGRpbmdPck1hcmdpbklzUmVuZGVyZXJEZXBlbmRlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUmVnaW9uQnJlYWspOgorICAgICAgICAoV2Vi
Q29yZTo6aXNMYXlvdXREZXBlbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU3R5bGVJ
Zk5lZWRlZEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVJlbmRlclN0eWxlRm9y
UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJv
cGVydHlNYXRjaGVzKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
Lmg6CisgICAgICAgICogY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRXaWR0aEZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2aWV3cG9y
dEhlaWdodEZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhOjp2aWV3cG9ydE1pbkZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhOjp2aWV3cG9ydE1heEZhY3Rvcik6CisgICAgICAgICogY3NzL0NTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGE6OkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6cm9vdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OmNvbXB1dGluZ0ZvbnRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OmNvcHlXaXRoQWRqdXN0ZWRab29tKToK
KyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpyb290
RWxlbWVudFN0eWxlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5oOgorICAgICAgICAq
IGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVl
cnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IpOgorICAgICAgICAqIGNzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmg6CisgICAgICAgICogY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJva2VEYXNoQXJyYXlUb0NTU1ZhbHVlTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjphZGp1c3RTVkdQ
YWludEZvckN1cnJlbnRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0
cmFjdG9yOjpzdmdQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKiBjc3MvU291cmNlU2l6ZUxpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVs
dExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlU2l6ZXNBdHRyaWJ1dGUpOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJD
dXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlm
aWVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJ
bWFnZU1vZGlmaWVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaGVyaXRDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQWx0KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQXRTaGFkb3dCb3VuZGFyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmRvY3VtZW50U2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjp0
YWtlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnBhcmVu
dFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpyb290RWxl
bWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpyZWdp
b25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpl
bGVtZW50TGlua1N0YXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5k
aW5nU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFZpc3VhbGx5
T3JkZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3JlYXRlUGFyc2VyKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpzdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OnJlc29sdmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0ZvckVtcHR5
U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmJlZm9yZU9yQWZ0ZXJQc2V1ZG9FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmV4aXN0aW5nQ29tcHV0ZWRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50Ojpjb21wdXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmRpZERldGFjaFJlbmRlcmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZXNvbHZl
Q3VzdG9tU3R5bGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUVkaXRhYmlsaXR5RnJvbUNvbXB1dGVk
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cHNldWRvQXdhcmVMYXN0Q2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29tcHV0ZWRTdHlsZSk6CisgICAgICAgICogZG9tL05v
ZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZVJlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpyZW5kZXJTdHlsZSk6CisgICAgICAgICogZG9tL1BzZXVkb0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUpOgorICAgICAg
ICAqIGRvbS9Qc2V1ZG9FbGVtZW50Lmg6CisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNOZXdMaW5lQXRQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxl
T2ZFbmNsb3NpbmdUZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVu
dENvbW1hbmQ6OnJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjplbmRPZk5leHRQYXJh
Z3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZCk6CisgICAgICAgICogZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmluaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVk
KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAqIGVkaXRpbmcv
RWRpdG9yLmg6CisgICAgICAgICogZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5KToKKyAgICAg
ICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
Z2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKToKKyAgICAg
ICAgKiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmli
dXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRpdGxlRWxlbWVudDo6Y29tcHV0ZWRUZXh0V2l0aERpcmVjdGlvbik6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5Ojpmb250c05lZWRVcGRhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6Omlu
aXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
VGV4dEJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6dG9UZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFJlc291cmNl
UHJlbG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxSZXNvdXJjZVByZWxvYWRlcjo6
cHJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjptZWRpYUF0dHJpYnV0ZU1hdGNoZXMpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
U2xpZGVyVGh1bWJFbGVtZW50Ojpob3N0SW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVy
VGh1bWJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2xp
ZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDb250cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
bnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpUZXh0Q29udHJv
bFBsYWNlaG9sZGVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbFBsYWNl
aG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKyAgICAgICAgKiBodG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6Cisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzb2x2ZVN0ZXBzRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uQmFzZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6fkFuaW1hdGlvbkJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6cmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkJhc2U6OnNldEFuaW1hdGlvbik6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVy
OjpjYW5jZWxBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRl
cmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNp
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlm
cmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjph
bmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDoK
KyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpyZXNldCk6CisgICAgICAgICogcGFn
ZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkltcGxp
Y2l0QW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpLZXlm
cmFtZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6ZmV0
Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OktleWZy
YW1lQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFt
ZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHBhZ2UvaW9zL0ZyYW1lSU9TLm1tOgorICAgICAgICAo
V2ViQ29yZTo6YW5jZXN0b3JSZXNwb25kaW5nVG9TY3JvbGxXaGVlbEV2ZW50cyk6CisgICAgICAg
ICogcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZsb3dUaHJlYWRDb250cm9sbGVyOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcFJlY3RGb3JOaW5l
UGllY2VJbWFnZVN0cmlwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpmaXJzdExpbmVCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZUZvckZp
cnN0TGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExl
dHRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjcmVhdGVGaXJzdExl
dHRlclJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRqdXN0QmxvY2tDaGlsZEZvclBh
Z2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlTWluaW11bVBhZ2VIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGp1c3RDb21wdXRlZEZvbnRT
aXplcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6Ym9yZGVyUmFkaWkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjplbmNsb3Np
bmdGbG9hdFBhaW50aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dp
Y2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclBy
b3BhZ2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmFwcGx5VG9wTGVmdExvY2F0aW9uT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6aGFzUmVuZGVyT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpoYXNWaXN1YWxPdmVyZmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpiYWNrZ3JvdW5kUm91bmRlZFJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
dXR0b246OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6c3R5bGVX
aWxsQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6c3R5bGVEaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpzZXR1cElubmVyU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpzdHlsZVdpbGxDaGFuZ2UpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OmNyZWF0ZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp1bmNh
Y2hlZEZpcnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmNh
Y2hlZEZpcnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmZp
cnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnN0eWxlV2ls
bENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjphZGRDb250cm9sU3Rh
dGVzRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Z2V0Q2Fj
aGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Z2V0TXV0
YWJsZUNhY2hlZFBzZXVkb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6
OmdldFVuY2FjaGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVu
dDo6cGFpbnRPdXRsaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6aGFzSW5pdGlhbGl6ZWRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpzdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJFbGVtZW50OjptdXRhYmxlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RWxlbWVudDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUmVu
ZGVySW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OlJlbmRl
ckZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRl
Rmxvd1RocmVhZFN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6bGF5b3V0U2hhZG93Q29udHJvbHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzdHls
ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5
c0NyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnBhaW50
T3V0bGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpw
YWludFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjppdGVtT2Zmc2V0Rm9yQWxpZ25tZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0TWFya2VyOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpjb21wdXRl
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVl
ZVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVyU3R5bGUpOgorICAgICAgICAo
UmVuZGVyTWVudUxpc3Q6OnVwZGF0ZU9wdGlvbnNXaWR0aCk6CisgICAgICAgIChSZW5kZXJNZW51
TGlzdDo6aXRlbVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRDb2x1bW5TcGFubmVyKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXI6OmNyZWF0ZUFub255bW91cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50OjpjaGVja1JlZ2lvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlubmVyTGluZUhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpkZWNvcmF0aW9uQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG9yc0FuZFN0eWxlcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjptaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjptYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludFJv
d0dyb3VwQm9yZGVySWZSZXF1aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpwaHlzaWNhbEJvcmRl
ckZvckRpcmVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNoYXJhY3RlckF0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHQ6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmZpcnN0
TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmdldENhY2hlZFBzZXVk
b1N0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmxheW91dFNwZWNpYWxFeGNsdWRl
ZENoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5
b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5
bGVEaWRDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5nZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyUmFkaWlGcm9tU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2spOgor
ICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnBhaW50Rmxvdyk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpoaXRUZXN0Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5n
L1RleHRBdXRvU2l6aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvU2l6aW5nS2V5
OjpUZXh0QXV0b1NpemluZ0tleSk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5n
Lmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b1NpemluZ0tleTo6c3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9TaXppbmdLZXk6OmlzRGVsZXRlZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVUZXh0
U2VsZWN0aW9uUGFpbnRTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdD
b250ZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OmxheW91dCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpyZXNldENvbHVtblJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNl
dENvbHVtblNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmluaGVyaXRDb2x1
bW5Qcm9wZXJ0aWVzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0VHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1Pcmln
aW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5Z
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25C
YWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGlu
Z1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnByZXBhcmVH
cmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFk
b3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVQYXRo
RnJvbUNpcmNsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUGF0aEZyb21FbGxp
cHNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVQYXRoRnJvbVJlY3RFbGVtZW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29u
dGVudCk6CisgICAgICAgICogc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6cG9wU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OnB1c2hQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlRyZWVSZXNvbHZlcjo6cmVzb2x2ZUNvbXBvc2VkVHJlZSk6CisgICAgICAgICogc3R5
bGUvU3R5bGVUcmVlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVz
b2x2ZXI6OnNjb3BlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVVwZGF0ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6VXBkYXRlOjp0ZXh0VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpVcGRhdGU6OmVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
VXBkYXRlOjphZGRFbGVtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVVwZGF0ZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlVwZGF0ZTo6ZG9jdW1lbnQpOgorICAgICAgICAqIHN2Zy9T
VkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnN5bmNocm9uaXpl
U3lzdGVtTGFuZ3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6cmVzb2x2ZUN1
c3RvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnNldFVzZU92ZXJyaWRl
Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpjb21wdXRlZFN0
eWxlKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVt
ZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6ZW5z
dXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnRSYXJlRGF0YTo6b3ZlcnJpZGVDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBzdmcvU1ZH
R3JhcGhpY3NFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYXBoaWNzRWxlbWVu
dDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSk6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aENvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVl
RnJvbVBlcmNlbnRhZ2VUb1VzZXJVbml0cyk6CisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJTdHls
ZUZvckxlbmd0aFJlc29sdmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0
Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FTVMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVNU1RvVXNlclVuaXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VY
Uyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9t
RVhTVG9Vc2VyVW5pdHMpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSk6
CisgICAgICAgICogc3ZnL1NWR1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKToKKwogMjAxNi0wNC0yNiAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIERyb3Ag
W1VzZVBvaW50ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFNwZWVj
aFN5bnRoZXNpcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTM0LDcgKzExMzQsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHls
ZVJhbmdlCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHZpc2libGVQb3MuZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIFJlbmRlck9iamVj
dCogc3RhcnRSZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZy
ZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvKiBzdHlsZSA9ICZyZW5kZXJlci0+c3R5bGUoKTsK
IAogICAgIC8vIHRyYXZlcnNlIGJhY2t3YXJkIGJ5IHJlbmRlcmVyIHRvIGxvb2sgZm9yIHN0eWxl
IGNoYW5nZQogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByID0gcmVuZGVyZXItPnByZXZpb3VzSW5Q
cmVPcmRlcigpOyByOyByID0gci0+cHJldmlvdXNJblByZU9yZGVyKCkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgQXRrQXR0cmlidXRl
U2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IG9iamVjdC0+cmVuZGVyZXIoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byogc3R5bGUgPSAmcmVuZGVyZXItPnN0
eWxlKCk7CiAKICAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gYnVmZmVyKGdfc3RyZHVwX3ByaW50ZigiJWkiLCBzdHlsZS0+Zm9udFNp
emUoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00OTksNyArNDk5LDcgQEAgLSAoV0tRdWFkKWlubmVyRnJhbWVRdWFkICAgICAgIC8v
IHRha2VzIAogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBlbXB0eVF1YWQoKTsK
IAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgIGF1dG8m
IHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IHJl
bmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlIC8qIHVzZSB0cmFuc2Zvcm1zKi8p
OwogCiAgICAgYm91bmRpbmdCb3gubW92ZShzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUu
Ym9yZGVyVG9wV2lkdGgoKSk7CkBAIC01MTMsNyArNTEzLDcgQEAgLSAoV0tRdWFkKWlubmVyRnJh
bWVRdWFkICAgICAgIC8vIHRha2VzIAogLSAoZmxvYXQpY29tcHV0ZWRGb250U2l6ZQogewogICAg
IFdlYkNvcmU6Ok5vZGUgKm5vZGUgPSBjb3JlKHNlbGYpOwotICAgIFJlbmRlclN0eWxlICpzdHls
ZSA9IG5vZGUtPnJlbmRlclN0eWxlKCk7CisgICAgYXV0byAqc3R5bGUgPSBub2RlLT5yZW5kZXJT
dHlsZSgpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiAwLjBmOwogICAgIHJldHVy
biBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMCw3ICs3MDAsNyBAQCBzdGF0aWMgUmVm
PENTU1ZhbHVlTGlzdD4gY3JlYXRlUG9zaXRpb25MCiAgICAgcmV0dXJuIHBvc2l0aW9uTGlzdDsK
IH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcG9zaXRpb25PZmZzZXRWYWx1ZShSZW5kZXJT
dHlsZSYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IHBvc2l0aW9uT2Zmc2V0VmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgTGVuZ3RoIGxlbmd0aDsKICAgICBzd2l0Y2gg
KHByb3BlcnR5SUQpIHsKQEAgLTczNyw3ICs3MzcsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBwb3NpdGlvbk9mZnNldFZhCiAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiB9CiAKLVJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENv
bG9yKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAorUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjdXJyZW50Q29sb3JP
clZhbGlkQ29sb3IoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBDb2xvciYgY29sb3Ip
IGNvbnN0CiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBsb29rIGF0IHZpc2l0ZWQg
aW5mb3JtYXRpb24sIHNvIHRoYXQgY29tcHV0ZWQgc3R5bGUgZG9lc24ndCBleHBvc2UgdGhhdC4K
ICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKQEAgLTExNDMsNyArMTE0Myw3IEBAIHN0YXRpYyBS
ZWY8Q1NTVmFsdWVMaXN0PiBnZXRUcmFuc2l0aW9uUHIKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCi1zdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xsU25hcERlc3RpbmF0aW9u
KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgTGVuZ3RoU2l6ZSYgZGVzdGluYXRpb24pCitzdGF0
aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xsU25hcERlc3RpbmF0aW9uKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgTGVuZ3RoU2l6ZSYgZGVzdGluYXRpb24pCiB7CiAgICAgYXV0byBs
aXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGxpc3QuZ2V0
KCkuYXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoZGVzdGluYXRpb24ud2lk
dGgoKSwgc3R5bGUpKTsKQEAgLTExNTEsNyArMTE1MSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVM
aXN0PiBzY3JvbGxTbmFwRGVzdGkKICAgICByZXR1cm4gbGlzdDsKIH0KIAotc3RhdGljIFJlZjxD
U1NWYWx1ZT4gc2Nyb2xsU25hcFBvaW50cyhSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFNjcm9s
bFNuYXBQb2ludHMqIHBvaW50cykKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBQb2lu
dHMoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTY3JvbGxTbmFwUG9pbnRzKiBwb2lu
dHMpCiB7CiAgICAgaWYgKCFwb2ludHMpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwpAQCAtMTE2Niw3
ICsxMTY2LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcFBvaW50cyhSZQogICAg
IHJldHVybiBXVEZNb3ZlKGxpc3QpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxT
bmFwQ29vcmRpbmF0ZXMoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBWZWN0b3I8TGVuZ3RoU2l6
ZT4mIGNvb3JkaW5hdGVzKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcENvb3JkaW5h
dGVzKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPExlbmd0aFNpemU+JiBj
b29yZGluYXRlcykKIHsKICAgICBpZiAoY29vcmRpbmF0ZXMuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKQEAgLTE4MDcsNyArMTgwNyw3IEBAIHN0YXRpYyB2b2lkIGxvZ1VuaW1wbGVt
ZW50ZWRQcm9wZXJ0eUlEKEMKICAgICBMT0dfRVJST1IoIldlYktpdCBkb2VzIG5vdCB5ZXQgaW1w
bGVtZW50IGdldENvbXB1dGVkU3R5bGUgZm9yICclcycuIiwgZ2V0UHJvcGVydHlOYW1lKHByb3Bl
cnR5SUQpKTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9tU3R5
bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1p
bHlGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGF1dG8gbGlzdCA9
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3R5bGUtPmZvbnRDYXNjYWRlKCkuZmFtaWx5Q291bnQoKTsgKytpKQpAQCAt
MTgxNSw3ICsxODE1LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9t
UwogICAgIHJldHVybiBsaXN0OwogfQogCi1zdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBs
aW5lSGVpZ2h0RnJvbVN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+IGxpbmVIZWlnaHRGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQogewogICAgIExlbmd0aCBsZW5ndGggPSBzdHlsZS5saW5lSGVpZ2h0KCk7CiAgICAgaWYgKGxl
bmd0aC5pc05lZ2F0aXZlKCkpIC8vIElmIHRydWUsIGxpbmUtaGVpZ2h0IG5vdCBzZXQ7IHVzZSB0
aGUgZm9udCdzIGxpbmUgc3BhY2luZy4KQEAgLTE4MzAsMTkgKzE4MzAsMTkgQEAgc3RhdGljIFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZUhlaWdodAogICAgIHJldHVybiB6b29tQWRqdXN0ZWRQ
aXhlbFZhbHVlKGZsb2F0VmFsdWVGb3JMZW5ndGgobGVuZ3RoLCAwKSwgc3R5bGUpOwogfQogCi1z
dGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U2l6ZUZyb21TdHlsZShSZW5kZXJTdHls
ZSYgc3R5bGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U2l6ZUZyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBp
eGVsVmFsdWUoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCksIHN0eWxlKTsK
IH0KIAotc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFN0eWxlRnJvbVN0eWxlKFJl
bmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRTdHls
ZUZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS5pdGFsaWMoKSkKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSXRhbGljKTsKICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb3JtYWwpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudEZyb21T
dHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFu
dEZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS52YXJpYW50U2V0dGluZ3MoKS5pc0FsbE5vcm1hbCgpKQogICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb3JtYWwpOwpAQCAtMjAyOSw3ICsyMDI5LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1
ZT4gZm9udFZhcmlhbnRGcm9tU3R5bAogICAgIHJldHVybiBXVEZNb3ZlKGxpc3QpOwogfQogCi1z
dGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250V2VpZ2h0RnJvbVN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRXZWlnaHRGcm9t
U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHN3aXRjaCAoc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLndlaWdodCgpKSB7CiAgICAgY2FzZSBGb250V2VpZ2h0MTAwOgpAQCAt
MjA1NSw3ICsyMDU1LDcgQEAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdo
dAogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRTeW50
aGVzaXNGcm9tU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4g
Zm9udFN5bnRoZXNpc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAg
aWYgKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSA9PSBGb250U3ludGhl
c2lzTm9uZSkKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CkBAIC0yMDcyLDcgKzIwNzIsNyBAQCB0eXBl
ZGVmIGNvbnN0IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqUmVuCiB0eXBlZGVmIExheW91dFVuaXQg
KFJlbmRlckJveE1vZGVsT2JqZWN0OjoqUmVuZGVyQm94Q29tcHV0ZWRDU1NWYWx1ZUdldHRlciko
KSBjb25zdDsKIAogdGVtcGxhdGU8UmVuZGVyU3R5bGVMZW5ndGhHZXR0ZXIgbGVuZ3RoR2V0dGVy
LCBSZW5kZXJCb3hDb21wdXRlZENTU1ZhbHVlR2V0dGVyIGNvbXB1dGVkQ1NTVmFsdWVHZXR0ZXI+
Ci1pbmxpbmUgUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhl
bFZhbHVlKFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK2lubGlu
ZSBSZWZQdHI8Q1NTVmFsdWU+IHpvb21BZGp1c3RlZFBhZGRpbmdPck1hcmdpblBpeGVsVmFsdWUo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAg
IExlbmd0aCB1bnpvb216ZWRMZW5ndGggPSAoc3R5bGUuKmxlbmd0aEdldHRlcikoKTsKICAgICBp
ZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIpIHx8IHVuem9vbXplZExlbmd0aC5pc0ZpeGVkKCkp
CkBAIC0yMDgxLDcgKzIwODEsNyBAQCBpbmxpbmUgUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0
ZWRQYWRkCiB9CiAKIHRlbXBsYXRlPFJlbmRlclN0eWxlTGVuZ3RoR2V0dGVyIGxlbmd0aEdldHRl
cj4KLWlubGluZSBib29sIHBhZGRpbmdPck1hcmdpbklzUmVuZGVyZXJEZXBlbmRlbnQoUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoraW5saW5lIGJvb2wgcGFkZGlu
Z09yTWFyZ2luSXNSZW5kZXJlckRlcGVuZGVudChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXIt
PmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxMzksNyArMjEzOSw3IEBAIHN0
YXRpYyBDU1NWYWx1ZUlEIGNvbnZlcnRUb1JlZ2lvbkJyZWFrKEIKIH0KICNlbmRpZgogICAgIAot
c3RhdGljIGJvb2wgaXNMYXlvdXREZXBlbmRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMgYm9vbCBp
c0xheW91dERlcGVuZGVudChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBzd2l0Y2ggKHByb3Bl
cnR5SUQpIHsKICAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CkBAIC0yMjY3LDcgKzIyNjcsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgdXBkYXRlU3R5bGVJZk5lZWRlZEZvCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIGNvbXB1dGVSZW5kZXJTdHlsZUZv
clByb3BlcnR5KE5vZGUqIHN0eWxlZE5vZGUsIFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZp
ZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiYgb3duZWRTdHlsZSkKK3N0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVS
ZW5kZXJTdHlsZUZvclByb3BlcnR5KE5vZGUqIHN0eWxlZE5vZGUsIFBzZXVkb0lkIHBzZXVkb0Vs
ZW1lbnRTcGVjaWZpZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiYgb3duZWRTdHlsZSkKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gc3R5bGVkTm9kZS0+cmVuZGVyZXIoKTsKIApAQCAtMjM3Myw3ICsyMzczLDcgQEAgUmVmUHRy
PENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOgogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gb3duZWRTdHlsZTsKLSAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBudWxscHRyOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSA9IG51bGxwdHI7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG51bGxwdHI7CiAgICAg
Ym9vbCBmb3JjZUZ1bGxMYXlvdXQgPSBmYWxzZTsKICAgICBpZiAodXBkYXRlTGF5b3V0KSB7CkBA
IC0zODYxLDcgKzM4NjEsNyBAQCB1bnNpZ25lZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246
OmxlCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsK
KyAgICBhdXRvKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3Bl
Y2lmaWVyKTsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzg4MCw3
ICszODgwLDcgQEAgU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6aXRlbQogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmll
cik7CisgICAgYXV0byogc3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVu
dFNwZWNpZmllcik7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CiAgICAgCkBAIC0zODk5LDcgKzM4OTksNyBAQCBib29sIENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OnByb3BlcnR5TWF0CiB7CiAgICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlGb250
U2l6ZSAmJiBpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBtX25vZGUpIHsKICAgICAg
ICAgbV9ub2RlLT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwotICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9ub2RlLT5jb21wdXRlZFN0
eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcikpIHsKKyAgICAgICAgaWYgKGF1dG8qIHN0eWxl
ID0gbV9ub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcikpIHsKICAg
ICAgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgICAgICBh
dXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
OwogICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSAmJiBwcmlt
aXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gc2l6ZUlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBwcml2YXRlOgogICAgIE5v
ZGUqIHN0eWxlZE5vZGUoKSBjb25zdDsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3ZnUHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0KSBjb25zdDsKLSAgICBSZWZQdHI8
U1ZHUGFpbnQ+IGFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFp
bnQ+LCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIFJlZlB0cjxTVkdQYWludD4gYWRqdXN0U1ZH
UGFpbnRGb3JDdXJyZW50Q29sb3IoUGFzc1JlZlB0cjxTVkdQYWludD4sIGNvbnN0IFJlbmRlclN0
eWxlKikgY29uc3Q7CiAKICAgICBzdGF0aWMgUmVmPENTU1ZhbHVlPiB2YWx1ZUZvclNoYWRvdyhj
b25zdCBTaGFkb3dEYXRhKiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUmLCBBZGp1
c3RQaXhlbFZhbHVlc0ZvckNvbXB1dGVkU3R5bGUgPSBBZGp1c3RQaXhlbFZhbHVlcyk7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3IoUmVuZGVy
U3R5bGUqLCBjb25zdCBDb2xvciYpIGNvbnN0OworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQ29s
b3ImKSBjb25zdDsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldENTU1Byb3BlcnR5VmFs
dWVzRm9yU2hvcnRoYW5kUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikg
Y29uc3Q7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZ2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3JT
aWRlc1Nob3J0aGFuZChjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3Bw
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgZmxvYXQgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6em9vbSgpIAogZG91YmxlIENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGE6OnZpZXdwb3J0V2lkdGhGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxl
ICYmICFtX2NvbXB1dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9y
dFVuaXRzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0
SGFzVmlld3BvcnRVbml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtNTcsNyArNTcsNyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YTo6dmlld3BvCiBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRIZWln
aHRGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRT
aXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7CisgICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwog
CiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjgsNyArNjgs
NyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvCiBkb3VibGUgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRNaW5GYWN0b3IoKSBjb25zdAogewogICAg
IGlmIChtX3N0eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5z
ZXRIYXNWaWV3cG9ydFVuaXRzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPiht
X3N0eWxlKS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtODAsNyArODAsNyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YTo6dmlld3BvCiBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6
dmlld3BvcnRNYXhGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2NvbXB1
dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7Cisg
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3BvcnRV
bml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlbmRlclZp
ZXc7CiAKIGNsYXNzIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgewogcHVibGljOgotICAgIENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSogcm9vdFN0eWxlLCBjb25zdCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBmbG9hdCB6b29t
LCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpCisgICAgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290
U3R5bGUsIGNvbnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGZsb2F0IHpvb20sIGJvb2wgY29t
cHV0aW5nRm9udFNpemUgPSBmYWxzZSkKICAgICAgICAgOiBtX3N0eWxlKHN0eWxlKQogICAgICAg
ICAsIG1fcm9vdFN0eWxlKHJvb3RTdHlsZSkKICAgICAgICAgLCBtX3JlbmRlclZpZXcocmVuZGVy
VmlldykKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoem9vbSA+IDAp
OwogICAgIH0KIAotICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25zdCBSZW5kZXJWaWV3KiByZW5k
ZXJWaWV3LCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpCisgICAgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGNvbnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGJvb2wgY29tcHV0aW5n
Rm9udFNpemUgPSBmYWxzZSkKICAgICAgICAgOiBtX3N0eWxlKHN0eWxlKQogICAgICAgICAsIG1f
cm9vdFN0eWxlKHJvb3RTdHlsZSkKICAgICAgICAgLCBtX3JlbmRlclZpZXcocmVuZGVyVmlldykK
QEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBSZW5kZXJTdHls
ZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQogICAgIGNvbnN0IFJlbmRlclN0
eWxlKiByb290U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RTdHlsZTsgfQogICAgIGZsb2F0
IHpvb20oKSBjb25zdDsKICAgICBib29sIGNvbXB1dGluZ0ZvbnRTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9jb21wdXRpbmdGb250U2l6ZTsgfQpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBtX3N0eWxlOwogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RTdHlsZTsKICAg
ICBjb25zdCBSZW5kZXJWaWV3KiBtX3JlbmRlclZpZXc7CiAgICAgZmxvYXQgbV96b29tOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw3ICs1Niw3IEBAIFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpzdHlsZSgpIGNvbnMKICAg
ICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGUoKTsKIH0KIAotUmVuZGVyU3R5bGUqIENTU1RvU3R5
bGVNYXA6OnJvb3RFbGVtZW50U3R5bGUoKSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIENTU1Rv
U3R5bGVNYXA6OnJvb3RFbGVtZW50U3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3Jlc29s
dmVyLT5yb290RWxlbWVudFN0eWxlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VG9TdHlsZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBz
aW1pbGFyIHRvIGhvdyBQYWludEluZm8vTGF5b3V0U3RhdGUgY2FjaGUgdmFsdWVzIG5lZWRlZCBm
b3IKICAgICAvLyB0aGUgY3VycmVudCBwYWludC9sYXlvdXQuCiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlKCkgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdDsK
KyAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0OwogICAgIGJv
b2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgcGFydCBvZiBzb21lIHNvcnQgb2YgU3R5bGVJbWFnZUNhY2hlIG9iamVjdCB3aGljaApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSwxMCArODUsMTAgQEAgTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVk
aWFRdWVyeUV2YWx1YXRvcgogewogfQogCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5
RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiBmcmFtZSwg
UmVuZGVyU3R5bGUqIHN0eWxlKQorTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1
YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSogZnJhbWUsIGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVkTWVkaWFUeXBl
KQogICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fc3R5bGUoV1RGTW92ZShzdHlsZSkpCisg
ICAgLCBtX3N0eWxlKHN0eWxlKQogICAgICwgbV9leHBSZXN1bHQoZmFsc2UpIC8vIGRvZXNuJ3Qg
bWF0dGVyIHdoZW4gd2UgaGF2ZSBtX2ZyYW1lIGFuZCBtX3N0eWxlCiB7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogCiAgICAgLyoqIENyZWF0ZXMgZXZhbHVhdG9yIHdo
aWNoIGV2YWx1YXRlcyBmdWxsIG1lZGlhIHF1ZXJpZXMKICAgICAgKi8KLSAgICBNZWRpYVF1ZXJ5
RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiwgUmVuZGVy
U3R5bGUqKTsKKyAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRN
ZWRpYVR5cGUsIEZyYW1lKiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKIAogICAgIH5NZWRpYVF1ZXJ5
RXZhbHVhdG9yKCk7CiAKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBT
dHJpbmcgbV9tZWRpYVR5cGU7CiAgICAgRnJhbWUqIG1fZnJhbWUgeyBudWxscHRyIH07IC8vIG5v
dCBvd25lZAotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlIHsgbnVsbHB0ciB9OworICAgIGNvbnN0
IFJlbmRlclN0eWxlKiBtX3N0eWxlIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9leHBSZXN1bHQ7
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gc3Ryb2tlRGFzaEFycmF5
VAogICAgIHJldHVybiBsaXN0OwogfQogCi1SZWZQdHI8U1ZHUGFpbnQ+IENvbXB1dGVkU3R5bGVF
eHRyYWN0b3I6OmFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFp
bnQ+IG5ld1BhaW50LCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitSZWZQdHI8U1ZHUGFpbnQ+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBh
c3NSZWZQdHI8U1ZHUGFpbnQ+IG5ld1BhaW50LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CiB7CiAgICAgUmVmUHRyPFNWR1BhaW50PiBwYWludCA9IG5ld1BhaW50OwogICAgIGlmIChw
YWludC0+cGFpbnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9S
IHx8IHBhaW50LT5wYWludFR5cGUoKSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfQ1VS
UkVOVENPTE9SKQpAQCAtMTExLDcgKzExMSw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRT
dHlsZUV4dHJhY3RvcjoKICAgICBpZiAodXBkYXRlTGF5b3V0KQogICAgICAgICBub2RlLT5kb2N1
bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbm9kZS0+
Y29tcHV0ZWRTdHlsZSgpOworICAgIGF1dG8qIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZSgp
OwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBtYXRjaChzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4mJiBleHByZXNzaW9uLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBib29sIG1hdGNoKHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YVF1ZXJ5RXhwPiYmIGV4cHJlc3Npb24sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRnJhbWUq
IGZyYW1lKQogewogICAgIGlmIChleHByZXNzaW9uLT5tZWRpYUZlYXR1cmUoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDcsMTIgKzQ3LDEyIEBAIHN0YXRpYyBib29sIG1h
dGNoKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVEKICAgICByZXR1cm4gbWVkaWFRdWVyeUV2YWx1YXRv
ci5ldmFsKG1lZGlhUXVlcnlTZXQuZ2V0KCkpOwogfQogCi1zdGF0aWMgZmxvYXQgZGVmYXVsdExl
bmd0aChSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCitzdGF0aWMgZmxvYXQg
ZGVmYXVsdExlbmd0aChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcp
CiB7CiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRl
Tm9uQ2FsY0xlbmd0aERvdWJsZShDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0
eWxlLCB2aWV3KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVywgMTAwLjApKTsKIH0KIAotc3Rh
dGljIGZsb2F0IGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFJlbmRlclZpZXcqIHZpZXcpCitzdGF0aWMgZmxvYXQgY29tcHV0ZUxlbmd0aChDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyVmlldyogdmlldykKIHsK
ICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0
eWxlLCB2aWV3KTsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewpAQCAt
NzAsNyArNzAsNyBAQCBmbG9hdCBwYXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcgc2l6CiB7
CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJTdHlsZSYgc3R5
bGUgPSB2aWV3LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gdmlldy0+c3R5bGUoKTsKICAg
ICBmb3IgKGF1dG8mIHNvdXJjZVNpemUgOiBDU1NQYXJzZXIoQ1NTU3RyaWN0TW9kZSkucGFyc2VT
aXplc0F0dHJpYnV0ZShzaXplc0F0dHJpYnV0ZSkpIHsKICAgICAgICAgaWYgKG1hdGNoKFdURk1v
dmUoc291cmNlU2l6ZS5leHByZXNzaW9uKSwgc3R5bGUsIGZyYW1lKSkKICAgICAgICAgICAgIHJl
dHVybiBjb21wdXRlTGVuZ3RoKHNvdXJjZVNpemUubGVuZ3RoLmdldCgpLCBzdHlsZSwgdmlldyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3NSw3ICs1NzUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0
eWxlKQorICAgIHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1h
Z2UgPyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2UoKTsKICAgICB9
CkBAIC02NjQsNyArNjY0LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaQogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENsaXAo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7CisgICAgYXV0byogcGFyZW50U3R5
bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7CiAgICAgaWYgKCFwYXJlbnRTdHlsZS0+
aGFzQ2xpcCgpKQogICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsQ2xpcChzdHlsZVJlc29sdmVy
KTsKICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENsaXAocGFyZW50U3R5bGUtPmNsaXBU
b3AoKSwgcGFyZW50U3R5bGUtPmNsaXBSaWdodCgpLCBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgp
LCBwYXJlbnRTdHlsZS0+Y2xpcExlZnQoKSk7CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCB0ZW1wbGF0
ZSA8U3R5bGVCdWlsZGVyQ3VzdG9tOjpDb3VudGVyQmVoCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKIHsKICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6
IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkg
eworICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkgewog
ICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoa2V5VmFsdWUu
a2V5LCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChj
b3VudGVyQmVoYXZpb3IgPT0gUmVzZXQpCiAgICAgICAgICAgICBkaXJlY3RpdmVzLmluaGVyaXRS
ZXNldChrZXlWYWx1ZS52YWx1ZSk7CkBAIC0xMzM3LDcgKzEzMzcsNyBAQCBpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiAgICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAg
ICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKSktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51
bGxBdG9tLCBjb250ZW50VmFsdWUuZ2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsK
ICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdHlsZVJlc29sdmVyLmVs
ZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1w
bCgpLCBkaWRTZXQpOwpAQCAtMTcwNiw3ICsxNzA2LDcgQEAgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVBbHQoUwogICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
dHlsZVR5cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0VW5pcXVlKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIu
cGFyZW50U3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRl
clN0eWxlKj4oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+c2V0VW5pcXVlKCk7CiAKICAg
ICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJp
bmdWYWx1ZSgpLCBudWxsQXRvbSk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBzdHlsZVJlc29sdmVyLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNyAr
MzM2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aQogICAgIG1f
bWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwID0gMDsKIH0KIAot
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGRvY3VtZW50RWxlbWVudFN0eWxlLCBj
b25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVjdG9yRmlsdGVy
KiBzZWxlY3RvckZpbHRlcikKK1N0eWxlUmVzb2x2ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRl
clN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHlsZSwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25G
b3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCiAgICAgOiBt
X2VsZW1lbnQoJmVsZW1lbnQpCiAgICAgLCBtX3BhcmVudFN0eWxlKHBhcmVudFN0eWxlKQogICAg
ICwgbV9yZWdpb25Gb3JTdHlsaW5nKHJlZ2lvbkZvclN0eWxpbmcpCkBAIC0zODAsNyArMzgwLDcg
QEAgc3RhdGljIGlubGluZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShjbwogICAgIHJldHVybiBw
YXJlbnROb2RlICYmIHBhcmVudE5vZGUtPmlzU2hhZG93Um9vdCgpOwogfQogCi1FbGVtZW50U3R5
bGUgU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdC
ZWhhdmlvciwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxl
Y3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCitFbGVtZW50U3R5bGUgU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwgY29u
c3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciog
c2VsZWN0b3JGaWx0ZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5Mb2FkUGVuZGluZ0lt
YWdlcyk7CiAKQEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1l
U3R5bGVzRm9yQW5pCiAgICAgfQogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgUmVuZGVyU3R5
bGUmIHBhcmVudFN0eWxlKQorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
UHNldWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIGNvbnN0IFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSkKIHsKICAgICBtX3N0YXRlID0gU3RhdGUoZWxlbWVudCwgJnBhcmVudFN0
eWxlKTsKIApAQCAtMTYzMSw3ICsxNjMxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1BybwogICAgIH0KIAogICAgIGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBhcmVu
dFN0eWxlKCktPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3Bl
cnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgc3RhdGUucGFyZW50U3R5bGUo
KS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKyAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJTdHlsZSo+KHN0YXRlLnBhcmVudFN0eWxlKCkpLT5zZXRIYXNFeHBsaWNpdGx5
SW5oZXJpdGVkUHJvcGVydGllcygpOwogICAgIAogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1
c3RvbSkgewogICAgICAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBjdXN0b21Qcm9wZXJ0eSA9
ICZkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqdmFsdWVUb0FwcGx5KTsKQEAgLTE3
MzQsNyArMTczNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanUK
IH0KICNlbmRpZgogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5k
ZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmICghcGFyZW50U3R5bGUpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3NDgsNyArMTc0OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Ja
b29tQ2hhbmdlKFIKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlw
dGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hh
bmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQordm9pZCBT
dHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgY29uc3QgYXV0byYg
Y2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSwxOCArMTQxLDE4IEBAIHB1
YmxpYzoKICAgICBTdHlsZVJlc29sdmVyKERvY3VtZW50Jik7CiAgICAgflN0eWxlUmVzb2x2ZXIo
KTsKIAotICAgIEVsZW1lbnRTdHlsZSBzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1
bGVzLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25z
dCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKKyAgICBFbGVtZW50U3R5bGUgc3R5bGVGb3JF
bGVtZW50KGNvbnN0IEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJ1
bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgY29uc3QgUmVuZGVyUmVnaW9uKiBy
ZWdpb25Gb3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0
cik7CiAKICAgICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKGNvbnN0IEVsZW1lbnQm
LCBjb25zdCBSZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYpOwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIGNv
bnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3Qg
RWxlbWVudCYsIGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIGNvbnN0IFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9y
UGFnZShpbnQgcGFnZUluZGV4KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUoKTsgfQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGUoKTsgfQotICAgIFJlbmRlclN0
eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCk7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSog
cm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpOyB9CiAgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCgpIHsgcmV0dXJuIG1fc3RhdGUuZWxl
bWVudCgpOyB9CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgeyByZXR1cm4gbV9kb2N1bWVudDsg
fQogICAgIFNldHRpbmdzKiBkb2N1bWVudFNldHRpbmdzKCkgeyByZXR1cm4gbV9kb2N1bWVudC5z
ZXR0aW5ncygpOyB9CkBAIC0zMTcsOCArMzE3LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRl
dGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAt
ZHdoCi0gICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwotICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJl
bmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9y
R2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0la
SU5HKQogICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChSZW5kZXJTdHlsZSopOwogI2Vu
ZGlmCkBAIC0zNjEsNyArMzYxLDcgQEAgcHVibGljOgogICAgIGNsYXNzIFN0YXRlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFN0YXRlKCkgeyB9Ci0gICAgICAgIFN0YXRlKGNvbnN0IEVsZW1lbnQm
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRT
dHlsZSA9IG51bGxwdHIsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IG51
bGxwdHIsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiA9IG51bGxwdHIpOworICAgICAgICBTdGF0ZShj
b25zdCBFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSogZG9jdW1lbnRFbGVtZW50U3R5bGUgPSBudWxscHRyLCBjb25zdCBSZW5kZXJSZWdp
b24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25zdCBTZWxlY3RvckZpbHRlciogPSBu
dWxscHRyKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBjbGVhcigpOwpAQCAtMzc0LDgg
KzM3NCw4IEBAIHB1YmxpYzoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiB0
YWtlU3R5bGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fc3R5bGUpOyB9CiAKICAgICAgICAgdm9pZCBz
ZXRQYXJlbnRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+KTsKLSAgICAgICAgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQot
ICAgICAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdEVsZW1lbnRTdHlsZTsgfQorICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0
eWxlOyB9CiAKICAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9yZWdpb25Gb3JTdHlsaW5nOyB9CiAgICAgICAgIEVJbnNpZGVMaW5r
IGVsZW1lbnRMaW5rU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRMaW5rU3RhdGU7IH0K
QEAgLTQyNyw5ICs0MjcsOSBAQCBwdWJsaWM6CiAKICAgICAgICAgY29uc3QgRWxlbWVudCogbV9l
bGVtZW50IHsgbnVsbHB0ciB9OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IG1fc3R5bGU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlIHsgbnVsbHB0ciB9
OworICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsK
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX293bmVkUGFyZW50U3R5bGU7
Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07Cisg
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07
CiAKICAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmcgeyBudWxs
cHRyIH07CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDA4LDcgKzIwMDgsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nCiAgICAgbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSBvbGRJZ25vcmU7CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxlbWVudEln
bm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxl
Rm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQmIGVsZW1lbnQsIGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBBU1NFUlQoJmVsZW1lbnQuZG9j
dW1lbnQoKSA9PSB0aGlzKTsKIApAQCAtMjUxNSw3ICsyNTE1LDcgQEAgdm9pZCBEb2N1bWVudDo6
c2V0VmlzdWFsbHlPcmRlcmVkKCkKIHsKICAgICBtX3Zpc3VhbGx5T3JkZXJlZCA9IHRydWU7CiAg
ICAgaWYgKHJlbmRlclZpZXcoKSkKLSAgICAgICAgcmVuZGVyVmlldygpLT5zdHlsZSgpLnNldFJU
TE9yZGVyaW5nKFZpc3VhbE9yZGVyKTsKKyAgICAgICAgcmVuZGVyVmlldygpLT5tdXRhYmxlU3R5
bGUoKS5zZXRSVExPcmRlcmluZyhWaXN1YWxPcmRlcik7CiB9CiAKIFJlZjxEb2N1bWVudFBhcnNl
cj4gRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3MSw3ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyhSdW5Qb3N0TGF5
b3V0VGFza3MgPSBSdW5Qb3N0TGF5b3V0VGFza3M6OkFzeW5jaHJvbm91c2x5KTsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5n
U3R5bGVzaGVldHMoRWxlbWVudCYsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRpbmdT
dHlsZXNoZWV0cyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBwYWdlIGJveCAobWFyZ2luIGJveGVzIGFuZCBwYWdlIGJv
cmRlcnMpIGlzIHZpc2libGUuCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BhZ2VCb3hWaXNp
YmxlKGludCBwYWdlSW5kZXgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcwLDcgKzEzNzAsNyBAQCBTdHlsZVJlc29sdmVyJiBFbGVtZW50OjpzdHlsZVJlc29s
dmVyKCkKICAgICByZXR1cm4gZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CiB9CiAK
LUVsZW1lbnRTdHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQorRWxlbWVudFN0eWxlIEVsZW1lbnQ6OnJlc29sdmVTdHlsZShjb25zdCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCiB7CiAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVs
ZW1lbnQoKnRoaXMsIHBhcmVudFN0eWxlKTsKIH0KQEAgLTE3NTgsNyArMTc1OCw3IEBAIGJvb2wg
RWxlbWVudDo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSAKIHN0YXRpYyB2b2lkIGNoZWNrRm9y
RW1wdHlTdHlsZUNoYW5nZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LnN0
eWxlQWZmZWN0ZWRCeUVtcHR5KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxl
bWVudC5yZW5kZXJTdHlsZSgpOworICAgICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVy
U3R5bGUoKTsKICAgICAgICAgaWYgKCFzdHlsZSB8fCAoIXN0eWxlLT5lbXB0eVN0YXRlKCkgfHwg
ZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpKQogICAgICAgICAgICAgZWxlbWVudC5zZXROZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgfQpAQCAtMTc4NCwxNCArMTc4NCwxNCBAQCBzdGF0aWMgdm9pZCBj
aGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaW5z
ZXJ0L2FwcGVuZCBjYXNlLgogICAgICAgICBpZiAobmV3Rmlyc3RFbGVtZW50ICE9IGVsZW1lbnRB
ZnRlckNoYW5nZSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudEFm
dGVyQ2hhbmdlLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0byogc3R5bGUgPSBlbGVt
ZW50QWZ0ZXJDaGFuZ2UtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlIHx8
IHN0eWxlLT5maXJzdENoaWxkU3RhdGUoKSkKICAgICAgICAgICAgICAgICBlbGVtZW50QWZ0ZXJD
aGFuZ2UtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdl
IGFsc28gaGF2ZSB0byBoYW5kbGUgbm9kZSByZW1vdmFsLgogICAgICAgICBpZiAoY2hlY2tUeXBl
ID09IFNpYmxpbmdFbGVtZW50UmVtb3ZlZCAmJiBuZXdGaXJzdEVsZW1lbnQgPT0gZWxlbWVudEFm
dGVyQ2hhbmdlICYmIG5ld0ZpcnN0RWxlbWVudCkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gbmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0
byogc3R5bGUgPSBuZXdGaXJzdEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBp
ZiAoIXN0eWxlIHx8ICFzdHlsZS0+Zmlyc3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAg
bmV3Rmlyc3RFbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KQEAgLTE4
MDQsNyArMTgwNCw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygK
ICAgICAgICAgRWxlbWVudCogbmV3TGFzdEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpsYXN0
Q2hpbGQocGFyZW50KTsKIAogICAgICAgICBpZiAobmV3TGFzdEVsZW1lbnQgIT0gZWxlbWVudEJl
Zm9yZUNoYW5nZSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudEJl
Zm9yZUNoYW5nZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxl
bWVudEJlZm9yZUNoYW5nZS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICghc3R5bGUg
fHwgc3R5bGUtPmxhc3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudEJlZm9y
ZUNoYW5nZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0xODEyLDcgKzE4
MTIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAg
IC8vIFdlIGFsc28gaGF2ZSB0byBoYW5kbGUgbm9kZSByZW1vdmFsLiAgVGhlIHBhcnNlciBjYWxs
YmFjayBjYXNlIGlzIHNpbWlsYXIgdG8gbm9kZSByZW1vdmFsIGFzIHdlbGwgaW4gdGhhdCB3ZSBu
ZWVkIHRvIGNoYW5nZSB0aGUgbGFzdCBjaGlsZAogICAgICAgICAvLyB0byBtYXRjaCBub3cuCiAg
ICAgICAgIGlmICgoY2hlY2tUeXBlID09IFNpYmxpbmdFbGVtZW50UmVtb3ZlZCB8fCBjaGVja1R5
cGUgPT0gRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4pICYmIG5ld0xhc3RFbGVtZW50ID09IGVsZW1l
bnRCZWZvcmVDaGFuZ2UgJiYgbmV3TGFzdEVsZW1lbnQpIHsKLSAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IG5ld0xhc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAg
YXV0byogc3R5bGUgPSBuZXdMYXN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAg
IGlmICghc3R5bGUgfHwgIXN0eWxlLT5sYXN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAg
IG5ld0xhc3RFbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KQEAgLTI0
NjEsNyArMjQ2MSw3IEBAIHN0YXRpYyBQc2V1ZG9FbGVtZW50KiBiZWZvcmVPckFmdGVyUHNldWQK
ICAgICB9CiB9CiAKLVJlbmRlclN0eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3R5bGUo
KQorY29uc3QgUmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmV4aXN0aW5nQ29tcHV0ZWRTdHlsZSgpCiB7
CiAgICAgaWYgKGF1dG8qIHJlbmRlclRyZWVTdHlsZSA9IHJlbmRlclN0eWxlKCkpCiAgICAgICAg
IHJldHVybiByZW5kZXJUcmVlU3R5bGU7CkBAIC0yNDcyLDEzICsyNDcyLDEzIEBAIFJlbmRlclN0
eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotUmVuZGVyU3R5bGUmIEVsZW1lbnQ6OnJlc29sdmVDb21wdXRlZFN0eWxlKCkKK2NvbnN0IFJl
bmRlclN0eWxlJiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSgpCiB7CiAgICAgQVNTRVJU
KGluRG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKCFleGlzdGluZ0NvbXB1dGVkU3R5bGUoKSk7CiAK
ICAgICBEZXF1ZTxFbGVtZW50KiwgMzI+IGVsZW1lbnRzUmVxdWlyaW5nQ29tcHV0ZWRTdHlsZSh7
IHRoaXMgfSk7Ci0gICAgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUgPSBudWxscHRyOworICAg
IGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gbnVsbHB0cjsKIAogICAgIC8vIENv
bGxlY3QgYW5jZXN0b3JzIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgaGFzIHN0eWxlLgogICAgIGF1
dG8gY29tcG9zZWRBbmNlc3RvcnMgPSBjb21wb3NlZFRyZWVBbmNlc3RvcnMoKnRoaXMpOwpAQCAt
MjUwMSw3ICsyNTAxLDcgQEAgUmVuZGVyU3R5bGUmIEVsZW1lbnQ6OnJlc29sdmVDb21wdXRlZFN0
eQogICAgIHJldHVybiAqY29tcHV0ZWRTdHlsZTsKIH0KIAotUmVuZGVyU3R5bGUqIEVsZW1lbnQ6
OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKK2NvbnN0IFJl
bmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRT
cGVjaWZpZXIpCiB7CiAgICAgaWYgKFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBiZWZv
cmVPckFmdGVyUHNldWRvRWxlbWVudCgqdGhpcywgcHNldWRvRWxlbWVudFNwZWNpZmllcikpCiAg
ICAgICAgIHJldHVybiBwc2V1ZG9FbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CkBAIC0zMjk1LDcg
KzMyOTUsNyBAQCB2b2lkIEVsZW1lbnQ6OmRpZERldGFjaFJlbmRlcmVycygpCiAgICAgQVNTRVJU
KGhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVu
dFN0eWxlPiBFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJT
dHlsZSopCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IEVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikKIHsKICAgICBBU1NFUlQo
aGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpOwogICAgIHJldHVybiBOdWxsb3B0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VGFiSW5kZXgoaW50KTsKICAgICB2aXJ0dWFsIEVsZW1lbnQqIGZvY3Vz
RGVsZWdhdGUoKTsKIAotICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkID0g
Tk9QU0VVRE8pIG92ZXJyaWRlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxl
KFBzZXVkb0lkID0gTk9QU0VVRE8pIG92ZXJyaWRlOwogCiAgICAgYm9vbCBuZWVkc1N0eWxlSW52
YWxpZGF0aW9uKCkgY29uc3Q7CiAKQEAgLTQ4MCw3ICs0ODAsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGV0
YWNoUmVuZGVyZXJzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZERldGFjaFJlbmRlcmVycygpOwot
ICAgIHZpcnR1YWwgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVu
ZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RT
dHlsZSk7CiAKICAgICBMYXlvdXRSZWN0IGFic29sdXRlRXZlbnRIYW5kbGVyQm91bmRzKGJvb2wm
IGluY2x1ZGVzRml4ZWRQb3NpdGlvbkVsZW1lbnRzKSBvdmVycmlkZTsKIApAQCAtNDk5LDcgKzQ5
OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cigpOwotICAgIEVsZW1lbnRTdHlsZSByZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKTsKKyAgICBFbGVtZW50U3R5bGUgcmVzb2x2ZVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSk7CiAKICAgICBib29sIGhhc0Rpc3BsYXlDb250ZW50cygpIGNvbnN0OwogICAg
IHZvaWQgc2V0SGFzRGlzcGxheUNvbnRlbnRzKGJvb2wpOwpAQCAtNTkyLDggKzU5Miw4IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHJlbW92ZVNoYWRvd1Jvb3QoKTsKIAotICAgIFJlbmRlclN0eWxl
KiBleGlzdGluZ0NvbXB1dGVkU3R5bGUoKTsKLSAgICBSZW5kZXJTdHlsZSYgcmVzb2x2ZUNvbXB1
dGVkU3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogZXhpc3RpbmdDb21wdXRlZFN0eWxl
KCk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHJlc29sdmVDb21wdXRlZFN0eWxlKCk7CiAKICAg
ICBib29sIHJhcmVEYXRhU3R5bGVBZmZlY3RlZEJ5RW1wdHkoKSBjb25zdDsKICAgICBib29sIHJh
cmVEYXRhQ2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjU5LDcgKzY1OSw3IEBAIHN0YXRpYyBOb2RlOjpFZGl0YWJpbGl0eSBj
b21wdXRlRWRpdGFiaWwKICAgICAvLyB3b3VsZCBmaXJlIGluIHRoZSBtaWRkbGUgb2YgRG9jdW1l
bnQ6OnNldEZvY3VzZWRFbGVtZW50KCkuCiAKICAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSAm
c3RhcnROb2RlOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IG5vZGUtPmlzRG9jdW1lbnROb2RlKCkgPyBub2RlLT5yZW5kZXJT
dHlsZSgpIDogY29uc3RfY2FzdDxOb2RlKj4obm9kZSktPmNvbXB1dGVkU3R5bGUoKTsKKyAgICAg
ICAgYXV0byogc3R5bGUgPSBub2RlLT5pc0RvY3VtZW50Tm9kZSgpID8gbm9kZS0+cmVuZGVyU3R5
bGUoKSA6IGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLT5jb21wdXRlZFN0eWxlKCk7CiAgICAgICAg
IGlmICghc3R5bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0eWxlLT5k
aXNwbGF5KCkgPT0gTk9ORSkKQEAgLTEwMTAsNyArMTAxMCw3IEBAIE5vZGUqIE5vZGU6OnBzZXVk
b0F3YXJlTGFzdENoaWxkKCkgY29uc3QKICAgICByZXR1cm4gbGFzdENoaWxkKCk7CiB9CiAKLVJl
bmRlclN0eWxlKiBOb2RlOjpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVj
aWZpZXIpCitjb25zdCBSZW5kZXJTdHlsZSogTm9kZTo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBw
c2V1ZG9FbGVtZW50U3BlY2lmaWVyKQogewogICAgIGF1dG8qIGNvbXBvc2VkUGFyZW50ID0gY29t
cG9zZWRUcmVlQW5jZXN0b3JzKCp0aGlzKS5maXJzdCgpOwogICAgIGlmICghY29tcG9zZWRQYXJl
bnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw5ICs0NDMsOSBAQCBwdWJsaWM6CiAg
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2JqZWN0KCkgY29uc3Q7CiAg
ICAgCiAgICAgLy8gV3JhcHBlciBmb3Igbm9kZXMgdGhhdCBkb24ndCBoYXZlIGEgcmVuZGVyZXIs
IGJ1dCBzdGlsbCBjYWNoZSB0aGUgc3R5bGUgKGxpa2UgSFRNTE9wdGlvbkVsZW1lbnQpLgotICAg
IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxl
KiByZW5kZXJTdHlsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBSZW5kZXJTdHlsZSogY29tcHV0
ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyID0gTk9QU0VVRE8pOworICAg
IHZpcnR1YWwgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRv
RWxlbWVudFNwZWNpZmllciA9IE5PUFNFVURPKTsKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAgICAgLy8gTm90aWZpY2F0aW9uIG9mIGRvY3VtZW50IHN0cnVjdHVyZSBjaGFuZ2VzIChz
ZWUgQ29udGFpbmVyTm9kZS5oIGZvciBtb3JlIG5vdGlmaWNhdGlvbiBtZXRob2RzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIFJlbmRlclN0eWxlKiBO
b2RlOjpyZW5kZXJTdHlsZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIE5vZGU6
OnJlbmRlclN0eWxlKCkgY29uc3QKIHsKICAgICBhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1
ZG9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIFBzZXVkb0Vs
ZW1lbnQ6OmNsZWFySG9zdEVsZW1lbnQoKQogICAgIG1faG9zdEVsZW1lbnQgPSBudWxscHRyOwog
fQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21T
dHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVs
ZW1lbnRTdHlsZT4gUHNldWRvRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIGF1dG8qIHN0
eWxlID0gbV9ob3N0RWxlbWVudC0+cmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUobV9w
c2V1ZG9JZCwgJnBhcmVudFN0eWxlKTsKICAgICBpZiAoIXN0eWxlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vUHNldWRvRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vUHNldWRvRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICBFbGVtZW50KiBob3N0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEVsZW1l
bnQ7IH0KICAgICB2b2lkIGNsZWFySG9zdEVsZW1lbnQoKTsKIAotICAgIE9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVu
dFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lk
IGRpZEF0dGFjaFJlbmRlcmVycygpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjYWxjU3R5bGUo
U3R5bGU6OkNoYW5nZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0
IFJlbmRlclN0eWxlJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3OSwxOCArMTc5LDE4IEBAIHN0YXRpYyBib29sIGlzTmV3TGluZUF0
UG9zaXRpb24oY29uc3QgUG8KICAgICByZXR1cm4gdGV4dEF0UG9zaXRpb25bMF0gPT0gJ1xuJzsK
IH0KIAotUmVuZGVyU3R5bGUqIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmVuZGVyU3R5bGVP
ZkVuY2xvc2luZ1RleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK2NvbnN0IFJlbmRl
clN0eWxlKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxlT2ZFbmNsb3NpbmdU
ZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgaWYgKHBvc2l0aW9uLmFu
Y2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yCiAgICAgICAg
IHx8ICFwb3NpdGlvbi5jb250YWluZXJOb2RlKCkKICAgICAgICAgfHwgIXBvc2l0aW9uLmNvbnRh
aW5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCktPnJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuICZyZW5kZXJlci0+c3R5bGUoKTsKIH0KQEAg
LTIwMSw3ICsyMDEsNyBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQ
CiAgICAgZW5kID0gZW5kT2ZDdXJyZW50UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCk7CiAKICAg
ICBib29sIGlzU3RhcnRBbmRFbmRPblNhbWVOb2RlID0gZmFsc2U7Ci0gICAgaWYgKFJlbmRlclN0
eWxlKiBzdGFydFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHN0YXJ0KSkg
eworICAgIGlmIChhdXRvKiBzdGFydFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHRO
b2RlKHN0YXJ0KSkgewogICAgICAgICBpc1N0YXJ0QW5kRW5kT25TYW1lTm9kZSA9IHJlbmRlclN0
eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShlbmQpICYmIHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBl
bmQuY29udGFpbmVyTm9kZSgpOwogICAgICAgICBib29sIGlzU3RhcnRBbmRFbmRPZkxhc3RQYXJh
Z3JhcGhPblNhbWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKG1fZW5kT2ZM
YXN0UGFyYWdyYXBoKSAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gbV9lbmRPZkxhc3RQYXJh
Z3JhcGguY29udGFpbmVyTm9kZSgpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBBcHBseUJs
b2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KFJlbmRlclN0eWxlKiBlbmRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShl
bmQpKSB7CisgICAgaWYgKGF1dG8qIGVuZFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1Rl
eHROb2RlKGVuZCkpIHsKICAgICAgICAgYm9vbCBpc0VuZEFuZEVuZE9mTGFzdFBhcmFncmFwaE9u
U2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUobV9lbmRPZkxhc3RQYXJh
Z3JhcGgpICYmIGVuZC5kZXByZWNhdGVkTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmRl
cHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIC8vIEluY2x1ZGUgXG4gYXQgdGhlIGVuZCBvZiBsaW5l
IGlmIHdlJ3JlIGF0IGFuIGVtcHR5IHBhcmFncmFwaAogICAgICAgICBpZiAoZW5kU3R5bGUtPnBy
ZXNlcnZlTmV3bGluZSgpICYmIHN0YXJ0ID09IGVuZCAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJO
b2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgewpAQCAt
MjU4LDcgKzI1OCw3IEBAIFZpc2libGVQb3NpdGlvbiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQK
IHsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZOZXh0UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3Jh
cGgoZW5kT2ZDdXJyZW50UGFyYWdyYXBoLm5leHQoKSk7CiAgICAgUG9zaXRpb24gcG9zaXRpb24g
PSBlbmRPZk5leHRQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUocG9zaXRpb24pOworICAgIGF1
dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHBvc2l0aW9uKTsKICAg
ICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gZW5kT2ZOZXh0UGFyYWdyYXBoOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5k
LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9j
a0VsZW1lbnRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJvdGVj
dGVkOgogcHJpdmF0ZToKICAgICB2b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgZm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZTZWxlY3Rpb24sIFJlZlB0cjxFbGVtZW50PiYpID0g
MDsKLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGNvbnN0
IFBvc2l0aW9uJik7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlT2ZFbmNsb3Np
bmdUZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYpOwogICAgIHZvaWQgcmFuZ2VGb3JQYXJhZ3JhcGhT
cGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBQb3NpdGlv
biYsIFBvc2l0aW9uJik7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mTmV4dFBhcmFncmFwaFNw
bGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKFZpc2libGVQb3NpdGlvbiYsIFBvc2l0aW9uJiwgUG9z
aXRpb24mKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6
OmluaXQoTm9kZSogbm9kZSwgUHJvcAogICAgIH0KIAogICAgIGlmIChub2RlICYmIG5vZGUtPmNv
bXB1dGVkU3R5bGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBub2Rl
LT5jb21wdXRlZFN0eWxlKCk7CisgICAgICAgIGF1dG8qIHJlbmRlclN0eWxlID0gbm9kZS0+Y29t
cHV0ZWRTdHlsZSgpOwogICAgICAgICByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVl
ZGVkKHJlbmRlclN0eWxlKTsKICAgICAgICAgaWYgKHJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5rZXl3b3JkU2l6ZSgpKQogICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uLmdldEZvbnRT
aXplQ1NTVmFsdWVQcmVmZXJyaW5nS2V5d29yZCgpLT5jc3NUZXh0KCkpOwpAQCAtNDcxLDcgKzQ3
MSw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjppbml0KE5vZGUqIG5vZGUsIFByb3AKICAgICBleHRy
YWN0Rm9udFNpemVEZWx0YSgpOwogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZp
bGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpCit2b2lk
IEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChjb25z
dCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpCiB7CiAgICAgLy8gSWYgYSBub2RlJ3MgdGV4dCBm
aWxsIGNvbG9yIGlzIGludmFsaWQsIHRoZW4gaXRzIGNoaWxkcmVuIHVzZSAKICAgICAvLyB0aGVp
ciBmb250LWNvbG9yIGFzIHRoZWlyIHRleHQgZmlsbCBjb2xvciAodGhleSBkb24ndApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzgsNyArMTc4LDcgQEAgcHJpdmF0ZToKICAgICBFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgRWRpdGluZ1N0eWxlKENTU1Byb3BlcnR5SUQsIENT
U1ZhbHVlSUQpOwogICAgIHZvaWQgaW5pdChOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7Ci0g
ICAgdm9pZCByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKFJlbmRlclN0eWxl
Kik7CisgICAgdm9pZCByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKGNvbnN0
IFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKICAgICB2b2lkIGV4dHJh
Y3RGb250U2l6ZURlbHRhKCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVHJpU3RhdGUgdHJp
U3RhdGVPZlN0eWxlKFQmIHN0eWxlVG9Db21wYXJlLCBTaG91bGRJZ25vcmVUZXh0T25seVByb3Bl
cnRpZXMpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MzAsOCArNDMwLDggQEAgcHVibGljOgogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB3
ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYsIFJhbmdlJiBjb250ZXh0LCBib29s
IGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CiAKICNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2Vs
ZWN0aW9uU3RhcnQoRnJhbWUqICwgTm9kZSAqJm5vZGVUb1JlbW92ZSk7Ci0gICAgdm9pZCBnZXRU
ZXh0RGVjb3JhdGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5bGUoUmVuZGVyU3R5bGUm
LCBOU011dGFibGVEaWN0aW9uYXJ5KikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiAsIE5vZGUg
KiZub2RlVG9SZW1vdmUpOworICAgIHZvaWQgZ2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVz
cGVjdGluZ1R5cGluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgTlNNdXRhYmxlRGljdGlvbmFy
eSopIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnQqIGZvbnRGb3JTZWxlY3Rp
b24oYm9vbCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIE5TRGljdGlvbmFyeSAqZm9udEF0
dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBTaW1wbGlmeU1hcmt1cENvbW1h
bmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBO
b2RlKiBzdGFydGluZ05vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIFJlbmRlclN0
eWxlKiBzdGFydGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgpOworICAgICAg
ICBhdXRvKiBzdGFydGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgpOwogICAg
ICAgICBpZiAoIXN0YXJ0aW5nU3R5bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Tm9kZSogY3VycmVudE5vZGUgPSBzdGFydGluZ05vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0JKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IFRoaXMgZmln
dXJlcyBvdXQgdGhlIGN1cnJlbnQgc3R5bGUgYnkgaW5zZXJ0aW5nIGEgPHNwYW4+IQotUmVuZGVy
U3R5bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogZnJhbWUsIE5vZGUg
KiZub2RlVG9SZW1vdmUpCitjb25zdCBSZW5kZXJTdHlsZSogRWRpdG9yOjpzdHlsZUZvclNlbGVj
dGlvblN0YXJ0KEZyYW1lKiBmcmFtZSwgTm9kZSAqJm5vZGVUb1JlbW92ZSkKIHsKICAgICBub2Rl
VG9SZW1vdmUgPSBudWxscHRyOwogICAgIApAQCAtNzYsNyArNzYsNyBAQCBSZW5kZXJTdHlsZSog
RWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0CiAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+cmVu
ZGVyZXIoKSA/ICZzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwog
fQogCi12b2lkIEVkaXRvcjo6Z2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5
cGluZ1N0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVzdWx0
KSBjb25zdAordm9pZCBFZGl0b3I6OmdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3Rp
bmdUeXBpbmdTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIE5TTXV0YWJsZURpY3Rpb25h
cnkqIHJlc3VsdCkgY29uc3QKIHsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHls
ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKICAgICBpZiAodHlwaW5nU3R5
bGUgJiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaW9zL0VkaXRvcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0JKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBA
IGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib28KIAogICAgIGlmICghbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3Zl
OwotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZt
X2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRv
KiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7
IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgRm9udCogcmVzdWx0ID0gbnVs
bHB0cjsKICAgICAgICAgaWYgKHN0eWxlKSB7CkBAIC0yMjAsNyArMjIwLDcgQEAgY29uc3QgRm9u
dCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvbwogTlNEaWN0aW9uYXJ5KiBFZGl0b3I6OmZv
bnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewogICAgIE5vZGUqIG5vZGVU
b1JlbW92ZTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOworICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxl
Y3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKICAgICBpZiAoIXN0eWxlKQogICAg
ICAgICByZXR1cm4gbmlsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0
b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9y
TWFjLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBjb25zdCBGb250
KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vCiAKICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9k
ZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5bGUgPSBz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5v
ZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAg
ICAgIGlmIChzdHlsZSkgewpAQCAtMTQ2LDcgKzE0Niw3IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6
Zm9udEZvclNlbGVjdGlvbihib28KIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRl
c0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwg
bm9kZVRvUmVtb3ZlKTsKKyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQo
Jm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIFN0cmluZyBIVE1MVGl0bGVFbGVt
ZW50Ojp0ZXh0KCkgY29uc3QKIFN0cmluZ1dpdGhEaXJlY3Rpb24gSFRNTFRpdGxlRWxlbWVudDo6
Y29tcHV0ZWRUZXh0V2l0aERpcmVjdGlvbigpCiB7CiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBMVFI7Ci0gICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29t
cHV0ZWRTdHlsZSgpKQorICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29tcHV0
ZWRTdHlsZSgpKQogICAgICAgICBkaXJlY3Rpb24gPSBjb21wdXRlZFN0eWxlLT5kaXJlY3Rpb24o
KTsKICAgICBlbHNlIHsKICAgICAgICAgYXV0byBzdHlsZSA9IHN0eWxlUmVzb2x2ZXIoKS5zdHls
ZUZvckVsZW1lbnQoKnRoaXMsIHBhcmVudEVsZW1lbnQoKSA/IHBhcmVudEVsZW1lbnQoKS0+cmVu
ZGVyU3R5bGUoKSA6IG51bGxwdHIpLnJlbmRlclN0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eQogICAgIHVwZGF0ZShzZWxlY3Rv
cik7CiB9CiAKLWlubGluZSB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5
Ojppbml0aWFsaXplKEZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgbmV3
U3R5bGUpCitpbmxpbmUgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eTo6
aW5pdGlhbGl6ZShGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgY29uc3QgUmVuZGVyU3R5bGUm
IG5ld1N0eWxlKQogewogICAgIC8vIEJld2FyZSEgbV9mb250LmZvbnRTZWxlY3RvcigpIG1pZ2h0
IG5vdCBwb2ludCB0byBkb2N1bWVudC5mb250U2VsZWN0b3IoKSEKICAgICBBU1NFUlQobmV3U3R5
bGUuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSA9PSAmZm9udFNlbGVjdG9yKTsKQEAgLTIx
OTYsNyArMjE5Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMK
ICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKTsKICAgICBkb2N1
bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKLSAgICBpZiAoUmVuZGVyU3R5bGUqIGNvbXB1
dGVkU3R5bGUgPSBjYW52YXMoKS0+Y29tcHV0ZWRTdHlsZSgpKQorICAgIGlmIChhdXRvKiBjb21w
dXRlZFN0eWxlID0gY2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgbmV3U3R5bGUt
PnNldEZvbnREZXNjcmlwdGlvbihjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVmYXVsdEZvbnREZXNj
cmlwdGlvbjsKQEAgLTIyNTksOSArMjI1OSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRUZXh0QmEKICAgICBtb2RpZmlhYmxlU3RhdGUoKS50ZXh0QmFzZWxpbmUgPSBiYXNl
bGluZTsKIH0KIAotaW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgUmVuZGVyU3R5bGUqKiBjb21w
dXRlZFN0eWxlKSBjb25zdAoraW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjp0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVy
U3R5bGUqKiBjb21wdXRlZFN0eWxlKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IChjb21wdXRlZFN0eWxlIHx8IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OkluaGVyaXQpID8gY2Fu
dmFzKCktPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSAoY29t
cHV0ZWRTdHlsZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJbmhlcml0KSA/IGNhbnZhcygp
LT5jb21wdXRlZFN0eWxlKCkgOiBudWxscHRyOwogICAgIGlmIChjb21wdXRlZFN0eWxlKQogICAg
ICAgICAqY29tcHV0ZWRTdHlsZSA9IHN0eWxlOwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CkBA
IC0yMzg0LDcgKzIzODQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1Rl
eHRJCiAKICAgICAvLyBGSVhNRTogTmVlZCB0byB0dXJuIG9mZiBmb250IHNtb290aGluZy4KIAot
ICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBj
b21wdXRlZFN0eWxlOwogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gdG9UZXh0RGlyZWN0
aW9uKHN0YXRlKCkuZGlyZWN0aW9uLCAmY29tcHV0ZWRTdHlsZSk7CiAgICAgYm9vbCBpc1JUTCA9
IGRpcmVjdGlvbiA9PSBSVEw7CiAgICAgYm9vbCBvdmVycmlkZSA9IGNvbXB1dGVkU3R5bGUgPyBp
c092ZXJyaWRlKGNvbXB1dGVkU3R5bGUtPnVuaWNvZGVCaWRpKCkpIDogZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUs
NyBAQCBwcml2YXRlOgogICAgICAgICBGb250UHJveHkmIG9wZXJhdG9yPShjb25zdCBGb250UHJv
eHkmKTsKIAogICAgICAgICBib29sIHJlYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmZv
bnRTZWxlY3RvcigpOyB9Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZShGb250U2VsZWN0b3ImLCBS
ZW5kZXJTdHlsZSYpOworICAgICAgICB2b2lkIGluaXRpYWxpemUoRm9udFNlbGVjdG9yJiwgY29u
c3QgUmVuZGVyU3R5bGUmKTsKICAgICAgICAgRm9udE1ldHJpY3MgZm9udE1ldHJpY3MoKSBjb25z
dDsKICAgICAgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KCkgY29uc3Q7CiAgICAgICAgIGZsb2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKQEAg
LTM4Miw3ICszODIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgYm9vbCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9Ci0gICAgVGV4
dERpcmVjdGlvbiB0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uLCBSZW5kZXJTdHlsZSoqIGNvbXB1
dGVkU3R5bGUgPSBudWxscHRyKSBjb25zdDsKKyAgICBUZXh0RGlyZWN0aW9uIHRvVGV4dERpcmVj
dGlvbihEaXJlY3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSA9IG51bGxw
dHIpIGNvbnN0OwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNv
dXJjZVByZWxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBI
VE1MUmVzb3VyY2VQcmVsb2FkZXI6OnByZWxvYWQoUHJlbAogICAgICAgICBwcmVsb2FkKFdURk1v
dmUocmVxdWVzdCkpOwogfQogCi1zdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNoZXMoRnJh
bWUqIGZyYW1lLCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNvbnN0IFN0cmluZyYgYXR0cmli
dXRlVmFsdWUpCitzdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNoZXMoRnJhbWUqIGZyYW1l
LCBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRl
VmFsdWUpCiB7CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcyA9IE1lZGlh
UXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoYXR0cmlidXRlVmFsdWUp
OwogICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgbWVkaWFRdWVyeUV2YWx1YXRvcigic2NyZWVuIiwg
ZnJhbWUsIHJlbmRlclN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Ns
aWRlclRodW1iRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODMsMjEgKzgzLDIxIEBAIFJlbmRlclNsaWRlclRodW1iOjpSZW5kZXJTbGlkZXJUaHVt
YihTbGkKIHsKIH0KIAotdm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZShS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFJlbmRlclNsaWRlclRodW1iOjp1cGRhdGVB
cHBlYXJhbmNlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAocGFy
ZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIHN0
eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7CisgICAgICAgIG11
dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOwogICAg
IGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVySG9yaXpvbnRhbFBh
cnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhvcml6b250YWxQ
YXJ0KTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhv
cml6b250YWxQYXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09
IE1lZGlhU2xpZGVyUGFydCkKLSAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhU2xp
ZGVyVGh1bWJQYXJ0KTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRp
YVNsaWRlclRodW1iUGFydCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5j
ZShNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNl
dEFwcGVhcmFuY2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwogICAgIGVsc2UgaWYgKHBh
cmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyUGFy
dCkKLSAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhRnVsbFNjcmVlblZvbHVtZVNs
aWRlclRodW1iUGFydCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVk
aWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKICAgICBpZiAoc3R5bGUoKS5oYXNB
cHBlYXJhbmNlKCkpIHsKICAgICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgICAgIHRoZW1l
KCkuYWRqdXN0U2xpZGVyVGh1bWJTaXplKHN0eWxlKCksIGVsZW1lbnQoKSk7CisgICAgICAgIHRo
ZW1lKCkuYWRqdXN0U2xpZGVyVGh1bWJTaXplKG11dGFibGVTdHlsZSgpLCBlbGVtZW50KCkpOwog
ICAgIH0KIH0KIApAQCAtMTU5LDEzICsxNTksMTMgQEAgdm9pZCBSZW5kZXJTbGlkZXJDb250YWlu
ZXI6OmxheW91dCgpCiAgICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKICAgICBh
dXRvJiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KCktPnNoYWRv
d0hvc3QoKSk7CiAgICAgYm9vbCBpc1ZlcnRpY2FsID0gaGFzVmVydGljYWxBcHBlYXJhbmNlKGlu
cHV0KTsKLSAgICBzdHlsZSgpLnNldEZsZXhEaXJlY3Rpb24oaXNWZXJ0aWNhbCA/IEZsb3dDb2x1
bW4gOiBGbG93Um93KTsKKyAgICBtdXRhYmxlU3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVy
dGljYWwgPyBGbG93Q29sdW1uIDogRmxvd1Jvdyk7CiAgICAgVGV4dERpcmVjdGlvbiBvbGRUZXh0
RGlyZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rpb24oKTsKICAgICBpZiAoaXNWZXJ0aWNhbCkgewog
ICAgICAgICAvLyBGSVhNRTogV29yayBhcm91bmQgcm91bmRpbmcgaXNzdWVzIGluIFJUTCB2ZXJ0
aWNhbCBzbGlkZXJzLiBXZSB3YW50IHRoZW0gdG8KICAgICAgICAgLy8gcmVuZGVyIGlkZW50aWNh
bGx5IHRvIExUUiB2ZXJ0aWNhbCBzbGlkZXJzLiBXZSBjYW4gcmVtb3ZlIHRoaXMgd29yayBhcm91
bmQgd2hlbgogICAgICAgICAvLyBzdWJwaXhlbCByZW5kZXJpbmcgaXMgZW5hYmxlZCBvbiBhbGwg
cG9ydHMuCi0gICAgICAgIHN0eWxlKCkuc2V0RGlyZWN0aW9uKExUUik7CisgICAgICAgIG11dGFi
bGVTdHlsZSgpLnNldERpcmVjdGlvbihMVFIpOwogICAgIH0KIAogICAgIFJlbmRlckJveCogdGh1
bWIgPSBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKSA/IGlucHV0LnNsaWRlclRodW1iRWxlbWVu
dCgpLT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBSZW5k
ZXJTbGlkZXJDb250YWluZXI6OmxheW91dCgpCiAKICAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5
b3V0KCk7CiAKLSAgICBzdHlsZSgpLnNldERpcmVjdGlvbihvbGRUZXh0RGlyZWN0aW9uKTsKKyAg
ICBtdXRhYmxlU3R5bGUoKS5zZXREaXJlY3Rpb24ob2xkVGV4dERpcmVjdGlvbik7CiAgICAgLy8g
VGhlc2Ugc2hvdWxkIGFsd2F5cyBleGlzdCwgdW5sZXNzIHNvbWVvbmUgbXV0YXRlcyB0aGUgc2hh
ZG93IERPTSAoZS5nLiwgaW4gdGhlIGluc3BlY3RvcikuCiAgICAgaWYgKCF0aHVtYiB8fCAhdHJh
Y2spCiAgICAgICAgIHJldHVybjsKQEAgLTU3NCw3ICs1NzQsNyBAQCBIVE1MSW5wdXRFbGVtZW50
KiBTbGlkZXJUaHVtYkVsZW1lbnQ6OmhvCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KHNoYWRvd0hvc3QoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVy
VGh1bWJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHls
ZSogaG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlkZXJUaHVtYkVsZW1lbnQ6
OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxl
KiBob3N0U3R5bGUpCiB7CiAgICAgLy8gVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNvbXB1dGUgc3R5
bGUuIFRoaXMgaXMganVzdCBhIGhhY2sgdG8gcGljayBzaGFkb3cgcHNldWRvIGlkIHdoZW4gaG9z
dCBzdHlsZSBpcyBrbm93bi4KIApAQCAtNjI4LDcgKzYyOCw3IEBAIFJlbmRlclB0cjxSZW5kZXJF
bGVtZW50PiBTbGlkZXJDb250YWluZXIKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
U2xpZGVyQ29udGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwogfQogCi1PcHRpb25hbDxF
bGVtZW50U3R5bGU+IFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShS
ZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50U3R5
bGU+IFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCiB7CiAgICAgLy8gVGhpcyBk
b2Vzbid0IGFjdHVhbGx5IGNvbXB1dGUgc3R5bGUuIFRoaXMgaXMganVzdCBhIGhhY2sgdG8gcGlj
ayBzaGFkb3cgcHNldWRvIGlkIHdoZW4gaG9zdCBzdHlsZSBpcyBrbm93bi4KIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgJKHJldmlz
aW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiAjZW5kaWYK
ICAgICB2b2lkIHdpbGxEZXRhY2hSZW5kZXJlcnMoKSBvdmVycmlkZTsKIAotICAgIE9wdGlvbmFs
PEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5
bGUqKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikgb3ZlcnJpZGU7CiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgdm9pZCBzdGFydERyYWdnaW5nKCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgaW5saW5lIFJl
ZjxTbGlkZXJUaHVtYkVsZW1lbnQ+IFNsaWRlclRodQogY2xhc3MgUmVuZGVyU2xpZGVyVGh1bWIg
ZmluYWwgOiBwdWJsaWMgUmVuZGVyQmxvY2tGbG93IHsKIHB1YmxpYzoKICAgICBSZW5kZXJTbGlk
ZXJUaHVtYihTbGlkZXJUaHVtYkVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKLSAgICB2b2lkIHVw
ZGF0ZUFwcGVhcmFuY2UoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0
ZUFwcGVhcmFuY2UoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogcHJpdmF0ZToK
ICAgICBib29sIGlzU2xpZGVyVGh1bWIoKSBjb25zdCBvdmVycmlkZTsKQEAgLTEzNSw3ICsxMzUs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNsaWRlckNvbnRhaW5lckVsZW1lbnQoRG9jdW1l
bnQmKTsKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVy
KFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAg
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwg
UmVuZGVyU3R5bGUqKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29s
dmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikgb3Zl
cnJpZGU7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgQXRvbWljU3RyaW5nIG1fc2hhZG93UHNldWRvSWQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1
LDcgQEAgUmVmPFRleHRDb250cm9sSW5uZXJFbGVtZW50PiBUZXh0Q29udHJvbAogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFRleHRDb250cm9sSW5uZXJFbGVtZW50KGRvY3VtZW50KSk7CiB9CiAK
LU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVD
dXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCitP
cHRpb25hbDxFbGVtZW50U3R5bGU+IFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3Vz
dG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9z
dFN0eWxlKQogewogICAgIGF1dG8gaW5uZXJDb250YWluZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGVQdHIoKTsKICAgICBpbm5lckNvbnRhaW5lclN0eWxlLT5pbmhlcml0RnJvbShzaGFkb3dI
b3N0U3R5bGUpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9j
ayogVGV4dENvbnRyb2wKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2xJbm5l
ckJsb2NrPihIVE1MRGl2RWxlbWVudDo6cmVuZGVyZXIoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUo
UmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxl
bWVudFN0eWxlPiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUp
CiB7CiAgICAgYXV0byBzdHlsZSA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
Pigqc2hhZG93SG9zdCgpKS5jcmVhdGVJbm5lclRleHRTdHlsZSgqc2hhZG93SG9zdFN0eWxlKTsK
ICAgICByZXR1cm4gRWxlbWVudFN0eWxlKHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU3R5bGU+KFdU
Rk1vdmUoc3R5bGUpKSk7CkBAIC0xNDksNyArMTQ5LDcgQEAgVGV4dENvbnRyb2xQbGFjZWhvbGRl
ckVsZW1lbnQ6OlRleHRDb250cgogICAgIHNldEhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNr
cygpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFRleHRDb250cm9sUGxhY2Vob2xkZXJF
bGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5k
ZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBUZXh0Q29u
dHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKIHsK
ICAgICBhdXRvIHN0eWxlID0gcmVzb2x2ZVN0eWxlKCZwYXJlbnRTdHlsZSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBA
QCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBUZXh0Q29udHJvbElubmVyRWxlbWVudChEb2N1
bWVudCYpOwotICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJl
bmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3Zl
cnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9z
dFN0eWxlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzTW91c2VGb2N1c2FibGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpAQCAtNjUsNyArNjUsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChEb2N1bWVudCYp
OwogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVu
ZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0gICAgT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OwogICAgIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgYm9vbCBpc1RleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIH07CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgVGV4dENvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQoRG9jdW1lbnQmKTsKICAg
ICAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHls
ZSkgb3ZlcnJpZGU7CiB9OwogCiBjbGFzcyBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50
IGZpbmFsIDogcHVibGljIEhUTUxEaXZFbGVtZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4MSw3ICsxMzgxLDcgQEAgT3B0
aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzbwogICAgICAgICByZXR1cm4gTm9D
dXJzb3JDaGFuZ2U7CiAKICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlciA/ICZyZW5kZXJlci0+c3R5bGUoKSA6IG51
bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJlciA/ICZyZW5kZXJlci0+c3R5bGUoKSA6
IG51bGxwdHI7CiAgICAgYm9vbCBob3Jpem9udGFsVGV4dCA9ICFzdHlsZSB8fCBzdHlsZS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKTsKICAgICBjb25zdCBDdXJzb3ImIGlCZWFtID0gaG9yaXpv
bnRhbFRleHQgPyBpQmVhbUN1cnNvcigpIDogdmVydGljYWxUZXh0Q3Vyc29yKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTAgKzcwLDEwIEBAIHN0YXRpYyBpbmxp
bmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlvbigKICAgICByZXR1cm4gZmxvb3IobnVtU3RlcHMg
KiB0KSAvIG51bVN0ZXBzOwogfQogCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKEFuaW1h
dGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wb3NpdGVBbmltYXRpb24pCitBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNv
bnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9z
aXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgOiBtX29iamVjdChyZW5kZXJl
cikKICAgICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAs
IG1fYW5pbWF0aW9uKGFuaW1hdGlvbikKKyAgICAsIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8QW5p
bWF0aW9uJj4oYW5pbWF0aW9uKSkKIHsKICAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBkdXJhdGlv
bgogICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA+IDApCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgQW5pbWF0aW9uQmFzZSA6IHB1
YmxpYyBSZWZDb3VudGVkPAogICAgIGZyaWVuZCBjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbjsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBBbmltYXRpb25CYXNl
KEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCosIENvbXBvc2l0ZUFuaW1hdGlv
biopOworICAgIEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBSZW5k
ZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKik7CiAgICAgdmlydHVhbCB+QW5pbWF0aW9u
QmFzZSgpIHsgfQogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBtX29iamVjdDsgfQpAQCAtMTM4LDcgKzEzOCw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgcHJv
Z3Jlc3MoZG91YmxlIHNjYWxlID0gMSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1
bmN0aW9uKiA9IG51bGxwdHIpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBh
bmltYXRpb24gc3RhdGUgY2hhbmdlZC4KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShDb21wb3Np
dGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIC8qY3VycmVu
dFN0eWxlKi8sIFJlbmRlclN0eWxlKiAvKnRhcmdldFN0eWxlKi8sIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFu
aW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0
eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBjb25zdCBSZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSov
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgY29tcHV0
ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCA9IDA7CkBAIC0x
NTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFu
aW1hdGlvbiYpIGNvbnN0OwogCiAgICAgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2FuaW1hdGlvbjsgfQotICAgIHZvaWQgc2V0QW5pbWF0aW9uKEFuaW1hdGlv
biYgYW5pbWF0aW9uKSB7IG1fYW5pbWF0aW9uID0gYW5pbWF0aW9uOyB9CisgICAgdm9pZCBzZXRB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgbV9hbmltYXRpb24gPSBjb25z
dF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbik7IH0KIAogICAgIC8vIFJldHVybiB0cnVlIGlm
IHRoaXMgYW5pbWF0aW9uIGlzIG92ZXJyaWRkZW4uIFRoaXMgd2lsbCBvbmx5IGJlIHRoZSBjYXNl
IGZvcgogICAgIC8vIEltcGxpY2l0QW5pbWF0aW9ucyBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUg
d2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGZvcmNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw5ICs1OTMsOSBAQCB2b2lkIEFuaW1hdGlv
bkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvCiAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5
bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwogfQogCi1ib29sIEFuaW1hdGlvbkNvbnRy
b2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlclN0
eWxlJiBuZXdTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHls
ZSkKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRT
dHlsZSA9IHJlbmRlcmVyLmhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZyZW5kZXJlci5zdHlsZSgp
IDogbnVsbHB0cjsKKyAgICBhdXRvKiBvbGRTdHlsZSA9IHJlbmRlcmVyLmhhc0luaXRpYWxpemVk
U3R5bGUoKSA/ICZyZW5kZXJlci5zdHlsZSgpIDogbnVsbHB0cjsKICAgICBpZiAoKCFvbGRTdHls
ZSB8fCAoIW9sZFN0eWxlLT5hbmltYXRpb25zKCkgJiYgIW9sZFN0eWxlLT50cmFuc2l0aW9ucygp
KSkgJiYgKCFuZXdTdHlsZS5hbmltYXRpb25zKCkgJiYgIW5ld1N0eWxlLnRyYW5zaXRpb25zKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgfkFuaW1hdGlvbkNv
bnRyb2xsZXIoKTsKIAogICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50Jik7
Ci0gICAgYm9vbCB1cGRhdGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmLCBSZW5kZXJTdHlsZSYg
bmV3U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpOwor
ICAgIGJvb2wgdXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5
bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxl
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGVGb3JS
ZW5kZXJlcihSZW5kZXJFbGVtZW50Jik7CiAKICAgICAvLyBJZiBwb3NzaWJsZSwgY29tcHV0ZSB0
aGUgdmlzdWFsIGV4dGVudCBvZiBhbnkgdHJhbnNmb3JtIGFuaW1hdGlvbiBvbiB0aGUgZ2l2ZW4g
cmVuZGVyZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzcsNyArNzcsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigp
CiAgICAgfQogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMo
UmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSkKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFu
c2l0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJl
bnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogewogICAgIC8vIElmIGN1
cnJlbnRTdHlsZSBpcyBudWxsIG9yIHRoZXJlIGFyZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25z
LCBqdXN0IHNraXAgaXQKICAgICBpZiAoIWN1cnJlbnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLT50
cmFuc2l0aW9ucygpICYmIG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSkKQEAgLTkzLDcgKzkzLDcg
QEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgIC8vIENoZWNr
IHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYWN0aXZlIHRyYW5zaXRpb25zCiAgICAg
aWYgKHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCktPnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBBbmltYXRpb24mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygp
LT5hbmltYXRpb24oaSk7CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHls
ZS0+dHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9uKGkpOwogICAgICAgICAgICAgYm9vbCBpc0FjdGl2
ZVRyYW5zaXRpb24gPSAhbV9zdXNwZW5kZWQgJiYgKGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFu
aW1hdGlvbi5kZWxheSgpID4gMCk7CiAKICAgICAgICAgICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9u
TW9kZSBtb2RlID0gYW5pbWF0aW9uLmFuaW1hdGlvbk1vZGUoKTsKQEAgLTEyMiw3ICsxMjIsNyBA
QCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgICAgICAg
ICAgLy8gYW5kIHdlIGhhdmUgdG8gdXNlIHRoZSB1bmFuaW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5p
bWF0aW9uLiBXZSBkbyB0aGUgdGVzdAogICAgICAgICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHVu
YW5pbWF0ZWQgc3R5bGUgaGVyZSwgYnV0IHdlICJvdmVycmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0
ZXIuCiAgICAgICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFu
aW0gPSBnZXRBbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogZnJvbVN0eWxlID0ga2V5ZnJhbWVBbmltID8ga2V5ZnJhbWVBbmltLT51bmFuaW1h
dGVkU3R5bGUoKSA6IGN1cnJlbnRTdHlsZTsKKyAgICAgICAgICAgICAgICBhdXRvKiBmcm9tU3R5
bGUgPSBrZXlmcmFtZUFuaW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHlsZSgpIDogY3Vy
cmVudFN0eWxlOwogCiAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEgY3VycmVu
dCB0cmFuc2l0aW9uIGZvciB0aGlzIHByb3AKICAgICAgICAgICAgICAgICBJbXBsaWNpdEFuaW1h
dGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wKTsKQEAgLTE5NSw3ICsxOTUs
NyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgIG1f
dHJhbnNpdGlvbnMucmVtb3ZlKHByb3BlcnR5VG9SZW1vdmUpOwogfQogCi12b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUp
Cit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCiB7CiAgICAgLy8gTm90aGluZyB0byBkbyBpZiB3
ZSBkb24ndCBoYXZlIGFueSBhbmltYXRpb25zLCBhbmQgZGlkbid0IGhhdmUgYW55IGJlZm9yZQog
ICAgIGlmIChtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLT5o
YXNBbmltYXRpb25zKCkpCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRp
b246OnVwZGF0ZUtleWZyYW1lQQogICAgIGlmICh0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpKSB7
CiAgICAgICAgIGludCBudW1BbmltcyA9IHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCktPnNpemUo
KTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAg
ICAgICBBbmltYXRpb24mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCktPmFu
aW1hdGlvbihpKTsKKyAgICAgICAgICAgIGF1dG8mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT5h
bmltYXRpb25zKCktPmFuaW1hdGlvbihpKTsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBhbmlt
YXRpb25OYW1lKGFuaW1hdGlvbi5uYW1lKCkpOwogCiAgICAgICAgICAgICBpZiAoIWFuaW1hdGlv
bi5pc1ZhbGlkQW5pbWF0aW9uKCkpCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBDb21wb3NpdGVB
bmltYXRpb246OnVwZGF0ZUtleWZyYW1lQQogICAgIHN0ZDo6c3dhcChuZXdBbmltYXRpb25zLCBt
X2tleWZyYW1lQW5pbWF0aW9ucyk7CiB9CiAKLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmlt
YXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBS
ZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJs
ZW5kZWRTdHlsZSkKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5k
ZWRTdHlsZSkKIHsKICAgICAvLyBXZSBkb24ndCBkbyBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9u
J3QgaGF2ZSBhIGN1cnJlbnRTdHlsZSAob24gc3RhcnR1cCkuCiAgICAgdXBkYXRlVHJhbnNpdGlv
bnMoJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUsICZ0YXJnZXRTdHlsZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRl
QW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgY2xlYXJSZW5kZXJlcigpOwogCi0gICAgYm9vbCBhbmltYXRlKFJlbmRlckVs
ZW1lbnQmLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5
bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5kZWRTdHlsZSk7CisgICAgYm9v
bCBhbmltYXRlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4mIGJsZW5kZWRTdHlsZSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBn
ZXRBbmltYXRlZFN0eWxlKCkgY29uc3Q7CiAgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zv
cm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0OwogCkBAIC04OCw4ICs4OCw4IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlJik7CiAKLSAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVsZW1lbnQqLCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwotICAg
IHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqLCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIHZvaWQgdXBk
YXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVL
ZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CiAgICAgCiAgICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEltcGxpY2l0QW5pbWF0aW9uPj4gQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFJl
ZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4+IEFuaW1hdGlvbk5hbWVNYXA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNp
dEFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oQW5p
bWF0aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5k
ZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSwgUmVuZGVy
U3R5bGUqIGZyb21TdHlsZSkKK0ltcGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbihj
b25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVy
dHksIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmlt
LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZSh0cmFu
c2l0aW9uLCByZW5kZXJlciwgY29tcEFuaW0pCiAgICAgLCBtX2Zyb21TdHlsZShSZW5kZXJTdHls
ZTo6Y2xvbmVQdHIoKmZyb21TdHlsZSkpCiAgICAgLCBtX3RyYW5zaXRpb25Qcm9wZXJ0eSh0cmFu
c2l0aW9uLnByb3BlcnR5KCkpCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgSW1wbGljaXRBbmltYXRp
b246OnNob3VsZFNlbmRFdmVudEYKICAgICByZXR1cm4gbV9vYmplY3QtPmRvY3VtZW50KCkuaGFz
TGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKIH0KIAotYm9vbCBJbXBsaWNpdEFuaW1hdGlv
bjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVu
ZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCitib29sIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRl
KENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICAvLyBJZiB3ZSBnZXQgdGhpcyBmYXIgYW5kIHRo
ZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFuaW5nIHVwIGEganVzdCBm
aW5pc2hlZCBhbmltYXRpb24uCiAgICAgLy8gU28ganVzdCByZXR1cm4uIEV2ZXJ5dGhpbmcgaXMg
YWxyZWFkeSBhbGwgY2xlYW5lZCB1cC4KQEAgLTIwNSw3ICsyMDUsNyBAQCBib29sIEltcGxpY2l0
QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2CiAgICAgcmV0dXJuIGZhbHNlOyAvLyBEaWRuJ3Qg
ZGlzcGF0Y2ggYW4gZXZlbnQKIH0KIAotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoUmVu
ZGVyU3R5bGUqIHRvKQordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoY29uc3QgUmVuZGVy
U3R5bGUqIHRvKQogewogICAgIEFTU0VSVCh0byk7CiAgICAgQVNTRVJUKG1fZnJvbVN0eWxlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmlt
YXRpb24uaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vSW1wbGljaXRBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBj
bGFzcyBSZW5kZXJFbGVtZW50OwogLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFz
cyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoQW5pbWF0aW9uJiBhbmltYXRp
b24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyU3R5bGUq
IGZyb21TdHlsZSkKKyAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29u
c3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHks
IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFu
aW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEltcGxpY2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5n
UHJvcGVydHksIHJlbmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24sIGZyb21TdHlsZSkpOwogICAg
IH07CkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGRv
dWJsZSB0aW1lT2Zmc2V0KSBvdmVycmlkZTsKICAgICB2b2lkIGVuZEFuaW1hdGlvbigpIG92ZXJy
aWRlOwogCi0gICAgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1l
bnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpIG92ZXJy
aWRlOworICAgIGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50
KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRh
cmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBv
dmVycmlkZTsKICAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0
KFJlbmRlclN0eWxlKiB0byk7CisgICAgdm9pZCByZXNldChjb25zdCBSZW5kZXJTdHlsZSogdG8p
OwogCiAgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVj
dCYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04Nyw3ICs4Nyw3IEBAIHByb3RlY3RlZDoKICNlbmRp
ZgogCiBwcml2YXRlOgotICAgIEltcGxpY2l0QW5pbWF0aW9uKEFuaW1hdGlvbiYsIENTU1Byb3Bl
cnR5SUQsIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJTdHlsZSop
OworICAgIEltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIENTU1Byb3BlcnR5SUQs
IFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBjb25zdCBSZW5kZXJTdHlsZSop
OwogICAgIHZpcnR1YWwgfkltcGxpY2l0QW5pbWF0aW9uKCk7CiAKICAgICAvLyBUaGUgdHdvIHN0
eWxlcyB0aGF0IHdlIGFyZSBibGVuZGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihBbmltYXRpb24mIGFuaW1hdGlv
biwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRl
QW5pbWF0aW9uLCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorS2V5ZnJhbWVBbmltYXRp
b246OktleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJF
bGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24s
IGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCiAgICAgOiBBbmltYXRpb25CYXNl
KGFuaW1hdGlvbiwgcmVuZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlvbikKICAgICAsIG1fa2V5ZnJh
bWVzKGFuaW1hdGlvbi5uYW1lKCkpCiAgICAgLCBtX3VuYW5pbWF0ZWRTdHlsZShSZW5kZXJTdHls
ZTo6Y2xvbmVQdHIoKnVuYW5pbWF0ZWRTdHlsZSkpCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBL
ZXlmcmFtZUFuaW1hdGlvbjo6ZmV0Y2hJbnRlcnZhbEVuZAogICAgIHByb2cgPSBwcm9ncmVzcyhz
Y2FsZSwgb2Zmc2V0LCBwcmV2S2V5ZnJhbWUudGltaW5nRnVuY3Rpb24obmFtZSgpKSk7CiB9CiAK
LWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21w
b3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0
ZWRTdHlsZSkKK2Jvb2wgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICAvLyBGaXJlIHRoZSBzdGFydCB0aW1lb3V0
IGlmIG5lZWRlZAogICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFt
ZUFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAgY2xhc3MgUmVu
ZGVyU3R5bGU7CiAvLyBBIEtleWZyYW1lQW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYW4g
ZXhwbGljaXQgYW5pbWF0aW9uIGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgogY2xhc3MgS2V5
ZnJhbWVBbmltYXRpb24gZmluYWwgOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxLZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlKEFuaW1hdGlvbiYgYW5pbWF0
aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3Np
dGVBbmltYXRpb24sIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCisgICAgc3RhdGljIFJl
ZjxLZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmlt
YXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIHJlbmRl
cmVyLCBjb21wb3NpdGVBbmltYXRpb24sIHVuYW5pbWF0ZWRTdHlsZSkpOwogICAgIH0KIAotICAg
IGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKKyAgICBi
b29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mKSBv
dmVycmlkZTsKIAogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExh
eW91dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKQEAgLTg4LDcgKzg4LDcgQEAgcHJvdGVjdGVkOgog
I2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgS2V5ZnJhbWVBbmltYXRpb24oQW5pbWF0aW9uJiwgUmVu
ZGVyRWxlbWVudCosIENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVk
U3R5bGUpOworICAgIEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIFJlbmRlckVs
ZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRl
ZFN0eWxlKTsKICAgICB2aXJ0dWFsIH5LZXlmcmFtZUFuaW1hdGlvbigpOwogICAgIAogICAgIC8v
IEdldCB0aGUgc3R5bGVzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgc3Vycm91bmRpbmcgdGhlIGN1
cnJlbnQgYW5pbWF0aW9uIHRpbWUgYW5kIHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0uCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4Nyw3
ICsyODcsNyBAQCBzdGF0aWMgTm9kZSogYW5jZXN0b3JSZXNwb25kaW5nVG9TY3JvbGxXCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJlbmRlclN0eWxlJiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOwogCiAgICAgICAgIGlmIChyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYKICAg
ICAgICAgICAgIChzdHlsZS5vdmVyZmxvd1koKSA9PSBPQVVUTyB8fCBzdHlsZS5vdmVyZmxvd1ko
KSA9PSBPU0NST0xMIHx8IHN0eWxlLm92ZXJmbG93WSgpID09IE9PVkVSTEFZIHx8CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFk
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkJiBGbG93VGhyZWFkQ29udHJvbAogCiB2b2lkIEZsb3dUaHJlYWRDb250cm9s
bGVyOjpzdHlsZURpZENoYW5nZSgpCiB7Ci0gICAgUmVuZGVyU3R5bGUmIHZpZXdTdHlsZSA9IG1f
dmlldy0+c3R5bGUoKTsKKyAgICBhdXRvJiB2aWV3U3R5bGUgPSBtX3ZpZXctPnN0eWxlKCk7CiAg
ICAgZm9yIChhdXRvJiBmbG93UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0
KQogICAgICAgICBmbG93UmVuZGVyZXItPnNldFN0eWxlKFJlbmRlckZsb3dUaHJlYWQ6OmNyZWF0
ZUZsb3dUaHJlYWRTdHlsZSgmdmlld1N0eWxlKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MjgsNyArMTMyOCw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29uc3RyYWluVG9MaW5lVG9wQW4K
IHN0YXRpYyBMYXlvdXRSZWN0IGNsaXBSZWN0Rm9yTmluZVBpZWNlSW1hZ2VTdHJpcChJbmxpbmVG
bG93Qm94KiBib3gsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSwgY29uc3QgTGF5b3V0UmVj
dCYgcGFpbnRSZWN0KQogewogICAgIExheW91dFJlY3QgY2xpcFJlY3QocGFpbnRSZWN0KTsKLSAg
ICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBhdXRv
JiBzdHlsZSA9IGJveC0+cmVuZGVyZXIoKS5zdHlsZSgpOwogICAgIExheW91dEJveEV4dGVudCBv
dXRzZXRzID0gc3R5bGUuaW1hZ2VPdXRzZXRzKGltYWdlKTsKICAgICBpZiAoYm94LT5pc0hvcml6
b250YWwoKSkgewogICAgICAgICBjbGlwUmVjdC5zZXRZKHBhaW50UmVjdC55KCkgLSBvdXRzZXRz
LnRvcCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHN0YXRpYyBib29sIGJvcmRl
ck9yUGFkZGluZ0xvZ2ljYWxXaWR0aEMKIAogdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsK
LSAgICBSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOworICAgIGF1dG8mIG5ld1N0eWxl
ID0gc3R5bGUoKTsKIAogICAgIGJvb2wgaGFkVHJhbnNmb3JtID0gaGFzVHJhbnNmb3JtKCk7CiAg
ICAgYm9vbCBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrSW52YWxpZGF0ZWQgPSBmYWxzZTsKQEAg
LTI4MzcsNyArMjgzNyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQoYm9v
bCAKICAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6bGluZUhlaWdodChmaXJzdExpbmUsIGRpcmVj
dGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7CiAKICAgICBpZiAoZmlyc3RMaW5lICYmIHZpZXcoKS51
c2VzRmlyc3RMaW5lUnVsZXMoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSYgcyA9IGZpcnN0TGlu
ZSA/IGZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOworICAgICAgICBhdXRvJiBzID0gZmlyc3RM
aW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7CiAgICAgICAgIGlmICgmcyAhPSAmc3R5
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBzLmNvbXB1dGVkTGluZUhlaWdodCgpOwogICAgIH0K
QEAgLTI5NzYsOSArMjk3Niw5IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Zmlyc3RMaW5l
QmxvY2sKICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2s7CiB9CiAKLXN0YXRpYyBSZW5kZXJTdHls
ZSYgc3R5bGVGb3JGaXJzdExldHRlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBS
ZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyQ29udGFpbmVyKQorc3RhdGljIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZUZvckZpcnN0TGV0dGVyKFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ss
IFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJDb250YWluZXIpCiB7Ci0gICAgUmVuZGVyU3R5bGUq
IHBzZXVkb1N0eWxlID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoRklS
U1RfTEVUVEVSLCAmZmlyc3RMZXR0ZXJDb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkpOworICAg
IGF1dG8qIHBzZXVkb1N0eWxlID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0TXV0YWJsZUNhY2hlZFBz
ZXVkb1N0eWxlKEZJUlNUX0xFVFRFUiwgJmZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVT
dHlsZSgpKTsKICAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGFuIGluaXRpYWwgbGV0dGVyIGRyb3Ag
dGhhdCBpcyA+PSAxLCB0aGVuIHdlIG5lZWQgdG8gZm9yY2UgZmxvYXRpbmcgdG8gYmUgb24uCiAg
ICAgaWYgKHBzZXVkb1N0eWxlLT5pbml0aWFsTGV0dGVyRHJvcCgpID49IDEgJiYgIXBzZXVkb1N0
eWxlLT5pc0Zsb2F0aW5nKCkpCkBAIC0zMDYxLDcgKzMwNjEsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
Ojp1cGRhdGVGaXJzdExldHRlclN0eWxlCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0
ZXIgPSBjdXJyZW50Q2hpbGQtPnBhcmVudCgpOwogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0
dGVyQ29udGFpbmVyID0gZmlyc3RMZXR0ZXItPnBhcmVudCgpOwotICAgIFJlbmRlclN0eWxlJiBw
c2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RM
ZXR0ZXJDb250YWluZXIpOworICAgIGF1dG8mIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExl
dHRlcihmaXJzdExldHRlckJsb2NrLCBmaXJzdExldHRlckNvbnRhaW5lcik7CiAgICAgQVNTRVJU
KGZpcnN0TGV0dGVyLT5pc0Zsb2F0aW5nKCkgfHwgZmlyc3RMZXR0ZXItPmlzSW5saW5lKCkpOwog
CiAgICAgaWYgKFN0eWxlOjpkZXRlcm1pbmVDaGFuZ2UoZmlyc3RMZXR0ZXItPnN0eWxlKCksIHBz
ZXVkb1N0eWxlKSA9PSBTdHlsZTo6RGV0YWNoKSB7CkBAIC0zMTAyLDcgKzMxMDIsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlclN0eWxlCiB2b2lkIFJlbmRlckJsb2NrOjpj
cmVhdGVGaXJzdExldHRlclJlbmRlcmVyKFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ss
IFJlbmRlclRleHQqIGN1cnJlbnRUZXh0Q2hpbGQpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmly
c3RMZXR0ZXJDb250YWluZXIgPSBjdXJyZW50VGV4dENoaWxkLT5wYXJlbnQoKTsKLSAgICBSZW5k
ZXJTdHlsZSYgcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxv
Y2ssIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKKyAgICBhdXRvJiBwc2V1ZG9TdHlsZSA9IHN0eWxl
Rm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwog
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmaXJzdExldHRlciA9IG51bGxwdHI7CiAgICAgaWYg
KHBzZXVkb1N0eWxlLmRpc3BsYXkoKSA9PSBJTkxJTkUpCiAgICAgICAgIGZpcnN0TGV0dGVyID0g
bmV3IFJlbmRlcklubGluZShkb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocHNldWRvU3R5
bGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cu
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEJsb2NrQwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBjYWxjdWxhdGVNaW5pbXVtUGFnZUhlaWdodChS
ZW5kZXJTdHlsZSYgcmVuZGVyU3R5bGUsIFJvb3RJbmxpbmVCb3gmIGxhc3RMaW5lLCBMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKK3N0YXRpYyBpbmxpbmUgTGF5b3V0
VW5pdCBjYWxjdWxhdGVNaW5pbXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJTdHlsZSYgcmVuZGVy
U3R5bGUsIFJvb3RJbmxpbmVCb3gmIGxhc3RMaW5lLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91
dFVuaXQgbGluZUJvdHRvbSkKIHsKICAgICAvLyBXZSBtYXkgcmVxdWlyZSBhIGNlcnRhaW4gbWlu
aW11bSBudW1iZXIgb2YgbGluZXMgcGVyIHBhZ2UgaW4gb3JkZXIgdG8gc2F0aXNmeQogICAgIC8v
IG9ycGhhbnMgYW5kIHdpZG93cywgYW5kIHRoYXQgbWF5IGFmZmVjdCB0aGUgbWluaW11bSBwYWdl
IGhlaWdodC4KQEAgLTM3MjMsNyArMzcyMyw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGp1
c3RDb21wdXRlZEZvbnQKICAgICBmb3IgKFJlbmRlck9iamVjdCogZGVzY2VuZGVudCA9IHRyYXZl
cnNlTmV4dCh0aGlzLCBpc05vbkJsb2Nrc09yTm9uRml4ZWRIZWlnaHRMaXN0SXRlbXMpOyBkZXNj
ZW5kZW50OyBkZXNjZW5kZW50ID0gZGVzY2VuZGVudC0+dHJhdmVyc2VOZXh0KHRoaXMsIGlzTm9u
QmxvY2tzT3JOb25GaXhlZEhlaWdodExpc3RJdGVtcykpIHsKICAgICAgICAgaWYgKGlzVmlzaWJs
ZVJlbmRlclRleHQoZGVzY2VuZGVudCkgJiYgcmVzaXplVGV4dFBlcm1pdHRlZChkZXNjZW5kZW50
KSkgewogICAgICAgICAgICAgUmVuZGVyVGV4dCYgdGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+
KCpkZXNjZW5kZW50KTsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlJiBvbGRTdHlsZSA9IHRleHQu
c3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8mIG9sZFN0eWxlID0gdGV4dC5zdHlsZSgpOwogICAg
ICAgICAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBvbGRTdHlsZS5mb250RGVzY3JpcHRpb24o
KTsKICAgICAgICAgICAgIGZsb2F0IHNwZWNpZmllZFNpemUgPSBmb250RGVzY3JpcHRpb24uc3Bl
Y2lmaWVkU2l6ZSgpOwogICAgICAgICAgICAgZmxvYXQgc2NhbGVkU2l6ZSA9IHJvdW5kZihzcGVj
aWZpZWRTaXplICogc2NhbGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODQsNyArMzg0LDcgQEAgdm9pZCBSZW5kZXJC
b3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZgogICAgIGlmIChpc0RvY0VsZW1lbnRSZW5kZXJl
ciB8fCBpc0JvZHlSZW5kZXJlcikgewogICAgICAgICAvLyBQcm9wYWdhdGUgdGhlIG5ldyB3cml0
aW5nIG1vZGUgYW5kIGRpcmVjdGlvbiB1cCB0byB0aGUgUmVuZGVyVmlldy4KICAgICAgICAgYXV0
byogZG9jdW1lbnRFbGVtZW50UmVuZGVyZXIgPSBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgp
LT5yZW5kZXJlcigpOwotICAgICAgICBSZW5kZXJTdHlsZSYgdmlld1N0eWxlID0gdmlldygpLnN0
eWxlKCk7CisgICAgICAgIGF1dG8mIHZpZXdTdHlsZSA9IHZpZXcoKS5tdXRhYmxlU3R5bGUoKTsK
ICAgICAgICAgYm9vbCB2aWV3Q2hhbmdlZFdyaXRpbmdNb2RlID0gZmFsc2U7CiAgICAgICAgIGJv
b2wgcm9vdFN0eWxlQ2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBib29sIHZpZXdTdHlsZUNoYW5n
ZWQgPSBmYWxzZTsKQEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmCiAgICAgICAgICAgICB2aWV3U3R5bGUuc2V0RGlyZWN0aW9uKG5ld1N0
eWxlLmRpcmVjdGlvbigpKTsKICAgICAgICAgICAgIHZpZXdTdHlsZUNoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgaWYgKGlzQm9keVJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAgICAgcm9vdFJl
bmRlcmVyLT5zdHlsZSgpLnNldERpcmVjdGlvbihuZXdTdHlsZS5kaXJlY3Rpb24oKSk7CisgICAg
ICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXREaXJlY3Rpb24obmV3
U3R5bGUuZGlyZWN0aW9uKCkpOwogICAgICAgICAgICAgICAgIHJvb3RTdHlsZUNoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7CkBAIC00MDcsNyArNDA3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZgogICAgICAgICAgICAgdmlldygpLm1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgICAgIGlmIChpc0JvZHlSZW5kZXJlcikgewog
ICAgICAgICAgICAgICAgIHJvb3RTdHlsZUNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IHJvb3RSZW5kZXJlci0+c3R5bGUoKS5zZXRXcml0aW5nTW9kZShuZXdTdHlsZS53cml0aW5nTW9k
ZSgpKTsKKyAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldFdy
aXRpbmdNb2RlKG5ld1N0eWxlLndyaXRpbmdNb2RlKCkpOwogICAgICAgICAgICAgICAgIHJvb3RS
ZW5kZXJlci0+c2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKG5ld1N0eWxlLmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7CkBAIC00MzIsOCArNDMyLDggQEAgdm9pZCBSZW5kZXJCb3g6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZgogICAgICAgICAgICAgLy8gUHJvcGFnYXRlIHRoZSBi
b2R5IGZvbnQgYmFjayB1cCB0byB0aGUgUmVuZGVyVmlldyBhbmQgdXNlIGl0IGFzCiAgICAgICAg
ICAgICAvLyB0aGUgYmFzaXMgb2YgdGhlIGdyaWQuCiAgICAgICAgICAgICBpZiAobmV3U3R5bGUu
Zm9udERlc2NyaXB0aW9uKCkgIT0gdmlldygpLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCkpIHsK
LSAgICAgICAgICAgICAgICB2aWV3KCkuc3R5bGUoKS5zZXRGb250RGVzY3JpcHRpb24obmV3U3R5
bGUuZm9udERlc2NyaXB0aW9uKCkpOwotICAgICAgICAgICAgICAgIHZpZXcoKS5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAg
ICAgICAgICB2aWV3KCkubXV0YWJsZVN0eWxlKCkuc2V0Rm9udERlc2NyaXB0aW9uKG5ld1N0eWxl
LmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgICAgICB2aWV3KCkubXV0YWJsZVN0eWxl
KCkuZm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCBMYXlvdXRVbml0IFJl
bmRlckJveDo6Y29uc3RyYWluQ29udGVudEJvCiAKIFJvdW5kZWRSZWN0OjpSYWRpaSBSZW5kZXJC
b3g6OmJvcmRlclJhZGlpKCkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlz
LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKICAgICBMYXlvdXRS
ZWN0IGJvdW5kcyA9IGZyYW1lUmVjdCgpOwogCiAgICAgdW5zaWduZWQgYm9yZGVyTGVmdCA9IHN0
eWxlLmJvcmRlckxlZnRXaWR0aCgpOwpAQCAtNDgxNCw3ICs0ODE0LDcgQEAgUmVuZGVyTGF5ZXIq
IFJlbmRlckJveDo6ZW5jbG9zaW5nRmxvYXRQYQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1M
YXlvdXRSZWN0IFJlbmRlckJveDo6bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0
aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94
Ojpsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAgIExheW91dFJlY3QgcmVjdCA9IHZpc3VhbE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHBhcmVudFN0eWxlKTsKICAgICBpZiAoIXBhcmVudFN0
eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQpAQCAtNDgyMiw3ICs0ODIyLDcgQEAgTGF5
b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxWaXN1YWxPdmVyZgogICAgIHJldHVybiByZWN0Owog
fQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRp
b24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6
OnZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgd3JpdGluZyBtb2RlcyBvZiB0aGUgY2hp
bGQgYW5kIHBhcmVudCBtYXRjaCwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIAogICAgIC8vIGRvIGFu
eXRoaW5nIGZhbmN5LiBKdXN0IHJldHVybiB0aGUgcmVzdWx0LgpAQCAtNDg0MCw3ICs0ODQwLDcg
QEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVjdAogICAgIHJldHVybiBy
ZWN0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6bG9naWNhbExheW91dE92ZXJmbG93UmVj
dEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJl
Y3QgUmVuZGVyQm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29u
c3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAgIExheW91dFJlY3QgcmVj
dCA9IGxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHBhcmVudFN0eWxlKTsKICAgICBp
ZiAoIXBhcmVudFN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQpAQCAtNDg0OCw3ICs0
ODQ4LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxMYXlvdXRPdmVyZgogICAgIHJl
dHVybiByZWN0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6bGF5b3V0T3ZlcmZsb3dSZWN0
Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVj
dCBSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKIHsKICAgICAvLyBPbmx5IHByb3BhZ2F0ZSBpbnRl
cmlvciBsYXlvdXQgb3ZlcmZsb3cgaWYgd2UgZG9uJ3QgY2xpcCBpdC4KICAgICBMYXlvdXRSZWN0
IHJlY3QgPSBib3JkZXJCb3hSZWN0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2MywxMCArNTYzLDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGFwcGx5VG9wTGVmdExvY2F0aW9uT2Zmc2V0V2l0aEZsaXBwaW5nKHBvaW50KTsK
ICAgICB9CiAKLSAgICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9w
YWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZs
b3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBMYXlvdXRSZWN0
IGxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNv
bnN0OwotICAgIExheW91dFJlY3QgbGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJl
Y3QgdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqKSBj
b25zdDsKKyAgICBMYXlvdXRSZWN0IGxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdh
dGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJlY3QgbGF5b3V0T3Zl
cmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogICAg
IGJvb2wgaGFzUmVuZGVyT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93OyB9ICAg
IAogICAgIGJvb2wgaGFzVmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93
ICYmICFib3JkZXJCb3hSZWN0KCkuY29udGFpbnMobV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dS
ZWN0KCkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MSw3
ICs1ODEsNyBAQCBSb3VuZGVkUmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6YmFja2dyCiAgICAg
cmV0dXJuIGdldEJhY2tncm91bmRSb3VuZGVkUmVjdChib3JkZXJSZWN0LCBib3gsIGJveFNpemUu
d2lkdGgoKSwgYm94U2l6ZS5oZWlnaHQoKSwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVk
ZUxvZ2ljYWxSaWdodEVkZ2UpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUpCitz
dGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgY29uc3QgU2hhZG93RGF0
YSogYm94U2hhZG93ID0gc3R5bGUtPmJveFNoYWRvdygpOwogICAgIHdoaWxlIChib3hTaGFkb3ct
PnN0eWxlKCkgIT0gTm9ybWFsKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJ1dHRvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJ1dHRvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCdXR0b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQg
UmVuZGVyQnV0dG9uOjphZGRDaGlsZChSZW5kZXJPYmplY3QKICAgICAgICAgLy8gQ3JlYXRlIGFu
IGFub255bW91cyBibG9jay4KICAgICAgICAgQVNTRVJUKCFmaXJzdENoaWxkKCkpOwogICAgICAg
ICBtX2lubmVyID0gY3JlYXRlQW5vbnltb3VzQmxvY2soc3R5bGUoKS5kaXNwbGF5KCkpOwotICAg
ICAgICBzZXR1cElubmVyU3R5bGUoJm1faW5uZXItPnN0eWxlKCkpOworICAgICAgICBzZXR1cElu
bmVyU3R5bGUoJm1faW5uZXItPm11dGFibGVTdHlsZSgpKTsKICAgICAgICAgUmVuZGVyRmxleGli
bGVCb3g6OmFkZENoaWxkKG1faW5uZXIpOwogICAgIH0KICAgICAKQEAgLTk3LDkgKzk3LDkgQEAg
dm9pZCBSZW5kZXJCdXR0b246OnN0eWxlV2lsbENoYW5nZShTdHlsZQogICAgICAgICAvLyBpdCBy
aWdodCBiZWxvdy4gSGVyZSB3ZSBjaGFuZ2UgaXQgYmFjayB0byAwIHRvIGF2b2lkIGdldHRpbmcg
YSBzcHVyaW91cyBsYXlvdXQgaGludAogICAgICAgICAvLyBiZWNhdXNlIG9mIHRoZSBkaWZmZXJl
bmNlLiBTYW1lIGdvZXMgZm9yIHRoZSBvdGhlciBwcm9wZXJ0aWVzLgogICAgICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIGhhY2sgdW5uZWNlc3NhcnkuCi0gICAgICAgIG1faW5uZXItPnN0eWxlKCku
c2V0RmxleEdyb3cobmV3U3R5bGUuaW5pdGlhbEZsZXhHcm93KCkpOwotICAgICAgICBtX2lubmVy
LT5zdHlsZSgpLnNldE1hcmdpblRvcChuZXdTdHlsZS5pbml0aWFsTWFyZ2luKCkpOwotICAgICAg
ICBtX2lubmVyLT5zdHlsZSgpLnNldE1hcmdpbkJvdHRvbShuZXdTdHlsZS5pbml0aWFsTWFyZ2lu
KCkpOworICAgICAgICBtX2lubmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRGbGV4R3JvdyhuZXdTdHls
ZS5pbml0aWFsRmxleEdyb3coKSk7CisgICAgICAgIG1faW5uZXItPm11dGFibGVTdHlsZSgpLnNl
dE1hcmdpblRvcChuZXdTdHlsZS5pbml0aWFsTWFyZ2luKCkpOworICAgICAgICBtX2lubmVyLT5t
dXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5Cb3R0b20obmV3U3R5bGUuaW5pdGlhbE1hcmdpbigpKTsK
ICAgICB9CiAgICAgUmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZShkaWZmLCBuZXdTdHlsZSk7
CiB9CkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBSZW5kZXJCdXR0b246OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRAogICAgIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7
CiAKICAgICBpZiAobV9pbm5lcikgLy8gUmVuZGVyQmxvY2sgaGFuZGxlZCB1cGRhdGluZyB0aGUg
YW5vbnltb3VzIGJsb2NrJ3Mgc3R5bGUuCi0gICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5l
ci0+c3R5bGUoKSk7CisgICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5lci0+bXV0YWJsZVN0
eWxlKCkpOwogfQogCiB2b2lkIFJlbmRlckJ1dHRvbjo6c2V0dXBJbm5lclN0eWxlKFJlbmRlclN0
eWxlKiBpbm5lclN0eWxlKSAKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6
bGF5b3V0KCkKICAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7CiAKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIG5vdCBiZSBhZGp1c3Rpbmcgc3R5bGVzIGR1cmluZyBsYXlvdXQuIFNlZSA8
cmRhcjovL3Byb2JsZW0vNzY3NTQ5Mz4uCi0gICAgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJvdW5k
Qm9yZGVyUmFkaXVzKHN0eWxlKCksICp0aGlzKTsKKyAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0
Um91bmRCb3JkZXJSYWRpdXMobXV0YWJsZVN0eWxlKCksICp0aGlzKTsKIH0KICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2NSw3ICsxNjUsNyBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9yQ2hp
bGQoCiAKIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpzdHlsZVdpbGxDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkKIHsKLSAg
ICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmc3R5bGUo
KSA6IG51bGxwdHI7CisgICAgYXV0byogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkg
PyAmc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKG9sZFN0eWxlICYmICFvbGRTdHlsZS0+bGlu
ZUNsYW1wKCkuaXNOb25lKCkgJiYgbmV3U3R5bGUubGluZUNsYW1wKCkuaXNOb25lKCkpCiAgICAg
ICAgIGNsZWFyTGluZUNsYW1wKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDExICsyMDUs
NiBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gUmVuZGVyRWxlbWVudDo6CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLWVudW0gU3R5bGVDYWNoZVN0YXRlIHsKLSAgICBDYWNoZWQsCi0gICAg
VW5jYWNoZWQKLX07Ci0KIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRWxlbWVu
dDo6dW5jYWNoZWRGaXJzdExpbmVTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAg
ICAgaWYgKCF2aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpCkBAIC0yMjEsMTQgKzIxNiwxNCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVsZW1lCiAgICAgICAgIGlmIChS
ZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2sgPSByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmZp
cnN0TGluZUJsb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2stPmdldFVu
Y2FjaGVkUHNldWRvU3R5bGUoUHNldWRvU3R5bGVSZXF1ZXN0KEZJUlNUX0xJTkUpLCBzdHlsZSwg
Zmlyc3RMaW5lQmxvY2sgPT0gdGhpcyA/IHN0eWxlIDogbnVsbHB0cik7CiAgICAgfSBlbHNlIGlm
ICghcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5pc0Fub255bW91cygpICYmIHJlbmRlcmVyRm9y
Rmlyc3RMaW5lU3R5bGUuaXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUgPSByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExp
bmVTdHlsZSgpOworICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IHJlbmRlcmVyRm9yRmlyc3RM
aW5lU3R5bGUucGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGlmICgmcGFyZW50
U3R5bGUgIT0gJnJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCktPnN0eWxlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5nZXRVbmNhY2hlZFBz
ZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChGSVJTVF9MSU5FX0lOSEVSSVRFRCksICZwYXJl
bnRTdHlsZSwgc3R5bGUpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVuZGVy
U3R5bGUqIFJlbmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TGluZVN0eWxlKCkgY29uc3QKK2NvbnN0
IFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKHZpZXcoKS51c2VzRmlyc3RMaW5lUnVsZXMoKSk7CiAKQEAgLTIzOCwx
MCArMjMzLDEwIEBAIFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdEwKICAg
ICAgICAgaWYgKFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jayA9IHJlbmRlcmVyRm9yRmlyc3RM
aW5lU3R5bGUuZmlyc3RMaW5lQmxvY2soKSkKICAgICAgICAgICAgIHJldHVybiBmaXJzdExpbmVC
bG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTElORSwgJnN0eWxlKCkpOwogICAgIH0g
ZWxzZSBpZiAoIXJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuaXNBbm9ueW1vdXMoKSAmJiByZW5k
ZXJlckZvckZpcnN0TGluZVN0eWxlLmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgUmVuZGVy
U3R5bGUmIHBhcmVudFN0eWxlID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+
Zmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAgYXV0byYgcGFyZW50U3R5bGUgPSByZW5kZXJlckZv
ckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBpZiAo
JnBhcmVudFN0eWxlICE9ICZyZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5zdHls
ZSgpKSB7CiAgICAgICAgICAgICAvLyBBIGZpcnN0LWxpbmUgc3R5bGUgaXMgaW4gZWZmZWN0LiBD
YWNoZSBhIGZpcnN0LWxpbmUgc3R5bGUgZm9yIG91cnNlbHZlcy4KLSAgICAgICAgICAgIHJlbmRl
cmVyRm9yRmlyc3RMaW5lU3R5bGUuc3R5bGUoKS5zZXRIYXNQc2V1ZG9TdHlsZShGSVJTVF9MSU5F
X0lOSEVSSVRFRCk7CisgICAgICAgICAgICByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLm1fc3R5
bGUuc2V0SGFzUHNldWRvU3R5bGUoRklSU1RfTElORV9JTkhFUklURUQpOwogICAgICAgICAgICAg
cmV0dXJuIHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoRklS
U1RfTElORV9JTkhFUklURUQsICZwYXJlbnRTdHlsZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0y
NDksNyArMjQ0LDcgQEAgUmVuZGVyU3R5bGUqIFJlbmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TAog
ICAgIHJldHVybiAmc3R5bGUoKTsKIH0KIAotUmVuZGVyU3R5bGUmIFJlbmRlckVsZW1lbnQ6OmZp
cnN0TGluZVN0eWxlKCkgY29uc3QKK2NvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJFbGVtZW50Ojpm
aXJzdExpbmVTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHZpZXcoKS51c2VzRmlyc3RMaW5l
UnVsZXMoKSA/ICpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsKIH0KQEAgLTgwNiw3
ICs4MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmVuZGVyZXJIYXNCYWNrZ3JvdW5kCiAKIHZv
aWQgUmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
ID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8q
IG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOwog
ICAgIGlmIChvbGRTdHlsZSkgewogICAgICAgICAvLyBJZiBvdXIgei1pbmRleCBjaGFuZ2VzIHZh
bHVlIG9yIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8gZGly
dHkgb3VyIHN0YWNraW5nIGNvbnRleHQncyB6LW9yZGVyIGxpc3QuCkBAIC0xNTM1LDcgKzE1MzAs
MjIgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjphZGRDb250cm9sU3RhdGVzRm9yUgogICAgIGNvbnRy
b2xTdGF0ZXNSZW5kZXJlck1hcCgpLmFkZChvLCBzdGF0ZXMpOwogfQogCi1SZW5kZXJTdHlsZSog
UmVuZGVyRWxlbWVudDo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0Citjb25zdCBSZW5kZXJTdHlsZSogUmVuZGVyRWxl
bWVudDo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpIGNvbnN0Cit7CisgICAgaWYgKHBzZXVkbyA8IEZJUlNUX0lOVEVS
TkFMX1BTRVVET0lEICYmICFzdHlsZSgpLmhhc1BzZXVkb1N0eWxlKHBzZXVkbykpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgUmVuZGVyU3R5bGUqIGNhY2hlZFN0eWxlID0gc3R5bGUo
KS5nZXRDYWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG8pOworICAgIGlmIChjYWNoZWRTdHlsZSkKKyAg
ICAgICAgcmV0dXJuIGNhY2hlZFN0eWxlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiByZXN1bHQgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChw
c2V1ZG8pLCBwYXJlbnRTdHlsZSk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUmPihtX3N0eWxlKS5hZGRDYWNoZWRQc2V1ZG9TdHlsZShXVEZN
b3ZlKHJlc3VsdCkpOworICAgIHJldHVybiBudWxscHRyOworfQorCitSZW5kZXJTdHlsZSogUmVu
ZGVyRWxlbWVudDo6Z2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywg
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmIChwc2V1ZG8gPCBGSVJT
VF9JTlRFUk5BTF9QU0VVRE9JRCAmJiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG8pKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE1NDYsMTEgKzE1NTYsMTEgQEAgUmVuZGVyU3R5
bGUqIFJlbmRlckVsZW1lbnQ6OmdldENhY2hlZFBzZQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiByZXN1bHQgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVx
dWVzdChwc2V1ZG8pLCBwYXJlbnRTdHlsZSk7CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0
dXJuIHN0eWxlKCkuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAg
ICAgcmV0dXJuIG1fc3R5bGUuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RGTW92ZShyZXN1bHQpKTsK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBS
ZW5kZXJFbGVtZW50OjpnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKGNvbnN0IFBzZXVkb1N0eWxlUmVx
dWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRl
clN0eWxlKiBvd25TdHlsZSkgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVu
ZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlcXVl
c3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogb3duU3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHBzZXVkb1N0eWxl
UmVxdWVzdC5wc2V1ZG9JZCA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEICYmICFvd25TdHlsZSAm
JiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwNjYsNyArMjA3Niw3IEBAIHZvaWQgUmVuZGVy
RWxlbWVudDo6cGFpbnRPdXRsaW5lKFBhaW50SW4KICAgICBpZiAoIWhhc091dGxpbmUoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwor
ICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIGZsb2F0IG91dGxpbmVXaWR0aCA9
IGZsb29yVG9EZXZpY2VQaXhlbChzdHlsZVRvVXNlLm91dGxpbmVXaWR0aCgpLCBkb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIGZsb2F0IG91dGxpbmVPZmZzZXQgPSBmbG9vclRv
RGV2aWNlUGl4ZWwoc3R5bGVUb1VzZS5vdXRsaW5lT2Zmc2V0KCksIGRvY3VtZW50KCkuZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsMTEgQEAgcHVibGljOgog
CiAgICAgYm9vbCBoYXNJbml0aWFsaXplZFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbml0
aWFsaXplZFN0eWxlOyB9CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVy
biBjb25zdF9jYXN0PFJlbmRlclN0eWxlJj4obV9zdHlsZSk7IH0KLSAgICBSZW5kZXJTdHlsZSYg
Zmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGlu
ZVN0eWxlKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogU3R5bGUgc2hvdWxkbid0IGJlIG11dGF0
ZWQuCisgICAgUmVuZGVyU3R5bGUmIG11dGFibGVTdHlsZSgpIHsgcmV0dXJuIG1fc3R5bGU7IH0K
IAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0eWxlKCk7CiAKQEAgLTUyLDggKzU1LDkgQEAgcHVibGlj
OgogCiAgICAgLy8gVGhlIHBzZXVkbyBlbGVtZW50IHN0eWxlIGNhbiBiZSBjYWNoZWQgb3IgdW5j
YWNoZWQuICBVc2UgdGhlIGNhY2hlZCBtZXRob2QgaWYgdGhlIHBzZXVkbyBlbGVtZW50IGRvZXNu
J3QgcmVzcGVjdAogICAgIC8vIGFueSBwc2V1ZG8gY2xhc3NlcyAoYW5kIHRoZXJlZm9yZSBoYXMg
bm8gY29uY2VwdCBvZiBjaGFuZ2luZyBzdGF0ZSkuCi0gICAgUmVuZGVyU3R5bGUqIGdldENhY2hl
ZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRy
KSBjb25zdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldFVuY2FjaGVkUHNl
dWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gbnVsbHB0ciwgUmVuZGVyU3R5bGUqIG93blN0eWxlID0gbnVsbHB0cikgY29uc3Q7Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKSBjb25zdDsKKyAgICBSZW5kZXJT
dHlsZSogZ2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0Jiwg
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0ciwgY29uc3QgUmVuZGVyU3R5
bGUqIG93blN0eWxlID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICAvLyBUaGlzIGlzIG51bGwgZm9y
IGFub255bW91cyByZW5kZXJlcnMuCiAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6bm9kZSgpKTsgfQpAQCAtMjk4LDcg
KzMwMiw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFN0eWxlRGlmZmVyZW5jZSBhZGp1c3RT
dHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlLCB1bnNpZ25lZCBjb250ZXh0U2Vuc2l0aXZl
UHJvcGVydGllcykgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUqIGNhY2hlZEZpcnN0TGluZVN0eWxl
KCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNhY2hlZEZpcnN0TGluZVN0eWxlKCkg
Y29uc3Q7CiAKICAgICB2b2lkIG5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUoQ2FjaGVk
SW1hZ2UmKSBmaW5hbDsKIApAQCAtNDUwLDE0ICs0NTQsMTQgQEAgaW5saW5lIGJvb2wgUmVuZGVy
T2JqZWN0Ojppc1JlbmRlcklubGluZQogICAgIHJldHVybiBpczxSZW5kZXJFbGVtZW50PigqdGhp
cykgJiYgZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpLmlzUmVuZGVySW5saW5lKCk7CiB9
CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpzdHlsZSgpIGNvbnN0Citpbmxp
bmUgY29uc3QgUmVuZGVyU3R5bGUmIFJlbmRlck9iamVjdDo6c3R5bGUoKSBjb25zdAogewogICAg
IGlmIChpc1RleHQoKSkKICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zdHlsZSgpOwogICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykuc3R5bGUoKTsKIH0KIAotaW5saW5l
IFJlbmRlclN0eWxlJiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QKK2lubGlu
ZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZSgpIGNvbnN0
CiB7CiAgICAgaWYgKGlzVGV4dCgpKQogICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmZpcnN0TGlu
ZVN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMiw4
ICs1MjIsOCBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQoKQogICAgIExheW91
dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksICp0aGlzLCBsb2NhdGlvbk9mZnNl
dCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGUoKS5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKICAgICAKICAgICBjaGlsZEJveC5zZXRMb2NhdGlvbihM
YXlvdXRQb2ludChib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSArIExheW91dFNpemUocGFkZGlu
Z0xlZnQoKSwgcGFkZGluZ1RvcCgpKSk7Ci0gICAgY2hpbGRCb3guc3R5bGUoKS5zZXRIZWlnaHQo
TGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgY2hpbGRCb3guc3R5bGUoKS5z
ZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGNoaWxkQm94Lm11
dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
KyAgICBjaGlsZEJveC5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0
aCgpLCBGaXhlZCkpOwogICAgIGNoaWxkQm94LnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
CiAgICAgY2hpbGRCb3gubGF5b3V0KCk7CiAgICAgY2xlYXJDaGlsZE5lZWRzTGF5b3V0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1Ro
cmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgUmVuZGVyRmxvd1RocmVh
ZDo6UmVuZGVyRmxvd1RocmVhZChEb2N1bQogICAgIHNldEZsb3dUaHJlYWRTdGF0ZShJbnNpZGVP
dXRPZkZsb3dUaHJlYWQpOwogfQogCi1SZW5kZXJTdHlsZSBSZW5kZXJGbG93VGhyZWFkOjpjcmVh
dGVGbG93VGhyZWFkU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorUmVuZGVyU3R5bGUg
UmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRlRmxvd1RocmVhZFN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSkKIHsKICAgICBhdXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpOwogICAgIG5ld1N0eWxlLmluaGVyaXRGcm9tKHBhcmVudFN0eWxlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBk
ZXNjZW5kYW50IGJveCdzIGxheW91dCBpcyBmaW5pc2hlZCBhbmQgaXQgaGFzIGJlZW4gcG9zaXRp
b25lZCB3aXRoaW4gaXRzIGNvbnRhaW5lci4KICAgICB2aXJ0dWFsIHZvaWQgZmxvd1RocmVhZERl
c2NlbmRhbnRCb3hMYWlkT3V0KFJlbmRlckJveCopIHsgfQogCi0gICAgc3RhdGljIFJlbmRlclN0
eWxlIGNyZWF0ZUZsb3dUaHJlYWRTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAg
IHN0YXRpYyBSZW5kZXJTdHlsZSBjcmVhdGVGbG93VGhyZWFkU3R5bGUoY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcxNiw4ICs3MTYsOCBAQCB2b2lkIFJlbmRlckltYWdlOjpsYXlvdXRTaGFkb3dDb250cm9s
cyhjCiAKICAgICBpZiAoc2hhZG93Q29udHJvbHNOZWVkQ3VzdG9tTGF5b3V0TWV0cmljcygpKSB7
CiAgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldExvY2F0aW9uKExheW91dFBvaW50KGJvcmRl
ckxlZnQoKSwgYm9yZGVyVG9wKCkpICsgTGF5b3V0U2l6ZShwYWRkaW5nTGVmdCgpLCBwYWRkaW5n
VG9wKCkpKTsKLSAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVu
Z3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgICAgIGNvbnRyb2xzUmVuZGVyZXIt
PnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKG5ld1NpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICAg
ICAgY29udHJvbHNSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aChuZXdT
aXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5tdXRhYmxl
U3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwogICAgIH0K
IAogICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3R5bGVE
aWRDaGFuZ2UoU3R5bGVECiAgICAgLy8gZS5nLiwgPGZvbnQ+Zm9vIDxoND5nb288L2g0PiBtb288
L2ZvbnQ+LiAgVGhlIDxmb250PiBpbmxpbmVzIGJlZm9yZQogICAgIC8vIGFuZCBhZnRlciB0aGUg
YmxvY2sgc2hhcmUgdGhlIHNhbWUgc3R5bGUsIGJ1dCB0aGUgYmxvY2sgZG9lc24ndAogICAgIC8v
IG5lZWQgdG8gcGFzcyBpdHMgc3R5bGUgb24gdG8gYW55b25lIGVsc2UuCi0gICAgUmVuZGVyU3R5
bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAg
ICAgUmVuZGVySW5saW5lKiBjb250aW51YXRpb24gPSBpbmxpbmVFbGVtZW50Q29udGludWF0aW9u
KCk7CiAgICAgaWYgKGNvbnRpbnVhdGlvbikgewogICAgICAgICBmb3IgKFJlbmRlcklubGluZSog
Y3VyckNvbnQgPSBjb250aW51YXRpb247IGN1cnJDb250OyBjdXJyQ29udCA9IGN1cnJDb250LT5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpIHsKQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIFJl
bmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgaWYgKGFsd2F5c0NyZWF0ZUxp
bmVCb3hlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSAmcGFyZW50KCktPnN0eWxlKCk7CisgICAgYXV0byogcGFyZW50U3R5bGUgPSAmcGFyZW50
KCktPnN0eWxlKCk7CiAgICAgUmVuZGVySW5saW5lKiBwYXJlbnRSZW5kZXJJbmxpbmUgPSBpczxS
ZW5kZXJJbmxpbmU+KCpwYXJlbnQoKSkgPyBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBhcmVudCgp
KSA6IG51bGxwdHI7CiAgICAgYm9vbCBjaGVja0ZvbnRzID0gZG9jdW1lbnQoKS5pbk5vUXVpcmtz
TW9kZSgpOwogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnVw
ZGF0ZUFsd2F5c0NyZWF0ZUxpbgogICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzICYmIGNo
ZWNrRm9udHMgJiYgdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CiAgICAgICAgIC8vIEhh
dmUgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5bGUgYXMgd2VsbC4KICAgICAgICAgcGFyZW50
U3R5bGUgPSAmcGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7Ci0gICAgICAgIFJlbmRlclN0eWxl
JiBjaGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAgYXV0byYgY2hpbGRTdHls
ZSA9IGZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9ICFw
YXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2Vu
dERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygp
KQogICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUK
ICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gY2hpbGRTdHlsZS5s
aW5lSGVpZ2h0KCk7CkBAIC0xNjAxLDcgKzE2MDEsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFp
bnRPdXRsaW5lKFBhaW50SW5mCiAgICAgaWYgKCFoYXNPdXRsaW5lKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBz
dHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICAvLyBPbmx5IHBhaW50IHRoZSBmb2N1cyByaW5nIGJ5
IGhhbmQgaWYgdGhlIHRoZW1lIGlzbid0IGFibGUgdG8gZHJhdyBpdC4KICAgICBpZiAoc3R5bGVU
b1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZyhz
dHlsZVRvVXNlKSkgewogICAgICAgICBWZWN0b3I8TGF5b3V0UmVjdD4gZm9jdXNSaW5nUmVjdHM7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxMTEsNyArNDExMSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVw
Q2xpcFBhdGgoR3JhcGhpY3MKICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQgPSB0
cnVlOwogICAgIH0KIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUo
KTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKICAgICBBU1NFUlQoc3R5
bGUuY2xpcFBhdGgoKSk7CiAgICAgaWYgKGlzPFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCpzdHls
ZS5jbGlwUGF0aCgpKSB8fCAoaXM8Qm94Q2xpcFBhdGhPcGVyYXRpb24+KCpzdHlsZS5jbGlwUGF0
aCgpKSAmJiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSkgewogICAgICAgICBXaW5kUnVsZSB3
aW5kUnVsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICBtX3ZCYXItPnBhaW50KHBhaW50SW5m
by5jb250ZXh0KCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKLXN0YXRp
YyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5k
ZXJTdHlsZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBpdGVtRm9udCwgTGF5b3V0UmVjdCBpdGVt
Qm91ZGluZ0JveCkKK3N0YXRpYyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4
dFJ1biB0ZXh0UnVuLCBjb25zdCBSZW5kZXJTdHlsZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBp
dGVtRm9udCwgTGF5b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKIHsKICAgICBFVGV4dEFsaWduIGFj
dHVhbEFsaWdubWVudCA9IGl0ZW1TdHlsZS0+dGV4dEFsaWduKCk7CiAgICAgLy8gRklYTUU6IEZp
cmVmb3ggZG9lc24ndCByZXNwZWN0IEpVU1RJRlkuIFNob3VsZCB3ZT8KQEAgLTM3OSw3ICszNzks
NyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoCiAgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdEVsZW1lbnQoKS5saXN0SXRl
bXMoKTsKICAgICBIVE1MRWxlbWVudCogbGlzdEl0ZW1FbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJ
bmRleF07CiAKLSAgICBSZW5kZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+
Y29tcHV0ZWRTdHlsZSgpOworICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICpsaXN0SXRlbUVsZW1lbnQt
PmNvbXB1dGVkU3R5bGUoKTsKIAogICAgIGlmIChpdGVtU3R5bGUudmlzaWJpbGl0eSgpID09IEhJ
RERFTikKICAgICAgICAgcmV0dXJuOwpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgUmVuZGVyTGlz
dEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCgKIHsKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudCgpLmxpc3RJdGVtcygpOwogICAgIEhUTUxF
bGVtZW50KiBsaXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKLSAgICBSZW5k
ZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwor
ICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICpsaXN0SXRlbUVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsK
IAogICAgIENvbG9yIGJhY2tDb2xvcjsKICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCps
aXN0SXRlbUVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1F
bGVtZW50KS5zZWxlY3RlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDgs
OCArMTcwOCw4IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucygpCiAgICAg
ICAgIAogICAgIH0KIAotICAgIHN0eWxlKCkuc2V0TWFyZ2luU3RhcnQoTGVuZ3RoKG1hcmdpblN0
YXJ0LCBGaXhlZCkpOwotICAgIHN0eWxlKCkuc2V0TWFyZ2luRW5kKExlbmd0aChtYXJnaW5FbmQs
IEZpeGVkKSk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luU3RhcnQoTGVuZ3RoKG1hcmdp
blN0YXJ0LCBGaXhlZCkpOworICAgIG11dGFibGVTdHlsZSgpLnNldE1hcmdpbkVuZChMZW5ndGgo
bWFyZ2luRW5kLCBGaXhlZCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckxpc3RNYXJrZXI6Omxp
bmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGlu
ZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTAsNyArMTEwLDcgQEAgaW50IFJlbmRlck1hcnF1ZWU6OmNvbXB1dGVQb3NpdGlvbihFTWFy
cQogewogICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci0+cmVuZGVyQm94KCk7CiAgICAgQVNT
RVJUKGJveCk7Ci0gICAgUmVuZGVyU3R5bGUmIGJveFN0eWxlID0gYm94LT5zdHlsZSgpOworICAg
IGF1dG8mIGJveFN0eWxlID0gYm94LT5zdHlsZSgpOwogICAgIGlmIChpc0hvcml6b250YWwoKSkg
ewogICAgICAgICBib29sIGx0ciA9IGJveFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsK
ICAgICAgICAgTGF5b3V0VW5pdCBjbGllbnRXaWR0aCA9IGJveC0+Y2xpZW50V2lkdGgoKTsKQEAg
LTE5Nyw3ICsxOTcsNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlv
CiAKIHZvaWQgUmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVlZVN0eWxlKCkKIHsKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCk7CisgICAgYXV0byYg
c3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLm11dGFibGVTdHlsZSgpOwogICAgIAogICAgIGlm
IChtX2RpcmVjdGlvbiAhPSBzdHlsZS5tYXJxdWVlRGlyZWN0aW9uKCkgfHwgKG1fdG90YWxMb29w
cyAhPSBzdHlsZS5tYXJxdWVlTG9vcENvdW50KCkgJiYgbV9jdXJyZW50TG9vcCA+PSBtX3RvdGFs
TG9vcHMpKQogICAgICAgICBtX2N1cnJlbnRMb29wID0gMDsgLy8gV2hlbiBkaXJlY3Rpb24gY2hh
bmdlcyBvciBvdXIgbG9vcENvdW50IGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiBvdXIgY3VycmVu
dCBsb29wLCByZXNldCBvdXIgbG9vcC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEw
OSw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZUlubmVyQmxvY2soKQogCiB2b2lkIFJl
bmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgaW5u
ZXJTdHlsZSA9IG1faW5uZXJCbG9jay0+c3R5bGUoKTsKKyAgICBhdXRvJiBpbm5lclN0eWxlID0g
bV9pbm5lckJsb2NrLT5tdXRhYmxlU3R5bGUoKTsKICAgICBpbm5lclN0eWxlLnNldEZsZXhHcm93
KDEpOwogICAgIGlubmVyU3R5bGUuc2V0RmxleFNocmluaygxKTsKICAgICAvLyBtaW4td2lkdGg6
IDA7IGlzIG5lZWRlZCBmb3IgY29ycmVjdCBzaHJpbmtpbmcuCkBAIC0yMTUsNyArMjE1LDcgQEAg
dm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKAogICAgICAgICBpZiAodGhl
bWUoKS5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAgICAgICAgICAgICAvLyBB
ZGQgaW4gdGhlIG9wdGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3QgY2FsY3VsYXRlIHBlcmNl
bnRhZ2UgdmFsdWVzIGZvciBub3cuCiAgICAgICAgICAgICBmbG9hdCBvcHRpb25XaWR0aCA9IDA7
Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIG9wdGlvblN0eWxlID0gZWxlbWVudC0+Y29t
cHV0ZWRTdHlsZSgpKQorICAgICAgICAgICAgaWYgKGF1dG8qIG9wdGlvblN0eWxlID0gZWxlbWVu
dC0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICAgICAgICAgIG9wdGlvbldpZHRoICs9IG1pbmlt
dW1WYWx1ZUZvckxlbmd0aChvcHRpb25TdHlsZS0+dGV4dEluZGVudCgpLCAwKTsKICAgICAgICAg
ICAgIGlmICghdGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKQEAgLTUxOSw3ICs1MTksNyBAQCBQ
b3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAgICAgYm9vbCBpdGVtSGFz
Q3VzdG9tQmFja2dyb3VuZENvbG9yOwogICAgIGdldEl0ZW1CYWNrZ3JvdW5kQ29sb3IobGlzdElu
ZGV4LCBpdGVtQmFja2dyb3VuZENvbG9yLCBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENvbG9yKTsK
IAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9ICplbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7Cisg
ICAgYXV0byYgc3R5bGUgPSAqZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogICAgIHJldHVybiBQ
b3B1cE1lbnVTdHlsZShzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
ciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLmZvbnRDYXNjYWRlKCksIHN0eWxlLnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZS5kaXNwbGF5KCkgPT0gTk9ORSwgdHJ1
ZSwgc3R5bGUudGV4dEluZGVudCgpLCBzdHlsZS5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShzdHls
ZS51bmljb2RlQmlkaSgpKSwKICAgICAgICAgaXRlbUhhc0N1c3RvbUJhY2tncm91bmRDb2xvciA/
IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IgOiBQb3B1cE1lbnVTdHlsZTo6
RGVmYXVsdEJhY2tncm91bmRDb2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBzdGF0aWMgYm9v
bCBpc1ZhbGlkQ29sdW1uU3Bhbm5lcihSZW5kZXJNCiAgICAgQVNTRVJUKGRlc2NlbmRhbnQtPmlz
RGVzY2VuZGFudE9mKGZsb3dUaHJlYWQpKTsKIAogICAgIC8vIEZpcnN0IG1ha2Ugc3VyZSB0aGF0
IHRoZSByZW5kZXJlciBpdHNlbGYgaGFzIHRoZSByaWdodCBwcm9wZXJ0aWVzIGZvciBiZWNvbWlu
ZyBhIHNwYW5uZXIuCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gZGVzY2VuZGFudC0+c3R5bGUo
KTsKKyAgICBhdXRvJiBzdHlsZSA9IGRlc2NlbmRhbnQtPnN0eWxlKCk7CiAgICAgaWYgKHN0eWxl
LmNvbHVtblNwYW4oKSAhPSBDb2x1bW5TcGFuQWxsIHx8ICFpczxSZW5kZXJCb3g+KCpkZXNjZW5k
YW50KSB8fCBkZXNjZW5kYW50LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIu
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIqIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyOjpjcmVh
dGVBbm9ueW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBmbG93VGhyZWFkLCBSZW5k
ZXJCb3gqIHNwYW5uZXIsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK1JlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
cjo6Y3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogZmxvd1RocmVh
ZCwgUmVuZGVyQm94KiBzcGFubmVyLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7
CiAgICAgYXV0byBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdp
dGhEaXNwbGF5KCpwYXJlbnRTdHlsZSwgQkxPQ0spOwogICAgIG5ld1N0eWxlLnNldENsZWFyKENC
T1RIKTsgLy8gV2UgZG9uJ3Qgd2FudCBmbG9hdHMgaW4gdGhlIHJvdyBwcmVjZWRpbmcgdGhlIHNw
YW5uZXIgdG8gY29udGludWUgb24gdGhlIG90aGVyIHNpZGUuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXIuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOwogCiBj
bGFzcyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciBmaW5hbCA6IHB1YmxpYyBS
ZW5kZXJCb3ggewogcHVibGljOgotICAgIHN0YXRpYyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlciogY3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCos
IFJlbmRlckJveCogc3Bhbm5lciwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICBzdGF0
aWMgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIGNyZWF0ZUFub255bW91cyhS
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqLCBSZW5kZXJCb3gqIHNwYW5uZXIsIGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICBSZW5kZXJCb3gqIHNwYW5uZXIoKSBjb25z
dCB7IHJldHVybiBtX3NwYW5uZXI7IH0KICAgICBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQq
IGZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2Zsb3dUaHJlYWQ7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNw
cAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd0ZyYWdtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZv
aWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNoZWNrUmVnaW8KICAgICBkb3duY2FzdDxSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQ+KCptX2Zsb3dUaHJlYWQpLmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5n
KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5k
ZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbihSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKSBjb25zdAogewog
ICAgIEFTU0VSVCghcmVuZGVyZXIuaXNBbm9ueW1vdXMoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQiOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IGNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmLCBSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gY29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSkgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVn
aW9uKFJlbmRlckVsZW1lbnQmKTsKICAgICB2b2lkIHNldE9iamVjdFN0eWxlSW5SZWdpb24oUmVu
ZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiwgYm9vbCBvYmplY3RSZWdp
b25TdHlsZUNhY2hlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyMiw3ICsxODIyLDcgQEAgaW50
IFJlbmRlck9iamVjdDo6aW5uZXJMaW5lSGVpZ2h0KCkgY29ucwogICAgIHJldHVybiBzdHlsZSgp
LmNvbXB1dGVkTGluZUhlaWdodCgpOwogfQogCi1zdGF0aWMgQ29sb3IgZGVjb3JhdGlvbkNvbG9y
KFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBDb2xvciBkZWNvcmF0aW9uQ29sb3IoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIENvbG9yIHJlc3VsdDsKICAgICAvLyBDaGVjayBm
b3IgdGV4dCBkZWNvcmF0aW9uIGNvbG9yIGZpcnN0LgpAQCAtMTg0NCw3ICsxODQ0LDcgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sbwogICAgIFRleHREZWNvcmF0aW9u
U3R5bGUmIHVuZGVybGluZVN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxlJiBvdmVybGluZVN0eWxl
LCBUZXh0RGVjb3JhdGlvblN0eWxlJiBsaW5ldGhyb3VnaFN0eWxlLCBib29sIGZpcnN0bGluZVN0
eWxlKSBjb25zdAogewogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCA9IHRoaXM7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBudWxscHRyOworICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZVRvVXNlID0gbnVsbHB0cjsKICAgICBUZXh0RGVjb3JhdGlvbiBjdXJyRGVjcyA9
IFRleHREZWNvcmF0aW9uTm9uZTsKICAgICBDb2xvciByZXN1bHRDb2xvcjsKICAgICBkbyB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY5Nyw4ICs2OTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0
IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0
dWFsIExheW91dFVuaXQgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
MDsgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUm
IGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkg
Y29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CiAK
ICAgICAvLyBBbm9ueW1vdXMgYmxvY2tzIHRoYXQgYXJlIHBhcnQgb2Ygb2YgYSBjb250aW51YXRp
b24gY2hhaW4gd2lsbCByZXR1cm4gdGhlaXIgaW5saW5lIGNvbnRpbnVhdGlvbidzIG91dGxpbmUg
c3R5bGUgaW5zdGVhZC4KICAgICAvLyBUaGlzIGlzIHR5cGljYWxseSBvbmx5IHJlbGV2YW50IHdo
ZW4gcmVwYWludGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQgUmVuZGVy
VGFibGU6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2EKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jYXB0aW9ucy5zaXplKCk7IGkrKykKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSBzdGQ6Om1heChtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgbV9jYXB0aW9uc1tp
XS0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkpOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxl
VG9Vc2UgPSBzdHlsZSgpOworICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBjaGVja2luZyBmb3IgaXNTcGVjaWZpZWQg
c2luY2UgeW91IHNob3VsZCBiZSBhYmxlIHRvIHVzZSBwZXJjZW50YWdlIG9yIGNhbGMgdmFsdWVz
IGZvciBtaW4td2lkdGguCiAgICAgaWYgKHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkuaXNG
aXhlZCgpICYmIHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsKICAg
ICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdGQ6Om1heChtX21heFByZWZlcnJl
ZExvZ2ljYWxXaWR0aCwgYWRqdXN0Q29udGVudEJveExvZ2ljYWxXaWR0aEZvckJveFNpemluZyhz
dHlsZVRvVXNlLmxvZ2ljYWxNaW5XaWR0aCgpLnZhbHVlKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE5OCw3ICsxMTk4LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rp
b246OnBhaW50Um93R3JvdXBCbwogCiB9CiAKLXN0YXRpYyBCb3hTaWRlIHBoeXNpY2FsQm9yZGVy
Rm9yRGlyZWN0aW9uKFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93LCBDb2xsYXBzZWRCb3Jk
ZXJTaWRlIHNpZGUpCitzdGF0aWMgQm94U2lkZSBwaHlzaWNhbEJvcmRlckZvckRpcmVjdGlvbihj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JDZWxsRmxvdywgQ29sbGFwc2VkQm9yZGVyU2lkZSBz
aWRlKQogewogCiAgICAgc3dpdGNoIChzaWRlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGlzVGV4dEZyYWdtZW50KCkgY29uc3Q7CiAKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUo
KSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OworICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBmaXJzdExp
bmVTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBnZXRDYWNoZWRQc2V1ZG9T
dHlsZShQc2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0cikg
Y29uc3Q7CiAKICAgICBDb2xvciBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAg
ICBDb2xvciBzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKQEAgLTI1MSwxNyArMjUx
LDE3IEBAIGlubGluZSBVQ2hhciBSZW5kZXJUZXh0OjpjaGFyYWN0ZXJBdCh1bnMKICAgICByZXR1
cm4gdW5jaGVja2VkQ2hhcmFjdGVyQXQoaSk7CiB9CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVu
ZGVyVGV4dDo6c3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJU
ZXh0OjpzdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcmVudCgpLT5zdHlsZSgpOwogfQog
Ci1pbmxpbmUgUmVuZGVyU3R5bGUmIFJlbmRlclRleHQ6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QK
K2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyVGV4dDo6Zmlyc3RMaW5lU3R5bGUoKSBj
b25zdAogewogICAgIHJldHVybiBwYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKIH0KIAotaW5s
aW5lIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9J
ZCBwc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAoraW5saW5lIGNvbnN0
IFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBw
c2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAgIHJl
dHVybiBwYXJlbnQoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvSWQsIHBhcmVudFN0eWxl
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsOCBAQCB2b2lk
IFJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZShTCiAgICAgaWYgKGlubmVyVGV4dFJl
bmRlcmVyKSB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHNldCB0aGUgd2lkdGggYW5kIHRoZSBo
ZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KICAgICAgICAgLy8gUmVzZXQgdGhl
bSBub3cgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBoaW50LgotICAgICAgICBp
bm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOwotICAgICAgICBp
bm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7CisgICAgICAgIGlu
bmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOworICAg
ICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkp
OwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0U3R5bGUodGV4dEZvcm1Db250cm9sRWxl
bWVudCgpLmNyZWF0ZUlubmVyVGV4dFN0eWxlKHN0eWxlKCkpKTsKICAgICB9CiAgICAgdGV4dEZv
cm1Db250cm9sRWxlbWVudCgpLnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3
ICs5Miw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUKICAgICBS
ZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyUmVuZGVyZXIgPSBSZW5kZXJUZXh0Q29udHJvbDo6bGF5
b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7CiAgICAgaWYgKGlzPFJl
bmRlckJveD4ocGxhY2Vob2xkZXJSZW5kZXJlcikpIHsKICAgICAgICAgYXV0byYgcGxhY2Vob2xk
ZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpwbGFjZWhvbGRlclJlbmRlcmVyKTsKLSAgICAg
ICAgcGxhY2Vob2xkZXJCb3guc3R5bGUoKS5zZXRMb2dpY2FsV2lkdGgoTGVuZ3RoKGNvbnRlbnRM
b2dpY2FsV2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lk
dGgoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gubXV0YWJsZVN0eWxlKCkuc2V0
TG9naWNhbFdpZHRoKExlbmd0aChjb250ZW50TG9naWNhbFdpZHRoKCkgLSBwbGFjZWhvbGRlckJv
eC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCksIEZpeGVkKSk7CiAgICAgICAgIHBsYWNl
aG9sZGVyQm94LmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIHBsYWNlaG9sZGVyQm94LnNldFgo
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSk7CiAgICAgICAgIHBsYWNlaG9sZGVyQm94LnNl
dFkoYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTEgKzEwOCwxMSBAQCB2
b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAKICAgICAvLyBUbyBlbnN1
cmUgY29uc2lzdGVuY3kgYmV0d2VlbiBsYXlvdXRzLCB3ZSBuZWVkIHRvIHJlc2V0IGFueSBjb25k
aXRpb25hbGx5IG92ZXJyaWRlbiBoZWlnaHQuCiAgICAgaWYgKGlubmVyVGV4dFJlbmRlcmVyICYm
ICFpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkpIHsK
LSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5n
dGgoQXV0bykpOworICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0
TG9naWNhbEhlaWdodChMZW5ndGgoQXV0bykpOwogICAgICAgICBzZXROZWVkc0xheW91dE9uQW5j
ZXN0b3JzKGlubmVyVGV4dFJlbmRlcmVyLCB0aGlzKTsKICAgICB9CiAgICAgaWYgKGlubmVyQmxv
Y2tSZW5kZXJlciAmJiAhaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQo
KS5pc0F1dG8oKSkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9n
aWNhbEhlaWdodChMZW5ndGgoQXV0bykpOworICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPm11
dGFibGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKICAgICAgICAgc2V0
TmVlZHNMYXlvdXRPbkFuY2VzdG9ycyhpbm5lckJsb2NrUmVuZGVyZXIsIHRoaXMpOwogICAgIH0K
IApAQCAtMTI4LDEwICsxMjgsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmxheW91dAogICAgICAgICBpZiAoZGVzaXJlZExvZ2ljYWxIZWlnaHQgIT0gaW5uZXJUZXh0UmVu
ZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KE1hcmtP
bmx5VGhpcyk7CiAKLSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNh
bEhlaWdodChMZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIGlu
bmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChk
ZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXIt
PnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIGlmIChpbm5lckJsb2NrUmVu
ZGVyZXIpIHsKLSAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dp
Y2FsSGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAg
ICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChM
ZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CiAgICAgICAgICAgICBpbm5lckJs
b2NrUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xNDAsMTMgKzE0MCwxMyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6bGF5b3V0CiAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5sYXlvdXRJZk5lZWRlZCgpOwog
ICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJSZW5k
ZXJlci0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICBpZiAoY29udGFpbmVyTG9naWNhbEhlaWdo
dCA+IGxvZ2ljYWxIZWlnaHRMaW1pdCkgewotICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXIt
PnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgobG9naWNhbEhlaWdodExpbWl0LCBGaXhl
ZCkpOworICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldExv
Z2ljYWxIZWlnaHQoTGVuZ3RoKGxvZ2ljYWxIZWlnaHRMaW1pdCwgRml4ZWQpKTsKICAgICAgICAg
ICAgIHNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29u
dGFpbmVyUmVuZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSA8IGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkp
IHsKLSAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLnNldExvZ2ljYWxIZWln
aHQoTGVuZ3RoKGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCksIEZpeGVkKSk7CisgICAgICAgICAgICBj
b250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgo
Y29udGVudExvZ2ljYWxIZWlnaHQoKSwgRml4ZWQpKTsKICAgICAgICAgICAgIHNldE5lZWRzTGF5
b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29udGFpbmVy
UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoY29udGFpbmVyTG9naWNh
bEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxl
U3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBG
aXhlZCkpOwogICAgIH0KIAogICAgIC8vIElmIHdlIG5lZWQgYW5vdGhlciBsYXlvdXQgcGFzcywg
d2UgaGF2ZSBjaGFuZ2VkIG9uZSBvZiBjaGlsZHJlbidzIGhlaWdodCBzbyB3ZSBuZWVkIHRvIHJl
bGF5b3V0IHRoZW0uCkBAIC0xNzQsOCArMTc0LDggQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmxheW91dAogICAgICAgICBMYXlvdXRTaXplIGlubmVyVGV4dFNpemU7CiAgICAg
ICAgIGlmIChpbm5lclRleHRSZW5kZXJlcikKICAgICAgICAgICAgIGlubmVyVGV4dFNpemUgPSBp
bm5lclRleHRSZW5kZXJlci0+c2l6ZSgpOwotICAgICAgICBwbGFjZWhvbGRlckJveC0+c3R5bGUo
KS5zZXRXaWR0aChMZW5ndGgoaW5uZXJUZXh0U2l6ZS53aWR0aCgpIC0gcGxhY2Vob2xkZXJCb3gt
Pmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCksIEZpeGVkKSk7Ci0gICAgICAgIHBs
YWNlaG9sZGVyQm94LT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5uZXJUZXh0U2l6ZS5oZWln
aHQoKSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwg
Rml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gtPm11dGFibGVTdHlsZSgpLnNldFdpZHRo
KExlbmd0aChpbm5lclRleHRTaXplLndpZHRoKCkgLSBwbGFjZWhvbGRlckJveC0+aG9yaXpvbnRh
bEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJC
b3gtPm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5uZXJUZXh0U2l6ZS5oZWlnaHQo
KSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgRml4
ZWQpKTsKICAgICAgICAgYm9vbCBuZWVkZWRMYXlvdXQgPSBwbGFjZWhvbGRlckJveC0+bmVlZHNM
YXlvdXQoKTsKICAgICAgICAgYm9vbCBwbGFjZWhvbGRlckJveEhhZExheW91dCA9IHBsYWNlaG9s
ZGVyQm94LT5ldmVySGFkTGF5b3V0KCk7CiAgICAgICAgIHBsYWNlaG9sZGVyQm94LT5sYXlvdXRJ
Zk5lZWRlZCgpOwpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpsYXlvdXQKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBub3QgYmUgYWRqdXN0aW5nIHN0eWxlcyBkdXJpbmcgbGF5b3V0LiA8cmRhcjovL3Byb2JsZW0v
NzY3NTQ5Mz4KICAgICBpZiAoaW5wdXRFbGVtZW50KCkuaXNTZWFyY2hGaWVsZCgpKQotICAgICAg
ICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoc3R5bGUoKSwgKnRoaXMp
OworICAgICAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3JkZXJSYWRpdXMobXV0YWJs
ZVN0eWxlKCksICp0aGlzKTsKICNlbmRpZgogfQogCkBAIC0yMzYsMTQgKzIzNiwxNCBAQCB2b2lk
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5bGVECiAgICAgLy8gV2UgbWF5IGhhdmUg
c2V0IHRoZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0eWxlIGluIGxheW91dCgp
LgogICAgIC8vIFJlc2V0IHRoZW0gbm93IHRvIGF2b2lkIGdldHRpbmcgYSBzcHVyaW91cyBsYXlv
dXQgaGludC4KICAgICBIVE1MRWxlbWVudCogaW5uZXJCbG9jayA9IGlubmVyQmxvY2tFbGVtZW50
KCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogaW5uZXJCbG9ja1JlbmRlcmVyID0gaW5uZXJCbG9j
ayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCkgOiAwKSB7Ci0gICAgICAgIGlubmVyQmxvY2tSZW5k
ZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOwotICAgICAgICBpbm5lckJsb2NrUmVu
ZGVyZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkpOworICAgIGlmIChhdXRvKiBpbm5lckJs
b2NrUmVuZGVyZXIgPSBpbm5lckJsb2NrID8gaW5uZXJCbG9jay0+cmVuZGVyZXIoKSA6IG51bGxw
dHIpIHsKKyAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWln
aHQoTGVuZ3RoKCkpOworICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPm11dGFibGVTdHlsZSgp
LnNldFdpZHRoKExlbmd0aCgpKTsKICAgICB9CiAgICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9
IGNvbnRhaW5lckVsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBjb250YWluZXJSZW5k
ZXJlciA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVyZXIoKSA6IDApIHsKLSAgICAgICAg
Y29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aCgpKTsKLSAgICAgICAg
Y29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkpOworICAgIGlmIChh
dXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVyZXIo
KSA6IG51bGxwdHIpIHsKKyAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFibGVTdHlsZSgp
LnNldEhlaWdodChMZW5ndGgoKSk7CisgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxl
U3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7CiAgICAgfQogICAgIGlmIChkaWZmID09IFN0eWxl
RGlmZmVyZW5jZUxheW91dCkgewogICAgICAgICBpZiAoYXV0byogaW5uZXJUZXh0UmVuZGVyZXIg
PSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBSZW5kZXJUZXh0RnJhZ21lbnQ6OnN0eWxl
RGlkQ2hhbmdlKAogICAgIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxl
KTsKIAogICAgIGlmIChSZW5kZXJCbG9jayogYmxvY2sgPSBibG9ja0ZvckFjY29tcGFueWluZ0Zp
cnN0TGV0dGVyKCkpIHsKLSAgICAgICAgYmxvY2stPnN0eWxlKCkucmVtb3ZlQ2FjaGVkUHNldWRv
U3R5bGUoRklSU1RfTEVUVEVSKTsKKyAgICAgICAgYmxvY2stPm11dGFibGVTdHlsZSgpLnJlbW92
ZUNhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUik7CiAgICAgICAgIGJsb2NrLT51cGRhdGVG
aXJzdExldHRlcigpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lR3RrLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxNSw3ICsy
MDE1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVRvZ2dsZUNsbwogfQogI2Vu
ZGlmCiAKLXN0YXRpYyBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHls
ZShSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkgYm9y
ZGVyUmFkaWlGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIHJldHVy
biBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSgKICAgICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJU
b3BMZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJUb3BMZWZ0UmFk
aXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCkBAIC0yMDM2LDcgKzIwMzYsNyBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhCiAKICAgICBmbG9hdCBtZWRpYUR1cmF0
aW9uID0gbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwogICAgIGZsb2F0IHRvdGFsVHJhY2tXaWR0
aCA9IHIud2lkdGgoKTsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBvLnN0eWxlKCk7CisgICAg
YXV0byYgc3R5bGUgPSBvLnN0eWxlKCk7CiAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5n
ZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAgICAgICAgZmxv
YXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JFX0VYQ0VQVElPTik7CkBA
IC0yMDU5LDcgKzIwNTksNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVy
VHJhCiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG8uc3R5bGUoKTsKKyAgICBhdXRvJiBz
dHlsZSA9IG8uc3R5bGUoKTsKICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVj
dChGbG9hdFJvdW5kZWRSZWN0KHIsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxl
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZWRpYVZvbHVtZVNsaQogCiAgICAgaW50IHJlY3RIZWlnaHQgPSByZWN0LmhlaWdodCgpOwogICAg
IGZsb2F0IHRyYWNrSGVpZ2h0ID0gcmVjdEhlaWdodCAqIHZvbHVtZTsKLSAgICBSZW5kZXJTdHls
ZSYgc3R5bGUgPSByZW5kZXJPYmplY3Quc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRl
ck9iamVjdC5zdHlsZSgpOwogICAgIEludFJlY3Qgdm9sdW1lUmVjdChyZWN0KTsKICAgICB2b2x1
bWVSZWN0Lm1vdmUoMCwgcmVjdEhlaWdodCAtIHRyYWNrSGVpZ2h0KTsKICAgICB2b2x1bWVSZWN0
LnNldEhlaWdodChjZWlsKHRyYWNrSGVpZ2h0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1
bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBwYWludEZs
b3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbAogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxl
JiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsK
ICAgICBpZiAoc3R5bGUudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTQwLDcgKzE0MCw3IEBAIGJvb2wgaGl0VGVzdEZsb3coY29uc3QgUmVuZGVyQmxvY2tG
bG93JiAKICAgICBpZiAoIWxheW91dC5ydW5Db3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBmbG93LnN0eWxlKCk7CisgICAgYXV0byYgc3R5
bGUgPSBmbG93LnN0eWxlKCk7CiAgICAgaWYgKHN0eWxlLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
IHx8IHN0eWxlLnBvaW50ZXJFdmVudHMoKSA9PSBQRV9OT05FKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNw
cAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRv
U2l6aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBUZXh0QXV0b1Npemlu
Z0tleTo6VGV4dEF1dG9TaXppbmdLZXkoRGVsCiB7CiB9CiAKLVRleHRBdXRvU2l6aW5nS2V5OjpU
ZXh0QXV0b1NpemluZ0tleShSZW5kZXJTdHlsZSogc3R5bGUpCitUZXh0QXV0b1NpemluZ0tleTo6
VGV4dEF1dG9TaXppbmdLZXkoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogICAgIDogbV9zdHls
ZShzdHlsZSA/IFJlbmRlclN0eWxlOjpjbG9uZVB0cigqc3R5bGUpIDogbnVsbHB0cikKIHsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1NpemluZy5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDEyIEBAIHB1YmxpYzoKICAgICBUZXh0QXV0b1Np
emluZ0tleSgpID0gZGVmYXVsdDsKICAgICBlbnVtIERlbGV0ZWRUYWcgeyBEZWxldGVkIH07CiAg
ICAgZXhwbGljaXQgVGV4dEF1dG9TaXppbmdLZXkoRGVsZXRlZFRhZyk7Ci0gICAgZXhwbGljaXQg
VGV4dEF1dG9TaXppbmdLZXkoUmVuZGVyU3R5bGUqKTsKKyAgICBleHBsaWNpdCBUZXh0QXV0b1Np
emluZ0tleShjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIFRleHRBdXRvU2l6aW5nS2V5KFRleHRB
dXRvU2l6aW5nS2V5JiYpID0gZGVmYXVsdDsKIAogICAgIFRleHRBdXRvU2l6aW5nS2V5JiBvcGVy
YXRvcj0oVGV4dEF1dG9TaXppbmdLZXkmJikgPSBkZWZhdWx0OwogCi0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAgICBpbmxp
bmUgYm9vbCBpc0RlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRGVsZXRlZDsgfQogCiBwcml2
YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3Bw
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50
U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgVGV4dFBhaW50U3R5
bGUgY29tcHV0ZVRleHRTZWxlY3Rpb25QYWludAogICAgICAgICBzZWxlY3Rpb25QYWludFN0eWxl
LmVtcGhhc2lzTWFya0NvbG9yID0gZW1waGFzaXNNYXJrRm9yZWdyb3VuZDsKICAgICB9CiAKLSAg
ICBpZiAoUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gcmVuZGVyZXIuZ2V0Q2FjaGVkUHNldWRv
U3R5bGUoU0VMRUNUSU9OKSkgeworICAgIGlmIChhdXRvKiBwc2V1ZG9TdHlsZSA9IHJlbmRlcmVy
LmdldENhY2hlZFBzZXVkb1N0eWxlKFNFTEVDVElPTikpIHsKICAgICAgICAgY29uc3QgU2hhZG93
RGF0YSogc2hhZG93ID0gcGFpbnRJbmZvLmZvcmNlVGV4dENvbG9yKCkgPyBudWxscHRyIDogcHNl
dWRvU3R5bGUtPnRleHRTaGFkb3coKTsKICAgICAgICAgaWYgKHNoYWRvdyAhPSBzZWxlY3Rpb25T
aGFkb3cpIHsKICAgICAgICAgICAgIGlmICghcGFpbnRTZWxlY3RlZFRleHRPbmx5KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5n
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDcgQEAgcHJpdmF0ZToKICAg
ICAvLyBGaXJlZm94IGFuZCBPcGVyYSB3aWxsIGFsbG93IGEgdGFibGUgY2VsbCB0byBncm93IHRv
IGZpdCBhbiBpbWFnZSBpbnNpZGUgaXQgdW5kZXIKICAgICAvLyB2ZXJ5IHNwZWNpZmljIGNpcmN1
bXN0YW5jZXMgKGluIG9yZGVyIHRvIG1hdGNoIGNvbW1vbiBXaW5JRSByZW5kZXJpbmdzKS4KICAg
ICAvLyBOb3Qgc3VwcG9ydGluZyB0aGUgcXVpcmsgaGFzIGNhdXNlZCB1cyB0byBtaXMtcmVuZGVy
IHNvbWUgcmVhbCBzaXRlcy4gKFNlZSBCdWd6aWxsYSAxMDUxNy4pCi0gICAgUmVuZGVyU3R5bGUm
IG1fYmxvY2tTdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbV9ibG9ja1N0eWxlOwogCiAg
ICAgTGluZUluZm8mIG1fbGluZUluZm87CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDEwICszMDEsMTAgQEAgdm9pZCBSZW5kZXJNYXRoTUxS
b290OjpsYXlvdXQoKQogICAgICAgICAgICAgICAgIGJhc2VUb3BNYXJnaW4gLT0gaW5kZXhUb3BN
YXJnaW47CiAgICAgICAgICAgICAgICAgaW5kZXhUb3BNYXJnaW4gPSAwOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaW5kZXgtPnN0eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChpbmRleFRv
cE1hcmdpbiwgRml4ZWQpKTsKKyAgICAgICAgICAgIGluZGV4LT5tdXRhYmxlU3R5bGUoKS5zZXRN
YXJnaW5Ub3AoTGVuZ3RoKGluZGV4VG9wTWFyZ2luLCBGaXhlZCkpOwogICAgICAgICB9Ci0gICAg
ICAgIHJhZGljYWwtPnN0eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChyYWRpY2FsVG9wTWFyZ2lu
LCBGaXhlZCkpOwotICAgICAgICBiYXNlLT5zdHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgoYmFz
ZVRvcE1hcmdpbiwgRml4ZWQpKTsKKyAgICAgICAgcmFkaWNhbC0+bXV0YWJsZVN0eWxlKCkuc2V0
TWFyZ2luVG9wKExlbmd0aChyYWRpY2FsVG9wTWFyZ2luLCBGaXhlZCkpOworICAgICAgICBiYXNl
LT5tdXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGJhc2VUb3BNYXJnaW4sIEZpeGVk
KSk7CiAgICAgfQogCiAgICAgUmVuZGVyTWF0aE1MQmxvY2s6OmxheW91dCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjA2LDcgKzE2MDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRD
b2x1bW5SdWxlV2lkdGgodW5zaWduZWQgc2hvcnQgdykgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9u
SW5oZXJpdGVkRGF0YSwgbV9tdWx0aUNvbCwgbV9ydWxlLm1fd2lkdGgsIHcpOyB9CiAgICAgdm9p
ZCByZXNldENvbHVtblJ1bGUoKSB7IFNFVF9ORVNURURfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRh
LCBtX211bHRpQ29sLCBtX3J1bGUsIEJvcmRlclZhbHVlKCkpOyB9CiAgICAgdm9pZCBzZXRDb2x1
bW5TcGFuKENvbHVtblNwYW4gY29sdW1uU3BhbikgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5o
ZXJpdGVkRGF0YSwgbV9tdWx0aUNvbCwgbV9jb2x1bW5TcGFuLCBjb2x1bW5TcGFuKTsgfQotICAg
IHZvaWQgaW5oZXJpdENvbHVtblByb3BlcnRpZXNGcm9tKFJlbmRlclN0eWxlKiBwYXJlbnQpIHsg
cmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fbXVsdGlDb2wgPSBwYXJlbnQtPnJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX211bHRpQ29sOyB9CisgICAgdm9pZCBpbmhlcml0Q29sdW1uUHJv
cGVydGllc0Zyb20oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudCkgeyByYXJlTm9uSW5oZXJpdGVk
RGF0YS5hY2Nlc3MoKS0+bV9tdWx0aUNvbCA9IHBhcmVudC0+cmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fbXVsdGlDb2w7IH0KICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb25zJiBvcHMpIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIG1fdHJh
bnNmb3JtLCBtX29wZXJhdGlvbnMsIG9wcyk7IH0KICAgICB2b2lkIHNldFRyYW5zZm9ybU9yaWdp
blgoTGVuZ3RoIGxlbmd0aCkgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwg
bV90cmFuc2Zvcm0sIG1feCwgV1RGTW92ZShsZW5ndGgpKTsgfQogICAgIHZvaWQgc2V0VHJhbnNm
b3JtT3JpZ2luWShMZW5ndGggbGVuZ3RoKSB7IFNFVF9ORVNURURfVkFSKHJhcmVOb25Jbmhlcml0
ZWREYXRhLCBtX3RyYW5zZm9ybSwgbV95LCBXVEZNb3ZlKGxlbmd0aCkpOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBmbG9hdCBTVkdJ
bmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNlCiAgICAgcmV0dXJuIDA7CiB9CiAKLUZsb2F0
UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0
IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9z
aXRpb24sIFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK0Zsb2F0UmVjdCBTVkdJbmxpbmVUZXh0
Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYg
ZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pOwogICAgIEFTU0VSVChzdHlsZSk7CkBA
IC0xNDIsNyArMTQyLDcgQEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVj
dAogICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4g
TGF5b3V0UmVjdCgpOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXIoKS5zdHls
ZSgpOworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXIoKS5zdHlsZSgpOwogCiAgICAgQWZmaW5l
VHJhbnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0
OwpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rp
b25CYWMKICAgICBpZiAoIXRleHRTaG91bGRCZVBhaW50ZWQocmVuZGVyZXIoKSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxl
KCk7CisgICAgYXV0byYgc3R5bGUgPSBwYXJlbnRSZW5kZXJlci5zdHlsZSgpOwogCiAgICAgaW50
IHN0YXJ0UG9zaXRpb247CiAgICAgaW50IGVuZFBvc2l0aW9uOwpAQCAtMjU2LDE0ICsyNTYsMTQg
QEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIAogICAgIGlmICghdGV4
dFNob3VsZEJlUGFpbnRlZChyZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVu
ZGVyU3R5bGUmIHN0eWxlID0gcGFyZW50UmVuZGVyZXIuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHls
ZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYg
c3ZnU3R5bGUgPSBzdHlsZS5zdmdTdHlsZSgpOwogCiAgICAgYm9vbCBoYXNGaWxsID0gc3ZnU3R5
bGUuaGFzRmlsbCgpOwogICAgIGJvb2wgaGFzVmlzaWJsZVN0cm9rZSA9IHN2Z1N0eWxlLmhhc1Zp
c2libGVTdHJva2UoKTsKIAotICAgIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSA9ICZzdHls
ZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUgPSAmc3R5bGU7CiAgICAg
aWYgKGhhc1NlbGVjdGlvbikgewogICAgICAgICBzZWxlY3Rpb25TdHlsZSA9IHBhcmVudFJlbmRl
cmVyLmdldENhY2hlZFBzZXVkb1N0eWxlKFNFTEVDVElPTik7CiAgICAgICAgIGlmIChzZWxlY3Rp
b25TdHlsZSkgewpAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFp
bnQoUGFpbnRJbmZvJiAKICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJjZSk7CiB9CiAKLWJv
b2wgU1ZHSW5saW5lVGV4dEJveDo6YWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250
ZXh0KiYgY29udGV4dCwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyQm94TW9kZWxPYmplY3Qm
IHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogc3R5bGUpCitib29sIFNWR0lubGluZVRleHRCb3g6OmFj
cXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGZsb2F0IHNj
YWxpbmdGYWN0b3IsIFJlbmRlckJveE1vZGVsT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlKQogewogICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKICAgICBBU1NFUlQo
c3R5bGUpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVsZWFz
ZVBhaW50aW5nUmUKICAgICBtX3BhaW50aW5nUmVzb3VyY2UgPSBudWxscHRyOwogfQogCi1ib29s
IFNWR0lubGluZVRleHRCb3g6OnByZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmco
R3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlKQorYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjpwcmVwYXJlR3JhcGhpY3NDb250ZXh0
Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGZsb2F0IHNjYWxpbmdG
YWN0b3IsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICByZXR1cm4gYWNxdWlyZVBh
aW50aW5nUmVzb3VyY2UoY29udGV4dCwgc2NhbGluZ0ZhY3RvciwgcGFyZW50KCktPnJlbmRlcmVy
KCksIHN0eWxlKTsKIH0KQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6
OnJlc3RvcmVHcmFwaGljc0NvCiAgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwg
LyogcGF0aCAqL251bGxwdHIpOwogfQogCi1UZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZy
YWdtZW50KSBjb25zdAorVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVu
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVu
dCkgY29uc3QKIHsKICAgICBBU1NFUlQoc3R5bGUpOwogCkBAIC01MDYsNyArNTA2LDcgQEAgdm9p
ZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaQogICAgIEFTU0VSVCghbV9wYWlu
dGluZ1Jlc291cmNlKTsKICAgICBBU1NFUlQobV9wYWludGluZ1Jlc291cmNlTW9kZSAhPSBBcHBs
eVRvRGVmYXVsdE1vZGUpOwogCi0gICAgUmVuZGVyU3R5bGUmIGRlY29yYXRpb25TdHlsZSA9IGRl
Y29yYXRpb25SZW5kZXJlci5zdHlsZSgpOworICAgIGF1dG8mIGRlY29yYXRpb25TdHlsZSA9IGRl
Y29yYXRpb25SZW5kZXJlci5zdHlsZSgpOwogCiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IDE7
CiAgICAgRm9udENhc2NhZGUgc2NhbGVkRm9udDsKQEAgLTU0MCw3ICs1NDAsNyBAQCB2b2lkIFNW
R0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAgICAgICAgIHJlbGVhc2VQYWludGlu
Z1Jlc291cmNlKGNvbnRleHRQdHIsICZwYXRoKTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94
OjpwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFJlbmRlclN0
eWxlKiBzdHlsZSwgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFn
bWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbikKK3ZvaWQgU1ZHSW5saW5l
VGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IFNWR1RleHRG
cmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pCiB7
CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHJlbmRlcmVyKCkuc2NhbGluZ0ZhY3RvcigpOwog
ICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKQEAgLTU4NSw3ICs1ODUsNyBAQCB2b2lkIFNWR0lu
bGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFkCiAgICAgfSB3aGlsZSAoc2hhZG93KTsKIH0K
IAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29u
c3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFp
bnRTZWxlY3RlZFRleHRPbmx5KQordm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVu
dCwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQogewogICAg
IEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKHNlbGVjdGlvblN0eWxlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtNjQsMjMgKzY0LDIzIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFN0YXJ0c05ld1RleHRDaHVuayhib29sIG5ld1RleHRDaHVuaykgeyBtX3N0YXJ0c05ld1Rl
eHRDaHVuayA9IG5ld1RleHRDaHVuazsgfQogCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uSW5G
cmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNs
dWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JU
ZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IGZyYWdtZW50U3RhcnRQb3Np
dGlvbiwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24sIFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAg
RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiwgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24s
IGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc1NWR0lu
bGluZVRleHRCb3goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBUZXh0
UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
KSBjb25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKIAotICAgIGJvb2wgYWNxdWlyZVBhaW50
aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRl
ckJveE1vZGVsT2JqZWN0JiwgUmVuZGVyU3R5bGUqKTsKKyAgICBib29sIGFjcXVpcmVQYWludGlu
Z1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComLCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJC
b3hNb2RlbE9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCByZWxlYXNlUGFp
bnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUGF0aCopOwogCi0gICAgYm9v
bCBwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCom
LCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJTdHlsZSopOworICAgIGJvb2wgcHJlcGFyZUdy
YXBoaWNzQ29udGV4dEZvclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiwgZmxvYXQgc2Nh
bGluZ0ZhY3RvciwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHJlc3RvcmVHcmFwaGlj
c0NvbnRleHRBZnRlclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJik7CiAKICAgICB2b2lk
IHBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmLCBUZXh0RGVjb3JhdGlvbiwgY29uc3Qg
U1ZHVGV4dEZyYWdtZW50Jik7CiAgICAgdm9pZCBwYWludERlY29yYXRpb25XaXRoU3R5bGUoR3Jh
cGhpY3NDb250ZXh0JiwgVGV4dERlY29yYXRpb24sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIFJl
bmRlckJveE1vZGVsT2JqZWN0JiBkZWNvcmF0aW9uUmVuZGVyZXIpOwotICAgIHZvaWQgcGFpbnRU
ZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiwgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwg
Y29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlv
bik7Ci0gICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiwgUmVuZGVyU3R5bGUqLCBS
ZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGJvb2wg
aGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CisgICAgdm9pZCBwYWlu
dFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSosIFRl
eHRSdW4mLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVu
ZFBvc2l0aW9uKTsKKyAgICB2b2lkIHBhaW50VGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBS
ZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRP
bmx5KTsKIAogICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwg
TGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUGF0aERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVBhdGhG
cm9tQ2lyY2xlRWxlbWVudCgKICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGVsZW1lbnQt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwotICAgIFJl
bmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0g
cmVuZGVyZXItPnN0eWxlKCk7CiAgICAgZmxvYXQgciA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JM
ZW5ndGgoc3R5bGUuc3ZnU3R5bGUoKS5yKCkpOwogICAgIGlmIChyID4gMCkgewogICAgICAgICBm
bG9hdCBjeCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUuc3ZnU3R5bGUoKS5j
eCgpLCBMZW5ndGhNb2RlV2lkdGgpOwpAQCAtNTksNyArNTksNyBAQCBzdGF0aWMgdm9pZCB1cGRh
dGVQYXRoRnJvbUVsbGlwc2VFbGVtZW50CiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBl
bGVtZW50LT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsK
LSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBz
dHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29u
dGV4dChlbGVtZW50KTsKICAgICBmbG9hdCByeCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5n
dGgoc3R5bGUuc3ZnU3R5bGUoKS5yeCgpLCBMZW5ndGhNb2RlV2lkdGgpOwogICAgIGlmIChyeCA8
PSAwKQpAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVBhdGhGcm9tUmVjdEVs
ZW1lbnQoU1YKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChlbGVt
ZW50KTsKICAgICBmbG9hdCB3aWR0aCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5
bGUud2lkdGgoKSwgTGVuZ3RoTW9kZVdpZHRoKTsKICAgICBpZiAod2lkdGggPD0gMCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBA
QCB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnByZXBhcmVUb1JlbmRlCiAgICAgICAgIG1fcmVu
ZGVyaW5nRmxhZ3MgfD0gUmVzdG9yZUdyYXBoaWNzQ29udGV4dDsKICAgICB9CiAKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0g
bV9yZW5kZXJlci0+c3R5bGUoKTsKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHls
ZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
VHJlZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVRyZWVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBA
QCBUcmVlUmVzb2x2ZXI6OlBhcmVudDo6UGFyZW50KERvY3VtZW50JiBkCiB7CiB9CiAKLVRyZWVS
ZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBDaGFuZ2UgY2hhbmdlKQorVHJlZVJlc29sdmVyOjpQYXJlbnQ6OlBhcmVudChFbGVtZW50
JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2UpCiAgICAg
OiBlbGVtZW50KCZlbGVtZW50KQogICAgICwgc3R5bGUoc3R5bGUpCiAgICAgLCBjaGFuZ2UoY2hh
bmdlKQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgVHJlZVJlc29sdmVyOjpwb3BTY29wZSgpCiAg
ICAgcmV0dXJuIG1fc2NvcGVTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gVHJlZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxl
bWVudCwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKQorc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBUcmVlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBj
b25zdCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50
LmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpICYmICFlbGVtZW50LnJlbmRlcmVyKCkpIHsKICAgICAg
ICAgbV9kb2N1bWVudC5zZXRIYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCk7CkBAIC0yODIs
NyArMjgyLDcgQEAgcHJpdmF0ZToKIH07CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCi12b2lk
IFRyZWVSZXNvbHZlcjo6cHVzaFBhcmVudChFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYg
c3R5bGUsIENoYW5nZSBjaGFuZ2UpCit2b2lkIFRyZWVSZXNvbHZlcjo6cHVzaFBhcmVudChFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2UpCiB7
CiAgICAgc2NvcGUoKS5zZWxlY3RvckZpbHRlci5wdXNoUGFyZW50KCZlbGVtZW50KTsKIApAQCAt
Mzc1LDcgKzM3NSw3IEBAIHZvaWQgVHJlZVJlc29sdmVyOjpyZXNvbHZlQ29tcG9zZWRUcmVlKCkK
IAogICAgICAgICBib29sIHNob3VsZFJlc29sdmVGb3JQc2V1ZG9FbGVtZW50ID0gc2hvdWxkUmVz
b2x2ZVBzZXVkb0VsZW1lbnQoZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCkpIHx8IHNob3Vs
ZFJlc29sdmVQc2V1ZG9FbGVtZW50KGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCkpOwogCi0g
ICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZTsKKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlOwogICAgICAgICBDaGFuZ2UgY2hhbmdlOwogCiAgICAgICAgIGJvb2wgc2hvdWxkUmVzb2x2
ZSA9IHBhcmVudC5jaGFuZ2UgPj0gSW5oZXJpdCB8fCBlbGVtZW50Lm5lZWRzU3R5bGVSZWNhbGMo
KSB8fCBzaG91bGRSZXNvbHZlRm9yUHNldWRvRWxlbWVudCB8fCBhZmZlY3RlZEJ5UHJldmlvdXNT
aWJsaW5nIHx8IGVsZW1lbnQuaGFzRGlzcGxheUNvbnRlbnRzKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDcgKzYxLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxVcGRhdGU+IHJlc29sdmUo
Q2hhbmdlKTsKIAogcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0
eWxlRm9yRWxlbWVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50Jiwg
Y29uc3QgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0eWxlKTsKIAogICAgIHZvaWQgcmVzb2x2ZUNv
bXBvc2VkVHJlZSgpOwogICAgIEVsZW1lbnRVcGRhdGUgcmVzb2x2ZUVsZW1lbnQoRWxlbWVudCYp
OwpAQCAtNzksMTMgKzc5LDEzIEBAIHByaXZhdGU6CiAKICAgICBzdHJ1Y3QgUGFyZW50IHsKICAg
ICAgICAgRWxlbWVudCogZWxlbWVudDsKLSAgICAgICAgUmVuZGVyU3R5bGUmIHN0eWxlOworICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGU7CiAgICAgICAgIENoYW5nZSBjaGFuZ2U7CiAg
ICAgICAgIGJvb2wgZGlkUHVzaFNjb3BlIHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBlbGVtZW50
TmVlZGluZ1N0eWxlUmVjYWxjQWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlIHsgZmFsc2Ug
fTsKIAogICAgICAgICBQYXJlbnQoRG9jdW1lbnQmLCBDaGFuZ2UpOwotICAgICAgICBQYXJlbnQo
RWxlbWVudCYsIFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKKyAgICAgICAgUGFyZW50KEVsZW1lbnQm
LCBjb25zdCBSZW5kZXJTdHlsZSYsIENoYW5nZSk7CiAgICAgfTsKIAogICAgIFNjb3BlJiBzY29w
ZSgpIHsgcmV0dXJuIG1fc2NvcGVTdGFjay5sYXN0KCk7IH0KQEAgLTk1LDcgKzk1LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHB1c2hFbmNsb3NpbmdTY29wZSgpOwogICAgIHZvaWQgcG9wU2NvcGUo
KTsKIAotICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUmLCBDaGFuZ2Up
OworICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBDaGFu
Z2UpOwogICAgIHZvaWQgcG9wUGFyZW50KCk7CiAgICAgdm9pZCBwb3BQYXJlbnRzVG9EZXB0aCh1
bnNpZ25lZCBkZXB0aCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTEgKzYxLDI0IEBAIGJvb2wgVXBkYXRlOjp0ZXh0VXBk
YXRlKGNvbnN0IFRleHQmIHRleHQKICAgICByZXR1cm4gbV90ZXh0cy5jb250YWlucygmdGV4dCk7
CiB9CiAKLVJlbmRlclN0eWxlKiBVcGRhdGU6OmVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JiBl
bGVtZW50KSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIFVwZGF0ZTo6ZWxlbWVudFN0eWxlKGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIHVwZGF0ZSA9IGVs
ZW1lbnRVcGRhdGUoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiB1cGRhdGUtPnN0eWxlLmdldCgp
OwotICAgIHJldHVybiBlbGVtZW50LnJlbmRlclN0eWxlKCk7CisgICAgYXV0byogcmVuZGVyZXIg
PSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuICZyZW5kZXJlci0+c3R5bGUoKTsKK30KKworUmVuZGVyU3R5
bGUqIFVwZGF0ZTo6ZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAg
aWYgKGF1dG8qIHVwZGF0ZSA9IGVsZW1lbnRVcGRhdGUoZWxlbWVudCkpCisgICAgICAgIHJldHVy
biB1cGRhdGUtPnN0eWxlLmdldCgpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5k
ZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiAmcmVuZGVyZXItPm11dGFibGVTdHlsZSgpOwogfQogCiB2b2lkIFVwZGF0ZTo6YWRk
RWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBFbGVtZW50KiBwYXJlbnQsIEVsZW1lbnRVcGRhdGUm
JiBlbGVtZW50VXBkYXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5oCShyZXZp
c2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdGV4dFVwZGF0
ZShjb25zdCBUZXh0JikgY29uc3Q7CiAKLSAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlKGNv
bnN0IEVsZW1lbnQmKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxl
KGNvbnN0IEVsZW1lbnQmKSBjb25zdDsKKyAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlKGNv
bnN0IEVsZW1lbnQmKTsKIAogICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZG9jdW1lbnQ7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NDYsNyArNzQ2LDcgQEAgdm9pZCBTVkdFbGVtZW50OjpzeW5jaHJv
bml6ZVN5c3RlbUxhbmd1YQogICAgIGNvbnRleHRFbGVtZW50LT5zeW5jaHJvbml6ZVN5c3RlbUxh
bmd1YWdlKCk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU1ZHRWxlbWVudDo6cmVzb2x2
ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqKQorT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiBTVkdFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSopCiB7CiAgICAgLy8g
SWYgdGhlIGVsZW1lbnQgaXMgaW4gYSA8dXNlPiB0cmVlIHdlIGdldCB0aGUgc3R5bGUgZnJvbSB0
aGUgZGVmaW5pdGlvbiB0cmVlLgogICAgIGlmIChhdXRvKiBzdHlsZUVsZW1lbnQgPSB0aGlzLT5j
b3JyZXNwb25kaW5nRWxlbWVudCgpKQpAQCAtNzczLDEyICs3NzMsMTIgQEAgdm9pZCBTVkdFbGVt
ZW50OjpzZXRVc2VPdmVycmlkZUNvbXB1dGVkUwogICAgICAgICBtX3N2Z1JhcmVEYXRhLT5zZXRV
c2VPdmVycmlkZUNvbXB1dGVkU3R5bGUodmFsdWUpOwogfQogCi1SZW5kZXJTdHlsZSogU1ZHRWxl
bWVudDo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQorY29u
c3QgUmVuZGVyU3R5bGUqIFNWR0VsZW1lbnQ6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRv
RWxlbWVudFNwZWNpZmllcikKIHsKICAgICBpZiAoIW1fc3ZnUmFyZURhdGEgfHwgIW1fc3ZnUmFy
ZURhdGEtPnVzZU92ZXJyaWRlQ29tcHV0ZWRTdHlsZSgpKQogICAgICAgICByZXR1cm4gRWxlbWVu
dDo6Y29tcHV0ZWRTdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKIAotICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHI7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gbnVsbHB0cjsKICAgICBpZiAoRWxlbWVudCogcGFyZW50ID0gcGFyZW50T3JTaGFk
b3dIb3N0RWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gcGFyZW50LT5y
ZW5kZXJlcigpKQogICAgICAgICAgICAgcGFyZW50U3R5bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZUFs
bEFuaW1hdGVkU1ZHQXR0cmlidXRlKFNWR0VsZW1lbnQqKTsKICAKLSAgICBPcHRpb25hbDxFbGVt
ZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJl
bmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHls
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CiAKICAgICBz
dGF0aWMgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRmVhdHVyZXMoU1ZHRWxlbWVudCogY29udGV4
dEVsZW1lbnQpOwogICAgIHN0YXRpYyB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25z
KFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKQEAgLTE4MSw3ICsxODEsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgY2xhc3MgSW5zdGFuY2VJbnZhbGlkYXRpb25HdWFyZDsKIAogcHJpdmF0ZToKLSAg
ICBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKSBmaW5hbDsK
KyAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURP
KSBmaW5hbDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1N1cHBvcnRlZChTdHJpbmdJbXBsKiBmZWF0
dXJlLCBTdHJpbmdJbXBsKiB2ZXJzaW9uKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTks
MTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0
aWVzOwogICAgIH0KIAotICAgIFJlbmRlclN0eWxlKiBvdmVycmlkZUNvbXB1dGVkU3R5bGUoRWxl
bWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBvdmVycmlkZUNvbXB1dGVkU3R5bGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogICAgIHsKICAgICAgICAgaWYgKCFtX3VzZU92ZXJyaWRl
Q29tcHV0ZWRTdHlsZSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIGlmICghbV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgfHwgbV9uZWVk
c092ZXJyaWRlQ29tcHV0ZWRTdHlsZVVwZGF0ZSkgewogICAgICAgICAgICAgLy8gVGhlIHN0eWxl
IGNvbXB1dGVkIGhlcmUgY29udGFpbnMgbm8gQ1NTIEFuaW1hdGlvbnMvVHJhbnNpdGlvbnMgb3Ig
U01JTCBpbmR1Y2VkIHJ1bGVzIC0gdGhpcyBpcyBuZWVkZWQgdG8gY29tcHV0ZSB0aGUgImJhc2Ug
dmFsdWUiIGZvciB0aGUgU01JTCBhbmltYXRpb24gc2FuZHdoaWNoIG1vZGVsLgogICAgICAgICAg
ICAgbV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgPSBlbGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5zdHls
ZUZvckVsZW1lbnQoZWxlbWVudCwgcGFyZW50U3R5bGUsIE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdT
TUlMKS5yZW5kZXJTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3Jh
cGhpY3NFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBBZmZpbmVU
cmFuc2Zvcm0gU1ZHR3JhcGhpY3NFbGVtZW50OjpnZXRTCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHR3Jh
cGhpY3NFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QKIHsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gbWF0cml4OwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCkg
PyAmcmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSByZW5k
ZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwogCiAgICAgLy8gSWYgQ1NT
IHByb3BlcnR5IHdhcyBzZXQsIHVzZSB0aGF0LCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gYXR0cmli
dXRlIChpZiBzZXQpLgogICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+aGFzVHJhbnNmb3JtKCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZl
cnRWYWx1ZUZyb20KICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBSZW5kZXJTdHls
ZSogcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcoY29uc3QgU1ZHRWxlbWVudCogY29udGV4
dCkKK3N0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlRm9yTGVuZ3Ro
UmVzb2x2aW5nKGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQpCiB7CiAgICAgaWYgKCFjb250ZXh0
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIzNiwxMiArMjM2LDEyIEBAIHN0YXRpYyBp
bmxpbmUgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlRm8KIAogICAgIC8vIFRoZXJlIG11c3QgYmUg
YXQgbGVhc3QgYSBSZW5kZXJTVkdSb290IHJlbmRlcmVyLCBjYXJyeWluZyBhIHN0eWxlLgogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRz
VG9FTVMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7
CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRl
eHQpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNTgsNyArMjU4LDcgQEAgZmxvYXQgU1ZHTGVuZ3RoQ29u
dGV4dDo6Y29udmVydFZhbHVlRnJvbQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0
VmFsdWVGcm9tRU1TVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBj
b25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVz
b2x2aW5nKG1fY29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0
aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBO
T1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNjksNyArMjY5LDcgQEAg
ZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbQogCiBmbG9hdCBTVkdMZW5n
dGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FWFMoZmxvYXQgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRl
clN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSBy
ZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUp
IHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0yODgsNyArMjg4LDcgQEAgZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJv
bQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tRVhTVG9Vc2VyVW5p
dHMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7Cisg
ICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQp
OwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBTVkdTdG9wRWxlbWVudDo6
cmVuZGVyZXJJc05lZWRlZChjbwogCiBDb2xvciBTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5j
bHVkaW5nT3BhY2l0eSgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVy
ZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBzdHlsZSA9
IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CiAgICAgLy8gRklY
TUU6IFRoaXMgY2hlY2sgZm9yIG51bGwgc3R5bGUgZXhpc3RzIHRvIGFkZHJlc3MgQnVnIFdLIDkw
ODE0LCBhIHJhcmUgY3Jhc2ggY29uZGl0aW9uIGluCiAgICAgLy8gd2hpY2ggdGhlIHJlbmRlcmVy
IG9yIHN0eWxlIGlzIG51bGwuIFRoaXMgZW50aXJlIGNsYXNzIGlzIHNjaGVkdWxlZCBmb3IgcmVt
b3ZhbCAoQnVnIFdLIDg2OTQxKQogICAgIC8vIGFuZCB3ZSB3aWxsIHRvbGVyYXRlIHRoaXMgbnVs
bCBjaGVjayB1bnRpbCB0aGVuLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFJlZjxTVkdUZXh0RWxlbWVu
dD4gU1ZHVGV4dEVsZW1lbnQ6OmNyZWEKIEFmZmluZVRyYW5zZm9ybSBTVkdUZXh0RWxlbWVudDo6
YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1h
dHJpeDsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRlcmVyKCkt
PnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5k
ZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKIAogICAgIC8vIGlmIENTUyBwcm9wZXJ0eSB3YXMg
c2V0LCB1c2UgdGhhdCwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGF0dHJpYnV0ZSAoaWYgc2V0KQog
ICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+aGFzVHJhbnNmb3JtKCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODIzLDcgKzgyMyw3IEBAIEVkaXRvclN0YXRlIFdlYlBhZ2U6OmVkaXRv
clN0YXRlKEluY2x1ZGUKICAgICAgICAgYXV0byYgcG9zdExheW91dERhdGEgPSByZXN1bHQucG9z
dExheW91dERhdGEoKTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkpIHsKICAgICAg
ICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSog
c3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJmZyYW1lLCBub2RlVG9SZW1v
dmUpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2Vs
ZWN0aW9uU3RhcnQoJmZyYW1lLCBub2RlVG9SZW1vdmUpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHN0eWxlLT5mb250Q2FzY2FkZSgpLndlaWdodCgpID49IEZvbnRXZWlnaHRCb2xkKQogICAgICAg
ICAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1dGVzIHw9IEF0dHJpYnV0
ZUJvbGQ7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLml0YWxpYygp
ID09IEZvbnRJdGFsaWNPbikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277389</attachid>
            <date>2016-04-26 09:41:30 -0700</date>
            <delta_ts>2016-04-26 10:31:20 -0700</delta_ts>
            <desc>patch</desc>
            <filename>const-renderstyle-9.patch</filename>
            <type>text/plain</type>
            <size>186834</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDA4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyOCBAQAorMjAxNi0wNC0yNiAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVyRWxlbWVudDo6c3R5
bGUoKSBzaG91bGQgcmV0dXJuIGNvbnN0IFJlbmRlclN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTcwMTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdHlsZSBzaG91bGQgYmUgY2hhbmdlZCB2aWEg
c2V0U3R5bGUsIG5vdCBieSBtdXRhdGluZyBpdCBkaXJlY3RseS4KKworICAgICAgICBQdWxsaW5n
IHRoaXMgc3RyaW5nIHR1cm5zIFJlbmRlclN0eWxlIGNvbnN0IGluIG1hbnkgcGxhY2VzLgorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnN0YXJ0T2ZTdHlsZVJhbmdlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1
dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RP
TS5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBpbm5lckZyYW1lUXVhZF0pOgorICAgICAgICAoLVtE
T01Ob2RlIGNvbXB1dGVkRm9udFNpemVdKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uTGlzdEZv
ckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uT2Zmc2V0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFRyYW5zaXRpb25Qcm9wZXJ0eVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbFNuYXBEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JvbGxTbmFwUG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbFNuYXBDb29yZGlu
YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpsb2dVbmltcGxlbWVudGVkUHJvcGVydHlJRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5RnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmxpbmVIZWlnaHRGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFNpemVGcm9tU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFN0eWxlRnJvbVN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvbnRWYXJpYW50RnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRXZWln
aHRGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFN5bnRoZXNpc0Zyb21TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjp6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhZGRpbmdPck1hcmdpbklzUmVuZGVyZXJEZXBlbmRlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUmVnaW9uQnJlYWspOgorICAgICAgICAoV2Vi
Q29yZTo6aXNMYXlvdXREZXBlbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU3R5bGVJ
Zk5lZWRlZEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVJlbmRlclN0eWxlRm9y
UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJv
cGVydHlNYXRjaGVzKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
Lmg6CisgICAgICAgICogY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRXaWR0aEZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2aWV3cG9y
dEhlaWdodEZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhOjp2aWV3cG9ydE1pbkZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhOjp2aWV3cG9ydE1heEZhY3Rvcik6CisgICAgICAgICogY3NzL0NTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGE6OkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6cm9vdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OmNvbXB1dGluZ0ZvbnRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OmNvcHlXaXRoQWRqdXN0ZWRab29tKToK
KyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpyb290
RWxlbWVudFN0eWxlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5oOgorICAgICAgICAq
IGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVl
cnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IpOgorICAgICAgICAqIGNzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmg6CisgICAgICAgICogY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJva2VEYXNoQXJyYXlUb0NTU1ZhbHVlTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjphZGp1c3RTVkdQ
YWludEZvckN1cnJlbnRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0
cmFjdG9yOjpzdmdQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKiBjc3MvU291cmNlU2l6ZUxpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVs
dExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlU2l6ZXNBdHRyaWJ1dGUpOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJD
dXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlm
aWVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJ
bWFnZU1vZGlmaWVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaGVyaXRDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQWx0KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQXRTaGFkb3dCb3VuZGFyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmRvY3VtZW50U2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjp0
YWtlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnBhcmVu
dFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpyb290RWxl
bWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpyZWdp
b25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpl
bGVtZW50TGlua1N0YXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5k
aW5nU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFZpc3VhbGx5
T3JkZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3JlYXRlUGFyc2VyKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpzdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OnJlc29sdmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0ZvckVtcHR5
U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmJlZm9yZU9yQWZ0ZXJQc2V1ZG9FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmV4aXN0aW5nQ29tcHV0ZWRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50Ojpjb21wdXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmRpZERldGFjaFJlbmRlcmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZXNvbHZl
Q3VzdG9tU3R5bGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUVkaXRhYmlsaXR5RnJvbUNvbXB1dGVk
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cHNldWRvQXdhcmVMYXN0Q2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29tcHV0ZWRTdHlsZSk6CisgICAgICAgICogZG9tL05v
ZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZVJlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpyZW5kZXJTdHlsZSk6CisgICAgICAgICogZG9tL1BzZXVkb0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUpOgorICAgICAg
ICAqIGRvbS9Qc2V1ZG9FbGVtZW50Lmg6CisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNOZXdMaW5lQXRQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxl
T2ZFbmNsb3NpbmdUZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVu
dENvbW1hbmQ6OnJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjplbmRPZk5leHRQYXJh
Z3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZCk6CisgICAgICAgICogZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmluaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVk
KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAqIGVkaXRpbmcv
RWRpdG9yLmg6CisgICAgICAgICogZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5KToKKyAgICAg
ICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
Z2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKToKKyAgICAg
ICAgKiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmli
dXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRpdGxlRWxlbWVudDo6Y29tcHV0ZWRUZXh0V2l0aERpcmVjdGlvbik6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5Ojpmb250c05lZWRVcGRhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6Omlu
aXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
VGV4dEJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6dG9UZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFJlc291cmNl
UHJlbG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxSZXNvdXJjZVByZWxvYWRlcjo6
cHJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjptZWRpYUF0dHJpYnV0ZU1hdGNoZXMpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
U2xpZGVyVGh1bWJFbGVtZW50Ojpob3N0SW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVy
VGh1bWJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2xp
ZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDb250cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
bnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpUZXh0Q29udHJv
bFBsYWNlaG9sZGVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbFBsYWNl
aG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKyAgICAgICAgKiBodG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6Cisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzb2x2ZVN0ZXBzRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uQmFzZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6fkFuaW1hdGlvbkJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6cmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkJhc2U6OnNldEFuaW1hdGlvbik6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVy
OjpjYW5jZWxBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRl
cmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNp
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlm
cmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjph
bmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDoK
KyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpyZXNldCk6CisgICAgICAgICogcGFn
ZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkltcGxp
Y2l0QW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpLZXlm
cmFtZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6ZmV0
Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OktleWZy
YW1lQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFt
ZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHBhZ2UvaW9zL0ZyYW1lSU9TLm1tOgorICAgICAgICAo
V2ViQ29yZTo6YW5jZXN0b3JSZXNwb25kaW5nVG9TY3JvbGxXaGVlbEV2ZW50cyk6CisgICAgICAg
ICogcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZsb3dUaHJlYWRDb250cm9sbGVyOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcFJlY3RGb3JOaW5l
UGllY2VJbWFnZVN0cmlwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpmaXJzdExpbmVCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZUZvckZp
cnN0TGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExl
dHRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjcmVhdGVGaXJzdExl
dHRlclJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRqdXN0QmxvY2tDaGlsZEZvclBh
Z2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlTWluaW11bVBhZ2VIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGp1c3RDb21wdXRlZEZvbnRT
aXplcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6Ym9yZGVyUmFkaWkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjplbmNsb3Np
bmdGbG9hdFBhaW50aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dp
Y2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclBy
b3BhZ2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmFwcGx5VG9wTGVmdExvY2F0aW9uT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6aGFzUmVuZGVyT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpoYXNWaXN1YWxPdmVyZmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpiYWNrZ3JvdW5kUm91bmRlZFJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
dXR0b246OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6c3R5bGVX
aWxsQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6c3R5bGVEaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpzZXR1cElubmVyU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpzdHlsZVdpbGxDaGFuZ2UpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OmNyZWF0ZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp1bmNh
Y2hlZEZpcnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmNh
Y2hlZEZpcnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmZp
cnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnN0eWxlV2ls
bENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjphZGRDb250cm9sU3Rh
dGVzRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Z2V0Q2Fj
aGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Z2V0TXV0
YWJsZUNhY2hlZFBzZXVkb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6
OmdldFVuY2FjaGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVu
dDo6cGFpbnRPdXRsaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6aGFzSW5pdGlhbGl6ZWRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpzdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJFbGVtZW50OjptdXRhYmxlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RWxlbWVudDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUmVu
ZGVySW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OlJlbmRl
ckZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRl
Rmxvd1RocmVhZFN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6bGF5b3V0U2hhZG93Q29udHJvbHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzdHls
ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5
c0NyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnBhaW50
T3V0bGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpw
YWludFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjppdGVtT2Zmc2V0Rm9yQWxpZ25tZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0TWFya2VyOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpjb21wdXRl
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVl
ZVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVyU3R5bGUpOgorICAgICAgICAo
UmVuZGVyTWVudUxpc3Q6OnVwZGF0ZU9wdGlvbnNXaWR0aCk6CisgICAgICAgIChSZW5kZXJNZW51
TGlzdDo6aXRlbVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRDb2x1bW5TcGFubmVyKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXI6OmNyZWF0ZUFub255bW91cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50OjpjaGVja1JlZ2lvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlubmVyTGluZUhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpkZWNvcmF0aW9uQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG9yc0FuZFN0eWxlcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjptaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjptYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludFJv
d0dyb3VwQm9yZGVySWZSZXF1aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpwaHlzaWNhbEJvcmRl
ckZvckRpcmVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNoYXJhY3RlckF0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHQ6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmZpcnN0
TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmdldENhY2hlZFBzZXVk
b1N0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmxheW91dFNwZWNpYWxFeGNsdWRl
ZENoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5
b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5
bGVEaWRDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5nZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyUmFkaWlGcm9tU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2spOgor
ICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnBhaW50Rmxvdyk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpoaXRUZXN0Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5n
L1RleHRBdXRvU2l6aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvU2l6aW5nS2V5
OjpUZXh0QXV0b1NpemluZ0tleSk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5n
Lmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b1NpemluZ0tleTo6c3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9TaXppbmdLZXk6OmlzRGVsZXRlZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVUZXh0
U2VsZWN0aW9uUGFpbnRTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdD
b250ZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OmxheW91dCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpyZXNldENvbHVtblJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNl
dENvbHVtblNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmluaGVyaXRDb2x1
bW5Qcm9wZXJ0aWVzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0VHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1Pcmln
aW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5Z
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25C
YWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGlu
Z1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnByZXBhcmVH
cmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFk
b3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVQYXRo
RnJvbUNpcmNsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUGF0aEZyb21FbGxp
cHNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVQYXRoRnJvbVJlY3RFbGVtZW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29u
dGVudCk6CisgICAgICAgICogc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6cG9wU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OnB1c2hQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlRyZWVSZXNvbHZlcjo6cmVzb2x2ZUNvbXBvc2VkVHJlZSk6CisgICAgICAgICogc3R5
bGUvU3R5bGVUcmVlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVz
b2x2ZXI6OnNjb3BlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVVwZGF0ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6VXBkYXRlOjp0ZXh0VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpVcGRhdGU6OmVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
VXBkYXRlOjphZGRFbGVtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVVwZGF0ZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlVwZGF0ZTo6ZG9jdW1lbnQpOgorICAgICAgICAqIHN2Zy9T
VkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnN5bmNocm9uaXpl
U3lzdGVtTGFuZ3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6cmVzb2x2ZUN1
c3RvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnNldFVzZU92ZXJyaWRl
Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpjb21wdXRlZFN0
eWxlKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVt
ZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6ZW5z
dXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnRSYXJlRGF0YTo6b3ZlcnJpZGVDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBzdmcvU1ZH
R3JhcGhpY3NFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYXBoaWNzRWxlbWVu
dDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSk6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aENvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVl
RnJvbVBlcmNlbnRhZ2VUb1VzZXJVbml0cyk6CisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJTdHls
ZUZvckxlbmd0aFJlc29sdmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0
Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FTVMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVNU1RvVXNlclVuaXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VY
Uyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9t
RVhTVG9Vc2VyVW5pdHMpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSk6
CisgICAgICAgICogc3ZnL1NWR1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKToKKwogMjAxNi0wNC0yNiAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIERyb3Ag
W1VzZVBvaW50ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFNwZWVj
aFN5bnRoZXNpcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTM0LDcgKzExMzQsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHls
ZVJhbmdlCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHZpc2libGVQb3MuZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIFJlbmRlck9iamVj
dCogc3RhcnRSZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZy
ZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvKiBzdHlsZSA9ICZyZW5kZXJlci0+c3R5bGUoKTsK
IAogICAgIC8vIHRyYXZlcnNlIGJhY2t3YXJkIGJ5IHJlbmRlcmVyIHRvIGxvb2sgZm9yIHN0eWxl
IGNoYW5nZQogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByID0gcmVuZGVyZXItPnByZXZpb3VzSW5Q
cmVPcmRlcigpOyByOyByID0gci0+cHJldmlvdXNJblByZU9yZGVyKCkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgQXRrQXR0cmlidXRl
U2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IG9iamVjdC0+cmVuZGVyZXIoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byogc3R5bGUgPSAmcmVuZGVyZXItPnN0
eWxlKCk7CiAKICAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gYnVmZmVyKGdfc3RyZHVwX3ByaW50ZigiJWkiLCBzdHlsZS0+Zm9udFNp
emUoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00OTksNyArNDk5LDcgQEAgLSAoV0tRdWFkKWlubmVyRnJhbWVRdWFkICAgICAgIC8v
IHRha2VzIAogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBlbXB0eVF1YWQoKTsK
IAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgIGF1dG8m
IHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IHJl
bmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlIC8qIHVzZSB0cmFuc2Zvcm1zKi8p
OwogCiAgICAgYm91bmRpbmdCb3gubW92ZShzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUu
Ym9yZGVyVG9wV2lkdGgoKSk7CkBAIC01MTMsNyArNTEzLDcgQEAgLSAoV0tRdWFkKWlubmVyRnJh
bWVRdWFkICAgICAgIC8vIHRha2VzIAogLSAoZmxvYXQpY29tcHV0ZWRGb250U2l6ZQogewogICAg
IFdlYkNvcmU6Ok5vZGUgKm5vZGUgPSBjb3JlKHNlbGYpOwotICAgIFJlbmRlclN0eWxlICpzdHls
ZSA9IG5vZGUtPnJlbmRlclN0eWxlKCk7CisgICAgYXV0byAqc3R5bGUgPSBub2RlLT5yZW5kZXJT
dHlsZSgpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiAwLjBmOwogICAgIHJldHVy
biBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMCw3ICs3MDAsNyBAQCBzdGF0aWMgUmVm
PENTU1ZhbHVlTGlzdD4gY3JlYXRlUG9zaXRpb25MCiAgICAgcmV0dXJuIHBvc2l0aW9uTGlzdDsK
IH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcG9zaXRpb25PZmZzZXRWYWx1ZShSZW5kZXJT
dHlsZSYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IHBvc2l0aW9uT2Zmc2V0VmFsdWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgTGVuZ3RoIGxlbmd0aDsKICAgICBzd2l0Y2gg
KHByb3BlcnR5SUQpIHsKQEAgLTczNyw3ICs3MzcsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBwb3NpdGlvbk9mZnNldFZhCiAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiB9CiAKLVJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENv
bG9yKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAorUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpjdXJyZW50Q29sb3JP
clZhbGlkQ29sb3IoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBDb2xvciYgY29sb3Ip
IGNvbnN0CiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBsb29rIGF0IHZpc2l0ZWQg
aW5mb3JtYXRpb24sIHNvIHRoYXQgY29tcHV0ZWQgc3R5bGUgZG9lc24ndCBleHBvc2UgdGhhdC4K
ICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKQEAgLTExNDMsNyArMTE0Myw3IEBAIHN0YXRpYyBS
ZWY8Q1NTVmFsdWVMaXN0PiBnZXRUcmFuc2l0aW9uUHIKIH0KIAogI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCi1zdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xsU25hcERlc3RpbmF0aW9u
KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgTGVuZ3RoU2l6ZSYgZGVzdGluYXRpb24pCitzdGF0
aWMgUmVmPENTU1ZhbHVlTGlzdD4gc2Nyb2xsU25hcERlc3RpbmF0aW9uKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgTGVuZ3RoU2l6ZSYgZGVzdGluYXRpb24pCiB7CiAgICAgYXV0byBs
aXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGxpc3QuZ2V0
KCkuYXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoZGVzdGluYXRpb24ud2lk
dGgoKSwgc3R5bGUpKTsKQEAgLTExNTEsNyArMTE1MSw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVM
aXN0PiBzY3JvbGxTbmFwRGVzdGkKICAgICByZXR1cm4gbGlzdDsKIH0KIAotc3RhdGljIFJlZjxD
U1NWYWx1ZT4gc2Nyb2xsU25hcFBvaW50cyhSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFNjcm9s
bFNuYXBQb2ludHMqIHBvaW50cykKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBQb2lu
dHMoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTY3JvbGxTbmFwUG9pbnRzKiBwb2lu
dHMpCiB7CiAgICAgaWYgKCFwb2ludHMpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwpAQCAtMTE2Niw3
ICsxMTY2LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcFBvaW50cyhSZQogICAg
IHJldHVybiBXVEZNb3ZlKGxpc3QpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxT
bmFwQ29vcmRpbmF0ZXMoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBWZWN0b3I8TGVuZ3RoU2l6
ZT4mIGNvb3JkaW5hdGVzKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcENvb3JkaW5h
dGVzKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPExlbmd0aFNpemU+JiBj
b29yZGluYXRlcykKIHsKICAgICBpZiAoY29vcmRpbmF0ZXMuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKQEAgLTE4MDcsNyArMTgwNyw3IEBAIHN0YXRpYyB2b2lkIGxvZ1VuaW1wbGVt
ZW50ZWRQcm9wZXJ0eUlEKEMKICAgICBMT0dfRVJST1IoIldlYktpdCBkb2VzIG5vdCB5ZXQgaW1w
bGVtZW50IGdldENvbXB1dGVkU3R5bGUgZm9yICclcycuIiwgZ2V0UHJvcGVydHlOYW1lKHByb3Bl
cnR5SUQpKTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9tU3R5
bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1p
bHlGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGF1dG8gbGlzdCA9
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3R5bGUtPmZvbnRDYXNjYWRlKCkuZmFtaWx5Q291bnQoKTsgKytpKQpAQCAt
MTgxNSw3ICsxODE1LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1pbHlGcm9t
UwogICAgIHJldHVybiBsaXN0OwogfQogCi1zdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBs
aW5lSGVpZ2h0RnJvbVN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+IGxpbmVIZWlnaHRGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQogewogICAgIExlbmd0aCBsZW5ndGggPSBzdHlsZS5saW5lSGVpZ2h0KCk7CiAgICAgaWYgKGxl
bmd0aC5pc05lZ2F0aXZlKCkpIC8vIElmIHRydWUsIGxpbmUtaGVpZ2h0IG5vdCBzZXQ7IHVzZSB0
aGUgZm9udCdzIGxpbmUgc3BhY2luZy4KQEAgLTE4MzAsMTkgKzE4MzAsMTkgQEAgc3RhdGljIFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZUhlaWdodAogICAgIHJldHVybiB6b29tQWRqdXN0ZWRQ
aXhlbFZhbHVlKGZsb2F0VmFsdWVGb3JMZW5ndGgobGVuZ3RoLCAwKSwgc3R5bGUpOwogfQogCi1z
dGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U2l6ZUZyb21TdHlsZShSZW5kZXJTdHls
ZSYgc3R5bGUpCitzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U2l6ZUZyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBp
eGVsVmFsdWUoc3R5bGUuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCksIHN0eWxlKTsK
IH0KIAotc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFN0eWxlRnJvbVN0eWxlKFJl
bmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRTdHls
ZUZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS5pdGFsaWMoKSkKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSXRhbGljKTsKICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb3JtYWwpOwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudEZyb21T
dHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFu
dEZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS52YXJpYW50U2V0dGluZ3MoKS5pc0FsbE5vcm1hbCgpKQogICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb3JtYWwpOwpAQCAtMjAyOSw3ICsyMDI5LDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1
ZT4gZm9udFZhcmlhbnRGcm9tU3R5bAogICAgIHJldHVybiBXVEZNb3ZlKGxpc3QpOwogfQogCi1z
dGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250V2VpZ2h0RnJvbVN0eWxlKFJlbmRlclN0
eWxlKiBzdHlsZSkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRXZWlnaHRGcm9t
U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHN3aXRjaCAoc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLndlaWdodCgpKSB7CiAgICAgY2FzZSBGb250V2VpZ2h0MTAwOgpAQCAt
MjA1NSw3ICsyMDU1LDcgQEAgc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdo
dAogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRTeW50
aGVzaXNGcm9tU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQorc3RhdGljIFJlZjxDU1NWYWx1ZT4g
Zm9udFN5bnRoZXNpc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAg
aWYgKHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLmZvbnRTeW50aGVzaXMoKSA9PSBGb250U3ludGhl
c2lzTm9uZSkKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CkBAIC0yMDcyLDcgKzIwNzIsNyBAQCB0eXBl
ZGVmIGNvbnN0IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqUmVuCiB0eXBlZGVmIExheW91dFVuaXQg
KFJlbmRlckJveE1vZGVsT2JqZWN0OjoqUmVuZGVyQm94Q29tcHV0ZWRDU1NWYWx1ZUdldHRlciko
KSBjb25zdDsKIAogdGVtcGxhdGU8UmVuZGVyU3R5bGVMZW5ndGhHZXR0ZXIgbGVuZ3RoR2V0dGVy
LCBSZW5kZXJCb3hDb21wdXRlZENTU1ZhbHVlR2V0dGVyIGNvbXB1dGVkQ1NTVmFsdWVHZXR0ZXI+
Ci1pbmxpbmUgUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhl
bFZhbHVlKFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK2lubGlu
ZSBSZWZQdHI8Q1NTVmFsdWU+IHpvb21BZGp1c3RlZFBhZGRpbmdPck1hcmdpblBpeGVsVmFsdWUo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAg
IExlbmd0aCB1bnpvb216ZWRMZW5ndGggPSAoc3R5bGUuKmxlbmd0aEdldHRlcikoKTsKICAgICBp
ZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIpIHx8IHVuem9vbXplZExlbmd0aC5pc0ZpeGVkKCkp
CkBAIC0yMDgxLDcgKzIwODEsNyBAQCBpbmxpbmUgUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0
ZWRQYWRkCiB9CiAKIHRlbXBsYXRlPFJlbmRlclN0eWxlTGVuZ3RoR2V0dGVyIGxlbmd0aEdldHRl
cj4KLWlubGluZSBib29sIHBhZGRpbmdPck1hcmdpbklzUmVuZGVyZXJEZXBlbmRlbnQoUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoraW5saW5lIGJvb2wgcGFkZGlu
Z09yTWFyZ2luSXNSZW5kZXJlckRlcGVuZGVudChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXIt
PmlzQm94KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxMzksNyArMjEzOSw3IEBAIHN0
YXRpYyBDU1NWYWx1ZUlEIGNvbnZlcnRUb1JlZ2lvbkJyZWFrKEIKIH0KICNlbmRpZgogICAgIAot
c3RhdGljIGJvb2wgaXNMYXlvdXREZXBlbmRlbnQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCitzdGF0aWMgYm9vbCBp
c0xheW91dERlcGVuZGVudChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBzd2l0Y2ggKHByb3Bl
cnR5SUQpIHsKICAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CkBAIC0yMjY3LDcgKzIyNjcsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgdXBkYXRlU3R5bGVJZk5lZWRlZEZvCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIGNvbXB1dGVSZW5kZXJTdHlsZUZv
clByb3BlcnR5KE5vZGUqIHN0eWxlZE5vZGUsIFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZp
ZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiYgb3duZWRTdHlsZSkKK3N0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVS
ZW5kZXJTdHlsZUZvclByb3BlcnR5KE5vZGUqIHN0eWxlZE5vZGUsIFBzZXVkb0lkIHBzZXVkb0Vs
ZW1lbnRTcGVjaWZpZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiYgb3duZWRTdHlsZSkKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gc3R5bGVkTm9kZS0+cmVuZGVyZXIoKTsKIApAQCAtMjM3Myw3ICsyMzczLDcgQEAgUmVmUHRy
PENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOgogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gb3duZWRTdHlsZTsKLSAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBudWxscHRyOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSA9IG51bGxwdHI7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG51bGxwdHI7CiAgICAg
Ym9vbCBmb3JjZUZ1bGxMYXlvdXQgPSBmYWxzZTsKICAgICBpZiAodXBkYXRlTGF5b3V0KSB7CkBA
IC0zODYxLDcgKzM4NjEsNyBAQCB1bnNpZ25lZCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246
OmxlCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsK
KyAgICBhdXRvKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3Bl
Y2lmaWVyKTsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzg4MCw3
ICszODgwLDcgQEAgU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6aXRlbQogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmll
cik7CisgICAgYXV0byogc3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVu
dFNwZWNpZmllcik7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CiAgICAgCkBAIC0zODk5LDcgKzM4OTksNyBAQCBib29sIENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OnByb3BlcnR5TWF0CiB7CiAgICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlGb250
U2l6ZSAmJiBpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBtX25vZGUpIHsKICAgICAg
ICAgbV9ub2RlLT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwotICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9ub2RlLT5jb21wdXRlZFN0
eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcikpIHsKKyAgICAgICAgaWYgKGF1dG8qIHN0eWxl
ID0gbV9ub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRvRWxlbWVudFNwZWNpZmllcikpIHsKICAg
ICAgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgICAgICBh
dXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
OwogICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSAmJiBwcmlt
aXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gc2l6ZUlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBwcml2YXRlOgogICAgIE5v
ZGUqIHN0eWxlZE5vZGUoKSBjb25zdDsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3ZnUHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0KSBjb25zdDsKLSAgICBSZWZQdHI8
U1ZHUGFpbnQ+IGFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFp
bnQ+LCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIFJlZlB0cjxTVkdQYWludD4gYWRqdXN0U1ZH
UGFpbnRGb3JDdXJyZW50Q29sb3IoUGFzc1JlZlB0cjxTVkdQYWludD4sIGNvbnN0IFJlbmRlclN0
eWxlKikgY29uc3Q7CiAKICAgICBzdGF0aWMgUmVmPENTU1ZhbHVlPiB2YWx1ZUZvclNoYWRvdyhj
b25zdCBTaGFkb3dEYXRhKiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUmLCBBZGp1
c3RQaXhlbFZhbHVlc0ZvckNvbXB1dGVkU3R5bGUgPSBBZGp1c3RQaXhlbFZhbHVlcyk7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3IoUmVuZGVy
U3R5bGUqLCBjb25zdCBDb2xvciYpIGNvbnN0OworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQ29s
b3ImKSBjb25zdDsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldENTU1Byb3BlcnR5VmFs
dWVzRm9yU2hvcnRoYW5kUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikg
Y29uc3Q7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZ2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3JT
aWRlc1Nob3J0aGFuZChjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3Bw
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgZmxvYXQgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6em9vbSgpIAogZG91YmxlIENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGE6OnZpZXdwb3J0V2lkdGhGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxl
ICYmICFtX2NvbXB1dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9y
dFVuaXRzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0
SGFzVmlld3BvcnRVbml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtNTcsNyArNTcsNyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YTo6dmlld3BvCiBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRIZWln
aHRGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRT
aXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7CisgICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwog
CiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjgsNyArNjgs
NyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvCiBkb3VibGUgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRNaW5GYWN0b3IoKSBjb25zdAogewogICAg
IGlmIChtX3N0eWxlICYmICFtX2NvbXB1dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5z
ZXRIYXNWaWV3cG9ydFVuaXRzKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPiht
X3N0eWxlKS0+c2V0SGFzVmlld3BvcnRVbml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtODAsNyArODAsNyBAQCBkb3VibGUgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YTo6dmlld3BvCiBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6
dmlld3BvcnRNYXhGYWN0b3IoKSBjb25zdAogewogICAgIGlmIChtX3N0eWxlICYmICFtX2NvbXB1
dGluZ0ZvbnRTaXplKQotICAgICAgICBtX3N0eWxlLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7Cisg
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3N0eWxlKS0+c2V0SGFzVmlld3BvcnRV
bml0cygpOwogCiAgICAgaWYgKCFtX3JlbmRlclZpZXcpCiAgICAgICAgIHJldHVybiAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlbmRlclZp
ZXc7CiAKIGNsYXNzIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgewogcHVibGljOgotICAgIENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSogcm9vdFN0eWxlLCBjb25zdCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBmbG9hdCB6b29t
LCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpCisgICAgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290
U3R5bGUsIGNvbnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGZsb2F0IHpvb20sIGJvb2wgY29t
cHV0aW5nRm9udFNpemUgPSBmYWxzZSkKICAgICAgICAgOiBtX3N0eWxlKHN0eWxlKQogICAgICAg
ICAsIG1fcm9vdFN0eWxlKHJvb3RTdHlsZSkKICAgICAgICAgLCBtX3JlbmRlclZpZXcocmVuZGVy
VmlldykKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoem9vbSA+IDAp
OwogICAgIH0KIAotICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25zdCBSZW5kZXJWaWV3KiByZW5k
ZXJWaWV3LCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpCisgICAgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGNvbnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGJvb2wgY29tcHV0aW5n
Rm9udFNpemUgPSBmYWxzZSkKICAgICAgICAgOiBtX3N0eWxlKHN0eWxlKQogICAgICAgICAsIG1f
cm9vdFN0eWxlKHJvb3RTdHlsZSkKICAgICAgICAgLCBtX3JlbmRlclZpZXcocmVuZGVyVmlldykK
QEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBSZW5kZXJTdHls
ZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQogICAgIGNvbnN0IFJlbmRlclN0
eWxlKiByb290U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RTdHlsZTsgfQogICAgIGZsb2F0
IHpvb20oKSBjb25zdDsKICAgICBib29sIGNvbXB1dGluZ0ZvbnRTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9jb21wdXRpbmdGb250U2l6ZTsgfQpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBtX3N0eWxlOwogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RTdHlsZTsKICAg
ICBjb25zdCBSZW5kZXJWaWV3KiBtX3JlbmRlclZpZXc7CiAgICAgZmxvYXQgbV96b29tOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw3ICs1Niw3IEBAIFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpzdHlsZSgpIGNvbnMKICAg
ICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGUoKTsKIH0KIAotUmVuZGVyU3R5bGUqIENTU1RvU3R5
bGVNYXA6OnJvb3RFbGVtZW50U3R5bGUoKSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIENTU1Rv
U3R5bGVNYXA6OnJvb3RFbGVtZW50U3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3Jlc29s
dmVyLT5yb290RWxlbWVudFN0eWxlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VG9TdHlsZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBz
aW1pbGFyIHRvIGhvdyBQYWludEluZm8vTGF5b3V0U3RhdGUgY2FjaGUgdmFsdWVzIG5lZWRlZCBm
b3IKICAgICAvLyB0aGUgY3VycmVudCBwYWludC9sYXlvdXQuCiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlKCkgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdDsK
KyAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0OwogICAgIGJv
b2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgcGFydCBvZiBzb21lIHNvcnQgb2YgU3R5bGVJbWFnZUNhY2hlIG9iamVjdCB3aGljaApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NSwxMCArODUsMTAgQEAgTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVk
aWFRdWVyeUV2YWx1YXRvcgogewogfQogCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5
RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiBmcmFtZSwg
UmVuZGVyU3R5bGUqIHN0eWxlKQorTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1
YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSogZnJhbWUsIGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVkTWVkaWFUeXBl
KQogICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fc3R5bGUoV1RGTW92ZShzdHlsZSkpCisg
ICAgLCBtX3N0eWxlKHN0eWxlKQogICAgICwgbV9leHBSZXN1bHQoZmFsc2UpIC8vIGRvZXNuJ3Qg
bWF0dGVyIHdoZW4gd2UgaGF2ZSBtX2ZyYW1lIGFuZCBtX3N0eWxlCiB7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogCiAgICAgLyoqIENyZWF0ZXMgZXZhbHVhdG9yIHdo
aWNoIGV2YWx1YXRlcyBmdWxsIG1lZGlhIHF1ZXJpZXMKICAgICAgKi8KLSAgICBNZWRpYVF1ZXJ5
RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiwgUmVuZGVy
U3R5bGUqKTsKKyAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRN
ZWRpYVR5cGUsIEZyYW1lKiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKIAogICAgIH5NZWRpYVF1ZXJ5
RXZhbHVhdG9yKCk7CiAKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBT
dHJpbmcgbV9tZWRpYVR5cGU7CiAgICAgRnJhbWUqIG1fZnJhbWUgeyBudWxscHRyIH07IC8vIG5v
dCBvd25lZAotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlIHsgbnVsbHB0ciB9OworICAgIGNvbnN0
IFJlbmRlclN0eWxlKiBtX3N0eWxlIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9leHBSZXN1bHQ7
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gc3Ryb2tlRGFzaEFycmF5
VAogICAgIHJldHVybiBsaXN0OwogfQogCi1SZWZQdHI8U1ZHUGFpbnQ+IENvbXB1dGVkU3R5bGVF
eHRyYWN0b3I6OmFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBhc3NSZWZQdHI8U1ZHUGFp
bnQ+IG5ld1BhaW50LCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitSZWZQdHI8U1ZHUGFpbnQ+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmFkanVzdFNWR1BhaW50Rm9yQ3VycmVudENvbG9yKFBh
c3NSZWZQdHI8U1ZHUGFpbnQ+IG5ld1BhaW50LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CiB7CiAgICAgUmVmUHRyPFNWR1BhaW50PiBwYWludCA9IG5ld1BhaW50OwogICAgIGlmIChw
YWludC0+cGFpbnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9S
IHx8IHBhaW50LT5wYWludFR5cGUoKSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUklfQ1VS
UkVOVENPTE9SKQpAQCAtMTExLDcgKzExMSw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRT
dHlsZUV4dHJhY3RvcjoKICAgICBpZiAodXBkYXRlTGF5b3V0KQogICAgICAgICBub2RlLT5kb2N1
bWVudCgpLnVwZGF0ZUxheW91dCgpOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbm9kZS0+
Y29tcHV0ZWRTdHlsZSgpOworICAgIGF1dG8qIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZSgp
OwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBtYXRjaChzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4mJiBleHByZXNzaW9uLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBib29sIG1hdGNoKHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YVF1ZXJ5RXhwPiYmIGV4cHJlc3Npb24sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRnJhbWUq
IGZyYW1lKQogewogICAgIGlmIChleHByZXNzaW9uLT5tZWRpYUZlYXR1cmUoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDcsMTIgKzQ3LDEyIEBAIHN0YXRpYyBib29sIG1h
dGNoKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVEKICAgICByZXR1cm4gbWVkaWFRdWVyeUV2YWx1YXRv
ci5ldmFsKG1lZGlhUXVlcnlTZXQuZ2V0KCkpOwogfQogCi1zdGF0aWMgZmxvYXQgZGVmYXVsdExl
bmd0aChSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCitzdGF0aWMgZmxvYXQg
ZGVmYXVsdExlbmd0aChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcp
CiB7CiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRl
Tm9uQ2FsY0xlbmd0aERvdWJsZShDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0
eWxlLCB2aWV3KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVywgMTAwLjApKTsKIH0KIAotc3Rh
dGljIGZsb2F0IGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFJlbmRlclZpZXcqIHZpZXcpCitzdGF0aWMgZmxvYXQgY29tcHV0ZUxlbmd0aChDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyVmlldyogdmlldykKIHsK
ICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0
eWxlLCB2aWV3KTsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewpAQCAt
NzAsNyArNzAsNyBAQCBmbG9hdCBwYXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcgc2l6CiB7
CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJTdHlsZSYgc3R5
bGUgPSB2aWV3LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gdmlldy0+c3R5bGUoKTsKICAg
ICBmb3IgKGF1dG8mIHNvdXJjZVNpemUgOiBDU1NQYXJzZXIoQ1NTU3RyaWN0TW9kZSkucGFyc2VT
aXplc0F0dHJpYnV0ZShzaXplc0F0dHJpYnV0ZSkpIHsKICAgICAgICAgaWYgKG1hdGNoKFdURk1v
dmUoc291cmNlU2l6ZS5leHByZXNzaW9uKSwgc3R5bGUsIGZyYW1lKSkKICAgICAgICAgICAgIHJl
dHVybiBjb21wdXRlTGVuZ3RoKHNvdXJjZVNpemUubGVuZ3RoLmdldCgpLCBzdHlsZSwgdmlldyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3NSw3ICs1NzUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0
eWxlKQorICAgIHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1h
Z2UgPyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2UoKTsKICAgICB9
CkBAIC02NjQsNyArNjY0LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaQogCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENsaXAo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7CisgICAgYXV0byogcGFyZW50U3R5
bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7CiAgICAgaWYgKCFwYXJlbnRTdHlsZS0+
aGFzQ2xpcCgpKQogICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsQ2xpcChzdHlsZVJlc29sdmVy
KTsKICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENsaXAocGFyZW50U3R5bGUtPmNsaXBU
b3AoKSwgcGFyZW50U3R5bGUtPmNsaXBSaWdodCgpLCBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgp
LCBwYXJlbnRTdHlsZS0+Y2xpcExlZnQoKSk7CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCB0ZW1wbGF0
ZSA8U3R5bGVCdWlsZGVyQ3VzdG9tOjpDb3VudGVyQmVoCiBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKIHsKICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6
IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkg
eworICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkgewog
ICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoa2V5VmFsdWUu
a2V5LCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChj
b3VudGVyQmVoYXZpb3IgPT0gUmVzZXQpCiAgICAgICAgICAgICBkaXJlY3RpdmVzLmluaGVyaXRS
ZXNldChrZXlWYWx1ZS52YWx1ZSk7CkBAIC0xMzM3LDcgKzEzMzcsNyBAQCBpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiAgICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAg
ICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKSktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51
bGxBdG9tLCBjb250ZW50VmFsdWUuZ2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsK
ICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdHlsZVJlc29sdmVyLmVs
ZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1w
bCgpLCBkaWRTZXQpOwpAQCAtMTcwNiw3ICsxNzA2LDcgQEAgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVBbHQoUwogICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
dHlsZVR5cGUoKSA9PSBOT1BTRVVETykKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0VW5pcXVlKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIu
cGFyZW50U3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRl
clN0eWxlKj4oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+c2V0VW5pcXVlKCk7CiAKICAg
ICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJp
bmdWYWx1ZSgpLCBudWxsQXRvbSk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBzdHlsZVJlc29sdmVyLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNyAr
MzM2LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0aQogICAgIG1f
bWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwID0gMDsKIH0KIAot
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGRvY3VtZW50RWxlbWVudFN0eWxlLCBj
b25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVjdG9yRmlsdGVy
KiBzZWxlY3RvckZpbHRlcikKK1N0eWxlUmVzb2x2ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRl
clN0eWxlKiBkb2N1bWVudEVsZW1lbnRTdHlsZSwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25G
b3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCiAgICAgOiBt
X2VsZW1lbnQoJmVsZW1lbnQpCiAgICAgLCBtX3BhcmVudFN0eWxlKHBhcmVudFN0eWxlKQogICAg
ICwgbV9yZWdpb25Gb3JTdHlsaW5nKHJlZ2lvbkZvclN0eWxpbmcpCkBAIC0zODAsNyArMzgwLDcg
QEAgc3RhdGljIGlubGluZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShjbwogICAgIHJldHVybiBw
YXJlbnROb2RlICYmIHBhcmVudE5vZGUtPmlzU2hhZG93Um9vdCgpOwogfQogCi1FbGVtZW50U3R5
bGUgU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdC
ZWhhdmlvciwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxl
Y3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCitFbGVtZW50U3R5bGUgU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hpbmdCZWhhdmlvciwgY29u
c3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nLCBjb25zdCBTZWxlY3RvckZpbHRlciog
c2VsZWN0b3JGaWx0ZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5Mb2FkUGVuZGluZ0lt
YWdlcyk7CiAKQEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1l
U3R5bGVzRm9yQW5pCiAgICAgfQogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0
eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgUmVuZGVyU3R5
bGUmIHBhcmVudFN0eWxlKQorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29s
dmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
UHNldWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIGNvbnN0IFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSkKIHsKICAgICBtX3N0YXRlID0gU3RhdGUoZWxlbWVudCwgJnBhcmVudFN0
eWxlKTsKIApAQCAtMTYzMSw3ICsxNjMxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1BybwogICAgIH0KIAogICAgIGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBhcmVu
dFN0eWxlKCktPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3Bl
cnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgc3RhdGUucGFyZW50U3R5bGUo
KS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKyAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJTdHlsZSo+KHN0YXRlLnBhcmVudFN0eWxlKCkpLT5zZXRIYXNFeHBsaWNpdGx5
SW5oZXJpdGVkUHJvcGVydGllcygpOwogICAgIAogICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1
c3RvbSkgewogICAgICAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBjdXN0b21Qcm9wZXJ0eSA9
ICZkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqdmFsdWVUb0FwcGx5KTsKQEAgLTE3
MzQsNyArMTczNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanUK
IH0KICNlbmRpZgogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5k
ZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmICghcGFyZW50U3R5bGUpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3NDgsNyArMTc0OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Ja
b29tQ2hhbmdlKFIKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlw
dGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hh
bmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQordm9pZCBT
dHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgY29uc3QgYXV0byYg
Y2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSwxOCArMTQxLDE4IEBAIHB1
YmxpYzoKICAgICBTdHlsZVJlc29sdmVyKERvY3VtZW50Jik7CiAgICAgflN0eWxlUmVzb2x2ZXIo
KTsKIAotICAgIEVsZW1lbnRTdHlsZSBzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1
bGVzLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25z
dCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKKyAgICBFbGVtZW50U3R5bGUgc3R5bGVGb3JF
bGVtZW50KGNvbnN0IEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJ1
bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgY29uc3QgUmVuZGVyUmVnaW9uKiBy
ZWdpb25Gb3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0
cik7CiAKICAgICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKGNvbnN0IEVsZW1lbnQm
LCBjb25zdCBSZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYpOwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYsIGNv
bnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3Qg
RWxlbWVudCYsIGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYsIGNvbnN0IFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9y
UGFnZShpbnQgcGFnZUluZGV4KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRl
ZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUoKTsgfQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGUoKTsgfQotICAgIFJlbmRlclN0
eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCk7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSog
cm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpOyB9CiAgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCgpIHsgcmV0dXJuIG1fc3RhdGUuZWxl
bWVudCgpOyB9CiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgeyByZXR1cm4gbV9kb2N1bWVudDsg
fQogICAgIFNldHRpbmdzKiBkb2N1bWVudFNldHRpbmdzKCkgeyByZXR1cm4gbV9kb2N1bWVudC5z
ZXR0aW5ncygpOyB9CkBAIC0zMTcsOCArMzE3LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRl
dGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAt
ZHdoCi0gICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwotICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJl
bmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9y
R2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSk7CisgICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0la
SU5HKQogICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChSZW5kZXJTdHlsZSopOwogI2Vu
ZGlmCkBAIC0zNjEsNyArMzYxLDcgQEAgcHVibGljOgogICAgIGNsYXNzIFN0YXRlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFN0YXRlKCkgeyB9Ci0gICAgICAgIFN0YXRlKGNvbnN0IEVsZW1lbnQm
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBkb2N1bWVudEVsZW1lbnRT
dHlsZSA9IG51bGxwdHIsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IG51
bGxwdHIsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiA9IG51bGxwdHIpOworICAgICAgICBTdGF0ZShj
b25zdCBFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSogZG9jdW1lbnRFbGVtZW50U3R5bGUgPSBudWxscHRyLCBjb25zdCBSZW5kZXJSZWdp
b24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25zdCBTZWxlY3RvckZpbHRlciogPSBu
dWxscHRyKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBjbGVhcigpOwpAQCAtMzc0LDgg
KzM3NCw4IEBAIHB1YmxpYzoKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiB0
YWtlU3R5bGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fc3R5bGUpOyB9CiAKICAgICAgICAgdm9pZCBz
ZXRQYXJlbnRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+KTsKLSAgICAgICAgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQot
ICAgICAgICBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdEVsZW1lbnRTdHlsZTsgfQorICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0
eWxlOyB9CiAKICAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9yZWdpb25Gb3JTdHlsaW5nOyB9CiAgICAgICAgIEVJbnNpZGVMaW5r
IGVsZW1lbnRMaW5rU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRMaW5rU3RhdGU7IH0K
QEAgLTQyNyw5ICs0MjcsOSBAQCBwdWJsaWM6CiAKICAgICAgICAgY29uc3QgRWxlbWVudCogbV9l
bGVtZW50IHsgbnVsbHB0ciB9OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IG1fc3R5bGU7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlIHsgbnVsbHB0ciB9
OworICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9wYXJlbnRTdHlsZSB7IG51bGxwdHIgfTsK
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX293bmVkUGFyZW50U3R5bGU7
Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07Cisg
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3Jvb3RFbGVtZW50U3R5bGUgeyBudWxscHRyIH07
CiAKICAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiBtX3JlZ2lvbkZvclN0eWxpbmcgeyBudWxs
cHRyIH07CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDA4LDcgKzIwMDgsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nCiAgICAgbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSBvbGRJZ25vcmU7CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxlbWVudEln
bm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxl
Rm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQmIGVsZW1lbnQsIGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBBU1NFUlQoJmVsZW1lbnQuZG9j
dW1lbnQoKSA9PSB0aGlzKTsKIApAQCAtMjUxNSw3ICsyNTE1LDcgQEAgdm9pZCBEb2N1bWVudDo6
c2V0VmlzdWFsbHlPcmRlcmVkKCkKIHsKICAgICBtX3Zpc3VhbGx5T3JkZXJlZCA9IHRydWU7CiAg
ICAgaWYgKHJlbmRlclZpZXcoKSkKLSAgICAgICAgcmVuZGVyVmlldygpLT5zdHlsZSgpLnNldFJU
TE9yZGVyaW5nKFZpc3VhbE9yZGVyKTsKKyAgICAgICAgcmVuZGVyVmlldygpLT5tdXRhYmxlU3R5
bGUoKS5zZXRSVExPcmRlcmluZyhWaXN1YWxPcmRlcik7CiB9CiAKIFJlZjxEb2N1bWVudFBhcnNl
cj4gRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3MSw3ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyhSdW5Qb3N0TGF5
b3V0VGFza3MgPSBSdW5Qb3N0TGF5b3V0VGFza3M6OkFzeW5jaHJvbm91c2x5KTsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5n
U3R5bGVzaGVldHMoRWxlbWVudCYsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRpbmdT
dHlsZXNoZWV0cyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBwYWdlIGJveCAobWFyZ2luIGJveGVzIGFuZCBwYWdlIGJv
cmRlcnMpIGlzIHZpc2libGUuCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1BhZ2VCb3hWaXNp
YmxlKGludCBwYWdlSW5kZXgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcwLDcgKzEzNzAsNyBAQCBTdHlsZVJlc29sdmVyJiBFbGVtZW50OjpzdHlsZVJlc29s
dmVyKCkKICAgICByZXR1cm4gZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCk7CiB9CiAK
LUVsZW1lbnRTdHlsZSBFbGVtZW50OjpyZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQorRWxlbWVudFN0eWxlIEVsZW1lbnQ6OnJlc29sdmVTdHlsZShjb25zdCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpCiB7CiAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVs
ZW1lbnQoKnRoaXMsIHBhcmVudFN0eWxlKTsKIH0KQEAgLTE3NTgsNyArMTc1OCw3IEBAIGJvb2wg
RWxlbWVudDo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSAKIHN0YXRpYyB2b2lkIGNoZWNrRm9y
RW1wdHlTdHlsZUNoYW5nZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LnN0
eWxlQWZmZWN0ZWRCeUVtcHR5KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxl
bWVudC5yZW5kZXJTdHlsZSgpOworICAgICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVy
U3R5bGUoKTsKICAgICAgICAgaWYgKCFzdHlsZSB8fCAoIXN0eWxlLT5lbXB0eVN0YXRlKCkgfHwg
ZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpKQogICAgICAgICAgICAgZWxlbWVudC5zZXROZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgfQpAQCAtMTc4NCwxNCArMTc4NCwxNCBAQCBzdGF0aWMgdm9pZCBj
aGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaW5z
ZXJ0L2FwcGVuZCBjYXNlLgogICAgICAgICBpZiAobmV3Rmlyc3RFbGVtZW50ICE9IGVsZW1lbnRB
ZnRlckNoYW5nZSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudEFm
dGVyQ2hhbmdlLT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0byogc3R5bGUgPSBlbGVt
ZW50QWZ0ZXJDaGFuZ2UtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlIHx8
IHN0eWxlLT5maXJzdENoaWxkU3RhdGUoKSkKICAgICAgICAgICAgICAgICBlbGVtZW50QWZ0ZXJD
aGFuZ2UtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdl
IGFsc28gaGF2ZSB0byBoYW5kbGUgbm9kZSByZW1vdmFsLgogICAgICAgICBpZiAoY2hlY2tUeXBl
ID09IFNpYmxpbmdFbGVtZW50UmVtb3ZlZCAmJiBuZXdGaXJzdEVsZW1lbnQgPT0gZWxlbWVudEFm
dGVyQ2hhbmdlICYmIG5ld0ZpcnN0RWxlbWVudCkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gbmV3Rmlyc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAgYXV0
byogc3R5bGUgPSBuZXdGaXJzdEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICBp
ZiAoIXN0eWxlIHx8ICFzdHlsZS0+Zmlyc3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAg
bmV3Rmlyc3RFbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KQEAgLTE4
MDQsNyArMTgwNCw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygK
ICAgICAgICAgRWxlbWVudCogbmV3TGFzdEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpsYXN0
Q2hpbGQocGFyZW50KTsKIAogICAgICAgICBpZiAobmV3TGFzdEVsZW1lbnQgIT0gZWxlbWVudEJl
Zm9yZUNoYW5nZSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudEJl
Zm9yZUNoYW5nZS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8qIHN0eWxlID0gZWxl
bWVudEJlZm9yZUNoYW5nZS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICghc3R5bGUg
fHwgc3R5bGUtPmxhc3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgZWxlbWVudEJlZm9y
ZUNoYW5nZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICB9CkBAIC0xODEyLDcgKzE4
MTIsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXMoCiAgICAgICAg
IC8vIFdlIGFsc28gaGF2ZSB0byBoYW5kbGUgbm9kZSByZW1vdmFsLiAgVGhlIHBhcnNlciBjYWxs
YmFjayBjYXNlIGlzIHNpbWlsYXIgdG8gbm9kZSByZW1vdmFsIGFzIHdlbGwgaW4gdGhhdCB3ZSBu
ZWVkIHRvIGNoYW5nZSB0aGUgbGFzdCBjaGlsZAogICAgICAgICAvLyB0byBtYXRjaCBub3cuCiAg
ICAgICAgIGlmICgoY2hlY2tUeXBlID09IFNpYmxpbmdFbGVtZW50UmVtb3ZlZCB8fCBjaGVja1R5
cGUgPT0gRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4pICYmIG5ld0xhc3RFbGVtZW50ID09IGVsZW1l
bnRCZWZvcmVDaGFuZ2UgJiYgbmV3TGFzdEVsZW1lbnQpIHsKLSAgICAgICAgICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IG5ld0xhc3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgICAgICAgICAg
YXV0byogc3R5bGUgPSBuZXdMYXN0RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAg
IGlmICghc3R5bGUgfHwgIXN0eWxlLT5sYXN0Q2hpbGRTdGF0ZSgpKQogICAgICAgICAgICAgICAg
IG5ld0xhc3RFbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KQEAgLTI0
NjEsNyArMjQ2MSw3IEBAIHN0YXRpYyBQc2V1ZG9FbGVtZW50KiBiZWZvcmVPckFmdGVyUHNldWQK
ICAgICB9CiB9CiAKLVJlbmRlclN0eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3R5bGUo
KQorY29uc3QgUmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmV4aXN0aW5nQ29tcHV0ZWRTdHlsZSgpCiB7
CiAgICAgaWYgKGF1dG8qIHJlbmRlclRyZWVTdHlsZSA9IHJlbmRlclN0eWxlKCkpCiAgICAgICAg
IHJldHVybiByZW5kZXJUcmVlU3R5bGU7CkBAIC0yNDcyLDEzICsyNDcyLDEzIEBAIFJlbmRlclN0
eWxlKiBFbGVtZW50OjpleGlzdGluZ0NvbXB1dGVkU3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotUmVuZGVyU3R5bGUmIEVsZW1lbnQ6OnJlc29sdmVDb21wdXRlZFN0eWxlKCkKK2NvbnN0IFJl
bmRlclN0eWxlJiBFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSgpCiB7CiAgICAgQVNTRVJU
KGluRG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKCFleGlzdGluZ0NvbXB1dGVkU3R5bGUoKSk7CiAK
ICAgICBEZXF1ZTxFbGVtZW50KiwgMzI+IGVsZW1lbnRzUmVxdWlyaW5nQ29tcHV0ZWRTdHlsZSh7
IHRoaXMgfSk7Ci0gICAgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUgPSBudWxscHRyOworICAg
IGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gbnVsbHB0cjsKIAogICAgIC8vIENv
bGxlY3QgYW5jZXN0b3JzIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgaGFzIHN0eWxlLgogICAgIGF1
dG8gY29tcG9zZWRBbmNlc3RvcnMgPSBjb21wb3NlZFRyZWVBbmNlc3RvcnMoKnRoaXMpOwpAQCAt
MjUwMSw3ICsyNTAxLDcgQEAgUmVuZGVyU3R5bGUmIEVsZW1lbnQ6OnJlc29sdmVDb21wdXRlZFN0
eQogICAgIHJldHVybiAqY29tcHV0ZWRTdHlsZTsKIH0KIAotUmVuZGVyU3R5bGUqIEVsZW1lbnQ6
OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKK2NvbnN0IFJl
bmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRT
cGVjaWZpZXIpCiB7CiAgICAgaWYgKFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBiZWZv
cmVPckFmdGVyUHNldWRvRWxlbWVudCgqdGhpcywgcHNldWRvRWxlbWVudFNwZWNpZmllcikpCiAg
ICAgICAgIHJldHVybiBwc2V1ZG9FbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CkBAIC0zMjk1LDcg
KzMyOTUsNyBAQCB2b2lkIEVsZW1lbnQ6OmRpZERldGFjaFJlbmRlcmVycygpCiAgICAgQVNTRVJU
KGhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVu
dFN0eWxlPiBFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJT
dHlsZSopCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IEVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikKIHsKICAgICBBU1NFUlQo
aGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCkpOwogICAgIHJldHVybiBOdWxsb3B0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VGFiSW5kZXgoaW50KTsKICAgICB2aXJ0dWFsIEVsZW1lbnQqIGZvY3Vz
RGVsZWdhdGUoKTsKIAotICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkID0g
Tk9QU0VVRE8pIG92ZXJyaWRlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxl
KFBzZXVkb0lkID0gTk9QU0VVRE8pIG92ZXJyaWRlOwogCiAgICAgYm9vbCBuZWVkc1N0eWxlSW52
YWxpZGF0aW9uKCkgY29uc3Q7CiAKQEAgLTQ4MCw3ICs0ODAsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsRGV0
YWNoUmVuZGVyZXJzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZERldGFjaFJlbmRlcmVycygpOwot
ICAgIHZpcnR1YWwgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVu
ZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RT
dHlsZSk7CiAKICAgICBMYXlvdXRSZWN0IGFic29sdXRlRXZlbnRIYW5kbGVyQm91bmRzKGJvb2wm
IGluY2x1ZGVzRml4ZWRQb3NpdGlvbkVsZW1lbnRzKSBvdmVycmlkZTsKIApAQCAtNDk5LDcgKzQ5
OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cigpOwotICAgIEVsZW1lbnRTdHlsZSByZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKTsKKyAgICBFbGVtZW50U3R5bGUgcmVzb2x2ZVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSk7CiAKICAgICBib29sIGhhc0Rpc3BsYXlDb250ZW50cygpIGNvbnN0OwogICAg
IHZvaWQgc2V0SGFzRGlzcGxheUNvbnRlbnRzKGJvb2wpOwpAQCAtNTkyLDggKzU5Miw4IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHJlbW92ZVNoYWRvd1Jvb3QoKTsKIAotICAgIFJlbmRlclN0eWxl
KiBleGlzdGluZ0NvbXB1dGVkU3R5bGUoKTsKLSAgICBSZW5kZXJTdHlsZSYgcmVzb2x2ZUNvbXB1
dGVkU3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogZXhpc3RpbmdDb21wdXRlZFN0eWxl
KCk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHJlc29sdmVDb21wdXRlZFN0eWxlKCk7CiAKICAg
ICBib29sIHJhcmVEYXRhU3R5bGVBZmZlY3RlZEJ5RW1wdHkoKSBjb25zdDsKICAgICBib29sIHJh
cmVEYXRhQ2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjU5LDcgKzY1OSw3IEBAIHN0YXRpYyBOb2RlOjpFZGl0YWJpbGl0eSBj
b21wdXRlRWRpdGFiaWwKICAgICAvLyB3b3VsZCBmaXJlIGluIHRoZSBtaWRkbGUgb2YgRG9jdW1l
bnQ6OnNldEZvY3VzZWRFbGVtZW50KCkuCiAKICAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSAm
c3RhcnROb2RlOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IG5vZGUtPmlzRG9jdW1lbnROb2RlKCkgPyBub2RlLT5yZW5kZXJT
dHlsZSgpIDogY29uc3RfY2FzdDxOb2RlKj4obm9kZSktPmNvbXB1dGVkU3R5bGUoKTsKKyAgICAg
ICAgYXV0byogc3R5bGUgPSBub2RlLT5pc0RvY3VtZW50Tm9kZSgpID8gbm9kZS0+cmVuZGVyU3R5
bGUoKSA6IGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLT5jb21wdXRlZFN0eWxlKCk7CiAgICAgICAg
IGlmICghc3R5bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0eWxlLT5k
aXNwbGF5KCkgPT0gTk9ORSkKQEAgLTEwMTAsNyArMTAxMCw3IEBAIE5vZGUqIE5vZGU6OnBzZXVk
b0F3YXJlTGFzdENoaWxkKCkgY29uc3QKICAgICByZXR1cm4gbGFzdENoaWxkKCk7CiB9CiAKLVJl
bmRlclN0eWxlKiBOb2RlOjpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVj
aWZpZXIpCitjb25zdCBSZW5kZXJTdHlsZSogTm9kZTo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBw
c2V1ZG9FbGVtZW50U3BlY2lmaWVyKQogewogICAgIGF1dG8qIGNvbXBvc2VkUGFyZW50ID0gY29t
cG9zZWRUcmVlQW5jZXN0b3JzKCp0aGlzKS5maXJzdCgpOwogICAgIGlmICghY29tcG9zZWRQYXJl
bnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw5ICs0NDMsOSBAQCBwdWJsaWM6CiAg
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2JqZWN0KCkgY29uc3Q7CiAg
ICAgCiAgICAgLy8gV3JhcHBlciBmb3Igbm9kZXMgdGhhdCBkb24ndCBoYXZlIGEgcmVuZGVyZXIs
IGJ1dCBzdGlsbCBjYWNoZSB0aGUgc3R5bGUgKGxpa2UgSFRNTE9wdGlvbkVsZW1lbnQpLgotICAg
IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxl
KiByZW5kZXJTdHlsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBSZW5kZXJTdHlsZSogY29tcHV0
ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyID0gTk9QU0VVRE8pOworICAg
IHZpcnR1YWwgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRv
RWxlbWVudFNwZWNpZmllciA9IE5PUFNFVURPKTsKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAgICAgLy8gTm90aWZpY2F0aW9uIG9mIGRvY3VtZW50IHN0cnVjdHVyZSBjaGFuZ2VzIChz
ZWUgQ29udGFpbmVyTm9kZS5oIGZvciBtb3JlIG5vdGlmaWNhdGlvbiBtZXRob2RzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIFJlbmRlclN0eWxlKiBO
b2RlOjpyZW5kZXJTdHlsZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIE5vZGU6
OnJlbmRlclN0eWxlKCkgY29uc3QKIHsKICAgICBhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1
ZG9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIFBzZXVkb0Vs
ZW1lbnQ6OmNsZWFySG9zdEVsZW1lbnQoKQogICAgIG1faG9zdEVsZW1lbnQgPSBudWxscHRyOwog
fQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21T
dHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVs
ZW1lbnRTdHlsZT4gUHNldWRvRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIGF1dG8qIHN0
eWxlID0gbV9ob3N0RWxlbWVudC0+cmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUobV9w
c2V1ZG9JZCwgJnBhcmVudFN0eWxlKTsKICAgICBpZiAoIXN0eWxlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vUHNldWRvRWxlbWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vUHNldWRvRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICBFbGVtZW50KiBob3N0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEVsZW1l
bnQ7IH0KICAgICB2b2lkIGNsZWFySG9zdEVsZW1lbnQoKTsKIAotICAgIE9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVu
dFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lk
IGRpZEF0dGFjaFJlbmRlcmVycygpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjYWxjU3R5bGUo
U3R5bGU6OkNoYW5nZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0
IFJlbmRlclN0eWxlJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3OSwxOCArMTc5LDE4IEBAIHN0YXRpYyBib29sIGlzTmV3TGluZUF0
UG9zaXRpb24oY29uc3QgUG8KICAgICByZXR1cm4gdGV4dEF0UG9zaXRpb25bMF0gPT0gJ1xuJzsK
IH0KIAotUmVuZGVyU3R5bGUqIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmVuZGVyU3R5bGVP
ZkVuY2xvc2luZ1RleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK2NvbnN0IFJlbmRl
clN0eWxlKiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxlT2ZFbmNsb3NpbmdU
ZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgaWYgKHBvc2l0aW9uLmFu
Y2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yCiAgICAgICAg
IHx8ICFwb3NpdGlvbi5jb250YWluZXJOb2RlKCkKICAgICAgICAgfHwgIXBvc2l0aW9uLmNvbnRh
aW5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAog
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCktPnJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuICZyZW5kZXJlci0+c3R5bGUoKTsKIH0KQEAg
LTIwMSw3ICsyMDEsNyBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQ
CiAgICAgZW5kID0gZW5kT2ZDdXJyZW50UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCk7CiAKICAg
ICBib29sIGlzU3RhcnRBbmRFbmRPblNhbWVOb2RlID0gZmFsc2U7Ci0gICAgaWYgKFJlbmRlclN0
eWxlKiBzdGFydFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHN0YXJ0KSkg
eworICAgIGlmIChhdXRvKiBzdGFydFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHRO
b2RlKHN0YXJ0KSkgewogICAgICAgICBpc1N0YXJ0QW5kRW5kT25TYW1lTm9kZSA9IHJlbmRlclN0
eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShlbmQpICYmIHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBl
bmQuY29udGFpbmVyTm9kZSgpOwogICAgICAgICBib29sIGlzU3RhcnRBbmRFbmRPZkxhc3RQYXJh
Z3JhcGhPblNhbWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKG1fZW5kT2ZM
YXN0UGFyYWdyYXBoKSAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gbV9lbmRPZkxhc3RQYXJh
Z3JhcGguY29udGFpbmVyTm9kZSgpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBBcHBseUJs
b2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KFJlbmRlclN0eWxlKiBlbmRTdHlsZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShl
bmQpKSB7CisgICAgaWYgKGF1dG8qIGVuZFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1Rl
eHROb2RlKGVuZCkpIHsKICAgICAgICAgYm9vbCBpc0VuZEFuZEVuZE9mTGFzdFBhcmFncmFwaE9u
U2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUobV9lbmRPZkxhc3RQYXJh
Z3JhcGgpICYmIGVuZC5kZXByZWNhdGVkTm9kZSgpID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmRl
cHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIC8vIEluY2x1ZGUgXG4gYXQgdGhlIGVuZCBvZiBsaW5l
IGlmIHdlJ3JlIGF0IGFuIGVtcHR5IHBhcmFncmFwaAogICAgICAgICBpZiAoZW5kU3R5bGUtPnBy
ZXNlcnZlTmV3bGluZSgpICYmIHN0YXJ0ID09IGVuZCAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJO
b2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgewpAQCAt
MjU4LDcgKzI1OCw3IEBAIFZpc2libGVQb3NpdGlvbiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQK
IHsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZOZXh0UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3Jh
cGgoZW5kT2ZDdXJyZW50UGFyYWdyYXBoLm5leHQoKSk7CiAgICAgUG9zaXRpb24gcG9zaXRpb24g
PSBlbmRPZk5leHRQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUocG9zaXRpb24pOworICAgIGF1
dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHBvc2l0aW9uKTsKICAg
ICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gZW5kT2ZOZXh0UGFyYWdyYXBoOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5k
LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9j
a0VsZW1lbnRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJvdGVj
dGVkOgogcHJpdmF0ZToKICAgICB2b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgZm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZTZWxlY3Rpb24sIFJlZlB0cjxFbGVtZW50PiYpID0g
MDsKLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGNvbnN0
IFBvc2l0aW9uJik7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlT2ZFbmNsb3Np
bmdUZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYpOwogICAgIHZvaWQgcmFuZ2VGb3JQYXJhZ3JhcGhT
cGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBQb3NpdGlv
biYsIFBvc2l0aW9uJik7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mTmV4dFBhcmFncmFwaFNw
bGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKFZpc2libGVQb3NpdGlvbiYsIFBvc2l0aW9uJiwgUG9z
aXRpb24mKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6
OmluaXQoTm9kZSogbm9kZSwgUHJvcAogICAgIH0KIAogICAgIGlmIChub2RlICYmIG5vZGUtPmNv
bXB1dGVkU3R5bGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBub2Rl
LT5jb21wdXRlZFN0eWxlKCk7CisgICAgICAgIGF1dG8qIHJlbmRlclN0eWxlID0gbm9kZS0+Y29t
cHV0ZWRTdHlsZSgpOwogICAgICAgICByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVl
ZGVkKHJlbmRlclN0eWxlKTsKICAgICAgICAgaWYgKHJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5rZXl3b3JkU2l6ZSgpKQogICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uLmdldEZvbnRT
aXplQ1NTVmFsdWVQcmVmZXJyaW5nS2V5d29yZCgpLT5jc3NUZXh0KCkpOwpAQCAtNDcxLDcgKzQ3
MSw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjppbml0KE5vZGUqIG5vZGUsIFByb3AKICAgICBleHRy
YWN0Rm9udFNpemVEZWx0YSgpOwogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZp
bGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpCit2b2lk
IEVkaXRpbmdTdHlsZTo6cmVtb3ZlVGV4dEZpbGxBbmRTdHJva2VDb2xvcnNJZk5lZWRlZChjb25z
dCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpCiB7CiAgICAgLy8gSWYgYSBub2RlJ3MgdGV4dCBm
aWxsIGNvbG9yIGlzIGludmFsaWQsIHRoZW4gaXRzIGNoaWxkcmVuIHVzZSAKICAgICAvLyB0aGVp
ciBmb250LWNvbG9yIGFzIHRoZWlyIHRleHQgZmlsbCBjb2xvciAodGhleSBkb24ndApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzgsNyArMTc4LDcgQEAgcHJpdmF0ZToKICAgICBFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgRWRpdGluZ1N0eWxlKENTU1Byb3BlcnR5SUQsIENT
U1ZhbHVlSUQpOwogICAgIHZvaWQgaW5pdChOb2RlKiwgUHJvcGVydGllc1RvSW5jbHVkZSk7Ci0g
ICAgdm9pZCByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKFJlbmRlclN0eWxl
Kik7CisgICAgdm9pZCByZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKGNvbnN0
IFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKICAgICB2b2lkIGV4dHJh
Y3RGb250U2l6ZURlbHRhKCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVHJpU3RhdGUgdHJp
U3RhdGVPZlN0eWxlKFQmIHN0eWxlVG9Db21wYXJlLCBTaG91bGRJZ25vcmVUZXh0T25seVByb3Bl
cnRpZXMpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MzAsOCArNDMwLDggQEAgcHVibGljOgogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB3
ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYsIFJhbmdlJiBjb250ZXh0LCBib29s
IGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CiAKICNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2Vs
ZWN0aW9uU3RhcnQoRnJhbWUqICwgTm9kZSAqJm5vZGVUb1JlbW92ZSk7Ci0gICAgdm9pZCBnZXRU
ZXh0RGVjb3JhdGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5bGUoUmVuZGVyU3R5bGUm
LCBOU011dGFibGVEaWN0aW9uYXJ5KikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiAsIE5vZGUg
KiZub2RlVG9SZW1vdmUpOworICAgIHZvaWQgZ2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVz
cGVjdGluZ1R5cGluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgTlNNdXRhYmxlRGljdGlvbmFy
eSopIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnQqIGZvbnRGb3JTZWxlY3Rp
b24oYm9vbCYpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIE5TRGljdGlvbmFyeSAqZm9udEF0
dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBTaW1wbGlmeU1hcmt1cENvbW1h
bmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBO
b2RlKiBzdGFydGluZ05vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIFJlbmRlclN0
eWxlKiBzdGFydGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgpOworICAgICAg
ICBhdXRvKiBzdGFydGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgpOwogICAg
ICAgICBpZiAoIXN0YXJ0aW5nU3R5bGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Tm9kZSogY3VycmVudE5vZGUgPSBzdGFydGluZ05vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0JKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRklYTUU6IFRoaXMgZmln
dXJlcyBvdXQgdGhlIGN1cnJlbnQgc3R5bGUgYnkgaW5zZXJ0aW5nIGEgPHNwYW4+IQotUmVuZGVy
U3R5bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogZnJhbWUsIE5vZGUg
KiZub2RlVG9SZW1vdmUpCitjb25zdCBSZW5kZXJTdHlsZSogRWRpdG9yOjpzdHlsZUZvclNlbGVj
dGlvblN0YXJ0KEZyYW1lKiBmcmFtZSwgTm9kZSAqJm5vZGVUb1JlbW92ZSkKIHsKICAgICBub2Rl
VG9SZW1vdmUgPSBudWxscHRyOwogICAgIApAQCAtNzYsNyArNzYsNyBAQCBSZW5kZXJTdHlsZSog
RWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0CiAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+cmVu
ZGVyZXIoKSA/ICZzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOwog
fQogCi12b2lkIEVkaXRvcjo6Z2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5
cGluZ1N0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVzdWx0
KSBjb25zdAordm9pZCBFZGl0b3I6OmdldFRleHREZWNvcmF0aW9uQXR0cmlidXRlc1Jlc3BlY3Rp
bmdUeXBpbmdTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIE5TTXV0YWJsZURpY3Rpb25h
cnkqIHJlc3VsdCkgY29uc3QKIHsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHls
ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudHlwaW5nU3R5bGUoKTsKICAgICBpZiAodHlwaW5nU3R5
bGUgJiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaW9zL0VkaXRvcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0JKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBA
IGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib28KIAogICAgIGlmICghbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3Zl
OwotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZt
X2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRv
KiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7
IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgRm9udCogcmVzdWx0ID0gbnVs
bHB0cjsKICAgICAgICAgaWYgKHN0eWxlKSB7CkBAIC0yMjAsNyArMjIwLDcgQEAgY29uc3QgRm9u
dCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvbwogTlNEaWN0aW9uYXJ5KiBFZGl0b3I6OmZv
bnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewogICAgIE5vZGUqIG5vZGVU
b1JlbW92ZTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0
KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOworICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxl
Y3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsKICAgICBpZiAoIXN0eWxlKQogICAg
ICAgICByZXR1cm4gbmlsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0
b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9y
TWFjLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBjb25zdCBGb250
KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vCiAKICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0
aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9k
ZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1vdmUKKyAgICAgICAgYXV0byogc3R5bGUgPSBz
dHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5v
ZGVUb1JlbW92ZQogCiAgICAgICAgIGNvbnN0IEZvbnQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAg
ICAgIGlmIChzdHlsZSkgewpAQCAtMTQ2LDcgKzE0Niw3IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6
Zm9udEZvclNlbGVjdGlvbihib28KIE5TRGljdGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRl
c0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwg
bm9kZVRvUmVtb3ZlKTsKKyAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQo
Jm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIFN0cmluZyBIVE1MVGl0bGVFbGVt
ZW50Ojp0ZXh0KCkgY29uc3QKIFN0cmluZ1dpdGhEaXJlY3Rpb24gSFRNTFRpdGxlRWxlbWVudDo6
Y29tcHV0ZWRUZXh0V2l0aERpcmVjdGlvbigpCiB7CiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBMVFI7Ci0gICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29t
cHV0ZWRTdHlsZSgpKQorICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gdGhpcy0+Y29tcHV0
ZWRTdHlsZSgpKQogICAgICAgICBkaXJlY3Rpb24gPSBjb21wdXRlZFN0eWxlLT5kaXJlY3Rpb24o
KTsKICAgICBlbHNlIHsKICAgICAgICAgYXV0byBzdHlsZSA9IHN0eWxlUmVzb2x2ZXIoKS5zdHls
ZUZvckVsZW1lbnQoKnRoaXMsIHBhcmVudEVsZW1lbnQoKSA/IHBhcmVudEVsZW1lbnQoKS0+cmVu
ZGVyU3R5bGUoKSA6IG51bGxwdHIpLnJlbmRlclN0eWxlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eQogICAgIHVwZGF0ZShzZWxlY3Rv
cik7CiB9CiAKLWlubGluZSB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5
Ojppbml0aWFsaXplKEZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgbmV3
U3R5bGUpCitpbmxpbmUgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkZvbnRQcm94eTo6
aW5pdGlhbGl6ZShGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvciwgY29uc3QgUmVuZGVyU3R5bGUm
IG5ld1N0eWxlKQogewogICAgIC8vIEJld2FyZSEgbV9mb250LmZvbnRTZWxlY3RvcigpIG1pZ2h0
IG5vdCBwb2ludCB0byBkb2N1bWVudC5mb250U2VsZWN0b3IoKSEKICAgICBBU1NFUlQobmV3U3R5
bGUuZm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKSA9PSAmZm9udFNlbGVjdG9yKTsKQEAgLTIx
OTYsNyArMjE5Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMK
ICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKTsKICAgICBkb2N1
bWVudC51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKLSAgICBpZiAoUmVuZGVyU3R5bGUqIGNvbXB1
dGVkU3R5bGUgPSBjYW52YXMoKS0+Y29tcHV0ZWRTdHlsZSgpKQorICAgIGlmIChhdXRvKiBjb21w
dXRlZFN0eWxlID0gY2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSkKICAgICAgICAgbmV3U3R5bGUt
PnNldEZvbnREZXNjcmlwdGlvbihjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVmYXVsdEZvbnREZXNj
cmlwdGlvbjsKQEAgLTIyNTksOSArMjI1OSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRUZXh0QmEKICAgICBtb2RpZmlhYmxlU3RhdGUoKS50ZXh0QmFzZWxpbmUgPSBiYXNl
bGluZTsKIH0KIAotaW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgUmVuZGVyU3R5bGUqKiBjb21w
dXRlZFN0eWxlKSBjb25zdAoraW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjp0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVy
U3R5bGUqKiBjb21wdXRlZFN0eWxlKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IChjb21wdXRlZFN0eWxlIHx8IGRpcmVjdGlvbiA9PSBEaXJlY3Rpb246OkluaGVyaXQpID8gY2Fu
dmFzKCktPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSAoY29t
cHV0ZWRTdHlsZSB8fCBkaXJlY3Rpb24gPT0gRGlyZWN0aW9uOjpJbmhlcml0KSA/IGNhbnZhcygp
LT5jb21wdXRlZFN0eWxlKCkgOiBudWxscHRyOwogICAgIGlmIChjb21wdXRlZFN0eWxlKQogICAg
ICAgICAqY29tcHV0ZWRTdHlsZSA9IHN0eWxlOwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CkBA
IC0yMzg0LDcgKzIzODQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1Rl
eHRJCiAKICAgICAvLyBGSVhNRTogTmVlZCB0byB0dXJuIG9mZiBmb250IHNtb290aGluZy4KIAot
ICAgIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBj
b21wdXRlZFN0eWxlOwogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gdG9UZXh0RGlyZWN0
aW9uKHN0YXRlKCkuZGlyZWN0aW9uLCAmY29tcHV0ZWRTdHlsZSk7CiAgICAgYm9vbCBpc1JUTCA9
IGRpcmVjdGlvbiA9PSBSVEw7CiAgICAgYm9vbCBvdmVycmlkZSA9IGNvbXB1dGVkU3R5bGUgPyBp
c092ZXJyaWRlKGNvbXB1dGVkU3R5bGUtPnVuaWNvZGVCaWRpKCkpIDogZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUs
NyBAQCBwcml2YXRlOgogICAgICAgICBGb250UHJveHkmIG9wZXJhdG9yPShjb25zdCBGb250UHJv
eHkmKTsKIAogICAgICAgICBib29sIHJlYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmZv
bnRTZWxlY3RvcigpOyB9Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZShGb250U2VsZWN0b3ImLCBS
ZW5kZXJTdHlsZSYpOworICAgICAgICB2b2lkIGluaXRpYWxpemUoRm9udFNlbGVjdG9yJiwgY29u
c3QgUmVuZGVyU3R5bGUmKTsKICAgICAgICAgRm9udE1ldHJpY3MgZm9udE1ldHJpY3MoKSBjb25z
dDsKICAgICAgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KCkgY29uc3Q7CiAgICAgICAgIGZsb2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsKQEAg
LTM4Miw3ICszODIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgYm9vbCBoYXNJbnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9Ci0gICAgVGV4
dERpcmVjdGlvbiB0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uLCBSZW5kZXJTdHlsZSoqIGNvbXB1
dGVkU3R5bGUgPSBudWxscHRyKSBjb25zdDsKKyAgICBUZXh0RGlyZWN0aW9uIHRvVGV4dERpcmVj
dGlvbihEaXJlY3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSA9IG51bGxw
dHIpIGNvbnN0OwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNv
dXJjZVByZWxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBI
VE1MUmVzb3VyY2VQcmVsb2FkZXI6OnByZWxvYWQoUHJlbAogICAgICAgICBwcmVsb2FkKFdURk1v
dmUocmVxdWVzdCkpOwogfQogCi1zdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNoZXMoRnJh
bWUqIGZyYW1lLCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNvbnN0IFN0cmluZyYgYXR0cmli
dXRlVmFsdWUpCitzdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNoZXMoRnJhbWUqIGZyYW1l
LCBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRl
VmFsdWUpCiB7CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcyA9IE1lZGlh
UXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoYXR0cmlidXRlVmFsdWUp
OwogICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgbWVkaWFRdWVyeUV2YWx1YXRvcigic2NyZWVuIiwg
ZnJhbWUsIHJlbmRlclN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Ns
aWRlclRodW1iRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODMsMjEgKzgzLDIxIEBAIFJlbmRlclNsaWRlclRodW1iOjpSZW5kZXJTbGlkZXJUaHVt
YihTbGkKIHsKIH0KIAotdm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZShS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFJlbmRlclNsaWRlclRodW1iOjp1cGRhdGVB
cHBlYXJhbmNlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAocGFy
ZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIHN0
eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7CisgICAgICAgIG11
dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOwogICAg
IGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVySG9yaXpvbnRhbFBh
cnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhvcml6b250YWxQ
YXJ0KTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShTbGlkZXJUaHVtYkhv
cml6b250YWxQYXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09
IE1lZGlhU2xpZGVyUGFydCkKLSAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhU2xp
ZGVyVGh1bWJQYXJ0KTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRp
YVNsaWRlclRodW1iUGFydCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpCi0gICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5j
ZShNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNl
dEFwcGVhcmFuY2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwogICAgIGVsc2UgaWYgKHBh
cmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyUGFy
dCkKLSAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhRnVsbFNjcmVlblZvbHVtZVNs
aWRlclRodW1iUGFydCk7CisgICAgICAgIG11dGFibGVTdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVk
aWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKICAgICBpZiAoc3R5bGUoKS5oYXNB
cHBlYXJhbmNlKCkpIHsKICAgICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgICAgIHRoZW1l
KCkuYWRqdXN0U2xpZGVyVGh1bWJTaXplKHN0eWxlKCksIGVsZW1lbnQoKSk7CisgICAgICAgIHRo
ZW1lKCkuYWRqdXN0U2xpZGVyVGh1bWJTaXplKG11dGFibGVTdHlsZSgpLCBlbGVtZW50KCkpOwog
ICAgIH0KIH0KIApAQCAtMTU5LDEzICsxNTksMTMgQEAgdm9pZCBSZW5kZXJTbGlkZXJDb250YWlu
ZXI6OmxheW91dCgpCiAgICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKICAgICBh
dXRvJiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KCktPnNoYWRv
d0hvc3QoKSk7CiAgICAgYm9vbCBpc1ZlcnRpY2FsID0gaGFzVmVydGljYWxBcHBlYXJhbmNlKGlu
cHV0KTsKLSAgICBzdHlsZSgpLnNldEZsZXhEaXJlY3Rpb24oaXNWZXJ0aWNhbCA/IEZsb3dDb2x1
bW4gOiBGbG93Um93KTsKKyAgICBtdXRhYmxlU3R5bGUoKS5zZXRGbGV4RGlyZWN0aW9uKGlzVmVy
dGljYWwgPyBGbG93Q29sdW1uIDogRmxvd1Jvdyk7CiAgICAgVGV4dERpcmVjdGlvbiBvbGRUZXh0
RGlyZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rpb24oKTsKICAgICBpZiAoaXNWZXJ0aWNhbCkgewog
ICAgICAgICAvLyBGSVhNRTogV29yayBhcm91bmQgcm91bmRpbmcgaXNzdWVzIGluIFJUTCB2ZXJ0
aWNhbCBzbGlkZXJzLiBXZSB3YW50IHRoZW0gdG8KICAgICAgICAgLy8gcmVuZGVyIGlkZW50aWNh
bGx5IHRvIExUUiB2ZXJ0aWNhbCBzbGlkZXJzLiBXZSBjYW4gcmVtb3ZlIHRoaXMgd29yayBhcm91
bmQgd2hlbgogICAgICAgICAvLyBzdWJwaXhlbCByZW5kZXJpbmcgaXMgZW5hYmxlZCBvbiBhbGwg
cG9ydHMuCi0gICAgICAgIHN0eWxlKCkuc2V0RGlyZWN0aW9uKExUUik7CisgICAgICAgIG11dGFi
bGVTdHlsZSgpLnNldERpcmVjdGlvbihMVFIpOwogICAgIH0KIAogICAgIFJlbmRlckJveCogdGh1
bWIgPSBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKSA/IGlucHV0LnNsaWRlclRodW1iRWxlbWVu
dCgpLT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBSZW5k
ZXJTbGlkZXJDb250YWluZXI6OmxheW91dCgpCiAKICAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5
b3V0KCk7CiAKLSAgICBzdHlsZSgpLnNldERpcmVjdGlvbihvbGRUZXh0RGlyZWN0aW9uKTsKKyAg
ICBtdXRhYmxlU3R5bGUoKS5zZXREaXJlY3Rpb24ob2xkVGV4dERpcmVjdGlvbik7CiAgICAgLy8g
VGhlc2Ugc2hvdWxkIGFsd2F5cyBleGlzdCwgdW5sZXNzIHNvbWVvbmUgbXV0YXRlcyB0aGUgc2hh
ZG93IERPTSAoZS5nLiwgaW4gdGhlIGluc3BlY3RvcikuCiAgICAgaWYgKCF0aHVtYiB8fCAhdHJh
Y2spCiAgICAgICAgIHJldHVybjsKQEAgLTU3NCw3ICs1NzQsNyBAQCBIVE1MSW5wdXRFbGVtZW50
KiBTbGlkZXJUaHVtYkVsZW1lbnQ6OmhvCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQ+KHNoYWRvd0hvc3QoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVy
VGh1bWJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHls
ZSogaG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlkZXJUaHVtYkVsZW1lbnQ6
OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxl
KiBob3N0U3R5bGUpCiB7CiAgICAgLy8gVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNvbXB1dGUgc3R5
bGUuIFRoaXMgaXMganVzdCBhIGhhY2sgdG8gcGljayBzaGFkb3cgcHNldWRvIGlkIHdoZW4gaG9z
dCBzdHlsZSBpcyBrbm93bi4KIApAQCAtNjI4LDcgKzYyOCw3IEBAIFJlbmRlclB0cjxSZW5kZXJF
bGVtZW50PiBTbGlkZXJDb250YWluZXIKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
U2xpZGVyQ29udGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwogfQogCi1PcHRpb25hbDxF
bGVtZW50U3R5bGU+IFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShS
ZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50U3R5
bGU+IFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCiB7CiAgICAgLy8gVGhpcyBk
b2Vzbid0IGFjdHVhbGx5IGNvbXB1dGUgc3R5bGUuIFRoaXMgaXMganVzdCBhIGhhY2sgdG8gcGlj
ayBzaGFkb3cgcHNldWRvIGlkIHdoZW4gaG9zdCBzdHlsZSBpcyBrbm93bi4KIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgJKHJldmlz
aW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiAjZW5kaWYK
ICAgICB2b2lkIHdpbGxEZXRhY2hSZW5kZXJlcnMoKSBvdmVycmlkZTsKIAotICAgIE9wdGlvbmFs
PEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5
bGUqKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21T
dHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikgb3ZlcnJpZGU7CiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgdm9pZCBzdGFydERyYWdnaW5nKCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgaW5saW5lIFJl
ZjxTbGlkZXJUaHVtYkVsZW1lbnQ+IFNsaWRlclRodQogY2xhc3MgUmVuZGVyU2xpZGVyVGh1bWIg
ZmluYWwgOiBwdWJsaWMgUmVuZGVyQmxvY2tGbG93IHsKIHB1YmxpYzoKICAgICBSZW5kZXJTbGlk
ZXJUaHVtYihTbGlkZXJUaHVtYkVsZW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKLSAgICB2b2lkIHVw
ZGF0ZUFwcGVhcmFuY2UoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0
ZUFwcGVhcmFuY2UoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogcHJpdmF0ZToK
ICAgICBib29sIGlzU2xpZGVyVGh1bWIoKSBjb25zdCBvdmVycmlkZTsKQEAgLTEzNSw3ICsxMzUs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNsaWRlckNvbnRhaW5lckVsZW1lbnQoRG9jdW1l
bnQmKTsKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVy
KFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAg
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwg
UmVuZGVyU3R5bGUqKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29s
dmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKikgb3Zl
cnJpZGU7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgQXRvbWljU3RyaW5nIG1fc2hhZG93UHNldWRvSWQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1
LDcgQEAgUmVmPFRleHRDb250cm9sSW5uZXJFbGVtZW50PiBUZXh0Q29udHJvbAogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFRleHRDb250cm9sSW5uZXJFbGVtZW50KGRvY3VtZW50KSk7CiB9CiAK
LU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVD
dXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCitP
cHRpb25hbDxFbGVtZW50U3R5bGU+IFRleHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3Vz
dG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9z
dFN0eWxlKQogewogICAgIGF1dG8gaW5uZXJDb250YWluZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGVQdHIoKTsKICAgICBpbm5lckNvbnRhaW5lclN0eWxlLT5pbmhlcml0RnJvbShzaGFkb3dI
b3N0U3R5bGUpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9j
ayogVGV4dENvbnRyb2wKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2xJbm5l
ckJsb2NrPihIVE1MRGl2RWxlbWVudDo6cmVuZGVyZXIoKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUo
UmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxl
bWVudFN0eWxlPiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUp
CiB7CiAgICAgYXV0byBzdHlsZSA9IGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
Pigqc2hhZG93SG9zdCgpKS5jcmVhdGVJbm5lclRleHRTdHlsZSgqc2hhZG93SG9zdFN0eWxlKTsK
ICAgICByZXR1cm4gRWxlbWVudFN0eWxlKHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU3R5bGU+KFdU
Rk1vdmUoc3R5bGUpKSk7CkBAIC0xNDksNyArMTQ5LDcgQEAgVGV4dENvbnRyb2xQbGFjZWhvbGRl
ckVsZW1lbnQ6OlRleHRDb250cgogICAgIHNldEhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNr
cygpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IFRleHRDb250cm9sUGxhY2Vob2xkZXJF
bGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5k
ZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBUZXh0Q29u
dHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKIHsK
ICAgICBhdXRvIHN0eWxlID0gcmVzb2x2ZVN0eWxlKCZwYXJlbnRTdHlsZSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBA
QCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBUZXh0Q29udHJvbElubmVyRWxlbWVudChEb2N1
bWVudCYpOwotICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJl
bmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3Zl
cnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9z
dFN0eWxlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzTW91c2VGb2N1c2FibGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpAQCAtNjUsNyArNjUsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChEb2N1bWVudCYp
OwogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVu
ZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0gICAgT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OwogICAgIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgYm9vbCBpc1RleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIH07CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgVGV4dENvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQoRG9jdW1lbnQmKTsKICAg
ICAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHls
ZSkgb3ZlcnJpZGU7CiB9OwogCiBjbGFzcyBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50
IGZpbmFsIDogcHVibGljIEhUTUxEaXZFbGVtZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4MSw3ICsxMzgxLDcgQEAgT3B0
aW9uYWxDdXJzb3IgRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzbwogICAgICAgICByZXR1cm4gTm9D
dXJzb3JDaGFuZ2U7CiAKICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlciA/ICZyZW5kZXJlci0+c3R5bGUoKSA6IG51
bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJlciA/ICZyZW5kZXJlci0+c3R5bGUoKSA6
IG51bGxwdHI7CiAgICAgYm9vbCBob3Jpem9udGFsVGV4dCA9ICFzdHlsZSB8fCBzdHlsZS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKTsKICAgICBjb25zdCBDdXJzb3ImIGlCZWFtID0gaG9yaXpv
bnRhbFRleHQgPyBpQmVhbUN1cnNvcigpIDogdmVydGljYWxUZXh0Q3Vyc29yKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTAgKzcwLDEwIEBAIHN0YXRpYyBpbmxp
bmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlvbigKICAgICByZXR1cm4gZmxvb3IobnVtU3RlcHMg
KiB0KSAvIG51bVN0ZXBzOwogfQogCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKEFuaW1h
dGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wb3NpdGVBbmltYXRpb24pCitBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNv
bnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9z
aXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgOiBtX29iamVjdChyZW5kZXJl
cikKICAgICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAs
IG1fYW5pbWF0aW9uKGFuaW1hdGlvbikKKyAgICAsIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8QW5p
bWF0aW9uJj4oYW5pbWF0aW9uKSkKIHsKICAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBkdXJhdGlv
bgogICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA+IDApCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgQW5pbWF0aW9uQmFzZSA6IHB1
YmxpYyBSZWZDb3VudGVkPAogICAgIGZyaWVuZCBjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbjsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBBbmltYXRpb25CYXNl
KEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCosIENvbXBvc2l0ZUFuaW1hdGlv
biopOworICAgIEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBSZW5k
ZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKik7CiAgICAgdmlydHVhbCB+QW5pbWF0aW9u
QmFzZSgpIHsgfQogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBtX29iamVjdDsgfQpAQCAtMTM4LDcgKzEzOCw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUgcHJv
Z3Jlc3MoZG91YmxlIHNjYWxlID0gMSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1
bmN0aW9uKiA9IG51bGxwdHIpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBh
bmltYXRpb24gc3RhdGUgY2hhbmdlZC4KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShDb21wb3Np
dGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIC8qY3VycmVu
dFN0eWxlKi8sIFJlbmRlclN0eWxlKiAvKnRhcmdldFN0eWxlKi8sIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFu
aW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0
eWxlKiAvKmN1cnJlbnRTdHlsZSovLCBjb25zdCBSZW5kZXJTdHlsZSogLyp0YXJnZXRTdHlsZSov
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgY29tcHV0
ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCA9IDA7CkBAIC0x
NTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFu
aW1hdGlvbiYpIGNvbnN0OwogCiAgICAgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2FuaW1hdGlvbjsgfQotICAgIHZvaWQgc2V0QW5pbWF0aW9uKEFuaW1hdGlv
biYgYW5pbWF0aW9uKSB7IG1fYW5pbWF0aW9uID0gYW5pbWF0aW9uOyB9CisgICAgdm9pZCBzZXRB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgbV9hbmltYXRpb24gPSBjb25z
dF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbik7IH0KIAogICAgIC8vIFJldHVybiB0cnVlIGlm
IHRoaXMgYW5pbWF0aW9uIGlzIG92ZXJyaWRkZW4uIFRoaXMgd2lsbCBvbmx5IGJlIHRoZSBjYXNl
IGZvcgogICAgIC8vIEltcGxpY2l0QW5pbWF0aW9ucyBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUg
d2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGZvcmNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw5ICs1OTMsOSBAQCB2b2lkIEFuaW1hdGlv
bkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvCiAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5
bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwogfQogCi1ib29sIEFuaW1hdGlvbkNvbnRy
b2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlclN0
eWxlJiBuZXdTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHls
ZSkKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRT
dHlsZSA9IHJlbmRlcmVyLmhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZyZW5kZXJlci5zdHlsZSgp
IDogbnVsbHB0cjsKKyAgICBhdXRvKiBvbGRTdHlsZSA9IHJlbmRlcmVyLmhhc0luaXRpYWxpemVk
U3R5bGUoKSA/ICZyZW5kZXJlci5zdHlsZSgpIDogbnVsbHB0cjsKICAgICBpZiAoKCFvbGRTdHls
ZSB8fCAoIW9sZFN0eWxlLT5hbmltYXRpb25zKCkgJiYgIW9sZFN0eWxlLT50cmFuc2l0aW9ucygp
KSkgJiYgKCFuZXdTdHlsZS5hbmltYXRpb25zKCkgJiYgIW5ld1N0eWxlLnRyYW5zaXRpb25zKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgfkFuaW1hdGlvbkNv
bnRyb2xsZXIoKTsKIAogICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50Jik7
Ci0gICAgYm9vbCB1cGRhdGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmLCBSZW5kZXJTdHlsZSYg
bmV3U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpOwor
ICAgIGJvb2wgdXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5
bGUmIG5ld1N0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxl
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGVGb3JS
ZW5kZXJlcihSZW5kZXJFbGVtZW50Jik7CiAKICAgICAvLyBJZiBwb3NzaWJsZSwgY29tcHV0ZSB0
aGUgdmlzdWFsIGV4dGVudCBvZiBhbnkgdHJhbnNmb3JtIGFuaW1hdGlvbiBvbiB0aGUgZ2l2ZW4g
cmVuZGVyZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzcsNyArNzcsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJlcigp
CiAgICAgfQogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMo
UmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSkKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFu
c2l0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJl
bnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogewogICAgIC8vIElmIGN1
cnJlbnRTdHlsZSBpcyBudWxsIG9yIHRoZXJlIGFyZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25z
LCBqdXN0IHNraXAgaXQKICAgICBpZiAoIWN1cnJlbnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLT50
cmFuc2l0aW9ucygpICYmIG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSkKQEAgLTkzLDcgKzkzLDcg
QEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpbwogICAgIC8vIENoZWNr
IHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYWN0aXZlIHRyYW5zaXRpb25zCiAgICAg
aWYgKHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCktPnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBBbmltYXRpb24mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygp
LT5hbmltYXRpb24oaSk7CisgICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJnZXRTdHls
ZS0+dHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9uKGkpOwogICAgICAgICAgICAgYm9vbCBpc0FjdGl2
ZVRyYW5zaXRpb24gPSAhbV9zdXNwZW5kZWQgJiYgKGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFu
aW1hdGlvbi5kZWxheSgpID4gMCk7CiAKICAgICAgICAgICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9u
TW9kZSBtb2RlID0gYW5pbWF0aW9uLmFuaW1hdGlvbk1vZGUoKTsKQEAgLTEyMiw3ICsxMjIsNyBA
QCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgICAgICAg
ICAgLy8gYW5kIHdlIGhhdmUgdG8gdXNlIHRoZSB1bmFuaW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5p
bWF0aW9uLiBXZSBkbyB0aGUgdGVzdAogICAgICAgICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHVu
YW5pbWF0ZWQgc3R5bGUgaGVyZSwgYnV0IHdlICJvdmVycmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0
ZXIuCiAgICAgICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFu
aW0gPSBnZXRBbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogZnJvbVN0eWxlID0ga2V5ZnJhbWVBbmltID8ga2V5ZnJhbWVBbmltLT51bmFuaW1h
dGVkU3R5bGUoKSA6IGN1cnJlbnRTdHlsZTsKKyAgICAgICAgICAgICAgICBhdXRvKiBmcm9tU3R5
bGUgPSBrZXlmcmFtZUFuaW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHlsZSgpIDogY3Vy
cmVudFN0eWxlOwogCiAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEgY3VycmVu
dCB0cmFuc2l0aW9uIGZvciB0aGlzIHByb3AKICAgICAgICAgICAgICAgICBJbXBsaWNpdEFuaW1h
dGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wKTsKQEAgLTE5NSw3ICsxOTUs
NyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgICAgIG1f
dHJhbnNpdGlvbnMucmVtb3ZlKHByb3BlcnR5VG9SZW1vdmUpOwogfQogCi12b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUp
Cit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCiB7CiAgICAgLy8gTm90aGluZyB0byBkbyBpZiB3
ZSBkb24ndCBoYXZlIGFueSBhbmltYXRpb25zLCBhbmQgZGlkbid0IGhhdmUgYW55IGJlZm9yZQog
ICAgIGlmIChtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLT5o
YXNBbmltYXRpb25zKCkpCkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRp
b246OnVwZGF0ZUtleWZyYW1lQQogICAgIGlmICh0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpKSB7
CiAgICAgICAgIGludCBudW1BbmltcyA9IHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCktPnNpemUo
KTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAg
ICAgICBBbmltYXRpb24mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCktPmFu
aW1hdGlvbihpKTsKKyAgICAgICAgICAgIGF1dG8mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT5h
bmltYXRpb25zKCktPmFuaW1hdGlvbihpKTsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBhbmlt
YXRpb25OYW1lKGFuaW1hdGlvbi5uYW1lKCkpOwogCiAgICAgICAgICAgICBpZiAoIWFuaW1hdGlv
bi5pc1ZhbGlkQW5pbWF0aW9uKCkpCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBDb21wb3NpdGVB
bmltYXRpb246OnVwZGF0ZUtleWZyYW1lQQogICAgIHN0ZDo6c3dhcChuZXdBbmltYXRpb25zLCBt
X2tleWZyYW1lQW5pbWF0aW9ucyk7CiB9CiAKLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmlt
YXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBS
ZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJs
ZW5kZWRTdHlsZSkKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5k
ZWRTdHlsZSkKIHsKICAgICAvLyBXZSBkb24ndCBkbyBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9u
J3QgaGF2ZSBhIGN1cnJlbnRTdHlsZSAob24gc3RhcnR1cCkuCiAgICAgdXBkYXRlVHJhbnNpdGlv
bnMoJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUsICZ0YXJnZXRTdHlsZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRl
QW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgY2xlYXJSZW5kZXJlcigpOwogCi0gICAgYm9vbCBhbmltYXRlKFJlbmRlckVs
ZW1lbnQmLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5
bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGJsZW5kZWRTdHlsZSk7CisgICAgYm9v
bCBhbmltYXRlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4mIGJsZW5kZWRTdHlsZSk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBn
ZXRBbmltYXRlZFN0eWxlKCkgY29uc3Q7CiAgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zv
cm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0OwogCkBAIC04OCw4ICs4OCw4IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlJik7CiAKLSAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVsZW1lbnQqLCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwotICAg
IHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqLCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIHZvaWQgdXBk
YXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVL
ZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CiAgICAgCiAgICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEltcGxpY2l0QW5pbWF0aW9uPj4gQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFJl
ZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4+IEFuaW1hdGlvbk5hbWVNYXA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNp
dEFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oQW5p
bWF0aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5k
ZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSwgUmVuZGVy
U3R5bGUqIGZyb21TdHlsZSkKK0ltcGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbihj
b25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVy
dHksIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmlt
LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZSh0cmFu
c2l0aW9uLCByZW5kZXJlciwgY29tcEFuaW0pCiAgICAgLCBtX2Zyb21TdHlsZShSZW5kZXJTdHls
ZTo6Y2xvbmVQdHIoKmZyb21TdHlsZSkpCiAgICAgLCBtX3RyYW5zaXRpb25Qcm9wZXJ0eSh0cmFu
c2l0aW9uLnByb3BlcnR5KCkpCkBAIC02MCw3ICs2MCw3IEBAIGJvb2wgSW1wbGljaXRBbmltYXRp
b246OnNob3VsZFNlbmRFdmVudEYKICAgICByZXR1cm4gbV9vYmplY3QtPmRvY3VtZW50KCkuaGFz
TGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKIH0KIAotYm9vbCBJbXBsaWNpdEFuaW1hdGlv
bjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVu
ZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCitib29sIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRl
KENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICAvLyBJZiB3ZSBnZXQgdGhpcyBmYXIgYW5kIHRo
ZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFuaW5nIHVwIGEganVzdCBm
aW5pc2hlZCBhbmltYXRpb24uCiAgICAgLy8gU28ganVzdCByZXR1cm4uIEV2ZXJ5dGhpbmcgaXMg
YWxyZWFkeSBhbGwgY2xlYW5lZCB1cC4KQEAgLTIwNSw3ICsyMDUsNyBAQCBib29sIEltcGxpY2l0
QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2CiAgICAgcmV0dXJuIGZhbHNlOyAvLyBEaWRuJ3Qg
ZGlzcGF0Y2ggYW4gZXZlbnQKIH0KIAotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoUmVu
ZGVyU3R5bGUqIHRvKQordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoY29uc3QgUmVuZGVy
U3R5bGUqIHRvKQogewogICAgIEFTU0VSVCh0byk7CiAgICAgQVNTRVJUKG1fZnJvbVN0eWxlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmlt
YXRpb24uaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vSW1wbGljaXRBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBj
bGFzcyBSZW5kZXJFbGVtZW50OwogLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFz
cyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoQW5pbWF0aW9uJiBhbmltYXRp
b24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyU3R5bGUq
IGZyb21TdHlsZSkKKyAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29u
c3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHks
IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFu
aW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEltcGxpY2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5n
UHJvcGVydHksIHJlbmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24sIGZyb21TdHlsZSkpOwogICAg
IH07CkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGRv
dWJsZSB0aW1lT2Zmc2V0KSBvdmVycmlkZTsKICAgICB2b2lkIGVuZEFuaW1hdGlvbigpIG92ZXJy
aWRlOwogCi0gICAgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1l
bnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpIG92ZXJy
aWRlOworICAgIGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50
KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRh
cmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBv
dmVycmlkZTsKICAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0
KFJlbmRlclN0eWxlKiB0byk7CisgICAgdm9pZCByZXNldChjb25zdCBSZW5kZXJTdHlsZSogdG8p
OwogCiAgICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVj
dCYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04Nyw3ICs4Nyw3IEBAIHByb3RlY3RlZDoKICNlbmRp
ZgogCiBwcml2YXRlOgotICAgIEltcGxpY2l0QW5pbWF0aW9uKEFuaW1hdGlvbiYsIENTU1Byb3Bl
cnR5SUQsIFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJTdHlsZSop
OworICAgIEltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIENTU1Byb3BlcnR5SUQs
IFJlbmRlckVsZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBjb25zdCBSZW5kZXJTdHlsZSop
OwogICAgIHZpcnR1YWwgfkltcGxpY2l0QW5pbWF0aW9uKCk7CiAKICAgICAvLyBUaGUgdHdvIHN0
eWxlcyB0aGF0IHdlIGFyZSBibGVuZGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihBbmltYXRpb24mIGFuaW1hdGlv
biwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRl
QW5pbWF0aW9uLCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorS2V5ZnJhbWVBbmltYXRp
b246OktleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJF
bGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24s
IGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCiAgICAgOiBBbmltYXRpb25CYXNl
KGFuaW1hdGlvbiwgcmVuZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlvbikKICAgICAsIG1fa2V5ZnJh
bWVzKGFuaW1hdGlvbi5uYW1lKCkpCiAgICAgLCBtX3VuYW5pbWF0ZWRTdHlsZShSZW5kZXJTdHls
ZTo6Y2xvbmVQdHIoKnVuYW5pbWF0ZWRTdHlsZSkpCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBL
ZXlmcmFtZUFuaW1hdGlvbjo6ZmV0Y2hJbnRlcnZhbEVuZAogICAgIHByb2cgPSBwcm9ncmVzcyhz
Y2FsZSwgb2Zmc2V0LCBwcmV2S2V5ZnJhbWUudGltaW5nRnVuY3Rpb24obmFtZSgpKSk7CiB9CiAK
LWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21w
b3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0
ZWRTdHlsZSkKK2Jvb2wgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICAvLyBGaXJlIHRoZSBzdGFydCB0aW1lb3V0
IGlmIG5lZWRlZAogICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFt
ZUFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAgY2xhc3MgUmVu
ZGVyU3R5bGU7CiAvLyBBIEtleWZyYW1lQW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYW4g
ZXhwbGljaXQgYW5pbWF0aW9uIGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgogY2xhc3MgS2V5
ZnJhbWVBbmltYXRpb24gZmluYWwgOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxLZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlKEFuaW1hdGlvbiYgYW5pbWF0
aW9uLCBSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3Np
dGVBbmltYXRpb24sIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCisgICAgc3RhdGljIFJl
ZjxLZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmlt
YXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIHJlbmRl
cmVyLCBjb21wb3NpdGVBbmltYXRpb24sIHVuYW5pbWF0ZWRTdHlsZSkpOwogICAgIH0KIAotICAg
IGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKKyAgICBi
b29sIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mKSBv
dmVycmlkZTsKIAogICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExh
eW91dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKQEAgLTg4LDcgKzg4LDcgQEAgcHJvdGVjdGVkOgog
I2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgS2V5ZnJhbWVBbmltYXRpb24oQW5pbWF0aW9uJiwgUmVu
ZGVyRWxlbWVudCosIENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVk
U3R5bGUpOworICAgIEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIFJlbmRlckVs
ZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRl
ZFN0eWxlKTsKICAgICB2aXJ0dWFsIH5LZXlmcmFtZUFuaW1hdGlvbigpOwogICAgIAogICAgIC8v
IEdldCB0aGUgc3R5bGVzIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgc3Vycm91bmRpbmcgdGhlIGN1
cnJlbnQgYW5pbWF0aW9uIHRpbWUgYW5kIHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0uCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4Nyw3
ICsyODcsNyBAQCBzdGF0aWMgTm9kZSogYW5jZXN0b3JSZXNwb25kaW5nVG9TY3JvbGxXCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJlbmRlclN0eWxlJiBzdHls
ZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOwogCiAgICAgICAgIGlmIChyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYKICAg
ICAgICAgICAgIChzdHlsZS5vdmVyZmxvd1koKSA9PSBPQVVUTyB8fCBzdHlsZS5vdmVyZmxvd1ko
KSA9PSBPU0NST0xMIHx8IHN0eWxlLm92ZXJmbG93WSgpID09IE9PVkVSTEFZIHx8CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFk
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkJiBGbG93VGhyZWFkQ29udHJvbAogCiB2b2lkIEZsb3dUaHJlYWRDb250cm9s
bGVyOjpzdHlsZURpZENoYW5nZSgpCiB7Ci0gICAgUmVuZGVyU3R5bGUmIHZpZXdTdHlsZSA9IG1f
dmlldy0+c3R5bGUoKTsKKyAgICBhdXRvJiB2aWV3U3R5bGUgPSBtX3ZpZXctPnN0eWxlKCk7CiAg
ICAgZm9yIChhdXRvJiBmbG93UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0
KQogICAgICAgICBmbG93UmVuZGVyZXItPnNldFN0eWxlKFJlbmRlckZsb3dUaHJlYWQ6OmNyZWF0
ZUZsb3dUaHJlYWRTdHlsZSgmdmlld1N0eWxlKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MjgsNyArMTMyOCw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29uc3RyYWluVG9MaW5lVG9wQW4K
IHN0YXRpYyBMYXlvdXRSZWN0IGNsaXBSZWN0Rm9yTmluZVBpZWNlSW1hZ2VTdHJpcChJbmxpbmVG
bG93Qm94KiBib3gsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSwgY29uc3QgTGF5b3V0UmVj
dCYgcGFpbnRSZWN0KQogewogICAgIExheW91dFJlY3QgY2xpcFJlY3QocGFpbnRSZWN0KTsKLSAg
ICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBhdXRv
JiBzdHlsZSA9IGJveC0+cmVuZGVyZXIoKS5zdHlsZSgpOwogICAgIExheW91dEJveEV4dGVudCBv
dXRzZXRzID0gc3R5bGUuaW1hZ2VPdXRzZXRzKGltYWdlKTsKICAgICBpZiAoYm94LT5pc0hvcml6
b250YWwoKSkgewogICAgICAgICBjbGlwUmVjdC5zZXRZKHBhaW50UmVjdC55KCkgLSBvdXRzZXRz
LnRvcCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHN0YXRpYyBib29sIGJvcmRl
ck9yUGFkZGluZ0xvZ2ljYWxXaWR0aEMKIAogdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsK
LSAgICBSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOworICAgIGF1dG8mIG5ld1N0eWxl
ID0gc3R5bGUoKTsKIAogICAgIGJvb2wgaGFkVHJhbnNmb3JtID0gaGFzVHJhbnNmb3JtKCk7CiAg
ICAgYm9vbCBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrSW52YWxpZGF0ZWQgPSBmYWxzZTsKQEAg
LTI4MzcsNyArMjgzNyw3IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQoYm9v
bCAKICAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6bGluZUhlaWdodChmaXJzdExpbmUsIGRpcmVj
dGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7CiAKICAgICBpZiAoZmlyc3RMaW5lICYmIHZpZXcoKS51
c2VzRmlyc3RMaW5lUnVsZXMoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSYgcyA9IGZpcnN0TGlu
ZSA/IGZpcnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOworICAgICAgICBhdXRvJiBzID0gZmlyc3RM
aW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7CiAgICAgICAgIGlmICgmcyAhPSAmc3R5
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBzLmNvbXB1dGVkTGluZUhlaWdodCgpOwogICAgIH0K
QEAgLTI5NzYsOSArMjk3Niw5IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Zmlyc3RMaW5l
QmxvY2sKICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2s7CiB9CiAKLXN0YXRpYyBSZW5kZXJTdHls
ZSYgc3R5bGVGb3JGaXJzdExldHRlcihSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckJsb2NrLCBS
ZW5kZXJPYmplY3QqIGZpcnN0TGV0dGVyQ29udGFpbmVyKQorc3RhdGljIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZUZvckZpcnN0TGV0dGVyKFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ss
IFJlbmRlck9iamVjdCogZmlyc3RMZXR0ZXJDb250YWluZXIpCiB7Ci0gICAgUmVuZGVyU3R5bGUq
IHBzZXVkb1N0eWxlID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoRklS
U1RfTEVUVEVSLCAmZmlyc3RMZXR0ZXJDb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkpOworICAg
IGF1dG8qIHBzZXVkb1N0eWxlID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0TXV0YWJsZUNhY2hlZFBz
ZXVkb1N0eWxlKEZJUlNUX0xFVFRFUiwgJmZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVT
dHlsZSgpKTsKICAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGFuIGluaXRpYWwgbGV0dGVyIGRyb3Ag
dGhhdCBpcyA+PSAxLCB0aGVuIHdlIG5lZWQgdG8gZm9yY2UgZmxvYXRpbmcgdG8gYmUgb24uCiAg
ICAgaWYgKHBzZXVkb1N0eWxlLT5pbml0aWFsTGV0dGVyRHJvcCgpID49IDEgJiYgIXBzZXVkb1N0
eWxlLT5pc0Zsb2F0aW5nKCkpCkBAIC0zMDYxLDcgKzMwNjEsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
Ojp1cGRhdGVGaXJzdExldHRlclN0eWxlCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0
ZXIgPSBjdXJyZW50Q2hpbGQtPnBhcmVudCgpOwogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0
dGVyQ29udGFpbmVyID0gZmlyc3RMZXR0ZXItPnBhcmVudCgpOwotICAgIFJlbmRlclN0eWxlJiBw
c2V1ZG9TdHlsZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RM
ZXR0ZXJDb250YWluZXIpOworICAgIGF1dG8mIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExl
dHRlcihmaXJzdExldHRlckJsb2NrLCBmaXJzdExldHRlckNvbnRhaW5lcik7CiAgICAgQVNTRVJU
KGZpcnN0TGV0dGVyLT5pc0Zsb2F0aW5nKCkgfHwgZmlyc3RMZXR0ZXItPmlzSW5saW5lKCkpOwog
CiAgICAgaWYgKFN0eWxlOjpkZXRlcm1pbmVDaGFuZ2UoZmlyc3RMZXR0ZXItPnN0eWxlKCksIHBz
ZXVkb1N0eWxlKSA9PSBTdHlsZTo6RGV0YWNoKSB7CkBAIC0zMTAyLDcgKzMxMDIsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlclN0eWxlCiB2b2lkIFJlbmRlckJsb2NrOjpj
cmVhdGVGaXJzdExldHRlclJlbmRlcmVyKFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ss
IFJlbmRlclRleHQqIGN1cnJlbnRUZXh0Q2hpbGQpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogZmly
c3RMZXR0ZXJDb250YWluZXIgPSBjdXJyZW50VGV4dENoaWxkLT5wYXJlbnQoKTsKLSAgICBSZW5k
ZXJTdHlsZSYgcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxv
Y2ssIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKKyAgICBhdXRvJiBwc2V1ZG9TdHlsZSA9IHN0eWxl
Rm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250YWluZXIpOwog
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmaXJzdExldHRlciA9IG51bGxwdHI7CiAgICAgaWYg
KHBzZXVkb1N0eWxlLmRpc3BsYXkoKSA9PSBJTkxJTkUpCiAgICAgICAgIGZpcnN0TGV0dGVyID0g
bmV3IFJlbmRlcklubGluZShkb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y2xvbmUocHNldWRvU3R5
bGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cu
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEJsb2NrQwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBjYWxjdWxhdGVNaW5pbXVtUGFnZUhlaWdodChS
ZW5kZXJTdHlsZSYgcmVuZGVyU3R5bGUsIFJvb3RJbmxpbmVCb3gmIGxhc3RMaW5lLCBMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKK3N0YXRpYyBpbmxpbmUgTGF5b3V0
VW5pdCBjYWxjdWxhdGVNaW5pbXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJTdHlsZSYgcmVuZGVy
U3R5bGUsIFJvb3RJbmxpbmVCb3gmIGxhc3RMaW5lLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91
dFVuaXQgbGluZUJvdHRvbSkKIHsKICAgICAvLyBXZSBtYXkgcmVxdWlyZSBhIGNlcnRhaW4gbWlu
aW11bSBudW1iZXIgb2YgbGluZXMgcGVyIHBhZ2UgaW4gb3JkZXIgdG8gc2F0aXNmeQogICAgIC8v
IG9ycGhhbnMgYW5kIHdpZG93cywgYW5kIHRoYXQgbWF5IGFmZmVjdCB0aGUgbWluaW11bSBwYWdl
IGhlaWdodC4KQEAgLTM3MjMsNyArMzcyMyw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGp1
c3RDb21wdXRlZEZvbnQKICAgICBmb3IgKFJlbmRlck9iamVjdCogZGVzY2VuZGVudCA9IHRyYXZl
cnNlTmV4dCh0aGlzLCBpc05vbkJsb2Nrc09yTm9uRml4ZWRIZWlnaHRMaXN0SXRlbXMpOyBkZXNj
ZW5kZW50OyBkZXNjZW5kZW50ID0gZGVzY2VuZGVudC0+dHJhdmVyc2VOZXh0KHRoaXMsIGlzTm9u
QmxvY2tzT3JOb25GaXhlZEhlaWdodExpc3RJdGVtcykpIHsKICAgICAgICAgaWYgKGlzVmlzaWJs
ZVJlbmRlclRleHQoZGVzY2VuZGVudCkgJiYgcmVzaXplVGV4dFBlcm1pdHRlZChkZXNjZW5kZW50
KSkgewogICAgICAgICAgICAgUmVuZGVyVGV4dCYgdGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+
KCpkZXNjZW5kZW50KTsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlJiBvbGRTdHlsZSA9IHRleHQu
c3R5bGUoKTsKKyAgICAgICAgICAgIGF1dG8mIG9sZFN0eWxlID0gdGV4dC5zdHlsZSgpOwogICAg
ICAgICAgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBvbGRTdHlsZS5mb250RGVzY3JpcHRpb24o
KTsKICAgICAgICAgICAgIGZsb2F0IHNwZWNpZmllZFNpemUgPSBmb250RGVzY3JpcHRpb24uc3Bl
Y2lmaWVkU2l6ZSgpOwogICAgICAgICAgICAgZmxvYXQgc2NhbGVkU2l6ZSA9IHJvdW5kZihzcGVj
aWZpZWRTaXplICogc2NhbGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODQsNyArMzg0LDcgQEAgdm9pZCBSZW5kZXJC
b3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZgogICAgIGlmIChpc0RvY0VsZW1lbnRSZW5kZXJl
ciB8fCBpc0JvZHlSZW5kZXJlcikgewogICAgICAgICAvLyBQcm9wYWdhdGUgdGhlIG5ldyB3cml0
aW5nIG1vZGUgYW5kIGRpcmVjdGlvbiB1cCB0byB0aGUgUmVuZGVyVmlldy4KICAgICAgICAgYXV0
byogZG9jdW1lbnRFbGVtZW50UmVuZGVyZXIgPSBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgp
LT5yZW5kZXJlcigpOwotICAgICAgICBSZW5kZXJTdHlsZSYgdmlld1N0eWxlID0gdmlldygpLnN0
eWxlKCk7CisgICAgICAgIGF1dG8mIHZpZXdTdHlsZSA9IHZpZXcoKS5tdXRhYmxlU3R5bGUoKTsK
ICAgICAgICAgYm9vbCB2aWV3Q2hhbmdlZFdyaXRpbmdNb2RlID0gZmFsc2U7CiAgICAgICAgIGJv
b2wgcm9vdFN0eWxlQ2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBib29sIHZpZXdTdHlsZUNoYW5n
ZWQgPSBmYWxzZTsKQEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmCiAgICAgICAgICAgICB2aWV3U3R5bGUuc2V0RGlyZWN0aW9uKG5ld1N0
eWxlLmRpcmVjdGlvbigpKTsKICAgICAgICAgICAgIHZpZXdTdHlsZUNoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgaWYgKGlzQm9keVJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAgICAgcm9vdFJl
bmRlcmVyLT5zdHlsZSgpLnNldERpcmVjdGlvbihuZXdTdHlsZS5kaXJlY3Rpb24oKSk7CisgICAg
ICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXREaXJlY3Rpb24obmV3
U3R5bGUuZGlyZWN0aW9uKCkpOwogICAgICAgICAgICAgICAgIHJvb3RTdHlsZUNoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7CkBAIC00MDcsNyArNDA3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZgogICAgICAgICAgICAgdmlldygpLm1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgICAgIGlmIChpc0JvZHlSZW5kZXJlcikgewog
ICAgICAgICAgICAgICAgIHJvb3RTdHlsZUNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IHJvb3RSZW5kZXJlci0+c3R5bGUoKS5zZXRXcml0aW5nTW9kZShuZXdTdHlsZS53cml0aW5nTW9k
ZSgpKTsKKyAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldFdy
aXRpbmdNb2RlKG5ld1N0eWxlLndyaXRpbmdNb2RlKCkpOwogICAgICAgICAgICAgICAgIHJvb3RS
ZW5kZXJlci0+c2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKG5ld1N0eWxlLmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7CkBAIC00MzIsOCArNDMyLDggQEAgdm9pZCBSZW5kZXJCb3g6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZgogICAgICAgICAgICAgLy8gUHJvcGFnYXRlIHRoZSBi
b2R5IGZvbnQgYmFjayB1cCB0byB0aGUgUmVuZGVyVmlldyBhbmQgdXNlIGl0IGFzCiAgICAgICAg
ICAgICAvLyB0aGUgYmFzaXMgb2YgdGhlIGdyaWQuCiAgICAgICAgICAgICBpZiAobmV3U3R5bGUu
Zm9udERlc2NyaXB0aW9uKCkgIT0gdmlldygpLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCkpIHsK
LSAgICAgICAgICAgICAgICB2aWV3KCkuc3R5bGUoKS5zZXRGb250RGVzY3JpcHRpb24obmV3U3R5
bGUuZm9udERlc2NyaXB0aW9uKCkpOwotICAgICAgICAgICAgICAgIHZpZXcoKS5zdHlsZSgpLmZv
bnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAg
ICAgICAgICB2aWV3KCkubXV0YWJsZVN0eWxlKCkuc2V0Rm9udERlc2NyaXB0aW9uKG5ld1N0eWxl
LmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgICAgICB2aWV3KCkubXV0YWJsZVN0eWxl
KCkuZm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCBMYXlvdXRVbml0IFJl
bmRlckJveDo6Y29uc3RyYWluQ29udGVudEJvCiAKIFJvdW5kZWRSZWN0OjpSYWRpaSBSZW5kZXJC
b3g6OmJvcmRlclJhZGlpKCkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlz
LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKICAgICBMYXlvdXRS
ZWN0IGJvdW5kcyA9IGZyYW1lUmVjdCgpOwogCiAgICAgdW5zaWduZWQgYm9yZGVyTGVmdCA9IHN0
eWxlLmJvcmRlckxlZnRXaWR0aCgpOwpAQCAtNDgxNCw3ICs0ODE0LDcgQEAgUmVuZGVyTGF5ZXIq
IFJlbmRlckJveDo6ZW5jbG9zaW5nRmxvYXRQYQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1M
YXlvdXRSZWN0IFJlbmRlckJveDo6bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0
aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyQm94
Ojpsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAgIExheW91dFJlY3QgcmVjdCA9IHZpc3VhbE92
ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHBhcmVudFN0eWxlKTsKICAgICBpZiAoIXBhcmVudFN0
eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQpAQCAtNDgyMiw3ICs0ODIyLDcgQEAgTGF5
b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxWaXN1YWxPdmVyZgogICAgIHJldHVybiByZWN0Owog
fQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRp
b24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6
OnZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgd3JpdGluZyBtb2RlcyBvZiB0aGUgY2hp
bGQgYW5kIHBhcmVudCBtYXRjaCwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIAogICAgIC8vIGRvIGFu
eXRoaW5nIGZhbmN5LiBKdXN0IHJldHVybiB0aGUgcmVzdWx0LgpAQCAtNDg0MCw3ICs0ODQwLDcg
QEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVjdAogICAgIHJldHVybiBy
ZWN0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6bG9naWNhbExheW91dE92ZXJmbG93UmVj
dEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKK0xheW91dFJl
Y3QgUmVuZGVyQm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29u
c3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAgIExheW91dFJlY3QgcmVj
dCA9IGxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHBhcmVudFN0eWxlKTsKICAgICBp
ZiAoIXBhcmVudFN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQpAQCAtNDg0OCw3ICs0
ODQ4LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxMYXlvdXRPdmVyZgogICAgIHJl
dHVybiByZWN0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6bGF5b3V0T3ZlcmZsb3dSZWN0
Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVj
dCBSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKIHsKICAgICAvLyBPbmx5IHByb3BhZ2F0ZSBpbnRl
cmlvciBsYXlvdXQgb3ZlcmZsb3cgaWYgd2UgZG9uJ3QgY2xpcCBpdC4KICAgICBMYXlvdXRSZWN0
IHJlY3QgPSBib3JkZXJCb3hSZWN0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2MywxMCArNTYzLDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGFwcGx5VG9wTGVmdExvY2F0aW9uT2Zmc2V0V2l0aEZsaXBwaW5nKHBvaW50KTsK
ICAgICB9CiAKLSAgICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9w
YWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIExheW91dFJlY3QgdmlzdWFsT3ZlcmZs
b3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBMYXlvdXRSZWN0
IGxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNv
bnN0OwotICAgIExheW91dFJlY3QgbGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKyAgICBMYXlvdXRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJl
Y3QgdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqKSBj
b25zdDsKKyAgICBMYXlvdXRSZWN0IGxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdh
dGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJlY3QgbGF5b3V0T3Zl
cmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogICAg
IGJvb2wgaGFzUmVuZGVyT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93OyB9ICAg
IAogICAgIGJvb2wgaGFzVmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93
ICYmICFib3JkZXJCb3hSZWN0KCkuY29udGFpbnMobV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dS
ZWN0KCkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MSw3
ICs1ODEsNyBAQCBSb3VuZGVkUmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6YmFja2dyCiAgICAg
cmV0dXJuIGdldEJhY2tncm91bmRSb3VuZGVkUmVjdChib3JkZXJSZWN0LCBib3gsIGJveFNpemUu
d2lkdGgoKSwgYm94U2l6ZS5oZWlnaHQoKSwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgaW5jbHVk
ZUxvZ2ljYWxSaWdodEVkZ2UpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUpCitz
dGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgY29uc3QgU2hhZG93RGF0
YSogYm94U2hhZG93ID0gc3R5bGUtPmJveFNoYWRvdygpOwogICAgIHdoaWxlIChib3hTaGFkb3ct
PnN0eWxlKCkgIT0gTm9ybWFsKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJ1dHRvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJ1dHRvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCdXR0b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQg
UmVuZGVyQnV0dG9uOjphZGRDaGlsZChSZW5kZXJPYmplY3QKICAgICAgICAgLy8gQ3JlYXRlIGFu
IGFub255bW91cyBibG9jay4KICAgICAgICAgQVNTRVJUKCFmaXJzdENoaWxkKCkpOwogICAgICAg
ICBtX2lubmVyID0gY3JlYXRlQW5vbnltb3VzQmxvY2soc3R5bGUoKS5kaXNwbGF5KCkpOwotICAg
ICAgICBzZXR1cElubmVyU3R5bGUoJm1faW5uZXItPnN0eWxlKCkpOworICAgICAgICBzZXR1cElu
bmVyU3R5bGUoJm1faW5uZXItPm11dGFibGVTdHlsZSgpKTsKICAgICAgICAgUmVuZGVyRmxleGli
bGVCb3g6OmFkZENoaWxkKG1faW5uZXIpOwogICAgIH0KICAgICAKQEAgLTk3LDkgKzk3LDkgQEAg
dm9pZCBSZW5kZXJCdXR0b246OnN0eWxlV2lsbENoYW5nZShTdHlsZQogICAgICAgICAvLyBpdCBy
aWdodCBiZWxvdy4gSGVyZSB3ZSBjaGFuZ2UgaXQgYmFjayB0byAwIHRvIGF2b2lkIGdldHRpbmcg
YSBzcHVyaW91cyBsYXlvdXQgaGludAogICAgICAgICAvLyBiZWNhdXNlIG9mIHRoZSBkaWZmZXJl
bmNlLiBTYW1lIGdvZXMgZm9yIHRoZSBvdGhlciBwcm9wZXJ0aWVzLgogICAgICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIGhhY2sgdW5uZWNlc3NhcnkuCi0gICAgICAgIG1faW5uZXItPnN0eWxlKCku
c2V0RmxleEdyb3cobmV3U3R5bGUuaW5pdGlhbEZsZXhHcm93KCkpOwotICAgICAgICBtX2lubmVy
LT5zdHlsZSgpLnNldE1hcmdpblRvcChuZXdTdHlsZS5pbml0aWFsTWFyZ2luKCkpOwotICAgICAg
ICBtX2lubmVyLT5zdHlsZSgpLnNldE1hcmdpbkJvdHRvbShuZXdTdHlsZS5pbml0aWFsTWFyZ2lu
KCkpOworICAgICAgICBtX2lubmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRGbGV4R3JvdyhuZXdTdHls
ZS5pbml0aWFsRmxleEdyb3coKSk7CisgICAgICAgIG1faW5uZXItPm11dGFibGVTdHlsZSgpLnNl
dE1hcmdpblRvcChuZXdTdHlsZS5pbml0aWFsTWFyZ2luKCkpOworICAgICAgICBtX2lubmVyLT5t
dXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5Cb3R0b20obmV3U3R5bGUuaW5pdGlhbE1hcmdpbigpKTsK
ICAgICB9CiAgICAgUmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZShkaWZmLCBuZXdTdHlsZSk7
CiB9CkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBSZW5kZXJCdXR0b246OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRAogICAgIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7
CiAKICAgICBpZiAobV9pbm5lcikgLy8gUmVuZGVyQmxvY2sgaGFuZGxlZCB1cGRhdGluZyB0aGUg
YW5vbnltb3VzIGJsb2NrJ3Mgc3R5bGUuCi0gICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5l
ci0+c3R5bGUoKSk7CisgICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5lci0+bXV0YWJsZVN0
eWxlKCkpOwogfQogCiB2b2lkIFJlbmRlckJ1dHRvbjo6c2V0dXBJbm5lclN0eWxlKFJlbmRlclN0
eWxlKiBpbm5lclN0eWxlKSAKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6
bGF5b3V0KCkKICAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7CiAKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIG5vdCBiZSBhZGp1c3Rpbmcgc3R5bGVzIGR1cmluZyBsYXlvdXQuIFNlZSA8
cmRhcjovL3Byb2JsZW0vNzY3NTQ5Mz4uCi0gICAgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJvdW5k
Qm9yZGVyUmFkaXVzKHN0eWxlKCksICp0aGlzKTsKKyAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0
Um91bmRCb3JkZXJSYWRpdXMobXV0YWJsZVN0eWxlKCksICp0aGlzKTsKIH0KICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2NSw3ICsxNjUsNyBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb250ZW50SGVpZ2h0Rm9yQ2hp
bGQoCiAKIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpzdHlsZVdpbGxDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkKIHsKLSAg
ICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkgPyAmc3R5bGUo
KSA6IG51bGxwdHI7CisgICAgYXV0byogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0eWxlKCkg
PyAmc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKG9sZFN0eWxlICYmICFvbGRTdHlsZS0+bGlu
ZUNsYW1wKCkuaXNOb25lKCkgJiYgbmV3U3R5bGUubGluZUNsYW1wKCkuaXNOb25lKCkpCiAgICAg
ICAgIGNsZWFyTGluZUNsYW1wKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDExICsyMDUs
NiBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gUmVuZGVyRWxlbWVudDo6CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLWVudW0gU3R5bGVDYWNoZVN0YXRlIHsKLSAgICBDYWNoZWQsCi0gICAg
VW5jYWNoZWQKLX07Ci0KIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRWxlbWVu
dDo6dW5jYWNoZWRGaXJzdExpbmVTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAg
ICAgaWYgKCF2aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpCkBAIC0yMjEsMTQgKzIxNiwxNCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVsZW1lCiAgICAgICAgIGlmIChS
ZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2sgPSByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmZp
cnN0TGluZUJsb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gZmlyc3RMaW5lQmxvY2stPmdldFVu
Y2FjaGVkUHNldWRvU3R5bGUoUHNldWRvU3R5bGVSZXF1ZXN0KEZJUlNUX0xJTkUpLCBzdHlsZSwg
Zmlyc3RMaW5lQmxvY2sgPT0gdGhpcyA/IHN0eWxlIDogbnVsbHB0cik7CiAgICAgfSBlbHNlIGlm
ICghcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5pc0Fub255bW91cygpICYmIHJlbmRlcmVyRm9y
Rmlyc3RMaW5lU3R5bGUuaXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUgPSByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExp
bmVTdHlsZSgpOworICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IHJlbmRlcmVyRm9yRmlyc3RM
aW5lU3R5bGUucGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGlmICgmcGFyZW50
U3R5bGUgIT0gJnJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCktPnN0eWxlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5nZXRVbmNhY2hlZFBz
ZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChGSVJTVF9MSU5FX0lOSEVSSVRFRCksICZwYXJl
bnRTdHlsZSwgc3R5bGUpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVuZGVy
U3R5bGUqIFJlbmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TGluZVN0eWxlKCkgY29uc3QKK2NvbnN0
IFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKHZpZXcoKS51c2VzRmlyc3RMaW5lUnVsZXMoKSk7CiAKQEAgLTIzOCwx
MCArMjMzLDEwIEBAIFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpjYWNoZWRGaXJzdEwKICAg
ICAgICAgaWYgKFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jayA9IHJlbmRlcmVyRm9yRmlyc3RM
aW5lU3R5bGUuZmlyc3RMaW5lQmxvY2soKSkKICAgICAgICAgICAgIHJldHVybiBmaXJzdExpbmVC
bG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTElORSwgJnN0eWxlKCkpOwogICAgIH0g
ZWxzZSBpZiAoIXJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuaXNBbm9ueW1vdXMoKSAmJiByZW5k
ZXJlckZvckZpcnN0TGluZVN0eWxlLmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgUmVuZGVy
U3R5bGUmIHBhcmVudFN0eWxlID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+
Zmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAgYXV0byYgcGFyZW50U3R5bGUgPSByZW5kZXJlckZv
ckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBpZiAo
JnBhcmVudFN0eWxlICE9ICZyZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5zdHls
ZSgpKSB7CiAgICAgICAgICAgICAvLyBBIGZpcnN0LWxpbmUgc3R5bGUgaXMgaW4gZWZmZWN0LiBD
YWNoZSBhIGZpcnN0LWxpbmUgc3R5bGUgZm9yIG91cnNlbHZlcy4KLSAgICAgICAgICAgIHJlbmRl
cmVyRm9yRmlyc3RMaW5lU3R5bGUuc3R5bGUoKS5zZXRIYXNQc2V1ZG9TdHlsZShGSVJTVF9MSU5F
X0lOSEVSSVRFRCk7CisgICAgICAgICAgICByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLm1fc3R5
bGUuc2V0SGFzUHNldWRvU3R5bGUoRklSU1RfTElORV9JTkhFUklURUQpOwogICAgICAgICAgICAg
cmV0dXJuIHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoRklS
U1RfTElORV9JTkhFUklURUQsICZwYXJlbnRTdHlsZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0y
NDksNyArMjQ0LDcgQEAgUmVuZGVyU3R5bGUqIFJlbmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TAog
ICAgIHJldHVybiAmc3R5bGUoKTsKIH0KIAotUmVuZGVyU3R5bGUmIFJlbmRlckVsZW1lbnQ6OmZp
cnN0TGluZVN0eWxlKCkgY29uc3QKK2NvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJFbGVtZW50Ojpm
aXJzdExpbmVTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHZpZXcoKS51c2VzRmlyc3RMaW5l
UnVsZXMoKSA/ICpjYWNoZWRGaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsKIH0KQEAgLTgwNiw3
ICs4MDEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmVuZGVyZXJIYXNCYWNrZ3JvdW5kCiAKIHZv
aWQgUmVuZGVyRWxlbWVudDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
ID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8q
IG9sZFN0eWxlID0gaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnN0eWxlKCkgOiBudWxscHRyOwog
ICAgIGlmIChvbGRTdHlsZSkgewogICAgICAgICAvLyBJZiBvdXIgei1pbmRleCBjaGFuZ2VzIHZh
bHVlIG9yIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8gZGly
dHkgb3VyIHN0YWNraW5nIGNvbnRleHQncyB6LW9yZGVyIGxpc3QuCkBAIC0xNTM1LDcgKzE1MzAs
MjIgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjphZGRDb250cm9sU3RhdGVzRm9yUgogICAgIGNvbnRy
b2xTdGF0ZXNSZW5kZXJlck1hcCgpLmFkZChvLCBzdGF0ZXMpOwogfQogCi1SZW5kZXJTdHlsZSog
UmVuZGVyRWxlbWVudDo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0Citjb25zdCBSZW5kZXJTdHlsZSogUmVuZGVyRWxl
bWVudDo6Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpIGNvbnN0Cit7CisgICAgaWYgKHBzZXVkbyA8IEZJUlNUX0lOVEVS
TkFMX1BTRVVET0lEICYmICFzdHlsZSgpLmhhc1BzZXVkb1N0eWxlKHBzZXVkbykpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgUmVuZGVyU3R5bGUqIGNhY2hlZFN0eWxlID0gc3R5bGUo
KS5nZXRDYWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG8pOworICAgIGlmIChjYWNoZWRTdHlsZSkKKyAg
ICAgICAgcmV0dXJuIGNhY2hlZFN0eWxlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiByZXN1bHQgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVxdWVzdChw
c2V1ZG8pLCBwYXJlbnRTdHlsZSk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUmPihtX3N0eWxlKS5hZGRDYWNoZWRQc2V1ZG9TdHlsZShXVEZN
b3ZlKHJlc3VsdCkpOworICAgIHJldHVybiBudWxscHRyOworfQorCitSZW5kZXJTdHlsZSogUmVu
ZGVyRWxlbWVudDo6Z2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkbywg
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmIChwc2V1ZG8gPCBGSVJT
VF9JTlRFUk5BTF9QU0VVRE9JRCAmJiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG8pKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE1NDYsMTEgKzE1NTYsMTEgQEAgUmVuZGVyU3R5
bGUqIFJlbmRlckVsZW1lbnQ6OmdldENhY2hlZFBzZQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiByZXN1bHQgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb1N0eWxlUmVx
dWVzdChwc2V1ZG8pLCBwYXJlbnRTdHlsZSk7CiAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0
dXJuIHN0eWxlKCkuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAg
ICAgcmV0dXJuIG1fc3R5bGUuYWRkQ2FjaGVkUHNldWRvU3R5bGUoV1RGTW92ZShyZXN1bHQpKTsK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBS
ZW5kZXJFbGVtZW50OjpnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKGNvbnN0IFBzZXVkb1N0eWxlUmVx
dWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRl
clN0eWxlKiBvd25TdHlsZSkgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVu
ZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlcXVl
c3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogb3duU3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHBzZXVkb1N0eWxl
UmVxdWVzdC5wc2V1ZG9JZCA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEICYmICFvd25TdHlsZSAm
JiAhc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwNjYsNyArMjA3Niw3IEBAIHZvaWQgUmVuZGVy
RWxlbWVudDo6cGFpbnRPdXRsaW5lKFBhaW50SW4KICAgICBpZiAoIWhhc091dGxpbmUoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwor
ICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIGZsb2F0IG91dGxpbmVXaWR0aCA9
IGZsb29yVG9EZXZpY2VQaXhlbChzdHlsZVRvVXNlLm91dGxpbmVXaWR0aCgpLCBkb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIGZsb2F0IG91dGxpbmVPZmZzZXQgPSBmbG9vclRv
RGV2aWNlUGl4ZWwoc3R5bGVUb1VzZS5vdXRsaW5lT2Zmc2V0KCksIGRvY3VtZW50KCkuZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsMTEgQEAgcHVibGljOgog
CiAgICAgYm9vbCBoYXNJbml0aWFsaXplZFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbml0
aWFsaXplZFN0eWxlOyB9CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVy
biBjb25zdF9jYXN0PFJlbmRlclN0eWxlJj4obV9zdHlsZSk7IH0KLSAgICBSZW5kZXJTdHlsZSYg
Zmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGlu
ZVN0eWxlKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogU3R5bGUgc2hvdWxkbid0IGJlIG11dGF0
ZWQuCisgICAgUmVuZGVyU3R5bGUmIG11dGFibGVTdHlsZSgpIHsgcmV0dXJuIG1fc3R5bGU7IH0K
IAogICAgIHZvaWQgaW5pdGlhbGl6ZVN0eWxlKCk7CiAKQEAgLTUyLDggKzU1LDkgQEAgcHVibGlj
OgogCiAgICAgLy8gVGhlIHBzZXVkbyBlbGVtZW50IHN0eWxlIGNhbiBiZSBjYWNoZWQgb3IgdW5j
YWNoZWQuICBVc2UgdGhlIGNhY2hlZCBtZXRob2QgaWYgdGhlIHBzZXVkbyBlbGVtZW50IGRvZXNu
J3QgcmVzcGVjdAogICAgIC8vIGFueSBwc2V1ZG8gY2xhc3NlcyAoYW5kIHRoZXJlZm9yZSBoYXMg
bm8gY29uY2VwdCBvZiBjaGFuZ2luZyBzdGF0ZSkuCi0gICAgUmVuZGVyU3R5bGUqIGdldENhY2hl
ZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRy
KSBjb25zdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldFVuY2FjaGVkUHNl
dWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gbnVsbHB0ciwgUmVuZGVyU3R5bGUqIG93blN0eWxlID0gbnVsbHB0cikgY29uc3Q7Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKSBjb25zdDsKKyAgICBSZW5kZXJT
dHlsZSogZ2V0TXV0YWJsZUNhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0Jiwg
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0ciwgY29uc3QgUmVuZGVyU3R5
bGUqIG93blN0eWxlID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICAvLyBUaGlzIGlzIG51bGwgZm9y
IGFub255bW91cyByZW5kZXJlcnMuCiAgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PEVsZW1lbnQ+KFJlbmRlck9iamVjdDo6bm9kZSgpKTsgfQpAQCAtMjk4LDcg
KzMwMiw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFN0eWxlRGlmZmVyZW5jZSBhZGp1c3RT
dHlsZURpZmZlcmVuY2UoU3R5bGVEaWZmZXJlbmNlLCB1bnNpZ25lZCBjb250ZXh0U2Vuc2l0aXZl
UHJvcGVydGllcykgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUqIGNhY2hlZEZpcnN0TGluZVN0eWxl
KCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNhY2hlZEZpcnN0TGluZVN0eWxlKCkg
Y29uc3Q7CiAKICAgICB2b2lkIG5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUoQ2FjaGVk
SW1hZ2UmKSBmaW5hbDsKIApAQCAtNDUwLDE0ICs0NTQsMTQgQEAgaW5saW5lIGJvb2wgUmVuZGVy
T2JqZWN0Ojppc1JlbmRlcklubGluZQogICAgIHJldHVybiBpczxSZW5kZXJFbGVtZW50PigqdGhp
cykgJiYgZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnRoaXMpLmlzUmVuZGVySW5saW5lKCk7CiB9
CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpzdHlsZSgpIGNvbnN0Citpbmxp
bmUgY29uc3QgUmVuZGVyU3R5bGUmIFJlbmRlck9iamVjdDo6c3R5bGUoKSBjb25zdAogewogICAg
IGlmIChpc1RleHQoKSkKICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zdHlsZSgpOwogICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykuc3R5bGUoKTsKIH0KIAotaW5saW5l
IFJlbmRlclN0eWxlJiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QKK2lubGlu
ZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZSgpIGNvbnN0
CiB7CiAgICAgaWYgKGlzVGV4dCgpKQogICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmZpcnN0TGlu
ZVN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMiw4
ICs1MjIsOCBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQoKQogICAgIExheW91
dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksICp0aGlzLCBsb2NhdGlvbk9mZnNl
dCgpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGUoKS5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKTsKICAgICAKICAgICBjaGlsZEJveC5zZXRMb2NhdGlvbihM
YXlvdXRQb2ludChib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSArIExheW91dFNpemUocGFkZGlu
Z0xlZnQoKSwgcGFkZGluZ1RvcCgpKSk7Ci0gICAgY2hpbGRCb3guc3R5bGUoKS5zZXRIZWlnaHQo
TGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgY2hpbGRCb3guc3R5bGUoKS5z
ZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGNoaWxkQm94Lm11
dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
KyAgICBjaGlsZEJveC5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0
aCgpLCBGaXhlZCkpOwogICAgIGNoaWxkQm94LnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
CiAgICAgY2hpbGRCb3gubGF5b3V0KCk7CiAgICAgY2xlYXJDaGlsZE5lZWRzTGF5b3V0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShy
ZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1Ro
cmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgUmVuZGVyRmxvd1RocmVh
ZDo6UmVuZGVyRmxvd1RocmVhZChEb2N1bQogICAgIHNldEZsb3dUaHJlYWRTdGF0ZShJbnNpZGVP
dXRPZkZsb3dUaHJlYWQpOwogfQogCi1SZW5kZXJTdHlsZSBSZW5kZXJGbG93VGhyZWFkOjpjcmVh
dGVGbG93VGhyZWFkU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorUmVuZGVyU3R5bGUg
UmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRlRmxvd1RocmVhZFN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSkKIHsKICAgICBhdXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpOwogICAgIG5ld1N0eWxlLmluaGVyaXRGcm9tKHBhcmVudFN0eWxlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBk
ZXNjZW5kYW50IGJveCdzIGxheW91dCBpcyBmaW5pc2hlZCBhbmQgaXQgaGFzIGJlZW4gcG9zaXRp
b25lZCB3aXRoaW4gaXRzIGNvbnRhaW5lci4KICAgICB2aXJ0dWFsIHZvaWQgZmxvd1RocmVhZERl
c2NlbmRhbnRCb3hMYWlkT3V0KFJlbmRlckJveCopIHsgfQogCi0gICAgc3RhdGljIFJlbmRlclN0
eWxlIGNyZWF0ZUZsb3dUaHJlYWRTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAg
IHN0YXRpYyBSZW5kZXJTdHlsZSBjcmVhdGVGbG93VGhyZWFkU3R5bGUoY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcxNiw4ICs3MTYsOCBAQCB2b2lkIFJlbmRlckltYWdlOjpsYXlvdXRTaGFkb3dDb250cm9s
cyhjCiAKICAgICBpZiAoc2hhZG93Q29udHJvbHNOZWVkQ3VzdG9tTGF5b3V0TWV0cmljcygpKSB7
CiAgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldExvY2F0aW9uKExheW91dFBvaW50KGJvcmRl
ckxlZnQoKSwgYm9yZGVyVG9wKCkpICsgTGF5b3V0U2l6ZShwYWRkaW5nTGVmdCgpLCBwYWRkaW5n
VG9wKCkpKTsKLSAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVu
Z3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgICAgIGNvbnRyb2xzUmVuZGVyZXIt
PnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKG5ld1NpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICAg
ICAgY29udHJvbHNSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aChuZXdT
aXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgICAgICBjb250cm9sc1JlbmRlcmVyLT5tdXRhYmxl
U3R5bGUoKS5zZXRXaWR0aChMZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwogICAgIH0K
IAogICAgIGNvbnRyb2xzUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3R5bGVE
aWRDaGFuZ2UoU3R5bGVECiAgICAgLy8gZS5nLiwgPGZvbnQ+Zm9vIDxoND5nb288L2g0PiBtb288
L2ZvbnQ+LiAgVGhlIDxmb250PiBpbmxpbmVzIGJlZm9yZQogICAgIC8vIGFuZCBhZnRlciB0aGUg
YmxvY2sgc2hhcmUgdGhlIHNhbWUgc3R5bGUsIGJ1dCB0aGUgYmxvY2sgZG9lc24ndAogICAgIC8v
IG5lZWQgdG8gcGFzcyBpdHMgc3R5bGUgb24gdG8gYW55b25lIGVsc2UuCi0gICAgUmVuZGVyU3R5
bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAg
ICAgUmVuZGVySW5saW5lKiBjb250aW51YXRpb24gPSBpbmxpbmVFbGVtZW50Q29udGludWF0aW9u
KCk7CiAgICAgaWYgKGNvbnRpbnVhdGlvbikgewogICAgICAgICBmb3IgKFJlbmRlcklubGluZSog
Y3VyckNvbnQgPSBjb250aW51YXRpb247IGN1cnJDb250OyBjdXJyQ29udCA9IGN1cnJDb250LT5p
bmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpIHsKQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIFJl
bmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluCiAgICAgaWYgKGFsd2F5c0NyZWF0ZUxp
bmVCb3hlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSAmcGFyZW50KCktPnN0eWxlKCk7CisgICAgYXV0byogcGFyZW50U3R5bGUgPSAmcGFyZW50
KCktPnN0eWxlKCk7CiAgICAgUmVuZGVySW5saW5lKiBwYXJlbnRSZW5kZXJJbmxpbmUgPSBpczxS
ZW5kZXJJbmxpbmU+KCpwYXJlbnQoKSkgPyBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBhcmVudCgp
KSA6IG51bGxwdHI7CiAgICAgYm9vbCBjaGVja0ZvbnRzID0gZG9jdW1lbnQoKS5pbk5vUXVpcmtz
TW9kZSgpOwogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29u
dGFpbmluZ0Jsb2NrKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnVw
ZGF0ZUFsd2F5c0NyZWF0ZUxpbgogICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzICYmIGNo
ZWNrRm9udHMgJiYgdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpKSB7CiAgICAgICAgIC8vIEhh
dmUgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5bGUgYXMgd2VsbC4KICAgICAgICAgcGFyZW50
U3R5bGUgPSAmcGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7Ci0gICAgICAgIFJlbmRlclN0eWxl
JiBjaGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAgYXV0byYgY2hpbGRTdHls
ZSA9IGZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcyA9ICFw
YXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2Vu
dERlc2NlbnRBbmRMaW5lR2FwKGNoaWxkU3R5bGUuZm9udENhc2NhZGUoKS5mb250TWV0cmljcygp
KQogICAgICAgICAgICAgfHwgY2hpbGRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUK
ICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gY2hpbGRTdHlsZS5s
aW5lSGVpZ2h0KCk7CkBAIC0xNjAxLDcgKzE2MDEsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFp
bnRPdXRsaW5lKFBhaW50SW5mCiAgICAgaWYgKCFoYXNPdXRsaW5lKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKKyAgICBhdXRvJiBz
dHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICAvLyBPbmx5IHBhaW50IHRoZSBmb2N1cyByaW5nIGJ5
IGhhbmQgaWYgdGhlIHRoZW1lIGlzbid0IGFibGUgdG8gZHJhdyBpdC4KICAgICBpZiAoc3R5bGVU
b1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZyhz
dHlsZVRvVXNlKSkgewogICAgICAgICBWZWN0b3I8TGF5b3V0UmVjdD4gZm9jdXNSaW5nUmVjdHM7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxMTEsNyArNDExMSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVw
Q2xpcFBhdGgoR3JhcGhpY3MKICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQgPSB0
cnVlOwogICAgIH0KIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUo
KTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKICAgICBBU1NFUlQoc3R5
bGUuY2xpcFBhdGgoKSk7CiAgICAgaWYgKGlzPFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCpzdHls
ZS5jbGlwUGF0aCgpKSB8fCAoaXM8Qm94Q2xpcFBhdGhPcGVyYXRpb24+KCpzdHlsZS5jbGlwUGF0
aCgpKSAmJiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSkgewogICAgICAgICBXaW5kUnVsZSB3
aW5kUnVsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnQKICAgICBtX3ZCYXItPnBhaW50KHBhaW50SW5m
by5jb250ZXh0KCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKLXN0YXRp
YyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4dFJ1biB0ZXh0UnVuLCBSZW5k
ZXJTdHlsZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBpdGVtRm9udCwgTGF5b3V0UmVjdCBpdGVt
Qm91ZGluZ0JveCkKK3N0YXRpYyBMYXlvdXRTaXplIGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQoVGV4
dFJ1biB0ZXh0UnVuLCBjb25zdCBSZW5kZXJTdHlsZSogaXRlbVN0eWxlLCBGb250Q2FzY2FkZSBp
dGVtRm9udCwgTGF5b3V0UmVjdCBpdGVtQm91ZGluZ0JveCkKIHsKICAgICBFVGV4dEFsaWduIGFj
dHVhbEFsaWdubWVudCA9IGl0ZW1TdHlsZS0+dGV4dEFsaWduKCk7CiAgICAgLy8gRklYTUU6IEZp
cmVmb3ggZG9lc24ndCByZXNwZWN0IEpVU1RJRlkuIFNob3VsZCB3ZT8KQEAgLTM3OSw3ICszNzks
NyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoCiAgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdEVsZW1lbnQoKS5saXN0SXRl
bXMoKTsKICAgICBIVE1MRWxlbWVudCogbGlzdEl0ZW1FbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJ
bmRleF07CiAKLSAgICBSZW5kZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+
Y29tcHV0ZWRTdHlsZSgpOworICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICpsaXN0SXRlbUVsZW1lbnQt
PmNvbXB1dGVkU3R5bGUoKTsKIAogICAgIGlmIChpdGVtU3R5bGUudmlzaWJpbGl0eSgpID09IEhJ
RERFTikKICAgICAgICAgcmV0dXJuOwpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgUmVuZGVyTGlz
dEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCgKIHsKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudCgpLmxpc3RJdGVtcygpOwogICAgIEhUTUxF
bGVtZW50KiBsaXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKLSAgICBSZW5k
ZXJTdHlsZSYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwor
ICAgIGF1dG8mIGl0ZW1TdHlsZSA9ICpsaXN0SXRlbUVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsK
IAogICAgIENvbG9yIGJhY2tDb2xvcjsKICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCps
aXN0SXRlbUVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqbGlzdEl0ZW1F
bGVtZW50KS5zZWxlY3RlZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDgs
OCArMTcwOCw4IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucygpCiAgICAg
ICAgIAogICAgIH0KIAotICAgIHN0eWxlKCkuc2V0TWFyZ2luU3RhcnQoTGVuZ3RoKG1hcmdpblN0
YXJ0LCBGaXhlZCkpOwotICAgIHN0eWxlKCkuc2V0TWFyZ2luRW5kKExlbmd0aChtYXJnaW5FbmQs
IEZpeGVkKSk7CisgICAgbXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luU3RhcnQoTGVuZ3RoKG1hcmdp
blN0YXJ0LCBGaXhlZCkpOworICAgIG11dGFibGVTdHlsZSgpLnNldE1hcmdpbkVuZChMZW5ndGgo
bWFyZ2luRW5kLCBGaXhlZCkpOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckxpc3RNYXJrZXI6Omxp
bmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGlu
ZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTAsNyArMTEwLDcgQEAgaW50IFJlbmRlck1hcnF1ZWU6OmNvbXB1dGVQb3NpdGlvbihFTWFy
cQogewogICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci0+cmVuZGVyQm94KCk7CiAgICAgQVNT
RVJUKGJveCk7Ci0gICAgUmVuZGVyU3R5bGUmIGJveFN0eWxlID0gYm94LT5zdHlsZSgpOworICAg
IGF1dG8mIGJveFN0eWxlID0gYm94LT5zdHlsZSgpOwogICAgIGlmIChpc0hvcml6b250YWwoKSkg
ewogICAgICAgICBib29sIGx0ciA9IGJveFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsK
ICAgICAgICAgTGF5b3V0VW5pdCBjbGllbnRXaWR0aCA9IGJveC0+Y2xpZW50V2lkdGgoKTsKQEAg
LTE5Nyw3ICsxOTcsNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlv
CiAKIHZvaWQgUmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVlZVN0eWxlKCkKIHsKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCk7CisgICAgYXV0byYg
c3R5bGUgPSBtX2xheWVyLT5yZW5kZXJlcigpLm11dGFibGVTdHlsZSgpOwogICAgIAogICAgIGlm
IChtX2RpcmVjdGlvbiAhPSBzdHlsZS5tYXJxdWVlRGlyZWN0aW9uKCkgfHwgKG1fdG90YWxMb29w
cyAhPSBzdHlsZS5tYXJxdWVlTG9vcENvdW50KCkgJiYgbV9jdXJyZW50TG9vcCA+PSBtX3RvdGFs
TG9vcHMpKQogICAgICAgICBtX2N1cnJlbnRMb29wID0gMDsgLy8gV2hlbiBkaXJlY3Rpb24gY2hh
bmdlcyBvciBvdXIgbG9vcENvdW50IGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiBvdXIgY3VycmVu
dCBsb29wLCByZXNldCBvdXIgbG9vcC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEw
OSw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZUlubmVyQmxvY2soKQogCiB2b2lkIFJl
bmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgaW5u
ZXJTdHlsZSA9IG1faW5uZXJCbG9jay0+c3R5bGUoKTsKKyAgICBhdXRvJiBpbm5lclN0eWxlID0g
bV9pbm5lckJsb2NrLT5tdXRhYmxlU3R5bGUoKTsKICAgICBpbm5lclN0eWxlLnNldEZsZXhHcm93
KDEpOwogICAgIGlubmVyU3R5bGUuc2V0RmxleFNocmluaygxKTsKICAgICAvLyBtaW4td2lkdGg6
IDA7IGlzIG5lZWRlZCBmb3IgY29ycmVjdCBzaHJpbmtpbmcuCkBAIC0yMTUsNyArMjE1LDcgQEAg
dm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKAogICAgICAgICBpZiAodGhl
bWUoKS5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpKSB7CiAgICAgICAgICAgICAvLyBB
ZGQgaW4gdGhlIG9wdGlvbidzIHRleHQgaW5kZW50LiAgV2UgY2FuJ3QgY2FsY3VsYXRlIHBlcmNl
bnRhZ2UgdmFsdWVzIGZvciBub3cuCiAgICAgICAgICAgICBmbG9hdCBvcHRpb25XaWR0aCA9IDA7
Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIG9wdGlvblN0eWxlID0gZWxlbWVudC0+Y29t
cHV0ZWRTdHlsZSgpKQorICAgICAgICAgICAgaWYgKGF1dG8qIG9wdGlvblN0eWxlID0gZWxlbWVu
dC0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICAgICAgICAgIG9wdGlvbldpZHRoICs9IG1pbmlt
dW1WYWx1ZUZvckxlbmd0aChvcHRpb25TdHlsZS0+dGV4dEluZGVudCgpLCAwKTsKICAgICAgICAg
ICAgIGlmICghdGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKTsKQEAgLTUxOSw3ICs1MTksNyBAQCBQ
b3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6aXRlbVN0eWxlCiAgICAgYm9vbCBpdGVtSGFz
Q3VzdG9tQmFja2dyb3VuZENvbG9yOwogICAgIGdldEl0ZW1CYWNrZ3JvdW5kQ29sb3IobGlzdElu
ZGV4LCBpdGVtQmFja2dyb3VuZENvbG9yLCBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENvbG9yKTsK
IAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9ICplbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7Cisg
ICAgYXV0byYgc3R5bGUgPSAqZWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogICAgIHJldHVybiBQ
b3B1cE1lbnVTdHlsZShzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
ciksIGl0ZW1CYWNrZ3JvdW5kQ29sb3IsIHN0eWxlLmZvbnRDYXNjYWRlKCksIHN0eWxlLnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZS5kaXNwbGF5KCkgPT0gTk9ORSwgdHJ1
ZSwgc3R5bGUudGV4dEluZGVudCgpLCBzdHlsZS5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShzdHls
ZS51bmljb2RlQmlkaSgpKSwKICAgICAgICAgaXRlbUhhc0N1c3RvbUJhY2tncm91bmRDb2xvciA/
IFBvcHVwTWVudVN0eWxlOjpDdXN0b21CYWNrZ3JvdW5kQ29sb3IgOiBQb3B1cE1lbnVTdHlsZTo6
RGVmYXVsdEJhY2tncm91bmRDb2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBzdGF0aWMgYm9v
bCBpc1ZhbGlkQ29sdW1uU3Bhbm5lcihSZW5kZXJNCiAgICAgQVNTRVJUKGRlc2NlbmRhbnQtPmlz
RGVzY2VuZGFudE9mKGZsb3dUaHJlYWQpKTsKIAogICAgIC8vIEZpcnN0IG1ha2Ugc3VyZSB0aGF0
IHRoZSByZW5kZXJlciBpdHNlbGYgaGFzIHRoZSByaWdodCBwcm9wZXJ0aWVzIGZvciBiZWNvbWlu
ZyBhIHNwYW5uZXIuCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gZGVzY2VuZGFudC0+c3R5bGUo
KTsKKyAgICBhdXRvJiBzdHlsZSA9IGRlc2NlbmRhbnQtPnN0eWxlKCk7CiAgICAgaWYgKHN0eWxl
LmNvbHVtblNwYW4oKSAhPSBDb2x1bW5TcGFuQWxsIHx8ICFpczxSZW5kZXJCb3g+KCpkZXNjZW5k
YW50KSB8fCBkZXNjZW5kYW50LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIu
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIqIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyOjpjcmVh
dGVBbm9ueW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBmbG93VGhyZWFkLCBSZW5k
ZXJCb3gqIHNwYW5uZXIsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK1JlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
cjo6Y3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogZmxvd1RocmVh
ZCwgUmVuZGVyQm94KiBzcGFubmVyLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7
CiAgICAgYXV0byBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdp
dGhEaXNwbGF5KCpwYXJlbnRTdHlsZSwgQkxPQ0spOwogICAgIG5ld1N0eWxlLnNldENsZWFyKENC
T1RIKTsgLy8gV2UgZG9uJ3Qgd2FudCBmbG9hdHMgaW4gdGhlIHJvdyBwcmVjZWRpbmcgdGhlIHNw
YW5uZXIgdG8gY29udGludWUgb24gdGhlIG90aGVyIHNpZGUuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXIuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOwogCiBj
bGFzcyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciBmaW5hbCA6IHB1YmxpYyBS
ZW5kZXJCb3ggewogcHVibGljOgotICAgIHN0YXRpYyBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlciogY3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCos
IFJlbmRlckJveCogc3Bhbm5lciwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICBzdGF0
aWMgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIGNyZWF0ZUFub255bW91cyhS
ZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqLCBSZW5kZXJCb3gqIHNwYW5uZXIsIGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICBSZW5kZXJCb3gqIHNwYW5uZXIoKSBjb25z
dCB7IHJldHVybiBtX3NwYW5uZXI7IH0KICAgICBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQq
IGZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2Zsb3dUaHJlYWQ7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNw
cAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd0ZyYWdtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZv
aWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNoZWNrUmVnaW8KICAgICBkb3duY2FzdDxSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQ+KCptX2Zsb3dUaHJlYWQpLmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5n
KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5k
ZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbihSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKSBjb25zdAogewog
ICAgIEFTU0VSVCghcmVuZGVyZXIuaXNBbm9ueW1vdXMoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQiOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IGNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmLCBSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gY29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxl
JiBwYXJlbnRTdHlsZSkgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVn
aW9uKFJlbmRlckVsZW1lbnQmKTsKICAgICB2b2lkIHNldE9iamVjdFN0eWxlSW5SZWdpb24oUmVu
ZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiwgYm9vbCBvYmplY3RSZWdp
b25TdHlsZUNhY2hlZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyMiw3ICsxODIyLDcgQEAgaW50
IFJlbmRlck9iamVjdDo6aW5uZXJMaW5lSGVpZ2h0KCkgY29ucwogICAgIHJldHVybiBzdHlsZSgp
LmNvbXB1dGVkTGluZUhlaWdodCgpOwogfQogCi1zdGF0aWMgQ29sb3IgZGVjb3JhdGlvbkNvbG9y
KFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBDb2xvciBkZWNvcmF0aW9uQ29sb3IoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIENvbG9yIHJlc3VsdDsKICAgICAvLyBDaGVjayBm
b3IgdGV4dCBkZWNvcmF0aW9uIGNvbG9yIGZpcnN0LgpAQCAtMTg0NCw3ICsxODQ0LDcgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sbwogICAgIFRleHREZWNvcmF0aW9u
U3R5bGUmIHVuZGVybGluZVN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxlJiBvdmVybGluZVN0eWxl
LCBUZXh0RGVjb3JhdGlvblN0eWxlJiBsaW5ldGhyb3VnaFN0eWxlLCBib29sIGZpcnN0bGluZVN0
eWxlKSBjb25zdAogewogICAgIGNvbnN0IFJlbmRlck9iamVjdCogY3VycmVudCA9IHRoaXM7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBudWxscHRyOworICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZVRvVXNlID0gbnVsbHB0cjsKICAgICBUZXh0RGVjb3JhdGlvbiBjdXJyRGVjcyA9
IFRleHREZWNvcmF0aW9uTm9uZTsKICAgICBDb2xvciByZXN1bHRDb2xvcjsKICAgICBkbyB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY5Nyw4ICs2OTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0
IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0
dWFsIExheW91dFVuaXQgbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
MDsgfQogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3Q7Ci0gICAgUmVuZGVyU3R5bGUm
IGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkg
Y29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CiAK
ICAgICAvLyBBbm9ueW1vdXMgYmxvY2tzIHRoYXQgYXJlIHBhcnQgb2Ygb2YgYSBjb250aW51YXRp
b24gY2hhaW4gd2lsbCByZXR1cm4gdGhlaXIgaW5saW5lIGNvbnRpbnVhdGlvbidzIG91dGxpbmUg
c3R5bGUgaW5zdGVhZC4KICAgICAvLyBUaGlzIGlzIHR5cGljYWxseSBvbmx5IHJlbGV2YW50IHdo
ZW4gcmVwYWludGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQgUmVuZGVy
VGFibGU6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2EKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jYXB0aW9ucy5zaXplKCk7IGkrKykKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSBzdGQ6Om1heChtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgbV9jYXB0aW9uc1tp
XS0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkpOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxl
VG9Vc2UgPSBzdHlsZSgpOworICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBjaGVja2luZyBmb3IgaXNTcGVjaWZpZWQg
c2luY2UgeW91IHNob3VsZCBiZSBhYmxlIHRvIHVzZSBwZXJjZW50YWdlIG9yIGNhbGMgdmFsdWVz
IGZvciBtaW4td2lkdGguCiAgICAgaWYgKHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkuaXNG
aXhlZCgpICYmIHN0eWxlVG9Vc2UubG9naWNhbE1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsKICAg
ICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzdGQ6Om1heChtX21heFByZWZlcnJl
ZExvZ2ljYWxXaWR0aCwgYWRqdXN0Q29udGVudEJveExvZ2ljYWxXaWR0aEZvckJveFNpemluZyhz
dHlsZVRvVXNlLmxvZ2ljYWxNaW5XaWR0aCgpLnZhbHVlKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE5OCw3ICsxMTk4LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rp
b246OnBhaW50Um93R3JvdXBCbwogCiB9CiAKLXN0YXRpYyBCb3hTaWRlIHBoeXNpY2FsQm9yZGVy
Rm9yRGlyZWN0aW9uKFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93LCBDb2xsYXBzZWRCb3Jk
ZXJTaWRlIHNpZGUpCitzdGF0aWMgQm94U2lkZSBwaHlzaWNhbEJvcmRlckZvckRpcmVjdGlvbihj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JDZWxsRmxvdywgQ29sbGFwc2VkQm9yZGVyU2lkZSBz
aWRlKQogewogCiAgICAgc3dpdGNoIChzaWRlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGlzVGV4dEZyYWdtZW50KCkgY29uc3Q7CiAKLSAgICBSZW5k
ZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUo
KSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQs
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OworICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBmaXJzdExp
bmVTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBnZXRDYWNoZWRQc2V1ZG9T
dHlsZShQc2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0cikg
Y29uc3Q7CiAKICAgICBDb2xvciBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAg
ICBDb2xvciBzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKQEAgLTI1MSwxNyArMjUx
LDE3IEBAIGlubGluZSBVQ2hhciBSZW5kZXJUZXh0OjpjaGFyYWN0ZXJBdCh1bnMKICAgICByZXR1
cm4gdW5jaGVja2VkQ2hhcmFjdGVyQXQoaSk7CiB9CiAKLWlubGluZSBSZW5kZXJTdHlsZSYgUmVu
ZGVyVGV4dDo6c3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxlJiBSZW5kZXJU
ZXh0OjpzdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcmVudCgpLT5zdHlsZSgpOwogfQog
Ci1pbmxpbmUgUmVuZGVyU3R5bGUmIFJlbmRlclRleHQ6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QK
K2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSYgUmVuZGVyVGV4dDo6Zmlyc3RMaW5lU3R5bGUoKSBj
b25zdAogewogICAgIHJldHVybiBwYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKIH0KIAotaW5s
aW5lIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9J
ZCBwc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAoraW5saW5lIGNvbnN0
IFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0OjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBw
c2V1ZG9JZCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewogICAgIHJl
dHVybiBwYXJlbnQoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvSWQsIHBhcmVudFN0eWxl
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsOCBAQCB2b2lk
IFJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZShTCiAgICAgaWYgKGlubmVyVGV4dFJl
bmRlcmVyKSB7CiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHNldCB0aGUgd2lkdGggYW5kIHRoZSBo
ZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KICAgICAgICAgLy8gUmVzZXQgdGhl
bSBub3cgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBoaW50LgotICAgICAgICBp
bm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOwotICAgICAgICBp
bm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7CisgICAgICAgIGlu
bmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOworICAg
ICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkp
OwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0U3R5bGUodGV4dEZvcm1Db250cm9sRWxl
bWVudCgpLmNyZWF0ZUlubmVyVGV4dFN0eWxlKHN0eWxlKCkpKTsKICAgICB9CiAgICAgdGV4dEZv
cm1Db250cm9sRWxlbWVudCgpLnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3
ICs5Miw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUKICAgICBS
ZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyUmVuZGVyZXIgPSBSZW5kZXJUZXh0Q29udHJvbDo6bGF5
b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7CiAgICAgaWYgKGlzPFJl
bmRlckJveD4ocGxhY2Vob2xkZXJSZW5kZXJlcikpIHsKICAgICAgICAgYXV0byYgcGxhY2Vob2xk
ZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpwbGFjZWhvbGRlclJlbmRlcmVyKTsKLSAgICAg
ICAgcGxhY2Vob2xkZXJCb3guc3R5bGUoKS5zZXRMb2dpY2FsV2lkdGgoTGVuZ3RoKGNvbnRlbnRM
b2dpY2FsV2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lk
dGgoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gubXV0YWJsZVN0eWxlKCkuc2V0
TG9naWNhbFdpZHRoKExlbmd0aChjb250ZW50TG9naWNhbFdpZHRoKCkgLSBwbGFjZWhvbGRlckJv
eC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCksIEZpeGVkKSk7CiAgICAgICAgIHBsYWNl
aG9sZGVyQm94LmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIHBsYWNlaG9sZGVyQm94LnNldFgo
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSk7CiAgICAgICAgIHBsYWNlaG9sZGVyQm94LnNl
dFkoYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTEgKzEwOCwxMSBAQCB2
b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAKICAgICAvLyBUbyBlbnN1
cmUgY29uc2lzdGVuY3kgYmV0d2VlbiBsYXlvdXRzLCB3ZSBuZWVkIHRvIHJlc2V0IGFueSBjb25k
aXRpb25hbGx5IG92ZXJyaWRlbiBoZWlnaHQuCiAgICAgaWYgKGlubmVyVGV4dFJlbmRlcmVyICYm
ICFpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkpIHsK
LSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5n
dGgoQXV0bykpOworICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0
TG9naWNhbEhlaWdodChMZW5ndGgoQXV0bykpOwogICAgICAgICBzZXROZWVkc0xheW91dE9uQW5j
ZXN0b3JzKGlubmVyVGV4dFJlbmRlcmVyLCB0aGlzKTsKICAgICB9CiAgICAgaWYgKGlubmVyQmxv
Y2tSZW5kZXJlciAmJiAhaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQo
KS5pc0F1dG8oKSkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9n
aWNhbEhlaWdodChMZW5ndGgoQXV0bykpOworICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPm11
dGFibGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKICAgICAgICAgc2V0
TmVlZHNMYXlvdXRPbkFuY2VzdG9ycyhpbm5lckJsb2NrUmVuZGVyZXIsIHRoaXMpOwogICAgIH0K
IApAQCAtMTI4LDEwICsxMjgsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmxheW91dAogICAgICAgICBpZiAoZGVzaXJlZExvZ2ljYWxIZWlnaHQgIT0gaW5uZXJUZXh0UmVu
ZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KE1hcmtP
bmx5VGhpcyk7CiAKLSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNh
bEhlaWdodChMZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIGlu
bmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChk
ZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXIt
PnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIGlmIChpbm5lckJsb2NrUmVu
ZGVyZXIpIHsKLSAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dp
Y2FsSGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAg
ICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChM
ZW5ndGgoZGVzaXJlZExvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CiAgICAgICAgICAgICBpbm5lckJs
b2NrUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xNDAsMTMgKzE0MCwxMyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6bGF5b3V0CiAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5sYXlvdXRJZk5lZWRlZCgpOwog
ICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXJSZW5k
ZXJlci0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICBpZiAoY29udGFpbmVyTG9naWNhbEhlaWdo
dCA+IGxvZ2ljYWxIZWlnaHRMaW1pdCkgewotICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXIt
PnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgobG9naWNhbEhlaWdodExpbWl0LCBGaXhl
ZCkpOworICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldExv
Z2ljYWxIZWlnaHQoTGVuZ3RoKGxvZ2ljYWxIZWlnaHRMaW1pdCwgRml4ZWQpKTsKICAgICAgICAg
ICAgIHNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29u
dGFpbmVyUmVuZGVyZXItPmxvZ2ljYWxIZWlnaHQoKSA8IGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkp
IHsKLSAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLnNldExvZ2ljYWxIZWln
aHQoTGVuZ3RoKGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCksIEZpeGVkKSk7CisgICAgICAgICAgICBj
b250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgo
Y29udGVudExvZ2ljYWxIZWlnaHQoKSwgRml4ZWQpKTsKICAgICAgICAgICAgIHNldE5lZWRzTGF5
b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29udGFpbmVy
UmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoY29udGFpbmVyTG9naWNh
bEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxl
U3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBG
aXhlZCkpOwogICAgIH0KIAogICAgIC8vIElmIHdlIG5lZWQgYW5vdGhlciBsYXlvdXQgcGFzcywg
d2UgaGF2ZSBjaGFuZ2VkIG9uZSBvZiBjaGlsZHJlbidzIGhlaWdodCBzbyB3ZSBuZWVkIHRvIHJl
bGF5b3V0IHRoZW0uCkBAIC0xNzQsOCArMTc0LDggQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmxheW91dAogICAgICAgICBMYXlvdXRTaXplIGlubmVyVGV4dFNpemU7CiAgICAg
ICAgIGlmIChpbm5lclRleHRSZW5kZXJlcikKICAgICAgICAgICAgIGlubmVyVGV4dFNpemUgPSBp
bm5lclRleHRSZW5kZXJlci0+c2l6ZSgpOwotICAgICAgICBwbGFjZWhvbGRlckJveC0+c3R5bGUo
KS5zZXRXaWR0aChMZW5ndGgoaW5uZXJUZXh0U2l6ZS53aWR0aCgpIC0gcGxhY2Vob2xkZXJCb3gt
Pmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCksIEZpeGVkKSk7Ci0gICAgICAgIHBs
YWNlaG9sZGVyQm94LT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5uZXJUZXh0U2l6ZS5oZWln
aHQoKSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwg
Rml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJCb3gtPm11dGFibGVTdHlsZSgpLnNldFdpZHRo
KExlbmd0aChpbm5lclRleHRTaXplLndpZHRoKCkgLSBwbGFjZWhvbGRlckJveC0+aG9yaXpvbnRh
bEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgRml4ZWQpKTsKKyAgICAgICAgcGxhY2Vob2xkZXJC
b3gtPm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgoaW5uZXJUZXh0U2l6ZS5oZWlnaHQo
KSAtIHBsYWNlaG9sZGVyQm94LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgRml4
ZWQpKTsKICAgICAgICAgYm9vbCBuZWVkZWRMYXlvdXQgPSBwbGFjZWhvbGRlckJveC0+bmVlZHNM
YXlvdXQoKTsKICAgICAgICAgYm9vbCBwbGFjZWhvbGRlckJveEhhZExheW91dCA9IHBsYWNlaG9s
ZGVyQm94LT5ldmVySGFkTGF5b3V0KCk7CiAgICAgICAgIHBsYWNlaG9sZGVyQm94LT5sYXlvdXRJ
Zk5lZWRlZCgpOwpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpsYXlvdXQKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBub3QgYmUgYWRqdXN0aW5nIHN0eWxlcyBkdXJpbmcgbGF5b3V0LiA8cmRhcjovL3Byb2JsZW0v
NzY3NTQ5Mz4KICAgICBpZiAoaW5wdXRFbGVtZW50KCkuaXNTZWFyY2hGaWVsZCgpKQotICAgICAg
ICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoc3R5bGUoKSwgKnRoaXMp
OworICAgICAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3JkZXJSYWRpdXMobXV0YWJs
ZVN0eWxlKCksICp0aGlzKTsKICNlbmRpZgogfQogCkBAIC0yMzYsMTQgKzIzNiwxNCBAQCB2b2lk
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5bGVECiAgICAgLy8gV2UgbWF5IGhhdmUg
c2V0IHRoZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0eWxlIGluIGxheW91dCgp
LgogICAgIC8vIFJlc2V0IHRoZW0gbm93IHRvIGF2b2lkIGdldHRpbmcgYSBzcHVyaW91cyBsYXlv
dXQgaGludC4KICAgICBIVE1MRWxlbWVudCogaW5uZXJCbG9jayA9IGlubmVyQmxvY2tFbGVtZW50
KCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogaW5uZXJCbG9ja1JlbmRlcmVyID0gaW5uZXJCbG9j
ayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCkgOiAwKSB7Ci0gICAgICAgIGlubmVyQmxvY2tSZW5k
ZXJlci0+c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOwotICAgICAgICBpbm5lckJsb2NrUmVu
ZGVyZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkpOworICAgIGlmIChhdXRvKiBpbm5lckJs
b2NrUmVuZGVyZXIgPSBpbm5lckJsb2NrID8gaW5uZXJCbG9jay0+cmVuZGVyZXIoKSA6IG51bGxw
dHIpIHsKKyAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRIZWln
aHQoTGVuZ3RoKCkpOworICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPm11dGFibGVTdHlsZSgp
LnNldFdpZHRoKExlbmd0aCgpKTsKICAgICB9CiAgICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9
IGNvbnRhaW5lckVsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBjb250YWluZXJSZW5k
ZXJlciA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVyZXIoKSA6IDApIHsKLSAgICAgICAg
Y29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aCgpKTsKLSAgICAgICAg
Y29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkpOworICAgIGlmIChh
dXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVyZXIo
KSA6IG51bGxwdHIpIHsKKyAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFibGVTdHlsZSgp
LnNldEhlaWdodChMZW5ndGgoKSk7CisgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5tdXRhYmxl
U3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7CiAgICAgfQogICAgIGlmIChkaWZmID09IFN0eWxl
RGlmZmVyZW5jZUxheW91dCkgewogICAgICAgICBpZiAoYXV0byogaW5uZXJUZXh0UmVuZGVyZXIg
PSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBSZW5kZXJUZXh0RnJhZ21lbnQ6OnN0eWxl
RGlkQ2hhbmdlKAogICAgIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxl
KTsKIAogICAgIGlmIChSZW5kZXJCbG9jayogYmxvY2sgPSBibG9ja0ZvckFjY29tcGFueWluZ0Zp
cnN0TGV0dGVyKCkpIHsKLSAgICAgICAgYmxvY2stPnN0eWxlKCkucmVtb3ZlQ2FjaGVkUHNldWRv
U3R5bGUoRklSU1RfTEVUVEVSKTsKKyAgICAgICAgYmxvY2stPm11dGFibGVTdHlsZSgpLnJlbW92
ZUNhY2hlZFBzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUik7CiAgICAgICAgIGJsb2NrLT51cGRhdGVG
aXJzdExldHRlcigpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lR3RrLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxNSw3ICsy
MDE1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVRvZ2dsZUNsbwogfQogI2Vu
ZGlmCiAKLXN0YXRpYyBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHls
ZShSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkgYm9y
ZGVyUmFkaWlGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIHJldHVy
biBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSgKICAgICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJU
b3BMZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJUb3BMZWZ0UmFk
aXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCkBAIC0yMDM2LDcgKzIwMzYsNyBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhCiAKICAgICBmbG9hdCBtZWRpYUR1cmF0
aW9uID0gbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwogICAgIGZsb2F0IHRvdGFsVHJhY2tXaWR0
aCA9IHIud2lkdGgoKTsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBvLnN0eWxlKCk7CisgICAg
YXV0byYgc3R5bGUgPSBvLnN0eWxlKCk7CiAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5n
ZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAgICAgICAgZmxv
YXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JFX0VYQ0VQVElPTik7CkBA
IC0yMDU5LDcgKzIwNTksNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVy
VHJhCiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG8uc3R5bGUoKTsKKyAgICBhdXRvJiBz
dHlsZSA9IG8uc3R5bGUoKTsKICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVj
dChGbG9hdFJvdW5kZWRSZWN0KHIsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxl
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZWRpYVZvbHVtZVNsaQogCiAgICAgaW50IHJlY3RIZWlnaHQgPSByZWN0LmhlaWdodCgpOwogICAg
IGZsb2F0IHRyYWNrSGVpZ2h0ID0gcmVjdEhlaWdodCAqIHZvbHVtZTsKLSAgICBSZW5kZXJTdHls
ZSYgc3R5bGUgPSByZW5kZXJPYmplY3Quc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRl
ck9iamVjdC5zdHlsZSgpOwogICAgIEludFJlY3Qgdm9sdW1lUmVjdChyZWN0KTsKICAgICB2b2x1
bWVSZWN0Lm1vdmUoMCwgcmVjdEhlaWdodCAtIHRyYWNrSGVpZ2h0KTsKICAgICB2b2x1bWVSZWN0
LnNldEhlaWdodChjZWlsKHRyYWNrSGVpZ2h0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzNiw3
ICszMzYsNyBAQCBGbG9hdFJlY3QgUmVuZGVyVGhlbWVJT1M6OmFkZFJvdW5kZWRCb3JkCiB7CiAg
ICAgLy8gVG8gZml4IGlubmVyIGJvcmRlciBibGVlZGluZyBpc3N1ZXMgPHJkYXI6Ly9wcm9ibGVt
Lzk4MTI1MDc+LCB3ZSBjbGlwIHRvIHRoZSBvdXRlciBib3JkZXIgYW5kIGFzc2VydCB0aGF0CiAg
ICAgLy8gdGhlIGJvcmRlciBpcyBvcGFxdWUgb3IgdHJhbnNwYXJlbnQsIHVubGVzcyB3ZSdyZSBj
aGVja2VkIGJlY2F1c2UgY2hlY2tlZCByYWRpby9jaGVja2JveGVzIHNob3cgbm8gYmxlZWRpbmcu
Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUg
PSBib3guc3R5bGUoKTsKICAgICBSb3VuZGVkUmVjdCBib3JkZXIgPSBpc0NoZWNrZWQoYm94KSA/
IHN0eWxlLmdldFJvdW5kZWRJbm5lckJvcmRlckZvcihyZWN0KSA6IHN0eWxlLmdldFJvdW5kZWRC
b3JkZXJGb3IocmVjdCk7CiAKICAgICBpZiAoYm9yZGVyLmlzUm91bmRlZCgpKQpAQCAtNDk5LDcg
KzQ5OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW8KIAogYm9v
bCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3guc3R5bGUoKTsKKyAgICBhdXRv
JiBzdHlsZSA9IGJveC5zdHlsZSgpOwogICAgIEZsb2F0UG9pbnQgcG9pbnQocmVjdC54KCkgKyBz
dHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSwgcmVjdC55KCkgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgp
KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwYWludEluZm8u
Y29udGV4dCgpKTsKQEAgLTYzMCw3ICs2MzAsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1
c3RNZW51TGlzdEJ1dHRvCiAKIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0
b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJCb3gmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUg
PSBib3guc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGJveC5zdHlsZSgpOwogICAgIGZsb2F0
IGJvcmRlclRvcFdpZHRoID0gc3R5bGUuYm9yZGVyVG9wV2lkdGgoKTsKICAgICBGbG9hdFJlY3Qg
Y2xpcChyZWN0LngoKSArIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpLCByZWN0LnkoKSArIHN0eWxl
LmJvcmRlclRvcFdpZHRoKCksIHJlY3Qud2lkdGgoKSAtIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgp
IC0gc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpLCByZWN0LmhlaWdodCgpIC0gc3R5bGUuYm9yZGVy
VG9wV2lkdGgoKSAtIHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKCkpOwogICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpOwpAQCAt
NzM0LDcgKzczNCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRyYWNrU3QK
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0
JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIEludFJlY3QgdHJhY2tDbGlwID0gcmVjdDsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUg
PSBib3guc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGJveC5zdHlsZSgpOwogCiAgICAgYm9v
bCBpc0hvcml6b250YWwgPSB0cnVlOwogICAgIHN3aXRjaCAoc3R5bGUuYXBwZWFyYW5jZSgpKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDcgKzg0LDcgQEAgdm9pZCBwYWludEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbAog
ICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKKyAgICBh
dXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKICAgICBpZiAoc3R5bGUudmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTQwLDcgKzE0MCw3IEBAIGJvb2wgaGl0
VGVzdEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiAKICAgICBpZiAoIWxheW91dC5ydW5Db3Vu
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBm
bG93LnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7CiAgICAgaWYgKHN0
eWxlLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHN0eWxlLnBvaW50ZXJFdmVudHMoKSA9PSBQ
RV9OT05FKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0QXV0b1NpemluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNyArNTEsNyBAQCBUZXh0QXV0b1NpemluZ0tleTo6VGV4dEF1dG9TaXppbmdLZXkoRGVsCiB7
CiB9CiAKLVRleHRBdXRvU2l6aW5nS2V5OjpUZXh0QXV0b1NpemluZ0tleShSZW5kZXJTdHlsZSog
c3R5bGUpCitUZXh0QXV0b1NpemluZ0tleTo6VGV4dEF1dG9TaXppbmdLZXkoY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlKQogICAgIDogbV9zdHlsZShzdHlsZSA/IFJlbmRlclN0eWxlOjpjbG9uZVB0
cigqc3R5bGUpIDogbnVsbHB0cikKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0QXV0b1NpemluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0QXV0b1NpemluZy5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dEF1dG9TaXppbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDEy
IEBAIHB1YmxpYzoKICAgICBUZXh0QXV0b1NpemluZ0tleSgpID0gZGVmYXVsdDsKICAgICBlbnVt
IERlbGV0ZWRUYWcgeyBEZWxldGVkIH07CiAgICAgZXhwbGljaXQgVGV4dEF1dG9TaXppbmdLZXko
RGVsZXRlZFRhZyk7Ci0gICAgZXhwbGljaXQgVGV4dEF1dG9TaXppbmdLZXkoUmVuZGVyU3R5bGUq
KTsKKyAgICBleHBsaWNpdCBUZXh0QXV0b1NpemluZ0tleShjb25zdCBSZW5kZXJTdHlsZSopOwog
ICAgIFRleHRBdXRvU2l6aW5nS2V5KFRleHRBdXRvU2l6aW5nS2V5JiYpID0gZGVmYXVsdDsKIAog
ICAgIFRleHRBdXRvU2l6aW5nS2V5JiBvcGVyYXRvcj0oVGV4dEF1dG9TaXppbmdLZXkmJikgPSBk
ZWZhdWx0OwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZS5nZXQoKTsgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3R5bGUuZ2V0KCk7IH0KICAgICBpbmxpbmUgYm9vbCBpc0RlbGV0ZWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzRGVsZXRlZDsgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNyArMTM2LDcgQEAgVGV4dFBhaW50U3R5bGUgY29tcHV0ZVRleHRTZWxlY3Rpb25QYWludAog
ICAgICAgICBzZWxlY3Rpb25QYWludFN0eWxlLmVtcGhhc2lzTWFya0NvbG9yID0gZW1waGFzaXNN
YXJrRm9yZWdyb3VuZDsKICAgICB9CiAKLSAgICBpZiAoUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxl
ID0gcmVuZGVyZXIuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9OKSkgeworICAgIGlmIChh
dXRvKiBwc2V1ZG9TdHlsZSA9IHJlbmRlcmVyLmdldENhY2hlZFBzZXVkb1N0eWxlKFNFTEVDVElP
TikpIHsKICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gcGFpbnRJbmZvLmZvcmNl
VGV4dENvbG9yKCkgPyBudWxscHRyIDogcHNldWRvU3R5bGUtPnRleHRTaGFkb3coKTsKICAgICAg
ICAgaWYgKHNoYWRvdyAhPSBzZWxlY3Rpb25TaGFkb3cpIHsKICAgICAgICAgICAgIGlmICghcGFp
bnRTZWxlY3RlZFRleHRPbmx5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUv
QnJlYWtpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L2xpbmUvQnJlYWtpbmdDb250ZXh0LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTIsNyArMjUyLDcgQEAgcHJpdmF0ZToKICAgICAvLyBGaXJlZm94IGFuZCBPcGVyYSB3aWxsIGFs
bG93IGEgdGFibGUgY2VsbCB0byBncm93IHRvIGZpdCBhbiBpbWFnZSBpbnNpZGUgaXQgdW5kZXIK
ICAgICAvLyB2ZXJ5IHNwZWNpZmljIGNpcmN1bXN0YW5jZXMgKGluIG9yZGVyIHRvIG1hdGNoIGNv
bW1vbiBXaW5JRSByZW5kZXJpbmdzKS4KICAgICAvLyBOb3Qgc3VwcG9ydGluZyB0aGUgcXVpcmsg
aGFzIGNhdXNlZCB1cyB0byBtaXMtcmVuZGVyIHNvbWUgcmVhbCBzaXRlcy4gKFNlZSBCdWd6aWxs
YSAxMDUxNy4pCi0gICAgUmVuZGVyU3R5bGUmIG1fYmxvY2tTdHlsZTsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgbV9ibG9ja1N0eWxlOwogCiAgICAgTGluZUluZm8mIG1fbGluZUluZm87CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxSb290LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDEwICsz
MDEsMTAgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpsYXlvdXQoKQogICAgICAgICAgICAgICAg
IGJhc2VUb3BNYXJnaW4gLT0gaW5kZXhUb3BNYXJnaW47CiAgICAgICAgICAgICAgICAgaW5kZXhU
b3BNYXJnaW4gPSAwOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5kZXgtPnN0eWxlKCku
c2V0TWFyZ2luVG9wKExlbmd0aChpbmRleFRvcE1hcmdpbiwgRml4ZWQpKTsKKyAgICAgICAgICAg
IGluZGV4LT5tdXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGluZGV4VG9wTWFyZ2lu
LCBGaXhlZCkpOwogICAgICAgICB9Ci0gICAgICAgIHJhZGljYWwtPnN0eWxlKCkuc2V0TWFyZ2lu
VG9wKExlbmd0aChyYWRpY2FsVG9wTWFyZ2luLCBGaXhlZCkpOwotICAgICAgICBiYXNlLT5zdHls
ZSgpLnNldE1hcmdpblRvcChMZW5ndGgoYmFzZVRvcE1hcmdpbiwgRml4ZWQpKTsKKyAgICAgICAg
cmFkaWNhbC0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9wKExlbmd0aChyYWRpY2FsVG9wTWFy
Z2luLCBGaXhlZCkpOworICAgICAgICBiYXNlLT5tdXRhYmxlU3R5bGUoKS5zZXRNYXJnaW5Ub3Ao
TGVuZ3RoKGJhc2VUb3BNYXJnaW4sIEZpeGVkKSk7CiAgICAgfQogCiAgICAgUmVuZGVyTWF0aE1M
QmxvY2s6OmxheW91dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjA2LDcgKzE2MDYs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb2x1bW5SdWxlV2lkdGgodW5zaWduZWQgc2hvcnQg
dykgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV9tdWx0aUNvbCwgbV9y
dWxlLm1fd2lkdGgsIHcpOyB9CiAgICAgdm9pZCByZXNldENvbHVtblJ1bGUoKSB7IFNFVF9ORVNU
RURfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX211bHRpQ29sLCBtX3J1bGUsIEJvcmRlclZh
bHVlKCkpOyB9CiAgICAgdm9pZCBzZXRDb2x1bW5TcGFuKENvbHVtblNwYW4gY29sdW1uU3Bhbikg
eyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV9tdWx0aUNvbCwgbV9jb2x1
bW5TcGFuLCBjb2x1bW5TcGFuKTsgfQotICAgIHZvaWQgaW5oZXJpdENvbHVtblByb3BlcnRpZXNG
cm9tKFJlbmRlclN0eWxlKiBwYXJlbnQpIHsgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCkt
Pm1fbXVsdGlDb2wgPSBwYXJlbnQtPnJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211bHRpQ29sOyB9
CisgICAgdm9pZCBpbmhlcml0Q29sdW1uUHJvcGVydGllc0Zyb20oY29uc3QgUmVuZGVyU3R5bGUq
IHBhcmVudCkgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9tdWx0aUNvbCA9IHBh
cmVudC0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2w7IH0KICAgICB2b2lkIHNldFRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvcHMpIHsgU0VUX05FU1RFRF9WQVIo
cmFyZU5vbkluaGVyaXRlZERhdGEsIG1fdHJhbnNmb3JtLCBtX29wZXJhdGlvbnMsIG9wcyk7IH0K
ICAgICB2b2lkIHNldFRyYW5zZm9ybU9yaWdpblgoTGVuZ3RoIGxlbmd0aCkgeyBTRVRfTkVTVEVE
X1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwgbV90cmFuc2Zvcm0sIG1feCwgV1RGTW92ZShsZW5n
dGgpKTsgfQogICAgIHZvaWQgc2V0VHJhbnNmb3JtT3JpZ2luWShMZW5ndGggbGVuZ3RoKSB7IFNF
VF9ORVNURURfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX3RyYW5zZm9ybSwgbV95LCBXVEZN
b3ZlKGxlbmd0aCkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNyw3ICsxMDcsNyBAQCBmbG9hdCBTVkdJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNl
CiAgICAgcmV0dXJuIDA7CiB9CiAKLUZsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rp
b25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGlu
dCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK0Zsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdt
ZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBp
bnQgZW5kUG9zaXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRp
b24pOwogICAgIEFTU0VSVChzdHlsZSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgTGF5b3V0UmVjdCBT
VkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdAogICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVu
ZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgUmVuZGVyU3R5
bGUmIHN0eWxlID0gcmVuZGVyZXIoKS5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVy
ZXIoKS5zdHlsZSgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwog
ICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0OwpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgU1ZH
SW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25CYWMKICAgICBpZiAoIXRleHRTaG91bGRCZVBh
aW50ZWQocmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlJiBz
dHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBwYXJlbnRS
ZW5kZXJlci5zdHlsZSgpOwogCiAgICAgaW50IHN0YXJ0UG9zaXRpb247CiAgICAgaW50IGVuZFBv
c2l0aW9uOwpAQCAtMjU2LDE0ICsyNTYsMTQgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWlu
dChQYWludEluZm8mIAogICAgIGlmICghdGV4dFNob3VsZEJlUGFpbnRlZChyZW5kZXJlcigpKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcGFyZW50UmVuZGVy
ZXIuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CiAK
ICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZS5zdmdTdHlsZSgpOwog
CiAgICAgYm9vbCBoYXNGaWxsID0gc3ZnU3R5bGUuaGFzRmlsbCgpOwogICAgIGJvb2wgaGFzVmlz
aWJsZVN0cm9rZSA9IHN2Z1N0eWxlLmhhc1Zpc2libGVTdHJva2UoKTsKIAotICAgIFJlbmRlclN0
eWxlKiBzZWxlY3Rpb25TdHlsZSA9ICZzdHlsZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc2Vs
ZWN0aW9uU3R5bGUgPSAmc3R5bGU7CiAgICAgaWYgKGhhc1NlbGVjdGlvbikgewogICAgICAgICBz
ZWxlY3Rpb25TdHlsZSA9IHBhcmVudFJlbmRlcmVyLmdldENhY2hlZFBzZXVkb1N0eWxlKFNFTEVD
VElPTik7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdHlsZSkgewpAQCAtMzM0LDcgKzMzNCw3IEBA
IHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBBU1NFUlQoIW1f
cGFpbnRpbmdSZXNvdXJjZSk7CiB9CiAKLWJvb2wgU1ZHSW5saW5lVGV4dEJveDo6YWNxdWlyZVBh
aW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgZmxvYXQgc2NhbGluZ0Zh
Y3RvciwgUmVuZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogc3R5bGUp
Citib29sIFNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNz
Q29udGV4dComIGNvbnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlckJveE1vZGVsT2Jq
ZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIEFTU0VSVChz
Y2FsaW5nRmFjdG9yKTsKICAgICBBU1NFUlQoc3R5bGUpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZv
aWQgU1ZHSW5saW5lVGV4dEJveDo6cmVsZWFzZVBhaW50aW5nUmUKICAgICBtX3BhaW50aW5nUmVz
b3VyY2UgPSBudWxscHRyOwogfQogCi1ib29sIFNWR0lubGluZVRleHRCb3g6OnByZXBhcmVHcmFw
aGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgZmxv
YXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlKQorYm9vbCBTVkdJbmxpbmVUZXh0
Qm94OjpwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4
dComIGNvbnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSkKIHsKICAgICByZXR1cm4gYWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgc2NhbGlu
Z0ZhY3RvciwgcGFyZW50KCktPnJlbmRlcmVyKCksIHN0eWxlKTsKIH0KQEAgLTM4Nyw3ICszODcs
NyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJlc3RvcmVHcmFwaGljc0NvCiAgICAgcmVsZWFz
ZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgLyogcGF0aCAqL251bGxwdHIpOwogfQogCi1UZXh0
UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdAorVGV4dFJ1biBTVkdJbmxp
bmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoc3R5bGUp
OwogCkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29y
YXRpb25XaQogICAgIEFTU0VSVCghbV9wYWludGluZ1Jlc291cmNlKTsKICAgICBBU1NFUlQobV9w
YWludGluZ1Jlc291cmNlTW9kZSAhPSBBcHBseVRvRGVmYXVsdE1vZGUpOwogCi0gICAgUmVuZGVy
U3R5bGUmIGRlY29yYXRpb25TdHlsZSA9IGRlY29yYXRpb25SZW5kZXJlci5zdHlsZSgpOworICAg
IGF1dG8mIGRlY29yYXRpb25TdHlsZSA9IGRlY29yYXRpb25SZW5kZXJlci5zdHlsZSgpOwogCiAg
ICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IDE7CiAgICAgRm9udENhc2NhZGUgc2NhbGVkRm9udDsK
QEAgLTU0MCw3ICs1NDAsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlv
bldpCiAgICAgICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHRQdHIsICZwYXRoKTsK
IH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1biYgdGV4dFJ1biwg
Y29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBl
bmRQb3NpdGlvbikKK3ZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRvd3Mo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRS
dW4mIHRleHRSdW4sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBv
c2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pCiB7CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHJl
bmRlcmVyKCkuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKQEAg
LTU4NSw3ICs1ODUsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFk
CiAgICAgfSB3aGlsZSAoc2hhZG93KTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWlu
dFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRl
clN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwg
Ym9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQordm9pZCBTVkdJ
bmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29u
c3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFp
bnRTZWxlY3RlZFRleHRPbmx5KQogewogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKHNl
bGVjdGlvblN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNjQsMjMg
KzY0LDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXJ0c05ld1RleHRDaHVuayhib29sIG5l
d1RleHRDaHVuaykgeyBtX3N0YXJ0c05ld1RleHRDaHVuayA9IG5ld1RleHRDaHVuazsgfQogCiAg
ICAgaW50IG9mZnNldEZvclBvc2l0aW9uSW5GcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQm
LCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAg
RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiwgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24s
IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0
RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlv
biwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgYm9vbCBpc1NWR0lubGluZVRleHRCb3goKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiAKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5
bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVj
dFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25z
dDsKIAotICAgIGJvb2wgYWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYs
IGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlckJveE1vZGVsT2JqZWN0JiwgUmVuZGVyU3R5bGUq
KTsKKyAgICBib29sIGFjcXVpcmVQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComLCBm
bG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJCb3hNb2RlbE9iamVjdCYsIGNvbnN0IFJlbmRlclN0
eWxlKik7CiAgICAgdm9pZCByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQq
JiwgY29uc3QgUGF0aCopOwogCi0gICAgYm9vbCBwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4
dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComLCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJT
dHlsZSopOworICAgIGJvb2wgcHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWludGluZyhH
cmFwaGljc0NvbnRleHQqJiwgZmxvYXQgc2NhbGluZ0ZhY3RvciwgY29uc3QgUmVuZGVyU3R5bGUq
KTsKICAgICB2b2lkIHJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyhHcmFw
aGljc0NvbnRleHQqJik7CiAKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRl
eHQmLCBUZXh0RGVjb3JhdGlvbiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50Jik7CiAgICAgdm9pZCBw
YWludERlY29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0JiwgVGV4dERlY29yYXRpb24s
IGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIFJlbmRlckJveE1vZGVsT2JqZWN0JiBkZWNvcmF0aW9u
UmVuZGVyZXIpOwotICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0
JiwgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IHN0
YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbik7Ci0gICAgdm9pZCBwYWludFRleHQoR3JhcGhp
Y3NDb250ZXh0JiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNv
bnN0IFNWR1RleHRGcmFnbWVudCYsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0
ZWRUZXh0T25seSk7CisgICAgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBSZW5kZXJTdHlsZSosIFRleHRSdW4mLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKTsKKyAgICB2b2lkIHBhaW50VGV4
dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxl
KiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgYm9vbCBoYXNTZWxlY3Rp
b24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KTsKIAogICAgIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRUZXN0
QWN0aW9uKSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdQYXRoRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdQYXRoRGF0YS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUGF0aERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3
IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVBhdGhGcm9tQ2lyY2xlRWxlbWVudCgKICAgICBSZW5kZXJF
bGVtZW50KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJl
cikKICAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgZmxvYXQg
ciA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUuc3ZnU3R5bGUoKS5yKCkpOwog
ICAgIGlmIChyID4gMCkgewogICAgICAgICBmbG9hdCBjeCA9IGxlbmd0aENvbnRleHQudmFsdWVG
b3JMZW5ndGgoc3R5bGUuc3ZnU3R5bGUoKS5jeCgpLCBMZW5ndGhNb2RlV2lkdGgpOwpAQCAtNTks
NyArNTksNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVQYXRoRnJvbUVsbGlwc2VFbGVtZW50CiAgICAg
UmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOwogICAgIGlmICgh
cmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5k
ZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAg
IFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChlbGVtZW50KTsKICAgICBmbG9hdCByeCA9
IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUuc3ZnU3R5bGUoKS5yeCgpLCBMZW5n
dGhNb2RlV2lkdGgpOwogICAgIGlmIChyeCA8PSAwKQpAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRp
YyB2b2lkIHVwZGF0ZVBhdGhGcm9tUmVjdEVsZW1lbnQoU1YKICAgICBpZiAoIXJlbmRlcmVyKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5
bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIFNWR0xlbmd0
aENvbnRleHQgbGVuZ3RoQ29udGV4dChlbGVtZW50KTsKICAgICBmbG9hdCB3aWR0aCA9IGxlbmd0
aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUud2lkdGgoKSwgTGVuZ3RoTW9kZVdpZHRoKTsK
ICAgICBpZiAod2lkdGggPD0gMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnBy
ZXBhcmVUb1JlbmRlCiAgICAgICAgIG1fcmVuZGVyaW5nRmxhZ3MgfD0gUmVzdG9yZUdyYXBoaWNz
Q29udGV4dDsKICAgICB9CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBtX3JlbmRlcmVyLT5z
dHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUoKTsKIAogICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBUcmVlUmVzb2x2ZXI6OlBhcmVudDo6UGFyZW50
KERvY3VtZW50JiBkCiB7CiB9CiAKLVRyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQoRWxlbWVu
dCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdlKQorVHJlZVJlc29s
dmVyOjpQYXJlbnQ6OlBhcmVudChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIENoYW5nZSBjaGFuZ2UpCiAgICAgOiBlbGVtZW50KCZlbGVtZW50KQogICAgICwgc3R5
bGUoc3R5bGUpCiAgICAgLCBjaGFuZ2UoY2hhbmdlKQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQg
VHJlZVJlc29sdmVyOjpwb3BTY29wZSgpCiAgICAgcmV0dXJuIG1fc2NvcGVTdGFjay5yZW1vdmVM
YXN0KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gVHJlZVJlc29sdmVyOjpz
dHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0
eWxlKQorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBUcmVlUmVzb2x2ZXI6OnN0eWxlRm9y
RWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5
bGUpCiB7CiAgICAgaWYgKCFtX2RvY3VtZW50LmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpICYmICFl
bGVtZW50LnJlbmRlcmVyKCkpIHsKICAgICAgICAgbV9kb2N1bWVudC5zZXRIYXNOb2Rlc1dpdGhQ
bGFjZWhvbGRlclN0eWxlKCk7CkBAIC0yODIsNyArMjgyLDcgQEAgcHJpdmF0ZToKIH07CiAjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQogCi12b2lkIFRyZWVSZXNvbHZlcjo6cHVzaFBhcmVudChFbGVt
ZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2UpCit2b2lkIFRy
ZWVSZXNvbHZlcjo6cHVzaFBhcmVudChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2UpCiB7CiAgICAgc2NvcGUoKS5zZWxlY3RvckZpbHRlci5w
dXNoUGFyZW50KCZlbGVtZW50KTsKIApAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgVHJlZVJlc29s
dmVyOjpyZXNvbHZlQ29tcG9zZWRUcmVlKCkKIAogICAgICAgICBib29sIHNob3VsZFJlc29sdmVG
b3JQc2V1ZG9FbGVtZW50ID0gc2hvdWxkUmVzb2x2ZVBzZXVkb0VsZW1lbnQoZWxlbWVudC5iZWZv
cmVQc2V1ZG9FbGVtZW50KCkpIHx8IHNob3VsZFJlc29sdmVQc2V1ZG9FbGVtZW50KGVsZW1lbnQu
YWZ0ZXJQc2V1ZG9FbGVtZW50KCkpOwogCi0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZTsKKyAg
ICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlOwogICAgICAgICBDaGFuZ2UgY2hhbmdlOwog
CiAgICAgICAgIGJvb2wgc2hvdWxkUmVzb2x2ZSA9IHBhcmVudC5jaGFuZ2UgPj0gSW5oZXJpdCB8
fCBlbGVtZW50Lm5lZWRzU3R5bGVSZWNhbGMoKSB8fCBzaG91bGRSZXNvbHZlRm9yUHNldWRvRWxl
bWVudCB8fCBhZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nIHx8IGVsZW1lbnQuaGFzRGlzcGxheUNv
bnRlbnRzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmgJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29s
dmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxVcGRhdGU+IHJlc29sdmUoQ2hhbmdlKTsKIAogcHJpdmF0ZToKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50JiwgUmVuZGVy
U3R5bGUmIGluaGVyaXRlZFN0eWxlKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IHN0eWxlRm9yRWxlbWVudChFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIGluaGVyaXRlZFN0
eWxlKTsKIAogICAgIHZvaWQgcmVzb2x2ZUNvbXBvc2VkVHJlZSgpOwogICAgIEVsZW1lbnRVcGRh
dGUgcmVzb2x2ZUVsZW1lbnQoRWxlbWVudCYpOwpAQCAtNzksMTMgKzc5LDEzIEBAIHByaXZhdGU6
CiAKICAgICBzdHJ1Y3QgUGFyZW50IHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudDsKLSAgICAg
ICAgUmVuZGVyU3R5bGUmIHN0eWxlOworICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGU7
CiAgICAgICAgIENoYW5nZSBjaGFuZ2U7CiAgICAgICAgIGJvb2wgZGlkUHVzaFNjb3BlIHsgZmFs
c2UgfTsKICAgICAgICAgYm9vbCBlbGVtZW50TmVlZGluZ1N0eWxlUmVjYWxjQWZmZWN0c05leHRT
aWJsaW5nRWxlbWVudFN0eWxlIHsgZmFsc2UgfTsKIAogICAgICAgICBQYXJlbnQoRG9jdW1lbnQm
LCBDaGFuZ2UpOwotICAgICAgICBQYXJlbnQoRWxlbWVudCYsIFJlbmRlclN0eWxlJiwgQ2hhbmdl
KTsKKyAgICAgICAgUGFyZW50KEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIENoYW5nZSk7
CiAgICAgfTsKIAogICAgIFNjb3BlJiBzY29wZSgpIHsgcmV0dXJuIG1fc2NvcGVTdGFjay5sYXN0
KCk7IH0KQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHB1c2hFbmNsb3NpbmdT
Y29wZSgpOwogICAgIHZvaWQgcG9wU2NvcGUoKTsKIAotICAgIHZvaWQgcHVzaFBhcmVudChFbGVt
ZW50JiwgUmVuZGVyU3R5bGUmLCBDaGFuZ2UpOworICAgIHZvaWQgcHVzaFBhcmVudChFbGVtZW50
JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBDaGFuZ2UpOwogICAgIHZvaWQgcG9wUGFyZW50KCk7CiAg
ICAgdm9pZCBwb3BQYXJlbnRzVG9EZXB0aCh1bnNpZ25lZCBkZXB0aCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTEgKzYx
LDI0IEBAIGJvb2wgVXBkYXRlOjp0ZXh0VXBkYXRlKGNvbnN0IFRleHQmIHRleHQKICAgICByZXR1
cm4gbV90ZXh0cy5jb250YWlucygmdGV4dCk7CiB9CiAKLVJlbmRlclN0eWxlKiBVcGRhdGU6OmVs
ZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAorY29uc3QgUmVuZGVyU3R5
bGUqIFVwZGF0ZTo6ZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7
CiAgICAgaWYgKGF1dG8qIHVwZGF0ZSA9IGVsZW1lbnRVcGRhdGUoZWxlbWVudCkpCiAgICAgICAg
IHJldHVybiB1cGRhdGUtPnN0eWxlLmdldCgpOwotICAgIHJldHVybiBlbGVtZW50LnJlbmRlclN0
eWxlKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYg
KCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICZyZW5kZXJl
ci0+c3R5bGUoKTsKK30KKworUmVuZGVyU3R5bGUqIFVwZGF0ZTo6ZWxlbWVudFN0eWxlKGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKGF1dG8qIHVwZGF0ZSA9IGVsZW1lbnRVcGRh
dGUoZWxlbWVudCkpCisgICAgICAgIHJldHVybiB1cGRhdGUtPnN0eWxlLmdldCgpOworICAgIGF1
dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiAmcmVuZGVyZXItPm11dGFibGVTdHls
ZSgpOwogfQogCiB2b2lkIFVwZGF0ZTo6YWRkRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBFbGVt
ZW50KiBwYXJlbnQsIEVsZW1lbnRVcGRhdGUmJiBlbGVtZW50VXBkYXRlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVVwZGF0ZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVVwZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgdGV4dFVwZGF0ZShjb25zdCBUZXh0JikgY29uc3Q7CiAKLSAgICBS
ZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmKSBjb25zdDsKKyAgICBjb25z
dCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmKSBjb25zdDsKKyAgICBS
ZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlKGNvbnN0IEVsZW1lbnQmKTsKIAogICAgIGNvbnN0IERv
Y3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDYsNyArNzQ2LDcg
QEAgdm9pZCBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YQogICAgIGNvbnRleHRF
bGVtZW50LT5zeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKCk7CiB9CiAKLU9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gU1ZHRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJl
bnRTdHlsZSwgUmVuZGVyU3R5bGUqKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTVkdFbGVtZW50
OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSopCiB7CiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgaW4gYSA8dXNlPiB0
cmVlIHdlIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUgZGVmaW5pdGlvbiB0cmVlLgogICAgIGlmIChh
dXRvKiBzdHlsZUVsZW1lbnQgPSB0aGlzLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKQpAQCAtNzcz
LDEyICs3NzMsMTIgQEAgdm9pZCBTVkdFbGVtZW50OjpzZXRVc2VPdmVycmlkZUNvbXB1dGVkUwog
ICAgICAgICBtX3N2Z1JhcmVEYXRhLT5zZXRVc2VPdmVycmlkZUNvbXB1dGVkU3R5bGUodmFsdWUp
OwogfQogCi1SZW5kZXJTdHlsZSogU1ZHRWxlbWVudDo6Y29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBw
c2V1ZG9FbGVtZW50U3BlY2lmaWVyKQorY29uc3QgUmVuZGVyU3R5bGUqIFNWR0VsZW1lbnQ6OmNv
bXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKIHsKICAgICBpZiAo
IW1fc3ZnUmFyZURhdGEgfHwgIW1fc3ZnUmFyZURhdGEtPnVzZU92ZXJyaWRlQ29tcHV0ZWRTdHls
ZSgpKQogICAgICAgICByZXR1cm4gRWxlbWVudDo6Y29tcHV0ZWRTdHlsZShwc2V1ZG9FbGVtZW50
U3BlY2lmaWVyKTsKIAotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHI7Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gbnVsbHB0cjsKICAgICBpZiAoRWxl
bWVudCogcGFyZW50ID0gcGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpKSB7CiAgICAgICAgIGlm
IChhdXRvIHJlbmRlcmVyID0gcGFyZW50LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcGFyZW50
U3R5bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzeW5jaHJv
bml6ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAg
ICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZUFsbEFuaW1hdGVkU1ZHQXR0cmlidXRlKFNWR0VsZW1l
bnQqKTsKICAKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShS
ZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92
ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hv
c3RTdHlsZSkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVk
RmVhdHVyZXMoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQpOwogICAgIHN0YXRpYyB2b2lkIHN5
bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsK
QEAgLTE4MSw3ICsxODEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgY2xhc3MgSW5zdGFuY2VJbnZhbGlk
YXRpb25HdWFyZDsKIAogcHJpdmF0ZToKLSAgICBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQ
c2V1ZG9JZCA9IE5PUFNFVURPKSBmaW5hbDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0
ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKSBmaW5hbDsKIAogICAgIHZpcnR1YWwgYm9vbCBp
c1N1cHBvcnRlZChTdHJpbmdJbXBsKiBmZWF0dXJlLCBTdHJpbmdJbXBsKiB2ZXJzaW9uKSBjb25z
dDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaAkocmV2aXNp
b24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
Km1fYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzOwogICAgIH0KIAotICAgIFJlbmRlclN0eWxl
KiBvdmVycmlkZUNvbXB1dGVkU3R5bGUoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKQorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBvdmVycmlkZUNvbXB1dGVkU3R5bGUo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogICAgIHsK
ICAgICAgICAgaWYgKCFtX3VzZU92ZXJyaWRlQ29tcHV0ZWRTdHlsZSkKLSAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmICghbV9vdmVy
cmlkZUNvbXB1dGVkU3R5bGUgfHwgbV9uZWVkc092ZXJyaWRlQ29tcHV0ZWRTdHlsZVVwZGF0ZSkg
ewogICAgICAgICAgICAgLy8gVGhlIHN0eWxlIGNvbXB1dGVkIGhlcmUgY29udGFpbnMgbm8gQ1NT
IEFuaW1hdGlvbnMvVHJhbnNpdGlvbnMgb3IgU01JTCBpbmR1Y2VkIHJ1bGVzIC0gdGhpcyBpcyBu
ZWVkZWQgdG8gY29tcHV0ZSB0aGUgImJhc2UgdmFsdWUiIGZvciB0aGUgU01JTCBhbmltYXRpb24g
c2FuZHdoaWNoIG1vZGVsLgogICAgICAgICAgICAgbV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgPSBl
bGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgcGFyZW50U3R5
bGUsIE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKS5yZW5kZXJTdHlsZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNyArNjMsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHR3JhcGhpY3NFbGVtZW50Ojpn
ZXRTCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHR3JhcGhpY3NFbGVtZW50OjphbmltYXRlZExvY2FsVHJh
bnNmb3JtKCkgY29uc3QKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwotICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxw
dHI7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkg
OiBudWxscHRyOwogCiAgICAgLy8gSWYgQ1NTIHByb3BlcnR5IHdhcyBzZXQsIHVzZSB0aGF0LCBv
dGhlcndpc2UgZmFsbGJhY2sgdG8gYXR0cmlidXRlIChpZiBzZXQpLgogICAgIGlmIChzdHlsZSAm
JiBzdHlsZS0+aGFzVHJhbnNmb3JtKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdM
ZW5ndGhDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVu
Z3RoQ29udGV4dC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMZW5ndGhDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIGZs
b2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb20KICAgICByZXR1cm4gMDsKIH0K
IAotc3RhdGljIGlubGluZSBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZp
bmcoY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCkKK3N0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVy
U3R5bGUqIHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKGNvbnN0IFNWR0VsZW1lbnQqIGNv
bnRleHQpCiB7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTIzNiwxMiArMjM2LDEyIEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxl
Rm8KIAogICAgIC8vIFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgYSBSZW5kZXJTVkdSb290IHJlbmRl
cmVyLCBjYXJyeWluZyBhIHN0eWxlLgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0
Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FTVMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9y
TGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHls
ZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAg
ICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNTgsNyAr
MjU4LDcgQEAgZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbQogCiBmbG9h
dCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tRU1TVG9Vc2VyVW5pdHMoZmxvYXQg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CisgICAgYXV0byog
c3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlm
ICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CkBAIC0yNjksNyArMjY5LDcgQEAgZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVy
dFZhbHVlRnJvbQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tVXNl
clVuaXRzVG9FWFMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2aW5nKG1fY29u
dGV4dCk7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyht
X2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVE
X0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yODgsNyArMjg4LDcgQEAgZmxvYXQgU1ZHTGVu
Z3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbQogCiBmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpj
b252ZXJ0VmFsdWVGcm9tRVhTVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxlRm9yTGVu
Z3RoUmVzb2x2aW5nKG1fY29udGV4dCk7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJTdHlsZUZv
ckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOwogICAgIGlmICghc3R5bGUpIHsKICAgICAgICAg
ZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4
LDcgQEAgYm9vbCBTVkdTdG9wRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChjbwogCiBDb2xvciBT
VkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpIGNvbnN0CiB7Ci0gICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDog
bnVsbHB0cjsKKyAgICBhdXRvKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5
bGUoKSA6IG51bGxwdHI7CiAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgZm9yIG51bGwgc3R5bGUg
ZXhpc3RzIHRvIGFkZHJlc3MgQnVnIFdLIDkwODE0LCBhIHJhcmUgY3Jhc2ggY29uZGl0aW9uIGlu
CiAgICAgLy8gd2hpY2ggdGhlIHJlbmRlcmVyIG9yIHN0eWxlIGlzIG51bGwuIFRoaXMgZW50aXJl
IGNsYXNzIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbCAoQnVnIFdLIDg2OTQxKQogICAgIC8vIGFu
ZCB3ZSB3aWxsIHRvbGVyYXRlIHRoaXMgbnVsbCBjaGVjayB1bnRpbCB0aGVuLgpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3
ICs0NSw3IEBAIFJlZjxTVkdUZXh0RWxlbWVudD4gU1ZHVGV4dEVsZW1lbnQ6OmNyZWEKIEFmZmlu
ZVRyYW5zZm9ybSBTVkdUZXh0RWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0
CiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSByZW5kZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1dG8q
IHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKIAog
ICAgIC8vIGlmIENTUyBwcm9wZXJ0eSB3YXMgc2V0LCB1c2UgdGhhdCwgb3RoZXJ3aXNlIGZhbGxi
YWNrIHRvIGF0dHJpYnV0ZSAoaWYgc2V0KQogICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+aGFzVHJh
bnNmb3JtKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIzLDcgKzgyMyw3IEBA
IEVkaXRvclN0YXRlIFdlYlBhZ2U6OmVkaXRvclN0YXRlKEluY2x1ZGUKICAgICAgICAgYXV0byYg
cG9zdExheW91dERhdGEgPSByZXN1bHQucG9zdExheW91dERhdGEoKTsKICAgICAgICAgaWYgKCFz
ZWxlY3Rpb24uaXNOb25lKCkpIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAg
ICAgICAgICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0
aW9uU3RhcnQoJmZyYW1lLCBub2RlVG9SZW1vdmUpKSB7CisgICAgICAgICAgICBpZiAoYXV0byog
c3R5bGUgPSBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJmZyYW1lLCBub2RlVG9SZW1v
dmUpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5mb250Q2FzY2FkZSgpLndlaWdodCgp
ID49IEZvbnRXZWlnaHRCb2xkKQogICAgICAgICAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS50
eXBpbmdBdHRyaWJ1dGVzIHw9IEF0dHJpYnV0ZUJvbGQ7CiAgICAgICAgICAgICAgICAgaWYgKHN0
eWxlLT5mb250Q2FzY2FkZSgpLml0YWxpYygpID09IEZvbnRJdGFsaWNPbikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277396</attachid>
            <date>2016-04-26 10:31:20 -0700</date>
            <delta_ts>2016-04-26 11:11:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>const-renderstyle-10.patch</filename>
            <type>text/plain</type>
            <size>189345</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDA4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyOCBAQAorMjAxNi0wNC0yNiAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVyRWxlbWVudDo6c3R5
bGUoKSBzaG91bGQgcmV0dXJuIGNvbnN0IFJlbmRlclN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTcwMTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdHlsZSBzaG91bGQgYmUgY2hhbmdlZCB2aWEg
c2V0U3R5bGUsIG5vdCBieSBtdXRhdGluZyBpdCBkaXJlY3RseS4KKworICAgICAgICBQdWxsaW5n
IHRoaXMgc3RyaW5nIHR1cm5zIFJlbmRlclN0eWxlIGNvbnN0IGluIG1hbnkgcGxhY2VzLgorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnN0YXJ0T2ZTdHlsZVJhbmdlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1
dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RP
TS5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBpbm5lckZyYW1lUXVhZF0pOgorICAgICAgICAoLVtE
T01Ob2RlIGNvbXB1dGVkRm9udFNpemVdKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uTGlzdEZv
ckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uT2Zmc2V0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6Y3VycmVudENvbG9yT3JWYWxpZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFRyYW5zaXRpb25Qcm9wZXJ0eVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbFNuYXBEZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JvbGxTbmFwUG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbFNuYXBDb29yZGlu
YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpsb2dVbmltcGxlbWVudGVkUHJvcGVydHlJRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5RnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmxpbmVIZWlnaHRGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFNpemVGcm9tU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFN0eWxlRnJvbVN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvbnRWYXJpYW50RnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRXZWln
aHRGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFN5bnRoZXNpc0Zyb21TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjp6b29tQWRqdXN0ZWRQYWRkaW5nT3JNYXJnaW5QaXhlbFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhZGRpbmdPck1hcmdpbklzUmVuZGVyZXJEZXBlbmRlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUmVnaW9uQnJlYWspOgorICAgICAgICAoV2Vi
Q29yZTo6aXNMYXlvdXREZXBlbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU3R5bGVJ
Zk5lZWRlZEZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVJlbmRlclN0eWxlRm9y
UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJv
cGVydHlNYXRjaGVzKToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
Lmg6CisgICAgICAgICogY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRXaWR0aEZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2aWV3cG9y
dEhlaWdodEZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhOjp2aWV3cG9ydE1pbkZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhOjp2aWV3cG9ydE1heEZhY3Rvcik6CisgICAgICAgICogY3NzL0NTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGE6OkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6cm9vdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OmNvbXB1dGluZ0ZvbnRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OmNvcHlXaXRoQWRqdXN0ZWRab29tKToK
KyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpyb290
RWxlbWVudFN0eWxlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5oOgorICAgICAgICAq
IGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVl
cnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IpOgorICAgICAgICAqIGNzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmg6CisgICAgICAgICogY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJva2VEYXNoQXJyYXlUb0NTU1ZhbHVlTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjphZGp1c3RTVkdQ
YWludEZvckN1cnJlbnRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wdXRlZFN0eWxlRXh0
cmFjdG9yOjpzdmdQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKiBjc3MvU291cmNlU2l6ZUxpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVs
dExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlU2l6ZXNBdHRyaWJ1dGUpOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJD
dXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlm
aWVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJ
bWFnZU1vZGlmaWVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaGVyaXRDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQWx0KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQXRTaGFkb3dCb3VuZGFyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmRvY3VtZW50U2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjp0
YWtlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnBhcmVu
dFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpyb290RWxl
bWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpyZWdp
b25Gb3JTdHlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpl
bGVtZW50TGlua1N0YXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cyk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5k
aW5nU3R5bGVzaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldFZpc3VhbGx5
T3JkZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3JlYXRlUGFyc2VyKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpzdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OnJlc29sdmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0ZvckVtcHR5
U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmJlZm9yZU9yQWZ0ZXJQc2V1ZG9FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmV4aXN0aW5nQ29tcHV0ZWRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpyZXNvbHZlQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50Ojpjb21wdXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmRpZERldGFjaFJlbmRlcmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZXNvbHZl
Q3VzdG9tU3R5bGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUVkaXRhYmlsaXR5RnJvbUNvbXB1dGVk
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cHNldWRvQXdhcmVMYXN0Q2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29tcHV0ZWRTdHlsZSk6CisgICAgICAgICogZG9tL05v
ZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZVJlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpyZW5kZXJTdHlsZSk6CisgICAgICAgICogZG9tL1BzZXVkb0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUpOgorICAgICAg
ICAqIGRvbS9Qc2V1ZG9FbGVtZW50Lmg6CisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNOZXdMaW5lQXRQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJlbmRlclN0eWxl
T2ZFbmNsb3NpbmdUZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVu
dENvbW1hbmQ6OnJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjplbmRPZk5leHRQYXJh
Z3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZCk6CisgICAgICAgICogZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmluaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVk
KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAqIGVkaXRpbmcv
RWRpdG9yLmg6CisgICAgICAgICogZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5KToKKyAgICAg
ICAgKiBlZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
Z2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKToKKyAgICAg
ICAgKiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmli
dXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRpdGxlRWxlbWVudDo6Y29tcHV0ZWRUZXh0V2l0aERpcmVjdGlvbik6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5Ojpmb250c05lZWRVcGRhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6Omlu
aXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
VGV4dEJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6dG9UZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFJlc291cmNl
UHJlbG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxSZXNvdXJjZVByZWxvYWRlcjo6
cHJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjptZWRpYUF0dHJpYnV0ZU1hdGNoZXMpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTbGlkZXJUaHVtYjo6UmVuZGVyU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
U2xpZGVyVGh1bWJFbGVtZW50Ojpob3N0SW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVy
VGh1bWJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2xp
ZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDb250cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
bnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpUZXh0Q29udHJv
bFBsYWNlaG9sZGVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbFBsYWNl
aG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKyAgICAgICAgKiBodG1sL3NoYWRv
dy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcik6Cisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzb2x2ZVN0ZXBzRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uQmFzZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6fkFuaW1hdGlvbkJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6cmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkJhc2U6OnNldEFuaW1hdGlvbik6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVy
OjpjYW5jZWxBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRl
cmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNp
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlm
cmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjph
bmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDoK
KyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpyZXNldCk6CisgICAgICAgICogcGFn
ZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkltcGxp
Y2l0QW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpLZXlm
cmFtZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6ZmV0
Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OktleWZy
YW1lQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFt
ZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHBhZ2UvaW9zL0ZyYW1lSU9TLm1tOgorICAgICAgICAo
V2ViQ29yZTo6YW5jZXN0b3JSZXNwb25kaW5nVG9TY3JvbGxXaGVlbEV2ZW50cyk6CisgICAgICAg
ICogcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZsb3dUaHJlYWRDb250cm9sbGVyOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcFJlY3RGb3JOaW5l
UGllY2VJbWFnZVN0cmlwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpmaXJzdExpbmVCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZUZvckZp
cnN0TGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExl
dHRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjcmVhdGVGaXJzdExl
dHRlclJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRqdXN0QmxvY2tDaGlsZEZvclBh
Z2luYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlTWluaW11bVBhZ2VIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGp1c3RDb21wdXRlZEZvbnRT
aXplcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6Ym9yZGVyUmFkaWkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjplbmNsb3Np
bmdGbG9hdFBhaW50aW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dp
Y2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclBy
b3BhZ2F0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmFwcGx5VG9wTGVmdExvY2F0aW9uT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6aGFzUmVuZGVyT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpoYXNWaXN1YWxPdmVyZmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpiYWNrZ3JvdW5kUm91bmRlZFJlY3RBZGp1c3RlZEZvckJsZWVkQXZvaWRhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
dXR0b246OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6c3R5bGVX
aWxsQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6c3R5bGVEaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpzZXR1cElubmVyU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpzdHlsZVdpbGxDaGFuZ2UpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OmNyZWF0ZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp1bmNh
Y2hlZEZpcnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmNh
Y2hlZEZpcnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmZp
cnN0TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnN0eWxlV2ls
bENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjphZGRDb250cm9sU3Rh
dGVzRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Z2V0Q2Fj
aGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6Z2V0TXV0
YWJsZUNhY2hlZFBzZXVkb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6
OmdldFVuY2FjaGVkUHNldWRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVu
dDo6cGFpbnRPdXRsaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6aGFzSW5pdGlhbGl6ZWRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpzdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJFbGVtZW50OjptdXRhYmxlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RWxlbWVudDo6ZWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUmVu
ZGVySW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckVtYmVkZGVkT2JqZWN0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OlJlbmRl
ckZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRl
Rmxvd1RocmVhZFN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6bGF5b3V0U2hhZG93Q29udHJvbHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzdHls
ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5
c0NyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnBhaW50
T3V0bGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpw
YWludFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjppdGVtT2Zmc2V0Rm9yQWxpZ25tZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0TWFya2VyOjpsaW5lSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpjb21wdXRl
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVl
ZVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVyU3R5bGUpOgorICAgICAgICAo
UmVuZGVyTWVudUxpc3Q6OnVwZGF0ZU9wdGlvbnNXaWR0aCk6CisgICAgICAgIChSZW5kZXJNZW51
TGlzdDo6aXRlbVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRDb2x1bW5TcGFubmVyKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXI6OmNyZWF0ZUFub255bW91cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50OjpjaGVja1JlZ2lvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlubmVyTGluZUhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpkZWNvcmF0aW9uQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG9yc0FuZFN0eWxlcyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjptaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjptYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludFJv
d0dyb3VwQm9yZGVySWZSZXF1aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpwaHlzaWNhbEJvcmRl
ckZvckRpcmVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNoYXJhY3RlckF0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHQ6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmZpcnN0
TGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmdldENhY2hlZFBzZXVk
b1N0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmxheW91dFNwZWNpYWxFeGNsdWRl
ZENoaWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5
b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5
bGVEaWRDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZyYWdtZW50OjpzdHlsZURpZENoYW5nZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyUmFkaWlGcm9tU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2spOgor
ICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnBhaW50Rmxvdyk6CisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpoaXRUZXN0Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5n
L1RleHRBdXRvU2l6aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvU2l6aW5nS2V5
OjpUZXh0QXV0b1NpemluZ0tleSk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5n
Lmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b1NpemluZ0tleTo6c3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEF1dG9TaXppbmdLZXk6OmlzRGVsZXRlZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVUZXh0
U2VsZWN0aW9uUGFpbnRTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdD
b250ZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvb3Q6OmxheW91dCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpyZXNldENvbHVtblJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNl
dENvbHVtblNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmluaGVyaXRDb2x1
bW5Qcm9wZXJ0aWVzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0VHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1Pcmln
aW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5Z
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25C
YWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmFjcXVpcmVQYWludGluZ1Jlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGlu
Z1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnByZXBhcmVH
cmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFk
b3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVQYXRo
RnJvbUNpcmNsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUGF0aEZyb21FbGxp
cHNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVQYXRoRnJvbVJlY3RFbGVtZW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29u
dGVudCk6CisgICAgICAgICogc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6cG9wU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlRyZWVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpUcmVlUmVzb2x2ZXI6OnB1c2hQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlRyZWVSZXNvbHZlcjo6cmVzb2x2ZUNvbXBvc2VkVHJlZSk6CisgICAgICAgICogc3R5
bGUvU3R5bGVUcmVlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpUcmVlUmVz
b2x2ZXI6OnNjb3BlKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVVwZGF0ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6VXBkYXRlOjp0ZXh0VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpVcGRhdGU6OmVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
VXBkYXRlOjphZGRFbGVtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVVwZGF0ZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlVwZGF0ZTo6ZG9jdW1lbnQpOgorICAgICAgICAqIHN2Zy9T
VkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnN5bmNocm9uaXpl
U3lzdGVtTGFuZ3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6cmVzb2x2ZUN1
c3RvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnNldFVzZU92ZXJyaWRl
Q29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpjb21wdXRlZFN0
eWxlKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVt
ZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6ZW5z
dXJlQW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnRSYXJlRGF0YTo6b3ZlcnJpZGVDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBzdmcvU1ZH
R3JhcGhpY3NFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYXBoaWNzRWxlbWVu
dDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSk6CisgICAgICAgICogc3ZnL1NWR0xlbmd0aENvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVl
RnJvbVBlcmNlbnRhZ2VUb1VzZXJVbml0cyk6CisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJTdHls
ZUZvckxlbmd0aFJlc29sdmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0
Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9FTVMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVNU1RvVXNlclVuaXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VY
Uyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9t
RVhTVG9Vc2VyVW5pdHMpOgorICAgICAgICAqIHN2Zy9TVkdTdG9wRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSk6
CisgICAgICAgICogc3ZnL1NWR1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKToKKwogMjAxNi0wNC0yNiAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIERyb3Ag
W1VzZVBvaW50ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzXSBmcm9tIFNwZWVj
aFN5bnRoZXNpcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTM0LDcgKzExMzQsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHls
ZVJhbmdlCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHZpc2libGVQb3MuZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIFJlbmRlck9iamVj
dCogc3RhcnRSZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZy
ZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvKiBzdHlsZSA9ICZyZW5kZXJlci0+c3R5bGUoKTsK
IAogICAgIC8vIHRyYXZlcnNlIGJhY2t3YXJkIGJ5IHJlbmRlcmVyIHRvIGxvb2sgZm9yIHN0eWxl
IGNoYW5nZQogICAgIGZvciAoUmVuZGVyT2JqZWN0KiByID0gcmVuZGVyZXItPnByZXZpb3VzSW5Q
cmVPcmRlcigpOyByOyByID0gci0+cHJldmlvdXNJblByZU9yZGVyKCkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgQXRrQXR0cmlidXRl
U2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IG9iamVjdC0+cmVuZGVyZXIoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSAmcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byogc3R5bGUgPSAmcmVuZGVyZXItPnN0
eWxlKCk7CiAKICAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gYnVmZmVyKGdfc3RyZHVwX3ByaW50ZigiJWkiLCBzdHlsZS0+Zm9udFNp
emUoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJl
dmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTkwLDcg
KzE5OTAsNyBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldE51bWJlcihOCiAKIHN0
YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyogYXR0clN0cmluZywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgTlNSYW5nZSByYW5nZSkK
IHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRv
JiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIAogICAgIC8vIHNldCBiYXNpYyBmb250
IGluZm8KICAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEZvbnQoYXR0clN0cmluZywgc3R5bGUuZm9u
dENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmdldENURm9udCgpLCByYW5nZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5OSw3ICs0OTks
NyBAQCAtIChXS1F1YWQpaW5uZXJGcmFtZVF1YWQgICAgICAgLy8gdGFrZXMgCiAgICAgaWYgKCFy
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGVtcHR5UXVhZCgpOwogCi0gICAgUmVuZGVyU3R5bGUm
IHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlci0+
c3R5bGUoKTsKICAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcmVuZGVyZXItPmFic29sdXRlQm91
bmRpbmdCb3hSZWN0KHRydWUgLyogdXNlIHRyYW5zZm9ybXMqLyk7CiAKICAgICBib3VuZGluZ0Jv
eC5tb3ZlKHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpLCBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKTsK
QEAgLTUxMyw3ICs1MTMsNyBAQCAtIChXS1F1YWQpaW5uZXJGcmFtZVF1YWQgICAgICAgLy8gdGFr
ZXMgCiAtIChmbG9hdCljb21wdXRlZEZvbnRTaXplCiB7CiAgICAgV2ViQ29yZTo6Tm9kZSAqbm9k
ZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVuZGVyU3R5bGUgKnN0eWxlID0gbm9kZS0+cmVuZGVyU3R5
bGUoKTsKKyAgICBhdXRvICpzdHlsZSA9IG5vZGUtPnJlbmRlclN0eWxlKCk7CiAgICAgaWYgKCFz
dHlsZSkKICAgICAgICAgcmV0dXJuIDAuMGY7CiAgICAgcmV0dXJuIHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKS5jb21wdXRlZFNpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAwLDcgKzcwMCw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0PiBjcmVh
dGVQb3NpdGlvbkwKICAgICByZXR1cm4gcG9zaXRpb25MaXN0OwogfQogCi1zdGF0aWMgUmVmUHRy
PENTU1ZhbHVlPiBwb3NpdGlvbk9mZnNldFZhbHVlKFJlbmRlclN0eWxlJiBzdHlsZSwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlEKQorc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcG9zaXRpb25PZmZz
ZXRWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCkKIHsKICAgICBMZW5ndGggbGVuZ3RoOwogICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewpAQCAt
NzM3LDcgKzczNyw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBvc2l0aW9uT2Zmc2V0VmEK
ICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVBdXRvKTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDb21wdXRl
ZFN0eWxlRXh0cmFjdG9yOjpjdXJyZW50Q29sb3JPclZhbGlkQ29sb3IoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKIHsKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGRvZXMgTk9UIGxvb2sgYXQgdmlzaXRlZCBpbmZvcm1hdGlvbiwgc28gdGhh
dCBjb21wdXRlZCBzdHlsZSBkb2Vzbid0IGV4cG9zZSB0aGF0LgogICAgIGlmICghY29sb3IuaXNW
YWxpZCgpKQpAQCAtMTE0Myw3ICsxMTQzLDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IGdl
dFRyYW5zaXRpb25QcgogfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXN0YXRpYyBS
ZWY8Q1NTVmFsdWVMaXN0PiBzY3JvbGxTbmFwRGVzdGluYXRpb24oUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBMZW5ndGhTaXplJiBkZXN0aW5hdGlvbikKK3N0YXRpYyBSZWY8Q1NTVmFsdWVMaXN0
PiBzY3JvbGxTbmFwRGVzdGluYXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBM
ZW5ndGhTaXplJiBkZXN0aW5hdGlvbikKIHsKICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgbGlzdC5nZXQoKS5hcHBlbmQoem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChkZXN0aW5hdGlvbi53aWR0aCgpLCBzdHlsZSkpOwpAQCAt
MTE1MSw3ICsxMTUxLDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZUxpc3Q+IHNjcm9sbFNuYXBEZXN0
aQogICAgIHJldHVybiBsaXN0OwogfQogCi1zdGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxTbmFw
UG9pbnRzKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgU2Nyb2xsU25hcFBvaW50cyogcG9pbnRz
KQorc3RhdGljIFJlZjxDU1NWYWx1ZT4gc2Nyb2xsU25hcFBvaW50cyhjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IFNjcm9sbFNuYXBQb2ludHMqIHBvaW50cykKIHsKICAgICBpZiAoIXBv
aW50cykKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CkBAIC0xMTY2LDcgKzExNjYsNyBAQCBzdGF0aWMg
UmVmPENTU1ZhbHVlPiBzY3JvbGxTbmFwUG9pbnRzKFJlCiAgICAgcmV0dXJuIFdURk1vdmUobGlz
dCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTVmFsdWU+IHNjcm9sbFNuYXBDb29yZGluYXRlcyhSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFZlY3RvcjxMZW5ndGhTaXplPiYgY29vcmRpbmF0ZXMpCitz
dGF0aWMgUmVmPENTU1ZhbHVlPiBzY3JvbGxTbmFwQ29vcmRpbmF0ZXMoY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBWZWN0b3I8TGVuZ3RoU2l6ZT4mIGNvb3JkaW5hdGVzKQogewogICAg
IGlmIChjb29yZGluYXRlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwpAQCAtMTgw
Nyw3ICsxODA3LDcgQEAgc3RhdGljIHZvaWQgbG9nVW5pbXBsZW1lbnRlZFByb3BlcnR5SUQoQwog
ICAgIExPR19FUlJPUigiV2ViS2l0IGRvZXMgbm90IHlldCBpbXBsZW1lbnQgZ2V0Q29tcHV0ZWRT
dHlsZSBmb3IgJyVzJy4iLCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHlJRCkpOwogfQogCi1zdGF0
aWMgUmVmPENTU1ZhbHVlTGlzdD4gZm9udEZhbWlseUZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5
bGUpCitzdGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gZm9udEZhbWlseUZyb21TdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVh
dGVDb21tYVNlcGFyYXRlZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+
Zm9udENhc2NhZGUoKS5mYW1pbHlDb3VudCgpOyArK2kpCkBAIC0xODE1LDcgKzE4MTUsNyBAQCBz
dGF0aWMgUmVmPENTU1ZhbHVlTGlzdD4gZm9udEZhbWlseUZyb21TCiAgICAgcmV0dXJuIGxpc3Q7
CiB9CiAKLXN0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVIZWlnaHRGcm9tU3R5bGUo
UmVuZGVyU3R5bGUmIHN0eWxlKQorc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZUhl
aWdodEZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgTGVuZ3RoIGxl
bmd0aCA9IHN0eWxlLmxpbmVIZWlnaHQoKTsKICAgICBpZiAobGVuZ3RoLmlzTmVnYXRpdmUoKSkg
Ly8gSWYgdHJ1ZSwgbGluZS1oZWlnaHQgbm90IHNldDsgdXNlIHRoZSBmb250J3MgbGluZSBzcGFj
aW5nLgpAQCAtMTgzMCwxOSArMTgzMCwxOSBAQCBzdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiBsaW5lSGVpZ2h0CiAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoZmxvYXRWYWx1
ZUZvckxlbmd0aChsZW5ndGgsIDApLCBzdHlsZSk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IGZvbnRTaXplRnJvbVN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKK3N0YXRpYyBS
ZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRTaXplRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkKIHsKICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS5mb250
RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKSwgc3R5bGUpOwogfQogCi1zdGF0aWMgUmVmPENT
U1ByaW1pdGl2ZVZhbHVlPiBmb250U3R5bGVGcm9tU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQor
c3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFN0eWxlRnJvbVN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLml0
YWxpYygpKQogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVJdGFsaWMpOwogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiB9CiAK
LXN0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJpYW50RnJvbVN0eWxlKFJlbmRlclN0eWxlKiBz
dHlsZSkKK3N0YXRpYyBSZWY8Q1NTVmFsdWU+IGZvbnRWYXJpYW50RnJvbVN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnZh
cmlhbnRTZXR0aW5ncygpLmlzQWxsTm9ybWFsKCkpCiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CkBA
IC0yMDI5LDcgKzIwMjksNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250VmFyaWFudEZyb21T
dHlsCiAgICAgcmV0dXJuIFdURk1vdmUobGlzdCk7CiB9CiAKLXN0YXRpYyBSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IGZvbnRXZWlnaHRGcm9tU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQorc3RhdGlj
IFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdodEZyb21TdHlsZShjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUpCiB7CiAgICAgc3dpdGNoIChzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkud2Vp
Z2h0KCkpIHsKICAgICBjYXNlIEZvbnRXZWlnaHQxMDA6CkBAIC0yMDU1LDcgKzIwNTUsNyBAQCBz
dGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250V2VpZ2h0CiAgICAgcmV0dXJuIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFs
KTsKIH0KIAotc3RhdGljIFJlZjxDU1NWYWx1ZT4gZm9udFN5bnRoZXNpc0Zyb21TdHlsZShSZW5k
ZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgUmVmPENTU1ZhbHVlPiBmb250U3ludGhlc2lzRnJvbVN0
eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUuZm9udERlc2Ny
aXB0aW9uKCkuZm9udFN5bnRoZXNpcygpID09IEZvbnRTeW50aGVzaXNOb25lKQogICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKQEAgLTIwNzIsNyArMjA3Miw3IEBAIHR5cGVkZWYgY29uc3QgTGVuZ3RoJiAo
UmVuZGVyU3R5bGU6OipSZW4KIHR5cGVkZWYgTGF5b3V0VW5pdCAoUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OipSZW5kZXJCb3hDb21wdXRlZENTU1ZhbHVlR2V0dGVyKSgpIGNvbnN0OwogCiB0ZW1wbGF0
ZTxSZW5kZXJTdHlsZUxlbmd0aEdldHRlciBsZW5ndGhHZXR0ZXIsIFJlbmRlckJveENvbXB1dGVk
Q1NTVmFsdWVHZXR0ZXIgY29tcHV0ZWRDU1NWYWx1ZUdldHRlcj4KLWlubGluZSBSZWZQdHI8Q1NT
VmFsdWU+IHpvb21BZGp1c3RlZFBhZGRpbmdPck1hcmdpblBpeGVsVmFsdWUoUmVuZGVyU3R5bGUm
IHN0eWxlLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoraW5saW5lIFJlZlB0cjxDU1NWYWx1ZT4g
em9vbUFkanVzdGVkUGFkZGluZ09yTWFyZ2luUGl4ZWxWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgTGVuZ3RoIHVuem9vbXplZExl
bmd0aCA9IChzdHlsZS4qbGVuZ3RoR2V0dGVyKSgpOwogICAgIGlmICghaXM8UmVuZGVyQm94Pihy
ZW5kZXJlcikgfHwgdW56b29temVkTGVuZ3RoLmlzRml4ZWQoKSkKQEAgLTIwODEsNyArMjA4MSw3
IEBAIGlubGluZSBSZWZQdHI8Q1NTVmFsdWU+IHpvb21BZGp1c3RlZFBhZGQKIH0KIAogdGVtcGxh
dGU8UmVuZGVyU3R5bGVMZW5ndGhHZXR0ZXIgbGVuZ3RoR2V0dGVyPgotaW5saW5lIGJvb2wgcGFk
ZGluZ09yTWFyZ2luSXNSZW5kZXJlckRlcGVuZGVudChSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCitpbmxpbmUgYm9vbCBwYWRkaW5nT3JNYXJnaW5Jc1JlbmRlcmVy
RGVwZW5kZW50KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKIHsKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNCb3goKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMjEzOSw3ICsyMTM5LDcgQEAgc3RhdGljIENTU1ZhbHVlSUQgY29u
dmVydFRvUmVnaW9uQnJlYWsoQgogfQogI2VuZGlmCiAgICAgCi1zdGF0aWMgYm9vbCBpc0xheW91
dERlcGVuZGVudChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFJlbmRlclN0eWxlKiBzdHlsZSwg
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3N0YXRpYyBib29sIGlzTGF5b3V0RGVwZW5kZW50KENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQogewogICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXaWR0aDoKQEAgLTIyNjcsNyArMjI2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCB1cGRhdGVTdHlsZUlmTmVlZGVkRm8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlu
bGluZSBSZW5kZXJTdHlsZSogY29tcHV0ZVJlbmRlclN0eWxlRm9yUHJvcGVydHkoTm9kZSogc3R5
bGVkTm9kZSwgUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllciwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBvd25lZFN0eWxlKQorc3Rh
dGljIGlubGluZSBjb25zdCBSZW5kZXJTdHlsZSogY29tcHV0ZVJlbmRlclN0eWxlRm9yUHJvcGVy
dHkoTm9kZSogc3R5bGVkTm9kZSwgUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllciwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBvd25l
ZFN0eWxlKQogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzdHlsZWROb2RlLT5yZW5k
ZXJlcigpOwogCkBAIC0yMzczLDcgKzIzNzMsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVk
U3R5bGVFeHRyYWN0b3I6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBvd25lZFN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IG51bGxwdHI7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gbnVsbHB0cjsKICAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbnVsbHB0cjsKICAgICBib29sIGZvcmNlRnVsbExheW91
dCA9IGZhbHNlOwogICAgIGlmICh1cGRhdGVMYXlvdXQpIHsKQEAgLTM4NjEsNyArMzg2MSw3IEBA
IHVuc2lnbmVkIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6bGUKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbm9kZS0+Y29t
cHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOworICAgIGF1dG8qIHN0eWxlID0g
bm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwogICAgIGlmICgh
c3R5bGUpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zODgwLDcgKzM4ODAsNyBAQCBTdHJpbmcg
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjppdGVtCiAgICAgaWYgKCFub2RlKQogICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG5vZGUt
PmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKKyAgICBhdXRvKiBzdHls
ZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKICAgICBp
ZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICAKQEAgLTM4OTks
NyArMzg5OSw3IEBAIGJvb2wgQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlNYXQKIHsK
ICAgICBpZiAocHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUZvbnRTaXplICYmIGlzPENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpICYmIG1fbm9kZSkgewogICAgICAgICBtX25vZGUtPmRvY3VtZW50
KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgICAgIGlmIChS
ZW5kZXJTdHlsZSogc3R5bGUgPSBtX25vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50
U3BlY2lmaWVyKSkgeworICAgICAgICBpZiAoYXV0byogc3R5bGUgPSBtX25vZGUtPmNvbXB1dGVk
U3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyKSkgewogICAgICAgICAgICAgaWYgKENTU1Zh
bHVlSUQgc2l6ZUlkZW50aWZpZXIgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNp
emVBc0lkZW50aWZpZXIoKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpICYmIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVl
SUQoKSA9PSBzaXplSWRlbnRpZmllcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNzAsMTAgKzcwLDEwIEBAIHByaXZhdGU6CiAgICAgTm9kZSogc3R5bGVkTm9kZSgpIGNv
bnN0OwogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBzdmdQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5
SUQsIEVVcGRhdGVMYXlvdXQpIGNvbnN0OwotICAgIFJlZlB0cjxTVkdQYWludD4gYWRqdXN0U1ZH
UGFpbnRGb3JDdXJyZW50Q29sb3IoUGFzc1JlZlB0cjxTVkdQYWludD4sIFJlbmRlclN0eWxlKikg
Y29uc3Q7CisgICAgUmVmUHRyPFNWR1BhaW50PiBhZGp1c3RTVkdQYWludEZvckN1cnJlbnRDb2xv
cihQYXNzUmVmUHRyPFNWR1BhaW50PiwgY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogICAg
IHN0YXRpYyBSZWY8Q1NTVmFsdWU+IHZhbHVlRm9yU2hhZG93KGNvbnN0IFNoYWRvd0RhdGEqLCBD
U1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSYsIEFkanVzdFBpeGVsVmFsdWVzRm9yQ29t
cHV0ZWRTdHlsZSA9IEFkanVzdFBpeGVsVmFsdWVzKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJTdHlsZSosIGNvbnN0IENvbG9y
JikgY29uc3Q7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjdXJyZW50Q29sb3JPclZh
bGlkQ29sb3IoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBDb2xvciYpIGNvbnN0OwogCiAgICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4gZ2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3JTaG9ydGhhbmRQcm9w
ZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmKSBjb25zdDsKICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBnZXRDU1NQcm9wZXJ0eVZhbHVlc0ZvclNpZGVzU2hvcnRoYW5kKGNvbnN0
IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHAJKHJldmlzaW9uIDIwMDA2NykK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBmbG9hdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhOjp6b29tKCkgCiBkb3VibGUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6dmlld3BvcnRX
aWR0aEZhY3RvcigpIGNvbnN0CiB7CiAgICAgaWYgKG1fc3R5bGUgJiYgIW1fY29tcHV0aW5nRm9u
dFNpemUpCi0gICAgICAgIG1fc3R5bGUtPnNldEhhc1ZpZXdwb3J0VW5pdHMoKTsKKyAgICAgICAg
Y29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KG1fc3R5bGUpLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7
CiAKICAgICBpZiAoIW1fcmVuZGVyVmlldykKICAgICAgICAgcmV0dXJuIDA7CkBAIC01Nyw3ICs1
Nyw3IEBAIGRvdWJsZSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2aWV3cG8KIGRvdWJsZSBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2aWV3cG9ydEhlaWdodEZhY3RvcigpIGNvbnN0CiB7
CiAgICAgaWYgKG1fc3R5bGUgJiYgIW1fY29tcHV0aW5nRm9udFNpemUpCi0gICAgICAgIG1fc3R5
bGUtPnNldEhhc1ZpZXdwb3J0VW5pdHMoKTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHls
ZSo+KG1fc3R5bGUpLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7CiAKICAgICBpZiAoIW1fcmVuZGVy
VmlldykKICAgICAgICAgcmV0dXJuIDA7CkBAIC02OCw3ICs2OCw3IEBAIGRvdWJsZSBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhOjp2aWV3cG8KIGRvdWJsZSBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhOjp2aWV3cG9ydE1pbkZhY3RvcigpIGNvbnN0CiB7CiAgICAgaWYgKG1fc3R5bGUgJiYgIW1f
Y29tcHV0aW5nRm9udFNpemUpCi0gICAgICAgIG1fc3R5bGUtPnNldEhhc1ZpZXdwb3J0VW5pdHMo
KTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KG1fc3R5bGUpLT5zZXRIYXNWaWV3
cG9ydFVuaXRzKCk7CiAKICAgICBpZiAoIW1fcmVuZGVyVmlldykKICAgICAgICAgcmV0dXJuIDA7
CkBAIC04MCw3ICs4MCw3IEBAIGRvdWJsZSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2aWV3
cG8KIGRvdWJsZSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp2aWV3cG9ydE1heEZhY3Rvcigp
IGNvbnN0CiB7CiAgICAgaWYgKG1fc3R5bGUgJiYgIW1fY29tcHV0aW5nRm9udFNpemUpCi0gICAg
ICAgIG1fc3R5bGUtPnNldEhhc1ZpZXdwb3J0VW5pdHMoKTsKKyAgICAgICAgY29uc3RfY2FzdDxS
ZW5kZXJTdHlsZSo+KG1fc3R5bGUpLT5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7CiAKICAgICBpZiAo
IW1fcmVuZGVyVmlldykKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmgJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgUmVuZGVyVmlldzsKIAogY2xhc3MgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSB7CiBwdWJsaWM6Ci0gICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGNv
bnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGZsb2F0IHpvb20sIGJvb2wgY29tcHV0aW5nRm9u
dFNpemUgPSBmYWxzZSkKKyAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgY29uc3QgUmVuZGVy
VmlldyogcmVuZGVyVmlldywgZmxvYXQgem9vbSwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSA9IGZh
bHNlKQogICAgICAgICA6IG1fc3R5bGUoc3R5bGUpCiAgICAgICAgICwgbV9yb290U3R5bGUocm9v
dFN0eWxlKQogICAgICAgICAsIG1fcmVuZGVyVmlldyhyZW5kZXJWaWV3KQpAQCAtNTIsNyArNTIs
NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh6b29tID4gMCk7CiAgICAgfQogCi0gICAgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0
eWxlKiByb290U3R5bGUsIGNvbnN0IFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGJvb2wgY29tcHV0
aW5nRm9udFNpemUgPSBmYWxzZSkKKyAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgY29uc3Qg
UmVuZGVyVmlldyogcmVuZGVyVmlldywgYm9vbCBjb21wdXRpbmdGb250U2l6ZSA9IGZhbHNlKQog
ICAgICAgICA6IG1fc3R5bGUoc3R5bGUpCiAgICAgICAgICwgbV9yb290U3R5bGUocm9vdFN0eWxl
KQogICAgICAgICAsIG1fcmVuZGVyVmlldyhyZW5kZXJWaWV3KQpAQCAtNjcsNyArNjcsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3R5bGU7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3N0eWxlOyB9CiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdFN0eWxlOyB9CiAgICAgZmxvYXQgem9vbSgpIGNvbnN0OwogICAg
IGJvb2wgY29tcHV0aW5nRm9udFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbXB1dGluZ0ZvbnRT
aXplOyB9CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
UmVuZGVyU3R5bGUqIG1fc3R5bGU7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIG1fc3R5bGU7CiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIG1fcm9vdFN0eWxlOwogICAgIGNvbnN0IFJlbmRlclZpZXcq
IG1fcmVuZGVyVmlldzsKICAgICBmbG9hdCBtX3pvb207CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVG9TdHlsZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVG9TdHlsZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgUmVuZGVy
U3R5bGUqIENTU1RvU3R5bGVNYXA6OnN0eWxlKCkgY29ucwogICAgIHJldHVybiBtX3Jlc29sdmVy
LT5zdHlsZSgpOwogfQogCi1SZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRT
dHlsZSgpIGNvbnN0Citjb25zdCBSZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1l
bnRTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5
bGUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogICAgIC8vIHNpbWlsYXIgdG8gaG93IFBhaW50
SW5mby9MYXlvdXRTdGF0ZSBjYWNoZSB2YWx1ZXMgbmVlZGVkIGZvcgogICAgIC8vIHRoZSBjdXJy
ZW50IHBhaW50L2xheW91dC4KICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdDsKLSAgICBS
ZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0OworICAgIGNvbnN0IFJlbmRlclN0
eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3Q7CiAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMo
KSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9mIHNvbWUgc29y
dCBvZiBTdHlsZUltYWdlQ2FjaGUgb2JqZWN0IHdoaWNoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1
LDEwICs4NSwxMCBAQCBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5RXZhbHVhdG9yCiB7
CiB9CiAKLU1lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3QgU3Ry
aW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgRnJhbWUqIGZyYW1lLCBSZW5kZXJTdHlsZSogc3R5bGUp
CitNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYg
YWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiBmcmFtZSwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
KQogICAgIDogbV9tZWRpYVR5cGUoYWNjZXB0ZWRNZWRpYVR5cGUpCiAgICAgLCBtX2ZyYW1lKGZy
YW1lKQotICAgICwgbV9zdHlsZShXVEZNb3ZlKHN0eWxlKSkKKyAgICAsIG1fc3R5bGUoc3R5bGUp
CiAgICAgLCBtX2V4cFJlc3VsdChmYWxzZSkgLy8gZG9lc24ndCBtYXR0ZXIgd2hlbiB3ZSBoYXZl
IG1fZnJhbWUgYW5kIG1fc3R5bGUKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YVF1ZXJ5RXZhbHVhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL01lZGlh
UXVlcnlFdmFsdWF0b3IuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnlFdmFsdWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBw
dWJsaWM6CiAKICAgICAvKiogQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIGZ1bGwg
bWVkaWEgcXVlcmllcwogICAgICAqLwotICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3QgU3Ry
aW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgRnJhbWUqLCBSZW5kZXJTdHlsZSopOworICAgIE1lZGlh
UXVlcnlFdmFsdWF0b3IoY29uc3QgU3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgRnJhbWUqLCBj
b25zdCBSZW5kZXJTdHlsZSopOwogCiAgICAgfk1lZGlhUXVlcnlFdmFsdWF0b3IoKTsKIApAQCAt
OTksNyArOTksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFN0cmluZyBtX21lZGlhVHlwZTsK
ICAgICBGcmFtZSogbV9mcmFtZSB7IG51bGxwdHIgfTsgLy8gbm90IG93bmVkCi0gICAgUmVuZGVy
U3R5bGUqIG1fc3R5bGUgeyBudWxscHRyIH07CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIG1fc3R5
bGUgeyBudWxscHRyIH07CiAgICAgYm9vbCBtX2V4cFJlc3VsdDsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBzdHJva2VEYXNoQXJyYXlUCiAgICAgcmV0dXJuIGxpc3Q7
CiB9CiAKLVJlZlB0cjxTVkdQYWludD4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6YWRqdXN0U1ZH
UGFpbnRGb3JDdXJyZW50Q29sb3IoUGFzc1JlZlB0cjxTVkdQYWludD4gbmV3UGFpbnQsIFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKK1JlZlB0cjxTVkdQYWludD4gQ29tcHV0ZWRTdHlsZUV4dHJh
Y3Rvcjo6YWRqdXN0U1ZHUGFpbnRGb3JDdXJyZW50Q29sb3IoUGFzc1JlZlB0cjxTVkdQYWludD4g
bmV3UGFpbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBSZWZQdHI8
U1ZHUGFpbnQ+IHBhaW50ID0gbmV3UGFpbnQ7CiAgICAgaWYgKHBhaW50LT5wYWludFR5cGUoKSA9
PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IgfHwgcGFpbnQtPnBhaW50VHlw
ZSgpID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1VSSV9DVVJSRU5UQ09MT1IpCkBAIC0xMTEs
NyArMTExLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOgogICAg
IGlmICh1cGRhdGVMYXlvdXQpCiAgICAgICAgIG5vZGUtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0
KCk7CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKCk7Cisg
ICAgYXV0byogc3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKCk7CiAgICAgaWYgKCFzdHlsZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Tb3Vy
Y2VTaXplTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNp
emVMaXN0LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NvdXJj
ZVNpemVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIG1hdGNoKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1
ZXJ5RXhwPiYmIGV4cHJlc3Npb24sIFJlbmRlclN0eWxlJiBzdHlsZSwgRnJhbWUqIGZyYW1lKQor
c3RhdGljIGJvb2wgbWF0Y2goc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+JiYgZXhwcmVz
c2lvbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYg
KGV4cHJlc3Npb24tPm1lZGlhRmVhdHVyZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC00NywxMiArNDcsMTIgQEAgc3RhdGljIGJvb2wgbWF0Y2goc3RkOjp1bmlxdWVfcHRy
PE1lZGlhUQogICAgIHJldHVybiBtZWRpYVF1ZXJ5RXZhbHVhdG9yLmV2YWwobWVkaWFRdWVyeVNl
dC5nZXQoKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBkZWZhdWx0TGVuZ3RoKFJlbmRlclN0eWxlJiBz
dHlsZSwgUmVuZGVyVmlldyogdmlldykKK3N0YXRpYyBmbG9hdCBkZWZhdWx0TGVuZ3RoKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyVmlldyogdmlldykKIHsKICAgICByZXR1cm4gY2xh
bXBUbzxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVOb25DYWxjTGVuZ3RoRG91Ymxl
KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoJnN0eWxlLCAmc3R5bGUsIHZpZXcpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1ZXLCAxMDAuMCkpOwogfQogCi1zdGF0aWMgZmxvYXQgY29tcHV0ZUxl
bmd0aChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyVmlldyogdmll
dykKK3N0YXRpYyBmbG9hdCBjb21wdXRlTGVuZ3RoKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQogewogICAgIENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEoJnN0eWxlLCAmc3R5bGUsIHZpZXcpOwogICAgIGlm
IChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CkBAIC03MCw3ICs3MCw3IEBAIGZsb2F0
IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5nVmlldyBzaXoKIHsKICAgICBpZiAoIXZpZXcpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHZpZXctPnN0eWxlKCk7
CisgICAgYXV0byYgc3R5bGUgPSB2aWV3LT5zdHlsZSgpOwogICAgIGZvciAoYXV0byYgc291cmNl
U2l6ZSA6IENTU1BhcnNlcihDU1NTdHJpY3RNb2RlKS5wYXJzZVNpemVzQXR0cmlidXRlKHNpemVz
QXR0cmlidXRlKSkgewogICAgICAgICBpZiAobWF0Y2goV1RGTW92ZShzb3VyY2VTaXplLmV4cHJl
c3Npb24pLCBzdHlsZSwgZnJhbWUpKQogICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgo
c291cmNlU2l6ZS5sZW5ndGguZ2V0KCksIHN0eWxlLCB2aWV3KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtNTc1LDcg
KzU3NSw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IE5p
bmVQaWVjZUltYWdlJiBnZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpCisgICAgc3RhdGljIGNv
bnN0IE5pbmVQaWVjZUltYWdlJiBnZXRWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiAg
ICAgewogICAgICAgICByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLT5ib3JkZXJJ
bWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJbWFnZSgpOwogICAgIH0KQEAgLTY2NCw3ICs2NjQsNyBA
QCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pCiAKIGlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q2xpcChTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQogewotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKTsKKyAgICBhdXRvKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXIu
cGFyZW50U3R5bGUoKTsKICAgICBpZiAoIXBhcmVudFN0eWxlLT5oYXNDbGlwKCkpCiAgICAgICAg
IHJldHVybiBhcHBseUluaXRpYWxDbGlwKHN0eWxlUmVzb2x2ZXIpOwogICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0Q2xpcChwYXJlbnRTdHlsZS0+Y2xpcFRvcCgpLCBwYXJlbnRTdHlsZS0+
Y2xpcFJpZ2h0KCksIHBhcmVudFN0eWxlLT5jbGlwQm90dG9tKCksIHBhcmVudFN0eWxlLT5jbGlw
TGVmdCgpKTsKQEAgLTEwNTIsNyArMTA1Miw3IEBAIHRlbXBsYXRlIDxTdHlsZUJ1aWxkZXJDdXN0
b206OkNvdW50ZXJCZWgKIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhl
cml0Q291bnRlcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQogewogICAgIENvdW50ZXJE
aXJlY3RpdmVNYXAmIG1hcCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzQ291bnRlckRp
cmVjdGl2ZXMoKTsKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogc3R5bGVSZXNvbHZlci5wYXJl
bnRTdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpKSB7CisgICAgZm9yIChhdXRvJiBr
ZXlWYWx1ZSA6IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCkpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpKSB7CiAgICAgICAgIENvdW50ZXJEaXJl
Y3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChrZXlWYWx1ZS5rZXksIENvdW50ZXJEaXJlY3Rp
dmVzKCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBS
ZXNldCkKICAgICAgICAgICAgIGRpcmVjdGl2ZXMuaW5oZXJpdFJlc2V0KGtleVZhbHVlLnZhbHVl
KTsKQEAgLTEzMzcsNyArMTMzNyw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWwKICAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLnN0eWxlKCktPnN0eWxlVHlw
ZSgpID09IE5PUFNFVURPKQogICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci5wYXJlbnRTdHlsZSgpLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICBjb25zdF9j
YXN0PFJlbmRlclN0eWxlKj4oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+c2V0VW5pcXVl
KCk7CiAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1
ZS5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgbnVsbEF0b20pOwogICAgICAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0eWxlUmVzb2x2ZXIuZWxlbWVudCgpLT5nZXRBdHRyaWJ1
dGUoYXR0cik7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQo
dmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CkBAIC0x
NzA2LDcgKzE3MDYsNyBAQCB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUFsdChT
CiAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLnN0eWxlKCktPnN0eWxlVHlwZSgpID09IE5PUFNF
VURPKQogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5zZXRV
bmlxdWUoKTsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihzdHlsZVJlc29s
dmVyLnBhcmVudFN0eWxlKCkpLT5zZXRVbmlxdWUoKTsKIAogICAgICAgICBRdWFsaWZpZWROYW1l
IGF0dHIobnVsbEF0b20sIHByaW1pdGl2ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCksIG51bGxBdG9t
KTsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0eWxlUmVzb2x2ZXIuZWxl
bWVudCgpLT5nZXRBdHRyaWJ1dGUoYXR0cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpCiAgICAgbV9tYXRjaGVkUHJvcGVydGllc0Nh
Y2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAgPSAwOwogfQogCi1TdHlsZVJlc29sdmVyOjpTdGF0
ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
LCBSZW5kZXJTdHlsZSogZG9jdW1lbnRFbGVtZW50U3R5bGUsIGNvbnN0IFJlbmRlclJlZ2lvbiog
cmVnaW9uRm9yU3R5bGluZywgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKQor
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIGRvY3VtZW50RWxl
bWVudFN0eWxlLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNl
bGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKICAgICA6IG1fZWxlbWVudCgmZWxlbWVudCkK
ICAgICAsIG1fcGFyZW50U3R5bGUocGFyZW50U3R5bGUpCiAgICAgLCBtX3JlZ2lvbkZvclN0eWxp
bmcocmVnaW9uRm9yU3R5bGluZykKQEAgLTM4MCw3ICszODAsNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNBdFNoYWRvd0JvdW5kYXJ5KGNvCiAgICAgcmV0dXJuIHBhcmVudE5vZGUgJiYgcGFyZW50
Tm9kZS0+aXNTaGFkb3dSb290KCk7CiB9CiAKLUVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlLCBSdWxlTWF0Y2hpbmdCZWhhdmlvciBtYXRjaGluZ0JlaGF2aW9yLCBjb25zdCBSZW5k
ZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3Rv
ckZpbHRlcikKK0VsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoY29u
c3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSdWxl
TWF0Y2hpbmdCZWhhdmlvciBtYXRjaGluZ0JlaGF2aW9yLCBjb25zdCBSZW5kZXJSZWdpb24qIHJl
Z2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9pbkxvYWRQZW5kaW5nSW1hZ2VzKTsKIApAQCAtNTU4LDcg
KzU1OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmkKICAgICB9
CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRv
U3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFBzZXVkb1N0eWxl
UmVxdWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0LCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpCitz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9y
RWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3Qm
IHBzZXVkb1N0eWxlUmVxdWVzdCwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKQogewog
ICAgIG1fc3RhdGUgPSBTdGF0ZShlbGVtZW50LCAmcGFyZW50U3R5bGUpOwogCkBAIC0xNjMxLDcg
KzE2MzEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvCiAgICAg
fQogCiAgICAgaWYgKGlzSW5oZXJpdCAmJiAhc3RhdGUucGFyZW50U3R5bGUoKS0+aGFzRXhwbGlj
aXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJv
cGVydHkoaWQpKQotICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zZXRIYXNFeHBsaWNpdGx5
SW5oZXJpdGVkUHJvcGVydGllcygpOworICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4o
c3RhdGUucGFyZW50U3R5bGUoKSktPnNldEhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVz
KCk7CiAgICAgCiAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7CiAgICAgICAgIENT
U0N1c3RvbVByb3BlcnR5VmFsdWUqIGN1c3RvbVByb3BlcnR5ID0gJmRvd25jYXN0PENTU0N1c3Rv
bVByb3BlcnR5VmFsdWU+KCp2YWx1ZVRvQXBwbHkpOwpAQCAtMTczNCw3ICsxNzM0LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdQogfQogI2VuZGlmCiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21D
aGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
CiB7CiAgICAgaWYgKCFwYXJlbnRTdHlsZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc0OCw3ICsx
NzQ4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUgogICAgIHN0
eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBT
dHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNr
Rm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBjb25zdCBhdXRvJiBjaGlsZEZvbnQgPSBzdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQxLDE4ICsxNDEsMTggQEAgcHVibGljOgogICAgIFN0eWxlUmVz
b2x2ZXIoRG9jdW1lbnQmKTsKICAgICB+U3R5bGVSZXNvbHZlcigpOwogCi0gICAgRWxlbWVudFN0
eWxlIHN0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlLCBSdWxlTWF0Y2hpbmdCZWhhdmlvciA9IE1hdGNoQWxsUnVsZXMsIGNvbnN0IFJlbmRlclJl
Z2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IG51bGxwdHIsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiA9
IG51bGxwdHIpOworICAgIEVsZW1lbnRTdHlsZSBzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVu
dCYsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3Ig
PSBNYXRjaEFsbFJ1bGVzLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBu
dWxscHRyLCBjb25zdCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKIAogICAgIHZvaWQga2V5
ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oY29uc3QgRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxl
KiwgS2V5ZnJhbWVMaXN0Jik7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHBz
ZXVkb1N0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiwgY29uc3QgUHNldWRvU3R5bGVSZXF1
ZXN0JiwgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IHBzZXVkb1N0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiwgY29uc3QgUHNl
dWRvU3R5bGVSZXF1ZXN0JiwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKTsKIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgp
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZGVmYXVsdFN0eWxlRm9yRWxlbWVu
dCgpOwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
dHlsZSgpOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5wYXJlbnRTdHlsZSgpOyB9Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsgfQorICAgIGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFy
ZW50U3R5bGUoKTsgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCk7IH0KICAgICBjb25zdCBF
bGVtZW50KiBlbGVtZW50KCkgeyByZXR1cm4gbV9zdGF0ZS5lbGVtZW50KCk7IH0KICAgICBEb2N1
bWVudCYgZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAgU2V0dGluZ3MqIGRv
Y3VtZW50U2V0dGluZ3MoKSB7IHJldHVybiBtX2RvY3VtZW50LnNldHRpbmdzKCk7IH0KQEAgLTMx
Nyw4ICszMTcsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBm
aXhlcyB1cCB0aGUgZGVmYXVsdCBmb250IHNpemUgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBjdXJy
ZW50IGdlbmVyaWMgZm9udCBmYW1pbHkgaGFzIGNoYW5nZWQuIC1kd2gKLSAgICB2b2lkIGNoZWNr
Rm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSk7Ci0gICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpOworICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdl
KFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lk
IGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSk7CiAjaWYgRU5BQkxFKElPU19URVhUX0FVVE9TSVpJTkcpCiAgICAgdm9pZCBjaGVj
a0ZvclRleHRTaXplQWRqdXN0KFJlbmRlclN0eWxlKik7CiAjZW5kaWYKQEAgLTM2MSw3ICszNjEs
NyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgU3RhdGUgewogICAgIHB1YmxpYzoKICAgICAgICAgU3Rh
dGUoKSB7IH0KLSAgICAgICAgU3RhdGUoY29uc3QgRWxlbWVudCYsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSwgUmVuZGVyU3R5bGUqIGRvY3VtZW50RWxlbWVudFN0eWxlID0gbnVsbHB0ciwgY29u
c3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gbnVsbHB0ciwgY29uc3QgU2VsZWN0
b3JGaWx0ZXIqID0gbnVsbHB0cik7CisgICAgICAgIFN0YXRlKGNvbnN0IEVsZW1lbnQmLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBkb2N1bWVudEVs
ZW1lbnRTdHlsZSA9IG51bGxwdHIsIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGlu
ZyA9IG51bGxwdHIsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiA9IG51bGxwdHIpOwogCiAgICAgcHVi
bGljOgogICAgICAgICB2b2lkIGNsZWFyKCk7CkBAIC0zNzQsOCArMzc0LDggQEAgcHVibGljOgog
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHRha2VTdHlsZSgpIHsgcmV0dXJu
IFdURk1vdmUobV9zdHlsZSk7IH0KIAogICAgICAgICB2b2lkIHNldFBhcmVudFN0eWxlKHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4pOwotICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9Ci0gICAgICAgIFJlbmRlclN0eWxl
KiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9
CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50U3R5bGU7IH0KKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KIAogICAgICAgICBj
b25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcoKSBjb25zdCB7IHJldHVybiBtX3Jl
Z2lvbkZvclN0eWxpbmc7IH0KICAgICAgICAgRUluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQpAQCAtNDI3LDkgKzQyNyw5IEBA
IHB1YmxpYzoKIAogICAgICAgICBjb25zdCBFbGVtZW50KiBtX2VsZW1lbnQgeyBudWxscHRyIH07
CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIG1fcGFyZW50U3R5bGUgeyBudWxscHRyIH07CisgICAgICAgIGNvbnN0IFJl
bmRlclN0eWxlKiBtX3BhcmVudFN0eWxlIHsgbnVsbHB0ciB9OwogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IG1fb3duZWRQYXJlbnRTdHlsZTsKLSAgICAgICAgUmVuZGVyU3R5
bGUqIG1fcm9vdEVsZW1lbnRTdHlsZSB7IG51bGxwdHIgfTsKKyAgICAgICAgY29uc3QgUmVuZGVy
U3R5bGUqIG1fcm9vdEVsZW1lbnRTdHlsZSB7IG51bGxwdHIgfTsKIAogICAgICAgICBjb25zdCBS
ZW5kZXJSZWdpb24qIG1fcmVnaW9uRm9yU3R5bGluZyB7IG51bGxwdHIgfTsKICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMDgsNyArMjAwOCw3
IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmcKICAgICBtX2lnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cyA9IG9sZElnbm9yZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiBEb2N1bWVudDo6c3R5bGVGb3JFbGVtZW50SWdub3JpbmdQZW5kaW5nU3R5bGVz
aGVldHMoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBEb2N1bWVudDo6c3R5bGVGb3JFbGVtZW50SWdub3JpbmdQ
ZW5kaW5nU3R5bGVzaGVldHMoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKQogewogICAgIEFTU0VSVCgmZWxlbWVudC5kb2N1bWVudCgpID09IHRoaXMpOwog
CkBAIC0yNTE1LDcgKzI1MTUsNyBAQCB2b2lkIERvY3VtZW50OjpzZXRWaXN1YWxseU9yZGVyZWQo
KQogewogICAgIG1fdmlzdWFsbHlPcmRlcmVkID0gdHJ1ZTsKICAgICBpZiAocmVuZGVyVmlldygp
KQotICAgICAgICByZW5kZXJWaWV3KCktPnN0eWxlKCkuc2V0UlRMT3JkZXJpbmcoVmlzdWFsT3Jk
ZXIpOworICAgICAgICByZW5kZXJWaWV3KCktPm11dGFibGVTdHlsZSgpLnNldFJUTE9yZGVyaW5n
KFZpc3VhbE9yZGVyKTsKIH0KIAogUmVmPERvY3VtZW50UGFyc2VyPiBEb2N1bWVudDo6Y3JlYXRl
UGFyc2VyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcxLDcgKzU3
MSw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKFJ1blBvc3RMYXlvdXRUYXNrcyA9IFJ1blBvc3RM
YXlvdXRUYXNrczo6QXN5bmNocm9ub3VzbHkpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0cyhFbGVtZW50
JiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IHN0eWxlRm9yRWxlbWVudElnbm9yaW5nUGVuZGluZ1N0eWxlc2hlZXRzKEVsZW1lbnQm
LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwogCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHBhZ2UgYm94IChtYXJnaW4gYm94ZXMgYW5kIHBhZ2UgYm9yZGVycykgaXMgdmlzaWJsZS4K
ICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJbmRleCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNzAsNyArMTM3MCw3
IEBAIFN0eWxlUmVzb2x2ZXImIEVsZW1lbnQ6OnN0eWxlUmVzb2x2ZXIoKQogICAgIHJldHVybiBk
b2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKIH0KIAotRWxlbWVudFN0eWxlIEVsZW1l
bnQ6OnJlc29sdmVTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCitFbGVtZW50U3R5bGUg
RWxlbWVudDo6cmVzb2x2ZVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsK
ICAgICByZXR1cm4gc3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqdGhpcywgcGFyZW50
U3R5bGUpOwogfQpAQCAtMTc1OCw3ICsxNzU4LDcgQEAgYm9vbCBFbGVtZW50OjpjaGlsZFR5cGVB
bGxvd2VkKE5vZGVUeXBlIAogc3RhdGljIHZvaWQgY2hlY2tGb3JFbXB0eVN0eWxlQ2hhbmdlKEVs
ZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKGVsZW1lbnQuc3R5bGVBZmZlY3RlZEJ5RW1wdHko
KSkgewotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50LnJlbmRlclN0eWxlKCk7
CisgICAgICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudC5yZW5kZXJTdHlsZSgpOwogICAgICAgICBp
ZiAoIXN0eWxlIHx8ICghc3R5bGUtPmVtcHR5U3RhdGUoKSB8fCBlbGVtZW50Lmhhc0NoaWxkTm9k
ZXMoKSkpCiAgICAgICAgICAgICBlbGVtZW50LnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9
CkBAIC0xNzg0LDE0ICsxNzg0LDE0IEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yU2libGluZ1N0eWxl
Q2hhbmdlcygKIAogICAgICAgICAvLyBUaGlzIGlzIHRoZSBpbnNlcnQvYXBwZW5kIGNhc2UuCiAg
ICAgICAgIGlmIChuZXdGaXJzdEVsZW1lbnQgIT0gZWxlbWVudEFmdGVyQ2hhbmdlKSB7Ci0gICAg
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50QWZ0ZXJDaGFuZ2UtPnJlbmRlclN0
eWxlKCk7CisgICAgICAgICAgICBhdXRvKiBzdHlsZSA9IGVsZW1lbnRBZnRlckNoYW5nZS0+cmVu
ZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmZpcnN0Q2hpbGRT
dGF0ZSgpKQogICAgICAgICAgICAgICAgIGVsZW1lbnRBZnRlckNoYW5nZS0+c2V0TmVlZHNTdHls
ZVJlY2FsYygpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gV2UgYWxzbyBoYXZlIHRvIGhhbmRs
ZSBub2RlIHJlbW92YWwuCiAgICAgICAgIGlmIChjaGVja1R5cGUgPT0gU2libGluZ0VsZW1lbnRS
ZW1vdmVkICYmIG5ld0ZpcnN0RWxlbWVudCA9PSBlbGVtZW50QWZ0ZXJDaGFuZ2UgJiYgbmV3Rmly
c3RFbGVtZW50KSB7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBuZXdGaXJzdEVs
ZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICBhdXRvKiBzdHlsZSA9IG5ld0ZpcnN0
RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgIGlmICghc3R5bGUgfHwgIXN0eWxl
LT5maXJzdENoaWxkU3RhdGUoKSkKICAgICAgICAgICAgICAgICBuZXdGaXJzdEVsZW1lbnQtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQpAQCAtMTgwNCw3ICsxODA0LDcgQEAgc3Rh
dGljIHZvaWQgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKAogICAgICAgICBFbGVtZW50KiBu
ZXdMYXN0RWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Omxhc3RDaGlsZChwYXJlbnQpOwogCiAg
ICAgICAgIGlmIChuZXdMYXN0RWxlbWVudCAhPSBlbGVtZW50QmVmb3JlQ2hhbmdlKSB7Ci0gICAg
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBlbGVtZW50QmVmb3JlQ2hhbmdlLT5yZW5kZXJT
dHlsZSgpOworICAgICAgICAgICAgYXV0byogc3R5bGUgPSBlbGVtZW50QmVmb3JlQ2hhbmdlLT5y
ZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+bGFzdENoaWxk
U3RhdGUoKSkKICAgICAgICAgICAgICAgICBlbGVtZW50QmVmb3JlQ2hhbmdlLT5zZXROZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KQEAgLTE4MTIsNyArMTgxMiw3IEBAIHN0YXRpYyB2b2lk
IGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcygKICAgICAgICAgLy8gV2UgYWxzbyBoYXZlIHRv
IGhhbmRsZSBub2RlIHJlbW92YWwuICBUaGUgcGFyc2VyIGNhbGxiYWNrIGNhc2UgaXMgc2ltaWxh
ciB0byBub2RlIHJlbW92YWwgYXMgd2VsbCBpbiB0aGF0IHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBs
YXN0IGNoaWxkCiAgICAgICAgIC8vIHRvIG1hdGNoIG5vdy4KICAgICAgICAgaWYgKChjaGVja1R5
cGUgPT0gU2libGluZ0VsZW1lbnRSZW1vdmVkIHx8IGNoZWNrVHlwZSA9PSBGaW5pc2hlZFBhcnNp
bmdDaGlsZHJlbikgJiYgbmV3TGFzdEVsZW1lbnQgPT0gZWxlbWVudEJlZm9yZUNoYW5nZSAmJiBu
ZXdMYXN0RWxlbWVudCkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbmV3TGFz
dEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICBhdXRvKiBzdHlsZSA9IG5ld0xh
c3RFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgaWYgKCFzdHlsZSB8fCAhc3R5
bGUtPmxhc3RDaGlsZFN0YXRlKCkpCiAgICAgICAgICAgICAgICAgbmV3TGFzdEVsZW1lbnQtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQpAQCAtMjQ2MSw3ICsyNDYxLDcgQEAgc3Rh
dGljIFBzZXVkb0VsZW1lbnQqIGJlZm9yZU9yQWZ0ZXJQc2V1ZAogICAgIH0KIH0KIAotUmVuZGVy
U3R5bGUqIEVsZW1lbnQ6OmV4aXN0aW5nQ29tcHV0ZWRTdHlsZSgpCitjb25zdCBSZW5kZXJTdHls
ZSogRWxlbWVudDo6ZXhpc3RpbmdDb21wdXRlZFN0eWxlKCkKIHsKICAgICBpZiAoYXV0byogcmVu
ZGVyVHJlZVN0eWxlID0gcmVuZGVyU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIHJlbmRlclRyZWVT
dHlsZTsKQEAgLTI0NzIsMTMgKzI0NzIsMTMgQEAgUmVuZGVyU3R5bGUqIEVsZW1lbnQ6OmV4aXN0
aW5nQ29tcHV0ZWRTdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1SZW5kZXJTdHlsZSYgRWxl
bWVudDo6cmVzb2x2ZUNvbXB1dGVkU3R5bGUoKQorY29uc3QgUmVuZGVyU3R5bGUmIEVsZW1lbnQ6
OnJlc29sdmVDb21wdXRlZFN0eWxlKCkKIHsKICAgICBBU1NFUlQoaW5Eb2N1bWVudCgpKTsKICAg
ICBBU1NFUlQoIWV4aXN0aW5nQ29tcHV0ZWRTdHlsZSgpKTsKIAogICAgIERlcXVlPEVsZW1lbnQq
LCAzMj4gZWxlbWVudHNSZXF1aXJpbmdDb21wdXRlZFN0eWxlKHsgdGhpcyB9KTsKLSAgICBSZW5k
ZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHI7CisgICAgY29uc3QgUmVuZGVyU3R5bGUq
IGNvbXB1dGVkU3R5bGUgPSBudWxscHRyOwogCiAgICAgLy8gQ29sbGVjdCBhbmNlc3RvcnMgdW50
aWwgd2UgZmluZCBvbmUgdGhhdCBoYXMgc3R5bGUuCiAgICAgYXV0byBjb21wb3NlZEFuY2VzdG9y
cyA9IGNvbXBvc2VkVHJlZUFuY2VzdG9ycygqdGhpcyk7CkBAIC0yNTAxLDcgKzI1MDEsNyBAQCBS
ZW5kZXJTdHlsZSYgRWxlbWVudDo6cmVzb2x2ZUNvbXB1dGVkU3R5CiAgICAgcmV0dXJuICpjb21w
dXRlZFN0eWxlOwogfQogCi1SZW5kZXJTdHlsZSogRWxlbWVudDo6Y29tcHV0ZWRTdHlsZShQc2V1
ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKQorY29uc3QgUmVuZGVyU3R5bGUqIEVsZW1lbnQ6
OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKIHsKICAgICBp
ZiAoUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudCA9IGJlZm9yZU9yQWZ0ZXJQc2V1ZG9FbGVt
ZW50KCp0aGlzLCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKSkKICAgICAgICAgcmV0dXJuIHBzZXVk
b0VsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsKQEAgLTMyOTUsNyArMzI5NSw3IEBAIHZvaWQgRWxl
bWVudDo6ZGlkRGV0YWNoUmVuZGVyZXJzKCkKICAgICBBU1NFUlQoaGFzQ3VzdG9tU3R5bGVSZXNv
bHZlQ2FsbGJhY2tzKCkpOwogfQogCi1PcHRpb25hbDxFbGVtZW50U3R5bGU+IEVsZW1lbnQ6OnJl
c29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVs
ZW1lbnRTdHlsZT4gRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
JiwgY29uc3QgUmVuZGVyU3R5bGUqKQogewogICAgIEFTU0VSVChoYXNDdXN0b21TdHlsZVJlc29s
dmVDYWxsYmFja3MoKSk7CiAgICAgcmV0dXJuIE51bGxvcHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3OSw3ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUYWJJ
bmRleChpbnQpOwogICAgIHZpcnR1YWwgRWxlbWVudCogZm9jdXNEZWxlZ2F0ZSgpOwogCi0gICAg
UmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETykgb3ZlcnJpZGU7
CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVE
Tykgb3ZlcnJpZGU7CiAKICAgICBib29sIG5lZWRzU3R5bGVJbnZhbGlkYXRpb24oKSBjb25zdDsK
IApAQCAtNDgwLDcgKzQ4MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQXR0YWNo
UmVuZGVyZXJzKCk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXRhY2hSZW5kZXJlcnMoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRGV0YWNoUmVuZGVyZXJzKCk7Ci0gICAgdmlydHVhbCBPcHRpb25h
bDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5
bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpOworICAgIHZpcnR1YWwgT3B0aW9uYWw8
RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVu
dFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKTsKIAogICAgIExheW91
dFJlY3QgYWJzb2x1dGVFdmVudEhhbmRsZXJCb3VuZHMoYm9vbCYgaW5jbHVkZXNGaXhlZFBvc2l0
aW9uRWxlbWVudHMpIG92ZXJyaWRlOwogCkBAIC00OTksNyArNDk5LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICAgICBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKCk7Ci0gICAgRWxlbWVudFN0
eWxlIHJlc29sdmVTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIEVsZW1lbnRT
dHlsZSByZXNvbHZlU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAg
IGJvb2wgaGFzRGlzcGxheUNvbnRlbnRzKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRIYXNEaXNwbGF5
Q29udGVudHMoYm9vbCk7CkBAIC01OTIsOCArNTkyLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
cmVtb3ZlU2hhZG93Um9vdCgpOwogCi0gICAgUmVuZGVyU3R5bGUqIGV4aXN0aW5nQ29tcHV0ZWRT
dHlsZSgpOwotICAgIFJlbmRlclN0eWxlJiByZXNvbHZlQ29tcHV0ZWRTdHlsZSgpOworICAgIGNv
bnN0IFJlbmRlclN0eWxlKiBleGlzdGluZ0NvbXB1dGVkU3R5bGUoKTsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgcmVzb2x2ZUNvbXB1dGVkU3R5bGUoKTsKIAogICAgIGJvb2wgcmFyZURhdGFTdHls
ZUFmZmVjdGVkQnlFbXB0eSgpIGNvbnN0OwogICAgIGJvb2wgcmFyZURhdGFDaGlsZHJlbkFmZmVj
dGVkQnlIb3ZlcigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTks
NyArNjU5LDcgQEAgc3RhdGljIE5vZGU6OkVkaXRhYmlsaXR5IGNvbXB1dGVFZGl0YWJpbAogICAg
IC8vIHdvdWxkIGZpcmUgaW4gdGhlIG1pZGRsZSBvZiBEb2N1bWVudDo6c2V0Rm9jdXNlZEVsZW1l
bnQoKS4KIAogICAgIGZvciAoY29uc3QgTm9kZSogbm9kZSA9ICZzdGFydE5vZGU7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
bm9kZS0+aXNEb2N1bWVudE5vZGUoKSA/IG5vZGUtPnJlbmRlclN0eWxlKCkgOiBjb25zdF9jYXN0
PE5vZGUqPihub2RlKS0+Y29tcHV0ZWRTdHlsZSgpOworICAgICAgICBhdXRvKiBzdHlsZSA9IG5v
ZGUtPmlzRG9jdW1lbnROb2RlKCkgPyBub2RlLT5yZW5kZXJTdHlsZSgpIDogY29uc3RfY2FzdDxO
b2RlKj4obm9kZSktPmNvbXB1dGVkU3R5bGUoKTsKICAgICAgICAgaWYgKCFzdHlsZSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FKQpA
QCAtMTAxMCw3ICsxMDEwLDcgQEAgTm9kZSogTm9kZTo6cHNldWRvQXdhcmVMYXN0Q2hpbGQoKSBj
b25zdAogICAgIHJldHVybiBsYXN0Q2hpbGQoKTsKIH0KIAotUmVuZGVyU3R5bGUqIE5vZGU6OmNv
bXB1dGVkU3R5bGUoUHNldWRvSWQgcHNldWRvRWxlbWVudFNwZWNpZmllcikKK2NvbnN0IFJlbmRl
clN0eWxlKiBOb2RlOjpjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZp
ZXIpCiB7CiAgICAgYXV0byogY29tcG9zZWRQYXJlbnQgPSBjb21wb3NlZFRyZWVBbmNlc3RvcnMo
KnRoaXMpLmZpcnN0KCk7CiAgICAgaWYgKCFjb21wb3NlZFBhcmVudCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQzLDkgKzQ0Myw5IEBAIHB1YmxpYzoKICAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVuZGVyQm94TW9kZWxPYmplY3QoKSBjb25zdDsKICAgICAKICAgICAvLyBXcmFwcGVy
IGZvciBub2RlcyB0aGF0IGRvbid0IGhhdmUgYSByZW5kZXJlciwgYnV0IHN0aWxsIGNhY2hlIHRo
ZSBzdHlsZSAobGlrZSBIVE1MT3B0aW9uRWxlbWVudCkuCi0gICAgUmVuZGVyU3R5bGUqIHJlbmRl
clN0eWxlKCkgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKCkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKFBzZXVkb0lkIHBz
ZXVkb0VsZW1lbnRTcGVjaWZpZXIgPSBOT1BTRVVETyk7CisgICAgdmlydHVhbCBjb25zdCBSZW5k
ZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCBwc2V1ZG9FbGVtZW50U3BlY2lmaWVyID0g
Tk9QU0VVRE8pOwogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBOb3RpZmlj
YXRpb24gb2YgZG9jdW1lbnQgc3RydWN0dXJlIGNoYW5nZXMgKHNlZSBDb250YWluZXJOb2RlLmgg
Zm9yIG1vcmUgbm90aWZpY2F0aW9uIG1ldGhvZHMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVJlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVS
ZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZVJlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1pbmxpbmUgUmVuZGVyU3R5bGUqIE5vZGU6OnJlbmRlclN0eWxlKCkg
Y29uc3QKK2lubGluZSBjb25zdCBSZW5kZXJTdHlsZSogTm9kZTo6cmVuZGVyU3R5bGUoKSBjb25z
dAogewogICAgIGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJl
bmRlcmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgUHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxl
bWVudCgpCiAgICAgbV9ob3N0RWxlbWVudCA9IG51bGxwdHI7CiB9CiAKLU9wdGlvbmFsPEVsZW1l
bnRTdHlsZT4gUHNldWRvRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBQc2V1ZG9F
bGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSopCiB7CiAgICAgYXV0byogc3R5bGUgPSBtX2hvc3RFbGVtZW50
LT5yZW5kZXJlcigpLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShtX3BzZXVkb0lkLCAmcGFyZW50U3R5
bGUpOwogICAgIGlmICghc3R5bGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmgJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIEVsZW1lbnQqIGhv
c3RFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9ob3N0RWxlbWVudDsgfQogICAgIHZvaWQgY2xl
YXJIb3N0RWxlbWVudCgpOwogCi0gICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3Vz
dG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9z
dFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0
b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
KiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQXR0YWNoUmVuZGVyZXJz
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlKSBvdmVy
cmlkZTsKICAgICBib29sIHJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmKSBvdmVy
cmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tF
bGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5
LDE4ICsxNzksMTggQEAgc3RhdGljIGJvb2wgaXNOZXdMaW5lQXRQb3NpdGlvbihjb25zdCBQbwog
ICAgIHJldHVybiB0ZXh0QXRQb3NpdGlvblswXSA9PSAnXG4nOwogfQogCi1SZW5kZXJTdHlsZSog
QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUo
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQorY29uc3QgUmVuZGVyU3R5bGUqIEFwcGx5QmxvY2tF
bGVtZW50Q29tbWFuZDo6cmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbikKIHsKICAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IKICAgICAgICAgfHwgIXBvc2l0aW9uLmNvbnRh
aW5lck5vZGUoKQogICAgICAgICB8fCAhcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5pc1RleHRO
b2RlKCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGRvY3VtZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAo
IXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICByZXR1cm4gJnJlbmRlcmVyLT5zdHlsZSgpOwogfQpAQCAtMjAxLDcgKzIwMSw3IEBAIHZv
aWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclAKICAgICBlbmQgPSBlbmRPZkN1
cnJlbnRQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKTsKIAogICAgIGJvb2wgaXNTdGFydEFuZEVu
ZE9uU2FtZU5vZGUgPSBmYWxzZTsKLSAgICBpZiAoUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUgPSBy
ZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoc3RhcnQpKSB7CisgICAgaWYgKGF1dG8qIHN0
YXJ0U3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoc3RhcnQpKSB7CiAgICAg
ICAgIGlzU3RhcnRBbmRFbmRPblNhbWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHRO
b2RlKGVuZCkgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVuZC5jb250YWluZXJOb2RlKCk7
CiAgICAgICAgIGJvb2wgaXNTdGFydEFuZEVuZE9mTGFzdFBhcmFncmFwaE9uU2FtZU5vZGUgPSBy
ZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUobV9lbmRPZkxhc3RQYXJhZ3JhcGgpICYmIHN0
YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBtX2VuZE9mTGFzdFBhcmFncmFwaC5jb250YWluZXJOb2Rl
KCk7CiAKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6
cmFuZ2VGb3JQCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoUmVuZGVyU3R5bGUqIGVuZFN0
eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGVuZCkpIHsKKyAgICBpZiAoYXV0
byogZW5kU3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoZW5kKSkgewogICAg
ICAgICBib29sIGlzRW5kQW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1lTm9kZSA9IHJlbmRlclN0
eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFwaCkgJiYgZW5kLmRlcHJl
Y2F0ZWROb2RlKCkgPT0gbV9lbmRPZkxhc3RQYXJhZ3JhcGguZGVwcmVjYXRlZE5vZGUoKTsKICAg
ICAgICAgLy8gSW5jbHVkZSBcbiBhdCB0aGUgZW5kIG9mIGxpbmUgaWYgd2UncmUgYXQgYW4gZW1w
dHkgcGFyYWdyYXBoCiAgICAgICAgIGlmIChlbmRTdHlsZS0+cHJlc2VydmVOZXdsaW5lKCkgJiYg
c3RhcnQgPT0gZW5kICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5jb250YWlu
ZXJOb2RlKCktPm1heENoYXJhY3Rlck9mZnNldCgpKSB7CkBAIC0yNTgsNyArMjU4LDcgQEAgVmlz
aWJsZVBvc2l0aW9uIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZAogewogICAgIFZpc2libGVQb3Np
dGlvbiBlbmRPZk5leHRQYXJhZ3JhcGggPSBlbmRPZlBhcmFncmFwaChlbmRPZkN1cnJlbnRQYXJh
Z3JhcGgubmV4dCgpKTsKICAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGVuZE9mTmV4dFBhcmFncmFw
aC5kZWVwRXF1aXZhbGVudCgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlclN0eWxl
T2ZFbmNsb3NpbmdUZXh0Tm9kZShwb3NpdGlvbik7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJT
dHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUocG9zaXRpb24pOwogICAgIGlmICghc3R5bGUpCiAgICAg
ICAgIHJldHVybiBlbmRPZk5leHRQYXJhZ3JhcGg7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAg
IHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBmb3JtYXRSYW5nZShj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIGNvbnN0IFBvc2l0aW9u
JiBlbmRPZlNlbGVjdGlvbiwgUmVmUHRyPEVsZW1lbnQ+JikgPSAwOwotICAgIFJlbmRlclN0eWxl
KiByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoY29uc3QgUG9zaXRpb24mKTsKKyAgICBj
b25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGNvbnN0IFBv
c2l0aW9uJik7CiAgICAgdm9pZCByYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lm
TmVlZGVkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFBvc2l0aW9uJiwgUG9zaXRpb24mKTsKICAg
ICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZOZXh0UGFyYWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZO
ZWVkZWQoVmlzaWJsZVBvc2l0aW9uJiwgUG9zaXRpb24mLCBQb3NpdGlvbiYpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2MSw3ICs0NjEsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6aW5pdChOb2RlKiBub2RlLCBQ
cm9wCiAgICAgfQogCiAgICAgaWYgKG5vZGUgJiYgbm9kZS0+Y29tcHV0ZWRTdHlsZSgpKSB7Ci0g
ICAgICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUoKTsK
KyAgICAgICAgYXV0byogcmVuZGVyU3R5bGUgPSBub2RlLT5jb21wdXRlZFN0eWxlKCk7CiAgICAg
ICAgIHJlbW92ZVRleHRGaWxsQW5kU3Ryb2tlQ29sb3JzSWZOZWVkZWQocmVuZGVyU3R5bGUpOwog
ICAgICAgICBpZiAocmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkp
CiAgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250
U2l6ZSwgY29tcHV0ZWRTdHlsZUF0UG9zaXRpb24uZ2V0Rm9udFNpemVDU1NWYWx1ZVByZWZlcnJp
bmdLZXl3b3JkKCktPmNzc1RleHQoKSk7CkBAIC00NzEsNyArNDcxLDcgQEAgdm9pZCBFZGl0aW5n
U3R5bGU6OmluaXQoTm9kZSogbm9kZSwgUHJvcAogICAgIGV4dHJhY3RGb250U2l6ZURlbHRhKCk7
CiB9CiAKLXZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lm
TmVlZGVkKFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkKK3ZvaWQgRWRpdGluZ1N0eWxlOjpyZW1v
dmVUZXh0RmlsbEFuZFN0cm9rZUNvbG9yc0lmTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlKiByZW5k
ZXJTdHlsZSkKIHsKICAgICAvLyBJZiBhIG5vZGUncyB0ZXh0IGZpbGwgY29sb3IgaXMgaW52YWxp
ZCwgdGhlbiBpdHMgY2hpbGRyZW4gdXNlIAogICAgIC8vIHRoZWlyIGZvbnQtY29sb3IgYXMgdGhl
aXIgdGV4dCBmaWxsIGNvbG9yICh0aGV5IGRvbid0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ1N0eWxlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBwcml2
YXRlOgogICAgIEVkaXRpbmdTdHlsZShDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKICAgICBFZGl0aW5nU3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWVJRCk7CiAgICAgdm9p
ZCBpbml0KE5vZGUqLCBQcm9wZXJ0aWVzVG9JbmNsdWRlKTsKLSAgICB2b2lkIHJlbW92ZVRleHRG
aWxsQW5kU3Ryb2tlQ29sb3JzSWZOZWVkZWQoUmVuZGVyU3R5bGUqKTsKKyAgICB2b2lkIHJlbW92
ZVRleHRGaWxsQW5kU3Ryb2tlQ29sb3JzSWZOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUqKTsKICAg
ICB2b2lkIHNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wgaW1wb3J0YW50ID0gZmFsc2UpOwogICAgIHZvaWQgZXh0cmFjdEZvbnRTaXplRGVsdGEoKTsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoVCYgc3R5
bGVUb0NvbXBhcmUsIFNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw4ICs0MzAsOCBAQCBw
dWJsaWM6CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHdlYkNvbnRlbnRGcm9tUGFzdGVi
b2FyZChQYXN0ZWJvYXJkJiwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJv
b2wmIGNob3NlUGxhaW5UZXh0KTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSog
LCBOb2RlICombm9kZVRvUmVtb3ZlKTsKLSAgICB2b2lkIGdldFRleHREZWNvcmF0aW9uQXR0cmli
dXRlc1Jlc3BlY3RpbmdUeXBpbmdTdHlsZShSZW5kZXJTdHlsZSYsIE5TTXV0YWJsZURpY3Rpb25h
cnkqKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoRnJhbWUqICwgTm9kZSAqJm5vZGVUb1JlbW92ZSk7Cisg
ICAgdm9pZCBnZXRUZXh0RGVjb3JhdGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUmLCBOU011dGFibGVEaWN0aW9uYXJ5KikgY29uc3Q7CiAgICAgV0VC
Q09SRV9FWFBPUlQgY29uc3QgRm9udCogZm9udEZvclNlbGVjdGlvbihib29sJikgY29uc3Q7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgTlNEaWN0aW9uYXJ5ICpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlv
blN0YXJ0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0cmluZ1NlbGVjdGlv
bkZvclBhc3RlYm9hcmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlN
YXJrdXBDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Np
bXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNyArNTcsNyBAQCB2b2lkIFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIE5vZGUqIHN0YXJ0aW5nTm9kZSA9
IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0YXJ0aW5nU3R5bGUg
PSBzdGFydGluZ05vZGUtPnJlbmRlclN0eWxlKCk7CisgICAgICAgIGF1dG8qIHN0YXJ0aW5nU3R5
bGUgPSBzdGFydGluZ05vZGUtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgIGlmICghc3RhcnRpbmdT
dHlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9
IHN0YXJ0aW5nTm9kZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9y
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0
b3JDb2NvYS5tbQkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9FZGl0b3JDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGSVhNRTogVGhpcyBmaWd1cmVzIG91dCB0aGUgY3VycmVu
dCBzdHlsZSBieSBpbnNlcnRpbmcgYSA8c3Bhbj4hCi1SZW5kZXJTdHlsZSogRWRpdG9yOjpzdHls
ZUZvclNlbGVjdGlvblN0YXJ0KEZyYW1lKiBmcmFtZSwgTm9kZSAqJm5vZGVUb1JlbW92ZSkKK2Nv
bnN0IFJlbmRlclN0eWxlKiBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoRnJhbWUqIGZy
YW1lLCBOb2RlICombm9kZVRvUmVtb3ZlKQogewogICAgIG5vZGVUb1JlbW92ZSA9IG51bGxwdHI7
CiAgICAgCkBAIC03Niw3ICs3Niw3IEBAIFJlbmRlclN0eWxlKiBFZGl0b3I6OnN0eWxlRm9yU2Vs
ZWN0aW9uU3QKICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpID8gJnN0eWxlRWxl
bWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CiB9CiAKLXZvaWQgRWRpdG9yOjpn
ZXRUZXh0RGVjb3JhdGlvbkF0dHJpYnV0ZXNSZXNwZWN0aW5nVHlwaW5nU3R5bGUoUmVuZGVyU3R5
bGUmIHN0eWxlLCBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQpIGNvbnN0Cit2b2lkIEVkaXRv
cjo6Z2V0VGV4dERlY29yYXRpb25BdHRyaWJ1dGVzUmVzcGVjdGluZ1R5cGluZ1N0eWxlKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVzdWx0KSBjb25zdAog
ewogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS50eXBpbmdTdHlsZSgpOwogICAgIGlmICh0eXBpbmdTdHlsZSAmJiB0eXBpbmdTdHlsZS0+
c3R5bGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9T
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgxLDcgQEAgY29uc3QgRm9udCogRWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uKGJvbwogCiAgICAgaWYgKCFtX2ZyYW1lLnNlbGVjdGlvbigpLmlz
UmFuZ2UoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92
ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCisgICAgICAgIGF1dG8qIHN0eWxlID0gc3R5bGVGb3JT
ZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVtb3ZlKTsgLy8gc2V0cyBub2RlVG9SZW1v
dmUKIAogICAgICAgICBjb25zdCBGb250KiByZXN1bHQgPSBudWxscHRyOwogICAgICAgICBpZiAo
c3R5bGUpIHsKQEAgLTIyMCw3ICsyMjAsNyBAQCBjb25zdCBGb250KiBFZGl0b3I6OmZvbnRGb3JT
ZWxlY3Rpb24oYm9vCiBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxl
Y3Rpb25TdGFydCgpIGNvbnN0CiB7CiAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoJm1fZnJhbWUsIG5vZGVUb1Jl
bW92ZSk7CisgICAgYXV0byogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1l
LCBub2RlVG9SZW1vdmUpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIGNvbnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNl
bGVjdGlvbihib28KIAogICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsK
ICAgICAgICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOyAvLyBzZXRz
IG5vZGVUb1JlbW92ZQorICAgICAgICBhdXRvKiBzdHlsZSA9IHN0eWxlRm9yU2VsZWN0aW9uU3Rh
cnQoJm1fZnJhbWUsIG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAg
ICAgY29uc3QgRm9udCogcmVzdWx0ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKHN0eWxlKSB7CkBA
IC0xNDYsNyArMTQ2LDcgQEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJv
bwogTlNEaWN0aW9uYXJ5KiBFZGl0b3I6OmZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQo
KSBjb25zdAogewogICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZtX2ZyYW1lLCBub2RlVG9SZW1vdmUpOworICAg
IGF1dG8qIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25TdGFydCgmbV9mcmFtZSwgbm9kZVRvUmVt
b3ZlKTsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gbmlsOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc5LDcgKzc5LDcgQEAgU3RyaW5nIEhUTUxUaXRsZUVsZW1lbnQ6OnRleHQoKSBjb25zdAog
U3RyaW5nV2l0aERpcmVjdGlvbiBIVE1MVGl0bGVFbGVtZW50Ojpjb21wdXRlZFRleHRXaXRoRGly
ZWN0aW9uKCkKIHsKICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUjsKLSAgICBpZiAo
UmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUgPSB0aGlzLT5jb21wdXRlZFN0eWxlKCkpCisgICAg
aWYgKGF1dG8qIGNvbXB1dGVkU3R5bGUgPSB0aGlzLT5jb21wdXRlZFN0eWxlKCkpCiAgICAgICAg
IGRpcmVjdGlvbiA9IGNvbXB1dGVkU3R5bGUtPmRpcmVjdGlvbigpOwogICAgIGVsc2UgewogICAg
ICAgICBhdXRvIHN0eWxlID0gc3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqdGhpcywg
cGFyZW50RWxlbWVudCgpID8gcGFyZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpIDogbnVsbHB0
cikucmVuZGVyU3R5bGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6Rm9udFByb3h5CiAgICAgdXBkYXRlKHNlbGVjdG9yKTsKIH0KIAotaW5saW5lIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpGb250UHJveHk6OmluaXRpYWxpemUoRm9udFNl
bGVjdG9yJiBmb250U2VsZWN0b3IsIFJlbmRlclN0eWxlJiBuZXdTdHlsZSkKK2lubGluZSB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Rm9udFByb3h5Ojppbml0aWFsaXplKEZvbnRTZWxl
Y3RvciYgZm9udFNlbGVjdG9yLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpCiB7CiAgICAg
Ly8gQmV3YXJlISBtX2ZvbnQuZm9udFNlbGVjdG9yKCkgbWlnaHQgbm90IHBvaW50IHRvIGRvY3Vt
ZW50LmZvbnRTZWxlY3RvcigpIQogICAgIEFTU0VSVChuZXdTdHlsZS5mb250Q2FzY2FkZSgpLmZv
bnRTZWxlY3RvcigpID09ICZmb250U2VsZWN0b3IpOwpAQCAtMjE5Niw3ICsyMTk2LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoYwogICAgIERvY3VtZW50JiBkb2N1
bWVudCA9IGNhbnZhcygpLT5kb2N1bWVudCgpOwogICAgIGRvY3VtZW50LnVwZGF0ZVN0eWxlSWZO
ZWVkZWQoKTsKIAotICAgIGlmIChSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZSA9IGNhbnZhcygp
LT5jb21wdXRlZFN0eWxlKCkpCisgICAgaWYgKGF1dG8qIGNvbXB1dGVkU3R5bGUgPSBjYW52YXMo
KS0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KGNvbXB1dGVkU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKICAgICBlbHNlIHsKICAgICAgICAg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbiBkZWZhdWx0Rm9udERlc2NyaXB0aW9uOwpAQCAtMjI1OSw5
ICsyMjU5LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFRleHRCYQogICAg
IG1vZGlmaWFibGVTdGF0ZSgpLnRleHRCYXNlbGluZSA9IGJhc2VsaW5lOwogfQogCi1pbmxpbmUg
VGV4dERpcmVjdGlvbiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvVGV4dERpcmVjdGlvbihE
aXJlY3Rpb24gZGlyZWN0aW9uLCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5bGUpIGNvbnN0Citp
bmxpbmUgVGV4dERpcmVjdGlvbiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvVGV4dERpcmVj
dGlvbihEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSoqIGNvbXB1dGVkU3R5
bGUpIGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gKGNvbXB1dGVkU3R5bGUgfHwg
ZGlyZWN0aW9uID09IERpcmVjdGlvbjo6SW5oZXJpdCkgPyBjYW52YXMoKS0+Y29tcHV0ZWRTdHls
ZSgpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBzdHlsZSA9IChjb21wdXRlZFN0eWxlIHx8IGRpcmVj
dGlvbiA9PSBEaXJlY3Rpb246OkluaGVyaXQpID8gY2FudmFzKCktPmNvbXB1dGVkU3R5bGUoKSA6
IG51bGxwdHI7CiAgICAgaWYgKGNvbXB1dGVkU3R5bGUpCiAgICAgICAgICpjb21wdXRlZFN0eWxl
ID0gc3R5bGU7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKQEAgLTIzODQsNyArMjM4NCw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKIAogICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHR1cm4gb2ZmIGZvbnQgc21vb3RoaW5nLgogCi0gICAgUmVuZGVyU3R5bGUqIGNv
bXB1dGVkU3R5bGU7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGU7CiAgICAg
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSB0b1RleHREaXJlY3Rpb24oc3RhdGUoKS5kaXJlY3Rp
b24sICZjb21wdXRlZFN0eWxlKTsKICAgICBib29sIGlzUlRMID0gZGlyZWN0aW9uID09IFJUTDsK
ICAgICBib29sIG92ZXJyaWRlID0gY29tcHV0ZWRTdHlsZSA/IGlzT3ZlcnJpZGUoY29tcHV0ZWRT
dHlsZS0+dW5pY29kZUJpZGkoKSkgOiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDcgKzI1NSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIEZvbnRQcm94eSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQcm94eSYpOwogCiAgICAgICAgIGJv
b2wgcmVhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuZm9udFNlbGVjdG9yKCk7IH0KLSAg
ICAgICAgdm9pZCBpbml0aWFsaXplKEZvbnRTZWxlY3RvciYsIFJlbmRlclN0eWxlJik7CisgICAg
ICAgIHZvaWQgaW5pdGlhbGl6ZShGb250U2VsZWN0b3ImLCBjb25zdCBSZW5kZXJTdHlsZSYpOwog
ICAgICAgICBGb250TWV0cmljcyBmb250TWV0cmljcygpIGNvbnN0OwogICAgICAgICBjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSBjb25zdDsKICAgICAgICAg
ZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYpIGNvbnN0OwpAQCAtMzgyLDcgKzM4Miw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBi
b29sIGhhc0ludmVydGlibGVUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0
ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm07IH0KLSAgICBUZXh0RGlyZWN0aW9uIHRvVGV4dERp
cmVjdGlvbihEaXJlY3Rpb24sIFJlbmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHIp
IGNvbnN0OworICAgIFRleHREaXJlY3Rpb24gdG9UZXh0RGlyZWN0aW9uKERpcmVjdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxlID0gbnVsbHB0cikgY29uc3Q7CiAKICNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIEhUTUxSZXNvdXJjZVByZWxvYWRl
cjo6cHJlbG9hZChQcmVsCiAgICAgICAgIHByZWxvYWQoV1RGTW92ZShyZXF1ZXN0KSk7CiB9CiAK
LXN0YXRpYyBib29sIG1lZGlhQXR0cmlidXRlTWF0Y2hlcyhGcmFtZSogZnJhbWUsIFJlbmRlclN0
eWxlKiByZW5kZXJTdHlsZSwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSkKK3N0YXRpYyBi
b29sIG1lZGlhQXR0cmlidXRlTWF0Y2hlcyhGcmFtZSogZnJhbWUsIGNvbnN0IFJlbmRlclN0eWxl
KiByZW5kZXJTdHlsZSwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSkKIHsKICAgICBSZWZQ
dHI8TWVkaWFRdWVyeVNldD4gbWVkaWFRdWVyaWVzID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxs
b3dpbmdEZXNjcmlwdGlvblN5bnRheChhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgTWVkaWFRdWVyeUV2
YWx1YXRvciBtZWRpYVF1ZXJ5RXZhbHVhdG9yKCJzY3JlZW4iLCBmcmFtZSwgcmVuZGVyU3R5bGUp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MywyMSArODMsMjEg
QEAgUmVuZGVyU2xpZGVyVGh1bWI6OlJlbmRlclNsaWRlclRodW1iKFNsaQogewogfQogCi12b2lk
IFJlbmRlclNsaWRlclRodW1iOjp1cGRhdGVBcHBlYXJhbmNlKFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSkKK3ZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UoY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5j
ZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkKLSAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNl
KFNsaWRlclRodW1iVmVydGljYWxQYXJ0KTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBw
ZWFyYW5jZShTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkKLSAgICAgICAgc3R5bGUo
KS5zZXRBcHBlYXJhbmNlKFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpOworICAgICAgICBtdXRh
YmxlU3R5bGUoKS5zZXRBcHBlYXJhbmNlKFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpOwogICAg
IGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJQYXJ0KQot
ICAgICAgICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFTbGlkZXJUaHVtYlBhcnQpOworICAg
ICAgICBtdXRhYmxlU3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhU2xpZGVyVGh1bWJQYXJ0KTsK
ICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xp
ZGVyUGFydCkKLSAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhVm9sdW1lU2xpZGVy
VGh1bWJQYXJ0KTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYVZv
bHVtZVNsaWRlclRodW1iUGFydCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJQYXJ0KQotICAgICAgICBzdHlsZSgp
LnNldEFwcGVhcmFuY2UoTWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKKyAg
ICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVT
bGlkZXJUaHVtYlBhcnQpOwogICAgIGlmIChzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkgewogICAg
ICAgICBBU1NFUlQoZWxlbWVudCgpKTsKLSAgICAgICAgdGhlbWUoKS5hZGp1c3RTbGlkZXJUaHVt
YlNpemUoc3R5bGUoKSwgZWxlbWVudCgpKTsKKyAgICAgICAgdGhlbWUoKS5hZGp1c3RTbGlkZXJU
aHVtYlNpemUobXV0YWJsZVN0eWxlKCksIGVsZW1lbnQoKSk7CiAgICAgfQogfQogCkBAIC0xNTks
MTMgKzE1OSwxMyBAQCB2b2lkIFJlbmRlclNsaWRlckNvbnRhaW5lcjo6bGF5b3V0KCkKICAgICBB
U1NFUlQoZWxlbWVudCgpLT5zaGFkb3dIb3N0KCkpOwogICAgIGF1dG8mIGlucHV0ID0gZG93bmNh
c3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKICAgICBib29s
IGlzVmVydGljYWwgPSBoYXNWZXJ0aWNhbEFwcGVhcmFuY2UoaW5wdXQpOwotICAgIHN0eWxlKCku
c2V0RmxleERpcmVjdGlvbihpc1ZlcnRpY2FsID8gRmxvd0NvbHVtbiA6IEZsb3dSb3cpOworICAg
IG11dGFibGVTdHlsZSgpLnNldEZsZXhEaXJlY3Rpb24oaXNWZXJ0aWNhbCA/IEZsb3dDb2x1bW4g
OiBGbG93Um93KTsKICAgICBUZXh0RGlyZWN0aW9uIG9sZFRleHREaXJlY3Rpb24gPSBzdHlsZSgp
LmRpcmVjdGlvbigpOwogICAgIGlmIChpc1ZlcnRpY2FsKSB7CiAgICAgICAgIC8vIEZJWE1FOiBX
b3JrIGFyb3VuZCByb3VuZGluZyBpc3N1ZXMgaW4gUlRMIHZlcnRpY2FsIHNsaWRlcnMuIFdlIHdh
bnQgdGhlbSB0bwogICAgICAgICAvLyByZW5kZXIgaWRlbnRpY2FsbHkgdG8gTFRSIHZlcnRpY2Fs
IHNsaWRlcnMuIFdlIGNhbiByZW1vdmUgdGhpcyB3b3JrIGFyb3VuZCB3aGVuCiAgICAgICAgIC8v
IHN1YnBpeGVsIHJlbmRlcmluZyBpcyBlbmFibGVkIG9uIGFsbCBwb3J0cy4KLSAgICAgICAgc3R5
bGUoKS5zZXREaXJlY3Rpb24oTFRSKTsKKyAgICAgICAgbXV0YWJsZVN0eWxlKCkuc2V0RGlyZWN0
aW9uKExUUik7CiAgICAgfQogCiAgICAgUmVuZGVyQm94KiB0aHVtYiA9IGlucHV0LnNsaWRlclRo
dW1iRWxlbWVudCgpID8gaW5wdXQuc2xpZGVyVGh1bWJFbGVtZW50KCktPnJlbmRlckJveCgpIDog
bnVsbHB0cjsKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIFJlbmRlclNsaWRlckNvbnRhaW5lcjo6
bGF5b3V0KCkKIAogICAgIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXQoKTsKIAotICAgIHN0eWxl
KCkuc2V0RGlyZWN0aW9uKG9sZFRleHREaXJlY3Rpb24pOworICAgIG11dGFibGVTdHlsZSgpLnNl
dERpcmVjdGlvbihvbGRUZXh0RGlyZWN0aW9uKTsKICAgICAvLyBUaGVzZSBzaG91bGQgYWx3YXlz
IGV4aXN0LCB1bmxlc3Mgc29tZW9uZSBtdXRhdGVzIHRoZSBzaGFkb3cgRE9NIChlLmcuLCBpbiB0
aGUgaW5zcGVjdG9yKS4KICAgICBpZiAoIXRodW1iIHx8ICF0cmFjaykKICAgICAgICAgcmV0dXJu
OwpAQCAtNTc0LDcgKzU3NCw3IEBAIEhUTUxJbnB1dEVsZW1lbnQqIFNsaWRlclRodW1iRWxlbWVu
dDo6aG8KICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc2hhZG93SG9zdCgp
KTsKIH0KIAotT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlkZXJUaHVtYkVsZW1lbnQ6OnJlc29s
dmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCitPcHRp
b25hbDxFbGVtZW50U3R5bGU+IFNsaWRlclRodW1iRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUqIGhvc3RTdHlsZSkKIHsKICAg
ICAvLyBUaGlzIGRvZXNuJ3QgYWN0dWFsbHkgY29tcHV0ZSBzdHlsZS4gVGhpcyBpcyBqdXN0IGEg
aGFjayB0byBwaWNrIHNoYWRvdyBwc2V1ZG8gaWQgd2hlbiBob3N0IHN0eWxlIGlzIGtub3duLgog
CkBAIC02MjgsNyArNjI4LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNsaWRlckNvbnRh
aW5lcgogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTbGlkZXJDb250YWluZXI+KCp0
aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAKLU9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVy
Q29udGFpbmVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVy
U3R5bGUqIGhvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVyQ29udGFpbmVy
RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVu
ZGVyU3R5bGUqIGhvc3RTdHlsZSkKIHsKICAgICAvLyBUaGlzIGRvZXNuJ3QgYWN0dWFsbHkgY29t
cHV0ZSBzdHlsZS4gVGhpcyBpcyBqdXN0IGEgaGFjayB0byBwaWNrIHNoYWRvdyBwc2V1ZG8gaWQg
d2hlbiBob3N0IHN0eWxlIGlzIGtub3duLgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDcgKzc4LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIHZvaWQgd2lsbERldGFj
aFJlbmRlcmVycygpIG92ZXJyaWRlOwogCi0gICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNv
bHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUqKSBvdmVycmlkZTsKICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHN0YXJ0RHJh
Z2dpbmcoKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCBpbmxpbmUgUmVmPFNsaWRlclRodW1iRWxlbWVu
dD4gU2xpZGVyVGh1CiBjbGFzcyBSZW5kZXJTbGlkZXJUaHVtYiBmaW5hbCA6IHB1YmxpYyBSZW5k
ZXJCbG9ja0Zsb3cgewogcHVibGljOgogICAgIFJlbmRlclNsaWRlclRodW1iKFNsaWRlclRodW1i
RWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOwotICAgIHZvaWQgdXBkYXRlQXBwZWFyYW5jZShSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHZvaWQgdXBkYXRlQXBwZWFyYW5jZShjb25zdCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNTbGlkZXJU
aHVtYigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYpOwogICAgIFJlbmRlclB0
cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29u
c3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RWxlbWVudFN0
eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSopIG92ZXJy
aWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUqKSBvdmVycmlkZTsKICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBBdG9t
aWNTdHJpbmcgbV9zaGFkb3dQc2V1ZG9JZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAkocmV2aXNpb24g
MjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBSZWY8VGV4dENvbnRy
b2xJbm5lckVsZW1lbnQ+IFRleHRDb250cm9sCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4
dENvbnRyb2xJbm5lckVsZW1lbnQoZG9jdW1lbnQpKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVudFN0
eWxlPiBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0
eWxlJiwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHls
ZT4gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCiB7CiAgICAgYXV0
byBpbm5lckNvbnRhaW5lclN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZVB0cigpOwogICAgIGlu
bmVyQ29udGFpbmVyU3R5bGUtPmluaGVyaXRGcm9tKHNoYWRvd0hvc3RTdHlsZSk7CkBAIC0xMzQs
NyArMTM0LDcgQEAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKiBUZXh0Q29udHJvbAogICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s+KEhUTUxEaXZFbGVt
ZW50OjpyZW5kZXJlcigpKTsKIH0KIAotT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBUZXh0Q29udHJv
bElubmVyVGV4dEVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRl
clN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IFRleHRDb250
cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
JiwgY29uc3QgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKIHsKICAgICBhdXRvIHN0eWxl
ID0gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpzaGFkb3dIb3N0KCkpLmNy
ZWF0ZUlubmVyVGV4dFN0eWxlKCpzaGFkb3dIb3N0U3R5bGUpOwogICAgIHJldHVybiBFbGVtZW50
U3R5bGUoc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTdHlsZT4oV1RGTW92ZShzdHlsZSkpKTsKQEAg
LTE0OSw3ICsxNDksNyBAQCBUZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6VGV4dENvbnRy
CiAgICAgc2V0SGFzQ3VzdG9tU3R5bGVSZXNvbHZlQ2FsbGJhY2tzKCk7CiB9CiAKLU9wdGlvbmFs
PEVsZW1lbnRTdHlsZT4gVGV4dENvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQ6OnJlc29sdmVDdXN0
b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0
U3R5bGUpCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVt
ZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQogewogICAgIGF1dG8gc3R5bGUgPSBy
ZXNvbHZlU3R5bGUoJnBhcmVudFN0eWxlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIAogcHJvdGVj
dGVkOgogICAgIFRleHRDb250cm9sSW5uZXJFbGVtZW50KERvY3VtZW50Jik7Ci0gICAgT3B0aW9u
YWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0
eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25h
bDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgcGFy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOwog
CiBwcml2YXRlOgogICAgIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KERvY3VtZW50Jik7CiAgICAgUmVuZGVyUHRyPFJl
bmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBS
ZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+
IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc01vdXNl
Rm9jdXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlz
VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQogfTsKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBUZXh0Q29u
dHJvbFBsYWNlaG9sZGVyRWxlbWVudChEb2N1bWVudCYpOwogICAgIAotICAgIE9wdGlvbmFsPEVs
ZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwg
UmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxl
bWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKIH07CiAK
IGNsYXNzIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgSFRN
TERpdkVsZW1lbnQgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzgxLDcgKzEzODEsNyBAQCBPcHRpb25hbEN1cnNvciBFdmVudEhh
bmRsZXI6OnNlbGVjdEN1cnNvCiAgICAgICAgIHJldHVybiBOb0N1cnNvckNoYW5nZTsKIAogICAg
IGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHJlbmRlcmVyID8gJnJlbmRlcmVyLT5zdHlsZSgpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBz
dHlsZSA9IHJlbmRlcmVyID8gJnJlbmRlcmVyLT5zdHlsZSgpIDogbnVsbHB0cjsKICAgICBib29s
IGhvcml6b250YWxUZXh0ID0gIXN0eWxlIHx8IHN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpOwogICAgIGNvbnN0IEN1cnNvciYgaUJlYW0gPSBob3Jpem9udGFsVGV4dCA/IGlCZWFtQ3Vy
c29yKCkgOiB2ZXJ0aWNhbFRleHRDdXJzb3IoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MCwxMCArNzAsMTAgQEAgc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVTdGVw
c0Z1bmN0aW9uKAogICAgIHJldHVybiBmbG9vcihudW1TdGVwcyAqIHQpIC8gbnVtU3RlcHM7CiB9
CiAKLUFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UoQW5pbWF0aW9uJiBhbmltYXRpb24sIFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1h
dGlvbikKK0FuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiBhbmlt
YXRpb24sIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBv
c2l0ZUFuaW1hdGlvbikKICAgICA6IG1fb2JqZWN0KHJlbmRlcmVyKQogICAgICwgbV9jb21wb3Np
dGVBbmltYXRpb24oY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICwgbV9hbmltYXRpb24oYW5pbWF0
aW9uKQorICAgICwgbV9hbmltYXRpb24oY29uc3RfY2FzdDxBbmltYXRpb24mPihhbmltYXRpb24p
KQogewogICAgIC8vIENvbXB1dGUgdGhlIHRvdGFsIGR1cmF0aW9uCiAgICAgaWYgKG1fYW5pbWF0
aW9uLT5pdGVyYXRpb25Db3VudCgpID4gMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNyArNTIsNyBAQCBjbGFzcyBBbmltYXRpb25CYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8CiAg
ICAgZnJpZW5kIGNsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIEFuaW1hdGlvbkJhc2UoQW5pbWF0aW9uJiB0cmFuc2l0
aW9uLCBSZW5kZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKik7CisgICAgQW5pbWF0aW9u
QmFzZShjb25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIFJlbmRlckVsZW1lbnQqLCBDb21wb3Np
dGVBbmltYXRpb24qKTsKICAgICB2aXJ0dWFsIH5BbmltYXRpb25CYXNlKCkgeyB9CiAKICAgICBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CkBAIC0x
MzgsNyArMTM4LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSBwcm9ncmVzcyhkb3VibGUgc2NhbGUg
PSAxLCBkb3VibGUgb2Zmc2V0ID0gMCwgY29uc3QgVGltaW5nRnVuY3Rpb24qID0gbnVsbHB0cikg
Y29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGFuaW1hdGlvbiBzdGF0ZSBjaGFu
Z2VkLgotICAgIHZpcnR1YWwgYm9vbCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRl
ckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogLypjdXJyZW50U3R5bGUqLywgUmVuZGVyU3R5
bGUqIC8qdGFyZ2V0U3R5bGUqLywgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgLyphbmlt
YXRlZFN0eWxlKi8pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0ZShDb21wb3NpdGVBbmlt
YXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIC8qY3VycmVudFN0eWxl
Ki8sIGNvbnN0IFJlbmRlclN0eWxlKiAvKnRhcmdldFN0eWxlKi8sIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdl
dEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0
eWxlKi8pID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1B
bmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0ID0gMDsKQEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBhbmltYXRpb25zTWF0Y2goY29uc3QgQW5pbWF0aW9uJikgY29uc3Q7CiAK
ICAgICBjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0
aW9uOyB9Ci0gICAgdm9pZCBzZXRBbmltYXRpb24oQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgbV9h
bmltYXRpb24gPSBhbmltYXRpb247IH0KKyAgICB2b2lkIHNldEFuaW1hdGlvbihjb25zdCBBbmlt
YXRpb24mIGFuaW1hdGlvbikgeyBtX2FuaW1hdGlvbiA9IGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4o
YW5pbWF0aW9uKTsgfQogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhpcyBhbmltYXRpb24gaXMg
b3ZlcnJpZGRlbi4gVGhpcyB3aWxsIG9ubHkgYmUgdGhlIGNhc2UgZm9yCiAgICAgLy8gSW1wbGlj
aXRBbmltYXRpb25zIGFuZCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBz
aG91bGQgZm9yY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTkzLDkgKzU5Myw5IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2Vs
QW5pbWF0aW8KICAgICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNT
dHlsZUNoYW5nZSk7CiB9CiAKLWJvb2wgQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0
aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQorYm9vbCBBbmltYXRpb25D
b250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFu
aW1hdGVkU3R5bGUpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gcmVuZGVyZXIuaGFz
SW5pdGlhbGl6ZWRTdHlsZSgpID8gJnJlbmRlcmVyLnN0eWxlKCkgOiBudWxscHRyOworICAgIGF1
dG8qIG9sZFN0eWxlID0gcmVuZGVyZXIuaGFzSW5pdGlhbGl6ZWRTdHlsZSgpID8gJnJlbmRlcmVy
LnN0eWxlKCkgOiBudWxscHRyOwogICAgIGlmICgoIW9sZFN0eWxlIHx8ICghb2xkU3R5bGUtPmFu
aW1hdGlvbnMoKSAmJiAhb2xkU3R5bGUtPnRyYW5zaXRpb25zKCkpKSAmJiAoIW5ld1N0eWxlLmFu
aW1hdGlvbnMoKSAmJiAhbmV3U3R5bGUudHJhbnNpdGlvbnMoKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB+QW5pbWF0aW9uQ29udHJvbGxlcigpOwogCiAgICAg
dm9pZCBjYW5jZWxBbmltYXRpb25zKFJlbmRlckVsZW1lbnQmKTsKLSAgICBib29sIHVwZGF0ZUFu
aW1hdGlvbnMoUmVuZGVyRWxlbWVudCYsIFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CisgICAgYm9vbCB1cGRhdGVBbmlt
YXRpb25zKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUsIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gZ2V0QW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlckVsZW1l
bnQmKTsKIAogICAgIC8vIElmIHBvc3NpYmxlLCBjb21wdXRlIHRoZSB2aXN1YWwgZXh0ZW50IG9m
IGFueSB0cmFuc2Zvcm0gYW5pbWF0aW9uIG9uIHRoZSBnaXZlbiByZW5kZXJlcgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24u
Y3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
b21wb3NpdGVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAgICB9CiB9CiAKLXZvaWQg
Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5k
ZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxl
KQordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSogdGFyZ2V0U3R5bGUpCiB7CiAgICAgLy8gSWYgY3VycmVudFN0eWxlIGlzIG51bGwg
b3IgdGhlcmUgYXJlIG5vIG9sZCBvciBuZXcgdHJhbnNpdGlvbnMsIGp1c3Qgc2tpcCBpdAogICAg
IGlmICghY3VycmVudFN0eWxlIHx8ICghdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkgJiYgbV90
cmFuc2l0aW9ucy5pc0VtcHR5KCkpKQpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIENvbXBvc2l0ZUFu
aW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQg
dG8gdXBkYXRlIHRoZSBhY3RpdmUgdHJhbnNpdGlvbnMKICAgICBpZiAodGFyZ2V0U3R5bGUtPnRy
YW5zaXRpb25zKCkpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRTdHls
ZS0+dHJhbnNpdGlvbnMoKS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIEFuaW1hdGlvbiYg
YW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCktPmFuaW1hdGlvbihpKTsKKyAg
ICAgICAgICAgIGF1dG8mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpLT5h
bmltYXRpb24oaSk7CiAgICAgICAgICAgICBib29sIGlzQWN0aXZlVHJhbnNpdGlvbiA9ICFtX3N1
c3BlbmRlZCAmJiAoYW5pbWF0aW9uLmR1cmF0aW9uKCkgfHwgYW5pbWF0aW9uLmRlbGF5KCkgPiAw
KTsKIAogICAgICAgICAgICAgQW5pbWF0aW9uOjpBbmltYXRpb25Nb2RlIG1vZGUgPSBhbmltYXRp
b24uYW5pbWF0aW9uTW9kZSgpOwpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAgICAgICAgICAgICAvLyBhbmQgd2UgaGF2ZSB0
byB1c2UgdGhlIHVuYW5pbWF0ZWRTdHlsZSBmcm9tIHRoZSBhbmltYXRpb24uIFdlIGRvIHRoZSB0
ZXN0CiAgICAgICAgICAgICAgICAgLy8gYWdhaW5zdCB0aGUgdW5hbmltYXRlZCBzdHlsZSBoZXJl
LCBidXQgd2UgIm92ZXJyaWRlIiB0aGUgdHJhbnNpdGlvbiBsYXRlci4KICAgICAgICAgICAgICAg
ICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IGdldEFuaW1hdGlvbkZv
clByb3BlcnR5KHByb3ApOwotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUg
PSBrZXlmcmFtZUFuaW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHlsZSgpIDogY3VycmVu
dFN0eWxlOworICAgICAgICAgICAgICAgIGF1dG8qIGZyb21TdHlsZSA9IGtleWZyYW1lQW5pbSA/
IGtleWZyYW1lQW5pbS0+dW5hbmltYXRlZFN0eWxlKCkgOiBjdXJyZW50U3R5bGU7CiAKICAgICAg
ICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5zaXRpb24gZm9yIHRo
aXMgcHJvcAogICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsQW5pbSA9IG1f
dHJhbnNpdGlvbnMuZ2V0KHByb3ApOwpAQCAtMTk1LDcgKzE5NSw3IEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUo
cHJvcGVydHlUb1JlbW92ZSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVL
ZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK3ZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIs
IGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJn
ZXRTdHlsZSkKIHsKICAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHdlIGRvbid0IGhhdmUgYW55IGFu
aW1hdGlvbnMsIGFuZCBkaWRuJ3QgaGF2ZSBhbnkgYmVmb3JlCiAgICAgaWYgKG1fa2V5ZnJhbWVB
bmltYXRpb25zLmlzRW1wdHkoKSAmJiAhdGFyZ2V0U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkKQEAg
LTIyMSw3ICsyMjEsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVB
CiAgICAgaWYgKHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCkpIHsKICAgICAgICAgaW50IG51bUFu
aW1zID0gdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKS0+c2l6ZSgpOwogICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bUFuaW1zOyArK2kpIHsKLSAgICAgICAgICAgIEFuaW1hdGlvbiYgYW5p
bWF0aW9uID0gdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKS0+YW5pbWF0aW9uKGkpOworICAgICAg
ICAgICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKS0+YW5pbWF0
aW9uKGkpOwogICAgICAgICAgICAgQXRvbWljU3RyaW5nIGFuaW1hdGlvbk5hbWUoYW5pbWF0aW9u
Lm5hbWUoKSk7CiAKICAgICAgICAgICAgIGlmICghYW5pbWF0aW9uLmlzVmFsaWRBbmltYXRpb24o
KSkKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5
ZnJhbWVBCiAgICAgc3RkOjpzd2FwKG5ld0FuaW1hdGlvbnMsIG1fa2V5ZnJhbWVBbmltYXRpb25z
KTsKIH0KIAotYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlJiB0YXJnZXRT
dHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYmxlbmRlZFN0eWxlKQorYm9vbCBD
b21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0
IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHls
ZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYmxlbmRlZFN0eWxlKQogewogICAgIC8v
IFdlIGRvbid0IGRvIGFueSB0cmFuc2l0aW9ucyBpZiB3ZSBkb24ndCBoYXZlIGEgY3VycmVudFN0
eWxlIChvbiBzdGFydHVwKS4KICAgICB1cGRhdGVUcmFuc2l0aW9ucygmcmVuZGVyZXIsIGN1cnJl
bnRTdHlsZSwgJnRhcmdldFN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBjbGVhclJl
bmRlcmVyKCk7CiAKLSAgICBib29sIGFuaW1hdGUoUmVuZGVyRWxlbWVudCYsIFJlbmRlclN0eWxl
KiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiYgYmxlbmRlZFN0eWxlKTsKKyAgICBib29sIGFuaW1hdGUoUmVuZGVyRWxl
bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
JiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYmxlbmRlZFN0eWxl
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGUoKSBj
b25zdDsKICAgICBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRS
ZWN0JikgY29uc3Q7CiAKQEAgLTg4LDggKzg4LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBD
b21wb3NpdGVBbmltYXRpb24oQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmKTsKIAotICAgIHZv
aWQgdXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCosIFJlbmRlclN0eWxlKiBjdXJyZW50
U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7Ci0gICAgdm9pZCB1cGRhdGVLZXlmcmFt
ZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCosIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJl
bmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5k
ZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhS
ZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKICAgICAKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBS
ZWZQdHI8SW1wbGljaXRBbmltYXRpb24+PiBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOwogICAg
IHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPEtleWZyYW1lQW5pbWF0
aW9uPj4gQW5pbWF0aW9uTmFtZU1hcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlt
cGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbihBbmltYXRpb24mIHRyYW5zaXRpb24s
IENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVy
LCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltLCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKQor
SW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgdHJh
bnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCog
cmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIGNvbnN0IFJlbmRlclN0eWxl
KiBmcm9tU3R5bGUpCiAgICAgOiBBbmltYXRpb25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVyLCBj
b21wQW5pbSkKICAgICAsIG1fZnJvbVN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqZnJvbVN0
eWxlKSkKICAgICAsIG1fdHJhbnNpdGlvblByb3BlcnR5KHRyYW5zaXRpb24ucHJvcGVydHkoKSkK
QEAgLTYwLDcgKzYwLDcgQEAgYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6c2hvdWxkU2VuZEV2ZW50
RgogICAgIHJldHVybiBtX29iamVjdC0+ZG9jdW1lbnQoKS5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0
ZW5lclR5cGUpOwogfQogCi1ib29sIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0
ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIFJlbmRlclN0
eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRT
dHlsZSkKK2Jvb2wgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9u
KiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUq
IHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxl
KQogewogICAgIC8vIElmIHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25l
LCBpdCBtZWFucyB3ZSBhcmUgY2xlYW5pbmcgdXAgYSBqdXN0IGZpbmlzaGVkIGFuaW1hdGlvbi4K
ICAgICAvLyBTbyBqdXN0IHJldHVybi4gRXZlcnl0aGluZyBpcyBhbHJlYWR5IGFsbCBjbGVhbmVk
IHVwLgpAQCAtMjA1LDcgKzIwNSw3IEBAIGJvb2wgSW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFu
c2l0aW9uRXYKICAgICByZXR1cm4gZmFsc2U7IC8vIERpZG4ndCBkaXNwYXRjaCBhbiBldmVudAog
fQogCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpyZXNldChSZW5kZXJTdHlsZSogdG8pCit2b2lk
IEltcGxpY2l0QW5pbWF0aW9uOjpyZXNldChjb25zdCBSZW5kZXJTdHlsZSogdG8pCiB7CiAgICAg
QVNTRVJUKHRvKTsKICAgICBBU1NFUlQobV9mcm9tU3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlbmRlckVsZW1lbnQ7
CiAvLyBmb3IgYSBzaW5nbGUgUmVuZGVyRWxlbWVudC4KIGNsYXNzIEltcGxpY2l0QW5pbWF0aW9u
IDogcHVibGljIEFuaW1hdGlvbkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SW1wbGlj
aXRBbmltYXRpb24+IGNyZWF0ZShBbmltYXRpb24mIGFuaW1hdGlvbiwgQ1NTUHJvcGVydHlJRCBh
bmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1h
dGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKQorICAgIHN0
YXRpYyBSZWY8SW1wbGljaXRBbmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24mIGFuaW1h
dGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCogcmVu
ZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSogZnJvbVN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SW1wbGljaXRBbmltYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgcmVuZGVyZXIs
IGNvbXBvc2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7CiAgICAgfTsKQEAgLTU0LDkgKzU0LDkg
QEAgcHVibGljOgogICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQpIG92
ZXJyaWRlOwogICAgIHZvaWQgZW5kQW5pbWF0aW9uKCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIGFu
aW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0
eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBhbmlt
YXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQg
Z2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0
eWxlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoUmVuZGVyU3R5bGUqIHRvKTsK
KyAgICB2b2lkIHJlc2V0KGNvbnN0IFJlbmRlclN0eWxlKiB0byk7CiAKICAgICBib29sIGNvbXB1
dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7
CiAKQEAgLTg3LDcgKzg3LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAg
SW1wbGljaXRBbmltYXRpb24oQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyRWxlbWVu
dCosIENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlclN0eWxlKik7CisgICAgSW1wbGljaXRBbmlt
YXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyRWxlbWVudCosIENv
bXBvc2l0ZUFuaW1hdGlvbiosIGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB+SW1w
bGljaXRBbmltYXRpb24oKTsKIAogICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJs
ZW5kaW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmlt
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tl
eWZyYW1lQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotS2V5ZnJhbWVBbmltYXRpb246
OktleWZyYW1lQW5pbWF0aW9uKEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlclN0
eWxlKiB1bmFuaW1hdGVkU3R5bGUpCitLZXlmcmFtZUFuaW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRp
b24oY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBD
b21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUq
IHVuYW5pbWF0ZWRTdHlsZSkKICAgICA6IEFuaW1hdGlvbkJhc2UoYW5pbWF0aW9uLCByZW5kZXJl
ciwgY29tcG9zaXRlQW5pbWF0aW9uKQogICAgICwgbV9rZXlmcmFtZXMoYW5pbWF0aW9uLm5hbWUo
KSkKICAgICAsIG1fdW5hbmltYXRlZFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqdW5hbmlt
YXRlZFN0eWxlKSkKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpm
ZXRjaEludGVydmFsRW5kCiAgICAgcHJvZyA9IHByb2dyZXNzKHNjYWxlLCBvZmZzZXQsIHByZXZL
ZXlmcmFtZS50aW1pbmdGdW5jdGlvbihuYW1lKCkpKTsKIH0KIAotYm9vbCBLZXlmcmFtZUFuaW1h
dGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVu
ZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxl
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQorYm9vbCBLZXlm
cmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1h
dGlvbiwgUmVuZGVyRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5
bGUqIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0
eWxlKQogewogICAgIC8vIEZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVkCiAgICAgZmly
ZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDEyICs0MCwxMiBAQCBjbGFzcyBSZW5kZXJTdHlsZTsKIC8vIEEgS2V5
ZnJhbWVBbmltYXRpb24gdHJhY2tzIHRoZSBzdGF0ZSBvZiBhbiBleHBsaWNpdCBhbmltYXRpb24g
Zm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCiBjbGFzcyBLZXlmcmFtZUFuaW1hdGlvbiBmaW5h
bCA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEtleWZy
YW1lQW5pbWF0aW9uPiBjcmVhdGUoQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVsZW1lbnQq
IHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVy
U3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKKyAgICBzdGF0aWMgUmVmPEtleWZyYW1lQW5pbWF0aW9u
PiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVy
U3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgcmVuZGVyZXIsIGNvbXBvc2l0ZUFuaW1h
dGlvbiwgdW5hbmltYXRlZFN0eWxlKSk7CiAgICAgfQogCi0gICAgYm9vbCBhbmltYXRlKENvbXBv
c2l0ZUFuaW1hdGlvbiosIFJlbmRlckVsZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4mIGFuaW1hdGVkU3R5bGUpIG92ZXJyaWRlOworICAgIGJvb2wgYW5pbWF0ZShDb21wb3Np
dGVBbmltYXRpb24qLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGdldEFuaW1hdGVk
U3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYpIG92ZXJyaWRlOwogCiAgICAgYm9v
bCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtODgsNyArODgsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0ZToK
LSAgICBLZXlmcmFtZUFuaW1hdGlvbihBbmltYXRpb24mLCBSZW5kZXJFbGVtZW50KiwgQ29tcG9z
aXRlQW5pbWF0aW9uKiwgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSk7CisgICAgS2V5ZnJh
bWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgUmVuZGVyRWxlbWVudCosIENvbXBvc2l0ZUFu
aW1hdGlvbiosIGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpOwogICAgIHZpcnR1
YWwgfktleWZyYW1lQW5pbWF0aW9uKCk7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBzdHlsZXMgZm9y
IHRoZSBnaXZlbiBwcm9wZXJ0eSBzdXJyb3VuZGluZyB0aGUgY3VycmVudCBhbmltYXRpb24gdGlt
ZSBhbmQgdGhlIHByb2dyZXNzIGJldHdlZW4gdGhlbS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvaW9zL0ZyYW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvaW9z
L0ZyYW1lSU9TLm1tCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2lv
cy9GcmFtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHN0YXRpYyBO
b2RlKiBhbmNlc3RvclJlc3BvbmRpbmdUb1Njcm9sbFcKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxl
KCk7CisgICAgICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAKICAgICAgICAg
aWYgKHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSAmJgogICAgICAgICAgICAgKHN0eWxlLm92
ZXJmbG93WSgpID09IE9BVVRPIHx8IHN0eWxlLm92ZXJmbG93WSgpID09IE9TQ1JPTEwgfHwgc3R5
bGUub3ZlcmZsb3dZKCkgPT0gT09WRVJMQVkgfHwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQmIEZsb3dU
aHJlYWRDb250cm9sCiAKIHZvaWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OnN0eWxlRGlkQ2hhbmdl
KCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgdmlld1N0eWxlID0gbV92aWV3LT5zdHlsZSgpOworICAg
IGF1dG8mIHZpZXdTdHlsZSA9IG1fdmlldy0+c3R5bGUoKTsKICAgICBmb3IgKGF1dG8mIGZsb3dS
ZW5kZXJlciA6ICptX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QpCiAgICAgICAgIGZsb3dSZW5k
ZXJlci0+c2V0U3R5bGUoUmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRlRmxvd1RocmVhZFN0eWxlKCZ2
aWV3U3R5bGUpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyOCw3ICsxMzI4LDcgQEAgdm9p
ZCBJbmxpbmVGbG93Qm94Ojpjb25zdHJhaW5Ub0xpbmVUb3BBbgogc3RhdGljIExheW91dFJlY3Qg
Y2xpcFJlY3RGb3JOaW5lUGllY2VJbWFnZVN0cmlwKElubGluZUZsb3dCb3gqIGJveCwgY29uc3Qg
TmluZVBpZWNlSW1hZ2UmIGltYWdlLCBjb25zdCBMYXlvdXRSZWN0JiBwYWludFJlY3QpCiB7CiAg
ICAgTGF5b3V0UmVjdCBjbGlwUmVjdChwYWludFJlY3QpOwotICAgIFJlbmRlclN0eWxlJiBzdHls
ZSA9IGJveC0+cmVuZGVyZXIoKS5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gYm94LT5yZW5k
ZXJlcigpLnN0eWxlKCk7CiAgICAgTGF5b3V0Qm94RXh0ZW50IG91dHNldHMgPSBzdHlsZS5pbWFn
ZU91dHNldHMoaW1hZ2UpOwogICAgIGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKSB7CiAgICAgICAg
IGNsaXBSZWN0LnNldFkocGFpbnRSZWN0LnkoKSAtIG91dHNldHMudG9wKCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAyMDAwNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yODcsNyArMjg3LDcgQEAgc3RhdGljIGJvb2wgYm9yZGVyT3JQYWRkaW5nTG9naWNhbFdp
ZHRoQwogCiB2b2lkIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2Ug
ZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewotICAgIFJlbmRlclN0eWxlJiBu
ZXdTdHlsZSA9IHN0eWxlKCk7CisgICAgYXV0byYgbmV3U3R5bGUgPSBzdHlsZSgpOwogCiAgICAg
Ym9vbCBoYWRUcmFuc2Zvcm0gPSBoYXNUcmFuc2Zvcm0oKTsKICAgICBib29sIGZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2tJbnZhbGlkYXRlZCA9IGZhbHNlOwpAQCAtMjgzNyw3ICsyODM3LDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bGluZUhlaWdodChib29sIAogICAgICAgICByZXR1cm4g
UmVuZGVyQm94OjpsaW5lSGVpZ2h0KGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25N
b2RlKTsKIAogICAgIGlmIChmaXJzdExpbmUgJiYgdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygp
KSB7Ci0gICAgICAgIFJlbmRlclN0eWxlJiBzID0gZmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5bGUo
KSA6IHN0eWxlKCk7CisgICAgICAgIGF1dG8mIHMgPSBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHls
ZSgpIDogc3R5bGUoKTsKICAgICAgICAgaWYgKCZzICE9ICZzdHlsZSgpKQogICAgICAgICAgICAg
cmV0dXJuIHMuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CiAgICAgfQpAQCAtMjk3Niw5ICsyOTc2LDkg
QEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpmaXJzdExpbmVCbG9jawogICAgIHJldHVybiBm
aXJzdExpbmVCbG9jazsKIH0KIAotc3RhdGljIFJlbmRlclN0eWxlJiBzdHlsZUZvckZpcnN0TGV0
dGVyKFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0dGVyQmxvY2ssIFJlbmRlck9iamVjdCogZmlyc3RM
ZXR0ZXJDb250YWluZXIpCitzdGF0aWMgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlRm9yRmlyc3RM
ZXR0ZXIoUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyT2JqZWN0KiBmaXJz
dExldHRlckNvbnRhaW5lcikKIHsKLSAgICBSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBmaXJz
dExldHRlckJsb2NrLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIsICZmaXJzdExl
dHRlckNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSk7CisgICAgYXV0byogcHNldWRvU3R5bGUg
PSBmaXJzdExldHRlckJsb2NrLT5nZXRNdXRhYmxlQ2FjaGVkUHNldWRvU3R5bGUoRklSU1RfTEVU
VEVSLCAmZmlyc3RMZXR0ZXJDb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkpOwogICAgIAogICAg
IC8vIElmIHdlIGhhdmUgYW4gaW5pdGlhbCBsZXR0ZXIgZHJvcCB0aGF0IGlzID49IDEsIHRoZW4g
d2UgbmVlZCB0byBmb3JjZSBmbG9hdGluZyB0byBiZSBvbi4KICAgICBpZiAocHNldWRvU3R5bGUt
PmluaXRpYWxMZXR0ZXJEcm9wKCkgPj0gMSAmJiAhcHNldWRvU3R5bGUtPmlzRmxvYXRpbmcoKSkK
QEAgLTMwNjEsNyArMzA2MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVy
U3R5bGUKIHsKICAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlciA9IGN1cnJlbnRDaGlsZC0+
cGFyZW50KCk7CiAgICAgUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJDb250YWluZXIgPSBmaXJz
dExldHRlci0+cGFyZW50KCk7Ci0gICAgUmVuZGVyU3R5bGUmIHBzZXVkb1N0eWxlID0gc3R5bGVG
b3JGaXJzdExldHRlcihmaXJzdExldHRlckJsb2NrLCBmaXJzdExldHRlckNvbnRhaW5lcik7Cisg
ICAgYXV0byYgcHNldWRvU3R5bGUgPSBzdHlsZUZvckZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyQmxv
Y2ssIGZpcnN0TGV0dGVyQ29udGFpbmVyKTsKICAgICBBU1NFUlQoZmlyc3RMZXR0ZXItPmlzRmxv
YXRpbmcoKSB8fCBmaXJzdExldHRlci0+aXNJbmxpbmUoKSk7CiAKICAgICBpZiAoU3R5bGU6OmRl
dGVybWluZUNoYW5nZShmaXJzdExldHRlci0+c3R5bGUoKSwgcHNldWRvU3R5bGUpID09IFN0eWxl
OjpEZXRhY2gpIHsKQEAgLTMxMDIsNyArMzEwMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0
ZUZpcnN0TGV0dGVyU3R5bGUKIHZvaWQgUmVuZGVyQmxvY2s6OmNyZWF0ZUZpcnN0TGV0dGVyUmVu
ZGVyZXIoUmVuZGVyRWxlbWVudCogZmlyc3RMZXR0ZXJCbG9jaywgUmVuZGVyVGV4dCogY3VycmVu
dFRleHRDaGlsZCkKIHsKICAgICBSZW5kZXJFbGVtZW50KiBmaXJzdExldHRlckNvbnRhaW5lciA9
IGN1cnJlbnRUZXh0Q2hpbGQtPnBhcmVudCgpOwotICAgIFJlbmRlclN0eWxlJiBwc2V1ZG9TdHls
ZSA9IHN0eWxlRm9yRmlyc3RMZXR0ZXIoZmlyc3RMZXR0ZXJCbG9jaywgZmlyc3RMZXR0ZXJDb250
YWluZXIpOworICAgIGF1dG8mIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJz
dExldHRlckJsb2NrLCBmaXJzdExldHRlckNvbnRhaW5lcik7CiAgICAgUmVuZGVyQm94TW9kZWxP
YmplY3QqIGZpcnN0TGV0dGVyID0gbnVsbHB0cjsKICAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxh
eSgpID09IElOTElORSkKICAgICAgICAgZmlyc3RMZXR0ZXIgPSBuZXcgUmVuZGVySW5saW5lKGRv
Y3VtZW50KCksIFJlbmRlclN0eWxlOjpjbG9uZShwc2V1ZG9TdHlsZSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjE1LDcgKzE2MTUsNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxv
dzo6YWRqdXN0QmxvY2tDCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBM
YXlvdXRVbml0IGNhbGN1bGF0ZU1pbmltdW1QYWdlSGVpZ2h0KFJlbmRlclN0eWxlJiByZW5kZXJT
dHlsZSwgUm9vdElubGluZUJveCYgbGFzdExpbmUsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0
VW5pdCBsaW5lQm90dG9tKQorc3RhdGljIGlubGluZSBMYXlvdXRVbml0IGNhbGN1bGF0ZU1pbmlt
dW1QYWdlSGVpZ2h0KGNvbnN0IFJlbmRlclN0eWxlJiByZW5kZXJTdHlsZSwgUm9vdElubGluZUJv
eCYgbGFzdExpbmUsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKQog
ewogICAgIC8vIFdlIG1heSByZXF1aXJlIGEgY2VydGFpbiBtaW5pbXVtIG51bWJlciBvZiBsaW5l
cyBwZXIgcGFnZSBpbiBvcmRlciB0byBzYXRpc2Z5CiAgICAgLy8gb3JwaGFucyBhbmQgd2lkb3dz
LCBhbmQgdGhhdCBtYXkgYWZmZWN0IHRoZSBtaW5pbXVtIHBhZ2UgaGVpZ2h0LgpAQCAtMzcyMyw3
ICszNzIzLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdENvbXB1dGVkRm9udAogICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBkZXNjZW5kZW50ID0gdHJhdmVyc2VOZXh0KHRoaXMsIGlzTm9u
QmxvY2tzT3JOb25GaXhlZEhlaWdodExpc3RJdGVtcyk7IGRlc2NlbmRlbnQ7IGRlc2NlbmRlbnQg
PSBkZXNjZW5kZW50LT50cmF2ZXJzZU5leHQodGhpcywgaXNOb25CbG9ja3NPck5vbkZpeGVkSGVp
Z2h0TGlzdEl0ZW1zKSkgewogICAgICAgICBpZiAoaXNWaXNpYmxlUmVuZGVyVGV4dChkZXNjZW5k
ZW50KSAmJiByZXNpemVUZXh0UGVybWl0dGVkKGRlc2NlbmRlbnQpKSB7CiAgICAgICAgICAgICBS
ZW5kZXJUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmRlc2NlbmRlbnQpOwotICAg
ICAgICAgICAgUmVuZGVyU3R5bGUmIG9sZFN0eWxlID0gdGV4dC5zdHlsZSgpOworICAgICAgICAg
ICAgYXV0byYgb2xkU3R5bGUgPSB0ZXh0LnN0eWxlKCk7CiAgICAgICAgICAgICBhdXRvIGZvbnRE
ZXNjcmlwdGlvbiA9IG9sZFN0eWxlLmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAgICAgZmxv
YXQgc3BlY2lmaWVkU2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCk7CiAgICAg
ICAgICAgICBmbG9hdCBzY2FsZWRTaXplID0gcm91bmRmKHNwZWNpZmllZFNpemUgKiBzY2FsZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMjAw
MDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmCiAgICAgaWYgKGlzRG9jRWxlbWVudFJlbmRlcmVyIHx8IGlzQm9keVJlbmRlcmVy
KSB7CiAgICAgICAgIC8vIFByb3BhZ2F0ZSB0aGUgbmV3IHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0
aW9uIHVwIHRvIHRoZSBSZW5kZXJWaWV3LgogICAgICAgICBhdXRvKiBkb2N1bWVudEVsZW1lbnRS
ZW5kZXJlciA9IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCk7Ci0gICAg
ICAgIFJlbmRlclN0eWxlJiB2aWV3U3R5bGUgPSB2aWV3KCkuc3R5bGUoKTsKKyAgICAgICAgYXV0
byYgdmlld1N0eWxlID0gdmlldygpLm11dGFibGVTdHlsZSgpOwogICAgICAgICBib29sIHZpZXdD
aGFuZ2VkV3JpdGluZ01vZGUgPSBmYWxzZTsKICAgICAgICAgYm9vbCByb290U3R5bGVDaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgICAgIGJvb2wgdmlld1N0eWxlQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMzkz
LDcgKzM5Myw3IEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmYKICAg
ICAgICAgICAgIHZpZXdTdHlsZS5zZXREaXJlY3Rpb24obmV3U3R5bGUuZGlyZWN0aW9uKCkpOwog
ICAgICAgICAgICAgdmlld1N0eWxlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBpZiAoaXNC
b2R5UmVuZGVyZXIpIHsKLSAgICAgICAgICAgICAgICByb290UmVuZGVyZXItPnN0eWxlKCkuc2V0
RGlyZWN0aW9uKG5ld1N0eWxlLmRpcmVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICByb290UmVu
ZGVyZXItPm11dGFibGVTdHlsZSgpLnNldERpcmVjdGlvbihuZXdTdHlsZS5kaXJlY3Rpb24oKSk7
CiAgICAgICAgICAgICAgICAgcm9vdFN0eWxlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKQEAgLTQw
Nyw3ICs0MDcsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmCiAg
ICAgICAgICAgICB2aWV3KCkubWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgp
OwogICAgICAgICAgICAgaWYgKGlzQm9keVJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgcm9v
dFN0eWxlQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5zdHls
ZSgpLnNldFdyaXRpbmdNb2RlKG5ld1N0eWxlLndyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAg
ICAgIHJvb3RSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0V3JpdGluZ01vZGUobmV3U3R5bGUu
d3JpdGluZ01vZGUoKSk7CiAgICAgICAgICAgICAgICAgcm9vdFJlbmRlcmVyLT5zZXRIb3Jpem9u
dGFsV3JpdGluZ01vZGUobmV3U3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMo
KTsKQEAgLTQzMiw4ICs0MzIsOCBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmCiAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgdGhlIGJvZHkgZm9udCBiYWNrIHVwIHRv
IHRoZSBSZW5kZXJWaWV3IGFuZCB1c2UgaXQgYXMKICAgICAgICAgICAgIC8vIHRoZSBiYXNpcyBv
ZiB0aGUgZ3JpZC4KICAgICAgICAgICAgIGlmIChuZXdTdHlsZS5mb250RGVzY3JpcHRpb24oKSAh
PSB2aWV3KCkuc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKSkgewotICAgICAgICAgICAgICAgIHZp
ZXcoKS5zdHlsZSgpLnNldEZvbnREZXNjcmlwdGlvbihuZXdTdHlsZS5mb250RGVzY3JpcHRpb24o
KSk7Ci0gICAgICAgICAgICAgICAgdmlldygpLnN0eWxlKCkuZm9udENhc2NhZGUoKS51cGRhdGUo
JmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgICAgIHZpZXcoKS5tdXRh
YmxlU3R5bGUoKS5zZXRGb250RGVzY3JpcHRpb24obmV3U3R5bGUuZm9udERlc2NyaXB0aW9uKCkp
OworICAgICAgICAgICAgICAgIHZpZXcoKS5tdXRhYmxlU3R5bGUoKS5mb250Q2FzY2FkZSgpLnVw
ZGF0ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIApAQCAtNjgwLDcgKzY4MCw3IEBAIExheW91dFVuaXQgUmVuZGVyQm94Ojpjb25zdHJhaW5D
b250ZW50Qm8KIAogUm91bmRlZFJlY3Q6OlJhZGlpIFJlbmRlckJveDo6Ym9yZGVyUmFkaWkoKSBj
b25zdAogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CisgICAgYXV0
byYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogICAgIExheW91dFJlY3QgYm91bmRzID0gZnJhbWVS
ZWN0KCk7CiAKICAgICB1bnNpZ25lZCBib3JkZXJMZWZ0ID0gc3R5bGUuYm9yZGVyTGVmdFdpZHRo
KCk7CkBAIC00ODE0LDcgKzQ4MTQsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyQm94OjplbmNsb3Np
bmdGbG9hdFBhCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQm94
Ojpsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2ljYWxWaXN1YWxPdmVy
Zmxvd1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNv
bnN0CiB7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gdmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFn
YXRpb24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCkBAIC00ODIyLDcgKzQ4MjIsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6
bG9naWNhbFZpc3VhbE92ZXJmCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91dFJlY3QgUmVu
ZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0
Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAogewog
ICAgIC8vIElmIHRoZSB3cml0aW5nIG1vZGVzIG9mIHRoZSBjaGlsZCBhbmQgcGFyZW50IG1hdGNo
LCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gCiAgICAgLy8gZG8gYW55dGhpbmcgZmFuY3kuIEp1c3Qg
cmV0dXJuIHRoZSByZXN1bHQuCkBAIC00ODQwLDcgKzQ4NDAsNyBAQCBMYXlvdXRSZWN0IFJlbmRl
ckJveDo6dmlzdWFsT3ZlcmZsb3dSZWN0CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxheW91dFJl
Y3QgUmVuZGVyQm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvZ2lj
YWxMYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgTGF5b3V0UmVjdCByZWN0ID0gbGF5b3V0T3ZlcmZsb3dS
ZWN0Rm9yUHJvcGFnYXRpb24ocGFyZW50U3R5bGUpOwogICAgIGlmICghcGFyZW50U3R5bGUtPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC00ODQ4LDcgKzQ4NDgsNyBAQCBMYXlvdXRSZWN0
IFJlbmRlckJveDo6bG9naWNhbExheW91dE92ZXJmCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUxh
eW91dFJlY3QgUmVuZGVyQm94OjpsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJveDo6bGF5b3V0
T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KSBjb25zdAogewogICAgIC8vIE9ubHkgcHJvcGFnYXRlIGludGVyaW9yIGxheW91dCBvdmVyZmxv
dyBpZiB3ZSBkb24ndCBjbGlwIGl0LgogICAgIExheW91dFJlY3QgcmVjdCA9IGJvcmRlckJveFJl
Y3QoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDIw
MDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtNTYzLDEwICs1NjMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgYXBwbHlUb3BM
ZWZ0TG9jYXRpb25PZmZzZXRXaXRoRmxpcHBpbmcocG9pbnQpOwogICAgIH0KIAotICAgIExheW91
dFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxl
KikgY29uc3Q7Ci0gICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlv
bihSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIExheW91dFJlY3QgbG9naWNhbExheW91dE92ZXJm
bG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTGF5b3V0UmVj
dCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0Owor
ICAgIExheW91dFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNv
bnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIExheW91dFJl
Y3QgbG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKGNvbnN0IFJlbmRlclN0
eWxlKikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdh
dGlvbihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAgYm9vbCBoYXNSZW5kZXJPdmVy
ZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3c7IH0gICAgCiAgICAgYm9vbCBoYXNWaXN1
YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgJiYgIWJvcmRlckJveFJlY3Qo
KS5jb250YWlucyhtX292ZXJmbG93LT52aXN1YWxPdmVyZmxvd1JlY3QoKSk7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgxLDcgKzU4MSw3IEBAIFJvdW5kZWRS
ZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpiYWNrZ3IKICAgICByZXR1cm4gZ2V0QmFja2dyb3Vu
ZFJvdW5kZWRSZWN0KGJvcmRlclJlY3QsIGJveCwgYm94U2l6ZS53aWR0aCgpLCBib3hTaXplLmhl
aWdodCgpLCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7
CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyB2b2lkIGFwcGx5Qm94
U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSkKIHsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBib3hTaGFkb3cgPSBzdHls
ZS0+Ym94U2hhZG93KCk7CiAgICAgd2hpbGUgKGJveFNoYWRvdy0+c3R5bGUoKSAhPSBOb3JtYWwp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkocmV2aXNp
b24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBSZW5kZXJCdXR0b246OmFkZENo
aWxkKFJlbmRlck9iamVjdAogICAgICAgICAvLyBDcmVhdGUgYW4gYW5vbnltb3VzIGJsb2NrLgog
ICAgICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7CiAgICAgICAgIG1faW5uZXIgPSBjcmVhdGVB
bm9ueW1vdXNCbG9jayhzdHlsZSgpLmRpc3BsYXkoKSk7Ci0gICAgICAgIHNldHVwSW5uZXJTdHls
ZSgmbV9pbm5lci0+c3R5bGUoKSk7CisgICAgICAgIHNldHVwSW5uZXJTdHlsZSgmbV9pbm5lci0+
bXV0YWJsZVN0eWxlKCkpOwogICAgICAgICBSZW5kZXJGbGV4aWJsZUJveDo6YWRkQ2hpbGQobV9p
bm5lcik7CiAgICAgfQogICAgIApAQCAtOTcsOSArOTcsOSBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6
c3R5bGVXaWxsQ2hhbmdlKFN0eWxlCiAgICAgICAgIC8vIGl0IHJpZ2h0IGJlbG93LiBIZXJlIHdl
IGNoYW5nZSBpdCBiYWNrIHRvIDAgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBo
aW50CiAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVuY2UuIFNhbWUgZ29lcyBmb3Ig
dGhlIG90aGVyIHByb3BlcnRpZXMuCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgaGFjayB1
bm5lY2Vzc2FyeS4KLSAgICAgICAgbV9pbm5lci0+c3R5bGUoKS5zZXRGbGV4R3JvdyhuZXdTdHls
ZS5pbml0aWFsRmxleEdyb3coKSk7Ci0gICAgICAgIG1faW5uZXItPnN0eWxlKCkuc2V0TWFyZ2lu
VG9wKG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7Ci0gICAgICAgIG1faW5uZXItPnN0eWxlKCku
c2V0TWFyZ2luQm90dG9tKG5ld1N0eWxlLmluaXRpYWxNYXJnaW4oKSk7CisgICAgICAgIG1faW5u
ZXItPm11dGFibGVTdHlsZSgpLnNldEZsZXhHcm93KG5ld1N0eWxlLmluaXRpYWxGbGV4R3Jvdygp
KTsKKyAgICAgICAgbV9pbm5lci0+bXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luVG9wKG5ld1N0eWxl
LmluaXRpYWxNYXJnaW4oKSk7CisgICAgICAgIG1faW5uZXItPm11dGFibGVTdHlsZSgpLnNldE1h
cmdpbkJvdHRvbShuZXdTdHlsZS5pbml0aWFsTWFyZ2luKCkpOwogICAgIH0KICAgICBSZW5kZXJC
bG9jazo6c3R5bGVXaWxsQ2hhbmdlKGRpZmYsIG5ld1N0eWxlKTsKIH0KQEAgLTEwOSw3ICsxMDks
NyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVECiAgICAgUmVuZGVy
QmxvY2s6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKIAogICAgIGlmIChtX2lubmVy
KSAvLyBSZW5kZXJCbG9jayBoYW5kbGVkIHVwZGF0aW5nIHRoZSBhbm9ueW1vdXMgYmxvY2sncyBz
dHlsZS4KLSAgICAgICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5zdHlsZSgpKTsKKyAgICAg
ICAgc2V0dXBJbm5lclN0eWxlKCZtX2lubmVyLT5tdXRhYmxlU3R5bGUoKSk7CiB9CiAKIHZvaWQg
UmVuZGVyQnV0dG9uOjpzZXR1cElubmVyU3R5bGUoUmVuZGVyU3R5bGUqIGlubmVyU3R5bGUpIApA
QCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjpsYXlvdXQoKQogICAgIFJlbmRl
ckZsZXhpYmxlQm94OjpsYXlvdXQoKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJl
IGFkanVzdGluZyBzdHlsZXMgZHVyaW5nIGxheW91dC4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njc1
NDkzPi4KLSAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoc3R5bGUo
KSwgKnRoaXMpOworICAgIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJhZGl1cyht
dXRhYmxlU3R5bGUoKSwgKnRoaXMpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3Bw
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVw
cmVjYXRlZEZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBA
IHN0YXRpYyBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHRGb3JDaGlsZCgKIAogdm9pZCBSZW5kZXJE
ZXByZWNhdGVkRmxleGlibGVCb3g6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlm
ZiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRT
dHlsZSA9IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZzdHlsZSgpIDogbnVsbHB0cjsKKyAgICBh
dXRvKiBvbGRTdHlsZSA9IGhhc0luaXRpYWxpemVkU3R5bGUoKSA/ICZzdHlsZSgpIDogbnVsbHB0
cjsKICAgICBpZiAob2xkU3R5bGUgJiYgIW9sZFN0eWxlLT5saW5lQ2xhbXAoKS5pc05vbmUoKSAm
JiBuZXdTdHlsZS5saW5lQ2xhbXAoKS5pc05vbmUoKSkKICAgICAgICAgY2xlYXJMaW5lQ2xhbXAo
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsMTEgKzIwNSw2IEBAIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBSZW5kZXJFbGVtZW50OjoKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotZW51
bSBTdHlsZUNhY2hlU3RhdGUgewotICAgIENhY2hlZCwKLSAgICBVbmNhY2hlZAotfTsKLQogc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZW50Ojp1bmNhY2hlZEZpcnN0TGlu
ZVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoIXZpZXcoKS51c2Vz
Rmlyc3RMaW5lUnVsZXMoKSkKQEAgLTIyMSwxNCArMjE2LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gUmVuZGVyRWxlbWUKICAgICAgICAgaWYgKFJlbmRlckJsb2NrKiBmaXJzdExp
bmVCbG9jayA9IHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUuZmlyc3RMaW5lQmxvY2soKSkKICAg
ICAgICAgICAgIHJldHVybiBmaXJzdExpbmVCbG9jay0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShQ
c2V1ZG9TdHlsZVJlcXVlc3QoRklSU1RfTElORSksIHN0eWxlLCBmaXJzdExpbmVCbG9jayA9PSB0
aGlzID8gc3R5bGUgOiBudWxscHRyKTsKICAgICB9IGVsc2UgaWYgKCFyZW5kZXJlckZvckZpcnN0
TGluZVN0eWxlLmlzQW5vbnltb3VzKCkgJiYgcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5pc1Jl
bmRlcklubGluZSgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSA9IHJlbmRl
cmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CisgICAgICAg
IGF1dG8mIHBhcmVudFN0eWxlID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+
Zmlyc3RMaW5lU3R5bGUoKTsKICAgICAgICAgaWYgKCZwYXJlbnRTdHlsZSAhPSAmcmVuZGVyZXJG
b3JGaXJzdExpbmVTdHlsZS5wYXJlbnQoKS0+c3R5bGUoKSkKICAgICAgICAgICAgIHJldHVybiBy
ZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLmdldFVuY2FjaGVkUHNldWRvU3R5bGUoUHNldWRvU3R5
bGVSZXF1ZXN0KEZJUlNUX0xJTkVfSU5IRVJJVEVEKSwgJnBhcmVudFN0eWxlLCBzdHlsZSk7CiAg
ICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1SZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVu
dDo6Y2FjaGVkRmlyc3RMaW5lU3R5bGUoKSBjb25zdAorY29uc3QgUmVuZGVyU3R5bGUqIFJlbmRl
ckVsZW1lbnQ6OmNhY2hlZEZpcnN0TGluZVN0eWxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQodmll
dygpLnVzZXNGaXJzdExpbmVSdWxlcygpKTsKIApAQCAtMjM4LDEwICsyMzMsMTAgQEAgUmVuZGVy
U3R5bGUqIFJlbmRlckVsZW1lbnQ6OmNhY2hlZEZpcnN0TAogICAgICAgICBpZiAoUmVuZGVyQmxv
Y2sqIGZpcnN0TGluZUJsb2NrID0gcmVuZGVyZXJGb3JGaXJzdExpbmVTdHlsZS5maXJzdExpbmVC
bG9jaygpKQogICAgICAgICAgICAgcmV0dXJuIGZpcnN0TGluZUJsb2NrLT5nZXRDYWNoZWRQc2V1
ZG9TdHlsZShGSVJTVF9MSU5FLCAmc3R5bGUoKSk7CiAgICAgfSBlbHNlIGlmICghcmVuZGVyZXJG
b3JGaXJzdExpbmVTdHlsZS5pc0Fub255bW91cygpICYmIHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5
bGUuaXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUg
PSByZW5kZXJlckZvckZpcnN0TGluZVN0eWxlLnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwor
ICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUucGFy
ZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGlmICgmcGFyZW50U3R5bGUgIT0gJnJl
bmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUucGFyZW50KCktPnN0eWxlKCkpIHsKICAgICAgICAgICAg
IC8vIEEgZmlyc3QtbGluZSBzdHlsZSBpcyBpbiBlZmZlY3QuIENhY2hlIGEgZmlyc3QtbGluZSBz
dHlsZSBmb3Igb3Vyc2VsdmVzLgotICAgICAgICAgICAgcmVuZGVyZXJGb3JGaXJzdExpbmVTdHls
ZS5zdHlsZSgpLnNldEhhc1BzZXVkb1N0eWxlKEZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKKyAgICAg
ICAgICAgIHJlbmRlcmVyRm9yRmlyc3RMaW5lU3R5bGUubV9zdHlsZS5zZXRIYXNQc2V1ZG9TdHls
ZShGSVJTVF9MSU5FX0lOSEVSSVRFRCk7CiAgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXJGb3JG
aXJzdExpbmVTdHlsZS5nZXRDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MSU5FX0lOSEVSSVRFRCwg
JnBhcmVudFN0eWxlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0OSw3ICsyNDQsNyBAQCBSZW5k
ZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6Y2FjaGVkRmlyc3RMCiAgICAgcmV0dXJuICZzdHlsZSgp
OwogfQogCi1SZW5kZXJTdHlsZSYgUmVuZGVyRWxlbWVudDo6Zmlyc3RMaW5lU3R5bGUoKSBjb25z
dAorY29uc3QgUmVuZGVyU3R5bGUmIFJlbmRlckVsZW1lbnQ6OmZpcnN0TGluZVN0eWxlKCkgY29u
c3QKIHsKICAgICByZXR1cm4gdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygpID8gKmNhY2hlZEZp
cnN0TGluZVN0eWxlKCkgOiBzdHlsZSgpOwogfQpAQCAtODA2LDcgKzgwMSw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCByZW5kZXJlckhhc0JhY2tncm91bmQKIAogdm9pZCBSZW5kZXJFbGVtZW50Ojpz
dHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlJiBu
ZXdTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBoYXNJbml0aWFsaXplZFN0
eWxlKCkgPyAmc3R5bGUoKSA6IG51bGxwdHI7CisgICAgYXV0byogb2xkU3R5bGUgPSBoYXNJbml0
aWFsaXplZFN0eWxlKCkgPyAmc3R5bGUoKSA6IG51bGxwdHI7CiAgICAgaWYgKG9sZFN0eWxlKSB7
CiAgICAgICAgIC8vIElmIG91ciB6LWluZGV4IGNoYW5nZXMgdmFsdWUgb3Igb3VyIHZpc2liaWxp
dHkgY2hhbmdlcywKICAgICAgICAgLy8gd2UgbmVlZCB0byBkaXJ0eSBvdXIgc3RhY2tpbmcgY29u
dGV4dCdzIHotb3JkZXIgbGlzdC4KQEAgLTE1MzUsNyArMTUzMCwyMiBAQCB2b2lkIFJlbmRlckVs
ZW1lbnQ6OmFkZENvbnRyb2xTdGF0ZXNGb3JSCiAgICAgY29udHJvbFN0YXRlc1JlbmRlcmVyTWFw
KCkuYWRkKG8sIHN0YXRlcyk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpnZXRD
YWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8sIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSkgY29uc3QKK2NvbnN0IFJlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpnZXRDYWNoZWRQc2V1
ZG9TdHlsZShQc2V1ZG9JZCBwc2V1ZG8sIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkg
Y29uc3QKK3sKKyAgICBpZiAocHNldWRvIDwgRklSU1RfSU5URVJOQUxfUFNFVURPSUQgJiYgIXN0
eWxlKCkuaGFzUHNldWRvU3R5bGUocHNldWRvKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBSZW5kZXJTdHlsZSogY2FjaGVkU3R5bGUgPSBzdHlsZSgpLmdldENhY2hlZFBzZXVkb1N0
eWxlKHBzZXVkbyk7CisgICAgaWYgKGNhY2hlZFN0eWxlKQorICAgICAgICByZXR1cm4gY2FjaGVk
U3R5bGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdCA9IGdldFVu
Y2FjaGVkUHNldWRvU3R5bGUoUHNldWRvU3R5bGVSZXF1ZXN0KHBzZXVkbyksIHBhcmVudFN0eWxl
KTsKKyAgICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJTdHls
ZSY+KG1fc3R5bGUpLmFkZENhY2hlZFBzZXVkb1N0eWxlKFdURk1vdmUocmVzdWx0KSk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK1JlbmRlclN0eWxlKiBSZW5kZXJFbGVtZW50OjpnZXRNdXRh
YmxlQ2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQgcHNldWRvLCBjb25zdCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpCiB7CiAgICAgaWYgKHBzZXVkbyA8IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lE
ICYmICFzdHlsZSgpLmhhc1BzZXVkb1N0eWxlKHBzZXVkbykpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMTU0NiwxMSArMTU1NiwxMSBAQCBSZW5kZXJTdHlsZSogUmVuZGVyRWxlbWVudDo6
Z2V0Q2FjaGVkUHNlCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdCA9
IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoUHNldWRvU3R5bGVSZXF1ZXN0KHBzZXVkbyksIHBhcmVu
dFN0eWxlKTsKICAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1cm4gc3R5bGUoKS5hZGRDYWNo
ZWRQc2V1ZG9TdHlsZShXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICByZXR1cm4gbV9zdHlsZS5h
ZGRDYWNoZWRQc2V1ZG9TdHlsZShXVEZNb3ZlKHJlc3VsdCkpOwogICAgIHJldHVybiBudWxscHRy
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVsZW1lbnQ6OmdldFVu
Y2FjaGVkUHNldWRvU3R5bGUoY29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJl
cXVlc3QsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIG93blN0eWxlKSBj
b25zdAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZW50OjpnZXRVbmNh
Y2hlZFBzZXVkb1N0eWxlKGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYgcHNldWRvU3R5bGVSZXF1
ZXN0LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBv
d25TdHlsZSkgY29uc3QKIHsKICAgICBpZiAocHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkIDwg
RklSU1RfSU5URVJOQUxfUFNFVURPSUQgJiYgIW93blN0eWxlICYmICFzdHlsZSgpLmhhc1BzZXVk
b1N0eWxlKHBzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMjA2Niw3ICsyMDc2LDcgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjpwYWludE91dGxp
bmUoUGFpbnRJbgogICAgIGlmICghaGFzT3V0bGluZSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CisgICAgYXV0byYgc3R5bGVUb1Vz
ZSA9IHN0eWxlKCk7CiAgICAgZmxvYXQgb3V0bGluZVdpZHRoID0gZmxvb3JUb0RldmljZVBpeGVs
KHN0eWxlVG9Vc2Uub3V0bGluZVdpZHRoKCksIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSk7CiAgICAgZmxvYXQgb3V0bGluZU9mZnNldCA9IGZsb29yVG9EZXZpY2VQaXhlbChzdHlsZVRv
VXNlLm91dGxpbmVPZmZzZXQoKSwgZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw4ICs0MCwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0luaXRp
YWxpemVkU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2hhc0luaXRpYWxpemVkU3R5bGU7IH0KIAot
ICAgIFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVy
U3R5bGUmPihtX3N0eWxlKTsgfQotICAgIFJlbmRlclN0eWxlJiBmaXJzdExpbmVTdHlsZSgpIGNv
bnN0OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGU7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKKwor
ICAgIC8vIEZJWE1FOiBTdHlsZSBzaG91bGRuJ3QgYmUgbXV0YXRlZC4KKyAgICBSZW5kZXJTdHls
ZSYgbXV0YWJsZVN0eWxlKCkgeyByZXR1cm4gbV9zdHlsZTsgfQogCiAgICAgdm9pZCBpbml0aWFs
aXplU3R5bGUoKTsKIApAQCAtNTIsOCArNTUsOSBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGUgcHNl
dWRvIGVsZW1lbnQgc3R5bGUgY2FuIGJlIGNhY2hlZCBvciB1bmNhY2hlZC4gIFVzZSB0aGUgY2Fj
aGVkIG1ldGhvZCBpZiB0aGUgcHNldWRvIGVsZW1lbnQgZG9lc24ndCByZXNwZWN0CiAgICAgLy8g
YW55IHBzZXVkbyBjbGFzc2VzIChhbmQgdGhlcmVmb3JlIGhhcyBubyBjb25jZXB0IG9mIGNoYW5n
aW5nIHN0YXRlKS4KLSAgICBSZW5kZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRv
SWQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQc2V1
ZG9TdHlsZVJlcXVlc3QmLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyLCBSZW5k
ZXJTdHlsZSogb3duU3R5bGUgPSBudWxscHRyKSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHls
ZSogZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OworICAgIFJlbmRlclN0eWxlKiBnZXRNdXRhYmxlQ2Fj
aGVkUHNldWRvU3R5bGUoUHNldWRvSWQsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IG51bGxwdHIpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZ2V0VW5jYWNoZWRQ
c2V1ZG9TdHlsZShjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmLCBjb25zdCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSBudWxscHRyLCBjb25zdCBSZW5kZXJTdHlsZSogb3duU3R5bGUgPSBudWxs
cHRyKSBjb25zdDsKIAogICAgIC8vIFRoaXMgaXMgbnVsbCBmb3IgYW5vbnltb3VzIHJlbmRlcmVy
cy4KICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RWxlbWVu
dD4oUmVuZGVyT2JqZWN0Ojpub2RlKCkpOyB9CkBAIC0yOTgsNyArMzAyLDcgQEAgcHJpdmF0ZToK
ICNlbmRpZgogCiAgICAgU3R5bGVEaWZmZXJlbmNlIGFkanVzdFN0eWxlRGlmZmVyZW5jZShTdHls
ZURpZmZlcmVuY2UsIHVuc2lnbmVkIGNvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKSBjb25zdDsK
LSAgICBSZW5kZXJTdHlsZSogY2FjaGVkRmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKKyAgICBjb25z
dCBSZW5kZXJTdHlsZSogY2FjaGVkRmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKIAogICAgIHZvaWQg
bmV3SW1hZ2VBbmltYXRpb25GcmFtZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYpIGZpbmFsOwogCkBA
IC00NTAsMTQgKzQ1NCwxNCBAQCBpbmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6OmlzUmVuZGVySW5s
aW5lCiAgICAgcmV0dXJuIGlzPFJlbmRlckVsZW1lbnQ+KCp0aGlzKSAmJiBkb3duY2FzdDxSZW5k
ZXJFbGVtZW50PigqdGhpcykuaXNSZW5kZXJJbmxpbmUoKTsKIH0KIAotaW5saW5lIFJlbmRlclN0
eWxlJiBSZW5kZXJPYmplY3Q6OnN0eWxlKCkgY29uc3QKK2lubGluZSBjb25zdCBSZW5kZXJTdHls
ZSYgUmVuZGVyT2JqZWN0OjpzdHlsZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzVGV4dCgpKQogICAg
ICAgICByZXR1cm4gbV9wYXJlbnQtPnN0eWxlKCk7CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
ckVsZW1lbnQ+KCp0aGlzKS5zdHlsZSgpOwogfQogCi1pbmxpbmUgUmVuZGVyU3R5bGUmIFJlbmRl
ck9iamVjdDo6Zmlyc3RMaW5lU3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRlclN0eWxl
JiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QKIHsKICAgICBpZiAoaXNUZXh0
KCkpCiAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Zmlyc3RMaW5lU3R5bGUoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIyLDggKzUyMiw4IEBAIHZvaWQgUmVu
ZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgpCiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0
YXRlUHVzaGVyKHZpZXcoKSwgKnRoaXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc1RyYW5zZm9ybSgp
IHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkpOwogICAgIAogICAgIGNoaWxkQm94LnNldExvY2F0aW9uKExheW91dFBvaW50KGJvcmRlckxl
ZnQoKSwgYm9yZGVyVG9wKCkpICsgTGF5b3V0U2l6ZShwYWRkaW5nTGVmdCgpLCBwYWRkaW5nVG9w
KCkpKTsKLSAgICBjaGlsZEJveC5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWln
aHQoKSwgRml4ZWQpKTsKLSAgICBjaGlsZEJveC5zdHlsZSgpLnNldFdpZHRoKExlbmd0aChuZXdT
aXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgY2hpbGRCb3gubXV0YWJsZVN0eWxlKCkuc2V0SGVp
Z2h0KExlbmd0aChuZXdTaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIGNoaWxkQm94Lm11dGFi
bGVTdHlsZSgpLnNldFdpZHRoKExlbmd0aChuZXdTaXplLndpZHRoKCksIEZpeGVkKSk7CiAgICAg
Y2hpbGRCb3guc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICBjaGlsZEJveC5sYXlv
dXQoKTsKICAgICBjbGVhckNoaWxkTmVlZHNMYXlvdXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQCBSZW5kZXJGbG93VGhyZWFkOjpSZW5kZXJGbG93VGhyZWFk
KERvY3VtCiAgICAgc2V0Rmxvd1RocmVhZFN0YXRlKEluc2lkZU91dE9mRmxvd1RocmVhZCk7CiB9
CiAKLVJlbmRlclN0eWxlIFJlbmRlckZsb3dUaHJlYWQ6OmNyZWF0ZUZsb3dUaHJlYWRTdHlsZShS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCitSZW5kZXJTdHlsZSBSZW5kZXJGbG93VGhyZWFkOjpj
cmVhdGVGbG93VGhyZWFkU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewog
ICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgbmV3U3R5bGUu
aW5oZXJpdEZyb20ocGFyZW50U3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3dUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5oCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5
OSw3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsZWQgd2hlbiBhIGRlc2NlbmRhbnQgYm94J3MgbGF5
b3V0IGlzIGZpbmlzaGVkIGFuZCBpdCBoYXMgYmVlbiBwb3NpdGlvbmVkIHdpdGhpbiBpdHMgY29u
dGFpbmVyLgogICAgIHZpcnR1YWwgdm9pZCBmbG93VGhyZWFkRGVzY2VuZGFudEJveExhaWRPdXQo
UmVuZGVyQm94KikgeyB9CiAKLSAgICBzdGF0aWMgUmVuZGVyU3R5bGUgY3JlYXRlRmxvd1RocmVh
ZFN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgc3RhdGljIFJlbmRlclN0eWxl
IGNyZWF0ZUZsb3dUaHJlYWRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwog
CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE2LDggKzcxNiw4IEBA
IHZvaWQgUmVuZGVySW1hZ2U6OmxheW91dFNoYWRvd0NvbnRyb2xzKGMKIAogICAgIGlmIChzaGFk
b3dDb250cm9sc05lZWRDdXN0b21MYXlvdXRNZXRyaWNzKCkpIHsKICAgICAgICAgY29udHJvbHNS
ZW5kZXJlci0+c2V0TG9jYXRpb24oTGF5b3V0UG9pbnQoYm9yZGVyTGVmdCgpLCBib3JkZXJUb3Ao
KSkgKyBMYXlvdXRTaXplKHBhZGRpbmdMZWZ0KCksIHBhZGRpbmdUb3AoKSkpOwotICAgICAgICBj
b250cm9sc1JlbmRlcmVyLT5zdHlsZSgpLnNldEhlaWdodChMZW5ndGgobmV3U2l6ZS5oZWlnaHQo
KSwgRml4ZWQpKTsKLSAgICAgICAgY29udHJvbHNSZW5kZXJlci0+c3R5bGUoKS5zZXRXaWR0aChM
ZW5ndGgobmV3U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgICAgICBjb250cm9sc1JlbmRlcmVy
LT5tdXRhYmxlU3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKG5ld1NpemUuaGVpZ2h0KCksIEZpeGVk
KSk7CisgICAgICAgIGNvbnRyb2xzUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldFdpZHRoKExl
bmd0aChuZXdTaXplLndpZHRoKCksIEZpeGVkKSk7CiAgICAgfQogCiAgICAgY29udHJvbHNSZW5k
ZXJlci0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3
LDcgKzE4Nyw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShTdHlsZUQKICAg
ICAvLyBlLmcuLCA8Zm9udD5mb28gPGg0PmdvbzwvaDQ+IG1vbzwvZm9udD4uICBUaGUgPGZvbnQ+
IGlubGluZXMgYmVmb3JlCiAgICAgLy8gYW5kIGFmdGVyIHRoZSBibG9jayBzaGFyZSB0aGUgc2Ft
ZSBzdHlsZSwgYnV0IHRoZSBibG9jayBkb2Vzbid0CiAgICAgLy8gbmVlZCB0byBwYXNzIGl0cyBz
dHlsZSBvbiB0byBhbnlvbmUgZWxzZS4KLSAgICBSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHls
ZSgpOworICAgIGF1dG8mIG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICBSZW5kZXJJbmxpbmUqIGNv
bnRpbnVhdGlvbiA9IGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsKICAgICBpZiAoY29udGlu
dWF0aW9uKSB7CiAgICAgICAgIGZvciAoUmVuZGVySW5saW5lKiBjdXJyQ29udCA9IGNvbnRpbnVh
dGlvbjsgY3VyckNvbnQ7IGN1cnJDb250ID0gY3VyckNvbnQtPmlubGluZUVsZW1lbnRDb250aW51
YXRpb24oKSkgewpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVB
bHdheXNDcmVhdGVMaW4KICAgICBpZiAoYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+c3R5
bGUoKTsKKyAgICBhdXRvKiBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+c3R5bGUoKTsKICAgICBS
ZW5kZXJJbmxpbmUqIHBhcmVudFJlbmRlcklubGluZSA9IGlzPFJlbmRlcklubGluZT4oKnBhcmVu
dCgpKSA/IGRvd25jYXN0PFJlbmRlcklubGluZT4ocGFyZW50KCkpIDogbnVsbHB0cjsKICAgICBi
b29sIGNoZWNrRm9udHMgPSBkb2N1bWVudCgpLmluTm9RdWlya3NNb2RlKCk7CiAgICAgUmVuZGVy
Rmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKQEAg
LTIzNSw3ICsyMzUsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGlu
CiAgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMgJiYgY2hlY2tGb250cyAmJiB2aWV3KCku
dXNlc0ZpcnN0TGluZVJ1bGVzKCkpIHsKICAgICAgICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmly
c3QgbGluZSBzdHlsZSBhcyB3ZWxsLgogICAgICAgICBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+
Zmlyc3RMaW5lU3R5bGUoKTsKLSAgICAgICAgUmVuZGVyU3R5bGUmIGNoaWxkU3R5bGUgPSBmaXJz
dExpbmVTdHlsZSgpOworICAgICAgICBhdXRvJiBjaGlsZFN0eWxlID0gZmlyc3RMaW5lU3R5bGUo
KTsKICAgICAgICAgYWx3YXlzQ3JlYXRlTGluZUJveGVzID0gIXBhcmVudFN0eWxlLT5mb250Q2Fz
Y2FkZSgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAo
Y2hpbGRTdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCkpCiAgICAgICAgICAgICB8fCBj
aGlsZFN0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICAgICAgfHwgcGFy
ZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0eWxlLmxpbmVIZWlnaHQoKTsKQEAgLTE2
MDEsNyArMTYwMSw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmUoUGFpbnRJbmYK
ICAgICBpZiAoIWhhc091dGxpbmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5
bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGF1dG8mIHN0eWxlVG9Vc2UgPSBzdHlsZSgp
OwogICAgIC8vIE9ubHkgcGFpbnQgdGhlIGZvY3VzIHJpbmcgYnkgaGFuZCBpZiB0aGUgdGhlbWUg
aXNuJ3QgYWJsZSB0byBkcmF3IGl0LgogICAgIGlmIChzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlz
QXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKHN0eWxlVG9Vc2UpKSB7CiAgICAg
ICAgIFZlY3RvcjxMYXlvdXRSZWN0PiBmb2N1c1JpbmdSZWN0czsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEx
MSw3ICs0MTExLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aChHcmFwaGljcwog
ICAgICAgICByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCA9IHRydWU7CiAgICAgfQogCi0gICAg
UmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXIoKS5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxl
ID0gcmVuZGVyZXIoKS5zdHlsZSgpOwogICAgIEFTU0VSVChzdHlsZS5jbGlwUGF0aCgpKTsKICAg
ICBpZiAoaXM8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKnN0eWxlLmNsaXBQYXRoKCkpIHx8IChp
czxCb3hDbGlwUGF0aE9wZXJhdGlvbj4oKnN0eWxlLmNsaXBQYXRoKCkpICYmIGlzPFJlbmRlckJv
eD4ocmVuZGVyZXIoKSkpKSB7CiAgICAgICAgIFdpbmRSdWxlIHdpbmRSdWxlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMjAwMDY3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNTQsNyArMzU0LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludFNjcm9s
bGJhcihQYWludAogICAgIG1fdkJhci0+cGFpbnQocGFpbnRJbmZvLmNvbnRleHQoKSwgc25hcHBl
ZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKIH0KIAotc3RhdGljIExheW91dFNpemUgaXRlbU9m
ZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4sIFJlbmRlclN0eWxlKiBpdGVtU3R5bGUs
IEZvbnRDYXNjYWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0IGl0ZW1Cb3VkaW5nQm94KQorc3RhdGlj
IExheW91dFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZXh0UnVuIHRleHRSdW4sIGNvbnN0
IFJlbmRlclN0eWxlKiBpdGVtU3R5bGUsIEZvbnRDYXNjYWRlIGl0ZW1Gb250LCBMYXlvdXRSZWN0
IGl0ZW1Cb3VkaW5nQm94KQogewogICAgIEVUZXh0QWxpZ24gYWN0dWFsQWxpZ25tZW50ID0gaXRl
bVN0eWxlLT50ZXh0QWxpZ24oKTsKICAgICAvLyBGSVhNRTogRmlyZWZveCBkb2Vzbid0IHJlc3Bl
Y3QgSlVTVElGWS4gU2hvdWxkIHdlPwpAQCAtMzc5LDcgKzM3OSw3IEBAIHZvaWQgUmVuZGVyTGlz
dEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQq
PiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudCgpLmxpc3RJdGVtcygpOwogICAgIEhUTUxFbGVt
ZW50KiBsaXN0SXRlbUVsZW1lbnQgPSBsaXN0SXRlbXNbbGlzdEluZGV4XTsKIAotICAgIFJlbmRl
clN0eWxlJiBpdGVtU3R5bGUgPSAqbGlzdEl0ZW1FbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7Cisg
ICAgYXV0byYgaXRlbVN0eWxlID0gKmxpc3RJdGVtRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwog
CiAgICAgaWYgKGl0ZW1TdHlsZS52aXNpYmlsaXR5KCkgPT0gSElEREVOKQogICAgICAgICByZXR1
cm47CkBAIC00MjMsNyArNDIzLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNr
Z3JvdW5kKAogewogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBz
ZWxlY3RFbGVtZW50KCkubGlzdEl0ZW1zKCk7CiAgICAgSFRNTEVsZW1lbnQqIGxpc3RJdGVtRWxl
bWVudCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdOwotICAgIFJlbmRlclN0eWxlJiBpdGVtU3R5bGUg
PSAqbGlzdEl0ZW1FbGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CisgICAgYXV0byYgaXRlbVN0eWxl
ID0gKmxpc3RJdGVtRWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpOwogCiAgICAgQ29sb3IgYmFja0Nv
bG9yOwogICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmxpc3RJdGVtRWxlbWVudCkgJiYg
ZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpsaXN0SXRlbUVsZW1lbnQpLnNlbGVjdGVkKCkp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5j
cHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwOCw4ICsxNzA4LDggQEAgdm9pZCBS
ZW5kZXJMaXN0TWFya2VyOjp1cGRhdGVNYXJnaW5zKCkKICAgICAgICAgCiAgICAgfQogCi0gICAg
c3R5bGUoKS5zZXRNYXJnaW5TdGFydChMZW5ndGgobWFyZ2luU3RhcnQsIEZpeGVkKSk7Ci0gICAg
c3R5bGUoKS5zZXRNYXJnaW5FbmQoTGVuZ3RoKG1hcmdpbkVuZCwgRml4ZWQpKTsKKyAgICBtdXRh
YmxlU3R5bGUoKS5zZXRNYXJnaW5TdGFydChMZW5ndGgobWFyZ2luU3RhcnQsIEZpeGVkKSk7Cisg
ICAgbXV0YWJsZVN0eWxlKCkuc2V0TWFyZ2luRW5kKExlbmd0aChtYXJnaW5FbmQsIEZpeGVkKSk7
CiB9CiAKIExheW91dFVuaXQgUmVuZGVyTGlzdE1hcmtlcjo6bGluZUhlaWdodChib29sIGZpcnN0
TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQ
b3NpdGlvbk1vZGUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWFycXVlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1hcnF1ZWUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBp
bnQgUmVuZGVyTWFycXVlZTo6Y29tcHV0ZVBvc2l0aW9uKEVNYXJxCiB7CiAgICAgUmVuZGVyQm94
KiBib3ggPSBtX2xheWVyLT5yZW5kZXJCb3goKTsKICAgICBBU1NFUlQoYm94KTsKLSAgICBSZW5k
ZXJTdHlsZSYgYm94U3R5bGUgPSBib3gtPnN0eWxlKCk7CisgICAgYXV0byYgYm94U3R5bGUgPSBi
b3gtPnN0eWxlKCk7CiAgICAgaWYgKGlzSG9yaXpvbnRhbCgpKSB7CiAgICAgICAgIGJvb2wgbHRy
ID0gYm94U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogICAgICAgICBMYXlvdXRVbml0
IGNsaWVudFdpZHRoID0gYm94LT5jbGllbnRXaWR0aCgpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZv
aWQgUmVuZGVyTWFycXVlZTo6dXBkYXRlTWFycXVlZVBvc2l0aW8KIAogdm9pZCBSZW5kZXJNYXJx
dWVlOjp1cGRhdGVNYXJxdWVlU3R5bGUoKQogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG1f
bGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IG1fbGF5ZXItPnJl
bmRlcmVyKCkubXV0YWJsZVN0eWxlKCk7CiAgICAgCiAgICAgaWYgKG1fZGlyZWN0aW9uICE9IHN0
eWxlLm1hcnF1ZWVEaXJlY3Rpb24oKSB8fCAobV90b3RhbExvb3BzICE9IHN0eWxlLm1hcnF1ZWVM
b29wQ291bnQoKSAmJiBtX2N1cnJlbnRMb29wID49IG1fdG90YWxMb29wcykpCiAgICAgICAgIG1f
Y3VycmVudExvb3AgPSAwOyAvLyBXaGVuIGRpcmVjdGlvbiBjaGFuZ2VzIG9yIG91ciBsb29wQ291
bnQgaXMgYSBzbWFsbGVyIG51bWJlciB0aGFuIG91ciBjdXJyZW50IGxvb3AsIHJlc2V0IG91ciBs
b29wLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3Bw
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBSZW5kZXJN
ZW51TGlzdDo6Y3JlYXRlSW5uZXJCbG9jaygpCiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkanVz
dElubmVyU3R5bGUoKQogewotICAgIFJlbmRlclN0eWxlJiBpbm5lclN0eWxlID0gbV9pbm5lckJs
b2NrLT5zdHlsZSgpOworICAgIGF1dG8mIGlubmVyU3R5bGUgPSBtX2lubmVyQmxvY2stPm11dGFi
bGVTdHlsZSgpOwogICAgIGlubmVyU3R5bGUuc2V0RmxleEdyb3coMSk7CiAgICAgaW5uZXJTdHls
ZS5zZXRGbGV4U2hyaW5rKDEpOwogICAgIC8vIG1pbi13aWR0aDogMDsgaXMgbmVlZGVkIGZvciBj
b3JyZWN0IHNocmlua2luZy4KQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIFJlbmRlck1lbnVMaXN0
Ojp1cGRhdGVPcHRpb25zV2lkdGgoCiAgICAgICAgIGlmICh0aGVtZSgpLnBvcHVwT3B0aW9uU3Vw
cG9ydHNUZXh0SW5kZW50KCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBpbiB0aGUgb3B0aW9uJ3Mg
dGV4dCBpbmRlbnQuICBXZSBjYW4ndCBjYWxjdWxhdGUgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIG5v
dy4KICAgICAgICAgICAgIGZsb2F0IG9wdGlvbldpZHRoID0gMDsKLSAgICAgICAgICAgIGlmIChS
ZW5kZXJTdHlsZSogb3B0aW9uU3R5bGUgPSBlbGVtZW50LT5jb21wdXRlZFN0eWxlKCkpCisgICAg
ICAgICAgICBpZiAoYXV0byogb3B0aW9uU3R5bGUgPSBlbGVtZW50LT5jb21wdXRlZFN0eWxlKCkp
CiAgICAgICAgICAgICAgICAgb3B0aW9uV2lkdGggKz0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKG9w
dGlvblN0eWxlLT50ZXh0SW5kZW50KCksIDApOwogICAgICAgICAgICAgaWYgKCF0ZXh0LmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUo
KS5mb250Q2FzY2FkZSgpOwpAQCAtNTE5LDcgKzUxOSw3IEBAIFBvcHVwTWVudVN0eWxlIFJlbmRl
ck1lbnVMaXN0OjppdGVtU3R5bGUKICAgICBib29sIGl0ZW1IYXNDdXN0b21CYWNrZ3JvdW5kQ29s
b3I7CiAgICAgZ2V0SXRlbUJhY2tncm91bmRDb2xvcihsaXN0SW5kZXgsIGl0ZW1CYWNrZ3JvdW5k
Q29sb3IsIGl0ZW1IYXNDdXN0b21CYWNrZ3JvdW5kQ29sb3IpOwogCi0gICAgUmVuZGVyU3R5bGUm
IHN0eWxlID0gKmVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9ICpl
bGVtZW50LT5jb21wdXRlZFN0eWxlKCk7CiAgICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxl
LnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgaXRlbUJhY2tncm91bmRD
b2xvciwgc3R5bGUuZm9udENhc2NhZGUoKSwgc3R5bGUudmlzaWJpbGl0eSgpID09IFZJU0lCTEUs
CiAgICAgICAgIHN0eWxlLmRpc3BsYXkoKSA9PSBOT05FLCB0cnVlLCBzdHlsZS50ZXh0SW5kZW50
KCksIHN0eWxlLmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlLnVuaWNvZGVCaWRpKCkpLAog
ICAgICAgICBpdGVtSGFzQ3VzdG9tQmFja2dyb3VuZENvbG9yID8gUG9wdXBNZW51U3R5bGU6OkN1
c3RvbUJhY2tncm91bmRDb2xvciA6IFBvcHVwTWVudVN0eWxlOjpEZWZhdWx0QmFja2dyb3VuZENv
bG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZs
b3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHN0YXRpYyBib29sIGlzVmFsaWRDb2x1bW5TcGFu
bmVyKFJlbmRlck0KICAgICBBU1NFUlQoZGVzY2VuZGFudC0+aXNEZXNjZW5kYW50T2YoZmxvd1Ro
cmVhZCkpOwogCiAgICAgLy8gRmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIHJlbmRlcmVyIGl0c2Vs
ZiBoYXMgdGhlIHJpZ2h0IHByb3BlcnRpZXMgZm9yIGJlY29taW5nIGEgc3Bhbm5lci4KLSAgICBS
ZW5kZXJTdHlsZSYgc3R5bGUgPSBkZXNjZW5kYW50LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxl
ID0gZGVzY2VuZGFudC0+c3R5bGUoKTsKICAgICBpZiAoc3R5bGUuY29sdW1uU3BhbigpICE9IENv
bHVtblNwYW5BbGwgfHwgIWlzPFJlbmRlckJveD4oKmRlc2NlbmRhbnQpIHx8IGRlc2NlbmRhbnQt
PmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAJKHJldmlzaW9uIDIwMDA2
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciogUmVu
ZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI6OmNyZWF0ZUFub255bW91cyhSZW5kZXJN
dWx0aUNvbHVtbkZsb3dUaHJlYWQqIGZsb3dUaHJlYWQsIFJlbmRlckJveCogc3Bhbm5lciwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXIqIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyOjpjcmVhdGVBbm9ueW1vdXMo
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiBmbG93VGhyZWFkLCBSZW5kZXJCb3gqIHNwYW5u
ZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBhdXRvIG5ld1N0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoKnBhcmVudFN0
eWxlLCBCTE9DSyk7CiAgICAgbmV3U3R5bGUuc2V0Q2xlYXIoQ0JPVEgpOyAvLyBXZSBkb24ndCB3
YW50IGZsb2F0cyBpbiB0aGUgcm93IHByZWNlZGluZyB0aGUgc3Bhbm5lciB0byBjb250aW51ZSBv
biB0aGUgb3RoZXIgc2lkZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCShyZXZp
c2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5TcGFubmVyUGxhY2Vob2xkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBj
bGFzcyBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ7CiAKIGNsYXNzIFJlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyIGZpbmFsIDogcHVibGljIFJlbmRlckJveCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBjcmVhdGVB
bm9ueW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKiwgUmVuZGVyQm94KiBzcGFubmVy
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHN0YXRpYyBSZW5kZXJNdWx0aUNvbHVt
blNwYW5uZXJQbGFjZWhvbGRlciogY3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZCosIFJlbmRlckJveCogc3Bhbm5lciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKTsKIAogICAgIFJlbmRlckJveCogc3Bhbm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Bhbm5l
cjsgfQogICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogZmxvd1RocmVhZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmxvd1RocmVhZDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsNyArMzQ3LDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudDo6Y2hlY2tSZWdpbwogICAgIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4o
Km1fZmxvd1RocmVhZCkuY2hlY2tSZWdpb25zV2l0aFN0eWxpbmcoKTsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y29tcHV0ZVN0eWxl
SW5SZWdpb24oUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHls
ZSkgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQ6OmNvbXB1dGVTdHlsZUluUmVnaW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFyZW5kZXJl
ci5pc0Fub255bW91cygpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCI7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gY29tcHV0
ZVN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYsIFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSkg
Y29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBjb21wdXRlU3R5bGVJblJl
Z2lvbihSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKSBjb25z
dDsKICAgICB2b2lkIGNvbXB1dGVDaGlsZHJlblN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYp
OwogICAgIHZvaWQgc2V0T2JqZWN0U3R5bGVJblJlZ2lvbihSZW5kZXJPYmplY3QqLCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+LCBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9u
IDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODIyLDcgKzE4MjIsNyBAQCBpbnQgUmVuZGVyT2JqZWN0Ojppbm5l
ckxpbmVIZWlnaHQoKSBjb25zCiAgICAgcmV0dXJuIHN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0
KCk7CiB9CiAKLXN0YXRpYyBDb2xvciBkZWNvcmF0aW9uQ29sb3IoUmVuZGVyU3R5bGUqIHN0eWxl
KQorc3RhdGljIENvbG9yIGRlY29yYXRpb25Db2xvcihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUp
CiB7CiAgICAgQ29sb3IgcmVzdWx0OwogICAgIC8vIENoZWNrIGZvciB0ZXh0IGRlY29yYXRpb24g
Y29sb3IgZmlyc3QuCkBAIC0xODQ0LDcgKzE4NDQsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6Z2V0
VGV4dERlY29yYXRpb25Db2xvCiAgICAgVGV4dERlY29yYXRpb25TdHlsZSYgdW5kZXJsaW5lU3R5
bGUsIFRleHREZWNvcmF0aW9uU3R5bGUmIG92ZXJsaW5lU3R5bGUsIFRleHREZWNvcmF0aW9uU3R5
bGUmIGxpbmV0aHJvdWdoU3R5bGUsIGJvb2wgZmlyc3RsaW5lU3R5bGUpIGNvbnN0CiB7CiAgICAg
Y29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gdGhpczsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGVUb1VzZSA9IG51bGxwdHI7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBu
dWxscHRyOwogICAgIFRleHREZWNvcmF0aW9uIGN1cnJEZWNzID0gVGV4dERlY29yYXRpb25Ob25l
OwogICAgIENvbG9yIHJlc3VsdENvbG9yOwogICAgIGRvIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjk3LDggKzY5
Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtYXhQ
cmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICBSZW5kZXJT
dHlsZSYgc3R5bGUoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUoKSBj
b25zdDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUoKSBjb25zdDsKKyAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgZmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKIAogICAgIC8vIEFub255bW91cyBi
bG9ja3MgdGhhdCBhcmUgcGFydCBvZiBvZiBhIGNvbnRpbnVhdGlvbiBjaGFpbiB3aWxsIHJldHVy
biB0aGVpciBpbmxpbmUgY29udGludWF0aW9uJ3Mgb3V0bGluZSBzdHlsZSBpbnN0ZWFkLgogICAg
IC8vIFRoaXMgaXMgdHlwaWNhbGx5IG9ubHkgcmVsZXZhbnQgd2hlbiByZXBhaW50aW5nLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiAyMDAw
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MTEsNyArODExLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y29tcHV0ZVByZWZl
cnJlZExvZ2ljYQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhcHRpb25zLnNpemUo
KTsgaSsrKQogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBtX2NhcHRpb25zW2ldLT5taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGgoKSk7CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7Cisg
ICAgYXV0byYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHByb2JhYmx5IGJlIGNoZWNraW5nIGZvciBpc1NwZWNpZmllZCBzaW5jZSB5b3Ugc2hvdWxkIGJl
IGFibGUgdG8gdXNlIHBlcmNlbnRhZ2Ugb3IgY2FsYyB2YWx1ZXMgZm9yIG1pbi13aWR0aC4KICAg
ICBpZiAoc3R5bGVUb1VzZS5sb2dpY2FsTWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGVUb1Vz
ZS5sb2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpID4gMCkgewogICAgICAgICBtX21heFByZWZlcnJl
ZExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBhZGp1
c3RDb250ZW50Qm94TG9naWNhbFdpZHRoRm9yQm94U2l6aW5nKHN0eWxlVG9Vc2UubG9naWNhbE1p
bldpZHRoKCkudmFsdWUoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTk4LDcgKzExOTgsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRSb3dHcm91cEJv
CiAKIH0KIAotc3RhdGljIEJveFNpZGUgcGh5c2ljYWxCb3JkZXJGb3JEaXJlY3Rpb24oUmVuZGVy
U3R5bGUqIHN0eWxlRm9yQ2VsbEZsb3csIENvbGxhcHNlZEJvcmRlclNpZGUgc2lkZSkKK3N0YXRp
YyBCb3hTaWRlIHBoeXNpY2FsQm9yZGVyRm9yRGlyZWN0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZUZvckNlbGxGbG93LCBDb2xsYXBzZWRCb3JkZXJTaWRlIHNpZGUpCiB7CiAKICAgICBzd2l0
Y2ggKHNpZGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJv
b2wgaXNUZXh0RnJhZ21lbnQoKSBjb25zdDsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSgpIGNv
bnN0OwotICAgIFJlbmRlclN0eWxlJiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0OwotICAgIFJlbmRl
clN0eWxlKiBnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlID0gbnVsbHB0cikgY29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkg
Y29uc3Q7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7Cisg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyKSBjb25zdDsKIAogICAgIENvbG9y
IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogICAgIENvbG9yIHNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0OwpAQCAtMjUxLDE3ICsyNTEsMTcgQEAgaW5saW5lIFVDaGFy
IFJlbmRlclRleHQ6OmNoYXJhY3RlckF0KHVucwogICAgIHJldHVybiB1bmNoZWNrZWRDaGFyYWN0
ZXJBdChpKTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxlJiBSZW5kZXJUZXh0OjpzdHlsZSgpIGNv
bnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUmIFJlbmRlclRleHQ6OnN0eWxlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gcGFyZW50KCktPnN0eWxlKCk7CiB9CiAKLWlubGluZSBSZW5kZXJTdHls
ZSYgUmVuZGVyVGV4dDo6Zmlyc3RMaW5lU3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFJlbmRl
clN0eWxlJiBSZW5kZXJUZXh0OjpmaXJzdExpbmVTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogfQogCi1pbmxpbmUgUmVuZGVyU3R5bGUqIFJl
bmRlclRleHQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkb0lkLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CitpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIFJlbmRl
clRleHQ6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBzZXVkb0lkLCBjb25zdCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBhcmVudCgpLT5nZXRD
YWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG9JZCwgcGFyZW50U3R5bGUpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiAy
MDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw4IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6
OnN0eWxlRGlkQ2hhbmdlKFMKICAgICBpZiAoaW5uZXJUZXh0UmVuZGVyZXIpIHsKICAgICAgICAg
Ly8gV2UgbWF5IGhhdmUgc2V0IHRoZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0
eWxlIGluIGxheW91dCgpLgogICAgICAgICAvLyBSZXNldCB0aGVtIG5vdyB0byBhdm9pZCBnZXR0
aW5nIGEgc3B1cmlvdXMgbGF5b3V0IGhpbnQuCi0gICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5z
dHlsZSgpLnNldEhlaWdodChMZW5ndGgoKSk7Ci0gICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5z
dHlsZSgpLnNldFdpZHRoKExlbmd0aCgpKTsKKyAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPm11
dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgoKSk7CisgICAgICAgIGlubmVyVGV4dFJlbmRl
cmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7CiAgICAgICAgIGlubmVyVGV4
dFJlbmRlcmVyLT5zZXRTdHlsZSh0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCkuY3JlYXRlSW5uZXJU
ZXh0U3R5bGUoc3R5bGUoKSkpOwogICAgIH0KICAgICB0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50KCku
dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlz
aW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgUmVuZGVyT2Jq
ZWN0KiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZQogICAgIFJlbmRlck9iamVjdCogcGxhY2Vo
b2xkZXJSZW5kZXJlciA9IFJlbmRlclRleHRDb250cm9sOjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRD
aGlsZChyZWxheW91dENoaWxkcmVuKTsKICAgICBpZiAoaXM8UmVuZGVyQm94PihwbGFjZWhvbGRl
clJlbmRlcmVyKSkgewogICAgICAgICBhdXRvJiBwbGFjZWhvbGRlckJveCA9IGRvd25jYXN0PFJl
bmRlckJveD4oKnBsYWNlaG9sZGVyUmVuZGVyZXIpOwotICAgICAgICBwbGFjZWhvbGRlckJveC5z
dHlsZSgpLnNldExvZ2ljYWxXaWR0aChMZW5ndGgoY29udGVudExvZ2ljYWxXaWR0aCgpIC0gcGxh
Y2Vob2xkZXJCb3guYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpLCBGaXhlZCkpOworICAg
ICAgICBwbGFjZWhvbGRlckJveC5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsV2lkdGgoTGVuZ3Ro
KGNvbnRlbnRMb2dpY2FsV2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LmJvcmRlckFuZFBhZGRpbmdM
b2dpY2FsV2lkdGgoKSwgRml4ZWQpKTsKICAgICAgICAgcGxhY2Vob2xkZXJCb3gubGF5b3V0SWZO
ZWVkZWQoKTsKICAgICAgICAgcGxhY2Vob2xkZXJCb3guc2V0WChib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpKTsKICAgICAgICAgcGxhY2Vob2xkZXJCb3guc2V0WShib3JkZXJUb3AoKSArIHBh
ZGRpbmdUb3AoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMSArMTA4LDExIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpsYXlvdXQKIAogICAgIC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBiZXR3
ZWVuIGxheW91dHMsIHdlIG5lZWQgdG8gcmVzZXQgYW55IGNvbmRpdGlvbmFsbHkgb3ZlcnJpZGVu
IGhlaWdodC4KICAgICBpZiAoaW5uZXJUZXh0UmVuZGVyZXIgJiYgIWlubmVyVGV4dFJlbmRlcmVy
LT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSkgewotICAgICAgICBpbm5lclRleHRS
ZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgICAg
IGlubmVyVGV4dFJlbmRlcmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0
aChBdXRvKSk7CiAgICAgICAgIHNldE5lZWRzTGF5b3V0T25BbmNlc3RvcnMoaW5uZXJUZXh0UmVu
ZGVyZXIsIHRoaXMpOwogICAgIH0KICAgICBpZiAoaW5uZXJCbG9ja1JlbmRlcmVyICYmICFpbm5l
ckJsb2NrUmVuZGVyZXItPnN0eWxlKCkubG9naWNhbEhlaWdodCgpLmlzQXV0bygpKSB7Ci0gICAg
ICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChB
dXRvKSk7CisgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9n
aWNhbEhlaWdodChMZW5ndGgoQXV0bykpOwogICAgICAgICBzZXROZWVkc0xheW91dE9uQW5jZXN0
b3JzKGlubmVyQmxvY2tSZW5kZXJlciwgdGhpcyk7CiAgICAgfQogCkBAIC0xMjgsMTAgKzEyOCwx
MCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAgICAgICAgIGlm
IChkZXNpcmVkTG9naWNhbEhlaWdodCAhPSBpbm5lclRleHRSZW5kZXJlci0+bG9naWNhbEhlaWdo
dCgpKQogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKIAotICAgICAg
ICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChkZXNp
cmVkTG9naWNhbEhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPm11
dGFibGVTdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGRlc2lyZWRMb2dpY2FsSGVpZ2h0
LCBGaXhlZCkpOwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0TmVlZHNMYXlvdXQoTWFy
a09ubHlUaGlzKTsKICAgICAgICAgaWYgKGlubmVyQmxvY2tSZW5kZXJlcikgewotICAgICAgICAg
ICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLnNldExvZ2ljYWxIZWlnaHQoTGVuZ3RoKGRl
c2lyZWRMb2dpY2FsSGVpZ2h0LCBGaXhlZCkpOworICAgICAgICAgICAgaW5uZXJCbG9ja1JlbmRl
cmVyLT5tdXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChkZXNpcmVkTG9naWNh
bEhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c2V0TmVl
ZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE0MCwxMyArMTQw
LDEzIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQKICAgICAgICAg
Y29udGFpbmVyUmVuZGVyZXItPmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgIExheW91dFVuaXQg
Y29udGFpbmVyTG9naWNhbEhlaWdodCA9IGNvbnRhaW5lclJlbmRlcmVyLT5sb2dpY2FsSGVpZ2h0
KCk7CiAgICAgICAgIGlmIChjb250YWluZXJMb2dpY2FsSGVpZ2h0ID4gbG9naWNhbEhlaWdodExp
bWl0KSB7Ci0gICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS5zZXRMb2dpY2Fs
SGVpZ2h0KExlbmd0aChsb2dpY2FsSGVpZ2h0TGltaXQsIEZpeGVkKSk7CisgICAgICAgICAgICBj
b250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgo
bG9naWNhbEhlaWdodExpbWl0LCBGaXhlZCkpOwogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQo
TWFya09ubHlUaGlzKTsKICAgICAgICAgfSBlbHNlIGlmIChjb250YWluZXJSZW5kZXJlci0+bG9n
aWNhbEhlaWdodCgpIDwgY29udGVudExvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICAgICAgY29u
dGFpbmVyUmVuZGVyZXItPnN0eWxlKCkuc2V0TG9naWNhbEhlaWdodChMZW5ndGgoY29udGVudExv
Z2ljYWxIZWlnaHQoKSwgRml4ZWQpKTsKKyAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5t
dXRhYmxlU3R5bGUoKS5zZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChjb250ZW50TG9naWNhbEhlaWdo
dCgpLCBGaXhlZCkpOwogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS5z
ZXRMb2dpY2FsSGVpZ2h0KExlbmd0aChjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBGaXhlZCkpOwor
ICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldExvZ2ljYWxI
ZWlnaHQoTGVuZ3RoKGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQsIEZpeGVkKSk7CiAgICAgfQogCiAg
ICAgLy8gSWYgd2UgbmVlZCBhbm90aGVyIGxheW91dCBwYXNzLCB3ZSBoYXZlIGNoYW5nZWQgb25l
IG9mIGNoaWxkcmVuJ3MgaGVpZ2h0IHNvIHdlIG5lZWQgdG8gcmVsYXlvdXQgdGhlbS4KQEAgLTE3
NCw4ICsxNzQsOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAg
ICAgICAgIExheW91dFNpemUgaW5uZXJUZXh0U2l6ZTsKICAgICAgICAgaWYgKGlubmVyVGV4dFJl
bmRlcmVyKQogICAgICAgICAgICAgaW5uZXJUZXh0U2l6ZSA9IGlubmVyVGV4dFJlbmRlcmVyLT5z
aXplKCk7Ci0gICAgICAgIHBsYWNlaG9sZGVyQm94LT5zdHlsZSgpLnNldFdpZHRoKExlbmd0aChp
bm5lclRleHRTaXplLndpZHRoKCkgLSBwbGFjZWhvbGRlckJveC0+aG9yaXpvbnRhbEJvcmRlckFu
ZFBhZGRpbmdFeHRlbnQoKSwgRml4ZWQpKTsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3gtPnN0eWxl
KCkuc2V0SGVpZ2h0KExlbmd0aChpbm5lclRleHRTaXplLmhlaWdodCgpIC0gcGxhY2Vob2xkZXJC
b3gtPnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCBGaXhlZCkpOworICAgICAgICBw
bGFjZWhvbGRlckJveC0+bXV0YWJsZVN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKGlubmVyVGV4dFNp
emUud2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4
dGVudCgpLCBGaXhlZCkpOworICAgICAgICBwbGFjZWhvbGRlckJveC0+bXV0YWJsZVN0eWxlKCku
c2V0SGVpZ2h0KExlbmd0aChpbm5lclRleHRTaXplLmhlaWdodCgpIC0gcGxhY2Vob2xkZXJCb3gt
PnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCBGaXhlZCkpOwogICAgICAgICBib29s
IG5lZWRlZExheW91dCA9IHBsYWNlaG9sZGVyQm94LT5uZWVkc0xheW91dCgpOwogICAgICAgICBi
b29sIHBsYWNlaG9sZGVyQm94SGFkTGF5b3V0ID0gcGxhY2Vob2xkZXJCb3gtPmV2ZXJIYWRMYXlv
dXQoKTsKICAgICAgICAgcGxhY2Vob2xkZXJCb3gtPmxheW91dElmTmVlZGVkKCk7CkBAIC0yMDIs
NyArMjAyLDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dAogI2lm
IFBMQVRGT1JNKElPUykKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBiZSBhZGp1c3Rpbmcg
c3R5bGVzIGR1cmluZyBsYXlvdXQuIDxyZGFyOi8vcHJvYmxlbS83Njc1NDkzPgogICAgIGlmIChp
bnB1dEVsZW1lbnQoKS5pc1NlYXJjaEZpZWxkKCkpCi0gICAgICAgIFJlbmRlclRoZW1lSU9TOjph
ZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhzdHlsZSgpLCAqdGhpcyk7CisgICAgICAgIFJlbmRlclRo
ZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhtdXRhYmxlU3R5bGUoKSwgKnRoaXMpOwog
I2VuZGlmCiB9CiAKQEAgLTIzNiwxNCArMjM2LDE0IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpzdHlsZUQKICAgICAvLyBXZSBtYXkgaGF2ZSBzZXQgdGhlIHdpZHRoIGFuZCB0
aGUgaGVpZ2h0IGluIHRoZSBvbGQgc3R5bGUgaW4gbGF5b3V0KCkuCiAgICAgLy8gUmVzZXQgdGhl
bSBub3cgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBoaW50LgogICAgIEhUTUxF
bGVtZW50KiBpbm5lckJsb2NrID0gaW5uZXJCbG9ja0VsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVy
T2JqZWN0KiBpbm5lckJsb2NrUmVuZGVyZXIgPSBpbm5lckJsb2NrID8gaW5uZXJCbG9jay0+cmVu
ZGVyZXIoKSA6IDApIHsKLSAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLnNldEhl
aWdodChMZW5ndGgoKSk7Ci0gICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS5zZXRX
aWR0aChMZW5ndGgoKSk7CisgICAgaWYgKGF1dG8qIGlubmVyQmxvY2tSZW5kZXJlciA9IGlubmVy
QmxvY2sgPyBpbm5lckJsb2NrLT5yZW5kZXJlcigpIDogbnVsbHB0cikgeworICAgICAgICBpbm5l
ckJsb2NrUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldEhlaWdodChMZW5ndGgoKSk7CisgICAg
ICAgIGlubmVyQmxvY2tSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0V2lkdGgoTGVuZ3RoKCkp
OwogICAgIH0KICAgICBIVE1MRWxlbWVudCogY29udGFpbmVyID0gY29udGFpbmVyRWxlbWVudCgp
OwotICAgIGlmIChSZW5kZXJPYmplY3QqIGNvbnRhaW5lclJlbmRlcmVyID0gY29udGFpbmVyID8g
Y29udGFpbmVyLT5yZW5kZXJlcigpIDogMCkgewotICAgICAgICBjb250YWluZXJSZW5kZXJlci0+
c3R5bGUoKS5zZXRIZWlnaHQoTGVuZ3RoKCkpOwotICAgICAgICBjb250YWluZXJSZW5kZXJlci0+
c3R5bGUoKS5zZXRXaWR0aChMZW5ndGgoKSk7CisgICAgaWYgKGF1dG8qIGNvbnRhaW5lclJlbmRl
cmVyID0gY29udGFpbmVyID8gY29udGFpbmVyLT5yZW5kZXJlcigpIDogbnVsbHB0cikgeworICAg
ICAgICBjb250YWluZXJSZW5kZXJlci0+bXV0YWJsZVN0eWxlKCkuc2V0SGVpZ2h0KExlbmd0aCgp
KTsKKyAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPm11dGFibGVTdHlsZSgpLnNldFdpZHRoKExl
bmd0aCgpKTsKICAgICB9CiAgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0KSB7
CiAgICAgICAgIGlmIChhdXRvKiBpbm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQo
KS0+cmVuZGVyZXIoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
RnJhZ21lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0RnJhZ21lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyAr
NjgsNyBAQCB2b2lkIFJlbmRlclRleHRGcmFnbWVudDo6c3R5bGVEaWRDaGFuZ2UoCiAgICAgUmVu
ZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogCiAgICAgaWYgKFJlbmRl
ckJsb2NrKiBibG9jayA9IGJsb2NrRm9yQWNjb21wYW55aW5nRmlyc3RMZXR0ZXIoKSkgewotICAg
ICAgICBibG9jay0+c3R5bGUoKS5yZW1vdmVDYWNoZWRQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIp
OworICAgICAgICBibG9jay0+bXV0YWJsZVN0eWxlKCkucmVtb3ZlQ2FjaGVkUHNldWRvU3R5bGUo
RklSU1RfTEVUVEVSKTsKICAgICAgICAgYmxvY2stPnVwZGF0ZUZpcnN0TGV0dGVyKCk7CiAgICAg
fQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3Bw
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE1LDcgKzIwMTUsNyBAQCBib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludE1lZGlhVG9nZ2xlQ2xvCiB9CiAjZW5kaWYKIAotc3RhdGljIEZsb2F0
Um91bmRlZFJlY3Q6OlJhZGlpIGJvcmRlclJhZGlpRnJvbVN0eWxlKFJlbmRlclN0eWxlJiBzdHls
ZSkKK3N0YXRpYyBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3Q6
OlJhZGlpKAogICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRlclRvcExlZnRSYWRpdXMoKS53aWR0
aCgpLmludFZhbHVlKCksIHN0eWxlLmJvcmRlclRvcExlZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRW
YWx1ZSgpKSwKQEAgLTIwMzYsNyArMjAzNiw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFTbGlkZXJUcmEKIAogICAgIGZsb2F0IG1lZGlhRHVyYXRpb24gPSBtZWRpYUVsZW1lbnQt
PmR1cmF0aW9uKCk7CiAgICAgZmxvYXQgdG90YWxUcmFja1dpZHRoID0gci53aWR0aCgpOwotICAg
IFJlbmRlclN0eWxlJiBzdHlsZSA9IG8uc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IG8uc3R5
bGUoKTsKICAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdlcyA9IG1lZGlhRWxlbWVudC0+
YnVmZmVyZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCB0aW1lUmFu
Z2VzLT5sZW5ndGgoKTsgKytpbmRleCkgewogICAgICAgICBmbG9hdCBzdGFydCA9IHRpbWVSYW5n
ZXMtPnN0YXJ0KGluZGV4LCBJR05PUkVfRVhDRVBUSU9OKTsKQEAgLTIwNTksNyArMjA1OSw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmEKIAogYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgUmVuZGVy
U3R5bGUmIHN0eWxlID0gby5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gby5zdHlsZSgpOwog
ICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3Qo
ciwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUudmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5Q29sb3IpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMDgwLDcg
KzIwODAsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhVm9sdW1lU2xpCiAKICAg
ICBpbnQgcmVjdEhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CiAgICAgZmxvYXQgdHJhY2tIZWlnaHQg
PSByZWN0SGVpZ2h0ICogdm9sdW1lOwotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlck9i
amVjdC5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyT2JqZWN0LnN0eWxlKCk7CiAg
ICAgSW50UmVjdCB2b2x1bWVSZWN0KHJlY3QpOwogICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0
SGVpZ2h0IC0gdHJhY2tIZWlnaHQpOwogICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJh
Y2tIZWlnaHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MubW0JKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzM2LDcgKzMzNiw3IEBAIEZsb2F0UmVj
dCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmQKIHsKICAgICAvLyBUbyBmaXggaW5uZXIg
Ym9yZGVyIGJsZWVkaW5nIGlzc3VlcyA8cmRhcjovL3Byb2JsZW0vOTgxMjUwNz4sIHdlIGNsaXAg
dG8gdGhlIG91dGVyIGJvcmRlciBhbmQgYXNzZXJ0IHRoYXQKICAgICAvLyB0aGUgYm9yZGVyIGlz
IG9wYXF1ZSBvciB0cmFuc3BhcmVudCwgdW5sZXNzIHdlJ3JlIGNoZWNrZWQgYmVjYXVzZSBjaGVj
a2VkIHJhZGlvL2NoZWNrYm94ZXMgc2hvdyBubyBibGVlZGluZy4KLSAgICBSZW5kZXJTdHlsZSYg
c3R5bGUgPSBib3guc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGJveC5zdHlsZSgpOwogICAg
IFJvdW5kZWRSZWN0IGJvcmRlciA9IGlzQ2hlY2tlZChib3gpID8gc3R5bGUuZ2V0Um91bmRlZElu
bmVyQm9yZGVyRm9yKHJlY3QpIDogc3R5bGUuZ2V0Um91bmRlZEJvcmRlckZvcihyZWN0KTsKIAog
ICAgIGlmIChib3JkZXIuaXNSb3VuZGVkKCkpCkBAIC00OTksNyArNDk5LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRpbwogCiBib29sIFJlbmRlclRoZW1lSU9TOjpw
YWludFRleHRGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIFJlbmRl
clN0eWxlJiBzdHlsZSA9IGJveC5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gYm94LnN0eWxl
KCk7CiAgICAgRmxvYXRQb2ludCBwb2ludChyZWN0LngoKSArIHN0eWxlLmJvcmRlckxlZnRXaWR0
aCgpLCByZWN0LnkoKSArIHN0eWxlLmJvcmRlclRvcFdpZHRoKCkpOwogCiAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBhaW50SW5mby5jb250ZXh0KCkpOwpAQCAtNjMw
LDcgKzYzMCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdE1lbnVMaXN0QnV0dG8KIAog
Ym9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlckJveCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGJveC5zdHlsZSgpOworICAg
IGF1dG8mIHN0eWxlID0gYm94LnN0eWxlKCk7CiAgICAgZmxvYXQgYm9yZGVyVG9wV2lkdGggPSBz
dHlsZS5ib3JkZXJUb3BXaWR0aCgpOwogICAgIEZsb2F0UmVjdCBjbGlwKHJlY3QueCgpICsgc3R5
bGUuYm9yZGVyTGVmdFdpZHRoKCksIHJlY3QueSgpICsgc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSwg
cmVjdC53aWR0aCgpIC0gc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCkgLSBzdHlsZS5ib3JkZXJSaWdo
dFdpZHRoKCksIHJlY3QuaGVpZ2h0KCkgLSBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpIC0gc3R5bGUu
Ym9yZGVyQm90dG9tV2lkdGgoKSk7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50
SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCk7CkBAIC03MzQsNyArNzM0LDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdAogYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgSW50UmVjdCB0cmFj
a0NsaXAgPSByZWN0OwotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGJveC5zdHlsZSgpOworICAg
IGF1dG8mIHN0eWxlID0gYm94LnN0eWxlKCk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHRy
dWU7CiAgICAgc3dpdGNoIChzdHlsZS5hcHBlYXJhbmNlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCB2b2lk
IHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsCiAgICAgaWYgKHBhaW50SW5mby5w
aGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVu
ZGVyU3R5bGUmIHN0eWxlID0gZmxvdy5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gZmxvdy5z
dHlsZSgpOwogICAgIGlmIChzdHlsZS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0xNDAsNyArMTQwLDcgQEAgYm9vbCBoaXRUZXN0Rmxvdyhjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmIAogICAgIGlmICghbGF5b3V0LnJ1bkNvdW50KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKKyAgICBh
dXRvJiBzdHlsZSA9IGZsb3cuc3R5bGUoKTsKICAgICBpZiAoc3R5bGUudmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUgfHwgc3R5bGUucG9pbnRlckV2ZW50cygpID09IFBFX05PTkUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9T
aXppbmcuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dEF1dG9TaXppbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIFRleHRB
dXRvU2l6aW5nS2V5OjpUZXh0QXV0b1NpemluZ0tleShEZWwKIHsKIH0KIAotVGV4dEF1dG9TaXpp
bmdLZXk6OlRleHRBdXRvU2l6aW5nS2V5KFJlbmRlclN0eWxlKiBzdHlsZSkKK1RleHRBdXRvU2l6
aW5nS2V5OjpUZXh0QXV0b1NpemluZ0tleShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiAgICAg
OiBtX3N0eWxlKHN0eWxlID8gUmVuZGVyU3R5bGU6OmNsb25lUHRyKCpzdHlsZSkgOiBudWxscHRy
KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvU2l6aW5nLmgJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b1Np
emluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMiArNDMsMTIgQEAgcHVibGljOgogICAgIFRl
eHRBdXRvU2l6aW5nS2V5KCkgPSBkZWZhdWx0OwogICAgIGVudW0gRGVsZXRlZFRhZyB7IERlbGV0
ZWQgfTsKICAgICBleHBsaWNpdCBUZXh0QXV0b1NpemluZ0tleShEZWxldGVkVGFnKTsKLSAgICBl
eHBsaWNpdCBUZXh0QXV0b1NpemluZ0tleShSZW5kZXJTdHlsZSopOworICAgIGV4cGxpY2l0IFRl
eHRBdXRvU2l6aW5nS2V5KGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgVGV4dEF1dG9TaXppbmdL
ZXkoVGV4dEF1dG9TaXppbmdLZXkmJikgPSBkZWZhdWx0OwogCiAgICAgVGV4dEF1dG9TaXppbmdL
ZXkmIG9wZXJhdG9yPShUZXh0QXV0b1NpemluZ0tleSYmKSA9IGRlZmF1bHQ7CiAKLSAgICBSZW5k
ZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisgICAgY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQog
ICAgIGlubGluZSBib29sIGlzRGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZWxldGVkOyB9
CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRT
dHlsZS5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0UGFpbnRTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYsNyBAQCBUZXh0
UGFpbnRTdHlsZSBjb21wdXRlVGV4dFNlbGVjdGlvblBhaW50CiAgICAgICAgIHNlbGVjdGlvblBh
aW50U3R5bGUuZW1waGFzaXNNYXJrQ29sb3IgPSBlbXBoYXNpc01hcmtGb3JlZ3JvdW5kOwogICAg
IH0KIAotICAgIGlmIChSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSByZW5kZXJlci5nZXRDYWNo
ZWRQc2V1ZG9TdHlsZShTRUxFQ1RJT04pKSB7CisgICAgaWYgKGF1dG8qIHBzZXVkb1N0eWxlID0g
cmVuZGVyZXIuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9OKSkgewogICAgICAgICBjb25z
dCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBwYWludEluZm8uZm9yY2VUZXh0Q29sb3IoKSA/IG51bGxw
dHIgOiBwc2V1ZG9TdHlsZS0+dGV4dFNoYWRvdygpOwogICAgICAgICBpZiAoc2hhZG93ICE9IHNl
bGVjdGlvblNoYWRvdykgewogICAgICAgICAgICAgaWYgKCFwYWludFNlbGVjdGVkVGV4dE9ubHkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRl
eHQuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUv
QnJlYWtpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIsNyBAQCBwcml2
YXRlOgogICAgIC8vIEZpcmVmb3ggYW5kIE9wZXJhIHdpbGwgYWxsb3cgYSB0YWJsZSBjZWxsIHRv
IGdyb3cgdG8gZml0IGFuIGltYWdlIGluc2lkZSBpdCB1bmRlcgogICAgIC8vIHZlcnkgc3BlY2lm
aWMgY2lyY3Vtc3RhbmNlcyAoaW4gb3JkZXIgdG8gbWF0Y2ggY29tbW9uIFdpbklFIHJlbmRlcmlu
Z3MpLgogICAgIC8vIE5vdCBzdXBwb3J0aW5nIHRoZSBxdWlyayBoYXMgY2F1c2VkIHVzIHRvIG1p
cy1yZW5kZXIgc29tZSByZWFsIHNpdGVzLiAoU2VlIEJ1Z3ppbGxhIDEwNTE3LikKLSAgICBSZW5k
ZXJTdHlsZSYgbV9ibG9ja1N0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX2Jsb2NrU3R5
bGU7CiAKICAgICBMaW5lSW5mbyYgbV9saW5lSW5mbzsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCShyZXZpc2lv
biAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTAgKzMwMSwxMCBAQCB2b2lkIFJlbmRl
ck1hdGhNTFJvb3Q6OmxheW91dCgpCiAgICAgICAgICAgICAgICAgYmFzZVRvcE1hcmdpbiAtPSBp
bmRleFRvcE1hcmdpbjsKICAgICAgICAgICAgICAgICBpbmRleFRvcE1hcmdpbiA9IDA7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpbmRleC0+c3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3Ro
KGluZGV4VG9wTWFyZ2luLCBGaXhlZCkpOworICAgICAgICAgICAgaW5kZXgtPm11dGFibGVTdHls
ZSgpLnNldE1hcmdpblRvcChMZW5ndGgoaW5kZXhUb3BNYXJnaW4sIEZpeGVkKSk7CiAgICAgICAg
IH0KLSAgICAgICAgcmFkaWNhbC0+c3R5bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKHJhZGljYWxU
b3BNYXJnaW4sIEZpeGVkKSk7Ci0gICAgICAgIGJhc2UtPnN0eWxlKCkuc2V0TWFyZ2luVG9wKExl
bmd0aChiYXNlVG9wTWFyZ2luLCBGaXhlZCkpOworICAgICAgICByYWRpY2FsLT5tdXRhYmxlU3R5
bGUoKS5zZXRNYXJnaW5Ub3AoTGVuZ3RoKHJhZGljYWxUb3BNYXJnaW4sIEZpeGVkKSk7CisgICAg
ICAgIGJhc2UtPm11dGFibGVTdHlsZSgpLnNldE1hcmdpblRvcChMZW5ndGgoYmFzZVRvcE1hcmdp
biwgRml4ZWQpKTsKICAgICB9CiAKICAgICBSZW5kZXJNYXRoTUxCbG9jazo6bGF5b3V0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2
aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MDYsNyArMTYwNiw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldENvbHVtblJ1bGVXaWR0aCh1bnNpZ25lZCBzaG9ydCB3KSB7IFNFVF9ORVNURURfVkFS
KHJhcmVOb25Jbmhlcml0ZWREYXRhLCBtX211bHRpQ29sLCBtX3J1bGUubV93aWR0aCwgdyk7IH0K
ICAgICB2b2lkIHJlc2V0Q29sdW1uUnVsZSgpIHsgU0VUX05FU1RFRF9WQVIocmFyZU5vbkluaGVy
aXRlZERhdGEsIG1fbXVsdGlDb2wsIG1fcnVsZSwgQm9yZGVyVmFsdWUoKSk7IH0KICAgICB2b2lk
IHNldENvbHVtblNwYW4oQ29sdW1uU3BhbiBjb2x1bW5TcGFuKSB7IFNFVF9ORVNURURfVkFSKHJh
cmVOb25Jbmhlcml0ZWREYXRhLCBtX211bHRpQ29sLCBtX2NvbHVtblNwYW4sIGNvbHVtblNwYW4p
OyB9Ci0gICAgdm9pZCBpbmhlcml0Q29sdW1uUHJvcGVydGllc0Zyb20oUmVuZGVyU3R5bGUqIHBh
cmVudCkgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9tdWx0aUNvbCA9IHBhcmVu
dC0+cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2w7IH0KKyAgICB2b2lkIGluaGVyaXRD
b2x1bW5Qcm9wZXJ0aWVzRnJvbShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50KSB7IHJhcmVOb25J
bmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX211bHRpQ29sID0gcGFyZW50LT5yYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV9tdWx0aUNvbDsgfQogICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMmIG9wcykgeyBTRVRfTkVTVEVEX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0
YSwgbV90cmFuc2Zvcm0sIG1fb3BlcmF0aW9ucywgb3BzKTsgfQogICAgIHZvaWQgc2V0VHJhbnNm
b3JtT3JpZ2luWChMZW5ndGggbGVuZ3RoKSB7IFNFVF9ORVNURURfVkFSKHJhcmVOb25Jbmhlcml0
ZWREYXRhLCBtX3RyYW5zZm9ybSwgbV94LCBXVEZNb3ZlKGxlbmd0aCkpOyB9CiAgICAgdm9pZCBz
ZXRUcmFuc2Zvcm1PcmlnaW5ZKExlbmd0aCBsZW5ndGgpIHsgU0VUX05FU1RFRF9WQVIocmFyZU5v
bkluaGVyaXRlZERhdGEsIG1fdHJhbnNmb3JtLCBtX3ksIFdURk1vdmUobGVuZ3RoKSk7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIGZs
b2F0IFNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2UKICAgICByZXR1cm4gMDsKIH0K
IAotRmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21l
bnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGlu
dCBlbmRQb3NpdGlvbiwgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorRmxvYXRSZWN0IFNWR0lu
bGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZy
YWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbik7CiAgICAgQVNTRVJUKHN0
eWxlKTsKQEAgLTE0Miw3ICsxNDIsNyBAQCBMYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6Omxv
Y2FsU2VsZWN0CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCiAgICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7CiAKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJl
cigpLnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlcigpLnN0eWxlKCk7CiAKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zvcm07CiAgICAgRmxvYXRSZWN0IHNlbGVj
dGlvblJlY3Q7CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWlu
dFNlbGVjdGlvbkJhYwogICAgIGlmICghdGV4dFNob3VsZEJlUGFpbnRlZChyZW5kZXJlcigpKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcGFyZW50UmVuZGVy
ZXIuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CiAK
ICAgICBpbnQgc3RhcnRQb3NpdGlvbjsKICAgICBpbnQgZW5kUG9zaXRpb247CkBAIC0yNTYsMTQg
KzI1NiwxNCBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgCiAgICAg
aWYgKCF0ZXh0U2hvdWxkQmVQYWludGVkKHJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBwYXJlbnRSZW5kZXJlci5zdHlsZSgpOworICAgIGF1
dG8mIHN0eWxlID0gcGFyZW50UmVuZGVyZXIuc3R5bGUoKTsKIAogICAgIGNvbnN0IFNWR1JlbmRl
clN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CiAKICAgICBib29sIGhhc0ZpbGwg
PSBzdmdTdHlsZS5oYXNGaWxsKCk7CiAgICAgYm9vbCBoYXNWaXNpYmxlU3Ryb2tlID0gc3ZnU3R5
bGUuaGFzVmlzaWJsZVN0cm9rZSgpOwogCi0gICAgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxl
ID0gJnN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSA9ICZzdHls
ZTsKICAgICBpZiAoaGFzU2VsZWN0aW9uKSB7CiAgICAgICAgIHNlbGVjdGlvblN0eWxlID0gcGFy
ZW50UmVuZGVyZXIuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9OKTsKICAgICAgICAgaWYg
KHNlbGVjdGlvblN0eWxlKSB7CkBAIC0zMzQsNyArMzM0LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjpwYWludChQYWludEluZm8mIAogICAgIEFTU0VSVCghbV9wYWludGluZ1Jlc291cmNlKTsK
IH0KIAotYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjphY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShHcmFw
aGljc0NvbnRleHQqJiBjb250ZXh0LCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCYgcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBzdHlsZSkKK2Jvb2wgU1ZHSW5saW5lVGV4
dEJveDo6YWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwg
ZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVyLCBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogICAg
IEFTU0VSVChzdHlsZSk7CkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94
OjpyZWxlYXNlUGFpbnRpbmdSZQogICAgIG1fcGFpbnRpbmdSZXNvdXJjZSA9IG51bGxwdHI7CiB9
CiAKLWJvb2wgU1ZHSW5saW5lVGV4dEJveDo6cHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQ
YWludGluZyhHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUpCitib29sIFNWR0lubGluZVRleHRCb3g6OnByZXBhcmVHcmFwaGlj
c0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgZmxvYXQg
c2NhbGluZ0ZhY3RvciwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHJldHVybiBh
Y3F1aXJlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCBzY2FsaW5nRmFjdG9yLCBwYXJlbnQoKS0+
cmVuZGVyZXIoKSwgc3R5bGUpOwogfQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgU1ZHSW5saW5l
VGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ28KICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShj
b250ZXh0LCAvKiBwYXRoICovbnVsbHB0cik7CiB9CiAKLVRleHRSdW4gU1ZHSW5saW5lVGV4dEJv
eDo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFNWR1RleHRGcmFn
bWVudCYgZnJhZ21lbnQpIGNvbnN0CitUZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVj
dFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50KSBjb25zdAogewogICAgIEFTU0VSVChzdHlsZSk7CiAKQEAgLTUwNiw3ICs1MDYs
NyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAgICAgQVNTRVJU
KCFtX3BhaW50aW5nUmVzb3VyY2UpOwogICAgIEFTU0VSVChtX3BhaW50aW5nUmVzb3VyY2VNb2Rl
ICE9IEFwcGx5VG9EZWZhdWx0TW9kZSk7CiAKLSAgICBSZW5kZXJTdHlsZSYgZGVjb3JhdGlvblN0
eWxlID0gZGVjb3JhdGlvblJlbmRlcmVyLnN0eWxlKCk7CisgICAgYXV0byYgZGVjb3JhdGlvblN0
eWxlID0gZGVjb3JhdGlvblJlbmRlcmVyLnN0eWxlKCk7CiAKICAgICBmbG9hdCBzY2FsaW5nRmFj
dG9yID0gMTsKICAgICBGb250Q2FzY2FkZSBzY2FsZWRGb250OwpAQCAtNTQwLDcgKzU0MCw3IEBA
IHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2kKICAgICAgICAgcmVsZWFz
ZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dFB0ciwgJnBhdGgpOwogfQogCi12b2lkIFNWR0lubGlu
ZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKQordm9pZCBT
VkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3Qg
U1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3Np
dGlvbikKIHsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gcmVuZGVyZXIoKS5zY2FsaW5nRmFj
dG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwpAQCAtNTg1LDcgKzU4NSw3IEBAIHZv
aWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWQKICAgICB9IHdoaWxlIChzaGFk
b3cpOwogfQogCi12b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0
eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBib29sIGhhc1NlbGVjdGlvbiwg
Ym9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkpCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50
VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50LCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkp
CiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQoc2VsZWN0aW9uU3R5bGUpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJ
KHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwyMyArNjQsMjMgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0U3RhcnRzTmV3VGV4dENodW5rKGJvb2wgbmV3VGV4dENodW5rKSB7IG1fc3Rh
cnRzTmV3VGV4dENodW5rID0gbmV3VGV4dENodW5rOyB9CiAKICAgICBpbnQgb2Zmc2V0Rm9yUG9z
aXRpb25JbkZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGZsb2F0IHBvc2l0aW9uLCBi
b29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9u
UmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgZnJhZ21lbnRT
dGFydFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiwgUmVuZGVyU3R5bGUqKSBjb25z
dDsKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdU
ZXh0RnJhZ21lbnQmLCBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRFbmRQ
b3NpdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBib29s
IGlzU1ZHSW5saW5lVGV4dEJveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNvbnN0IFNWR1RleHRG
cmFnbWVudCYpIGNvbnN0OworICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5k
ZXJTdHlsZSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0OwogCi0gICAgYm9vbCBhY3F1
aXJlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0NvbnRleHQqJiwgZmxvYXQgc2NhbGluZ0ZhY3Rv
ciwgUmVuZGVyQm94TW9kZWxPYmplY3QmLCBSZW5kZXJTdHlsZSopOworICAgIGJvb2wgYWNxdWly
ZVBhaW50aW5nUmVzb3VyY2UoR3JhcGhpY3NDb250ZXh0KiYsIGZsb2F0IHNjYWxpbmdGYWN0b3Is
IFJlbmRlckJveE1vZGVsT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHJl
bGVhc2VQYWludGluZ1Jlc291cmNlKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBQYXRoKik7CiAK
LSAgICBib29sIHByZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3ND
b250ZXh0KiYsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlclN0eWxlKik7CisgICAgYm9vbCBw
cmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComLCBm
bG9hdCBzY2FsaW5nRmFjdG9yLCBjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcmVzdG9y
ZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComKTsKIAog
ICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYsIFRleHREZWNvcmF0aW9u
LCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKTsKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbldpdGhT
dHlsZShHcmFwaGljc0NvbnRleHQmLCBUZXh0RGVjb3JhdGlvbiwgY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiwgUmVuZGVyQm94TW9kZWxPYmplY3QmIGRlY29yYXRpb25SZW5kZXJlcik7Ci0gICAgdm9p
ZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmLCBSZW5kZXJTdHlsZSosIFRl
eHRSdW4mLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVu
ZFBvc2l0aW9uKTsKLSAgICB2b2lkIHBhaW50VGV4dChHcmFwaGljc0NvbnRleHQmLCBSZW5kZXJT
dHlsZSosIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50
JiwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KTsKKyAgICB2
b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlclN0
eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBzdGFydFBvc2l0aW9u
LCBpbnQgZW5kUG9zaXRpb24pOworICAgIHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlLCBj
b25zdCBTVkdUZXh0RnJhZ21lbnQmLCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNlbGVj
dGVkVGV4dE9ubHkpOwogCiAgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1BhdGhEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1BhdGhEYXRhLmNwcAko
cmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdQYXRo
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIHZvaWQgdXBk
YXRlUGF0aEZyb21DaXJjbGVFbGVtZW50KAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0g
ZWxlbWVudC0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47
Ci0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byYg
c3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKICAgICBmbG9hdCByID0gbGVuZ3RoQ29udGV4dC52
YWx1ZUZvckxlbmd0aChzdHlsZS5zdmdTdHlsZSgpLnIoKSk7CiAgICAgaWYgKHIgPiAwKSB7CiAg
ICAgICAgIGZsb2F0IGN4ID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdHlsZS5zdmdT
dHlsZSgpLmN4KCksIExlbmd0aE1vZGVXaWR0aCk7CkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyB2
b2lkIHVwZGF0ZVBhdGhGcm9tRWxsaXBzZUVsZW1lbnQKICAgICBSZW5kZXJFbGVtZW50KiByZW5k
ZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
cmV0dXJuOwotICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAg
IGF1dG8mIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBs
ZW5ndGhDb250ZXh0KGVsZW1lbnQpOwogICAgIGZsb2F0IHJ4ID0gbGVuZ3RoQ29udGV4dC52YWx1
ZUZvckxlbmd0aChzdHlsZS5zdmdTdHlsZSgpLnJ4KCksIExlbmd0aE1vZGVXaWR0aCk7CiAgICAg
aWYgKHJ4IDw9IDApCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlUGF0aEZy
b21SZWN0RWxlbWVudChTVgogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgIGF1dG8mIHN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250
ZXh0KGVsZW1lbnQpOwogICAgIGZsb2F0IHdpZHRoID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxl
bmd0aChzdHlsZS53aWR0aCgpLCBMZW5ndGhNb2RlV2lkdGgpOwogICAgIGlmICh3aWR0aCA8PSAw
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
cmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3
ICs5MCw3IEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGUKICAgICAg
ICAgbV9yZW5kZXJpbmdGbGFncyB8PSBSZXN0b3JlR3JhcGhpY3NDb250ZXh0OwogICAgIH0KIAot
ICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byYg
c3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZSgpOwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUm
IHN2Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3
ICs5Myw3IEBAIFRyZWVSZXNvbHZlcjo6UGFyZW50OjpQYXJlbnQoRG9jdW1lbnQmIGQKIHsKIH0K
IAotVHJlZVJlc29sdmVyOjpQYXJlbnQ6OlBhcmVudChFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJT
dHlsZSYgc3R5bGUsIENoYW5nZSBjaGFuZ2UpCitUcmVlUmVzb2x2ZXI6OlBhcmVudDo6UGFyZW50
KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgQ2hhbmdlIGNoYW5n
ZSkKICAgICA6IGVsZW1lbnQoJmVsZW1lbnQpCiAgICAgLCBzdHlsZShzdHlsZSkKICAgICAsIGNo
YW5nZShjaGFuZ2UpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBUcmVlUmVzb2x2ZXI6OnBvcFNj
b3BlKCkKICAgICByZXR1cm4gbV9zY29wZVN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBUcmVlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVt
ZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYgaW5oZXJpdGVkU3R5bGUpCitzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IFRyZWVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmIGVs
ZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBpbmhlcml0ZWRTdHlsZSkKIHsKICAgICBpZiAoIW1f
ZG9jdW1lbnQuaGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgJiYgIWVsZW1lbnQucmVuZGVyZXIoKSkg
ewogICAgICAgICBtX2RvY3VtZW50LnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKTsK
QEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgRVZpc2liaWxpdHkgZWxlbWVudEltcGxpY2l0Vmlz
aWJpCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIFZJU0lCTEU7CiAKLSAgICBS
ZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9
IHJlbmRlcmVyLT5zdHlsZSgpOwogCiAgICAgTGVuZ3RoIHdpZHRoKHN0eWxlLndpZHRoKCkpOwog
ICAgIExlbmd0aCBoZWlnaHQoc3R5bGUuaGVpZ2h0KCkpOwpAQCAtMjU0LDcgKzI1NCw3IEBAIHN0
YXRpYyBFVmlzaWJpbGl0eSBlbGVtZW50SW1wbGljaXRWaXNpYmkKIAogY2xhc3MgQ2hlY2tGb3JW
aXNpYmlsaXR5Q2hhbmdlT25SZWNhbGNTdHlsZSB7CiBwdWJsaWM6Ci0gICAgQ2hlY2tGb3JWaXNp
YmlsaXR5Q2hhbmdlT25SZWNhbGNTdHlsZShFbGVtZW50KiBlbGVtZW50LCBSZW5kZXJTdHlsZSog
Y3VycmVudFN0eWxlKQorICAgIENoZWNrRm9yVmlzaWJpbGl0eUNoYW5nZU9uUmVjYWxjU3R5bGUo
RWxlbWVudCogZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSkKICAgICAg
ICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgLCBtX3ByZXZpb3VzRGlzcGxheShjdXJy
ZW50U3R5bGUgPyBjdXJyZW50U3R5bGUtPmRpc3BsYXkoKSA6IE5PTkUpCiAgICAgICAgICwgbV9w
cmV2aW91c1Zpc2liaWxpdHkoY3VycmVudFN0eWxlID8gY3VycmVudFN0eWxlLT52aXNpYmlsaXR5
KCkgOiBISURERU4pCkBAIC0yNjcsNyArMjY3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBpZiAobV9lbGVtZW50LT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX2VsZW1l
bnQtPnJlbmRlclN0eWxlKCk7CisgICAgICAgIGF1dG8qIHN0eWxlID0gbV9lbGVtZW50LT5yZW5k
ZXJTdHlsZSgpOwogICAgICAgICBpZiAoIXN0eWxlKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBpZiAoKG1fcHJldmlvdXNEaXNwbGF5ID09IE5PTkUgJiYgc3R5bGUtPmRpc3BsYXkoKSAh
PSBOT05FKSB8fCAobV9wcmV2aW91c1Zpc2liaWxpdHkgPT0gSElEREVOICYmIHN0eWxlLT52aXNp
YmlsaXR5KCkgIT0gSElEREVOKQpAQCAtMjgyLDcgKzI4Miw3IEBAIHByaXZhdGU6CiB9OwogI2Vu
ZGlmIC8vIFBMQVRGT1JNKElPUykKIAotdm9pZCBUcmVlUmVzb2x2ZXI6OnB1c2hQYXJlbnQoRWxl
bWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdlKQordm9pZCBU
cmVlUmVzb2x2ZXI6OnB1c2hQYXJlbnQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBDaGFuZ2UgY2hhbmdlKQogewogICAgIHNjb3BlKCkuc2VsZWN0b3JGaWx0ZXIu
cHVzaFBhcmVudCgmZWxlbWVudCk7CiAKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIFRyZWVSZXNv
bHZlcjo6cmVzb2x2ZUNvbXBvc2VkVHJlZSgpCiAKICAgICAgICAgYm9vbCBzaG91bGRSZXNvbHZl
Rm9yUHNldWRvRWxlbWVudCA9IHNob3VsZFJlc29sdmVQc2V1ZG9FbGVtZW50KGVsZW1lbnQuYmVm
b3JlUHNldWRvRWxlbWVudCgpKSB8fCBzaG91bGRSZXNvbHZlUHNldWRvRWxlbWVudChlbGVtZW50
LmFmdGVyUHNldWRvRWxlbWVudCgpKTsKIAotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGU7Cisg
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZTsKICAgICAgICAgQ2hhbmdlIGNoYW5nZTsK
IAogICAgICAgICBib29sIHNob3VsZFJlc29sdmUgPSBwYXJlbnQuY2hhbmdlID49IEluaGVyaXQg
fHwgZWxlbWVudC5uZWVkc1N0eWxlUmVjYWxjKCkgfHwgc2hvdWxkUmVzb2x2ZUZvclBzZXVkb0Vs
ZW1lbnQgfHwgYWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyB8fCBlbGVtZW50Lmhhc0Rpc3BsYXlD
b250ZW50cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5o
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8VXBkYXRlPiByZXNvbHZlKENoYW5nZSk7CiAKIHByaXZhdGU6Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYsIFJlbmRl
clN0eWxlJiBpbmhlcml0ZWRTdHlsZSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBpbmhlcml0ZWRT
dHlsZSk7CiAKICAgICB2b2lkIHJlc29sdmVDb21wb3NlZFRyZWUoKTsKICAgICBFbGVtZW50VXBk
YXRlIHJlc29sdmVFbGVtZW50KEVsZW1lbnQmKTsKQEAgLTc5LDEzICs3OSwxMyBAQCBwcml2YXRl
OgogCiAgICAgc3RydWN0IFBhcmVudCB7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7Ci0gICAg
ICAgIFJlbmRlclN0eWxlJiBzdHlsZTsKKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
OwogICAgICAgICBDaGFuZ2UgY2hhbmdlOwogICAgICAgICBib29sIGRpZFB1c2hTY29wZSB7IGZh
bHNlIH07CiAgICAgICAgIGJvb2wgZWxlbWVudE5lZWRpbmdTdHlsZVJlY2FsY0FmZmVjdHNOZXh0
U2libGluZ0VsZW1lbnRTdHlsZSB7IGZhbHNlIH07CiAKICAgICAgICAgUGFyZW50KERvY3VtZW50
JiwgQ2hhbmdlKTsKLSAgICAgICAgUGFyZW50KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYsIENoYW5n
ZSk7CisgICAgICAgIFBhcmVudChFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBDaGFuZ2Up
OwogICAgIH07CiAKICAgICBTY29wZSYgc2NvcGUoKSB7IHJldHVybiBtX3Njb3BlU3RhY2subGFz
dCgpOyB9CkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwdXNoRW5jbG9zaW5n
U2NvcGUoKTsKICAgICB2b2lkIHBvcFNjb3BlKCk7CiAKLSAgICB2b2lkIHB1c2hQYXJlbnQoRWxl
bWVudCYsIFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKKyAgICB2b2lkIHB1c2hQYXJlbnQoRWxlbWVu
dCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgQ2hhbmdlKTsKICAgICB2b2lkIHBvcFBhcmVudCgpOwog
ICAgIHZvaWQgcG9wUGFyZW50c1RvRGVwdGgodW5zaWduZWQgZGVwdGgpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVVcGRhdGUuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVVwZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDExICs2
MSwyNCBAQCBib29sIFVwZGF0ZTo6dGV4dFVwZGF0ZShjb25zdCBUZXh0JiB0ZXh0CiAgICAgcmV0
dXJuIG1fdGV4dHMuY29udGFpbnMoJnRleHQpOwogfQogCi1SZW5kZXJTdHlsZSogVXBkYXRlOjpl
bGVtZW50U3R5bGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKK2NvbnN0IFJlbmRlclN0
eWxlKiBVcGRhdGU6OmVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAog
ewogICAgIGlmIChhdXRvKiB1cGRhdGUgPSBlbGVtZW50VXBkYXRlKGVsZW1lbnQpKQogICAgICAg
ICByZXR1cm4gdXBkYXRlLT5zdHlsZS5nZXQoKTsKLSAgICByZXR1cm4gZWxlbWVudC5yZW5kZXJT
dHlsZSgpOworICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOworICAgIGlm
ICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiAmcmVuZGVy
ZXItPnN0eWxlKCk7Cit9CisKK1JlbmRlclN0eWxlKiBVcGRhdGU6OmVsZW1lbnRTdHlsZShjb25z
dCBFbGVtZW50JiBlbGVtZW50KQoreworICAgIGlmIChhdXRvKiB1cGRhdGUgPSBlbGVtZW50VXBk
YXRlKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gdXBkYXRlLT5zdHlsZS5nZXQoKTsKKyAgICBh
dXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gJnJlbmRlcmVyLT5tdXRhYmxlU3R5
bGUoKTsKIH0KIAogdm9pZCBVcGRhdGU6OmFkZEVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgRWxl
bWVudCogcGFyZW50LCBFbGVtZW50VXBkYXRlJiYgZWxlbWVudFVwZGF0ZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlVXBkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkocmV2aXNpb24gMjAwMDY3KQorKysgU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVVcGRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsOCBAQCBw
dWJsaWM6CiAKICAgICBib29sIHRleHRVcGRhdGUoY29uc3QgVGV4dCYpIGNvbnN0OwogCi0gICAg
UmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JikgY29uc3Q7CisgICAgY29u
c3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50JikgY29uc3Q7CisgICAg
UmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZShjb25zdCBFbGVtZW50Jik7CiAKICAgICBjb25zdCBE
b2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMDA2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ2LDcgKzc0Niw3
IEBAIHZvaWQgU1ZHRWxlbWVudDo6c3luY2hyb25pemVTeXN0ZW1MYW5ndWEKICAgICBjb250ZXh0
RWxlbWVudC0+c3luY2hyb25pemVTeXN0ZW1MYW5ndWFnZSgpOwogfQogCi1PcHRpb25hbDxFbGVt
ZW50U3R5bGU+IFNWR0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU1ZHRWxlbWVu
dDo6cmVzb2x2ZUN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgY29u
c3QgUmVuZGVyU3R5bGUqKQogewogICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGluIGEgPHVzZT4g
dHJlZSB3ZSBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIGRlZmluaXRpb24gdHJlZS4KICAgICBpZiAo
YXV0byogc3R5bGVFbGVtZW50ID0gdGhpcy0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSkKQEAgLTc3
MywxMiArNzczLDEyIEBAIHZvaWQgU1ZHRWxlbWVudDo6c2V0VXNlT3ZlcnJpZGVDb21wdXRlZFMK
ICAgICAgICAgbV9zdmdSYXJlRGF0YS0+c2V0VXNlT3ZlcnJpZGVDb21wdXRlZFN0eWxlKHZhbHVl
KTsKIH0KIAotUmVuZGVyU3R5bGUqIFNWR0VsZW1lbnQ6OmNvbXB1dGVkU3R5bGUoUHNldWRvSWQg
cHNldWRvRWxlbWVudFNwZWNpZmllcikKK2NvbnN0IFJlbmRlclN0eWxlKiBTVkdFbGVtZW50Ojpj
b21wdXRlZFN0eWxlKFBzZXVkb0lkIHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpCiB7CiAgICAgaWYg
KCFtX3N2Z1JhcmVEYXRhIHx8ICFtX3N2Z1JhcmVEYXRhLT51c2VPdmVycmlkZUNvbXB1dGVkU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuIEVsZW1lbnQ6OmNvbXB1dGVkU3R5bGUocHNldWRvRWxlbWVu
dFNwZWNpZmllcik7CiAKLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBudWxscHRyOwor
ICAgIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG51bGxwdHI7CiAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudCA9IHBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKSkgewogICAgICAgICBp
ZiAoYXV0byByZW5kZXJlciA9IHBhcmVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHBhcmVu
dFN0eWxlID0gJnJlbmRlcmVyLT5zdHlsZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5o
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3luY2hy
b25pemVBbmltYXRlZFNWR0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CiAg
ICAgc3RhdGljIHZvaWQgc3luY2hyb25pemVBbGxBbmltYXRlZFNWR0F0dHJpYnV0ZShTVkdFbGVt
ZW50Kik7CiAgCi0gICAgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUo
UmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBv
dmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29sdmVDdXN0b21TdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzaGFkb3dI
b3N0U3R5bGUpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIHZvaWQgc3luY2hyb25pemVSZXF1aXJl
ZEZlYXR1cmVzKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKICAgICBzdGF0aWMgdm9pZCBz
eW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7
CkBAIC0xODEsNyArMTgxLDcgQEAgcHJvdGVjdGVkOgogICAgIGNsYXNzIEluc3RhbmNlSW52YWxp
ZGF0aW9uR3VhcmQ7CiAKIHByaXZhdGU6Ci0gICAgUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUo
UHNldWRvSWQgPSBOT1BTRVVETykgZmluYWw7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1
dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETykgZmluYWw7CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNTdXBwb3J0ZWQoU3RyaW5nSW1wbCogZmVhdHVyZSwgU3RyaW5nSW1wbCogdmVyc2lvbikgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgJKHJldmlz
aW9uIDIwMDA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtNTksMTAgKzU5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
ICptX2FuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllczsKICAgICB9CiAKLSAgICBSZW5kZXJTdHls
ZSogb3ZlcnJpZGVDb21wdXRlZFN0eWxlKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogb3ZlcnJpZGVDb21wdXRlZFN0eWxl
KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKICAgICB7
CiAgICAgICAgIGlmICghbV91c2VPdmVycmlkZUNvbXB1dGVkU3R5bGUpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoIW1fb3Zl
cnJpZGVDb21wdXRlZFN0eWxlIHx8IG1fbmVlZHNPdmVycmlkZUNvbXB1dGVkU3R5bGVVcGRhdGUp
IHsKICAgICAgICAgICAgIC8vIFRoZSBzdHlsZSBjb21wdXRlZCBoZXJlIGNvbnRhaW5zIG5vIENT
UyBBbmltYXRpb25zL1RyYW5zaXRpb25zIG9yIFNNSUwgaW5kdWNlZCBydWxlcyAtIHRoaXMgaXMg
bmVlZGVkIHRvIGNvbXB1dGUgdGhlICJiYXNlIHZhbHVlIiBmb3IgdGhlIFNNSUwgYW5pbWF0aW9u
IHNhbmR3aGljaCBtb2RlbC4KICAgICAgICAgICAgIG1fb3ZlcnJpZGVDb21wdXRlZFN0eWxlID0g
ZWxlbWVudC5zdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50KGVsZW1lbnQsIHBhcmVudFN0
eWxlLCBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCkucmVuZGVyU3R5bGU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDcgKzYzLDcgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNzRWxlbWVudDo6
Z2V0UwogQWZmaW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRy
YW5zZm9ybSgpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKLSAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxs
cHRyOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgp
IDogbnVsbHB0cjsKIAogICAgIC8vIElmIENTUyBwcm9wZXJ0eSB3YXMgc2V0LCB1c2UgdGhhdCwg
b3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGF0dHJpYnV0ZSAoaWYgc2V0KS4KICAgICBpZiAoc3R5bGUg
JiYgc3R5bGUtPmhhc1RyYW5zZm9ybSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGVuZ3RoQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xl
bmd0aENvbnRleHQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGVuZ3RoQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw3ICsyMjIsNyBAQCBm
bG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tCiAgICAgcmV0dXJuIDA7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlRm9yTGVuZ3RoUmVzb2x2
aW5nKGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQpCitzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRl
clN0eWxlKiByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhjb25zdCBTVkdFbGVtZW50KiBj
b250ZXh0KQogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC0yMzYsMTIgKzIzNiwxMiBAQCBzdGF0aWMgaW5saW5lIFJlbmRlclN0eWxlKiByZW5kZXJTdHls
ZUZvCiAKICAgICAvLyBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IGEgUmVuZGVyU1ZHUm9vdCByZW5k
ZXJlciwgY2FycnlpbmcgYSBzdHlsZS4KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogZmxvYXQgU1ZHTGVuZ3RoQ29udGV4
dDo6Y29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRU1TKGZsb2F0IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJTdHlsZUZv
ckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5
bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKSB7CiAgICAg
ICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjU4LDcg
KzI1OCw3IEBAIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb20KIAogZmxv
YXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVNU1RvVXNlclVuaXRzKGZsb2F0
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2NvbnRleHQpOworICAgIGF1dG8q
IHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBp
ZiAoIXN0eWxlKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMjY5LDcgKzI2OSw3IEBAIGZsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZl
cnRWYWx1ZUZyb20KIAogZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbVVz
ZXJVbml0c1RvRVhTKGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxlbmd0aFJlc29sdmluZyhtX2Nv
bnRleHQpOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVGb3JMZW5ndGhSZXNvbHZpbmco
bV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRF
RF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjg4LDcgKzI4OCw3IEBAIGZsb2F0IFNWR0xl
bmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb20KIAogZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6
Y29udmVydFZhbHVlRnJvbUVYU1RvVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJTdHlsZUZvckxl
bmd0aFJlc29sdmluZyhtX2NvbnRleHQpOworICAgIGF1dG8qIHN0eWxlID0gcmVuZGVyU3R5bGVG
b3JMZW5ndGhSZXNvbHZpbmcobV9jb250ZXh0KTsKICAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAg
IGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4
OCw3IEBAIGJvb2wgU1ZHU3RvcEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY28KIAogQ29sb3Ig
U1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09wYWNpdHkoKSBjb25zdAogewotICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUoKSA6
IG51bGxwdHI7CisgICAgYXV0byogc3R5bGUgPSByZW5kZXJlcigpID8gJnJlbmRlcmVyKCktPnN0
eWxlKCkgOiBudWxscHRyOwogICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGZvciBudWxsIHN0eWxl
IGV4aXN0cyB0byBhZGRyZXNzIEJ1ZyBXSyA5MDgxNCwgYSByYXJlIGNyYXNoIGNvbmRpdGlvbiBp
bgogICAgIC8vIHdoaWNoIHRoZSByZW5kZXJlciBvciBzdHlsZSBpcyBudWxsLiBUaGlzIGVudGly
ZSBjbGFzcyBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwgKEJ1ZyBXSyA4Njk0MSkKICAgICAvLyBh
bmQgd2Ugd2lsbCB0b2xlcmF0ZSB0aGlzIG51bGwgY2hlY2sgdW50aWwgdGhlbi4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkocmV2aXNpb24gMjAwMDY3KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsNyBAQCBSZWY8U1ZHVGV4dEVsZW1lbnQ+IFNWR1RleHRFbGVtZW50OjpjcmVhCiBBZmZp
bmVUcmFuc2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25z
dAogewogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cjsKKyAgICBhdXRv
KiBzdHlsZSA9IHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHI7CiAK
ICAgICAvLyBpZiBDU1MgcHJvcGVydHkgd2FzIHNldCwgdXNlIHRoYXQsIG90aGVyd2lzZSBmYWxs
YmFjayB0byBhdHRyaWJ1dGUgKGlmIHNldCkKICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmhhc1Ry
YW5zZm9ybSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyMyw3ICs4MjMsNyBA
QCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZShJbmNsdWRlCiAgICAgICAgIGF1dG8m
IHBvc3RMYXlvdXREYXRhID0gcmVzdWx0LnBvc3RMYXlvdXREYXRhKCk7CiAgICAgICAgIGlmICgh
c2VsZWN0aW9uLmlzTm9uZSgpKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0g
ICAgICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHN0eWxlID0gRWRpdG9yOjpzdHlsZUZvclNlbGVj
dGlvblN0YXJ0KCZmcmFtZSwgbm9kZVRvUmVtb3ZlKSkgeworICAgICAgICAgICAgaWYgKGF1dG8q
IHN0eWxlID0gRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KCZmcmFtZSwgbm9kZVRvUmVt
b3ZlKSkgewogICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+Zm9udENhc2NhZGUoKS53ZWlnaHQo
KSA+PSBGb250V2VpZ2h0Qm9sZCkKICAgICAgICAgICAgICAgICAgICAgcG9zdExheW91dERhdGEu
dHlwaW5nQXR0cmlidXRlcyB8PSBBdHRyaWJ1dGVCb2xkOwogICAgICAgICAgICAgICAgIGlmIChz
dHlsZS0+Zm9udENhc2NhZGUoKS5pdGFsaWMoKSA9PSBGb250SXRhbGljT24pCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CShyZXZpc2lvbiAyMDAwNjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTgyNCw3ICs4MjQsNyBAQCBzdGF0
aWMgRmxvYXRRdWFkIGlubmVyRnJhbWVRdWFkKGNvbnN0IEZyCiAgICAgaWYgKCFyZW5kZXJlcikK
ICAgICAgICAgcmV0dXJuIEZsb2F0UXVhZCgpOwogCi0gICAgUmVuZGVyU3R5bGUmIHN0eWxlID0g
cmVuZGVyZXItPnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsK
ICAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hS
ZWN0KHRydWUgLyogdXNlIHRyYW5zZm9ybXMqLyk7CiAKICAgICBib3VuZGluZ0JveC5tb3ZlKHN0
eWxlLmJvcmRlckxlZnRXaWR0aCgpLCBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKTsK
</data>
<flag name="review"
          id="301609"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>