<?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>169655</bug_id>
          
          <creation_ts>2017-03-14 21:06:39 -0700</creation_ts>
          <short_desc>Un-deprecate the original PDFPlugin</short_desc>
          <delta_ts>2017-03-15 12:34:29 -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>New Bugs</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="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>aestes</cc>
    
    <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1287962</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-03-14 21:06:39 -0700</bug_when>
    <thetext>Un-deprecate the original PDFPlugin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287963</commentid>
    <comment_count>1</comment_count>
      <attachid>304467</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-03-14 21:06:59 -0700</bug_when>
    <thetext>Created attachment 304467
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287964</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-03-14 21:07:15 -0700</bug_when>
    <thetext>... and delete the one we never used</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288191</commentid>
    <comment_count>3</comment_count>
      <attachid>304467</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-15 12:34:25 -0700</bug_when>
    <thetext>Comment on attachment 304467
Patch

Clearing flags on attachment: 304467

Committed r214001: &lt;http://trac.webkit.org/changeset/214001&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288192</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-15 12:34:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304467</attachid>
            <date>2017-03-14 21:06:59 -0700</date>
            <delta_ts>2017-03-15 12:34:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169655-20170314210658.patch</filename>
            <type>text/plain</type>
            <size>198668</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzOTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjE4YjhlY2ZlNTAwMTI5
NzU3MmZkYjk5YTlhM2ZkNDhmMWQ5YzJlNi4uMGZkMzZjYzg2MWE0NmU1YmEzMjdiZWY1NWYxMTg1
NzRiMWM1Y2Y0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE3LTAzLTE0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFVuLWRlcHJlY2F0
ZSB0aGUgb3JpZ2luYWwgUERGUGx1Z2luCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjk2NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFNoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5oOgorICAgICAgICAq
IFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUEkuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4uaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQ
bHVnaW4ubW06IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZM
YXllckNvbnRyb2xsZXJTUEkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1t
OgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5ub3RhdGlvbi5t
bToKKyAgICAgICAgVGhlIHRyYW5zaXRpb24gdG8gdGhlIG5vbi1kZXByZWNhdGVkIFBERlBsdWdp
biBuZXZlciBoYXBwZW5lZCwKKyAgICAgICAgYW5kIHdlIGhhdmUgYSB2ZXJ5IGRpZmZlcmVudCBw
bGFuIG5vdy4KKwogMjAxNy0wMy0xNCAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAK
ICAgICAgICAgW2lPU10gLVtXS1dlYlZpZXcgX2RhdGFGb3JEaXNwbGF5ZWRQREZdIHJldHVybnMg
bmlsIHdoZW4gY2FsbGVkIGJlZm9yZSBhbiBlbmNyeXB0ZWQgUERGIGhhcyBiZWVuIHVubG9ja2Vk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5oCmluZGV4IDM0MjIzMTIx
ZGI2ZmE2NTk2NjkzNTA4ZmU3ZmMyOWY1NDNhMmQ0YzYuLmM1YWQyOWUxOWRkMDc4ZDM1NjIwZDRi
ZWRkMWU5N2FkNzg1MTFkYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
UERGS2l0SW1wb3J0cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1w
b3J0cy5oCkBAIC0yOCwxMiArMjgsNiBAQAogCiAjaWYgUExBVEZPUk0oTUFDKQogCi0jaWYgX19o
YXNfaW5jbHVkZSg8UERGS2l0L1BERkxheWVyQ29udHJvbGxlclZlcnNpb25pbmdQcml2Lmg+KQot
I2ltcG9ydCA8UERGS2l0L1BERkxheWVyQ29udHJvbGxlclZlcnNpb25pbmdQcml2Lmg+Ci0jZW5k
aWYKLQotI2RlZmluZSBVU0VfREVQUkVDQVRFRF9QREZfUExVR0lOICghZGVmaW5lZChQREZLSVRf
SEFTX1BERkxBWUVSQ09OVFJPTExFUl8yKSB8fCAhUERGS0lUX0hBU19QREZMQVlFUkNPTlRST0xM
RVJfMikKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIE5TU3RyaW5nICpwZGZLaXRGcmFtZXdvcmtQ
YXRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggMDI2ODY2ZjM2OTQ0NjQ4NTA5Njk5YjA4NTlmMjNlNDQ3YzY3N2EwMC4uMWY2
ODY4N2NlM2FmZjYyZjJlZjQ0NTI5ZjAxZDkyYjgyNzQxNjllYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjE4LDcgKzYxOCw3
IEBACiAJCTJEMkFERjA5MTYzNjJERDUwMDE5N0U0NyAvKiBQREZQbHVnaW5UZXh0QW5ub3RhdGlv
bi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMkFE
RjA2MTYzNjJEQzcwMDE5N0U0NyAvKiBQREZQbHVnaW5UZXh0QW5ub3RhdGlvbi5tbSAqLzsgfTsK
IAkJMkQyQURGMEIxNjM2MkREQjAwMTk3RTQ3IC8qIFBERlBsdWdpbkFubm90YXRpb24ubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDJBREYwMzE2MzYy
NDM1MDAxOTdFNDcgLyogUERGUGx1Z2luQW5ub3RhdGlvbi5tbSAqLzsgfTsKIAkJMkQyQURGMTAx
NjM2NEQ4MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNob2ljZUFubm90YXRpb24ubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDJBREYwRTE2MzY0RDgyMDAx
OTdFNDcgLyogUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbSAqLzsgfTsKLQkJMkQzNDk0NjQx
QkNDMkVDMzAwNjRGMEJFIC8qIERlcHJlY2F0ZWRQREZQbHVnaW4ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDAwMzUyMzFCQzc0MTQ4MDBEQTg3MTYg
LyogRGVwcmVjYXRlZFBERlBsdWdpbi5tbSAqLzsgfTsKKwkJMkQzNDk0NjQxQkNDMkVDMzAwNjRG
MEJFIC8qIFBERlBsdWdpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEMDAzNTIzMUJDNzQxNDgwMERBODcxNiAvKiBQREZQbHVnaW4ubW0gKi87IH07
CiAJCTJEM0E2NURBMUE3QzNBMUYwMENBQzYzNyAvKiBXS05hdmlnYXRpb25BY3Rpb25SZWYuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQzQTY1RDgx
QTdDM0ExRjAwQ0FDNjM3IC8qIFdLTmF2aWdhdGlvbkFjdGlvblJlZi5jcHAgKi87IH07CiAJCTJE
M0E2NURCMUE3QzNBMUYwMENBQzYzNyAvKiBXS05hdmlnYXRpb25BY3Rpb25SZWYuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEM0E2NUQ5MUE3QzNBMUYw
MENBQzYzNyAvKiBXS05hdmlnYXRpb25BY3Rpb25SZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDNBNjVERTFBN0MzQTdEMDBDQUM2MzcgLyog
V0tOYXZpZ2F0aW9uUmVzcG9uc2VSZWYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkQzQTY1REMxQTdDM0E3RDAwQ0FDNjM3IC8qIFdLTmF2aWdhdGlv
blJlc3BvbnNlUmVmLmNwcCAqLzsgfTsKQEAgLTY1NCw3ICs2NTQsNiBAQAogCQkyRDgxOUI5RTE4
NjI3RUU5MDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDgxOUI5OTE4NjI3NUIz
MDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAgKi87IH07CiAJCTJE
ODE5QkExMTg2MjgwMEUwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yTWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEODE5QjlGMTg2MjgwMEUwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29s
bGVjdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMkQ4MTlCQTIxODYyODAwRTAwMUYw
M0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3JNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ4MTlCQTAxODYyODAwRTAwMUYw
M0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3JNZXNzYWdlcy5oICovOyB9OwotCQky
RDg3MEQxMDE2MjM0RkZFMDAwQTNGMjAgLyogUERGUGx1Z2luLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ4NzBEMEUxNjIyQjdGOTAwMEEzRjIwIC8q
IFBERlBsdWdpbi5tbSAqLzsgfTsKIAkJMkQ4NzEwMTYxODI4NDE1RDAwMThGQTAxIC8qIFBsYXRm
b3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEODcxMDE0MTgyODQxNUQwMDE4RkEwMSAvKiBQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGVDdXN0b20ubW0gKi87IH07CiAJCTJEODcxMDE3MTgyODQxNUQwMDE4RkEwMSAvKiBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEODcxMDE1MTgyODQxNUQwMDE4RkEwMSAvKiBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGVDdXN0b20uaCAqLzsgfTsKIAkJMkQ4Nzg2MUQxQkRCNTRCRjAwRDAyQUJCIC8q
IF9XS1VzZXJTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDg3ODYxQjFCREI1NEJGMDBEMDJBQkIgLyogX1dLVXNlclN0eWxlU2hlZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjc4
MCw4ICsyNzc5LDggQEAKIAkJMjlBRDMwOTcxNjRCNEUyMTAwNzJERUE5IC8qIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9
IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluOyBwYXRoID0gQ3Vz
dG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUNENTVBODEyOEUyOTRGMDAxMzNDODUg
LyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlDRDU1QTkxMjhFMjk0RjAwMTMzQzg1IC8qIFdLQWNj
ZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RCYXNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJEMDAzNTIyMUJDNzQxNDgwMERBODcxNiAvKiBEZXBy
ZWNhdGVkUERGUGx1Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERlcHJl
Y2F0ZWRQREZQbHVnaW4uaDsgcGF0aCA9IFBERi9EZXByZWNhdGVkUERGUGx1Z2luLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJEMDAzNTIzMUJDNzQxNDgwMERBODcxNiAvKiBEZXBy
ZWNhdGVkUERGUGx1Z2luLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1l
ID0gRGVwcmVjYXRlZFBERlBsdWdpbi5tbTsgcGF0aCA9IFBERi9EZXByZWNhdGVkUERGUGx1Z2lu
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDAwMzUyMjFCQzc0MTQ4MDBEQTg3
MTYgLyogUERGUGx1Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBERlBs
dWdpbi5oOyBwYXRoID0gUERGL1BERlBsdWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkyRDAwMzUyMzFCQzc0MTQ4MDBEQTg3MTYgLyogUERGUGx1Z2luLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUERGUGx1Z2luLm1tOyBwYXRoID0gUERGL1BE
RlBsdWdpbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxMDg3NUUxRDJDNTcz
RTAwQjg1RjgyIC8qIExvYWRQYXJhbWV0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExvYWRQYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkQxMDg3NUYxRDJDNTczRTAwQjg1RjgyIC8qIExvYWRQYXJhbWV0ZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvYWRQYXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEMTA4NzYyMUQyQzY0MUIwMEI4NUY4MiAvKiBMb2FkUGFyYW1l
dGVyc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9h
ZFBhcmFtZXRlcnNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4MDEs
MTAgKzI4MDAsOSBAQAogCQkyRDJBREYwMzE2MzYyNDM1MDAxOTdFNDcgLyogUERGUGx1Z2luQW5u
b3RhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBERlBs
dWdpbkFubm90YXRpb24ubW07IHBhdGggPSBQREYvUERGUGx1Z2luQW5ub3RhdGlvbi5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQyQURGMDUxNjM2MkRDNzAwMTk3RTQ3IC8qIFBE
RlBsdWdpblRleHRBbm5vdGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFBERlBsdWdpblRleHRBbm5vdGF0aW9uLmg7IHBhdGggPSBQREYvUERGUGx1Z2luVGV4dEFubm90
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQyQURGMDYxNjM2MkRDNzAw
MTk3RTQ3IC8qIFBERlBsdWdpblRleHRBbm5vdGF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW07IHBhdGggPSBQ
REYvUERGUGx1Z2luVGV4dEFubm90YXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJEMkFERjBDMTYzNjNERUMwMDE5N0U0NyAvKiBEZXByZWNhdGVkUERGTGF5ZXJDb250cm9s
bGVyU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUEku
aDsgcGF0aCA9IFBERi9EZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTJEMkFERjBDMTYzNjNERUMwMDE5N0U0NyAvKiBQREZMYXll
ckNvbnRyb2xsZXJTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUERGTGF5ZXJDb250cm9sbGVyU1BJLmg7
IHBhdGggPSBQREYvUERGTGF5ZXJDb250cm9sbGVyU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJEMkFERjBEMTYzNjREODIwMDE5N0U0NyAvKiBQREZQbHVnaW5DaG9pY2VBbm5v
dGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBERlBsdWdpbkNob2lj
ZUFubm90YXRpb24uaDsgcGF0aCA9IFBERi9QREZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMkFERjBFMTYzNjREODIwMDE5N0U0NyAvKiBQ
REZQbHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gUERGUGx1Z2luQ2hvaWNlQW5ub3RhdGlvbi5tbTsgcGF0aCA9IFBERi9QREZQ
bHVnaW5DaG9pY2VBbm5vdGF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQky
RDM0OTQ2MzFCQ0MyM0JGMDA2NEYwQkUgLyogUERGTGF5ZXJDb250cm9sbGVyU1BJLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFBERkxheWVyQ29udHJvbGxlclNQSS5oOyBwYXRoID0gUERGL1BERkxheWVyQ29u
dHJvbGxlclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDNBNjVEODFBN0Mz
QTFGMDBDQUM2MzcgLyogV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLTmF2aWdhdGlvbkFjdGlvblJlZi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEM0E2NUQ5MUE3QzNBMUYwMENBQzYzNyAvKiBXS05hdmln
YXRpb25BY3Rpb25SZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tOYXZp
Z2F0aW9uQWN0aW9uUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEM0E2NURD
MUE3QzNBN0QwMENBQzYzNyAvKiBXS05hdmlnYXRpb25SZXNwb25zZVJlZi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS05hdmlnYXRpb25SZXNwb25zZVJlZi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODQzLDggKzI4NDEsNiBAQAogCQkyRDgx
OUI5QjE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVj
dG9yLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDgxOUI5RjE4
NjI4MDBFMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvck1lc3NhZ2VSZWNl
aXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3R2VzdHVy
ZUdlb21ldHJ5Q29sbGVjdG9yTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkQ4MTlCQTAxODYyODAwRTAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0
cnlDb2xsZWN0b3JNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
aWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMkQ4NzBEMEQxNjIyQjdGOTAwMEEzRjIwIC8qIFBERlBsdWdpbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQREZQbHVnaW4uaDsgcGF0aCA9IFBERi9QREZQ
bHVnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkQ4NzBEMEUxNjIyQjdGOTAw
MEEzRjIwIC8qIFBERlBsdWdpbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFBERlBsdWdpbi5tbTsgcGF0aCA9IFBERi9QREZQbHVnaW4ubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEODcxMDE0MTgyODQxNUQwMDE4RkEwMSAvKiBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGVDdXN0b20ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJEODcxMDE1MTgyODQxNUQwMDE4RkEwMSAvKiBQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGVDdXN0b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1DQUxh
eWVyUmVtb3RlQ3VzdG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEODc4NjFC
MUJEQjU0QkYwMEQwMkFCQiAvKiBfV0tVc2VyU3R5bGVTaGVldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBfV0tVc2VyU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzkwMiwxMyArNzg5OCwxMCBAQAogCQlFMTk5ODc1QjE0MkJGOUNGMDBCQjJE
RTcgLyogUERGICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJ
CQkyRDJBREYwQzE2MzYzREVDMDAxOTdFNDcgLyogRGVwcmVjYXRlZFBERkxheWVyQ29udHJvbGxl
clNQSS5oICovLAotCQkJCTJEMDAzNTIyMUJDNzQxNDgwMERBODcxNiAvKiBEZXByZWNhdGVkUERG
UGx1Z2luLmggKi8sCi0JCQkJMkQwMDM1MjMxQkM3NDE0ODAwREE4NzE2IC8qIERlcHJlY2F0ZWRQ
REZQbHVnaW4ubW0gKi8sCisJCQkJMkQyQURGMEMxNjM2M0RFQzAwMTk3RTQ3IC8qIFBERkxheWVy
Q29udHJvbGxlclNQSS5oICovLAorCQkJCTJEMDAzNTIyMUJDNzQxNDgwMERBODcxNiAvKiBQREZQ
bHVnaW4uaCAqLywKKwkJCQkyRDAwMzUyMzFCQzc0MTQ4MDBEQTg3MTYgLyogUERGUGx1Z2luLm1t
ICovLAogCQkJCTM1NzRCMzdGMTY2NTkzMkMwMDg1OUJCNyAvKiBQREZBbm5vdGF0aW9uVGV4dFdp
ZGdldERldGFpbHMuaCAqLywKLQkJCQkyRDM0OTQ2MzFCQ0MyM0JGMDA2NEYwQkUgLyogUERGTGF5
ZXJDb250cm9sbGVyU1BJLmggKi8sCi0JCQkJMkQ4NzBEMEQxNjIyQjdGOTAwMEEzRjIwIC8qIFBE
RlBsdWdpbi5oICovLAotCQkJCTJEODcwRDBFMTYyMkI3RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4u
bW0gKi8sCiAJCQkJMkQyQURGMDIxNjM2MjQzNTAwMTk3RTQ3IC8qIFBERlBsdWdpbkFubm90YXRp
b24uaCAqLywKIAkJCQkyRDJBREYwMzE2MzYyNDM1MDAxOTdFNDcgLyogUERGUGx1Z2luQW5ub3Rh
dGlvbi5tbSAqLywKIAkJCQkyRDJBREYwRDE2MzY0RDgyMDAxOTdFNDcgLyogUERGUGx1Z2luQ2hv
aWNlQW5ub3RhdGlvbi5oICovLApAQCAtOTcxMyw3ICs5NzA2LDcgQEAKIAkJCQlDNTVGOTE3MDFD
NTk1RjYzMDAyOUU5MkQgLyogRGF0YURldGVjdGlvblJlc3VsdC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTFBQzc1MzdGMTgzQkU1MEYwMDcyQ0IxNSAvKiBEYXRhUmVmZXJlbmNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMDMyREE1MTBGNDM3RDEwMDU4QzE1QSAvKiBEZWNvZGVyLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTJEMzQ5NDY0MUJDQzJFQzMwMDY0RjBCRSAvKiBEZXByZWNhdGVkUERG
UGx1Z2luLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMkQzNDk0NjQxQkNDMkVDMzAwNjRGMEJFIC8q
IFBERlBsdWdpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTgzODkxQjZEMUE2OEMzMEIwMDMwRjM4
NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMTQy
NzAxMUMyM0Y4NEMwMEQ0MTE4MyAvKiBEb3dubG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
MURGNjMxMjE4RTBCN0M4MDAzQTNFMkEgLyogRG93bmxvYWRDbGllbnQubW0gaW4gU291cmNlcyAq
LywKQEAgLTk4ODMsNyArOTg3Niw2IEBACiAJCQkJMUFDNzUzN0IxODNBOUZEQjAwNzJDQjE1IC8q
IFBhZ2VMb2FkU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU3NEE1ODIxMkU2NjY4MTAw
MkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxOTU4MkQ2
MTUzQ0MwNTQwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
MkQ4NzBEMTAxNjIzNEZGRTAwMEEzRjIwIC8qIFBERlBsdWdpbi5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTJEMkFERjBCMTYzNjJEREIwMDE5N0U0NyAvKiBQREZQbHVnaW5Bbm5vdGF0aW9uLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkQyQURGMTAxNjM2NEQ4MjAwMTk3RTQ3IC8qIFBERlBsdWdpbkNo
b2ljZUFubm90YXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDQyOUJGRDE3MjFFMkM3MDBF
QzY4MUYgLyogUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERG
TGF5ZXJDb250cm9sbGVyU1BJLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL0RlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUEkuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOTBhYjlhM2U0ODIzOWFmNzI4MTY1NGVjMzE2NmUyNDlhZDEzNGViOC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZMYXllckNvbnRyb2xsZXJTUEku
aAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBEZXByZWNhdGVkUERGTGF5ZXJDb250cm9sbGVyU1BJX2gKLSNkZWZpbmUgRGVwcmVjYXRl
ZFBERkxheWVyQ29udHJvbGxlclNQSV9oCi0KLSNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikgJiYg
VVNFKERFUFJFQ0FURURfUERGX1BMVUdJTikKLQotI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgot
Ci1AY2xhc3MgQ1BSZWFkaW5nTW9kZWw7Ci1AY2xhc3MgUERGVmlld0xheW91dDsKLQotdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgUERGTGF5ZXJDb250cm9sbGVyQ3Vyc29yVHlwZSkgewotICAg
IGtQREZMYXllckNvbnRyb2xsZXJDdXJzb3JUeXBlUG9pbnRlciA9IDAsCi0gICAga1BERkxheWVy
Q29udHJvbGxlckN1cnNvclR5cGVIYW5kLAotICAgIGtQREZMYXllckNvbnRyb2xsZXJDdXJzb3JU
eXBlSUJlYW0sCi19OwotCi1AcHJvdG9jb2wgUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgPE5T
T2JqZWN0PgotCi0tICh2b2lkKXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0
aW9uOwotLSAodm9pZCl3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOihOU0FycmF5ICopaXRlbXMgd2l0
aFR5cGVzOihOU0FycmF5ICopdHlwZXM7Ci0tICh2b2lkKXNob3dEZWZpbml0aW9uRm9yQXR0cmli
dXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0UG9pbnQ6KENHUG9pbnQp
cG9pbnQ7Ci0tICh2b2lkKXBlcmZvcm1XZWJTZWFyY2g6KE5TU3RyaW5nICopc3RyaW5nOwotLSAo
dm9pZClwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZyAqKXN0cmluZzsKLS0gKHZvaWQp
b3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbjsKLS0gKHZvaWQpc2F2ZVRvUERGOwotCi0tICh2b2lk
KXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9s
bGVyIGRpZENoYW5nZUFjdGl2ZUFubm90YXRpb246KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9u
OwotLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxh
eWVyQ29udHJvbGxlciBjbGlja2VkTGlua1dpdGhVUkw6KE5TVVJMICopdXJsOwotLSAodm9pZClw
ZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxl
ciBkaWRDaGFuZ2VDb250ZW50U2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7Ci0tICh2
b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250
cm9sbGVyIGRpZENoYW5nZURpc3BsYXlNb2RlOihpbnQpbW9kZTsKLS0gKHZvaWQpcGRmTGF5ZXJD
b250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hh
bmdlU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247Ci0KLS0gKHZvaWQpc2V0TW91
c2VDdXJzb3I6KFBERkxheWVyQ29udHJvbGxlckN1cnNvclR5cGUpY3Vyc29yVHlwZTsKLQotQGVu
ZAotCi1AaW50ZXJmYWNlIFBERkxheWVyQ29udHJvbGxlciA6IE5TT2JqZWN0Ci1AZW5kCi0KLUBp
bnRlcmZhY2UgUERGTGF5ZXJDb250cm9sbGVyICgpCi0KLUBwcm9wZXJ0eSAocmV0YWluKSBDQUxh
eWVyICpwYXJlbnRMYXllcjsKLUBwcm9wZXJ0eSAocmV0YWluKSBQREZEb2N1bWVudCAqZG9jdW1l
bnQ7Ci1AcHJvcGVydHkgKHJldGFpbikgaWQ8UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IGRl
bGVnYXRlOwotCi0tICh2b2lkKXNldEZyYW1lU2l6ZTooQ0dTaXplKXNpemU7Ci0KLS0gKFBERkRp
c3BsYXlNb2RlKWRpc3BsYXlNb2RlOwotLSAodm9pZClzZXREaXNwbGF5TW9kZTooUERGRGlzcGxh
eU1vZGUpbW9kZTsKLS0gKHZvaWQpc2V0RGlzcGxheXNQYWdlQnJlYWtzOihCT09MKXBhZ2VCcmVh
a3M7Ci0KLS0gKENHRmxvYXQpY29udGVudFNjYWxlRmFjdG9yOwotLSAodm9pZClzZXRDb250ZW50
U2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7Ci0KLS0gKENHRmxvYXQpZGV2aWNlU2Nh
bGVGYWN0b3I7Ci0tICh2b2lkKXNldERldmljZVNjYWxlRmFjdG9yOihDR0Zsb2F0KXNjYWxlRmFj
dG9yOwotCi0tIChDR1NpemUpY29udGVudFNpemU7Ci0tIChDR1NpemUpY29udGVudFNpemVSZXNw
ZWN0aW5nWm9vbTsKLQotLSAodm9pZClzbmFwc2hvdEluQ29udGV4dDooQ0dDb250ZXh0UmVmKWNv
bnRleHQ7Ci0KLS0gKHZvaWQpbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOihDR0Zsb2F0KW1hZ25p
ZmljYXRpb24gYXRQb2ludDooQ0dQb2ludClwb2ludCBpbW1lZGlhdGVseTooQk9PTClpbW1lZGlh
dGVseTsKLQotLSAoQ0dQb2ludClzY3JvbGxQb3NpdGlvbjsKLS0gKHZvaWQpc2V0U2Nyb2xsUG9z
aXRpb246KENHUG9pbnQpbmV3UG9zaXRpb247Ci0tICh2b2lkKXNjcm9sbFdpdGhEZWx0YTooQ0dT
aXplKWRlbHRhOwotCi0tICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50OwotLSAodm9p
ZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50OwotLSAodm9pZCltb3VzZU1vdmVkOihO
U0V2ZW50ICopZXZlbnQ7Ci0tICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudDsKLS0gKHZv
aWQpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQ7Ci0tICh2b2lkKW1vdXNlRW50ZXJlZDoo
TlNFdmVudCAqKWV2ZW50OwotLSAodm9pZCltb3VzZUV4aXRlZDooTlNFdmVudCAqKWV2ZW50Owot
Ci0tIChOU01lbnUgKiltZW51Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKLQotLSAoTlNBcnJh
eSAqKWZpbmRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpaXND
YXNlU2Vuc2l0aXZlIGhpZ2hsaWdodE1hdGNoZXM6KEJPT0wpc2hvdWxkSGlnaGxpZ2h0TWF0Y2hl
czsKLQotLSAoUERGU2VsZWN0aW9uICopY3VycmVudFNlbGVjdGlvbjsKLS0gKHZvaWQpc2V0Q3Vy
cmVudFNlbGVjdGlvbjooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOwotLSAoUERGU2VsZWN0aW9u
ICopc2VhcmNoU2VsZWN0aW9uOwotLSAodm9pZClzZXRTZWFyY2hTZWxlY3Rpb246KFBERlNlbGVj
dGlvbiAqKXNlbGVjdGlvbjsKLS0gKHZvaWQpZ290b1NlbGVjdGlvbjooUERGU2VsZWN0aW9uICop
c2VsZWN0aW9uOwotLSAoUERGU2VsZWN0aW9uICopZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6
KENHUG9pbnQpcG9pbnQ7Ci0tIChOU0FycmF5ICopcmVjdHNGb3JTZWxlY3Rpb25JbkxheW91dFNw
YWNlOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247Ci0tIChOU0FycmF5ICopcmVjdHNGb3JBbm5v
dGF0aW9uSW5MYXlvdXRTcGFjZTooUERGQW5ub3RhdGlvbiAqKWFubm90YXRpb247Ci0tIChQREZW
aWV3TGF5b3V0ICopbGF5b3V0OwotLSAoTlNSZWN0KWZyYW1lOwotCi0tIChQREZQYWdlICopY3Vy
cmVudFBhZ2U7Ci0tIChOU1VJbnRlZ2VyKWxhc3RQYWdlSW5kZXg7Ci0tIChOU1VJbnRlZ2VyKWN1
cnJlbnRQYWdlSW5kZXg7Ci0tICh2b2lkKWdvdG9OZXh0UGFnZTsKLS0gKHZvaWQpZ290b1ByZXZp
b3VzUGFnZTsKLQotLSAodm9pZCljb3B5U2VsZWN0aW9uOwotLSAodm9pZClzZWxlY3RBbGw7Ci0K
LS0gKGJvb2wpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50OwotCi0tICh2b2lkKXNldEhVREVuYWJs
ZWQ6KEJPT0wpZW5hYmxlZDsKLS0gKEJPT0wpaHVkRW5hYmxlZDsKLQotLSAoQ0dSZWN0KWJvdW5k
c0ZvckFubm90YXRpb246KFBERkFubm90YXRpb24gKilhbm5vdGF0aW9uOwotLSAodm9pZClhY3Rp
dmF0ZU5leHRBbm5vdGF0aW9uOihCT09MKXByZXZpb3VzOwotCi0tICh2b2lkKWF0dGVtcHRUb1Vu
bG9ja1dpdGhQYXNzd29yZDooTlNTdHJpbmcgKilwYXNzd29yZDsKLQotLSAodm9pZClzZWFyY2hJ
bkRpY3Rpb25hcnlXaXRoU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247Ci0KLS8v
IEFjY2Vzc2liaWxpdHkKLQotLSAoQ1BSZWFkaW5nTW9kZWwgKilyZWFkaW5nTW9kZWw7Ci0tIChp
ZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudDsKLS0gKE5TQXJyYXkgKilhY2Nlc3NpYmls
aXR5QXR0cmlidXRlTmFtZXM7Ci0tIChCT09MKWFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRh
YmxlOihOU1N0cmluZyAqKWF0dHJpYnV0ZTsKLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVNldFZhbHVl
OihpZCl2YWx1ZSBmb3JBdHRyaWJ1dGU6KE5TU3RyaW5nICopYXR0cmlidXRlOwotLSAoTlNBcnJh
eSAqKWFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXM7Ci0tIChOU1N0cmlu
ZyAqKWFjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmls
aXR5Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlOwotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5
VmFsdWVBdHRyaWJ1dGU7Ci0tIChCT09MKWFjY2Vzc2liaWxpdHlJc1ZhbHVlQXR0cmlidXRlU2V0
dGFibGU7Ci0tIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGU7
Ci0tIChCT09MKWFjY2Vzc2liaWxpdHlJc1NlbGVjdGVkVGV4dEF0dHJpYnV0ZVNldHRhYmxlOwot
LSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZTsKLS0g
KE5TTnVtYmVyICopYWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFjdGVyc0F0dHJpYnV0ZTsKLS0g
KEJPT0wpYWNjZXNzaWJpbGl0eUlzTnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlU2V0dGFibGU7
Ci0tIChOU1ZhbHVlICopYWNjZXNzaWJpbGl0eVZpc2libGVDaGFyYWN0ZXJSYW5nZUF0dHJpYnV0
ZTsKLS0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzVmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRl
U2V0dGFibGU7Ci0tIChOU051bWJlciAqKWFjY2Vzc2liaWxpdHlMaW5lRm9ySW5kZXhBdHRyaWJ1
dGVGb3JQYXJhbWV0ZXI6KGlkKXBhcmFtZXRlcjsKLS0gKE5TVmFsdWUgKilhY2Nlc3NpYmlsaXR5
UmFuZ2VGb3JMaW5lQXR0cmlidXRlRm9yUGFyYW1ldGVyOihpZClwYXJhbWV0ZXI7Ci0tIChOU1N0
cmluZyAqKWFjY2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjoo
aWQpcGFyYW1ldGVyOwotLSAoTlNWYWx1ZSAqKWFjY2Vzc2liaWxpdHlCb3VuZHNGb3JSYW5nZUF0
dHJpYnV0ZUZvclBhcmFtZXRlcjooaWQpcGFyYW1ldGVyOwotCi1AZW5kCi0KLSNlbmRpZgotCi0j
ZW5kaWYgLy8gRGVwcmVjYXRlZFBERkxheWVyQ29udHJvbGxlclNQSV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4u
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvRGVwcmVjYXRlZFBERlBs
dWdpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTUyNmJjNTZhZWIxZGQ2N2Ni
YTgzZmQ1MmFkOTA1MTQwNjJkY2ZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvRGVwcmVj
YXRlZFBERlBsdWdpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERlcHJlY2F0ZWRQREZQbHVnaW5faAotI2RlZmluZSBE
ZXByZWNhdGVkUERGUGx1Z2luX2gKLQotI2luY2x1ZGUgIlBERktpdEltcG9ydHMuaCIKLQotI2lm
IEVOQUJMRShQREZLSVRfUExVR0lOKSAmJiBVU0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQotCi0j
aW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSAiV2ViRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJI
aXRUZXN0UmVzdWx0RGF0YS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQWZmaW5lVHJhbnNmb3JtLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9GaW5kT3B0aW9ucy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsYWJsZUFyZWEuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLXR5cGVkZWYgY29u
c3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwotdHlwZWRlZiBzdHJ1Y3Qg
T3BhcXVlSlNWYWx1ZSogSlNPYmplY3RSZWY7Ci10eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVK
U1ZhbHVlKiBKU1ZhbHVlUmVmOwotCi1PQkpDX0NMQVNTIE5TQXJyYXk7Ci1PQkpDX0NMQVNTIE5T
QXR0cmlidXRlZFN0cmluZzsKLU9CSkNfQ0xBU1MgTlNEYXRhOwotT0JKQ19DTEFTUyBOU1N0cmlu
ZzsKLU9CSkNfQ0xBU1MgUERGQW5ub3RhdGlvbjsKLU9CSkNfQ0xBU1MgUERGTGF5ZXJDb250cm9s
bGVyOwotT0JKQ19DTEFTUyBQREZTZWxlY3Rpb247Ci1PQkpDX0NMQVNTIFdLUERGUGx1Z2luQWNj
ZXNzaWJpbGl0eU9iamVjdDsKLU9CSkNfQ0xBU1MgV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0
ZTsKLQotbmFtZXNwYWNlIElQQyB7Ci1jbGFzcyBEYXRhUmVmZXJlbmNlOwotfQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBFbGVtZW50Owotc3RydWN0IFBsdWdpbkluZm87Ci19Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBQREZQbHVnaW5Bbm5vdGF0aW9uOwotY2xhc3MgUERG
UGx1Z2luUGFzc3dvcmRGaWVsZDsKLWNsYXNzIFBsdWdpblZpZXc7Ci1jbGFzcyBXZWJGcmFtZTsK
LQotY2xhc3MgUERGUGx1Z2luIGZpbmFsIDogcHVibGljIFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxQREZQbHVnaW4+IGNy
ZWF0ZShXZWJGcmFtZSopOwotICAgIH5QREZQbHVnaW4oKTsKLQotICAgIHN0YXRpYyBXZWJDb3Jl
OjpQbHVnaW5JbmZvIHBsdWdpbkluZm8oKTsKLQotICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAgdm9pZCBkaWRNdXRhdGVQREZEb2N1bWVu
dCgpIHsgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQgPSB0cnVlOyB9Ci0KLSAgICB2b2lkIHBhaW50
Q29udHJvbEZvckxheWVySW5Db250ZXh0KENBTGF5ZXIgKiwgQ0dDb250ZXh0UmVmKTsKLSAgICB2
b2lkIHNldEFjdGl2ZUFubm90YXRpb24oUERGQW5ub3RhdGlvbiAqKTsKLSAgICAKLSAgICB1c2lu
ZyBTY3JvbGxhYmxlQXJlYTo6bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkOwotICAgIHZvaWQg
bm90aWZ5Q29udGVudFNjYWxlRmFjdG9yQ2hhbmdlZChDR0Zsb2F0IHNjYWxlRmFjdG9yKTsKLSAg
ICB2b2lkIG5vdGlmeURpc3BsYXlNb2RlQ2hhbmdlZChpbnQpOwotCi0gICAgdm9pZCBub3RpZnlT
ZWxlY3Rpb25DaGFuZ2VkKFBERlNlbGVjdGlvbiAqKTsKLSAgICB2b2lkIG5vdGlmeUN1cnNvckNo
YW5nZWQodWludDY0X3QgLyogUERGTGF5ZXJDb250cm9sbGVyQ3Vyc29yVHlwZSAqLyk7Ci0KLSAg
ICB2b2lkIGNsaWNrZWRMaW5rKE5TVVJMICopOwotICAgIHZvaWQgc2F2ZVRvUERGKCk7Ci0gICAg
dm9pZCBvcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCk7Ci0gICAgdm9pZCB3cml0ZUl0ZW1zVG9Q
YXN0ZWJvYXJkKE5TU3RyaW5nICpwYXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsIE5TQXJy
YXkgKnR5cGVzKTsKLSAgICB2b2lkIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZyhO
U0F0dHJpYnV0ZWRTdHJpbmcgKiwgQ0dQb2ludCk7Ci0gICAgdm9pZCBwZXJmb3JtV2ViU2VhcmNo
KE5TU3RyaW5nICopOwotICAgIHZvaWQgcGVyZm9ybVNwb3RsaWdodFNlYXJjaChOU1N0cmluZyAq
KTsKLQotICAgIHZvaWQgZm9jdXNOZXh0QW5ub3RhdGlvbigpOwotICAgIHZvaWQgZm9jdXNQcmV2
aW91c0Fubm90YXRpb24oKTsKLQotICAgIHZvaWQgYXR0ZW1wdFRvVW5sb2NrUERGKGNvbnN0IFN0
cmluZyYgcGFzc3dvcmQpOwotCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRGcm9tUERG
Vmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGNvbnN0OwotICAgIFdlYkNv
cmU6OkludFJlY3QgYm91bmRzT25TY3JlZW4oKSBjb25zdDsKLSAgICAKLSAgICBib29sIHNob3dD
b250ZXh0TWVudUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLQotICAgIFN0cmlu
ZyBsb29rdXBUZXh0QXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViSGl0
VGVzdFJlc3VsdERhdGEmLCBQREZTZWxlY3Rpb24gKiosIE5TRGljdGlvbmFyeSAqKikgY29uc3Q7
Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3RGb3JTZWxlY3Rpb25JblJvb3RWaWV3KFBERlNl
bGVjdGlvbiAqKSBjb25zdDsKLQotICAgIENHRmxvYXQgc2NhbGVGYWN0b3IoKSBjb25zdDsKLQot
ICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgUERG
UGx1Z2luKFdlYkZyYW1lKik7Ci0KLSAgICAvLyBQbHVnaW4gZnVuY3Rpb25zLgotICAgIGJvb2wg
aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXN0cm95
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKSBvdmVy
cmlkZSB7IH0KLSAgICB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmKSBvdmVycmlkZTsKLSAgICBib29sIHN1cHBvcnRzU25hcHNob3R0aW5nKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNu
YXBzaG90KCkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5ZXIoKSBvdmVy
cmlkZTsKLSAgICBib29sIGlzVHJhbnNwYXJlbnQoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQotICAgIGJvb2wgd2FudHNXaGVlbEV2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdp
blNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pIG92ZXJyaWRlOwotICAg
IHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZv
aWQgdmlzaWJpbGl0eURpZENoYW5nZShib29sKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGZyYW1l
RGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpIG92ZXJy
aWRlOwotICAgIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwg
Y29uc3QgU3RyaW5nJiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RyZWFtV2lsbFNlbmRS
ZXF1ZXN0KHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBXZWJDb3JlOjpVUkwmIHJlcXVlc3RVUkws
IGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVzcG9uc2VVUkwsIGludCByZXNwb25zZVN0YXR1cykgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCBzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3Ry
ZWFtSUQsIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxl
bmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKSBv
dmVycmlkZTsKLSAgICB2b2lkIHN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlE
LCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKSBvdmVycmlkZTsKLSAgICB2b2lk
IHN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKSBvdmVy
cmlkZTsKLSAgICB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJD
b3JlOjpVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxh
c3RNb2RpZmllZFRpbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgV1RGOjpT
dHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZU5hbWUpIG92ZXJyaWRl
OwotICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMs
IGludCBsZW5ndGgpIG92ZXJyaWRlOwotICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkRmluaXNoTG9h
ZGluZygpIG92ZXJyaWRlOwotICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0Nh
bmNlbGxlZCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1v
dXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2Vi
V2hlZWxFdmVudCYpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFuZGxlTW91c2VFbnRlckV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZU1vdXNlTGVhdmVF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBoYW5kbGVDb250
ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLSAgICBib29sIGhh
bmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpIG92ZXJyaWRlOwotICAg
IGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29u
c3QgU3RyaW5nJiBhcmd1bWVudCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0VkaXRpbmdDb21tYW5k
RW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBib29sIGhhbmRsZXNQYWdlU2Nh
bGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHJlcXVpcmVzVW5pZmllZFNjYWxl
RmFjdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgc2V0Rm9j
dXMoYm9vbCkgb3ZlcnJpZGUgeyB9Ci0gICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9i
amVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdl
ZChib29sKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKSBvdmVycmlk
ZSB7IH0KLSAgICB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICB2b2lkIHNlbmRDb21wbGV4VGV4dElucHV0
KGNvbnN0IFN0cmluZyYgdGV4dElucHV0KSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHNldExheWVy
SG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkgb3ZlcnJpZGUgeyB9Ci0gICAgV2ViQ29yZTo6
U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLmdldCgpOyB9Ci0gICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNh
bFNjcm9sbGJhcigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7
IH0KLSAgICB2b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZSB7
IH0KLSAgICB2b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKSBvdmVycmlkZSB7
IH0KLSAgICBib29sIGdldEZvcm1WYWx1ZShTdHJpbmcmIGZvcm1WYWx1ZSkgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGhhbmRsZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJl
Y3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KSBvdmVycmlkZTsKLSAgICBSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBsaXZlUmVzb3VyY2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgdm9pZCB3aWxsRGV0YXRjaFJlbmRlcmVyKCkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGlz
QmVpbmdBc3luY2hyb25vdXNseUluaXRpYWxpemVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KLQotICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmlu
dGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KLSAgICBOU09i
amVjdCAqYWNjZXNzaWJpbGl0eU9iamVjdCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdW5zaWdu
ZWQgY291bnRGaW5kTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgV2ViQ29yZTo6RmluZE9w
dGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpIG92ZXJyaWRlOwotICAgIGJvb2wgZmluZFN0
cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgV2ViQ29yZTo6RmluZE9wdGlvbnMsIHVuc2lnbmVk
IG1heE1hdGNoQ291bnQpIG92ZXJyaWRlOwotCi0gICAgUERGU2VsZWN0aW9uICpuZXh0TWF0Y2hG
b3JTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEJPT0wgc2VhcmNoRm9yd2FyZCwgQk9PTCBj
YXNlU2Vuc2l0aXZlLCBCT09MIHdyYXBTZWFyY2gsIFBERlNlbGVjdGlvbiAqaW5pdGlhbFNlbGVj
dGlvbiwgQk9PTCBzdGFydEluU2VsZWN0aW9uKTsKLQotICAgIGJvb2wgcGVyZm9ybURpY3Rpb25h
cnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsK
LSAgICBTdHJpbmcgZ2V0U2VsZWN0aW9uU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3Ry
aW5nIGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGV4aXN0aW5nU2VsZWN0aW9uQ29udGFpbnNQb2lu
dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29s
IHNob3VsZEFsbG93U2NyaXB0aW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBi
b29sIHNob3VsZEFsbG93TmF2aWdhdGlvbkZyb21EcmFncygpIG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICBib29sIHNob3VsZEFsd2F5c0F1dG9TdGFydCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KLQotICAgIC8vIFNjcm9sbGFibGVBcmVhIGZ1bmN0aW9ucy4KLSAgICBX
ZWJDb3JlOjpJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBvdmVycmlkZTsKLSAgICBX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBv
dmVycmlkZTsKLSAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJs
ZUFuY2VzdG9yKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIFdlYkNvcmU6OkludFJl
Y3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiA9IG51bGxwdHIpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OlNjcm9sbE9mZnNl
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6
U2Nyb2xsYmFyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJy
aWRlOwotICAgIFdlYkNvcmU6OkludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRl
czsgfQotICAgIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKSBj
b25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQotICAgIGludCBzY3JvbGxPZmZzZXQoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OlNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6U2Nyb2xsUG9zaXRpb24gbWluaW11
bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6U2Nyb2xsUG9z
aXRpb24gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgV2ViQ29y
ZTo6SW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2l6ZTsg
fQotICAgIFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9wZGZEb2N1bWVudFNpemU7IH0KLSAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hvcml6b250YWxTY3Jv
bGxiYXIuZ2V0KCk7IH0KLSAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFy
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsgfQot
ICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfSAvLyBJZiB3ZSByZXR1cm4gdHJ1ZSwgU2Nyb2xsQW5pbWF0b3JNYWMg
d2lsbCBrZWVwIGN5Y2xpbmcgYSB0aW1lciBmb3JldmVyLCB3YWl0aW5nIGZvciBhIGdvb2QgdGlt
ZSB0byBhbmltYXRlLgotICAgIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKFdlYkNvcmU6OlNj
cm9sbGJhclN0eWxlLCBib29sIGZvcmNlVXBkYXRlKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJ
bnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBXZWJDb3Jl
OjpTY3JvbGxiYXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25z
dCBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXImLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdCBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRQb2lu
dCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgV2ViQ29yZTo6U2Ny
b2xsYmFyJiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdCBv
dmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyJiwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGZvcmNlVXBkYXRl
U2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgLy8gUERGUGx1Z2luIGZ1bmN0aW9ucy4KLSAgICB2b2lkIHVwZGF0ZVNjcm9s
bGJhcnMoKTsKLSAgICBSZWY8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2Vi
Q29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihX
ZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0gICAgdm9pZCBwZGZEb2N1bWVudERpZExv
YWQoKTsKLSAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwotICAgIHZvaWQgY29tcHV0ZVBh
Z2VCb3hlcygpOwotICAgIHZvaWQgY2FsY3VsYXRlU2l6ZXMoKTsKLSAgICB2b2lkIHJ1blNjcmlw
dHNJblBERkRvY3VtZW50KCk7Ci0KLSAgICBOU0V2ZW50ICpuc0V2ZW50Rm9yV2ViTW91c2VFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZy
b21QbHVnaW5Ub1BERlZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKLSAgICBX
ZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBE
RlZpZXdUb1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgCi0g
ICAgYm9vbCBzdXBwb3J0c0Zvcm1zKCk7Ci0gICAgYm9vbCBpc0Z1bGxGcmFtZVBsdWdpbigpIGNv
bnN0OwotCi0gICAgdm9pZCB1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7Ci0KLSAg
ICB2b2lkIGNyZWF0ZVBhc3N3b3JkRW50cnlGb3JtKCk7Ci0KLSAgICBSZXRhaW5QdHI8UERGRG9j
dW1lbnQ+IHBkZkRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9wZGZEb2N1bWVudDsgfQotICAg
IHZvaWQgc2V0UERGRG9jdW1lbnQoUmV0YWluUHRyPFBERkRvY3VtZW50PiBkb2N1bWVudCkgeyBt
X3BkZkRvY3VtZW50ID0gZG9jdW1lbnQ7IH0KLQotICAgIFdlYkNvcmU6OkludFNpemUgcGRmRG9j
dW1lbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9wZGZEb2N1bWVudFNpemU7IH0KLSAgICB2b2lk
IHNldFBERkRvY3VtZW50U2l6ZShXZWJDb3JlOjpJbnRTaXplIHNpemUpIHsgbV9wZGZEb2N1bWVu
dFNpemUgPSBzaXplOyB9Ci0KLSAgICBOU0RhdGEgKmxpdmVEYXRhKCkgY29uc3Q7Ci0gICAgTlNE
YXRhICpyYXdEYXRhKCkgY29uc3QgeyByZXR1cm4gKE5TRGF0YSAqKW1fZGF0YS5nZXQoKTsgfQot
Ci0gICAgV2ViRnJhbWUqIHdlYkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQotCi0j
aWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTMwMAotICAgIGVudW0gVXBk
YXRlQ3Vyc29yTW9kZSB7Ci0gICAgICAgIFVwZGF0ZUlmTmVlZGVkLAotICAgICAgICBGb3JjZVVw
ZGF0ZQotICAgIH07Ci0KLSAgICBlbnVtIEhpdFRlc3RSZXN1bHQgewotICAgICAgICBOb25lLAot
ICAgICAgICBUZXh0Ci0gICAgfTsKLQotICAgIHZvaWQgdXBkYXRlQ3Vyc29yKGNvbnN0IFdlYk1v
dXNlRXZlbnQmLCBVcGRhdGVDdXJzb3JNb2RlID0gVXBkYXRlSWZOZWVkZWQpOwotI2VuZGlmCi0K
LSAgICBKU09iamVjdFJlZiBtYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmKTsKLSAgICBzdGF0aWMg
SlNWYWx1ZVJlZiBqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwotCi0gICAgdm9p
ZCBjb252ZXJ0UG9zdFNjcmlwdERhdGFJZk5lZWRlZCgpOwotCi0gICAgLy8gUmVndWxhciBwbHVn
LWlucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2aWV3LCBidXQgd2UgYWRkIHNjcm9sbGJhcnMgdG8g
ZW1iZWRkaW5nIEZyYW1lVmlldyBmb3IgcHJvcGVyIGV2ZW50IGhhbmRsaW5nLgotICAgIFBsdWdp
blZpZXcqIHBsdWdpblZpZXcoKTsKLSAgICBjb25zdCBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3KCkg
Y29uc3Q7Ci0KLSAgICBXZWJGcmFtZSogbV9mcmFtZTsKLQotICAgIGJvb2wgbV9pc1Bvc3RTY3Jp
cHQ7Ci0gICAgYm9vbCBtX3BkZkRvY3VtZW50V2FzTXV0YXRlZDsKLQotICAgIFdlYkNvcmU6Oklu
dFNpemUgbV9zY3JvbGxPZmZzZXQ7Ci0KLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9jb250YWlu
ZXJMYXllcjsKLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9jb250ZW50TGF5ZXI7Ci0gICAgUmV0
YWluUHRyPENBTGF5ZXI+IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyOwotICAgIFJldGFpblB0
cjxDQUxheWVyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXI7Ci0gICAgUmV0YWluUHRyPENBTGF5
ZXI+IG1fc2Nyb2xsQ29ybmVyTGF5ZXI7Ci0gICAgUmV0YWluUHRyPFBERkxheWVyQ29udHJvbGxl
cj4gbV9wZGZMYXllckNvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPFdLUERGUGx1Z2luQWNjZXNz
aWJpbGl0eU9iamVjdD4gbV9hY2Nlc3NpYmlsaXR5T2JqZWN0OwotICAgIAotICAgIFJlZlB0cjxQ
REZQbHVnaW5Bbm5vdGF0aW9uPiBtX2FjdGl2ZUFubm90YXRpb247Ci0gICAgUmVmUHRyPFBERlBs
dWdpblBhc3N3b3JkRmllbGQ+IG1fcGFzc3dvcmRGaWVsZDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
RWxlbWVudD4gbV9hbm5vdGF0aW9uQ29udGFpbmVyOwotCi0gICAgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybTsKLSAgICBXZWJNb3VzZUV2ZW50IG1f
bGFzdE1vdXNlRXZlbnQ7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgbV9sYXN0TW91c2VQb3NpdGlv
bkluUGx1Z2luQ29vcmRpbmF0ZXM7Ci0KLSAgICBTdHJpbmcgbV90ZW1wb3JhcnlQREZVVUlEOwot
Ci0gICAgU3RyaW5nIG1fbGFzdEZvdW5kU3RyaW5nOwotCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA8IDEwMTMwMAotICAgIEhpdFRlc3RSZXN1bHQgbV9sYXN0SGl0VGVzdFJl
c3VsdDsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdh
dGU+IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU7Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXpl
IG1fc2l6ZTsKLQotICAgIFdlYkNvcmU6OlVSTCBtX3NvdXJjZVVSTDsKLQotICAgIFN0cmluZyBt
X3N1Z2dlc3RlZEZpbGVuYW1lOwotICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2Rh
dGE7Ci0KLSAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7Ci0gICAgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+IG1fcGFnZUJveGVzOwotICAgIFdlYkNvcmU6OkludFNpemUg
bV9wZGZEb2N1bWVudFNpemU7IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCi0KLSAgICBS
ZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX2hvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1BMVUdJTihQREZQbHVn
aW4sIFBERlBsdWdpblR5cGUpCi0KLSNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKLQot
I2VuZGlmIC8vIERlcHJlY2F0ZWRQREZQbHVnaW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGIzMmM5OTIzMTc4Yjk5NDBhNjZmOTEyZmY2
NGVlMWUwNzQzNzEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvRGVwcmVjYXRlZFBERlBs
dWdpbi5tbQorKysgL2Rldi9udWxsCkBAIC0xLDIxMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiRGVwcmVjYXRlZFBE
RlBsdWdpbi5oIgotCi0jaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmIFVTRShERVBSRUNBVEVE
X1BERl9QTFVHSU4pCi0KLSNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzLmgiCi0jaW1wb3J0ICJEYXRh
UmVmZXJlbmNlLmgiCi0jaW1wb3J0ICJQREZBbm5vdGF0aW9uVGV4dFdpZGdldERldGFpbHMuaCIK
LSNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxlclNQSS5oIgotI2ltcG9ydCAiUERGUGx1Z2luQW5u
b3RhdGlvbi5oIgotI2ltcG9ydCAiUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5oIgotI2ltcG9ydCAi
UGx1Z2luVmlldy5oIgotI2ltcG9ydCAiV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5o
IgotI2ltcG9ydCAiV0tQYWdlRmluZE1hdGNoZXNDbGllbnQuaCIKLSNpbXBvcnQgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgotI2ltcG9ydCAiV2ViRXZlbnQuaCIKLSNpbXBvcnQgIldlYkV2ZW50
Q29udmVyc2lvbi5oIgotI2ltcG9ydCAiV2ViUGFnZS5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5
TWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VzLmgiCi0jaW1w
b3J0ICJXZWJQcm9jZXNzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJp
bmdSZWZDRi5oPgotI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgotI2ltcG9ydCA8UXVhcnR6Q29y
ZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgotI2lt
cG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0RpY3Rpb25hcnlMb29rdXAuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1l
bnRMb2FkZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRm9ybVN0YXRlLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxQbHVnSW5FbGVt
ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvTWFpbkZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvUGFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRG9jdW1l
bnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvU2Nyb2xsQW5pbWF0b3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhl
bWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVVVJ
RC5oPgotI2ltcG9ydCA8V2ViQ29yZS9XaGVlbEV2ZW50VGVzdFRyaWdnZXIuaD4KLSNpbXBvcnQg
PFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgotI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi0vLyBTZXQgb3ZlcmZsb3c6IGhpZGRlbiBvbiB0
aGUgYW5ub3RhdGlvbiBjb250YWluZXIgc28gPGlucHV0PiBlbGVtZW50cyBzY3JvbGxlZCBvdXQg
b2YgdmlldyBkb24ndCBzaG93Ci0vLyBzY3JvbGxiYXJzIG9uIHRoZSBib2R5LiBXZSBjYW4ndCBh
ZGQgYW5ub3RhdGlvbnMgZGlyZWN0bHkgdG8gdGhlIGJvZHksIGJlY2F1c2Ugb3ZlcmZsb3c6IGhp
ZGRlbiBvbiB0aGUgYm9keQotLy8gd2lsbCBicmVhayBydWJiZXItYmFuZGluZy4KLXN0YXRpYyBj
b25zdCBjaGFyKiBhbm5vdGF0aW9uU3R5bGUgPQotIiNhbm5vdGF0aW9uQ29udGFpbmVyIHsiCi0i
ICAgIG92ZXJmbG93OiBoaWRkZW47ICIKLSIgICAgcG9zaXRpb246IGFic29sdXRlOyAiCi0iICAg
IHBvaW50ZXItZXZlbnRzOiBub25lOyAiCi0iICAgIHRvcDogMDsgIgotIiAgICBsZWZ0OiAwOyAi
Ci0iICAgIHJpZ2h0OiAwOyAiCi0iICAgIGJvdHRvbTogMDsgIgotIiAgICBkaXNwbGF5OiAtd2Vi
a2l0LWJveDsgIgotIiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOyAiCi0iICAgIC13ZWJr
aXQtYm94LXBhY2s6IGNlbnRlcjsgIgotIn0gIgotIi5hbm5vdGF0aW9uIHsgIgotIiAgICBwb3Np
dGlvbjogYWJzb2x1dGU7ICIKLSIgICAgcG9pbnRlci1ldmVudHM6IGF1dG87ICIKLSJ9ICIKLSJ0
ZXh0YXJlYS5hbm5vdGF0aW9uIHsgIgotIiAgICByZXNpemU6IG5vbmU7ICIKLSJ9ICIKLSJpbnB1
dC5hbm5vdGF0aW9uW3R5cGU9J3Bhc3N3b3JkJ10geyAiCi0iICAgIHBvc2l0aW9uOiBzdGF0aWM7
ICIKLSIgICAgd2lkdGg6IDIwMHB4OyAiCi0iICAgIG1hcmdpbi10b3A6IDEwMHB4OyAiCi0ifSAi
OwotCi0vLyBJbiBub24tY29udGludW91cyBtb2RlcywgYSBzaW5nbGUgc2Nyb2xsIGV2ZW50IHdp
dGggYSBtYWduaXR1ZGUgb2YgPj0gMjBweAotLy8gd2lsbCBqdW1wIHRvIHRoZSBuZXh0IG9yIHBy
ZXZpb3VzIHBhZ2UsIHRvIG1hdGNoIFBERktpdCBiZWhhdmlvci4KLXN0YXRpYyBjb25zdCBpbnQg
ZGVmYXVsdFNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0gMjA7Ci0KLUBpbnRl
cmZhY2UgV0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0IDogTlNPYmplY3QgewotICAgIFBE
RkxheWVyQ29udHJvbGxlciAqX3BkZkxheWVyQ29udHJvbGxlcjsKLSAgICBOU09iamVjdCAqX3Bh
cmVudDsKLSAgICBXZWJLaXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsKLX0KLQotQHByb3BlcnR5
IChhc3NpZ24pIFBERkxheWVyQ29udHJvbGxlciAqcGRmTGF5ZXJDb250cm9sbGVyOwotQHByb3Bl
cnR5IChhc3NpZ24pIE5TT2JqZWN0ICpwYXJlbnQ7Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViS2l0
OjpQREZQbHVnaW4qIHBkZlBsdWdpbjsKLQotLSAoaWQpaW5pdFdpdGhQREZQbHVnaW46KFdlYktp
dDo6UERGUGx1Z2luICopcGx1Z2luOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1BERlBs
dWdpbkFjY2Vzc2liaWxpdHlPYmplY3QKLQotQHN5bnRoZXNpemUgcGRmTGF5ZXJDb250cm9sbGVy
PV9wZGZMYXllckNvbnRyb2xsZXI7Ci1Ac3ludGhlc2l6ZSBwYXJlbnQ9X3BhcmVudDsKLUBzeW50
aGVzaXplIHBkZlBsdWdpbj1fcGRmUGx1Z2luOwotCi0tIChpZClpbml0V2l0aFBERlBsdWdpbjoo
V2ViS2l0OjpQREZQbHVnaW4gKilwbHVnaW4KLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIF9wZGZQbHVnaW4gPSBwbHVnaW47Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkCi17
Ci0gICAgcmV0dXJuIE5POwotfQotCi0tIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
KE5TU3RyaW5nICopYXR0cmlidXRlCi17Ci0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOk5TQWNjZXNzaWJpbGl0eVBhcmVudEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBfcGFy
ZW50OwotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlW
YWx1ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nl
c3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1
cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0dHJpYnV0
ZV07Ci0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNl
bGVjdGVkVGV4dFJhbmdlQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250
cm9sbGVyIGFjY2Vzc2liaWxpdHlTZWxlY3RlZFRleHRSYW5nZUF0dHJpYnV0ZV07Ci0gICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eU51bWJlck9mQ2hhcmFj
dGVyc0F0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nl
c3NpYmlsaXR5TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0cmlidXRlXTsKLSAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0
cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxp
dHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVdOwotICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZV0p
Ci0gICAgICAgIHJldHVybiBbX3BhcmVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6TlNB
Y2Nlc3NpYmlsaXR5VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1dGVdOwotICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRlXSkKLSAgICAg
ICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlSb2xlQXR0cmlidXRl
XTsKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5Um9s
ZURlc2NyaXB0aW9uQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtfcGRmTGF5ZXJDb250cm9s
bGVyIGFjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25BdHRyaWJ1dGVdOwotICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlXaW5kb3dBdHRyaWJ1dGVdKQot
ICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOk5TQWNj
ZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZV07Ci0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05T
VmFsdWUgdmFsdWVXaXRoU2l6ZTpfcGRmUGx1Z2luLT5ib3VuZHNPblNjcmVlbigpLnNpemUoKV07
Ci0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUZvY3Vz
ZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW19wYXJlbnQgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOk5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGVdOwotICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXSkK
LSAgICAgICAgcmV0dXJuIFtfcGFyZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpOU0Fj
Y2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlXTsKLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdKQotICAgICAgICByZXR1
cm4gW05TVmFsdWUgdmFsdWVXaXRoUG9pbnQ6X3BkZlBsdWdpbi0+Ym91bmRzT25TY3JlZW4oKS5s
b2NhdGlvbigpXTsKLQotICAgIHJldHVybiAwOwotfQotCi0tIChpZClhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6KE5TU3RyaW5nICopYXR0cmlidXRlIGZvclBhcmFtZXRlcjooaWQpcGFyYW1l
dGVyCi17Ci0gICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0
eUJvdW5kc0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgTlNSZWN0
IGJvdW5kc0luUERGVmlld0Nvb3JkaW5hdGVzID0gW1tfcGRmTGF5ZXJDb250cm9sbGVyIGFjY2Vz
c2liaWxpdHlCb3VuZHNGb3JSYW5nZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjpwYXJhbWV0ZXJdIHJl
Y3RWYWx1ZV07Ci0gICAgICAgIE5TUmVjdCBib3VuZHNJblNjcmVlbkNvb3JkaW5hdGVzID0gX3Bk
ZlBsdWdpbi0+Y29udmVydEZyb21QREZWaWV3VG9TY3JlZW4oYm91bmRzSW5QREZWaWV3Q29vcmRp
bmF0ZXMpOwotICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpib3VuZHNJblNj
cmVlbkNvb3JkaW5hdGVzXTsKLSAgICB9Ci0KLSAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6TlNBY2Nlc3NpYmlsaXR5TGluZUZvckluZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0p
Ci0gICAgICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmlsaXR5TGluZUZv
ckluZGV4QXR0cmlidXRlRm9yUGFyYW1ldGVyOnBhcmFtZXRlcl07Ci0gICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVJhbmdlRm9yTGluZVBhcmFtZXRlcml6
ZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgYWNjZXNz
aWJpbGl0eVJhbmdlRm9yTGluZUF0dHJpYnV0ZUZvclBhcmFtZXRlcjpwYXJhbWV0ZXJdOwotICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTdHJpbmdGb3JS
YW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW19wZGZMYXllckNv
bnRyb2xsZXIgYWNjZXNzaWJpbGl0eVN0cmluZ0ZvclJhbmdlQXR0cmlidXRlRm9yUGFyYW1ldGVy
OnBhcmFtZXRlcl07Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLSAoQ1BSZWFkaW5nTW9kZWwgKily
ZWFkaW5nTW9kZWwKLXsKLSAgICByZXR1cm4gW19wZGZMYXllckNvbnRyb2xsZXIgcmVhZGluZ01v
ZGVsXTsKLX0KLQotLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcwotewot
ICAgIHN0YXRpYyBOU0FycmF5ICphdHRyaWJ1dGVOYW1lcyA9IDA7Ci0KLSAgICBpZiAoIWF0dHJp
YnV0ZU5hbWVzKSB7Ci0gICAgICAgIGF0dHJpYnV0ZU5hbWVzID0gQFtOU0FjY2Vzc2liaWxpdHlW
YWx1ZUF0dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dEF0
dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNlbGVjdGVkVGV4dFJhbmdlQXR0
cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5TnVtYmVyT2ZDaGFyYWN0ZXJzQXR0
cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdl
QXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5UGFyZW50QXR0cmlidXRlLAot
ICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5Um9sZUF0dHJpYnV0ZSwKLSAgICAgICAgICAgIE5T
QWNjZXNzaWJpbGl0eVdpbmRvd0F0dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0
eVRvcExldmVsVUlFbGVtZW50QXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5
Um9sZURlc2NyaXB0aW9uQXR0cmlidXRlLAotICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5U2l6
ZUF0dHJpYnV0ZSwKLSAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUZvY3VzZWRBdHRyaWJ1dGUs
Ci0gICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlFbmFibGVkQXR0cmlidXRlLAotICAgICAgICAg
ICAgTlNBY2Nlc3NpYmlsaXR5UG9zaXRpb25BdHRyaWJ1dGVdOwotICAgICAgICBbYXR0cmlidXRl
TmFtZXMgcmV0YWluXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXR0cmlidXRlTmFtZXM7Ci19Ci0K
LS0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QWN0aW9uTmFtZXMKLXsKLSAgICBzdGF0aWMgTlNB
cnJheSAqYWN0aW9uTmFtZXMgPSAwOwotICAgIAotICAgIGlmICghYWN0aW9uTmFtZXMpCi0gICAg
ICAgIGFjdGlvbk5hbWVzID0gW1tOU0FycmF5IGFycmF5V2l0aE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlTaG93TWVudUFjdGlvbl0gcmV0YWluXTsKLSAgICAKLSAgICByZXR1cm4gYWN0aW9uTmFtZXM7
Ci19Ci0KLS0gKHZvaWQpYWNjZXNzaWJpbGl0eVBlcmZvcm1BY3Rpb246KE5TU3RyaW5nICopYWN0
aW9uCi17Ci0gICAgaWYgKFthY3Rpb24gaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVNo
b3dNZW51QWN0aW9uXSkKLSAgICAgICAgX3BkZlBsdWdpbi0+c2hvd0NvbnRleHRNZW51QXRQb2lu
dChJbnRSZWN0KEludFBvaW50KCksIF9wZGZQbHVnaW4tPnNpemUoKSkuY2VudGVyKCkpOwotfQot
Ci0tIChCT09MKWFjY2Vzc2liaWxpdHlJc0F0dHJpYnV0ZVNldHRhYmxlOihOU1N0cmluZyAqKWF0
dHJpYnV0ZQotewotICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmlsaXR5
SXNBdHRyaWJ1dGVTZXR0YWJsZTphdHRyaWJ1dGVdOwotfQotCi0tICh2b2lkKWFjY2Vzc2liaWxp
dHlTZXRWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJpYnV0ZQot
ewotICAgIHJldHVybiBbX3BkZkxheWVyQ29udHJvbGxlciBhY2Nlc3NpYmlsaXR5U2V0VmFsdWU6
dmFsdWUgZm9yQXR0cmlidXRlOmF0dHJpYnV0ZV07Ci19Ci0KLS0gKE5TQXJyYXkgKilhY2Nlc3Np
YmlsaXR5UGFyYW1ldGVyaXplZEF0dHJpYnV0ZU5hbWVzCi17Ci0gICAgcmV0dXJuIFtfcGRmTGF5
ZXJDb250cm9sbGVyIGFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXNdOwot
fQotCi0tIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudAotewotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAotewot
ICAgIHJldHVybiBzZWxmOwotfQotCi1AZW5kCi0KLQotQGludGVyZmFjZSBXS1BERlBsdWdpblNj
cm9sbGJhckxheWVyIDogQ0FMYXllciB7Ci0gICAgV2ViS2l0OjpQREZQbHVnaW4qIF9wZGZQbHVn
aW47Ci19Ci0KLUBwcm9wZXJ0eSAoYXNzaWduKSBXZWJLaXQ6OlBERlBsdWdpbiogcGRmUGx1Z2lu
OwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1BERlBsdWdpblNjcm9sbGJhckxheWVyCi0K
LUBzeW50aGVzaXplIHBkZlBsdWdpbj1fcGRmUGx1Z2luOwotCi0tIChpZClpbml0V2l0aFBERlBs
dWdpbjooV2ViS2l0OjpQREZQbHVnaW4gKilwbHVnaW4KLXsKLSAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBfcGRmUGx1Z2luID0g
cGx1Z2luOwotICAgIAotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpZDxDQUFjdGlvbj4pYWN0
aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZv
aWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAotewotICAgIF9wZGZQbHVnaW4tPnBh
aW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KHNlbGYsIGN0eCk7Ci19Ci0KLUBlbmQKLQotQGlu
dGVyZmFjZSBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3Q8UERGTGF5ZXJD
b250cm9sbGVyRGVsZWdhdGU+IHsKLSAgICBXZWJLaXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsK
LX0KLQotQHByb3BlcnR5IChhc3NpZ24pIFdlYktpdDo6UERGUGx1Z2luKiBwZGZQbHVnaW47Ci0K
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUKLQot
QHN5bnRoZXNpemUgcGRmUGx1Z2luPV9wZGZQbHVnaW47Ci0KLS0gKGlkKWluaXRXaXRoUERGUGx1
Z2luOihXZWJLaXQ6OlBERlBsdWdpbiAqKXBsdWdpbgotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIF9wZGZQbHVnaW4gPSBw
bHVnaW47Ci0gICAgCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpdXBkYXRlU2Nyb2xs
UG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb24KLXsKLSAgICBfcGRmUGx1Z2luLT5ub3RpZnlT
Y3JvbGxQb3NpdGlvbkNoYW5nZWQoSW50UG9pbnQobmV3UG9zaXRpb24pKTsKLX0KLQotLSAodm9p
ZCl3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOihOU0FycmF5ICopaXRlbXMgd2l0aFR5cGVzOihOU0Fy
cmF5ICopdHlwZXMKLXsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICBf
cGRmUGx1Z2luLT53cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TR2VuZXJhbFBib2FyZCwgaXRlbXMs
IHR5cGVzKTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLX0KLQotLSAodm9pZClzaG93
RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKXN0cmlu
ZyBhdFBvaW50OihDR1BvaW50KXBvaW50Ci17Ci0gICAgX3BkZlBsdWdpbi0+c2hvd0RlZmluaXRp
b25Gb3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmluZywgcG9pbnQpOwotfQotCi0tICh2b2lkKXBlcmZv
cm1XZWJTZWFyY2g6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgX3BkZlBsdWdpbi0+cGVyZm9y
bVdlYlNlYXJjaChzdHJpbmcpOwotfQotCi0tICh2b2lkKXBlcmZvcm1TcG90bGlnaHRTZWFyY2g6
KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgX3BkZlBsdWdpbi0+cGVyZm9ybVNwb3RsaWdodFNl
YXJjaChzdHJpbmcpOwotfQotCi0tICh2b2lkKW9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24KLXsK
LSAgICBfcGRmUGx1Z2luLT5vcGVuV2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCk7Ci19Ci0KLS0gKHZv
aWQpc2F2ZVRvUERGCi17Ci0gICAgX3BkZlBsdWdpbi0+c2F2ZVRvUERGKCk7Ci19Ci0KLS0gKHZv
aWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRy
b2xsZXIgY2xpY2tlZExpbmtXaXRoVVJMOihOU1VSTCAqKXVybAotewotICAgIF9wZGZQbHVnaW4t
PmNsaWNrZWRMaW5rKHVybCk7Ci19Ci0KLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZM
YXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2hhbmdlQWN0aXZlQW5ub3Rh
dGlvbjooUERGQW5ub3RhdGlvbiAqKWFubm90YXRpb24KLXsKLSAgICBfcGRmUGx1Z2luLT5zZXRB
Y3RpdmVBbm5vdGF0aW9uKGFubm90YXRpb24pOwotfQotCi0tICh2b2lkKXBkZkxheWVyQ29udHJv
bGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZUNv
bnRlbnRTY2FsZUZhY3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcgotewotICAgIF9wZGZQbHVnaW4t
Pm5vdGlmeUNvbnRlbnRTY2FsZUZhY3RvckNoYW5nZWQoc2NhbGVGYWN0b3IpOwotfQotCi0tICh2
b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250
cm9sbGVyIGRpZENoYW5nZURpc3BsYXlNb2RlOihpbnQpbW9kZQotewotICAgIF9wZGZQbHVnaW4t
Pm5vdGlmeURpc3BsYXlNb2RlQ2hhbmdlZChtb2RlKTsKLX0KLQotLSAodm9pZClwZGZMYXllckNv
bnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFu
Z2VTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbgotewotICAgIF9wZGZQbHVnaW4t
Pm5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoc2VsZWN0aW9uKTsKLX0KLQotLSAodm9pZClzZXRNb3Vz
ZUN1cnNvcjooUERGTGF5ZXJDb250cm9sbGVyQ3Vyc29yVHlwZSljdXJzb3JUeXBlCi17Ci0gICAg
X3BkZlBsdWdpbi0+bm90aWZ5Q3Vyc29yQ2hhbmdlZChjdXJzb3JUeXBlKTsKLX0KLQotQGVuZAot
Ci1AaW50ZXJmYWNlIFBERlZpZXdMYXlvdXQKLS0gKE5TUG9pbnQpY29udmVydFBvaW50OihOU1Bv
aW50KXBvaW50IHRvUGFnZTooUERGUGFnZSAqKXBhZ2UgZm9yU2NhbGVGYWN0b3I6KENHRmxvYXQp
c2NhbGVGYWN0b3I7Ci0tIChOU1JlY3QpY29udmVydFJlY3Q6KE5TUmVjdClyZWN0IGZyb21QYWdl
OihQREZQYWdlICopIHBhZ2UgZm9yU2NhbGVGYWN0b3I6KENHRmxvYXQpIHNjYWxlRmFjdG9yOwot
LSAoUERGUGFnZSAqKXBhZ2VOZWFyZXN0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgY3VycmVudFBhZ2U6
KFBERlBhZ2UgKiljdXJyZW50UGFnZTsKLUBlbmQKLQotc3RhdGljIGNvbnN0IGNoYXIqIHBvc3RT
Y3JpcHRNSU1FVHlwZSA9ICJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0IjsKLWNvbnN0IHVpbnQ2NF90
IHBkZkRvY3VtZW50UmVxdWVzdElEID0gMTsgLy8gUGx1Z2luQ29udHJvbGxlciBzdXBwb3J0cyBs
b2FkaW5nIG11bHRpcGxlIHN0cmVhbXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25lIGZvciBQREYuCi0K
LXN0YXRpYyB2b2lkIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRp
Y3Rpb25hcnlSZWYgc3VidHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQotewot
ICAgIENHUERGQXJyYXlSZWYgbmFtZXM7Ci0gICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5
KHN1YnRyZWUsICJOYW1lcyIsICZuYW1lcykpIHsKLSAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9
IENHUERGQXJyYXlHZXRDb3VudChuYW1lcykgLyAyOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG5hbWVDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmpl
Y3Q7Ci0gICAgICAgICAgICBDR1BERkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZv
YmplY3QpOwotICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChvYmplY3QpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDR1BERkFycmF5UmVmIGtpZHM7Ci0gICAgaWYg
KCFDR1BERkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdldENvdW50KGtp
ZHMpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkgewotICAgICAg
ICBDR1BERkRpY3Rpb25hcnlSZWYga2lkOwotICAgICAgICBpZiAoIUNHUERGQXJyYXlHZXREaWN0
aW9uYXJ5KGtpZHMsIGksICZraWQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGFw
cGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7Ci0gICAgfQot
fQotCi1zdGF0aWMgdm9pZCBnZXRBbGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERGRGljdGlvbmFy
eVJlZiB0cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCi17Ci0gICAgYXBw
ZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVlcyk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KENHUERGRG9jdW1lbnRSZWYg
cGRmRG9jdW1lbnQsIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiYgc2NyaXB0cykKLXsK
LSAgICBpZiAoIXBkZkRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR1BERkRpY3Rp
b25hcnlSZWYgcGRmQ2F0YWxvZyA9IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRvY3VtZW50
KTsKLSAgICBpZiAoIXBkZkNhdGFsb2cpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdldCB0
aGUgZGljdGlvbmFyeSBvZiBhbGwgZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KLSAgICBDR1BE
RkRpY3Rpb25hcnlSZWYgbmFtZXNEaWN0aW9uYXJ5OwotICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5
R2V0RGljdGlvbmFyeShwZGZDYXRhbG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gR2V0IHRoZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlw
dCIgbmFtZSB0cmVlLgotICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7
Ci0gICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwg
IkphdmFTY3JpcHQiLCAmamF2YVNjcmlwdE5hbWVUcmVlKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gVGhlIG5hbWVzIGFyZSBhcmJpdHJhcnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4g
dGhlIHZhbHVlcy4KLSAgICBWZWN0b3I8Q0dQREZPYmplY3RSZWY+IG9iamVjdHM7Ci0gICAgZ2V0
QWxsVmFsdWVzSW5QREZOYW1lVHJlZShqYXZhU2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOwotICAg
IHNpemVfdCBvYmplY3RDb3VudCA9IG9iamVjdHMuc2l6ZSgpOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7Ci0gICAgICAgIENHUERGRGljdGlvbmFyeVJl
ZiBqYXZhU2NyaXB0QWN0aW9uOwotICAgICAgICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUocmVp
bnRlcnByZXRfY2FzdDxDR1BERk9iamVjdFJlZj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVjdFR5
cGVEaWN0aW9uYXJ5LCAmamF2YVNjcmlwdEFjdGlvbikpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAvLyBBIEphdmFTY3JpcHQgYWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24gdHlw
ZSBvZiAiSmF2YVNjcmlwdCIuCi0gICAgICAgIGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7Ci0gICAg
ICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIsICZh
Y3Rpb25UeXBlKSB8fCBzdHJjbXAoYWN0aW9uVHlwZSwgIkphdmFTY3JpcHQiKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7Ci0gICAgICAg
IENGSW5kZXggbGVuZ3RoOwotICAgICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07Ci0gICAgICAg
IENHUERGU3RyaW5nUmVmIHN0cmluZzsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0
YTsKLSAgICAgICAgaWYgKENHUERGRGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9u
LCAiSlMiLCAmc3RyZWFtKSkgewotICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsK
LSAgICAgICAgICAgIGRhdGEgPSBhZG9wdENGKENHUERGU3RyZWFtQ29weURhdGEoc3RyZWFtLCAm
Zm9ybWF0KSk7Ci0gICAgICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7Ci0g
ICAgICAgICAgICBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyaW5nKGphdmFTY3JpcHRBY3Rpb24sICJK
UyIsICZzdHJpbmcpKSB7Ci0gICAgICAgICAgICBieXRlcyA9IENHUERGU3RyaW5nR2V0Qnl0ZVB0
cihzdHJpbmcpOwotICAgICAgICAgICAgbGVuZ3RoID0gQ0dQREZTdHJpbmdHZXRMZW5ndGgoc3Ry
aW5nKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWJ5dGVzKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYm
IGJ5dGVzWzBdID09IDB4RkUgJiYgYnl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGlu
Z1VuaWNvZGUgOiBrQ0ZTdHJpbmdFbmNvZGluZ1VURjg7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gc2NyaXB0ID0gYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBieXRlcywgbGVuZ3RoLCBlbmNvZGluZywgdHJ1ZSkpOwotICAgICAgICBp
ZiAoIXNjcmlwdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgc2Ny
aXB0cy5hcHBlbmQoc2NyaXB0KTsKLSAgICB9Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1SZWY8UERGUGx1Z2luPiBQREZQbHVnaW46OmNy
ZWF0ZShXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUERGUGx1
Z2luKGZyYW1lKSk7Ci19Ci0KLVBERlBsdWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lKiBmcmFtZSkK
LSAgICA6IFBsdWdpbihQREZQbHVnaW5UeXBlKQotICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAs
IG1faXNQb3N0U2NyaXB0KGZhbHNlKQotICAgICwgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQoZmFs
c2UpCi0gICAgLCBtX2NvbnRhaW5lckxheWVyKGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0
XSkpCi0gICAgLCBtX2NvbnRlbnRMYXllcihhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0p
KQotICAgICwgbV9zY3JvbGxDb3JuZXJMYXllcihhZG9wdE5TKFtbV0tQREZQbHVnaW5TY3JvbGxi
YXJMYXllciBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhpc10pKQotICAgICwgbV9wZGZMYXll
ckNvbnRyb2xsZXIoYWRvcHROUyhbW3BkZkxheWVyQ29udHJvbGxlckNsYXNzKCkgYWxsb2NdIGlu
aXRdKSkKLSAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dLUERG
TGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKSkK
LXsKLSAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJD
b250cm9sbGVyRGVsZWdhdGUuZ2V0KCk7Ci0gICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCku
cGFyZW50TGF5ZXIgPSBtX2NvbnRlbnRMYXllci5nZXQoKTsKLQotICAgIGlmIChzdXBwb3J0c0Zv
cm1zKCkpIHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gd2ViRnJhbWUoKS0+Y29yZUZy
YW1lKCktPmRvY3VtZW50KCk7Ci0gICAgICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lciA9IGRvY3Vt
ZW50LT5jcmVhdGVFbGVtZW50KGRpdlRhZywgZmFsc2UpOwotICAgICAgICBtX2Fubm90YXRpb25D
b250YWluZXItPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oaWRBdHRyLCBBdG9t
aWNTdHJpbmcoImFubm90YXRpb25Db250YWluZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSk7Ci0KLSAgICAgICAgYXV0byBhbm5vdGF0aW9uU3R5bGVFbGVtZW50ID0gZG9j
dW1lbnQtPmNyZWF0ZUVsZW1lbnQoc3R5bGVUYWcsIGZhbHNlKTsKLSAgICAgICAgYW5ub3RhdGlv
blN0eWxlRWxlbWVudC0+c2V0VGV4dENvbnRlbnQoYW5ub3RhdGlvblN0eWxlKTsKLQotICAgICAg
ICBtX2Fubm90YXRpb25Db250YWluZXItPmFwcGVuZENoaWxkKGFubm90YXRpb25TdHlsZUVsZW1l
bnQpOwotICAgICAgICBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKS0+YXBwZW5kQ2hpbGQoKm1f
YW5ub3RhdGlvbkNvbnRhaW5lcik7Ci0gICAgfQotCi0gICAgbV9hY2Nlc3NpYmlsaXR5T2JqZWN0
ID0gYWRvcHROUyhbW1dLUERGUGx1Z2luQWNjZXNzaWJpbGl0eU9iamVjdCBhbGxvY10gaW5pdFdp
dGhQREZQbHVnaW46dGhpc10pOwotICAgIFttX2FjY2Vzc2liaWxpdHlPYmplY3Qgc2V0UGRmTGF5
ZXJDb250cm9sbGVyOm1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpXTsKLSAgICBbbV9hY2Nlc3Np
YmlsaXR5T2JqZWN0IHNldFBhcmVudDp3ZWJGcmFtZSgpLT5wYWdlKCktPmFjY2Vzc2liaWxpdHlS
ZW1vdGVPYmplY3QoKV07Ci0KLSAgICBbbV9jb250YWluZXJMYXllciBhZGRTdWJsYXllcjptX2Nv
bnRlbnRMYXllci5nZXQoKV07Ci0gICAgW21fY29udGFpbmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV9z
Y3JvbGxDb3JuZXJMYXllci5nZXQoKV07Ci19Ci0KLVBERlBsdWdpbjo6flBERlBsdWdpbigpCi17
Ci19Ci0KLVBsdWdpbkluZm8gUERGUGx1Z2luOjpwbHVnaW5JbmZvKCkKLXsKLSAgICBQbHVnaW5J
bmZvIGluZm87Ci0gICAgaW5mby5uYW1lID0gYnVpbHRJblBERlBsdWdpbk5hbWUoKTsKLSAgICBp
bmZvLmlzQXBwbGljYXRpb25QbHVnaW4gPSB0cnVlOwotICAgIGluZm8uY2xpZW50TG9hZFBvbGlj
eSA9IFBsdWdpbkxvYWRDbGllbnRQb2xpY3lVbmRlZmluZWQ7Ci0KLSAgICBNaW1lQ2xhc3NJbmZv
IHBkZk1pbWVDbGFzc0luZm87Ci0gICAgcGRmTWltZUNsYXNzSW5mby50eXBlID0gImFwcGxpY2F0
aW9uL3BkZiI7Ci0gICAgcGRmTWltZUNsYXNzSW5mby5kZXNjID0gcGRmRG9jdW1lbnRUeXBlRGVz
Y3JpcHRpb24oKTsKLSAgICBwZGZNaW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5kKCJwZGYi
KTsKLSAgICBpbmZvLm1pbWVzLmFwcGVuZChwZGZNaW1lQ2xhc3NJbmZvKTsKLQotICAgIE1pbWVD
bGFzc0luZm8gdGV4dFBERk1pbWVDbGFzc0luZm87Ci0gICAgdGV4dFBERk1pbWVDbGFzc0luZm8u
dHlwZSA9ICJ0ZXh0L3BkZiI7Ci0gICAgdGV4dFBERk1pbWVDbGFzc0luZm8uZGVzYyA9IHBkZkRv
Y3VtZW50VHlwZURlc2NyaXB0aW9uKCk7Ci0gICAgdGV4dFBERk1pbWVDbGFzc0luZm8uZXh0ZW5z
aW9ucy5hcHBlbmQoInBkZiIpOwotICAgIGluZm8ubWltZXMuYXBwZW5kKHRleHRQREZNaW1lQ2xh
c3NJbmZvKTsKLQotICAgIE1pbWVDbGFzc0luZm8gcG9zdFNjcmlwdE1pbWVDbGFzc0luZm87Ci0g
ICAgcG9zdFNjcmlwdE1pbWVDbGFzc0luZm8udHlwZSA9IHBvc3RTY3JpcHRNSU1FVHlwZTsKLSAg
ICBwb3N0U2NyaXB0TWltZUNsYXNzSW5mby5kZXNjID0gcG9zdFNjcmlwdERvY3VtZW50VHlwZURl
c2NyaXB0aW9uKCk7Ci0gICAgcG9zdFNjcmlwdE1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucy5hcHBl
bmQoInBzIik7Ci0gICAgaW5mby5taW1lcy5hcHBlbmQocG9zdFNjcmlwdE1pbWVDbGFzc0luZm8p
OwotICAgIAotICAgIHJldHVybiBpbmZvOwotfQotCi12b2lkIFBERlBsdWdpbjo6dXBkYXRlU2Ny
b2xsYmFycygpCi17Ci0gICAgYm9vbCBoYWRTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xs
YmFyKSB7Ci0gICAgICAgIGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS53
aWR0aCgpKQotICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFy
KTsKLSAgICB9IGVsc2UgaWYgKG1fc2l6ZS53aWR0aCgpIDwgbV9wZGZEb2N1bWVudFNpemUud2lk
dGgoKSkKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhv
cml6b250YWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAg
ICAgICAgaWYgKG1fc2l6ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotICAgIH0g
ZWxzZSBpZiAobV9zaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpCi0g
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3Jv
bGxiYXIpOwotCi0gICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lv
bigpOwotCi0gICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94ZXMuaXNFbXB0eSgpID8gMCA6IG1f
cGFnZUJveGVzWzBdLmhlaWdodCgpOwotCi0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikg
ewotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxi
YXItPnNldFByb3BvcnRpb24obV9zaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgp
LCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJS
ZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3KCktPnkoKSArIG1fc2l6ZS5oZWlnaHQo
KSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fc2l6ZS53aWR0aCgpLCBtX2hv
cml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxTY3Jv
bGxiYXIpCi0gICAgICAgICAgICBzY3JvbGxiYXJSZWN0LmNvbnRyYWN0KG1fdmVydGljYWxTY3Jv
bGxiYXItPndpZHRoKCksIDApOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZy
YW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKLSAgICB9Ci0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxi
YXIpIHsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPnNldFByb3BvcnRpb24obV9zaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVpZ2h0
KCksIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxi
YXJSZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3NpemUud2lkdGgoKSAtIG1fdmVy
dGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29udHJhY3QoMCwgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKLSAgICB9Ci0KLSAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7Ci0gICAgaWYgKCFmcmFt
ZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1faG9y
aXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotICAgIGlmIChoYWRTY3Jv
bGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKLSAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMpCi0g
ICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwot
Ci0gICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpLT5mcmFtZVJlY3QoKTsK
LSAgICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllciBzZXROZWVkc0Rpc3BsYXldOwotICAg
IH0KLSAgICAKLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpIHsKLSAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSBob3Jpem9udGFsU2Nyb2xs
YmFyKCktPmZyYW1lUmVjdCgpOwotICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIg
c2V0TmVlZHNEaXNwbGF5XTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyTGF5
ZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKS5mcmFtZSA9IHNjcm9sbENv
cm5lclJlY3QoKTsKLSAgICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5
XTsKLSAgICB9Ci19Ci0KLVBsdWdpblZpZXcqIFBERlBsdWdpbjo6cGx1Z2luVmlldygpCi17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihjb250cm9sbGVyKCkpOwotfQotCi1j
b25zdCBQbHVnaW5WaWV3KiBQREZQbHVnaW46OnBsdWdpblZpZXcoKSBjb25zdAotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKLX0KLQot
UmVmPFNjcm9sbGJhcj4gUERGUGx1Z2luOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgYXV0byB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0
ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwot
ICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1f
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFy
TGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKLSAgICAgICAgW21fY29udGFp
bmVyTGF5ZXIgYWRkU3VibGF5ZXI6bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCldOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJMYXllciA9IGFkb3B0TlMo
W1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlz
XSk7Ci0gICAgICAgIFttX2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1fdmVydGljYWxTY3Jv
bGxiYXJMYXllci5nZXQoKV07Ci0gICAgfQotICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQucHRy
KCksIG9yaWVudGF0aW9uKTsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gd2ViRnJhbWUoKS0+Y29y
ZUZyYW1lKCkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAocGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmlnZ2VycygpKQotICAgICAg
ICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RUcmlnZ2VyKHBhZ2Ut
PnRlc3RUcmlnZ2VyKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHBsdWdpblZpZXcoKS0+ZnJh
bWUoKS0+dmlldygpLT5hZGRDaGlsZCh3aWRnZXQpOwotICAgIHJldHVybiB3aWRnZXQ7Ci19Ci0K
LXZvaWQgUERGUGx1Z2luOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92
ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsK
LSAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXIgPSBudWxs
cHRyOwotCi0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKLSAg
ICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsK
LSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgPSAwOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwot
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgPSAwOwotICAgIH0KLX0KLQotSW50UmVj
dCBQREZQbHVnaW46OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QK
LXsKLSAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwotICAgIHJlY3QubW92ZShzY3Jv
bGxiYXIubG9jYXRpb24oKSAtIHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSk7Ci0KLSAgICByZXR1
cm4gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRGcm9tUmVuZGVyZXJUb0Nv
bnRhaW5pbmdWaWV3KHBsdWdpblZpZXcoKS0+cGx1Z2luRWxlbWVudCgpLT5yZW5kZXJlcigpLCBy
ZWN0KTsKLX0KLQotSW50UmVjdCBQREZQbHVnaW46OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFy
ZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBwbHVnaW5WaWV3KCktPmZyYW1l
KCktPnZpZXcoKS0+Y29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIocGx1Z2luVmll
dygpLT5wbHVnaW5FbGVtZW50KCktPnJlbmRlcmVyKCksIHBhcmVudFJlY3QpOwotICAgIHJlY3Qu
bW92ZShwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0K
LSAgICByZXR1cm4gcmVjdDsKLX0KLQotSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVNj
cm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0
IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9
IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyLmxvY2F0aW9uKCkgLSBw
bHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOwotCi0gICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJh
bWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldyhwbHVnaW5W
aWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcG9pbnQpOwotfQotCi1JbnRQb2lu
dCBQREZQbHVnaW46OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBT
Y3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAot
ewotICAgIEludFBvaW50IHBvaW50ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cGx1Z2luRWxl
bWVudCgpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0gICAgcG9pbnQubW92ZShwbHVnaW5W
aWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0gICAgCi0gICAgcmV0
dXJuIHBvaW50OwotfQotCi1ib29sIFBERlBsdWdpbjo6aGFuZGxlU2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewotICAgIHJl
dHVybiBzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci19Ci0KLUludFJlY3QgUERGUGx1
Z2luOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICBpZiAoIW1faG9yaXpvbnRhbFNj
cm9sbGJhciB8fCAhbV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIEludFJlY3Qo
KTsKLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkg
ewotICAgICAgICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCkpOwotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIH0KLSAgICByZXR1cm4gSW50UmVj
dChwbHVnaW5WaWV3KCktPndpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBw
bHVnaW5WaWV3KCktPmhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwg
bV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSk7Ci19Ci0KLVNjcm9sbGFibGVBcmVhKiBQREZQbHVnaW46OmVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2FsayB1cCB0aGUgZnJhbWUgdHJlZSBh
bmQgbG9vayBmb3IgYSBzY3JvbGxhYmxlIHBhcmVudCBmcmFtZSBvciBSZW5kZXJMYXllci4KLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotSW50UmVjdCBQREZQbHVnaW46OnNjcm9sbGFibGVBcmVh
Qm91bmRpbmdCb3goYm9vbCopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJh
bWVSZWN0KCk7Ci19Ci0KLWludCBQREZQbHVnaW46OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Ci17Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAo
KG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7Ci0gICAgcmV0dXJuIHNjcm9sbGJhciA/
IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7
Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKEZyYW1l
KiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgewotICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLmlzQWN0aXZlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFBERlBsdWdpbjo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVy
Zm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKLXsKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IG1f
ZnJhbWUtPmNvcmVGcmFtZSgpKSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1l
LT5wYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3MoKS5mb3JjZVVwZGF0
ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBQREZQbHVnaW46OnNjcm9sbE9mZnNldChTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKLXsKLSAgICBpZiAob3JpZW50YXRp
b24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0
LndpZHRoKCk7Ci0KLSAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpCi0g
ICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKTsKLQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1TY3JvbGxQb3NpdGlvbiBQREZQbHVnaW46
OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50UG9pbnQobV9zY3JvbGxP
ZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOwotfQotCi1TY3JvbGxQb3Np
dGlvbiBQREZQbHVnaW46Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIEludFBvaW50KCk7Ci19Ci0KLVNjcm9sbFBvc2l0aW9uIFBERlBsdWdpbjo6bWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIHNjcm9sbGJhclNwYWNlID0gc2Ny
b2xsYmFySW50cnVzaW9uKCk7Ci0KLSAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KG1fcGRmRG9j
dW1lbnRTaXplLndpZHRoKCkgLSBtX3NpemUud2lkdGgoKSArIHNjcm9sbGJhclNwYWNlLndpZHRo
KCksIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gbV9zaXplLmhlaWdodCgpICsgc2Nyb2xs
YmFyU3BhY2UuaGVpZ2h0KCkpOwotICAgIG1heGltdW1PZmZzZXQuY2xhbXBOZWdhdGl2ZVRvWmVy
bygpOwotICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0OwotfQotCi12b2lkIFBERlBsdWdpbjo6c2Ny
b2xsYmFyU3R5bGVDaGFuZ2VkKFNjcm9sbGJhclN0eWxlIHN0eWxlLCBib29sIGZvcmNlVXBkYXRl
KQotewotICAgIGlmICghZm9yY2VVcGRhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElm
IHRoZSBQREYgd2FzIHNjcm9sbGVkIGFsbCB0aGUgd2F5IHRvIGJvdHRvbSByaWdodCBhbmQgc2Ny
b2xsYmFycyBjaGFuZ2UgdG8gb3ZlcmxheSBzdHlsZSwgd2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5
IHdoaXRlIHJlY3RhbmdsZXMgd2hlcmUgc2Nyb2xsYmFycyB3ZXJlLgotICAgIEludFBvaW50IG5l
d1Njcm9sbE9mZnNldCA9IEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KS5zaHJ1bmtUbyhtYXhpbXVt
U2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgc2V0U2Nyb2xsT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7
Ci0gICAgCi0gICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhclN0eWxlQ2hhbmdlZChzdHlsZSwg
Zm9yY2VVcGRhdGUpOwotICAgIC8vIEFzIHNpemUgb2YgdGhlIGNvbnRlbnQgYXJlYSBjaGFuZ2Vz
LCBzY3JvbGxiYXJzIG1heSBuZWVkIHRvIGFwcGVhciBvciB0byBkaXNhcHBlYXIuCi0gICAgdXBk
YXRlU2Nyb2xsYmFycygpOwotfQotCi12b2lkIFBERlBsdWdpbjo6YWRkQXJjaGl2ZVJlc291cmNl
KCkKLXsKLSAgICAvLyBGSVhNRTogSXQncyBhIGhhY2sgdG8gZm9yY2UgYWRkIGEgcmVzb3VyY2Ug
dG8gRG9jdW1lbnRMb2FkZXIuIFBERiBkb2N1bWVudHMgc2hvdWxkIGp1c3QgYmUgZmV0Y2hlZCBh
cyBDYWNoZWRSZXNvdXJjZXMuCi0KLSAgICAvLyBBZGQganVzdCBlbm91Z2ggZGF0YSBmb3IgY29u
dGV4dCBtZW51IGhhbmRsaW5nIGFuZCB3ZWIgYXJjaGl2ZXMgdG8gd29yay4KLSAgICBOU0RpY3Rp
b25hcnkqIGhlYWRlcnMgPSBAeyBAIkNvbnRlbnQtRGlzcG9zaXRpb24iOiAoTlNTdHJpbmcgKilt
X3N1Z2dlc3RlZEZpbGVuYW1lLCBAIkNvbnRlbnQtVHlwZSIgOiBAImFwcGxpY2F0aW9uL3BkZiIg
fTsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNI
VFRQVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOm1fc291cmNlVVJMIHN0YXR1c0NvZGU6
MjAwIEhUVFBWZXJzaW9uOihOU1N0cmluZyopa0NGSFRUUFZlcnNpb24xXzEgaGVhZGVyRmllbGRz
OmhlYWRlcnNdKTsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIHN5bnRoZXNpemVkUmVzcG9uc2UocmVz
cG9uc2UuZ2V0KCkpOwotCi0gICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UgPSBB
cmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEobV9kYXRhLmdl
dCgpKSwgbV9zb3VyY2VVUkwsICJhcHBsaWNhdGlvbi9wZGYiLCBTdHJpbmcoKSwgU3RyaW5nKCks
IHN5bnRoZXNpemVkUmVzcG9uc2UpOwotICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1l
bnQoKS0+bG9hZGVyKCktPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZS5yZWxlYXNlTm9uTnVs
bCgpKTsKLX0KLQotc3RhdGljIHZvaWQganNQREZEb2NJbml0aWFsaXplKEpTQ29udGV4dFJlZiBj
dHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAgICBQREZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0
aWNfY2FzdDxQREZQbHVnaW4qPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7Ci0gICAgcGRm
Vmlldy0+cmVmKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGpzUERGRG9jRmluYWxpemUoSlNPYmplY3RS
ZWYgb2JqZWN0KQotewotICAgIFBERlBsdWdpbiogcGRmVmlldyA9IHN0YXRpY19jYXN0PFBERlBs
dWdpbio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBwZGZWaWV3LT5kZXJlZigp
OwotfQotCi1KU1ZhbHVlUmVmIFBERlBsdWdpbjo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYg
Y3R4LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKLXsKLSAgICBQREZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxQREZQ
bHVnaW4qPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotCi0gICAgV2ViRnJhbWUq
IGZyYW1lID0gcGRmVmlldy0+bV9mcmFtZTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBm
cmFtZS0+Y29yZUZyYW1lKCk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+
cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGN0eCk7Ci0KLSAgICBwYWdlLT5jaHJvbWUoKS5wcmludCgqY29yZUZyYW1lKTsKLQotICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotfQotCi1KU09iamVjdFJlZiBQREZQ
bHVnaW46Om1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4KQotewotICAgIHN0YXRpYyBKU1N0
YXRpY0Z1bmN0aW9uIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zW10gPSB7Ci0gICAgICAgIHsgInBy
aW50IiwganNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7IDAsIDAsIDAgfSwKLSAgICB9
OwotCi0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGpzUERGRG9jQ2xhc3NEZWZpbml0aW9u
ID0gewotICAgICAgICAwLAotICAgICAgICBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsCi0gICAgICAg
ICJEb2MiLAotICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICBqc1BERkRvY1N0YXRpY0Z1
bmN0aW9ucywKLSAgICAgICAganNQREZEb2NJbml0aWFsaXplLCBqc1BERkRvY0ZpbmFsaXplLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCi0gICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzUmVm
IGpzUERGRG9jQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZqc1BERkRvY0NsYXNzRGVmaW5pdGlvbik7
Ci0KLSAgICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNQREZEb2NDbGFzcywgdGhpcyk7Ci19
Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gY29udmVydFBvc3RTY3JpcHRE
YXRhVG9QREYoUmV0YWluUHRyPENGRGF0YVJlZj4gcG9zdFNjcmlwdERhdGEpCi17Ci0gICAgLy8g
Q29udmVydCBQb3N0U2NyaXB0IHRvIFBERiB1c2luZyB0aGUgUXVhcnR6IDJEIEFQSS4KLSAgICAv
LyBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL0dyYXBoaWNzSW1hZ2lu
Zy9Db25jZXB0dWFsL2RyYXdpbmd3aXRocXVhcnR6MmQvZHFfcHNfY29udmVydC9jaGFwdGVyXzE2
X3NlY3Rpb25fMS5odG1sCi0KLSAgICBDR1BTQ29udmVydGVyQ2FsbGJhY2tzIGNhbGxiYWNrcyA9
IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwotICAgIFJldGFpblB0cjxDR1BTQ29udmVydGVy
UmVmPiBjb252ZXJ0ZXIgPSBhZG9wdENGKENHUFNDb252ZXJ0ZXJDcmVhdGUoMCwgJmNhbGxiYWNr
cywgMCkpOwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIgPSBhZG9w
dENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShwb3N0U2NyaXB0RGF0YS5nZXQoKSkp
OwotICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBwZGZEYXRhID0gYWRvcHRDRihDRkRh
dGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBSZXRhaW5QdHI8
Q0dEYXRhQ29uc3VtZXJSZWY+IGNvbnN1bWVyID0gYWRvcHRDRihDR0RhdGFDb25zdW1lckNyZWF0
ZVdpdGhDRkRhdGEocGRmRGF0YS5nZXQoKSkpOwotICAgIAotICAgIENHUFNDb252ZXJ0ZXJDb252
ZXJ0KGNvbnZlcnRlci5nZXQoKSwgcHJvdmlkZXIuZ2V0KCksIGNvbnN1bWVyLmdldCgpLCAwKTsK
LSAgICAKLSAgICByZXR1cm4gcGRmRGF0YTsKLX0KLQotdm9pZCBQREZQbHVnaW46OmNvbnZlcnRQ
b3N0U2NyaXB0RGF0YUlmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1faXNQb3N0U2NyaXB0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gU3RyaW5nKG1fc3VnZ2Vz
dGVkRmlsZW5hbWUgKyAiLnBkZiIpOwotICAgIG1fZGF0YSA9IGNvbnZlcnRQb3N0U2NyaXB0RGF0
YVRvUERGKG1fZGF0YSk7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQo
KQotewotICAgIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwotICAgIAotICAgIFJldGFpblB0cjxQREZE
b2N1bWVudD4gZG9jdW1lbnQgPSBhZG9wdE5TKFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9jXSBp
bml0V2l0aERhdGE6cmF3RGF0YSgpXSk7Ci0KLSAgICBzZXRQREZEb2N1bWVudChkb2N1bWVudCk7
Ci0KLSAgICB1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7Ci0KLSAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIgc2V0RnJhbWVTaXplOnNpemUoKV07Ci0gICAgbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCkuZG9jdW1lbnQgPSBkb2N1bWVudC5nZXQoKTsKLQotICAgIGlmIChoYW5kbGVz
UGFnZVNjYWxlRmFjdG9yKCkpCi0gICAgICAgIHBsdWdpblZpZXcoKS0+c2V0UGFnZVNjYWxlRmFj
dG9yKFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdLCBJbnRQb2ludCgp
KTsKLQotICAgIG5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZChJbnRQb2ludChbbV9wZGZMYXll
ckNvbnRyb2xsZXIgc2Nyb2xsUG9zaXRpb25dKSk7Ci0KLSAgICBjYWxjdWxhdGVTaXplcygpOwot
ICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLQotICAgIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7
Ci0KLSAgICBpZiAoW2RvY3VtZW50IGlzTG9ja2VkXSkKLSAgICAgICAgY3JlYXRlUGFzc3dvcmRF
bnRyeUZvcm0oKTsKLX0KLQotdm9pZCBQREZQbHVnaW46OnN0cmVhbURpZFJlY2VpdmVSZXNwb25z
ZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgVVJMJiwgdWludDMyX3QsIHVpbnQzMl90LCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lKQotewotICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBk
ZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0
ZWRGaWxlbmFtZTsKLQotICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCBw
b3N0U2NyaXB0TUlNRVR5cGUpKQotICAgICAgICBtX2lzUG9zdFNjcmlwdCA9IHRydWU7Ci19Ci0K
LXZvaWQgUERGUGx1Z2luOjpzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwg
Y29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzdHJl
YW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOwotCi0gICAgaWYgKCFtX2Rh
dGEpCi0gICAgICAgIG1fZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7
Ci0KLSAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGEuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQotewotICAgIEFTU0VSVF9VTlVT
RUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIGNv
bnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVkKCk7Ci0gICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7
Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBi
b29sIHdhc0NhbmNlbGxlZCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1J
RCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7Ci0KLSAgICBtX2RhdGEuY2xlYXIoKTsKLX0KLQot
dm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBVUkwm
IHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZp
ZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCi17Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFt
ZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOwotCi0gICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
bWltZVR5cGUsIHBvc3RTY3JpcHRNSU1FVHlwZSkpCi0gICAgICAgIG1faXNQb3N0U2NyaXB0ID0g
dHJ1ZTsKLX0KLQotdm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghbV9kYXRhKQotICAgICAg
ICBtX2RhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotCi0gICAgQ0ZE
YXRhQXBwZW5kQnl0ZXMobV9kYXRhLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4
Kj4oYnl0ZXMpLCBsZW5ndGgpOwotfQotCi12b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlk
RmluaXNoTG9hZGluZygpCi17Ci0gICAgY29udmVydFBvc3RTY3JpcHREYXRhSWZOZWVkZWQoKTsK
LSAgICBwZGZEb2N1bWVudERpZExvYWQoKTsKLX0KLQotdm9pZCBQREZQbHVnaW46Om1hbnVhbFN0
cmVhbURpZEZhaWwoYm9vbCkKLXsKLSAgICBtX2RhdGEuY2xlYXIoKTsKLX0KLQotdm9pZCBQREZQ
bHVnaW46OnJ1blNjcmlwdHNJblBERkRvY3VtZW50KCkKLXsKLSAgICBWZWN0b3I8UmV0YWluUHRy
PENGU3RyaW5nUmVmPj4gc2NyaXB0czsKLSAgICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChb
bV9wZGZEb2N1bWVudCBkb2N1bWVudFJlZl0sIHNjcmlwdHMpOwotCi0gICAgc2l6ZV90IHNjcmlw
dENvdW50ID0gc2NyaXB0cy5zaXplKCk7Ci0gICAgaWYgKCFzY3JpcHRDb3VudCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENy
ZWF0ZSgwKTsKLSAgICBKU09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JpcHRDb3VudDsgKytpKSB7Ci0gICAgICAg
IEpTU3RyaW5nUmVmIHNjcmlwdCA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHNjcmlwdHNb
aV0uZ2V0KCkpOwotICAgICAgICBKU0V2YWx1YXRlU2NyaXB0KGN0eCwgc2NyaXB0LCBqc1BERkRv
YywgMCwgMCwgMCk7Ci0gICAgICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHQpOwotICAgIH0KLSAg
ICAKLSAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7Ci19Ci0KLXZvaWQgUERGUGx1Z2lu
OjpjcmVhdGVQYXNzd29yZEVudHJ5Rm9ybSgpCi17Ci0gICAgbV9wYXNzd29yZEZpZWxkID0gUERG
UGx1Z2luUGFzc3dvcmRGaWVsZDo6Y3JlYXRlKG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLCB0
aGlzKTsKLSAgICBtX3Bhc3N3b3JkRmllbGQtPmF0dGFjaChtX2Fubm90YXRpb25Db250YWluZXIu
Z2V0KCkpOwotfQotCi12b2lkIFBERlBsdWdpbjo6YXR0ZW1wdFRvVW5sb2NrUERGKGNvbnN0IFN0
cmluZyYgcGFzc3dvcmQpCi17Ci0gICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGF0dGVtcHRUb1Vu
bG9ja1dpdGhQYXNzd29yZDpwYXNzd29yZF07Ci0KLSAgICBpZiAoIVtwZGZEb2N1bWVudCgpIGlz
TG9ja2VkXSkgewotICAgICAgICBtX3Bhc3N3b3JkRmllbGQgPSBudWxscHRyOwotCi0gICAgICAg
IGNhbGN1bGF0ZVNpemVzKCk7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUERGUGx1Z2luOjp1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCkKLXsK
LSAgICBkb3VibGUgbmV3U2NhbGVGYWN0b3IgPSBjb250cm9sbGVyKCktPmNvbnRlbnRzU2NhbGVG
YWN0b3IoKTsKLSAgICBpZiAoIWhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSkKLSAgICAgICAgbmV3
U2NhbGVGYWN0b3IgKj0gd2ViRnJhbWUoKS0+cGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKLQot
ICAgIGlmIChuZXdTY2FsZUZhY3RvciAhPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgZGV2aWNlU2Nh
bGVGYWN0b3JdKQotICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RGV2aWNlU2NhbGVG
YWN0b3I6bmV3U2NhbGVGYWN0b3JdOwotfQotCi12b2lkIFBERlBsdWdpbjo6Y29udGVudHNTY2Fs
ZUZhY3RvckNoYW5nZWQoZmxvYXQpCi17Ci0gICAgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFj
dG9ycygpOwotfQotCi12b2lkIFBERlBsdWdpbjo6Y29tcHV0ZVBhZ2VCb3hlcygpCi17Ci0gICAg
c2l6ZV90IHBhZ2VDb3VudCA9IENHUERGRG9jdW1lbnRHZXROdW1iZXJPZlBhZ2VzKFttX3BkZkRv
Y3VtZW50IGRvY3VtZW50UmVmXSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWdlQ291
bnQ7ICsraSkgewotICAgICAgICBDR1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRH
ZXRQYWdlKFttX3BkZkRvY3VtZW50IGRvY3VtZW50UmVmXSwgaSArIDEpOwotICAgICAgICBBU1NF
UlQocGRmUGFnZSk7Ci0KLSAgICAgICAgQ0dSZWN0IGJveCA9IENHUERGUGFnZUdldEJveFJlY3Qo
cGRmUGFnZSwga0NHUERGQ3JvcEJveCk7Ci0gICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KGJveCkp
Ci0gICAgICAgICAgICBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERk1l
ZGlhQm94KTsKLSAgICAgICAgbV9wYWdlQm94ZXMuYXBwZW5kKEludFJlY3QoYm94KSk7Ci0gICAg
fQotfQotCi12b2lkIFBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMoKQotewotICAgIGlmIChbcGRm
RG9jdW1lbnQoKSBpc0xvY2tlZF0pIHsKLSAgICAgICAgc2V0UERGRG9jdW1lbnRTaXplKEludFNp
emUoMCwgMCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGNvbWUgc3RyYWlnaHQgZnJvbSBQREZLaXQuCi0gICAgY29tcHV0ZVBhZ2VCb3hlcygp
OwotCi0gICAgc2V0UERGRG9jdW1lbnRTaXplKEludFNpemUoW21fcGRmTGF5ZXJDb250cm9sbGVy
IGNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb21dKSk7Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjppbml0
aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCi17Ci0gICAgbV9zb3VyY2VVUkwg
PSBwYXJhbWV0ZXJzLnVybDsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNlTWFudWFsTG9h
ZGVyICYmICFwYXJhbWV0ZXJzLnVybC5pc0VtcHR5KCkpCi0gICAgICAgIGNvbnRyb2xsZXIoKS0+
bG9hZFVSTChwZGZEb2N1bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMudXJsLnN0cmlu
ZygpLCBTdHJpbmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4oKSwgZmFsc2Up
OwotCi0gICAgY29udHJvbGxlcigpLT5kaWRJbml0aWFsaXplUGx1Z2luKCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjp3aWxsRGV0YXRjaFJlbmRlcmVyKCkKLXsKLSAg
ICBpZiAod2ViRnJhbWUoKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB3
ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpKQotICAgICAgICAgICAgZnJhbWVWaWV3LT5y
ZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpk
ZXN0cm95KCkKLXsKLSAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IDA7
Ci0KLSAgICBpZiAod2ViRnJhbWUoKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpKQotICAgICAgICAgICAgZnJhbWVW
aWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICB9Ci0KLSAgICBtX2FjdGl2ZUFu
bm90YXRpb24gPSBudWxscHRyOwotICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lciA9IG51bGxwdHI7
Ci0KLSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIGRlc3Ry
b3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotICAgIAotICAgIFttX3Njcm9sbENvcm5l
ckxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICBbbV9jb250ZW50TGF5ZXIgcmVtb3Zl
RnJvbVN1cGVybGF5ZXJdOwotfQotCi12b2lkIFBERlBsdWdpbjo6dXBkYXRlQ29udHJvbFRpbnRz
KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KQotewotICAgIEFTU0VSVChncmFwaGlj
c0NvbnRleHQudXBkYXRpbmdDb250cm9sVGludHMoKSk7Ci0KLSAgICBpZiAobV9ob3Jpem9udGFs
U2Nyb2xsYmFyKQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsK
LSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+aW52YWxpZGF0ZSgpOwotICAgIGludmFsaWRhdGVTY3JvbGxDb3JuZXIoc2Nyb2xsQ29ybmVy
UmVjdCgpKTsKLX0KLQotdm9pZCBQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5Db250
ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgIAotICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUpOwotICAgIAotICAgIGlmIChsYXllciA9
PSBtX3Njcm9sbENvcm5lckxheWVyKSB7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVj
dCA9IHRoaXMtPnNjcm9sbENvcm5lclJlY3QoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRy
YW5zbGF0ZSgtc2Nyb2xsQ29ybmVyUmVjdC54KCksIC1zY3JvbGxDb3JuZXJSZWN0LnkoKSk7Ci0g
ICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKG51bGxwdHIs
IGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsQ29ybmVyUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBudWxscHRyOwotICAgIAotICAg
IGlmIChsYXllciA9PSBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpCi0gICAgICAgIHNjcm9sbGJh
ciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgZWxzZSBpZiAobGF5ZXIgPT0gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXIpCi0gICAgICAgIHNjcm9sbGJhciA9IGhvcml6b250YWxTY3JvbGxi
YXIoKTsKLQotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
Z3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgtc2Nyb2xsYmFyLT54KCksIC1zY3JvbGxiYXItPnko
KSk7Ci0gICAgc2Nyb2xsYmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhci0+ZnJh
bWVSZWN0KCkpOwotfQotCi1SZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBQREZQbHVnaW46OnNuYXBz
aG90KCkKLXsKLSAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBmbG9hdCBjb250ZW50c1NjYWxlRmFjdG9yID0gY29udHJvbGxlcigpLT5jb250
ZW50c1NjYWxlRmFjdG9yKCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gc2l6ZSgp
OwotICAgIGJhY2tpbmdTdG9yZVNpemUuc2NhbGUoY29udGVudHNTY2FsZUZhY3Rvcik7Ci0KLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZVNoYXJlYWJsZShiYWNraW5nU3RvcmVTaXplLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxw
aGEpOwotICAgIGF1dG8gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7
Ci0KLSAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoY29udGVudHNTY2FsZUZhY3RvciwgLWNv
bnRlbnRzU2NhbGVGYWN0b3IpKTsKLSAgICBjb250ZXh0LT50cmFuc2xhdGUoLW1fc2Nyb2xsT2Zm
c2V0LndpZHRoKCksIC1tX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSArIG1fc2Nyb2xsT2Zmc2V0
LmhlaWdodCgpKTsKLQotICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzbmFwc2hvdEluQ29udGV4
dDpjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKV07Ci0KLSAgICByZXR1cm4gYml0bWFwOwotfQot
Ci1QbGF0Zm9ybUxheWVyKiBQREZQbHVnaW46OnBsdWdpbkxheWVyKCkKLXsKLSAgICByZXR1cm4g
bV9jb250YWluZXJMYXllci5nZXQoKTsKLX0KLQotSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0
RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIEludFBvaW50KHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsK
LX0KLQotSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oY29u
c3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIHJldHVybiBtX3Jvb3RWaWV3VG9QbHVn
aW5UcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQpOwotfQotCi1JbnRQb2ludCBQREZQbHVnaW46OmNv
bnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAot
ewotICAgIEludFBvaW50IHBvaW50SW5QbHVnaW5Db29yZGluYXRlcyhwb2ludC54KCksIHNpemUo
KS5oZWlnaHQoKSAtIHBvaW50LnkoKSk7Ci0gICAgcmV0dXJuIG1fcm9vdFZpZXdUb1BsdWdpblRy
YW5zZm9ybS5pbnZlcnNlKCkudmFsdWVfb3IoQWZmaW5lVHJhbnNmb3JtKCkpLm1hcFBvaW50KHBv
aW50SW5QbHVnaW5Db29yZGluYXRlcyk7Ci19Ci0KLUZsb2F0UmVjdCBQREZQbHVnaW46OmNvbnZl
cnRGcm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCk7
Ci0KLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0g
ICAgRmxvYXRQb2ludCBvcmlnaW5JblBsdWdpbkNvb3JkaW5hdGVzKHJlY3QueCgpLCBzaXplKCku
aGVpZ2h0KCkgLSByZWN0LnkoKSAtIHJlY3QuaGVpZ2h0KCkpOwotICAgIEZsb2F0UmVjdCByZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLmludmVy
c2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUmVjdChGbG9hdFJlY3Qob3JpZ2lu
SW5QbHVnaW5Db29yZGluYXRlcywgcmVjdC5zaXplKCkpKTsKLQotICAgIHJldHVybiBmcmFtZVZp
ZXctPmNvbnRlbnRzVG9TY3JlZW4oZW5jbG9zaW5nSW50UmVjdChyZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzKSk7Ci19Ci0KLUludFJlY3QgUERGUGx1Z2luOjpib3VuZHNPblNjcmVlbigpIGNvbnN0
Ci17Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+
dmlldygpOwotCi0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRzID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgp
KTsKLSAgICBGbG9hdFJlY3QgcmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IG1fcm9vdFZpZXdU
b1BsdWdpblRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVfb3IoQWZmaW5lVHJhbnNmb3JtKCkpLm1h
cFJlY3QoYm91bmRzKTsKLSAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVuKGVu
Y2xvc2luZ0ludFJlY3QocmVjdEluUm9vdFZpZXdDb29yZGluYXRlcykpOwotfQotCi12b2lkIFBE
RlBsdWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5z
Zm9ybSkKLXsKLSAgICBpZiAoc2l6ZSgpID09IHBsdWdpblNpemUgJiYgcGx1Z2luVmlldygpLT5w
YWdlU2NhbGVGYWN0b3IoKSA9PSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFj
dG9yXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gcGx1Z2luU2l6ZTsKLSAgICBt
X3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0gPSBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLmlu
dmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7Ci0gICAgW21fcGRmTGF5ZXJDb250
cm9sbGVyIHNldEZyYW1lU2l6ZTpwbHVnaW5TaXplXTsKLQotICAgIFtDQVRyYW5zYWN0aW9uIGJl
Z2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgIENB
VHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSgxLCAtMSwgMSk7
Ci0gICAgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRFRyYW5zbGF0ZSh0cmFuc2Zvcm0sIDAsIC1w
bHVnaW5TaXplLmhlaWdodCgpLCAwKTsKLSAgICAKLSAgICBpZiAoaGFuZGxlc1BhZ2VTY2FsZUZh
Y3RvcigpKSB7Ci0gICAgICAgIENHRmxvYXQgbWFnbmlmaWNhdGlvbiA9IHBsdWdpblZpZXcoKS0+
cGFnZVNjYWxlRmFjdG9yKCkgLSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFj
dG9yXTsKLQotICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBtX2xhc3RNb3VzZVBvc2l0aW9u
SW5QbHVnaW5Db29yZGluYXRlcywgd2Ugc2hvdWxkIHVzZSB0aGUgem9vbSBvcmlnaW4gZnJvbSBQ
bHVnaW5WaWV3OjpzZXRQYWdlU2NhbGVGYWN0b3IuCi0gICAgICAgIGlmIChtYWduaWZpY2F0aW9u
KQotICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1hZ25pZnlXaXRoTWFnbmlmaWNh
dGlvbjptYWduaWZpY2F0aW9uIGF0UG9pbnQ6Y29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcobV9s
YXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMpIGltbWVkaWF0ZWx5Ok5PXTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYW5kbGUgcGFnZSBzY2FsZSBvdXJz
ZWx2ZXMsIHdlIG5lZWQgdG8gcmVzcGVjdCBvdXIgcGFyZW50IHBhZ2UncwotICAgICAgICAvLyBz
Y2FsZSwgd2hpY2ggbWF5IGhhdmUgY2hhbmdlZC4KLSAgICAgICAgdXBkYXRlUGFnZUFuZERldmlj
ZVNjYWxlRmFjdG9ycygpOwotICAgIH0gCi0KLSAgICBjYWxjdWxhdGVTaXplcygpOwotICAgIHVw
ZGF0ZVNjcm9sbGJhcnMoKTsKLQotICAgIGlmIChtX2FjdGl2ZUFubm90YXRpb24pCi0gICAgICAg
IG1fYWN0aXZlQW5ub3RhdGlvbi0+dXBkYXRlR2VvbWV0cnkoKTsKLQotICAgIFttX2NvbnRlbnRM
YXllciBzZXRTdWJsYXllclRyYW5zZm9ybTp0cmFuc2Zvcm1dOwotICAgIFtDQVRyYW5zYWN0aW9u
IGNvbW1pdF07Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpmcmFtZURpZEZpbmlzaExvYWRpbmcodWlu
dDY0X3QpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgUERGUGx1Z2lu
OjpmcmFtZURpZEZhaWwodWludDY0X3QsIGJvb2wpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3Qs
IGNvbnN0IFdURjo6U3RyaW5nJikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
ICAgIAotc3RhdGljIE5TVUludGVnZXIgbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChjb25zdCBX
ZWJFdmVudCYgZXZlbnQpCi17Ci0gICAgcmV0dXJuIChldmVudC5zaGlmdEtleSgpID8gTlNFdmVu
dE1vZGlmaWVyRmxhZ1NoaWZ0IDogMCkKLSAgICAgICAgfCAoZXZlbnQuY29udHJvbEtleSgpID8g
TlNFdmVudE1vZGlmaWVyRmxhZ0NvbnRyb2wgOiAwKQotICAgICAgICB8IChldmVudC5hbHRLZXko
KSA/IE5TRXZlbnRNb2RpZmllckZsYWdPcHRpb24gOiAwKQotICAgICAgICB8IChldmVudC5tZXRh
S2V5KCkgPyBOU0V2ZW50TW9kaWZpZXJGbGFnQ29tbWFuZCA6IDApOwotfQotICAgIAotc3RhdGlj
IGJvb2wgZ2V0RXZlbnRUeXBlRnJvbVdlYkV2ZW50KGNvbnN0IFdlYkV2ZW50JiBldmVudCwgTlNF
dmVudFR5cGUmIGV2ZW50VHlwZSkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAg
IGNhc2UgV2ViRXZlbnQ6OktleURvd246Ci0gICAgICAgIGV2ZW50VHlwZSA9IE5TRXZlbnRUeXBl
S2V5RG93bjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBXZWJFdmVudDo6S2V5VXA6
Ci0gICAgICAgIGV2ZW50VHlwZSA9IE5TRXZlbnRUeXBlS2V5VXA7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKLSAgICAgICAgc3dpdGNoIChzdGF0
aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpLmJ1dHRvbigpKSB7Ci0gICAgICAg
IGNhc2UgV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9
IE5TRXZlbnRUeXBlTGVmdE1vdXNlRG93bjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgotICAgICAgICAgICAgZXZlbnRU
eXBlID0gTlNFdmVudFR5cGVSaWdodE1vdXNlRG93bjsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoKLSAgICAgICAgc3dpdGNoIChzdGF0aWNfY2Fz
dDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpLmJ1dHRvbigpKSB7Ci0gICAgICAgIGNhc2Ug
V2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5TRXZl
bnRUeXBlTGVmdE1vdXNlVXA7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2Fz
ZSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5T
RXZlbnRUeXBlUmlnaHRNb3VzZVVwOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICBjYXNl
IFdlYkV2ZW50OjpNb3VzZU1vdmU6Ci0gICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Y29uc3Qg
V2ViTW91c2VFdmVudCY+KGV2ZW50KS5idXR0b24oKSkgewotICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6OkxlZnRCdXR0b246Ci0gICAgICAgICAgICBldmVudFR5cGUgPSBOU0V2ZW50VHlwZUxl
ZnRNb3VzZURyYWdnZWQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBX
ZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9IE5TRXZl
bnRUeXBlUmlnaHRNb3VzZURyYWdnZWQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbjoKLSAgICAgICAgICAgIGV2ZW50VHlwZSA9
IE5TRXZlbnRUeXBlTW91c2VNb3ZlZDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLSAgICAKLU5TRXZlbnQgKlBE
RlBsdWdpbjo6bnNFdmVudEZvcldlYk1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZl
bnQpCi17Ci0gICAgbV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXMgPSBjb252
ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oZXZlbnQucG9zaXRpb24oKSk7Ci0KLSAgICBJbnRQb2lu
dCBwb3NpdGlvbkluUERGVmlld0Nvb3JkaW5hdGVzKGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3
KG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSk7Ci0KLSAgICBOU0V2ZW50
VHlwZSBldmVudFR5cGU7Ci0KLSAgICBpZiAoIWdldEV2ZW50VHlwZUZyb21XZWJFdmVudChldmVu
dCwgZXZlbnRUeXBlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOU1VJbnRlZ2VyIG1vZGlm
aWVyRmxhZ3MgPSBtb2RpZmllckZsYWdzRnJvbVdlYkV2ZW50KGV2ZW50KTsKLQotICAgIHJldHVy
biBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6ZXZlbnRUeXBlIGxvY2F0aW9uOnBvc2l0aW9u
SW5QREZWaWV3Q29vcmRpbmF0ZXMgbW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFt
cDowIHdpbmRvd051bWJlcjowIGNvbnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDpl
dmVudC5jbGlja0NvdW50KCkgcHJlc3N1cmU6MF07Ci19Ci0KLSNpZiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEIDwgMTAxMzAwCi12b2lkIFBERlBsdWdpbjo6dXBkYXRlQ3Vyc29yKGNv
bnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50LCBVcGRhdGVDdXJzb3JNb2RlIG1vZGUpCi17Ci0gICAg
SGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0ID0gTm9uZTsKLQotICAgIFBERlNlbGVjdGlvbiAq
c2VsZWN0aW9uVW5kZXJNb3VzZSA9IFttX3BkZkxheWVyQ29udHJvbGxlciBnZXRTZWxlY3Rpb25G
b3JXb3JkQXRQb2ludDpjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhldmVudC5wb3NpdGlvbigp
KV07Ci0gICAgaWYgKHNlbGVjdGlvblVuZGVyTW91c2UgJiYgW1tzZWxlY3Rpb25VbmRlck1vdXNl
IHN0cmluZ10gbGVuZ3RoXSkKLSAgICAgICAgaGl0VGVzdFJlc3VsdCA9IFRleHQ7Ci0KLSAgICBp
ZiAoaGl0VGVzdFJlc3VsdCA9PSBtX2xhc3RIaXRUZXN0UmVzdWx0ICYmIG1vZGUgPT0gVXBkYXRl
SWZOZWVkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRDdXJzb3IoaGl0VGVzdFJlc3VsdCA9PSBUZXh0
ID8gaUJlYW1DdXJzb3IoKSA6IHBvaW50ZXJDdXJzb3IoKSkpOwotICAgIG1fbGFzdEhpdFRlc3RS
ZXN1bHQgPSBoaXRUZXN0UmVzdWx0OwotfQotI2VuZGlmCi0KLWJvb2wgUERGUGx1Z2luOjpoYW5k
bGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQotewotICAgIFBsYXRmb3Jt
TW91c2VFdmVudCBwbGF0Zm9ybUV2ZW50ID0gcGxhdGZvcm0oZXZlbnQpOwotICAgIEludFBvaW50
IG1vdXNlUG9zaXRpb24gPSBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oZXZlbnQucG9zaXRp
b24oKSk7Ci0KLSAgICBtX2xhc3RNb3VzZUV2ZW50ID0gZXZlbnQ7Ci0KLSAgICBSZWZQdHI8U2Ny
b2xsYmFyPiB0YXJnZXRTY3JvbGxiYXI7Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gdGFyZ2V0U2Ny
b2xsYmFyRm9yTGFzdE1vdXNlUG9zaXRpb247Ci0KLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJh
ckxheWVyKSB7Ci0gICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXJGcmFtZShtX3ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUpOwotICAgICAgICBpZiAodmVydGljYWxTY3Jv
bGxiYXJGcmFtZS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKLSAgICAgICAgICAgIHRhcmdldFNj
cm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9s
bGJhckZyYW1lLmNvbnRhaW5zKG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVz
KSkKLSAgICAgICAgICAgIHRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uID0gdmVy
dGljYWxTY3JvbGxiYXIoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXIpIHsKLSAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyRnJhbWUobV9ob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUpOwotICAgICAgICBpZiAoaG9yaXpvbnRh
bFNjcm9sbGJhckZyYW1lLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQotICAgICAgICAgICAgdGFy
Z2V0U2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgICAgICBpZiAoaG9yaXpv
bnRhbFNjcm9sbGJhckZyYW1lLmNvbnRhaW5zKG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNv
b3JkaW5hdGVzKSkKLSAgICAgICAgICAgIHRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0
aW9uID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENv
cm5lckxheWVyICYmIEludFJlY3QobV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKS5mcmFtZSkuY29u
dGFpbnMobW91c2VQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChb
cGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IFJpZ2h0LWNsaWNrcyBhbmQgQ29udHJvbC1jbGlja3MgYWx3YXlzIGNhbGwgaGFuZGxlQ29udGV4
dE1lbnVFdmVudCBhcyB3ZWxsLgotICAgIGlmIChldmVudC5idXR0b24oKSA9PSBXZWJNb3VzZUV2
ZW50OjpSaWdodEJ1dHRvbiB8fCAoZXZlbnQuYnV0dG9uKCkgPT0gV2ViTW91c2VFdmVudDo6TGVm
dEJ1dHRvbiAmJiBldmVudC5jb250cm9sS2V5KCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIE5TRXZlbnQgKm5zRXZlbnQgPSBuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChldmVudCk7Ci0K
LSAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92
ZToKLSAgICAgICAgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKLSNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMzAwCi0gICAgICAgIHVwZGF0ZUN1cnNvcihldmVudCk7
Ci0jZW5kaWYKLQotICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICBp
ZiAoIXRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgdGFyZ2V0U2Nyb2xsYmFyLT5tb3VzZUVudGVyZWQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0YXJnZXRTY3JvbGxi
YXItPm1vdXNlTW92ZWQocGxhdGZvcm1FdmVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
IXRhcmdldFNjcm9sbGJhciAmJiB0YXJnZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlvbikK
LSAgICAgICAgICAgIHRhcmdldFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uLT5tb3VzZUV4
aXRlZCgpOwotCi0gICAgICAgIHN3aXRjaCAoZXZlbnQuYnV0dG9uKCkpIHsKLSAgICAgICAgY2Fz
ZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgotICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250
cm9sbGVyIG1vdXNlRHJhZ2dlZDpuc0V2ZW50XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgotICAgICAgICBjYXNlIFdl
Yk1vdXNlRXZlbnQ6Ok1pZGRsZUJ1dHRvbjoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpOb0J1dHRvbjoKLSAgICAgICAgICAgIFttX3BkZkxh
eWVyQ29udHJvbGxlciBtb3VzZU1vdmVkOm5zRXZlbnRdOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91c2VE
b3duOgotICAgICAgICBzd2l0Y2ggKGV2ZW50LmJ1dHRvbigpKSB7Ci0gICAgICAgIGNhc2UgV2Vi
TW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKLSAgICAgICAgICAgIGlmICh0YXJnZXRTY3JvbGxiYXIp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFNjcm9sbGJhci0+bW91c2VEb3duKHBsYXRm
b3JtRXZlbnQpOwotCi0gICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgbW91c2VEb3du
Om5zRXZlbnRdOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgV2ViTW91
c2VFdmVudDo6UmlnaHRCdXR0b246Ci0gICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIg
cmlnaHRNb3VzZURvd246bnNFdmVudF07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpNaWRkbGVCdXR0b246Ci0gICAgICAgIGNhc2UgV2ViTW91
c2VFdmVudDo6Tm9CdXR0b246Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoKLSAgICAgICAgc3dp
dGNoIChldmVudC5idXR0b24oKSkgewotICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRC
dXR0b246Ci0gICAgICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQotICAgICAgICAgICAgICAg
IHJldHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7Ci0KLSAgICAg
ICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZVVwOm5zRXZlbnRdOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246
Ci0gICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgotICAgICAgICBjYXNl
IFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQREZQbHVnaW46OmhhbmRsZU1vdXNl
RW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKLXsKLSAgICBtb3VzZUVudGVy
ZWRDb250ZW50QXJlYSgpOwotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAx
MDEzMDAKLSAgICB1cGRhdGVDdXJzb3IoZXZlbnQsIEZvcmNlVXBkYXRlKTsKLSNlbmRpZgotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQREZQbHVnaW46OmhhbmRsZU1vdXNlTGVhdmVFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50JikKLXsKLSAgICBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotYm9vbCBQREZQbHVnaW46OnNob3dDb250ZXh0
TWVudUF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQotewotICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPnZpZXcoKTsKLSAgICBJbnRQb2ludCBj
b250ZW50c1BvaW50ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcocG9pbnQpOwotICAg
IFdlYk1vdXNlRXZlbnQgZXZlbnQoV2ViRXZlbnQ6Ok1vdXNlRG93biwgV2ViTW91c2VFdmVudDo6
UmlnaHRCdXR0b24sIGNvbnRlbnRzUG9pbnQsIGNvbnRlbnRzUG9pbnQsIDAsIDAsIDAsIDEsIHN0
YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+KDApLCBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKSwgV2ViQ29yZTo6Rm9yY2VBdENsaWNrKTsKLSAgICByZXR1cm4gaGFuZGxlQ29udGV4
dE1lbnVFdmVudChldmVudCk7Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjpoYW5kbGVDb250ZXh0TWVu
dUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQotewotICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPnZpZXcoKTsKLSAgICBJbnRQb2ludCBw
b2ludCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihJbnRSZWN0KGZyYW1lVmlldy0+d2lu
ZG93VG9Db250ZW50cyhldmVudC5wb3NpdGlvbigpKSwgSW50U2l6ZSgpKSkubG9jYXRpb24oKTsK
LSAgICAKLSAgICBpZiAoTlNNZW51ICpuc01lbnUgPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgbWVu
dUZvckV2ZW50Om5zRXZlbnRGb3JXZWJNb3VzZUV2ZW50KGV2ZW50KV0pIHsKLSAgICAgICAgV0tQ
b3B1cENvbnRleHRNZW51KG5zTWVudSwgcG9pbnQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBERlBsdWdpbjo6aGFuZGxl
S2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKLXsKLSAgICBOU0V2
ZW50VHlwZSBldmVudFR5cGU7Ci0KLSAgICBpZiAoIWdldEV2ZW50VHlwZUZyb21XZWJFdmVudChl
dmVudCwgZXZlbnRUeXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTlNVSW50ZWdl
ciBtb2RpZmllckZsYWdzID0gbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChldmVudCk7Ci0gICAg
Ci0gICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQga2V5RXZlbnRXaXRoVHlwZTpldmVu
dFR5cGUgbG9jYXRpb246TlNaZXJvUG9pbnQgbW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRp
bWVzdGFtcDowIHdpbmRvd051bWJlcjowIGNvbnRleHQ6MCBjaGFyYWN0ZXJzOmV2ZW50LnRleHQo
KSBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6ZXZlbnQudW5tb2RpZmllZFRleHQoKSBpc0FS
ZXBlYXQ6ZXZlbnQuaXNBdXRvUmVwZWF0KCkga2V5Q29kZTpldmVudC5uYXRpdmVWaXJ0dWFsS2V5
Q29kZSgpXTsKLSAgICAKLSAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgewotICAgIGNhc2UgV2Vi
RXZlbnQ6OktleURvd246Ci0gICAgICAgIHJldHVybiBbbV9wZGZMYXllckNvbnRyb2xsZXIga2V5
RG93bjpmYWtlRXZlbnRdOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotYm9vbCBQREZQbHVnaW46Omhh
bmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgYXJndW1lbnQpCi17Ci0gICAgaWYgKGNvbW1hbmROYW1lID09ICJjb3B5IikKLSAgICAgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyIGNvcHlTZWxlY3Rpb25dOwotICAgIGVsc2UgaWYgKGNvbW1h
bmROYW1lID09ICJzZWxlY3RBbGwiKQotICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2Vs
ZWN0QWxsXTsKLSAgICBlbHNlIGlmIChjb21tYW5kTmFtZSA9PSAidGFrZUZpbmRTdHJpbmdGcm9t
U2VsZWN0aW9uIikgewotICAgICAgICBOU1N0cmluZyAqc3RyaW5nID0gW21fcGRmTGF5ZXJDb250
cm9sbGVyIGN1cnJlbnRTZWxlY3Rpb25dLnN0cmluZzsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRl
Y2xhcmF0aW9ucyIKLSAgICAgICAgaWYgKHN0cmluZy5sZW5ndGgpCi0gICAgICAgICAgICB3cml0
ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TRmluZFBib2FyZCwgQFsgW3N0cmluZyBkYXRhVXNpbmdFbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10gXSwgQFsgTlNQYXN0ZWJvYXJkVHlwZVN0cmluZyBd
KTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBQREZQbHVnaW46OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0
cmluZyYgY29tbWFuZE5hbWUpCi17Ci0gICAgaWYgKGNvbW1hbmROYW1lID09ICJjb3B5IiB8fCBj
b21tYW5kTmFtZSA9PSAidGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uIikKLSAgICAgICAgcmV0
dXJuIFttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50U2VsZWN0aW9uXTsKLQotICAgIGlmIChj
b21tYW5kTmFtZSA9PSAic2VsZWN0QWxsIikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpzZXRTY3JvbGxPZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCi17Ci0gICAgbV9zY3JvbGxPZmZzZXQgPSBJbnRTaXplKG9m
ZnNldC54KCksIG9mZnNldC55KCkpOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAg
IFttX3BkZkxheWVyQ29udHJvbGxlciBzZXRTY3JvbGxQb3NpdGlvbjpvZmZzZXRdOwotCi0gICAg
aWYgKG1fYWN0aXZlQW5ub3RhdGlvbikKLSAgICAgICAgbV9hY3RpdmVBbm5vdGF0aW9uLT51cGRh
dGVHZW9tZXRyeSgpOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQotdm9pZCBQ
REZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICgmc2Nyb2xsYmFyID09IGhvcml6b250YWxT
Y3JvbGxiYXIoKSkKLSAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyIHNldE5lZWRz
RGlzcGxheV07Ci0gICAgZWxzZSBpZiAoJnNjcm9sbGJhciA9PSB2ZXJ0aWNhbFNjcm9sbGJhcigp
KQotICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyIHNldE5lZWRzRGlzcGxheV07Ci19
Ci0KLXZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIFttX3Njcm9sbENvcm5lckxheWVyIHNldE5lZWRzRGlzcGxheV07
Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjppc0Z1bGxGcmFtZVBsdWdpbigpIGNvbnN0Ci17Ci0gICAg
Ly8gPG9iamVjdD4gb3IgPGVtYmVkPiBwbHVnaW5zIHdpbGwgYXBwZWFyIHRvIGJlIGluIHRoZWly
IHBhcmVudCBmcmFtZSwgc28gd2UgaGF2ZSB0bwotICAgIC8vIGNoZWNrIHdoZXRoZXIgb3VyIGZy
YW1lJ3Mgd2lkZ2V0IGlzIGV4YWN0bHkgb3VyIFBsdWdpblZpZXcuCi0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCk7Ci0gICAgcmV0dXJu
IGRvY3VtZW50LT5pc1BsdWdpbkRvY3VtZW50KCkgJiYgc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1l
bnQqPihkb2N1bWVudCktPnBsdWdpbldpZGdldCgpID09IHBsdWdpblZpZXcoKTsKLX0KLQotYm9v
bCBQREZQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIHJldHVy
biB3ZWJGcmFtZSgpLT5pc01haW5GcmFtZSgpICYmIGlzRnVsbEZyYW1lUGx1Z2luKCk7Ci19Ci0K
LXZvaWQgUERGUGx1Z2luOjpjbGlja2VkTGluayhOU1VSTCAqdXJsKQotewotICAgIFVSTCBjb3Jl
VVJMID0gdXJsOwotICAgIGlmIChwcm90b2NvbElzSmF2YVNjcmlwdChjb3JlVVJMKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRnJhbWUqIGZyYW1lID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCk7
Ci0KLSAgICBSZWZQdHI8RXZlbnQ+IGNvcmVFdmVudDsKLSAgICBpZiAobV9sYXN0TW91c2VFdmVu
dC50eXBlKCkgIT0gV2ViRXZlbnQ6Ok5vVHlwZSkKLSAgICAgICAgY29yZUV2ZW50ID0gTW91c2VF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBmcmFtZS0+ZG9jdW1lbnQoKS0+
ZGVmYXVsdFZpZXcoKSwgcGxhdGZvcm0obV9sYXN0TW91c2VFdmVudCksIDAsIDApOwotCi0gICAg
ZnJhbWUtPmxvYWRlcigpLnVybFNlbGVjdGVkKGNvcmVVUkwsIGVtcHR5U3RyaW5nKCksIGNvcmVF
dmVudC5nZXQoKSwgTG9ja0hpc3Rvcnk6Ok5vLCBMb2NrQmFja0ZvcndhcmRMaXN0OjpObywgTWF5
YmVTZW5kUmVmZXJyZXIsIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZEFsbG93
KTsKLX0KLQotdm9pZCBQREZQbHVnaW46OnNldEFjdGl2ZUFubm90YXRpb24oUERGQW5ub3RhdGlv
biAqYW5ub3RhdGlvbikKLXsKLSAgICBpZiAoIXN1cHBvcnRzRm9ybXMoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1fYWN0aXZlQW5ub3RhdGlvbikKLSAgICAgICAgbV9hY3RpdmVBbm5v
dGF0aW9uLT5jb21taXQoKTsKLQotICAgIGlmIChhbm5vdGF0aW9uKSB7Ci0jcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVw
cmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgICAgIGlmIChbYW5ub3RhdGlvbiBpc0tpbmRPZkNs
YXNzOnBkZkFubm90YXRpb25UZXh0V2lkZ2V0Q2xhc3MoKV0gJiYgc3RhdGljX2Nhc3Q8UERGQW5u
b3RhdGlvblRleHRXaWRnZXQgKj4oYW5ub3RhdGlvbikuaXNSZWFkT25seSkgewotICAgICAgICAg
ICAgbV9hY3RpdmVBbm5vdGF0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotCi0gICAgICAgIG1fYWN0aXZl
QW5ub3RhdGlvbiA9IFBERlBsdWdpbkFubm90YXRpb246OmNyZWF0ZShhbm5vdGF0aW9uLCBtX3Bk
ZkxheWVyQ29udHJvbGxlci5nZXQoKSwgdGhpcyk7Ci0gICAgICAgIG1fYWN0aXZlQW5ub3RhdGlv
bi0+YXR0YWNoKG1fYW5ub3RhdGlvbkNvbnRhaW5lci5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIG1fYWN0aXZlQW5ub3RhdGlvbiA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjpz
dXBwb3J0c0Zvcm1zKCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc3VwcG9ydCBmb3JtcyBmb3IgZnVs
bC1tYWluLWZyYW1lIGFuZCA8aWZyYW1lPiBQREZzLCBidXQgbm90IDxlbWJlZD4gb3IgPG9iamVj
dD4sIGJlY2F1c2UgdGhvc2UgY2FzZXMgZG8gbm90IGhhdmUgdGhlaXIgb3duIERvY3VtZW50IGlu
dG8gd2hpY2ggdG8gaW5qZWN0IGZvcm0gZWxlbWVudHMuCi0gICAgcmV0dXJuIGlzRnVsbEZyYW1l
UGx1Z2luKCk7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpub3RpZnlDb250ZW50U2NhbGVGYWN0b3JD
aGFuZ2VkKENHRmxvYXQgc2NhbGVGYWN0b3IpCi17Ci0gICAgaWYgKGhhbmRsZXNQYWdlU2NhbGVG
YWN0b3IoKSkKLSAgICAgICAgcGx1Z2luVmlldygpLT5zZXRQYWdlU2NhbGVGYWN0b3Ioc2NhbGVG
YWN0b3IsIEludFBvaW50KCkpOwotCi0gICAgY2FsY3VsYXRlU2l6ZXMoKTsKLSAgICB1cGRhdGVT
Y3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpub3RpZnlEaXNwbGF5TW9kZUNoYW5n
ZWQoaW50KQotewotICAgIGNhbGN1bGF0ZVNpemVzKCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygp
OwotfQotCi1SZWZQdHI8U2hhcmVkQnVmZmVyPiBQREZQbHVnaW46OmxpdmVSZXNvdXJjZURhdGEo
KSBjb25zdAotewotICAgIE5TRGF0YSAqcGRmRGF0YSA9IGxpdmVEYXRhKCk7Ci0KLSAgICBpZiAo
IXBkZkRhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFNoYXJlZEJ1
ZmZlcjo6d3JhcE5TRGF0YShwZGZEYXRhKTsKLX0KLQotdm9pZCBQREZQbHVnaW46OnNhdmVUb1BE
RigpCi17Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBub3RpZnkgdGhlIHVzZXIg
dGhhdCB0aGV5IGNhbid0IHNhdmUgYmVmb3JlIHRoZSBkb2N1bWVudCBpcyBmaW5pc2hlZCBsb2Fk
aW5nLgotICAgIC8vIFBERlZpZXdDb250cm9sbGVyIGRvZXMgYW4gTlNCZWVwKCksIGJ1dCB0aGF0
IHNlZW1zIGluc3VmZmljaWVudC4KLSAgICBpZiAoIXBkZkRvY3VtZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7Ci0gICAgd2ViRnJhbWUoKS0+
cGFnZSgpLT5zYXZlUERGVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIobV9zdWdnZXN0ZWRGaWxlbmFt
ZSwgd2ViRnJhbWUoKS0+dXJsKCksIHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4o
W2RhdGEgYnl0ZXNdKSwgW2RhdGEgbGVuZ3RoXSk7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpvcGVu
V2l0aE5hdGl2ZUFwcGxpY2F0aW9uKCkKLXsKLSAgICBpZiAoIW1fdGVtcG9yYXJ5UERGVVVJRCkg
ewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IG5vdGlmeSB0aGUgdXNlciB0
aGF0IHRoZXkgY2FuJ3Qgc2F2ZSBiZWZvcmUgdGhlIGRvY3VtZW50IGlzIGZpbmlzaGVkIGxvYWRp
bmcuCi0gICAgICAgIC8vIFBERlZpZXdDb250cm9sbGVyIGRvZXMgYW4gTlNCZWVwKCksIGJ1dCB0
aGF0IHNlZW1zIGluc3VmZmljaWVudC4KLSAgICAgICAgaWYgKCFwZGZEb2N1bWVudCgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIE5TRGF0YSAqZGF0YSA9IGxpdmVEYXRhKCk7Ci0K
LSAgICAgICAgbV90ZW1wb3JhcnlQREZVVUlEID0gV2ViQ29yZTo6Y3JlYXRlQ2Fub25pY2FsVVVJ
RFN0cmluZygpOwotICAgICAgICBBU1NFUlQobV90ZW1wb3JhcnlQREZVVUlEKTsKLQotICAgICAg
ICB3ZWJGcmFtZSgpLT5wYWdlKCktPnNhdmVQREZUb1RlbXBvcmFyeUZvbGRlckFuZE9wZW5XaXRo
TmF0aXZlQXBwbGljYXRpb24obV9zdWdnZXN0ZWRGaWxlbmFtZSwgd2ViRnJhbWUoKS0+dXJsKCks
IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oW2RhdGEgYnl0ZXNdKSwgW2RhdGEg
bGVuZ3RoXSwgbV90ZW1wb3JhcnlQREZVVUlEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpPcGVu
UERGRnJvbVRlbXBvcmFyeUZvbGRlcldpdGhOYXRpdmVBcHBsaWNhdGlvbihtX3RlbXBvcmFyeVBE
RlVVSUQpKTsKLX0KLQotdm9pZCBQREZQbHVnaW46OndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNT
dHJpbmcgKnBhc3RlYm9hcmROYW1lLCBOU0FycmF5ICppdGVtcywgTlNBcnJheSAqdHlwZXMpCi17
Ci0gICAgVmVjdG9yPFN0cmluZz4gcGFzdGVib2FyZFR5cGVzOwotCi0gICAgZm9yIChOU1N0cmlu
ZyAqdHlwZSBpbiB0eXBlcykKLSAgICAgICAgcGFzdGVib2FyZFR5cGVzLmFwcGVuZCh0eXBlKTsK
LQotICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3Rl
Ym9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwKLSAgICAgICAgTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzOjpSZXBseShuZXdD
aGFuZ2VDb3VudCksIDApOwotCi0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwLCBjb3VudCA9IGl0
ZW1zLmNvdW50OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBOU1N0cmluZyAqdHlwZSA9IFt0
eXBlcyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBOU0RhdGEgKmRhdGEgPSBbaXRlbXMgb2Jq
ZWN0QXRJbmRleDppXTsKLQotICAgICAgICAvLyBXZSBkb24ndCBleHBlY3QgdGhlIGRhdGEgZm9y
IGFueSBpdGVtcyB0byBiZSBlbXB0eSwgYnV0IGFyZW4ndCBjb21wbGV0ZWx5IHN1cmUuCi0gICAg
ICAgIC8vIEF2b2lkIGNyYXNoaW5nIGluIHRoZSBTaGFyZWRNZW1vcnkgY29uc3RydWN0b3IgaW4g
cmVsZWFzZSBidWlsZHMgaWYgd2UncmUgd3JvbmcuCi0gICAgICAgIEFTU0VSVChkYXRhLmxlbmd0
aCk7Ci0gICAgICAgIGlmICghZGF0YS5sZW5ndGgpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOk5TU3RyaW5nUGJvYXJkVHlwZV0gfHwg
W3R5cGUgaXNFcXVhbFRvU3RyaW5nOk5TUGFzdGVib2FyZFR5cGVTdHJpbmddKSB7Ci0gICAgICAg
ICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHBsYWluVGV4dFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0
cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGEgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddKTsKLSAgICAgICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmlu
Z0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHR5cGUsIHBsYWluVGV4dFN0cmluZy5nZXQoKSksIE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlOjpS
ZXBseShuZXdDaGFuZ2VDb3VudCksIDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKGRh
dGEpOwotCi0gICAgICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICAg
ICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxv
Y2F0ZShidWZmZXItPnNpemUoKSk7Ci0gICAgICAgICAgICBtZW1jcHkoc2hhcmVkTWVtb3J5LT5k
YXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7Ci0gICAgICAgICAgICBzaGFy
ZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6
UmVhZE9ubHkpOwotICAgICAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJk
QnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgdHlwZSwgaGFuZGxlLCBidWZmZXItPnNpemUo
KSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JU
eXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIFBERlBsdWdpbjo6c2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmli
dXRlZFN0cmluZyAqc3RyaW5nLCBDR1BvaW50IHBvaW50KQotewotICAgIERpY3Rpb25hcnlQb3B1
cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdp
biA9IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoSW50UG9pbnQocG9pbnQpKTsKLSAgICBk
aWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzdHJpbmc7Ci0KLSAgICB3ZWJG
cmFtZSgpLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURp
Y3Rpb25hcnlMb29rdXAoZGljdGlvbmFyeVBvcHVwSW5mbykpOwotfQotCi11bnNpZ25lZCBQREZQ
bHVnaW46OmNvdW50RmluZE1hdGNoZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFdlYkNvcmU6OkZp
bmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNoQ291bnQpCi17Ci0gICAgaWYgKCF0
YXJnZXQubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IG5zT3B0aW9ucyA9
IChvcHRpb25zICYgRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpID8gTlNDYXNlSW5zZW5zaXRp
dmVTZWFyY2ggOiAwOwotCi0gICAgcmV0dXJuIFtbcGRmRG9jdW1lbnQoKSBmaW5kU3RyaW5nOnRh
cmdldCB3aXRoT3B0aW9uczpuc09wdGlvbnNdIGNvdW50XTsKLX0KLQotUERGU2VsZWN0aW9uICpQ
REZQbHVnaW46Om5leHRNYXRjaEZvclN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgQk9PTCBz
ZWFyY2hGb3J3YXJkLCBCT09MIGNhc2VTZW5zaXRpdmUsIEJPT0wgd3JhcFNlYXJjaCwgUERGU2Vs
ZWN0aW9uICppbml0aWFsU2VsZWN0aW9uLCBCT09MIHN0YXJ0SW5TZWxlY3Rpb24pCi17Ci0gICAg
aWYgKCF0YXJnZXQubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBOU1N0cmlu
Z0NvbXBhcmVPcHRpb25zIG9wdGlvbnMgPSAwOwotICAgIGlmICghc2VhcmNoRm9yd2FyZCkKLSAg
ICAgICAgb3B0aW9ucyB8PSBOU0JhY2t3YXJkc1NlYXJjaDsKLQotICAgIGlmICghY2FzZVNlbnNp
dGl2ZSkKLSAgICAgICAgb3B0aW9ucyB8PSBOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaDsKLQotICAg
IFBERkRvY3VtZW50ICpkb2N1bWVudCA9IHBkZkRvY3VtZW50KCkuZ2V0KCk7Ci0KLSAgICBSZXRh
aW5QdHI8UERGU2VsZWN0aW9uPiBzZWxlY3Rpb25Gb3JJbml0aWFsU2VhcmNoID0gYWRvcHROUyhb
aW5pdGlhbFNlbGVjdGlvbiBjb3B5XSk7Ci0gICAgaWYgKHN0YXJ0SW5TZWxlY3Rpb24pIHsKLSAg
ICAgICAgLy8gSW5pdGlhbGx5IHdlIHdhbnQgdG8gaW5jbHVkZSB0aGUgc2VsZWN0ZWQgdGV4dCBp
biB0aGUgc2VhcmNoLiBTbyB3ZSBtdXN0IG1vZGlmeSB0aGUgc3RhcnRpbmcgc2VhcmNoCi0gICAg
ICAgIC8vIHNlbGVjdGlvbiB0byBmaXQgUERGRG9jdW1lbnQncyBzZWFyY2ggcmVxdWlyZW1lbnRz
OiBzZWxlY3Rpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID49IDEsIGJlZ2luIGJlZm9yZQotICAgICAg
ICAvLyB0aGUgY3VycmVudCBzZWxlY3Rpb24gKGlmIHNlYXJjaGluZyBmb3J3YXJkcykgb3IgYWZ0
ZXIgKGlmIHNlYXJjaGluZyBiYWNrd2FyZHMpLgotICAgICAgICBpbnQgaW5pdGlhbFNlbGVjdGlv
bkxlbmd0aCA9IFtbaW5pdGlhbFNlbGVjdGlvbiBzdHJpbmddIGxlbmd0aF07Ci0gICAgICAgIGlm
IChzZWFyY2hGb3J3YXJkKSB7Ci0gICAgICAgICAgICBbc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJj
aCBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0OjFdOwotICAgICAgICAgICAgW3NlbGVjdGlvbkZvcklu
aXRpYWxTZWFyY2ggZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6LWluaXRpYWxTZWxlY3Rpb25MZW5ndGhd
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgW3NlbGVjdGlvbkZvckluaXRpYWxTZWFy
Y2ggZXh0ZW5kU2VsZWN0aW9uQXRFbmQ6MV07Ci0gICAgICAgICAgICBbc2VsZWN0aW9uRm9ySW5p
dGlhbFNlYXJjaCBleHRlbmRTZWxlY3Rpb25BdFN0YXJ0Oi1pbml0aWFsU2VsZWN0aW9uTGVuZ3Ro
XTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFBERlNlbGVjdGlvbiAqZm91bmRTZWxlY3Rpb24g
PSBbZG9jdW1lbnQgZmluZFN0cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjpzZWxlY3Rpb25Gb3JJ
bml0aWFsU2VhcmNoLmdldCgpIHdpdGhPcHRpb25zOm9wdGlvbnNdOwotCi0gICAgLy8gSWYgd2Ug
Zmlyc3Qgc2VhcmNoZWQgaW4gdGhlIHNlbGVjdGlvbiwgYW5kIHdlIGZvdW5kIHRoZSBzZWxlY3Rp
b24sIHNlYXJjaCBhZ2FpbiBmcm9tIGp1c3QgcGFzdCB0aGUgc2VsZWN0aW9uLgotICAgIGlmIChz
dGFydEluU2VsZWN0aW9uICYmIFtmb3VuZFNlbGVjdGlvbiBpc0VxdWFsOmluaXRpYWxTZWxlY3Rp
b25dKQotICAgICAgICBmb3VuZFNlbGVjdGlvbiA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdl
dCBmcm9tU2VsZWN0aW9uOmluaXRpYWxTZWxlY3Rpb24gd2l0aE9wdGlvbnM6b3B0aW9uc107Ci0K
LSAgICBpZiAoIWZvdW5kU2VsZWN0aW9uICYmIHdyYXBTZWFyY2gpIHsKLSAgICAgICAgYXV0byBl
bXB0eVNlbGVjdGlvbiA9IGFkb3B0TlMoW1twZGZTZWxlY3Rpb25DbGFzcygpIGFsbG9jXSBpbml0
V2l0aERvY3VtZW50OmRvY3VtZW50XSk7Ci0gICAgICAgIGZvdW5kU2VsZWN0aW9uID0gW2RvY3Vt
ZW50IGZpbmRTdHJpbmc6dGFyZ2V0IGZyb21TZWxlY3Rpb246ZW1wdHlTZWxlY3Rpb24uZ2V0KCkg
d2l0aE9wdGlvbnM6b3B0aW9uc107Ci0gICAgfQotCi0gICAgcmV0dXJuIGZvdW5kU2VsZWN0aW9u
OwotfQotCi1ib29sIFBERlBsdWdpbjo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwg
V2ViQ29yZTo6RmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKLXsK
LSAgICBCT09MIHNlYXJjaEZvcndhcmQgPSAhKG9wdGlvbnMgJiBGaW5kT3B0aW9uc0JhY2t3YXJk
cyk7Ci0gICAgQk9PTCBjYXNlU2Vuc2l0aXZlID0gIShvcHRpb25zICYgRmluZE9wdGlvbnNDYXNl
SW5zZW5zaXRpdmUpOwotICAgIEJPT0wgd3JhcFNlYXJjaCA9IG9wdGlvbnMgJiBGaW5kT3B0aW9u
c1dyYXBBcm91bmQ7Ci0KLSAgICB1bnNpZ25lZCBtYXRjaENvdW50OwotICAgIGlmICghbWF4TWF0
Y2hDb3VudCkgewotICAgICAgICAvLyBJZiB0aGUgbWF4IHdhcyB6ZXJvLCBhbnkgcmVzdWx0IG1l
YW5zIHdlIGV4Y2VlZGVkIHRoZSBtYXguIFdlIGNhbiBza2lwIGNvbXB1dGluZyB0aGUgYWN0dWFs
IGNvdW50LgotICAgICAgICBtYXRjaENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtXS01v
cmVUaGFuTWF4aW11bU1hdGNoQ291bnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1hdGNoQ291
bnQgPSBjb3VudEZpbmRNYXRjaGVzKHRhcmdldCwgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7Ci0g
ICAgICAgIGlmIChtYXRjaENvdW50ID4gbWF4TWF0Y2hDb3VudCkKLSAgICAgICAgICAgIG1hdGNo
Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa1dLTW9yZVRoYW5NYXhpbXVtTWF0Y2hDb3Vu
dCk7Ci0gICAgfQotCi0gICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgUERGU2Vs
ZWN0aW9uKiBzZWFyY2hTZWxlY3Rpb24gPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2VhcmNoU2Vs
ZWN0aW9uXTsKLSAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGZpbmRTdHJpbmc6dGFyZ2V0
IGNhc2VTZW5zaXRpdmU6Y2FzZVNlbnNpdGl2ZSBoaWdobGlnaHRNYXRjaGVzOllFU107Ci0gICAg
ICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXRTZWFyY2hTZWxlY3Rpb246c2VhcmNoU2VsZWN0
aW9uXTsKLSAgICAgICAgbV9sYXN0Rm91bmRTdHJpbmcgPSBlbXB0eVN0cmluZygpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fbGFzdEZvdW5kU3RyaW5nID09IHRh
cmdldCkgewotICAgICAgICBQREZTZWxlY3Rpb24gKnNlbGVjdGlvbiA9IG5leHRNYXRjaEZvclN0
cmluZyh0YXJnZXQsIHNlYXJjaEZvcndhcmQsIGNhc2VTZW5zaXRpdmUsIHdyYXBTZWFyY2gsIFtt
X3BkZkxheWVyQ29udHJvbGxlciBzZWFyY2hTZWxlY3Rpb25dLCBOTyk7Ci0gICAgICAgIGlmICgh
c2VsZWN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFttX3BkZkxh
eWVyQ29udHJvbGxlciBzZXRTZWFyY2hTZWxlY3Rpb246c2VsZWN0aW9uXTsKLSAgICAgICAgW21f
cGRmTGF5ZXJDb250cm9sbGVyIGdvdG9TZWxlY3Rpb246c2VsZWN0aW9uXTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgZmluZFN0cmluZzp0YXJnZXQgY2FzZVNl
bnNpdGl2ZTpjYXNlU2Vuc2l0aXZlIGhpZ2hsaWdodE1hdGNoZXM6WUVTXTsKLSAgICAgICAgbV9s
YXN0Rm91bmRTdHJpbmcgPSB0YXJnZXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hdGNoQ291bnQg
PiAwOwotfQotCi1ib29sIFBERlBsdWdpbjo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0
aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIEludFBvaW50IGxv
Y2FsUG9pbnQgPSBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4ocm91bmRlZEludFBvaW50KHBv
aW50KSk7Ci0gICAgUERGU2VsZWN0aW9uKiBsb29rdXBTZWxlY3Rpb24gPSBbbV9wZGZMYXllckNv
bnRyb2xsZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6Y29udmVydEZyb21QbHVnaW5Ub1BE
RlZpZXcobG9jYWxQb2ludCldOwotCi0gICAgaWYgKFtbbG9va3VwU2VsZWN0aW9uIHN0cmluZ10g
bGVuZ3RoXSkKLSAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNlYXJjaEluRGljdGlvbmFy
eVdpdGhTZWxlY3Rpb246bG9va3VwU2VsZWN0aW9uXTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFBERlBsdWdpbjo6Zm9jdXNOZXh0QW5ub3RhdGlvbigpCi17Ci0gICAgW21fcGRmTGF5
ZXJDb250cm9sbGVyIGFjdGl2YXRlTmV4dEFubm90YXRpb246ZmFsc2VdOwotfQotCi12b2lkIFBE
RlBsdWdpbjo6Zm9jdXNQcmV2aW91c0Fubm90YXRpb24oKQotewotICAgIFttX3BkZkxheWVyQ29u
dHJvbGxlciBhY3RpdmF0ZU5leHRBbm5vdGF0aW9uOnRydWVdOwotfQotCi12b2lkIFBERlBsdWdp
bjo6bm90aWZ5U2VsZWN0aW9uQ2hhbmdlZChQREZTZWxlY3Rpb24gKikKLXsKLSAgICB3ZWJGcmFt
ZSgpLT5wYWdlKCktPmRpZENoYW5nZVNlbGVjdGlvbigpOwotfQotCi1zdGF0aWMgY29uc3QgQ3Vy
c29yJiBwZGZMYXllckNvbnRyb2xsZXJDdXJzb3JUeXBlVG9DdXJzb3IoUERGTGF5ZXJDb250cm9s
bGVyQ3Vyc29yVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Uga1BE
RkxheWVyQ29udHJvbGxlckN1cnNvclR5cGVIYW5kOgotICAgICAgICByZXR1cm4gaGFuZEN1cnNv
cigpOwotICAgIGNhc2Uga1BERkxheWVyQ29udHJvbGxlckN1cnNvclR5cGVJQmVhbToKLSAgICAg
ICAgcmV0dXJuIGlCZWFtQ3Vyc29yKCk7Ci0gICAgY2FzZSBrUERGTGF5ZXJDb250cm9sbGVyQ3Vy
c29yVHlwZVBvaW50ZXI6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHBvaW50ZXJDdXJz
b3IoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpub3RpZnlDdXJzb3JDaGFuZ2VkKHVp
bnQ2NF90IHR5cGUpCi17Ci0gICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNldEN1cnNvcihwZGZMYXllckNvbnRyb2xsZXJDdXJzb3JUeXBlVG9DdXJz
b3Ioc3RhdGljX2Nhc3Q8UERGTGF5ZXJDb250cm9sbGVyQ3Vyc29yVHlwZT4odHlwZSkpKSk7Ci19
Ci0KLVN0cmluZyBQREZQbHVnaW46OmdldFNlbGVjdGlvblN0cmluZygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFtbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFNlbGVjdGlvbl0gc3RyaW5nXTsK
LX0KLQotU3RyaW5nIFBERlBsdWdpbjo6Z2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQoY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnRJ
blZpZXcgPSBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb252ZXJ0RnJvbVJvb3RWaWV3VG9Q
bHVnaW4ocm91bmRlZEludFBvaW50KHBvaW50KSkpOwotICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0
aW9uRm9yV29yZCA9IFttX3BkZkxheWVyQ29udHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQ
b2ludDpwb2ludEluVmlld107Ci0gICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRT
ZWxlY3Rpb246c2VsZWN0aW9uRm9yV29yZF07Ci0gICAgCi0gICAgcmV0dXJuIFtzZWxlY3Rpb25G
b3JXb3JkIHN0cmluZ107Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjpleGlzdGluZ1NlbGVjdGlvbkNv
bnRhaW5zUG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYXRpb25JblZpZXdDb29y
ZGluYXRlcykgY29uc3QKLXsKLSAgICBQREZTZWxlY3Rpb24gKmN1cnJlbnRTZWxlY3Rpb24gPSBb
bV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFNlbGVjdGlvbl07Ci0gICAgaWYgKCFjdXJyZW50
U2VsZWN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgSW50UG9pbnQgcG9p
bnRJblBERlZpZXcgPSBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb252ZXJ0RnJvbVJvb3RW
aWV3VG9QbHVnaW4ocm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpKSk7
Ci0gICAgUERGU2VsZWN0aW9uICpzZWxlY3Rpb25Gb3JXb3JkID0gW21fcGRmTGF5ZXJDb250cm9s
bGVyIGdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50OnBvaW50SW5QREZWaWV3XTsKLQotICAgIE5T
VUludGVnZXIgY3VycmVudFBhZ2VJbmRleCA9IFttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50
UGFnZUluZGV4XTsKLSAgICAKLSAgICBOU0FycmF5ICpzZWxlY3Rpb25SZWN0cyA9IFttX3BkZkxh
eWVyQ29udHJvbGxlciByZWN0c0ZvclNlbGVjdGlvbkluTGF5b3V0U3BhY2U6Y3VycmVudFNlbGVj
dGlvbl07Ci0gICAgaWYgKCFzZWxlY3Rpb25SZWN0cyB8fCAhc2VsZWN0aW9uUmVjdHMuY291bnQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoY3VycmVudFBhZ2VJbmRleCA+
PSBzZWxlY3Rpb25SZWN0cy5jb3VudCkKLSAgICAgICAgY3VycmVudFBhZ2VJbmRleCA9IHNlbGVj
dGlvblJlY3RzLmNvdW50IC0gMTsKLQotICAgIE5TQXJyYXkgKndvcmRTZWxlY3Rpb25SZWN0cyA9
IFttX3BkZkxheWVyQ29udHJvbGxlciByZWN0c0ZvclNlbGVjdGlvbkluTGF5b3V0U3BhY2U6c2Vs
ZWN0aW9uRm9yV29yZF07Ci0gICAgaWYgKCF3b3JkU2VsZWN0aW9uUmVjdHMgfHwgIXdvcmRTZWxl
Y3Rpb25SZWN0cy5jb3VudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTlNWYWx1ZSAq
c2VsZWN0aW9uQm91bmRzID0gW3NlbGVjdGlvblJlY3RzIG9iamVjdEF0SW5kZXg6Y3VycmVudFBh
Z2VJbmRleF07Ci0gICAgTlNWYWx1ZSAqd29yZFNlbGVjdGlvbkJvdW5kcyA9IFt3b3JkU2VsZWN0
aW9uUmVjdHMgb2JqZWN0QXRJbmRleDowXTsKLQotICAgIE5TUmVjdCBzZWxlY3Rpb25Cb3VuZHNS
ZWN0ID0gc2VsZWN0aW9uQm91bmRzLnJlY3RWYWx1ZTsKLSAgICBOU1JlY3Qgd29yZFNlbGVjdGlv
bkJvdW5kc1JlY3QgPSB3b3JkU2VsZWN0aW9uQm91bmRzLnJlY3RWYWx1ZTsKLSAgICByZXR1cm4g
TlNJbnRlcnNlY3RzUmVjdCh3b3JkU2VsZWN0aW9uQm91bmRzUmVjdCwgc2VsZWN0aW9uQm91bmRz
UmVjdCk7Ci19Ci0KLXN0YXRpYyBOU1BvaW50IHBvaW50SW5MYXlvdXRTcGFjZUZvclBvaW50SW5X
aW5kb3dTcGFjZShQREZMYXllckNvbnRyb2xsZXIqIHBkZkxheWVyQ29udHJvbGxlciwgTlNQb2lu
dCBwb2ludEluVmlldykKLXsKLSAgICBDR1BvaW50IHBvaW50ID0gTlNQb2ludFRvQ0dQb2ludChw
b2ludEluVmlldyk7Ci0gICAgQ0dQb2ludCBzY3JvbGxPZmZzZXQgPSBbcGRmTGF5ZXJDb250cm9s
bGVyIHNjcm9sbFBvc2l0aW9uXTsKLSAgICBDR0Zsb2F0IHNjYWxlRmFjdG9yID0gW3BkZkxheWVy
Q29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3JdOwotCi0gICAgc2Nyb2xsT2Zmc2V0LnkgPSBb
cGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb21dLmhlaWdodCAtIE5T
UmVjdFRvQ0dSZWN0KFtwZGZMYXllckNvbnRyb2xsZXIgZnJhbWVdKS5zaXplLmhlaWdodCAtIHNj
cm9sbE9mZnNldC55OwotICAgIAotICAgIENHUG9pbnQgbmV3UG9pbnQgPSBDR1BvaW50TWFrZShz
Y3JvbGxPZmZzZXQueCArIHBvaW50LngsIHNjcm9sbE9mZnNldC55ICsgcG9pbnQueSk7Ci0gICAg
bmV3UG9pbnQueCAvPSBzY2FsZUZhY3RvcjsKLSAgICBuZXdQb2ludC55IC89IHNjYWxlRmFjdG9y
OwotICAgIHJldHVybiBOU1BvaW50RnJvbUNHUG9pbnQobmV3UG9pbnQpOwotfQotCi1TdHJpbmcg
UERGUGx1Z2luOjpsb29rdXBUZXh0QXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgZGF0YSwg
UERGU2VsZWN0aW9uICoqc2VsZWN0aW9uUHRyLCBOU0RpY3Rpb25hcnkgKipvcHRpb25zKSBjb25z
dAotewotICAgIFBERlNlbGVjdGlvbiomIHNlbGVjdGlvbiA9ICpzZWxlY3Rpb25QdHI7Ci0KLSAg
ICBzZWxlY3Rpb24gPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFNlbGVjdGlvbl07Ci0g
ICAgaWYgKGV4aXN0aW5nU2VsZWN0aW9uQ29udGFpbnNQb2ludChsb2NhdGlvbkluVmlld0Nvb3Jk
aW5hdGVzKSkKLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5zdHJpbmc7Ci0gICAgICAgIAotICAg
IEludFBvaW50IHBvaW50SW5QREZWaWV3ID0gY29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcoY29u
dmVydEZyb21Sb290Vmlld1RvUGx1Z2luKHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluVmlld0Nv
b3JkaW5hdGVzKSkpOwotICAgIHNlbGVjdGlvbiA9IFttX3BkZkxheWVyQ29udHJvbGxlciBnZXRT
ZWxlY3Rpb25Gb3JXb3JkQXRQb2ludDpwb2ludEluUERGVmlld107Ci0gICAgaWYgKCFzZWxlY3Rp
b24pCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIE5TUG9pbnQgcG9pbnRJbkxheW91dFNwYWNl
ID0gcG9pbnRJbkxheW91dFNwYWNlRm9yUG9pbnRJbldpbmRvd1NwYWNlKG1fcGRmTGF5ZXJDb250
cm9sbGVyLmdldCgpLCBwb2ludEluUERGVmlldyk7Ci0KLSAgICBQREZQYWdlICpjdXJyZW50UGFn
ZSA9IFtbbV9wZGZMYXllckNvbnRyb2xsZXIgbGF5b3V0XSBwYWdlTmVhcmVzdFBvaW50OnBvaW50
SW5MYXlvdXRTcGFjZSBjdXJyZW50UGFnZTpbbV9wZGZMYXllckNvbnRyb2xsZXIgY3VycmVudFBh
Z2VdXTsKLSAgICAKLSAgICBOU1BvaW50IHBvaW50SW5QYWdlU3BhY2UgPSBbW21fcGRmTGF5ZXJD
b250cm9sbGVyIGxheW91dF0gY29udmVydFBvaW50OnBvaW50SW5MYXlvdXRTcGFjZSB0b1BhZ2U6
Y3VycmVudFBhZ2UgZm9yU2NhbGVGYWN0b3I6MS4wXTsKLSAgICAKLSAgICBmb3IgKFBERkFubm90
YXRpb24gKmFubm90YXRpb24gaW4gY3VycmVudFBhZ2UuYW5ub3RhdGlvbnMpIHsKLSAgICAgICAg
aWYgKCFbYW5ub3RhdGlvbiBpc0tpbmRPZkNsYXNzOnBkZkFubm90YXRpb25MaW5rQ2xhc3MoKV0p
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAKLSAgICAgICAgTlNSZWN0IGJvdW5kcyA9IGFu
bm90YXRpb24uYm91bmRzOwotICAgICAgICBpZiAoIU5TUG9pbnRJblJlY3QocG9pbnRJblBhZ2VT
cGFjZSwgYm91bmRzKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0jcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgICAgIFBERkFubm90YXRpb25MaW5rICpsaW5rQW5ub3Rh
dGlvbiA9IChQREZBbm5vdGF0aW9uTGluayAqKWFubm90YXRpb247Ci0jcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcG9wCi0gICAgICAgIE5TVVJMICp1cmwgPSBsaW5rQW5ub3RhdGlvbi5VUkw7Ci0g
ICAgICAgIGlmICghdXJsKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICBkYXRhLmFic29sdXRlTGlua1VSTCA9IHVybC5hYnNvbHV0ZVN0cmluZzsKLSAgICAgICAgZGF0
YS5saW5rTGFiZWwgPSBzZWxlY3Rpb24uc3RyaW5nOwotICAgICAgICByZXR1cm4gc2VsZWN0aW9u
LnN0cmluZzsKLSAgICB9Ci0gICAgCi0gICAgTlNTdHJpbmcgKmxvb2t1cFRleHQgPSBEaWN0aW9u
YXJ5TG9va3VwOjpzdHJpbmdGb3JQREZTZWxlY3Rpb24oc2VsZWN0aW9uLCBvcHRpb25zKTsKLSAg
ICBpZiAoIWxvb2t1cFRleHQgfHwgIWxvb2t1cFRleHQubGVuZ3RoKQotICAgICAgICByZXR1cm4g
IiI7Ci0KLSAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0Q3VycmVudFNlbGVjdGlvbjpzZWxl
Y3Rpb25dOwotICAgIHJldHVybiBsb29rdXBUZXh0OwotfQotCi1zdGF0aWMgTlNSZWN0IHJlY3RJ
blZpZXdTcGFjZUZvclJlY3RJbkxheW91dFNwYWNlKFBERkxheWVyQ29udHJvbGxlciogcGRmTGF5
ZXJDb250cm9sbGVyLCBOU1JlY3QgbGF5b3V0U3BhY2VSZWN0KQotewotICAgIENHUmVjdCBuZXdS
ZWN0ID0gTlNSZWN0VG9DR1JlY3QobGF5b3V0U3BhY2VSZWN0KTsKLSAgICBDR0Zsb2F0IHNjYWxl
RmFjdG9yID0gcGRmTGF5ZXJDb250cm9sbGVyLmNvbnRlbnRTY2FsZUZhY3RvcjsKLSAgICBDR1Bv
aW50IHNjcm9sbE9mZnNldCA9IHBkZkxheWVyQ29udHJvbGxlci5zY3JvbGxQb3NpdGlvbjsKLQot
ICAgIHNjcm9sbE9mZnNldC55ID0gcGRmTGF5ZXJDb250cm9sbGVyLmNvbnRlbnRTaXplUmVzcGVj
dGluZ1pvb20uaGVpZ2h0IC0gTlNSZWN0VG9DR1JlY3QocGRmTGF5ZXJDb250cm9sbGVyLmZyYW1l
KS5zaXplLmhlaWdodCAtIHNjcm9sbE9mZnNldC55OwotCi0gICAgbmV3UmVjdC5vcmlnaW4ueCAq
PSBzY2FsZUZhY3RvcjsKLSAgICBuZXdSZWN0Lm9yaWdpbi55ICo9IHNjYWxlRmFjdG9yOwotICAg
IG5ld1JlY3Quc2l6ZS53aWR0aCAqPSBzY2FsZUZhY3RvcjsKLSAgICBuZXdSZWN0LnNpemUuaGVp
Z2h0ICo9IHNjYWxlRmFjdG9yOwotCi0gICAgbmV3UmVjdC5vcmlnaW4ueCAtPSBzY3JvbGxPZmZz
ZXQueDsKLSAgICBuZXdSZWN0Lm9yaWdpbi55IC09IHNjcm9sbE9mZnNldC55OwotCi0gICAgcmV0
dXJuIE5TUmVjdEZyb21DR1JlY3QobmV3UmVjdCk7Ci19Ci0KLVdlYkNvcmU6OkZsb2F0UmVjdCBQ
REZQbHVnaW46OnJlY3RGb3JTZWxlY3Rpb25JblJvb3RWaWV3KFBERlNlbGVjdGlvbiAqc2VsZWN0
aW9uKSBjb25zdAotewotICAgIFBERlBhZ2UgKmN1cnJlbnRQYWdlID0gbmlsOwotICAgIE5TQXJy
YXkqIHBhZ2VzID0gc2VsZWN0aW9uLnBhZ2VzOwotICAgIGlmIChwYWdlcy5jb3VudCkKLSAgICAg
ICAgY3VycmVudFBhZ2UgPSAoUERGUGFnZSAqKVtwYWdlcyBvYmplY3RBdEluZGV4OjBdOwotCi0g
ICAgaWYgKCFjdXJyZW50UGFnZSkKLSAgICAgICAgY3VycmVudFBhZ2UgPSBbbV9wZGZMYXllckNv
bnRyb2xsZXIgY3VycmVudFBhZ2VdOwotICAgIAotICAgIE5TUmVjdCByZWN0SW5QYWdlU3BhY2Ug
PSBbc2VsZWN0aW9uIGJvdW5kc0ZvclBhZ2U6Y3VycmVudFBhZ2VdOwotICAgIE5TUmVjdCByZWN0
SW5MYXlvdXRTcGFjZSA9IFtbbV9wZGZMYXllckNvbnRyb2xsZXIgbGF5b3V0XSBjb252ZXJ0UmVj
dDpyZWN0SW5QYWdlU3BhY2UgZnJvbVBhZ2U6Y3VycmVudFBhZ2UgZm9yU2NhbGVGYWN0b3I6MS4w
XTsKLSAgICBOU1JlY3QgcmVjdEluVmlldyA9IHJlY3RJblZpZXdTcGFjZUZvclJlY3RJbkxheW91
dFNwYWNlKG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLCByZWN0SW5MYXlvdXRTcGFjZSk7Ci0K
LSAgICByZWN0SW5WaWV3Lm9yaWdpbiA9IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoSW50
UG9pbnQocmVjdEluVmlldy5vcmlnaW4pKTsKLQotICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFJl
Y3QocmVjdEluVmlldyk7Ci19Ci0KLUNHRmxvYXQgUERGUGx1Z2luOjpzY2FsZUZhY3RvcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0
b3JdOwotfQotCi12b2lkIFBERlBsdWdpbjo6cGVyZm9ybVdlYlNlYXJjaChOU1N0cmluZyAqc3Ry
aW5nKQotewotICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpTZWFyY2hUaGVXZWIoc3RyaW5nKSk7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjpwZXJmb3Jt
U3BvdGxpZ2h0U2VhcmNoKE5TU3RyaW5nICpzdHJpbmcpCi17Ci0gICAgd2ViRnJhbWUoKS0+cGFn
ZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlYXJjaFdpdGhTcG90bGlnaHQoc3Ry
aW5nKSk7Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldo
ZWVsRXZlbnQmIGV2ZW50KQotewotICAgIFBERkRpc3BsYXlNb2RlIGRpc3BsYXlNb2RlID0gW21f
cGRmTGF5ZXJDb250cm9sbGVyIGRpc3BsYXlNb2RlXTsKLQotICAgIGlmIChkaXNwbGF5TW9kZSA9
PSBrUERGRGlzcGxheVNpbmdsZVBhZ2VDb250aW51b3VzIHx8IGRpc3BsYXlNb2RlID09IGtQREZE
aXNwbGF5VHdvVXBDb250aW51b3VzKQotICAgICAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6Omhh
bmRsZVdoZWVsRXZlbnQocGxhdGZvcm0oZXZlbnQpKTsKLQotICAgIE5TVUludGVnZXIgY3VycmVu
dFBhZ2VJbmRleCA9IFttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50UGFnZUluZGV4XTsKLSAg
ICBib29sIGluRmlyc3RQYWdlID0gIWN1cnJlbnRQYWdlSW5kZXg7Ci0gICAgYm9vbCBpbkxhc3RQ
YWdlID0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGxhc3RQYWdlSW5kZXhdID09IGN1cnJlbnRQYWdl
SW5kZXg7Ci0KLSAgICBib29sIGF0U2Nyb2xsVG9wID0gIXNjcm9sbFBvc2l0aW9uKCkueSgpOwot
ICAgIGJvb2wgYXRTY3JvbGxCb3R0b20gPSBzY3JvbGxQb3NpdGlvbigpLnkoKSA9PSBtYXhpbXVt
U2Nyb2xsUG9zaXRpb24oKS55KCk7Ci0KLSAgICBib29sIGluTW9tZW50dW1TY3JvbGwgPSBldmVu
dC5tb21lbnR1bVBoYXNlKCkgIT0gV2ViV2hlZWxFdmVudDo6UGhhc2VOb25lOwotCi0gICAgaW50
IHNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwID0gZGVmYXVsdFNjcm9sbE1hZ25p
dHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwOwotCi0gICAgLy8gSW1wcmVjaXNlIGlucHV0IGRldmlj
ZXMgc2hvdWxkIGhhdmUgYSBsb3dlciB0aHJlc2hvbGQgc28gdGhhdCAiY2xpY2t5IiBzY3JvbGwg
d2hlZWxzIGNhbiBmbGlwIHBhZ2VzLgotICAgIGlmICghZXZlbnQuaGFzUHJlY2lzZVNjcm9sbGlu
Z0RlbHRhcygpKQotICAgICAgICBzY3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9
IDA7Ci0KLSAgICBpZiAoYXRTY3JvbGxCb3R0b20gJiYgIWluTGFzdFBhZ2UgJiYgZXZlbnQuZGVs
dGEoKS5oZWlnaHQoKSA8IDApIHsKLSAgICAgICAgaWYgKGV2ZW50LmRlbHRhKCkuaGVpZ2h0KCkg
PD0gLXNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwICYmICFpbk1vbWVudHVtU2Ny
b2xsKQotICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGdvdG9OZXh0UGFnZV07Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdFNjcm9sbFRvcCAmJiAhaW5G
aXJzdFBhZ2UgJiYgZXZlbnQuZGVsdGEoKS5oZWlnaHQoKSA+IDApIHsKLSAgICAgICAgaWYgKGV2
ZW50LmRlbHRhKCkuaGVpZ2h0KCkgPj0gc2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZs
aXAgJiYgIWluTW9tZW50dW1TY3JvbGwpIHsKLSAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJl
Z2luXTsKLSAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBnb3RvUHJldmlvdXNQYWdl
XTsKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtYXhpbXVtU2Ny
b2xsUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBTY3JvbGxh
YmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybShldmVudCkpOwotfQotCi1OU0RhdGEg
KlBERlBsdWdpbjo6bGl2ZURhdGEoKSBjb25zdAotewotICAgIGlmIChtX2FjdGl2ZUFubm90YXRp
b24pCi0gICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+Y29tbWl0KCk7Ci0KLSAgICAvLyBTYXZl
IGRhdGEgc3RyYWlnaHQgZnJvbSB0aGUgcmVzb3VyY2UgaW5zdGVhZCBvZiBQREZLaXQgaWYgdGhl
IGRvY3VtZW50IGlzCi0gICAgLy8gdW50b3VjaGVkIGJ5IHRoZSB1c2VyLCBzbyB0aGF0IFBERnMg
d2hpY2ggUERGS2l0IGNhbid0IGRpc3BsYXkgd2lsbCBzdGlsbCBiZSBkb3dubG9hZGFibGUuCi0g
ICAgaWYgKG1fcGRmRG9jdW1lbnRXYXNNdXRhdGVkKQotICAgICAgICByZXR1cm4gW21fcGRmRG9j
dW1lbnQgZGF0YVJlcHJlc2VudGF0aW9uXTsKLSAgICAKLSAgICByZXR1cm4gcmF3RGF0YSgpOwot
fQotCi1OU09iamVjdCAqUERGUGx1Z2luOjphY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5T2JqZWN0LmdldCgpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShQREZLSVRfUExVR0lOKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xs
ZXJTUEkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGTGF5ZXJD
b250cm9sbGVyU1BJLmgKaW5kZXggODU4ZjVmMTBjODVmNDVlOTVlNWQ4MmIzYjA3NzBkYWVmYWI1
NjJjNy4uNjEwYmM2OGE5NDg1MjIzMWZkMTMzMzA0OGNmOGZmZDZkMDZkYzdiZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZMYXllckNvbnRyb2xs
ZXJTUEkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERkxh
eWVyQ29udHJvbGxlclNQSS5oCkBAIC0yNiw0NCArMjYsMzYgQEAKICNpZm5kZWYgUERGTGF5ZXJD
b250cm9sbGVyU1BJX2gKICNkZWZpbmUgUERGTGF5ZXJDb250cm9sbGVyU1BJX2gKIAotI2luY2x1
ZGUgIlBERktpdEltcG9ydHMuaCIKLQogI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQotI2lmIFVT
RShERVBSRUNBVEVEX1BERl9QTFVHSU4pCi0KLSNpbmNsdWRlICJEZXByZWNhdGVkUERGTGF5ZXJD
b250cm9sbGVyU1BJLmgiCi0KLSNlbHNlIC8vIFVTRShERVBSRUNBVEVEX1BERl9QTFVHSU4pCiAK
ICNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KIAogQGNsYXNzIENQUmVhZGluZ01vZGVsOwogQGNs
YXNzIFBERlZpZXdMYXlvdXQ7CiAKLUBwcm90b2NvbCBQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0
ZSA8TlNPYmplY3Q+Ci0KLUBvcHRpb25hbAordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUERG
TGF5ZXJDb250cm9sbGVyQ3Vyc29yVHlwZSkgeworICAgIGtQREZMYXllckNvbnRyb2xsZXJDdXJz
b3JUeXBlUG9pbnRlciA9IDAsCisgICAga1BERkxheWVyQ29udHJvbGxlckN1cnNvclR5cGVIYW5k
LAorICAgIGtQREZMYXllckNvbnRyb2xsZXJDdXJzb3JUeXBlSUJlYW0sCit9OwogCi0tICh2b2lk
KXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9s
bGVyIHNjcm9sbFRvUG9pbnQ6KENHUG9pbnQpbmV3UG9zaXRpb247Ci0tICh2b2lkKXBkZkxheWVy
Q29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGludmFs
aWRhdGVSZWN0OihDR1JlY3QpcmVjdDsKLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVySW52YWxp
ZGF0ZUhVRDooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyOworQHByb3Rv
Y29sIFBERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIDxOU09iamVjdD4KIAotLSAodm9pZClwZGZM
YXllckNvbnRyb2xsZXJab29tSW46KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJv
bGxlcjsKLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyWm9vbU91dDooUERGTGF5ZXJDb250cm9s
bGVyICopcGRmTGF5ZXJDb250cm9sbGVyOworLSAodm9pZCl1cGRhdGVTY3JvbGxQb3NpdGlvbjoo
Q0dQb2ludCluZXdQb3NpdGlvbjsKKy0gKHZvaWQpd3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNB
cnJheSAqKWl0ZW1zIHdpdGhUeXBlczooTlNBcnJheSAqKXR5cGVzOworLSAodm9pZClzaG93RGVm
aW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKXN0cmluZyBh
dFBvaW50OihDR1BvaW50KXBvaW50OworLSAodm9pZClwZXJmb3JtV2ViU2VhcmNoOihOU1N0cmlu
ZyAqKXN0cmluZzsKKy0gKHZvaWQpcGVyZm9ybVNwb3RsaWdodFNlYXJjaDooTlNTdHJpbmcgKilz
dHJpbmc7CistICh2b2lkKW9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb247CistICh2b2lkKXNhdmVU
b1BERjsKIAogLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAq
KXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VBY3RpdmVBbm5vdGF0aW9uOihQREZBbm5vdGF0
aW9uICopYW5ub3RhdGlvbjsKLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNv
bnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgZGlkQ2xpY2tMaW5rV2l0aFVSTDooTlNVUkwg
Kil1cmw7CistICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICop
cGRmTGF5ZXJDb250cm9sbGVyIGNsaWNrZWRMaW5rV2l0aFVSTDooTlNVUkwgKil1cmw7CistICh2
b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250
cm9sbGVyIGRpZENoYW5nZUNvbnRlbnRTY2FsZUZhY3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcjsK
IC0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXll
ckNvbnRyb2xsZXIgZGlkQ2hhbmdlRGlzcGxheU1vZGU6KGludCltb2RlOwogLSAodm9pZClwZGZM
YXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBk
aWRDaGFuZ2VTZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKIAotLSAodm9pZClw
ZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxl
ciBjb3B5SXRlbXM6KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlczsK
LS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXll
ckNvbnRyb2xsZXIgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0
ZWRTdHJpbmcgKilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2ludDsKLS0gKHZvaWQpcGRmTGF5
ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgcGVy
Zm9ybVdlYlNlYXJjaEZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7Ci0tICh2b2lkKXBkZkxh
eWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIHBl
cmZvcm1TcG90bGlnaHRTZWFyY2hGb3JTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwotLSAodm9p
ZClwZGZMYXllckNvbnRyb2xsZXJTYXZlVG9QREY6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxh
eWVyQ29udHJvbGxlcjsKLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyT3BlbldpdGhOYXRpdmVB
cHBsaWNhdGlvbjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyOwotCi0t
IChOU0NvbG9yU3BhY2UqKXBkZkxheWVyQ29udHJvbGxlckNvbG9yU3BhY2U6KFBERkxheWVyQ29u
dHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcjsKKy0gKHZvaWQpc2V0TW91c2VDdXJzb3I6KFBE
RkxheWVyQ29udHJvbGxlckN1cnNvclR5cGUpY3Vyc29yVHlwZTsKIAogQGVuZAogCkBAIC03Miw3
MyArNjQsNzYgQEAKIAogQGludGVyZmFjZSBQREZMYXllckNvbnRyb2xsZXIgKCkKIAorQHByb3Bl
cnR5IChyZXRhaW4pIENBTGF5ZXIgKnBhcmVudExheWVyOwogQHByb3BlcnR5IChyZXRhaW4pIFBE
RkRvY3VtZW50ICpkb2N1bWVudDsKLUBwcm9wZXJ0eSAoYXNzaWduKSBpZDxQREZMYXllckNvbnRy
b2xsZXJEZWxlZ2F0ZT4gZGVsZWdhdGU7Ci1AcHJvcGVydHkgKHJldGFpbikgTlNBcnJheSAqc2Vh
cmNoTWF0Y2hlczsKK0Bwcm9wZXJ0eSAocmV0YWluKSBpZDxQREZMYXllckNvbnRyb2xsZXJEZWxl
Z2F0ZT4gZGVsZWdhdGU7CiAKIC0gKHZvaWQpc2V0RnJhbWVTaXplOihDR1NpemUpc2l6ZTsKIAot
LSAodm9pZClzZXREaXNwbGF5TW9kZTooaW50KW1vZGU7Ci0tIChpbnQpZGlzcGxheU1vZGU7Ci0t
IChpbnQpcmVhbERpc3BsYXlNb2RlOworLSAoUERGRGlzcGxheU1vZGUpZGlzcGxheU1vZGU7Cist
ICh2b2lkKXNldERpc3BsYXlNb2RlOihQREZEaXNwbGF5TW9kZSltb2RlOworLSAodm9pZClzZXRE
aXNwbGF5c1BhZ2VCcmVha3M6KEJPT0wpcGFnZUJyZWFrczsKKworLSAoQ0dGbG9hdCljb250ZW50
U2NhbGVGYWN0b3I7CistICh2b2lkKXNldENvbnRlbnRTY2FsZUZhY3RvcjooQ0dGbG9hdClzY2Fs
ZUZhY3RvcjsKKworLSAoQ0dGbG9hdClkZXZpY2VTY2FsZUZhY3RvcjsKKy0gKHZvaWQpc2V0RGV2
aWNlU2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7CiAKIC0gKENHU2l6ZSljb250ZW50
U2l6ZTsKIC0gKENHU2l6ZSljb250ZW50U2l6ZVJlc3BlY3Rpbmdab29tOwogCi0tIChDR0Zsb2F0
KWNvbnRlbnRTY2FsZUZhY3RvcjsKLS0gKHZvaWQpc2V0Q29udGVudFNjYWxlRmFjdG9yOihDR0Zs
b2F0KWNvbnRlbnRTY2FsZUZhY3RvcjsKKy0gKHZvaWQpc25hcHNob3RJbkNvbnRleHQ6KENHQ29u
dGV4dFJlZiljb250ZXh0OwogCi0tIChQREZWaWV3TGF5b3V0ICopbGF5b3V0OworLSAodm9pZClt
YWduaWZ5V2l0aE1hZ25pZmljYXRpb246KENHRmxvYXQpbWFnbmlmaWNhdGlvbiBhdFBvaW50OihD
R1BvaW50KXBvaW50IGltbWVkaWF0ZWx5OihCT09MKWltbWVkaWF0ZWx5OwogCi0tICh2b2lkKWRy
YXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0OwotLSAodm9pZClkcmF3SFVESW5Db250
ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsKKy0gKENHUG9pbnQpc2Nyb2xsUG9zaXRpb247Cist
ICh2b2lkKXNldFNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9uOworLSAodm9pZClz
Y3JvbGxXaXRoRGVsdGE6KENHU2l6ZSlkZWx0YTsKIAogLSAodm9pZCltb3VzZURvd246KE5TRXZl
bnQgKilldmVudDsKKy0gKHZvaWQpcmlnaHRNb3VzZURvd246KE5TRXZlbnQgKilldmVudDsKKy0g
KHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50OwogLSAodm9pZCltb3VzZVVwOihOU0V2
ZW50ICopZXZlbnQ7CiAtICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50OwotCi0t
IChCT09MKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50IGluSFVEV2l0aEJvdW5kczooQ0dSZWN0
KWJvdW5kczsKLS0gKEJPT0wpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50IGluSFVEV2l0aEJvdW5k
czooQ0dSZWN0KWJvdW5kczsKLS0gKEJPT0wpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQg
aW5IVURXaXRoQm91bmRzOihDR1JlY3QpYm91bmRzOworLSAodm9pZCltb3VzZUVudGVyZWQ6KE5T
RXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKilldmVudDsKIAog
LSAoTlNNZW51ICopbWVudUZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CiAKLS0gKE5TQXJyYXkg
KilwYWdlUmVjdHM7Ci0KLS0gKHZvaWQpc2V0VmlzaWJsZVJlY3Q6KENHUmVjdCl2aXNpYmxlUmVj
dDsKLQotLSAodm9pZClnb3RvU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247Ci0t
ICh2b2lkKWdvdG9EZXN0aW5hdGlvbjooUERGRGVzdGluYXRpb24gKilkZXN0aW5hdGlvbjsKLS0g
KHZvaWQpZ290b1JlY3Q6KENHUmVjdClyZWN0IG9uUGFnZTooUERGUGFnZSAqKXBhZ2U7CistIChO
U0FycmF5ICopZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9P
TClpc0Nhc2VTZW5zaXRpdmUgaGlnaGxpZ2h0TWF0Y2hlczooQk9PTClzaG91bGRIaWdobGlnaHRN
YXRjaGVzOwogCiAtIChQREZTZWxlY3Rpb24gKiljdXJyZW50U2VsZWN0aW9uOwogLSAodm9pZClz
ZXRDdXJyZW50U2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247Ci0KLS0gKHZvaWQp
c2VhcmNoSW5EaWN0aW9uYXJ5V2l0aFNlbGVjdGlvbjooUERGU2VsZWN0aW9uICopc2VsZWN0aW9u
OworLSAoUERGU2VsZWN0aW9uICopc2VhcmNoU2VsZWN0aW9uOworLSAodm9pZClzZXRTZWFyY2hT
ZWxlY3Rpb246KFBERlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKHZvaWQpZ290b1NlbGVjdGlv
bjooUERGU2VsZWN0aW9uICopc2VsZWN0aW9uOwogLSAoUERGU2VsZWN0aW9uICopZ2V0U2VsZWN0
aW9uRm9yV29yZEF0UG9pbnQ6KENHUG9pbnQpcG9pbnQ7CiAtIChOU0FycmF5ICopcmVjdHNGb3JT
ZWxlY3Rpb25JbkxheW91dFNwYWNlOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247CistIChOU0Fy
cmF5ICopcmVjdHNGb3JBbm5vdGF0aW9uSW5MYXlvdXRTcGFjZTooUERGQW5ub3RhdGlvbiAqKWFu
bm90YXRpb247CistIChQREZWaWV3TGF5b3V0ICopbGF5b3V0OworLSAoTlNSZWN0KWZyYW1lOwog
Ci0tIChOU0FycmF5ICopaGlnaGxpZ2h0czsKLS0gKHZvaWQpc2V0SGlnaGxpZ2h0czooTlNBcnJh
eSopaGlnaGxpZ2h0czsKLQotLSAoUERGU2VsZWN0aW9uICopc2VhcmNoU2VsZWN0aW9uOwotLSAo
TlNBcnJheSAqKXNlYXJjaE1hdGNoZXM7Ci0tICh2b2lkKXNldFNlYXJjaFNlbGVjdGlvbjooUERG
U2VsZWN0aW9uKilzZWxlY3Rpb247Ci0tIChOU0FycmF5ICopZmluZFN0cmluZzooTlNTdHJpbmcg
KilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTClpc0Nhc2VTZW5zaXRpdmUgaGlnaGxpZ2h0TWF0
Y2hlczooQk9PTClzaG91bGRIaWdobGlnaHRNYXRjaGVzOworLSAoUERGUGFnZSAqKWN1cnJlbnRQ
YWdlOworLSAoTlNVSW50ZWdlcilsYXN0UGFnZUluZGV4OworLSAoTlNVSW50ZWdlciljdXJyZW50
UGFnZUluZGV4OworLSAodm9pZClnb3RvTmV4dFBhZ2U7CistICh2b2lkKWdvdG9QcmV2aW91c1Bh
Z2U7CiAKIC0gKHZvaWQpY29weVNlbGVjdGlvbjsKIC0gKHZvaWQpc2VsZWN0QWxsOwogCi0tIChQ
REZQYWdlICopY3VycmVudFBhZ2U7Ci0tIChOU1VJbnRlZ2VyKWN1cnJlbnRQYWdlSW5kZXg7Cist
IChib29sKWtleURvd246KE5TRXZlbnQgKilldmVudDsKIAotLSAoQk9PTClkb2N1bWVudElzTG9j
a2VkOwotLSAodm9pZClhdHRlbXB0VG9VbmxvY2tXaXRoUGFzc3dvcmQ6KE5TU3RyaW5nICopcGFz
c3dvcmQ7CistICh2b2lkKXNldEhVREVuYWJsZWQ6KEJPT0wpZW5hYmxlZDsKKy0gKEJPT0wpaHVk
RW5hYmxlZDsKIAogLSAoQ0dSZWN0KWJvdW5kc0ZvckFubm90YXRpb246KFBERkFubm90YXRpb24g
Kilhbm5vdGF0aW9uOwogLSAodm9pZClhY3RpdmF0ZU5leHRBbm5vdGF0aW9uOihCT09MKXByZXZp
b3VzOwogCi0tIChOU1JlY3QpZnJhbWU7CistICh2b2lkKWF0dGVtcHRUb1VubG9ja1dpdGhQYXNz
d29yZDooTlNTdHJpbmcgKilwYXNzd29yZDsKKworLSAodm9pZClzZWFyY2hJbkRpY3Rpb25hcnlX
aXRoU2VsZWN0aW9uOihQREZTZWxlY3Rpb24gKilzZWxlY3Rpb247CiAKIC8vIEFjY2Vzc2liaWxp
dHkKIApAQCAtMTY2LDcgKzE2MSw2IEBACiAKIEBlbmQKIAotI2VuZGlmIC8vIFVTRShERVBSRUNB
VEVEX1BERl9QTFVHSU4pCi0jZW5kaWYgLy8gRU5BQkxFKFBERlBMVUdJTikKKyNlbmRpZgogCiAj
ZW5kaWYgLy8gUERGTGF5ZXJDb250cm9sbGVyU1BJX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCmluZGV4IDBjNmFiMWYzYmJhY2QwNGIx
MDk0NDdiYmExZGQxYmFmMWI4NGFhMDYuLjljYWQ0MWQyNDg0Mjg3YjcxYzgxMzM4ZjYwODQ3NTZh
OGRjZTdhYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4uaApAQCAtMjksMTggKzI5LDEyIEBACiAjaW5jbHVkZSAiUERGS2l0SW1wb3J0
cy5oIgogCiAjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCi0jaWYgVVNFKERFUFJFQ0FURURfUERG
X1BMVUdJTikKLQotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQREZQbHVnaW4uaCIKLQotI2Vsc2UgLy8g
VVNFKERFUFJFQ0FURURfUERGX1BMVUdJTikKIAogI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1
ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmluZE9w
dGlvbnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TY3JvbGxhYmxlQXJlYS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAt
NzQsNyArNjgsNyBAQCBjbGFzcyBQREZQbHVnaW5QYXNzd29yZEZpZWxkOwogY2xhc3MgUGx1Z2lu
VmlldzsKIGNsYXNzIFdlYkZyYW1lOwogCi1jbGFzcyBQREZQbHVnaW4gZmluYWwgOiBwdWJsaWMg
UGx1Z2luIHsKK2NsYXNzIFBERlBsdWdpbiBmaW5hbCA6IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUg
V2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8UERGUGx1
Z2luPiBjcmVhdGUoV2ViRnJhbWUqKTsKICAgICB+UERGUGx1Z2luKCk7CkBAIC04MiwxNSArNzYs
MTggQEAgcHVibGljOgogICAgIHN0YXRpYyBXZWJDb3JlOjpQbHVnaW5JbmZvIHBsdWdpbkluZm8o
KTsKIAogICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQotICAgIGZsb2F0IHNjYWxlRmFjdG9yKCkgY29uc3Q7CiAKICAgICB2b2lkIGRpZE11dGF0ZVBE
RkRvY3VtZW50KCkgeyBtX3BkZkRvY3VtZW50V2FzTXV0YXRlZCA9IHRydWU7IH0KIAorICAgIHZv
aWQgcGFpbnRDb250cm9sRm9yTGF5ZXJJbkNvbnRleHQoQ0FMYXllciAqLCBDR0NvbnRleHRSZWYp
OwogICAgIHZvaWQgc2V0QWN0aXZlQW5ub3RhdGlvbihQREZBbm5vdGF0aW9uICopOwotCisgICAg
CisgICAgdXNpbmcgU2Nyb2xsYWJsZUFyZWE6Om5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZDsK
KyAgICB2b2lkIG5vdGlmeUNvbnRlbnRTY2FsZUZhY3RvckNoYW5nZWQoQ0dGbG9hdCBzY2FsZUZh
Y3Rvcik7CiAgICAgdm9pZCBub3RpZnlEaXNwbGF5TW9kZUNoYW5nZWQoaW50KTsKIAogICAgIHZv
aWQgbm90aWZ5U2VsZWN0aW9uQ2hhbmdlZChQREZTZWxlY3Rpb24gKik7CisgICAgdm9pZCBub3Rp
ZnlDdXJzb3JDaGFuZ2VkKHVpbnQ2NF90IC8qIFBERkxheWVyQ29udHJvbGxlckN1cnNvclR5cGUg
Ki8pOwogCiAgICAgdm9pZCBjbGlja2VkTGluayhOU1VSTCAqKTsKICAgICB2b2lkIHNhdmVUb1BE
RigpOwpAQCAtOTksMjUgKzk2LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dEZWZpbml0aW9u
Rm9yQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgQ0dQb2ludCk7CiAgICAg
dm9pZCBwZXJmb3JtV2ViU2VhcmNoKE5TU3RyaW5nICopOwogICAgIHZvaWQgcGVyZm9ybVNwb3Rs
aWdodFNlYXJjaChOU1N0cmluZyAqKTsKLSAgICB2b2lkIGludmFsaWRhdGVQREZSZWN0KFdlYkNv
cmU6OkludFJlY3QpOwotICAgIHZvaWQgaW52YWxpZGF0ZUhVRCgpOwotICAgIHZvaWQgc2Nyb2xs
VG9Qb2ludChXZWJDb3JlOjpJbnRQb2ludCk7Ci0KLSAgICB2b2lkIHpvb21JbigpOwotICAgIHZv
aWQgem9vbU91dCgpOwogCiAgICAgdm9pZCBmb2N1c05leHRBbm5vdGF0aW9uKCk7CiAgICAgdm9p
ZCBmb2N1c1ByZXZpb3VzQW5ub3RhdGlvbigpOwogCiAgICAgdm9pZCBhdHRlbXB0VG9VbmxvY2tQ
REYoY29uc3QgU3RyaW5nJiBwYXNzd29yZCk7CiAKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBjb252
ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0Owot
ICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUm9vdFZpZXdUb1BsdWdpbihjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRG
cm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKLQot
ICAgIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRG
cm9tUERGVmlld1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGNvbnN0OwotCiAg
ICAgV2ViQ29yZTo6SW50UmVjdCBib3VuZHNPblNjcmVlbigpIGNvbnN0OwogICAgIAogICAgIGJv
b2wgc2hvd0NvbnRleHRNZW51QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwpAQCAt
MTI1LDEwICsxMTAsOSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGxvb2t1cFRleHRBdExvY2F0aW9u
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYsIFBERlNl
bGVjdGlvbiAqKiwgTlNEaWN0aW9uYXJ5ICoqKSBjb25zdDsKICAgICBXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdEZvclNlbGVjdGlvbkluUm9vdFZpZXcoUERGU2VsZWN0aW9uICopIGNvbnN0OwogCi0g
ICAgUERGTGF5ZXJDb250cm9sbGVyICpwZGZMYXllckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVy
biBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKTsgfQotICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKyAgICBDR0Zsb2F0IHNjYWxlRmFjdG9yKCkgY29u
c3Q7CiAKLSAgICBib29sIGlzTG9ja2VkKCkgY29uc3Q7CisgICAgYm9vbCBzaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBQREZQbHVnaW4oV2ViRnJhbWUqKTsKQEAg
LTEzNiwxNSArMTIwLDE1IEBAIHByaXZhdGU6CiAgICAgLy8gUGx1Z2luIGZ1bmN0aW9ucy4KICAg
ICBib29sIGluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZGVzdHJveSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29yZGluYXRl
cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVDb250cm9sVGludHMoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Jikgb3ZlcnJpZGUgeyB9Ci0gICAgYm9vbCBzdXBwb3J0c1NuYXBzaG90dGluZygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBwYWludChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3RJbldp
bmRvd0Nvb3JkaW5hdGVzKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50
cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKSBvdmVycmlkZTsKKyAgICBib29sIHN1cHBvcnRz
U25hcHNob3R0aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1MYXll
ciogcGx1Z2luTGF5ZXIoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CisgICAgUGxhdGZv
cm1MYXllciogcGx1Z2luTGF5ZXIoKSBvdmVycmlkZTsKICAgICBib29sIGlzVHJhbnNwYXJlbnQo
KSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgd2FudHNXaGVlbEV2ZW50cygp
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
Y2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmll
d1RyYW5zZm9ybSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdl
ZChmbG9hdCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdl
ZChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wpIG92
ZXJyaWRlIHsgfQogICAgIHZvaWQgZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVl
c3RJRCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmcmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElE
LCBib29sIHdhc0NhbmNlbGxlZCkgb3ZlcnJpZGU7CkBAIC0xNTksMzEgKzE0MywzMSBAQCBwcml2
YXRlOgogICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpIG92ZXJyaWRlOwog
ICAgIHZvaWQgbWFudWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0NhbmNlbGxlZCkgb3ZlcnJpZGU7
CiAgICAgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBvdmVycmlk
ZTsKLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpIG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdl
YldoZWVsRXZlbnQmKSBvdmVycmlkZTsKICAgICBib29sIGhhbmRsZU1vdXNlRW50ZXJFdmVudChj
b25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBoYW5kbGVNb3VzZUxlYXZl
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOwogICAgIGJvb2wgaGFuZGxlQ29u
dGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBo
YW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKSBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXli
b2FyZEV2ZW50Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25z
dCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KSBvdmVycmlkZTsK
ICAgICBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
OworICAgIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgcmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAgICAgdm9pZCBzZXRGb2N1cyhib29sKSBvdmVycmlkZSB7IH0KLSAgICBOUE9i
amVjdCogcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKSBvdmVycmlkZSB7
IHJldHVybiAwOyB9CiAgICAgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkgb3ZlcnJpZGUg
eyB9CiAgICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpIG92ZXJyaWRlIHsgfQogICAgIHZv
aWQgd2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CiAgICAgdWludDY0
X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAwOyB9CiAgICAgdm9pZCBzZW5kQ29tcGxleFRleHRJbnB1dChjb25zdCBTdHJpbmcmIHRl
eHRJbnB1dCkgb3ZlcnJpZGUgeyB9CiAgICAgdm9pZCBzZXRMYXllckhvc3RpbmdNb2RlKExheWVy
SG9zdGluZ01vZGUpIG92ZXJyaWRlIHsgfQotICAgIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpv
bnRhbFNjcm9sbGJhcigpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICBXZWJDb3Jl
OjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIG92ZXJy
aWRlIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQorICAgIFdlYkNvcmU6
OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBvdmVycmlkZSB7IHJldHVybiBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLmdldCgpOyB9CiAgICAgdm9pZCBzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5n
ZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CiAgICAgdm9pZCBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5n
ZWQoYm9vbCkgb3ZlcnJpZGUgeyB9CiAgICAgYm9vbCBnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3Jt
VmFsdWUpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBoYW5kbGVTY3JvbGwo
V2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSkgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGhhbmRsZVNjcm9sbChXZWJDb3JlOjpT
Y3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KSBvdmVycmlkZTsKICAg
ICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBsaXZlUmVzb3VyY2VEYXRhKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgcmVxdWlyZXNVbmlmaWVkU2NhbGVGYWN0
b3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCB3aWxsRGV0YXRj
aFJlbmRlcmVyKCkgb3ZlcnJpZGU7CiAKICAgICBib29sIGlzQmVpbmdBc3luY2hyb25vdXNseUlu
aXRpYWxpemVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIApAQCAtMjAzLDIx
ICsxODcsNTYgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZEFsbG93U2NyaXB0aW5nKCkgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbkZy
b21EcmFncygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIHNob3VsZEFsd2F5
c0F1dG9TdGFydCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGNh
bkNyZWF0ZVRyYW5zaWVudFBhaW50aW5nU25hcHNob3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorCisgICAgLy8gU2Nyb2xsYWJsZUFyZWEgZnVuY3Rpb25zLgorICAgIFdlYkNv
cmU6OkludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIFdlYkNv
cmU6OlNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0IG92ZXJy
aWRlOworICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKyAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5j
ZXN0b3IoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgV2ViQ29yZTo6SW50UmVjdCBz
Y3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6U2Nyb2xsT2Zmc2V0Jikg
b3ZlcnJpZGU7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3Jv
bGxiYXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgV2ViQ29yZTo6SW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fbGFzdE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzOyB9
CisgICAgaW50IHNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0
IG92ZXJyaWRlOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgaW50IHNjcm9sbE9mZnNldChXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6U2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24o
KSBjb25zdCBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpTY3JvbGxQb3NpdGlvbiBtaW5pbXVtU2Ny
b2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpTY3JvbGxQb3NpdGlv
biBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIHZpc2libGVTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zaXplOyB9Cisg
ICAgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX3BkZkRvY3VtZW50U2l6ZTsgfQorICAgIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRh
bFNjcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJh
ci5nZXQoKTsgfQorICAgIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAg
Ym9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9IC8vIElmIHdlIHJldHVybiB0cnVlLCBTY3JvbGxBbmltYXRvck1hYyB3aWxs
IGtlZXAgY3ljbGluZyBhIHRpbWVyIGZvcmV2ZXIsIHdhaXRpbmcgZm9yIGEgZ29vZCB0aW1lIHRv
IGFuaW1hdGUuCisgICAgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xs
YmFyU3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJl
Y3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFdlYkNvcmU6OlNj
cm9sbGJhciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0IG92
ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1Rv
U2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHBhcmVudFJlY3QpIGNvbnN0IG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFBvaW50IGNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBXZWJDb3JlOjpTY3JvbGxi
YXImLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0IG92ZXJy
aWRlOworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXImLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgcGFyZW50UG9pbnQpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgZm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICAvLyBQREZQbHVnaW4gZnVuY3Rpb25zLgorICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFy
cygpOworICAgIFJlZjxXZWJDb3JlOjpTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihXZWJDb3Jl
OjpTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFdlYkNv
cmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsKICAgICB2b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgp
OwogICAgIHZvaWQgYWRkQXJjaGl2ZVJlc291cmNlKCk7CiAgICAgdm9pZCBjb21wdXRlUGFnZUJv
eGVzKCk7CiAgICAgdm9pZCBjYWxjdWxhdGVTaXplcygpOwotICAgIHZvaWQgZGlkQ2FsY3VsYXRl
U2l6ZXMoKTsKICAgICB2b2lkIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7CiAKICAgICBOU0V2
ZW50ICpuc0V2ZW50Rm9yV2ViTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0KKyAg
ICBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9t
Um9vdFZpZXdUb1BsdWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdl
YkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmKSBjb25zdDsKKyAgICAKICAgICBib29sIHN1cHBvcnRzRm9ybXMoKTsKICAg
ICBib29sIGlzRnVsbEZyYW1lUGx1Z2luKCkgY29uc3Q7CiAKKyAgICB2b2lkIHVwZGF0ZVBhZ2VB
bmREZXZpY2VTY2FsZUZhY3RvcnMoKTsKKwogICAgIHZvaWQgY3JlYXRlUGFzc3dvcmRFbnRyeUZv
cm0oKTsKIAogICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CkBAIC0yMjksNjYgKzI0OCw1MSBAQCBwcml2YXRlOgog
ICAgIE5TRGF0YSAqbGl2ZURhdGEoKSBjb25zdDsKICAgICBOU0RhdGEgKnJhd0RhdGEoKSBjb25z
dCB7IHJldHVybiAoTlNEYXRhICopbV9kYXRhLmdldCgpOyB9CiAKLSAgICBlbnVtIGNsYXNzIFVw
ZGF0ZUN1cnNvciB7Ci0gICAgICAgIElmTmVlZGVkLAotICAgICAgICBGb3JjZQorICAgIFdlYkZy
YW1lKiB3ZWJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKworI2lmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDAKKyAgICBlbnVtIFVwZGF0ZUN1cnNvck1v
ZGUgeworICAgICAgICBVcGRhdGVJZk5lZWRlZCwKKyAgICAgICAgRm9yY2VVcGRhdGUKICAgICB9
OwogCi0gICAgZW51bSBjbGFzcyBIaXRUZXN0UmVzdWx0IHsKKyAgICBlbnVtIEhpdFRlc3RSZXN1
bHQgewogICAgICAgICBOb25lLAotICAgICAgICBUZXh0LAotICAgICAgICBIVUQKKyAgICAgICAg
VGV4dAogICAgIH07CiAKLSAgICB2b2lkIHVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50
JiwgVXBkYXRlQ3Vyc29yID0gVXBkYXRlQ3Vyc29yOjpJZk5lZWRlZCk7CisgICAgdm9pZCB1cGRh
dGVDdXJzb3IoY29uc3QgV2ViTW91c2VFdmVudCYsIFVwZGF0ZUN1cnNvck1vZGUgPSBVcGRhdGVJ
Zk5lZWRlZCk7CisjZW5kaWYKIAogICAgIEpTT2JqZWN0UmVmIG1ha2VKU1BERkRvYyhKU0NvbnRl
eHRSZWYpOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVm
LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbik7CiAKICAgICB2b2lkIGNvbnZlcnRQb3N0U2NyaXB0RGF0YUlmTmVlZGVkKCk7CiAK
KyAgICAvLyBSZWd1bGFyIHBsdWctaW5zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZpZXcsIGJ1dCB3
ZSBhZGQgc2Nyb2xsYmFycyB0byBlbWJlZGRpbmcgRnJhbWVWaWV3IGZvciBwcm9wZXIgZXZlbnQg
aGFuZGxpbmcuCiAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldygpOwogICAgIGNvbnN0IFBsdWdp
blZpZXcqIHBsdWdpblZpZXcoKSBjb25zdDsKIAotICAgIGNsYXNzIEhVRCA6IHB1YmxpYyBXZWJD
b3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0
IEhVRChQREZQbHVnaW4mIHBsdWdpbik7Ci0gICAgICAgIHZpcnR1YWwgfkhVRCgpOwotCi0gICAg
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotICAgICAgICBib29sIGNvbnRhaW5zUG9pbnRJblJvb3RW
aWV3KFdlYkNvcmU6OkludFBvaW50KTsKLQotICAgICAgICBlbnVtIGNsYXNzIEFuaW1hdGVWaXNp
YmlsaXR5VHJhbnNpdGlvbiB7IE5vLCBZZXMgfTsKLSAgICAgICAgdm9pZCBzZXRWaXNpYmxlKGJv
b2wsIEFuaW1hdGVWaXNpYmlsaXR5VHJhbnNpdGlvbik7Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFn
ZSopIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92
ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgZHJhd1JlY3Qo
V2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92ZXJyaWRlOwotICAgICAgICBib29sIG1vdXNl
RXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNl
RXZlbnQmKSBvdmVycmlkZTsKLQotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lSW5Sb290
VmlldygpIGNvbnN0OwotCi0gICAgICAgIGJvb2wgbV92aXNpYmxlIHsgZmFsc2UgfTsKLSAgICAg
ICAgUmVmPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX292ZXJsYXk7Ci0gICAgICAgIFBERlBsdWdp
biYgbV9wbHVnaW47Ci0gICAgfTsKLQogICAgIFdlYkZyYW1lKiBtX2ZyYW1lOwogCi0gICAgYm9v
bCBtX2lzUG9zdFNjcmlwdCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3BkZkRvY3VtZW50V2FzTXV0
YXRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3VzaW5nQ29udGludW91c01vZGUgeyB0cnVlIH07
CisgICAgYm9vbCBtX2lzUG9zdFNjcmlwdDsKKyAgICBib29sIG1fcGRmRG9jdW1lbnRXYXNNdXRh
dGVkOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAorICAgIFJldGFp
blB0cjxDQUxheWVyPiBtX2NvbnRhaW5lckxheWVyOworICAgIFJldGFpblB0cjxDQUxheWVyPiBt
X2NvbnRlbnRMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fdmVydGljYWxTY3JvbGxiYXJMYXll
cjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxDb3JuZXJMYXllcjsKICAgICBSZXRh
aW5QdHI8UERGTGF5ZXJDb250cm9sbGVyPiBtX3BkZkxheWVyQ29udHJvbGxlcjsKICAgICBSZXRh
aW5QdHI8V0tQREZQbHVnaW5BY2Nlc3NpYmlsaXR5T2JqZWN0PiBtX2FjY2Vzc2liaWxpdHlPYmpl
Y3Q7Ci0KKyAgICAKICAgICBSZWZQdHI8UERGUGx1Z2luQW5ub3RhdGlvbj4gbV9hY3RpdmVBbm5v
dGF0aW9uOwogICAgIFJlZlB0cjxQREZQbHVnaW5QYXNzd29yZEZpZWxkPiBtX3Bhc3N3b3JkRmll
bGQ7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IG1fcGFzc3dvcmRDb250YWluZXI7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IG1fYW5ub3RhdGlvbkNvbnRhaW5lcjsKIAogICAg
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm07Ci0g
ICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybTsK
ICAgICBXZWJNb3VzZUV2ZW50IG1fbGFzdE1vdXNlRXZlbnQ7CiAgICAgV2ViQ29yZTo6SW50UG9p
bnQgbV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29vcmRpbmF0ZXM7CiAKQEAgLTI5Niw4ICsz
MDAsMTAgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBtX2xhc3RGb3VuZFN0cmluZzsKIAorI2lm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDAKICAgICBIaXRUZXN0UmVz
dWx0IG1fbGFzdEhpdFRlc3RSZXN1bHQ7Ci0gICAgCisjZW5kaWYKKwogICAgIFJldGFpblB0cjxX
S1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlPiBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRl
OwogCiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CkBAIC0zMDgsMTYgKzMxNCwxNyBAQCBw
cml2YXRlOgogICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2RhdGE7CiAKICAgICBS
ZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7CisgICAgVmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+IG1fcGFnZUJveGVzOwogICAgIFdlYkNvcmU6OkludFNpemUgbV9wZGZEb2N1bWVu
dFNpemU7IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCiAKLSAgICBIVUQgbV9IVUQ7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOworICAg
IFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1fdmVydGljYWxTY3JvbGxiYXI7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19QTFVHSU4oUERG
UGx1Z2luLCBQREZQbHVnaW5UeXBlKQogCi0jZW5kaWYgLy8gVVNFKERFUFJFQ0FURURfUERGX1BM
VUdJTikKICNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKIAogI2VuZGlmIC8vIFBERlBs
dWdpbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLm1tCmluZGV4IDgxYTJlZTIzMjE3NzNlOGVlNWFlM2U2YzEwNDVhOWY1MjM1YmE3OWEu
LjMwYjAzODgyMGViNmYwZWY0NTU3YzljZjZjZGMzZmQ0ZmU3NzkwNDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBAIC0yNiw3
ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlBERlBsdWdpbi5oIgogCi0j
aWYgRU5BQkxFKFBERktJVF9QTFVHSU4pICYmICFVU0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQor
I2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQogCiAjaW1wb3J0ICJBcmd1bWVudENvZGVycy5oIgog
I2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgpAQCAtNTUsMTMgKzU1LDEzIEBACiAjaW1wb3J0IDxX
ZWJDb3JlL0N1cnNvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9EaWN0aW9uYXJ5TG9va3VwLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50
TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0Zvcm1TdGF0ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBo
aWNzTGF5ZXJDQS5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkVs
ZW1lbnQuaD4KQEAgLTY5LDMyICs2OSwzNSBAQAogI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvTW91c2VFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdl
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QYXN0ZWJvYXJkLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1BsdWdpbkRvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckJveE1vZGVsT2Jq
ZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbEFuaW1hdG9yLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1Njcm9sbGJhclRoZW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1VVSUQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2hlZWxFdmVudFRlc3RUcmln
Z2VyLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHd0Zi9D
dXJyZW50VGltZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorLy8gU2V0IG92ZXJm
bG93OiBoaWRkZW4gb24gdGhlIGFubm90YXRpb24gY29udGFpbmVyIHNvIDxpbnB1dD4gZWxlbWVu
dHMgc2Nyb2xsZWQgb3V0IG9mIHZpZXcgZG9uJ3Qgc2hvdworLy8gc2Nyb2xsYmFycyBvbiB0aGUg
Ym9keS4gV2UgY2FuJ3QgYWRkIGFubm90YXRpb25zIGRpcmVjdGx5IHRvIHRoZSBib2R5LCBiZWNh
dXNlIG92ZXJmbG93OiBoaWRkZW4gb24gdGhlIGJvZHkKKy8vIHdpbGwgYnJlYWsgcnViYmVyLWJh
bmRpbmcuCiBzdGF0aWMgY29uc3QgY2hhciogYW5ub3RhdGlvblN0eWxlID0KLSJib2R5IHsgIgot
IiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTQ2LCAxNDYsIDE0NikgIWltcG9ydGFudDsiCi0i
fSAiCi0iI3Bhc3N3b3JkQ29udGFpbmVyIHsiCi0iICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OyAi
Ci0iICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7ICIKLSIgICAgLXdlYmtpdC1ib3gtcGFj
azogY2VudGVyOyAiCi0iICAgIHBvc2l0aW9uOiBmaXhlZDsgIgorIiNhbm5vdGF0aW9uQ29udGFp
bmVyIHsiCisiICAgIG92ZXJmbG93OiBoaWRkZW47ICIKKyIgICAgcG9zaXRpb246IGFic29sdXRl
OyAiCisiICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyAiCiAiICAgIHRvcDogMDsgIgogIiAgICBs
ZWZ0OiAwOyAiCiAiICAgIHJpZ2h0OiAwOyAiCiAiICAgIGJvdHRvbTogMDsgIgorIiAgICBkaXNw
bGF5OiAtd2Via2l0LWJveDsgIgorIiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOyAiCisi
ICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsgIgogIn0gIgogIi5hbm5vdGF0aW9uIHsgIgog
IiAgICBwb3NpdGlvbjogYWJzb2x1dGU7ICIKQEAgLTEwOSw3ICsxMTIsOSBAQCBzdGF0aWMgY29u
c3QgY2hhciogYW5ub3RhdGlvblN0eWxlID0KICIgICAgbWFyZ2luLXRvcDogMTAwcHg7ICIKICJ9
ICI7CiAKLWNvbnN0IGRvdWJsZSB6b29tQnV0dG9uU2NhbGVNdWx0aXBsaWVyID0gMS4xODkyMDsK
Ky8vIEluIG5vbi1jb250aW51b3VzIG1vZGVzLCBhIHNpbmdsZSBzY3JvbGwgZXZlbnQgd2l0aCBh
IG1hZ25pdHVkZSBvZiA+PSAyMHB4CisvLyB3aWxsIGp1bXAgdG8gdGhlIG5leHQgb3IgcHJldmlv
dXMgcGFnZSwgdG8gbWF0Y2ggUERGS2l0IGJlaGF2aW9yLgorc3RhdGljIGNvbnN0IGludCBkZWZh
dWx0U2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgPSAyMDsKIAogQGludGVyZmFj
ZSBXS1BERlBsdWdpbkFjY2Vzc2liaWxpdHlPYmplY3QgOiBOU09iamVjdCB7CiAgICAgUERGTGF5
ZXJDb250cm9sbGVyICpfcGRmTGF5ZXJDb250cm9sbGVyOwpAQCAtMjcxLDYgKzI3Niw0MSBAQCAt
IChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAogCiBAZW5kCiAKKworQGlu
dGVyZmFjZSBXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIDogQ0FMYXllciB7CisgICAgV2ViS2l0
OjpQREZQbHVnaW4qIF9wZGZQbHVnaW47Cit9CisKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJLaXQ6
OlBERlBsdWdpbiogcGRmUGx1Z2luOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERlBs
dWdpblNjcm9sbGJhckxheWVyCisKK0BzeW50aGVzaXplIHBkZlBsdWdpbj1fcGRmUGx1Z2luOwor
CistIChpZClpbml0V2l0aFBERlBsdWdpbjooV2ViS2l0OjpQREZQbHVnaW4gKilwbHVnaW4KK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyAgICBfcGRmUGx1Z2luID0gcGx1Z2luOworICAgIAorICAgIHJldHVybiBzZWxmOworfQor
CistIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQoreworICAgIHJl
dHVybiBuaWw7Cit9CisKKy0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAor
eworICAgIF9wZGZQbHVnaW4tPnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KHNlbGYsIGN0
eCk7Cit9CisKK0BlbmQKKwogQGludGVyZmFjZSBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRl
IDogTlNPYmplY3Q8UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IHsKICAgICBXZWJLaXQ6OlBE
RlBsdWdpbiogX3BkZlBsdWdpbjsKIH0KQEAgLTI5MywxMiArMzMzLDEyIEBAIC0gKGlkKWluaXRX
aXRoUERGUGx1Z2luOihXZWJLaXQ6OlBERlBsdWdpbiAqKXBsdWdpbgogICAgIHJldHVybiBzZWxm
OwogfQogCi0tICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICop
cGRmTGF5ZXJDb250cm9sbGVyIHNjcm9sbFRvUG9pbnQ6KENHUG9pbnQpbmV3UG9zaXRpb24KKy0g
KHZvaWQpdXBkYXRlU2Nyb2xsUG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb24KIHsKLSAgICBf
cGRmUGx1Z2luLT5zY3JvbGxUb1BvaW50KEludFBvaW50KG5ld1Bvc2l0aW9uKSk7CisgICAgX3Bk
ZlBsdWdpbi0+bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKEludFBvaW50KG5ld1Bvc2l0aW9u
KSk7CiB9CiAKLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVyOihQREZMYXllckNvbnRyb2xsZXIg
KilwZGZMYXllckNvbnRyb2xsZXIgY29weUl0ZW1zOihOU0FycmF5ICopaXRlbXMgd2l0aFR5cGVz
OihOU0FycmF5ICopdHlwZXMKKy0gKHZvaWQpd3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNBcnJh
eSAqKWl0ZW1zIHdpdGhUeXBlczooTlNBcnJheSAqKXR5cGVzCiB7CiAjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1kZWNsYXJhdGlvbnMiCkBAIC0zMDYsMzIgKzM0NiwzMiBAQCAtICh2b2lkKXBkZkxheWVy
Q29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGNvcHlJ
dGVtczooTgogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogfQogCi0tICh2b2lkKXBkZkxh
eWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIHNo
b3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3Ry
aW5nIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQKKy0gKHZvaWQpc2hvd0RlZmluaXRpb25Gb3JBdHRy
aWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilzdHJpbmcgYXRQb2ludDooQ0dQb2lu
dClwb2ludAogewogICAgIF9wZGZQbHVnaW4tPnNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0
cmluZyhzdHJpbmcsIHBvaW50KTsKIH0KIAotLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBE
RkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBwZXJmb3JtV2ViU2VhcmNoRm9y
U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZworLSAodm9pZClwZXJmb3JtV2ViU2VhcmNoOihOU1N0
cmluZyAqKXN0cmluZwogewogICAgIF9wZGZQbHVnaW4tPnBlcmZvcm1XZWJTZWFyY2goc3RyaW5n
KTsKIH0KIAotLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAq
KXBkZkxheWVyQ29udHJvbGxlciBwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoRm9yU3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZworLSAodm9pZClwZXJmb3JtU3BvdGxpZ2h0U2VhcmNoOihOU1N0cmluZyAq
KXN0cmluZwogewogICAgIF9wZGZQbHVnaW4tPnBlcmZvcm1TcG90bGlnaHRTZWFyY2goc3RyaW5n
KTsKIH0KIAotLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXJPcGVuV2l0aE5hdGl2ZUFwcGxpY2F0
aW9uOihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIKKy0gKHZvaWQpb3Bl
bldpdGhOYXRpdmVBcHBsaWNhdGlvbgogewogICAgIF9wZGZQbHVnaW4tPm9wZW5XaXRoTmF0aXZl
QXBwbGljYXRpb24oKTsKIH0KIAotLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXJTYXZlVG9QREY6
KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlcgorLSAodm9pZClzYXZlVG9Q
REYKIHsKICAgICBfcGRmUGx1Z2luLT5zYXZlVG9QREYoKTsKIH0KIAotLSAodm9pZClwZGZMYXll
ckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRD
bGlja0xpbmtXaXRoVVJMOihOU1VSTCAqKXVybAorLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6
KFBERkxheWVyQ29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBjbGlja2VkTGlua1dpdGhV
Ukw6KE5TVVJMICopdXJsCiB7CiAgICAgX3BkZlBsdWdpbi0+Y2xpY2tlZExpbmsodXJsKTsKIH0K
QEAgLTM0MSw2ICszODEsMTEgQEAgLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVy
Q29udHJvbGxlciAqKXBkZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VBY3QKICAgICBfcGRmUGx1
Z2luLT5zZXRBY3RpdmVBbm5vdGF0aW9uKGFubm90YXRpb24pOwogfQogCistICh2b2lkKXBkZkxh
eWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyIGRp
ZENoYW5nZUNvbnRlbnRTY2FsZUZhY3RvcjooQ0dGbG9hdClzY2FsZUZhY3RvcgoreworICAgIF9w
ZGZQbHVnaW4tPm5vdGlmeUNvbnRlbnRTY2FsZUZhY3RvckNoYW5nZWQoc2NhbGVGYWN0b3IpOwor
fQorCiAtICh2b2lkKXBkZkxheWVyQ29udHJvbGxlcjooUERGTGF5ZXJDb250cm9sbGVyICopcGRm
TGF5ZXJDb250cm9sbGVyIGRpZENoYW5nZURpc3BsYXlNb2RlOihpbnQpbW9kZQogewogICAgIF9w
ZGZQbHVnaW4tPm5vdGlmeURpc3BsYXlNb2RlQ2hhbmdlZChtb2RlKTsKQEAgLTM1MSw0OCArMzk2
LDkgQEAgLSAodm9pZClwZGZMYXllckNvbnRyb2xsZXI6KFBERkxheWVyQ29udHJvbGxlciAqKXBk
ZkxheWVyQ29udHJvbGxlciBkaWRDaGFuZ2VTZWwKICAgICBfcGRmUGx1Z2luLT5ub3RpZnlTZWxl
Y3Rpb25DaGFuZ2VkKHNlbGVjdGlvbik7CiB9CiAKLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVy
OihQREZMYXllckNvbnRyb2xsZXIgKilwZGZMYXllckNvbnRyb2xsZXIgaW52YWxpZGF0ZVJlY3Q6
KENHUmVjdClyZWN0Ci17Ci0gICAgX3BkZlBsdWdpbi0+aW52YWxpZGF0ZVBERlJlY3QoZW5jbG9z
aW5nSW50UmVjdChyZWN0KSk7Ci19Ci0KLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVySW52YWxp
ZGF0ZUhVRDooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCi17Ci0gICAg
X3BkZlBsdWdpbi0+aW52YWxpZGF0ZUhVRCgpOwotfQotCi0tICh2b2lkKXBkZkxheWVyQ29udHJv
bGxlclpvb21JbjooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCi17Ci0g
ICAgX3BkZlBsdWdpbi0+em9vbUluKCk7Ci19Ci0KLS0gKHZvaWQpcGRmTGF5ZXJDb250cm9sbGVy
Wm9vbU91dDooUERGTGF5ZXJDb250cm9sbGVyICopcGRmTGF5ZXJDb250cm9sbGVyCi17Ci0gICAg
X3BkZlBsdWdpbi0+em9vbU91dCgpOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV0tQREZIVURB
bmltYXRpb25EZWxlZ2F0ZSA6IE5TT2JqZWN0IHsKLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJv
b2wpPiBfY29tcGxldGlvbkhhbmRsZXI7Ci19Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1BE
RkhVREFuaW1hdGlvbkRlbGVnYXRlCi0KLS0gKGlkKWluaXRXaXRoQW5pbWF0aW9uQ29tcGxldGlv
bkhhbmRsZXI6KHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+KWNvbXBsZXRpb25IYW5kbGVyCi17
Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICBfY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKTsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWFuaW1hdGlvbkRpZFN0b3A6KENBQW5pbWF0
aW9uICopYW5pbWF0aW9uIGZpbmlzaGVkOihCT09MKWZsYWcKKy0gKHZvaWQpc2V0TW91c2VDdXJz
b3I6KFBERkxheWVyQ29udHJvbGxlckN1cnNvclR5cGUpY3Vyc29yVHlwZQogewotICAgIF9jb21w
bGV0aW9uSGFuZGxlcihmbGFnKTsKKyAgICBfcGRmUGx1Z2luLT5ub3RpZnlDdXJzb3JDaGFuZ2Vk
KGN1cnNvclR5cGUpOwogfQogCiBAZW5kCkBAIC01MTEsMjQgKzUxNywzNSBAQCBSZWY8UERGUGx1
Z2luPiBQREZQbHVnaW46OmNyZWF0ZShXZWJGcmFtZSogZnJhbWUpCiBQREZQbHVnaW46OlBERlBs
dWdpbihXZWJGcmFtZSogZnJhbWUpCiAgICAgOiBQbHVnaW4oUERGUGx1Z2luVHlwZSkKICAgICAs
IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2lzUG9zdFNjcmlwdChmYWxzZSkKKyAgICAsIG1fcGRm
RG9jdW1lbnRXYXNNdXRhdGVkKGZhbHNlKQorICAgICwgbV9jb250YWluZXJMYXllcihhZG9wdE5T
KFtbQ0FMYXllciBhbGxvY10gaW5pdF0pKQorICAgICwgbV9jb250ZW50TGF5ZXIoYWRvcHROUyhb
W0NBTGF5ZXIgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fc2Nyb2xsQ29ybmVyTGF5ZXIoYWRvcHRO
UyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRo
aXNdKSkKICAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyKGFkb3B0TlMoW1twZGZMYXllckNvbnRy
b2xsZXJDbGFzcygpIGFsbG9jXSBpbml0XSkpCiAgICAgLCBtX3BkZkxheWVyQ29udHJvbGxlckRl
bGVnYXRlKGFkb3B0TlMoW1tXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0
V2l0aFBERlBsdWdpbjp0aGlzXSkpCi0gICAgLCBtX0hVRCgqdGhpcykKIHsKLSAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZS5n
ZXQoKV07CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZGVsZWdhdGUgPSBtX3BkZkxh
eWVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpOworICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdl
dCgpLnBhcmVudExheWVyID0gbV9jb250ZW50TGF5ZXIuZ2V0KCk7CiAKICAgICBpZiAoc3VwcG9y
dHNGb3JtcygpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHdlYkZyYW1lKCktPmNv
cmVGcmFtZSgpLT5kb2N1bWVudCgpOworICAgICAgICBtX2Fubm90YXRpb25Db250YWluZXIgPSBk
b2N1bWVudC0+Y3JlYXRlRWxlbWVudChkaXZUYWcsIGZhbHNlKTsKKyAgICAgICAgbV9hbm5vdGF0
aW9uQ29udGFpbmVyLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGlkQXR0ciwg
QXRvbWljU3RyaW5nKCJhbm5vdGF0aW9uQ29udGFpbmVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCkpOwogCi0gICAgICAgIFJlZjxFbGVtZW50PiBhbm5vdGF0aW9uU3R5bGVF
bGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoc3R5bGVUYWcsIGZhbHNlKTsKLSAgICAg
ICAgYW5ub3RhdGlvblN0eWxlRWxlbWVudC0+c2V0VGV4dENvbnRlbnQoYW5ub3RhdGlvblN0eWxl
LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgYXV0byBhbm5vdGF0aW9uU3R5bGVFbGVt
ZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoc3R5bGVUYWcsIGZhbHNlKTsKKyAgICAgICAg
YW5ub3RhdGlvblN0eWxlRWxlbWVudC0+c2V0VGV4dENvbnRlbnQoYW5ub3RhdGlvblN0eWxlKTsK
IAotICAgICAgICBkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKS0+YXBwZW5kQ2hpbGQoYW5ub3Rh
dGlvblN0eWxlRWxlbWVudC5nZXQoKSk7CisgICAgICAgIG1fYW5ub3RhdGlvbkNvbnRhaW5lci0+
YXBwZW5kQ2hpbGQoYW5ub3RhdGlvblN0eWxlRWxlbWVudCk7CisgICAgICAgIGRvY3VtZW50LT5i
b2R5T3JGcmFtZXNldCgpLT5hcHBlbmRDaGlsZCgqbV9hbm5vdGF0aW9uQ29udGFpbmVyKTsKICAg
ICB9CiAKICAgICBtX2FjY2Vzc2liaWxpdHlPYmplY3QgPSBhZG9wdE5TKFtbV0tQREZQbHVnaW5B
Y2Nlc3NpYmlsaXR5T2JqZWN0IGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSk7CiAgICAg
W21fYWNjZXNzaWJpbGl0eU9iamVjdCBzZXRQZGZMYXllckNvbnRyb2xsZXI6bV9wZGZMYXllckNv
bnRyb2xsZXIuZ2V0KCldOwogICAgIFttX2FjY2Vzc2liaWxpdHlPYmplY3Qgc2V0UGFyZW50Ondl
YkZyYW1lKCktPnBhZ2UoKS0+YWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCgpXTsKKworICAgIFtt
X2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1fY29udGVudExheWVyLmdldCgpXTsKKyAgICBb
bV9jb250YWluZXJMYXllciBhZGRTdWJsYXllcjptX3Njcm9sbENvcm5lckxheWVyLmdldCgpXTsK
IH0KIAogUERGUGx1Z2luOjp+UERGUGx1Z2luKCkKQEAgLTU2Myw2ICs1ODAsNzMgQEAgUGx1Z2lu
SW5mbyBQREZQbHVnaW46OnBsdWdpbkluZm8oKQogICAgIHJldHVybiBpbmZvOwogfQogCit2b2lk
IFBERlBsdWdpbjo6dXBkYXRlU2Nyb2xsYmFycygpCit7CisgICAgYm9vbCBoYWRTY3JvbGxiYXJz
ID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXI7CisKKyAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChtX3NpemUud2lkdGgoKSA+
PSBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKQorICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJh
cihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9IGVsc2UgaWYgKG1fc2l6ZS53aWR0aCgpIDwg
bV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSkKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
ID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworCisgICAgaWYgKG1fdmVy
dGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKG1fc2l6ZS5oZWlnaHQoKSA+PSBtX3BkZkRv
Y3VtZW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGlj
YWxTY3JvbGxiYXIpOworICAgIH0gZWxzZSBpZiAobV9zaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1
bWVudFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVT
Y3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFj
ZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOworCisgICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94
ZXMuaXNFbXB0eSgpID8gMCA6IG1fcGFnZUJveGVzWzBdLmhlaWdodCgpOworCisgICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNl
dFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9zaXplLndpZHRoKCkgLSBz
Y3JvbGxiYXJTcGFjZS53aWR0aCgpLCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKKyAgICAg
ICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3KCkt
PnkoKSArIG1fc2l6ZS5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCks
IG1fc2l6ZS53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAg
ICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXJSZWN0LmNv
bnRyYWN0KG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIDApOworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9CisgICAg
aWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9zaXplLmhlaWdodCgpIC0g
c2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCksIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBt
X3NpemUud2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXco
KS0+eSgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsK
KyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHNjcm9sbGJh
clJlY3QuY29udHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAg
ICB9CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52
aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wg
aGFzU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xs
YmFyOworICAgIGlmIChoYWRTY3JvbGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKKyAgICAgICAg
aWYgKGhhc1Njcm9sbGJhcnMpCisgICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVB
cmVhKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNj
cm9sbGFibGVBcmVhKHRoaXMpOworCisgICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQo
KTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgeworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSB2ZXJ0aWNhbFNjcm9s
bGJhcigpLT5mcmFtZVJlY3QoKTsKKyAgICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllciBz
ZXROZWVkc0Rpc3BsYXldOworICAgIH0KKyAgICAKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJh
bWUgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOworICAgICAgICBbbV9ob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9CisgICAgCisgICAg
aWYgKG1fc2Nyb2xsQ29ybmVyTGF5ZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXJMYXllci5n
ZXQoKS5mcmFtZSA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICAgICAgW21fc2Nyb2xsQ29ybmVy
TGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9Cit9CisKIFBsdWdpblZpZXcqIFBERlBsdWdp
bjo6cGx1Z2luVmlldygpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihj
b250cm9sbGVyKCkpOwpAQCAtNTczLDYgKzY1NywxNzYgQEAgY29uc3QgUGx1Z2luVmlldyogUERG
UGx1Z2luOjpwbHVnaW5WaWV3KCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
UGx1Z2luVmlldyo+KGNvbnRyb2xsZXIoKSk7CiB9CiAKK1JlZjxTY3JvbGxiYXI+IFBERlBsdWdp
bjo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQorewor
ICAgIGF1dG8gd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMs
IG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICBpZiAob3JpZW50YXRpb24gPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJMYXll
ciA9IGFkb3B0TlMoW1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0aFBE
RlBsdWdpbjp0aGlzXSk7CisgICAgICAgIFttX2NvbnRhaW5lckxheWVyIGFkZFN1YmxheWVyOm1f
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpXTsKKyAgICB9IGVsc2UgeworICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgPSBhZG9wdE5TKFtbV0tQREZQbHVnaW5TY3JvbGxiYXJM
YXllciBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhpc10pOworICAgICAgICBbbV9jb250YWlu
ZXJMYXllciBhZGRTdWJsYXllcjptX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCldOworICAg
IH0KKyAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LnB0cigpLCBvcmllbnRhdGlvbik7CisgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IHdlYkZyYW1lKCktPmNvcmVGcmFtZSgpKSB7CisgICAgICAgIGlm
IChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICAgICAgaWYgKHBhZ2UtPmV4
cGVjdHNXaGVlbEV2ZW50VHJpZ2dlcnMoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxBbmltYXRv
cigpLnNldFdoZWVsRXZlbnRUZXN0VHJpZ2dlcihwYWdlLT50ZXN0VHJpZ2dlcigpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+YWRkQ2hpbGQo
d2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0OworfQorCit2b2lkIFBERlBsdWdpbjo6ZGVzdHJv
eVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7CisgICAg
aWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIHdpbGxSZW1vdmVTY3JvbGxi
YXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CisgICAgc2Nyb2xsYmFyLT5yZW1vdmVG
cm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKKworICAgIGlmIChvcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIFttX2hvcml6b250YWxTY3Jv
bGxiYXJMYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhckxheWVyID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBbbV92ZXJ0aWNhbFNjcm9s
bGJhckxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhckxheWVyID0gMDsKKyAgICB9Cit9CisKK0ludFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0g
c2Nyb2xsYmFyUmVjdDsKKyAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyLmxvY2F0aW9uKCkgLSBwbHVn
aW5WaWV3KCktPmxvY2F0aW9uKCkpOworCisgICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJhbWUo
KS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldyhwbHVnaW5WaWV3
KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcmVjdCk7Cit9CisKK0ludFJlY3QgUERG
UGx1Z2luOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAg
SW50UmVjdCByZWN0ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cGx1Z2luRWxlbWVudCgpLT5y
ZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAgICByZWN0Lm1vdmUocGx1Z2luVmlldygpLT5sb2Nh
dGlvbigpIC0gc2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgcmV0dXJuIHJlY3Q7Cit9CisK
K0ludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9p
bnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKKyAgICBw
b2ludC5tb3ZlKHNjcm9sbGJhci5sb2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigp
KTsKKworICAgIHJldHVybiBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydEZy
b21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcocGx1Z2luVmlldygpLT5wbHVnaW5FbGVtZW50KCkt
PnJlbmRlcmVyKCksIHBvaW50KTsKK30KKworSW50UG9pbnQgUERGUGx1Z2luOjpjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNv
bnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9
IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9SZW5kZXJlcihwbHVnaW5WaWV3KCktPnBsdWdpbkVsZW1lbnQoKS0+cmVuZGVyZXIoKSwgcGFy
ZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Ny
b2xsYmFyLmxvY2F0aW9uKCkpOworICAgIAorICAgIHJldHVybiBwb2ludDsKK30KKworYm9vbCBQ
REZQbHVnaW46OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICByZXR1cm4gc2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHkpOworfQorCitJbnRSZWN0IFBERlBsdWdpbjo6c2Nyb2xsQ29ybmVyUmVjdCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgIW1fdmVydGljYWxT
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgaWYgKG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fdmVy
dGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKTsKKyAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKKyAgICB9CisgICAgcmV0dXJuIEludFJlY3QocGx1Z2luVmlldygpLT53aWR0aCgp
IC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT5oZWlnaHQoKSAt
IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOworfQorCitTY3JvbGxhYmxl
QXJlYSogUERGUGx1Z2luOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAg
Ly8gRklYTUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUgYW5kIGxvb2sgZm9yIGEgc2Nyb2xsYWJs
ZSBwYXJlbnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K0ludFJlY3QgUERGUGx1Z2luOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25z
dAoreworICAgIHJldHVybiBwbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpOworfQorCitpbnQgUERG
UGx1Z2luOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25z
dAoreworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxi
YXIpLmdldCgpOworICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUo
KSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCitib29sIFBERlBsdWdpbjo6
aXNBY3RpdmUoKSBjb25zdAoreworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gbV9mcmFtZS0+
Y29yZUZyYW1lKCkpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2Uo
KSkKKyAgICAgICAgICAgIHJldHVybiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgp
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQREZQbHVnaW46OmZvcmNl
VXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0
Cit7CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgewor
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHBhZ2UtPnNldHRpbmdzKCkuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFk
Rm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitpbnQgUERGUGx1Z2luOjpzY3JvbGxPZmZzZXQoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24pIGNvbnN0Cit7CisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxi
YXIpCisgICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC53aWR0aCgpOworCisgICAgaWYgKG9y
aWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxP
ZmZzZXQuaGVpZ2h0KCk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworU2Nyb2xsUG9zaXRpb24gUERGUGx1Z2luOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xs
T2Zmc2V0LmhlaWdodCgpKTsKK30KKworU2Nyb2xsUG9zaXRpb24gUERGUGx1Z2luOjptaW5pbXVt
U2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBJbnRQb2ludCgpOworfQorCitT
Y3JvbGxQb3NpdGlvbiBQREZQbHVnaW46Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7
CisgICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOworCisg
ICAgSW50UG9pbnQgbWF4aW11bU9mZnNldChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpIC0gbV9z
aXplLndpZHRoKCkgKyBzY3JvbGxiYXJTcGFjZS53aWR0aCgpLCBtX3BkZkRvY3VtZW50U2l6ZS5o
ZWlnaHQoKSAtIG1fc2l6ZS5oZWlnaHQoKSArIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKTsKKyAg
ICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKyAgICByZXR1cm4gbWF4aW11
bU9mZnNldDsKK30KKwordm9pZCBQREZQbHVnaW46OnNjcm9sbGJhclN0eWxlQ2hhbmdlZChTY3Jv
bGxiYXJTdHlsZSBzdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkKK3sKKyAgICBpZiAoIWZvcmNlVXBk
YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgUERGIHdhcyBzY3JvbGxlZCBh
bGwgdGhlIHdheSB0byBib3R0b20gcmlnaHQgYW5kIHNjcm9sbGJhcnMgY2hhbmdlIHRvIG92ZXJs
YXkgc3R5bGUsIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB3aGl0ZSByZWN0YW5nbGVzIHdoZXJl
IHNjcm9sbGJhcnMgd2VyZS4KKyAgICBJbnRQb2ludCBuZXdTY3JvbGxPZmZzZXQgPSBJbnRQb2lu
dChtX3Njcm9sbE9mZnNldCkuc2hydW5rVG8obWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOworICAg
IHNldFNjcm9sbE9mZnNldChuZXdTY3JvbGxPZmZzZXQpOworICAgIAorICAgIFNjcm9sbGFibGVB
cmVhOjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoc3R5bGUsIGZvcmNlVXBkYXRlKTsKKyAgICAvLyBB
cyBzaXplIG9mIHRoZSBjb250ZW50IGFyZWEgY2hhbmdlcywgc2Nyb2xsYmFycyBtYXkgbmVlZCB0
byBhcHBlYXIgb3IgdG8gZGlzYXBwZWFyLgorICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKK30KKwog
dm9pZCBQREZQbHVnaW46OmFkZEFyY2hpdmVSZXNvdXJjZSgpCiB7CiAgICAgLy8gRklYTUU6IEl0
J3MgYSBoYWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNlIHRvIERvY3VtZW50TG9hZGVyLiBQREYg
ZG9jdW1lbnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQgYXMgQ2FjaGVkUmVzb3VyY2VzLgpAQCAt
NTgzLDcgKzgzNyw3IEBAIHZvaWQgUERGUGx1Z2luOjphZGRBcmNoaXZlUmVzb3VyY2UoKQogICAg
IFJlc291cmNlUmVzcG9uc2Ugc3ludGhlc2l6ZWRSZXNwb25zZShyZXNwb25zZS5nZXQoKSk7CiAK
ICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6
Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShtX2RhdGEuZ2V0KCkpLCBtX3NvdXJjZVVS
TCwgImFwcGxpY2F0aW9uL3BkZiIsIFN0cmluZygpLCBTdHJpbmcoKSwgc3ludGhlc2l6ZWRSZXNw
b25zZSk7Ci0gICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+
YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7CisgICAgcGx1Z2luVmlldygp
LT5mcmFtZSgpLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291
cmNlLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiBzdGF0aWMgdm9pZCBqc1BERkRvY0luaXRpYWxp
emUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0KQpAQCAtNjE0LDcgKzg2OCw3
IEBAIEpTVmFsdWVSZWYgUERGUGx1Z2luOjpqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiBjdHgs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iCiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKIAotICAgIHBhZ2UtPmNocm9tZSgpLnByaW50
KGNvcmVGcmFtZSk7CisgICAgcGFnZS0+Y2hyb21lKCkucHJpbnQoKmNvcmVGcmFtZSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKIH0KQEAgLTY3NCwyMiArOTI4LDIz
IEBAIHZvaWQgUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQogCiAgICAgc2V0UERGRG9j
dW1lbnQoZG9jdW1lbnQpOwogCi0gICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEZyYW1lU2l6
ZTp3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5z
aXplKCldOyAvLy8gPz8/Ci0gICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldERvY3VtZW50OmRv
Y3VtZW50LmdldCgpXTsKKyAgICB1cGRhdGVQYWdlQW5kRGV2aWNlU2NhbGVGYWN0b3JzKCk7CisK
KyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RnJhbWVTaXplOnNpemUoKV07CisgICAgbV9w
ZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZG9jdW1lbnQgPSBkb2N1bWVudC5nZXQoKTsKKworICAg
IGlmIChoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkpCisgICAgICAgIHBsdWdpblZpZXcoKS0+c2V0
UGFnZVNjYWxlRmFjdG9yKFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3Jd
LCBJbnRQb2ludCgpKTsKKworICAgIG5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZChJbnRQb2lu
dChbbV9wZGZMYXllckNvbnRyb2xsZXIgc2Nyb2xsUG9zaXRpb25dKSk7CiAKICAgICBjYWxjdWxh
dGVTaXplcygpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKIAogICAgIHJ1blNjcmlwdHNJblBE
RkRvY3VtZW50KCk7CiAKLSAgICBpZiAoaXNMb2NrZWQoKSkKKyAgICBpZiAoW2RvY3VtZW50IGlz
TG9ja2VkXSkKICAgICAgICAgY3JlYXRlUGFzc3dvcmRFbnRyeUZvcm0oKTsKLQotICAgIG1fSFVE
LnNldFZpc2libGUoIWlzTG9ja2VkKCksIEhVRDo6QW5pbWF0ZVZpc2liaWxpdHlUcmFuc2l0aW9u
OjpObyk7Ci19Ci0KLWJvb2wgUERGUGx1Z2luOjppc0xvY2tlZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIFttX3BkZkRvY3VtZW50IGlzTG9ja2VkXTsKIH0KIAogdm9pZCBQREZQbHVnaW46OnN0cmVh
bURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgVVJMJiwgdWludDMy
X3QsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQpAQCAtNzc1LDc1ICsxMDMwLDY0IEBAIHZvaWQg
UERGUGx1Z2luOjpydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpCiAgICAgSlNHbG9iYWxDb250ZXh0
UmVsZWFzZShjdHgpOwogfQogCi12b2lkIFBERlBsdWdpbjo6aW52YWxpZGF0ZVBERlJlY3QoSW50
UmVjdCByZWN0KQotewotICAgIFdpZGdldCogd2lkZ2V0ID0gcGx1Z2luVmlldygpOwotCi0gICAg
Ly8gRklYTUU6IE9uZSBvZiB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGRvIHRoaXMg
KHdpdGggdGhlIGZsaXBwaW5nKS4KLSAgICBJbnRSZWN0IGludmFsaWRSZWN0ID0gcmVjdDsKLSAg
ICBpbnZhbGlkUmVjdC5zZXRZKG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gaW52YWxpZFJl
Y3QueSgpIC0gaW52YWxpZFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgd2lkZ2V0LT5pbnZhbGlkYXRl
UmVjdChpbnZhbGlkUmVjdCk7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjppbnZhbGlkYXRlSFVEKCkK
LXsKLSAgICBtX0hVRC5pbnZhbGlkYXRlKCk7Ci19Ci0KIHZvaWQgUERGUGx1Z2luOjpjcmVhdGVQ
YXNzd29yZEVudHJ5Rm9ybSgpCiB7Ci0gICAgaWYgKCFzdXBwb3J0c0Zvcm1zKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHdlYkZyYW1lKCktPmNvcmVGcmFt
ZSgpLT5kb2N1bWVudCgpOwotICAgIG1fcGFzc3dvcmRDb250YWluZXIgPSBkb2N1bWVudC0+Y3Jl
YXRlRWxlbWVudChkaXZUYWcsIGZhbHNlKTsKLSAgICBtX3Bhc3N3b3JkQ29udGFpbmVyLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGlkQXR0ciwgQXRvbWljU3RyaW5nKCJwYXNz
d29yZENvbnRhaW5lciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKLQog
ICAgIG1fcGFzc3dvcmRGaWVsZCA9IFBERlBsdWdpblBhc3N3b3JkRmllbGQ6OmNyZWF0ZShtX3Bk
ZkxheWVyQ29udHJvbGxlci5nZXQoKSwgdGhpcyk7Ci0gICAgbV9wYXNzd29yZEZpZWxkLT5hdHRh
Y2gobV9wYXNzd29yZENvbnRhaW5lci5nZXQoKSk7Ci0gICAgZG9jdW1lbnQtPmJvZHlPckZyYW1l
c2V0KCktPmFwcGVuZENoaWxkKCptX3Bhc3N3b3JkQ29udGFpbmVyKTsKKyAgICBtX3Bhc3N3b3Jk
RmllbGQtPmF0dGFjaChtX2Fubm90YXRpb25Db250YWluZXIuZ2V0KCkpOwogfQogCiB2b2lkIFBE
RlBsdWdpbjo6YXR0ZW1wdFRvVW5sb2NrUERGKGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCiB7CiAg
ICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGF0dGVtcHRUb1VubG9ja1dpdGhQYXNzd29yZDpwYXNz
d29yZF07CiAKLSAgICBpZiAoIWlzTG9ja2VkKCkpIHsKLSAgICAgICAgbV9wYXNzd29yZENvbnRh
aW5lciA9IG51bGxwdHI7CisgICAgaWYgKCFbcGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0pIHsKICAg
ICAgICAgbV9wYXNzd29yZEZpZWxkID0gbnVsbHB0cjsKIAogICAgICAgICBjYWxjdWxhdGVTaXpl
cygpOwotCi0gICAgICAgIG1fSFVELnNldFZpc2libGUodHJ1ZSwgSFVEOjpBbmltYXRlVmlzaWJp
bGl0eVRyYW5zaXRpb246Olllcyk7CisgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKICAgICB9
CiB9CiAKLXZvaWQgUERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCit2b2lkIFBERlBsdWdpbjo6
dXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpCiB7Ci0gICAgc2V0UERGRG9jdW1lbnRT
aXplKGlzTG9ja2VkKCkgPyBJbnRTaXplKCkgOiBJbnRTaXplKFttX3BkZkxheWVyQ29udHJvbGxl
ciBjb250ZW50U2l6ZVJlc3BlY3Rpbmdab29tXSkpOworICAgIGRvdWJsZSBuZXdTY2FsZUZhY3Rv
ciA9IGNvbnRyb2xsZXIoKS0+Y29udGVudHNTY2FsZUZhY3RvcigpOworICAgIGlmICghaGFuZGxl
c1BhZ2VTY2FsZUZhY3RvcigpKQorICAgICAgICBuZXdTY2FsZUZhY3RvciAqPSB3ZWJGcmFtZSgp
LT5wYWdlKCktPnBhZ2VTY2FsZUZhY3RvcigpOwogCi0gICAgLy8gV2UgaGF2ZSB0byBhc3luY2hy
b25vdXNseSB1cGRhdGUgc3R5bGVzIGJlY2F1c2Ugd2UgY291bGQgYmUgaW5zaWRlIGxheW91dC4K
LSAgICBSZWZQdHI8UERGUGx1Z2luPiByZWZmZWRUaGlzID0gdGhpczsKLSAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcmVmZmVkVGhpc10gewotICAgICAgICBy
ZWZmZWRUaGlzLT5kaWRDYWxjdWxhdGVTaXplcygpOwotICAgIH0pOworICAgIGlmIChuZXdTY2Fs
ZUZhY3RvciAhPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgZGV2aWNlU2NhbGVGYWN0b3JdKQorICAg
ICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIgc2V0RGV2aWNlU2NhbGVGYWN0b3I6bmV3U2NhbGVG
YWN0b3JdOworfQorCit2b2lkIFBERlBsdWdpbjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQo
ZmxvYXQpCit7CisgICAgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOwogfQogCi12
b2lkIFBERlBsdWdpbjo6ZGlkQ2FsY3VsYXRlU2l6ZXMoKQordm9pZCBQREZQbHVnaW46OmNvbXB1
dGVQYWdlQm94ZXMoKQogewotICAgIEhUTUxQbHVnSW5FbGVtZW50KiBwbHVnaW5FbGVtZW50ID0g
ZG93bmNhc3Q8UGx1Z2luRG9jdW1lbnQ+KCp3ZWJGcmFtZSgpLT5jb3JlRnJhbWUoKS0+ZG9jdW1l
bnQoKSkucGx1Z2luRWxlbWVudCgpOworICAgIHNpemVfdCBwYWdlQ291bnQgPSBDR1BERkRvY3Vt
ZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9wZGZEb2N1bWVudCBkb2N1bWVudFJlZl0pOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZQYWdl
UmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVudCBkb2N1bWVu
dFJlZl0sIGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKHBkZlBhZ2UpOwogCi0gICAgaWYgKGlzTG9j
a2VkKCkpIHsKLSAgICAgICAgcGx1Z2luRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdpZHRoLCAxMDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7
Ci0gICAgICAgIHBsdWdpbkVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlIZWlnaHQsIDEwMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAg
ICAgQ0dSZWN0IGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGQ3JvcEJv
eCk7CisgICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KGJveCkpCisgICAgICAgICAgICBib3ggPSBD
R1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERk1lZGlhQm94KTsKKyAgICAgICAgbV9w
YWdlQm94ZXMuYXBwZW5kKEludFJlY3QoYm94KSk7CisgICAgfQorfQorCit2b2lkIFBERlBsdWdp
bjo6Y2FsY3VsYXRlU2l6ZXMoKQoreworICAgIGlmIChbcGRmRG9jdW1lbnQoKSBpc0xvY2tlZF0p
IHsKKyAgICAgICAgc2V0UERGRG9jdW1lbnRTaXplKEludFNpemUoMCwgMCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgcGx1Z2luRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVdpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICBwbHVnaW5FbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNvbWUgc3Ry
YWlnaHQgZnJvbSBQREZLaXQuCisgICAgY29tcHV0ZVBhZ2VCb3hlcygpOwogCi0gICAgLy8gRklY
TUU6IEFkb3B0IHRoZSBuZXcgc2Nyb2xsIHNuYXAgc3BlY2lmaWNhdGlvbi4KKyAgICBzZXRQREZE
b2N1bWVudFNpemUoSW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNpemVSZXNw
ZWN0aW5nWm9vbV0pKTsKIH0KIAogYm9vbCBQREZQbHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTg1NiwyOCArMTEwMCwxMDAgQEAgYm9vbCBQREZQbHVn
aW46OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAordm9pZCBQREZQbHVnaW46OndpbGxEZXRhdGNoUmVuZGVyZXIoKQoreworICAg
IGlmICh3ZWJGcmFtZSgpKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHdl
YkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPnJl
bW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0KK30KKwogdm9pZCBQREZQbHVnaW46OmRl
c3Ryb3koKQogewotICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOwor
ICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRlbGVnYXRlID0gMDsKKworICAgIGlmICh3
ZWJGcmFtZSgpKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZyYW1l
KCktPmNvcmVGcmFtZSgpLT52aWV3KCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNj
cm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0KIAogICAgIG1fYWN0aXZlQW5ub3RhdGlvbiA9IG51
bGxwdHI7CisgICAgbV9hbm5vdGF0aW9uQ29udGFpbmVyID0gbnVsbHB0cjsKKworICAgIGRlc3Ry
b3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihW
ZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgCisgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIgcmVtb3Zl
RnJvbVN1cGVybGF5ZXJdOworICAgIFttX2NvbnRlbnRMYXllciByZW1vdmVGcm9tU3VwZXJsYXll
cl07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp1cGRhdGVDb250cm9sVGludHMoR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQpCit7CisgICAgQVNTRVJUKGdyYXBoaWNzQ29udGV4dC51cGRh
dGluZ0NvbnRyb2xUaW50cygpKTsKKworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgIGlmIChtX3Zl
cnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRl
KCk7CisgICAgaW52YWxpZGF0ZVNjcm9sbENvcm5lcihzY3JvbGxDb3JuZXJSZWN0KCkpOwogfQog
Ci12b2lkIFBERlBsdWdpbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKQordm9pZCBQREZQbHVnaW46OnBh
aW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYg
Y29udGV4dCkKIHsKLSAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIGNv
bnRleHQudHJhbnNsYXRlKDAsIC1tX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgW21f
cGRmTGF5ZXJDb250cm9sbGVyIGRyYXdJbkNvbnRleHQ6Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KV07CisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAg
ICAKKyAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKKyAgICAK
KyAgICBpZiAobGF5ZXIgPT0gbV9zY3JvbGxDb3JuZXJMYXllcikgeworICAgICAgICBJbnRSZWN0
IHNjcm9sbENvcm5lclJlY3QgPSB0aGlzLT5zY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgICAgIGdy
YXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXNjcm9sbENvcm5lclJlY3QueCgpLCAtc2Nyb2xsQ29y
bmVyUmVjdC55KCkpOworICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9s
bENvcm5lcihudWxscHRyLCBncmFwaGljc0NvbnRleHQsIHNjcm9sbENvcm5lclJlY3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gbnVs
bHB0cjsKKyAgICAKKyAgICBpZiAobGF5ZXIgPT0gbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyKQor
ICAgICAgICBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGVsc2UgaWYgKGxh
eWVyID09IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKQorICAgICAgICBzY3JvbGxiYXIgPSBo
b3Jpem9udGFsU2Nyb2xsYmFyKCk7CisKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXNjcm9sbGJhci0+eCgp
LCAtc2Nyb2xsYmFyLT55KCkpOworICAgIHNjcm9sbGJhci0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0
LCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKIH0KIAogUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
UERGUGx1Z2luOjpzbmFwc2hvdCgpCiB7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZmxvYXQgY29u
dGVudHNTY2FsZUZhY3RvciA9IGNvbnRyb2xsZXIoKS0+Y29udGVudHNTY2FsZUZhY3RvcigpOwor
ICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IHNpemUoKTsKKyAgICBiYWNraW5nU3RvcmVT
aXplLnNjYWxlKGNvbnRlbnRzU2NhbGVGYWN0b3IpOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2luZ1N0
b3JlU2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICBhdXRvIGNvbnRl
eHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworCisgICAgY29udGV4dC0+c2Nh
bGUoRmxvYXRTaXplKGNvbnRlbnRzU2NhbGVGYWN0b3IsIC1jb250ZW50c1NjYWxlRmFjdG9yKSk7
CisgICAgY29udGV4dC0+dHJhbnNsYXRlKC1tX3Njcm9sbE9mZnNldC53aWR0aCgpLCAtbV9wZGZE
b2N1bWVudFNpemUuaGVpZ2h0KCkgKyBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7CisKKyAgICBb
bV9wZGZMYXllckNvbnRyb2xsZXIgc25hcHNob3RJbkNvbnRleHQ6Y29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCldOworCisgICAgcmV0dXJuIGJpdG1hcDsKK30KKworUGxhdGZvcm1MYXllciogUERG
UGx1Z2luOjpwbHVnaW5MYXllcigpCit7CisgICAgcmV0dXJuIG1fY29udGFpbmVyTGF5ZXIuZ2V0
KCk7CiB9CiAKIEludFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21QbHVnaW5Ub1BERlZpZXco
Y29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewotICAgIHJldHVybiBJbnRQb2ludChwb2lu
dC54KCksIG1fc2l6ZS5oZWlnaHQoKSAtIHBvaW50LnkoKSk7CisgICAgcmV0dXJuIEludFBvaW50
KHBvaW50LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKIH0KIAogSW50UG9pbnQg
UERGUGx1Z2luOjpjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4oY29uc3QgSW50UG9pbnQmIHBv
aW50KSBjb25zdApAQCAtODg3LDggKzEyMDMsOCBAQCBJbnRQb2ludCBQREZQbHVnaW46OmNvbnZl
cnRGcm9tUm9vdFZpZXdUb1BsdWdpbihjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAKIElu
dFBvaW50IFBERlBsdWdpbjo6Y29udmVydEZyb21QREZWaWV3VG9Sb290Vmlldyhjb25zdCBJbnRQ
b2ludCYgcG9pbnQpIGNvbnN0CiB7Ci0gICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3JkaW5h
dGVzKHBvaW50LngoKSwgbV9zaXplLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKLSAgICByZXR1cm4g
bV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLm1hcFBvaW50KHBvaW50SW5QbHVnaW5Db29yZGlu
YXRlcyk7CisgICAgSW50UG9pbnQgcG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKHBvaW50LngoKSwg
c2l6ZSgpLmhlaWdodCgpIC0gcG9pbnQueSgpKTsKKyAgICByZXR1cm4gbV9yb290Vmlld1RvUGx1
Z2luVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkubWFwUG9p
bnQocG9pbnRJblBsdWdpbkNvb3JkaW5hdGVzKTsKIH0KIAogRmxvYXRSZWN0IFBERlBsdWdpbjo6
Y29udmVydEZyb21QREZWaWV3VG9TY3JlZW4oY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdApA
QCAtODk4LDggKzEyMTQsOCBAQCBGbG9hdFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVBERlZp
ZXdUb1NjcmVlbihjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiAgICAgaWYgKCFmcmFtZVZp
ZXcpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAotICAgIEZsb2F0UG9pbnQgb3JpZ2lu
SW5QbHVnaW5Db29yZGluYXRlcyhyZWN0LngoKSwgbV9zaXplLmhlaWdodCgpIC0gcmVjdC55KCkg
LSByZWN0LmhlaWdodCgpKTsKLSAgICBGbG9hdFJlY3QgcmVjdEluUm9vdFZpZXdDb29yZGluYXRl
cyA9IG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5tYXBSZWN0KEZsb2F0UmVjdChvcmlnaW5J
blBsdWdpbkNvb3JkaW5hdGVzLCByZWN0LnNpemUoKSkpOworICAgIEZsb2F0UG9pbnQgb3JpZ2lu
SW5QbHVnaW5Db29yZGluYXRlcyhyZWN0LngoKSwgc2l6ZSgpLmhlaWdodCgpIC0gcmVjdC55KCkg
LSByZWN0LmhlaWdodCgpKTsKKyAgICBGbG9hdFJlY3QgcmVjdEluUm9vdFZpZXdDb29yZGluYXRl
cyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVfb3IoQWZmaW5l
VHJhbnNmb3JtKCkpLm1hcFJlY3QoRmxvYXRSZWN0KG9yaWdpbkluUGx1Z2luQ29vcmRpbmF0ZXMs
IHJlY3Quc2l6ZSgpKSk7CiAKICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250ZW50c1RvU2NyZWVu
KGVuY2xvc2luZ0ludFJlY3QocmVjdEluUm9vdFZpZXdDb29yZGluYXRlcykpOwogfQpAQCAtOTEy
LDI1ICsxMjI4LDQ0IEBAIEludFJlY3QgUERGUGx1Z2luOjpib3VuZHNPblNjcmVlbigpIGNvbnN0
CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKICAgICBGbG9hdFJlY3QgYm91bmRzID0gRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgcmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcyA9IG1fcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5tYXBSZWN0KGJvdW5k
cyk7CisgICAgRmxvYXRSZWN0IHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBtX3Jvb3RWaWV3
VG9QbHVnaW5UcmFuc2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKS5t
YXBSZWN0KGJvdW5kcyk7CiAgICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihl
bmNsb3NpbmdJbnRSZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpKTsKIH0KIAogdm9pZCBQ
REZQbHVnaW46Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNv
bnN0IEludFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFu
c2Zvcm0pCiB7Ci0gICAgbV9wbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtID0gcGx1Z2luVG9Sb290
Vmlld1RyYW5zZm9ybTsKLSAgICBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0gPSBwbHVnaW5U
b1Jvb3RWaWV3VHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7
CisgICAgaWYgKHNpemUoKSA9PSBwbHVnaW5TaXplICYmIHBsdWdpblZpZXcoKS0+cGFnZVNjYWxl
RmFjdG9yKCkgPT0gW21fcGRmTGF5ZXJDb250cm9sbGVyIGNvbnRlbnRTY2FsZUZhY3Rvcl0pCisg
ICAgICAgIHJldHVybjsKKwogICAgIG1fc2l6ZSA9IHBsdWdpblNpemU7CisgICAgbV9yb290Vmll
d1RvUGx1Z2luVHJhbnNmb3JtID0gcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5pbnZlcnNlKCku
dmFsdWVfb3IoQWZmaW5lVHJhbnNmb3JtKCkpOworICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBz
ZXRGcmFtZVNpemU6cGx1Z2luU2l6ZV07CiAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHdl
YkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCk7CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5d
OworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgQ0FUcmFu
c2Zvcm0zRCB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKDEsIC0xLCAxKTsKKyAg
ICB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNEVHJhbnNsYXRlKHRyYW5zZm9ybSwgMCwgLXBsdWdp
blNpemUuaGVpZ2h0KCksIDApOworICAgIAorICAgIGlmIChoYW5kbGVzUGFnZVNjYWxlRmFjdG9y
KCkpIHsKKyAgICAgICAgQ0dGbG9hdCBtYWduaWZpY2F0aW9uID0gcGx1Z2luVmlldygpLT5wYWdl
U2NhbGVGYWN0b3IoKSAtIFttX3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2NhbGVGYWN0b3Jd
OwogCi0gICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldEZyYW1lU2l6ZTpmcmFtZVZpZXctPmZy
YW1lUmVjdCgpLnNpemUoKV07Ci0gICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHNldFZpc2libGVS
ZWN0OmZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCldOworICAgICAgICAvLyBGSVhNRTog
SW5zdGVhZCBvZiBtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcywgd2Ugc2hv
dWxkIHVzZSB0aGUgem9vbSBvcmlnaW4gZnJvbSBQbHVnaW5WaWV3OjpzZXRQYWdlU2NhbGVGYWN0
b3IuCisgICAgICAgIGlmIChtYWduaWZpY2F0aW9uKQorICAgICAgICAgICAgW21fcGRmTGF5ZXJD
b250cm9sbGVyIG1hZ25pZnlXaXRoTWFnbmlmaWNhdGlvbjptYWduaWZpY2F0aW9uIGF0UG9pbnQ6
Y29udmVydEZyb21QbHVnaW5Ub1BERlZpZXcobV9sYXN0TW91c2VQb3NpdGlvbkluUGx1Z2luQ29v
cmRpbmF0ZXMpIGltbWVkaWF0ZWx5Ok5PXTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB3
ZSBkb24ndCBoYW5kbGUgcGFnZSBzY2FsZSBvdXJzZWx2ZXMsIHdlIG5lZWQgdG8gcmVzcGVjdCBv
dXIgcGFyZW50IHBhZ2UncworICAgICAgICAvLyBzY2FsZSwgd2hpY2ggbWF5IGhhdmUgY2hhbmdl
ZC4KKyAgICAgICAgdXBkYXRlUGFnZUFuZERldmljZVNjYWxlRmFjdG9ycygpOworICAgIH0gCiAK
ICAgICBjYWxjdWxhdGVTaXplcygpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKIAogICAgIGlm
IChtX2FjdGl2ZUFubm90YXRpb24pCiAgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+dXBkYXRl
R2VvbWV0cnkoKTsKKworICAgIFttX2NvbnRlbnRMYXllciBzZXRTdWJsYXllclRyYW5zZm9ybTp0
cmFuc2Zvcm1dOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CiB9CiAKIHZvaWQgUERGUGx1
Z2luOjpmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QpCkBAIC05NDgsNiArMTI4Myw3IEBA
IHZvaWQgUERGUGx1Z2luOjpkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdU
Rjo6U3RyaW5nJikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorICAgIAogc3RhdGlj
IE5TVUludGVnZXIgbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChjb25zdCBXZWJFdmVudCYgZXZl
bnQpCiB7CiAgICAgcmV0dXJuIChldmVudC5zaGlmdEtleSgpID8gTlNFdmVudE1vZGlmaWVyRmxh
Z1NoaWZ0IDogMCkKQEAgLTk1OSw2ICsxMjk1LDEyIEBAIHN0YXRpYyBOU1VJbnRlZ2VyIG1vZGlm
aWVyRmxhZ3NGcm9tV2ViRXZlbnQoY29uc3QgV2ViRXZlbnQmIGV2ZW50KQogc3RhdGljIGJvb2wg
Z2V0RXZlbnRUeXBlRnJvbVdlYkV2ZW50KGNvbnN0IFdlYkV2ZW50JiBldmVudCwgTlNFdmVudFR5
cGUmIGV2ZW50VHlwZSkKIHsKICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2Ug
V2ViRXZlbnQ6OktleURvd246CisgICAgICAgIGV2ZW50VHlwZSA9IE5TRXZlbnRUeXBlS2V5RG93
bjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBXZWJFdmVudDo6S2V5VXA6CisgICAg
ICAgIGV2ZW50VHlwZSA9IE5TRXZlbnRUeXBlS2V5VXA7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2Fz
dDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpLmJ1dHRvbigpKSB7CiAgICAgICAgIGNhc2Ug
V2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKQEAgLTEwMDMsODAgKzEzNDUsMTM0IEBAIHN0YXRp
YyBib29sIGdldEV2ZW50VHlwZUZyb21XZWJFdmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQsIE5T
RXZlbnRUeXBlJiBldmVudFR5CiBOU0V2ZW50ICpQREZQbHVnaW46Om5zRXZlbnRGb3JXZWJNb3Vz
ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQogewogICAgIG1fbGFzdE1vdXNlUG9z
aXRpb25JblBsdWdpbkNvb3JkaW5hdGVzID0gY29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKGV2
ZW50LnBvc2l0aW9uKCkpOworCiAgICAgSW50UG9pbnQgcG9zaXRpb25JblBERlZpZXdDb29yZGlu
YXRlcyhjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVn
aW5Db29yZGluYXRlcykpOwogCiAgICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlOwogCiAgICAgaWYg
KCFnZXRFdmVudFR5cGVGcm9tV2ViRXZlbnQoZXZlbnQsIGV2ZW50VHlwZSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gMDsKIAogICAgIE5TVUludGVnZXIgbW9kaWZp
ZXJGbGFncyA9IG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoZXZlbnQpOwogCiAgICAgcmV0dXJu
IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246cG9zaXRpb25J
blBERlZpZXdDb29yZGluYXRlcyBtb2RpZmllckZsYWdzOm1vZGlmaWVyRmxhZ3MgdGltZXN0YW1w
OjAgd2luZG93TnVtYmVyOjAgY29udGV4dDpuaWwgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OmV2
ZW50LmNsaWNrQ291bnQoKSBwcmVzc3VyZTowXTsKIH0KIAotdm9pZCBQREZQbHVnaW46OnVwZGF0
ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCwgVXBkYXRlQ3Vyc29yIG1vZGUpCisj
aWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTMwMAordm9pZCBQREZQbHVn
aW46OnVwZGF0ZUN1cnNvcihjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCwgVXBkYXRlQ3Vyc29y
TW9kZSBtb2RlKQogewotICAgIC8vIEZJWE1FOiBTaG91bGQgaGF2ZSBhIGhhbmQgZm9yIGxpbmtz
LCBhbmQgc29tZXRoaW5nIHNwZWNpYWwgZm9yIGFubm90YXRpb25zLgorICAgIEhpdFRlc3RSZXN1
bHQgaGl0VGVzdFJlc3VsdCA9IE5vbmU7CiAKLSAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1
bHQgPSBIaXRUZXN0UmVzdWx0OjpOb25lOworICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uVW5k
ZXJNb3VzZSA9IFttX3BkZkxheWVyQ29udHJvbGxlciBnZXRTZWxlY3Rpb25Gb3JXb3JkQXRQb2lu
dDpjb252ZXJ0RnJvbVBsdWdpblRvUERGVmlldyhldmVudC5wb3NpdGlvbigpKV07CisgICAgaWYg
KHNlbGVjdGlvblVuZGVyTW91c2UgJiYgW1tzZWxlY3Rpb25VbmRlck1vdXNlIHN0cmluZ10gbGVu
Z3RoXSkKKyAgICAgICAgaGl0VGVzdFJlc3VsdCA9IFRleHQ7CiAKLSAgICBJbnRQb2ludCBwb3Np
dGlvbkluUERGVmlld0Nvb3JkaW5hdGVzKGNvbnZlcnRGcm9tUGx1Z2luVG9QREZWaWV3KG1fbGFz
dE1vdXNlUG9zaXRpb25JblBsdWdpbkNvb3JkaW5hdGVzKSk7Ci0gICAgaWYgKG1fSFVELmNvbnRh
aW5zUG9pbnRJblJvb3RWaWV3KGV2ZW50LnBvc2l0aW9uKCkpKQotICAgICAgICBoaXRUZXN0UmVz
dWx0ID0gSGl0VGVzdFJlc3VsdDo6SFVEOwotICAgIGVsc2UgewotICAgICAgICBQREZTZWxlY3Rp
b24gKnNlbGVjdGlvblVuZGVyTW91c2UgPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ2V0U2VsZWN0
aW9uRm9yV29yZEF0UG9pbnQ6cG9zaXRpb25JblBERlZpZXdDb29yZGluYXRlc107Ci0gICAgICAg
IGlmIChzZWxlY3Rpb25VbmRlck1vdXNlICYmIFtbc2VsZWN0aW9uVW5kZXJNb3VzZSBzdHJpbmdd
IGxlbmd0aF0pCi0gICAgICAgICAgICBoaXRUZXN0UmVzdWx0ID0gSGl0VGVzdFJlc3VsdDo6VGV4
dDsKLSAgICB9Ci0KLSAgICBpZiAoaGl0VGVzdFJlc3VsdCA9PSBtX2xhc3RIaXRUZXN0UmVzdWx0
ICYmIG1vZGUgPT0gVXBkYXRlQ3Vyc29yOjpJZk5lZWRlZCkKKyAgICBpZiAoaGl0VGVzdFJlc3Vs
dCA9PSBtX2xhc3RIaXRUZXN0UmVzdWx0ICYmIG1vZGUgPT0gVXBkYXRlSWZOZWVkZWQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNvbnN0IEN1cnNvciYgY3Vyc29yID0gW2hpdFRlc3RSZXN1bHRd
IHsKLSAgICAgICAgc3dpdGNoIChoaXRUZXN0UmVzdWx0KSB7Ci0gICAgICAgIGNhc2UgSGl0VGVz
dFJlc3VsdDo6Tm9uZToKLSAgICAgICAgICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Ci0gICAg
ICAgIGNhc2UgSGl0VGVzdFJlc3VsdDo6VGV4dDoKLSAgICAgICAgICAgIHJldHVybiBpQmVhbUN1
cnNvcigpOwotICAgICAgICBjYXNlIEhpdFRlc3RSZXN1bHQ6OkhVRDoKLSAgICAgICAgICAgIHJl
dHVybiBwb2ludGVyQ3Vyc29yKCk7Ci0gICAgICAgIH07Ci0gICAgfSgpOwotCi0gICAgd2ViRnJh
bWUoKS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldEN1cnNvcihjdXJz
b3IpKTsKKyAgICB3ZWJGcmFtZSgpLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2V0Q3Vyc29yKGhpdFRlc3RSZXN1bHQgPT0gVGV4dCA/IGlCZWFtQ3Vyc29yKCkgOiBwb2lu
dGVyQ3Vyc29yKCkpKTsKICAgICBtX2xhc3RIaXRUZXN0UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsK
IH0KKyNlbmRpZgogCiBib29sIFBERlBsdWdpbjo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50JiBldmVudCkKIHsKICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1FdmVu
dCA9IHBsYXRmb3JtKGV2ZW50KTsKKyAgICBJbnRQb2ludCBtb3VzZVBvc2l0aW9uID0gY29udmVy
dEZyb21Sb290Vmlld1RvUGx1Z2luKGV2ZW50LnBvc2l0aW9uKCkpOwogCiAgICAgbV9sYXN0TW91
c2VFdmVudCA9IGV2ZW50OwogCi0gICAgaWYgKGlzTG9ja2VkKCkpCisgICAgUmVmUHRyPFNjcm9s
bGJhcj4gdGFyZ2V0U2Nyb2xsYmFyOworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHRhcmdldFNjcm9s
bGJhckZvckxhc3RNb3VzZVBvc2l0aW9uOworCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJM
YXllcikgeworICAgICAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyRnJhbWUobV92ZXJ0aWNh
bFNjcm9sbGJhckxheWVyLmdldCgpLmZyYW1lKTsKKyAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xs
YmFyRnJhbWUuY29udGFpbnMobW91c2VQb3NpdGlvbikpCisgICAgICAgICAgICB0YXJnZXRTY3Jv
bGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICBpZiAodmVydGljYWxTY3JvbGxi
YXJGcmFtZS5jb250YWlucyhtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29yZGluYXRlcykp
CisgICAgICAgICAgICB0YXJnZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlvbiA9IHZlcnRp
Y2FsU2Nyb2xsYmFyKCk7CisgICAgfQorCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyKSB7CisgICAgICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhckZyYW1lKG1faG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyLmdldCgpLmZyYW1lKTsKKyAgICAgICAgaWYgKGhvcml6b250YWxT
Y3JvbGxiYXJGcmFtZS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICAgICAgICAgIHRhcmdl
dFNjcm9sbGJhciA9IGhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgaWYgKGhvcml6b250
YWxTY3JvbGxiYXJGcmFtZS5jb250YWlucyhtX2xhc3RNb3VzZVBvc2l0aW9uSW5QbHVnaW5Db29y
ZGluYXRlcykpCisgICAgICAgICAgICB0YXJnZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlv
biA9IGhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3Ju
ZXJMYXllciAmJiBJbnRSZWN0KG1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkuZnJhbWUpLmNvbnRh
aW5zKG1vdXNlUG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoW3Bk
ZkRvY3VtZW50KCkgaXNMb2NrZWRdKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBS
aWdodC1jbGlja3MgYW5kIENvbnRyb2wtY2xpY2tzIGFsd2F5cyBjYWxsIGhhbmRsZUNvbnRleHRN
ZW51RXZlbnQgYXMgd2VsbC4KICAgICBpZiAoZXZlbnQuYnV0dG9uKCkgPT0gV2ViTW91c2VFdmVu
dDo6UmlnaHRCdXR0b24gfHwgKGV2ZW50LmJ1dHRvbigpID09IFdlYk1vdXNlRXZlbnQ6OkxlZnRC
dXR0b24gJiYgZXZlbnQuY29udHJvbEtleSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBpZiAoZXZlbnQuYnV0dG9uKCkgIT0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCiAgICAgTlNFdmVudCAqbnNFdmVudCA9IG5zRXZlbnRGb3JXZWJN
b3VzZUV2ZW50KGV2ZW50KTsKIAogICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CiAgICAgY2Fz
ZSBXZWJFdmVudDo6TW91c2VNb3ZlOgorICAgICAgICBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgp
OworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEzMDAKICAgICAgICAg
dXBkYXRlQ3Vyc29yKGV2ZW50KTsKLSAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNl
RHJhZ2dlZDpuc0V2ZW50XTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKworICAgICAg
ICBpZiAodGFyZ2V0U2Nyb2xsYmFyKSB7CisgICAgICAgICAgICBpZiAoIXRhcmdldFNjcm9sbGJh
ckZvckxhc3RNb3VzZVBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0U2Nyb2xsYmFy
LT5tb3VzZUVudGVyZWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlTW92ZWQocGxh
dGZvcm1FdmVudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRhcmdldFNjcm9sbGJhciAm
JiB0YXJnZXRTY3JvbGxiYXJGb3JMYXN0TW91c2VQb3NpdGlvbikKKyAgICAgICAgICAgIHRhcmdl
dFNjcm9sbGJhckZvckxhc3RNb3VzZVBvc2l0aW9uLT5tb3VzZUV4aXRlZCgpOworCisgICAgICAg
IHN3aXRjaCAoZXZlbnQuYnV0dG9uKCkpIHsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpM
ZWZ0QnV0dG9uOgorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRHJhZ2dl
ZDpuc0V2ZW50XTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1v
dXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok1pZGRs
ZUJ1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBXZWJNb3Vz
ZUV2ZW50OjpOb0J1dHRvbjoKKyAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3Vz
ZU1vdmVkOm5zRXZlbnRdOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3duOgotICAgICAgICBbbV9w
ZGZMYXllckNvbnRyb2xsZXIgbW91c2VEb3duOm5zRXZlbnRdOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgc3dpdGNoIChldmVudC5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1v
dXNlRXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlRG93bihwbGF0Zm9y
bUV2ZW50KTsKKworICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRG93bjpu
c0V2ZW50XTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIHJp
Z2h0TW91c2VEb3duOm5zRXZlbnRdOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgorICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6Ok5vQnV0dG9uOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6Ci0gICAgICAgIFttX3Bk
ZkxheWVyQ29udHJvbGxlciBtb3VzZVVwOm5zRXZlbnRdOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgc3dpdGNoIChldmVudC5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1vdXNl
RXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAgICBpZiAodGFyZ2V0U2Nyb2xsYmFyKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0YXJnZXRTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVu
dCk7CisKKyAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlciBtb3VzZVVwOm5zRXZlbnRd
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6
UmlnaHRCdXR0b246CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TWlkZGxlQnV0dG9uOgor
ICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Ok5vQnV0dG9uOgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTEwODYsMTIgKzE0ODIsMTYgQEAgYm9vbCBQREZQbHVnaW46Omhh
bmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCiAKIGJvb2wgUERGUGx1
Z2luOjpoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCiB7
Ci0gICAgdXBkYXRlQ3Vyc29yKGV2ZW50LCBVcGRhdGVDdXJzb3I6OkZvcmNlKTsKKyAgICBtb3Vz
ZUVudGVyZWRDb250ZW50QXJlYSgpOworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPCAxMDEzMDAKKyAgICB1cGRhdGVDdXJzb3IoZXZlbnQsIEZvcmNlVXBkYXRlKTsKKyNlbmRp
ZgogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBQREZQbHVnaW46OmhhbmRsZU1vdXNlTGVh
dmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKIHsKKyAgICBtb3VzZUV4aXRlZENvbnRlbnRB
cmVhKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIApAQCAtMTA5OSw3ICsxNDk5LDcgQEAg
Ym9vbCBQREZQbHVnaW46OnNob3dDb250ZXh0TWVudUF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBv
aW50KQogewogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1l
KCktPnZpZXcoKTsKICAgICBJbnRQb2ludCBjb250ZW50c1BvaW50ID0gZnJhbWVWaWV3LT5jb250
ZW50c1RvUm9vdFZpZXcocG9pbnQpOwotICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQoV2ViRXZlbnQ6
Ok1vdXNlRG93biwgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b24sIGNvbnRlbnRzUG9pbnQsIGNv
bnRlbnRzUG9pbnQsIDAsIDAsIDAsIDEsIHN0YXRpY19jYXN0PFdlYkV2ZW50OjpNb2RpZmllcnM+
KDApLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgRm9yY2VBdENsaWNrKTsKKyAgICBX
ZWJNb3VzZUV2ZW50IGV2ZW50KFdlYkV2ZW50OjpNb3VzZURvd24sIFdlYk1vdXNlRXZlbnQ6OlJp
Z2h0QnV0dG9uLCBjb250ZW50c1BvaW50LCBjb250ZW50c1BvaW50LCAwLCAwLCAwLCAxLCBzdGF0
aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPigwKSwgbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCksIFdlYkNvcmU6OkZvcmNlQXRDbGljayk7CiAgICAgcmV0dXJuIGhhbmRsZUNvbnRleHRN
ZW51RXZlbnQoZXZlbnQpOwogfQogCkBAIC0xMTE1LDYgKzE1MTUsMjcgQEAgYm9vbCBQREZQbHVn
aW46OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCiAg
ICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQorCitib29sIFBERlBsdWdpbjo6aGFuZGxlS2V5Ym9h
cmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKK3sKKyAgICBOU0V2ZW50VHlw
ZSBldmVudFR5cGU7CisKKyAgICBpZiAoIWdldEV2ZW50VHlwZUZyb21XZWJFdmVudChldmVudCwg
ZXZlbnRUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlNVSW50ZWdlciBtb2Rp
ZmllckZsYWdzID0gbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChldmVudCk7CisgICAgCisgICAg
TlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQga2V5RXZlbnRXaXRoVHlwZTpldmVudFR5cGUg
bG9jYXRpb246TlNaZXJvUG9pbnQgbW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFt
cDowIHdpbmRvd051bWJlcjowIGNvbnRleHQ6MCBjaGFyYWN0ZXJzOmV2ZW50LnRleHQoKSBjaGFy
YWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6ZXZlbnQudW5tb2RpZmllZFRleHQoKSBpc0FSZXBlYXQ6
ZXZlbnQuaXNBdXRvUmVwZWF0KCkga2V5Q29kZTpldmVudC5uYXRpdmVWaXJ0dWFsS2V5Q29kZSgp
XTsKKyAgICAKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgV2ViRXZlbnQ6
OktleURvd246CisgICAgICAgIHJldHVybiBbbV9wZGZMYXllckNvbnRyb2xsZXIga2V5RG93bjpm
YWtlRXZlbnRdOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGZhbHNlOworfQogICAgIAogYm9vbCBQREZQbHVnaW46OmhhbmRsZUVk
aXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJn
dW1lbnQpCiB7CkBAIC0xMTQ1LDYgKzE1NjYsMzIgQEAgYm9vbCBQREZQbHVnaW46OmlzRWRpdGlu
Z0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCit2b2lkIFBERlBsdWdpbjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9m
ZnNldCYgb2Zmc2V0KQoreworICAgIG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZShvZmZzZXQueCgp
LCBvZmZzZXQueSgpKTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIgc2V0U2Nyb2xsUG9zaXRpb246b2Zmc2V0XTsKKworICAgIGlmIChtX2Fj
dGl2ZUFubm90YXRpb24pCisgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbi0+dXBkYXRlR2VvbWV0
cnkoKTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisKK3ZvaWQgUERGUGx1Z2lu
OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBob3Jpem9udGFsU2Nyb2xsYmFy
KCkpCisgICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJMYXllciBzZXROZWVkc0Rpc3BsYXld
OworICAgIGVsc2UgaWYgKCZzY3JvbGxiYXIgPT0gdmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAg
ICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllciBzZXROZWVkc0Rpc3BsYXldOworfQorCit2b2lk
IFBERlBsdWdpbjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBbbV9zY3JvbGxDb3JuZXJMYXllciBzZXROZWVkc0Rpc3BsYXldOworfQorCiBi
b29sIFBERlBsdWdpbjo6aXNGdWxsRnJhbWVQbHVnaW4oKSBjb25zdAogewogICAgIC8vIDxvYmpl
Y3Q+IG9yIDxlbWJlZD4gcGx1Z2lucyB3aWxsIGFwcGVhciB0byBiZSBpbiB0aGVpciBwYXJlbnQg
ZnJhbWUsIHNvIHdlIGhhdmUgdG8KQEAgLTExNTMsNiArMTYwMCwxMSBAQCBib29sIFBERlBsdWdp
bjo6aXNGdWxsRnJhbWVQbHVnaW4oKSBjb25zdAogICAgIHJldHVybiBkb2N1bWVudC0+aXNQbHVn
aW5Eb2N1bWVudCgpICYmIHN0YXRpY19jYXN0PFBsdWdpbkRvY3VtZW50Kj4oZG9jdW1lbnQpLT5w
bHVnaW5XaWRnZXQoKSA9PSBwbHVnaW5WaWV3KCk7CiB9CiAKK2Jvb2wgUERGUGx1Z2luOjpoYW5k
bGVzUGFnZVNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2ViRnJhbWUoKS0+aXNN
YWluRnJhbWUoKSAmJiBpc0Z1bGxGcmFtZVBsdWdpbigpOworfQorCiB2b2lkIFBERlBsdWdpbjo6
Y2xpY2tlZExpbmsoTlNVUkwgKnVybCkKIHsKICAgICBVUkwgY29yZVVSTCA9IHVybDsKQEAgLTEx
NzcsMTQgKzE2MjksMTYgQEAgdm9pZCBQREZQbHVnaW46OnNldEFjdGl2ZUFubm90YXRpb24oUERG
QW5ub3RhdGlvbiAqYW5ub3RhdGlvbikKICAgICAgICAgbV9hY3RpdmVBbm5vdGF0aW9uLT5jb21t
aXQoKTsKIAogICAgIGlmIChhbm5vdGF0aW9uKSB7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNs
YXJhdGlvbnMiCiAgICAgICAgIGlmIChbYW5ub3RhdGlvbiBpc0tpbmRPZkNsYXNzOnBkZkFubm90
YXRpb25UZXh0V2lkZ2V0Q2xhc3MoKV0gJiYgc3RhdGljX2Nhc3Q8UERGQW5ub3RhdGlvblRleHRX
aWRnZXQgKj4oYW5ub3RhdGlvbikuaXNSZWFkT25seSkgewogICAgICAgICAgICAgbV9hY3RpdmVB
bm5vdGF0aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogCiAgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbiA9
IFBERlBsdWdpbkFubm90YXRpb246OmNyZWF0ZShhbm5vdGF0aW9uLCBtX3BkZkxheWVyQ29udHJv
bGxlci5nZXQoKSwgdGhpcyk7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHdlYkZyYW1l
KCktPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpOwotICAgICAgICBtX2FjdGl2ZUFubm90YXRpb24t
PmF0dGFjaChkb2N1bWVudC0+Ym9keU9yRnJhbWVzZXQoKSk7CisgICAgICAgIG1fYWN0aXZlQW5u
b3RhdGlvbi0+YXR0YWNoKG1fYW5ub3RhdGlvbkNvbnRhaW5lci5nZXQoKSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fYWN0aXZlQW5ub3RhdGlvbiA9IG51bGxwdHI7CiB9CkBAIC0xMTk1LDEwICsx
NjQ5LDE5IEBAIGJvb2wgUERGUGx1Z2luOjpzdXBwb3J0c0Zvcm1zKCkKICAgICByZXR1cm4gaXNG
dWxsRnJhbWVQbHVnaW4oKTsKIH0KIAotdm9pZCBQREZQbHVnaW46Om5vdGlmeURpc3BsYXlNb2Rl
Q2hhbmdlZChpbnQgbW9kZSkKK3ZvaWQgUERGUGx1Z2luOjpub3RpZnlDb250ZW50U2NhbGVGYWN0
b3JDaGFuZ2VkKENHRmxvYXQgc2NhbGVGYWN0b3IpCit7CisgICAgaWYgKGhhbmRsZXNQYWdlU2Nh
bGVGYWN0b3IoKSkKKyAgICAgICAgcGx1Z2luVmlldygpLT5zZXRQYWdlU2NhbGVGYWN0b3Ioc2Nh
bGVGYWN0b3IsIEludFBvaW50KCkpOworCisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1cGRh
dGVTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpub3RpZnlEaXNwbGF5TW9kZUNo
YW5nZWQoaW50KQogewotICAgIG1fdXNpbmdDb250aW51b3VzTW9kZSA9IChtb2RlID09IGtQREZE
aXNwbGF5U2luZ2xlUGFnZUNvbnRpbnVvdXMgfHwgbW9kZSA9PSBrUERGRGlzcGxheVR3b1VwQ29u
dGludW91cyk7CiAgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7
CiB9CiAKIFJlZlB0cjxTaGFyZWRCdWZmZXI+IFBERlBsdWdpbjo6bGl2ZVJlc291cmNlRGF0YSgp
IGNvbnN0CkBAIC0xMjMyLDcgKzE2OTUsNyBAQCB2b2lkIFBERlBsdWdpbjo6b3BlbldpdGhOYXRp
dmVBcHBsaWNhdGlvbigpCiAKICAgICAgICAgTlNEYXRhICpkYXRhID0gbGl2ZURhdGEoKTsKIAot
ICAgICAgICBtX3RlbXBvcmFyeVBERlVVSUQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7
CisgICAgICAgIG1fdGVtcG9yYXJ5UERGVVVJRCA9IFdlYkNvcmU6OmNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKTsKICAgICAgICAgQVNTRVJUKG1fdGVtcG9yYXJ5UERGVVVJRCk7CiAKICAgICAg
ICAgd2ViRnJhbWUoKS0+cGFnZSgpLT5zYXZlUERGVG9UZW1wb3JhcnlGb2xkZXJBbmRPcGVuV2l0
aE5hdGl2ZUFwcGxpY2F0aW9uKG1fc3VnZ2VzdGVkRmlsZW5hbWUsIHdlYkZyYW1lKCktPnVybCgp
LCBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KFtkYXRhIGJ5dGVzXSksIFtkYXRh
IGxlbmd0aF0sIG1fdGVtcG9yYXJ5UERGVVVJRCk7CkBAIC0xMzE1LDcgKzE3NzgsNyBAQCBQREZT
ZWxlY3Rpb24gKlBERlBsdWdpbjo6bmV4dE1hdGNoRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBCT09MIHNlYXJjaEZvcgogCiAgICAgUERGRG9jdW1lbnQgKmRvY3VtZW50ID0gcGRmRG9j
dW1lbnQoKS5nZXQoKTsKIAotICAgIFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uRm9ySW5pdGlhbFNl
YXJjaCA9IFtpbml0aWFsU2VsZWN0aW9uIGNvcHldOworICAgIFJldGFpblB0cjxQREZTZWxlY3Rp
b24+IHNlbGVjdGlvbkZvckluaXRpYWxTZWFyY2ggPSBhZG9wdE5TKFtpbml0aWFsU2VsZWN0aW9u
IGNvcHldKTsKICAgICBpZiAoc3RhcnRJblNlbGVjdGlvbikgewogICAgICAgICAvLyBJbml0aWFs
bHkgd2Ugd2FudCB0byBpbmNsdWRlIHRoZSBzZWxlY3RlZCB0ZXh0IGluIHRoZSBzZWFyY2guIFNv
IHdlIG11c3QgbW9kaWZ5IHRoZSBzdGFydGluZyBzZWFyY2gKICAgICAgICAgLy8gc2VsZWN0aW9u
IHRvIGZpdCBQREZEb2N1bWVudCdzIHNlYXJjaCByZXF1aXJlbWVudHM6IHNlbGVjdGlvbiBtdXN0
IGhhdmUgYSBsZW5ndGggPj0gMSwgYmVnaW4gYmVmb3JlCkBAIC0xMzMwLDE1ICsxNzkzLDE2IEBA
IFBERlNlbGVjdGlvbiAqUERGUGx1Z2luOjpuZXh0TWF0Y2hGb3JTdHJpbmcoY29uc3QgU3RyaW5n
JiB0YXJnZXQsIEJPT0wgc2VhcmNoRm9yCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBQREZTZWxl
Y3Rpb24gKmZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0IGZyb21T
ZWxlY3Rpb246c2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCB3aXRoT3B0aW9uczpvcHRpb25zXTsK
LSAgICBbc2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaCByZWxlYXNlXTsKKyAgICBQREZTZWxlY3Rp
b24gKmZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZpbmRTdHJpbmc6dGFyZ2V0IGZyb21TZWxl
Y3Rpb246c2VsZWN0aW9uRm9ySW5pdGlhbFNlYXJjaC5nZXQoKSB3aXRoT3B0aW9uczpvcHRpb25z
XTsKIAogICAgIC8vIElmIHdlIGZpcnN0IHNlYXJjaGVkIGluIHRoZSBzZWxlY3Rpb24sIGFuZCB3
ZSBmb3VuZCB0aGUgc2VsZWN0aW9uLCBzZWFyY2ggYWdhaW4gZnJvbSBqdXN0IHBhc3QgdGhlIHNl
bGVjdGlvbi4KICAgICBpZiAoc3RhcnRJblNlbGVjdGlvbiAmJiBbZm91bmRTZWxlY3Rpb24gaXNF
cXVhbDppbml0aWFsU2VsZWN0aW9uXSkKICAgICAgICAgZm91bmRTZWxlY3Rpb24gPSBbZG9jdW1l
bnQgZmluZFN0cmluZzp0YXJnZXQgZnJvbVNlbGVjdGlvbjppbml0aWFsU2VsZWN0aW9uIHdpdGhP
cHRpb25zOm9wdGlvbnNdOwogCi0gICAgaWYgKCFmb3VuZFNlbGVjdGlvbiAmJiB3cmFwU2VhcmNo
KQotICAgICAgICBmb3VuZFNlbGVjdGlvbiA9IFtkb2N1bWVudCBmaW5kU3RyaW5nOnRhcmdldCBm
cm9tU2VsZWN0aW9uOm5pbCB3aXRoT3B0aW9uczpvcHRpb25zXTsKKyAgICBpZiAoIWZvdW5kU2Vs
ZWN0aW9uICYmIHdyYXBTZWFyY2gpIHsKKyAgICAgICAgYXV0byBlbXB0eVNlbGVjdGlvbiA9IGFk
b3B0TlMoW1twZGZTZWxlY3Rpb25DbGFzcygpIGFsbG9jXSBpbml0V2l0aERvY3VtZW50OmRvY3Vt
ZW50XSk7CisgICAgICAgIGZvdW5kU2VsZWN0aW9uID0gW2RvY3VtZW50IGZpbmRTdHJpbmc6dGFy
Z2V0IGZyb21TZWxlY3Rpb246ZW1wdHlTZWxlY3Rpb24uZ2V0KCkgd2l0aE9wdGlvbnM6b3B0aW9u
c107CisgICAgfQogCiAgICAgcmV0dXJuIGZvdW5kU2VsZWN0aW9uOwogfQpAQCAtMTM4Miw3ICsx
ODQ2LDcgQEAgYm9vbCBQREZQbHVnaW46OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQs
IFdlYkNvcmU6OkZpbmRPcHRpb25zIG9wdGlvbnMsIHUKICAgICByZXR1cm4gbWF0Y2hDb3VudCA+
IDA7CiB9CiAKLWJvb2wgUERGUGx1Z2luOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCitib29sIFBERlBsdWdpbjo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KQog
ewogICAgIEludFBvaW50IGxvY2FsUG9pbnQgPSBjb252ZXJ0RnJvbVJvb3RWaWV3VG9QbHVnaW4o
cm91bmRlZEludFBvaW50KHBvaW50KSk7CiAgICAgUERGU2VsZWN0aW9uKiBsb29rdXBTZWxlY3Rp
b24gPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6Y29u
dmVydEZyb21QbHVnaW5Ub1BERlZpZXcobG9jYWxQb2ludCldOwpAQCAtMTQwMywxNyArMTg2Nywz
NSBAQCB2b2lkIFBERlBsdWdpbjo6Zm9jdXNQcmV2aW91c0Fubm90YXRpb24oKQogICAgIFttX3Bk
ZkxheWVyQ29udHJvbGxlciBhY3RpdmF0ZU5leHRBbm5vdGF0aW9uOnRydWVdOwogfQogCi12b2lk
IFBERlBsdWdpbjo6bm90aWZ5U2VsZWN0aW9uQ2hhbmdlZChQREZTZWxlY3Rpb24gKnNlbGVjdGlv
bikKK3ZvaWQgUERGUGx1Z2luOjpub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKFBERlNlbGVjdGlvbiAq
KQogewogICAgIHdlYkZyYW1lKCktPnBhZ2UoKS0+ZGlkQ2hhbmdlU2VsZWN0aW9uKCk7CiB9CiAK
K3N0YXRpYyBjb25zdCBDdXJzb3ImIHBkZkxheWVyQ29udHJvbGxlckN1cnNvclR5cGVUb0N1cnNv
cihQREZMYXllckNvbnRyb2xsZXJDdXJzb3JUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBrUERGTGF5ZXJDb250cm9sbGVyQ3Vyc29yVHlwZUhhbmQ6CisgICAgICAg
IHJldHVybiBoYW5kQ3Vyc29yKCk7CisgICAgY2FzZSBrUERGTGF5ZXJDb250cm9sbGVyQ3Vyc29y
VHlwZUlCZWFtOgorICAgICAgICByZXR1cm4gaUJlYW1DdXJzb3IoKTsKKyAgICBjYXNlIGtQREZM
YXllckNvbnRyb2xsZXJDdXJzb3JUeXBlUG9pbnRlcjoKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gcG9pbnRlckN1cnNvcigpOworICAgIH0KK30KKwordm9pZCBQREZQbHVnaW46Om5vdGlm
eUN1cnNvckNoYW5nZWQodWludDY0X3QgdHlwZSkKK3sKKyAgICB3ZWJGcmFtZSgpLT5wYWdlKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0Q3Vyc29yKHBkZkxheWVyQ29udHJvbGxl
ckN1cnNvclR5cGVUb0N1cnNvcihzdGF0aWNfY2FzdDxQREZMYXllckNvbnRyb2xsZXJDdXJzb3JU
eXBlPih0eXBlKSkpKTsKK30KKwogU3RyaW5nIFBERlBsdWdpbjo6Z2V0U2VsZWN0aW9uU3RyaW5n
KCkgY29uc3QKIHsKICAgICByZXR1cm4gW1ttX3BkZkxheWVyQ29udHJvbGxlciBjdXJyZW50U2Vs
ZWN0aW9uXSBzdHJpbmddOwogfQogCi1TdHJpbmcgUERGUGx1Z2luOjpnZXRTZWxlY3Rpb25Gb3JX
b3JkQXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK1N0cmluZyBQREZQbHVn
aW46OmdldFNlbGVjdGlvbkZvcldvcmRBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IHBvaW50KSBjb25zdAogewogICAgIEludFBvaW50IHBvaW50SW5WaWV3ID0gY29udmVydEZyb21Q
bHVnaW5Ub1BERlZpZXcoY29udmVydEZyb21Sb290Vmlld1RvUGx1Z2luKHJvdW5kZWRJbnRQb2lu
dChwb2ludCkpKTsKICAgICBQREZTZWxlY3Rpb24gKnNlbGVjdGlvbkZvcldvcmQgPSBbbV9wZGZM
YXllckNvbnRyb2xsZXIgZ2V0U2VsZWN0aW9uRm9yV29yZEF0UG9pbnQ6cG9pbnRJblZpZXddOwpA
QCAtMTQyMiw3ICsxOTA0LDcgQEAgU3RyaW5nIFBERlBsdWdpbjo6Z2V0U2VsZWN0aW9uRm9yV29y
ZEF0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgcmV0dXJuIFtzZWxl
Y3Rpb25Gb3JXb3JkIHN0cmluZ107CiB9CiAKLWJvb2wgUERGUGx1Z2luOjpleGlzdGluZ1NlbGVj
dGlvbkNvbnRhaW5zUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb25JblZpZXdDb29yZGlu
YXRlcykgY29uc3QKK2Jvb2wgUERGUGx1Z2luOjpleGlzdGluZ1NlbGVjdGlvbkNvbnRhaW5zUG9p
bnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYXRpb25JblZpZXdDb29yZGluYXRlcykg
Y29uc3QKIHsKICAgICBQREZTZWxlY3Rpb24gKmN1cnJlbnRTZWxlY3Rpb24gPSBbbV9wZGZMYXll
ckNvbnRyb2xsZXIgY3VycmVudFNlbGVjdGlvbl07CiAgICAgaWYgKCFjdXJyZW50U2VsZWN0aW9u
KQpAQCAtMTQ1NSw4ICsxOTM3LDcgQEAgYm9vbCBQREZQbHVnaW46OmV4aXN0aW5nU2VsZWN0aW9u
Q29udGFpbnNQb2ludChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbkluVmlld0MKIHN0YXRpYyBO
U1BvaW50IHBvaW50SW5MYXlvdXRTcGFjZUZvclBvaW50SW5XaW5kb3dTcGFjZShQREZMYXllckNv
bnRyb2xsZXIqIHBkZkxheWVyQ29udHJvbGxlciwgTlNQb2ludCBwb2ludEluVmlldykKIHsKICAg
ICBDR1BvaW50IHBvaW50ID0gTlNQb2ludFRvQ0dQb2ludChwb2ludEluVmlldyk7Ci0KLSAgICBD
R1BvaW50IHNjcm9sbE9mZnNldCA9IENHUG9pbnRaZXJvOworICAgIENHUG9pbnQgc2Nyb2xsT2Zm
c2V0ID0gW3BkZkxheWVyQ29udHJvbGxlciBzY3JvbGxQb3NpdGlvbl07CiAgICAgQ0dGbG9hdCBz
Y2FsZUZhY3RvciA9IFtwZGZMYXllckNvbnRyb2xsZXIgY29udGVudFNjYWxlRmFjdG9yXTsKIAog
ICAgIHNjcm9sbE9mZnNldC55ID0gW3BkZkxheWVyQ29udHJvbGxlciBjb250ZW50U2l6ZVJlc3Bl
Y3Rpbmdab29tXS5oZWlnaHQgLSBOU1JlY3RUb0NHUmVjdChbcGRmTGF5ZXJDb250cm9sbGVyIGZy
YW1lXSkuc2l6ZS5oZWlnaHQgLSBzY3JvbGxPZmZzZXQueTsKQEAgLTE0NjcsNyArMTk0OCw3IEBA
IHN0YXRpYyBOU1BvaW50IHBvaW50SW5MYXlvdXRTcGFjZUZvclBvaW50SW5XaW5kb3dTcGFjZShQ
REZMYXllckNvbnRyb2xsZXIqIHBkZkxhCiAgICAgcmV0dXJuIE5TUG9pbnRGcm9tQ0dQb2ludChu
ZXdQb2ludCk7CiB9CiAKLVN0cmluZyBQREZQbHVnaW46Omxvb2t1cFRleHRBdExvY2F0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMsIFdlYkhpdFRlc3RSZXN1
bHREYXRhJiBkYXRhLCBQREZTZWxlY3Rpb24gKipzZWxlY3Rpb25QdHIsIE5TRGljdGlvbmFyeSAq
Km9wdGlvbnMpIGNvbnN0CitTdHJpbmcgUERGUGx1Z2luOjpsb29rdXBUZXh0QXRMb2NhdGlvbihj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhdGlvbkluVmlld0Nvb3JkaW5hdGVzLCBXZWJI
aXRUZXN0UmVzdWx0RGF0YSYgZGF0YSwgUERGU2VsZWN0aW9uICoqc2VsZWN0aW9uUHRyLCBOU0Rp
Y3Rpb25hcnkgKipvcHRpb25zKSBjb25zdAogewogICAgIFBERlNlbGVjdGlvbiomIHNlbGVjdGlv
biA9ICpzZWxlY3Rpb25QdHI7CiAKQEAgLTE0OTMsOCArMTk3NCwxMSBAQCBTdHJpbmcgUERGUGx1
Z2luOjpsb29rdXBUZXh0QXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbkluVmll
d0Nvb3JkaW5hdAogICAgICAgICBOU1JlY3QgYm91bmRzID0gYW5ub3RhdGlvbi5ib3VuZHM7CiAg
ICAgICAgIGlmICghTlNQb2ludEluUmVjdChwb2ludEluUGFnZVNwYWNlLCBib3VuZHMpKQogICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAorCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNs
YXJhdGlvbnMiCiAgICAgICAgIFBERkFubm90YXRpb25MaW5rICpsaW5rQW5ub3RhdGlvbiA9IChQ
REZBbm5vdGF0aW9uTGluayAqKWFubm90YXRpb247CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCiAgICAgICAgIE5TVVJMICp1cmwgPSBsaW5rQW5ub3RhdGlvbi5VUkw7CiAgICAgICAgIGlm
ICghdXJsKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xNTE2LDcgKzIwMDAsNyBAQCBzdGF0
aWMgTlNSZWN0IHJlY3RJblZpZXdTcGFjZUZvclJlY3RJbkxheW91dFNwYWNlKFBERkxheWVyQ29u
dHJvbGxlciogcGRmTGF5ZXJDbwogewogICAgIENHUmVjdCBuZXdSZWN0ID0gTlNSZWN0VG9DR1Jl
Y3QobGF5b3V0U3BhY2VSZWN0KTsKICAgICBDR0Zsb2F0IHNjYWxlRmFjdG9yID0gcGRmTGF5ZXJD
b250cm9sbGVyLmNvbnRlbnRTY2FsZUZhY3RvcjsKLSAgICBDR1BvaW50IHNjcm9sbE9mZnNldCA9
IENHUG9pbnRaZXJvOworICAgIENHUG9pbnQgc2Nyb2xsT2Zmc2V0ID0gcGRmTGF5ZXJDb250cm9s
bGVyLnNjcm9sbFBvc2l0aW9uOwogCiAgICAgc2Nyb2xsT2Zmc2V0LnkgPSBwZGZMYXllckNvbnRy
b2xsZXIuY29udGVudFNpemVSZXNwZWN0aW5nWm9vbS5oZWlnaHQgLSBOU1JlY3RUb0NHUmVjdChw
ZGZMYXllckNvbnRyb2xsZXIuZnJhbWUpLnNpemUuaGVpZ2h0IC0gc2Nyb2xsT2Zmc2V0Lnk7CiAK
QEAgLTE1MzEsNyArMjAxNSw3IEBAIHN0YXRpYyBOU1JlY3QgcmVjdEluVmlld1NwYWNlRm9yUmVj
dEluTGF5b3V0U3BhY2UoUERGTGF5ZXJDb250cm9sbGVyKiBwZGZMYXllckNvCiAgICAgcmV0dXJu
IE5TUmVjdEZyb21DR1JlY3QobmV3UmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBQREZQbHVnaW46OnJl
Y3RGb3JTZWxlY3Rpb25JblJvb3RWaWV3KFBERlNlbGVjdGlvbiAqc2VsZWN0aW9uKSBjb25zdAor
V2ViQ29yZTo6RmxvYXRSZWN0IFBERlBsdWdpbjo6cmVjdEZvclNlbGVjdGlvbkluUm9vdFZpZXco
UERGU2VsZWN0aW9uICpzZWxlY3Rpb24pIGNvbnN0CiB7CiAgICAgUERGUGFnZSAqY3VycmVudFBh
Z2UgPSBuaWw7CiAgICAgTlNBcnJheSogcGFnZXMgPSBzZWxlY3Rpb24ucGFnZXM7CkBAIC0xNTQ3
LDcgKzIwMzEsMTIgQEAgRmxvYXRSZWN0IFBERlBsdWdpbjo6cmVjdEZvclNlbGVjdGlvbkluUm9v
dFZpZXcoUERGU2VsZWN0aW9uICpzZWxlY3Rpb24pIGNvbnN0CiAKICAgICByZWN0SW5WaWV3Lm9y
aWdpbiA9IGNvbnZlcnRGcm9tUERGVmlld1RvUm9vdFZpZXcoSW50UG9pbnQocmVjdEluVmlldy5v
cmlnaW4pKTsKIAotICAgIHJldHVybiBGbG9hdFJlY3QocmVjdEluVmlldyk7CisgICAgcmV0dXJu
IFdlYkNvcmU6OkZsb2F0UmVjdChyZWN0SW5WaWV3KTsKK30KKworQ0dGbG9hdCBQREZQbHVnaW46
OnNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fcGRmTGF5ZXJDb250cm9sbGVy
IGNvbnRlbnRTY2FsZUZhY3Rvcl07CiB9CiAKIHZvaWQgUERGUGx1Z2luOjpwZXJmb3JtV2ViU2Vh
cmNoKE5TU3RyaW5nICpzdHJpbmcpCkBAIC0xNTYwLDIwMiArMjA0OSw2MyBAQCB2b2lkIFBERlBs
dWdpbjo6cGVyZm9ybVNwb3RsaWdodFNlYXJjaChOU1N0cmluZyAqc3RyaW5nKQogICAgIHdlYkZy
YW1lKCktPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWFyY2hXaXRoU3Bv
dGxpZ2h0KHN0cmluZykpOwogfQogCi1OU0RhdGEgKlBERlBsdWdpbjo6bGl2ZURhdGEoKSBjb25z
dAorYm9vbCBQREZQbHVnaW46OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYg
ZXZlbnQpCiB7Ci0gICAgaWYgKG1fYWN0aXZlQW5ub3RhdGlvbikKLSAgICAgICAgbV9hY3RpdmVB
bm5vdGF0aW9uLT5jb21taXQoKTsKLQotICAgIC8vIFNhdmUgZGF0YSBzdHJhaWdodCBmcm9tIHRo
ZSByZXNvdXJjZSBpbnN0ZWFkIG9mIFBERktpdCBpZiB0aGUgZG9jdW1lbnQgaXMKLSAgICAvLyB1
bnRvdWNoZWQgYnkgdGhlIHVzZXIsIHNvIHRoYXQgUERGcyB3aGljaCBQREZLaXQgY2FuJ3QgZGlz
cGxheSB3aWxsIHN0aWxsIGJlIGRvd25sb2FkYWJsZS4KLSAgICBpZiAobV9wZGZEb2N1bWVudFdh
c011dGF0ZWQpCi0gICAgICAgIHJldHVybiBbbV9wZGZEb2N1bWVudCBkYXRhUmVwcmVzZW50YXRp
b25dOwotICAgIAotICAgIHJldHVybiByYXdEYXRhKCk7Ci19CisgICAgUERGRGlzcGxheU1vZGUg
ZGlzcGxheU1vZGUgPSBbbV9wZGZMYXllckNvbnRyb2xsZXIgZGlzcGxheU1vZGVdOwogCi1OU09i
amVjdCAqUERGUGx1Z2luOjphY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9hY2Nlc3NpYmlsaXR5T2JqZWN0LmdldCgpOwotfQorICAgIGlmIChkaXNwbGF5TW9kZSA9
PSBrUERGRGlzcGxheVNpbmdsZVBhZ2VDb250aW51b3VzIHx8IGRpc3BsYXlNb2RlID09IGtQREZE
aXNwbGF5VHdvVXBDb250aW51b3VzKQorICAgICAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6Omhh
bmRsZVdoZWVsRXZlbnQocGxhdGZvcm0oZXZlbnQpKTsKIAotdm9pZCBQREZQbHVnaW46OnNjcm9s
bFRvUG9pbnQoSW50UG9pbnQgc2Nyb2xsUG9pbnQpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gcGx1
Z2luVmlldygpLT5mcmFtZSgpOwotICAgIGZsb2F0IHNjYWxlID0gZnJhbWUtPnBhZ2UoKS0+cGFn
ZVNjYWxlRmFjdG9yKCk7Ci0gICAgc2Nyb2xsUG9pbnQuc2NhbGUoc2NhbGUpOwotICAgIGZyYW1l
LT52aWV3KCktPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihzY3JvbGxQb2ludCk7Ci19
Ci0KLWZsb2F0IFBERlBsdWdpbjo6c2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIEZyYW1lKiBm
cmFtZSA9IHBsdWdpblZpZXcoKS0+ZnJhbWUoKTsKLSAgICByZXR1cm4gZnJhbWUtPnBhZ2UoKS0+
cGFnZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQgUERGUGx1Z2luOjp6b29tSW4oKQotewotICAg
IGlmICh3ZWJGcmFtZSgpLT5pc01haW5GcmFtZSgpICYmIGlzRnVsbEZyYW1lUGx1Z2luKCkpIHsK
LSAgICAgICAgV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lKCktPnBhZ2UoKTsKLSAgICAgICAgcGFn
ZS0+c2NhbGVQYWdlKHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpICogem9vbUJ1dHRvblNjYWxlTXVs
dGlwbGllciwgSW50UG9pbnQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW21fcGRmTGF5ZXJD
b250cm9sbGVyIHNldENvbnRlbnRTY2FsZUZhY3RvcjpbbV9wZGZMYXllckNvbnRyb2xsZXIgY29u
dGVudFNjYWxlRmFjdG9yXSAqIHpvb21CdXR0b25TY2FsZU11bHRpcGxpZXJdOwotICAgICAgICBj
YWxjdWxhdGVTaXplcygpOwotICAgIH0KLX0KLQotdm9pZCBQREZQbHVnaW46Onpvb21PdXQoKQot
ewotICAgIGlmICh3ZWJGcmFtZSgpLT5pc01haW5GcmFtZSgpICYmIGlzRnVsbEZyYW1lUGx1Z2lu
KCkpIHsKLSAgICAgICAgV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lKCktPnBhZ2UoKTsKLSAgICAg
ICAgcGFnZS0+c2NhbGVQYWdlKHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpIC8gem9vbUJ1dHRvblNj
YWxlTXVsdGlwbGllciwgSW50UG9pbnQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW21fcGRm
TGF5ZXJDb250cm9sbGVyIHNldENvbnRlbnRTY2FsZUZhY3RvcjpbbV9wZGZMYXllckNvbnRyb2xs
ZXIgY29udGVudFNjYWxlRmFjdG9yXSAvIHpvb21CdXR0b25TY2FsZU11bHRpcGxpZXJdOwotICAg
ICAgICBjYWxjdWxhdGVTaXplcygpOwotICAgIH0KLX0KLQotUERGUGx1Z2luOjpIVUQ6OkhVRChQ
REZQbHVnaW4mIHBsdWdpbikKLSAgICA6IG1fb3ZlcmxheShQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0
aGlzKSkKLSAgICAsIG1fcGx1Z2luKHBsdWdpbikKLXsKLSAgICBXZWJGcmFtZSogd2ViRnJhbWUg
PSBwbHVnaW4ud2ViRnJhbWUoKTsKLQotICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHRoZSBvdmVy
bGF5IGxhZ2dpbmcgYmVoaW5kIG1haW4tZnJhbWUgc2Nyb2xsaW5nLCB3ZSBuZWVkCi0gICAgLy8g
dG8gZm9yY2Ugc3luY2hyb25vdXMgc2Nyb2xsaW5nIGZvciB0aGUgd2hvbGUgcGFnZSBpZiB3ZSBo
YXZlIGEgSFVEIGluIGEgc3ViZnJhbWUgUERGLgotICAgIG1fb3ZlcmxheS0+c2V0TmVlZHNTeW5j
aHJvbm91c1Njcm9sbGluZyghd2ViRnJhbWUtPmlzTWFpbkZyYW1lKCkpOwotCi0gICAgTWFpbkZy
YW1lJiBtYWluRnJhbWUgPSB3ZWJGcmFtZS0+Y29yZUZyYW1lKCktPm1haW5GcmFtZSgpOwotICAg
IG1haW5GcmFtZS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkobV9v
dmVybGF5LnB0cigpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0gICAgbV9v
dmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKLQotICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+
IHBsYXRmb3JtQ0FMYXllciA9IGRvd25jYXN0PEdyYXBoaWNzTGF5ZXJDQT4obV9vdmVybGF5LT5s
YXllcigpKS5wbGF0Zm9ybUNBTGF5ZXIoKTsKLSAgICBwbGF0Zm9ybUNBTGF5ZXItPnNldE9wYWNp
dHkoMCk7Ci19Ci0KLVBERlBsdWdpbjo6SFVEOjp+SFVEKCkKLXsKLSAgICBNYWluRnJhbWUmIG1h
aW5GcmFtZSA9IG1fcGx1Z2luLndlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT5tYWluRnJhbWUoKTsK
LSAgICBtYWluRnJhbWUucGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJs
YXkobV9vdmVybGF5LnB0cigpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci19
Ci0KLXZvaWQgUERGUGx1Z2luOjpIVUQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFn
ZSogcGFnZSkKLXsKLX0KLQotdm9pZCBQREZQbHVnaW46OkhVRDo6ZGlkTW92ZVRvUGFnZShQYWdl
T3ZlcmxheSYsIFBhZ2UqKQotewotfQotCi1JbnRSZWN0IFBERlBsdWdpbjo6SFVEOjpmcmFtZUlu
Um9vdFZpZXcoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgY29tZSBmcm9t
IFBERktpdC4KLSAgICBjb25zdCBpbnQgSFVEV2lkdGggPSAyMzY7Ci0gICAgY29uc3QgaW50IEhV
REhlaWdodCA9IDcyOwotICAgIGNvbnN0IGludCBIVURZT2Zmc2V0ID0gNTA7Ci0KLSAgICBGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IG1fcGx1Z2luLndlYkZyYW1lKCktPmNvcmVGcmFtZSgpLT52aWV3
KCk7Ci0gICAgSW50UmVjdCBmcmFtZVJlY3RJblJvb3RWaWV3ID0gZnJhbWVWaWV3LT5jb252ZXJ0
VG9Sb290VmlldyhmcmFtZVZpZXctPmJvdW5kc1JlY3QoKSk7Ci0gICAgRmxvYXRSZWN0IEhVRFJl
Y3QoZnJhbWVSZWN0SW5Sb290Vmlldy54KCkgKyAoZnJhbWVSZWN0SW5Sb290Vmlldy53aWR0aCgp
IC8gMiAtIChIVURXaWR0aCAvIDIpKSwgZnJhbWVSZWN0SW5Sb290Vmlldy55KCkgKyAoZnJhbWVS
ZWN0SW5Sb290Vmlldy5oZWlnaHQoKSAtIEhVRFlPZmZzZXQgLSBIVURIZWlnaHQpLCBIVURXaWR0
aCwgSFVESGVpZ2h0KTsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChIVURSZWN0KTsKLX0K
KyAgICBOU1VJbnRlZ2VyIGN1cnJlbnRQYWdlSW5kZXggPSBbbV9wZGZMYXllckNvbnRyb2xsZXIg
Y3VycmVudFBhZ2VJbmRleF07CisgICAgYm9vbCBpbkZpcnN0UGFnZSA9ICFjdXJyZW50UGFnZUlu
ZGV4OworICAgIGJvb2wgaW5MYXN0UGFnZSA9IFttX3BkZkxheWVyQ29udHJvbGxlciBsYXN0UGFn
ZUluZGV4XSA9PSBjdXJyZW50UGFnZUluZGV4OwogCi1ib29sIFBERlBsdWdpbjo6SFVEOjpjb250
YWluc1BvaW50SW5Sb290VmlldyhJbnRQb2ludCBwb2ludCkKLXsKLSAgICBpZiAobV9wbHVnaW4u
aXNMb2NrZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgYXRTY3JvbGxUb3Ag
PSAhc2Nyb2xsUG9zaXRpb24oKS55KCk7CisgICAgYm9vbCBhdFNjcm9sbEJvdHRvbSA9IHNjcm9s
bFBvc2l0aW9uKCkueSgpID09IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKTsKIAotICAgIHJl
dHVybiBmcmFtZUluUm9vdFZpZXcoKS5jb250YWlucyhwb2ludCk7Ci19CisgICAgYm9vbCBpbk1v
bWVudHVtU2Nyb2xsID0gZXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFdlYldoZWVsRXZlbnQ6OlBo
YXNlTm9uZTsKIAotdm9pZCBQREZQbHVnaW46OkhVRDo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAg
ICBJbnRSZWN0IGZyYW1lSW5Sb290VmlldyA9IHRoaXMtPmZyYW1lSW5Sb290VmlldygpOworICAg
IGludCBzY3JvbGxNYWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IGRlZmF1bHRTY3JvbGxN
YWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcDsKIAotICAgIGNvbnRleHQudHJhbnNsYXRlKElu
dFNpemUoZnJhbWVJblJvb3RWaWV3LngoKSwgZnJhbWVJblJvb3RWaWV3LnkoKSArIGZyYW1lSW5S
b290Vmlldy5oZWlnaHQoKSkpOwotICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7
CisgICAgLy8gSW1wcmVjaXNlIGlucHV0IGRldmljZXMgc2hvdWxkIGhhdmUgYSBsb3dlciB0aHJl
c2hvbGQgc28gdGhhdCAiY2xpY2t5IiBzY3JvbGwgd2hlZWxzIGNhbiBmbGlwIHBhZ2VzLgorICAg
IGlmICghZXZlbnQuaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpKQorICAgICAgICBzY3JvbGxN
YWduaXR1ZGVUaHJlc2hvbGRGb3JQYWdlRmxpcCA9IDA7CiAKLSAgICBJbnRSZWN0IGxvY2FsUmVj
dChJbnRQb2ludCgpLCBmcmFtZUluUm9vdFZpZXcuc2l6ZSgpKTsKLSAgICBjb250ZXh0LmNsaXAo
bG9jYWxSZWN0KTsKKyAgICBpZiAoYXRTY3JvbGxCb3R0b20gJiYgIWluTGFzdFBhZ2UgJiYgZXZl
bnQuZGVsdGEoKS5oZWlnaHQoKSA8IDApIHsKKyAgICAgICAgaWYgKGV2ZW50LmRlbHRhKCkuaGVp
Z2h0KCkgPD0gLXNjcm9sbE1hZ25pdHVkZVRocmVzaG9sZEZvclBhZ2VGbGlwICYmICFpbk1vbWVu
dHVtU2Nyb2xsKQorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyIGdvdG9OZXh0UGFn
ZV07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAgIFttX3BsdWdpbi5wZGZMYXll
ckNvbnRyb2xsZXIoKSBkcmF3SFVESW5Db250ZXh0OmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCld
OwotfQorICAgIGlmIChhdFNjcm9sbFRvcCAmJiAhaW5GaXJzdFBhZ2UgJiYgZXZlbnQuZGVsdGEo
KS5oZWlnaHQoKSA+IDApIHsKKyAgICAgICAgaWYgKGV2ZW50LmRlbHRhKCkuaGVpZ2h0KCkgPj0g
c2Nyb2xsTWFnbml0dWRlVGhyZXNob2xkRm9yUGFnZUZsaXAgJiYgIWluTW9tZW50dW1TY3JvbGwp
IHsKKyAgICAgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICAgICAgICAgIFttX3Bk
ZkxheWVyQ29udHJvbGxlciBnb3RvUHJldmlvdXNQYWdlXTsKKyAgICAgICAgICAgIHNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAg
ICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KIAotdm9pZCBQREZQbHVnaW46OkhVRDo6aW52YWxpZGF0ZSgpCi17Ci0gICAg
bV9vdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6
OmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm0oZXZlbnQpKTsKIH0KIAotdm9pZCBQREZQbHVnaW46
OkhVRDo6c2V0VmlzaWJsZShib29sIHZpc2libGUsIEFuaW1hdGVWaXNpYmlsaXR5VHJhbnNpdGlv
biBhbmltYXRlVHJhbnNpdGlvbikKK05TRGF0YSAqUERGUGx1Z2luOjpsaXZlRGF0YSgpIGNvbnN0
CiB7Ci0gICAgaWYgKHZpc2libGUgPT0gbV92aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3Zpc2libGUgPSB2aXNpYmxlOwotCi0gICAgZmxvYXQgdG9WYWx1ZSA9IG1fdmlzaWJsZSA/
IDAuNzUgOiAwOwotICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IHBsYXRmb3JtQ0FMYXllciA9
IGRvd25jYXN0PEdyYXBoaWNzTGF5ZXJDQT4obV9vdmVybGF5LT5sYXllcigpKS5wbGF0Zm9ybUNB
TGF5ZXIoKTsKLQotICAgIGlmIChhbmltYXRlVHJhbnNpdGlvbiA9PSBBbmltYXRlVmlzaWJpbGl0
eVRyYW5zaXRpb246Ok5vKSB7Ci0gICAgICAgIHBsYXRmb3JtQ0FMYXllci0+cmVtb3ZlQW5pbWF0
aW9uRm9yS2V5KCJIVURGYWRlIik7Ci0gICAgICAgIHBsYXRmb3JtQ0FMYXllci0+c2V0T3BhY2l0
eSh0b1ZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZsb2F0IGR1cmF0aW9u
ID0gbV92aXNpYmxlID8gMC4yNSA6IDAuNTsKLQotICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0
aW9uPiBmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBh
dGg6QCJvcGFjaXR5Il07Ci0gICAgW2ZhZGVBbmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25d
OwotICAgIFtmYWRlQW5pbWF0aW9uIHNldFRpbWluZ0Z1bmN0aW9uOltDQU1lZGlhVGltaW5nRnVu
Y3Rpb24gZnVuY3Rpb25XaXRoTmFtZTprQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uRWFzZUluRWFzZU91
dF1dOwotICAgIFtmYWRlQW5pbWF0aW9uIHNldERlbGVnYXRlOltbW1dLUERGSFVEQW5pbWF0aW9u
RGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoQW5pbWF0aW9uQ29tcGxldGlvbkhhbmRsZXI6W3BsYXRm
b3JtQ0FMYXllciwgdG9WYWx1ZV0gKGJvb2wgY29tcGxldGVkKSB7Ci0gICAgICAgIGlmIChjb21w
bGV0ZWQpCi0gICAgICAgICAgICBwbGF0Zm9ybUNBTGF5ZXItPnNldE9wYWNpdHkodG9WYWx1ZSk7
Ci0KLSAgICB9XSBhdXRvcmVsZWFzZV1dOwotICAgIFtmYWRlQW5pbWF0aW9uIHNldEZyb21WYWx1
ZTpAKCgoQ0FMYXllciAqKXBsYXRmb3JtQ0FMYXllci0+cGxhdGZvcm1MYXllcigpLnByZXNlbnRh
dGlvbkxheWVyKS5vcGFjaXR5KV07Ci0gICAgW2ZhZGVBbmltYXRpb24gc2V0VG9WYWx1ZTpAKHRv
VmFsdWUpXTsKKyAgICBpZiAobV9hY3RpdmVBbm5vdGF0aW9uKQorICAgICAgICBtX2FjdGl2ZUFu
bm90YXRpb24tPmNvbW1pdCgpOwogCi0gICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFu
aW1hdGlvbiA9IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y3JlYXRlKGZhZGVBbmltYXRpb24u
Z2V0KCkpOwotICAgIHBsYXRmb3JtQ0FMYXllci0+cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KCJIVURG
YWRlIik7Ci0gICAgcGxhdGZvcm1DQUxheWVyLT5hZGRBbmltYXRpb25Gb3JLZXkoIkhVREZhZGUi
LCAqYW5pbWF0aW9uKTsKKyAgICAvLyBTYXZlIGRhdGEgc3RyYWlnaHQgZnJvbSB0aGUgcmVzb3Vy
Y2UgaW5zdGVhZCBvZiBQREZLaXQgaWYgdGhlIGRvY3VtZW50IGlzCisgICAgLy8gdW50b3VjaGVk
IGJ5IHRoZSB1c2VyLCBzbyB0aGF0IFBERnMgd2hpY2ggUERGS2l0IGNhbid0IGRpc3BsYXkgd2ls
bCBzdGlsbCBiZSBkb3dubG9hZGFibGUuCisgICAgaWYgKG1fcGRmRG9jdW1lbnRXYXNNdXRhdGVk
KQorICAgICAgICByZXR1cm4gW21fcGRmRG9jdW1lbnQgZGF0YVJlcHJlc2VudGF0aW9uXTsKKyAg
ICAKKyAgICByZXR1cm4gcmF3RGF0YSgpOwogfQogCi1ib29sIFBERlBsdWdpbjo6SFVEOjptb3Vz
ZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKK05T
T2JqZWN0ICpQREZQbHVnaW46OmFjY2Vzc2liaWxpdHlPYmplY3QoKSBjb25zdAogewotICAgIGlm
IChtX3BsdWdpbi5pc0xvY2tlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBX
ZSBkb24ndCB3YW50IHRoZSBIVUQgdG8gYXBwZWFyIHdoZW4gZHJhZ2dpbmcgcGFzdCBpdCwgb3Ig
ZGlzYXBwZWFyIHdoZW4gZHJhZ2dpbmcgZnJvbSBhIGJ1dHRvbiwKLSAgICAvLyBzbyBkb24ndCB1
cGRhdGUgdmlzaWJpbGl0eSB3aGlsZSBhbnkgbW91c2UgYnV0dG9ucyBhcmUgcHJlc3NlZC4KLSAg
ICBpZiAoZXZlbnQuYnV0dG9uKCkgPT0gTW91c2VCdXR0b246Ok5vQnV0dG9uKQotICAgICAgICBz
ZXRWaXNpYmxlKGNvbnRhaW5zUG9pbnRJblJvb3RWaWV3KGV2ZW50LnBvc2l0aW9uKCkpLCBBbmlt
YXRlVmlzaWJpbGl0eVRyYW5zaXRpb246Olllcyk7Ci0KLSAgICBpZiAoIW1fdmlzaWJsZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IE1vdXNlQnV0
dG9uOjpMZWZ0QnV0dG9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRQb2ludCBw
b3NpdGlvbkluUm9vdFZpZXdDb29yZGluYXRlcyhldmVudC5wb3NpdGlvbigpKTsKLSAgICBJbnRS
ZWN0IEhVRFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZUluUm9vdFZpZXcoKTsKLQot
ICAgIGF1dG8gZXZlbnRXaXRoVHlwZSA9IFsmXShOU0V2ZW50VHlwZSBldmVudFR5cGUpIC0+IE5T
RXZlbnQgKiB7Ci0gICAgICAgIHJldHVybiBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6ZXZl
bnRUeXBlIGxvY2F0aW9uOnBvc2l0aW9uSW5Sb290Vmlld0Nvb3JkaW5hdGVzIG1vZGlmaWVyRmxh
Z3M6MCB0aW1lc3RhbXA6MCB3aW5kb3dOdW1iZXI6MCBjb250ZXh0Om5pbCBldmVudE51bWJlcjow
IGNsaWNrQ291bnQ6ZXZlbnQuY2xpY2tDb3VudCgpIHByZXNzdXJlOjBdOwotICAgIH07Ci0KLSAg
ICBhdXRvIHBkZkxheWVyQ29udHJvbGxlciA9IG1fcGx1Z2luLnBkZkxheWVyQ29udHJvbGxlcigp
OwotCi0gICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLSAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6
Ok1vdXNlTW92ZWQ6Ci0gICAgICAgIHJldHVybiBbcGRmTGF5ZXJDb250cm9sbGVyIG1vdXNlRHJh
Z2dlZDpldmVudFdpdGhUeXBlKE5TRXZlbnRUeXBlTGVmdE1vdXNlRHJhZ2dlZCkgaW5IVURXaXRo
Qm91bmRzOkhVRFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXNdOwotICAgIGNhc2UgUGxhdGZvcm1F
dmVudDo6TW91c2VQcmVzc2VkOgotICAgICAgICByZXR1cm4gW3BkZkxheWVyQ29udHJvbGxlciBt
b3VzZURvd246ZXZlbnRXaXRoVHlwZShOU0V2ZW50VHlwZUxlZnRNb3VzZURvd24pIGluSFVEV2l0
aEJvdW5kczpIVURSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzXTsKLSAgICBjYXNlIFBsYXRmb3Jt
RXZlbnQ6Ok1vdXNlUmVsZWFzZWQ6Ci0gICAgICAgIHJldHVybiBbcGRmTGF5ZXJDb250cm9sbGVy
IG1vdXNlVXA6ZXZlbnRXaXRoVHlwZShOU0V2ZW50VHlwZUxlZnRNb3VzZVVwKSBpbkhVRFdpdGhC
b3VuZHM6SFVEUmVjdEluUm9vdFZpZXdDb29yZGluYXRlc107Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2FjY2Vz
c2liaWxpdHlPYmplY3QuZ2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW5Bbm5v
dGF0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW5Bbm5vdGF0aW9uLm1tCmluZGV4IGE3MzIwMzM3MDRkMGE5YjBiNDZjZWFlODA4ZTkwMWRlMDM3
MTFmY2YuLjgzODc0M2ZjNWU2NjlmODRiMGFlZDhjN2MzOGY1YjFmODk2NGFkYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luQW5ub3Rh
dGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbkFubm90YXRpb24ubW0KQEAgLTEwNCwxNCArMTA0LDkgQEAgdm9pZCBQREZQbHVnaW5Bbm5v
dGF0aW9uOjp1cGRhdGVHZW9tZXRyeSgpCiAgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVu
dCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KCkpOwogICAgIHN0eWxlZEVs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgYW5ub3RhdGlv
blJlY3Quc2l6ZS53aWR0aCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgc3R5bGVk
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgYW5ub3Rh
dGlvblJlY3Quc2l6ZS5oZWlnaHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwotI2lmICFV
U0UoREVQUkVDQVRFRF9QREZfUExVR0lOKQotICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBhbm5vdGF0aW9uUmVjdC5vcmlnaW4ueCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgZG9jdW1lbnRTaXplLmhlaWdodCgpIC0gYW5ub3Rh
dGlvblJlY3Qub3JpZ2luLnkgLSBhbm5vdGF0aW9uUmVjdC5zaXplLmhlaWdodCwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QWCk7Ci0jZWxzZQogICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uKG1f
cGRmTGF5ZXJDb250cm9sbGVyLnNjcm9sbFBvc2l0aW9uKTsKICAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgYW5ub3RhdGlvblJlY3Qub3Jp
Z2luLnggLSBzY3JvbGxQb3NpdGlvbi54KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwog
ICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3As
IGRvY3VtZW50U2l6ZS5oZWlnaHQoKSAtIGFubm90YXRpb25SZWN0Lm9yaWdpbi55IC0gYW5ub3Rh
dGlvblJlY3Quc2l6ZS5oZWlnaHQgLSBzY3JvbGxQb3NpdGlvbi55KCksIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFgpOwotI2VuZGlmCiB9CiAKIGJvb2wgUERGUGx1Z2luQW5ub3RhdGlvbjo6aGFu
ZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>