<?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>223551</bug_id>
          
          <creation_ts>2021-03-19 23:24:30 -0700</creation_ts>
          <short_desc>Web Inspector: rename WebInspectorProxy to WebInspectorUIProxy</short_desc>
          <delta_ts>2021-05-18 14:23:52 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>bburg</cc>
    
    <cc>berto</cc>
    
    <cc>cgarcia</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>mkwst</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1741992</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-03-19 23:24:30 -0700</bug_when>
    <thetext>This has bugged me for so long. Might as well fix it.

This makes the -Proxy class have the same prefix as the non-Proxy class.


WebInspectorUI is in WebProcess.
WebInspectorUIProxy is in UIProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741993</commentid>
    <comment_count>1</comment_count>
      <attachid>423804</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-03-19 23:43:24 -0700</bug_when>
    <thetext>Created attachment 423804
Patch v1.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742193</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-03-22 04:48:16 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742194</commentid>
    <comment_count>3</comment_count>
      <attachid>423804</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-03-22 04:54:19 -0700</bug_when>
    <thetext>Comment on attachment 423804
Patch v1.0

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

&gt; Source/WebCore/platform/gtk/po/ar.po:1797
&gt; +#: ../../../WebKit2/UIProcess/gtk/WebInspectorUIProxyGtk.cpp:93
&gt; +#: ../../../WebKit2/UIProcess/gtk/WebInspectorUIProxyGtk.cpp:153

Don&apos;t worry about these, they don&apos;t even exist. They are old comments. Normally, only POTFILES.in needs to be updated, but WebInspectorProxyGtk.cpp doesn&apos;t have translatable strings anymore, so it&apos;s not even listed in POTFILES.in</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742283</commentid>
    <comment_count>4</comment_count>
      <attachid>423804</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-03-22 10:34:50 -0700</bug_when>
    <thetext>Comment on attachment 423804
Patch v1.0

Retrying failed GTK EWS builders. I suspect they need a clean build, because Windows is compiling just fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742284</commentid>
    <comment_count>5</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-03-22 10:35:15 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #3)
&gt; Comment on attachment 423804 [details]
&gt; Patch v1.0
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=423804&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/po/ar.po:1797
&gt; &gt; +#: ../../../WebKit2/UIProcess/gtk/WebInspectorUIProxyGtk.cpp:93
&gt; &gt; +#: ../../../WebKit2/UIProcess/gtk/WebInspectorUIProxyGtk.cpp:153
&gt; 
&gt; Don&apos;t worry about these, they don&apos;t even exist. They are old comments.
&gt; Normally, only POTFILES.in needs to be updated, but WebInspectorProxyGtk.cpp
&gt; doesn&apos;t have translatable strings anymore, so it&apos;s not even listed in
&gt; POTFILES.in

Heh, okay, I&apos;ll revert that part. Thanks for the info!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742364</commentid>
    <comment_count>6</comment_count>
      <attachid>423804</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2021-03-22 12:17:22 -0700</bug_when>
    <thetext>Comment on attachment 423804
Patch v1.0

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

&gt; Source/WebKit/DerivedSources-input.xcfilelist:107
&gt; -$(PROJECT_DIR)/UIProcess/Inspector/RemoteWebInspectorProxy.messages.in
&gt; -$(PROJECT_DIR)/UIProcess/Inspector/WebInspectorProxy.messages.in
&gt; +$(PROJECT_DIR)/UIProcess/Inspector/RemoteWebInspectorUIProxy.messages.in
&gt; +$(PROJECT_DIR)/UIProcess/Inspector/WebInspectorUIProxy.messages.in

I don&apos;t see a corresponding change to the CMakeLists.txt

https://github.com/WebKit/WebKit/blob/main/Source/WebKit/CMakeLists.txt#L205-L206</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742368</commentid>
    <comment_count>7</comment_count>
      <attachid>423918</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-03-22 12:22:01 -0700</bug_when>
    <thetext>Created attachment 423918
Patch v1.3 - for GTK EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742379</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-22 12:35:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/75703828&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742437</commentid>
    <comment_count>9</comment_count>
      <attachid>423930</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-03-22 13:32:14 -0700</bug_when>
    <thetext>Created attachment 423930
Patch v1.4 - for GTK/Win EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742527</commentid>
    <comment_count>10</comment_count>
      <attachid>423930</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-03-22 15:51:35 -0700</bug_when>
    <thetext>Comment on attachment 423930
Patch v1.4 - for GTK/Win EWS

rs=me, always wanted to do this :P

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

&gt;&gt;&gt; Source/WebCore/platform/gtk/po/ar.po:1797
&gt;&gt;&gt; +#: ../../../WebKit2/UIProcess/gtk/WebInspectorUIProxyGtk.cpp:153
&gt;&gt; 
&gt;&gt; Don&apos;t worry about these, they don&apos;t even exist. They are old comments. Normally, only POTFILES.in needs to be updated, but WebInspectorProxyGtk.cpp doesn&apos;t have translatable strings anymore, so it&apos;s not even listed in POTFILES.in
&gt; 
&gt; Heh, okay, I&apos;ll revert that part. Thanks for the info!

Can we remove these files then (or at least these parts of these files)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742552</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-22 16:26:07 -0700</bug_when>
    <thetext>Committed r274815: &lt;https://commits.webkit.org/r274815&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 423930.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742714</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-03-23 01:43:52 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #10)
&gt; Comment on attachment 423930 [details]
&gt; Patch v1.4 - for GTK/Win EWS
&gt; 
&gt; rs=me, always wanted to do this :P
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=423804&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/gtk/po/ar.po:1797
&gt; &gt;&gt;&gt; +#: ../../../WebKit2/UIProcess/gtk/WebInspectorUIProxyGtk.cpp:153
&gt; &gt;&gt; 
&gt; &gt;&gt; Don&apos;t worry about these, they don&apos;t even exist. They are old comments. Normally, only POTFILES.in needs to be updated, but WebInspectorProxyGtk.cpp doesn&apos;t have translatable strings anymore, so it&apos;s not even listed in POTFILES.in
&gt; &gt; 
&gt; &gt; Heh, okay, I&apos;ll revert that part. Thanks for the info!
&gt; 
&gt; Can we remove these files then (or at least these parts of these files)?

No, those are valid translation files. I think those comments are just hints to know where the translatable string come from in the code, but in practice it doesn&apos;t really matter if it&apos;s part of a different file, the translation will be done in any case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748234</commentid>
    <comment_count>13</comment_count>
      <attachid>423930</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-04-08 01:25:07 -0700</bug_when>
    <thetext>Comment on attachment 423930
Patch v1.4 - for GTK/Win EWS

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

&gt; Source/WebKit/UIProcess/API/C/mac/WKInspectorPrivateMac.h:44
&gt; -WK_EXPORT @interface WKWebInspectorProxyObjCAdapter : NSObject &lt;NSWindowDelegate&gt;
&gt; +WK_EXPORT @interface WKWebInspectorUIProxyObjCAdapter : NSObject &lt;NSWindowDelegate&gt;

I think we need to revert this change, since it breaks SafariForWebKitDevelopment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748313</commentid>
    <comment_count>14</comment_count>
      <attachid>423930</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-04-08 09:01:34 -0700</bug_when>
    <thetext>Comment on attachment 423930
Patch v1.4 - for GTK/Win EWS

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

&gt;&gt; Source/WebKit/UIProcess/API/C/mac/WKInspectorPrivateMac.h:44
&gt;&gt; +WK_EXPORT @interface WKWebInspectorUIProxyObjCAdapter : NSObject &lt;NSWindowDelegate&gt;
&gt; 
&gt; I think we need to revert this change, since it breaks SafariForWebKitDevelopment.

Alternative approach, define WKWebInspectorProxyObjCAdapter as a subclass of WKWebInpectorUIProxyObjCAdapter with nothing extra, and export it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748421</commentid>
    <comment_count>15</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-04-08 12:20:42 -0700</bug_when>
    <thetext>(In reply to BJ Burg from comment #14)
&gt; Comment on attachment 423930 [details]
&gt; Patch v1.4 - for GTK/Win EWS
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=423930&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/API/C/mac/WKInspectorPrivateMac.h:44
&gt; &gt;&gt; +WK_EXPORT @interface WKWebInspectorUIProxyObjCAdapter : NSObject &lt;NSWindowDelegate&gt;
&gt; &gt; 
&gt; &gt; I think we need to revert this change, since it breaks SafariForWebKitDevelopment.
&gt; 
&gt; Alternative approach, define WKWebInspectorProxyObjCAdapter as a subclass of
&gt; WKWebInpectorUIProxyObjCAdapter with nothing extra, and export it?

r=me :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761314</commentid>
    <comment_count>16</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-05-18 14:23:52 -0700</bug_when>
    <thetext>r277678</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423804</attachid>
            <date>2021-03-19 23:43:24 -0700</date>
            <delta_ts>2021-03-22 12:21:59 -0700</delta_ts>
            <desc>Patch v1.0</desc>
            <filename>bug-223551-20210319234323.patch</filename>
            <type>text/plain</type>
            <size>453877</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3Bv
L0NoYW5nZUxvZwppbmRleCAzZDE2MTY1MjdkZWMwMmQ5NWNiYmQzNzc4Mjc5NjBkMzFiNTlmYmY3
Li4zZWE0N2E0ZmFjZjA3YmI3OTcwZGE5ZGFjMWNiNWYwOTBmYTNiN2JjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAyMS0wMy0x
OSAgQkogQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBy
ZW5hbWUgV2ViSW5zcGVjdG9yUHJveHkgdG8gV2ViSW5zcGVjdG9yVUlQcm94eQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzNTUxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhci5wbzoKKyAgICAgICAg
KiBhcy5wbzoKKyAgICAgICAgKiBiZy5wbzoKKyAgICAgICAgKiBjYS5wbzoKKyAgICAgICAgKiBj
cy5wbzoKKyAgICAgICAgKiBlbC5wbzoKKyAgICAgICAgKiBlbl9DQS5wbzoKKyAgICAgICAgKiBl
bl9HQi5wbzoKKyAgICAgICAgKiBlby5wbzoKKyAgICAgICAgKiBldC5wbzoKKyAgICAgICAgKiBl
dS5wbzoKKyAgICAgICAgKiBmaS5wbzoKKyAgICAgICAgKiBnbC5wbzoKKyAgICAgICAgKiBndS5w
bzoKKyAgICAgICAgKiBoZS5wbzoKKyAgICAgICAgKiBoaS5wbzoKKyAgICAgICAgKiBodS5wbzoK
KyAgICAgICAgKiBqYS5wbzoKKyAgICAgICAgKiBrbi5wbzoKKyAgICAgICAgKiBrby5wbzoKKyAg
ICAgICAgKiBsdC5wbzoKKyAgICAgICAgKiBsdi5wbzoKKyAgICAgICAgKiBtbC5wbzoKKyAgICAg
ICAgKiBtci5wbzoKKyAgICAgICAgKiBuYi5wbzoKKyAgICAgICAgKiBubC5wbzoKKyAgICAgICAg
KiBvci5wbzoKKyAgICAgICAgKiBwYS5wbzoKKyAgICAgICAgKiBwdC5wbzoKKyAgICAgICAgKiBy
by5wbzoKKyAgICAgICAgKiBydS5wbzoKKyAgICAgICAgKiBzbC5wbzoKKyAgICAgICAgKiBzci5w
bzoKKyAgICAgICAgKiBzckBsYXRpbi5wbzoKKyAgICAgICAgKiB0YS5wbzoKKyAgICAgICAgKiB0
ZS5wbzoKKyAgICAgICAgKiB0ci5wbzoKKyAgICAgICAgKiB2aS5wbzoKKwogMjAyMS0wMy0xOCAg
UGlvdHIgRHLEhWcgIDxwaW90cmRyYWdAZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdW2wxMG5d
IFVwZGF0ZWQgUG9saXNoIHRyYW5zbGF0aW9uIG9mIFdlYktpdEdUSyBmb3IgMi4zMgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpp
bmRleCA4ZThhMGRhZDdlMWEyNmNmMDg2NzAyZGJhODkxMDk1NWNkZWFhZGJkLi45NWFjNTQ3NTYz
YTQ2NzIzZWZkNTM3YTgyMzEyMThkMmQ5ZWU0MTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0NCBA
QAorMjAyMS0wMy0xOSAgQkogQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiByZW5hbWUgV2ViSW5zcGVjdG9yUHJveHkgdG8gV2ViSW5zcGVjdG9yVUlQcm94
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzNTUx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG8gaW1w
cm92ZSBjbGFyaXR5IGluIHRoZSBjb2RlYmFzZSwgSSdtIHJlbmFtaW5nIHRoaXMgdG8gYmUgY29u
c2lzdGVudAorICAgICAgICB3aXRoIGl0J3MgV2ViUHJvY2Vzcy1zaWRlIGNvdW50ZXJwYXJ0LCBX
ZWJJbnNwZWN0b3JVSS4gVGhlcmUgYXJlIG1hbnkKKyAgICAgICAgZGlmZmVyZW50IGNsYXNzZXMg
d2l0aCB0aGUgJ1dlYkluc3BlY3RvcicgcHJlZml4LCBzbyBpdCBjYW4gYmUgZGlmZmljdWx0Cisg
ICAgICAgIHRvIHVuZGVyc3RhbmQgd2hldGhlciBhIGNsYXNzIGlzIGFzc29jaWF0ZWQgd2l0aCB0
aGUgV2ViSW5zcGVjdG9yVUkKKyAgICAgICAgZnJvbnRlbmQgb3IgdGhlIEluc3BlY3RvckNvbnRy
b2xsZXIgYmFja2VuZC4gVGhpcyBmaXhlcyBvbmUgb2YgdGhlIGJpZ2dlc3QKKyAgICAgICAgb2Zm
ZW5kZXJzLgorCisgICAgICAgIEZvciBicmV2aXR5LCBJIGhhdmUgZWxpZGVkIGZ1bmN0aW9uLWxl
dmVsIGNoYW5nZWxvZyBlbnRyaWVzIGZyb20gZmlsZXMKKyAgICAgICAgdGhhdCBoYXZlIGJlZW4g
cmVuYW1lZC4gVGhpcyBpcyBhIG1lY2hhbmljYWwgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBE
ZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2Vz
LW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAg
ICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6Cisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAg
ICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUluc3BlY3Rv
ckNsaWVudC5oOgorICAgICAgICAoQVBJOjpJbnNwZWN0b3JDbGllbnQ6Om9wZW5VUkxFeHRlcm5h
bGx5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50Lmg6CisgICAgICAgIChB
UEk6OlVJQ2xpZW50OjpkaWRBdHRhY2hMb2NhbEluc3BlY3Rvcik6CisgICAgICAgIChBUEk6OlVJ
Q2xpZW50Ojp3aWxsQ2xvc2VMb2NhbEluc3BlY3Rvcik6CisgICAgICAgIChBUEk6OlVJQ2xpZW50
Ojpjb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0FQSUNhc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tJbnNwZWN0b3Iu
Y3BwOgorICAgICAgICAoV0tJbnNwZWN0b3JHZXRUeXBlSUQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9tYWMvV0tJbnNw
ZWN0b3JQcml2YXRlTWFjLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tJbnNw
ZWN0b3JJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVtb3Rl
V2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW06CisgICAgICAgICgtW19XS1JlbW90ZVdlYklu
c3BlY3RvclZpZXdDb250cm9sbGVyIGluaXRXaXRoQ29uZmlndXJhdGlvbjpdKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVy
SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNwZWN0
b3IuY3BwOgorICAgICAgICAod2Via2l0V2ViSW5zcGVjdG9yQ3JlYXRlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW06CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvVUlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpkaWRBdHRhY2hMb2NhbEluc3BlY3Rvcik6CisgICAgICAgIChXZWJL
aXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp3aWxsQ2xvc2VMb2NhbEluc3BlY3Rvcik6CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHA6CisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9Db2NvYS9JbnNwZWN0b3JEZWxlZ2F0ZS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRGVsZWdhdGUubW06CisgICAgICAg
IChXZWJLaXQ6Okluc3BlY3RvckRlbGVnYXRlOjpJbnNwZWN0b3JDbGllbnQ6Om9wZW5VUkxFeHRl
cm5hbGx5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0NvY29hL0luc3BlY3RvckV4
dGVuc2lvbkRlbGVnYXRlLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwLgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6flJlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojpsb2FkKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6Y2xvc2VGcm9tQmFja2VuZCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbUNyYXNoKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvdyk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmZyb250ZW5kTG9hZGVk
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6ZnJvbnRlbmRE
aWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnJl
b3Blbik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnJlc2V0
U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojpicmlu
Z1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojpz
YXZlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6YXBwZW5k
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0U2hlZXRS
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0Rm9y
Y2VkQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk6OnN0YXJ0V2luZG93RHJhZyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6Om9wZW5VUkxFeHRlcm5hbGx5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6c2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGVGcm9udGVuZFBhZ2VBbmRX
aW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpjbG9z
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1C
cmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybUFwcGVuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRv
d0RyYWcpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybU9wZW5VUkxFeHRlcm5hbGx5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2lu
ZG93KToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9S
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5Q2xpZW50Ojp+UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnNldENsaWVudCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmlzVW5kZXJUZXN0IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6ZXh0ZW5zaW9u
Q29udHJvbGxlciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHk6OndpbmRvdyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6OnNoZWV0UmVjdCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rv
ci9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1l
c3NhZ2VzLmluLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUlQ
cm94eS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yUHJveHkuY3BwLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjpXZWJJbnNwZWN0b3JVSVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6fldlYkluc3BlY3RvclVJUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjpzZXRJbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjppbnNwZWN0aW9uTGV2ZWwgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aXNGcm9udCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmNvbm5lY3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6aGlkZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6Y2xvc2VGb3JD
cmFzaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnJlb3Blbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnJlc2V0U3RhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclVJUHJveHk6OnVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvd0NvbnNvbGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpzaG93UmVzb3VyY2VzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6YXR0YWNoQm90dG9tKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6YXR0YWNoUmlnaHQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRhY2hMZWZ0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6YXR0YWNoKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yVUlQcm94eTo6ZGV0YWNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjpzZXRBdHRhY2hlZFdpbmRvd1dpZHRoKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0U2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yVUlQcm94eTo6c3RhcnRXaW5kb3dEcmFnKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yVUlQcm94eTo6dG9nZ2xlUGFnZVByb2ZpbGluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6Y3JlYXRlRnJvbnRlbmRQ
YWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6b3BlbkxvY2FsSW5z
cGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpv
cGVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6ZGlkQ2xvc2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFu
ZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnNlbmRNZXNz
YWdlVG9CYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6ZnJv
bnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpicmlu
Z1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpicmluZ0lu
c3BlY3RlZFBhZ2VUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6YXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3Bl
Y3RvclVJUHJveHk6OnNldEZvcmNlZEFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjpvcGVuVVJMRXh0ZXJuYWxseSk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclVJUHJveHk6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpzaG93Q2VydGlmaWNhdGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnNldERldmVsb3BlclByZWZl
cmVuY2VPdmVycmlkZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnNl
dERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6c2F2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OmFwcGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnNob3VsZE9w
ZW5BdHRhY2hlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmV2YWx1
YXRlSW5Gcm9udGVuZEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3cpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdl
QW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1EaWRDbG9zZUZvckNyYXNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUhpZGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUlzRnJvbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3Rl
ZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybVNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtQXBwZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BdHRhY2gpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURldGFjaCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU3Rh
cnRXaW5kb3dEcmFnKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5z
cGVjdG9yUGFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omlu
c3BlY3RvclRlc3RQYWdlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdl
ZCk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5Lmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yUHJveHkuaC4KKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yQ2xpZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdGVkUGFnZSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclBh
Z2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpleHRlbnNp
b25Db250cm9sbGVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6aXNDb25uZWN0ZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5Ojppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjppbnNwZWN0b3JXaW5kb3cgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JVSVByb3h5OjpzaGVldFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JVSVByb3h5OjppbnNwZWN0b3JWaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6YXR0YWNobWVudFNpZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5Ojppc0F0dGFjaGVkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yVUlQcm94eTo6aXNQcm9maWxpbmdQYWdlIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aXNFbGVtZW50U2VsZWN0aW9uQWN0aXZlIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aXNVbmRlclRlc3QgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNhbkF0
dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmNhbkF0dGFjaCBj
b25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5
Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJUHJvY2Vzcy9J
bnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5Ojp1cGRhdGVXaW5kb3dUaXRsZSk6CisgICAgICAgIChXZWJLaXQ6OnJlbW90
ZUluc3BlY3RvclZpZXdEZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6
OnJlbW90ZUZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXBwZW5kKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZv
cmNlZEFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtT3BlblVSTEV4dGVybmFsbHkpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94
eUNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAu
CisgICAgICAgIChXZWJLaXQ6Omluc3BlY3RvclZpZXdEZXN0cm95ZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5Ojp1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6CisgICAgICAgIChXZWJLaXQ6
OndlYlByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChXZWJLaXQ6OmRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpnZXRDb250ZXh0TWVudUZyb21Qcm9w
b3NlZE1lbnUpOgorICAgICAgICAoV2ViS2l0OjppbnNwZWN0b3JXZWJzaXRlRGF0YVN0b3JlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9u
dGVuZFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bUNyZWF0ZUZyb250ZW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSGlkZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ0lu
c3BlY3RlZFBhZ2VUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1Jc0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JQYWdlVVJMKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbmZvRm9yTG9jYWxEZWJ1
Z2dhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1J
bnNwZWN0ZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BdHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURldGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93
V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNl
dFNoZWV0UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtU3RhcnRXaW5kb3dEcmFnKToKKyAgICAgICAgKFdlYktpdDo6ZmlsZVJlcGxhY2VDb250ZW50
c0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1TYXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1B
cHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUF0
dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3Iv
Z3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHA6CisgICAgICAgICh3ZWJraXRJbnNwZWN0b3JX
aW5kb3dOZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYklu
c3BlY3RvclVJUHJveHlNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tLgorICAgICAgICAo
LVtXS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciB3aW5kb3c6d2lsbFBvc2l0
aW9uU2hlZXQ6dXNpbmdSZWN0Ol0pOgorICAgICAgICAoLVtXS1JlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHlPYmpDQWRhcHRlciBpbml0V2l0aFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6XSk6Cisg
ICAgICAgICgtW1dLUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGluc3BlY3Rv
cldLV2ViVmlld0RpZEJlY29tZUFjdGl2ZTpdKToKKyAgICAgICAgKC1bV0tSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JE
aWRDcmFzaDpdKToKKyAgICAgICAgKC1bV0tSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0Fk
YXB0ZXIgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDpdKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6d2ViVmlldyBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmRpZEJlY29tZUFj
dGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVz
ZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtQnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU3Rh
cnRXaW5kb3dEcmFnKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tOgorICAg
ICAgICAoLVtXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JQ
cm94eU1hYy5tbS4KKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIg
aW5zcGVjdG9yUmVmXSk6CisgICAgICAgICgtW1dLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFw
dGVyIGluc3BlY3Rvcl0pOgorICAgICAgICAoLVtXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRh
cHRlciBpbml0V2l0aFdlYkluc3BlY3RvclVJUHJveHk6XSk6CisgICAgICAgICgtW1dLV2ViSW5z
cGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGludmFsaWRhdGVdKToKKyAgICAgICAgKC1bV0tXZWJJ
bnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgd2luZG93OndpbGxQb3NpdGlvblNoZWV0OnVzaW5n
UmVjdDpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgd2lu
ZG93RGlkTW92ZTpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0
ZXIgd2luZG93RGlkUmVzaXplOl0pOgorICAgICAgICAoLVtXS1dlYkluc3BlY3RvclVJUHJveHlP
YmpDQWRhcHRlciB3aW5kb3dXaWxsQ2xvc2U6XSk6CisgICAgICAgICgtW1dLV2ViSW5zcGVjdG9y
VUlQcm94eU9iakNBZGFwdGVyIHdpbmRvd0RpZEVudGVyRnVsbFNjcmVlbjpdKToKKyAgICAgICAg
KC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgd2luZG93RGlkRXhpdEZ1bGxTY3Jl
ZW46XSk6CisgICAgICAgICgtW1dLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGluc3Bl
Y3RlZFZpZXdGcmFtZURpZENoYW5nZTpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVBy
b3h5T2JqQ0FkYXB0ZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDpvZk9iamVjdDpjaGFuZ2U6Y29u
dGV4dDpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJEaWRCZWNvbWVBY3RpdmU6XSk6CisgICAgICAgICgtW1dLV2Vi
SW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVj
dG9yRGlkQ3Jhc2g6XSk6CisgICAgICAgICgtW1dLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFw
dGVyIGluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6XSk6CisgICAg
ICAgICgtW1dLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGluc3BlY3RvclZpZXdDb250
cm9sbGVyOndpbGxNb3ZlVG9XaW5kb3c6XSk6CisgICAgICAgICgtW1dLV2ViSW5zcGVjdG9yVUlQ
cm94eU9iakNBZGFwdGVyIGluc3BlY3RvclZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93Ol0p
OgorICAgICAgICAoLVtXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciBpbnNwZWN0b3JW
aWV3Q29udHJvbGxlcjpvcGVuVVJMRXh0ZXJuYWxseTpdKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yVUlQcm94eTo6ZGlkQmVjb21lQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yVUlQcm94eTo6YXR0YWNobWVudFZpZXdEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KToK
KyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6YXR0YWNobWVudERpZE1vdmVU
b1dpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnVwZGF0ZUlu
c3BlY3RvcldpbmRvd1RpdGxlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3cpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpjbG9zZUZyb250ZW5kUGFnZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbnRlbmRBZnRl
ckluYWN0aXZpdHlUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSGlkZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ0lu
c3BlY3RlZFBhZ2VUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1Jc0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1DYW5BdHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU2F2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtQXBwZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6d2luZG93
RnJhbWVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojp3
aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRv
d1dpZHRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1B
dHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURl
dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKToK
KyAgICAgICAgKFdlYktpdDo6c3lzdGVtVmVyc2lvblBsaXN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmFwcGx5Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNw
cDoKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5V2luLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwLgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpXbmRQcm9jKToKKyAgICAgICAgKFdlYktpdDo6
cmVnaXN0ZXJXaW5kb3dDbGFzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6OnNpemVDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5OjpvbkNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3cpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5n
VG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU2F2ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtQXBwZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJh
Zyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
T3BlblVSTEV4dGVybmFsbHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3cp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclVJUHJveHlX
aW4uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dp
bi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAuCisgICAgICAgIChXZWJLaXQ6OmdldEluc3BlY3Rl
ZFdpbmRvd0luZm8pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojp3aW5k
b3dSZWNlaXZlZE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5
Ojp3bmRQcm9jKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cmVnaXN0
ZXJXaW5kb3dDbGFzcyk6CisgICAgICAgIChXZWJLaXQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0Ojp3ZWJQcm9jZXNzRGlkQ3Jhc2gpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFn
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2xvc2VG
cm9udGVuZFBhZ2VBbmRXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjppbnNwZWN0b3JQYWdlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQ
cm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JVSVByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dp
ZHRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BdHRh
Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURldGFj
aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSXNGcm9udCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSGlkZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zy
b250KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRG
b3JjZWRBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUFwcGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRX
aW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURp
ZENsb3NlRm9yQ3Jhc2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Om1fbGltaXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5k
RG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5zcGVjdG9yIGNvbnN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlU2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV2ViSW5zcGVjdG9yVUk6OnNldEZvcmNlZEFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c3RhcnRXaW5kb3dEcmFnKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVdlYkluc3BlY3RvclVJOjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVdlYkluc3BlY3RvclVJOjpyZW9wZW4pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSTo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJOjpvcGVuVVJMRXh0ZXJuYWxseSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYklu
c3BlY3RvclVJOjpzYXZlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6
OmFwcGVuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpzaG93Q2Vy
dGlmaWNhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rvcjo6b3BlbkxvY2FsSW5zcGVjdG9yRnJv
bnRlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3I6OmNsb3NlRnJvbnRlbmRDb25u
ZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yOjpicmluZ1RvRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3I6OmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yOjp0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3I6OnNldERldmVsb3BlclByZWZlcmVuY2VP
dmVycmlkZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rvcjo6dXBkYXRlRG9ja2luZ0F2
YWlsYWJpbGl0eSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
VUkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6dXBkYXRlQ29ubmVjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJOjpmcm9udGVuZExvYWRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJOjpzdGFydFdpbmRvd0RyYWcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUk6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUk6OnJlb3Blbik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJOjpyZXNl
dFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUk6OnNldEZvcmNlZEFwcGVh
cmFuY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6cmVxdWVzdFNldERvY2tT
aWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2lu
ZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFj
aGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6Y2hhbmdl
U2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUk6Om9wZW5VUkxFeHRl
cm5hbGx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUk6OnNhdmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6YXBwZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yVUk6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSTo6c2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKToKKwogMjAyMS0wMy0xOSAgQnJlbnQgRnVsZ2hh
bSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIEFsbG93IG9wZW5kaXJl
Y3RvcnlkIGFjY2VzcyBpbiBiYXNlIHN5c3RlbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL3BvL2FyLnBvIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2Fy
LnBvCmluZGV4IDU4NWVjYzkxNDE1YTFiMDFlYjYzZDUwZmI4NWExMDcxMjczY2FhZDkuLmVmYTNi
NDUwMDIyNTJkYmM3MDcyZTEzZjU4YmQ2OTBkODM0MmE3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9hci5wbworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvcG8vYXIucG8KQEAgLTE3OTMsOCArMTc5Myw4IEBAIG1zZ2lkICJBbiBhc3NvY2lhdGVk
IFdlYktpdFdlYlNldHRpbmdzIGluc3RhbmNlIgogbXNnc3RyICLYs9mK2LHZiNix2KkgV2ViS2l0
V2ViU2V0dGluZ3Mg2YXYsdiq2KjYt9ipIgogCiAjOiAuLi8uLi8uLi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcDozMjg3Ci0jOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjkzCi0jOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjE1MworIzogLi4vLi4vLi4vV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOjkzCisjOiAuLi8uLi8u
Li9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTUzCiBt
c2dpZCAiV2ViIEluc3BlY3RvciIKIG1zZ3N0ciAi2YHYp9it2ZDYtSDYp9mE2YjZkNioIgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vYXMucG8gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vYXMucG8KaW5kZXggZjhjOTE4MjQ0OTEzNDEyMDYyNDE3
YzU5ZTVjZWQ5YjFjZmMwYjI0MS4uNzVhYzEwOTI2ZTE2NTljMjVlN2VkZDQ0YjRjZGVkMWI4Y2M0
OWFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2FzLnBvCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9hcy5wbwpAQCAtMTUyOCw4ICsxNTI4
LDggQEAgbXNnc3RyICLgpqrgp4Lgp7Dgp43gpqPgpqrgp7Dgp43gpqbgpr4iCiBtc2dpZCAiV2hl
dGhlciB3aW5kb3cgd2lsbCBiZSBkaXNwbGF5ZWQgZnVsbHNjcmVlbi4iCiBtc2dzdHIgIuCmieCm
h+CmqOCnjeCmoeCni+CmlSDgpqrgp4Lgp7Dgp43gpqPgpqrgp7Dgp43gpqbgpr7gpqQg4Kaq4KeN
4Kew4Kam4Kew4KeN4Ka24KaoIOCmleCnsOCmviDgprngpqwg4Kao4KeH4KWkIgogCi0jOiAuLi8u
Li8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjgy
Ci0jOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlH
dGsuY3BwOjE0NworIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3Bl
Y3RvclVJUHJveHlHdGsuY3BwOjgyCisjOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTQ3CiBtc2dpZCAiV2ViIEluc3BlY3RvciIK
IG1zZ3N0ciAi4Kex4KeH4KasIOCmqOCngOCnsOCmv+CmleCnjeCmt+CmlSIKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2JnLnBvIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL3BvL2JnLnBvCmluZGV4IDc3NmM5OTE4N2NmODUyNmUxZjk3NzRiZTk5M2Jh
N2U5MTQ3YTUwMjguLmY0YmU2MThiYjdmMTY4MDdhZjRlNDQ0NjA2MzIzYWMyOTI3Mzc4NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9iZy5wbworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vYmcucG8KQEAgLTE2MjIsOCArMTYyMiw4IEBAIG1z
Z3N0ciAi0J3QsCDRhtGP0Lsg0LXQutGA0LDQvSIKIG1zZ2lkICJXaGV0aGVyIHdpbmRvdyB3aWxs
IGJlIGRpc3BsYXllZCBmdWxsc2NyZWVuLiIKIG1zZ3N0ciAi0JTQsNC70Lgg0L/RgNC+0LfQvtGA
0LXRhtGK0YIg0YnQtSDRgdC1INC40LfQvtCx0YDQsNC30Y/QstCwINC90LAg0YbRj9C7INC10LrR
gNCw0L0uIgogCi0jOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVj
dG9yUHJveHlHdGsuY3BwOjE3OAotIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDoxODMKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTg2CisjOiAuLi8uLi8uLi8uLi9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTc4CisjOiAu
Li8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5j
cHA6MTgzCisjOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9y
VUlQcm94eUd0ay5jcHA6MTg2CiBtc2dpZCAiV2ViIEluc3BlY3RvciIKIG1zZ3N0ciAi0KPQtdCx
INC40L3RgdC/0LXQutGC0L7RgCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9wby9jYS5wbyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9jYS5wbwppbmRl
eCA5Y2U2OTliMDI3ZmFjOTgzY2ZhN2ZkZTA4OTM1ZTc2N2NmNjMwYTg1Li42NmNkNjM5YWZmYjgx
OWJiMWYxZDRjN2JiOWE0Y2E3MDZmNTVlODNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvcG8vY2EucG8KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3Bv
L2NhLnBvCkBAIC0xNTY2LDkgKzE1NjYsOSBAQCBtc2dzdHIgIlBhbnRhbGxhIGNvbXBsZXRhIgog
bXNnaWQgIldoZXRoZXIgd2luZG93IHdpbGwgYmUgZGlzcGxheWVkIGZ1bGxzY3JlZW4uIgogbXNn
c3RyICIiCiAKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0
b3JQcm94eUd0ay5jcHA6MTQ0Ci0jOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjE0OQotIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDoxNTIKKyM6IC4uLy4uLy4uLy4uL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxNDQKKyM6IC4u
Ly4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNw
cDoxNDkKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JV
SVByb3h5R3RrLmNwcDoxNTIKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICIiCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9jcy5wbyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9jcy5wbwppbmRleCA5YWYzNTIyNDhlODZiM2NkY2MyZDA5
MDI0OTFiNTY2NzE0M2MxODA1Li5mNDFiMWIyOWVjMmYwMTMwODZlODVlZDAyOWMwMTFjNzQzYTY0
NDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vY3MucG8KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2NzLnBvCkBAIC0xNzg3LDggKzE3ODcs
OCBAQCBtc2dpZCAiQW4gYXNzb2NpYXRlZCBXZWJLaXRXZWJTZXR0aW5ncyBpbnN0YW5jZSIKIG1z
Z3N0ciAiQXNvY2lvdmFuw6EgaW5zdGFuY2UgV2ViS2l0V2ViU2V0dGluZ3MiCiAKICM6IC4uLy4u
Ly4uL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjMyODcKLSM6IC4uLy4uLy4u
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6OTMKLSM6IC4u
Ly4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTUz
CisjOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0
ay5jcHA6OTMKKyM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JV
SVByb3h5R3RrLmNwcDoxNTMKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICJaa291bcOh
bsOtIFdXVyIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2Vs
LnBvIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2VsLnBvCmluZGV4IDhlMDQxOTRh
N2QxN2RmZTMyMWIxYTEwZmQ1ODBhMGI4NTExOTc2MDkuLmU1ZjYxMTRmNzU3NmQ2NTg1OTE0YTFm
OWFlZDBlMTY3MWVhYWNiYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9wby9lbC5wbworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vZWwucG8KQEAg
LTE2MzEsOSArMTYzMSw5IEBAIG1zZ3N0ciAizqDOu86uz4HOt8+CIM6/zrjPjM69zrciCiBtc2dp
ZCAiV2hldGhlciB3aW5kb3cgd2lsbCBiZSBkaXNwbGF5ZWQgZnVsbHNjcmVlbi4iCiBtc2dzdHIg
Is6Rzr0gz4TOvyDPgM6xz4HOrM64z4XPgc6/IM64zrEgzrXOvM+GzrHOvc6vzrbOtc+EzrHOuSDP
g861IM+AzrvOrs+Bzrcgzr/OuM+Mzr3Oty4iCiAKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTc4Ci0jOiAuLi8uLi8uLi8uLi9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjE4MwotIzogLi4v
Li4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDox
ODYKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVBy
b3h5R3RrLmNwcDoxNzgKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJ
bnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxODMKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxODYKIG1zZ2lkICJXZWIgSW5zcGVj
dG9yIgogbXNnc3RyICLOlc+AzrnOuM61z4nPgc63z4TOrs+CIM6Zz4PPhM6/z40iCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9lbl9DQS5wbyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9lbl9DQS5wbwppbmRleCAxMzNiYzUwMTc1YWNkZjQ4NDcz
NDgxZjJiODRhMzdhYzIxZGRkZTNlLi5hMzYxZDk5MzNhMmMwZDM2MGI2MTdlMWNlZTg4MWU5MzVh
Mjc5ZjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vZW5fQ0Eu
cG8KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2VuX0NBLnBvCkBAIC0xNzgy
LDggKzE3ODIsOCBAQCBtc2dpZCAiQW4gYXNzb2NpYXRlZCBXZWJLaXRXZWJTZXR0aW5ncyBpbnN0
YW5jZSIKIG1zZ3N0ciAiQW4gYXNzb2NpYXRlZCBXZWJLaXRXZWJTZXR0aW5ncyBpbnN0YW5jZSIK
IAogIzogLi4vLi4vLi4vV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MzI4Nwot
IzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNw
cDo5MwotIzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5
R3RrLmNwcDoxNTMKKyM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0
b3JVSVByb3h5R3RrLmNwcDo5MworIzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
Ykluc3BlY3RvclVJUHJveHlHdGsuY3BwOjE1MwogbXNnaWQgIldlYiBJbnNwZWN0b3IiCiBtc2dz
dHIgIldlYiBJbnNwZWN0b3IiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9wby9lbl9HQi5wbyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9lbl9HQi5w
bwppbmRleCA0NzljNDMxZTAyNmUwZTlhOTBkYmM1NDhlZDYxOWI3ZTVlYjhhZTkzLi4xNjNhMzY0
OTAxNGZkMTcxMThhZjViM2UzOWYzOGRhMjIwNTRiOTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvcG8vZW5fR0IucG8KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL3BvL2VuX0dCLnBvCkBAIC0xODA5LDggKzE4MDksOCBAQCBtc2dpZCAiQW4gYXNzb2Np
YXRlZCBXZWJLaXRXZWJTZXR0aW5ncyBpbnN0YW5jZSIKIG1zZ3N0ciAiQW4gYXNzb2NpYXRlZCBX
ZWJLaXRXZWJTZXR0aW5ncyBpbnN0YW5jZSIKIAogIzogLi4vLi4vLi4vLi4vV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MzI4NQotIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDo5MgotIzogLi4vLi4vLi4vLi4vV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDoxNTcKKyM6IC4uLy4u
Ly4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDo5
MgorIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclVJUHJv
eHlHdGsuY3BwOjE1NwogbXNnaWQgIldlYiBJbnNwZWN0b3IiCiBtc2dzdHIgIldlYiBJbnNwZWN0
b3IiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9lby5wbyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9lby5wbwppbmRleCAzMDE2MDgyYzg0ZmEw
YTE0NGE2MjQ5NzM3MTU0NDdlMDk2M2Q1OTg4Li5lZWQwNWE2NmZlMTI4ODY3NjFlYjFjZjM3NjVk
NTJiY2E1ZjcyODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8v
ZW8ucG8KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2VvLnBvCkBAIC0xNzU4
LDggKzE3NTgsOCBAQCBtc2dpZCAiQW4gYXNzb2NpYXRlZCBXZWJLaXRXZWJTZXR0aW5ncyBpbnN0
YW5jZSIKIG1zZ3N0ciAiIgogCiAjOiAuLi8uLi8uLi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcDozMjg3Ci0jOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5z
cGVjdG9yUHJveHlHdGsuY3BwOjkzCi0jOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjE1MworIzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOjkzCisjOiAuLi8uLi8uLi9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTUzCiBtc2dpZCAiV2Vi
IEluc3BlY3RvciIKIG1zZ3N0ciAiIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvcG8vZXQucG8gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vZXQucG8K
aW5kZXggYTE4ZGI5NjU0OWU5MDQxMGI2NDBjOTc1NDdmNDIzOTIzNjkwMTY3YS4uYzc1ODQ5MThj
ZjY5M2IxYzU3MGZjNDY0NTZlNDk3NWNkMjUyMjkwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL3BvL2V0LnBvCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9wby9ldC5wbwpAQCAtMTgwMCw4ICsxODAwLDggQEAgbXNnaWQgIkFuIGFzc29jaWF0ZWQgV2Vi
S2l0V2ViU2V0dGluZ3MgaW5zdGFuY2UiCiBtc2dzdHIgIiIKIAogIzogLi4vLi4vLi4vV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MzI4NwotIzogLi4vLi4vLi4vV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDo5MwotIzogLi4vLi4vLi4vV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDoxNTMKKyM6IC4uLy4u
Ly4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDo5Mwor
IzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsu
Y3BwOjE1MwogbXNnaWQgIldlYiBJbnNwZWN0b3IiCiBtc2dzdHIgIlZlZWJpaW5zcGVrdG9yIgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vZXUucG8gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vZXUucG8KaW5kZXggZTNmNzZmNjRjOGM1ZDM0NmUz
Mzc4ODE3NDI0ZjYzMTQyMjU4ZDkyMy4uMDkyNTk5NmVhNmVkMmQ5YzdkZGY4MDM5ZTAwNDM3YTMz
NjY2NTdkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2V1LnBv
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9ldS5wbwpAQCAtMTgwOCw4ICsx
ODA4LDggQEAgbXNnaWQgIkFuIGFzc29jaWF0ZWQgV2ViS2l0V2ViU2V0dGluZ3MgaW5zdGFuY2Ui
CiBtc2dzdHIgIkVzbGVpdHV0YWtvIFdlYktpdFdlYlNldHRpbmdzLWVuIGluc3RhbnR6aWEiCiAK
ICM6IC4uLy4uLy4uL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjMyODcKLSM6
IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6
OTMKLSM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0
ay5jcHA6MTUzCisjOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9y
VUlQcm94eUd0ay5jcHA6OTMKKyM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJ
bnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxNTMKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3Ry
ICJXZWIgYmVnaXJhbGVhIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvcG8vZmkucG8gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vZmkucG8KaW5kZXgg
MWE0MDk5NGU1N2JmMmRiYjM2MjUzOTUyNDA2YjYxZmI0YzcyMzNhZC4uZmRhYTI3NzIxNjY1ZjQw
NmUwMTYxYWE3NTI1ODY1OWJkMmZmMjA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL3BvL2ZpLnBvCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9m
aS5wbwpAQCAtMTU4Myw4ICsxNTgzLDggQEAgbXNnc3RyICJLb2tvIG7DpHl0dMO2IgogbXNnaWQg
IldoZXRoZXIgd2luZG93IHdpbGwgYmUgZGlzcGxheWVkIGZ1bGxzY3JlZW4uIgogbXNnc3RyICIi
CiAKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94
eUd0ay5jcHA6MTc5Ci0jOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5z
cGVjdG9yUHJveHlHdGsuY3BwOjE4NAotIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDoxODcKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxNzkKKyM6IC4uLy4uLy4u
Ly4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxODQK
KyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5
R3RrLmNwcDoxODcKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICIiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vZ2wucG8gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvcG8vZ2wucG8KaW5kZXggM2NkYTA3MTZjN2Q0NmMzZDVlNmIxMGY4Yjg2ZDE5
MzlkM2IyM2FjZi4uZTVmZjNkZmRkMGJhNDdiZDJiZmQyZjViN2ZkOTZlYjMyZTljY2M1YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2dsLnBvCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9nbC5wbwpAQCAtMTc5Myw4ICsxNzkzLDggQEAgbXNn
aWQgIkFuIGFzc29jaWF0ZWQgV2ViS2l0V2ViU2V0dGluZ3MgaW5zdGFuY2UiCiBtc2dzdHIgIlVu
aGEgaW5zdGFuY2lhIGRlIFdlYktpdFdlYlNldHRpbmdzIGFzb2NpYWRhIgogCiAjOiAuLi8uLi8u
Li8uLi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDozMjg5Ci0jOiAuLi8uLi8u
Li8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjgxCi0j
OiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsu
Y3BwOjE0NgorIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3Rv
clVJUHJveHlHdGsuY3BwOjgxCisjOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTQ2CiBtc2dpZCAiV2ViIEluc3BlY3RvciIKIG1z
Z3N0ciAiSW5zcGVjdG9yIHdlYiIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL3BvL2d1LnBvIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2d1LnBvCmlu
ZGV4IDZiOWJjMGQ5YzBiMzg4MWE0ZWVlYzlhYjQ5NGNkZTFhYTdhY2U1ZmEuLmI5OWIxODAxOGQ1
MjBlYjllNTNjNmI5YTM1MGQzY2RjMGFmMjQzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9wby9ndS5wbworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
cG8vZ3UucG8KQEAgLTE1MjYsOSArMTUyNiw5IEBAIG1zZ3N0ciAi4Kq44KqC4Kqq4KuC4Kqw4KuN
4Kqj4Kq44KuN4KqV4KuN4Kqw4KuA4KqoIgogbXNnaWQgIldoZXRoZXIgd2luZG93IHdpbGwgYmUg
ZGlzcGxheWVkIGZ1bGxzY3JlZW4uIgogbXNnc3RyICLgqpXgq43gqq/gqr7gqoLgqqTgq4sg4Kq1
4Kq/4Kqo4KuN4Kqh4KuLIOCqquCrguCqsOCrjeCqo+CquOCrjeCqleCrjeCqsOCrgOCqqOCqruCq
vuCqgiDgqqbgqrDgq43gqrbgqr7gqrXgq4fgqrIg4Kq54Kq24KuHIgogCi0jOiAuLi8uLi8uLi8u
Li9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjEzMgotIzog
Li4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNw
cDoxMzcKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQ
cm94eUd0ay5jcHA6MTQwCisjOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
SW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTMyCisjOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTM3CisjOiAuLi8uLi8uLi8uLi9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTQwCiBtc2dp
ZCAiV2ViIEluc3BlY3RvciIKIG1zZ3N0ciAi4Kq14KuH4KqsIOCqquCqsOCrgOCqleCrjeCqt+Cq
lSIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2hlLnBvIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2hlLnBvCmluZGV4IDIzZmU3NDRmM2FiODFi
MmJiNDc1YTI5ZDNiNGMzODUzMjczYzI3NjEuLmExZDA0YmVjMGQyOWQ5OWViMDgyZWExMmEzZmYz
YjBkYmM4NTk1MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9o
ZS5wbworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vaGUucG8KQEAgLTE1NzQs
OSArMTU3NCw5IEBAIG1zZ3N0ciAiRnVsbHNjcmVlbiIKIG1zZ2lkICJXaGV0aGVyIHdpbmRvdyB3
aWxsIGJlIGRpc3BsYXllZCBmdWxsc2NyZWVuLiIKIG1zZ3N0ciAiV2hldGhlciB3aW5kb3cgd2ls
bCBiZSBkaXNwbGF5ZWQgZnVsbHNjcmVlbi4iCiAKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTMyCi0jOiAuLi8uLi8uLi8uLi9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjEzNwotIzogLi4v
Li4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDox
NDAKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVBy
b3h5R3RrLmNwcDoxMzIKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJ
bnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxMzcKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxNDAKIG1zZ2lkICJXZWIgSW5zcGVj
dG9yIgogbXNnc3RyICLXkdeV15fXnyBXZWIiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9wby9oaS5wbyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9o
aS5wbwppbmRleCAwZTE3MTY4N2E5YjBjMmM2YTY5YTg2ZjdhOGZjMDZkNDhiNTFlMGNlLi4yZGIz
ZjM5YWY0YTNiYzk5ZWZlYTUzMTlkMzUxNDhhMzdiYmFiZjZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vaGkucG8KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL3BvL2hpLnBvCkBAIC0xNTQ0LDggKzE1NDQsOCBAQCBtc2dzdHIgIuCkquClguCksOCl
jeCkoyDgpLjgpY3gpJXgpY3gpLDgpYDgpKgiCiBtc2dpZCAiV2hldGhlciB3aW5kb3cgd2lsbCBi
ZSBkaXNwbGF5ZWQgZnVsbHNjcmVlbi4iCiBtc2dzdHIgIuCkleCljeCkr+CkviDgpLXgpL/gpILg
pKHgpYsg4KSV4KWLIOCkquClguCksOCljeCkoyDgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSm4KS/
4KSW4KS+4KSv4KWAIOCknOCkvuCkqOClgCDgpLngpYguIgogCi0jOiAuLi8uLi8uLi8uLi9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjgyCi0jOiAuLi8uLi8u
Li8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjE0Nwor
IzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlH
dGsuY3BwOjgyCisjOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVj
dG9yVUlQcm94eUd0ay5jcHA6MTQ3CiBtc2dpZCAiV2ViIEluc3BlY3RvciIKIG1zZ3N0ciAi4KS1
4KWH4KSsIOCkh+CkguCkuOCljeCkquClh+CkleCljeCkn+CksCIKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2h1LnBvIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL3BvL2h1LnBvCmluZGV4IDczYzhiNTAxNGFkZTA3MDllNTY5NWUxODFjMzM2Y2IxYzg3
MWRjYzcuLmI4Yzg0YjJhOTNiMDdkMTY2Mjg4YjExNjQ1ODU4YzM0NjZhOGUyNWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9odS5wbworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvcG8vaHUucG8KQEAgLTE2NTcsOSArMTY1Nyw5IEBAIG1zZ3N0ciAi
VGVsamVzIGvDqXBlcm55xZEiCiBtc2dpZCAiV2hldGhlciB3aW5kb3cgd2lsbCBiZSBkaXNwbGF5
ZWQgZnVsbHNjcmVlbi4iCiBtc2dzdHIgIkF6IGFibGFrIHRlbGplcyBrw6lwZXJuecWRbiBqZWxl
bmlrLWUgbWVnLiIKIAotIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYklu
c3BlY3RvclByb3h5R3RrLmNwcDoxNzgKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTgzCi0jOiAuLi8uLi8uLi8uLi9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjE4NgorIzogLi4vLi4vLi4v
Li4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOjE3OAor
IzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlH
dGsuY3BwOjE4MworIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3Bl
Y3RvclVJUHJveHlHdGsuY3BwOjE4NgogbXNnaWQgIldlYiBJbnNwZWN0b3IiCiBtc2dzdHIgIldl
YmZpZ3llbMWRIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8v
amEucG8gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vamEucG8KaW5kZXggZDJiMThl
NTJlZjI3Njk2NzU2NGUzNDkyM2IzOTI5ZWNhNzU5Zjk0ZC4uNjM0ZjA1ZWVlMjk2ZDkzMWNlZTZj
NzEwYjA1NTZjOTc0NTYzY2I2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL3BvL2phLnBvCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9qYS5wbwpA
QCAtMTc2NCw4ICsxNzY0LDggQEAgbXNnaWQgIkFuIGFzc29jaWF0ZWQgV2ViS2l0V2ViU2V0dGlu
Z3MgaW5zdGFuY2UiCiBtc2dzdHIgIumWoumAo+OBmeOCiyBXZWJLaXRXZWJTZXR0aW5ncyDjgqTj
g7Pjgrnjgr/jg7PjgrkiCiAKICM6IC4uLy4uLy4uLy4uL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwOjMzMDIKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6ODEKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTQ2CisjOiAuLi8uLi8uLi8uLi9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6ODEKKyM6IC4uLy4u
Ly4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDox
NDYKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICJXZWIgSW5zcGVjdG9yIgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8va24ucG8gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvcG8va24ucG8KaW5kZXggMmNmOTVjMmRjYjc3MGU2YjJhNmU3MzMz
NTg2ODQ3NWFlMzM5MWU2MC4uNTk1ZTBhNzMzMWNhZTc2MTA2ZDg1MzlmNGI2NjZjNmQ0Mzg5NTg4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2tuLnBvCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9rbi5wbwpAQCAtMTU3NCw5ICsxNTc0LDkg
QEAgbXNnc3RyICLgsqrgs4LgsrDgs43gsqPgsqTgs4bgsrDgs4YiCiBtc2dpZCAiV2hldGhlciB3
aW5kb3cgd2lsbCBiZSBkaXNwbGF5ZWQgZnVsbHNjcmVlbi4iCiBtc2dzdHIgIuCyleCyv+Cyn+Cy
leCyv+Cyr+CyqOCzjeCyqOCzgSDgsqrgs4LgsrDgs43gsqPgsqTgs4bgsrDgs4bgsq/gsrLgs43g
srLgsr8g4LKk4LOL4LKw4LK/4LK44LKy4LOBIOCyuOCyvuCyp+CzjeCyr+CyteCzhi4iCiAKLSM6
IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5j
cHA6MTMyCi0jOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9y
UHJveHlHdGsuY3BwOjEzNwotIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
Ykluc3BlY3RvclByb3h5R3RrLmNwcDoxNDAKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxMzIKKyM6IC4uLy4uLy4uLy4uL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxMzcKKyM6IC4u
Ly4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNw
cDoxNDAKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICLgspzgsr7gsrIg4LKu4LOH4LKy
4LON4LK14LK/4LKa4LK+4LKw4LKVICjgsrXgs4bgsqzgs40g4LKH4LKo4LON4LK44LON4oCM4LKq
4LOG4LKV4LON4LKf4LKw4LONKSIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL3BvL2tvLnBvIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2tvLnBvCmlu
ZGV4IGI1NzFmODkzMjAzMjZhMjczZDNkMTBkMzE0MTZhNTU4YTRjNTQ2NTQuLjFlNDlhODkyOTIx
YWI5NWU1YmNkNzJhZGM2ZjViMDIwZDdlZDJlYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9wby9rby5wbworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
cG8va28ucG8KQEAgLTE3MzksOCArMTczOSw4IEBAIG1zZ2lkICJBbiBhc3NvY2lhdGVkIFdlYktp
dFdlYlNldHRpbmdzIGluc3RhbmNlIgogbXNnc3RyICLqtIDroKggV2ViS2l0V2ViU2V0dGluZ3Mg
7J247Iqk7YS07IqkIgogCiAjOiAuLi8uLi8uLi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcDozMjg3Ci0jOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVj
dG9yUHJveHlHdGsuY3BwOjkzCi0jOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
SW5zcGVjdG9yUHJveHlHdGsuY3BwOjE1MworIzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOjkzCisjOiAuLi8uLi8uLi9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTUzCiBtc2dpZCAiV2ViIElu
c3BlY3RvciIKIG1zZ3N0ciAi7Ju5IOyduOyKpO2Ome2EsCIKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2x0LnBvIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL3BvL2x0LnBvCmluZGV4IGJhYWNlMmQxNDZkYzViYjZmMDAwYzM5M2M2OGI0MGVhY2IyNGYx
ZjcuLmM5ZmE4Y2UxYTRiM2I2ZDk1YzlkMmU1MDgyMzkxNGMxZGNkYzJhNWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9sdC5wbworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvcG8vbHQucG8KQEAgLTE4MTEsOCArMTgxMSw4IEBAIG1zZ2lkICJBbiBh
c3NvY2lhdGVkIFdlYktpdFdlYlNldHRpbmdzIGluc3RhbmNlIgogbXNnc3RyICJTdXNpZXRhc2lz
IOKAnldlYktpdFdlYlNldHRpbmdz4oCcIHRpcG8gb2JqZWt0YXMiCiAKICM6IC4uLy4uLy4uL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjMyODcKLSM6IC4uLy4uLy4uL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6OTMKLSM6IC4uLy4uLy4u
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTUzCisjOiAu
Li8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6
OTMKKyM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5
R3RrLmNwcDoxNTMKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICLFvWluaWF0aW5rbGlv
IGFuYWxpemF0b3JpdXMiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9wby9sdi5wbyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9sdi5wbwppbmRleCA2
NDJkMTVhOTM3MjUyYTE2OTFiYTZhNDdkMTc2YjkyODFjMzRiMWY0Li45ZjEwMmI0ZDg5ZmZhYTIw
MDhkNjkwYmQ3MTVmN2I5MjRkNzUwZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvcG8vbHYucG8KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL2x2
LnBvCkBAIC0xNzk0LDggKzE3OTQsOCBAQCBtc2dpZCAiQW4gYXNzb2NpYXRlZCBXZWJLaXRXZWJT
ZXR0aW5ncyBpbnN0YW5jZSIKIG1zZ3N0ciAiU2Fpc3TEq3TEgSBXZWJLaXRXZWJTZXR0aW5ncyBp
bnN0YW5jZSIKIAogIzogLi4vLi4vLi4vV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHA6MzI4NwotIzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclBy
b3h5R3RrLmNwcDo5MwotIzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3Bl
Y3RvclByb3h5R3RrLmNwcDoxNTMKKyM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDo5MworIzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOjE1MwogbXNnaWQgIldlYiBJbnNwZWN0
b3IiCiBtc2dzdHIgIlTEq21la8S8YSBpbnNwZWt0b3JzIgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vbWwucG8gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvcG8vbWwucG8KaW5kZXggNTI4Y2YzNWI3MTg3YmQ4NzU2Y2YwOTY5YWIyMzQzZjY3OGY5ODAw
NC4uY2Y1YjgxOGVhYjViNzZhYTg5YTA1NWY5ZTY0NTBlOWRlZjlmYTRhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL21sLnBvCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9wby9tbC5wbwpAQCAtMTc3Myw4ICsxNzczLDggQEAgbXNnaWQgIkFuIGFz
c29jaWF0ZWQgV2ViS2l0V2ViU2V0dGluZ3MgaW5zdGFuY2UiCiBtc2dzdHIgIiIKIAogIzogLi4v
Li4vLi4vLi4vV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MzI4NwotIzogLi4v
Li4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDo5
MgotIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5
R3RrLmNwcDoxNTcKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNw
ZWN0b3JVSVByb3h5R3RrLmNwcDo5MgorIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOjE1NwogbXNnaWQgIldlYiBJbnNwZWN0b3Ii
CiBtc2dzdHIgIiIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3Bv
L21yLnBvIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL21yLnBvCmluZGV4IDYzYmZj
MGFlNjlkYzA5NDU5OTg2YjRjMzRkYjRmYjg0ZTJlNzA1ZDYuLjI4MDM1ZDQ2OGUyNzVlYzZlMmYw
ZjU1YWQzZTZlYWI5OWM3ZjY4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9wby9tci5wbworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vbXIucG8K
QEAgLTE1MzksOCArMTUzOSw4IEBAIG1zZ3N0ciAi4KSq4KSh4KSm4KS+4KSt4KSwIgogbXNnaWQg
IldoZXRoZXIgd2luZG93IHdpbGwgYmUgZGlzcGxheWVkIGZ1bGxzY3JlZW4uIgogbXNnc3RyICLg
pKrgpJ/gpLIg4KSq4KSh4KSm4KS+4KSt4KSwIOCkpuCkvuCkluCkteCksuClhyDgpJzgpL7gpIjg
pLIg4KSV4KS/4KSC4KS14KS+IOCkqOCkvuCkueClgC4iCiAKLSM6IC4uLy4uLy4uLy4uL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6ODIKLSM6IC4uLy4uLy4u
Ly4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTQ3Cisj
OiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0
ay5jcHA6ODIKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0
b3JVSVByb3h5R3RrLmNwcDoxNDcKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICLgpLXg
pYfgpKwg4KSH4KSC4KS44KWN4KSq4KWH4KSV4KWN4KSf4KSwIgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vbmIucG8gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvcG8vbmIucG8KaW5kZXggYmQ4Mzc0MDEyMDAzZmZmMDBjY2I5NzM2YmE5NWNiNGMzZmQz
YmNhMS4uZTg3YmNkZWNiYTU0Njk0NmFlZTBiMGYzY2QwODA1YjdjYmU1M2MyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL25iLnBvCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9wby9uYi5wbwpAQCAtMTc5MCw4ICsxNzkwLDggQEAgbXNnaWQgIkFu
IGFzc29jaWF0ZWQgV2ViS2l0V2ViU2V0dGluZ3MgaW5zdGFuY2UiCiBtc2dzdHIgIiIKIAogIzog
Li4vLi4vLi4vV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6MzI4NwotIzogLi4v
Li4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDo5Mwot
IzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNw
cDoxNTMKKyM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVBy
b3h5R3RrLmNwcDo5MworIzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3Bl
Y3RvclVJUHJveHlHdGsuY3BwOjE1MwogbXNnaWQgIldlYiBJbnNwZWN0b3IiCiBtc2dzdHIgIklu
c3Bla3Nqb24gYXYgbmV0dHNpZGVyIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvcG8vbmwucG8gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vbmwucG8K
aW5kZXggYjYyNjY0ZGYxMTI2ZTM1M2VjMTNlM2ZhN2NiNTJiZDZmNTExNGNkNS4uNjk0NDlmNjFl
YWE1YTFhNTMwNDRiYmZmYTZkZDQxY2QzMzExYTVkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL3BvL25sLnBvCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9wby9ubC5wbwpAQCAtMTgwOCw4ICsxODA4LDggQEAgbXNnaWQgIkFuIGFzc29jaWF0ZWQgV2Vi
S2l0V2ViU2V0dGluZ3MgaW5zdGFuY2UiCiBtc2dzdHIgIkVlbiBnZWFzc29jaWVlcmRlIGluc3Rh
bnRpZSB2YW4gV2ViS2l0V2ViU2V0dGluZ3MiCiAKICM6IC4uLy4uLy4uLy4uL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjMzMDMKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6ODIKLSM6IC4uLy4uLy4uLy4uL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTQ3CisjOiAuLi8u
Li8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6
ODIKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVBy
b3h5R3RrLmNwcDoxNDcKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICJXZWItaW5zcGVj
dG9yIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vb3IucG8g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vb3IucG8KaW5kZXggZmM5ODlkNWI5Zjg3
OGQ2MmY2NDE0NmViMTU5MDhjY2Y1NGVkNjZjMC4uN2VkMzU5OThiYmQ4YzZiNTVjNzIzYWFjNDZj
NTc5NTg4ZDg3NjJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3Bv
L29yLnBvCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9vci5wbwpAQCAtMTUz
OSw4ICsxNTM5LDggQEAgbXNnc3RyICLgrLjgrK7grY3grKrgrYLgrLDgrY3grKMg4Kyq4Kyw4Kym
4Ky+IgogbXNnaWQgIldoZXRoZXIgd2luZG93IHdpbGwgYmUgZGlzcGxheWVkIGZ1bGxzY3JlZW4u
IgogbXNnc3RyICLgrbHgrL/grKPgrY3grKHgrYvgrJXgrYEg4Ky44Kyu4K2N4Kyq4K2C4Kyw4K2N
4Kyj4K2N4KyjIOCsquCssOCspuCsvuCssOCthyDgrKbgrLDgrY3grLbgrL7grK/grL/grKwg4KyV
4Ky/4KWkIgogCi0jOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVj
dG9yUHJveHlHdGsuY3BwOjgyCi0jOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjE0NworIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVBy
b2Nlc3MvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOjgyCisjOiAuLi8uLi8uLi8uLi9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTQ3CiBtc2dp
ZCAiV2ViIEluc3BlY3RvciIKIG1zZ3N0ciAi4K2x4K2H4KysIOCsquCssOCsv+CspuCssOCtjeCs
tuCslSIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL3BhLnBv
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL3BhLnBvCmluZGV4IDRmNTY1MjQ3MTY3
NzlkNTZhMGJkYzJkODNhM2QxYTY3MjczNjE5MTAuLjQ2OGZmYzg0N2MwZjU0ZTA1ZTcwOTU1MDk1
NThkOWZhMzg4ODNiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9w
by9wYS5wbworKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vcGEucG8KQEAgLTE3
OTUsOCArMTc5NSw4IEBAIG1zZ2lkICJBbiBhc3NvY2lhdGVkIFdlYktpdFdlYlNldHRpbmdzIGlu
c3RhbmNlIgogbXNnc3RyICLgqLjgqKzgqbDgqKfgqKQgV2ViS2l0V2ViU2V0dGluZ3Mg4Kiu4KmM
4KiV4Ki+IgogCiAjOiAuLi8uLi8uLi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cDozMjg3Ci0jOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJv
eHlHdGsuY3BwOjkzCi0jOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVj
dG9yUHJveHlHdGsuY3BwOjE1MworIzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dl
Ykluc3BlY3RvclVJUHJveHlHdGsuY3BwOjkzCisjOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vz
cy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTUzCiBtc2dpZCAiV2ViIEluc3BlY3Rv
ciIKIG1zZ3N0ciAi4Ki14KmI4Kmx4KisIOCoh+CpsOCouOCoquCpiOColeCon+CosCIKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL3B0LnBvIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL3BvL3B0LnBvCmluZGV4IDA4NTI0NzgyOWVhZTM5YTA1YWE4ZjQ4
MzY0ZTViMDIxZDNiNjE0OTguLmYxNTcyNGEwMDkzY2JlOWFmZjM2OGJlYjVmNjE2NWIzMzZmNjg0
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9wdC5wbworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vcHQucG8KQEAgLTE4MDgsOCArMTgwOCw4
IEBAIG1zZ2lkICJBbiBhc3NvY2lhdGVkIFdlYktpdFdlYlNldHRpbmdzIGluc3RhbmNlIgogbXNn
c3RyICJVbWEgaW5zdMOibmNpYSBhc3NvY2lhZGEgV2ViS2l0V2ViU2V0dGluZ3MiCiAKICM6IC4u
Ly4uLy4uL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjMyODcKLSM6IC4uLy4u
Ly4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6OTMKLSM6
IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6
MTUzCisjOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94
eUd0ay5jcHA6OTMKKyM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0
b3JVSVByb3h5R3RrLmNwcDoxNTMKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICJJbnNw
ZWN0b3IgV2ViIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8v
cm8ucG8gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vcm8ucG8KaW5kZXggMTMyYjk5
MWU4MDE5YzljNTJkZDY1MTNhYTQ1NGM5Y2RiYzYzYmU1ZS4uMTFhNTk5OWUzOGU2Yzk0YjljZmUw
N2Q4MzExMDk2ODgyZDhlMzAxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL3BvL3JvLnBvCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9yby5wbwpA
QCAtMTc4MCw4ICsxNzgwLDggQEAgbXNnaWQgIkFuIGFzc29jaWF0ZWQgV2ViS2l0V2ViU2V0dGlu
Z3MgaW5zdGFuY2UiCiBtc2dzdHIgIk8gaW5zdGFuyJvEgyBhc29jaWF0xIMgV2ViS2l0V2ViU2V0
dGluZ3MiCiAKICM6IC4uLy4uLy4uL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
OjMyODcKLSM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94
eUd0ay5jcHA6OTMKLSM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0
b3JQcm94eUd0ay5jcHA6MTUzCisjOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2Vi
SW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6OTMKKyM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxNTMKIG1zZ2lkICJXZWIgSW5zcGVjdG9y
IgogbXNnc3RyICJJbnNwZWN0b3IgV2ViIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvcG8vcnUucG8gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vcnUu
cG8KaW5kZXggYWQ4ZjdlODZlMWIzZGI0ZDBhNDAzZjk3NGZmMTBjMDlhMGYyYmRjNC4uYWEwNThi
NmQ0MGQ1Mzc5Njg2ZjlhZjIzNjM0Y2ZiMjI5NDk0NDdmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL3BvL3J1LnBvCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9wby9ydS5wbwpAQCAtMTc5Myw4ICsxNzkzLDggQEAgbXNnaWQgIkFuIGFzc29jaWF0ZWQg
V2ViS2l0V2ViU2V0dGluZ3MgaW5zdGFuY2UiCiBtc2dzdHIgItCh0LLRj9C30LDQvdC90YvQuSDR
jdC60LfQtdC80L/Qu9GP0YAgV2ViS2l0V2ViU2V0dGluZ3MiCiAKICM6IC4uLy4uLy4uL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjMyODcKLSM6IC4uLy4uLy4uL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6OTMKLSM6IC4uLy4uLy4uL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTUzCisjOiAuLi8u
Li8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6OTMK
KyM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3Rr
LmNwcDoxNTMKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICLQktC10LEt0LjQvdGB0L/Q
tdC60YLQvtGAIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8v
c2wucG8gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vc2wucG8KaW5kZXggOGM2MWI4
ODJmZTFmNjBlNjZmNTNkMDBlYWM0ZmQzODhiNWQxYTkxYS4uY2IzMDQ5ZDhlYjZlNmJhYmQyNjdm
ZjUzYWZkNWI4MWNiZGFlNTAwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL3BvL3NsLnBvCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9zbC5wbwpA
QCAtMTg0OCw4ICsxODQ4LDggQEAgbXNnaWQgIkFuIGFzc29jaWF0ZWQgV2ViS2l0V2ViU2V0dGlu
Z3MgaW5zdGFuY2UiCiBtc2dzdHIgIlBvdmV6YW4gcHJpbWVyZWsgV2ViS2l0V2ViU2V0dGluZ3Mi
CiAKICM6IC4uLy4uLy4uLy4uL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjMy
ODkKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94
eUd0ay5jcHA6ODEKLSM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNw
ZWN0b3JQcm94eUd0ay5jcHA6MTQ2CisjOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6ODEKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxNDYKIG1zZ2lkICJXZWIg
SW5zcGVjdG9yIgogbXNnc3RyICJTcGxldG5pIG5hZHpvcm5payIKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL3NyLnBvIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL3BvL3NyLnBvCmluZGV4IDMzZTViZjFlMTNhOTc2ZWFmNjE2MGRhYjhkMjQwNTIxYzg2
OTcwMTIuLjg1ZDJjMWUyOTQyOTkwZWY3YjI5Nzk0MDY4ZjdlMjE5YmRlODlmZTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9zci5wbworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvcG8vc3IucG8KQEAgLTE4MDAsOCArMTgwMCw4IEBAIG1zZ2lkICJB
biBhc3NvY2lhdGVkIFdlYktpdFdlYlNldHRpbmdzIGluc3RhbmNlIgogbXNnc3RyICLQn9C+0LLQ
tdC30LDQvdC+INGB0LAgV2ViS2l0V2ViU2V0dGluZ3MiCiAKICM6IC4uLy4uLy4uL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjMyODcKLSM6IC4uLy4uLy4uL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6OTMKLSM6IC4uLy4uLy4uL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTUzCisjOiAuLi8uLi8u
Li9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6OTMKKyM6
IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNw
cDoxNTMKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICLQktC10LEg0LjQvdGB0L/QtdC6
0YLQvtGAIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vc3JA
bGF0aW4ucG8gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vc3JAbGF0aW4ucG8KaW5k
ZXggZjJhMjUzZWEwMGQyNTUyNzFkY2U3ZWUyYmY2OTAzOGQ1NTNlYTk3NC4uMzBkMTliN2RkNDRm
ZDdjNmVkNTJmZGQ0OTYwZjk5MTI2MTU3NTEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL3BvL3NyQGxhdGluLnBvCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9wby9zckBsYXRpbi5wbwpAQCAtMTgwMSw4ICsxODAxLDggQEAgbXNnaWQgIkFuIGFzc29j
aWF0ZWQgV2ViS2l0V2ViU2V0dGluZ3MgaW5zdGFuY2UiCiBtc2dzdHIgIlBvdmV6YW5vIHNhIFdl
YktpdFdlYlNldHRpbmdzIgogCiAjOiAuLi8uLi8uLi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcDozMjg3Ci0jOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5z
cGVjdG9yUHJveHlHdGsuY3BwOjkzCi0jOiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjE1MworIzogLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOjkzCisjOiAuLi8uLi8uLi9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHA6MTUzCiBtc2dpZCAiV2Vi
IEluc3BlY3RvciIKIG1zZ3N0ciAiVmViIGluc3Bla3RvciIKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL3RhLnBvIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL3BvL3RhLnBvCmluZGV4IGVkYTE0Njk0NzA3MzlkNTc2NjRhMWNjN2UwZjY3Y2NlN2FkZjY1
MzYuLmMxMjhkNDgzMDg5ZTE2ODY0YzQ0NzIzYjhkZjFjNjkyNjgyZTRjZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby90YS5wbworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvcG8vdGEucG8KQEAgLTE1NjQsOSArMTU2NCw5IEBAIG1zZ3N0ciAi4K6u
4K+B4K604K+B4K6k4K+N4K6k4K6/4K6w4K+IIgogbXNnaWQgIldoZXRoZXIgd2luZG93IHdpbGwg
YmUgZGlzcGxheWVkIGZ1bGxzY3JlZW4uIgogbXNnc3RyICLgrprgrr7grrPgrrDgrq7gr40g4K6u
4K+B4K604K+B4K6k4K+N4K6k4K6/4K6w4K+I4K6v4K6+4K6V4K6V4K+NIOCuleCuvuCuo+CvjeCu
quCuv+CuleCvjeCuleCuquCvjeCuquCun+CvgeCuruCuvi4iCiAKLSM6IC4uLy4uLy4uLy4uL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTMyCi0jOiAuLi8u
Li8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOjEz
NwotIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5
R3RrLmNwcDoxNDAKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNw
ZWN0b3JVSVByb3h5R3RrLmNwcDoxMzIKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxMzcKKyM6IC4uLy4uLy4uLy4uL1dlYktp
dDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcDoxNDAKIG1zZ2lkICJX
ZWIgSW5zcGVjdG9yIgogbXNnc3RyICLgrrXgrrLgr4gg4K6G4K6v4K+N4K614K6/IgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vdGUucG8gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvcG8vdGUucG8KaW5kZXggNjdhNWM1M2Y4ZGMxZGVkZGNkOWM5YzUz
MDUzOTQ4ZDFiNTg0MTE5Yi4uYjI0MDZhZTdhMWZjZWZiNjRiYjBkNDA4YmIwNmEzZjA3YjEzNjFj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL3RlLnBvCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby90ZS5wbwpAQCAtMTUzMSw4ICsxNTMxLDgg
QEAgbXNnc3RyICLgsKrgsYLgsLDgsY3gsKTgsL/gsKTgsYbgsLAiCiBtc2dpZCAiV2hldGhlciB3
aW5kb3cgd2lsbCBiZSBkaXNwbGF5ZWQgZnVsbHNjcmVlbi4iCiBtc2dzdHIgIuCwteCwv+CwguCw
oeCxiyDgsKrgsYLgsLDgsY3gsKTgsL/gsKTgsYbgsLAg4LCo4LCC4LCm4LGBIOCwquCxjeCwsOCw
puCwsOCxjeCwtuCwv+CwguCwmuCwrOCwoeCwvuCwsuCwvi4iCiAKLSM6IC4uLy4uLy4uLy4uL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6ODIKLSM6IC4uLy4u
Ly4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTQ3
CisjOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94
eUd0ay5jcHA6ODIKKyM6IC4uLy4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNw
ZWN0b3JVSVByb3h5R3RrLmNwcDoxNDcKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICLg
sLXgsYbgsKzgsY0g4LCv4LC/4LCo4LGN4oCM4LC44LGN4LCq4LGG4LCV4LGN4LCf4LCw4LGNIgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vdHIucG8gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vdHIucG8KaW5kZXggNTZlYjBhYWMxMDUzMDY0NTYz
YzkwZTEyYWNjODg2YjE1NWZhYTJkNy4uOTI5YzQyMTNmOGEzOGUwMDhlNmQzNDdiY2Y3YjZkMzBk
MjIyYTNmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL3RyLnBv
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby90ci5wbwpAQCAtMTYzMCw4ICsx
NjMwLDggQEAgbXNnc3RyICJUYW0gRWtyYW4iCiBtc2dpZCAiV2hldGhlciB3aW5kb3cgd2lsbCBi
ZSBkaXNwbGF5ZWQgZnVsbHNjcmVlbi4iCiBtc2dzdHIgIlBlbmNlcmVuaW4gdGFtIGVrcmFuIGfD
tnLDvG50w7xsZW5pcCBnw7Zyw7xudMO8bGVubWV5ZWNlxJ9pLiIKIAotIzogLi4vLi4vLi4vLi4v
V2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcDoxNzkKLSM6IC4u
Ly4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6
MTg0Ci0jOiAuLi8uLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJv
eHlHdGsuY3BwOjE4NworIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYklu
c3BlY3RvclVJUHJveHlHdGsuY3BwOjE3OQorIzogLi4vLi4vLi4vLi4vV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOjE4NAorIzogLi4vLi4vLi4vLi4vV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOjE4NwogbXNnaWQg
IldlYiBJbnNwZWN0b3IiCiBtc2dzdHIgIldlYiBEZW5ldMOnaXNpIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL3ZpLnBvIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL3BvL3ZpLnBvCmluZGV4IDlkZmM3NjBjMzhhYjZhMWNiNGYyZWM0NDE0NGI1MmI2OGE4
MjQyNmUuLjYxZTUxNTA5MDY0Mjg3MDcwY2U5MTc1NjA2NWZjNmEzZDY2NjY0NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby92aS5wbworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvcG8vdmkucG8KQEAgLTE3OTIsOCArMTc5Miw4IEBAIG1zZ2lkICJB
biBhc3NvY2lhdGVkIFdlYktpdFdlYlNldHRpbmdzIGluc3RhbmNlIgogbXNnc3RyICJN4buZdCB0
aOG7gyBoaeG7h24gV2ViS2l0V2ViU2V0dGluZ3MgbGnDqm4ga+G6v3QiCiAKICM6IC4uLy4uLy4u
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOjMyODcKLSM6IC4uLy4uLy4uL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6OTMKLSM6IC4uLy4u
Ly4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6MTUzCisj
OiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5j
cHA6OTMKKyM6IC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JVSVBy
b3h5R3RrLmNwcDoxNTMKIG1zZ2lkICJXZWIgSW5zcGVjdG9yIgogbXNnc3RyICJUaGFuaCB0cmEg
V2ViIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QK
aW5kZXggZmI2MjEzYzRjYzM2ZjMzODUyOGMxOGI5NDhmOWFjODg5MzhiMTJkZS4uNTRkOGZkYzcx
YjM1MTJiNzRiMTc2MTg0MWIyN2YxNzQyYTE4ZmVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTAzLDggKzEwMyw4IEBAICQoUFJPSkVD
VF9ESVIpL1VJUHJvY2Vzcy9Db2NvYS9WaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc1Byb3h5Lm1l
c3NhZ2VzLmluCi0kKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYklu
c3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCi0kKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9VSVByb2Nl
c3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW4KKyQoUFJP
SkVDVF9ESVIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUlQcm94eS5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSUV4
dGVuc2lvbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9j
ZXNzL01lZGlhL0F1ZGlvU2Vzc2lvblJvdXRpbmdBcmJpdHJhdG9yUHJveHkubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggZjI1NWI3M2MyYTBmMTBjODYy
YzFjMThmZTk1YTRmNzNmY2Y3MTgwMS4uYjZjOWQwZGRkMzRlYWE5ZjM2Y2NiNWY1NzRjZjk4YjVk
NjYzMTQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQu
eGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2Zp
bGVsaXN0CkBAIC0yNzYsOSArMjc2LDkgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvUmVtb3RlVGV4dFRyYWNrUHJveHlNZXNzYWdlc1JlcGxpZXMKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVZpZGVvVHJhY2tQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZVZpZGVvVHJhY2tQcm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVZpZGVvVHJhY2tQcm94eU1l
c3NhZ2VzUmVwbGllcy5oCi0kKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKLSQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3RvclBy
b3h5TWVzc2FnZXMuaAotJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oCiskKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlV2ViSW5zcGVjdG9y
VUlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzUmVwbGllcy5oCkBAIC00MDYsOSArNDA2LDkg
QEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViSW5zcGVj
dG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3MKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3Rvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3Rvck1lc3NhZ2Vz
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3Bl
Y3Rvck1lc3NhZ2VzUmVwbGllcy5oCi0kKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKLSQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclByb3h5TWVz
c2FnZXMuaAotJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2Vi
SW5zcGVjdG9yUHJveHlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3Bl
Y3RvclVJUHJveHlNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclVJRXh0ZW5z
aW9uQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlck1l
c3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1dl
Ykluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlck1lc3NhZ2VzUmVwbGllcy5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggYjZhMGMwNDNiYmI2ZDgzOGI2N2QwNzM1MTM4NjcxOWFh
YmZiMDI5My4uNzc5MDdiNGQwNTc3YWMyNjI1ZWJjMDc5NjQ3OWFlZTA1YzgzNTAxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTQ2LDggKzE0Niw4IEBAIE1FU1NBR0VfUkVDRUlW
RVJTID0gXAogCVVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoblByb2Nlc3NQcm94
eSBcCiAJVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eSBcCiAJVUlQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5IFwKLQlVSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvclByb3h5IFwKLQlVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5IFwKKwlVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJUHJveHkgXAor
CVVJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSBcCiAJVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eSBcCiAJ
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5IFwKIAlVSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtl
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQppbmRleCBjYjcwYWI4YWU3MTVhNzMz
ZDU2ZTkwMTU0OTUwYjU2NTk1ZDAwNTM4Li5kYWJmMzIzZTM2N2RhYjI2NGNiMWFmODY0MTAzNDk1
ZTRmNjljNDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UKQEAgLTUwLDcgKzUwLDcgQEAgbGlz
dChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcAogCi0gICAgVUlQcm9j
ZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCisgICAgVUlQcm9jZXNz
L0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yVUlQcm94eVdpbi5jcHAKIAogICAgIFVJUHJvY2Vz
cy9MYXVuY2hlci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcAogCkBAIC0xNzgsNyArMTc4LDcg
QEAgaWYgKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKQogICAgICAgICBVSVByb2Nlc3MvSW5zcGVj
dG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCiAgICAgICAgIFVJUHJvY2Vzcy9J
bnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKIAotICAg
ICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5j
cHAKKyAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eVdpbi5jcHAKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJF
Q1RPUklFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMDNhZjU2NWVkMWFlMzllNzdlMTgz
YTRhZWJkMWU2NGEyZTI0N2UwYS4uYmY1YmNhMjNkYjY1N2M2YWQ5ZjMxZWZiYjU3MGNjY2QxYzEz
YTBmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCkBAIC01Nyw3ICs1Nyw3IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9E
cmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKIAotICAgIFVJUHJvY2Vzcy9J
bnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcAorICAgIFVJUHJvY2Vzcy9JbnNw
ZWN0b3Ivd2luL1dlYkluc3BlY3RvclVJUHJveHlXaW4uY3BwCiAKICAgICBVSVByb2Nlc3MvTGF1
bmNoZXIvd2luL1Byb2Nlc3NMYXVuY2hlcldpbi5jcHAKIApAQCAtMTg1LDcgKzE4NSw3IEBAIGlm
IChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAogICAgICAgICBVSVByb2Nlc3MvSW5zcGVj
dG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCiAKLSAgICAgICAg
VUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCisg
ICAgICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlX
aW4uY3BwCiAgICAgKQogCiAgICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJ
RVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0CmluZGV4IDU5M2JhY2U0NTc1MGNhMWFjY2FhNmQxNzdkNDU2OGZjZjc3MTM3
OWYuLjMzNmI5Y2U4OGI4OWM3NTlkYzE2OWY3ZTQ3MTk4ODg4NjZiODUwMzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dApAQCAtNDU0LDggKzQ1NCw4IEBAIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuY3BwCiBVSVByb2Nlc3MvR1BVL0dQVVByb2Nlc3NQcm94eS5jcHAKIAogVUlQcm9jZXNzL0lu
c3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKLVVJUHJvY2Vzcy9JbnNwZWN0b3IvUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCi1VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
clByb3h5LmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
LmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5LmNwcAogVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eS5jcHAK
IFVJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAogVUlQcm9jZXNz
L0luc3BlY3Rvci9XZWJQYWdlRGVidWdnYWJsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRl
eCAyMDM5MGE3ZWNkOWFiMzcwZGYyOTAzMGY4Y2JhYWUwYzk0Y2JhMDZhLi41NThkMjZkOTMxNTc1
ZjczYjk0NzBjZjA5ZDJkOTJlZjhiYjVlOTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC00
MjcsOCArNDI3LDggQEAgVUlQcm9jZXNzL0luc3BlY3Rvci9Db2NvYS9JbnNwZWN0b3JFeHRlbnNp
b25EZWxlZ2F0ZS5tbQogVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGln
aHRWaWV3Lm1tCiBVSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hH
ZXN0dXJlUmVjb2duaXplci5tbQogCi1VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eU1hYy5tbQotVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9y
UHJveHlNYWMubW0KK1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHlNYWMubW0KK1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlN
YWMubW0KIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yUmVzb3VyY2VVUkxTY2hl
bWVIYW5kbGVyLm1tCiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250
cm9sbGVyLm1tCiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJL
aXQvU291cmNlc0dUSy50eHQKaW5kZXggNDJiOTljZDNjZjBlYThmZGNhYWZlZTY4YzM4NzJiODg1
NDBlNGRmNi4uZjhkYmQyYWI3YzJlMDRmNWY5YjUxZGEwY2Y1NDY5OTRjZjZjMmFhYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNHVEsudHh0CkBAIC0yMjEsOCArMjIxLDggQEAgVUlQcm9jZXNzL2dlb2NsdWUvR2VvY2x1
ZUdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwCiAKIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuY3BwCiAKLVVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdl
Ykluc3BlY3RvclByb3h5R3RrLmNwcAotVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVj
dG9yUHJveHlHdGsuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5R3RrLmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQ
cm94eUd0ay5jcHAKIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRv
dy5jcHAKIAogVUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5jcHAg
QG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSW5z
cGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSW5zcGVjdG9y
Q2xpZW50LmgKaW5kZXggYjg0MTFlNmYwMDc2OWIxZTA0YjkwOGI3ODBiOTU0YmJhYjdiMjAyNi4u
NjExOTE0MGQzNjk0ZmMzNmE2Y2U3NDlkODVlZTQ5OWYxZjQ4NjEyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUluc3BlY3RvckNsaWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElJbnNwZWN0b3JDbGllbnQuaApAQCAtMjgsNyArMjgs
NyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xh
c3MgV2ViSW5zcGVjdG9yUHJveHk7CitjbGFzcyBXZWJJbnNwZWN0b3JVSVByb3h5OwogfQogCiBu
YW1lc3BhY2UgQVBJIHsKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50IHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JDbGllbnQoKSA9IGRlZmF1bHQ7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgb3BlblVSTEV4dGVybmFsbHkoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94
eSYsIGNvbnN0IFdURjo6U3RyaW5nJiB1cmwpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBvcGVuVVJM
RXh0ZXJuYWxseShXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHkmLCBjb25zdCBXVEY6OlN0cmlu
ZyYgdXJsKSB7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJVUlDbGllbnQuaAppbmRleCA3Y2ViZTJmYWJhZDViMzM1ZWIzNjJhMzI3ZWIz
NDRhZTgyZGJlNjZlLi44MzVkMjU1ZTI5ZTU2OGI4NDY5ZjUwYjBkZDJiOTVhOGIwZTlhMDcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaApAQCAtMTk1LDkgKzE5
NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcnVuV2ViQXV0aGVudGljYXRpb25QYW5l
bChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWwmLCBXZWJLaXQ6
OldlYkZyYW1lUHJveHkmLCBXZWJLaXQ6OkZyYW1lSW5mb0RhdGEmJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKSB7IGNvbXBsZXRpb25IYW5kbGVyKFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25Q
YW5lbFJlc3VsdDo6VW5hdmFpbGFibGUpOyB9CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBk
aWRBdHRhY2hMb2NhbEluc3BlY3RvcihXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2Vi
SW5zcGVjdG9yUHJveHkmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbENsb3NlTG9jYWxJbnNw
ZWN0b3IoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Jikg
eyB9Ci0gICAgdmlydHVhbCBSZWY8QVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uPiBjb25maWd1
cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3IoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6Oldl
Ykluc3BlY3RvclByb3h5JikKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQXR0YWNoTG9jYWxJbnNwZWN0
b3IoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHkmKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENsb3NlTG9jYWxJbnNwZWN0b3IoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHkmKSB7IH0KKyAgICB2aXJ0dWFs
IFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gb3JMb2NhbElu
c3BlY3RvcihXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eSYpCiAgICAgewogICAgICAgICByZXR1cm4gQVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uOjpj
cmVhdGUoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS0FQSUNhc3QuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5o
CmluZGV4IGM4YTE4OTVhNmQwZGU3MDlmOWFlMzk4YmU0NWJlYTY2YjllYmZhMGQuLjJlYWI3N2U4
MDRhNTU4ZTdmYmEyNWI3OWQ0NzRmNzMwMWIxMGYzMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCkBAIC05NSw3ICs5NSw3IEBAIGNsYXNzIFdlYkZyYW1lUHJv
eHk7CiBjbGFzcyBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYkdlb2xvY2F0
aW9uUG9zaXRpb247CiBjbGFzcyBXZWJJY29uRGF0YWJhc2U7Ci1jbGFzcyBXZWJJbnNwZWN0b3JQ
cm94eTsKK2NsYXNzIFdlYkluc3BlY3RvclVJUHJveHk7CiBjbGFzcyBXZWJOb3RpZmljYXRpb247
CiBjbGFzcyBXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJOb3RpZmljYXRp
b25Qcm92aWRlcjsKQEAgLTEzNSw3ICsxMzUsNyBAQCBXS19BRERfQVBJX01BUFBJTkcoV0tHZW9s
b2NhdGlvblBvc2l0aW9uUmVmLCBXZWJHZW9sb2NhdGlvblBvc2l0aW9uKQogV0tfQUREX0FQSV9N
QVBQSU5HKFdLSFRUUENvb2tpZVN0b3JlUmVmLCBBUEk6OkhUVFBDb29raWVTdG9yZSkKIFdLX0FE
RF9BUElfTUFQUElORyhXS0hpdFRlc3RSZXN1bHRSZWYsIEFQSTo6SGl0VGVzdFJlc3VsdCkKIFdL
X0FERF9BUElfTUFQUElORyhXS0ljb25EYXRhYmFzZVJlZiwgV2ViSWNvbkRhdGFiYXNlKQotV0tf
QUREX0FQSV9NQVBQSU5HKFdLSW5zcGVjdG9yUmVmLCBXZWJJbnNwZWN0b3JQcm94eSkKK1dLX0FE
RF9BUElfTUFQUElORyhXS0luc3BlY3RvclJlZiwgV2ViSW5zcGVjdG9yVUlQcm94eSkKIFdLX0FE
RF9BUElfTUFQUElORyhXS01lZGlhS2V5U3lzdGVtUGVybWlzc2lvbkNhbGxiYWNrUmVmLCBNZWRp
YUtleVN5c3RlbVBlcm1pc3Npb25DYWxsYmFjaykKIFdLX0FERF9BUElfTUFQUElORyhXS01lc3Nh
Z2VMaXN0ZW5lclJlZiwgQVBJOjpNZXNzYWdlTGlzdGVuZXIpCiBXS19BRERfQVBJX01BUFBJTkco
V0tOYXZpZ2F0aW9uQWN0aW9uUmVmLCBBUEk6Ok5hdmlnYXRpb25BY3Rpb24pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0luc3BlY3Rvci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0luc3BlY3Rvci5jcHAKaW5kZXggMzkzMjdjNWM5MjMw
NTkxZTRmNTJlNDU3NGM0MTZlMzY2ODc3ODhmMC4uZTE0NjVlZGQyOWNhZjMxMDljMTdkNDRiYjNj
ODhhYWJhOThjZmJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tJbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLSW5z
cGVjdG9yLmNwcApAQCAtMjksMTQgKzI5LDE0IEBACiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CiAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5o
IgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV0tUeXBlSUQgV0tJbnNwZWN0b3JH
ZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShXZWJJbnNwZWN0b3JQcm94eTo6QVBJVHlw
ZSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYkluc3BlY3RvclVJUHJveHk6OkFQSVR5cGUpOwogfQog
CiBXS1BhZ2VSZWYgV0tJbnNwZWN0b3JHZXRQYWdlKFdLSW5zcGVjdG9yUmVmIGluc3BlY3RvclJl
ZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCmluZGV4IDAzNmNhZjk3
MzAzNWJmZGEzMTZkZmZmNWNhZjY1MWQ3MTUxMjE4MjUuLjI4OWQ2ZGFkYTc3YjE0YjIyODA0NWQ3
NDUxMDgxNjM1MmI2ZDY4MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdl
LmNwcApAQCAtNzMsNyArNzMsNyBAQAogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgog
I2luY2x1ZGUgIldlYkZvcm1DbGllbnQuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgotI2luY2x1
ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eS5o
IgogI2luY2x1ZGUgIldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuaCIKICNpbmNsdWRl
ICJXZWJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0luc3BlY3RvclByaXZhdGVN
YWMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0luc3BlY3RvclByaXZh
dGVNYWMuaAppbmRleCA1MmM0NGZjMTJjN2I0YmQwOGRmZmJmYzIwZWM5Y2E4ZGIwMDczNDQ0Li41
Zjg4ODBmZjEzMjA0YjM5YjM4ODQ2YTdlZTEyMzU1MTQwYmE0MzY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tJbnNwZWN0b3JQcml2YXRlTWFjLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFjL1dLSW5zcGVjdG9yUHJpdmF0ZU1h
Yy5oCkBAIC00MSw3ICs0MSw3IEBAIGNvbnN0IE5TSW50ZWdlciBXS0luc3BlY3RvclZpZXdUYWcg
PSAxMDAwOwogCiAvLyBUaGlzIGNsYXNzIGlzIHRoZSBXZWIgSW5zcGVjdG9yIHdpbmRvdyBkZWxl
Z2F0ZS4gSXQgY2FuIGJlIHVzZWQgdG8gYWRkIGludGVyZmFjZQogLy8gYWN0aW9ucyB0aGF0IG5l
ZWQgdG8gd29yayB3aGVuIHRoZSBXZWIgSW5zcGVjdG9yIHdpbmRvdyBpcyBrZXkuCi1XS19FWFBP
UlQgQGludGVyZmFjZSBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgOiBOU09iamVjdCA8
TlNXaW5kb3dEZWxlZ2F0ZT4KK1dLX0VYUE9SVCBAaW50ZXJmYWNlIFdLV2ViSW5zcGVjdG9yVUlQ
cm94eU9iakNBZGFwdGVyIDogTlNPYmplY3QgPE5TV2luZG93RGVsZWdhdGU+CiAKIEBwcm9wZXJ0
eSAocmVhZG9ubHkpIFdLSW5zcGVjdG9yUmVmIGluc3BlY3RvclJlZjsKIEBwcm9wZXJ0eSAocmVh
ZG9ubHkpIF9XS0luc3BlY3RvciAqaW5zcGVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0luc3BlY3RvckludGVybmFsLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLSW5zcGVjdG9ySW50ZXJuYWwuaAppbmRleCA3ZmRi
ZDU4ZDljNzM3Y2MyM2YxZTA1MzU5NTIyNTEzOGQ3ODkzZTkwLi5mYzQxOWFiYzY4MjBiNGJjZTVk
N2UxYmRjYjExMjY0NjdmZTM1OTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLSW5zcGVjdG9ySW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLSW5zcGVjdG9ySW50ZXJuYWwuaApAQCAtMjYsNyArMjYsNyBA
QAogI2ltcG9ydCAiX1dLSW5zcGVjdG9yUHJpdmF0ZS5oIgogCiAjaW1wb3J0ICJXS09iamVjdC5o
IgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclVJ
UHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBJbnNwZWN0b3JEZWxlZ2F0ZTsK
QEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgSW5zcGVjdG9yRGVsZWdhdGU7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi10ZW1wbGF0ZTw+IHN0cnVjdCBXcmFwcGVyVHJhaXRzPFdlYkluc3BlY3RvclBy
b3h5PiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBXcmFwcGVyVHJhaXRzPFdlYkluc3BlY3RvclVJUHJv
eHk+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBfV0tJbnNwZWN0b3I7CiB9OwogCkBAIC00
Miw3ICs0Miw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IFdyYXBwZXJUcmFpdHM8V2ViSW5zcGVjdG9y
UHJveHk+IHsKIAogQGludGVyZmFjZSBfV0tJbnNwZWN0b3IgKCkgPFdLT2JqZWN0PiB7CiBAcGFj
a2FnZQotICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5PiBf
aW5zcGVjdG9yOworICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxXZWJLaXQ6OldlYkluc3BlY3RvclVJ
UHJveHk+IF9pbnNwZWN0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6SW5zcGVjdG9y
RGVsZWdhdGU+IF9kZWxlZ2F0ZTsKIH0KIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tSZW1vdGVXZWJJbnNwZWN0
b3JWaWV3Q29udHJvbGxlci5tbQppbmRleCAwNmUyZWVjZTcxMmI1OTI1MGY1MzkwYmRjNDgwMTRi
NWQ3ZTUwYjI1Li5jMTMwMzk5Y2Y5ZjMwNjNmNWEyZGNjMzkyZTE5ZWVmZDc2M2MxNTNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVtb3RlV2ViSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyLm1tCkBAIC0zMSw3ICsz
MSw3IEBACiAjaW1wb3J0ICJBUElEZWJ1Z2dhYmxlSW5mby5oIgogI2ltcG9ydCAiQVBJSW5zcGVj
dG9yQ29uZmlndXJhdGlvbi5oIgogI2ltcG9ydCAiRGVidWdnYWJsZUluZm9EYXRhLmgiCi0jaW1w
b3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9X
S0luc3BlY3RvckNvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLSW5zcGVjdG9y
RGVidWdnYWJsZUluZm9JbnRlcm5hbC5oIgpAQCAtNTMsMTUgKzUzLDE1IEBAIEBlbmQKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIF9XS1JlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50
IGZpbmFsIDogcHVibGljIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKK2NsYXNzIF9X
S1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eUNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgX1dLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQoX1dLUmVtb3RlV2Vi
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKmNvbnRyb2xsZXIpCisgICAgX1dLUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eUNsaWVudChfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAq
Y29udHJvbGxlcikKICAgICAgICAgOiBtX2NvbnRyb2xsZXIoY29udHJvbGxlcikKICAgICB7CiAg
ICAgfQogCi0gICAgdmlydHVhbCB+X1dLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQoKQor
ICAgIHZpcnR1YWwgfl9XS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQoKQogICAgIHsK
ICAgICB9CiAKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgICAgICBbbV9jb250cm9sbGVy
IGNsb3NlRnJvbUZyb250ZW5kXTsKICAgICB9CiAgICAgCi0gICAgUmVmPEFQSTo6SW5zcGVjdG9y
Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbkZvclJlbW90ZUluc3BlY3RvcihSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eSYgaW5zcGVjdG9yKSBvdmVycmlkZQorICAgIFJlZjxBUEk6Okluc3BlY3Rv
ckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gb3JSZW1vdGVJbnNwZWN0b3IoUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eSYgaW5zcGVjdG9yKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbiY+KFttX2NvbnRyb2xs
ZXIuY29uZmlndXJhdGlvbiBfYXBpT2JqZWN0XSk7CiAgICAgfQpAQCAtODcsNyArODcsNyBAQCBw
cml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKIEBpbXBsZW1lbnRhdGlvbiBfV0tSZW1v
dGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlciB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYktp
dDo6X1dLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQ+IG1fcmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6Ol9XS1JlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHlDbGllbnQ+IG1fcmVtb3RlSW5zcGVjdG9yQ2xpZW50OwogICAgIF9XS0luc3BlY3RvckNv
bmZpZ3VyYXRpb24gKl9jb25maWd1cmF0aW9uOwogfQogCkBAIC05OCw4ICs5OCw4IEBAIC0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbmZpZ3VyYXRpb246KF9XS0luc3BlY3RvckNvbmZpZ3VyYXRp
b24gKiljb25maWd1cmF0aW9uCiAKICAgICBfY29uZmlndXJhdGlvbiA9IFtjb25maWd1cmF0aW9u
IGNvcHldOwogCi0gICAgbV9yZW1vdGVJbnNwZWN0b3JQcm94eSA9IFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpOwotICAgIG1fcmVtb3RlSW5zcGVjdG9yQ2xpZW50ID0g
bWFrZVVuaXF1ZTxXZWJLaXQ6Ol9XS1JlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50PihzZWxm
KTsKKyAgICBtX3JlbW90ZUluc3BlY3RvclByb3h5ID0gV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5OjpjcmVhdGUoKTsKKyAgICBtX3JlbW90ZUluc3BlY3RvckNsaWVudCA9IG1ha2VV
bmlxdWU8V2ViS2l0OjpfV0tSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50PihzZWxmKTsK
ICAgICBtX3JlbW90ZUluc3BlY3RvclByb3h5LT5zZXRDbGllbnQobV9yZW1vdGVJbnNwZWN0b3JD
bGllbnQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIHNlbGY7CkBAIC0xMzUsNyArMTM1LDcgQEAgLSAo
dm9pZClzZW5kTWVzc2FnZVRvRnJvbnRlbmQ6KE5TU3RyaW5nICopbWVzc2FnZQogICAgIG1fcmVt
b3RlSW5zcGVjdG9yUHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKTsKIH0KIAot
Ly8gTUFSSzogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgbWV0aG9kcworLy8gTUFSSzog
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudCBtZXRob2RzCiAKIC0gKHZvaWQpc2VuZE1l
c3NhZ2VUb0JhY2tlbmQ6KE5TU3RyaW5nICopbWVzc2FnZQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250
cm9sbGVySW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tS
ZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlckludGVybmFsLmgKaW5kZXggMDY2NWY3ZTYy
ZTUxZmJlOWZmNTE0ZDljMmJmMWI5MjM3YjNhMGFmMy4uOWVlYzU5NDU0YjAxYWU0MjJjOWMxNGE5
NmE1ODlmNDE3OTZkZmQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVySW50ZXJuYWwuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVtb3RlV2ViSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXJJbnRlcm5hbC5oCkBAIC0yOCwxNCArMjgsMTQgQEAKICNpZiAhVEFSR0VU
X09TX0lQSE9ORQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OworY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTsKIH0KIAogTlNfQVNTVU1F
X05PTk5VTExfQkVHSU4KIAogQGludGVyZmFjZSBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciAoKSB7CiBAcGFja2FnZQotICAgIFJlZlB0cjxXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5PiBtX3JlbW90ZUluc3BlY3RvclByb3h5OworICAgIFJlZlB0cjxXZWJLaXQ6OlJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHk+IG1fcmVtb3RlSW5zcGVjdG9yUHJveHk7CiB9CiBAZW5k
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
SW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
SW5zcGVjdG9yLmNwcAppbmRleCA4MGQyMGFhNzYwM2JhZGFiOTAwZmU0YmQxNTkwYWFkMzliMzBl
MmZmLi5mNDM4MGExN2Y3NGNjOGEyZTgwYTAxYzYyZmIwYjRlNzlhMzJkMWNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNwZWN0b3Iu
Y3BwCkBAIC0yMCw4ICsyMCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0V2ViSW5zcGVjdG9yLmgiCiAKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2lu
Y2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9y
VUlQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHlDbGllbnQuaCIKICNpbmNs
dWRlICJXZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlLmgiCiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1s
aWIuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CkBAIC04Myw3ICs4Myw3IEBAIHN0
cnVjdCBfV2ViS2l0V2ViSW5zcGVjdG9yUHJpdmF0ZSB7CiAgICAgICAgIHdlYkluc3BlY3Rvci0+
c2V0Q2xpZW50KG51bGxwdHIpOwogICAgIH0KIAotICAgIFJlZlB0cjxXZWJJbnNwZWN0b3JQcm94
eT4gd2ViSW5zcGVjdG9yOworICAgIFJlZlB0cjxXZWJJbnNwZWN0b3JVSVByb3h5PiB3ZWJJbnNw
ZWN0b3I7CiAgICAgQ1N0cmluZyBpbnNwZWN0ZWRVUkk7CiAgICAgdW5zaWduZWQgYXR0YWNoZWRI
ZWlnaHQ7CiAgICAgYm9vbCBjYW5BdHRhY2g7CkBAIC0yODMsNyArMjgzLDcgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xhc3NfaW5pdChXZWJLaXRXZWJJbnNwZWN0b3JDbGFz
cyogZmluZENsYXNzKQogICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMCk7CiB9CiAKLWNsYXNzIFdl
YktpdEluc3BlY3RvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBXZWJJbnNwZWN0b3JQcm94eUNsaWVu
dCB7CitjbGFzcyBXZWJLaXRJbnNwZWN0b3JDbGllbnQgZmluYWwgOiBwdWJsaWMgV2ViSW5zcGVj
dG9yVUlQcm94eUNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgZXhwbGljaXQgV2ViS2l0SW5zcGVjdG9yQ2xpZW50KFdlYktpdFdlYkluc3BlY3Rvciog
aW5zcGVjdG9yKQpAQCAtMjkyLDI2ICsyOTIsMjYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBib29sIG9wZW5XaW5kb3coV2ViSW5zcGVjdG9yUHJveHkmKSBvdmVycmlkZQorICAg
IGJvb2wgb3BlbldpbmRvdyhXZWJJbnNwZWN0b3JVSVByb3h5Jikgb3ZlcnJpZGUKICAgICB7CiAg
ICAgICAgIGdib29sZWFuIHJldHVyblZhbHVlOwogICAgICAgICBnX3NpZ25hbF9lbWl0KG1faW5z
cGVjdG9yLCBzaWduYWxzW09QRU5fV0lORE9XXSwgMCwgJnJldHVyblZhbHVlKTsKICAgICAgICAg
cmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KIAotICAgIHZvaWQgZGlkQ2xvc2UoV2ViSW5zcGVj
dG9yUHJveHkmKSBvdmVycmlkZQorICAgIHZvaWQgZGlkQ2xvc2UoV2ViSW5zcGVjdG9yVUlQcm94
eSYpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBnX3NpZ25hbF9lbWl0KG1faW5zcGVjdG9yLCBz
aWduYWxzW0NMT1NFRF0sIDApOwogICAgIH0KIAotICAgIGJvb2wgYnJpbmdUb0Zyb250KFdlYklu
c3BlY3RvclByb3h5Jikgb3ZlcnJpZGUKKyAgICBib29sIGJyaW5nVG9Gcm9udChXZWJJbnNwZWN0
b3JVSVByb3h5Jikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGdib29sZWFuIHJldHVyblZhbHVl
OwogICAgICAgICBnX3NpZ25hbF9lbWl0KG1faW5zcGVjdG9yLCBzaWduYWxzW0JSSU5HX1RPX0ZS
T05UXSwgMCwgJnJldHVyblZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAg
IH0KIAotICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChXZWJJbnNwZWN0b3JQcm94eSYsIGNv
bnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZQorICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChX
ZWJJbnNwZWN0b3JVSVByb3h5JiwgY29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICBDU3RyaW5nIHVyaSA9IHVybC51dGY4KCk7CiAgICAgICAgIGlmICh1cmkgPT0gbV9p
bnNwZWN0b3ItPnByaXYtPmluc3BlY3RlZFVSSSkKQEAgLTMyMCwyMSArMzIwLDIxIEBAIHByaXZh
dGU6CiAgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChtX2luc3BlY3RvciksICJpbnNw
ZWN0ZWQtdXJpIik7CiAgICAgfQogCi0gICAgYm9vbCBhdHRhY2goV2ViSW5zcGVjdG9yUHJveHkm
KSBvdmVycmlkZQorICAgIGJvb2wgYXR0YWNoKFdlYkluc3BlY3RvclVJUHJveHkmKSBvdmVycmlk
ZQogICAgIHsKICAgICAgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CiAgICAgICAgIGdfc2lnbmFs
X2VtaXQobV9pbnNwZWN0b3IsIHNpZ25hbHNbQVRUQUNIXSwgMCwgJnJldHVyblZhbHVlKTsKICAg
ICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KIAotICAgIGJvb2wgZGV0YWNoKFdlYklu
c3BlY3RvclByb3h5Jikgb3ZlcnJpZGUKKyAgICBib29sIGRldGFjaChXZWJJbnNwZWN0b3JVSVBy
b3h5Jikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGdib29sZWFuIHJldHVyblZhbHVlOwogICAg
ICAgICBnX3NpZ25hbF9lbWl0KG1faW5zcGVjdG9yLCBzaWduYWxzW0RFVEFDSF0sIDAsICZyZXR1
cm5WYWx1ZSk7CiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9CiAKLSAgICB2b2lk
IGRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0KFdlYkluc3BlY3RvclByb3h5JiwgdW5zaWduZWQgaGVp
Z2h0KSBvdmVycmlkZQorICAgIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQoV2ViSW5zcGVj
dG9yVUlQcm94eSYsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlm
IChtX2luc3BlY3Rvci0+cHJpdi0+YXR0YWNoZWRIZWlnaHQgPT0gaGVpZ2h0KQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzQyLDExICszNDIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgZ19vYmpl
Y3Rfbm90aWZ5KEdfT0JKRUNUKG1faW5zcGVjdG9yKSwgImF0dGFjaGVkLWhlaWdodCIpOwogICAg
IH0KIAotICAgIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aChXZWJJbnNwZWN0b3JQcm94eSYs
IHVuc2lnbmVkIHdpZHRoKSBvdmVycmlkZQorICAgIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRXaWR0
aChXZWJJbnNwZWN0b3JVSVByb3h5JiwgdW5zaWduZWQgd2lkdGgpIG92ZXJyaWRlCiAgICAgewog
ICAgIH0KIAotICAgIHZvaWQgZGlkQ2hhbmdlQXR0YWNoQXZhaWxhYmlsaXR5KFdlYkluc3BlY3Rv
clByb3h5JiwgYm9vbCBhdmFpbGFibGUpIG92ZXJyaWRlCisgICAgdm9pZCBkaWRDaGFuZ2VBdHRh
Y2hBdmFpbGFiaWxpdHkoV2ViSW5zcGVjdG9yVUlQcm94eSYsIGJvb2wgYXZhaWxhYmxlKSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgaWYgKG1faW5zcGVjdG9yLT5wcml2LT5jYW5BdHRhY2ggPT0g
YXZhaWxhYmxlKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzU3LDcgKzM1Nyw3IEBAIHByaXZh
dGU6CiAgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBtX2luc3BlY3RvcjsKIH07CiAKLVdlYktpdFdl
Ykluc3BlY3Rvciogd2Via2l0V2ViSW5zcGVjdG9yQ3JlYXRlKFdlYkluc3BlY3RvclByb3h5KiB3
ZWJJbnNwZWN0b3IpCitXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYmtpdFdlYkluc3BlY3RvckNyZWF0
ZShXZWJJbnNwZWN0b3JVSVByb3h5KiB3ZWJJbnNwZWN0b3IpCiB7CiAgICAgV2ViS2l0V2ViSW5z
cGVjdG9yKiBpbnNwZWN0b3IgPSBXRUJLSVRfV0VCX0lOU1BFQ1RPUihnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfV0VCX0lOU1BFQ1RPUiwgTlVMTCkpOwogICAgIGluc3BlY3Rvci0+cHJpdi0+d2Vi
SW5zcGVjdG9yID0gd2ViSW5zcGVjdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3RvclByaXZhdGUuaAppbmRleCBiYjVk
YmIzY2I5MGY5YjBiYjg2NTJlYmVjOWVmY2QwYzM5MDk4MjQyLi5lYzdjZmFkYzFiMjUyZjk2NmMy
ZGFmYjc2MjIyM2ZkM2QwZGEzMmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3RvclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3RvclByaXZhdGUuaApAQCAtMjEsNCAr
MjEsNCBAQAogCiAjaW5jbHVkZSAiV2ViS2l0V2ViSW5zcGVjdG9yLmgiCiAKLVdlYktpdFdlYklu
c3BlY3Rvciogd2Via2l0V2ViSW5zcGVjdG9yQ3JlYXRlKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJv
eHkqKTsKK1dlYktpdFdlYkluc3BlY3Rvciogd2Via2l0V2ViSW5zcGVjdG9yQ3JlYXRlKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCBkZDBlYjZhYjA4OTVhOTI2
NWNkMjI3ZWE3Y2Q4NDU4ZTdkYzFiZGYzLi42MGUyMzhiMzdmMWRlMDliY2UxZmQ5NTQxYTU5ZTFm
Mjg5MGRjZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgIlBvaW50
ZXJMb2NrTWFuYWdlci5oIgogI2luY2x1ZGUgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0
aWFsaXplLmgiCiAjaW5jbHVkZSAiV2ViS2l0RW1vamlDaG9vc2VyLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0SW5pdGlhbGl6ZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5kZXggZDA5YWVhNDVkOTRmYjcz
NjdiYTg4ZmRmODMyNmRlYTEyMDlkMDJjZS4uMGI0MzhkYWE0NDFlMGM5YjY1ZTZlYzA0Y2M0Y2I3
MDVmODQ0M2MwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCkBAIC0zNiw3ICszNiw3IEBACiAjaW5j
bHVkZSAiVmlld1NuYXBzaG90U3RvcmUuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5
R3RrLmgiCiAjaW5jbHVkZSAiV2ViSGl0VGVzdFJlc3VsdERhdGEuaCIKLSNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHkuaCIKICNpbmNs
dWRlICJXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3
QmFzZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApp
bmRleCA2OTdjMzQyNzJmNGEzZWIwOWM4NWJkMWQ3OTI5Njk4NWYxMDViNWQ0Li41NjFiOTMxZGQ1
NzYzYzJhYjg3MzZiMmZmMGI3ZjI2ZmM5OGIzYTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApA
QCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHlNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldl
YkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5o
IgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHkuaCIKICNpbmNsdWRlICJXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0K
aW5kZXggNjRjZTk3MmZjYjgxZmM2NWMxOGM1NjZjOTU2MmQ4OTJkN2E1NTVjMy4uNzhhZGZjNjBk
MDJjMTU4NzgxYzFiY2FjMjc4NTBjZjlkMTFjZTI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNl
c3Npb25NYWMubW0KQEAgLTMwLDcgKzMwLDcgQEAKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2lt
cG9ydCAiV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaCIKLSNpbXBvcnQgIldlYkluc3BlY3Rv
clByb3h5LmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCiAjaW1wb3J0ICJXZWJQ
YWdlUHJveHkuaCIKICNpbXBvcnQgIl9XS0F1dG9tYXRpb25TZXNzaW9uLmgiCiAjaW1wb3J0IDxD
YXJib24vQ2FyYm9uLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9VSURlbGVnYXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRl
LmgKaW5kZXggNzJhNDVhNGM5NzVlMzZiN2VlZDAwZDRjOWRlODU0MDM4YjI4M2Y1Mi4uZDQ3MGQy
MjUyMTljOGViNjBjNWQzYTU3ZTA4YjgyYjY0NDMxYWU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaApAQCAtMTI1LDkgKzEyNSw5IEBAIHByaXZhdGU6CiAg
ICAgICAgIGJvb2wgcnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkqLCBG
cmFtZUluZm9EYXRhJiYsIEFQSTo6T3BlblBhbmVsUGFyYW1ldGVycyosIFdlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyUHJveHkqKSBmaW5hbDsKICAgICAgICAgdm9pZCBkaWRFeGNlZWRCYWNrZ3Jv
dW5kUmVzb3VyY2VMaW1pdFdoaWxlSW5Gb3JlZ3JvdW5kKFdlYlBhZ2VQcm94eSYsIFdLUmVzb3Vy
Y2VMaW1pdCkgZmluYWw7CiAgICAgICAgIHZvaWQgc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0Zv
bGRlcihXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5n
JiwgY29uc3QgVVJMJiwgQVBJOjpEYXRhJikgZmluYWw7Ci0gICAgICAgIFJlZjxBUEk6Okluc3Bl
Y3RvckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3RvcihXZWJQYWdl
UHJveHkmLCBXZWJJbnNwZWN0b3JQcm94eSYpIGZpbmFsOwotICAgICAgICB2b2lkIGRpZEF0dGFj
aExvY2FsSW5zcGVjdG9yKFdlYlBhZ2VQcm94eSYsIFdlYkluc3BlY3RvclByb3h5JikgZmluYWw7
Ci0gICAgICAgIHZvaWQgd2lsbENsb3NlTG9jYWxJbnNwZWN0b3IoV2ViUGFnZVByb3h5JiwgV2Vi
SW5zcGVjdG9yUHJveHkmKSBmaW5hbDsKKyAgICAgICAgUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvbkZvckxvY2FsSW5zcGVjdG9yKFdlYlBhZ2VQcm94eSYsIFdl
Ykluc3BlY3RvclVJUHJveHkmKSBmaW5hbDsKKyAgICAgICAgdm9pZCBkaWRBdHRhY2hMb2NhbElu
c3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0b3JVSVByb3h5JikgZmluYWw7CisgICAg
ICAgIHZvaWQgd2lsbENsb3NlTG9jYWxJbnNwZWN0b3IoV2ViUGFnZVByb3h5JiwgV2ViSW5zcGVj
dG9yVUlQcm94eSYpIGZpbmFsOwogI2VuZGlmCiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElP
TikKICAgICAgICAgdm9pZCBzaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYsIEZyYW1lSW5mb0RhdGEm
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgZmluYWw7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQppbmRleCBjOGFiZWQ2MTQ1YTk4MmE4NjEx
NzY0OTE0NTdmYWY0OGFhNWZlODQ4Li4zODZiYjI3ZWRlZDk0M2VhMDllNDNiYzJhYmRiYmUwYjgw
MDA0ZGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVn
YXRlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0K
QEAgLTk1Niw3ICs5NTYsNyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xp
Y3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJLaXQ6OgogICAgIH0pLmdldCgp
XTsKIH0KIAotUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OmNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJ
bnNwZWN0b3JQcm94eSYgaW5zcGVjdG9yKQorUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlv
bj4gVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3RvcihX
ZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0b3JVSVByb3h5JiBpbnNwZWN0b3IpCiB7CiAgICAgaWYg
KCFtX3VpRGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRp
b246OmNyZWF0ZSgpOwpAQCAtOTcxLDcgKzk3MSw3IEBAIFJlZjxBUEk6Okluc3BlY3RvckNvbmZp
Z3VyYXRpb24+IFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpjb25maWd1cmF0aW9uRm9yTG9jYWxJbnNw
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbiY+KFtb
KGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKSBjb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3I6d3Jh
cHBlcihpbnNwZWN0b3IpXSBfYXBpT2JqZWN0XSk7CiB9CiAKLXZvaWQgVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OmRpZEF0dGFjaExvY2FsSW5zcGVjdG9yKFdlYlBhZ2VQcm94eSYsIFdlYkluc3BlY3Rv
clByb3h5JiBpbnNwZWN0b3IpCit2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRBdHRhY2hM
b2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0b3JVSVByb3h5JiBpbnNwZWN0
b3IpCiB7CiAgICAgaWYgKCFtX3VpRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKQEAgLTk4Niw3
ICs5ODYsNyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRBdHRhY2hMb2NhbEluc3Bl
Y3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0b3JQcgogICAgIFsoaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgp
LmdldCgpIGRpZEF0dGFjaExvY2FsSW5zcGVjdG9yOndyYXBwZXIoaW5zcGVjdG9yKV07CiB9CiAK
LXZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OndpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKFdlYlBh
Z2VQcm94eSYsIFdlYkluc3BlY3RvclByb3h5JiBpbnNwZWN0b3IpCit2b2lkIFVJRGVsZWdhdGU6
OlVJQ2xpZW50Ojp3aWxsQ2xvc2VMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNw
ZWN0b3JVSVByb3h5JiBpbnNwZWN0b3IpCiB7CiAgICAgaWYgKCFtX3VpRGVsZWdhdGUpCiAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZXdJbXBsLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwu
bW0KaW5kZXggYTA3NzczY2E5NzViYzZlODJjMDU2MDM4MWQ0NjM4NjY1NTNmMDQzZC4uNDgwNWI4
MDFkMjI1MTk3NTU5MTRmMGEwNjM5YzQyMTUyNjY3NWQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KQEAgLTc0LDcgKzc0LDcgQEAKICNpbXBvcnQg
IldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgog
I2ltcG9ydCAiV2ViRXZlbnRGYWN0b3J5LmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5o
IgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5
LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUG9vbC5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRz
L0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAKaW5kZXggZGJkNjM4MjU0NWEx
NDlmMzlkN2EyNjRlYWZlNDRjMzkzYzc2ZGQyMS4uZmY2ODBiNTFkYWM2ODZkMzg3OWJlZWY3ZTUw
Mzg4NGFmMmZiZWE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcApAQCAt
MjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJBZ2VudC5oIgogCiAjaW5j
bHVkZSAiQVBJVUlDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2lu
Y2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sT2JqZWN0cy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0NvY29hL0luc3BlY3RvckRlbGVnYXRlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRGVsZWdhdGUu
aAppbmRleCBlMWZhZWU2OTU0NDlhZDliODQyMjZjMzljNmM0ZmZhODgwMjE5MGY5Li44MGQ3NGU3
NWMyYWYyMmY5M2MwOWRmNjU1YTUxMjgyZDQ1MjlhNDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRGVsZWdhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRGVsZWdhdGUu
aApAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViSW5z
cGVjdG9yUHJveHk7CitjbGFzcyBXZWJJbnNwZWN0b3JVSVByb3h5OwogCiBjbGFzcyBJbnNwZWN0
b3JEZWxlZ2F0ZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01NCw3ICs1NCw3
IEBAIHByaXZhdGU6CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBBUEk6Okluc3BlY3RvckNs
aWVudAotICAgICAgICB2b2lkIG9wZW5VUkxFeHRlcm5hbGx5KFdlYkluc3BlY3RvclByb3h5Jiwg
Y29uc3QgU3RyaW5nJiB1cmwpOworICAgICAgICB2b2lkIG9wZW5VUkxFeHRlcm5hbGx5KFdlYklu
c3BlY3RvclVJUHJveHkmLCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICAgICAgSW5zcGVjdG9y
RGVsZWdhdGUmIG1faW5zcGVjdG9yRGVsZWdhdGU7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9Db2NvYS9JbnNwZWN0b3JEZWxlZ2F0ZS5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9Db2NvYS9JbnNwZWN0b3JEZWxlZ2F0
ZS5tbQppbmRleCBhMmU4Mzc4MmM2NjcwOTZjODY0Njk3NWMzM2U0ZGRkYTViMTU1Zjk1Li5jMmI4
ZTBjOWJmMjNlNmIwY2FkZGUxOThjNGUwMTFjMDY0NjQ0NWM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRGVsZWdhdGUubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0NvY29hL0luc3BlY3RvckRlbGVn
YXRlLm1tCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIklu
c3BlY3RvckRlbGVnYXRlLmgiCiAKLSNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW1w
b3J0ICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCiAjaW1wb3J0ICJfV0tJbnNwZWN0b3JEZWxlZ2F0
ZS5oIgogI2ltcG9ydCAiX1dLSW5zcGVjdG9ySW50ZXJuYWwuaCIKIApAQCAtNTcsNyArNTcsNyBA
QCBJbnNwZWN0b3JEZWxlZ2F0ZTo6SW5zcGVjdG9yQ2xpZW50Ojp+SW5zcGVjdG9yQ2xpZW50KCkK
IHsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWxlZ2F0ZTo6SW5zcGVjdG9yQ2xpZW50OjpvcGVuVVJM
RXh0ZXJuYWxseShXZWJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBJ
bnNwZWN0b3JEZWxlZ2F0ZTo6SW5zcGVjdG9yQ2xpZW50OjpvcGVuVVJMRXh0ZXJuYWxseShXZWJJ
bnNwZWN0b3JVSVByb3h5JiwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYgKCFtX2luc3Bl
Y3RvckRlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLmluc3BlY3Rvck9wZW5VUkxFeHRlcm5hbGx5
KQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRXh0ZW5zaW9uRGVsZWdhdGUubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRXh0ZW5zaW9uRGVsZWdhdGUu
bW0KaW5kZXggZjdmMzcyZjk4Y2UzMWQwYjI5ZDBhNTljZDYyZmFkMDMwZmI0NDBlNC4uN2UwZmI5
OGI2ZjNlZmE2ZWM4OWM5NGY5OGY0N2VlNDI3ODRjYTI0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0NvY29hL0luc3BlY3RvckV4dGVuc2lvbkRlbGVnYXRl
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9Db2NvYS9JbnNwZWN0
b3JFeHRlbnNpb25EZWxlZ2F0ZS5tbQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9FWFRFTlNJT05TKQogCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2lt
cG9ydCAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgogI2ltcG9ydCAiX1dLSW5zcGVjdG9yRXh0ZW5z
aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIl9XS0luc3BlY3RvckV4dGVuc2lvbkludGVybmFsLmgi
CiAjaW1wb3J0IDx3dGYvVW5pcXVlUmVmLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJkYTZmNzczZDIyYWE0MTEyOGQ2Zjk5NzAxNWU2
MzVlMDJlZGIzNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5o
IgotCi0jaW5jbHVkZSAiQVBJRGVidWdnYWJsZUluZm8uaCIKLSNpbmNsdWRlICJBUElOYXZpZ2F0
aW9uLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgotI2lu
Y2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNw
ZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRF
TlNJT05TKQotI2luY2x1ZGUgIldlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5
LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KCkK
LSAgICA6IG1fZGVidWdnYWJsZUluZm8oQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVn
Z2FibGVJbmZvRGF0YTo6ZW1wdHkoKSkpCi17Ci19Ci0KLVJlbW90ZVdlYkluc3BlY3RvclByb3h5
Ojp+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQ
YWdlKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6aW52YWxpZGF0ZSgpCi17
Ci0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFi
bGUpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgbV9pbnNwZWN0b3JQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2V0RGlhZ25vc3RpY0xv
Z2dpbmdBdmFpbGFibGUoYXZhaWxhYmxlKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhdmFp
bGFibGUpOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmxvYWQo
UmVmPEFQSTo6RGVidWdnYWJsZUluZm8+JiYgZGVidWdnYWJsZUluZm8sIGNvbnN0IFN0cmluZyYg
YmFja2VuZENvbW1hbmRzVVJMKQotewotICAgIG1fZGVidWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRl
YnVnZ2FibGVJbmZvKTsKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IGJhY2tlbmRDb21tYW5k
c1VSTDsKLQotICAgIGNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotCi0gICAgbV9pbnNw
ZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6SW5pdGlhbGl6
ZShtX2RlYnVnZ2FibGVJbmZvLT5kZWJ1Z2dhYmxlSW5mb0RhdGEoKSwgYmFja2VuZENvbW1hbmRz
VVJMKSk7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIFdlYklu
c3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9tQmFja2VuZCgpCi17Ci0gICAgY2xvc2VGcm9udGVuZFBh
Z2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VG
cm9tQ3Jhc2goKQotewotICAgIC8vIEJlaGF2ZSBhcyBpZiB0aGUgZnJvbnRlbmQganVzdCBjbG9z
ZWQsIHNvIGNsaWVudHMgYXJlIGluZm9ybWVkIHRoZSBmcm9udGVuZCBpcyBnb25lLgotICAgIGZy
b250ZW5kRGlkQ2xvc2UoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2hv
dygpCi17Ci0gICAgYnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6ZnJvbnRlbmRMb2FkZWQoKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhU
RU5TSU9OUykKLSAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXItPmluc3BlY3RvckZyb250ZW5kTG9h
ZGVkKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6ZnJvbnRl
bmREaWRDbG9zZSgpCi17Ci0gICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBwcm90ZWN0
KCp0aGlzKTsKLQotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmNsb3NlRnJv
bUZyb250ZW5kKCk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpyZW9wZW4oKQotewotICAgIEFTU0VSVCghbV9i
YWNrZW5kQ29tbWFuZHNVUkwuaXNFbXB0eSgpKTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCk7Ci0gICAgbG9hZChtX2RlYnVnZ2FibGVJbmZvLmNvcHlSZWYoKSwgbV9iYWNrZW5k
Q29tbWFuZHNVUkwpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpyZXNldFN0
YXRlKCkKLXsKLSAgICBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6YnJpbmdUb0Zyb250KCkKLXsKLSAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9u
dCgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2Rl
ZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCi17Ci0gICAgcGxhdGZvcm1TYXZlKHN1Z2dlc3RlZFVS
TCwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlRGlhbG9nKTsKLX0KLQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJM
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgcGxhdGZvcm1BcHBlbmQoc3VnZ2VzdGVk
VVJMLCBjb250ZW50KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0U2hl
ZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBwbGF0Zm9ybVNldFNoZWV0UmVj
dChyZWN0KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0Rm9yY2VkQXBw
ZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSBhcHBlYXJhbmNlKQot
ewotICAgIHBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShhcHBlYXJhbmNlKTsKLX0KLQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICBwbGF0
Zm9ybVN0YXJ0V2luZG93RHJhZygpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpvcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBwbGF0Zm9ybU9w
ZW5VUkxFeHRlcm5hbGx5KHVybCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykK
LXsKLSAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pOwotfQotCi12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+
c2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1faW5z
cGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlID0gcGxh
dGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIHRyYWNrSW5zcGVjdG9y
UGFnZShtX2luc3BlY3RvclBhZ2UsIG51bGxwdHIpOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5w
cm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgp
LCAqdGhpcyk7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMpCi0gICAgbV9leHRl
bnNpb25Db250cm9sbGVyID0gV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHk6
OmNyZWF0ZSgqbV9pbnNwZWN0b3JQYWdlKTsKLSNlbmRpZgotfQotCi12b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKCFt
X2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+
cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdl
SUQoKSk7Ci0KLSAgICB1bnRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOwotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQotICAgIC8vIFRoaXMgZXh0ZW5zaW9uIGNv
bnRyb2xsZXIgbWF5IGJlIGtlcHQgYWxpdmUgYnkgdGhlIElQQyBkaXNwYXRjaGVyIGJleW9uZCB0
aGUgcG9pbnQKLSAgICAvLyB3aGVuIG1faW5zcGVjdG9yUGFnZSBpcyBjbGVhcmVkIGJlbG93LiBO
b3RpZnkgdGhlIGNvbnRyb2xsZXIgc28gaXQgY2FuIGNsZWFuIHVwIGJlZm9yZSB0aGVuLgotICAg
IG1fZXh0ZW5zaW9uQ29udHJvbGxlci0+aW5zcGVjdG9yRnJvbnRlbmRXaWxsQ2xvc2UoKTsKLSAg
ICBtX2V4dGVuc2lvbkNvbnRyb2xsZXIgPSBudWxscHRyOwotI2VuZGlmCi0KLSAgICBtX2luc3Bl
Y3RvclBhZ2UgPSBudWxscHRyOwotCi0gICAgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpOwotfQotCi0jaWYgIUVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JN
KE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikpCi1XZWJQYWdlUHJveHkq
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkgeyB9
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpIHsg
fQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25z
dCBGbG9hdFJlY3QmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSkg
eyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJh
ZygpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuVVJMRXh0
ZXJuYWxseShjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYpIHsgfQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpIHsgfQotI2VuZGlmIC8vICFFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikgfHwgKCFQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pKQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGE0Mzg5ODRhNjUzNzJlNDdiMTI5OWY1NGM2NmU0ZWQ1Nzk3NzQzZDcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBOU1VSTDsKLU9C
SkNfQ0xBU1MgTlNXaW5kb3c7Ci1PQkpDX0NMQVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7
Ci1PQkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcjsKLU9CSkNf
Q0xBU1MgV0tXZWJWaWV3OwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENl
cnRpZmljYXRlSW5mbzsKLX0KLQotbmFtZXNwYWNlIEFQSSB7Ci1jbGFzcyBEZWJ1Z2dhYmxlSW5m
bzsKLWNsYXNzIEluc3BlY3RvckNvbmZpZ3VyYXRpb247Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTsKLWNsYXNzIFdlYlBhZ2VQcm94eTsK
LWNsYXNzIFdlYlZpZXc7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQotY2xhc3Mg
V2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHk7Ci0jZW5kaWYKLQotY2xhc3Mg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgflJl
bW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlbmRN
ZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpID0gMDsKLSAgICB2aXJ0dWFsIFJlZjxBUEk6Okluc3Bl
Y3RvckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gb3JSZW1vdGVJbnNwZWN0b3IoUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci19OwotCi1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiwgcHVibGlj
IElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKSk7Ci0gICAgfQotCi0gICAgflJlbW90ZVdl
Ykluc3BlY3RvclByb3h5KCk7Ci0KLSAgICB2b2lkIHNldENsaWVudChSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9Ci0KLSAgICBib29s
IGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgc2V0RGlh
Z25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsK
LQotICAgIHZvaWQgbG9hZChSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4mJiwgY29uc3QgU3RyaW5n
JiBiYWNrZW5kQ29tbWFuZHNVUkwpOwotICAgIHZvaWQgY2xvc2VGcm9tQmFja2VuZCgpOwotICAg
IHZvaWQgc2hvdygpOwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKTsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKLSAgICBX
ZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eSogZXh0ZW5zaW9uQ29udHJvbGxl
cigpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW5zaW9uQ29udHJvbGxlci5nZXQoKTsgfQotI2VuZGlm
Ci0gICAgCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIE5TV2luZG93ICp3aW5kb3coKSBjb25zdCB7
IHJldHVybiBtX3dpbmRvdy5nZXQoKTsgfQotICAgIFdLV2ViVmlldyAqd2ViVmlldygpIGNvbnN0
OwotCi0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzaGVldFJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3NoZWV0UmVjdDsgfQotCi0gICAgdm9pZCBkaWRCZWNvbWVBY3RpdmUoKTsKLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUoY29uc3Qg
Q1N0cmluZyYpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU5fQ0FJUk8pCi0gICAgTFJFU1VM
VCBzaXplQ2hhbmdlKCk7Ci0gICAgTFJFU1VMVCBvbkNsb3NlKCk7Ci0KLSAgICBzdGF0aWMgTFJF
U1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLSNlbmRp
ZgotCi0gICAgdm9pZCBjbG9zZUZyb21DcmFzaCgpOwotCi1wcml2YXRlOgotICAgIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5KCk7Ci0KLSAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3Zl
cnJpZGU7Ci0KLSAgICAvLyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBtZXNzYWdlcy4KLSAgICB2
b2lkIGZyb250ZW5kTG9hZGVkKCk7Ci0gICAgdm9pZCBmcm9udGVuZERpZENsb3NlKCk7Ci0gICAg
dm9pZCByZW9wZW4oKTsKLSAgICB2b2lkIHJlc2V0U3RhdGUoKTsKLSAgICB2b2lkIGJyaW5nVG9G
cm9udCgpOwotICAgIHZvaWQgc2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0gICAg
dm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50
KTsKLSAgICB2b2lkIHNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAg
ICB2b2lkIHNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OkFwcGVhcmFuY2UpOwotICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCk7Ci0gICAgdm9pZCBv
cGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBzaG93Q2VydGlm
aWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Ci0gICAgdm9pZCBzZW5kTWVz
c2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi0gICAgdm9pZCBjcmVhdGVG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2lu
ZG93KCk7Ci0KLSAgICAvLyBQbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMuCi0gICAgV2ViUGFnZVBy
b3h5KiBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotICAgIHZvaWQgcGxh
dGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotICAgIHZvaWQgcGxhdGZvcm1SZXNl
dFN0YXRlKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotICAgIHZvaWQgcGxh
dGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwg
Ym9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCk7Ci0g
ICAgdm9pZCBwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
LSAgICB2b2lkIHBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93
RHJhZygpOwotICAgIHZvaWQgcGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcm
IHVybCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8mKTsKLQotICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KiBt
X2NsaWVudCB7IG51bGxwdHIgfTsKLSAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdG9yUGFnZSB7
IG51bGxwdHIgfTsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKLSAgICBSZWZQ
dHI8V2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHk+IG1fZXh0ZW5zaW9uQ29u
dHJvbGxlcjsKLSNlbmRpZgotICAgIAotICAgIFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiBtX2Rl
YnVnZ2FibGVJbmZvOwotICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKLQotI2lmIFBM
QVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcj4gbV9p
bnNwZWN0b3JWaWV3OwotICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV93aW5kb3c7Ci0gICAgUmV0
YWluUHRyPFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRl
cjsKLSAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0Fj
dHVhbFVSTE1hcDsKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9zaGVldFJlY3Q7Ci0jZW5kaWYK
LSNpZiBQTEFURk9STShHVEspCi0gICAgR3RrV2lkZ2V0KiBtX3dlYlZpZXcgeyBudWxscHRyIH07
Ci0gICAgR3RrV2lkZ2V0KiBtX3dpbmRvdyB7IG51bGxwdHIgfTsKLSNlbmRpZgotI2lmIFBMQVRG
T1JNKFdJTl9DQUlSTykKLSAgICBIV05EIG1fZnJvbnRlbmRIYW5kbGU7Ci0gICAgUmVmUHRyPFdl
YlZpZXc+IG1fd2ViVmlldzsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDY3NGJlYzMyNDZkMzg4OTNkNTUyZTQ2NmI3ZWQ3ZWNkMmUwOGZkZmYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmlu
CisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFJlbW90ZVdlYkluc3BlY3RvclByb3h5
IHsKLSAgICBGcm9udGVuZExvYWRlZCgpCi0gICAgRnJvbnRlbmREaWRDbG9zZSgpCi0gICAgUmVv
cGVuKCkKLSAgICBSZXNldFN0YXRlKCkKLSAgICBCcmluZ1RvRnJvbnQoKQotCi0gICAgU2F2ZShT
dHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wg
Zm9yY2VTYXZlQXMpCi0gICAgQXBwZW5kKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQp
Ci0KLSAgICBTZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OjpBcHBlYXJhbmNlIGFwcGVhcmFuY2UpCi0KLSAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QpCi0KLSAgICBTdGFydFdpbmRvd0RyYWcoKQotCi0gICAgT3BlblVSTEV4
dGVybmFsbHkoU3RyaW5nIHVybCkKLSAgICBTaG93Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykKLQotICAgIFNlbmRNZXNzYWdlVG9CYWNrZW5kKFN0
cmluZyBtZXNzYWdlKQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNlNmRiMzY0MDY3NTgxYjM3ZDdmZDg2ODYxZGQ4N2RlYTM4MmQzNTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eS5jcHAKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5LmgiCisKKyNp
bmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5mby5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIK
KyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9y
VUlQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJ
T05TKQorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5Lmgi
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSgp
CisgICAgOiBtX2RlYnVnZ2FibGVJbmZvKEFQSTo6RGVidWdnYWJsZUluZm86OmNyZWF0ZShEZWJ1
Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpKQoreworfQorCitSZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5Ojp+UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSgpCit7CisgICAgQVNTRVJUKCFtX2luc3Bl
Y3RvclBhZ2UpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmludmFsaWRh
dGUoKQoreworICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9v
bCBhdmFpbGFibGUpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgbV9p
bnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2V0RGlh
Z25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYXZhaWxhYmxlKSk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShhdmFpbGFibGUpOworI2VuZGlmCit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eTo6bG9hZChSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4mJiBkZWJ1Z2dhYmxlSW5mbywgY29u
c3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpCit7CisgICAgbV9kZWJ1Z2dhYmxlSW5mbyA9
IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFj
a2VuZENvbW1hbmRzVVJMOworCisgICAgY3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisK
KyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJ
OjpJbml0aWFsaXplKG1fZGVidWdnYWJsZUluZm8tPmRlYnVnZ2FibGVJbmZvRGF0YSgpLCBiYWNr
ZW5kQ29tbWFuZHNVUkwpKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChV
UkwoKSwgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7Cit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6Y2xvc2VGcm9tQmFja2VuZCgpCit7CisgICAg
Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5OjpjbG9zZUZyb21DcmFzaCgpCit7CisgICAgLy8gQmVoYXZlIGFzIGlmIHRoZSBm
cm9udGVuZCBqdXN0IGNsb3NlZCwgc28gY2xpZW50cyBhcmUgaW5mb3JtZWQgdGhlIGZyb250ZW5k
IGlzIGdvbmUuCisgICAgZnJvbnRlbmREaWRDbG9zZSgpOworfQorCit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclVJUHJveHk6OnNob3coKQoreworICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpKTsKK30K
Kwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojpmcm9udGVuZExvYWRlZCgpCit7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQorICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxl
ci0+aW5zcGVjdG9yRnJvbnRlbmRMb2FkZWQoKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHk6OmZyb250ZW5kRGlkQ2xvc2UoKQoreworICAgIFJlZjxSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5PiBwcm90ZWN0KCp0aGlzKTsKKworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPmNsb3NlRnJvbUZyb250ZW5kKCk7CisKKyAgICBjbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6
OnJlb3BlbigpCit7CisgICAgQVNTRVJUKCFtX2JhY2tlbmRDb21tYW5kc1VSTC5pc0VtcHR5KCkp
OworCisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAgICBsb2FkKG1fZGVidWdn
YWJsZUluZm8uY29weVJlZigpLCBtX2JhY2tlbmRDb21tYW5kc1VSTCk7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cmVzZXRTdGF0ZSgpCit7CisgICAgcGxhdGZvcm1SZXNl
dFN0YXRlKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6YnJpbmdUb0Zy
b250KCkKK3sKKyAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHk6OnNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0
IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxv
ZykKK3sKKyAgICBwbGF0Zm9ybVNhdmUoc3VnZ2VzdGVkVVJMLCBjb250ZW50LCBiYXNlNjRFbmNv
ZGVkLCBmb3JjZVNhdmVEaWFsb2cpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk6OmFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250
ZW50KQoreworICAgIHBsYXRmb3JtQXBwZW5kKHN1Z2dlc3RlZFVSTCwgY29udGVudCk7Cit9CisK
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9ybVNldFNoZWV0UmVjdChyZWN0KTsKK30KKwordm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXRGb3JjZWRBcHBlYXJhbmNlKEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlIGFwcGVhcmFuY2UpCit7CisgICAgcGxhdGZvcm1T
ZXRGb3JjZWRBcHBlYXJhbmNlKGFwcGVhcmFuY2UpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnN0YXJ0V2luZG93RHJhZygpCit7CisgICAgcGxhdGZvcm1TdGFydFdpbmRv
d0RyYWcoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpvcGVuVVJMRXh0
ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBwbGF0Zm9ybU9wZW5VUkxFeHRlcm5h
bGx5KHVybCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvd0NlcnRp
ZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIHBs
YXRmb3JtU2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNlbmRNZXNz
YWdlVG9CYWNrZW5kKG1lc3NhZ2UpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk6OmNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1faW5zcGVjdG9y
UGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1D
cmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKworICAgIHRyYWNrSW5zcGVjdG9yUGFnZSht
X2luc3BlY3RvclBhZ2UsIG51bGxwdHIpOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNz
KCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCksICp0
aGlzKTsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKKyAgICBtX2V4dGVuc2lv
bkNvbnRyb2xsZXIgPSBXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eTo6Y3Jl
YXRlKCptX2luc3BlY3RvclBhZ2UpOworI2VuZGlmCit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmICghbV9p
bnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnBy
b2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdl
SUQoKSk7CisKKyAgICB1bnRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOworCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQorICAgIC8vIFRoaXMgZXh0ZW5zaW9uIGNv
bnRyb2xsZXIgbWF5IGJlIGtlcHQgYWxpdmUgYnkgdGhlIElQQyBkaXNwYXRjaGVyIGJleW9uZCB0
aGUgcG9pbnQKKyAgICAvLyB3aGVuIG1faW5zcGVjdG9yUGFnZSBpcyBjbGVhcmVkIGJlbG93LiBO
b3RpZnkgdGhlIGNvbnRyb2xsZXIgc28gaXQgY2FuIGNsZWFuIHVwIGJlZm9yZSB0aGVuLgorICAg
IG1fZXh0ZW5zaW9uQ29udHJvbGxlci0+aW5zcGVjdG9yRnJvbnRlbmRXaWxsQ2xvc2UoKTsKKyAg
ICBtX2V4dGVuc2lvbkNvbnRyb2xsZXIgPSBudWxscHRyOworI2VuZGlmCisKKyAgICBtX2luc3Bl
Y3RvclBhZ2UgPSBudWxscHRyOworCisgICAgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpOworfQorCisjaWYgIUVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JN
KE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikpCitXZWJQYWdlUHJveHkq
IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBudWxscHRyOwor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgp
IHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9u
dCgpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Cit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNo
ZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjpBcHBlYXJhbmNlKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmKSB7IH0KK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlm
aWNhdGVJbmZvJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
Q2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKSB7IH0KKyNlbmRpZiAvLyAhRU5BQkxFKFJFTU9U
RV9JTlNQRUNUT1IpIHx8ICghUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExB
VEZPUk0oV0lOKSkKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zNjk0ZjQzMzdjZTQ0NzE1YWM2NDA3MjRkOTQxNWM4YjZlZDE3M2Q4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1Jl
bW90ZVdlYkluc3BlY3RvclVJUHJveHkuaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJN
ZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oTUFD
KQorT0JKQ19DTEFTUyBOU1VSTDsKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eU9iakNBZGFwdGVyOworT0JKQ19DTEFTUyBXS1dlYlZpZXc7CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2VydGlmaWNhdGVJbmZvOworfQorCituYW1lc3BhY2Ug
QVBJIHsKK2NsYXNzIERlYnVnZ2FibGVJbmZvOworY2xhc3MgSW5zcGVjdG9yQ29uZmlndXJhdGlv
bjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHk7CitjbGFzcyBXZWJQYWdlUHJveHk7CitjbGFzcyBXZWJWaWV3OworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfRVhURU5TSU9OUykKK2NsYXNzIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJv
bGxlclByb3h5OworI2VuZGlmCisKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGll
bnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkg
PSAwOworICAgIHZpcnR1YWwgUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbkZvclJlbW90ZUluc3BlY3RvcihSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5JikgPSAw
OworfTsKKworY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eT4g
Y3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZVdlYklu
c3BlY3RvclVJUHJveHkoKSk7CisgICAgfQorCisgICAgflJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHkoKTsKKworICAgIHZvaWQgc2V0Q2xpZW50KFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGll
bnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQorCisgICAgYm9vbCBpc1VuZGVyVGVz
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIHNldERpYWdub3N0aWNMb2dn
aW5nQXZhaWxhYmxlKGJvb2wpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2b2lk
IGxvYWQoUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+JiYsIGNvbnN0IFN0cmluZyYgYmFja2VuZENv
bW1hbmRzVVJMKTsKKyAgICB2b2lkIGNsb3NlRnJvbUJhY2tlbmQoKTsKKyAgICB2b2lkIHNob3co
KTsKKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMpCisgICAgV2ViSW5zcGVjdG9y
VUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkqIGV4dGVuc2lvbkNvbnRyb2xsZXIoKSBjb25zdCB7
IHJldHVybiBtX2V4dGVuc2lvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKyNlbmRpZgorICAgIAorI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBOU1dpbmRvdyAqd2luZG93KCkgY29uc3QgeyByZXR1cm4gbV93
aW5kb3cuZ2V0KCk7IH0KKyAgICBXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKKworICAgIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2hlZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVl
dFJlY3Q7IH0KKworICAgIHZvaWQgZGlkQmVjb21lQWN0aXZlKCk7CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKEdUSykKKyAgICB2b2lkIHVwZGF0ZVdpbmRvd1RpdGxlKGNvbnN0IENTdHJpbmcmKTsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOX0NBSVJPKQorICAgIExSRVNVTFQgc2l6ZUNoYW5n
ZSgpOworICAgIExSRVNVTFQgb25DbG9zZSgpOworCisgICAgc3RhdGljIExSRVNVTFQgQ0FMTEJB
Q0sgV25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisjZW5kaWYKKworICAgIHZv
aWQgY2xvc2VGcm9tQ3Jhc2goKTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5KCk7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisK
KyAgICAvLyBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5IG1lc3NhZ2VzLgorICAgIHZvaWQgZnJv
bnRlbmRMb2FkZWQoKTsKKyAgICB2b2lkIGZyb250ZW5kRGlkQ2xvc2UoKTsKKyAgICB2b2lkIHJl
b3BlbigpOworICAgIHZvaWQgcmVzZXRTdGF0ZSgpOworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7
CisgICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29u
dGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKKyAgICB2b2lkIGFw
cGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworICAg
IHZvaWQgc2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQg
c2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBw
ZWFyYW5jZSk7CisgICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKTsKKyAgICB2b2lkIG9wZW5VUkxF
eHRlcm5hbGx5KGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShj
b25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9C
YWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKKyAgICB2b2lkIGNyZWF0ZUZyb250ZW5k
UGFnZUFuZFdpbmRvdygpOworICAgIHZvaWQgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsK
KworICAgIC8vIFBsYXRmb3JtIGltcGxlbWVudGF0aW9ucy4KKyAgICBXZWJQYWdlUHJveHkqIHBs
YXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisgICAgdm9pZCBwbGF0Zm9ybUNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisgICAgdm9pZCBwbGF0Zm9ybVJlc2V0U3RhdGUo
KTsKKyAgICB2b2lkIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7CisgICAgdm9pZCBwbGF0Zm9ybVNh
dmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJh
c2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpOworICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKKyAgICB2b2lk
IHBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZv
aWQgcGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpBcHBlYXJhbmNlKTsKKyAgICB2b2lkIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7
CisgICAgdm9pZCBwbGF0Zm9ybU9wZW5VUkxFeHRlcm5hbGx5KGNvbnN0IFN0cmluZyYgdXJsKTsK
KyAgICB2b2lkIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbyYpOworCisgICAgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudCogbV9jbGll
bnQgeyBudWxscHRyIH07CisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxs
cHRyIH07CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMpCisgICAgUmVmUHRyPFdl
Ykluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5PiBtX2V4dGVuc2lvbkNvbnRyb2xs
ZXI7CisjZW5kaWYKKyAgICAKKyAgICBSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gbV9kZWJ1Z2dh
YmxlSW5mbzsKKyAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7CisKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgUmV0YWluUHRyPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVj
dG9yVmlldzsKKyAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IG1fd2luZG93OworICAgIFJldGFpblB0
cjxXS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsK
KyAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVh
bFVSTE1hcDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9zaGVldFJlY3Q7CisjZW5kaWYKKyNp
ZiBQTEFURk9STShHVEspCisgICAgR3RrV2lkZ2V0KiBtX3dlYlZpZXcgeyBudWxscHRyIH07Cisg
ICAgR3RrV2lkZ2V0KiBtX3dpbmRvdyB7IG51bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRGT1JN
KFdJTl9DQUlSTykKKyAgICBIV05EIG1fZnJvbnRlbmRIYW5kbGU7CisgICAgUmVmUHRyPFdlYlZp
ZXc+IG1fd2ViVmlldzsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwMzEx
YTA5OTUzMTIwNGQzNTQ3MjI4NDQwNjNkODJiYzQ1ZDlmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDQzIEBACisjIENvcHlyaWdodCAoQykgMjAxNi0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eSB7CisgICAgRnJvbnRlbmRMb2FkZWQoKQorICAgIEZyb250ZW5kRGlkQ2xvc2UoKQorICAgIFJl
b3BlbigpCisgICAgUmVzZXRTdGF0ZSgpCisgICAgQnJpbmdUb0Zyb250KCkKKworICAgIFNhdmUo
U3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29s
IGZvcmNlU2F2ZUFzKQorICAgIEFwcGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50
KQorCisgICAgU2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6QXBwZWFyYW5jZSBhcHBlYXJhbmNlKQorCisgICAgU2V0U2hlZXRSZWN0KFdlYkNvcmU6
OkZsb2F0UmVjdCByZWN0KQorCisgICAgU3RhcnRXaW5kb3dEcmFnKCkKKworICAgIE9wZW5VUkxF
eHRlcm5hbGx5KFN0cmluZyB1cmwpCisgICAgU2hvd0NlcnRpZmljYXRlKFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm8pCisKKyAgICBTZW5kTWVzc2FnZVRvQmFja2VuZChT
dHJpbmcgbWVzc2FnZSkKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3ZGNhYjUwMjFiNmNjZGJmNDA2Y2UzN2NmZmRiMmEyZTkzOTE5YWM5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4
OTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9s
YSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCi0KLSNpbmNsdWRl
ICJBUElJbnNwZWN0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCi0jaW5j
bHVkZSAiQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiQVBJVUlDbGll
bnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JCcm93c2VyQWdlbnQuaCIKLSNpbmNsdWRlICJXZWJB
dXRvbWF0aW9uU2Vzc2lvbi5oIgotI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKLSNpbmNsdWRl
ICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJX
ZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eS5o
IgotI2luY2x1ZGUgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQYWdl
R3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0jaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0RW5jb2RpbmcuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NldEZv
clNjb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9S
TShHVEspCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaCIKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1jb25zdCB1bnNp
Z25lZCBXZWJJbnNwZWN0b3JQcm94eTo6bWluaW11bVdpbmRvd1dpZHRoID0gNTAwOwotY29uc3Qg
dW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6Om1pbmltdW1XaW5kb3dIZWlnaHQgPSA0MDA7Ci0K
LWNvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGggPSAx
MDAwOwotY29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWln
aHQgPSA2NTA7Ci0KLVdlYkluc3BlY3RvclByb3h5OjpXZWJJbnNwZWN0b3JQcm94eShXZWJQYWdl
UHJveHkmIGluc3BlY3RlZFBhZ2UpCi0gICAgOiBtX2luc3BlY3RlZFBhZ2UoJmluc3BlY3RlZFBh
Z2UpCi0gICAgLCBtX2luc3BlY3RvckNsaWVudChtYWtlVW5pcXVlPEFQSTo6SW5zcGVjdG9yQ2xp
ZW50PigpKQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAsIG1fY2xvc2VGcm9udGVuZEFmdGVySW5h
Y3Rpdml0eVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYkluc3BlY3RvclByb3h5Ojpj
bG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCkKLSNlbmRpZgotewotICAgIG1f
aW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53
ZWJQYWdlSUQoKSwgKnRoaXMpOwotfQotCi1XZWJJbnNwZWN0b3JQcm94eTo6fldlYkluc3BlY3Rv
clByb3h5KCkKLXsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0SW5zcGVjdG9yQ2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okluc3BlY3RvckNsaWVudD4mJiBpbnNwZWN0b3JDbGll
bnQpCi17Ci0gICAgaWYgKCFpbnNwZWN0b3JDbGllbnQpIHsKLSAgICAgICAgbV9pbnNwZWN0b3JD
bGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6SW5zcGVjdG9yQ2xpZW50PigpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9pbnNwZWN0b3JDbGllbnQgPSBXVEZNb3ZlKGluc3BlY3RvckNs
aWVudCk7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0aW9uTGV2ZWwo
KSBjb25zdAotewotICAgIHJldHVybiBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoaW5zcGVjdGVkUGFn
ZSgpKTsKLX0KLQotV2ViUHJlZmVyZW5jZXMmIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQ
YWdlUHJlZmVyZW5jZXMoKSBjb25zdAotewotICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOwot
ICAgIHJldHVybiBtX2luc3BlY3RvclBhZ2UtPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmludmFsaWRhdGUoKQotewotICAgIGNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci0KLSAgICBy
ZXNldCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpTZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSkpOwotfQotCi0vLyBQ
dWJsaWMgQVBJcwotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6aXNGcm9udCgpCi17Ci0gICAgaWYg
KCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBw
bGF0Zm9ybUlzRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y29ubmVjdCgp
Ci17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbV9pbnNwZWN0ZWRQYWdlLT5wcmVmZXJlbmNlcygpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2hvd01lc3NhZ2VTZW50KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3Nob3dNZXNzYWdlU2VudCA9IHRydWU7Ci0gICAgbV9pZ25vcmVG
aXJzdEJyaW5nVG9Gcm9udCA9IHRydWU7Ci0KLSAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKLQot
ICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKSwgMCk7Ci0gICAgbV9pbnNwZWN0
ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaXNDb25uZWN0ZWQoKSkgewotICAgICAgICBicmlu
Z1RvRnJvbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbm5lY3QoKTsKLQot
ICAgIC8vIERvbid0IGlnbm9yZSB0aGUgZmlyc3QgYnJpbmdUb0Zyb250IHNvIGl0IG9wZW5zIHRo
ZSBJbnNwZWN0b3IuCi0gICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpoaWRlKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVk
UGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKLQotICAg
IHBsYXRmb3JtSGlkZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZSgpCi17
Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5z
cGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpDbG9zZSgpKTsKLQotICAg
IGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OmNsb3NlRm9yQ3Jhc2goKQotewotICAgIGNsb3NlKCk7Ci0KLSAgICBwbGF0Zm9ybURpZENs
b3NlRm9yQ3Jhc2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkKLXsK
LSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xvc2Uo
KTsKLSAgICBzaG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0U3RhdGUo
KQotewotICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwotICAgIEFTU0VSVChtX2luc3BlY3Rv
clBhZ2UpOwotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlIHx8ICFtX2luc3BlY3RvclBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUlu
c3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCku
ZGVsZXRlSW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCk7Ci0gICAgaW5zcGVjdG9yUGFn
ZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKLSAgICBpbnNw
ZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwotCi0g
ICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJl
c2V0KCkKLXsKLSAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKSB7Ci0gICAgICAgIG1faW5zcGVjdGVk
UGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdl
SUQoKSk7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZSA9IG51bGxwdHI7Ci0gICAgfQotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJv
eHkmIGluc3BlY3RlZFBhZ2UpCi17Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOwotCi0g
ICAgbV9pbnNwZWN0ZWRQYWdlID0gJmluc3BlY3RlZFBhZ2U7Ci0gICAgbV9pbnNwZWN0ZWRQYWdl
LT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpLCAq
dGhpcyk7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQotICAgICAgICBtX2luc3BlY3RvclBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpVcGRhdGVDb25uZWN0aW9uKCkpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpB
dHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQ
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3Rvcjo6U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlm
aWVyKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDb25zb2xlKCkKLXsKLSAg
ICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRlRnJv
bnRlbmRQYWdlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3Rvcjo6U2hvd0NvbnNvbGUoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNo
b3dSZXNvdXJjZXMoKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93UmVzb3VyY2VzKCkpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViRnJhbWVQcm94
eSogZnJhbWUpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShmcmFtZS0+
ZnJhbWVJRCgpKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaEJvdHRvbSgp
Ci17Ci0gICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjphdHRhY2hSaWdodCgpCi17Ci0gICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRl
OjpSaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaExlZnQoKQotewot
ICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6TGVmdCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OmF0dGFjaChBdHRhY2htZW50U2lkZSBzaWRlKQotewotICAgIEFTU0VSVChtX2luc3Bl
Y3RvclBhZ2UpOwotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlIHx8ICFtX2luc3BlY3RvclBhZ2Ug
fHwgKCFtX2lzQXR0YWNoZWQgJiYgIXBsYXRmb3JtQ2FuQXR0YWNoKG1fY2FuQXR0YWNoKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1faXNBdHRhY2hlZCA9IHRydWU7Ci0gICAgbV9hdHRhY2ht
ZW50U2lkZSA9IHNpZGU7Ci0KLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNw
ZWN0b3JBdHRhY2htZW50U2lkZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oc2lkZSkpOwotCi0gICAg
aWYgKG1faXNWaXNpYmxlKQotICAgICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJ
bnNwZWN0b3JTdGFydHNBdHRhY2hlZCh0cnVlKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZCh0cnVlKSk7Ci0KLSAgICBzd2l0
Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206
Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OkF0dGFjaGVkQm90dG9tKCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQXR0YWNobWVu
dFNpZGU6OlJpZ2h0OgotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNh
c2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgcGxhdGZvcm1BdHRhY2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6ZGV0YWNoKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSB8fCAhbV9pbnNwZWN0
b3JQYWdlIHx8ICghbV9pc0F0dGFjaGVkICYmIG1faXNWaXNpYmxlKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7Ci0KLSAgICBpZiAobV9pc1Zpc2libGUpCi0g
ICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkKGZhbHNlKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yOjpTZXRBdHRhY2hlZChmYWxzZSkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOwotCi0gICAgcGxhdGZvcm1EZXRh
Y2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOwotICAg
IGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnNwZWN0b3JQ
YWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdodChoZWlnaHQpOwotICAg
IHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsK
LSAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5z
cGVjdG9yQXR0YWNoZWRXaWR0aCh3aWR0aCk7Ci0gICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRv
d1dpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0U2hlZXRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBwbGF0Zm9ybVNldFNoZWV0UmVjdChyZWN0
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAg
ICBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
Ojp0b2dnbGVQYWdlUHJvZmlsaW5nKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNQcm9maWxpbmdQYWdlKQotICAgICAgICBtX2lu
c3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RvcFBhZ2VQcm9maWxp
bmcoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U3RhcnRQYWdlUHJvZmlsaW5nKCkpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5Ojp0b2dnbGVFbGVtZW50U2VsZWN0aW9uKCkKLXsKLSAgICBpZiAoIW1faW5zcGVj
dGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZWxlbWVudFNlbGVjdGlvbkFj
dGl2ZSkgewotICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgPSB0cnVlOwot
ICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3Rv
cEVsZW1lbnRTZWxlY3Rpb24oKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29ubmVjdCgpOwot
ICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3Rh
cnRFbGVtZW50U2VsZWN0aW9uKCkpOwotICAgIH0KLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94
eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwmIHVybCkKLXsKLSAgICAvLyBV
c2UgVVJMIHNvIHdlIGNhbiBjb21wYXJlIHRoZSBwYXRocyBhbmQgcHJvdG9jb2xzLgotICAgIFVS
TCBtYWluUGFnZVVSTChVUkwoKSwgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwo
KSk7Ci0gICAgaWYgKHVybC5wcm90b2NvbCgpID09IG1haW5QYWdlVVJMLnByb3RvY29sKCkgJiYg
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRoKCkpID09IGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlcyhtYWluUGFnZVVSTC5wYXRoKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IC8vIFdlIG1pZ2h0IG5vdCBoYXZlIGEgVGVzdCBVUkwgaW4gUHJvZHVjdGlvbiBidWlsZHMuCi0g
ICAgU3RyaW5nIHRlc3RQYWdlVVJMU3RyaW5nID0gV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rv
clRlc3RQYWdlVVJMKCk7Ci0gICAgaWYgKHRlc3RQYWdlVVJMU3RyaW5nLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBVUkwgdGVzdFBhZ2VVUkwoVVJMKCksIHRlc3RQYWdl
VVJMU3RyaW5nKTsKLSAgICByZXR1cm4gdXJsLnByb3RvY29sKCkgPT0gdGVzdFBhZ2VVUkwucHJv
dG9jb2woKSAmJiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnBhdGgoKSkgPT0gZGVjb2Rl
VVJMRXNjYXBlU2VxdWVuY2VzKHRlc3RQYWdlVVJMLnBhdGgoKSk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9y
UGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1D
cmVhdGVGcm9udGVuZFBhZ2UoKTsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKLSAgICBp
ZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJhY2tJbnNwZWN0
b3JQYWdlKG1faW5zcGVjdG9yUGFnZSwgbV9pbnNwZWN0ZWRQYWdlKTsKLQotICAgIC8vIE1ha2Ug
c3VyZSB0aGUgaW5zcGVjdGVkIHBhZ2UgaGFzIGEgcnVubmluZyBXZWJQcm9jZXNzIHNvIHdlIGNh
biBpbnNwZWN0IGl0LgotICAgIG1faW5zcGVjdGVkUGFnZS0+bGF1bmNoSW5pdGlhbFByb2Nlc3NJ
Zk5lY2Vzc2FyeSgpOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSwgKnRoaXMpOwotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9FWFRFTlNJT05TKQotICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlciA9IFdlYklu
c3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5OjpjcmVhdGUoKm1faW5zcGVjdG9yUGFn
ZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6b3BlbkxvY2FsSW5zcGVj
dG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KQotewotICAgIGlmICgh
bV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faW5zcGVjdGVk
UGFnZS0+cHJlZmVyZW5jZXMoKS5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5o
YXNMb2NhbEZyb250ZW5kKCkpIHsKLSAgICAgICAgc2hvdygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV91bmRlclRlc3QgPSB1bmRlclRlc3Q7Ci0gICAgY3JlYXRlRnJvbnRlbmRQ
YWdlKCk7Ci0KLSAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKLSAgICBpZiAoIW1faW5zcGVj
dG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RXN0YWJsaXNoQ29ubmVjdGlvbihtX2luc3BlY3RlZFBh
Z2UtPmlkZW50aWZpZXIoKSwgaW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpLCBtX3VuZGVyVGVzdCwg
aW5zcGVjdGlvbkxldmVsKCkpKTsKLQotICAgIEFTU0VSVCghbV9pc0FjdGl2ZUZyb250ZW5kKTsK
LSAgICBtX2lzQWN0aXZlRnJvbnRlbmQgPSB0cnVlOwotICAgIG1faW5zcGVjdGVkUGFnZS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZCgqdGhpcyk7Ci0KLSAgICBpZiAoIW1f
dW5kZXJUZXN0KSB7Ci0gICAgICAgIG1fY2FuQXR0YWNoID0gcGxhdGZvcm1DYW5BdHRhY2goY2Fu
QXR0YWNoKTsKLSAgICAgICAgbV9pc0F0dGFjaGVkID0gc2hvdWxkT3BlbkF0dGFjaGVkKCk7Ci0g
ICAgICAgIG1fYXR0YWNobWVudFNpZGUgPSBzdGF0aWNfY2FzdDxBdHRhY2htZW50U2lkZT4oaW5z
cGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNobWVudFNpZGUoKSk7Ci0KLSAg
ICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0
dGFjaGVkKG1faXNBdHRhY2hlZCkpOwotCi0gICAgICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewotICAgICAgICAgICAgY2FzZSBB
dHRhY2htZW50U2lkZTo6Qm90dG9tOgotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkQm90dG9tKCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdo
dDoKLSAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgotICAgICAgICAgICAgICAgIG1f
aW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVm
dCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpEZXRhY2hlZCgpKTsKLQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNo
KSk7Ci0gICAgfQotCi0gICAgLy8gTm90aWZ5IFdlYktpdCBjbGllbnQgd2hlbiBhIGxvY2FsIGlu
c3BlY3RvciBhdHRhY2hlcyBzbyB0aGF0IGl0IG1heSBpbnN0YWxsIGRlbGVnYXRlcyBwcmlvciB0
byB0aGUgX1dLSW5zcGVjdG9yIGxvYWRpbmcgaXRzIGZyb250ZW5kLgotICAgIG1faW5zcGVjdGVk
UGFnZS0+dWlDbGllbnQoKS5kaWRBdHRhY2hMb2NhbEluc3BlY3RvcigqbV9pbnNwZWN0ZWRQYWdl
LCAqdGhpcyk7Ci0KLSAgICAvLyBCYWlsIG91dCBpZiB0aGUgY2xpZW50IGNsb3NlZCB0aGUgaW5z
cGVjdG9yIGZyb20gdGhlIGRlbGVnYXRlIG1ldGhvZC4KLSAgICBpZiAoIW1faW5zcGVjdG9yUGFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChV
UkwoVVJMKCksIG1fdW5kZXJUZXN0ID8gV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQ
YWdlVVJMKCkgOiBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW4oKQotewotICAgIGlmIChtX3VuZGVyVGVzdCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBTZXRGb3JTY29wZTxib29sPiBpc09wZW5p
bmcobV9pc09wZW5pbmcsIHRydWUpOwotI2VuZGlmCi0KLSAgICBtX2lzVmlzaWJsZSA9IHRydWU7
Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0
SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAg
ICBwbGF0Zm9ybUF0dGFjaCgpOwotICAgIGVsc2UKLSAgICAgICAgcGxhdGZvcm1DcmVhdGVGcm9u
dGVuZFdpbmRvdygpOwotCi0gICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6ZGlkQ2xvc2UoKQotewotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdl
QW5kV2luZG93KCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gR3VhcmQgYWdhaW5zdCBjYWxscyB0byBjbG9zZSgpIG1hZGUgYnkgdGhlIGNs
aWVudCB3aGlsZSBhbHJlYWR5IGNsb3NpbmcuCi0gICAgaWYgKG1fY2xvc2luZykKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIFNldEZvclNjb3BlPGJvb2w+IHJlZW50cmFuY3lQcm90ZWN0b3Io
bV9jbG9zaW5nLCB0cnVlKTsKLSAgICAKLSAgICAvLyBOb3RpZnkgV2ViS2l0IGNsaWVudCB3aGVu
IGEgbG9jYWwgaW5zcGVjdG9yIGNsb3NlcyBzbyBpdCBjYW4gY2xlYXIgX1dLSW5zcGVjdG9yRGVs
ZWdhdGUgYW5kIHBlcmZvcm0gb3RoZXIgY2xlYW51cC4KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnVp
Q2xpZW50KCkud2lsbENsb3NlTG9jYWxJbnNwZWN0b3IoKm1faW5zcGVjdGVkUGFnZSwgKnRoaXMp
OwotCi0gICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKLSAgICBtX2lzUHJvZmlsaW5nUGFnZSA9IGZh
bHNlOwotICAgIG1fc2hvd01lc3NhZ2VTZW50ID0gZmFsc2U7Ci0gICAgbV9pZ25vcmVGaXJzdEJy
aW5nVG9Gcm9udCA9IGZhbHNlOwotCi0gICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0
b3JQYWdlKTsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUk6OlNldElzVmlzaWJsZShtX2lzVmlzaWJsZSkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+
cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCkp
OwotCi0gICAgaWYgKG1faXNBY3RpdmVGcm9udGVuZCkgewotICAgICAgICBtX2lzQWN0aXZlRnJv
bnRlbmQgPSBmYWxzZTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9s
bGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKCp0aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAobV9pc0F0
dGFjaGVkKQotICAgICAgICBwbGF0Zm9ybURldGFjaCgpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RP
Ul9FWFRFTlNJT05TKQotICAgIC8vIFRoaXMgZXh0ZW5zaW9uIGNvbnRyb2xsZXIgbWF5IGJlIGtl
cHQgYWxpdmUgYnkgdGhlIElQQyBkaXNwYXRjaGVyIGJleW9uZCB0aGUgcG9pbnQKLSAgICAvLyB3
aGVuIG1faW5zcGVjdG9yUGFnZSBpcyBjbGVhcmVkIGJlbG93LiBOb3RpZnkgdGhlIGNvbnRyb2xs
ZXIgc28gaXQgY2FuIGNsZWFuIHVwIGJlZm9yZSB0aGVuLgotICAgIG1fZXh0ZW5zaW9uQ29udHJv
bGxlci0+aW5zcGVjdG9yRnJvbnRlbmRXaWxsQ2xvc2UoKTsKLSAgICBtX2V4dGVuc2lvbkNvbnRy
b2xsZXIgPSBudWxscHRyOwotI2VuZGlmCi0gICAgCi0gICAgLy8gTnVsbCBvdXQgbV9pbnNwZWN0
b3JQYWdlIGFmdGVyIHBsYXRmb3JtRGV0YWNoKCksIHNvIHRoZSB2aWV3cyBjYW4gYmUgY2xlYW5l
ZCB1cCBjb3JyZWN0bHkuCi0gICAgbV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsKLQotICAgIG1f
aXNBdHRhY2hlZCA9IGZhbHNlOwotICAgIG1fY2FuQXR0YWNoID0gZmFsc2U7Ci0gICAgbV91bmRl
clRlc3QgPSBmYWxzZTsKLQotICAgIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5k
aXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2FnZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OmZyb250ZW5kTG9hZGVkKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIGF1dG9tYXRpb25TZXNzaW9uID0gbV9p
bnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5hdXRvbWF0aW9uU2Vzc2lvbigp
KQotICAgICAgICBhdXRvbWF0aW9uU2Vzc2lvbi0+aW5zcGVjdG9yRnJvbnRlbmRMb2FkZWQoKm1f
aW5zcGVjdGVkUGFnZSk7Ci0gICAgCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQot
ICAgIGlmIChtX2V4dGVuc2lvbkNvbnRyb2xsZXIpCi0gICAgICAgIG1fZXh0ZW5zaW9uQ29udHJv
bGxlci0+aW5zcGVjdG9yRnJvbnRlbmRMb2FkZWQoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpicmluZ1RvRnJvbnQoKQotewotICAgIC8vIFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwgdGVsbHMgdXMgdG8gZG8gdGhpcyBvbiBsb2FkLiBXZSB3YW50
IHRvCi0gICAgLy8gaWdub3JlIGl0IG9uY2UgaWYgd2Ugb25seSB3YW50ZWQgdG8gY29ubmVjdC4g
VGhpcyBhbGxvd3MgdGhlIEluc3BlY3RvciB0byBsYXRlcgotICAgIC8vIHJlcXVlc3QgdG8gYmUg
YnJvdWdodCB0byB0aGUgZnJvbnQgd2hlbiBhIGJyZWFrcG9pbnQgaXMgaGl0IG9yIHNvbWUgb3Ro
ZXIgYWN0aW9uLgotICAgIGlmIChtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250KSB7Ci0gICAgICAg
IG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChtX2lzVmlzaWJsZSkKLSAgICAgICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQo
KTsKLSAgICBlbHNlCi0gICAgICAgIG9wZW4oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6YnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAgcGxhdGZvcm1CcmluZ0luc3Bl
Y3RlZFBhZ2VUb0Zyb250KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaEF2
YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCi17Ci0gICAgYm9vbCBwcmV2aW91c0Nh
bkF0dGFjaCA9IG1fY2FuQXR0YWNoOwotCi0gICAgbV9jYW5BdHRhY2ggPSBtX2lzQXR0YWNoZWQg
fHwgcGxhdGZvcm1DYW5BdHRhY2goYXZhaWxhYmxlKTsKLQotICAgIGlmIChwcmV2aW91c0NhbkF0
dGFjaCA9PSBtX2NhbkF0dGFjaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW5zcGVj
dG9yUGFnZSAmJiAhbV91bmRlclRlc3QpCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRh
Y2gpKTsKLQotICAgIHBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChtX2NhbkF0dGFj
aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEZvcmNlZEFwcGVhcmFuY2UoSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKLXsKLSAgICBwbGF0
Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoYXBwZWFyYW5jZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6Om9wZW5VUkxFeHRlcm5hbGx5KGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIG1f
aW5zcGVjdG9yQ2xpZW50LT5vcGVuVVJMRXh0ZXJuYWxseSgqdGhpcywgdXJsKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVy
bFN0cmluZykKLXsKLSAgICBwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRp
ZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIHBsYXRmb3JtU2hvd0NlcnRpZmlj
YXRlKGNlcnRpZmljYXRlSW5mbyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmVsZW1l
bnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZlKQotewotICAgIG1fZWxlbWVudFNlbGVjdGlv
bkFjdGl2ZSA9IGFjdGl2ZTsKLQotICAgIGlmIChtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFu
Z2UpIHsKLSAgICAgICAgbV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7Ci0g
ICAgICAgIGlmICghbV9pc1Zpc2libGUpCi0gICAgICAgICAgICBjbG9zZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGFjdGl2ZSkKLSAgICAgICAgcGxhdGZvcm1CcmluZ0lu
c3BlY3RlZFBhZ2VUb0Zyb250KCk7Ci0gICAgZWxzZSBpZiAoaXNDb25uZWN0ZWQoKSkKLSAgICAg
ICAgYnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRpbWVsaW5l
UmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBtX2lzUHJvZmlsaW5nUGFnZSA9
IGFjdGl2ZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0RGV2ZWxvcGVyUHJlZmVy
ZW5jZU92ZXJyaWRlKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5j
ZSBkZXZlbG9wZXJQcmVmZXJlbmNlLCBPcHRpb25hbDxib29sPiBvdmVycmlkZVZhbHVlKQotewot
ICAgIHN3aXRjaCAoZGV2ZWxvcGVyUHJlZmVyZW5jZSkgewotICAgIGNhc2UgSW5zcGVjdG9yQ2xp
ZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudERlYnVnTW9k
ZUVuYWJsZWQ6Ci0gICAgICAgIGlmIChtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgICAgICBtX2lu
c3BlY3RlZFBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dERlYnVnTW9kZShvdmVycmlkZVZhbHVlICYmIG92ZXJyaWRlVmFsdWUudmFsdWUoKSk7Ci0gICAg
ICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJl
bmNlOjpJVFBEZWJ1Z01vZGVFbmFibGVkOgotICAgICAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKQot
ICAgICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShvdmVycmlkZVZhbHVlICYmIG92ZXJyaWRlVmFsdWUu
dmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5zcGVjdG9yQ2xpZW50OjpE
ZXZlbG9wZXJQcmVmZXJlbmNlOjpNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOgotI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCi0gICAgICAgIGlmIChtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgICAg
ICBtX2luc3BlY3RlZFBhZ2UtPnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShv
dmVycmlkZVZhbHVlKTsKLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxh
YmxlKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERpYWdub3N0aWNMb2dnaW5n
QXZhaWxhYmxlKGF2YWlsYWJsZSkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxl
KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBi
b29sIGZvcmNlU2F2ZUFzKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlLT5wcmVmZXJlbmNl
cygpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKCFmaWxlbmFtZS5pc0VtcHR5KCkpOwotICAgIGlmIChmaWxlbmFtZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtU2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFz
ZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojph
cHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotewot
ICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlLT5wcmVmZXJlbmNlcygpLmRldmVsb3BlckV4dHJhc0Vu
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFmaWxlbmFtZS5pc0VtcHR5
KCkpOwotICAgIGlmIChmaWxlbmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHBsYXRmb3JtQXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0
b3JQcm94eTo6c2hvdWxkT3BlbkF0dGFjaGVkKCkKLXsKLSAgICByZXR1cm4gaW5zcGVjdG9yUGFn
ZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKSAmJiBjYW5BdHRhY2goKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZXZhbHVhdGVJbkZyb250ZW5kRm9yVGVzdGlu
Zyhjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCi17Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OkV2YWx1YXRlSW5Gcm9udGVuZEZvclRlc3RpbmcoZXhwcmVzc2lvbikp
OwotfQotCi0vLyBVbnN1cHBvcnRlZCBjb25maWd1cmF0aW9ucyBjYW4gdXNlIHRoZSBzdHVicyBw
cm92aWRlZCBoZXJlLgotCi0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYg
IVBMQVRGT1JNKFdJTikKLQotV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRl
RnJvbnRlbmRXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3Rh
dGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJv
bnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJh
bmNlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hv
d0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRX
aW5kb3dIZWlnaHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dp
ZHRoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdl
VVJMKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLURlYnVnZ2Fi
bGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjpl
bXB0eSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVk
V2luZG93V2lkdGgodW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJv
b2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotI2VuZGlmIC8vICFQTEFURk9STShN
QUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCi0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYwNWUwYzg5
NGFkN2Q2MTk1NzRhNDI0NTBkMWU5ODE2MjAwZTRhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKLSNpbmNsdWRlICJEZWJ1
Z2dhYmxlSW5mb0RhdGEuaCIKLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRl
ICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiV0tH
ZW9tZXRyeS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+Ci0KLU9CSkNfQ0xBU1MgTlNVUkw7Ci1PQkpDX0NMQVNTIE5TVmlldzsKLU9CSkNfQ0xB
U1MgTlNXaW5kb3c7Ci1PQkpDX0NMQVNTIFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcjsK
LU9CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKLSNlbGlmIFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgQ2VydGlmaWNhdGVJbmZvOwotfQotCi1uYW1lc3BhY2UgQVBJIHsKLWNsYXNzIEluc3Bl
Y3RvckNsaWVudDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkZyYW1lUHJv
eHk7Ci1jbGFzcyBXZWJJbnNwZWN0b3JQcm94eUNsaWVudDsKLWNsYXNzIFdlYlBhZ2VQcm94eTsK
LWNsYXNzIFdlYlByZWZlcmVuY2VzOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykK
LWNsYXNzIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5OwotI2VuZGlmCi0K
LWVudW0gY2xhc3MgQXR0YWNobWVudFNpZGUgewotICAgIEJvdHRvbSwKLSAgICBSaWdodCwKLSAg
ICBMZWZ0LAotfTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHkKLSAgICA6IHB1YmxpYyBBUEk6
Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6Okluc3BlY3Rvcj4KLSAgICAsIHB1YmxpYyBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgICwgcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFu
bmVsCi0jaWYgUExBVEZPUk0oV0lOKQotICAgICwgcHVibGljIFdlYkNvcmU6OldpbmRvd01lc3Nh
Z2VMaXN0ZW5lcgotI2VuZGlmCi17Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0
b3JQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSYgaW5zcGVjdGVkUGFnZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvclByb3h5KGluc3BlY3RlZFBhZ2Up
KTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBXZWJJbnNwZWN0b3JQcm94eShXZWJQYWdlUHJveHkm
KTsKLSAgICB2aXJ0dWFsIH5XZWJJbnNwZWN0b3JQcm94eSgpOwotCi0gICAgdm9pZCBpbnZhbGlk
YXRlKCk7Ci0KLSAgICBBUEk6Okluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50KCkgeyBy
ZXR1cm4gKm1faW5zcGVjdG9yQ2xpZW50OyB9Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JDbGllbnQo
c3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5zcGVjdG9yQ2xpZW50PiYmKTsKLQotICAgIC8vIFB1Ymxp
YyBBUElzCi0gICAgV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9pbnNwZWN0ZWRQYWdlOyB9Ci0gICAgV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9pbnNwZWN0b3JQYWdlOyB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0VY
VEVOU0lPTlMpCi0gICAgV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkqIGV4
dGVuc2lvbkNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX2V4dGVuc2lvbkNvbnRyb2xsZXIu
Z2V0KCk7IH0KLSNlbmRpZgotCi0gICAgYm9vbCBpc0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV9pbnNwZWN0b3JQYWdlOyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVy
biBtX2lzVmlzaWJsZTsgfQotICAgIGJvb2wgaXNGcm9udCgpOwotCi0gICAgdm9pZCBjb25uZWN0
KCk7Ci0KLSAgICB2b2lkIHNob3coKTsKLSAgICB2b2lkIGhpZGUoKTsKLSAgICB2b2lkIGNsb3Nl
KCk7Ci0gICAgdm9pZCBjbG9zZUZvckNyYXNoKCk7Ci0gICAgdm9pZCByZW9wZW4oKTsKLSAgICB2
b2lkIHJlc2V0U3RhdGUoKTsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIHVwZGF0ZUZv
ck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQcm94eSYpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IGVudW0gY2xhc3MgSW5zcGVjdGlvblRhcmdldFR5cGUgeyBMb2NhbCwgUmVtb3RlIH07Ci0gICAg
c3RhdGljIFJldGFpblB0cjxOU1dpbmRvdz4gY3JlYXRlRnJvbnRlbmRXaW5kb3coTlNSZWN0IHNh
dmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRUeXBlKTsKLQotICAgIHZvaWQgZGlkQmVj
b21lQWN0aXZlKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29u
c3Q7Ci0gICAgdm9pZCBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCA9IDApOwot
ICAgIHZvaWQgd2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKLSAgICB2b2lkIHdpbmRvd0Z1bGxTY3Jl
ZW5EaWRDaGFuZ2UoKTsKLSAgICBOU1dpbmRvdyAqaW5zcGVjdG9yV2luZG93KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCk7IH0KLQotICAgIHZvaWQgY2xvc2VGcm9udGVu
ZFBhZ2UoKTsKLSAgICB2b2lkIGNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVk
KCk7Ci0KLSAgICB2b2lkIGF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywg
TlNWaWV3ICpuZXdWaWV3KTsKLSAgICB2b2lkIGF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3co
TlNXaW5kb3cgKm9sZFdpbmRvdyk7Ci0gICAgdm9pZCBhdHRhY2htZW50RGlkTW92ZVRvV2luZG93
KE5TV2luZG93ICpuZXdXaW5kb3cpOwotCi0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBz
aGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVjdDsgfQotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShHVEspCi0gICAgR3RrV2lkZ2V0KiBpbnNwZWN0b3JWaWV3KCkgY29uc3QgeyByZXR1
cm4gbV9pbnNwZWN0b3JWaWV3OyB9OwotICAgIHZvaWQgc2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4mJik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2hvd0Nv
bnNvbGUoKTsKLSAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKLSAgICB2b2lkIHNob3dNYWluUmVz
b3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5Kik7Ci0gICAgdm9pZCBvcGVuVVJMRXh0ZXJuYWxs
eShjb25zdCBTdHJpbmcmIHVybCk7Ci0KLSAgICBBdHRhY2htZW50U2lkZSBhdHRhY2htZW50U2lk
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNobWVudFNpZGU7IH0KLSAgICBib29sIGlzQXR0YWNo
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0YWNoZWQ7IH0KLSAgICB2b2lkIGF0dGFjaFJpZ2h0
KCk7Ci0gICAgdm9pZCBhdHRhY2hMZWZ0KCk7Ci0gICAgdm9pZCBhdHRhY2hCb3R0b20oKTsKLSAg
ICB2b2lkIGF0dGFjaChBdHRhY2htZW50U2lkZSA9IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pOwot
ICAgIHZvaWQgZGV0YWNoKCk7Ci0KLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVu
c2lnbmVkKTsKLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpOwotCi0g
ICAgdm9pZCBzZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0KLSAgICB2
b2lkIHN0YXJ0V2luZG93RHJhZygpOwotCi0gICAgYm9vbCBpc1Byb2ZpbGluZ1BhZ2UoKSBjb25z
dCB7IHJldHVybiBtX2lzUHJvZmlsaW5nUGFnZTsgfQotICAgIHZvaWQgdG9nZ2xlUGFnZVByb2Zp
bGluZygpOwotCi0gICAgYm9vbCBpc0VsZW1lbnRTZWxlY3Rpb25BY3RpdmUoKSBjb25zdCB7IHJl
dHVybiBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmU7IH0KLSAgICB2b2lkIHRvZ2dsZUVsZW1lbnRT
ZWxlY3Rpb24oKTsKLQotICAgIGJvb2wgaXNVbmRlclRlc3QoKSBjb25zdCB7IHJldHVybiBtX3Vu
ZGVyVGVzdDsgfQotCi0gICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29s
KTsKLQotICAgIC8vIFByb3ZpZGVkIGJ5IHBsYXRmb3JtIFdlYkluc3BlY3RvclByb3h5IGltcGxl
bWVudGF0aW9ucy4KLSAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclBhZ2VVUkwoKTsKLSAgICBz
dGF0aWMgU3RyaW5nIGluc3BlY3RvclRlc3RQYWdlVVJMKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNN
YWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwmKTsKLSAgICBzdGF0aWMgRGVidWdnYWJs
ZUluZm9EYXRhIGluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKTsKLQotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBtaW5pbXVtV2luZG93V2lkdGg7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1p
bmltdW1XaW5kb3dIZWlnaHQ7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbFdp
bmRvd1dpZHRoOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93SGVpZ2h0
OwotCi0gICAgLy8gVGVzdGluZyBtZXRob2RzLgotICAgIHZvaWQgZXZhbHVhdGVJbkZyb250ZW5k
Rm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNyZWF0ZUZy
b250ZW5kUGFnZSgpOwotICAgIHZvaWQgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQot
ICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKLSAgICBDb25uZWN0aW9uVHlwZSBjb25uZWN0
aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbm5lY3Rpb25UeXBlOjpMb2NhbDsg
fQotCi0gICAgV2ViUGFnZVByb3h5KiBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpOwotICAg
IHZvaWQgcGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOwotICAgIHZvaWQgcGxhdGZvcm1D
bG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotCi0gICAgdm9pZCBwbGF0Zm9ybURpZENsb3Nl
Rm9yQ3Jhc2goKTsKLSAgICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0ZSgpOwotICAgIHZvaWQgcGxh
dGZvcm1SZXNldFN0YXRlKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotICAg
IHZvaWQgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUhpZGUoKTsKLSAgICBib29sIHBsYXRmb3JtSXNGcm9udCgpOwotICAgIHZvaWQgcGxhdGZv
cm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRG
b3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJh
bmNlKTsKLSAgICB2b2lkIHBsYXRmb3JtT3BlblVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJik7
Ci0gICAgdm9pZCBwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7Ci0g
ICAgdm9pZCBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm8mKTsKLSAgICB1bnNpZ25lZCBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpOwot
ICAgIHVuc2lnbmVkIHBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKTsKLSAgICB2b2lkIHBs
YXRmb3JtQXR0YWNoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybURldGFjaCgpOwotICAgIHZvaWQgcGxh
dGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCk7Ci0gICAgdm9pZCBwbGF0Zm9y
bVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRT
aGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0
YXJ0V2luZG93RHJhZygpOwotICAgIHZvaWQgcGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZv
cmNlU2F2ZUFzKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGNvbnN0IFN0cmluZyYgY29udGVudCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgYm9v
bCBwbGF0Zm9ybUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpOwotI2Vsc2UKLSAg
ICBib29sIHBsYXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCkgeyByZXR1
cm4gd2ViUHJvY2Vzc0NhbkF0dGFjaDsgfQotI2VuZGlmCi0KLSAgICAvLyBDYWxsZWQgYnkgV2Vi
SW5zcGVjdG9yUHJveHkgbWVzc2FnZXMKLSAgICB2b2lkIG9wZW5Mb2NhbEluc3BlY3RvckZyb250
ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCk7Ci0gICAgdm9pZCBzZXRGcm9udGVu
ZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50KTsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBmcm9udGVuZExvYWRlZCgpOwotICAgIHZv
aWQgZGlkQ2xvc2UoKTsKLSAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOwotICAgIHZvaWQgYnJpbmdJ
bnNwZWN0ZWRQYWdlVG9Gcm9udCgpOwotICAgIHZvaWQgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdl
ZChib29sKTsKLSAgICB2b2lkIHNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UpOwotICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8mKTsKLSAgICB2b2lkIGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJv
b2wpOwotICAgIHZvaWQgdGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQg
c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudDo6
RGV2ZWxvcGVyUHJlZmVyZW5jZSwgT3B0aW9uYWw8Ym9vbD4pOwotCi0gICAgdm9pZCBzYXZlKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRF
bmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwotCi0gICAgYm9vbCBjYW5BdHRhY2go
KSBjb25zdCB7IHJldHVybiBtX2NhbkF0dGFjaDsgfQotICAgIGJvb2wgc2hvdWxkT3BlbkF0dGFj
aGVkKCk7Ci0KLSAgICB2b2lkIG9wZW4oKTsKLQotICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZl
bCgpIGNvbnN0OwotCi0gICAgV2ViUHJlZmVyZW5jZXMmIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNl
cygpIGNvbnN0OwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgYXBwbHlGb3JjZWRBcHBl
YXJhbmNlKCk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQot
ICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdDsKLSNlbmRpZgotCi0j
aWYgUExBVEZPUk0oV0lOKQotICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIHduZFByb2MoSFdO
RCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotICAgIGJvb2wgcmVnaXN0ZXJXaW5kb3dDbGFzcygp
OwotICAgIHZvaWQgd2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBB
UkFNKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RlZFBh
Z2UgeyBudWxscHRyIH07Ci0gICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxs
cHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5zcGVjdG9yQ2xpZW50PiBtX2luc3Bl
Y3RvckNsaWVudDsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKLSAgICBSZWZQ
dHI8V2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHk+IG1fZXh0ZW5zaW9uQ29u
dHJvbGxlcjsKLSNlbmRpZgotICAgIAotICAgIGJvb2wgbV91bmRlclRlc3QgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc0F0dGFjaGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fY2FuQXR0YWNoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNQ
cm9maWxpbmdQYWdlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvd01lc3NhZ2VTZW50IHsgZmFs
c2UgfTsKLSAgICBib29sIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdu
b3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzQWN0aXZl
RnJvbnRlbmQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9jbG9zaW5nIHsgZmFsc2UgfTsKLQotICAg
IEF0dGFjaG1lbnRTaWRlIG1fYXR0YWNobWVudFNpZGUge0F0dGFjaG1lbnRTaWRlOjpCb3R0b219
OwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxXS0luc3BlY3RvclZpZXdDb250
cm9sbGVyPiBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyOwotICAgIFJldGFpblB0cjxOU1dpbmRv
dz4gbV9pbnNwZWN0b3JXaW5kb3c7Ci0gICAgUmV0YWluUHRyPFdLV2ViSW5zcGVjdG9yUHJveHlP
YmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsKLSAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRy
PE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcDsKLSAgICBSdW5Mb29wOjpUaW1lcjxX
ZWJJbnNwZWN0b3JQcm94eT4gbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXI7Ci0g
ICAgU3RyaW5nIG1fdXJsU3RyaW5nOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NoZWV0UmVj
dDsKLSAgICBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSBtX2Zy
b250ZW5kQXBwZWFyYW5jZSB7IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBl
YXJhbmNlOjpTeXN0ZW0gfTsKLSAgICBib29sIG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVj
dCB7IGZhbHNlIH07Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdl
Ykluc3BlY3RvclByb3h5Q2xpZW50PiBtX2NsaWVudDsKLSAgICBHdGtXaWRnZXQqIG1faW5zcGVj
dG9yVmlldyB7IG51bGxwdHIgfTsKLSAgICBHdGtXaWRnZXQqIG1faW5zcGVjdG9yV2luZG93IHsg
bnVsbHB0ciB9OwotICAgIEd0a1dpZGdldCogbV9oZWFkZXJCYXIgeyBudWxscHRyIH07Ci0gICAg
U3RyaW5nIG1faW5zcGVjdGVkVVJMU3RyaW5nOwotICAgIGJvb2wgbV9pc09wZW5pbmcgeyBmYWxz
ZSB9OwotI2VsaWYgUExBVEZPUk0oV0lOKQotICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3V2luZG93
IHsgbnVsbHB0ciB9OwotICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93IHsgbnVs
bHB0ciB9OwotICAgIEhXTkQgbV9pbnNwZWN0b3JWaWV3V2luZG93IHsgbnVsbHB0ciB9OwotICAg
IEhXTkQgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgeyBudWxscHRyIH07Ci0gICAgUmVmUHRyPFdl
YlZpZXc+IG1faW5zcGVjdG9yVmlldzsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU3Y2IxMWYyNDk5ZThiNTNiODc5MTMxZmUyNWMxMDZhYzNkYmVjNjUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251
bGwKQEAgLTEsNjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJl
IG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgot
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
Ci0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFdlYkluc3BlY3RvclByb3h5IHsKLSAgICBPcGVuTG9jYWxJ
bnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpCi0gICAgU2V0
RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmllcikK
LQotICAgIFNlbmRNZXNzYWdlVG9CYWNrZW5kKFN0cmluZyBtZXNzYWdlKQotCi0gICAgRnJvbnRl
bmRMb2FkZWQoKQotICAgIERpZENsb3NlKCkKLSAgICBCcmluZ1RvRnJvbnQoKQotICAgIEJyaW5n
SW5zcGVjdGVkUGFnZVRvRnJvbnQoKQotICAgIFJlb3BlbigpCi0gICAgUmVzZXRTdGF0ZSgpCi0K
LSAgICBTZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjpBcHBlYXJhbmNlIGFwcGVhcmFuY2UpCi0gICAgT3BlblVSTEV4dGVybmFsbHkoU3RyaW5nIHVy
bCkKLQotICAgIEluc3BlY3RlZFVSTENoYW5nZWQoU3RyaW5nIHVybFN0cmluZykKLSAgICBTaG93
Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykKLSAg
ICBFbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKLSAgICBUaW1lbGluZVJlY29y
ZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCi0gICAgU2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJy
aWRlKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZSBkZXZlbG9w
ZXJQcmVmZXJlbmNlLCBPcHRpb25hbDxib29sPiBvdmVycmlkZVZhbHVlKQotCi0gICAgU2F2ZShT
dHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wg
Zm9yY2VTYXZlQXMpCi0gICAgQXBwZW5kKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQp
Ci0KLSAgICBBdHRhY2hCb3R0b20oKQotICAgIEF0dGFjaFJpZ2h0KCkKLSAgICBBdHRhY2hMZWZ0
KCkKLSAgICBEZXRhY2goKQotCi0gICAgQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2
YWlsYWJsZSkKLQotICAgIFNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkK
LSAgICBTZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotCi0gICAgU2V0U2hl
ZXRSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotCi0gICAgU3RhcnRXaW5kb3dEcmFnKCkK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNw
ZWN0b3JVSVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JVSVByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYWE3YTllNTMxMTkyM2IwMDAxMWE1NWRm
NDk1MzEwYmM0ZGRlNGRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJUHJveHkuY3BwCkBAIC0wLDAgKzEsODkwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgorCisjaW5jbHVkZSAiQVBJSW5zcGVj
dG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIkFQSVBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIkFQSVVJQ2xpZW50LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yQnJvd3NlckFnZW50LmgiCisjaW5jbHVkZSAiV2ViQXV0b21hdGlvblNl
c3Npb24uaCIKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVj
dG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9y
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQ
cm94eS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJX
ZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIK
KyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCisjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9UZXh0RW5jb2RpbmcuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisj
aW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudC5oIgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0IHVuc2lnbmVkIFdl
Ykluc3BlY3RvclVJUHJveHk6Om1pbmltdW1XaW5kb3dXaWR0aCA9IDUwMDsKK2NvbnN0IHVuc2ln
bmVkIFdlYkluc3BlY3RvclVJUHJveHk6Om1pbmltdW1XaW5kb3dIZWlnaHQgPSA0MDA7CisKK2Nv
bnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclVJUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCA9IDEw
MDA7Citjb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojppbml0aWFsV2luZG93SGVp
Z2h0ID0gNjUwOworCitXZWJJbnNwZWN0b3JVSVByb3h5OjpXZWJJbnNwZWN0b3JVSVByb3h5KFdl
YlBhZ2VQcm94eSYgaW5zcGVjdGVkUGFnZSkKKyAgICA6IG1faW5zcGVjdGVkUGFnZSgmaW5zcGVj
dGVkUGFnZSkKKyAgICAsIG1faW5zcGVjdG9yQ2xpZW50KG1ha2VVbmlxdWU8QVBJOjpJbnNwZWN0
b3JDbGllbnQ+KCkpCisjaWYgUExBVEZPUk0oTUFDKQorICAgICwgbV9jbG9zZUZyb250ZW5kQWZ0
ZXJJbmFjdGl2aXR5VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViSW5zcGVjdG9yVUlQ
cm94eTo6Y2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQpCisjZW5kaWYKK3sK
KyAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0
ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMpOworfQorCitXZWJJbnNwZWN0b3JVSVByb3h5Ojp+
V2ViSW5zcGVjdG9yVUlQcm94eSgpCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6
c2V0SW5zcGVjdG9yQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okluc3BlY3RvckNsaWVudD4m
JiBpbnNwZWN0b3JDbGllbnQpCit7CisgICAgaWYgKCFpbnNwZWN0b3JDbGllbnQpIHsKKyAgICAg
ICAgbV9pbnNwZWN0b3JDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6SW5zcGVjdG9yQ2xpZW50Pigp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9pbnNwZWN0b3JDbGllbnQgPSBXVEZN
b3ZlKGluc3BlY3RvckNsaWVudCk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclVJUHJveHk6
Omluc3BlY3Rpb25MZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGluc3BlY3RvckxldmVsRm9y
UGFnZShpbnNwZWN0ZWRQYWdlKCkpOworfQorCitXZWJQcmVmZXJlbmNlcyYgV2ViSW5zcGVjdG9y
VUlQcm94eTo6aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9pbnNwZWN0b3JQYWdlKTsKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JQYWdlLT5wYWdlR3JvdXAo
KS5wcmVmZXJlbmNlcygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmludmFsaWRh
dGUoKQoreworICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisgICAgcGxhdGZvcm1J
bnZhbGlkYXRlKCk7CisKKyAgICByZXNldCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJv
eHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
aWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChtZXNzYWdlKSk7Cit9CisKKy8vIFB1YmxpYyBBUElzCitib29sIFdlYkluc3BlY3RvclVJUHJv
eHk6OmlzRnJvbnQoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcGxhdGZvcm1Jc0Zyb250KCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUlQcm94eTo6Y29ubmVjdCgpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlLT5wcmVmZXJlbmNl
cygpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fc2hvd01lc3NhZ2VTZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nob3dNZXNzYWdl
U2VudCA9IHRydWU7CisgICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IHRydWU7CisKKyAg
ICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2Vy
QnJlYWsoKSwgMCk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3I6OlNob3coKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvdygpCit7
CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChp
c0Nvbm5lY3RlZCgpKSB7CisgICAgICAgIGJyaW5nVG9Gcm9udCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY29ubmVjdCgpOworCisgICAgLy8gRG9uJ3QgaWdub3JlIHRoZSBmaXJz
dCBicmluZ1RvRnJvbnQgc28gaXQgb3BlbnMgdGhlIEluc3BlY3Rvci4KKyAgICBtX2lnbm9yZUZp
cnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6
aGlkZSgpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CisKKyAgICBwbGF0Zm9ybUhpZGUoKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpjbG9zZSgpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBh
Z2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yOjpDbG9zZSgpKTsKKworICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2lu
ZG93KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6Y2xvc2VGb3JDcmFzaCgpCit7
CisgICAgY2xvc2UoKTsKKworICAgIHBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnJlb3BlbigpCit7CisgICAgaWYgKCFtX2luc3BlY3Rl
ZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGNsb3NlKCk7CisgICAgc2hvdygpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnJlc2V0U3RhdGUoKQoreworICAgIEFTU0VSVCht
X2luc3BlY3RlZFBhZ2UpOworICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOworICAgIGlmICgh
bV9pbnNwZWN0ZWRQYWdlIHx8ICFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0KCk7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0
YWNoZWRXaWR0aCgpOworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3Bl
Y3RvckF0dGFjaG1lbnRTaWRlKCk7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVs
ZXRlSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5j
ZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOworCisgICAgcGxhdGZvcm1SZXNldFN0
YXRlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cmVzZXQoKQoreworICAgIGlm
IChtX2luc3BlY3RlZFBhZ2UpIHsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCku
cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAg
ICBtX2luc3BlY3RlZFBhZ2UgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0
b3JVSVByb3h5Ojp1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJveHkmIGluc3BlY3Rl
ZFBhZ2UpCit7CisgICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOworCisgICAgbV9pbnNwZWN0
ZWRQYWdlID0gJmluc3BlY3RlZFBhZ2U7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCku
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKKwor
ICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlVwZGF0ZUNvbm5lY3Rpb24oKSk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVu
dCBjb25uZWN0aW9uSWRlbnRpZmllcikKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3I6OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllcikpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnNob3dDb25zb2xlKCkKK3sKKyAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3JlYXRlRnJvbnRlbmRQ
YWdlKCk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
cjo6U2hvd0NvbnNvbGUoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvd1Jl
c291cmNlcygpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dSZXNvdXJjZXMoKSk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUlQcm94eTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkq
IGZyYW1lKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisK
KyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93TWFpblJlc291cmNlRm9yRnJhbWUoZnJhbWUtPmZy
YW1lSUQoKSkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmF0dGFjaEJvdHRvbSgp
Cit7CisgICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJUHJveHk6OmF0dGFjaFJpZ2h0KCkKK3sKKyAgICBhdHRhY2goQXR0YWNobWVudFNp
ZGU6OlJpZ2h0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRhY2hMZWZ0KCkK
K3sKKyAgICBhdHRhY2goQXR0YWNobWVudFNpZGU6OkxlZnQpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJUHJveHk6OmF0dGFjaChBdHRhY2htZW50U2lkZSBzaWRlKQoreworICAgIEFTU0VSVCht
X2luc3BlY3RvclBhZ2UpOworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlIHx8ICFtX2luc3BlY3Rv
clBhZ2UgfHwgKCFtX2lzQXR0YWNoZWQgJiYgIXBsYXRmb3JtQ2FuQXR0YWNoKG1fY2FuQXR0YWNo
KSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNBdHRhY2hlZCA9IHRydWU7CisgICAgbV9h
dHRhY2htZW50U2lkZSA9IHNpZGU7CisKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5z
ZXRJbnNwZWN0b3JBdHRhY2htZW50U2lkZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oc2lkZSkpOwor
CisgICAgaWYgKG1faXNWaXNpYmxlKQorICAgICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMo
KS5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCh0cnVlKTsKKworICAgIG1faW5zcGVjdGVkUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZCh0cnVlKSk7CisKKyAg
ICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpC
b3R0b206CisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUk6OkF0dGFjaGVkQm90dG9tKCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQXR0
YWNobWVudFNpZGU6OlJpZ2h0OgorICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCkpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6CisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcGxhdGZvcm1BdHRhY2goKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSVByb3h5OjpkZXRhY2goKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlIHx8ICFt
X2luc3BlY3RvclBhZ2UgfHwgKCFtX2lzQXR0YWNoZWQgJiYgbV9pc1Zpc2libGUpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2lzQXR0YWNoZWQgPSBmYWxzZTsKKworICAgIGlmIChtX2lzVmlz
aWJsZSkKKyAgICAgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yU3Rh
cnRzQXR0YWNoZWQoZmFsc2UpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKGZhbHNlKSk7CisgICAgbV9pbnNwZWN0b3JQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7CisKKyAgICBwbGF0
Zm9ybURldGFjaCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQ
YWdlKTsKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoaGVp
Z2h0KTsKKyAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25l
ZCB3aWR0aCkKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKKyAgICBpZiAoIW1faW5z
cGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVu
Y2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNoZWRXaWR0aCh3aWR0aCk7CisgICAgcGxhdGZvcm1TZXRB
dHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5
OjpzZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHBsYXRmb3JtU2V0
U2hlZXRSZWN0KHJlY3QpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnN0YXJ0V2lu
ZG93RHJhZygpCit7CisgICAgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JVSVByb3h5Ojp0b2dnbGVQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIW1f
aW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faXNQcm9maWxpbmdQ
YWdlKQorICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
cjo6U3RvcFBhZ2VQcm9maWxpbmcoKSk7CisgICAgZWxzZQorICAgICAgICBtX2luc3BlY3RlZFBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRQYWdlUHJvZmlsaW5nKCkpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oKQor
eworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlKSB7CisgICAgICAgIG1faWdub3JlRWxlbWVudFNlbGVj
dGlvbkNoYW5nZSA9IHRydWU7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yOjpTdG9wRWxlbWVudFNlbGVjdGlvbigpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBjb25uZWN0KCk7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yOjpTdGFydEVsZW1lbnRTZWxlY3Rpb24oKSk7CisgICAgfQorfQorCiti
b29sIFdlYkluc3BlY3RvclVJUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UoY29uc3Qg
VVJMJiB1cmwpCit7CisgICAgLy8gVXNlIFVSTCBzbyB3ZSBjYW4gY29tcGFyZSB0aGUgcGF0aHMg
YW5kIHByb3RvY29scy4KKyAgICBVUkwgbWFpblBhZ2VVUkwoVVJMKCksIFdlYkluc3BlY3RvclVJ
UHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSk7CisgICAgaWYgKHVybC5wcm90b2NvbCgpID09IG1h
aW5QYWdlVVJMLnByb3RvY29sKCkgJiYgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRo
KCkpID09IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtYWluUGFnZVVSTC5wYXRoKCkpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdlIG1pZ2h0IG5vdCBoYXZlIGEgVGVzdCBVUkwg
aW4gUHJvZHVjdGlvbiBidWlsZHMuCisgICAgU3RyaW5nIHRlc3RQYWdlVVJMU3RyaW5nID0gV2Vi
SW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKTsKKyAgICBpZiAodGVzdFBh
Z2VVUkxTdHJpbmcuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFVSTCB0
ZXN0UGFnZVVSTChVUkwoKSwgdGVzdFBhZ2VVUkxTdHJpbmcpOworICAgIHJldHVybiB1cmwucHJv
dG9jb2woKSA9PSB0ZXN0UGFnZVVSTC5wcm90b2NvbCgpICYmIGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyh1cmwucGF0aCgpKSA9PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGVzdFBhZ2VVUkwu
cGF0aCgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGVGcm9udGVuZFBh
Z2UoKQoreworICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IG1faW5zcGVjdG9yUGFnZSA9IHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCk7CisgICAgQVNT
RVJUKG1faW5zcGVjdG9yUGFnZSk7CisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIHRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG1faW5z
cGVjdGVkUGFnZSk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGluc3BlY3RlZCBwYWdlIGhhcyBh
IHJ1bm5pbmcgV2ViUHJvY2VzcyBzbyB3ZSBjYW4gaW5zcGVjdCBpdC4KKyAgICBtX2luc3BlY3Rl
ZFBhZ2UtPmxhdW5jaEluaXRpYWxQcm9jZXNzSWZOZWNlc3NhcnkoKTsKKworICAgIG1faW5zcGVj
dG9yUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50
aWZpZXIoKSwgKnRoaXMpOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQorICAg
IG1fZXh0ZW5zaW9uQ29udHJvbGxlciA9IFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxl
clByb3h5OjpjcmVhdGUoKm1faW5zcGVjdG9yUGFnZSk7CisjZW5kaWYKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSVByb3h5OjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFj
aCwgYm9vbCB1bmRlclRlc3QpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlLT5wcmVmZXJlbmNlcygpLmRldmVs
b3BlckV4dHJhc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW5zcGVj
dGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmhhc0xvY2FsRnJvbnRlbmQoKSkgeworICAg
ICAgICBzaG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3VuZGVyVGVzdCA9
IHVuZGVyVGVzdDsKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIEFTU0VSVChtX2lu
c3BlY3RvclBhZ2UpOworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpF
c3RhYmxpc2hDb25uZWN0aW9uKG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpLCBpbmZvRm9y
TG9jYWxEZWJ1Z2dhYmxlKCksIG1fdW5kZXJUZXN0LCBpbnNwZWN0aW9uTGV2ZWwoKSkpOworCisg
ICAgQVNTRVJUKCFtX2lzQWN0aXZlRnJvbnRlbmQpOworICAgIG1faXNBY3RpdmVGcm9udGVuZCA9
IHRydWU7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVj
dEZyb250ZW5kKCp0aGlzKTsKKworICAgIGlmICghbV91bmRlclRlc3QpIHsKKyAgICAgICAgbV9j
YW5BdHRhY2ggPSBwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRhY2gpOworICAgICAgICBtX2lzQXR0
YWNoZWQgPSBzaG91bGRPcGVuQXR0YWNoZWQoKTsKKyAgICAgICAgbV9hdHRhY2htZW50U2lkZSA9
IHN0YXRpY19jYXN0PEF0dGFjaG1lbnRTaWRlPihpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5p
bnNwZWN0b3JBdHRhY2htZW50U2lkZSgpKTsKKworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQobV9pc0F0dGFjaGVkKSk7CisK
KyAgICAgICAgaWYgKG1faXNBdHRhY2hlZCkgeworICAgICAgICAgICAgc3dpdGNoIChtX2F0dGFj
aG1lbnRTaWRlKSB7CisgICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206Cisg
ICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSTo6QXR0YWNoZWRCb3R0b20oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OgorICAgICAgICAgICAgICAgIG1faW5z
cGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQo
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQXR0YWNobWVu
dFNpZGU6OkxlZnQ6CisgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRMZWZ0KCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faW5zcGVj
dG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOworCisg
ICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNl
dERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsKKyAgICB9CisKKyAgICAvLyBOb3Rp
ZnkgV2ViS2l0IGNsaWVudCB3aGVuIGEgbG9jYWwgaW5zcGVjdG9yIGF0dGFjaGVzIHNvIHRoYXQg
aXQgbWF5IGluc3RhbGwgZGVsZWdhdGVzIHByaW9yIHRvIHRoZSBfV0tJbnNwZWN0b3IgbG9hZGlu
ZyBpdHMgZnJvbnRlbmQuCisgICAgbV9pbnNwZWN0ZWRQYWdlLT51aUNsaWVudCgpLmRpZEF0dGFj
aExvY2FsSW5zcGVjdG9yKCptX2luc3BlY3RlZFBhZ2UsICp0aGlzKTsKKworICAgIC8vIEJhaWwg
b3V0IGlmIHRoZSBjbGllbnQgY2xvc2VkIHRoZSBpbnNwZWN0b3IgZnJvbSB0aGUgZGVsZWdhdGUg
bWV0aG9kLgorICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2luc3BlY3RvclBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgbV91bmRlclRlc3QgPyBX
ZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpIDogV2ViSW5zcGVjdG9y
VUlQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQ
cm94eTo6b3BlbigpCit7CisgICAgaWYgKG1fdW5kZXJUZXN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZP
Uk0oR1RLKQorICAgIFNldEZvclNjb3BlPGJvb2w+IGlzT3BlbmluZyhtX2lzT3BlbmluZywgdHJ1
ZSk7CisjZW5kaWYKKworICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKyAgICBtX2luc3BlY3RvclBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2li
bGUpKTsKKworICAgIGlmIChtX2lzQXR0YWNoZWQpCisgICAgICAgIHBsYXRmb3JtQXR0YWNoKCk7
CisgICAgZWxzZQorICAgICAgICBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCk7CisKKyAg
ICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6
OmRpZENsb3NlKCkKK3sKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sK
KyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR3Vh
cmQgYWdhaW5zdCBjYWxscyB0byBjbG9zZSgpIG1hZGUgYnkgdGhlIGNsaWVudCB3aGlsZSBhbHJl
YWR5IGNsb3NpbmcuCisgICAgaWYgKG1fY2xvc2luZykKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIFNldEZvclNjb3BlPGJvb2w+IHJlZW50cmFuY3lQcm90ZWN0b3IobV9jbG9zaW5nLCB0cnVl
KTsKKyAgICAKKyAgICAvLyBOb3RpZnkgV2ViS2l0IGNsaWVudCB3aGVuIGEgbG9jYWwgaW5zcGVj
dG9yIGNsb3NlcyBzbyBpdCBjYW4gY2xlYXIgX1dLSW5zcGVjdG9yRGVsZWdhdGUgYW5kIHBlcmZv
cm0gb3RoZXIgY2xlYW51cC4KKyAgICBtX2luc3BlY3RlZFBhZ2UtPnVpQ2xpZW50KCkud2lsbENs
b3NlTG9jYWxJbnNwZWN0b3IoKm1faW5zcGVjdGVkUGFnZSwgKnRoaXMpOworCisgICAgbV9pc1Zp
c2libGUgPSBmYWxzZTsKKyAgICBtX2lzUHJvZmlsaW5nUGFnZSA9IGZhbHNlOworICAgIG1fc2hv
d01lc3NhZ2VTZW50ID0gZmFsc2U7CisgICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZh
bHNlOworCisgICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKKworICAg
IG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlz
aWJsZShtX2lzVmlzaWJsZSkpOworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSk7CisKKyAgICBpZiAo
bV9pc0FjdGl2ZUZyb250ZW5kKSB7CisgICAgICAgIG1faXNBY3RpdmVGcm9udGVuZCA9IGZhbHNl
OworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNjb25u
ZWN0RnJvbnRlbmQoKnRoaXMpOworICAgIH0KKworICAgIGlmIChtX2lzQXR0YWNoZWQpCisgICAg
ICAgIHBsYXRmb3JtRGV0YWNoKCk7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMp
CisgICAgLy8gVGhpcyBleHRlbnNpb24gY29udHJvbGxlciBtYXkgYmUga2VwdCBhbGl2ZSBieSB0
aGUgSVBDIGRpc3BhdGNoZXIgYmV5b25kIHRoZSBwb2ludAorICAgIC8vIHdoZW4gbV9pbnNwZWN0
b3JQYWdlIGlzIGNsZWFyZWQgYmVsb3cuIE5vdGlmeSB0aGUgY29udHJvbGxlciBzbyBpdCBjYW4g
Y2xlYW4gdXAgYmVmb3JlIHRoZW4uCisgICAgbV9leHRlbnNpb25Db250cm9sbGVyLT5pbnNwZWN0
b3JGcm9udGVuZFdpbGxDbG9zZSgpOworICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlciA9IG51bGxw
dHI7CisjZW5kaWYKKyAgICAKKyAgICAvLyBOdWxsIG91dCBtX2luc3BlY3RvclBhZ2UgYWZ0ZXIg
cGxhdGZvcm1EZXRhY2goKSwgc28gdGhlIHZpZXdzIGNhbiBiZSBjbGVhbmVkIHVwIGNvcnJlY3Rs
eS4KKyAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRyOworCisgICAgbV9pc0F0dGFjaGVkID0g
ZmFsc2U7CisgICAgbV9jYW5BdHRhY2ggPSBmYWxzZTsKKyAgICBtX3VuZGVyVGVzdCA9IGZhbHNl
OworCisgICAgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJUHJveHk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNz
YWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6
OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGF1dG8qIGF1dG9tYXRpb25TZXNzaW9uID0gbV9pbnNwZWN0ZWRQ
YWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5hdXRvbWF0aW9uU2Vzc2lvbigpKQorICAgICAg
ICBhdXRvbWF0aW9uU2Vzc2lvbi0+aW5zcGVjdG9yRnJvbnRlbmRMb2FkZWQoKm1faW5zcGVjdGVk
UGFnZSk7CisgICAgCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQorICAgIGlmICht
X2V4dGVuc2lvbkNvbnRyb2xsZXIpCisgICAgICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlci0+aW5z
cGVjdG9yRnJvbnRlbmRMb2FkZWQoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
UHJveHk6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbCB0ZWxscyB1cyB0byBkbyB0aGlzIG9uIGxvYWQuIFdlIHdhbnQgdG8KKyAg
ICAvLyBpZ25vcmUgaXQgb25jZSBpZiB3ZSBvbmx5IHdhbnRlZCB0byBjb25uZWN0LiBUaGlzIGFs
bG93cyB0aGUgSW5zcGVjdG9yIHRvIGxhdGVyCisgICAgLy8gcmVxdWVzdCB0byBiZSBicm91Z2h0
IHRvIHRoZSBmcm9udCB3aGVuIGEgYnJlYWtwb2ludCBpcyBoaXQgb3Igc29tZSBvdGhlciBhY3Rp
b24uCisgICAgaWYgKG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQpIHsKKyAgICAgICAgbV9pZ25v
cmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKG1faXNWaXNpYmxlKQorICAgICAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworICAg
IGVsc2UKKyAgICAgICAgb3BlbigpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmJy
aW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQoreworICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQ
YWdlVG9Gcm9udCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmF0dGFjaEF2YWls
YWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCit7CisgICAgYm9vbCBwcmV2aW91c0NhbkF0
dGFjaCA9IG1fY2FuQXR0YWNoOworCisgICAgbV9jYW5BdHRhY2ggPSBtX2lzQXR0YWNoZWQgfHwg
cGxhdGZvcm1DYW5BdHRhY2goYXZhaWxhYmxlKTsKKworICAgIGlmIChwcmV2aW91c0NhbkF0dGFj
aCA9PSBtX2NhbkF0dGFjaCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW5zcGVjdG9y
UGFnZSAmJiAhbV91bmRlclRlc3QpCisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gp
KTsKKworICAgIHBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChtX2NhbkF0dGFjaCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSBhcHBlYXJhbmNlKQoreworICAgIHBsYXRm
b3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShhcHBlYXJhbmNlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JVSVByb3h5OjpvcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBt
X2luc3BlY3RvckNsaWVudC0+b3BlblVSTEV4dGVybmFsbHkoKnRoaXMsIHVybCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKK3sKKyAgICBwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5n
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpzaG93Q2VydGlmaWNhdGUoY29uc3Qg
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgcGxhdGZvcm1TaG93Q2Vy
dGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5
OjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKK3sKKyAgICBtX2VsZW1lbnRT
ZWxlY3Rpb25BY3RpdmUgPSBhY3RpdmU7CisKKyAgICBpZiAobV9pZ25vcmVFbGVtZW50U2VsZWN0
aW9uQ2hhbmdlKSB7CisgICAgICAgIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IGZh
bHNlOworICAgICAgICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAgICAgICAgY2xvc2UoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhY3RpdmUpCisgICAgICAgIHBsYXRmb3Jt
QnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpOworICAgIGVsc2UgaWYgKGlzQ29ubmVjdGVkKCkp
CisgICAgICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6
OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKK3sKKyAgICBtX2lzUHJvZmls
aW5nUGFnZSA9IGFjdGl2ZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXREZXZl
bG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9w
ZXJQcmVmZXJlbmNlIGRldmVsb3BlclByZWZlcmVuY2UsIE9wdGlvbmFsPGJvb2w+IG92ZXJyaWRl
VmFsdWUpCit7CisgICAgc3dpdGNoIChkZXZlbG9wZXJQcmVmZXJlbmNlKSB7CisgICAgY2FzZSBJ
bnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OlByaXZhdGVDbGlja01lYXN1cmVt
ZW50RGVidWdNb2RlRW5hYmxlZDoKKyAgICAgICAgaWYgKG1faW5zcGVjdGVkUGFnZSkKKyAgICAg
ICAgICAgIG1faW5zcGVjdGVkUGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNldFByaXZhdGVDbGlj
a01lYXN1cmVtZW50RGVidWdNb2RlKG92ZXJyaWRlVmFsdWUgJiYgb3ZlcnJpZGVWYWx1ZS52YWx1
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbnNwZWN0b3JDbGllbnQ6OkRldmVs
b3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVuYWJsZWQ6CisgICAgICAgIGlmIChtX2luc3Bl
Y3RlZFBhZ2UpCisgICAgICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPndlYnNpdGVEYXRhU3RvcmUo
KS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKG92ZXJyaWRlVmFsdWUgJiYgb3Zl
cnJpZGVWYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBJbnNwZWN0
b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQ6
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICAgICAgaWYgKG1faW5zcGVjdGVkUGFnZSkK
KyAgICAgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxl
ZE92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0p
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJs
ZShib29sIGF2YWlsYWJsZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXREaWFn
bm9zdGljTG9nZ2luZ0F2YWlsYWJsZShhdmFpbGFibGUpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGF2YWlsYWJsZSk7CisjZW5kaWYKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojpz
YXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBi
YXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQ
YWdlLT5wcmVmZXJlbmNlcygpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKCFmaWxlbmFtZS5pc0VtcHR5KCkpOworICAgIGlmIChmaWxlbmFt
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHBsYXRmb3JtU2F2ZShmaWxlbmFt
ZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJUHJveHk6OmFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UtPnByZWZlcmVuY2VzKCku
ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
IWZpbGVuYW1lLmlzRW1wdHkoKSk7CisgICAgaWYgKGZpbGVuYW1lLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1BcHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpOworfQor
Citib29sIFdlYkluc3BlY3RvclVJUHJveHk6OnNob3VsZE9wZW5BdHRhY2hlZCgpCit7CisgICAg
cmV0dXJuIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvclN0YXJ0c0F0dGFjaGVk
KCkgJiYgY2FuQXR0YWNoKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6ZXZhbHVh
dGVJbkZyb250ZW5kRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCit7CisgICAg
aWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkV2YWx1YXRlSW5Gcm9udGVuZEZv
clRlc3RpbmcoZXhwcmVzc2lvbikpOworfQorCisvLyBVbnN1cHBvcnRlZCBjb25maWd1cmF0aW9u
cyBjYW4gdXNlIHRoZSBzdHVicyBwcm92aWRlZCBoZXJlLgorCisjaWYgIVBMQVRGT1JNKE1BQykg
JiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKworV2ViUGFnZVByb3h5KiBXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2xvc2VG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtSW52YWxpZGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJv
bnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSGlkZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybUlzRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2Vk
QXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
SW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNh
dGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJv
b2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRv
d0hlaWdodCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
dW5zaWduZWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0
aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURldGFjaCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRTaGVl
dFJlY3QoY29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5z
cGVjdG9yUGFnZVVSTCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JUZXN0UGFn
ZVVSTCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JVSVByb3h5OjppbmZvRm9yTG9jYWxE
ZWJ1Z2dhYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBEZWJ1Z2dh
YmxlSW5mb0RhdGE6OmVtcHR5KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFp
bGFiaWxpdHlDaGFuZ2VkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2Vu
ZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4p
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDFkOWJh
NGE0OGUxM2JlOTcxODEzZmMxODIzYzIyZDMxZDRhMjk0NQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5LmgKQEAg
LTAsMCArMSwzMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiQXR0YWNobWVu
dC5oIgorI2luY2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50Lmg+CisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JN
KE1BQykKKyNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworT0JKQ19DTEFTUyBOU1VSTDsKK09CSkNfQ0xB
U1MgTlNWaWV3OworT0JKQ19DTEFTUyBOU1dpbmRvdzsKK09CSkNfQ0xBU1MgV0tXZWJJbnNwZWN0
b3JVSVByb3h5T2JqQ0FkYXB0ZXI7CitPQkpDX0NMQVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXI7CisjZWxpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENlcnRpZmljYXRlSW5mbzsKK30KKworbmFtZXNw
YWNlIEFQSSB7CitjbGFzcyBJbnNwZWN0b3JDbGllbnQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXZWJGcmFtZVByb3h5OworY2xhc3MgV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVu
dDsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYlByZWZlcmVuY2VzOworI2lmIEVOQUJM
RShJTlNQRUNUT1JfRVhURU5TSU9OUykKK2NsYXNzIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29u
dHJvbGxlclByb3h5OworI2VuZGlmCisKK2VudW0gY2xhc3MgQXR0YWNobWVudFNpZGUgeworICAg
IEJvdHRvbSwKKyAgICBSaWdodCwKKyAgICBMZWZ0LAorfTsKKworY2xhc3MgV2ViSW5zcGVjdG9y
VUlQcm94eQorICAgIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6
SW5zcGVjdG9yPgorICAgICwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgLCBwdWJs
aWMgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwKKyNpZiBQTEFURk9STShXSU4pCisgICAgLCBw
dWJsaWMgV2ViQ29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyCisjZW5kaWYKK3sKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvclVJUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkm
IGluc3BlY3RlZFBhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJ
bnNwZWN0b3JVSVByb3h5KGluc3BlY3RlZFBhZ2UpKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBX
ZWJJbnNwZWN0b3JVSVByb3h5KFdlYlBhZ2VQcm94eSYpOworICAgIHZpcnR1YWwgfldlYkluc3Bl
Y3RvclVJUHJveHkoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgQVBJOjpJbnNw
ZWN0b3JDbGllbnQmIGluc3BlY3RvckNsaWVudCgpIHsgcmV0dXJuICptX2luc3BlY3RvckNsaWVu
dDsgfQorICAgIHZvaWQgc2V0SW5zcGVjdG9yQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Oklu
c3BlY3RvckNsaWVudD4mJik7CisKKyAgICAvLyBQdWJsaWMgQVBJcworICAgIFdlYlBhZ2VQcm94
eSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQorICAg
IFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9y
UGFnZTsgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQorICAgIFdlYkluc3Bl
Y3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5KiBleHRlbnNpb25Db250cm9sbGVyKCkgY29u
c3QgeyByZXR1cm4gbV9leHRlbnNpb25Db250cm9sbGVyLmdldCgpOyB9CisjZW5kaWYKKworICAg
IGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhIW1faW5zcGVjdG9yUGFnZTsgfQor
ICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc2libGU7IH0KKyAgICBi
b29sIGlzRnJvbnQoKTsKKworICAgIHZvaWQgY29ubmVjdCgpOworCisgICAgdm9pZCBzaG93KCk7
CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgY2xvc2VGb3JD
cmFzaCgpOworICAgIHZvaWQgcmVvcGVuKCk7CisgICAgdm9pZCByZXNldFN0YXRlKCk7CisKKyAg
ICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCB1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdl
UHJveHkmKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBlbnVtIGNsYXNzIEluc3BlY3Rpb25U
YXJnZXRUeXBlIHsgTG9jYWwsIFJlbW90ZSB9OworICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNXaW5k
b3c+IGNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0
aW9uVGFyZ2V0VHlwZSk7CisKKyAgICB2b2lkIGRpZEJlY29tZUFjdGl2ZSgpOworCisgICAgdm9p
ZCB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0OworICAgIHZvaWQgaW5zcGVjdGVk
Vmlld0ZyYW1lRGlkQ2hhbmdlKENHRmxvYXQgPSAwKTsKKyAgICB2b2lkIHdpbmRvd0ZyYW1lRGlk
Q2hhbmdlKCk7CisgICAgdm9pZCB3aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCk7CisgICAgTlNX
aW5kb3cgKmluc3BlY3RvcldpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yV2luZG93
LmdldCgpOyB9CisKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdlKCk7CisgICAgdm9pZCBjbG9z
ZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCgpOworCisgICAgdm9pZCBhdHRhY2ht
ZW50Vmlld0RpZENoYW5nZShOU1ZpZXcgKm9sZFZpZXcsIE5TVmlldyAqbmV3Vmlldyk7CisgICAg
dm9pZCBhdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KE5TV2luZG93ICpvbGRXaW5kb3cpOwor
ICAgIHZvaWQgYXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhOU1dpbmRvdyAqbmV3V2luZG93KTsK
KworICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2hlZXRSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9zaGVldFJlY3Q7IH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgIEd0a1dp
ZGdldCogaW5zcGVjdG9yVmlldygpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yVmlldzsgfTsK
KyAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViSW5zcGVjdG9yVUlQcm94eUNs
aWVudD4mJik7CisjZW5kaWYKKworICAgIHZvaWQgc2hvd0NvbnNvbGUoKTsKKyAgICB2b2lkIHNo
b3dSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFt
ZVByb3h5Kik7CisgICAgdm9pZCBvcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCk7
CisKKyAgICBBdHRhY2htZW50U2lkZSBhdHRhY2htZW50U2lkZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0YWNobWVudFNpZGU7IH0KKyAgICBib29sIGlzQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBt
X2lzQXR0YWNoZWQ7IH0KKyAgICB2b2lkIGF0dGFjaFJpZ2h0KCk7CisgICAgdm9pZCBhdHRhY2hM
ZWZ0KCk7CisgICAgdm9pZCBhdHRhY2hCb3R0b20oKTsKKyAgICB2b2lkIGF0dGFjaChBdHRhY2ht
ZW50U2lkZSA9IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pOworICAgIHZvaWQgZGV0YWNoKCk7CisK
KyAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2b2lkIHNl
dEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpOworCisgICAgdm9pZCBzZXRTaGVldFJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisKKyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygp
OworCisgICAgYm9vbCBpc1Byb2ZpbGluZ1BhZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzUHJvZmls
aW5nUGFnZTsgfQorICAgIHZvaWQgdG9nZ2xlUGFnZVByb2ZpbGluZygpOworCisgICAgYm9vbCBp
c0VsZW1lbnRTZWxlY3Rpb25BY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRTZWxlY3Rp
b25BY3RpdmU7IH0KKyAgICB2b2lkIHRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oKTsKKworICAgIGJv
b2wgaXNVbmRlclRlc3QoKSBjb25zdCB7IHJldHVybiBtX3VuZGVyVGVzdDsgfQorCisgICAgdm9p
ZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sKTsKKworICAgIC8vIFByb3ZpZGVk
IGJ5IHBsYXRmb3JtIFdlYkluc3BlY3RvclVJUHJveHkgaW1wbGVtZW50YXRpb25zLgorICAgIHN0
YXRpYyBTdHJpbmcgaW5zcGVjdG9yUGFnZVVSTCgpOworICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVj
dG9yVGVzdFBhZ2VVUkwoKTsKKyAgICBzdGF0aWMgYm9vbCBpc01haW5PclRlc3RJbnNwZWN0b3JQ
YWdlKGNvbnN0IFVSTCYpOworICAgIHN0YXRpYyBEZWJ1Z2dhYmxlSW5mb0RhdGEgaW5mb0Zvckxv
Y2FsRGVidWdnYWJsZSgpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1XaW5k
b3dXaWR0aDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bVdpbmRvd0hlaWdodDsK
KworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93V2lkdGg7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxXaW5kb3dIZWlnaHQ7CisKKyAgICAvLyBUZXN0aW5n
IG1ldGhvZHMuCisgICAgdm9pZCBldmFsdWF0ZUluRnJvbnRlbmRGb3JUZXN0aW5nKGNvbnN0IFN0
cmluZyYpOworCitwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisgICAg
dm9pZCBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgLy8gSVBDOjpNZXNzYWdl
UmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
IG92ZXJyaWRlOworICAgIENvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gQ29ubmVjdGlvblR5cGU6OkxvY2FsOyB9CisKKyAgICBXZWJQYWdlUHJv
eHkqIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCk7CisgICAgdm9pZCBwbGF0Zm9ybUNyZWF0
ZUZyb250ZW5kV2luZG93KCk7CisgICAgdm9pZCBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCk7CisKKyAgICB2b2lkIHBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpOworICAgIHZv
aWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CisgICAgdm9pZCBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsK
KyAgICB2b2lkIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7CisgICAgdm9pZCBwbGF0Zm9ybUJyaW5n
SW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtSGlkZSgpOworICAgIGJv
b2wgcGxhdGZvcm1Jc0Zyb250KCk7CisgICAgdm9pZCBwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0
eUNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCBwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoV2Vi
Q29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UpOworICAgIHZvaWQgcGxh
dGZvcm1PcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHBsYXRmb3Jt
SW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHBsYXRmb3JtU2hv
d0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAgIHVuc2ln
bmVkIHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCk7CisgICAgdW5zaWduZWQgcGxhdGZv
cm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpOworICAgIHZvaWQgcGxhdGZvcm1BdHRhY2goKTsKKyAg
ICB2b2lkIHBsYXRmb3JtRGV0YWNoKCk7CisgICAgdm9pZCBwbGF0Zm9ybVNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dX
aWR0aCh1bnNpZ25lZCk7CisgICAgdm9pZCBwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7Cisg
ICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5n
JiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpOworICAgIHZv
aWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBj
b250ZW50KTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib29sIHBsYXRmb3JtQ2FuQXR0YWNo
KGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCk7CisjZWxzZQorICAgIGJvb2wgcGxhdGZvcm1DYW5B
dHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKSB7IHJldHVybiB3ZWJQcm9jZXNzQ2FuQXR0
YWNoOyB9CisjZW5kaWYKKworICAgIC8vIENhbGxlZCBieSBXZWJJbnNwZWN0b3JVSVByb3h5IG1l
c3NhZ2VzCisgICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFj
aCwgYm9vbCB1bmRlclRlc3QpOworICAgIHZvaWQgc2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6
QXR0YWNobWVudCk7CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmlu
ZyYpOworICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKKyAgICB2b2lkIGRpZENsb3NlKCk7Cisg
ICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIGJyaW5nSW5zcGVjdGVkUGFnZVRvRnJv
bnQoKTsKKyAgICB2b2lkIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCk7CisgICAgdm9p
ZCBzZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpB
cHBlYXJhbmNlKTsKKyAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7
CisgICAgdm9pZCBzaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
Jik7CisgICAgdm9pZCBlbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIHRp
bWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIHNldERldmVsb3BlclByZWZl
cmVuY2VPdmVycmlkZShXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVu
Y2UsIE9wdGlvbmFsPGJvb2w+KTsKKworICAgIHZvaWQgc2F2ZShjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3Jj
ZVNhdmVBcyk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qg
U3RyaW5nJiBjb250ZW50KTsKKworICAgIGJvb2wgY2FuQXR0YWNoKCkgY29uc3QgeyByZXR1cm4g
bV9jYW5BdHRhY2g7IH0KKyAgICBib29sIHNob3VsZE9wZW5BdHRhY2hlZCgpOworCisgICAgdm9p
ZCBvcGVuKCk7CisKKyAgICB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwoKSBjb25zdDsKKworICAg
IFdlYlByZWZlcmVuY2VzJiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKSBjb25zdDsKKworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGFwcGx5Rm9yY2VkQXBwZWFyYW5jZSgpOworI2VuZGlm
CisKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKKyAgICB2b2lkIHVwZGF0ZUlu
c3BlY3RvcldpbmRvd1RpdGxlKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikK
KyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyB3bmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwg
TFBBUkFNKTsKKyAgICBib29sIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKKyAgICB2b2lkIHdpbmRv
d1JlY2VpdmVkTWVzc2FnZShIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSkgb3ZlcnJpZGU7Cisj
ZW5kaWYKKworICAgIFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0ZWRQYWdlIHsgbnVsbHB0ciB9Owor
ICAgIFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0b3JQYWdlIHsgbnVsbHB0ciB9OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxBUEk6Okluc3BlY3RvckNsaWVudD4gbV9pbnNwZWN0b3JDbGllbnQ7CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMpCisgICAgUmVmUHRyPFdlYkluc3BlY3RvclVJ
RXh0ZW5zaW9uQ29udHJvbGxlclByb3h5PiBtX2V4dGVuc2lvbkNvbnRyb2xsZXI7CisjZW5kaWYK
KyAgICAKKyAgICBib29sIG1fdW5kZXJUZXN0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNWaXNp
YmxlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNBdHRhY2hlZCB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2NhbkF0dGFjaCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzUHJvZmlsaW5nUGFnZSB7IGZh
bHNlIH07CisgICAgYm9vbCBtX3Nob3dNZXNzYWdlU2VudCB7IGZhbHNlIH07CisgICAgYm9vbCBt
X2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250IHsgZmFsc2UgfTsKKyAgICBib29sIG1fZWxlbWVudFNl
bGVjdGlvbkFjdGl2ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rp
b25DaGFuZ2UgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0FjdGl2ZUZyb250ZW5kIHsgZmFsc2Ug
fTsKKyAgICBib29sIG1fY2xvc2luZyB7IGZhbHNlIH07CisKKyAgICBBdHRhY2htZW50U2lkZSBt
X2F0dGFjaG1lbnRTaWRlIHtBdHRhY2htZW50U2lkZTo6Qm90dG9tfTsKKworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICBSZXRhaW5QdHI8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcj4gbV9pbnNwZWN0
b3JWaWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IG1faW5zcGVjdG9yV2lu
ZG93OworICAgIFJldGFpblB0cjxXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlcj4gbV9v
YmpDQWRhcHRlcjsKKyAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9zdWdn
ZXN0ZWRUb0FjdHVhbFVSTE1hcDsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJJbnNwZWN0b3JVSVBy
b3h5PiBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lcjsKKyAgICBTdHJpbmcgbV91
cmxTdHJpbmc7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fc2hlZXRSZWN0OworICAgIFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlIG1fZnJvbnRlbmRBcHBlYXJh
bmNlIHsgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2U6OlN5c3Rl
bSB9OworICAgIGJvb2wgbV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0IHsgZmFsc2UgfTsK
KyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViSW5zcGVjdG9yVUlQ
cm94eUNsaWVudD4gbV9jbGllbnQ7CisgICAgR3RrV2lkZ2V0KiBtX2luc3BlY3RvclZpZXcgeyBu
dWxscHRyIH07CisgICAgR3RrV2lkZ2V0KiBtX2luc3BlY3RvcldpbmRvdyB7IG51bGxwdHIgfTsK
KyAgICBHdGtXaWRnZXQqIG1faGVhZGVyQmFyIHsgbnVsbHB0ciB9OworICAgIFN0cmluZyBtX2lu
c3BlY3RlZFVSTFN0cmluZzsKKyAgICBib29sIG1faXNPcGVuaW5nIHsgZmFsc2UgfTsKKyNlbGlm
IFBMQVRGT1JNKFdJTikKKyAgICBIV05EIG1faW5zcGVjdGVkVmlld1dpbmRvdyB7IG51bGxwdHIg
fTsKKyAgICBIV05EIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyB7IG51bGxwdHIgfTsKKyAg
ICBIV05EIG1faW5zcGVjdG9yVmlld1dpbmRvdyB7IG51bGxwdHIgfTsKKyAgICBIV05EIG1faW5z
cGVjdG9yRGV0YWNoV2luZG93IHsgbnVsbHB0ciB9OworICAgIFJlZlB0cjxXZWJWaWV3PiBtX2lu
c3BlY3RvclZpZXc7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJUHJv
eHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yVUlQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDg4NjQ2NmNhYzJkYTAyOTAx
ZjNiMTQ3MTE1YjdjM2I0ZjVmNjdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW4KQEAgLTAs
MCArMSw2MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K21lc3NhZ2VzIC0+IFdlYkluc3BlY3RvclVJUHJveHkgeworICAgIE9wZW5Mb2NhbEluc3BlY3Rv
ckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCkKKyAgICBTZXRGcm9udGVu
ZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQorCisgICAg
U2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1lc3NhZ2UpCisKKyAgICBGcm9udGVuZExvYWRl
ZCgpCisgICAgRGlkQ2xvc2UoKQorICAgIEJyaW5nVG9Gcm9udCgpCisgICAgQnJpbmdJbnNwZWN0
ZWRQYWdlVG9Gcm9udCgpCisgICAgUmVvcGVuKCkKKyAgICBSZXNldFN0YXRlKCkKKworICAgIFNl
dEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVh
cmFuY2UgYXBwZWFyYW5jZSkKKyAgICBPcGVuVVJMRXh0ZXJuYWxseShTdHJpbmcgdXJsKQorCisg
ICAgSW5zcGVjdGVkVVJMQ2hhbmdlZChTdHJpbmcgdXJsU3RyaW5nKQorICAgIFNob3dDZXJ0aWZp
Y2F0ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvKQorICAgIEVsZW1l
bnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZlKQorICAgIFRpbWVsaW5lUmVjb3JkaW5nQ2hh
bmdlZChib29sIGFjdGl2ZSkKKyAgICBTZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoV2Vi
Q29yZTo6SW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlIGRldmVsb3BlclByZWZl
cmVuY2UsIE9wdGlvbmFsPGJvb2w+IG92ZXJyaWRlVmFsdWUpCisKKyAgICBTYXZlKFN0cmluZyBm
aWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNh
dmVBcykKKyAgICBBcHBlbmQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCkKKworICAg
IEF0dGFjaEJvdHRvbSgpCisgICAgQXR0YWNoUmlnaHQoKQorICAgIEF0dGFjaExlZnQoKQorICAg
IERldGFjaCgpCisKKyAgICBBdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxl
KQorCisgICAgU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQorICAgIFNl
dEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCisKKyAgICBTZXRTaGVldFJlY3Qo
V2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisKKyAgICBTdGFydFdpbmRvd0RyYWcoKQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5z
cGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGli
L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKaW5kZXggMzU5MDc1YWZlOTkwYjliMmNkNWQwMDBl
ZDgxYmMzNDc0NWE2YTE3My4uOWI5NDhmYjg4ZmQ3ZWI2OTllMDRmYmVmZmQ3YTJhMzExMDhkMzJi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVt
b3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAK
ICNpbmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5mby5oIgogI2luY2x1ZGUgIkFQSUluc3BlY3RvckNv
bmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9SZW1vdGVJbnNwZWN0b3JVdGlscy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9y
RGVidWdnYWJsZVR5cGUuaD4KICNpbmNsdWRlIDxnaW8vZ2lvLmg+CkBAIC00MCwxMSArNDAsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZp
bmFsIDogcHVibGljIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKK2NsYXNzIFJlbW90
ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVibGljIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlD
bGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7CiBwdWJsaWM6CiAgICAgUmVt
b3RlSW5zcGVjdG9yUHJveHkoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQs
IHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCi0gICAgICAgIDogbV9w
cm94eShSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCisgICAgICAgIDogbV9wcm94
eShSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGUoKSkKICAgICAgICAgLCBtX2luc3Bl
Y3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCiAgICAgICAgICwgbV9jb25uZWN0aW9uSUQoY29u
bmVjdGlvbklEKQogICAgICAgICAsIG1fdGFyZ2V0SUQodGFyZ2V0SUQpCkBAIC03OCw3ICs3OCw3
IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIC8vIE1BUks6IFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5Q2xpZW50IG1ldGhvZHMKKyAgICAvLyBNQVJLOiBSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5Q2xpZW50IG1ldGhvZHMKIAogICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICB7CkBAIC05NSwxMyArOTUsMTMgQEAgcHVibGljOgog
ICAgICAgICBtX2luc3BlY3RvckNsaWVudC5jbG9zZUZyb21Gcm9udGVuZChtX2Nvbm5lY3Rpb25J
RCwgbV90YXJnZXRJRCk7CiAgICAgfQogCi0gICAgUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJh
dGlvbj4gY29uZmlndXJhdGlvbkZvclJlbW90ZUluc3BlY3RvcihSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eSYpIG92ZXJyaWRlCisgICAgUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gY29u
ZmlndXJhdGlvbkZvclJlbW90ZUluc3BlY3RvcihSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Jikg
b3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRp
b246OmNyZWF0ZSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBSZWY8UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk+IG1fcHJveHk7CisgICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk+IG1f
cHJveHk7CiAgICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKICAg
ICB1aW50NjRfdCBtX2Nvbm5lY3Rpb25JRDsKICAgICB1aW50NjRfdCBtX3RhcmdldElEOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5z
cGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9S
ZW1vdGVJbnNwZWN0b3JDbGllbnQuaAppbmRleCAzMjQzMTZkNWRlYWE1YzZiYjRjMzMwNWJiNWM4
Mjk2ZDNhZGE0ZjFlLi5iOTQ3ZjE5MWM0NDQ1YjEyN2U3OWI0NTYxNTRiODQ1OWM1OWFhYWFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
Z2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgUmVtb3RlSW5z
cGVjdG9yUHJveHk7Ci1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTsKK2NsYXNzIFJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk7CiAKIGNsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyIHsK
IHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9n
dGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZWUwZTNhZDUzMDg0ZWM2ZDE1YmZmZjNlOGJhOTMwMGVi
MmFjZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgot
I2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViS2l0SW5zcGVjdG9y
V2luZG93LmgiCi0jaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCi0jaW5jbHVk
ZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlV2luZG93VGl0bGUoY29uc3Qg
Q1N0cmluZyYgdGFyZ2V0TmFtZSkKLXsKLSAgICBpZiAoIW1fd2luZG93KQotICAgICAgICByZXR1
cm47Ci0gICAgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV0VCS0lUX0lOU1BFQ1RP
Ul9XSU5ET1cobV93aW5kb3cpLCAhdGFyZ2V0TmFtZS5pc051bGwoKSA/IHRhcmdldE5hbWUuZGF0
YSgpIDogbnVsbHB0cik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW90ZUluc3BlY3RvclZpZXdEZXN0
cm95ZWQoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvclByb3h5KQotewotICAgIGlu
c3BlY3RvclByb3h5LT5jbG9zZUZyb21DcmFzaCgpOwotfQotCi1XZWJQYWdlUHJveHkqIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
Ci17Ci0gICAgQVNTRVJUKCFtX3dlYlZpZXcpOwotCi0gICAgYXV0byBwcmVmZXJlbmNlcyA9IFdl
YlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOwot
I2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKLSAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGlu
c3BlY3QgdGhlIFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcg
c2V0dGluZ3MuCi0gICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1
ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVF
bmFibGVkKHRydWUpOwotI2VuZGlmCi0gICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6
OmNyZWF0ZShXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFn
ZShudWxscHRyKSk7Ci0KLSAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29u
ZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQ
b29sKCZXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0b3JMZXZlbEZv
clBhZ2UobnVsbHB0cikpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMo
cHJlZmVyZW5jZXMucHRyKCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAo
cGFnZUdyb3VwLnB0cigpKTsKLSAgICBtX3dlYlZpZXcgPSBHVEtfV0lER0VUKHdlYmtpdFdlYlZp
ZXdCYXNlQ3JlYXRlKCpwYWdlQ29uZmlndXJhdGlvbi5wdHIoKSkpOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3Rfc3dhcHBlZChtX3dlYlZpZXcsICJkZXN0cm95IiwgR19DQUxMQkFDSyhyZW1vdGVJbnNw
ZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7Ci0gICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRl
cihHX09CSkVDVChtX3dlYlZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViVmll
dykpOwotCi0gICAgbV93aW5kb3cgPSB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoKTsKLSNpZiBV
U0UoR1RLNCkKLSAgICBndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKG1fd2luZG93KSwg
bV93ZWJWaWV3KTsKLSNlbHNlCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUiht
X3dpbmRvdyksIG1fd2ViVmlldyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1fd2ViVmlldyk7Ci0j
ZW5kaWYKLQotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV93aW5kb3cp
LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2luZG93KSk7Ci0gICAgZ3RrX3dpbmRvd19w
cmVzZW50KEdUS19XSU5ET1cobV93aW5kb3cpKTsKLQotICAgIHJldHVybiB3ZWJraXRXZWJWaWV3
QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSk7Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5k
b3coKQotewotICAgIGlmIChtX3dlYlZpZXcpIHsKLSAgICAgICAgaWYgKGF1dG8qIHdlYlBhZ2Ug
PSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3
KSkpCi0gICAgICAgICAgICB3ZWJQYWdlLT5jbG9zZSgpOwotICAgIH0KLSAgICBpZiAobV93aW5k
b3cpCi0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX3dpbmRvdyk7Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBp
ZiAobV93aW5kb3cpCi0gICAgICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKG1fd2lu
ZG93KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW90ZUZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFj
ayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1
c2VyRGF0YSkKLXsKLSAgICBHRmlsZSogZmlsZSA9IEdfRklMRShzb3VyY2VPYmplY3QpOwotICAg
IGlmICghZ19maWxlX3JlcGxhY2VfY29udGVudHNfZmluaXNoKGZpbGUsIHJlc3VsdCwgbnVsbHB0
ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHBhZ2UgPSBzdGF0aWNf
Y2FzdDxXZWJQYWdlUHJveHkqPih1c2VyRGF0YSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRo
KGdfZmlsZV9nZXRfcGF0aChmaWxlKSk7Ci0gICAgcGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3Rl
V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0aC5nZXQoKSkpOwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkws
IGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2
ZURpYWxvZykKLXsKLSAgICBVTlVTRURfUEFSQU0oZm9yY2VTYXZlRGlhbG9nKTsKLQotICAgIEdS
ZWZQdHI8R3RrRmlsZUNob29zZXJOYXRpdmU+IGRpYWxvZyA9IGFkb3B0R1JlZihndGtfZmlsZV9j
aG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUgRmlsZSIsCi0gICAgICAgIEdUS19XSU5ET1cobV93aW5k
b3cpLCBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwiKSk7Ci0K
LSAgICBHdGtGaWxlQ2hvb3NlciogY2hvb3NlciA9IEdUS19GSUxFX0NIT09TRVIoZGlhbG9nLmdl
dCgpKTsKLSNpZiAhVVNFKEdUSzQpCi0gICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3Zlcndy
aXRlX2NvbmZpcm1hdGlvbihjaG9vc2VyLCBUUlVFKTsKLSNlbmRpZgotCi0gICAgLy8gU29tZSBp
bnNwZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3IgaW5zdGFuY2UpIHVzZSBhIGN1c3RvbSBVUkkgc2No
ZW1lLCBzdWNoCi0gICAgLy8gYXMgd2ViLWluc3BlY3Rvci4gU28gd2UgY2FuJ3QgcmVseSBvbiB0
aGUgVVJMIGJlaW5nIGEgdmFsaWQgZmlsZTovLy8gVVJMCi0gICAgLy8gdW5mb3J0dW5hdGVseS4K
LSAgICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0ZWRVUkwpOwotICAgIC8vIFN0cmlwIGxlYWRpbmcg
LyBjaGFyYWN0ZXIuCi0gICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfY3VycmVudF9uYW1lKGNob29z
ZXIsIHVybC5wYXRoKCkuc3Vic3RyaW5nKDEpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYgKGd0
a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBH
VEtfUkVTUE9OU0VfQUNDRVBUKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8Y2hhcj4g
ZGF0YVZlY3RvcjsKLSAgICBDU3RyaW5nIGRhdGFTdHJpbmc7Ci0gICAgaWYgKGJhc2U2NEVuY29k
ZWQpIHsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YVZl
Y3Rvci5zaHJpbmtUb0ZpdCgpOwotICAgIH0gZWxzZQotICAgICAgICBkYXRhU3RyaW5nID0gY29u
dGVudC51dGY4KCk7Ci0KLSAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxs
KCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOwotICAgIHNpemVfdCBk
YXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDog
ZGF0YVZlY3Rvci5zaXplKCk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihn
dGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+
IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKLSAgICBnX2ZpbGVfcmVwbGFjZV9j
b250ZW50c19hc3luYyhmaWxlLmdldCgpLCBkYXRhLCBkYXRhTGVuZ3RoLCBudWxscHRyLCBmYWxz
ZSwKLSAgICAgICAgR19GSUxFX0NSRUFURV9SRVBMQUNFX0RFU1RJTkFUSU9OLCBudWxscHRyLCBy
ZW1vdGVGaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2ssIG1faW5zcGVjdG9yUGFnZSk7Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCi17Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSkKLXsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5VUkxFeHRlcm5hbGx5KGNvbnN0IFN0cmlu
ZyYpCi17Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0Nl
cnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9S
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDlkZWU0ZmRjZTFj
MzNlMTg3OGU4MjRlMmNkMzg2ZTI2NjBiZTllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3Rr
LmNwcApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eS5oIgorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNp
bmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5z
cGVjdG9yVUlQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5oIgorI2lu
Y2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91
cC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9HdGtWZXJzaW9uaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6dXBkYXRlV2luZG93VGl0bGUoY29uc3QgQ1N0cmluZyYgdGFy
Z2V0TmFtZSkKK3sKKyAgICBpZiAoIW1fd2luZG93KQorICAgICAgICByZXR1cm47CisgICAgd2Vi
a2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1cobV93
aW5kb3cpLCAhdGFyZ2V0TmFtZS5pc051bGwoKSA/IHRhcmdldE5hbWUuZGF0YSgpIDogbnVsbHB0
cik7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW90ZUluc3BlY3RvclZpZXdEZXN0cm95ZWQoUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eSogaW5zcGVjdG9yUHJveHkpCit7CisgICAgaW5zcGVjdG9yUHJv
eHktPmNsb3NlRnJvbUNyYXNoKCk7Cit9CisKK1dlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAg
IEFTU0VSVCghbV93ZWJWaWV3KTsKKworICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJl
bmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyNpZiBFTkFC
TEUoREVWRUxPUEVSX01PREUpCisgICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRo
ZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdz
LgorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAg
IHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0
cnVlKTsKKyNlbmRpZgorICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUo
V2ViS2l0OjpkZWZhdWx0SW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UobnVsbHB0
cikpOworCisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRp
b246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmV2Vi
S2l0OjpkZWZhdWx0SW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKG51
bGxwdHIpKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVu
Y2VzLnB0cigpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91
cC5wdHIoKSk7CisgICAgbV93ZWJWaWV3ID0gR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZUNy
ZWF0ZSgqcGFnZUNvbmZpZ3VyYXRpb24ucHRyKCkpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV93ZWJWaWV3LCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0socmVtb3RlSW5zcGVjdG9yVmll
d0Rlc3Ryb3llZCksIHRoaXMpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpF
Q1QobV93ZWJWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dlYlZpZXcpKTsKKwor
ICAgIG1fd2luZG93ID0gd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KCk7CisjaWYgVVNFKEdUSzQp
CisgICAgZ3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyhtX3dpbmRvdyksIG1fd2ViVmll
dyk7CisjZWxzZQorICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV93aW5kb3cp
LCBtX3dlYlZpZXcpOworICAgIGd0a193aWRnZXRfc2hvdyhtX3dlYlZpZXcpOworI2VuZGlmCisK
KyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1fd2luZG93KSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZtX3dpbmRvdykpOworICAgIGd0a193aW5kb3dfcHJlc2VudChH
VEtfV0lORE9XKG1fd2luZG93KSk7CisKKyAgICByZXR1cm4gd2Via2l0V2ViVmlld0Jhc2VHZXRQ
YWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG1fd2ViVmlldykpOworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQor
eworICAgIGlmIChtX3dlYlZpZXcpIHsKKyAgICAgICAgaWYgKGF1dG8qIHdlYlBhZ2UgPSB3ZWJr
aXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSkpCisg
ICAgICAgICAgICB3ZWJQYWdlLT5jbG9zZSgpOworICAgIH0KKyAgICBpZiAobV93aW5kb3cpCisg
ICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX3dpbmRvdyk7Cit9CisKK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKK30KKwordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7CisgICAgaWYg
KG1fd2luZG93KQorICAgICAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhtX3dpbmRv
dykpOworfQorCitzdGF0aWMgdm9pZCByZW1vdGVGaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2so
R09iamVjdCogc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisgICAgR0ZpbGUqIGZpbGUgPSBHX0ZJTEUoc291cmNlT2JqZWN0KTsKKyAgICBp
ZiAoIWdfZmlsZV9yZXBsYWNlX2NvbnRlbnRzX2ZpbmlzaChmaWxlLCByZXN1bHQsIG51bGxwdHIs
IG51bGxwdHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBwYWdlID0gc3RhdGljX2Nh
c3Q8V2ViUGFnZVByb3h5Kj4odXNlckRhdGEpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChn
X2ZpbGVfZ2V0X3BhdGgoZmlsZSkpOworICAgIHBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdl
Ykluc3BlY3RvclVJOjpEaWRTYXZlKHBhdGguZ2V0KCkpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkws
IGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2
ZURpYWxvZykKK3sKKyAgICBVTlVTRURfUEFSQU0oZm9yY2VTYXZlRGlhbG9nKTsKKworICAgIEdS
ZWZQdHI8R3RrRmlsZUNob29zZXJOYXRpdmU+IGRpYWxvZyA9IGFkb3B0R1JlZihndGtfZmlsZV9j
aG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUgRmlsZSIsCisgICAgICAgIEdUS19XSU5ET1cobV93aW5k
b3cpLCBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwiKSk7CisK
KyAgICBHdGtGaWxlQ2hvb3NlciogY2hvb3NlciA9IEdUS19GSUxFX0NIT09TRVIoZGlhbG9nLmdl
dCgpKTsKKyNpZiAhVVNFKEdUSzQpCisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3Zlcndy
aXRlX2NvbmZpcm1hdGlvbihjaG9vc2VyLCBUUlVFKTsKKyNlbmRpZgorCisgICAgLy8gU29tZSBp
bnNwZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3IgaW5zdGFuY2UpIHVzZSBhIGN1c3RvbSBVUkkgc2No
ZW1lLCBzdWNoCisgICAgLy8gYXMgd2ViLWluc3BlY3Rvci4gU28gd2UgY2FuJ3QgcmVseSBvbiB0
aGUgVVJMIGJlaW5nIGEgdmFsaWQgZmlsZTovLy8gVVJMCisgICAgLy8gdW5mb3J0dW5hdGVseS4K
KyAgICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0ZWRVUkwpOworICAgIC8vIFN0cmlwIGxlYWRpbmcg
LyBjaGFyYWN0ZXIuCisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfY3VycmVudF9uYW1lKGNob29z
ZXIsIHVybC5wYXRoKCkuc3Vic3RyaW5nKDEpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKGd0
a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBH
VEtfUkVTUE9OU0VfQUNDRVBUKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8Y2hhcj4g
ZGF0YVZlY3RvcjsKKyAgICBDU3RyaW5nIGRhdGFTdHJpbmc7CisgICAgaWYgKGJhc2U2NEVuY29k
ZWQpIHsKKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YVZl
Y3Rvci5zaHJpbmtUb0ZpdCgpOworICAgIH0gZWxzZQorICAgICAgICBkYXRhU3RyaW5nID0gY29u
dGVudC51dGY4KCk7CisKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxs
KCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOworICAgIHNpemVfdCBk
YXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDog
ZGF0YVZlY3Rvci5zaXplKCk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihn
dGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+
IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKKyAgICBnX2ZpbGVfcmVwbGFjZV9j
b250ZW50c19hc3luYyhmaWxlLmdldCgpLCBkYXRhLCBkYXRhTGVuZ3RoLCBudWxscHRyLCBmYWxz
ZSwKKyAgICAgICAgR19GSUxFX0NSRUFURV9SRVBMQUNFX0RFU1RJTkFUSU9OLCBudWxscHRyLCBy
ZW1vdGVGaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2ssIG1faW5zcGVjdG9yUGFnZSk7Cit9CisK
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJikKK3sKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmKQoreworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSkKK3sKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7Cit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShj
b25zdCBTdHJpbmcmKQoreworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYpCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYklu
c3BlY3RvclByb3h5Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
Z3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDU5OWM0NDY1NzY4OGEyOGFiYWU3YWExMDFhYjIyNjc3YmQ4MTEzYWUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHk7Ci0KLWNs
YXNzIFdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJJ
bnNwZWN0b3JQcm94eUNsaWVudCgpID0gZGVmYXVsdDsKLSAgICB2aXJ0dWFsIGJvb2wgb3Blbldp
bmRvdyhXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2Uo
V2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGJyaW5nVG9Gcm9udChX
ZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hh
bmdlZChXZWJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0cmluZyYgdXJsKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIGF0dGFjaChXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgZGV0YWNoKFdlYkluc3BlY3RvclByb3h5JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRD
aGFuZ2VBdHRhY2hlZEhlaWdodChXZWJJbnNwZWN0b3JQcm94eSYsIHVuc2lnbmVkIGhlaWdodCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hlZFdpZHRoKFdlYkluc3BlY3Rv
clByb3h5JiwgdW5zaWduZWQgd2lkdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
QXR0YWNoQXZhaWxhYmlsaXR5KFdlYkluc3BlY3RvclByb3h5JiwgYm9vbCBhdmFpbGFibGUpID0g
MDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUyZGE2NDNhMzNhZWFkOWYxYjk4NDFk
M2U2ZGEwZjExZWQxZWMzZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3Rv
clByb3h5R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU2OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRp
b25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4uCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5o
IgotCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25B
Y3Rpb24uaCIKLSNpbmNsdWRlICJXS0FycmF5LmgiCi0jaW5jbHVkZSAiV0tDb250ZXh0TWVudUl0
ZW0uaCIKLSNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgotI2luY2x1ZGUgIldlYkZyYW1lUG9s
aWN5TGlzdGVuZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50Lmgi
Ci0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYktpdElu
c3BlY3RvcldpbmRvdy5oIgotI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgot
I2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0j
aW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9HdGtVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
c3RhdGljIHZvaWQgaW5zcGVjdG9yVmlld0Rlc3Ryb3llZChHdGtXaWRnZXQqLCBncG9pbnRlciB1
c2VyRGF0YSkKLXsKLSAgICBXZWJJbnNwZWN0b3JQcm94eSogaW5zcGVjdG9yUHJveHkgPSBzdGF0
aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KHVzZXJEYXRhKTsKLQotICAgIC8vIEluZm9ybSBX
ZWJQcm9jZXNzIGFib3V0IHdlYmluc3BlY3RvciBjbG9zdXJlLiBOb3QgZG9pbmcgc28sCi0gICAg
Ly8gcmVzdWx0cyBpbiBmYWlsdXJlIG9mIHN1YnNlcXVlbnQgaW52b2NhdGlvbiBvZiB3ZWJpbnNw
ZWN0b3IuCi0gICAgaW5zcGVjdG9yUHJveHktPmNsb3NlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViSW5zcGVjdG9yUHJveHlDbGll
bnQ+JiYgY2xpZW50KQotewotICAgIG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yV2luZG93KTsKLSAgICB3ZWJraXRJbnNwZWN0b3JX
aW5kb3dTZXRTdWJ0aXRsZShXRUJLSVRfSU5TUEVDVE9SX1dJTkRPVyhtX2luc3BlY3RvcldpbmRv
dyksICFtX2luc3BlY3RlZFVSTFN0cmluZy5pc0VtcHR5KCkgPyBtX2luc3BlY3RlZFVSTFN0cmlu
Zy51dGY4KCkuZGF0YSgpIDogbnVsbHB0cik7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxv
bmcgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTZWN1cml0
eU9yaWdpblJlZiwgV0tTdHJpbmdSZWYsIFdLU3RyaW5nUmVmLCB1bnNpZ25lZCBsb25nIGxvbmcs
IHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVz
YWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhwZWN0ZWRVc2FnZSwgY29uc3Qgdm9pZCopCi17Ci0g
ICAgcmV0dXJuIHN0ZDo6bWF4PHVuc2lnbmVkIGxvbmcgbG9uZz4oZXhwZWN0ZWRVc2FnZSwgY3Vy
cmVudERhdGFiYXNlVXNhZ2UgKiAxLjI1KTsKLX0KLQotc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0Rp
ZENyYXNoKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXZWJJbnNw
ZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQ
cm94eSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKLSAgICBBU1NFUlQod2ViSW5z
cGVjdG9yUHJveHkpOwotICAgIHdlYkluc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tQYWdlUmVm
IHBhZ2VSZWYsIFdLTmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9uUmVmLCBXS0Zy
YW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXJSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKLXsKLSAgICAvLyBBbGxvdyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUg
YW55d2hlcmUuCi0gICAgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZyYW1lID0gdG9JbXBsKG5hdmln
YXRpb25BY3Rpb25SZWYpLT5zb3VyY2VGcmFtZSgpOwotICAgIGlmIChzb3VyY2VGcmFtZSAmJiAh
c291cmNlRnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKLSAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVm
KS0+dXNlKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBXZWJJbnNw
ZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJbnNw
ZWN0b3JQcm94eSo+KGNsaWVudEluZm8pOwotICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7
Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0
aW9uQWN0aW9uUmVmKS0+cmVxdWVzdCgpOwotCi0gICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUg
bWFpbiBpbnNwZWN0b3IgZmlsZS4KLSAgICBpZiAoV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9y
VGVzdEluc3BlY3RvclBhZ2UocmVxdWVzdC51cmwoKSkpIHsKLSAgICAgICAgdG9JbXBsKGxpc3Rl
bmVyUmVmKS0+dXNlKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBQcmV2
ZW50IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGxvYWRpbmcgaW4gdGhlIGluc3BlY3RvcidzIHBhZ2Uu
Ci0gICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+aWdub3JlKCk7Ci0KLSAgICAvLyBBbmQgaW5zdGVh
ZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4KLSAgICB3ZWJJbnNwZWN0b3JQcm94eS0+
aW5zcGVjdGVkUGFnZSgpLT5sb2FkUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKLX0KLQotc3Rh
dGljIHZvaWQgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51KFdLUGFnZVJlZiBwYWdlUmVm
LCBXS0FycmF5UmVmIHByb3Bvc2VkTWVudVJlZiwgV0tBcnJheVJlZiogbmV3TWVudVJlZiwgV0tI
aXRUZXN0UmVzdWx0UmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqKQotewotICAgIFdLTXV0YWJs
ZUFycmF5UmVmIG1lbnVJdGVtcyA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7Ci0KLSAgICBzaXpl
X3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZShwcm9wb3NlZE1lbnVSZWYpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJl
ZiBjb250ZXh0TWVudUl0ZW0gPSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tB
cnJheUdldEl0ZW1BdEluZGV4KHByb3Bvc2VkTWVudVJlZiwgaSkpOwotICAgICAgICBzd2l0Y2gg
KFdLQ29udGV4dE1lbnVJdGVtR2V0VGFnKGNvbnRleHRNZW51SXRlbSkpIHsKLSAgICAgICAgY2Fz
ZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgotICAgICAgICBjYXNl
IGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93OgotICAgICAgICBjYXNl
IGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgotICAgICAgICBjYXNl
IGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAgICBjYXNl
IGtXS0NvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKLSAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZW51
SXRlbXMsIGNvbnRleHRNZW51SXRlbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgICpuZXdNZW51UmVmID0gbWVudUl0ZW1zOwotfQotCi1zdGF0aWMgUmVmPFdl
YnNpdGVEYXRhU3RvcmU+IGluc3BlY3RvcldlYnNpdGVEYXRhU3RvcmUoKQotewotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZXJzaW9uZWREaXJlY3RvcnkgPSAid2Via2l0Z3RrLSIgV0VCS0lUR1RL
X0FQSV9WRVJTSU9OX1NUUklORyBHX0RJUl9TRVBBUkFUT1JfUyAiV2ViSW5zcGVjdG9yIiBHX0RJ
Ul9TRVBBUkFUT1JfUzsKLSAgICBTdHJpbmcgYmFzZUNhY2hlRGlyZWN0b3J5ID0gRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24oZ19nZXRfdXNlcl9jYWNoZV9kaXIoKSksIHZlcnNpb25lZERpcmVj
dG9yeSk7Ci0gICAgU3RyaW5nIGJhc2VEYXRhRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24oZ19nZXRfdXNlcl9kYXRhX2RpcigpKSwgdmVyc2lvbmVkRGlyZWN0b3J5KTsKLQot
ICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpj
cmVhdGUoSXNQZXJzaXN0ZW50OjpZZXMsIFdpbGxDb3B5UGF0aHNGcm9tRXhpc3RpbmdDb25maWd1
cmF0aW9uOjpZZXMpOwotICAgIGNvbmZpZ3VyYXRpb24tPnNldE5ldHdvcmtDYWNoZURpcmVjdG9y
eShGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZUNhY2hlRGlyZWN0b3J5
LCAiV2ViS2l0Q2FjaGUiKSk7Ci0gICAgY29uZmlndXJhdGlvbi0+c2V0QXBwbGljYXRpb25DYWNo
ZURpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZUNhY2hl
RGlyZWN0b3J5LCAiYXBwbGljYXRpb25zIikpOwotICAgIGNvbmZpZ3VyYXRpb24tPnNldEhTVFNT
dG9yYWdlRGlyZWN0b3J5KFN0cmluZyhiYXNlQ2FjaGVEaXJlY3RvcnkpKTsKLSAgICBjb25maWd1
cmF0aW9uLT5zZXRDYWNoZVN0b3JhZ2VEaXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5k
aW5nQ29tcG9uZW50KGJhc2VDYWNoZURpcmVjdG9yeSwgIkNhY2hlU3RvcmFnZSIpKTsKLSAgICBj
b25maWd1cmF0aW9uLT5zZXRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRhRGlyZWN0b3J5LCAibG9jYWxzdG9yYWdlIikpOwot
ICAgIGNvbmZpZ3VyYXRpb24tPnNldEluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KEZpbGVTeXN0
ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChiYXNlRGF0YURpcmVjdG9yeSwgImluZGV4ZWRk
YiIpKTsKLSAgICBjb25maWd1cmF0aW9uLT5zZXRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeShGaWxl
U3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZURhdGFEaXJlY3RvcnksICJkYXRh
YmFzZXMiKSk7Ci0gICAgY29uZmlndXJhdGlvbi0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZURhdGFEaXJl
Y3RvcnksICJpdHAiKSk7Ci0gICAgY29uZmlndXJhdGlvbi0+c2V0U2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbkRpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFz
ZURhdGFEaXJlY3RvcnksICJzZXJ2aWNld29ya2VycyIpKTsKLSAgICBjb25maWd1cmF0aW9uLT5z
ZXREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VEaXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRhRGlyZWN0b3J5LCAiZGV2aWNlaWRoYXNoc2FsdHMiKSk7
Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZShXVEZNb3ZlKGNvbmZpZ3VyYXRp
b24pLCBQQUw6OlNlc3Npb25JRDo6Z2VuZXJhdGVQZXJzaXN0ZW50U2Vzc2lvbklEKCkpOwotfQot
Ci1XZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5k
UGFnZSgpCi17Ci0gICAgQVNTRVJUKGluc3BlY3RlZFBhZ2UoKSk7Ci0gICAgQVNTRVJUKCFtX2lu
c3BlY3RvclZpZXcpOwotCi0gICAgYXV0byBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpj
cmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOwotI2lmIEVOQUJMRShERVZF
TE9QRVJfTU9ERSkKLSAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJ
bnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcgc2V0dGluZ3MuCi0gICAg
cHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJlZmVy
ZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwot
I2VuZGlmCi0gICAgcHJlZmVyZW5jZXMtPnNldEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMo
dHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRSdW50aW1lRmxhZ3MoewotICAg
IH0pOwotICAgIGlmIChtX3VuZGVyVGVzdCkKLSAgICAgICAgcHJlZmVyZW5jZXMtPnNldEhpZGRl
blBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKGZhbHNlKTsKLSAgICBhdXRvIHBhZ2VHcm91
cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKFdlYktpdDo6ZGVmYXVsdEluc3BlY3RvclBhZ2VHcm91
cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOwotICAgIGF1dG8gd2Vic2l0ZURh
dGFTdG9yZSA9IGluc3BlY3RvcldlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICBhdXRvJiBwcm9jZXNz
UG9vbCA9IFdlYktpdDo6ZGVmYXVsdEluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZl
bCgpKTsKLQotICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0
aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJnBy
b2Nlc3NQb29sKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVy
ZW5jZXMucHRyKCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdy
b3VwLnB0cigpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZSh3
ZWJzaXRlRGF0YVN0b3JlLnB0cigpKTsKLSAgICBtX2luc3BlY3RvclZpZXcgPSBHVEtfV0lER0VU
KHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKCpwYWdlQ29uZmlndXJhdGlvbi5wdHIoKSkpOwotICAg
IGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JWaWV3KSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2luc3BlY3RvclZpZXcpKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0KG1faW5zcGVjdG9yVmlldywgImRlc3Ryb3kiLCBHX0NBTExCQUNLKGluc3BlY3RvclZp
ZXdEZXN0cm95ZWQpLCB0aGlzKTsKLQotICAgIFdLUGFnZVVJQ2xpZW50VjIgdWlDbGllbnQgPSB7
Ci0gICAgICAgIHsgMiwgdGhpcyB9LAotICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVOZXdQYWdl
X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvd1BhZ2UKLSAg
ICAgICAgbnVsbHB0ciwgLy8gY2xvc2VQYWdlCi0gICAgICAgIG51bGxwdHIsIC8vIHRha2VGb2N1
cwotICAgICAgICBudWxscHRyLCAvLyBmb2N1cwotICAgICAgICBudWxscHRyLCAvLyB1bmZvY3Vz
Ci0gICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRBbGVydAotICAgICAgICBudWxscHRy
LCAvLyBydW5KYXZhU2NyaXB0Q29uZmlybQotICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2Ny
aXB0UHJvbXB0Ci0gICAgICAgIG51bGxwdHIsIC8vIHNldFN0YXR1c1RleHQKLSAgICAgICAgbnVs
bHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAot
ICAgICAgICBudWxscHRyLCAvLyBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVk
Rm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZUtleUV2ZW50Ci0g
ICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQKLSAgICAgICAgbnVsbHB0
ciwgLy8gYXJlVG9vbGJhcnNWaXNpYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIHNldFRvb2xiYXJz
VmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBpc01lbnVCYXJWaXNpYmxlCi0gICAgICAgIG51
bGxwdHIsIC8vIHNldE1lbnVCYXJWaXNpYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIGlzU3RhdHVz
QmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0dXNCYXJWaXNpYmxlCi0gICAg
ICAgIG51bGxwdHIsIC8vIGlzUmVzaXphYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIHNldFJlc2l6
YWJsZQotICAgICAgICBudWxscHRyLCAvLyBnZXRXaW5kb3dGcmFtZSwKLSAgICAgICAgbnVsbHB0
ciwgLy8gc2V0V2luZG93RnJhbWUsCi0gICAgICAgIG51bGxwdHIsIC8vIHJ1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbAotICAgICAgICBudWxscHRyLCAvLyBkaWREcmF3Ci0gICAgICAgIG51bGxw
dHIsIC8vIHBhZ2VEaWRTY3JvbGwKLSAgICAgICAgZXhjZWVkZWREYXRhYmFzZVF1b3RhLAotICAg
ICAgICBudWxscHRyLCAvLyBydW5PcGVuUGFuZWwsCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lk
ZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKLSAgICAgICAgbnVsbHB0ciwg
Ly8gaGVhZGVySGVpZ2h0Ci0gICAgICAgIG51bGxwdHIsIC8vIGZvb3RlckhlaWdodAotICAgICAg
ICBudWxscHRyLCAvLyBkcmF3SGVhZGVyCi0gICAgICAgIG51bGxwdHIsIC8vIGRyYXdGb290ZXIK
LSAgICAgICAgbnVsbHB0ciwgLy8gcHJpbnRGcmFtZQotICAgICAgICBudWxscHRyLCAvLyBydW5N
b2RhbAotICAgICAgICBudWxscHRyLCAvLyB1bnVzZWQKLSAgICAgICAgbnVsbHB0ciwgLy8gc2F2
ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcgotICAgICAgICBudWxscHRyLCAvLyBzaG91bGRJ
bnRlcnJ1cHRKYXZhU2NyaXB0Ci0gICAgICAgIG51bGxwdHIsIC8vIGNyZWF0ZVBhZ2UKLSAgICAg
ICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQKLSAgICAgICAgbnVsbHB0ciwg
Ly8gZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKLSAgICAgICAg
bnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JV
c2VXaXRoVjEKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbG9yUGlja2VyCi0gICAgICAgIG51
bGxwdHIsIC8vIGhpZGVDb2xvclBpY2tlcgotICAgICAgICBudWxscHRyLCAvLyB1bmF2YWlsYWJs
ZVBsdWdpbkJ1dHRvbkNsaWNrZWQKLSAgICB9OwotCi0gICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVu
dFYwIG5hdmlnYXRpb25DbGllbnQgPSB7Ci0gICAgICAgIHsgMCwgdGhpcyB9LAotICAgICAgICBk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLAotICAgICAgICBudWxscHRyLCAvLyBkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRl
UG9saWN5Rm9yUGx1Z2luTG9hZAotICAgICAgICBudWxscHRyLCAvLyBkaWRTdGFydFByb3Zpc2lv
bmFsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJl
Y3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFBy
b3Zpc2lvbmFsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRDb21taXROYXZpZ2F0
aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaE5hdmlnYXRpb24KLSAgICAgICAgbnVs
bHB0ciwgLy8gZGlkRmFpbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZEluU3ViZnJhbWUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoRG9j
dW1lbnRMb2FkCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24K
LSAgICAgICAgbnVsbHB0ciwgLy8gcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UKLSAgICAgICAg
bnVsbHB0ciwgLy8gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZQotICAgICAg
ICBudWxscHRyLCAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKLSAgICAgICAg
d2ViUHJvY2Vzc0RpZENyYXNoLAotICAgICAgICBudWxscHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFz
dGVyS2V5Ci0KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQot
ICAgICAgICBudWxscHRyLCAvLyB3aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVs
bHB0ciwgLy8gZGlkRW5kTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlk
UmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAotICAgIH07Ci0KLSAgICBXS1BhZ2VDb250
ZXh0TWVudUNsaWVudFYzIGNvbnRleHRNZW51Q2xpZW50ID0gewotICAgICAgICB7IDMsIHRoaXMg
fSwKLSAgICAgICAgbnVsbHB0ciwgLy8gZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51X2Rl
cHJlY2F0ZWRGb3JVc2VXaXRoVjAKLSAgICAgICAgbnVsbHB0ciwgLy8gY3VzdG9tQ29udGV4dE1l
bnVJdGVtU2VsZWN0ZWQKLSAgICAgICAgbnVsbHB0ciwgLy8gY29udGV4dE1lbnVEaXNtaXNzZWQK
LSAgICAgICAgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51LAotICAgICAgICBudWxscHRy
LCAvLyBzaG93Q29udGV4dE1lbnUKLSAgICAgICAgbnVsbHB0ciwgLy8gaGlkZUNvbnRleHRNZW51
Ci0gICAgfTsKLQotICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSA9IHdlYmtpdFdlYlZp
ZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX2luc3BlY3RvclZpZXcpKTsKLSAg
ICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7Ci0KLSAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQodG9B
UEkoaW5zcGVjdG9yUGFnZSksICZ1aUNsaWVudC5iYXNlKTsKLSAgICBXS1BhZ2VTZXRQYWdlTmF2
aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJm5hdmlnYXRpb25DbGllbnQuYmFz
ZSk7Ci0gICAgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KHRvQVBJKGluc3BlY3RvclBh
Z2UpLCAmY29udGV4dE1lbnVDbGllbnQuYmFzZSk7Ci0KLSAgICByZXR1cm4gaW5zcGVjdG9yUGFn
ZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdp
bmRvdygpCi17Ci0gICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5vcGVuV2luZG93KCp0aGlz
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX2luc3BlY3RvcldpbmRvdyk7Ci0g
ICAgbV9pbnNwZWN0b3JXaW5kb3cgPSB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoKTsKLSNpZiBV
U0UoR1RLNCkKLSAgICBndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKG1faW5zcGVjdG9y
V2luZG93KSwgbV9pbnNwZWN0b3JWaWV3KTsKLSNlbHNlCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihtX2luc3BlY3RvcldpbmRvdyksIG1faW5zcGVjdG9yVmlldyk7Ci0gICAg
Z3RrX3dpZGdldF9zaG93KG1faW5zcGVjdG9yVmlldyk7Ci0jZW5kaWYKLQotICAgIGlmICghbV9p
bnNwZWN0ZWRVUkxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICB1cGRhdGVJbnNwZWN0b3JXaW5k
b3dUaXRsZSgpOwotCi0gICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2lu
c3BlY3RvcldpbmRvdyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9pbnNwZWN0b3JXaW5k
b3cpKTsKLSAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhtX2luc3BlY3RvcldpbmRv
dykpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAobV9pbnNwZWN0b3JWaWV3KSB7Ci0gICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2luc3BlY3RvclZpZXcsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluc3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKLSAgICAg
ICAgbV9pbnNwZWN0b3JWaWV3ID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAobV9jbGllbnQp
Ci0gICAgICAgIG1fY2xpZW50LT5kaWRDbG9zZSgqdGhpcyk7Ci0KLSAgICBpZiAobV9pbnNwZWN0
b3JXaW5kb3cpIHsKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93
KTsKLSAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBudWxscHRyOwotICAgIH0KLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKLXsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQot
ewotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17
Ci0gICAgaWYgKG1faXNPcGVuaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGll
bnQgJiYgbV9jbGllbnQtPmJyaW5nVG9Gcm9udCgqdGhpcykpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0
b3JWaWV3KTsKLSAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93
KHBhcmVudCkpCi0gICAgICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKHBhcmVudCkp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFn
ZVRvRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCi17Ci0gICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBn
dGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOwotICAgIGlmIChXZWJDb3Jl
Ojp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKLSAgICAgICAgcmV0dXJu
IG1faXNWaXNpYmxlICYmIGd0a193aW5kb3dfaXNfYWN0aXZlKEdUS19XSU5ET1cocGFyZW50KSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFw
cGVhcmFuY2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKQot
ewotICAgIG1faW5zcGVjdGVkVVJMU3RyaW5nID0gdXJsOwotICAgIGlmIChtX2NsaWVudCkKLSAg
ICAgICAgbV9jbGllbnQtPmluc3BlY3RlZFVSTENoYW5nZWQoKnRoaXMsIHVybCk7Ci0KLSAgICBp
ZiAobV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxl
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRl
KGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsK
LSAgICByZXR1cm4gInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL1VzZXJJbnRlcmZh
Y2UvTWFpbi5odG1sIl9zOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rv
clRlc3RQYWdlVVJMKCkKLXsKLSAgICByZXR1cm4gInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5z
cGVjdG9yL1VzZXJJbnRlcmZhY2UvVGVzdC5odG1sIl9zOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0Rh
dGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIC8v
IEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1MzY+OiB0aGlzIHNob3VsZCBpbmZlciBt
b3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1ZyB0YXJnZXQuCi0gICAgYXV0byBkYXRhID0g
RGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOwotICAgIGRhdGEuZGVidWdnYWJsZVR5cGUgPSBJ
bnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdlOwotICAgIHJldHVybiBkYXRhOwotfQot
Ci11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWln
aHQoKQotewotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfaGVpZ2h0KGluc3Bl
Y3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQotewotICAgIHJldHVybiBndGtfd2lk
Z2V0X2dldF9hbGxvY2F0ZWRfd2lkdGgoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgR1Jl
ZlB0cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7Ci0gICAgaWYg
KG1faW5zcGVjdG9yV2luZG93KSB7Ci0jaWYgVVNFKEdUSzQpCi0gICAgICAgIGd0a193aW5kb3df
c2V0X2NoaWxkKEdUS19XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpLCBudWxscHRyKTsKLSNlbHNl
Ci0gICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JX
aW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOwotI2VuZGlmCi0gICAgICAgIGd0a193aWRnZXRfZGVz
dHJveShtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICAvLyBTZXQgYSBkZWZhdWx0IHNpemVzIGJhc2VkIG9uIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwuCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1
bHRBdHRhY2hlZFNpemUgPSAzMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1B
dHRhY2hlZFdpZHRoID0gNzUwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0
YWNoZWRIZWlnaHQgPSAyNTA7Ci0KLSAgICBpZiAobV9hdHRhY2htZW50U2lkZSA9PSBBdHRhY2ht
ZW50U2lkZTo6Qm90dG9tKSB7Ci0gICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdo
dCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkgKiAzIC8gNDsKLSAgICAgICAgcGxh
dGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRIZWln
aHQsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZEhlaWdodCkp
KTsKLSAgICB9IGVsc2UgewotICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRXaWR0aCA9
IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKSAqIDMgLyA0OwotICAgICAgICBwbGF0Zm9y
bVNldEF0dGFjaGVkV2luZG93V2lkdGgoc3RkOjptYXgobWluaW11bUF0dGFjaGVkV2lkdGgsIHN0
ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZFdpZHRoKSkpOwotICAg
IH0KLQotICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+YXR0YWNoKCp0aGlzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgd2Via2l0V2ViVmlld0Jhc2VBZGRXZWJJbnNwZWN0b3IoV0VCS0lU
X1dFQl9WSUVXX0JBU0UoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpLCBtX2luc3BlY3Rv
clZpZXcsIG1fYXR0YWNobWVudFNpZGUpOwotICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3BlY3Rv
clZpZXcpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgpCi17
Ci0gICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCktPmhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNw
ZWN0b3JWaWV3OwotICAgIGlmICghbV9jbGllbnQgfHwgIW1fY2xpZW50LT5kZXRhY2goKnRoaXMp
KSB7Ci0gICAgICAgIC8vIERldGFjaCBpcyBjYWxsZWQgd2hlbiBtX2lzQXR0YWNoZWQgaXMgdHJ1
ZSwgYnV0IGl0IGNvdWxkIGNhbGxlZCBiZWZvcmUKLSAgICAgICAgLy8gdGhlIGluc3BlY3RvciBp
cyBvcGVuZWQgaWYgdGhlIGluc3BlY3RvciBpcyBzaG93bi9jbG9zZWQgcXVpY2tseS4gU28sCi0g
ICAgICAgIC8vIHdlIG1pZ2h0IG5vdCBoYXZlIGEgcGFyZW50IHlldC4KLSAgICAgICAgaWYgKEd0
a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50KG1faW5zcGVjdG9yVmlldykp
Ci0gICAgICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVJlbW92ZVdlYkluc3BlY3RvcihXRUJLSVRf
V0VCX1ZJRVdfQkFTRShwYXJlbnQpLCBtX2luc3BlY3RvclZpZXcpOwotICAgIH0KLQotICAgIC8v
IFJldHVybiBlYXJseSBpZiB3ZSBhcmUgbm90IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGluc3Bl
Y3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVkCi0gICAgLy8gYW5kIHdlIHNob3VsZCBub3Qg
Y3JlYXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0b3Igd2luZG93LgotICAgIGlmICghbV9pc1Zpc2li
bGUpIHsKLSAgICAgICAgLy8gVGhlIGluc3BlY3RvciB2aWV3IHdpbGwgYmUgZGVzdHJveWVkLCBi
dXQgd2UgZG9uJ3QgbmVlZCB0byBub3RpZnkgdGhlIHdlYiBwcm9jZXNzIHRvIGNsb3NlIHRoZQot
ICAgICAgICAvLyBpbnNwZWN0b3IgaW4gdGhpcyBjYXNlLCBzaW5jZSBpdCdzIGFscmVhZHkgY2xv
c2VkLgotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNw
ZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJveWVk
KSwgdGhpcyk7Ci0gICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBvcGVuKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAg
IGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGllbnQp
Ci0gICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZEhlaWdodCgqdGhpcywgaGVpZ2h0
KTsKLSAgICB3ZWJraXRXZWJWaWV3QmFzZVNldEluc3BlY3RvclZpZXdTaXplKFdFQktJVF9XRUJf
VklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgaGVpZ2h0KTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVu
c2lnbmVkIHdpZHRoKQotewotICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hl
ZFdpZHRoKCp0aGlzLCB3aWR0aCk7Ci0gICAgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JW
aWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQo
KSksIHdpZHRoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVl
dFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGljIHZvaWQgZmlsZVJlcGxhY2VD
b250ZW50c0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIEdGaWxlKiBmaWxlID0gR19GSUxFKHNvdXJj
ZU9iamVjdCk7Ci0gICAgaWYgKCFnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19maW5pc2goZmlsZSwg
cmVzdWx0LCBudWxscHRyLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byog
cGFnZSA9IHN0YXRpY19jYXN0PFdlYlBhZ2VQcm94eSo+KHVzZXJEYXRhKTsKLSAgICBHVW5pcXVl
UHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUpKTsKLSAgICBwYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShwYXRoLmdldCgpKSk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVS
TCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VT
YXZlRGlhbG9nKQotewotICAgIFVOVVNFRF9QQVJBTShmb3JjZVNhdmVEaWFsb2cpOwotCi0gICAg
R3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZp
ZXcpOwotICAgIGlmICghV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBh
cmVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdSZWZQdHI8R3RrRmlsZUNob29zZXJOYXRp
dmU+IGRpYWxvZyA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUg
RmlsZSIsCi0gICAgICAgIEdUS19XSU5ET1cocGFyZW50KSwgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJ
T05fU0FWRSwgIlNhdmUiLCAiQ2FuY2VsIikpOwotCi0gICAgR3RrRmlsZUNob29zZXIqIGNob29z
ZXIgPSBHVEtfRklMRV9DSE9PU0VSKGRpYWxvZy5nZXQoKSk7Ci0jaWYgIVVTRShHVEs0KQotICAg
IGd0a19maWxlX2Nob29zZXJfc2V0X2RvX292ZXJ3cml0ZV9jb25maXJtYXRpb24oY2hvb3Nlciwg
VFJVRSk7Ci0jZW5kaWYKLQotICAgIC8vIFNvbWUgaW5zcGVjdG9yIHZpZXdzIChBdWRpdHMgZm9y
IGluc3RhbmNlKSB1c2UgYSBjdXN0b20gVVJJIHNjaGVtZSwgc3VjaAotICAgIC8vIGFzIHdlYi1p
bnNwZWN0b3IuIFNvIHdlIGNhbid0IHJlbHkgb24gdGhlIFVSTCBiZWluZyBhIHZhbGlkIGZpbGU6
Ly8vIFVSTAotICAgIC8vIHVuZm9ydHVuYXRlbHkuCi0gICAgVVJMIHVybChVUkwoKSwgc3VnZ2Vz
dGVkVVJMKTsKLSAgICAvLyBTdHJpcCBsZWFkaW5nIC8gY2hhcmFjdGVyLgotICAgIGd0a19maWxl
X2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZShjaG9vc2VyLCB1cmwucGF0aCgpLnN1YnN0cmluZygx
KS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmIChndGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RLX05B
VElWRV9ESUFMT0coZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7Ci0gICAgQ1N0cmluZyBk
YXRhU3RyaW5nOwotICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIGlmICghYmFzZTY0
RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRmOCgpOwotCi0gICAgY29uc3Qg
Y2hhciogZGF0YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBk
YXRhVmVjdG9yLmRhdGEoKTsKLSAgICBzaXplX3QgZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5nLmlz
TnVsbCgpID8gZGF0YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFWZWN0b3Iuc2l6ZSgpOwotICAgIEdS
ZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShj
aG9vc2VyKSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxl
LmdldCgpKSk7Ci0gICAgZ19maWxlX3JlcGxhY2VfY29udGVudHNfYXN5bmMoZmlsZS5nZXQoKSwg
ZGF0YSwgZGF0YUxlbmd0aCwgbnVsbHB0ciwgZmFsc2UsCi0gICAgICAgIEdfRklMRV9DUkVBVEVf
UkVQTEFDRV9ERVNUSU5BVElPTiwgbnVsbHB0ciwgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNr
LCBtX2luc3BlY3RvclBhZ2UpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxh
YmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAg
ICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoKnRoaXMsIGF2YWlsYWJs
ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlD
bGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iYTQ0NWZjNzY0NzExNDhjNDZkMThkZWM3NjQyOGY4N2Q4OTZm
MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViSW5zcGVjdG9yVUlQcm94eTsKKworY2xhc3MgV2ViSW5zcGVjdG9yVUlQcm94
eUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yVUlQcm94eUNsaWVu
dCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlbldpbmRvdyhXZWJJbnNwZWN0b3JV
SVByb3h5JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZShXZWJJbnNwZWN0b3JVSVBy
b3h5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQoV2ViSW5zcGVjdG9yVUlQ
cm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChXZWJJbnNw
ZWN0b3JVSVByb3h5JiwgY29uc3QgU3RyaW5nJiB1cmwpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
YXR0YWNoKFdlYkluc3BlY3RvclVJUHJveHkmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGRldGFj
aChXZWJJbnNwZWN0b3JVSVByb3h5JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VB
dHRhY2hlZEhlaWdodChXZWJJbnNwZWN0b3JVSVByb3h5JiwgdW5zaWduZWQgaGVpZ2h0KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaGVkV2lkdGgoV2ViSW5zcGVjdG9yVUlQ
cm94eSYsIHVuc2lnbmVkIHdpZHRoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0
dGFjaEF2YWlsYWJpbGl0eShXZWJJbnNwZWN0b3JVSVByb3h5JiwgYm9vbCBhdmFpbGFibGUpID0g
MDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTA5Yjg5Njc2MDk2NDM0ZjcxMmFlYmY1ZmY4NzZkNTk0OTkxYjUy
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9n
dGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAKQEAgLTAsMCArMSw1NjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9y
dGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPi4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJv
eHkuaCIKKworI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0
aW9uQWN0aW9uLmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLQ29udGV4dE1l
bnVJdGVtLmgiCisjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXZWJGcmFt
ZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudC5oIgorI2luY2x1ZGUgIldl
YktpdEluc3BlY3RvcldpbmRvdy5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29s
LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFT
dG9yZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworc3RhdGljIHZvaWQgaW5zcGVjdG9yVmlld0Rlc3Ryb3llZChHdGtXaWRnZXQqLCBncG9p
bnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJJbnNwZWN0b3JVSVByb3h5KiBpbnNwZWN0b3JQcm94
eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclVJUHJveHkqPih1c2VyRGF0YSk7CisKKyAgICAv
LyBJbmZvcm0gV2ViUHJvY2VzcyBhYm91dCB3ZWJpbnNwZWN0b3IgY2xvc3VyZS4gTm90IGRvaW5n
IHNvLAorICAgIC8vIHJlc3VsdHMgaW4gZmFpbHVyZSBvZiBzdWJzZXF1ZW50IGludm9jYXRpb24g
b2Ygd2ViaW5zcGVjdG9yLgorICAgIGluc3BlY3RvclByb3h5LT5jbG9zZSgpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJUHJveHk6OnNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViSW5zcGVj
dG9yVUlQcm94eUNsaWVudD4mJiBjbGllbnQpCit7CisgICAgbV9jbGllbnQgPSBXVEZNb3ZlKGNs
aWVudCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2lu
ZG93VGl0bGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7CisgICAg
d2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1co
bV9pbnNwZWN0b3JXaW5kb3cpLCAhbV9pbnNwZWN0ZWRVUkxTdHJpbmcuaXNFbXB0eSgpID8gbV9p
bnNwZWN0ZWRVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSA6IG51bGxwdHIpOworfQorCitzdGF0aWMg
dW5zaWduZWQgbG9uZyBsb25nIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXS1BhZ2VSZWYsIFdLRnJh
bWVSZWYsIFdLU2VjdXJpdHlPcmlnaW5SZWYsIFdLU3RyaW5nUmVmLCBXS1N0cmluZ1JlZiwgdW5z
aWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZyBj
dXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNhZ2UsIGNv
bnN0IHZvaWQqKQoreworICAgIHJldHVybiBzdGQ6Om1heDx1bnNpZ25lZCBsb25nIGxvbmc+KGV4
cGVjdGVkVXNhZ2UsIGN1cnJlbnREYXRhYmFzZVVzYWdlICogMS4yNSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYlByb2Nlc3NEaWRDcmFzaChXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgV2ViSW5zcGVjdG9yVUlQcm94eSogV2ViSW5zcGVjdG9yVUlQcm94eSA9IHN0YXRp
Y19jYXN0PFdlYkluc3BlY3RvclVJUHJveHkqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZv
KSk7CisgICAgQVNTRVJUKFdlYkluc3BlY3RvclVJUHJveHkpOworICAgIFdlYkluc3BlY3RvclVJ
UHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKK30KKworc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbihXS1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVm
IG5hdmlnYXRpb25BY3Rpb25SZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lclJl
ZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIC8vIEFsbG93IG5v
bi1tYWluIGZyYW1lcyB0byBuYXZpZ2F0ZSBhbnl3aGVyZS4KKyAgICBBUEk6OkZyYW1lSW5mbyog
c291cmNlRnJhbWUgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnNvdXJjZUZyYW1lKCk7
CisgICAgaWYgKHNvdXJjZUZyYW1lICYmICFzb3VyY2VGcmFtZS0+aXNNYWluRnJhbWUoKSkgewor
ICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGNvbnN0IFdlYkluc3BlY3RvclVJUHJveHkqIFdlYkluc3BlY3RvclVJUHJv
eHkgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJbnNwZWN0b3JVSVByb3h5Kj4oY2xpZW50SW5mbyk7
CisgICAgQVNTRVJUKFdlYkluc3BlY3RvclVJUHJveHkpOworCisgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnJlcXVlc3Qo
KTsKKworICAgIC8vIEFsbG93IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCisg
ICAgaWYgKFdlYkluc3BlY3RvclVJUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVx
dWVzdC51cmwoKSkpIHsKKyAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBm
cm9tIGxvYWRpbmcgaW4gdGhlIGluc3BlY3RvcidzIHBhZ2UuCisgICAgdG9JbXBsKGxpc3RlbmVy
UmVmKS0+aWdub3JlKCk7CisKKyAgICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNw
ZWN0ZWQgcGFnZS4KKyAgICBXZWJJbnNwZWN0b3JVSVByb3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxv
YWRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOworfQorCitzdGF0aWMgdm9pZCBnZXRDb250ZXh0
TWVudUZyb21Qcm9wb3NlZE1lbnUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLQXJyYXlSZWYgcHJvcG9z
ZWRNZW51UmVmLCBXS0FycmF5UmVmKiBuZXdNZW51UmVmLCBXS0hpdFRlc3RSZXN1bHRSZWYsIFdL
VHlwZVJlZiwgY29uc3Qgdm9pZCopCit7CisgICAgV0tNdXRhYmxlQXJyYXlSZWYgbWVudUl0ZW1z
ID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKKworICAgIHNpemVfdCBjb3VudCA9IFdLQXJyYXlH
ZXRTaXplKHByb3Bvc2VkTWVudVJlZik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIFdLQ29udGV4dE1lbnVJdGVtUmVmIGNvbnRleHRNZW51SXRlbSA9
IHN0YXRpY19jYXN0PFdLQ29udGV4dE1lbnVJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgo
cHJvcG9zZWRNZW51UmVmLCBpKSk7CisgICAgICAgIHN3aXRjaCAoV0tDb250ZXh0TWVudUl0ZW1H
ZXRUYWcoY29udGV4dE1lbnVJdGVtKSkgeworICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRl
bVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVt
VGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVt
VGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVt
VGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRh
Z0Rvd25sb2FkSW1hZ2VUb0Rpc2s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lbnVJdGVtcywgY29udGV4dE1lbnVJ
dGVtKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgKm5ld01l
bnVSZWYgPSBtZW51SXRlbXM7Cit9CisKK3N0YXRpYyBSZWY8V2Vic2l0ZURhdGFTdG9yZT4gaW5z
cGVjdG9yV2Vic2l0ZURhdGFTdG9yZSgpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnNp
b25lZERpcmVjdG9yeSA9ICJ3ZWJraXRndGstIiBXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5H
IEdfRElSX1NFUEFSQVRPUl9TICJXZWJJbnNwZWN0b3IiIEdfRElSX1NFUEFSQVRPUl9TOworICAg
IFN0cmluZyBiYXNlQ2FjaGVEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQoRmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihn
X2dldF91c2VyX2NhY2hlX2RpcigpKSwgdmVyc2lvbmVkRGlyZWN0b3J5KTsKKyAgICBTdHJpbmcg
YmFzZURhdGFEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
RmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihnX2dldF91c2Vy
X2RhdGFfZGlyKCkpLCB2ZXJzaW9uZWREaXJlY3RvcnkpOworCisgICAgYXV0byBjb25maWd1cmF0
aW9uID0gV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb246OmNyZWF0ZShJc1BlcnNpc3RlbnQ6
OlllcywgV2lsbENvcHlQYXRoc0Zyb21FeGlzdGluZ0NvbmZpZ3VyYXRpb246Olllcyk7CisgICAg
Y29uZmlndXJhdGlvbi0+c2V0TmV0d29ya0NhY2hlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChiYXNlQ2FjaGVEaXJlY3RvcnksICJXZWJLaXRDYWNoZSIpKTsK
KyAgICBjb25maWd1cmF0aW9uLT5zZXRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KEZpbGVTeXN0
ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChiYXNlQ2FjaGVEaXJlY3RvcnksICJhcHBsaWNh
dGlvbnMiKSk7CisgICAgY29uZmlndXJhdGlvbi0+c2V0SFNUU1N0b3JhZ2VEaXJlY3RvcnkoU3Ry
aW5nKGJhc2VDYWNoZURpcmVjdG9yeSkpOworICAgIGNvbmZpZ3VyYXRpb24tPnNldENhY2hlU3Rv
cmFnZURpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZUNh
Y2hlRGlyZWN0b3J5LCAiQ2FjaGVTdG9yYWdlIikpOworICAgIGNvbmZpZ3VyYXRpb24tPnNldExv
Y2FsU3RvcmFnZURpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
YmFzZURhdGFEaXJlY3RvcnksICJsb2NhbHN0b3JhZ2UiKSk7CisgICAgY29uZmlndXJhdGlvbi0+
c2V0SW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KGJhc2VEYXRhRGlyZWN0b3J5LCAiaW5kZXhlZGRiIikpOworICAgIGNvbmZpZ3Vy
YXRpb24tPnNldFdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChiYXNlRGF0YURpcmVjdG9yeSwgImRhdGFiYXNlcyIpKTsKKyAgICBjb25m
aWd1cmF0aW9uLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KEZpbGVTeXN0ZW06
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChiYXNlRGF0YURpcmVjdG9yeSwgIml0cCIpKTsKKyAg
ICBjb25maWd1cmF0aW9uLT5zZXRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KEZp
bGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChiYXNlRGF0YURpcmVjdG9yeSwgInNl
cnZpY2V3b3JrZXJzIikpOworICAgIGNvbmZpZ3VyYXRpb24tPnNldERldmljZUlkSGFzaFNhbHRz
U3RvcmFnZURpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFz
ZURhdGFEaXJlY3RvcnksICJkZXZpY2VpZGhhc2hzYWx0cyIpKTsKKyAgICByZXR1cm4gV2Vic2l0
ZURhdGFTdG9yZTo6Y3JlYXRlKFdURk1vdmUoY29uZmlndXJhdGlvbiksIFBBTDo6U2Vzc2lvbklE
OjpnZW5lcmF0ZVBlcnNpc3RlbnRTZXNzaW9uSUQoKSk7Cit9CisKK1dlYlBhZ2VQcm94eSogV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIEFT
U0VSVChpbnNwZWN0ZWRQYWdlKCkpOworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JWaWV3KTsKKwor
ICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAi
V2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCisgICAg
Ly8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVn
IGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgorICAgIHByZWZlcmVuY2VzLT5zZXRE
ZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFn
ZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorICAgIHByZWZl
cmVuY2VzLT5zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKHRydWUpOworICAgIHByZWZl
cmVuY2VzLT5zZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKHsKKyAgICB9KTsKKyAgICBpZiAobV91
bmRlclRlc3QpCisgICAgICAgIHByZWZlcmVuY2VzLT5zZXRIaWRkZW5QYWdlRE9NVGltZXJUaHJv
dHRsaW5nRW5hYmxlZChmYWxzZSk7CisgICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6
OmNyZWF0ZShXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFn
ZShpbnNwZWN0ZWRQYWdlKCkpKTsKKyAgICBhdXRvIHdlYnNpdGVEYXRhU3RvcmUgPSBpbnNwZWN0
b3JXZWJzaXRlRGF0YVN0b3JlKCk7CisgICAgYXV0byYgcHJvY2Vzc1Bvb2wgPSBXZWJLaXQ6OmRl
ZmF1bHRJbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0aW9uTGV2ZWwoKSk7CisKKyAgICBhdXRv
IHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Cisg
ICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZwcm9jZXNzUG9vbCk7CisgICAg
cGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsKKyAg
ICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7CisgICAg
cGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZS5w
dHIoKSk7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0gR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFz
ZUNyZWF0ZSgqcGFnZUNvbmZpZ3VyYXRpb24ucHRyKCkpKTsKKyAgICBnX29iamVjdF9hZGRfd2Vh
a19wb2ludGVyKEdfT0JKRUNUKG1faW5zcGVjdG9yVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmbV9pbnNwZWN0b3JWaWV3KSk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3Rv
clZpZXcsICJkZXN0cm95IiwgR19DQUxMQkFDSyhpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhp
cyk7CisKKyAgICBXS1BhZ2VVSUNsaWVudFYyIHVpQ2xpZW50ID0geworICAgICAgICB7IDIsIHRo
aXMgfSwKKyAgICAgICAgbnVsbHB0ciwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNl
V2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIHNob3dQYWdlCisgICAgICAgIG51bGxwdHIsIC8v
IGNsb3NlUGFnZQorICAgICAgICBudWxscHRyLCAvLyB0YWtlRm9jdXMKKyAgICAgICAgbnVsbHB0
ciwgLy8gZm9jdXMKKyAgICAgICAgbnVsbHB0ciwgLy8gdW5mb2N1cworICAgICAgICBudWxscHRy
LCAvLyBydW5KYXZhU2NyaXB0QWxlcnQKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlw
dENvbmZpcm0KKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdFByb21wdAorICAgICAg
ICBudWxscHRyLCAvLyBzZXRTdGF0dXNUZXh0CisgICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlk
TW92ZU92ZXJFbGVtZW50X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwg
Ly8gbWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAg
ICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5kbGVLZXlFdmVudAorICAgICAgICBudWxscHRyLCAv
LyBkaWROb3RIYW5kbGVXaGVlbEV2ZW50CisgICAgICAgIG51bGxwdHIsIC8vIGFyZVRvb2xiYXJz
VmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBzZXRUb29sYmFyc1Zpc2libGUKKyAgICAgICAg
bnVsbHB0ciwgLy8gaXNNZW51QmFyVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBzZXRNZW51
QmFyVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBpc1N0YXR1c0JhclZpc2libGUKKyAgICAg
ICAgbnVsbHB0ciwgLy8gc2V0U3RhdHVzQmFyVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBp
c1Jlc2l6YWJsZQorICAgICAgICBudWxscHRyLCAvLyBzZXRSZXNpemFibGUKKyAgICAgICAgbnVs
bHB0ciwgLy8gZ2V0V2luZG93RnJhbWUsCisgICAgICAgIG51bGxwdHIsIC8vIHNldFdpbmRvd0Zy
YW1lLAorICAgICAgICBudWxscHRyLCAvLyBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwKKyAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkRHJhdworICAgICAgICBudWxscHRyLCAvLyBwYWdlRGlkU2Ny
b2xsCisgICAgICAgIGV4Y2VlZGVkRGF0YWJhc2VRdW90YSwKKyAgICAgICAgbnVsbHB0ciwgLy8g
cnVuT3BlblBhbmVsLAorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0CisgICAgICAgIG51bGxwdHIsIC8vIGhlYWRlckhlaWdodAor
ICAgICAgICBudWxscHRyLCAvLyBmb290ZXJIZWlnaHQKKyAgICAgICAgbnVsbHB0ciwgLy8gZHJh
d0hlYWRlcgorICAgICAgICBudWxscHRyLCAvLyBkcmF3Rm9vdGVyCisgICAgICAgIG51bGxwdHIs
IC8vIHByaW50RnJhbWUKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuTW9kYWwKKyAgICAgICAgbnVs
bHB0ciwgLy8gdW51c2VkCisgICAgICAgIG51bGxwdHIsIC8vIHNhdmVEYXRhVG9GaWxlSW5Eb3du
bG9hZHNGb2xkZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlw
dAorICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVQYWdlCisgICAgICAgIG51bGxwdHIsIC8vIG1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50CisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZv
ck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0CisgICAgICAgIG51bGxwdHIsIC8vIHVuYXZh
aWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYxCisgICAgICAg
IG51bGxwdHIsIC8vIHNob3dDb2xvclBpY2tlcgorICAgICAgICBudWxscHRyLCAvLyBoaWRlQ29s
b3JQaWNrZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlj
a2VkCisgICAgfTsKKworICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZpZ2F0aW9uQ2xp
ZW50ID0geworICAgICAgICB7IDAsIHRoaXMgfSwKKyAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbiwKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvblJlc3BvbnNlCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvclBsdWdpbkxv
YWQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24KKyAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxO
YXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRp
b24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdhdGlvbgorICAgICAgICBudWxs
cHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxO
YXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1
YmZyYW1lCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9hZAorICAgICAg
ICBudWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIs
IC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCisgICAgICAgIG51bGxwdHIsIC8vIGNhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCisgICAgICAgIHdlYlByb2Nlc3NEaWRDcmFz
aCwKKyAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0b01hc3RlcktleQorCisgICAgICAg
IG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwg
Ly8gd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEVuZE5h
dmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5hdmlnYXRpb25H
ZXN0dXJlU25hcHNob3QKKyAgICB9OworCisgICAgV0tQYWdlQ29udGV4dE1lbnVDbGllbnRWMyBj
b250ZXh0TWVudUNsaWVudCA9IHsKKyAgICAgICAgeyAzLCB0aGlzIH0sCisgICAgICAgIG51bGxw
dHIsIC8vIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudV9kZXByZWNhdGVkRm9yVXNlV2l0
aFYwCisgICAgICAgIG51bGxwdHIsIC8vIGN1c3RvbUNvbnRleHRNZW51SXRlbVNlbGVjdGVkCisg
ICAgICAgIG51bGxwdHIsIC8vIGNvbnRleHRNZW51RGlzbWlzc2VkCisgICAgICAgIGdldENvbnRl
eHRNZW51RnJvbVByb3Bvc2VkTWVudSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbnRleHRN
ZW51CisgICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb250ZXh0TWVudQorICAgIH07CisKKyAgICBX
ZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VC
S0lUX1dFQl9WSUVXX0JBU0UobV9pbnNwZWN0b3JWaWV3KSk7CisgICAgQVNTRVJUKGluc3BlY3Rv
clBhZ2UpOworCisgICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2Up
LCAmdWlDbGllbnQuYmFzZSk7CisgICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQodG9B
UEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOworICAgIFdLUGFnZVNl
dFBhZ2VDb250ZXh0TWVudUNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJmNvbnRleHRNZW51
Q2xpZW50LmJhc2UpOworCisgICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCit7CisgICAg
aWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5vcGVuV2luZG93KCp0aGlzKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKCFtX2luc3BlY3RvcldpbmRvdyk7CisgICAgbV9pbnNwZWN0b3JX
aW5kb3cgPSB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoKTsKKyNpZiBVU0UoR1RLNCkKKyAgICBn
dGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKG1faW5zcGVjdG9yV2luZG93KSwgbV9pbnNw
ZWN0b3JWaWV3KTsKKyNlbHNlCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUiht
X2luc3BlY3RvcldpbmRvdyksIG1faW5zcGVjdG9yVmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93
KG1faW5zcGVjdG9yVmlldyk7CisjZW5kaWYKKworICAgIGlmICghbV9pbnNwZWN0ZWRVUkxTdHJp
bmcuaXNFbXB0eSgpKQorICAgICAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOworCisg
ICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2luc3BlY3RvcldpbmRvdyks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9pbnNwZWN0b3JXaW5kb3cpKTsKKyAgICBndGtf
d2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhtX2luc3BlY3RvcldpbmRvdykpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KQoreworICAgIGlmIChtX2luc3BlY3RvclZpZXcpIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9ieV9mdW5jKG1faW5zcGVjdG9yVmlldywgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOworICAgICAgICBtX2luc3BlY3Rv
clZpZXcgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9j
bGllbnQtPmRpZENsb3NlKCp0aGlzKTsKKworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewor
ICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICBt
X2luc3BlY3RvcldpbmRvdyA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUhpZGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7Cisg
ICAgaWYgKG1faXNPcGVuaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbGllbnQg
JiYgbV9jbGllbnQtPmJyaW5nVG9Gcm9udCgqdGhpcykpCisgICAgICAgIHJldHVybjsKKworICAg
IEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0b3JW
aWV3KTsKKyAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBh
cmVudCkpCisgICAgICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKHBhcmVudCkpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdl
VG9Gcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQoreworICAgIEd0a1dpZGdldCogcGFyZW50ID0g
Z3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0b3JWaWV3KTsKKyAgICBpZiAoV2ViQ29y
ZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCisgICAgICAgIHJldHVy
biBtX2lzVmlzaWJsZSAmJiBndGtfd2luZG93X2lzX2FjdGl2ZShHVEtfV0lORE9XKHBhcmVudCkp
OworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OkFwcGVhcmFuY2UpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1
cmwpCit7CisgICAgbV9pbnNwZWN0ZWRVUkxTdHJpbmcgPSB1cmw7CisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZCgqdGhpcywgdXJsKTsKKwor
ICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93
VGl0bGUoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0
aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JQYWdl
VVJMKCkKK3sKKyAgICByZXR1cm4gInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL1Vz
ZXJJbnRlcmZhY2UvTWFpbi5odG1sIl9zOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUlQcm94
eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQoreworICAgIHJldHVybiAicmVzb3VyY2U6Ly8vb3Jn
L3dlYmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwiX3M7Cit9CisKK0RlYnVn
Z2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JVSVByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxl
KCkKK3sKKyAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM2PjogdGhpcyBz
aG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YSBhYm91dCB0aGUgZGVidWcgdGFyZ2V0LgorICAg
IGF1dG8gZGF0YSA9IERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsKKyAgICBkYXRhLmRlYnVn
Z2FibGVUeXBlID0gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsKKyAgICByZXR1
cm4gZGF0YTsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNw
ZWN0ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxvY2F0
ZWRfaGVpZ2h0KGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKK30KKwordW5zaWduZWQg
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCit7Cisg
ICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRlZF93aWR0aChpbnNwZWN0ZWRQYWdlKCkt
PnZpZXdXaWRnZXQoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1B
dHRhY2goKQoreworICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNw
ZWN0b3JWaWV3OworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworI2lmIFVTRShHVEs0KQor
ICAgICAgICBndGtfd2luZG93X3NldF9jaGlsZChHVEtfV0lORE9XKG1faW5zcGVjdG9yV2luZG93
KSwgbnVsbHB0cik7CisjZWxzZQorICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09O
VEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwgbV9pbnNwZWN0b3JWaWV3KTsKKyNlbmRpZgorICAg
ICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICBtX2lu
c3BlY3RvcldpbmRvdyA9IG51bGxwdHI7CisgICAgfQorCisgICAgLy8gU2V0IGEgZGVmYXVsdCBz
aXplcyBiYXNlZCBvbiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLgorICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRTaXplID0gMzAwOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDc1MDsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwOworCisgICAgaWYgKG1fYXR0YWNo
bWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSkgeworICAgICAgICB1bnNpZ25lZCBt
YXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICog
MyAvIDQ7CisgICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgo
bWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhp
bXVtQXR0YWNoZWRIZWlnaHQpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgbWF4
aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8g
NDsKKyAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmlt
dW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0
YWNoZWRXaWR0aCkpKTsKKyAgICB9CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPmF0
dGFjaCgqdGhpcykpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRk
V2ViSW5zcGVjdG9yKFdFQktJVF9XRUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dp
ZGdldCgpKSwgbV9pbnNwZWN0b3JWaWV3LCBtX2F0dGFjaG1lbnRTaWRlKTsKKyAgICBndGtfd2lk
Z2V0X3Nob3cobV9pbnNwZWN0b3JWaWV3KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybURldGFjaCgpCit7CisgICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCktPmhhc1J1bm5p
bmdQcm9jZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBp
bnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JWaWV3OworICAgIGlmICghbV9jbGllbnQgfHwgIW1f
Y2xpZW50LT5kZXRhY2goKnRoaXMpKSB7CisgICAgICAgIC8vIERldGFjaCBpcyBjYWxsZWQgd2hl
biBtX2lzQXR0YWNoZWQgaXMgdHJ1ZSwgYnV0IGl0IGNvdWxkIGNhbGxlZCBiZWZvcmUKKyAgICAg
ICAgLy8gdGhlIGluc3BlY3RvciBpcyBvcGVuZWQgaWYgdGhlIGluc3BlY3RvciBpcyBzaG93bi9j
bG9zZWQgcXVpY2tseS4gU28sCisgICAgICAgIC8vIHdlIG1pZ2h0IG5vdCBoYXZlIGEgcGFyZW50
IHlldC4KKyAgICAgICAgaWYgKEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFy
ZW50KG1faW5zcGVjdG9yVmlldykpCisgICAgICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVJlbW92
ZVdlYkluc3BlY3RvcihXRUJLSVRfV0VCX1ZJRVdfQkFTRShwYXJlbnQpLCBtX2luc3BlY3RvclZp
ZXcpOworICAgIH0KKworICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgbm90IHZpc2libGUu
IFRoaXMgbWVhbnMgdGhlIGluc3BlY3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVkCisgICAg
Ly8gYW5kIHdlIHNob3VsZCBub3QgY3JlYXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0b3Igd2luZG93
LgorICAgIGlmICghbV9pc1Zpc2libGUpIHsKKyAgICAgICAgLy8gVGhlIGluc3BlY3RvciB2aWV3
IHdpbGwgYmUgZGVzdHJveWVkLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBub3RpZnkgdGhlIHdlYiBw
cm9jZXNzIHRvIGNsb3NlIHRoZQorICAgICAgICAvLyBpbnNwZWN0b3IgaW4gdGhpcyBjYXNlLCBz
aW5jZSBpdCdzIGFscmVhZHkgY2xvc2VkLgorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPihp
bnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7CisgICAgICAgIG1faW5zcGVjdG9yVmlldyA9
IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvcGVuKCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1
bnNpZ25lZCBoZWlnaHQpCit7CisgICAgaWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENoYW5nZUF0dGFj
aGVkSGVpZ2h0KCp0aGlzLCBoZWlnaHQpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5zcGVj
dG9yVmlld1NpemUoV0VCS0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lk
Z2V0KCkpLCBoZWlnaHQpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
U2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKK3sKKyAgICBpZiAoIW1faXNB
dHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBt
X2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aCgqdGhpcywgd2lkdGgpOworICAgIHdlYmtp
dFdlYlZpZXdCYXNlU2V0SW5zcGVjdG9yVmlld1NpemUoV0VCS0lUX1dFQl9WSUVXX0JBU0UoaW5z
cGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpLCB3aWR0aCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitzdGF0aWMgdm9pZCBmaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2soR09iamVjdCogc291
cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7Cisg
ICAgR0ZpbGUqIGZpbGUgPSBHX0ZJTEUoc291cmNlT2JqZWN0KTsKKyAgICBpZiAoIWdfZmlsZV9y
ZXBsYWNlX2NvbnRlbnRzX2ZpbmlzaChmaWxlLCByZXN1bHQsIG51bGxwdHIsIG51bGxwdHIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBwYWdlID0gc3RhdGljX2Nhc3Q8V2ViUGFnZVBy
b3h5Kj4odXNlckRhdGEpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3Bh
dGgoZmlsZSkpOworICAgIHBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRT
YXZlKHBhdGguZ2V0KCkpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwg
Ym9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZm9yY2VTYXZlRGlhbG9nKTsKKworICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dp
ZGdldF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0b3JWaWV3KTsKKyAgICBpZiAoIVdlYkNvcmU6Ondp
ZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQorICAgICAgICByZXR1cm47CisK
KyAgICBHUmVmUHRyPEd0a0ZpbGVDaG9vc2VyTmF0aXZlPiBkaWFsb2cgPSBhZG9wdEdSZWYoZ3Rr
X2ZpbGVfY2hvb3Nlcl9uYXRpdmVfbmV3KCJTYXZlIEZpbGUiLAorICAgICAgICBHVEtfV0lORE9X
KHBhcmVudCksIEdUS19GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUsICJTYXZlIiwgIkNhbmNlbCIp
KTsKKworICAgIEd0a0ZpbGVDaG9vc2VyKiBjaG9vc2VyID0gR1RLX0ZJTEVfQ0hPT1NFUihkaWFs
b2cuZ2V0KCkpOworI2lmICFVU0UoR1RLNCkKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9kb19v
dmVyd3JpdGVfY29uZmlybWF0aW9uKGNob29zZXIsIFRSVUUpOworI2VuZGlmCisKKyAgICAvLyBT
b21lIGluc3BlY3RvciB2aWV3cyAoQXVkaXRzIGZvciBpbnN0YW5jZSkgdXNlIGEgY3VzdG9tIFVS
SSBzY2hlbWUsIHN1Y2gKKyAgICAvLyBhcyB3ZWItaW5zcGVjdG9yLiBTbyB3ZSBjYW4ndCByZWx5
IG9uIHRoZSBVUkwgYmVpbmcgYSB2YWxpZCBmaWxlOi8vLyBVUkwKKyAgICAvLyB1bmZvcnR1bmF0
ZWx5LgorICAgIFVSTCB1cmwoVVJMKCksIHN1Z2dlc3RlZFVSTCk7CisgICAgLy8gU3RyaXAgbGVh
ZGluZyAvIGNoYXJhY3Rlci4KKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9jdXJyZW50X25hbWUo
Y2hvb3NlciwgdXJsLnBhdGgoKS5zdWJzdHJpbmcoMSkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBp
ZiAoZ3RrX25hdGl2ZV9kaWFsb2dfcnVuKEdUS19OQVRJVkVfRElBTE9HKGRpYWxvZy5nZXQoKSkp
ICE9IEdUS19SRVNQT05TRV9BQ0NFUFQpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3Rvcjxj
aGFyPiBkYXRhVmVjdG9yOworICAgIENTdHJpbmcgZGF0YVN0cmluZzsKKyAgICBpZiAoYmFzZTY0
RW5jb2RlZCkgeworICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBkYXRhVmVjdG9y
LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBk
YXRhVmVjdG9yLnNocmlua1RvRml0KCk7CisgICAgfSBlbHNlCisgICAgICAgIGRhdGFTdHJpbmcg
PSBjb250ZW50LnV0ZjgoKTsKKworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5p
c051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgpIDogZGF0YVZlY3Rvci5kYXRhKCk7CisgICAgc2l6
ZV90IGRhdGFMZW5ndGggPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcubGVuZ3Ro
KCkgOiBkYXRhVmVjdG9yLnNpemUoKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRH
UmVmKGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGUoY2hvb3NlcikpOworICAgIEdVbmlxdWVQdHI8
Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOworICAgIGdfZmlsZV9yZXBs
YWNlX2NvbnRlbnRzX2FzeW5jKGZpbGUuZ2V0KCksIGRhdGEsIGRhdGFMZW5ndGgsIG51bGxwdHIs
IGZhbHNlLAorICAgICAgICBHX0ZJTEVfQ1JFQVRFX1JFUExBQ0VfREVTVElOQVRJT04sIG51bGxw
dHIsIGZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjaywgbV9pbnNwZWN0b3JQYWdlKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZh
aWxhYmxlKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENoYW5n
ZUF0dGFjaEF2YWlsYWJpbGl0eSgqdGhpcywgYXZhaWxhYmxlKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
Z3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKaW5kZXggYWM4OTJmOGQ1YWY0
MmUyMDg5MTA0NThjYWM5NDdkNjVkM2RhMjYyZS4uZGI0MDhiZTRjODM3MjlhMGRiOWQ2ODg3NDQ1
M2Q1OWU0MDY5MDY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcApAQCAtMjYsNyAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdEluc3BlY3Rvcldp
bmRvdy5oIgogCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JVSVByb3h5LmgiCiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRl
IDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAKQEAgLTkyLDcgKzkyLDcgQEAgR3RrV2lkZ2V0KiB3
ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoKQogI2lmICFVU0UoR1RLNCkKICAgICAgICAgInR5cGUi
LCBHVEtfV0lORE9XX1RPUExFVkVMLAogI2VuZGlmCi0gICAgICAgICJkZWZhdWx0LXdpZHRoIiwg
V2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCwgImRlZmF1bHQtaGVpZ2h0Iiwg
V2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQsIG51bGxwdHIpKTsKKyAgICAg
ICAgImRlZmF1bHQtd2lkdGgiLCBXZWJJbnNwZWN0b3JVSVByb3h5Ojppbml0aWFsV2luZG93V2lk
dGgsICJkZWZhdWx0LWhlaWdodCIsIFdlYkluc3BlY3RvclVJUHJveHk6OmluaXRpYWxXaW5kb3dI
ZWlnaHQsIG51bGxwdHIpKTsKIH0KIAogdm9pZCB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0
aXRsZShXZWJLaXRJbnNwZWN0b3JXaW5kb3cqIHdpbmRvdywgY29uc3QgY2hhciogc3VidGl0bGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjIzNDE4ZDBkOGE5Nzc4ZDdmZDdjZDg0ZGRiOTA3YjljNzliYWRjNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCisr
KyAvZGV2L251bGwKQEAgLTEsMjk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2lmIFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbXBvcnQgIkdsb2Jh
bEZpbmRJblBhZ2VTdGF0ZS5oIgotI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNz
YWdlcy5oIgotI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2ltcG9y
dCAiV0tGcmFtZUluZm8uaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIK
LSNpbXBvcnQgIldLTmF2aWdhdGlvbkFjdGlvbi5oIgotI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGVs
ZWdhdGUuaCIKLSNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJJbnNw
ZWN0b3JQcm94eS5oIgotI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJXZWJQYWdl
UHJveHkuaCIKLSNpbXBvcnQgIl9XS0luc3BlY3RvckNvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgot
I2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVBhbmVsLmg+Ci0jaW1wb3J0
IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRlVmlldy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotCi1AaW50
ZXJmYWNlIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciA6IE5TT2JqZWN0IDxO
U1dpbmRvd0RlbGVnYXRlLCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IHsKLSAg
ICBXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KiBfaW5zcGVjdG9yUHJveHk7Ci19Ci0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHk7Ci1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIKLQotLSAoTlNSZWN0
KXdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgd2lsbFBvc2l0aW9uU2hlZXQ6KE5TV2luZG93ICop
c2hlZXQgdXNpbmdSZWN0OihOU1JlY3QpcmVjdAotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkp
Ci0gICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0
KCkuaGVpZ2h0KCksIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkud2lkdGgoKSwgMCk7Ci0g
ICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OihXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQ
cm94eQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgX2luc3BlY3RvclByb3h5ID0gaW5zcGVjdG9yUHJveHk7Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdEaWRCZWNvbWVBY3RpdmU6
KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewot
ICAgIF9pbnNwZWN0b3JQcm94eS0+ZGlkQmVjb21lQWN0aXZlKCk7Ci19Ci0KLS0gKHZvaWQpaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0gICAgX2luc3BlY3RvclByb3h5
LT5jbG9zZUZyb21DcmFzaCgpOwotfQotCi0tIChCT09MKWluc3BlY3RvclZpZXdDb250cm9sbGVy
SW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0
b3JWaWV3Q29udHJvbGxlcgotewotICAgIHJldHVybiBfaW5zcGVjdG9yUHJveHktPmlzVW5kZXJU
ZXN0KCk7Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotV0tXZWJWaWV3ICpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6d2ViVmlldygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5zcGVjdG9yVmlldy5nZXQoKS53ZWJWaWV3OwotfQot
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpkaWRCZWNvbWVBY3RpdmUoKQotewotICAg
IG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlVw
ZGF0ZUZpbmRTdHJpbmcoV2ViS2l0OjpzdHJpbmdGb3JGaW5kKCkpKTsKLX0KLQotV2ViUGFnZVBy
b3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKQotewotICAgIG1fb2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIGFsbG9jXSBpbml0V2l0aFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OnRoaXNdKTsKLQotICAgIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IGNv
bmZpZ3VyYXRpb24gPSBtX2NsaWVudC0+Y29uZmlndXJhdGlvbkZvclJlbW90ZUluc3BlY3Rvcigq
dGhpcyk7Ci0gICAgbV9pbnNwZWN0b3JWaWV3ID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoQ29uZmlndXJhdGlvbjogV2ViS2l0Ojp3cmFwcGVyKGNv
bmZpZ3VyYXRpb24pIGluc3BlY3RlZFBhZ2U6bnVsbHB0cl0pOwotICAgIFttX2luc3BlY3RvclZp
ZXcuZ2V0KCkgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0KLSAgICBtX3dpbmRv
dyA9IFdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVuZFdpbmRvdyhOU1plcm9SZWN0LCBX
ZWJJbnNwZWN0b3JQcm94eTo6SW5zcGVjdGlvblRhcmdldFR5cGU6OlJlbW90ZSk7Ci0gICAgW21f
d2luZG93IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOwotICAgIFttX3dpbmRvdyBz
ZXRGcmFtZUF1dG9zYXZlTmFtZTpAIldLUmVtb3RlV2ViSW5zcGVjdG9yV2luZG93RnJhbWUiXTsK
LQotICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBtX3dpbmRvdy5nZXQoKS5jb250ZW50VmlldzsK
LSAgICBbd2ViVmlldygpIHNldEZyYW1lOmNvbnRlbnRWaWV3LmJvdW5kc107Ci0gICAgW2NvbnRl
bnRWaWV3IGFkZFN1YnZpZXc6d2ViVmlldygpXTsKLQotICAgIHJldHVybiB3ZWJWaWV3KCktPl9w
YWdlLmdldCgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAobV93aW5kb3cpIHsKLSAgICAg
ICAgW21fd2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX3dpbmRvdyBjbG9zZV07
Ci0gICAgICAgIG1fd2luZG93ID0gbmlsOwotICAgIH0KLQotICAgIGlmIChtX2luc3BlY3RvclZp
ZXcpIHsKLSAgICAgICAgW21faW5zcGVjdG9yVmlldy5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwot
ICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKG1fb2JqQ0Fk
YXB0ZXIpCi0gICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci0gICAgW05TV2luZG93IHJl
bW92ZUZyYW1lVXNpbmdOYW1lOlttX3dpbmRvdyBmcmFtZUF1dG9zYXZlTmFtZV1dOwotfQotCi12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0g
ICAgW21fd2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07Ci0gICAgW21fd2luZG93IG1h
a2VGaXJzdFJlc3BvbmRlcjp3ZWJWaWV3KCldOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0
cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykK
LXsKLSAgICAvLyBGSVhNRTogU2hhcmUgd2l0aCBXZWJJbnNwZWN0b3JQcm94eU1hYy4KLQotICAg
IEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgTlNVUkwgKnBsYXRm
b3JtVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKS5nZXQo
KTsKLSAgICBpZiAoIXBsYXRmb3JtVVJMKSB7Ci0gICAgICAgIHBsYXRmb3JtVVJMID0gW05TVVJM
IFVSTFdpdGhTdHJpbmc6c3VnZ2VzdGVkVVJMXTsKLSAgICAgICAgLy8gVGhlIHVzZXIgbXVzdCBj
b25maXJtIG5ldyBmaWxlbmFtZXMgYmVmb3JlIHdlIGNhbiBzYXZlIHRvIHRoZW0uCi0gICAgICAg
IGZvcmNlU2F2ZURpYWxvZyA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChwbGF0Zm9y
bVVSTCk7Ci0gICAgaWYgKCFwbGF0Zm9ybVVSTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
TmVjZXNzYXJ5IGZvciB0aGUgYmxvY2sgYmVsb3cuCi0gICAgU3RyaW5nIHN1Z2dlc3RlZFVSTENv
cHkgPSBzdWdnZXN0ZWRVUkw7Ci0gICAgU3RyaW5nIGNvbnRlbnRDb3B5ID0gY29udGVudDsKLQot
ICAgIGF1dG8gc2F2ZVRvVVJMID0gXihOU1VSTCAqYWN0dWFsVVJMKSB7Ci0gICAgICAgIEFTU0VS
VChhY3R1YWxVUkwpOwotCi0gICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1
Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7Ci0KLSAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQp
IHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2
NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250
ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxl
bmd0aDpvdXQuc2l6ZSgpXSk7Ci0gICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDph
Y3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFtj
b250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKLQotICAgICAgICBtX2luc3BlY3RvclBh
Z2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxV
UkwgYWJzb2x1dGVTdHJpbmddKSk7Ci0gICAgfTsKLQotICAgIGlmICghZm9yY2VTYXZlRGlhbG9n
KSB7Ci0gICAgICAgIHNhdmVUb1VSTChwbGF0Zm9ybVVSTCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBOU1NhdmVQYW5lbCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsK
LSAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29t
cG9uZW50OwotCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2
ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKLSAgICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGly
ZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0ncwotICAgIC8vIGRlZmF1
bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRpcmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFs
b2cuCi0gICAgaWYgKHBsYXRmb3JtVVJMLmlzRmlsZVVSTCkKLSAgICAgICAgcGFuZWwuZGlyZWN0
b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07Ci0K
LSAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gXihOU0ludGVnZXIgcmVzdWx0KSB7Ci0gICAg
ICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlQ2FuY2VsKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBBU1NFUlQocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKTsKLSAgICAg
ICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7Ci0gICAgfTsKLQotICAgIE5TV2luZG93ICp3aW5kb3cg
PSBtX3dpbmRvdyA/IG1fd2luZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107Ci0gICAgaWYg
KHdpbmRvdykKLSAgICAgICAgW3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cg
Y29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotICAgIGVsc2UKLSAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJM
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgLy8gRklYTUU6IFNoYXJlIHdpdGggV2Vi
SW5zcGVjdG9yUHJveHlNYWMuCi0KLSAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkp
OwotICAgIAotICAgIFJldGFpblB0cjxOU1VSTD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0Fj
dHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKTsKLSAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVz
cyB0aGUgdXNlciBoYXMgYWxyZWFkeSBjb25maXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCku
Ci0gICAgaWYgKCFhY3R1YWxVUkwpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TRmlsZUhhbmRs
ZSAqaGFuZGxlID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVh
bFVSTC5nZXQoKSBlcnJvcjpOVUxMXTsKLSAgICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07Ci0g
ICAgW2hhbmRsZSB3cml0ZURhdGE6W2NvbnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmddXTsKLSAgICBbaGFuZGxlIGNsb3NlRmlsZV07Ci0KLSAgICBXZWJQYWdlUHJv
eHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJWaWV3KCktPl9wYWdlLmdldCgpOwotICAgIGluc3BlY3Rv
clBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRBcHBlbmQoW2Fj
dHVhbFVSTCBhYnNvbHV0ZVN0cmluZ10pKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAg
IG1fc2hlZXRSZWN0ID0gcmVjdDsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBl
YXJhbmNlIGFwcGVhcmFuY2UpCi17Ci0gICAgTlNBcHBlYXJhbmNlICpwbGF0Zm9ybUFwcGVhcmFu
Y2U7Ci0gICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6QXBwZWFyYW5jZTo6U3lzdGVtOgotICAgICAgICBwbGF0Zm9ybUFwcGVhcmFuY2Ug
PSBuaWw7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6QXBwZWFyYW5jZTo6TGlnaHQ6Ci0gICAgICAgIHBsYXRmb3JtQXBwZWFyYW5jZSA9IFtOU0Fw
cGVhcmFuY2UgYXBwZWFyYW5jZU5hbWVkOk5TQXBwZWFyYW5jZU5hbWVBcXVhXTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlOjpE
YXJrOgotICAgICAgICBwbGF0Zm9ybUFwcGVhcmFuY2UgPSBbTlNBcHBlYXJhbmNlIGFwcGVhcmFu
Y2VOYW1lZDpOU0FwcGVhcmFuY2VOYW1lRGFya0FxdWFdOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICB3ZWJWaWV3KCkuYXBwZWFyYW5jZSA9IHBsYXRmb3JtQXBwZWFyYW5jZTsKLQotICAg
IE5TV2luZG93ICp3aW5kb3cgPSBtX3dpbmRvdy5nZXQoKTsKLSAgICBBU1NFUlQod2luZG93KTsK
LSAgICB3aW5kb3cuYXBwZWFyYW5jZSA9IHBsYXRmb3JtQXBwZWFyYW5jZTsKLX0KLQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAg
IHdlYlZpZXcoKS0+X3BhZ2UtPnN0YXJ0V2luZG93RHJhZygpOwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5VUkxFeHRlcm5hbGx5KGNvbnN0IFN0cmluZyYg
dXJsKQotewotICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOnVybF1dOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmlj
YXRlSW5mbykKLXsKLSAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkpOwotCi0g
ICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0
TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKLQotICAgIEFTU0VSVChtX3dp
bmRvdyk7Ci0jaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLSAgICBbY2VydGlmaWNh
dGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93Om1fd2luZG93LmdldCgpIG1vZGFsRGVsZWdhdGU6
bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciB0cnVzdDpjZXJ0aWZp
Y2F0ZUluZm8udHJ1c3QoKSBzaG93R3JvdXA6WUVTXTsKLSNlbHNlCi0gICAgW2NlcnRpZmljYXRl
UGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5p
bCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgY2VydGlmaWNhdGVzOihO
U0FycmF5ICopY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSBzaG93R3JvdXA6WUVT
XTsKLSNlbmRpZgotCi0gICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJ1c3Qg
cGFuZWwgaGFzIGJlZW4gZGlzcGxheWVkLCBiZWNhdXNlIHRoZSBjZXJ0aWZpY2F0ZVZpZXcgZG9l
c24ndCBleGlzdCBiZWZvcmVoYW5kLgotICAgIFNGQ2VydGlmaWNhdGVWaWV3ICpjZXJ0aWZpY2F0
ZVZpZXcgPSBbY2VydGlmaWNhdGVQYW5lbCBjZXJ0aWZpY2F0ZVZpZXddOwotICAgIFtjZXJ0aWZp
Y2F0ZVZpZXcgc2V0RGlzcGxheVRydXN0OllFU107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXRF
ZGl0YWJsZVRydXN0Ok5PXTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlEZXRhaWxz
OllFU107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREZXRhaWxzRGlzY2xvc2VkOllFU107Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1h
Yy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODI4OTg4MTgxYWVjNDdmY2E2MjYzNzNj
Y2E3Mzk4MzM3MmJiYWZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCkBAIC0wLDAg
KzEsMjk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuaCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbXBvcnQgIkdsb2JhbEZpbmRJblBhZ2VTdGF0ZS5o
IgorI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2ltcG9ydCAiUmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXS0ZyYW1lSW5mby5o
IgorI2ltcG9ydCAiV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tOYXZp
Z2F0aW9uQWN0aW9uLmgiCisjaW1wb3J0ICJXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9y
dCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclVJUHJveHkuaCIK
KyNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1w
b3J0ICJfV0tJbnNwZWN0b3JDb25maWd1cmF0aW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgPFNlY3Vy
aXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgorI2ltcG9ydCA8U2VjdXJpdHlJbnRl
cmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2VydGlmaWNhdGVJ
bmZvLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KKworQGludGVyZmFjZSBXS1JlbW90
ZVdlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciA6IE5TT2JqZWN0IDxOU1dpbmRvd0RlbGVn
YXRlLCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6OlJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHkqIF9pbnNwZWN0b3JQcm94eTsKK30KKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6KFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eSopaW5zcGVjdG9yUHJveHk7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlcgorCistIChOU1JlY3Qpd2lu
ZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRpb25TaGVldDooTlNXaW5kb3cgKilzaGVl
dCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Cit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAg
ICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS5o
ZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS53aWR0aCgpLCAwKTsKKyAgICBy
ZXR1cm4gcmVjdDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eTooV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5KilpbnNwZWN0b3JQ
cm94eQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgX2luc3BlY3RvclByb3h5ID0gaW5zcGVjdG9yUHJveHk7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdEaWRCZWNvbWVBY3RpdmU6
KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgorewor
ICAgIF9pbnNwZWN0b3JQcm94eS0+ZGlkQmVjb21lQWN0aXZlKCk7Cit9CisKKy0gKHZvaWQpaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgX2luc3BlY3RvclByb3h5
LT5jbG9zZUZyb21DcmFzaCgpOworfQorCistIChCT09MKWluc3BlY3RvclZpZXdDb250cm9sbGVy
SW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0
b3JWaWV3Q29udHJvbGxlcgoreworICAgIHJldHVybiBfaW5zcGVjdG9yUHJveHktPmlzVW5kZXJU
ZXN0KCk7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworV0tXZWJWaWV3ICpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojp3ZWJWaWV3
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JWaWV3LmdldCgpLndlYlZpZXc7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6ZGlkQmVjb21lQWN0aXZlKCkKK3sK
KyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJ
OjpVcGRhdGVGaW5kU3RyaW5nKFdlYktpdDo6c3RyaW5nRm9yRmluZCgpKSk7Cit9CisKK1dlYlBh
Z2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKQoreworICAgIG1fb2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgYWxsb2NdIGluaXRXaXRoUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTp0aGlzXSk7CisKKyAgICBSZWY8QVBJOjpJbnNwZWN0b3JDb25maWd1
cmF0aW9uPiBjb25maWd1cmF0aW9uID0gbV9jbGllbnQtPmNvbmZpZ3VyYXRpb25Gb3JSZW1vdGVJ
bnNwZWN0b3IoKnRoaXMpOworICAgIG1faW5zcGVjdG9yVmlldyA9IGFkb3B0TlMoW1tXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aENvbmZpZ3VyYXRpb246IFdlYktpdDo6
d3JhcHBlcihjb25maWd1cmF0aW9uKSBpbnNwZWN0ZWRQYWdlOm51bGxwdHJdKTsKKyAgICBbbV9p
bnNwZWN0b3JWaWV3LmdldCgpIHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworCisg
ICAgbV93aW5kb3cgPSBXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGVGcm9udGVuZFdpbmRvdyhO
U1plcm9SZWN0LCBXZWJJbnNwZWN0b3JVSVByb3h5OjpJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6UmVt
b3RlKTsKKyAgICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Cisg
ICAgW21fd2luZG93IHNldEZyYW1lQXV0b3NhdmVOYW1lOkAiV0tSZW1vdGVXZWJJbnNwZWN0b3JX
aW5kb3dGcmFtZSJdOworCisgICAgTlNWaWV3ICpjb250ZW50VmlldyA9IG1fd2luZG93LmdldCgp
LmNvbnRlbnRWaWV3OworICAgIFt3ZWJWaWV3KCkgc2V0RnJhbWU6Y29udGVudFZpZXcuYm91bmRz
XTsKKyAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp3ZWJWaWV3KCldOworCisgICAgcmV0dXJu
IHdlYlZpZXcoKS0+X3BhZ2UuZ2V0KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1f
d2luZG93KSB7CisgICAgICAgIFttX3dpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBb
bV93aW5kb3cgY2xvc2VdOworICAgICAgICBtX3dpbmRvdyA9IG5pbDsKKyAgICB9CisKKyAgICBp
ZiAobV9pbnNwZWN0b3JWaWV3KSB7CisgICAgICAgIFttX2luc3BlY3RvclZpZXcuZ2V0KCkgc2V0
RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgbV9pbnNwZWN0b3JWaWV3ID0gbmlsOworICAgIH0KKwor
ICAgIGlmIChtX29iakNBZGFwdGVyKQorICAgICAgICBtX29iakNBZGFwdGVyID0gbmlsOworfQor
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCit7
CisgICAgW05TV2luZG93IHJlbW92ZUZyYW1lVXNpbmdOYW1lOlttX3dpbmRvdyBmcmFtZUF1dG9z
YXZlTmFtZV1dOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
QnJpbmdUb0Zyb250KCkKK3sKKyAgICBbbV93aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmls
XTsKKyAgICBbbV93aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOndlYlZpZXcoKV07Cit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwg
Ym9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgLy8gRklYTUU6IFNoYXJlIHdpdGggV2ViSW5z
cGVjdG9yVUlQcm94eU1hYy4KKworICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7
CisgICAgCisgICAgTlNVUkwgKnBsYXRmb3JtVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1h
cC5nZXQoc3VnZ2VzdGVkVVJMKS5nZXQoKTsKKyAgICBpZiAoIXBsYXRmb3JtVVJMKSB7CisgICAg
ICAgIHBsYXRmb3JtVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6c3VnZ2VzdGVkVVJMXTsKKyAg
ICAgICAgLy8gVGhlIHVzZXIgbXVzdCBjb25maXJtIG5ldyBmaWxlbmFtZXMgYmVmb3JlIHdlIGNh
biBzYXZlIHRvIHRoZW0uCisgICAgICAgIGZvcmNlU2F2ZURpYWxvZyA9IHRydWU7CisgICAgfQor
ICAgIAorICAgIEFTU0VSVChwbGF0Zm9ybVVSTCk7CisgICAgaWYgKCFwbGF0Zm9ybVVSTCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUgYmxvY2sgYmVsb3cuCisg
ICAgU3RyaW5nIHN1Z2dlc3RlZFVSTENvcHkgPSBzdWdnZXN0ZWRVUkw7CisgICAgU3RyaW5nIGNv
bnRlbnRDb3B5ID0gY29udGVudDsKKworICAgIGF1dG8gc2F2ZVRvVVJMID0gXihOU1VSTCAqYWN0
dWFsVVJMKSB7CisgICAgICAgIEFTU0VSVChhY3R1YWxVUkwpOworCisgICAgICAgIG1fc3VnZ2Vz
dGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7CisKKyAg
ICAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7
CisgICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRW
YWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFJl
dGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5p
dFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBb
ZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBh
dG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsK
KworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJOjpEaWRTYXZlKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSk7CisgICAgfTsKKwor
ICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7CisgICAgICAgIHNhdmVUb1VSTChwbGF0Zm9ybVVS
TCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1NhdmVQYW5lbCAqcGFuZWwgPSBb
TlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKKyAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1ZSA9
IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OworCisgICAgLy8gSWYgd2UgaGF2ZSBhIGZp
bGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKKyAgICAv
LyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNlIHRo
ZSBzeXN0ZW0ncworICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRpcmVj
dG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCisgICAgaWYgKHBsYXRmb3JtVVJMLmlzRmlsZVVS
TCkKKyAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVsZXRp
bmdMYXN0UGF0aENvbXBvbmVudF07CisKKyAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gXihO
U0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNl
Q2FuY2VsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQocmVzdWx0ID09IE5T
TW9kYWxSZXNwb25zZU9LKTsKKyAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7CisgICAgfTsK
KworICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX3dpbmRvdyA/IG1fd2luZG93LmdldCgpIDogW05T
QXBwIGtleVdpbmRvd107CisgICAgaWYgKHdpbmRvdykKKyAgICAgICAgW3BhbmVsIGJlZ2luU2hl
ZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRs
ZXJdOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1bk1vZGFs
XSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQo
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKK3sKKyAg
ICAvLyBGSVhNRTogU2hhcmUgd2l0aCBXZWJJbnNwZWN0b3JVSVByb3h5TWFjLgorCisgICAgQVNT
RVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8TlNVUkw+
IGFjdHVhbFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCk7
CisgICAgLy8gRG8gbm90IGFwcGVuZCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFscmVhZHkgY29uZmly
bWVkIHRoaXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgorICAgIGlmICghYWN0dWFsVVJMKQorICAgICAg
ICByZXR1cm47CisKKyAgICBOU0ZpbGVIYW5kbGUgKmhhbmRsZSA9IFtOU0ZpbGVIYW5kbGUgZmls
ZUhhbmRsZUZvcldyaXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0KCkgZXJyb3I6TlVMTF07CisgICAg
W2hhbmRsZSBzZWVrVG9FbmRPZkZpbGVdOworICAgIFtoYW5kbGUgd3JpdGVEYXRhOltjb250ZW50
IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07CisgICAgW2hhbmRsZSBj
bG9zZUZpbGVdOworCisgICAgV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlID0gd2ViVmlldygp
LT5fcGFnZS5nZXQoKTsKKyAgICBpbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fc2hlZXRSZWN0ID0gcmVjdDsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFu
Y2UoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKK3sKKyAg
ICBOU0FwcGVhcmFuY2UgKnBsYXRmb3JtQXBwZWFyYW5jZTsKKyAgICBzd2l0Y2ggKGFwcGVhcmFu
Y2UpIHsKKyAgICBjYXNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlOjpTeXN0
ZW06CisgICAgICAgIHBsYXRmb3JtQXBwZWFyYW5jZSA9IG5pbDsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlOjpMaWdodDoKKyAg
ICAgICAgcGxhdGZvcm1BcHBlYXJhbmNlID0gW05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6
TlNBcHBlYXJhbmNlTmFtZUFxdWFdOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2U6OkRhcms6CisgICAgICAgIHBsYXRmb3JtQXBw
ZWFyYW5jZSA9IFtOU0FwcGVhcmFuY2UgYXBwZWFyYW5jZU5hbWVkOk5TQXBwZWFyYW5jZU5hbWVE
YXJrQXF1YV07CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHdlYlZpZXcoKS5hcHBlYXJh
bmNlID0gcGxhdGZvcm1BcHBlYXJhbmNlOworCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IG1fd2lu
ZG93LmdldCgpOworICAgIEFTU0VSVCh3aW5kb3cpOworICAgIHdpbmRvdy5hcHBlYXJhbmNlID0g
cGxhdGZvcm1BcHBlYXJhbmNlOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICB3ZWJWaWV3KCktPl9wYWdlLT5zdGFy
dFdpbmRvd0RyYWcoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybU9wZW5VUkxFeHRlcm5hbGx5KGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFtbTlNXb3Jr
c3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOnVybF1d
OworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRp
ZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIEFT
U0VSVCghY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSk7CisKKyAgICBSZXRhaW5QdHI8U0ZDZXJ0
aWZpY2F0ZVBhbmVsPiBjZXJ0aWZpY2F0ZVBhbmVsID0gYWRvcHROUyhbW1NGQ2VydGlmaWNhdGVQ
YW5lbCBhbGxvY10gaW5pdF0pOworCisgICAgQVNTRVJUKG1fd2luZG93KTsKKyNpZiBIQVZFKFNF
Q19UUlVTVF9TRVJJQUxJWkFUSU9OKQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRG
b3JXaW5kb3c6bV93aW5kb3cuZ2V0KCkgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6
TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIHRydXN0OmNlcnRpZmljYXRlSW5mby50cnVzdCgpIHNo
b3dHcm91cDpZRVNdOworI2Vsc2UKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9y
V2luZG93Om1fd2luZG93LmdldCgpIG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5V
TEwgY29udGV4dEluZm86bnVsbHB0ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZpY2F0
ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpIHNob3dHcm91cDpZRVNdOworI2VuZGlmCisKKyAgICAv
LyBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBkaXNw
bGF5ZWQsIGJlY2F1c2UgdGhlIGNlcnRpZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJlZm9yZWhh
bmQuCisgICAgU0ZDZXJ0aWZpY2F0ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0aWZpY2F0
ZVBhbmVsIGNlcnRpZmljYXRlVmlld107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5
VHJ1c3Q6WUVTXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9dOwor
ICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheURldGFpbHM6WUVTXTsKKyAgICBbY2VydGlm
aWNhdGVWaWV3IHNldERldGFpbHNEaXNjbG9zZWQ6WUVTXTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tCmluZGV4
IGY4MWY2OTZmYTEyZjk2ZDA1NjZkMTQ5ODQ2YWM5NmJmNTA3ZDg4YzYuLmVkNmY3NjMyOTIwM2Mw
OTBjMTZmNDdjZjYxNjU2YmJhZDAzNGFjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIubW0KQEAgLTQwLDcgKzQwLDcgQEAKICNpbXBvcnQgIldLVUlEZWxlZ2F0ZVByaXZhdGUu
aCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmgiCiAjaW1wb3J0ICJX
S1dlYlZpZXdQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2ltcG9y
dCAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgogI2ltcG9ydCAiV2ViSW5zcGVjdG9yVXRpbGl0aWVz
LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgIl9XS0luc3BlY3RvckNvbmZp
Z3VyYXRpb25JbnRlcm5hbC5oIgpAQCAtOTMsNyArOTMsNyBAQCAtIChXS1dlYlZpZXcgKil3ZWJW
aWV3CiB7CiAgICAgLy8gQ29uc3RydWN0IGxhemlseSBzbyB0aGUgY2xpZW50IGNhbiBzZXQgdGhl
IGRlbGVnYXRlIGJlZm9yZSB0aGUgV2ViVmlldyBpcyBjcmVhdGVkLgogICAgIGlmICghX3dlYlZp
ZXcpIHsKLSAgICAgICAgTlNSZWN0IGluaXRpYWxGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgV2Vi
S2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoLCBXZWJLaXQ6OldlYklu
c3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0KTsKKyAgICAgICAgTlNSZWN0IGluaXRp
YWxGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpp
bml0aWFsV2luZG93V2lkdGgsIFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5pdGlhbFdp
bmRvd0hlaWdodCk7CiAgICAgICAgIF93ZWJWaWV3ID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOmluaXRpYWxGcmFtZSBjb25maWd1cmF0aW9uOnNl
bGYud2ViVmlld0NvbmZpZ3VyYXRpb25dKTsKICAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdh
dGU6c2VsZl07CiAgICAgICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6c2VsZl07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYklu
c3BlY3RvclByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21h
Yy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
M2VkYmJmOTgxZWY4OTg1OWQ5ZjU3MDk4MWQ5YWU0ZTIwMTJmNWQ1ZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEs
ODM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCAi
QVBJSW5zcGVjdG9yQ2xpZW50LmgiCi0jaW1wb3J0ICJBUElJbnNwZWN0b3JDb25maWd1cmF0aW9u
LmgiCi0jaW1wb3J0ICJBUElVSUNsaWVudC5oIgotI2ltcG9ydCAiR2xvYmFsRmluZEluUGFnZVN0
YXRlLmgiCi0jaW1wb3J0ICJXS0luc3BlY3RvclByaXZhdGVNYWMuaCIKLSNpbXBvcnQgIldLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldLT2JqZWN0LmgiCi0jaW1wb3J0ICJX
S1ZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQg
IldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgotI2lt
cG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0ICJfV0tJbnNwZWN0b3JDb25maWd1cmF0aW9u
SW50ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCi0jaW1wb3J0ICJf
V0tJbnNwZWN0b3JXaW5kb3cuaCIKLSNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlm
aWNhdGVQYW5lbC5oPgotI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZp
ZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTG9j
YWxpemVkU3RyaW5ncy5oPgotI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLXN0YXRpYyBj
b25zdCBOU1VJbnRlZ2VyIHdpbmRvd1N0eWxlTWFzayA9IE5TV2luZG93U3R5bGVNYXNrVGl0bGVk
IHwgTlNXaW5kb3dTdHlsZU1hc2tDbG9zYWJsZSB8IE5TV2luZG93U3R5bGVNYXNrTWluaWF0dXJp
emFibGUgfCBOU1dpbmRvd1N0eWxlTWFza1Jlc2l6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrRnVs
bFNpemVDb250ZW50VmlldzsKLQotLy8gVGhlIHRpbWUgd2Uga2VlcCBvdXIgV2ViVmlldyBhbGl2
ZSBiZWZvcmUgY2xvc2luZyBpdCBhbmQgaXRzIHByb2Nlc3MuCi0vLyBSZXVzaW5nIHRoZSBXZWJW
aWV3IGltcHJvdmVzIHN0YXJ0IHVwIHRpbWUgZm9yIHBlb3BsZSB0aGF0IGp1bXAgaW4gYW5kIG91
dCBvZiB0aGUgSW5zcGVjdG9yLgotc3RhdGljIGNvbnN0IFNlY29uZHMgd2ViVmlld0Nsb3NlVGlt
ZW91dCB7IDFfbWluIH07Ci0KLXN0YXRpYyB2b2lkKiBrV2luZG93Q29udGVudExheW91dE9ic2Vy
dmVyQ29udGV4dCA9ICZrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dDsKLQotQGlu
dGVyZmFjZSBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgKCkgPE5TV2luZG93RGVsZWdh
dGUsIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqKWlu
c3BlY3RvclByb3h5OwotLSAodm9pZClpbnZhbGlkYXRlOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgewotICAgIFdlYktpdDo6V2ViSW5z
cGVjdG9yUHJveHkqIF9pbnNwZWN0b3JQcm94eTsKLX0KLQotLSAoV0tJbnNwZWN0b3JSZWYpaW5z
cGVjdG9yUmVmCi17Ci0gICAgcmV0dXJuIHRvQVBJKF9pbnNwZWN0b3JQcm94eSk7Ci19Ci0KLS0g
KF9XS0luc3BlY3RvciAqKWluc3BlY3RvcgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0g
ICAgICAgIHJldHVybiB3cmFwcGVyKCpfaW5zcGVjdG9yUHJveHkpOwotICAgIHJldHVybiBuaWw7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6
OldlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eQotewotICAgIEFTU0VSVF9BUkcoaW5z
cGVjdG9yUHJveHksIGluc3BlY3RvclByb3h5KTsKLQotICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gVW5yZXRhaW5lZCB0byBhdm9p
ZCBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQcm94
eTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsKLSAgICBf
aW5zcGVjdG9yUHJveHkgPSBudWxscHRyOwotfQotCi0tIChOU1JlY3Qpd2luZG93OihOU1dpbmRv
dyAqKXdpbmRvdyB3aWxsUG9zaXRpb25TaGVldDooTlNXaW5kb3cgKilzaGVldCB1c2luZ1JlY3Q6
KE5TUmVjdClyZWN0Ci17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgcmV0dXJu
IE5TTWFrZVJlY3QoMCwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwgX2lu
c3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS53aWR0aCgpLCAwKTsKLSAgICByZXR1cm4gcmVjdDsK
LX0KLQotLSAodm9pZCl3aW5kb3dEaWRNb3ZlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+
d2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRSZXNpemU6KE5T
Tm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkK
LSAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGcmFtZURpZENoYW5nZSgpOwotfQotCi0t
ICh2b2lkKXdpbmRvd1dpbGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsK
LSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmNsb3Nl
KCk7Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkRW50ZXJGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlv
biAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9p
bnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOwotfQotCi0tICh2b2lk
KXdpbmRvd0RpZEV4aXRGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgot
ewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2lu
ZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOwotfQotCi0tICh2b2lkKWluc3BlY3RlZFZpZXdGcmFt
ZURpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICAvLyBSZXNp
emluZyB0aGUgdmlld3Mgd2hpbGUgaW5zaWRlIHRoaXMgbm90aWZpY2F0aW9uIGNhbiBsZWFkIHRv
IGJhZCByZXN1bHRzIHdoZW4gZW50ZXJpbmcKLSAgICAvLyBvciBleGl0aW5nIGZ1bGwgc2NyZWVu
LiBUbyBhdm9pZCB0aGF0IHdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgd29yayBhZnRlciBhIGRlbGF5
LiBXZSBvbmx5Ci0gICAgLy8gZGVwZW5kIG9uIHRoaXMgZm9yIGVuZm9yY2luZyB0aGUgaGVpZ2h0
IGNvbnN0cmFpbnRzLCBzbyBhIHNtYWxsIGRlbGF5IGlzbid0IHRlcnJpYmxlLiBNb3N0Ci0gICAg
Ly8gb2YgdGhlIHRpbWUgdGhlIHZpZXdzIHdpbGwgYWxyZWFkeSBoYXZlIHRoZSBjb3JyZWN0IGZy
YW1lcyBiZWNhdXNlIG9mIGF1dG9yZXNpemluZyBtYXNrcy4KLQotICAgIGRpc3BhdGNoX2FmdGVy
KERJU1BBVENIX1RJTUVfTk9XLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAg
ICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNw
ZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClvYnNlcnZl
VmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBj
aGFuZ2U6KE5TRGljdGlvbmFyeTxOU0tleVZhbHVlQ2hhbmdlS2V5LCBpZD4gKiljaGFuZ2UgY29u
dGV4dDoodm9pZCAqKWNvbnRleHQKLXsKLSAgICBpZiAoY29udGV4dCAhPSBrV2luZG93Q29udGVu
dExheW91dE9ic2VydmVyQ29udGV4dCkgewotICAgICAgICBbc3VwZXIgb2JzZXJ2ZVZhbHVlRm9y
S2V5UGF0aDprZXlQYXRoIG9mT2JqZWN0Om9iamVjdCBjaGFuZ2U6Y2hhbmdlIGNvbnRleHQ6Y29u
dGV4dF07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93ID0g
b2JqZWN0OwotICAgIEFTU0VSVChbd2luZG93IGlzS2luZE9mQ2xhc3M6W05TV2luZG93IGNsYXNz
XV0pOwotICAgIGlmICh3aW5kb3cuaW5MaXZlUmVzaXplKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBkaXNwYXRjaF9hZnRlcihESVNQQVRDSF9USU1FX05PVywgZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgXnsKLSAgICAgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgICAgIF9pbnNw
ZWN0b3JQcm94eS0+aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgfSk7Ci19Ci0K
LS8vIE1BUks6IFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBtZXRob2RzCi0KLS0g
KHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEaWRCZWNvbWVBY3RpdmU6KFdLSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewotICAgIGlmIChfaW5z
cGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+ZGlkQmVjb21lQWN0aXZlKCk7
Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDoo
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0g
ICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZv
ckNyYXNoKCk7Ci19Ci0KLS0gKEJPT0wpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJ
c1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250
cm9sbGVyCi17Ci0gICAgcmV0dXJuIF9pbnNwZWN0b3JQcm94eSA/IF9pbnNwZWN0b3JQcm94eS0+
aXNVbmRlclRlc3QoKSA6IGZhbHNlOwotfQotCi0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9s
bGVyOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
d2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKLXsKLSAgICBpZiAoX2luc3Bl
Y3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmF0dGFjaG1lbnRXaWxsTW92ZUZy
b21XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIud2ViVmlldy53aW5kb3cpOwotfQotCi0t
ICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93OihXS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsKLSAgICBpZiAoX2lu
c3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmF0dGFjaG1lbnREaWRNb3Zl
VG9XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIud2ViVmlldy53aW5kb3cpOwotfQotCi0t
ICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
ICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgb3BlblVSTEV4dGVybmFsbHk6KE5TVVJMICopdXJs
Ci17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT5v
cGVuVVJMRXh0ZXJuYWxseSh1cmwuYWJzb2x1dGVTdHJpbmcpOwotfQotCi1AZW5kCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OmRpZEJlY29tZUFjdGl2ZSgpCi17Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6VXBkYXRlRmluZFN0cmluZyhXZWJLaXQ6OnN0cmlu
Z0ZvckZpbmQoKSkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50Vmll
d0RpZENoYW5nZShOU1ZpZXcgKm9sZFZpZXcsIE5TVmlldyAqbmV3VmlldykKLXsKLSAgICBbW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fb2JqQ0Fk
YXB0ZXIuZ2V0KCkgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6
b2xkVmlld107Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRP
YnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0ZWRW
aWV3RnJhbWVEaWRDaGFuZ2U6KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9u
IG9iamVjdDpuZXdWaWV3XTsKLQotICAgIGlmIChtX2lzQXR0YWNoZWQpCi0gICAgICAgIGF0dGFj
aChtX2F0dGFjaG1lbnRTaWRlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNo
bWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhOU1dpbmRvdyAqb2xkV2luZG93KQotewotICAgIGlmICht
X2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QpIHsKLSAgICAgICAgbV9pc09ic2VydmluZ0Nv
bnRlbnRMYXlvdXRSZWN0ID0gZmFsc2U7Ci0gICAgICAgIFtvbGRXaW5kb3cgcmVtb3ZlT2JzZXJ2
ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBmb3JLZXlQYXRoOkAiY29udGVudExheW91dFJlY3QiIGNv
bnRleHQ6a1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHRdOwotICAgIH0KLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhOU1dpbmRv
dyAqbmV3V2luZG93KQotewotICAgIGlmIChtX2lzQXR0YWNoZWQgJiYgISFuZXdXaW5kb3cpIHsK
LSAgICAgICAgbV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0ID0gdHJ1ZTsKLSAgICAgICAg
W25ld1dpbmRvdyBhZGRPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJj
b250ZW50TGF5b3V0UmVjdCIgb3B0aW9uczowIGNvbnRleHQ6a1dpbmRvd0NvbnRlbnRMYXlvdXRP
YnNlcnZlckNvbnRleHRdOwotICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUluc3BlY3RvcldpbmRv
d1RpdGxlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBsZXZlbCA9IGluc3BlY3Rpb25MZXZlbCgpOwotICAgIGlm
IChsZXZlbCA+IDEpIHsKLSAgICAgICAgTlNTdHJpbmcgKmRlYnVnVGl0bGUgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5HKCJXZWIgSW5zcGVjdG9yIFslZF0g4oCUICVA
IiwgIldlYiBJbnNwZWN0b3Igd2luZG93IHRpdGxlIHdoZW4gaW5zcGVjdGluZyBXZWIgSW5zcGVj
dG9yIiksIGxldmVsLCAoTlNTdHJpbmcgKiltX3VybFN0cmluZ107Ci0gICAgICAgIFttX2luc3Bl
Y3RvcldpbmRvdyBzZXRUaXRsZTpkZWJ1Z1RpdGxlXTsKLSAgICB9IGVsc2UgewotICAgICAgICBO
U1N0cmluZyAqdGl0bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5H
KCJXZWIgSW5zcGVjdG9yIOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSIpLCAo
TlNTdHJpbmcgKiltX3VybFN0cmluZ107Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXRU
aXRsZTp0aXRsZV07Ci0gICAgfQotfQotCi1SZXRhaW5QdHI8TlNXaW5kb3c+IFdlYkluc3BlY3Rv
clByb3h5OjpjcmVhdGVGcm9udGVuZFdpbmRvdyhOU1JlY3Qgc2F2ZWRXaW5kb3dGcmFtZSwgSW5z
cGVjdGlvblRhcmdldFR5cGUgdGFyZ2V0VHlwZSkKLXsKLSAgICBOU1JlY3Qgd2luZG93RnJhbWUg
PSAhTlNJc0VtcHR5UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSA/IHNhdmVkV2luZG93RnJhbWUgOiBO
U01ha2VSZWN0KDAsIDAsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCk7
Ci0gICAgYXV0byB3aW5kb3cgPSBhZG9wdE5TKFtbX1dLSW5zcGVjdG9yV2luZG93IGFsbG9jXSBp
bml0V2l0aENvbnRlbnRSZWN0OndpbmRvd0ZyYW1lIHN0eWxlTWFzazp3aW5kb3dTdHlsZU1hc2sg
YmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXSk7Ci0gICAgW3dpbmRvdyBz
ZXRNaW5TaXplOk5TTWFrZVNpemUobWluaW11bVdpbmRvd1dpZHRoLCBtaW5pbXVtV2luZG93SGVp
Z2h0KV07Ci0gICAgW3dpbmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOwotICAgIFt3aW5k
b3cgc2V0Q29sbGVjdGlvbkJlaGF2aW9yOihbd2luZG93IGNvbGxlY3Rpb25CZWhhdmlvcl0gfCBO
U1dpbmRvd0NvbGxlY3Rpb25CZWhhdmlvckZ1bGxTY3JlZW5QcmltYXJ5KV07Ci0KLSAgICBib29s
IGZvclJlbW90ZVRhcmdldCA9IHRhcmdldFR5cGUgPT0gSW5zcGVjdGlvblRhcmdldFR5cGU6OlJl
bW90ZTsKLSAgICBbd2luZG93IHNldEZvclJlbW90ZVRhcmdldDpmb3JSZW1vdGVUYXJnZXRdOwot
Ci0gICAgQ0dGbG9hdCBhcHByb3hpbWF0ZWx5SGFsZlNjcmVlblNpemUgPSAoW3dpbmRvdyBzY3Jl
ZW5dLmZyYW1lLnNpemUud2lkdGggLyAyKSAtIDQ7Ci0gICAgQ0dGbG9hdCBtaW5pbXVtRnVsbFNj
cmVlbldpZHRoID0gc3RkOjptYXg8Q0dGbG9hdD4oNjM2LCBhcHByb3hpbWF0ZWx5SGFsZlNjcmVl
blNpemUpOwotICAgIFt3aW5kb3cgc2V0TWluRnVsbFNjcmVlbkNvbnRlbnRTaXplOk5TTWFrZVNp
emUobWluaW11bUZ1bGxTY3JlZW5XaWR0aCwgbWluaW11bVdpbmRvd0hlaWdodCldOwotICAgIFt3
aW5kb3cgc2V0Q29sbGVjdGlvbkJlaGF2aW9yOihbd2luZG93IGNvbGxlY3Rpb25CZWhhdmlvcl0g
fCBOU1dpbmRvd0NvbGxlY3Rpb25CZWhhdmlvckZ1bGxTY3JlZW5BbGxvd3NUaWxpbmcpXTsKLQot
ICAgIFt3aW5kb3cgc2V0VGl0bGViYXJBcHBlYXJzVHJhbnNwYXJlbnQ6WUVTXTsKLQotICAgIC8v
IENlbnRlciB0aGUgd2luZG93IGlmIHRoZSBzYXZlZCBmcmFtZSB3YXMgZW1wdHkuCi0gICAgaWYg
KE5TSXNFbXB0eVJlY3Qoc2F2ZWRXaW5kb3dGcmFtZSkpCi0gICAgICAgIFt3aW5kb3cgY2VudGVy
XTsKLQotICAgIHJldHVybiB3aW5kb3c7Ci19Ci0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKLXsKLSAgICBBU1NFUlQoaW5zcGVj
dGVkUGFnZSgpKTsKLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yUGFnZSk7Ci0KLSAgICBtX2Nsb3Nl
RnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAobV9pbnNwZWN0
b3JWaWV3Q29udHJvbGxlcikgewotICAgICAgICBBU1NFUlQobV9vYmpDQWRhcHRlcik7Ci0gICAg
ICAgIHJldHVybiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+X3BhZ2UuZ2V0
KCk7Ci0gICAgfQotCi0gICAgbV9vYmpDQWRhcHRlciA9IGFkb3B0TlMoW1tXS1dlYkluc3BlY3Rv
clByb3h5T2JqQ0FkYXB0ZXIgYWxsb2NdIGluaXRXaXRoV2ViSW5zcGVjdG9yUHJveHk6dGhpc10p
OwotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9y
QXR0YWNobWVudFZpZXcoKTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGlu
c3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3Rp
ZmljYXRpb24gb2JqZWN0Omluc3BlY3RlZFZpZXddOwotCi0gICAgYXV0byBjb25maWd1cmF0aW9u
ID0gaW5zcGVjdGVkUGFnZSgpLT51aUNsaWVudCgpLmNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3Bl
Y3RvcigqaW5zcGVjdGVkUGFnZSgpLCAgKnRoaXMpOwotICAgIG1faW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgPSBhZG9wdE5TKFtbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdp
dGhDb25maWd1cmF0aW9uOiBXZWJLaXQ6OndyYXBwZXIoY29uZmlndXJhdGlvbi5nZXQoKSkgaW5z
cGVjdGVkUGFnZTppbnNwZWN0ZWRQYWdlKCldKTsKLSAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlci5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKLQotICAgIFdlYlBh
Z2VQcm94eSAqaW5zcGVjdG9yUGFnZSA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZp
ZXddLT5fcGFnZS5nZXQoKTsKLSAgICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7Ci0KLSAgICByZXR1
cm4gaW5zcGVjdG9yUGFnZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1D
cmVhdGVGcm9udGVuZFdpbmRvdygpCi17Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RvcldpbmRvdyk7
Ci0KLSAgICBOU1N0cmluZyAqc2F2ZWRXaW5kb3dGcmFtZVN0cmluZyA9IGluc3BlY3RlZFBhZ2Uo
KS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwotICAg
IE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lID0gTlNSZWN0RnJvbVN0cmluZyhzYXZlZFdpbmRvd0Zy
YW1lU3RyaW5nKTsKLQotICAgIG1faW5zcGVjdG9yV2luZG93ID0gV2ViSW5zcGVjdG9yUHJveHk6
OmNyZWF0ZUZyb250ZW5kV2luZG93KHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRU
eXBlOjpMb2NhbCk7Ci0gICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm1fb2JqQ0Fk
YXB0ZXIuZ2V0KCldOwotCi0gICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107Ci0gICAgTlNWaWV3ICpjb250ZW50VmlldyA9IFtt
X2luc3BlY3RvcldpbmRvdyBjb250ZW50Vmlld107Ci0gICAgaW5zcGVjdG9yVmlldy5mcmFtZSA9
IFtjb250ZW50VmlldyBib3VuZHNdOwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Omluc3Bl
Y3RvclZpZXddOwotCi0gICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKLSAgICBhcHBs
eUZvcmNlZEFwcGVhcmFuY2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VG
cm9udGVuZFBhZ2UoKQotewotICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkIHx8ICFtX2luc3BlY3Rv
cldpbmRvdyk7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcikgewotICAgICAg
ICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwotICAg
ICAgICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0gbmlsOwotICAgIH0KLQotICAgIGlmICht
X29iakNBZGFwdGVyKSB7Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0KLSAgICAgICAgW21f
b2JqQ0FkYXB0ZXIgaW52YWxpZGF0ZV07Ci0gICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7Ci0g
ICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFj
dGl2aXR5VGltZXJGaXJlZCgpCi17Ci0gICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
Ci17Ci0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAgIFttX2luc3BlY3Rvcldp
bmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2Vd
OwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKLSAgICB9Ci0KLSAgICBtX2Nsb3Nl
RnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdGFydE9uZVNob3Qod2ViVmlld0Nsb3NlVGlt
ZW91dCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JD
cmFzaCgpCi17Ci0gICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgp
OwotCi0gICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0
aXZpdHlUaW1lci5zdG9wKCk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZSgpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQotewotICAgIGlmIChtX2lzQXR0YWNo
ZWQpIHsKLSAgICAgICAgcGxhdGZvcm1EZXRhY2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAgICAgICBbbV9pbnNwZWN0b3JXaW5k
b3cgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNsb3NlXTsK
LSAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7Ci0gICAgfQotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQotewotICAgIGluc3BlY3RlZFBhZ2Uo
KS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17
Ci0gICAgLy8gSWYgdGhlIFdlYiBJbnNwZWN0b3IgaXMgbm8gbG9uZ2VyIGluIHRoZSBzYW1lIHdp
bmRvdyBhcyB0aGUgaW5zcGVjdGVkIHZpZXcsCi0gICAgLy8gdGhlbiB3ZSBuZWVkIHRvIHJlb3Bl
biB0aGUgSW5zcGVjdG9yIHRvIGdldCBpdCBhdHRhY2hlZCB0byB0aGUgcmlnaHQgd2luZG93Lgot
ICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGRyYWdnaW5nIHRhYnMgdG8gYW5vdGhlciB3aW5k
b3cgaW4gU2FmYXJpLgotICAgIGlmIChtX2lzQXR0YWNoZWQgJiYgW21faW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIgd2ViVmlld10ud2luZG93ICE9IGluc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5k
b3coKSkgewotICAgICAgICBvcGVuKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTA5Mzc2ODg+OiB0aGlzIHdpbGwgbm90IGJyaW5nIGEg
YmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpIHRvIHRoZSBmcm9udCwgb25seSBpdHMgd2luZG93Lgot
ICAgIFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUtleUFu
ZE9yZGVyRnJvbnQ6bmlsXTsKLSAgICBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmll
d10ud2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjpbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3
ZWJWaWV3XV07Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNw
ZWN0ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAgW2luc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5k
b3coKSBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOwotfQotCi1ib29sIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQotewotICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8x
MDkzNzY4OD46IHRoaXMgd2lsbCBub3QgcmV0dXJuIGZhbHNlIGZvciBhIGJhY2tncm91bmQgdGFi
IGluIFNhZmFyaSwgb25seSBhIGJhY2tncm91bmQgd2luZG93LgotICAgIHJldHVybiBtX2lzVmlz
aWJsZSAmJiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cuaXNNYWlu
V2luZG93OwotfQotCi1ib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNhbkF0dGFjaChi
b29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpCi17Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0g
aW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIGlmIChbV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlciB2aWV3SXNJbnNwZWN0b3JXZWJWaWV3Omluc3BlY3RlZFZp
ZXddKQotICAgICAgICByZXR1cm4gd2ViUHJvY2Vzc0NhbkF0dGFjaDsKLQotICAgIGlmIChpbnNw
ZWN0ZWRWaWV3LmhpZGRlbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGljIGNv
bnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKLSAgICBzdGF0aWMgY29uc3Qg
ZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1OwotICAgIHN0YXRpYyBjb25z
dCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDUwMDsKLQotICAgIE5TUmVjdCBpbnNwZWN0
ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1lOwotCi0gICAgZmxvYXQgbWF4aW11bUF0
dGFjaGVkSGVpZ2h0ID0gTlNIZWlnaHQoaW5zcGVjdGVkVmlld0ZyYW1lKSAqIG1heGltdW1BdHRh
Y2hlZEhlaWdodFJhdGlvOwotICAgIHJldHVybiBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPD0gbWF4
aW11bUF0dGFjaGVkSGVpZ2h0ICYmIG1pbmltdW1BdHRhY2hlZFdpZHRoIDw9IE5TV2lkdGgoaW5z
cGVjdGVkVmlld0ZyYW1lKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1B
dHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQotewotICAgIC8vIERvIG5v
dGhpbmcuCi19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBw
ZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSBhcHBlYXJhbmNlKQot
ewotICAgIG1fZnJvbnRlbmRBcHBlYXJhbmNlID0gYXBwZWFyYW5jZTsKLQotICAgIGFwcGx5Rm9y
Y2VkQXBwZWFyYW5jZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlu
c3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgbV91cmxT
dHJpbmcgPSB1cmxTdHJpbmc7Ci0KLSAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25z
dCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBBU1NFUlQoIWNlcnRp
ZmljYXRlSW5mby5pc0VtcHR5KCkpOwotCi0gICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5l
bD4gY2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2Nd
IGluaXRdKTsKLQotICAgIE5TV2luZG93ICp3aW5kb3c7Ci0gICAgaWYgKG1faW5zcGVjdG9yV2lu
ZG93KQotICAgICAgICB3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdy5nZXQoKTsKLSAgICBlbHNl
Ci0gICAgICAgIHdpbmRvdyA9IFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XSB3
aW5kb3ddOwotCi0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHdpbmRvdyA9IFtOU0FwcCBrZXlX
aW5kb3ddOwotCi0jaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLSAgICBbY2VydGlm
aWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93OndpbmRvdyBtb2RhbERlbGVnYXRlOm5pbCBk
aWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJ
bmZvLnRydXN0KCkgc2hvd0dyb3VwOllFU107Ci0jZWxzZQotICAgIFtjZXJ0aWZpY2F0ZVBhbmVs
IGJlZ2luU2hlZXRGb3JXaW5kb3c6d2luZG93IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVj
dG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0
aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpIHNob3dHcm91cDpZRVNdOwotI2VuZGlmCi0K
LSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVl
biBkaXNwbGF5ZWQsIGJlY2F1c2UgdGhlIGNlcnRpZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJl
Zm9yZWhhbmQuCi0gICAgU0ZDZXJ0aWZpY2F0ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0
aWZpY2F0ZVBhbmVsIGNlcnRpZmljYXRlVmlld107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXRE
aXNwbGF5VHJ1c3Q6WUVTXTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6
Tk9dOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheURldGFpbHM6WUVTXTsKLSAgICBb
Y2VydGlmaWNhdGVWaWV3IHNldERldGFpbHNEaXNjbG9zZWQ6WUVTXTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVE
aWFsb2cpCi17Ci0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAg
ICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdn
ZXN0ZWRVUkwpLmdldCgpOwotICAgIGlmICghcGxhdGZvcm1VUkwpIHsKLSAgICAgICAgcGxhdGZv
cm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpzdWdnZXN0ZWRVUkxdOwotICAgICAgICAvLyBU
aGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8g
dGhlbS4KLSAgICAgICAgZm9yY2VTYXZlRGlhbG9nID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAg
QVNTRVJUKHBsYXRmb3JtVVJMKTsKLSAgICBpZiAoIXBsYXRmb3JtVVJMKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBibG9jayBiZWxvdy4KLSAgICBTdHJpbmcg
c3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVSTDsKLSAgICBTdHJpbmcgY29udGVudENvcHkg
PSBjb250ZW50OwotCi0gICAgYXV0byBzYXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsK
LSAgICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7Ci0KLSAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVh
bFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKLQotICAgICAgICBpZiAo
YmFzZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAg
ICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFk
ZGluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRyPE5T
RGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVz
Om91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKLSAgICAgICAgICAgIFtkYXRhQ29udGVu
dCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6
WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwotCi0gICAgICAg
IG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUo
W2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmluZ10pKTsKLSAgICB9OwotCi0gICAgaWYgKCFmb3JjZVNh
dmVEaWFsb2cpIHsKLSAgICAgICAgc2F2ZVRvVVJMKHBsYXRmb3JtVVJMKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIE5TU2F2ZVBhbmVsICpwYW5lbCA9IFtOU1NhdmVQYW5lbCBzYXZl
UGFuZWxdOwotICAgIHBhbmVsLm5hbWVGaWVsZFN0cmluZ1ZhbHVlID0gcGxhdGZvcm1VUkwubGFz
dFBhdGhDb21wb25lbnQ7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsZSBVUkwgd2UndmUgYWxy
ZWFkeSBzYXZlZCB0aGlzIGZpbGUgdG8gYSBwYXRoIGFuZAotICAgIC8vIGNhbiBwcm92aWRlIGEg
Z29vZCBkaXJlY3RvcnkgdG8gc2hvdy4gT3RoZXJ3aXNlLCB1c2UgdGhlIHN5c3RlbSdzCi0gICAg
Ly8gZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIGluaXRpYWwgZGlyZWN0b3J5IHRvIHNob3cgaW4g
dGhlIGRpYWxvZy4KLSAgICBpZiAocGxhdGZvcm1VUkwuaXNGaWxlVVJMKQotICAgICAgICBwYW5l
bC5kaXJlY3RvcnlVUkwgPSBbcGxhdGZvcm1VUkwgVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9u
ZW50XTsKLQotICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBeKE5TSW50ZWdlciByZXN1bHQp
IHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VDYW5jZWwpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0sp
OwotICAgICAgICBzYXZlVG9VUkwocGFuZWwuVVJMKTsKLSAgICB9OwotCi0gICAgTlNXaW5kb3cg
KndpbmRvdyA9IG1faW5zcGVjdG9yV2luZG93ID8gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCkgOiBb
TlNBcHAga2V5V2luZG93XTsKLSAgICBpZiAod2luZG93KQotICAgICAgICBbcGFuZWwgYmVnaW5T
aGVldE1vZGFsRm9yV2luZG93OndpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFu
ZGxlcl07Ci0gICAgZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbcGFuZWwgcnVuTW9k
YWxdKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsKLSAgICBBU1NF
UlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOwotICAgIAotICAgIFJldGFpblB0cjxOU1VSTD4g
YWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKTsK
LSAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUgdXNlciBoYXMgYWxyZWFkeSBjb25maXJt
ZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCi0gICAgaWYgKCFhY3R1YWxVUkwpCi0gICAgICAg
IHJldHVybjsKLQotICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxlID0gW05TRmlsZUhhbmRsZSBmaWxl
SGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQoKSBlcnJvcjpOVUxMXTsKLSAgICBb
aGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07Ci0gICAgW2hhbmRsZSB3cml0ZURhdGE6W2NvbnRlbnQg
ZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICBbaGFuZGxlIGNs
b3NlRmlsZV07Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpEaWRBcHBlbmQoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmluZ10pKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6d2luZG93RnJhbWVEaWRDaGFuZ2UoKQotewotICAgIEFTU0VS
VCghbV9pc0F0dGFjaGVkKTsKLSAgICBBU1NFUlQobV9pc1Zpc2libGUpOwotICAgIEFTU0VSVCht
X2luc3BlY3RvcldpbmRvdyk7Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkIHx8ICFtX2lzVmlzaWJs
ZSB8fCAhbV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TU3RyaW5n
ICpmcmFtZVN0cmluZyA9IE5TU3RyaW5nRnJvbVJlY3QoW21faW5zcGVjdG9yV2luZG93IGZyYW1l
XSk7Ci0gICAgaW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLnNldElu
c3BlY3RvcldpbmRvd0ZyYW1lKGZyYW1lU3RyaW5nKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzQXR0
YWNoZWQpOwotICAgIEFTU0VSVChtX2lzVmlzaWJsZSk7Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9y
V2luZG93KTsKLQotICAgIGlmIChtX2lzQXR0YWNoZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFtX2lu
c3BlY3RvcldpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXR0YWNoQXZhaWxhYmlsaXR5
Q2hhbmdlZChwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRhY2goKSkpOyAgICAKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKENHRmxvYXQgY3Vy
cmVudERpbWVuc2lvbikKLXsKLSAgICBpZiAoIW1faXNWaXNpYmxlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1faXNBdHRhY2hlZCkgewotICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXR0
YWNoIGF2YWlsYWJpbGl0eSBjaGFuZ2VkLiBXZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSBpbiBjYXNl
Ci0gICAgICAgIC8vIHRoZSBhdHRhY2htZW50IHZpZXcgaXMgbm90IHRoZSBXS1ZpZXcuCi0gICAg
ICAgIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQocGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNo
KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaW5zcGVjdGVkUGFnZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0
ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgV0tXZWJWaWV3ICppbnNw
ZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107Ci0KLSAgICBO
U1JlY3QgaW5zcGVjdGVkVmlld0ZyYW1lID0gaW5zcGVjdGVkVmlldy5mcmFtZTsKLSAgICBOU1Jl
Y3Qgb2xkSW5zcGVjdG9yVmlld0ZyYW1lID0gaW5zcGVjdG9yVmlldy5mcmFtZTsKLSAgICBOU1Jl
Y3QgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNaZXJvUmVjdDsKLSAgICBOU1JlY3QgcGFyZW50
Qm91bmRzID0gaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcuYm91bmRzOwotICAgIENHRmxvYXQgaW5z
cGVjdGVkVmlld1RvcCA9IE5TTWF4WShpbnNwZWN0ZWRWaWV3RnJhbWUpOwotCi0gICAgc3dpdGNo
IChtX2F0dGFjaG1lbnRTaWRlKSB7Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOiB7
Ci0gICAgICAgIGlmICghY3VycmVudERpbWVuc2lvbikKLSAgICAgICAgICAgIGN1cnJlbnREaW1l
bnNpb24gPSBOU0hlaWdodChvbGRJbnNwZWN0b3JWaWV3RnJhbWUpOwotCi0gICAgICAgIENHRmxv
YXQgcGFyZW50SGVpZ2h0ID0gTlNIZWlnaHQocGFyZW50Qm91bmRzKTsKLSAgICAgICAgQ0dGbG9h
dCBpbnNwZWN0b3JIZWlnaHQgPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJh
aW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGN1cnJlbnREaW1lbnNpb24sIHBhcmVudEhlaWdodCk7
Ci0KLSAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVk
IHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4KLSAgICAgICAgaW5zcGVjdGVk
Vmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCBpbnNwZWN0b3JIZWlnaHQsIE5TV2lkdGgocGFyZW50
Qm91bmRzKSwgaW5zcGVjdGVkVmlld1RvcCAtIGluc3BlY3RvckhlaWdodCk7Ci0gICAgICAgIG5l
d0luc3BlY3RvclZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgTlNXaWR0aChpbnNwZWN0ZWRW
aWV3RnJhbWUpLCBpbnNwZWN0b3JIZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDogewotICAgICAgICBpZiAoIWN1cnJlbnREaW1l
bnNpb24pCi0gICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gTlNXaWR0aChvbGRJbnNwZWN0
b3JWaWV3RnJhbWUpOwotCi0gICAgICAgIENHRmxvYXQgcGFyZW50V2lkdGggPSBOU1dpZHRoKHBh
cmVudEJvdW5kcyk7Ci0gICAgICAgIENHRmxvYXQgaW5zcGVjdG9yV2lkdGggPSBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoY3VycmVu
dERpbWVuc2lvbiwgcGFyZW50V2lkdGgpOwotCi0gICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3Ag
cG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxs
IHdvcmsuIEJ1dCBkb24ndCB1c2UgdGhhdAotICAgICAgICAvLyB0b3AgcG9zaXRpb24gZm9yIHRo
ZSBpbnNwZWN0b3IgdmlldyBzaW5jZSB0aGUgYmFubmVycyBvbmx5IHN0cmV0Y2ggYXMgd2lkZSBh
cyB0aGUgaW5zcGVjdGVkIHZpZXcuCi0gICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFr
ZVJlY3QoMCwgMCwgcGFyZW50V2lkdGggLSBpbnNwZWN0b3JXaWR0aCwgaW5zcGVjdGVkVmlld1Rv
cCk7Ci0gICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TTWFrZVJlY3QocGFyZW50V2lk
dGggLSBpbnNwZWN0b3JXaWR0aCwgMCwgaW5zcGVjdG9yV2lkdGgsIE5TSGVpZ2h0KHBhcmVudEJv
dW5kcykpOwotCi0gICAgICAgIGlmIChOU1dpbmRvdyAqaW5zcGVjdG9yV2luZG93ID0gaW5zcGVj
dG9yVmlldy53aW5kb3cpIHsKLSAgICAgICAgICAgIE5TUmVjdCBjb250ZW50TGF5b3V0UmVjdCA9
IFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBjb252ZXJ0UmVjdDppbnNwZWN0b3JXaW5kb3cuY29u
dGVudExheW91dFJlY3QgZnJvbVZpZXc6bmlsXTsKLSAgICAgICAgICAgIG5ld0luc3BlY3RvclZp
ZXdGcmFtZSA9IE5TSW50ZXJzZWN0aW9uUmVjdChuZXdJbnNwZWN0b3JWaWV3RnJhbWUsIGNvbnRl
bnRMYXlvdXRSZWN0KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBj
YXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OiB7Ci0gICAgICAgIGlmICghY3VycmVudERpbWVuc2lv
bikKLSAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBOU1dpZHRoKG9sZEluc3BlY3RvclZp
ZXdGcmFtZSk7Ci0KLSAgICAgICAgQ0dGbG9hdCBwYXJlbnRXaWR0aCA9IE5TV2lkdGgocGFyZW50
Qm91bmRzKTsKLSAgICAgICAgQ0dGbG9hdCBpbnNwZWN0b3JXaWR0aCA9IEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChjdXJyZW50RGlt
ZW5zaW9uLCBwYXJlbnRXaWR0aCk7Ci0KLSAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRvcCBwb3Np
dGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29y
ay4gQnV0IGRvbid0IHVzZSB0aGF0Ci0gICAgICAgIC8vIHRvcCBwb3NpdGlvbiBmb3IgdGhlIGlu
c3BlY3RvciB2aWV3IHNpbmNlIHRoZSBiYW5uZXJzIG9ubHkgc3RyZXRjaCBhcyB3aWRlIGFzIHRo
ZSBpbnNwZWN0ZWQgdmlldy4KLSAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVj
dChpbnNwZWN0b3JXaWR0aCwgMCwgcGFyZW50V2lkdGggLSBpbnNwZWN0b3JXaWR0aCwgaW5zcGVj
dGVkVmlld1RvcCk7Ci0gICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TTWFrZVJlY3Qo
MCwgMCwgaW5zcGVjdG9yV2lkdGgsIE5TSGVpZ2h0KHBhcmVudEJvdW5kcykpOwotCi0gICAgICAg
IGlmIChOU1dpbmRvdyAqaW5zcGVjdG9yV2luZG93ID0gaW5zcGVjdG9yVmlldy53aW5kb3cpIHsK
LSAgICAgICAgICAgIE5TUmVjdCBjb250ZW50TGF5b3V0UmVjdCA9IFtpbnNwZWN0ZWRWaWV3LnN1
cGVydmlldyBjb252ZXJ0UmVjdDppbnNwZWN0b3JXaW5kb3cuY29udGVudExheW91dFJlY3QgZnJv
bVZpZXc6bmlsXTsKLSAgICAgICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TSW50ZXJz
ZWN0aW9uUmVjdChuZXdJbnNwZWN0b3JWaWV3RnJhbWUsIGNvbnRlbnRMYXlvdXRSZWN0KTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgaWYgKE5TRXF1YWxS
ZWN0cyhvbGRJbnNwZWN0b3JWaWV3RnJhbWUsIG5ld0luc3BlY3RvclZpZXdGcmFtZSkgJiYgTlNF
cXVhbFJlY3RzKFtpbnNwZWN0ZWRWaWV3IGZyYW1lXSwgaW5zcGVjdGVkVmlld0ZyYW1lKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gRGlzYWJsZSBzY3JlZW4gdXBkYXRlcyB0byBtYWtlIHN1
cmUgdGhlIGxheWVycyBmb3IgYm90aCB2aWV3cyByZXNpemUgaW4gc3luYy4KLSAgICBbaW5zcGVj
dG9yVmlldy53aW5kb3cgZGlzYWJsZVNjcmVlblVwZGF0ZXNVbnRpbEZsdXNoXTsKLQotICAgIFtp
bnNwZWN0b3JWaWV3IHNldEZyYW1lOm5ld0luc3BlY3RvclZpZXdGcmFtZV07Ci0gICAgW2luc3Bl
Y3RlZFZpZXcgc2V0RnJhbWU6aW5zcGVjdGVkVmlld0ZyYW1lXTsKLX0KLQotdW5zaWduZWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKLXsKLSAgICBO
U1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1l
bnRWaWV3KCk7Ci0gICAgTlNSZWN0IGluc3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcg
ZnJhbWVdOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1Jl
Y3Quc2l6ZS5oZWlnaHQpOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCi17Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0g
aW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIE5TUmVjdCBp
bnNwZWN0ZWRWaWV3UmVjdCA9IFtpbnNwZWN0ZWRWaWV3IGZyYW1lXTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGluc3BlY3RlZFZpZXdSZWN0LnNpemUud2lkdGgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgTlNWaWV3ICpp
bnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50Vmlldygp
OwotICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZpZXdDb250cm9s
bGVyIHdlYlZpZXddOwotCi0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAgIFtt
X2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV9pbnNwZWN0b3JX
aW5kb3cgY2xvc2VdOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKLSAgICB9Ci0K
LSAgICBbaW5zcGVjdG9yVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLQotICAgIENHRmxvYXQg
Y3VycmVudERpbWVuc2lvbjsKLSAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICBj
YXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206Ci0gICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1
dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3TWF4WU1hcmdpbl07Ci0g
ICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNw
ZWN0b3JBdHRhY2hlZEhlaWdodCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEF0dGFjaG1l
bnRTaWRlOjpSaWdodDoKLSAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFz
azpOU1ZpZXdIZWlnaHRTaXphYmxlIHwgTlNWaWV3TWluWE1hcmdpbl07Ci0gICAgICAgIGN1cnJl
bnREaW1lbnNpb24gPSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hl
ZFdpZHRoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6
Ci0gICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3SGVpZ2h0
U2l6YWJsZSB8IE5TVmlld01heFhNYXJnaW5dOwotICAgICAgICBjdXJyZW50RGltZW5zaW9uID0g
aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoY3Vy
cmVudERpbWVuc2lvbik7Ci0KLSAgICBbaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcgYWRkU3Vidmll
dzppbnNwZWN0b3JWaWV3IHBvc2l0aW9uZWQ6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOmluc3Bl
Y3RlZFZpZXddOwotICAgIFtpbnNwZWN0b3JWaWV3LndpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6
aW5zcGVjdG9yVmlld107Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0
YWNoKCkKLXsKLSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmlu
c3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0g
W21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107Ci0KLSAgICBbaW5zcGVjdG9yVmll
dyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLQotICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNp
emluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07Ci0KLSAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBzaXplIHRoZSBpbnNwZWN0ZWQgdmlldydzIGZyYW1lIGFm
dGVyIGRldGFjaGluZyBzbyB0aGF0IGl0IHRha2VzIHVwIHRoZSBzcGFjZSB0aGF0IHRoZQotICAg
IC8vIGF0dGFjaGVkIGluc3BlY3RvciB1c2VkIHRvLiBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9u
IG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLgot
Ci0gICAgaW5zcGVjdGVkVmlldy5mcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgTlNXaWR0aChpbnNw
ZWN0ZWRWaWV3LnN1cGVydmlldy5ib3VuZHMpLCBOU01heFkoaW5zcGVjdGVkVmlldy5mcmFtZSkp
OwotCi0gICAgLy8gUmV0dXJuIGVhcmx5IGlmIHdlIGFyZSBub3QgdmlzaWJsZS4gVGhpcyBtZWFu
cyB0aGUgaW5zcGVjdG9yIHdhcyBjbG9zZWQgd2hpbGUgYXR0YWNoZWQKLSAgICAvLyBhbmQgd2Ug
c2hvdWxkIG5vdCBjcmVhdGUgYW5kIHNob3cgdGhlIGluc3BlY3RvciB3aW5kb3cuCi0gICAgaWYg
KCFtX2lzVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgb3BlbigpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2ln
bmVkIGhlaWdodCkKLXsKLSAgICBpZiAoIW1faXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKGhlaWdodCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3
aWR0aCkKLXsKLSAgICBpZiAoIW1faXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKHdpZHRoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIG1fc2hlZXRSZWN0ID0gcmVjdDsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIGlmIChhdXRvKiB3ZWJWaWV3ID0gW21faW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10pIHsKLSAgICAgICAgaWYgKHdlYlZpZXctPl9w
YWdlKQotICAgICAgICAgICAgd2ViVmlldy0+X3BhZ2UtPnN0YXJ0V2luZG93RHJhZygpOwotICAg
IH0KLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsK
LSAgICByZXR1cm4gW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgVVJMRm9ySW5zcGVjdG9yUmVz
b3VyY2U6QCJNYWluLmh0bWwiXS5hYnNvbHV0ZVN0cmluZzsKLX0KLQotU3RyaW5nIFdlYkluc3Bl
Y3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0gICAgcmV0dXJuIFtXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyIFVSTEZvckluc3BlY3RvclJlc291cmNlOkAiVGVzdC5odG1sIl0u
YWJzb2x1dGVTdHJpbmc7Ci19Ci0KLXN0YXRpYyBOU0RpY3Rpb25hcnkgKnN5c3RlbVZlcnNpb25Q
bGlzdCgpCi17Ci0gICAgTlNTdHJpbmcgKnN5c3RlbUxpYnJhcnlQYXRoID0gW05TU2VhcmNoUGF0
aEZvckRpcmVjdG9yaWVzSW5Eb21haW5zKE5TTGlicmFyeURpcmVjdG9yeSwgTlNTeXN0ZW1Eb21h
aW5NYXNrLCBZRVMpIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgTlNTdHJpbmcgKnN5c3RlbVZlcnNp
b25QbGlzdFBhdGggPSBbc3lzdGVtTGlicmFyeVBhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OkAiQ29yZVNlcnZpY2VzL1N5c3RlbVZlcnNpb24ucGxpc3QiXTsKLSAgICBOU0RpY3Rp
b25hcnkgKnN5c3RlbVZlcnNpb25JbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aENv
bnRlbnRzT2ZGaWxlOnN5c3RlbVZlcnNpb25QbGlzdFBhdGhdOwotICAgIHJldHVybiBzeXN0ZW1W
ZXJzaW9uSW5mbzsKLX0KLQotRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5Ojpp
bmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKLXsKLSAgICBOU0RpY3Rpb25hcnkgKnBsaXN0ID0gc3lz
dGVtVmVyc2lvblBsaXN0KCk7Ci0KLSAgICBEZWJ1Z2dhYmxlSW5mb0RhdGEgcmVzdWx0OwotICAg
IHJlc3VsdC5kZWJ1Z2dhYmxlVHlwZSA9IEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBh
Z2U7Ci0gICAgcmVzdWx0LnRhcmdldFBsYXRmb3JtTmFtZSA9ICJtYWNPUyJfczsKLSAgICByZXN1
bHQudGFyZ2V0QnVpbGRWZXJzaW9uID0gcGxpc3RbQCJQcm9kdWN0QnVpbGRWZXJzaW9uIl07Ci0g
ICAgcmVzdWx0LnRhcmdldFByb2R1Y3RWZXJzaW9uID0gcGxpc3RbQCJQcm9kdWN0VXNlclZpc2li
bGVWZXJzaW9uIl07Ci0gICAgcmVzdWx0LnRhcmdldElzU2ltdWxhdG9yID0gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphcHBseUZvcmNl
ZEFwcGVhcmFuY2UoKQotewotICAgIE5TQXBwZWFyYW5jZSAqcGxhdGZvcm1BcHBlYXJhbmNlOwot
ICAgIHN3aXRjaCAobV9mcm9udGVuZEFwcGVhcmFuY2UpIHsKLSAgICBjYXNlIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlOjpTeXN0ZW06Ci0gICAgICAgIHBsYXRmb3JtQXBwZWFy
YW5jZSA9IG5pbDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpBcHBlYXJhbmNlOjpMaWdodDoKLSAgICAgICAgcGxhdGZvcm1BcHBlYXJhbmNlID0g
W05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6TlNBcHBlYXJhbmNlTmFtZUFxdWFdOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFu
Y2U6OkRhcms6Ci0gICAgICAgIHBsYXRmb3JtQXBwZWFyYW5jZSA9IFtOU0FwcGVhcmFuY2UgYXBw
ZWFyYW5jZU5hbWVkOk5TQXBwZWFyYW5jZU5hbWVEYXJrQXF1YV07Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIGlmIChOU1dpbmRvdyAqd2luZG93ID0gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0
KCkpCi0gICAgICAgIHdpbmRvdy5hcHBlYXJhbmNlID0gcGxhdGZvcm1BcHBlYXJhbmNlOwotCi0g
ICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10uYXBwZWFyYW5jZSA9IHBsYXRm
b3JtQXBwZWFyYW5jZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTBm
Mzc2NzkwMmVmN2UxOGNiMmMwOGEzMDYzNmUzZGZhOWQ5YWY3MQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94
eU1hYy5tbQpAQCAtMCwwICsxLDgzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCisKKyNpZiBQTEFURk9STShN
QUMpCisKKyNpbXBvcnQgIkFQSUluc3BlY3RvckNsaWVudC5oIgorI2ltcG9ydCAiQVBJSW5zcGVj
dG9yQ29uZmlndXJhdGlvbi5oIgorI2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKKyNpbXBvcnQgIkds
b2JhbEZpbmRJblBhZ2VTdGF0ZS5oIgorI2ltcG9ydCAiV0tJbnNwZWN0b3JQcml2YXRlTWFjLmgi
CisjaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgiCisjaW1wb3J0ICJXS09iamVj
dC5oIgorI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld0ludGVy
bmFsLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQ
YWdlR3JvdXAuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiX1dLSW5zcGVj
dG9yQ29uZmlndXJhdGlvbkludGVybmFsLmgiCisjaW1wb3J0ICJfV0tJbnNwZWN0b3JJbnRlcm5h
bC5oIgorI2ltcG9ydCAiX1dLSW5zcGVjdG9yV2luZG93LmgiCisjaW1wb3J0IDxTZWN1cml0eUlu
dGVyZmFjZS9TRkNlcnRpZmljYXRlUGFuZWwuaD4KKyNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNl
L1NGQ2VydGlmaWNhdGVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5o
PgorI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2
NC5oPgorCitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciB3aW5kb3dTdHlsZU1hc2sgPSBOU1dpbmRv
d1N0eWxlTWFza1RpdGxlZCB8IE5TV2luZG93U3R5bGVNYXNrQ2xvc2FibGUgfCBOU1dpbmRvd1N0
eWxlTWFza01pbmlhdHVyaXphYmxlIHwgTlNXaW5kb3dTdHlsZU1hc2tSZXNpemFibGUgfCBOU1dp
bmRvd1N0eWxlTWFza0Z1bGxTaXplQ29udGVudFZpZXc7CisKKy8vIFRoZSB0aW1lIHdlIGtlZXAg
b3VyIFdlYlZpZXcgYWxpdmUgYmVmb3JlIGNsb3NpbmcgaXQgYW5kIGl0cyBwcm9jZXNzLgorLy8g
UmV1c2luZyB0aGUgV2ViVmlldyBpbXByb3ZlcyBzdGFydCB1cCB0aW1lIGZvciBwZW9wbGUgdGhh
dCBqdW1wIGluIGFuZCBvdXQgb2YgdGhlIEluc3BlY3Rvci4KK3N0YXRpYyBjb25zdCBTZWNvbmRz
IHdlYlZpZXdDbG9zZVRpbWVvdXQgeyAxX21pbiB9OworCitzdGF0aWMgdm9pZCoga1dpbmRvd0Nv
bnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHQgPSAma1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZl
ckNvbnRleHQ7CisKK0BpbnRlcmZhY2UgV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIg
KCkgPE5TV2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4K
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViSW5zcGVjdG9yVUlQcm94eTooV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5KilpbnNwZWN0b3JQcm94eTsKKy0gKHZvaWQpaW52YWxpZGF0ZTsK
KworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0
ZXIgeworICAgIFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eSogX2luc3BlY3RvclByb3h5Owor
fQorCistIChXS0luc3BlY3RvclJlZilpbnNwZWN0b3JSZWYKK3sKKyAgICByZXR1cm4gdG9BUEko
X2luc3BlY3RvclByb3h5KTsKK30KKworLSAoX1dLSW5zcGVjdG9yICopaW5zcGVjdG9yCit7Cisg
ICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIoKl9pbnNwZWN0
b3JQcm94eSk7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
V2ViSW5zcGVjdG9yVUlQcm94eTooV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5KilpbnNwZWN0
b3JQcm94eQoreworICAgIEFTU0VSVF9BUkcoaW5zcGVjdG9yUHJveHksIGluc3BlY3RvclByb3h5
KTsKKworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgLy8gVW5yZXRhaW5lZCB0byBhdm9pZCBhIHJlZmVyZW5jZSBjeWNsZS4KKyAgICBf
aW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQcm94eTsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWludmFsaWRhdGUKK3sKKyAgICBfaW5zcGVjdG9yUHJveHkgPSBudWxscHRyOwor
fQorCistIChOU1JlY3Qpd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRpb25TaGVl
dDooTlNXaW5kb3cgKilzaGVldCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Cit7CisgICAgaWYgKF9p
bnNwZWN0b3JQcm94eSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgX2luc3BlY3RvclBy
b3h5LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS53
aWR0aCgpLCAwKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworLSAodm9pZCl3aW5kb3dEaWRNb3Zl
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChfaW5zcGVjdG9yUHJv
eHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKK30K
KworLSAodm9pZCl3aW5kb3dEaWRSZXNpemU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
Cit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT53
aW5kb3dGcmFtZURpZENoYW5nZSgpOworfQorCistICh2b2lkKXdpbmRvd1dpbGxDbG9zZTooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQor
ICAgICAgICBfaW5zcGVjdG9yUHJveHktPmNsb3NlKCk7Cit9CisKKy0gKHZvaWQpd2luZG93RGlk
RW50ZXJGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlm
IChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNj
cmVlbkRpZENoYW5nZSgpOworfQorCistICh2b2lkKXdpbmRvd0RpZEV4aXRGdWxsU2NyZWVuOihO
U05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkp
CisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOwor
fQorCistICh2b2lkKWluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTooTlNOb3RpZmljYXRpb24g
Kilub3RpZmljYXRpb24KK3sKKyAgICAvLyBSZXNpemluZyB0aGUgdmlld3Mgd2hpbGUgaW5zaWRl
IHRoaXMgbm90aWZpY2F0aW9uIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIHdoZW4gZW50ZXJpbmcK
KyAgICAvLyBvciBleGl0aW5nIGZ1bGwgc2NyZWVuLiBUbyBhdm9pZCB0aGF0IHdlIG5lZWQgdG8g
cGVyZm9ybSB0aGUgd29yayBhZnRlciBhIGRlbGF5LiBXZSBvbmx5CisgICAgLy8gZGVwZW5kIG9u
IHRoaXMgZm9yIGVuZm9yY2luZyB0aGUgaGVpZ2h0IGNvbnN0cmFpbnRzLCBzbyBhIHNtYWxsIGRl
bGF5IGlzbid0IHRlcnJpYmxlLiBNb3N0CisgICAgLy8gb2YgdGhlIHRpbWUgdGhlIHZpZXdzIHdp
bGwgYWxyZWFkeSBoYXZlIHRoZSBjb3JyZWN0IGZyYW1lcyBiZWNhdXNlIG9mIGF1dG9yZXNpemlu
ZyBtYXNrcy4KKworICAgIGRpc3BhdGNoX2FmdGVyKERJU1BBVENIX1RJTUVfTk9XLCBkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAg
ICAgICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsK
KyAgICB9KTsKK30KKworLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAq
KWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeTxOU0tleVZh
bHVlQ2hhbmdlS2V5LCBpZD4gKiljaGFuZ2UgY29udGV4dDoodm9pZCAqKWNvbnRleHQKK3sKKyAg
ICBpZiAoY29udGV4dCAhPSBrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dCkgewor
ICAgICAgICBbc3VwZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG9mT2JqZWN0Om9i
amVjdCBjaGFuZ2U6Y2hhbmdlIGNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gb2JqZWN0OworICAgIEFTU0VSVChbd2luZG93
IGlzS2luZE9mQ2xhc3M6W05TV2luZG93IGNsYXNzXV0pOworICAgIGlmICh3aW5kb3cuaW5MaXZl
UmVzaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBkaXNwYXRjaF9hZnRlcihESVNQQVRDSF9U
SU1FX05PVywgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKF9pbnNw
ZWN0b3JQcm94eSkKKyAgICAgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkVmlld0Zy
YW1lRGlkQ2hhbmdlKCk7CisgICAgfSk7Cit9CisKKy8vIE1BUks6IFdLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZSBtZXRob2RzCisKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXJEaWRCZWNvbWVBY3RpdmU6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JW
aWV3Q29udHJvbGxlcgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNw
ZWN0b3JQcm94eS0+ZGlkQmVjb21lQWN0aXZlKCk7Cit9CisKKy0gKHZvaWQpaW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAq
KWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAg
ICAgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Cit9CisKKy0gKEJPT0wpaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgcmV0dXJuIF9pbnNw
ZWN0b3JQcm94eSA/IF9pbnNwZWN0b3JQcm94eS0+aXNVbmRlclRlc3QoKSA6IGZhbHNlOworfQor
CistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyOihXS0luc3BlY3RvclZpZXdDb250cm9s
bGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cg
KiluZXdXaW5kb3cKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVj
dG9yUHJveHktPmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIud2ViVmlldy53aW5kb3cpOworfQorCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9s
bGVyRGlkTW92ZVRvV2luZG93OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5z
cGVjdG9yUHJveHktPmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIud2ViVmlldy53aW5kb3cpOworfQorCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9s
bGVyOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
b3BlblVSTEV4dGVybmFsbHk6KE5TVVJMICopdXJsCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94
eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT5vcGVuVVJMRXh0ZXJuYWxseSh1cmwuYWJzb2x1
dGVTdHJpbmcpOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6ZGlkQmVjb21lQWN0aXZl
KCkKK3sKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpVcGRhdGVGaW5kU3RyaW5nKFdlYktpdDo6c3RyaW5nRm9yRmluZCgpKSk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUlQcm94eTo6YXR0YWNobWVudFZpZXdEaWRDaGFuZ2UoTlNWaWV3ICpvbGRW
aWV3LCBOU1ZpZXcgKm5ld1ZpZXcpCit7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIG5hbWU6TlNWaWV3
RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om9sZFZpZXddOworICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5n
ZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikgbmFt
ZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmV3Vmlld107CisKKyAg
ICBpZiAobV9pc0F0dGFjaGVkKQorICAgICAgICBhdHRhY2gobV9hdHRhY2htZW50U2lkZSk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6YXR0YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRv
dyhOU1dpbmRvdyAqb2xkV2luZG93KQoreworICAgIGlmIChtX2lzT2JzZXJ2aW5nQ29udGVudExh
eW91dFJlY3QpIHsKKyAgICAgICAgbV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0ID0gZmFs
c2U7CisgICAgICAgIFtvbGRXaW5kb3cgcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQo
KSBmb3JLZXlQYXRoOkAiY29udGVudExheW91dFJlY3QiIGNvbnRleHQ6a1dpbmRvd0NvbnRlbnRM
YXlvdXRPYnNlcnZlckNvbnRleHRdOworICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVBy
b3h5OjphdHRhY2htZW50RGlkTW92ZVRvV2luZG93KE5TV2luZG93ICpuZXdXaW5kb3cpCit7Cisg
ICAgaWYgKG1faXNBdHRhY2hlZCAmJiAhIW5ld1dpbmRvdykgeworICAgICAgICBtX2lzT2JzZXJ2
aW5nQ29udGVudExheW91dFJlY3QgPSB0cnVlOworICAgICAgICBbbmV3V2luZG93IGFkZE9ic2Vy
dmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBv
cHRpb25zOjAgY29udGV4dDprV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dF07Cisg
ICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSgpOworICAgIH0KK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JVSVByb3h5Ojp1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgbGV2ZWwgPSBpbnNwZWN0aW9uTGV2ZWwoKTsKKyAgICBpZiAobGV2ZWwgPiAxKSB7Cisg
ICAgICAgIE5TU3RyaW5nICpkZWJ1Z1RpdGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
V0VCX1VJX1NUUklORygiV2ViIEluc3BlY3RvciBbJWRdIOKAlCAlQCIsICJXZWIgSW5zcGVjdG9y
IHdpbmRvdyB0aXRsZSB3aGVuIGluc3BlY3RpbmcgV2ViIEluc3BlY3RvciIpLCBsZXZlbCwgKE5T
U3RyaW5nICopbV91cmxTdHJpbmddOworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0VGl0
bGU6ZGVidWdUaXRsZV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNTdHJpbmcgKnRpdGxlID0g
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6V0VCX1VJX1NUUklORygiV2ViIEluc3BlY3RvciDi
gJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUiKSwgKE5TU3RyaW5nICopbV91cmxT
dHJpbmddOworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0VGl0bGU6dGl0bGVdOworICAg
IH0KK30KKworUmV0YWluUHRyPE5TV2luZG93PiBXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGVG
cm9udGVuZFdpbmRvdyhOU1JlY3Qgc2F2ZWRXaW5kb3dGcmFtZSwgSW5zcGVjdGlvblRhcmdldFR5
cGUgdGFyZ2V0VHlwZSkKK3sKKyAgICBOU1JlY3Qgd2luZG93RnJhbWUgPSAhTlNJc0VtcHR5UmVj
dChzYXZlZFdpbmRvd0ZyYW1lKSA/IHNhdmVkV2luZG93RnJhbWUgOiBOU01ha2VSZWN0KDAsIDAs
IGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCk7CisgICAgYXV0byB3aW5k
b3cgPSBhZG9wdE5TKFtbX1dLSW5zcGVjdG9yV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRS
ZWN0OndpbmRvd0ZyYW1lIHN0eWxlTWFzazp3aW5kb3dTdHlsZU1hc2sgYmFja2luZzpOU0JhY2tp
bmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXSk7CisgICAgW3dpbmRvdyBzZXRNaW5TaXplOk5TTWFr
ZVNpemUobWluaW11bVdpbmRvd1dpZHRoLCBtaW5pbXVtV2luZG93SGVpZ2h0KV07CisgICAgW3dp
bmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOworICAgIFt3aW5kb3cgc2V0Q29sbGVjdGlv
bkJlaGF2aW9yOihbd2luZG93IGNvbGxlY3Rpb25CZWhhdmlvcl0gfCBOU1dpbmRvd0NvbGxlY3Rp
b25CZWhhdmlvckZ1bGxTY3JlZW5QcmltYXJ5KV07CisKKyAgICBib29sIGZvclJlbW90ZVRhcmdl
dCA9IHRhcmdldFR5cGUgPT0gSW5zcGVjdGlvblRhcmdldFR5cGU6OlJlbW90ZTsKKyAgICBbd2lu
ZG93IHNldEZvclJlbW90ZVRhcmdldDpmb3JSZW1vdGVUYXJnZXRdOworCisgICAgQ0dGbG9hdCBh
cHByb3hpbWF0ZWx5SGFsZlNjcmVlblNpemUgPSAoW3dpbmRvdyBzY3JlZW5dLmZyYW1lLnNpemUu
d2lkdGggLyAyKSAtIDQ7CisgICAgQ0dGbG9hdCBtaW5pbXVtRnVsbFNjcmVlbldpZHRoID0gc3Rk
OjptYXg8Q0dGbG9hdD4oNjM2LCBhcHByb3hpbWF0ZWx5SGFsZlNjcmVlblNpemUpOworICAgIFt3
aW5kb3cgc2V0TWluRnVsbFNjcmVlbkNvbnRlbnRTaXplOk5TTWFrZVNpemUobWluaW11bUZ1bGxT
Y3JlZW5XaWR0aCwgbWluaW11bVdpbmRvd0hlaWdodCldOworICAgIFt3aW5kb3cgc2V0Q29sbGVj
dGlvbkJlaGF2aW9yOihbd2luZG93IGNvbGxlY3Rpb25CZWhhdmlvcl0gfCBOU1dpbmRvd0NvbGxl
Y3Rpb25CZWhhdmlvckZ1bGxTY3JlZW5BbGxvd3NUaWxpbmcpXTsKKworICAgIFt3aW5kb3cgc2V0
VGl0bGViYXJBcHBlYXJzVHJhbnNwYXJlbnQ6WUVTXTsKKworICAgIC8vIENlbnRlciB0aGUgd2lu
ZG93IGlmIHRoZSBzYXZlZCBmcmFtZSB3YXMgZW1wdHkuCisgICAgaWYgKE5TSXNFbXB0eVJlY3Qo
c2F2ZWRXaW5kb3dGcmFtZSkpCisgICAgICAgIFt3aW5kb3cgY2VudGVyXTsKKworICAgIHJldHVy
biB3aW5kb3c7Cit9CisKK1dlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1DcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOwor
ICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdlKTsKKworICAgIG1fY2xvc2VGcm9udGVuZEFmdGVy
SW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKKworICAgIGlmIChtX2luc3BlY3RvclZpZXdDb250cm9s
bGVyKSB7CisgICAgICAgIEFTU0VSVChtX29iakNBZGFwdGVyKTsKKyAgICAgICAgcmV0dXJuIFtt
X2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS5nZXQoKTsKKyAgICB9CisK
KyAgICBtX29iakNBZGFwdGVyID0gYWRvcHROUyhbW1dLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNB
ZGFwdGVyIGFsbG9jXSBpbml0V2l0aFdlYkluc3BlY3RvclVJUHJveHk6dGhpc10pOworICAgIE5T
VmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVu
dFZpZXcoKTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9i
c2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RlZFZp
ZXdGcmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24g
b2JqZWN0Omluc3BlY3RlZFZpZXddOworCisgICAgYXV0byBjb25maWd1cmF0aW9uID0gaW5zcGVj
dGVkUGFnZSgpLT51aUNsaWVudCgpLmNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3RvcigqaW5z
cGVjdGVkUGFnZSgpLCAgKnRoaXMpOworICAgIG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgPSBh
ZG9wdE5TKFtbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhDb25maWd1
cmF0aW9uOiBXZWJLaXQ6OndyYXBwZXIoY29uZmlndXJhdGlvbi5nZXQoKSkgaW5zcGVjdGVkUGFn
ZTppbnNwZWN0ZWRQYWdlKCldKTsKKyAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlci5nZXQo
KSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKKworICAgIFdlYlBhZ2VQcm94eSAq
aW5zcGVjdG9yUGFnZSA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLT5fcGFn
ZS5nZXQoKTsKKyAgICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7CisKKyAgICByZXR1cm4gaW5zcGVj
dG9yUGFnZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZy
b250ZW5kV2luZG93KCkKK3sKKyAgICBBU1NFUlQoIW1faW5zcGVjdG9yV2luZG93KTsKKworICAg
IE5TU3RyaW5nICpzYXZlZFdpbmRvd0ZyYW1lU3RyaW5nID0gaW5zcGVjdGVkUGFnZSgpLT5wYWdl
R3JvdXAoKS5wcmVmZXJlbmNlcygpLmluc3BlY3RvcldpbmRvd0ZyYW1lKCk7CisgICAgTlNSZWN0
IHNhdmVkV2luZG93RnJhbWUgPSBOU1JlY3RGcm9tU3RyaW5nKHNhdmVkV2luZG93RnJhbWVTdHJp
bmcpOworCisgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVh
dGVGcm9udGVuZFdpbmRvdyhzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6
TG9jYWwpOworICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVy
LmdldCgpXTsKKworICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyIHdlYlZpZXddOworICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBbbV9pbnNw
ZWN0b3JXaW5kb3cgY29udGVudFZpZXddOworICAgIGluc3BlY3RvclZpZXcuZnJhbWUgPSBbY29u
dGVudFZpZXcgYm91bmRzXTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzppbnNwZWN0b3JW
aWV3XTsKKworICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7CisgICAgYXBwbHlGb3Jj
ZWRBcHBlYXJhbmNlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6Y2xvc2VGcm9u
dGVuZFBhZ2UoKQoreworICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkIHx8ICFtX2luc3BlY3Rvcldp
bmRvdyk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcikgeworICAgICAgICBb
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAg
ICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0gbmlsOworICAgIH0KKworICAgIGlmIChtX29i
akNBZGFwdGVyKSB7CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKV07CisKKyAgICAgICAgW21fb2Jq
Q0FkYXB0ZXIgaW52YWxpZGF0ZV07CisgICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7CisgICAg
fQorfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbnRlbmRBZnRlckluYWN0
aXZpdHlUaW1lckZpcmVkKCkKK3sKKyAgICBjbG9zZUZyb250ZW5kUGFnZSgpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KQoreworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICBbbV9pbnNwZWN0b3JX
aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNsb3Nl
XTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7CisgICAgfQorCisgICAgbV9jbG9z
ZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RhcnRPbmVTaG90KHdlYlZpZXdDbG9zZVRp
bWVvdXQpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VG
b3JDcmFzaCgpCit7CisgICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3Rv
cCgpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIG1fY2xvc2VGcm9udGVuZEFmdGVy
SW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKKworICAgIGNsb3NlRnJvbnRlbmRQYWdlKCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1IaWRlKCkKK3sKKyAgICBpZiAobV9p
c0F0dGFjaGVkKSB7CisgICAgICAgIHBsYXRmb3JtRGV0YWNoKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAgW21faW5zcGVj
dG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBj
bG9zZV07CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOworICAgIH0KK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIGluc3Bl
Y3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5k
b3dGcmFtZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQnJpbmdU
b0Zyb250KCkKK3sKKyAgICAvLyBJZiB0aGUgV2ViIEluc3BlY3RvciBpcyBubyBsb25nZXIgaW4g
dGhlIHNhbWUgd2luZG93IGFzIHRoZSBpbnNwZWN0ZWQgdmlldywKKyAgICAvLyB0aGVuIHdlIG5l
ZWQgdG8gcmVvcGVuIHRoZSBJbnNwZWN0b3IgdG8gZ2V0IGl0IGF0dGFjaGVkIHRvIHRoZSByaWdo
dCB3aW5kb3cuCisgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gZHJhZ2dpbmcgdGFicyB0byBh
bm90aGVyIHdpbmRvdyBpbiBTYWZhcmkuCisgICAgaWYgKG1faXNBdHRhY2hlZCAmJiBbbV9pbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgIT0gaW5zcGVjdGVkUGFnZSgpLT5w
bGF0Zm9ybVdpbmRvdygpKSB7CisgICAgICAgIG9wZW4oKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMDkzNzY4OD46IHRoaXMgd2lsbCBu
b3QgYnJpbmcgYSBiYWNrZ3JvdW5kIHRhYiBpbiBTYWZhcmkgdG8gdGhlIGZyb250LCBvbmx5IGl0
cyB3aW5kb3cuCisgICAgW1ttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRv
dyBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOworICAgIFtbbV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOlttX2luc3BlY3RvclZpZXdD
b250cm9sbGVyIHdlYlZpZXddXTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQoreworICAgIFtpbnNwZWN0ZWRQYWdlKCkt
PnBsYXRmb3JtV2luZG93KCkgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKK30KKworYm9vbCBX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQoreworICAgIC8vIEZJWE1FIDxy
ZGFyOi8vcHJvYmxlbS8xMDkzNzY4OD46IHRoaXMgd2lsbCBub3QgcmV0dXJuIGZhbHNlIGZvciBh
IGJhY2tncm91bmQgdGFiIGluIFNhZmFyaSwgb25seSBhIGJhY2tncm91bmQgd2luZG93LgorICAg
IHJldHVybiBtX2lzVmlzaWJsZSAmJiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3
XS53aW5kb3cuaXNNYWluV2luZG93OworfQorCitib29sIFdlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCkKK3sKKyAgICBOU1ZpZXcg
Kmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3
KCk7CisgICAgaWYgKFtXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIHZpZXdJc0luc3BlY3Rvcldl
YlZpZXc6aW5zcGVjdGVkVmlld10pCisgICAgICAgIHJldHVybiB3ZWJQcm9jZXNzQ2FuQXR0YWNo
OworCisgICAgaWYgKGluc3BlY3RlZFZpZXcuaGlkZGVuKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwOwor
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7
CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNTAwOworCisg
ICAgTlNSZWN0IGluc3BlY3RlZFZpZXdGcmFtZSA9IGluc3BlY3RlZFZpZXcuZnJhbWU7CisKKyAg
ICBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBOU0hlaWdodChpbnNwZWN0ZWRWaWV3RnJh
bWUpICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW87CisgICAgcmV0dXJuIG1pbmltdW1BdHRh
Y2hlZEhlaWdodCA8PSBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgJiYgbWluaW11bUF0dGFjaGVkV2lk
dGggPD0gTlNXaWR0aChpbnNwZWN0ZWRWaWV3RnJhbWUpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJs
ZSkKK3sKKyAgICAvLyBEbyBub3RoaW5nLgorfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBw
ZWFyYW5jZSBhcHBlYXJhbmNlKQoreworICAgIG1fZnJvbnRlbmRBcHBlYXJhbmNlID0gYXBwZWFy
YW5jZTsKKworICAgIGFwcGx5Rm9yY2VkQXBwZWFyYW5jZSgpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVy
bFN0cmluZykKK3sKKyAgICBtX3VybFN0cmluZyA9IHVybFN0cmluZzsKKworICAgIHVwZGF0ZUlu
c3BlY3RvcldpbmRvd1RpdGxlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUlu
Zm8pCit7CisgICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUluZm8uaXNFbXB0eSgpKTsKKworICAgIFJl
dGFpblB0cjxTRkNlcnRpZmljYXRlUGFuZWw+IGNlcnRpZmljYXRlUGFuZWwgPSBhZG9wdE5TKFtb
U0ZDZXJ0aWZpY2F0ZVBhbmVsIGFsbG9jXSBpbml0XSk7CisKKyAgICBOU1dpbmRvdyAqd2luZG93
OworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAgd2luZG93ID0gbV9pbnNwZWN0
b3JXaW5kb3cuZ2V0KCk7CisgICAgZWxzZQorICAgICAgICB3aW5kb3cgPSBbW21faW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgd2ViVmlld10gd2luZG93XTsKKworICAgIGlmICghd2luZG93KQorICAg
ICAgICB3aW5kb3cgPSBbTlNBcHAga2V5V2luZG93XTsKKworI2lmIEhBVkUoU0VDX1RSVVNUX1NF
UklBTElaQVRJT04pCisgICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzp3
aW5kb3cgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpu
dWxscHRyIHRydXN0OmNlcnRpZmljYXRlSW5mby50cnVzdCgpIHNob3dHcm91cDpZRVNdOworI2Vs
c2UKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93OndpbmRvdyBtb2Rh
bERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgY2Vy
dGlmaWNhdGVzOihOU0FycmF5ICopY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSBz
aG93R3JvdXA6WUVTXTsKKyNlbmRpZgorCisgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRl
ciB0aGUgdHJ1c3QgcGFuZWwgaGFzIGJlZW4gZGlzcGxheWVkLCBiZWNhdXNlIHRoZSBjZXJ0aWZp
Y2F0ZVZpZXcgZG9lc24ndCBleGlzdCBiZWZvcmVoYW5kLgorICAgIFNGQ2VydGlmaWNhdGVWaWV3
ICpjZXJ0aWZpY2F0ZVZpZXcgPSBbY2VydGlmaWNhdGVQYW5lbCBjZXJ0aWZpY2F0ZVZpZXddOwor
ICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheVRydXN0OllFU107CisgICAgW2NlcnRpZmlj
YXRlVmlldyBzZXRFZGl0YWJsZVRydXN0Ok5PXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldERp
c3BsYXlEZXRhaWxzOllFU107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREZXRhaWxzRGlzY2xv
c2VkOllFU107Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgQVNTRVJUKCFzdWdnZXN0
ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dl
c3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOworICAgIGlmICghcGxh
dGZvcm1VUkwpIHsKKyAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpz
dWdnZXN0ZWRVUkxdOworICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVu
YW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KKyAgICAgICAgZm9yY2VTYXZlRGlhbG9n
ID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsKKyAgICBpZiAo
IXBsYXRmb3JtVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBOZWNlc3NhcnkgZm9yIHRo
ZSBibG9jayBiZWxvdy4KKyAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVS
TDsKKyAgICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50OworCisgICAgYXV0byBzYXZlVG9V
UkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKKyAgICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7CisK
KyAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwg
YWN0dWFsVVJMKTsKKworICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgeworICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IG91dDsKKyAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRD
b3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtb
TlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCld
KTsKKyAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNh
bGx5OllFU107CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRl
VG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nIGVycm9yOk5VTExdOworCisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmluZ10pKTsK
KyAgICB9OworCisgICAgaWYgKCFmb3JjZVNhdmVEaWFsb2cpIHsKKyAgICAgICAgc2F2ZVRvVVJM
KHBsYXRmb3JtVVJMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TU2F2ZVBhbmVs
ICpwYW5lbCA9IFtOU1NhdmVQYW5lbCBzYXZlUGFuZWxdOworICAgIHBhbmVsLm5hbWVGaWVsZFN0
cmluZ1ZhbHVlID0gcGxhdGZvcm1VUkwubGFzdFBhdGhDb21wb25lbnQ7CisKKyAgICAvLyBJZiB3
ZSBoYXZlIGEgZmlsZSBVUkwgd2UndmUgYWxyZWFkeSBzYXZlZCB0aGlzIGZpbGUgdG8gYSBwYXRo
IGFuZAorICAgIC8vIGNhbiBwcm92aWRlIGEgZ29vZCBkaXJlY3RvcnkgdG8gc2hvdy4gT3RoZXJ3
aXNlLCB1c2UgdGhlIHN5c3RlbSdzCisgICAgLy8gZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIGlu
aXRpYWwgZGlyZWN0b3J5IHRvIHNob3cgaW4gdGhlIGRpYWxvZy4KKyAgICBpZiAocGxhdGZvcm1V
UkwuaXNGaWxlVVJMKQorICAgICAgICBwYW5lbC5kaXJlY3RvcnlVUkwgPSBbcGxhdGZvcm1VUkwg
VVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XTsKKworICAgIGF1dG8gY29tcGxldGlvbkhh
bmRsZXIgPSBeKE5TSW50ZWdlciByZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01v
ZGFsUmVzcG9uc2VDYW5jZWwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spOworICAgICAgICBzYXZlVG9VUkwocGFuZWwuVVJM
KTsKKyAgICB9OworCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IG1faW5zcGVjdG9yV2luZG93ID8g
bV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCkgOiBbTlNBcHAga2V5V2luZG93XTsKKyAgICBpZiAod2lu
ZG93KQorICAgICAgICBbcGFuZWwgYmVnaW5TaGVldE1vZGFsRm9yV2luZG93OndpbmRvdyBjb21w
bGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgZWxzZQorICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihbcGFuZWwgcnVuTW9kYWxdKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50KQoreworICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7
CisgICAgCisgICAgUmV0YWluUHRyPE5TVVJMPiBhY3R1YWxVUkwgPSBtX3N1Z2dlc3RlZFRvQWN0
dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpOworICAgIC8vIERvIG5vdCBhcHBlbmQgdW5sZXNz
IHRoZSB1c2VyIGhhcyBhbHJlYWR5IGNvbmZpcm1lZCB0aGlzIGZpbGVuYW1lIGluIHNhdmUoKS4K
KyAgICBpZiAoIWFjdHVhbFVSTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNGaWxlSGFuZGxl
ICpoYW5kbGUgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVGb3JXcml0aW5nVG9VUkw6YWN0dWFs
VVJMLmdldCgpIGVycm9yOk5VTExdOworICAgIFtoYW5kbGUgc2Vla1RvRW5kT2ZGaWxlXTsKKyAg
ICBbaGFuZGxlIHdyaXRlRGF0YTpbY29udGVudCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ11dOworICAgIFtoYW5kbGUgY2xvc2VGaWxlXTsKKworICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVuZChbYWN0dWFsVVJM
IGFic29sdXRlU3RyaW5nXSkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OndpbmRv
d0ZyYW1lRGlkQ2hhbmdlKCkKK3sKKyAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCk7CisgICAgQVNT
RVJUKG1faXNWaXNpYmxlKTsKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOworCisgICAg
aWYgKG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUgfHwgIW1faW5zcGVjdG9yV2luZG93KQor
ICAgICAgICByZXR1cm47CisKKyAgICBOU1N0cmluZyAqZnJhbWVTdHJpbmcgPSBOU1N0cmluZ0Zy
b21SZWN0KFttX2luc3BlY3RvcldpbmRvdyBmcmFtZV0pOworICAgIGluc3BlY3RlZFBhZ2UoKS0+
cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JXaW5kb3dGcmFtZShmcmFtZVN0
cmluZyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6d2luZG93RnVsbFNjcmVlbkRp
ZENoYW5nZSgpCit7CisgICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQpOworICAgIEFTU0VSVChtX2lz
VmlzaWJsZSk7CisgICAgQVNTRVJUKG1faW5zcGVjdG9yV2luZG93KTsKKworICAgIGlmIChtX2lz
QXR0YWNoZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChwbGF0Zm9ybUNhbkF0dGFj
aChjYW5BdHRhY2goKSkpOyAgICAKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNw
ZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9uKQoreworICAg
IGlmICghbV9pc1Zpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pc0F0dGFj
aGVkKSB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhdHRhY2ggYXZhaWxhYmlsaXR5IGNoYW5n
ZWQuIFdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlIGluIGNhc2UKKyAgICAgICAgLy8gdGhlIGF0dGFj
aG1lbnQgdmlldyBpcyBub3QgdGhlIFdLVmlldy4KKyAgICAgICAgYXR0YWNoQXZhaWxhYmlsaXR5
Q2hhbmdlZChwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRhY2goKSkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0
YWNobWVudFZpZXcoKTsKKyAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0
b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKKworICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3RnJh
bWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1lOworICAgIE5TUmVjdCBvbGRJbnNwZWN0b3JWaWV3RnJh
bWUgPSBpbnNwZWN0b3JWaWV3LmZyYW1lOworICAgIE5TUmVjdCBuZXdJbnNwZWN0b3JWaWV3RnJh
bWUgPSBOU1plcm9SZWN0OworICAgIE5TUmVjdCBwYXJlbnRCb3VuZHMgPSBpbnNwZWN0ZWRWaWV3
LnN1cGVydmlldy5ib3VuZHM7CisgICAgQ0dGbG9hdCBpbnNwZWN0ZWRWaWV3VG9wID0gTlNNYXhZ
KGluc3BlY3RlZFZpZXdGcmFtZSk7CisKKyAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsK
KyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206IHsKKyAgICAgICAgaWYgKCFjdXJyZW50
RGltZW5zaW9uKQorICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TSGVpZ2h0KG9sZElu
c3BlY3RvclZpZXdGcmFtZSk7CisKKyAgICAgICAgQ0dGbG9hdCBwYXJlbnRIZWlnaHQgPSBOU0hl
aWdodChwYXJlbnRCb3VuZHMpOworICAgICAgICBDR0Zsb2F0IGluc3BlY3RvckhlaWdodCA9IElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWln
aHQoY3VycmVudERpbWVuc2lvbiwgcGFyZW50SGVpZ2h0KTsKKworICAgICAgICAvLyBQcmVzZXJ2
ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNh
ZmFyaSBzdGlsbCB3b3JrLgorICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0
KDAsIGluc3BlY3RvckhlaWdodCwgTlNXaWR0aChwYXJlbnRCb3VuZHMpLCBpbnNwZWN0ZWRWaWV3
VG9wIC0gaW5zcGVjdG9ySGVpZ2h0KTsKKyAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0g
TlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGluc3BlY3RlZFZpZXdGcmFtZSksIGluc3BlY3Rvckhl
aWdodCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6
OlJpZ2h0OiB7CisgICAgICAgIGlmICghY3VycmVudERpbWVuc2lvbikKKyAgICAgICAgICAgIGN1
cnJlbnREaW1lbnNpb24gPSBOU1dpZHRoKG9sZEluc3BlY3RvclZpZXdGcmFtZSk7CisKKyAgICAg
ICAgQ0dGbG9hdCBwYXJlbnRXaWR0aCA9IE5TV2lkdGgocGFyZW50Qm91bmRzKTsKKyAgICAgICAg
Q0dGbG9hdCBpbnNwZWN0b3JXaWR0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNv
bnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRXaWR0
aCk7CisKKyAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVj
dGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4gQnV0IGRvbid0IHVzZSB0
aGF0CisgICAgICAgIC8vIHRvcCBwb3NpdGlvbiBmb3IgdGhlIGluc3BlY3RvciB2aWV3IHNpbmNl
IHRoZSBiYW5uZXJzIG9ubHkgc3RyZXRjaCBhcyB3aWRlIGFzIHRoZSBpbnNwZWN0ZWQgdmlldy4K
KyAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBwYXJlbnRXaWR0
aCAtIGluc3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKKyAgICAgICAgbmV3SW5zcGVj
dG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdChwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCAw
LCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7CisKKyAgICAgICAgaWYg
KE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykgeworICAg
ICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2
aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBmcm9tVmll
dzpuaWxdOworICAgICAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rp
b25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3QpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6Okxl
ZnQ6IHsKKyAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQorICAgICAgICAgICAgY3VycmVu
dERpbWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKKworICAgICAgICBD
R0Zsb2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJlbnRCb3VuZHMpOworICAgICAgICBDR0Zs
b2F0IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3Ry
YWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnREaW1lbnNpb24sIHBhcmVudFdpZHRoKTsK
KworICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQg
dmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLiBCdXQgZG9uJ3QgdXNlIHRoYXQK
KyAgICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUgaW5zcGVjdG9yIHZpZXcgc2luY2UgdGhl
IGJhbm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMgdGhlIGluc3BlY3RlZCB2aWV3LgorICAg
ICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KGluc3BlY3RvcldpZHRoLCAwLCBw
YXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKKyAgICAgICAg
bmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBpbnNwZWN0b3JXaWR0aCwg
TlNIZWlnaHQocGFyZW50Qm91bmRzKSk7CisKKyAgICAgICAgaWYgKE5TV2luZG93ICppbnNwZWN0
b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykgeworICAgICAgICAgICAgTlNSZWN0IGNv
bnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omlu
c3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOworICAgICAgICAg
ICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3BlY3Rv
clZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3QpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICB9CisKKyAgICBpZiAoTlNFcXVhbFJlY3RzKG9sZEluc3BlY3RvclZpZXdG
cmFtZSwgbmV3SW5zcGVjdG9yVmlld0ZyYW1lKSAmJiBOU0VxdWFsUmVjdHMoW2luc3BlY3RlZFZp
ZXcgZnJhbWVdLCBpbnNwZWN0ZWRWaWV3RnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBEaXNhYmxlIHNjcmVlbiB1cGRhdGVzIHRvIG1ha2Ugc3VyZSB0aGUgbGF5ZXJzIGZvciBib3Ro
IHZpZXdzIHJlc2l6ZSBpbiBzeW5jLgorICAgIFtpbnNwZWN0b3JWaWV3LndpbmRvdyBkaXNhYmxl
U2NyZWVuVXBkYXRlc1VudGlsRmx1c2hdOworCisgICAgW2luc3BlY3RvclZpZXcgc2V0RnJhbWU6
bmV3SW5zcGVjdG9yVmlld0ZyYW1lXTsKKyAgICBbaW5zcGVjdGVkVmlldyBzZXRGcmFtZTppbnNw
ZWN0ZWRWaWV3RnJhbWVdOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3
ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIE5TUmVj
dCBpbnNwZWN0ZWRWaWV3UmVjdCA9IFtpbnNwZWN0ZWRWaWV3IGZyYW1lXTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluc3BlY3RlZFZpZXdSZWN0LnNpemUuaGVpZ2h0KTsKK30K
KwordW5zaWduZWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dX
aWR0aCgpCit7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5p
bnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3UmVjdCA9
IFtpbnNwZWN0ZWRWaWV3IGZyYW1lXTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGluc3BlY3RlZFZpZXdSZWN0LnNpemUud2lkdGgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
UHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKK3sKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBp
bnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgV0tXZWJWaWV3
ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107CisK
KyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93
IHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07Cisg
ICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOworICAgIH0KKworICAgIFtpbnNwZWN0b3JW
aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9u
OworICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgeworICAgIGNhc2UgQXR0YWNobWVudFNp
ZGU6OkJvdHRvbToKKyAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpO
U1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdNYXhZTWFyZ2luXTsKKyAgICAgICAgY3VycmVudERp
bWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0Ogor
ICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdodFNp
emFibGUgfCBOU1ZpZXdNaW5YTWFyZ2luXTsKKyAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGlu
c3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKKyAgICAgICAgW2luc3Bl
Y3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdIZWlnaHRTaXphYmxlIHwgTlNWaWV3
TWF4WE1hcmdpbl07CisgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0b3JQYWdlUHJl
ZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShjdXJyZW50RGltZW5zaW9uKTsK
KworICAgIFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBhZGRTdWJ2aWV3Omluc3BlY3RvclZpZXcg
cG9zaXRpb25lZDpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86aW5zcGVjdGVkVmlld107CisgICAg
W2luc3BlY3RvclZpZXcud2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjppbnNwZWN0b3JWaWV3XTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURldGFjaCgpCit7CisgICAg
TlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2ht
ZW50VmlldygpOworICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyIHdlYlZpZXddOworCisgICAgW2luc3BlY3RvclZpZXcgcmVtb3ZlRnJvbVN1
cGVydmlld107CisKKyAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmll
d1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOworCisgICAgLy8gTWFrZSBzdXJl
IHRoYXQgd2Ugc2l6ZSB0aGUgaW5zcGVjdGVkIHZpZXcncyBmcmFtZSBhZnRlciBkZXRhY2hpbmcg
c28gdGhhdCBpdCB0YWtlcyB1cCB0aGUgc3BhY2UgdGhhdCB0aGUKKyAgICAvLyBhdHRhY2hlZCBp
bnNwZWN0b3IgdXNlZCB0by4gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVj
dGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4KKworICAgIGluc3BlY3Rl
ZFZpZXcuZnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVjdGVkVmlldy5zdXBl
cnZpZXcuYm91bmRzKSwgTlNNYXhZKGluc3BlY3RlZFZpZXcuZnJhbWUpKTsKKworICAgIC8vIFJl
dHVybiBlYXJseSBpZiB3ZSBhcmUgbm90IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGluc3BlY3Rv
ciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVkCisgICAgLy8gYW5kIHdlIHNob3VsZCBub3QgY3Jl
YXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0b3Igd2luZG93LgorICAgIGlmICghbV9pc1Zpc2libGUp
CisgICAgICAgIHJldHVybjsKKworICAgIG9wZW4oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkK
K3sKKyAgICBpZiAoIW1faXNBdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5zcGVj
dGVkVmlld0ZyYW1lRGlkQ2hhbmdlKGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQorewor
ICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnNwZWN0ZWRW
aWV3RnJhbWVEaWRDaGFuZ2Uod2lkdGgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3No
ZWV0UmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1T
dGFydFdpbmRvd0RyYWcoKQoreworICAgIGlmIChhdXRvKiB3ZWJWaWV3ID0gW21faW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgd2ViVmlld10pIHsKKyAgICAgICAgaWYgKHdlYlZpZXctPl9wYWdlKQor
ICAgICAgICAgICAgd2ViVmlldy0+X3BhZ2UtPnN0YXJ0V2luZG93RHJhZygpOworICAgIH0KK30K
KworU3RyaW5nIFdlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQoreworICAg
IHJldHVybiBbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBVUkxGb3JJbnNwZWN0b3JSZXNvdXJj
ZTpAIk1haW4uaHRtbCJdLmFic29sdXRlU3RyaW5nOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9y
VUlQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQoreworICAgIHJldHVybiBbV0tJbnNwZWN0
b3JWaWV3Q29udHJvbGxlciBVUkxGb3JJbnNwZWN0b3JSZXNvdXJjZTpAIlRlc3QuaHRtbCJdLmFi
c29sdXRlU3RyaW5nOworfQorCitzdGF0aWMgTlNEaWN0aW9uYXJ5ICpzeXN0ZW1WZXJzaW9uUGxp
c3QoKQoreworICAgIE5TU3RyaW5nICpzeXN0ZW1MaWJyYXJ5UGF0aCA9IFtOU1NlYXJjaFBhdGhG
b3JEaXJlY3Rvcmllc0luRG9tYWlucyhOU0xpYnJhcnlEaXJlY3RvcnksIE5TU3lzdGVtRG9tYWlu
TWFzaywgWUVTKSBvYmplY3RBdEluZGV4OjBdOworICAgIE5TU3RyaW5nICpzeXN0ZW1WZXJzaW9u
UGxpc3RQYXRoID0gW3N5c3RlbUxpYnJhcnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAIkNvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0Il07CisgICAgTlNEaWN0aW9u
YXJ5ICpzeXN0ZW1WZXJzaW9uSW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhDb250
ZW50c09mRmlsZTpzeXN0ZW1WZXJzaW9uUGxpc3RQYXRoXTsKKyAgICByZXR1cm4gc3lzdGVtVmVy
c2lvbkluZm87Cit9CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JVSVByb3h5Ojpp
bmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKK3sKKyAgICBOU0RpY3Rpb25hcnkgKnBsaXN0ID0gc3lz
dGVtVmVyc2lvblBsaXN0KCk7CisKKyAgICBEZWJ1Z2dhYmxlSW5mb0RhdGEgcmVzdWx0OworICAg
IHJlc3VsdC5kZWJ1Z2dhYmxlVHlwZSA9IEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBh
Z2U7CisgICAgcmVzdWx0LnRhcmdldFBsYXRmb3JtTmFtZSA9ICJtYWNPUyJfczsKKyAgICByZXN1
bHQudGFyZ2V0QnVpbGRWZXJzaW9uID0gcGxpc3RbQCJQcm9kdWN0QnVpbGRWZXJzaW9uIl07Cisg
ICAgcmVzdWx0LnRhcmdldFByb2R1Y3RWZXJzaW9uID0gcGxpc3RbQCJQcm9kdWN0VXNlclZpc2li
bGVWZXJzaW9uIl07CisgICAgcmVzdWx0LnRhcmdldElzU2ltdWxhdG9yID0gZmFsc2U7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmFwcGx5Rm9y
Y2VkQXBwZWFyYW5jZSgpCit7CisgICAgTlNBcHBlYXJhbmNlICpwbGF0Zm9ybUFwcGVhcmFuY2U7
CisgICAgc3dpdGNoIChtX2Zyb250ZW5kQXBwZWFyYW5jZSkgeworICAgIGNhc2UgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2U6OlN5c3RlbToKKyAgICAgICAgcGxhdGZvcm1BcHBl
YXJhbmNlID0gbmlsOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OkFwcGVhcmFuY2U6OkxpZ2h0OgorICAgICAgICBwbGF0Zm9ybUFwcGVhcmFuY2Ug
PSBbTlNBcHBlYXJhbmNlIGFwcGVhcmFuY2VOYW1lZDpOU0FwcGVhcmFuY2VOYW1lQXF1YV07Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFy
YW5jZTo6RGFyazoKKyAgICAgICAgcGxhdGZvcm1BcHBlYXJhbmNlID0gW05TQXBwZWFyYW5jZSBh
cHBlYXJhbmNlTmFtZWQ6TlNBcHBlYXJhbmNlTmFtZURhcmtBcXVhXTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgaWYgKE5TV2luZG93ICp3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdy5n
ZXQoKSkKKyAgICAgICAgd2luZG93LmFwcGVhcmFuY2UgPSBwbGF0Zm9ybUFwcGVhcmFuY2U7CisK
KyAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS5hcHBlYXJhbmNlID0gcGxh
dGZvcm1BcHBlYXJhbmNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCA2
ZjY5ODYxNWIzZWYwYzViMzRjNTA2ZDdiODM5NmQzOTI3NGQ2MTVjLi5iMWFjZDgyNzU3ODZhODRh
ZDg3Njc0MmY4MjEwZDExZjZkMWEzYjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGll
bnQuY3BwCkBAIC0zMCwxNyArMzAsMTcgQEAKIAogI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZv
LmgiCiAjaW5jbHVkZSAiQVBJSW5zcGVjdG9yQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIlJl
bW90ZVdlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eS5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
QmFzZTY0Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBSZW1vdGVJbnNwZWN0b3JQ
cm94eSBmaW5hbCA6IHB1YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7CitjbGFz
cyBSZW1vdGVJbnNwZWN0b3JQcm94eSBmaW5hbCA6IHB1YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5Q2xpZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOwogcHVibGljOgog
ICAgIFJlbW90ZUluc3BlY3RvclByb3h5KFJlbW90ZUluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9y
Q2xpZW50LCBDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgSW5z
cGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSkKLSAgICAgICAgOiBtX3Byb3h5
KFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjcmVhdGUoKSkKKyAgICAgICAgOiBtX3Byb3h5KFJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmNyZWF0ZSgpKQogICAgICAgICAsIG1faW5zcGVjdG9y
Q2xpZW50KGluc3BlY3RvckNsaWVudCkKICAgICAgICAgLCBtX2Nvbm5lY3Rpb25JRChjb25uZWN0
aW9uSUQpCiAgICAgICAgICwgbV90YXJnZXRJRCh0YXJnZXRJRCkKQEAgLTY4LDcgKzY4LDcgQEAg
cHVibGljOgogICAgICAgICBtX3Byb3h5LT5zaG93KCk7CiAgICAgfQogCi0gICAgLy8gTUFSSzog
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgbWV0aG9kcworICAgIC8vIE1BUks6IFJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQgbWV0aG9kcwogCiAgICAgdm9pZCBzZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIHsKQEAgLTg1LDEzICs4NSwx
MyBAQCBwdWJsaWM6CiAgICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LmNsb3NlRnJvbUZyb250ZW5k
KG1fY29ubmVjdGlvbklELCBtX3RhcmdldElEKTsKICAgICB9CiAKLSAgICBSZWY8QVBJOjpJbnNw
ZWN0b3JDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uRm9yUmVtb3RlSW5zcGVjdG9yKFJlbW90
ZVdlYkluc3BlY3RvclByb3h5JikKKyAgICBSZWY8QVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9u
PiBjb25maWd1cmF0aW9uRm9yUmVtb3RlSW5zcGVjdG9yKFJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHkmKQogICAgIHsKICAgICAgICAgcmV0dXJuIEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbjo6
Y3JlYXRlKCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eT4gbV9wcm94eTsKKyAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eT4gbV9wcm94
eTsKICAgICBSZW1vdGVJbnNwZWN0b3JDbGllbnQmIG1faW5zcGVjdG9yQ2xpZW50OwogICAgIENv
bm5lY3Rpb25JRCBtX2Nvbm5lY3Rpb25JRDsKICAgICBUYXJnZXRJRCBtX3RhcmdldElEOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
d2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTM4NmU2MjAzNTRmMmEwODlhMWQyMWRkZDJmYjcwOTE2Yjc4NzI4NS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaWYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJBUElQYWdlQ29uZmlndXJhdGlvbi5o
IgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3Vw
LmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0ludFJlY3QuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBMUENUU1RSIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBURVhUKCJSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eVBvaW50ZXIiKTsKLWNvbnN0IExQQ1dTVFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlD
bGFzc05hbWUgPSBMIlJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3MiOwotCi1MUkVTVUxUIENB
TExCQUNLIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBt
c2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkqPig6OkdldFByb3AoaHduZCwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCkp
OwotCi0gICAgc3dpdGNoIChtc2cpIHsKLSAgICBjYXNlIFdNX1NJWkU6Ci0gICAgICAgIHJldHVy
biBjbGllbnQtPnNpemVDaGFuZ2UoKTsKLSAgICBjYXNlIFdNX0NMT1NFOgotICAgICAgICByZXR1
cm4gY2xpZW50LT5vbkNsb3NlKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFt
KTsKLX0KLQotc3RhdGljIEFUT00gcmVnaXN0ZXJXaW5kb3dDbGFzcygpCi17Ci0gICAgc3RhdGlj
IGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOwotICAgIGlmIChoYXZlUmVn
aXN0ZXJlZFdpbmRvd0NsYXNzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFdORENMQVNT
RVggd2NleDsKLSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4
LnN0eWxlICAgICAgICAgID0gMDsKLSAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OlduZFByb2M7Ci0gICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7Ci0g
ICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IDA7
Ci0gICAgd2NleC5oSWNvbiAgICAgICAgICA9IDA7Ci0gICAgd2NleC5oQ3Vyc29yICAgICAgICA9
IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQgID0gMDsK
LSAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0g
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWU7Ci0gICAgd2NleC5oSWNvblNtICAgICAg
ICA9IDA7Ci0KLSAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKLSAgICByZXR1
cm4gOjpSZWdpc3RlckNsYXNzRXgoJndjZXgpOwotfQotCi1MUkVTVUxUIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpzaXplQ2hhbmdlKCkKLXsKLSAgICBpZiAoIW1fd2ViVmlldykKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRl
bmRIYW5kbGUsICZyZWN0KTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXctPndpbmRvdygp
LCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJv
dHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOwotICAgIHJldHVybiAwOwotfQotCi1MUkVT
VUxUIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpvbkNsb3NlKCkKLXsKLSAgICA6OlNob3dXaW5k
b3cobV9mcm9udGVuZEhhbmRsZSwgU1dfSElERSk7Ci0gICAgZnJvbnRlbmREaWRDbG9zZSgpOwot
ICAgIHJldHVybiAwOwotfQotCi1XZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgUmVmUHRyPFdl
YlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5n
KCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOwotICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0Zp
bGVBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7Ci0KLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUp
Ci0gICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAg
cHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRy
dWUpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAgPSBXZWJQ
YWdlR3JvdXA6OmNyZWF0ZShXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlm
aWVyRm9yUGFnZShudWxscHRyKSk7Ci0KLSAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJ
OjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNl
dFByb2Nlc3NQb29sKCZXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0
b3JMZXZlbEZvclBhZ2UobnVsbHB0cikpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJl
ZmVyZW5jZXMocHJlZmVyZW5jZXMuZ2V0KCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQ
YWdlR3JvdXAocGFnZUdyb3VwLmdldCgpKTsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCg2
MCwgMjAwLCAxNTAwLCAxMDAwKTsKLSAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7Ci0gICAgbV9m
cm9udGVuZEhhbmRsZSA9IDo6Q3JlYXRlV2luZG93RXgoMCwgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCi0gICAgICAgIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCAwLCAwLCAwLCAwKTsKLQotICAg
IDo6U2V0UHJvcChtX2Zyb250ZW5kSGFuZGxlLCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50
ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOwotICAgIFNob3dXaW5kb3co
bV9mcm9udGVuZEhhbmRsZSwgU1dfU0hPVyk7Ci0KLSAgICBSRUNUIHI7Ci0gICAgOjpHZXRDbGll
bnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZyKTsKLSAgICBtX3dlYlZpZXcgPSBXZWJWaWV3Ojpj
cmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24sIG1fZnJvbnRlbmRIYW5kbGUpOwotICAgIHJldHVy
biBtX3dlYlZpZXctPnBhZ2UoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1SZXNldFN0YXRlKCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUJyaW5nVG9Gcm9udCgpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpIHsg
fQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSkgeyB9Ci12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpIHsgfQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShjb25zdCBT
dHJpbmcmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0Nl
cnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIHsgfQotCi12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCkKLXsKLSAgICA6OkRlc3Ryb3lXaW5kb3cobV9mcm9udGVuZEhhbmRsZSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5V2luLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTZm
M2FmMzlmNjY5MGI2MWEyNThhNTZlZmY2ZDI4MjczMjFkMzU0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5V2luLmNwcApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oIgorCisj
aWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJBUElQYWdlQ29uZmlndXJh
dGlvbi5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJWaWV3
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIExQ
Q1RTVFIgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eVBvaW50ZXJQcm9wID0gVEVYVCgiUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eVBvaW50ZXIiKTsKK2NvbnN0IExQQ1dTVFIgUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eUNsYXNzTmFtZSA9IEwiUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNsYXNz
IjsKKworTFJFU1VMVCBDQUxMQkFDSyBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpXbmRQcm9j
KEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7Cisg
ICAgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Kj4oOjpHZXRQcm9wKGh3bmQsIFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHlQb2ludGVyUHJvcCkpOworCisgICAgc3dpdGNoIChtc2cpIHsKKyAgICBjYXNl
IFdNX1NJWkU6CisgICAgICAgIHJldHVybiBjbGllbnQtPnNpemVDaGFuZ2UoKTsKKyAgICBjYXNl
IFdNX0NMT1NFOgorICAgICAgICByZXR1cm4gY2xpZW50LT5vbkNsb3NlKCk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyho
d25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKK30KKworc3RhdGljIEFUT00gcmVnaXN0ZXJXaW5k
b3dDbGFzcygpCit7CisgICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9
IGZhbHNlOworICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIFdORENMQVNTRVggd2NleDsKKyAgICB3Y2V4LmNiU2l6ZSA9IHNpemVv
ZihXTkRDTEFTU0VYKTsKKyAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gMDsKKyAgICB3Y2V4Lmxw
Zm5XbmRQcm9jICAgID0gUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6V25kUHJvYzsKKyAgICB3
Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKKyAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKKyAg
ICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gMDsKKyAgICB3Y2V4LmhJY29uICAgICAgICAgID0gMDsK
KyAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOworICAg
IHdjZXguaGJyQmFja2dyb3VuZCAgPSAwOworICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSAwOwor
ICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xhc3NO
YW1lOworICAgIHdjZXguaEljb25TbSAgICAgICAgPSAwOworCisgICAgaGF2ZVJlZ2lzdGVyZWRX
aW5kb3dDbGFzcyA9IHRydWU7CisgICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsK
K30KKworTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpzaXplQ2hhbmdlKCkKK3sK
KyAgICBpZiAoIW1fd2ViVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSRUNUIHJlY3Q7
CisgICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZyZWN0KTsKKyAgICA6OlNl
dFdpbmRvd1BvcyhtX3dlYlZpZXctPndpbmRvdygpLCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCBy
ZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JE
RVIpOworICAgIHJldHVybiAwOworfQorCitMUkVTVUxUIFJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk6Om9uQ2xvc2UoKQoreworICAgIDo6U2hvd1dpbmRvdyhtX2Zyb250ZW5kSGFuZGxlLCBTV19I
SURFKTsKKyAgICBmcm9udGVuZERpZENsb3NlKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1dlYlBh
Z2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKQoreworICAgIFJlZlB0cjxXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5j
ZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0
Mi4iKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKHRy
dWUpOworCisjaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQorICAgIHByZWZlcmVuY2VzLT5zZXRE
ZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFn
ZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorCisgICAgUmVm
UHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoV2ViS2l0
OjpkZWZhdWx0SW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UobnVsbHB0cikpOwor
CisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNy
ZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmV2ViS2l0Ojpk
ZWZhdWx0SW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKG51bGxwdHIp
KSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLmdl
dCgpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5nZXQo
KSk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoNjAsIDIwMCwgMTUwMCwgMTAwMCk7Cisg
ICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgIG1fZnJvbnRlbmRIYW5kbGUgPSA6OkNyZWF0
ZVdpbmRvd0V4KDAsIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGFzc05hbWUsIDAsIFdTX09W
RVJMQVBQRURXSU5ET1csCisgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpLCAwLCAwLCAwLCAwKTsKKworICAgIDo6U2V0UHJvcChtX2Zyb250ZW5k
SGFuZGxlLCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0
X2Nhc3Q8SEFORExFPih0aGlzKSk7CisgICAgU2hvd1dpbmRvdyhtX2Zyb250ZW5kSGFuZGxlLCBT
V19TSE9XKTsKKworICAgIFJFQ1QgcjsKKyAgICA6OkdldENsaWVudFJlY3QobV9mcm9udGVuZEhh
bmRsZSwgJnIpOworICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZShyLCBwYWdlQ29uZmln
dXJhdGlvbiwgbV9mcm9udGVuZEhhbmRsZSk7CisgICAgcmV0dXJuIG1fd2ViVmlldy0+cGFnZSgp
OworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0
ZSgpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nVG9G
cm9udCgpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Cit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNl
dFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJp
bmcmKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TaG93Q2Vy
dGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikgeyB9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRv
dygpCit7CisgICAgOjpEZXN0cm95V2luZG93KG1fZnJvbnRlbmRIYW5kbGUpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNw
ZWN0b3JQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2lu
L1dlYkluc3BlY3RvclByb3h5V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MTY4ZDIwNzhjMzdmMDUzNTA0N2RiMTlhNGJkODI0ODhlZWY1OTQ0YS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDQ1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKLSNp
bmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3Vy
YXRpb24uaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgotI2luY2x1ZGUgIldlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0jaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250
ZW5kQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvV2ViQ29yZUJ1bmRsZVdpbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUluc3Rh
bmNlSGFuZGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIu
aD4KLSNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlLmg+Ci0KLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8
d3RmL2NmL0NGVVJMRXh0cmFzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0
YXRpYyBjb25zdCBMUENXU1RSIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBMIldlYklu
c3BlY3RvclByb3h5UG9pbnRlciI7Ci1zdGF0aWMgY29uc3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JQ
cm94eUNsYXNzTmFtZSA9IEwiV2ViSW5zcGVjdG9yUHJveHlDbGFzcyI7Ci0KLXN0cnVjdCBJbnNw
ZWN0ZWRXaW5kb3dJbmZvIHsKLSAgICBpbnQgbGVmdDsKLSAgICBpbnQgdG9wOwotICAgIGludCB2
aWV3V2lkdGg7Ci0gICAgaW50IHZpZXdIZWlnaHQ7Ci0gICAgaW50IHBhcmVudFdpZHRoOwotICAg
IGludCBwYXJlbnRIZWlnaHQ7Ci19OwotCi1zdGF0aWMgSW5zcGVjdGVkV2luZG93SW5mbyBnZXRJ
bnNwZWN0ZWRXaW5kb3dJbmZvKEhXTkQgaW5zcGVjdGVkV2luZG93LCBIV05EIHBhcmVudFdpbmRv
dykKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KGluc3BlY3RlZFdpbmRv
dywgJnJlY3QpOwotICAgIDo6TWFwV2luZG93UG9pbnRzKGluc3BlY3RlZFdpbmRvdywgcGFyZW50
V2luZG93LCAoTFBQT0lOVCkmcmVjdCwgMik7Ci0KLSAgICBSRUNUIHBhcmVudFJlY3Q7Ci0gICAg
OjpHZXRDbGllbnRSZWN0KHBhcmVudFdpbmRvdywgJnBhcmVudFJlY3QpOwotICAgIHJldHVybiB7
IHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9t
IC0gcmVjdC50b3AsIHBhcmVudFJlY3QucmlnaHQgLSBwYXJlbnRSZWN0LmxlZnQsIHBhcmVudFJl
Y3QuYm90dG9tIC0gcGFyZW50UmVjdC50b3AgfTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSwgTFBB
UkFNIGxQYXJhbSkKLXsKLSAgICBzd2l0Y2ggKG1zZykgewotICAgIGNhc2UgV01fV0lORE9XUE9T
Q0hBTkdJTkc6IHsKLSAgICAgICAgaWYgKCFtX2lzQXR0YWNoZWQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgYXV0byB3aW5kb3dQb3MgPSByZWludGVycHJldF9jYXN0PFdJTkRPV1BP
Uyo+KGxQYXJhbSk7Ci0KLSAgICAgICAgaWYgKHdpbmRvd1Bvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpF
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEhXTkQgcGFyZW50ID0gR2V0UGFyZW50
KGh3bmQpOwotICAgICAgICBSRUNUIHBhcmVudFJlY3Q7Ci0gICAgICAgIEdldENsaWVudFJlY3Qo
cGFyZW50LCAmcGFyZW50UmVjdCk7Ci0KLSAgICAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OwotICAg
ICAgICBHZXRDbGllbnRSZWN0KG1faW5zcGVjdG9yVmlld1dpbmRvdywgJmluc3BlY3RvclJlY3Qp
OwotCi0gICAgICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewotICAgICAgICBjYXNlIEF0
dGFjaG1lbnRTaWRlOjpCb3R0b206IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3Rvckhl
aWdodCA9IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVk
QXR0YWNoZWRXaW5kb3dIZWlnaHQoaW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0
LnRvcCwgd2luZG93UG9zLT5jeSk7Ci0gICAgICAgICAgICB3aW5kb3dQb3MtPmN5IC09IGluc3Bl
Y3RvckhlaWdodDsKLSAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dp
bmRvdywgMCwgd2luZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5k
b3dQb3MtPmN4LCBpbnNwZWN0b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgotICAg
ICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDogewotICAgICAgICAgICAgdW5zaWduZWQg
aW5zcGVjdG9yV2lkdGggPSBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpj
b25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoaW5zcGVjdG9yUmVjdC5yaWdodCAtIGluc3Bl
Y3RvclJlY3QubGVmdCwgd2luZG93UG9zLT5jeCk7Ci0gICAgICAgICAgICB3aW5kb3dQb3MtPmN4
IC09IGluc3BlY3RvcldpZHRoOwotICAgICAgICAgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0
b3JWaWV3V2luZG93LCAwLCB3aW5kb3dQb3MtPnggKyB3aW5kb3dQb3MtPmN4LCB3aW5kb3dQb3Mt
PnksIGluc3BlY3RvcldpZHRoLCB3aW5kb3dQb3MtPmN5LCBTV1BfTk9aT1JERVIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yUHJv
eHk6OnduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkKLXsKLSAgICBXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2Fz
dDxXZWJJbnNwZWN0b3JQcm94eSo+KDo6R2V0UHJvcChod25kLCBXZWJJbnNwZWN0b3JQcm94eVBv
aW50ZXJQcm9wKSk7Ci0gICAgc3dpdGNoIChtc2cpIHsKLSAgICBjYXNlIFdNX1NJWkU6Ci0gICAg
ICAgIDo6U2V0V2luZG93UG9zKGNsaWVudC0+bV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAw
LCBMT1dPUkQobFBhcmFtKSwgSElXT1JEKGxQYXJhbSksIFNXUF9OT1pPUkRFUik7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIGNhc2UgV01fQ0xPU0U6Ci0gICAgICAgIGNsaWVudC0+Y2xvc2UoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Ci19
Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnJlZ2lzdGVyV2luZG93Q2xhc3MoKQotewotICAg
IHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKLQotICAgIGlm
IChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBo
YXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKLQotICAgIFdORENMQVNTRVggd2NleDsK
LSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4LnN0eWxlID0g
MDsKLSAgICB3Y2V4LmxwZm5XbmRQcm9jID0gd25kUHJvYzsKLSAgICB3Y2V4LmNiQ2xzRXh0cmEg
PSAwOwotICAgIHdjZXguY2JXbmRFeHRyYSA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgPSBXZWJD
b3JlOjppbnN0YW5jZUhhbmRsZSgpOwotICAgIHdjZXguaEljb24gPSAwOwotICAgIHdjZXguaEN1
cnNvciA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQg
PSAwOwotICAgIHdjZXgubHBzek1lbnVOYW1lID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUg
PSBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZTsKLSAgICB3Y2V4LmhJY29uU20gPSAwOwotICAg
IHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTmF2aWdhdGlv
bkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYg
bGlzdGVuZXJSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICAv
LyBBbGxvdyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCi0gICAgQVBJOjpG
cmFtZUluZm8qIHNvdXJjZUZyYW1lID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zb3Vy
Y2VGcmFtZSgpOwotICAgIGlmIChzb3VyY2VGcmFtZSAmJiAhc291cmNlRnJhbWUtPmlzTWFpbkZy
YW1lKCkpIHsKLSAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVj
dG9yUHJveHkgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJbnNwZWN0b3JQcm94eSo+KGNsaWVudElu
Zm8pOwotICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Ci0KLSAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVz
dCgpOwotCi0gICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4K
LSAgICBpZiAoV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVx
dWVzdC51cmwoKSkpIHsKLSAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBm
cm9tIGxvYWRpbmcgaW4gdGhlIGluc3BlY3RvcidzIHBhZ2UuCi0gICAgdG9JbXBsKGxpc3RlbmVy
UmVmKS0+aWdub3JlKCk7Ci0KLSAgICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNw
ZWN0ZWQgcGFnZS4KLSAgICB3ZWJJbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkUGFnZSgpLT5sb2Fk
UmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKLX0KLQotc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0Rp
ZENyYXNoKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXZWJJbnNw
ZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQ
cm94eSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKLSAgICBBU1NFUlQod2ViSW5z
cGVjdG9yUHJveHkpOwotICAgIHdlYkluc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Ci19
Ci0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRl
bmRQYWdlKCkKLXsKLSAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsKLQotICAgIGF1dG8gcHJl
ZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAi
V2ViS2l0Mi4iKTsKLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgLy8gQWxsb3cgZGV2
ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRo
b3V0IGNoYW5naW5nIHNldHRpbmdzLgotICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRy
YXNFbmFibGVkKHRydWUpOwotICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9T
eXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotICAgIHByZWZlcmVuY2VzLT5zZXRB
bGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldEph
dmFTY3JpcHRSdW50aW1lRmxhZ3MoeyB9KTsKLSAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VH
cm91cDo6Y3JlYXRlKFdlYktpdDo6ZGVmYXVsdEluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJG
b3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOwotICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBB
UEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+
c2V0UHJvY2Vzc1Bvb2woJldlYktpdDo6ZGVmYXVsdEluc3BlY3RvclByb2Nlc3NQb29sKGluc3Bl
Y3Rpb25MZXZlbCgpKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHBy
ZWZlcmVuY2VzLnB0cigpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBh
Z2VHcm91cC5wdHIoKSk7Ci0KLSAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjAgbmF2aWdhdGlv
bkNsaWVudCA9IHsKLSAgICAgICAgeyAwLCB0aGlzIH0sCi0gICAgICAgIGRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24sCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25SZXNwb25zZQotICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JQbHVn
aW5Mb2FkCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9u
Ci0gICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lv
bmFsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxOYXZp
Z2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZENvbW1pdE5hdmlnYXRpb24KLSAgICAgICAg
bnVsbHB0ciwgLy8gZGlkRmluaXNoTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRG
YWlsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
SW5TdWJmcmFtZQotICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hEb2N1bWVudExvYWQKLSAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbgotICAgICAgICBudWxs
cHRyLCAvLyByZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZQotICAgICAgICBudWxscHRyLCAvLyBj
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlCi0gICAgICAgIG51bGxwdHIsIC8v
IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQotICAgICAgICB3ZWJQcm9jZXNzRGlk
Q3Jhc2gsCi0gICAgICAgIG51bGxwdHIsIC8vIGNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkKLQotICAg
ICAgICBudWxscHRyLCAvLyBkaWRCZWdpbk5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxw
dHIsIC8vIHdpbGxFbmROYXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBudWxscHRyLCAvLyBkaWRF
bmROYXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBudWxscHRyLCAvLyBkaWRSZW1vdmVOYXZpZ2F0
aW9uR2VzdHVyZVNuYXBzaG90Ci0gICAgfTsKLQotICAgIFJFQ1QgciA9IHsgMCwgMCwgc3RhdGlj
X2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd1dpZHRoKSwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlh
bFdpbmRvd0hlaWdodCkgfTsKLSAgICBhdXRvIHBhZ2UgPSBpbnNwZWN0ZWRQYWdlKCk7Ci0gICAg
bV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gcGFnZS0+dmlld1dpZGdldCgpOwotICAgIG1faW5zcGVj
dGVkVmlld1BhcmVudFdpbmRvdyA9IDo6R2V0UGFyZW50KG1faW5zcGVjdGVkVmlld1dpbmRvdyk7
Ci0gICAgYXV0byB2aWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VDb25maWd1cmF0aW9uLCBt
X2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIG1faW5zcGVjdG9yVmlldyA9ICZ2aWV3
LmxlYWtSZWYoKTsKLSAgICBhdXRvIGluc3BlY3RvclBhZ2UgPSBtX2luc3BlY3RvclZpZXctPnBh
Z2UoKTsKLSAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cgPSBpbnNwZWN0b3JQYWdlLT52aWV3V2lk
Z2V0KCk7Ci0gICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQodG9BUEkoaW5zcGVjdG9y
UGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOwotCi0gICAgcmV0dXJuIGluc3BlY3RvclBh
Z2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBh
Z2VBbmRXaW5kb3coKQotewotICAgIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6
cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKLSAgICBtX2luc3Bl
Y3RvclZpZXcgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7Ci0gICAg
aWYgKG1faW5zcGVjdG9yVmlld1dpbmRvdykgewotICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9p
bnNwZWN0b3JWaWV3V2luZG93KTsKLSAgICAgICAgbV9pbnNwZWN0b3JWaWV3V2luZG93ID0gbnVs
bHB0cjsKLSAgICB9Ci0gICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7Ci0gICAgICAg
IDo6UmVtb3ZlUHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgV2ViSW5zcGVjdG9yUHJveHlQ
b2ludGVyUHJvcCk7Ci0gICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2luc3BlY3RvckRldGFjaFdp
bmRvdyk7Ci0gICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0gbnVsbHB0cjsKLSAgICB9
Ci0gICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gbnVsbHB0cjsKLSAgICBtX2luc3BlY3RlZFZp
ZXdQYXJlbnRXaW5kb3cgPSBudWxscHRyOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6
Omluc3BlY3RvclBhZ2VVUkwoKQotewotI2lmIFVTRShDRikKLSAgICBSZXRhaW5QdHI8Q0ZVUkxS
ZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6
OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiTWFpbiIpLCBDRlNUUigiaHRtbCIpLCBDRlNUUigiV2Vi
SW5zcGVjdG9yVUkiKSkpOwotICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdl
dCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIHsgfTsKLSNlbmRpZgotfQotCi1TdHJpbmcgV2ViSW5z
cGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKLXsKLSNpZiBVU0UoQ0YpCi0gICAg
UmV0YWluUHRyPENGVVJMUmVmPiBodG1sVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNv
dXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIlRlc3QiKSwgQ0ZTVFIoImh0
bWwiKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIikpKTsKLSAgICByZXR1cm4gQ0ZVUkxHZXRTdHJp
bmcoaHRtbFVSTFJlZi5nZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiB7IH07Ci0jZW5kaWYKLX0K
LQotRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9jYWxEZWJ1
Z2dhYmxlKCkKLXsKLSAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM3Pjog
dGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YS4KLSAgICByZXR1cm4gRGVidWdnYWJs
ZUluZm9EYXRhOjplbXB0eSgpOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewotICAgIFJFQ1QgcmVjdDsKLSAgICA6Okdl
dENsaWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7Ci0gICAgcmV0dXJuIHJl
Y3QuYm90dG9tIC0gcmVjdC50b3A7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpH
ZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywgJnJlY3QpOwotICAgIHJldHVybiBy
ZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUF0dGFjaCgpCi17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hl
ZFNpemUgPSAzMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZFdp
ZHRoID0gNzUwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRIZWln
aHQgPSAyNTA7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgJiYgOjpHZXRQYXJl
bnQobV9pbnNwZWN0b3JWaWV3V2luZG93KSA9PSBtX2luc3BlY3RvckRldGFjaFdpbmRvdykgewot
ICAgICAgICA6OlNldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmll
d1BhcmVudFdpbmRvdyk7Ci0gICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvckRldGFjaFdp
bmRvdywgU1dfSElERSk7Ci0gICAgfQotCi0gICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2Fk
Y2FzdGVyOjphZGRMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOwotCi0gICAg
aWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSkgewotICAgICAg
ICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRv
d0hlaWdodCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNo
ZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
dW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dp
ZHRoKCkgKiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHN0
ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXpl
LCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKLSAgICB9Ci0gICAgOjpTaG93V2luZG93KG1faW5z
cGVjdG9yVmlld1dpbmRvdywgU1dfU0hPVyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKS0+aGFzUnVubmlu
Z1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2luc3BlY3RvckRldGFj
aFdpbmRvdykgewotICAgICAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7Ci0gICAgICAgIG1faW5z
cGVjdG9yRGV0YWNoV2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBXZWJJbnNwZWN0b3JQcm94
eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKLSAgICAgICAgICAgIENXX1VTRURF
RkFVTFQsIENXX1VTRURFRkFVTFQsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hl
aWdodCwKLSAgICAgICAgICAgIDAsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCksIDApOwot
ICAgICAgICA6OlNldFByb3AobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFdlYkluc3BlY3RvclBy
b3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7Ci0gICAgfQot
Ci0gICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjpyZW1vdmVMaXN0ZW5lciht
X2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOwotCi0gICAgUkVDVCByZWN0OwotICAgIDo6R2V0
Q2xpZW50UmVjdChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgJnJlY3QpOwotICAgIGF1dG8gd2lu
ZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBt
X2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIDo6U2V0UGFyZW50KG1faW5zcGVjdG9y
Vmlld1dpbmRvdywgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpOwotICAgIDo6U2V0V2luZG93UG9z
KG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwg
cmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKLSAgICA6OlNldFdpbmRvd1Bv
cyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50
b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8u
cGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Ci0KLSAgICBpZiAo
bV9pc1Zpc2libGUpCi0gICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRv
dywgU1dfU0hPVyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGF1dG8gd2luZG93SW5m
byA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3Bl
Y3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmll
d1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIGhl
aWdodCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgaGVpZ2h0LCBT
V1BfTk9aT1JERVIpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywg
MCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0
aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZv
LnRvcCwgU1dQX05PWk9SREVSKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGF1dG8gd2lu
ZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBt
X2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVj
dG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpZHRoLCB3aW5kb3dJ
bmZvLnRvcCwgd2lkdGgsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3As
IFNXUF9OT1pPUkRFUik7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3V2luZG93
LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5kb3dJbmZvLnBhcmVudFdp
ZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0lu
Zm8udG9wLCBTV1BfTk9aT1JERVIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9u
dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OkFwcGVhcmFuY2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYg
LyogdXJsICovKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2ws
IGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCAvKiBhdmFpbGFibGUgKi8pCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1D
cmVhdGVGcm9udGVuZFdpbmRvdygpCi17Ci0gICAgcGxhdGZvcm1EZXRhY2goKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlu
dmFsaWRhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3Ivd2luL1dlYkluc3BlY3RvclVJUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JVSVByb3h5V2luLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
ZjdiODE5YTJiNzdiZjMzNTMxZjhhOTFhZjdmZTZkNDM1NDNmZGQ1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JVSVBy
b3h5V2luLmNwcApAQCAtMCwwICsxLDQ1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHkuaCIKKworI2luY2x1ZGUgIkFQ
SU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCisjaW5jbHVk
ZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgor
I2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUgIldlYlBh
Z2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZl
cmVuY2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJWaWV3
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUJ1bmRsZVdpbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvV2ViQ29yZUluc3RhbmNlSGFuZGxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dN
ZXNzYWdlQnJvYWRjYXN0ZXIuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlLmg+CisKKyNpZiBV
U0UoQ0YpCisjaW5jbHVkZSA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3N0YXRpYyBjb25zdCBMUENXU1RSIFdlYkluc3BlY3RvclVJUHJveHlQ
b2ludGVyUHJvcCA9IEwiV2ViSW5zcGVjdG9yVUlQcm94eVBvaW50ZXIiOworc3RhdGljIGNvbnN0
IExQQ1dTVFIgV2ViSW5zcGVjdG9yVUlQcm94eUNsYXNzTmFtZSA9IEwiV2ViSW5zcGVjdG9yVUlQ
cm94eUNsYXNzIjsKKworc3RydWN0IEluc3BlY3RlZFdpbmRvd0luZm8geworICAgIGludCBsZWZ0
OworICAgIGludCB0b3A7CisgICAgaW50IHZpZXdXaWR0aDsKKyAgICBpbnQgdmlld0hlaWdodDsK
KyAgICBpbnQgcGFyZW50V2lkdGg7CisgICAgaW50IHBhcmVudEhlaWdodDsKK307CisKK3N0YXRp
YyBJbnNwZWN0ZWRXaW5kb3dJbmZvIGdldEluc3BlY3RlZFdpbmRvd0luZm8oSFdORCBpbnNwZWN0
ZWRXaW5kb3csIEhXTkQgcGFyZW50V2luZG93KQoreworICAgIFJFQ1QgcmVjdDsKKyAgICA6Okdl
dENsaWVudFJlY3QoaW5zcGVjdGVkV2luZG93LCAmcmVjdCk7CisgICAgOjpNYXBXaW5kb3dQb2lu
dHMoaW5zcGVjdGVkV2luZG93LCBwYXJlbnRXaW5kb3csIChMUFBPSU5UKSZyZWN0LCAyKTsKKwor
ICAgIFJFQ1QgcGFyZW50UmVjdDsKKyAgICA6OkdldENsaWVudFJlY3QocGFyZW50V2luZG93LCAm
cGFyZW50UmVjdCk7CisgICAgcmV0dXJuIHsgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdo
dCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgcGFyZW50UmVjdC5yaWdodCAt
IHBhcmVudFJlY3QubGVmdCwgcGFyZW50UmVjdC5ib3R0b20gLSBwYXJlbnRSZWN0LnRvcCB9Owor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OndpbmRvd1JlY2VpdmVkTWVzc2FnZShIV05E
IGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgc3dpdGNoICht
c2cpIHsKKyAgICBjYXNlIFdNX1dJTkRPV1BPU0NIQU5HSU5HOiB7CisgICAgICAgIGlmICghbV9p
c0F0dGFjaGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gd2luZG93UG9z
ID0gcmVpbnRlcnByZXRfY2FzdDxXSU5ET1dQT1MqPihsUGFyYW0pOworCisgICAgICAgIGlmICh3
aW5kb3dQb3MtPmZsYWdzICYgU1dQX05PU0laRSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBIV05EIHBhcmVudCA9IEdldFBhcmVudChod25kKTsKKyAgICAgICAgUkVDVCBwYXJlbnRS
ZWN0OworICAgICAgICBHZXRDbGllbnRSZWN0KHBhcmVudCwgJnBhcmVudFJlY3QpOworCisgICAg
ICAgIFJFQ1QgaW5zcGVjdG9yUmVjdDsKKyAgICAgICAgR2V0Q2xpZW50UmVjdChtX2luc3BlY3Rv
clZpZXdXaW5kb3csICZpbnNwZWN0b3JSZWN0KTsKKworICAgICAgICBzd2l0Y2ggKG1fYXR0YWNo
bWVudFNpZGUpIHsKKyAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOiB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpbnNwZWN0b3JIZWlnaHQgPSBXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGluc3BlY3Rv
clJlY3QuYm90dG9tIC0gaW5zcGVjdG9yUmVjdC50b3AsIHdpbmRvd1Bvcy0+Y3kpOworICAgICAg
ICAgICAgd2luZG93UG9zLT5jeSAtPSBpbnNwZWN0b3JIZWlnaHQ7CisgICAgICAgICAgICA6OlNl
dFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93
UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBT
V1BfTk9aT1JERVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKKyAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Umln
aHQ6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3RvcldpZHRoID0gV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRo
KGluc3BlY3RvclJlY3QucmlnaHQgLSBpbnNwZWN0b3JSZWN0LmxlZnQsIHdpbmRvd1Bvcy0+Y3gp
OworICAgICAgICAgICAgd2luZG93UG9zLT5jeCAtPSBpbnNwZWN0b3JXaWR0aDsKKyAgICAgICAg
ICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93UG9zLT54
ICsgd2luZG93UG9zLT5jeCwgd2luZG93UG9zLT55LCBpbnNwZWN0b3JXaWR0aCwgd2luZG93UG9z
LT5jeSwgU1dQX05PWk9SREVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitMUkVT
VUxUIENBTExCQUNLIFdlYkluc3BlY3RvclVJUHJveHk6OnduZFByb2MoSFdORCBod25kLCBVSU5U
IG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBXZWJJbnNwZWN0b3JV
SVByb3h5KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFdlYkluc3BlY3RvclVJUHJveHkqPig6
OkdldFByb3AoaHduZCwgV2ViSW5zcGVjdG9yVUlQcm94eVBvaW50ZXJQcm9wKSk7CisgICAgc3dp
dGNoIChtc2cpIHsKKyAgICBjYXNlIFdNX1NJWkU6CisgICAgICAgIDo6U2V0V2luZG93UG9zKGNs
aWVudC0+bV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCBMT1dPUkQobFBhcmFtKSwgSElX
T1JEKGxQYXJhbSksIFNXUF9OT1pPUkRFUik7CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2Ug
V01fQ0xPU0U6CisgICAgICAgIGNsaWVudC0+Y2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiA6OkRlZldpbmRv
d1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9y
VUlQcm94eTo6cmVnaXN0ZXJXaW5kb3dDbGFzcygpCit7CisgICAgc3RhdGljIGJvb2wgaGF2ZVJl
Z2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOworCisgICAgaWYgKGhhdmVSZWdpc3RlcmVkV2lu
ZG93Q2xhc3MpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGhhdmVSZWdpc3RlcmVkV2luZG93
Q2xhc3MgPSB0cnVlOworCisgICAgV05EQ0xBU1NFWCB3Y2V4OworICAgIHdjZXguY2JTaXplID0g
c2l6ZW9mKFdORENMQVNTRVgpOworICAgIHdjZXguc3R5bGUgPSAwOworICAgIHdjZXgubHBmbldu
ZFByb2MgPSB3bmRQcm9jOworICAgIHdjZXguY2JDbHNFeHRyYSA9IDA7CisgICAgd2NleC5jYldu
ZEV4dHJhID0gMDsKKyAgICB3Y2V4LmhJbnN0YW5jZSA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxl
KCk7CisgICAgd2NleC5oSWNvbiA9IDA7CisgICAgd2NleC5oQ3Vyc29yID0gTG9hZEN1cnNvcigw
LCBJRENfQVJST1cpOworICAgIHdjZXguaGJyQmFja2dyb3VuZCA9IDA7CisgICAgd2NleC5scHN6
TWVudU5hbWUgPSAwOworICAgIHdjZXgubHBzekNsYXNzTmFtZSA9IFdlYkluc3BlY3RvclVJUHJv
eHlDbGFzc05hbWU7CisgICAgd2NleC5oSWNvblNtID0gMDsKKyAgICByZXR1cm4gOjpSZWdpc3Rl
ckNsYXNzRXgoJndjZXgpOworfQorCitzdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKFdLUGFnZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdh
dGlvbkFjdGlvblJlZiwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBXS1R5
cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgLy8gQWxsb3cgbm9uLW1haW4g
ZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgorICAgIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VG
cmFtZSA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+c291cmNlRnJhbWUoKTsKKyAgICBp
ZiAoc291cmNlRnJhbWUgJiYgIXNvdXJjZUZyYW1lLT5pc01haW5GcmFtZSgpKSB7CisgICAgICAg
IHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY29uc3QgV2ViSW5zcGVjdG9yVUlQcm94eSogV2ViSW5zcGVjdG9yVUlQcm94eSA9IHN0
YXRpY19jYXN0PGNvbnN0IFdlYkluc3BlY3RvclVJUHJveHkqPihjbGllbnRJbmZvKTsKKyAgICBB
U1NFUlQoV2ViSW5zcGVjdG9yVUlQcm94eSk7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QgcmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVzdCgpOworCisg
ICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KKyAgICBpZiAo
V2ViSW5zcGVjdG9yVUlQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShyZXF1ZXN0LnVy
bCgpKSkgeworICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFByZXZlbnQgZXZlcnl0aGluZyBlbHNlIGZyb20gbG9h
ZGluZyBpbiB0aGUgaW5zcGVjdG9yJ3MgcGFnZS4KKyAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT5p
Z25vcmUoKTsKKworICAgIC8vIEFuZCBpbnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBw
YWdlLgorICAgIFdlYkluc3BlY3RvclVJUHJveHktPmluc3BlY3RlZFBhZ2UoKS0+bG9hZFJlcXVl
c3QoV1RGTW92ZShyZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlByb2Nlc3NEaWRDcmFz
aChXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgV2ViSW5zcGVjdG9y
VUlQcm94eSogV2ViSW5zcGVjdG9yVUlQcm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclVJ
UHJveHkqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgQVNTRVJUKFdlYklu
c3BlY3RvclVJUHJveHkpOworICAgIFdlYkluc3BlY3RvclVJUHJveHktPmNsb3NlRm9yQ3Jhc2go
KTsKK30KKworV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0
ZUZyb250ZW5kUGFnZSgpCit7CisgICAgQVNTRVJUKGluc3BlY3RlZFBhZ2UoKSk7CisKKyAgICBh
dXRvIHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktp
dDIuIiwgIldlYktpdDIuIik7CisjaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQorICAgIC8vIEFs
bG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWls
ZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KKyAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxv
cGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNz
YWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7CisjZW5kaWYKKyAgICBwcmVmZXJlbmNl
cy0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKHRydWUpOworICAgIHByZWZlcmVuY2Vz
LT5zZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKHsgfSk7CisgICAgYXV0byBwYWdlR3JvdXAgPSBX
ZWJQYWdlR3JvdXA6OmNyZWF0ZShXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQYWdlR3JvdXBJZGVu
dGlmaWVyRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpKTsKKyAgICBhdXRvIHBhZ2VDb25maWd1cmF0
aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgcGFnZUNvbmZpZ3Vy
YXRpb24tPnNldFByb2Nlc3NQb29sKCZXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQcm9jZXNzUG9v
bChpbnNwZWN0aW9uTGV2ZWwoKSkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJl
bmNlcyhwcmVmZXJlbmNlcy5wdHIoKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VH
cm91cChwYWdlR3JvdXAucHRyKCkpOworCisgICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5h
dmlnYXRpb25DbGllbnQgPSB7CisgICAgICAgIHsgMCwgdGhpcyB9LAorICAgICAgICBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLAorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5
Rm9yUGx1Z2luTG9hZAorICAgICAgICBudWxscHRyLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2
aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQ
cm92aXNpb25hbE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lv
bmFsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRDb21taXROYXZpZ2F0aW9uCisg
ICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkRmFpbE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lv
bmFsTG9hZEluU3ViZnJhbWUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoRG9jdW1lbnRM
b2FkCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24KKyAgICAg
ICAgbnVsbHB0ciwgLy8gcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UKKyAgICAgICAgbnVsbHB0
ciwgLy8gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZQorICAgICAgICBudWxs
cHRyLCAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKKyAgICAgICAgd2ViUHJv
Y2Vzc0RpZENyYXNoLAorICAgICAgICBudWxscHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5
CisKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQorICAgICAg
ICBudWxscHRyLCAvLyB3aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkRW5kTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVtb3Zl
TmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAorICAgIH07CisKKyAgICBSRUNUIHIgPSB7IDAsIDAs
IHN0YXRpY19jYXN0PExPTkc+KGluaXRpYWxXaW5kb3dXaWR0aCksIHN0YXRpY19jYXN0PExPTkc+
KGluaXRpYWxXaW5kb3dIZWlnaHQpIH07CisgICAgYXV0byBwYWdlID0gaW5zcGVjdGVkUGFnZSgp
OworICAgIG1faW5zcGVjdGVkVmlld1dpbmRvdyA9IHBhZ2UtPnZpZXdXaWRnZXQoKTsKKyAgICBt
X2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgPSA6OkdldFBhcmVudChtX2luc3BlY3RlZFZpZXdX
aW5kb3cpOworICAgIGF1dG8gdmlldyA9IFdlYlZpZXc6OmNyZWF0ZShyLCBwYWdlQ29uZmlndXJh
dGlvbiwgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKKyAgICBtX2luc3BlY3RvclZpZXcg
PSAmdmlldy5sZWFrUmVmKCk7CisgICAgYXV0byBpbnNwZWN0b3JQYWdlID0gbV9pbnNwZWN0b3JW
aWV3LT5wYWdlKCk7CisgICAgbV9pbnNwZWN0b3JWaWV3V2luZG93ID0gaW5zcGVjdG9yUGFnZS0+
dmlld1dpZGdldCgpOworICAgIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KHRvQVBJKGlu
c3BlY3RvclBhZ2UpLCAmbmF2aWdhdGlvbkNsaWVudC5iYXNlKTsKKworICAgIHJldHVybiBpbnNw
ZWN0b3JQYWdlOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2xvc2VG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9h
ZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKKyAg
ICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOworICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxw
dHI7CisgICAgaWYgKG1faW5zcGVjdG9yVmlld1dpbmRvdykgeworICAgICAgICA6OkRlc3Ryb3lX
aW5kb3cobV9pbnNwZWN0b3JWaWV3V2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0b3JWaWV3V2lu
ZG93ID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7
CisgICAgICAgIDo6UmVtb3ZlUHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgV2ViSW5zcGVj
dG9yVUlQcm94eVBvaW50ZXJQcm9wKTsKKyAgICAgICAgOjpEZXN0cm95V2luZG93KG1faW5zcGVj
dG9yRGV0YWNoV2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgPSBudWxs
cHRyOworICAgIH0KKyAgICBtX2luc3BlY3RlZFZpZXdXaW5kb3cgPSBudWxscHRyOworICAgIG1f
aW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyA9IG51bGxwdHI7Cit9CisKK1N0cmluZyBXZWJJbnNw
ZWN0b3JVSVByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sKKyNpZiBVU0UoQ0YpCisgICAgUmV0
YWluUHRyPENGVVJMUmVmPiBodG1sVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJj
ZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIk1haW4iKSwgQ0ZTVFIoImh0bWwi
KSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIikpKTsKKyAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmco
aHRtbFVSTFJlZi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5kaWYKK30KKwor
U3RyaW5nIFdlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKK3sKKyNp
ZiBVU0UoQ0YpCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBodG1sVVJMUmVmID0gYWRvcHRDRihD
RkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIlRl
c3QiKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIikpKTsKKyAgICByZXR1
cm4gQ0ZVUkxHZXRTdHJpbmcoaHRtbFVSTFJlZi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7
IH07CisjZW5kaWYKK30KKworRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclVJUHJveHk6
OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQoreworICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtp
dC5vcmcvYi8yMDU1Mzc+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhLgorICAg
IHJldHVybiBEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCk7Cit9CisKK3Vuc2lnbmVkIFdlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKK3sKKyAgICBS
RUNUIHJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywgJnJl
Y3QpOworICAgIHJldHVybiByZWN0LmJvdHRvbSAtIHJlY3QudG9wOworfQorCit1bnNpZ25lZCBX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAg
ICBSRUNUIHJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywg
JnJlY3QpOworICAgIHJldHVybiByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OworfQorCit2b2lkIFdl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkU2l6ZSA9IDMwMDsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA3NTA7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKKworICAgIGlmIChtX2luc3BlY3RvckRl
dGFjaFdpbmRvdyAmJiA6OkdldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5kb3cpID09IG1faW5z
cGVjdG9yRGV0YWNoV2luZG93KSB7CisgICAgICAgIDo6U2V0UGFyZW50KG1faW5zcGVjdG9yVmll
d1dpbmRvdywgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKKyAgICAgICAgOjpTaG93V2lu
ZG93KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBTV19ISURFKTsKKyAgICB9CisKKyAgICBXZWJD
b3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6OmFkZExpc3RlbmVyKG1faW5zcGVjdGVkVmll
d1dpbmRvdywgdGhpcyk7CisKKyAgICBpZiAobV9hdHRhY2htZW50U2lkZSA9PSBBdHRhY2htZW50
U2lkZTo6Qm90dG9tKSB7CisgICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9
IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkgKiAzIC8gNDsKKyAgICAgICAgcGxhdGZv
cm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQs
IHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZEhlaWdodCkpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRXaWR0aCA9IHBs
YXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKSAqIDMgLyA0OworICAgICAgICBwbGF0Zm9ybVNl
dEF0dGFjaGVkV2luZG93V2lkdGgoc3RkOjptYXgobWluaW11bUF0dGFjaGVkV2lkdGgsIHN0ZDo6
bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZFdpZHRoKSkpOworICAgIH0K
KyAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JWaWV3V2luZG93LCBTV19TSE9XKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURldGFjaCgpCit7CisgICAgaWYgKCFp
bnNwZWN0ZWRQYWdlKCktPmhhc1J1bm5pbmdQcm9jZXNzKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpIHsKKyAgICAgICAgcmVnaXN0ZXJXaW5k
b3dDbGFzcygpOworICAgICAgICBtX2luc3BlY3RvckRldGFjaFdpbmRvdyA9IDo6Q3JlYXRlV2lu
ZG93RXgoMCwgV2ViSW5zcGVjdG9yVUlQcm94eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJ
TkRPVywKKyAgICAgICAgICAgIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsIGluaXRpYWxX
aW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCwKKyAgICAgICAgICAgIDAsIDAsIFdlYkNv
cmU6Omluc3RhbmNlSGFuZGxlKCksIDApOworICAgICAgICA6OlNldFByb3AobV9pbnNwZWN0b3JE
ZXRhY2hXaW5kb3csIFdlYkluc3BlY3RvclVJUHJveHlQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRf
Y2FzdDxIQU5ETEU+KHRoaXMpKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdl
QnJvYWRjYXN0ZXI6OnJlbW92ZUxpc3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7
CisKKyAgICBSRUNUIHJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdG9yRGV0YWNo
V2luZG93LCAmcmVjdCk7CisgICAgYXV0byB3aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93
SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7
CisgICAgOjpTZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93LCBtX2luc3BlY3RvckRldGFj
aFdpbmRvdyk7CisgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAw
LCAwLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1Bf
Tk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwg
d2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAt
IHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRv
cCwgU1dQX05PWk9SREVSKTsKKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAgICAgICAgOjpTaG93
V2luZG93KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBTV19TSE9XKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
IGhlaWdodCkKK3sKKyAgICBhdXRvIHdpbmRvd0luZm8gPSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZv
KG1faW5zcGVjdGVkVmlld1dpbmRvdywgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKKyAg
ICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVm
dCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSBoZWlnaHQsIHdpbmRvd0luZm8ucGFyZW50V2lk
dGggLSB3aW5kb3dJbmZvLmxlZnQsIGhlaWdodCwgU1dQX05PWk9SREVSKTsKKyAgICA6OlNldFdp
bmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93
SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRv
d0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkIHdpZHRoKQoreworICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdp
bmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5k
b3cpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93
SW5mby5wYXJlbnRXaWR0aCAtIHdpZHRoLCB3aW5kb3dJbmZvLnRvcCwgd2lkdGgsIHdpbmRvd0lu
Zm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7CisgICAgOjpT
ZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdp
bmRvd0luZm8udG9wLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3
aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9v
bCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1Rv
RnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0
Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFy
YW5jZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
UHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIC8qIHVybCAq
LykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9v
bCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCAvKiBhdmFpbGFibGUgKi8pCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bUNyZWF0ZUZyb250ZW5kV2luZG93KCkKK3sKKyAgICBwbGF0Zm9ybURldGFjaCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUludmFsaWRhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCmluZGV4IDI2ZWIxOTdhMmE1ZWQyNWRlYWI0YWQ3NWQwOTdjODAzNTBjYTJmYzkuLjk5YjM0
NjA5ODcxZGRmYWNkOTY3ZGI5NzZhNjY0ZDE2MDM4ZTE3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTEzLDcgKzExMyw3IEBACiAjaW5jbHVkZSAiV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkltYWdlLmgiCi0jaW5jbHVkZSAiV2ViSW5z
cGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiV2ViS2V5Ym9hcmRFdmVudC5o
IgogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCIKQEAgLTU0OSw3ICs1NDksNyBA
QCBXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQ
cm9jZXNzUHJveHkmIHByb2Nlc3MsIFJlZgogICAgIG1fcHJlZmVyZW5jZXMtPmFkZFBhZ2UoKnRo
aXMpOwogICAgIG1fcGFnZUdyb3VwLT5hZGRQYWdlKCp0aGlzKTsKIAotICAgIG1faW5zcGVjdG9y
ID0gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgqdGhpcyk7CisgICAgbV9pbnNwZWN0b3IgPSBX
ZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGUoKnRoaXMpOwogCiAgICAgaWYgKGhhc1J1bm5pbmdQ
cm9jZXNzKCkpCiAgICAgICAgIGRpZEF0dGFjaFRvUnVubmluZ1Byb2Nlc3MoKTsKQEAgLTYxOTQs
NyArNjE5NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRFbmREYXRlVGltZVBpY2tlcigpCiAK
ICNlbmRpZgogCi1XZWJJbnNwZWN0b3JQcm94eSogV2ViUGFnZVByb3h5OjppbnNwZWN0b3IoKSBj
b25zdAorV2ViSW5zcGVjdG9yVUlQcm94eSogV2ViUGFnZVByb3h5OjppbnNwZWN0b3IoKSBjb25z
dAogewogICAgIGlmIChpc0Nsb3NlZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggMTQ3NzljNzUzZDlmNjQzN2I5ZDkx
MDJkYmRiMTQ1ZWZlMGFkYjY1NS4uZjhjYzgxYjlkNmI5NmVhZTdhNGYyNjA4NzZjNzY1YWNjZWE0
ZmZmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTQ4Niw3ICs0
ODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRFbnRlckZ1bGxzY3JlZW4oKTsKICAgICB2b2lk
IGRpZEV4aXRGdWxsc2NyZWVuKCk7CiAKLSAgICBXZWJJbnNwZWN0b3JQcm94eSogaW5zcGVjdG9y
KCkgY29uc3Q7CisgICAgV2ViSW5zcGVjdG9yVUlQcm94eSogaW5zcGVjdG9yKCkgY29uc3Q7CiAg
ICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eSYgZ2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIoKSB7IHJldHVybiBtX2dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyOyB9CiAKICAgICB2b2lkIHJlc291cmNlTG9hZERpZFNlbmRSZXF1ZXN0
KFJlc291cmNlTG9hZEluZm8mJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpOwpAQCAtMjQ3
Miw3ICsyNDcyLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9jdXN0b21UZXh0RW5jb2RpbmdO
YW1lOwogICAgIFN0cmluZyBtX292ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5OwogCi0gICAg
UmVmUHRyPFdlYkluc3BlY3RvclByb3h5PiBtX2luc3BlY3RvcjsKKyAgICBSZWZQdHI8V2ViSW5z
cGVjdG9yVUlQcm94eT4gbV9pbnNwZWN0b3I7CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk+IG1fZnVsbFNj
cmVlbk1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA3M2JhYmQwMTRlYmRiNmZhZDUyMGQ1MmYzMGRmYzg0NzBjYWQ1YzZhLi41
ZTk4M2ExNzAxMTgwMTg5MDkyYWE1MWY3YTQwOWRiZDMwYzIxMDA5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQxOCwxMiArNDE4LDEy
IEBACiAJCTFDMjE4NDAyMjIzMzg3MjgwMEJBQzcwMCAvKiBOU0F0dHJpYnV0ZWRTdHJpbmdQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzIx
ODQwMTIyMzM4NzI4MDBCQUM3MDAgLyogTlNBdHRyaWJ1dGVkU3RyaW5nUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDODkxRDY2MTlC
MTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JVSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM4OTFENjMxOUIxMjRGRjAwQkE3OUREIC8qIFdlYklu
c3BlY3RvclVJLmggKi87IH07CiAJCTFDOEUyODIwMTI3NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNw
ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
OEUyODFFMTI3NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuaCAqLzsgfTsKLQkJMUM4RTI4
MzQxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzhFMjgzMjEyNzVENzM4MDBCQzdCRDAg
LyogV2ViSW5zcGVjdG9yUHJveHkuaCAqLzsgfTsKKwkJMUM4RTI4MzQxMjc1RDczODAwQkM3QkQw
IC8qIFdlYkluc3BlY3RvclVJUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDOEUyODMyMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JV
SVByb3h5LmggKi87IH07CiAJCTFDOEUyOTM5MTI3NjFFNUIwMEJDN0JEMCAvKiBXS0luc3BlY3Rv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM4RTI5
MzcxMjc2MUU1QjAwQkM3QkQwIC8qIFdLSW5zcGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUM4RTJBMzUxMjc3ODUyNDAwQkM3QkQwIC8q
IFdlYkluc3BlY3Rvck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzhFMkEzMTEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5z
cGVjdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMUM4RTJBMzYxMjc3ODUyNDAwQkM3
QkQwIC8qIFdlYkluc3BlY3Rvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQzhFMkEzMjEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5zcGVj
dG9yTWVzc2FnZXMuaCAqLzsgfTsKLQkJMUNBOEI5NDUxMjdDODgyQTAwNTc2QzJCIC8qIFdlYklu
c3BlY3RvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQThCOTQzMTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNw
ZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCTFDQThCOTQ2MTI3Qzg4MkEw
MDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0E4Qjk0NDEyN0M4ODJBMDA1NzZDMkIgLyog
V2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oICovOyB9OworCQkxQ0E4Qjk0NTEyN0M4ODJBMDA1
NzZDMkIgLyogV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0E4Qjk0MzEyN0M4ODJBMDA1
NzZDMkIgLyogV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJ
CTFDQThCOTQ2MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQThCOTQ0
MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCAqLzsgfTsK
IAkJMUNCQkU0QTAxOUI2NkM1MzAwNkI3RDgxIC8qIFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFD
QkJFNDlFMTlCNjZDNTMwMDZCN0Q4MSAvKiBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5j
cHAgKi87IH07CiAJCTFDQkJFNEExMTlCNjZDNTMwMDZCN0Q4MSAvKiBXZWJJbnNwZWN0b3JVSU1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
Q0JCRTQ5RjE5QjY2QzUzMDA2QjdEODEgLyogV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oICovOyB9
OwogCQkxRDRENzM3MDIzQTlFNTQ3MDA3MTdBMjUgLyogUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFn
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUQ0RDczNkIyM0E5REY1NTAwNzE3QTI1IC8qIFJlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAgLTE2MDQsOSArMTYwNCw5IEBA
CiAJCUE1NDNFMzBEMjE1QzhBOTAwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTU0M0UzMEIyMTVDOEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmggKi87IH07CiAJCUE1NUJBODEwMUJBMTMxN0UwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTU1QkE4MEMxQkExMkJFMTAwN0NEMzNEIC8qIF9XS1JlbW90ZVdlYklu
c3BlY3RvclZpZXdDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTU1QkE4MTcxQkEyM0UxMjAwN0NEMzNEIC8qIFJlbW90ZVdlYklu
c3BlY3RvclVJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNTVCQTgxMzFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCAqLzsg
fTsKLQkJQTU1QkE4MUYxQkEyNUIyNzAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTVCQTgx
OTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCAqLzsgfTsKLQkJ
QTU1QkE4MjUxQkEyNUNGQjAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NUJB
ODIyMUJBMjVCQjgwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgg
Ki87IH07Ci0JCUE1NUJBODI2MUJBMjVDRkQwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTVCQTgyMTFCQTI1QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlBNTVCQTgxRjFCQTI1QjI3MDA3
Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHkuaCAqLzsgfTsKKwkJQTU1QkE4MjUxQkEyNUNGQjAwN0NE
MzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4MjIxQkEyNUJCODAwN0NEMzNE
IC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oICovOyB9OworCQlBNTVCQTgy
NjFCQTI1Q0ZEMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTVCQTgyMTFCQTI1QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi87IH07CiAJCUE1NUJBODJCMUJBMzhFNjEwMDdDRDMzRCAvKiBXZWJJ
bnNwZWN0b3JVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1NUJBODI4MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGlsaXRp
ZXMuaCAqLzsgfTsKIAkJQTU4NjBFNzEyMzBGNjdGQzAwNDYxQUFFIC8qIFdlYlJlc291cmNlSW50
ZXJjZXB0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTU4NjBFNzAyMzBGNjdERTAwNDYxQUFFIC8qIFdlYlJlc291cmNlSW50ZXJjZXB0
Q29udHJvbGxlci5oICovOyB9OwogCQlBNThCNkYwODE4RkNBNzMzMDA4Q0JBNTMgLyogV0tGaWxl
VXBsb2FkUGFuZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE1OEI2RjA2MThGQ0E3MzMwMDhDQkE1MyAvKiBXS0ZpbGVVcGxvYWRQYW5lbC5oICovOyB9
OwpAQCAtMjk1MSwxNCArMjk1MSwxNCBAQAogCQkxQzIxODQwMTIyMzM4NzI4MDBCQUM3MDAgLyog
TlNBdHRyaWJ1dGVkU3RyaW5nUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBOU0F0dHJpYnV0ZWRTdHJpbmdQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDNzM5RTg1MjM0N0JDRjYwMEM2MjFFQyAvKiBDb3JlVGV4dEhlbHBlcnMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBDb3JlVGV4dEhlbHBlcnMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDNzM5RTg3MjM0N0JEMEYwMEM2MjFFQyAvKiBDb3JlVGV4dEhlbHBlcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29yZVRleHRIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTFDNzdDMTk1MTI4OEE4NzIwMDZBNzQyRiAvKiBXZWJJbnNwZWN0b3JQcm94eS5t
ZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJJbnNwZWN0b3JQcm94eS5tZXNz
YWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM3N0MxOTUxMjg4QTg3MjAw
NkE3NDJGIC8qIFdlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gV2ViSW5zcGVjdG9yVUlQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUM4OTFENjIxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJ
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkluc3BlY3RvclVJ
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4OTFENjMxOUIxMjRGRjAwQkE3
OUREIC8qIFdlYkluc3BlY3RvclVJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkluc3BlY3RvclVJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODkxRDY0
MTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUM4RTI4MUUxMjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJbnNwZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4RTI4MUYxMjc1RDE1NDAwQkM3QkQwIC8qIFdlYklu
c3BlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJbnNw
ZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQzhFMjgzMjEyNzVENzM4
MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViSW5zcGVjdG9yUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMUM4RTI4MzMxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkluc3BlY3RvclByb3h5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM4RTI4MzIxMjc1RDczODAwQkM3QkQwIC8q
IFdlYkluc3BlY3RvclVJUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViSW5zcGVjdG9yVUlQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzhF
MjgzMzEyNzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yVUlQcm94eS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJbnNwZWN0b3JVSVByb3h5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4RTI5MzcxMjc2MUU1QjAwQkM3QkQwIC8qIFdL
SW5zcGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLSW5zcGVjdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOEUyOTM4MTI3NjFFNUIwMEJDN0JE
MCAvKiBXS0luc3BlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXS0luc3BlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOEUyQTFD
MTI3NzgzM0YwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjk2Niw5ICsyOTY2LDkgQEAKIAkJMUM4RTJBMzIxMjc3ODUyNDAwQkM3QkQw
IC8qIFdlYkluc3BlY3Rvck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdlYkluc3BlY3Rvck1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQy
L1dlYkluc3BlY3Rvck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTFDOEUyREFEMTI3OEM1QjIwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JVSU1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkluc3BlY3RvclVJTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzlFQkE1QjIwODdFNzRFMDAwNTQ0
MjkgLyogTmF0aXZlV2ViTW91c2VFdmVudElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IE5hdGl2ZVdlYk1vdXNlRXZlbnRJT1MubW07IHBhdGggPSBpb3MvTmF0
aXZlV2ViTW91c2VFdmVudElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUNB
OEI5MzUxMjdDNzc0RTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViSW5zcGVjdG9yUHJveHlNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDQThCOTQzMTI3Qzg4MkEwMDU3NkMyQiAv
KiBXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7
IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUNBOEI5
NDQxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oOyBw
YXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmg7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTFDQThCOTM1MTI3Qzc3NEUw
MDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNBOEI5NDMxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3Bl
Y3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGgg
PSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkxQ0E4Qjk0NDEy
N0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oOyBw
YXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMu
aDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUNCQkU0OUUxOUI2NkM1
MzAwNkI3RDgxIC8qIFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVy
LmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViSW5zcGVjdG9yVUlNZXNzYWdl
UmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQ0JC
RTQ5RjE5QjY2QzUzMDA2QjdEODEgLyogV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmg7IHBhdGgg
PSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclVJTWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUQwNTMwQzkyNThFQUI0NDAwRTQzNkY3
IC8qIGNvbWJpbmUtZmVhdHVyZS1mbGFncy1wbGlzdC5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9ICJj
b21iaW5lLWZlYXR1cmUtZmxhZ3MtcGxpc3QucHkiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTA0MCwxMSArNTA0MCwxMSBAQAogCQlBNTVCQTgxMjFCQTIzRTA1MDA3Q0QzM0QgLyog
UmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNTVCQTgxMzFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlV2ViSW5zcGVjdG9yVUkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU1QkE4MTQxQkEyM0UwNTAwN0NEMzNEIC8q
IFJlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFJlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlBNTVCQTgxOTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU1QkE4MUExQkEyNUIxRTAw
N0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBNTVCQTgxQjFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBNTVCQTgyMTFCQTI1QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCUE1NUJBODIyMUJBMjVC
QjgwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMu
aDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlN
ZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlBNTVCQTgx
OTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1NUJBODFBMUJBMjVCMUUwMDdDRDMzRCAvKiBS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUE1NUJBODFCMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNTVCQTgyMTFCQTI1QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUE1NUJBODIyMUJB
MjVCQjgwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1l
c3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlBNTVCQTgyNzFCQTM4RTFFMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkluc3BlY3RvclV0aWxpdGll
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NUJBODI4MUJBMzhFMUUwMDdD
RDMzRCAvKiBXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1ODYwRTZGMjMwRjY3REUwMDQ2MUFBRSAvKiBXZWJSZXNvdXJjZUludGVyY2VwdENv
bnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUmVzb3VyY2VJbnRlcmNlcHRDb250
cm9sbGVyLmNwcDsgcGF0aCA9IE5ldHdvcmsvV2ViUmVzb3VyY2VJbnRlcmNlcHRDb250cm9sbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwNTUsNyArNTA1NSw3IEBACiAJ
CUE1QzBGMEE2MjAwMDY1NDQwMDUzNjUzNiAvKiBfV0tOU1dpbmRvd0V4dHJhcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tOU1dpbmRvd0V4dHJhcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNUMwRjBBOTIwMDA2NTZFMDA1MzY1MzYgLyogX1dLSW5zcGVj
dG9yV2luZG93Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dL
SW5zcGVjdG9yV2luZG93Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUMwRjBB
QTIwMDA2NTZFMDA1MzY1MzYgLyogX1dLSW5zcGVjdG9yV2luZG93LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0luc3BlY3RvcldpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBNUQzNTA0RDFENzhGMEQyMDA1MTI0QTkgLyogUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTVEMzUwNEQxRDc4RjBEMjAwNTEyNEE5IC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUUz
OTFGQjIxODNDMUU5MDBDOEZCMzEgLyogSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUUzOTFGQzIxODNDMUU5MDBDOEZCMzEgLyog
SW5zcGVjdG9yVGFyZ2V0UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5zcGVjdG9yVGFyZ2V0UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVF
QzZBRDIyMTUxQkQ2OTAwNjc3RDE3IC8qIFdlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYlBhZ2VEZWJ1Z2dhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTkyMjgsMTIgKzkyMjgsMTIgQEAKIAkJCQk5MUQ5NzBENjIzREE2RDU1MDA1N0RCQzMg
LyogbWFjICovLAogCQkJCUE1RTM5MUZCMjE4M0MxRTkwMEM4RkIzMSAvKiBJbnNwZWN0b3JUYXJn
ZXRQcm94eS5jcHAgKi8sCiAJCQkJQTVFMzkxRkMyMTgzQzFFOTAwQzhGQjMxIC8qIEluc3BlY3Rv
clRhcmdldFByb3h5LmggKi8sCi0JCQkJQTU1QkE4MUIxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5LmNwcCAqLywKLQkJCQlBNTVCQTgxOTFCQTI1QjFFMDA3Q0QzM0Qg
LyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCAqLywKLQkJCQlBNTVCQTgxQTFCQTI1QjFFMDA3
Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJMUM4
RTI4MzMxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmNwcCAqLywKLQkJCQkx
QzhFMjgzMjEyNzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yUHJveHkuaCAqLywKLQkJCQkx
Qzc3QzE5NTEyODhBODcyMDA2QTc0MkYgLyogV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4g
Ki8sCisJCQkJQTU1QkE4MUIxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHkuY3BwICovLAorCQkJCUE1NUJBODE5MUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5LmggKi8sCisJCQkJQTU1QkE4MUExQkEyNUIxRTAwN0NEMzNEIC8qIFJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJMUM4RTI4MzMxMjc1
RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclVJUHJveHkuY3BwICovLAorCQkJCTFDOEUyODMy
MTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JVSVByb3h5LmggKi8sCisJCQkJMUM3N0Mx
OTUxMjg4QTg3MjAwNkE3NDJGIC8qIFdlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW4gKi8s
CiAJCQkJOTlCMTY3NUQyNTJCQkUwQTAwNzMxNDBFIC8qIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9u
Q29udHJvbGxlclByb3h5LmNwcCAqLywKIAkJCQk5OUIxNjc1QTI1MkJCQUREMDA3MzE0MEUgLyog
V2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkuaCAqLywKIAkJCQk5OTZCMkI5
MzI1RTI0MzE0MDA3MTkzNzkgLyogV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJv
eHkubWVzc2FnZXMuaW4gKi8sCkBAIC05MjYwLDggKzkyNjAsOCBAQAogCQk5MUQ5NzBENjIzREE2
RDU1MDA1N0RCQzMgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKLQkJCQlBNUQzNTA0RDFENzhGMEQyMDA1MTI0QTkgLyogUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlNYWMubW0gKi8sCi0JCQkJMUNBOEI5MzUxMjdDNzc0RTAwNTc2QzJCIC8qIFdlYkluc3Bl
Y3RvclByb3h5TWFjLm1tICovLAorCQkJCUE1RDM1MDREMUQ3OEYwRDIwMDUxMjRBOSAvKiBSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tICovLAorCQkJCTFDQThCOTM1MTI3Qzc3NEUwMDU3
NkMyQiAvKiBXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tICovLAogCQkJCTk5QTdBQ0UzMjYwMTI5
MTkwMDZENTdGRCAvKiBXS0luc3BlY3RvclJlc291cmNlVVJMU2NoZW1lSGFuZGxlci5oICovLAog
CQkJCTk5QTdBQ0U0MjYwMTI5MUEwMDZENTdGRCAvKiBXS0luc3BlY3RvclJlc291cmNlVVJMU2No
ZW1lSGFuZGxlci5tbSAqLywKIAkJCQk5OTRCQURGMTFGN0Q3N0VBMDBCNTcxRTcgLyogV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlci5oICovLApAQCAtMTA5ODMsOCArMTA5ODMsOCBAQAogCQkJCTFE
RDJBNjZCMjU2MjAyMUUwMEZGN0I2RiAvKiBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8sCiAJCQkJMUREMkE2NjkyNTYyMDIxRTAwRkY3QjZGIC8qIFJlbW90ZVNv
dXJjZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQkxREQyQTY2QTI1NjIwMjFFMDBGRjdC
NkYgLyogUmVtb3RlU291cmNlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxpZXMuaCAqLywKLQkJCQlB
NTVCQTgyMTFCQTI1QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovLAotCQkJCUE1NUJBODIyMUJBMjVCQjgwMDdDRDMzRCAvKiBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggKi8sCisJCQkJQTU1QkE4MjExQkEyNUJCODAwN0NE
MzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAor
CQkJCUE1NUJBODIyMUJBMjVCQjgwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
TWVzc2FnZXMuaCAqLywKIAkJCQkxQkJCRTQ5RTE5QjY2QzUzMDA2QjdEODEgLyogUmVtb3RlV2Vi
SW5zcGVjdG9yVUlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCUUxOEU2OTEzMTY5QjY2N0Iw
MDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQlF
MThFNjkxNDE2OUI2NjdCMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eU1lc3NhZ2VzLmggKi8s
CkBAIC0xMTA2Myw4ICsxMTA2Myw4IEBACiAJCQkJRkVEQkRDRDUxRTY4RDE5QzAwQTU5RjhGIC8q
IFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXJNZXNzYWdlcy5oICovLAogCQkJCTFDOEUy
QTMxMTI3Nzg1MjQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwICov
LAogCQkJCTFDOEUyQTMyMTI3Nzg1MjQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JNZXNzYWdlcy5o
ICovLAotCQkJCTFDQThCOTQzMTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8sCi0JCQkJMUNBOEI5NDQxMjdDODgyQTAwNTc2QzJCIC8qIFdl
Ykluc3BlY3RvclByb3h5TWVzc2FnZXMuaCAqLywKKwkJCQkxQ0E4Qjk0MzEyN0M4ODJBMDA1NzZD
MkIgLyogV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJCQkJMUNB
OEI5NDQxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oICov
LAogCQkJCTk5Nzk2NTlCMjUzMTBBNDgwMEIzMUFFMyAvKiBXZWJJbnNwZWN0b3JVSUV4dGVuc2lv
bkNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTk5Nzk2NTlBMjUzMTBBNDgw
MEIzMUFFMyAvKiBXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJNZXNzYWdlcy5oICov
LAogCQkJCTk5NkIyQjk1MjVFMjQ0ODEwMDcxOTM3OSAvKiBXZWJJbnNwZWN0b3JVSUV4dGVuc2lv
bkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCkBAIC0xMjA0OCw4ICsxMjA0
OCw4IEBACiAJCQkJMEY1OTQ3OUQxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ1Ry
ZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFERDJBNjg2MjU2MzNDNzIwMEZGN0I2RiAvKiBSZW1v
dGVTb3VyY2VCdWZmZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxREQyQTY4
NzI1NjMzQzg3MDBGRjdCNkYgLyogUmVtb3RlU291cmNlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxp
ZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUE1NUJBODFGMUJBMjVCMjcwMDdDRDMzRCAvKiBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTU1QkE4MjUxQkEyNUNG
QjAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUE1NUJBODFGMUJBMjVCMjcwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQlBNTVCQTgyNTFCQTI1Q0ZCMDA3Q0QzM0QgLyog
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NTVCQTgxNzFCQTIzRTEyMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQjdBRkU3MjNDNjgyMDcwMEU0OUNGMyAvKiBSZXNvdXJjZUxvYWRJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2QkU5NjlDRDFFNTRFMDU0MDA4Qjc0ODMgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTIyNzgsOCAr
MTIyNzgsOCBAQAogCQkJCUZFRTQzRkQzMUU2N0IwMTgwMDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRURCRENENzFFNjhEMjA1
MDBBNTlGOEYgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQzhFMkEzNjEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9y
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFDOEUyODM0MTI3NUQ3MzgwMEJDN0JEMCAv
KiBXZWJJbnNwZWN0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUNBOEI5NDYxMjdDODgy
QTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTFDOEUyODM0MTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JVSVByb3h5LmggaW4g
SGVhZGVycyAqLywKKwkJCQkxQ0E4Qjk0NjEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9y
VUlQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzg5MUQ2NjE5QjEyNEZGMDBC
QTc5REQgLyogV2ViSW5zcGVjdG9yVUkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5QjE2NzY0MjUy
QkJFNjIwMDczMTQwRSAvKiBXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk5Nzk2NTlFMjUzMTBBNDkwMEIzMUFFMyAvKiBXZWJJbnNwZWN0b3JV
SUV4dGVuc2lvbkNvbnRyb2xsZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzkyOCw3
ICsxMzkyOCw3IEBACiAJCQkJQ0Q4MjUyREUyNUQ0OTE2QzAwODYyRkQ4IC8qIFJlbW90ZVJlbW90
ZUNvbW1hbmRMaXN0ZW5lclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNTk0N0E3MTg3QjUxNzYwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
ck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxREQyQTY2RTI1NjIwMjFF
MDBGRjdCNkYgLyogUmVtb3RlU291cmNlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQTU1QkE4MjYxQkEyNUNGRDAwN0NEMzNEIC8qIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE1NUJB
ODI2MUJBMjVDRkQwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFCQkJFNEEwMTlCNjZDNTMwMDZCN0Q4MSAv
KiBSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMThFNjkxNzE2OUI2NjdCMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MURFN0M2QzIyMjc4RjFFMDA1MzJCNjUg
LyogU2VydmljZVdvcmtlckZldGNoVGFzay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE0MTY1LDcg
KzE0MTY1LDcgQEAKIAkJCQlGRURCRENENjFFNjhEMjAwMDBBNTlGOEYgLyogV2ViSW5zcGVjdG9y
SW50ZXJydXB0RGlzcGF0Y2hlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQzhFMkEzNTEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxOEYzQTE1MjU2MzMzNDMwMDc5N0U2NiAvKiBXZWJJ
bnNwZWN0b3JQcmVmZXJlbmNlT2JzZXJ2ZXIubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQ0E4Qjk0
NTEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMUNBOEI5NDUxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3Bl
Y3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk3OTY1
OUYyNTMxMEE0OTAwQjMxQUUzIC8qIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlck1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTZCMkI5ODI1RTI0NDgyMDA3
MTkzNzkgLyogV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNCQkU0QTAxOUI2NkM1MzAwNkI3RDgxIC8q
IFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0
b3JVSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYklu
c3BlY3RvclVJLmNwcAppbmRleCBjN2FjNWQ2YmZmMjY4MDdkZTNlZDFiYmZiYTkyYTJhODhmM2Q2
NWYyLi40OTMxZGYzMjk4N2IyNGZkZWEwYzYwN2YxMDBhMTJiMmFlYmYyNmJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJ
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYklu
c3BlY3RvclVJLmNwcApAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJLmgiCiAKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkluc3BlY3Rv
clVJLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5k
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSksIG1fcGFnZS5pZGVudGlmaWVy
KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OlNlbmRNZXNzYWdl
VG9CYWNrZW5kKG1lc3NhZ2UpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCkBAIC0xMTksNyArMTE5LDcg
QEAgdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZnJvbnRlbmRMb2FkZWQoKQogCiAgICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXItPmRpc3BhdGNoQ29tbWFuZFdpdGhSZXN1bHRBc3luYygic2V0
SXNWaXNpYmxlIl9zLCB7IEpTT046OlZhbHVlOjpjcmVhdGUodHJ1ZSkgfSk7CiAKLSAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6RnJvbnRlbmRMb2FkZWQoKSwgbV9wYWdlLmlk
ZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6RnJv
bnRlbmRMb2FkZWQoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CiAKICAgICBicmluZ1RvRnJvbnQo
KTsKIH0KQEAgLTEzNiwxNyArMTM2LDE3IEBAIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnBh
Z2VVbnBhdXNlZCgpCiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OlNldFNoZWV0UmVjdChyZWN0KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6U2V0U2hlZXRSZWN0KHJlY3QpLCBt
X3BhZ2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2V0
Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFy
YW5jZSBhcHBlYXJhbmNlKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpTZXRGb3JjZWRBcHBlYXJhbmNlKGFwcGVhcmFuY2UpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpTZXRGb3JjZWRBcHBlYXJh
bmNlKGFwcGVhcmFuY2UpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6c3RhcnRXaW5kb3dEcmFnKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6U3RhcnRXaW5kb3dEcmFnKCksIG1fcGFnZS5pZGVudGlmaWVyKCkp
OworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OlN0YXJ0V2luZG93RHJh
ZygpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JV
STo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCkBAIC0xNzksNyArMTc5LDcgQEAgYm9v
bCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c3VwcG9ydHNEb2NrU2lkZShEb2NrU2lkZSBkb2NrU2lk
ZSkKIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zyb250KCkKIHsKLSAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1fcGFnZS5p
ZGVudGlmaWVyKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OkJy
aW5nVG9Gcm9udCgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JVSTo6Y2xvc2VXaW5kb3coKQpAQCAtMTkwLDMyICsxOTAsMzIgQEAgdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6Y2xvc2VXaW5kb3coKQogICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxl
ciA9IG51bGxwdHI7CiAjZW5kaWYKICAgICAKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6RnJvbnRlbmREaWRDbG9zZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpGcm9udGVuZERpZENsb3NlKCksIG1f
cGFnZS5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpyZW9w
ZW4oKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpSZW9wZW4oKSwg
bV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eTo6UmVvcGVuKCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJOjpyZXNldFN0YXRlKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6UmVzZXRTdGF0ZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpSZXNldFN0YXRlKCksIG1fcGFnZS5pZGVu
dGlmaWVyKCkpOwogfQogCiB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpvcGVuVVJMRXh0ZXJu
YWxseShjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6T3BlblVSTEV4dGVybmFsbHkodXJsKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6T3BlblVSTEV4dGVybmFsbHko
dXJsKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OnNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBi
b29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29k
ZWQsIGZvcmNlU2F2ZUFzKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6U2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5j
b2RlZCwgZm9yY2VTYXZlQXMpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0
cmluZyYgY29udGVudCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50
KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6
Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCkBAIC0yMjUsNyAr
MjI1LDcgQEAgdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmIHVybFN0cmluZykKIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2hv
d0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQogewot
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTaG93Q2VydGlmaWNhdGUoY2Vy
dGlmaWNhdGVJbmZvKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6U2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyksIG1f
cGFnZS5pZGVudGlmaWVyKCkpOwogfQogCiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIFJlbW90
ZVdlYkluc3BlY3RvclVJOjpkZWJ1Z2dhYmxlVHlwZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHAKaW5kZXggNWJiYzYz
NDQxNzFlNTcxNjJkNTVkNjkwZWE0ZWQyMWQ1NzFhOWQ5NC4uOGFlZWEzZTRjYjIwOGY1NjgwODIy
ZTkxMTVhYjBmMjMyOWFjYzc0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmNwcApAQCAtMjgsOCArMjgsOCBAQAogCiAjaW5jbHVk
ZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgotI2luY2x1
ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JV
SU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0Nocm9tZS5oPgpAQCAtNzIsNyArNzIsNyBAQCBXZWJJbnNwZWN0b3I6On5XZWJJbnNw
ZWN0b3IoKQogCiB2b2lkIFdlYkluc3BlY3Rvcjo6b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQo
Ym9vbCB1bmRlclRlc3QpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Ok9wZW5M
b2NhbEluc3BlY3RvckZyb250ZW5kKGNhbkF0dGFjaFdpbmRvdygpLCB1bmRlclRlc3QpLCBtX3Bh
Z2UtPmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6T3Bl
bkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoY2FuQXR0YWNoV2luZG93KCksIHVuZGVyVGVzdCksIG1f
cGFnZS0+aWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3I6OnNldEZyb250ZW5k
Q29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyKQpA
QCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yOjpzZXRGcm9udGVuZENvbm5lY3Rp
b24oSVBDOjpBdHRhY2htZW50IGVuY29kZWRDb25uZWN0aW9uSWRlbnRpCiAKIHZvaWQgV2ViSW5z
cGVjdG9yOjpjbG9zZUZyb250ZW5kQ29ubmVjdGlvbigpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpEaWRDbG9zZSgpLCBtX3BhZ2UtPmlkZW50aWZpZXIo
KSk7CiAKICAgICAvLyBJZiB3ZSB0cmllZCB0byBjbG9zZSB0aGUgZnJvbnRlbmQgYmVmb3JlIGl0
IHdhcyBjcmVhdGVkLCB0aGVuIG5vIGNvbm5lY3Rpb24gZXhpc3RzIHlldC4KICAgICBpZiAobV9m
cm9udGVuZENvbm5lY3Rpb24pIHsKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFdlYkluc3BlY3Rv
cjo6Y2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKQogCiB2b2lkIFdlYkluc3BlY3Rvcjo6YnJpbmdU
b0Zyb250KCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250
KCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFdl
Ykluc3BlY3Rvcjo6d2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKEZ1bmN0aW9uPHZv
aWQoKT4mJiBjYWxsYmFjaykKQEAgLTI1NCwxNyArMjU0LDE3IEBAIHZvaWQgV2ViSW5zcGVjdG9y
OjpzdG9wRWxlbWVudFNlbGVjdGlvbigpCiAKIHZvaWQgV2ViSW5zcGVjdG9yOjplbGVtZW50U2Vs
ZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6RWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVy
KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkVsZW1lbnRTZWxlY3Rpb25D
aGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBXZWJJbnNw
ZWN0b3I6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKIHsKLSAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6VGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2ZSks
IG1fcGFnZS0+aWRlbnRpZmllcigpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5
OjpUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkp
OwogfQogCiB2b2lkIFdlYkluc3BlY3Rvcjo6c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRl
KEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZSBkZXZlbG9wZXJQcmVmZXJlbmNl
LCBPcHRpb25hbDxib29sPiBvdmVycmlkZVZhbHVlKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjpTZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoZGV2ZWxvcGVyUHJlZmVy
ZW5jZSwgb3ZlcnJpZGVWYWx1ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpTZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoZGV2
ZWxvcGVyUHJlZmVyZW5jZSwgb3ZlcnJpZGVWYWx1ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsK
IH0KIAogYm9vbCBXZWJJbnNwZWN0b3I6OmNhbkF0dGFjaFdpbmRvdygpCkBAIC0yOTgsNyArMjk4
LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3I6OnVwZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHkoKQogCiAg
ICAgbV9wcmV2aW91c0NhbkF0dGFjaCA9IGNhbkF0dGFjaFdpbmRvdzsKIAotICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGNhbkF0dGFjaFdp
bmRvdyksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JV
SVByb3h5OjpBdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGNhbkF0dGFjaFdpbmRvdyksIG1fcGFn
ZS0+aWRlbnRpZmllcigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCmlu
ZGV4IGVmMmUwZjk2MmFlOGMyNmIwMzhmMzYyNTU2OTBlM2I3N2I3ODMxZjUuLmY5ZDNhNTU4ODg4
ZGUzMGVkNjA2ZjdmYWEwNzgyN2U1MWJkYzRmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Vy
dGlmaWNhdGVJbmZvLmg+CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6
dXBkYXRlQ29ubmVjdGlvbigpCiAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+b3BlbigpOwogI2Vu
ZGlmCiAKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0RnJvbnRlbmRDb25uZWN0
aW9uKGNvbm5lY3Rpb25DbGllbnRQb3J0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNv
bm5lY3Rpb25DbGllbnRQb3J0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZv
aWQgV2ViSW5zcGVjdG9yVUk6OndpbmRvd09iamVjdENsZWFyZWQoKQpAQCAtMTUwLDE0ICsxNTAs
MTQgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6ZnJvbnRlbmRMb2FkZWQoKQogICAgIHNldERvY2tT
aWRlKG1fZG9ja1NpZGUpOwogICAgIHNldElzVmlzaWJsZShtX2lzVmlzaWJsZSk7CiAKLSAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RnJvbnRlbmRMb2FkZWQoKSwgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6RnJvbnRl
bmRMb2FkZWQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiAKICAgICBicmluZ1RvRnJv
bnQoKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RhcnRXaW5kb3dEcmFnKCkKIHsKLSAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U3RhcnRXaW5kb3dEcmFnKCksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OlN0
YXJ0V2luZG93RHJhZygpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBX
ZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCkBAIC0xNjksMTIg
KzE2OSwxMiBAQCB2b2lkIFdlYkluc3BlY3RvclVJOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxv
YXQgeSkKIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zyb250KCkKIHsKLSAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkJyaW5nVG9Gcm9u
dCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JV
STo6Y2xvc2VXaW5kb3coKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRD
bG9zZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjpEaWRDbG9zZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIAog
ICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7CiAgICAgICAgIG1fYmFja2VuZENvbm5lY3Rp
b24tPmludmFsaWRhdGUoKTsKQEAgLTE5OSwxNyArMTk5LDE3IEBAIHZvaWQgV2ViSW5zcGVjdG9y
VUk6OmNsb3NlV2luZG93KCkKIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKIHsKLSAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OlJlb3BlbigpLCBt
X2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVz
ZXRTdGF0ZSgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlJlc2V0U3RhdGUo
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6UmVzZXRTdGF0ZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAog
dm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSBhcHBlYXJhbmNlKQogewotICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclByb3h5OjpTZXRGb3JjZWRBcHBlYXJhbmNlKGFwcGVhcmFuY2UpLCBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5
OjpTZXRGb3JjZWRBcHBlYXJhbmNlKGFwcGVhcmFuY2UpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlm
aWVyKTsKIH0KIAogV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBXZWJJbnNw
ZWN0b3JVSTo6dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0CkBAIC0yMzYsMTYg
KzIzNiwxNiBAQCB2b2lkIFdlYkluc3BlY3RvclVJOjpyZXF1ZXN0U2V0RG9ja1NpZGUoRG9ja1Np
ZGUgZG9ja1NpZGUpCiAgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpOwogICAgIHN3aXRjaCAoZG9ja1NpZGUpIHsKICAgICBjYXNlIERvY2tTaWRlOjpVbmRvY2tl
ZDoKLSAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RGV0YWNoKCksIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIpOworICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkRldGFjaCgpLCBtX2luc3BlY3RlZFBh
Z2VJZGVudGlmaWVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEb2NrU2lkZTo6UmlnaHQ6
Ci0gICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaFJpZ2h0KCksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOworICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkF0dGFjaFJpZ2h0KCksIG1faW5z
cGVjdGVkUGFnZUlkZW50aWZpZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERvY2tTaWRl
OjpMZWZ0OgotICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hMZWZ0KCksIG1faW5zcGVjdGVk
UGFnZUlkZW50aWZpZXIpOworICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkF0dGFjaExlZnQoKSwg
bV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG9j
a1NpZGU6OkJvdHRvbToKLSAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQm90dG9tKCksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkF0dGFj
aEJvdHRvbSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQpAQCAtMjk4LDQyICsyOTgsNDIgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6dXBkYXRl
RmluZFN0cmluZyhjb25zdCBTdHJpbmcmIGZpbmRTdHJpbmcpCiAKIHZvaWQgV2ViSW5zcGVjdG9y
VUk6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KSwgbV9pbnNwZWN0ZWRQYWdl
SWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2lu
ZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJv
eHk6OlNldEF0dGFjaGVkV2luZG93V2lkdGgod2lkdGgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlm
aWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpTZXRBdHRhY2hlZFdpbmRv
d1dpZHRoKHdpZHRoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2Vi
SW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldFNoZWV0UmVjdChyZWN0KSwgbV9pbnNw
ZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
U2V0U2hlZXRSZWN0KHJlY3QpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9p
ZCBXZWJJbnNwZWN0b3JVSTo6b3BlblVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJiB1cmwpCiB7
Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Ok9wZW5VUkxFeHRlcm5hbGx5KHVybCks
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
UHJveHk6Ok9wZW5VUkxFeHRlcm5hbGx5KHVybCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIp
OwogfQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjpzYXZlKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxl
bmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9v
bCBmb3JjZVNhdmVBcykKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2F2ZShm
aWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpLCBtX2luc3BlY3Rl
ZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpTYXZl
KGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjphcHBlbmQoY29u
c3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCkKIHsK
LSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRp
Zmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
Okluc3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmll
cik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6SW5zcGVjdGVkVVJMQ2hhbmdl
ZCh1cmxTdHJpbmcpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJ
bnNwZWN0b3JVSTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlm
aWNhdGVJbmZvKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTaG93Q2VydGlm
aWNhdGUoY2VydGlmaWNhdGVJbmZvKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6U2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRl
SW5mbyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9URUxFTUVUUlkpCkBAIC00NDcsNyArNDQ3LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6
cGFnZVVucGF1c2VkKCkKIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0JhY2tl
bmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpTZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRp
Zmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6U2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQobWVzc2FnZSksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiBTdHJpbmcg
V2ViSW5zcGVjdG9yVUk6OnRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423918</attachid>
            <date>2021-03-22 12:22:01 -0700</date>
            <delta_ts>2021-03-22 13:40:17 -0700</delta_ts>
            <desc>Patch v1.3 - for GTK EWS</desc>
            <filename>bug-223551-20210322122201.patch</filename>
            <type>text/plain</type>
            <size>423716</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhlOGEwZGFkN2UxYTI2Y2Yw
ODY3MDJkYmE4OTEwOTU1Y2RlYWFkYmQuLjk1YWM1NDc1NjNhNDY3MjNlZmQ1MzdhODIzMTIxOGQy
ZDllZTQxNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQ0IEBACisyMDIxLTAzLTE5ICBCSiBCdXJn
ICA8YmJ1cmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlbmFtZSBXZWJJ
bnNwZWN0b3JQcm94eSB0byBXZWJJbnNwZWN0b3JVSVByb3h5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM1NTEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUbyBpbXByb3ZlIGNsYXJpdHkgaW4gdGhlIGNv
ZGViYXNlLCBJJ20gcmVuYW1pbmcgdGhpcyB0byBiZSBjb25zaXN0ZW50CisgICAgICAgIHdpdGgg
aXQncyBXZWJQcm9jZXNzLXNpZGUgY291bnRlcnBhcnQsIFdlYkluc3BlY3RvclVJLiBUaGVyZSBh
cmUgbWFueQorICAgICAgICBkaWZmZXJlbnQgY2xhc3NlcyB3aXRoIHRoZSAnV2ViSW5zcGVjdG9y
JyBwcmVmaXgsIHNvIGl0IGNhbiBiZSBkaWZmaWN1bHQKKyAgICAgICAgdG8gdW5kZXJzdGFuZCB3
aGV0aGVyIGEgY2xhc3MgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBXZWJJbnNwZWN0b3JVSQorICAg
ICAgICBmcm9udGVuZCBvciB0aGUgSW5zcGVjdG9yQ29udHJvbGxlciBiYWNrZW5kLiBUaGlzIGZp
eGVzIG9uZSBvZiB0aGUgYmlnZ2VzdAorICAgICAgICBvZmZlbmRlcnMuCisKKyAgICAgICAgRm9y
IGJyZXZpdHksIEkgaGF2ZSBlbGlkZWQgZnVuY3Rpb24tbGV2ZWwgY2hhbmdlbG9nIGVudHJpZXMg
ZnJvbSBmaWxlcworICAgICAgICB0aGF0IGhhdmUgYmVlbiByZW5hbWVkLiBUaGlzIGlzIGEgbWVj
aGFuaWNhbCByZWZhY3RvcmluZy4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFr
ZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0Ogor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgIChB
UEk6Okluc3BlY3RvckNsaWVudDo6b3BlblVSTEV4dGVybmFsbHkpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQVBJVUlDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmRpZEF0dGFj
aExvY2FsSW5zcGVjdG9yKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OndpbGxDbG9zZUxvY2Fs
SW5zcGVjdG9yKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmNvbmZpZ3VyYXRpb25Gb3JMb2Nh
bEluc3BlY3Rvcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0luc3BlY3Rvci5jcHA6CisgICAgICAgIChXS0luc3Bl
Y3RvckdldFR5cGVJRCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL21hYy9XS0luc3BlY3RvclByaXZhdGVNYWMuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS0luc3BlY3RvckludGVybmFsLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJv
bGxlci5tbToKKyAgICAgICAgKC1bX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
aW5pdFdpdGhDb25maWd1cmF0aW9uOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnRlcm5hbC5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rvci5jcHA6CisgICAgICAgICh3ZWJr
aXRXZWJJbnNwZWN0b3JDcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkluc3BlY3RvclByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlE
ZWxlZ2F0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tOgorICAg
ICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6Y29uZmlndXJhdGlvbkZvckxvY2Fs
SW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZEF0
dGFjaExvY2FsSW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OndpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW06CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5z
cGVjdG9yQnJvd3NlckFnZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0Nv
Y29hL0luc3BlY3RvckRlbGVnYXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9D
b2NvYS9JbnNwZWN0b3JEZWxlZ2F0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRGVs
ZWdhdGU6Okluc3BlY3RvckNsaWVudDo6b3BlblVSTEV4dGVybmFsbHkpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRXh0ZW5zaW9uRGVsZWdhdGUubW06Cisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5LmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eS5jcHAuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojp+UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmludmFsaWRhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXREaWFnbm9zdGlj
TG9nZ2luZ0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHk6OmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjpjbG9zZUZyb21CYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eTo6Y2xvc2VGcm9tQ3Jhc2gpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5OjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojpmcm9udGVuZERpZENsb3NlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cmVvcGVuKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnNhdmUpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjphcHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXRTaGVldFJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXRGb3JjZWRBcHBlYXJhbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c3RhcnRXaW5kb3dEcmFnKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6b3BlblVSTEV4dGVy
bmFsbHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpzaG93
Q2VydGlmaWNhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjpzZW5kTWVzc2FnZVRvQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1D
cmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXBwZW5kKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRT
aGVldFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZyk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtT3BlblVSTEV4dGVybmFsbHkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3cpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5
LmguCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQ6On5S
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6aXNVbmRlclRlc3QgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpleHRlbnNpb25Db250cm9sbGVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6d2luZG93IGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2hlZXRSZWN0IGNv
bnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5LmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5jcHAu
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OldlYkluc3BlY3RvclVJUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojp+V2ViSW5zcGVjdG9y
VUlQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnNldEluc3Bl
Y3RvckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omluc3Bl
Y3Rpb25MZXZlbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
Omluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclVJUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JVSVByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5Ojppc0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OnNob3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpoaWRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6Y2xvc2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpjbG9zZUZvckNyYXNoKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cmVvcGVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
dXBkYXRlRm9yTmV3UGFnZVByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JV
SVByb3h5OjpzZXRGcm9udGVuZENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjpzaG93Q29uc29sZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnNob3dSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JV
SVByb3h5OjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjphdHRhY2hCb3R0b20pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjphdHRhY2hSaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OmF0dGFjaExlZnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjphdHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpkZXRh
Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnNldEF0
dGFjaGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5
OjpzZXRTaGVldFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpz
dGFydFdpbmRvd0RyYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojp0
b2dnbGVQYWdlUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6dG9nZ2xlRWxlbWVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGVGcm9udGVuZFBhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Om9wZW4pOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpmcm9udGVuZExvYWRlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0Rm9yY2Vk
QXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Om9wZW5V
UkxFeHRlcm5hbGx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5z
cGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yVUlQcm94eTo6c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFp
bGFibGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpzYXZlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6YXBwZW5kKToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvdWxkT3BlbkF0dGFjaGVkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6ZXZhbHVhdGVJbkZyb250ZW5kRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRl
RnJvbnRlbmRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3cpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2gpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJlc2V0U3Rh
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5n
VG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
QnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtSGlkZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJ
UHJveHk6OnBsYXRmb3JtSXNGcm9udCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJ
UHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRv
d0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
SW5zcGVjdGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybUF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtRGV0YWNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JQYWdlVVJMKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dh
YmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRB
dHRhY2hlZFdpbmRvd1dpZHRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJUHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5oLgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0ZWRQYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yUGFnZSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmV4dGVuc2lvbkNvbnRyb2xsZXIgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojppc0Nvbm5lY3RlZCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmlzVmlzaWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvcldpbmRvdyBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnNoZWV0UmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclZp
ZXcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRhY2ht
ZW50U2lkZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omlz
QXR0YWNoZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpp
c1Byb2ZpbGluZ1BhZ2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5Ojppc0VsZW1lbnRTZWxlY3Rpb25BY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5Ojppc1VuZGVyVGVzdCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2FuQXR0YWNoKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6Y2FuQXR0YWNoIGNvbnN0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHku
bWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1Jl
bW90ZUluc3BlY3RvckNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3Rr
L1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5j
cHAuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnVwZGF0ZVdp
bmRvd1RpdGxlKToKKyAgICAgICAgKFdlYktpdDo6cmVtb3RlSW5zcGVjdG9yVmlld0Rlc3Ryb3ll
ZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
Q3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRT
dGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtQnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6cmVtb3RlRmlsZVJlcGxhY2VDb250
ZW50c0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1BcHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5k
b3dEcmFnKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1PcGVuVVJMRXh0ZXJuYWxseSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5
Q2xpZW50LmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9y
VUlQcm94eUd0ay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcC4KKyAgICAgICAgKFdlYktpdDo6aW5z
cGVjdG9yVmlld0Rlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJv
eHk6OnNldENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnVw
ZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6ZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKToKKyAgICAgICAgKFdlYktpdDo6d2ViUHJvY2Vzc0RpZENyYXNoKToK
KyAgICAgICAgKFdlYktpdDo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OmdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudSk6CisgICAgICAgIChX
ZWJLaXQ6Omluc3BlY3RvcldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3cp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1IaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUlzRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFw
cGVhcmFuY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bUluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3Bl
Y3RvclVJUHJveHk6Omluc3BlY3RvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclVJUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVk
V2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtRGV0YWNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcpOgor
ICAgICAgICAoV2ViS2l0OjpmaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2spOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUFwcGVuZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdl
ZCk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2lu
ZG93LmNwcDoKKyAgICAgICAgKHdlYmtpdEluc3BlY3RvcldpbmRvd05ldyk6CisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbTog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlNYWMubW0uCisgICAgICAgICgtW1dLUmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eU9iakNBZGFwdGVyIHdpbmRvdzp3aWxsUG9zaXRpb25TaGVldDp1c2luZ1JlY3Q6XSk6
CisgICAgICAgICgtW1dLUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGluaXRX
aXRoUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTpdKToKKyAgICAgICAgKC1bV0tSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVjdG9yV0tXZWJWaWV3RGlkQmVjb21lQWN0
aXZlOl0pOgorICAgICAgICAoLVtXS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRl
ciBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOl0pOgorICAgICAgICAo
LVtXS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciBpbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0Ol0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5Ojp3ZWJWaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6ZGlkQmVjb21lQWN0aXZlKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VB
bmRXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUFw
cGVuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtU2V0U2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybU9wZW5VUkxFeHRl
cm5hbGx5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1TaG93Q2VydGlmaWNhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIgd2ViVmlld10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1dlYkluc3BlY3RvclVJUHJveHlNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tLgorICAgICAgICAo
LVtXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciBpbnNwZWN0b3JSZWZdKToKKyAgICAg
ICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVjdG9yXSk6CisgICAg
ICAgICgtW1dLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGluaXRXaXRoV2ViSW5zcGVj
dG9yVUlQcm94eTpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0
ZXIgaW52YWxpZGF0ZV0pOgorICAgICAgICAoLVtXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRh
cHRlciB3aW5kb3c6d2lsbFBvc2l0aW9uU2hlZXQ6dXNpbmdSZWN0Ol0pOgorICAgICAgICAoLVtX
S1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciB3aW5kb3dEaWRNb3ZlOl0pOgorICAgICAg
ICAoLVtXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciB3aW5kb3dEaWRSZXNpemU6XSk6
CisgICAgICAgICgtW1dLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIHdpbmRvd1dpbGxD
bG9zZTpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgd2lu
ZG93RGlkRW50ZXJGdWxsU2NyZWVuOl0pOgorICAgICAgICAoLVtXS1dlYkluc3BlY3RvclVJUHJv
eHlPYmpDQWRhcHRlciB3aW5kb3dEaWRFeGl0RnVsbFNjcmVlbjpdKToKKyAgICAgICAgKC1bV0tX
ZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdl
Ol0pOgorICAgICAgICAoLVtXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciBvYnNlcnZl
VmFsdWVGb3JLZXlQYXRoOm9mT2JqZWN0OmNoYW5nZTpjb250ZXh0Ol0pOgorICAgICAgICAoLVtX
S1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRp
ZEJlY29tZUFjdGl2ZTpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0Fk
YXB0ZXIgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDpdKToKKyAgICAg
ICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JV
SVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6d2lsbE1vdmVUb1dpbmRv
dzpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6XSk6CisgICAgICAgICgtW1dLV2ViSW5z
cGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGluc3BlY3RvclZpZXdDb250cm9sbGVyOm9wZW5VUkxF
eHRlcm5hbGx5Ol0pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpkaWRC
ZWNvbWVBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRh
Y2htZW50Vmlld0RpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJv
eHk6OmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjphdHRhY2htZW50RGlkTW92ZVRvV2luZG93KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGVGcm9udGVu
ZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
Q3JlYXRlRnJvbnRlbmRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yVUlQcm94eTo6Y2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1IaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUlzRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNhbkF0dGFjaCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZh
aWxhYmlsaXR5Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojp3aW5kb3dGcmFtZURpZENoYW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0ZWRWaWV3
RnJhbWVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUF0dGFjaCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGV0YWNoKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dXaWR0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU2V0U2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JVSVByb3h5OjppbnNwZWN0b3JQYWdlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpzeXN0
ZW1WZXJzaW9uUGxpc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpp
bmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQ
cm94eTo6YXBwbHlGb3JjZWRBcHBlYXJhbmNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlXaW4uY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eVdpbi5jcHAuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHk6OlduZFByb2MpOgorICAgICAgICAoV2ViS2l0OjpyZWdpc3RlcldpbmRvd0NsYXNzKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2l6ZUNoYW5nZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6Om9uQ2xvc2UpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtU2V0Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0Nl
cnRpZmljYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgICogVUlQcm9jZXNz
L0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yVUlQcm94eVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2lu
LmNwcC4KKyAgICAgICAgKFdlYktpdDo6Z2V0SW5zcGVjdGVkV2luZG93SW5mbyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OndpbmRvd1JlY2VpdmVkTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnduZFByb2MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpyZWdpc3RlcldpbmRvd0NsYXNzKToKKyAgICAg
ICAgKFdlYktpdDo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OndlYlByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclBhZ2VVUkwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JUZXN0UGFn
ZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmluZm9Gb3JMb2Nh
bERlYnVnZ2FibGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGV0YWNoKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRX
aW5kb3dXaWR0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtU2V0U2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1Jc0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1IaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1SZXNldFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1CcmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU2F2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtQXBwZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dE
cmFnKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6bV9saW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjppbnNwZWN0b3IgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JV
SS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2Fn
ZVRvQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpmcm9u
dGVuZExvYWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpjaGFu
Z2VTaGVldFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2V0
Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJ
OjpzdGFydFdpbmRvd0RyYWcpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JV
STo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6
OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OnJl
b3Blbik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpyZXNldFN0YXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6Om9wZW5VUkxFeHRlcm5h
bGx5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNhdmUpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6YXBwZW5kKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yOjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3Rvcjo6Y2xvc2VGcm9udGVuZENvbm5lY3Rpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3I6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3Rvcjo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3I6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3Rvcjo6c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yOjp1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJOjp1cGRhdGVDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yVUk6OmZyb250ZW5kTG9hZGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJOjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6Y2xv
c2VXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUk6OnJlc2V0U3RhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSTo6c2V0Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJOjpyZXF1ZXN0U2V0RG9ja1NpZGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dXaWR0aCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJOjpjaGFuZ2VTaGVldFJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6b3BlblVSTEV4dGVybmFsbHkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSTo6c2F2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJOjphcHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVk
VVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJOjpzaG93Q2VydGlm
aWNhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQpOgorCiAyMDIxLTAzLTE5ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29t
PgogCiAgICAgICAgIFttYWNPU10gQWxsb3cgb3BlbmRpcmVjdG9yeWQgYWNjZXNzIGluIGJhc2Ug
c3lzdGVtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNl
L1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRleCA4ZWZhZjhiOGM2NDljMmQ5MTJlMmQ5ZWNlMjVm
NGJjNmQ2NzQxOTY2Li44MmNjODdhODc4ZTdhNmQ4ZTBhYzRhZWRiMTBiZGY3NjIwNTY1MTgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQvQ01ha2VMaXN0cy50eHQKQEAgLTIwMSw4ICsyMDEsOCBAQCBzZXQoV2ViS2l0X01FU1NBR0VT
X0lOX0ZJTEVTCiAKICAgICBVSVByb2Nlc3MvR1BVL0dQVVByb2Nlc3NQcm94eQogCi0gICAgVUlQ
cm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eQotICAgIFVJUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90
ZVdlYkluc3BlY3RvclVJUHJveHkKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
clVJUHJveHkKIAogICAgIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IGZi
NjIxM2M0Y2MzNmYzMzg1MjhjMThiOTQ4ZjlhYzg4OTM4YjEyZGUuLjU0ZDhmZGM3MWIzNTEyYjc0
YjE3NjE4NDFiMjdmMTc0MmExOGZlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTEwMyw4ICsxMDMsOCBAQCAkKFBST0pFQ1RfRElSKS9V
SVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMu
aW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvR1BVL0dQVVByb2Nlc3NQcm94eS5tZXNzYWdlcy5p
bgotJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eS5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElS
KS9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW4KICQo
UFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25D
b250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9NZWRp
YS9BdWRpb1Nlc3Npb25Sb3V0aW5nQXJiaXRyYXRvclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pF
Q1RfRElSKS9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IGYyNTViNzNjMmEwZjEwYzg2MmMxYzE4ZmU5
NWE0ZjczZmNmNzE4MDEuLmI2YzlkMGRkZDM0ZWFhOWYzNmNjYjVmNTc0Y2Y5OGI1ZDY2MzE0MzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxp
c3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApA
QCAtMjc2LDkgKzI3Niw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZVRleHRUcmFja1Byb3h5TWVzc2FnZXNSZXBsaWVzCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVWaWRlb1RyYWNrUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVWaWRlb1RyYWNrUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVWaWRlb1RyYWNrUHJveHlNZXNzYWdlc1Jl
cGxpZXMuaAotJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCi0kKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3Nh
Z2VzLmgKLSQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3Nh
Z2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3RvclVJTWVzc2Fn
ZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
V2ViSW5zcGVjdG9yVUlNZXNzYWdlc1JlcGxpZXMuaApAQCAtNDA2LDkgKzQwNiw5IEBAICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXJNZXNzCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9XZWJJbnNwZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JNZXNzYWdlcy5oCiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JNZXNz
YWdlc1JlcGxpZXMuaAotJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCi0kKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgK
LSQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3Rv
clByb3h5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JVSVBy
b3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRy
b2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJNZXNzYWdlcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0
b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJNZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy5tYWtlCmluZGV4IGI2YTBjMDQzYmJiNmQ4MzhiNjdkMDczNTEzODY3MTlhYWJmYjAyOTMu
Ljc3OTA3YjRkMDU3N2FjMjYyNWViYzA3OTY0NzlhZWUwNWM4MzUwMWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLm1ha2UKQEAgLTE0Niw4ICsxNDYsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwK
IAlVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aG5Qcm9jZXNzUHJveHkgXAogCVVJ
UHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkgXAogCVVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eSBcCi0JVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNw
ZWN0b3JQcm94eSBcCi0JVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eSBcCisJVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5IFwKKwlVSVByb2Nl
c3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHkgXAogCVVJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkgXAogCVVJUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eSBcCiAJVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UKaW5kZXggY2I3MGFiOGFlNzE1YTczM2Q1NmU5MDE1
NDk1MGI1NjU5NWQwMDUzOC4uZGFiZjMyM2UzNjdkYWIyNjRjYjFhZjg2NDEwMzQ5NWU0ZjY5YzQ3
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCkBAIC01MCw3ICs1MCw3IEBAIGxpc3QoQVBQRU5E
IFdlYktpdF9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3
aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKIAotICAgIFVJUHJvY2Vzcy9JbnNw
ZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0
b3Ivd2luL1dlYkluc3BlY3RvclVJUHJveHlXaW4uY3BwCiAKICAgICBVSVByb2Nlc3MvTGF1bmNo
ZXIvd2luL1Byb2Nlc3NMYXVuY2hlcldpbi5jcHAKIApAQCAtMTc4LDcgKzE3OCw3IEBAIGlmIChF
TkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAogICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9y
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCiAKLSAgICAgICAgVUlQ
cm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCisgICAg
ICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlXaW4u
Y3BwCiAgICAgKQogCiAgICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDAzYWY1NjVlZDFhZTM5ZTc3ZTE4M2E0YWViZDFl
NjRhMmUyNDdlMGEuLmJmNWJjYTIzZGI2NTdjNmFkOWYzMWVmYmI1NzBjY2NkMWMxM2EwZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNTcsNyArNTcsNyBAQCBsaXN0KEFQUEVORCBXZWJL
aXRfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0Fy
ZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAKLSAgICBVSVByb2Nlc3MvSW5zcGVjdG9y
L3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3dp
bi9XZWJJbnNwZWN0b3JVSVByb3h5V2luLmNwcAogCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3dp
bi9Qcm9jZXNzTGF1bmNoZXJXaW4uY3BwCiAKQEAgLTE4NSw3ICsxODUsNyBAQCBpZiAoRU5BQkxF
X1JFTU9URV9JTlNQRUNUT1IpCiAgICAgICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5jcHAKICAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcAogCi0gICAgICAgIFVJUHJvY2Vz
cy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcAorICAgICAgICBV
SVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5V2luLmNwcAog
ICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dAppbmRleCA1OTNiYWNlNDU3NTBjYTFhY2NhYTZkMTc3ZDQ1NjhmY2Y3NzEzNzlmLi4zMzZi
OWNlODhiODljNzU5ZGMxNjlmN2U0NzE5ODg4ODY2Yjg1MDM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTQ1
NCw4ICs0NTQsOCBAQCBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAog
VUlQcm9jZXNzL0dQVS9HUFVQcm9jZXNzUHJveHkuY3BwCiAKIFVJUHJvY2Vzcy9JbnNwZWN0b3Iv
SW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCi1VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYklu
c3BlY3RvclByb3h5LmNwcAotVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5j
cHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5jcHAKK1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUlQcm94eS5jcHAKIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkuY3BwCiBVSVByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAKIFVJUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMjAzOTBh
N2VjZDlhYjM3MGRmMjkwMzBmOGNiYWFlMGM5NGNiYTA2YS4uNTU4ZDI2ZDkzMTU3NWY3M2I5NDcw
Y2YwOWQyZDkyZWY4YmI1ZTkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29j
b2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNDI3LDggKzQy
Nyw4IEBAIFVJUHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRXh0ZW5zaW9uRGVsZWdh
dGUubW0KIFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5t
bQogVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJl
Y29nbml6ZXIubW0KIAotVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlNYWMubW0KLVVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFj
Lm1tCitVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWFj
Lm1tCitVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCiBV
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclJlc291cmNlVVJMU2NoZW1lSGFuZGxl
ci5tbQogVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5t
bQogVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNHVEsudHh0CmluZGV4IDQyYjk5Y2QzY2YwZWE4ZmRjYWFmZWU2OGMzODcyYjg4NTQwZTRkZjYu
LmY4ZGJkMmFiN2MyZTA0ZjVmOWI1MWRhMGNmNTQ2OTk0Y2Y2YzJhYWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RL
LnR4dApAQCAtMjIxLDggKzIyMSw4IEBAIFVJUHJvY2Vzcy9nZW9jbHVlL0dlb2NsdWVHZW9sb2Nh
dGlvblByb3ZpZGVyLmNwcAogCiBVSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVj
dG9yQ2xpZW50LmNwcAogCi1VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eUd0ay5jcHAKLVVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5
R3RrLmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eUd0ay5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsu
Y3BwCiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCiAK
IFVJUHJvY2Vzcy9MYXVuY2hlci9nbGliL1Byb2Nlc3NMYXVuY2hlckdMaWIuY3BwIEBuby11bmlm
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUluc3BlY3RvckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUluc3BlY3RvckNsaWVudC5o
CmluZGV4IGI4NDExZTZmMDA3NjliMWUwNGI5MDhiNzgwYjk1NGJiYWI3YjIwMjYuLjYxMTkxNDBk
MzY5NGZjMzZhNmNlNzQ5ZDg1ZWU0OTlmMWY0ODYxMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElJbnNwZWN0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTI4LDcgKzI4LDcgQEAKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYklu
c3BlY3RvclByb3h5OworY2xhc3MgV2ViSW5zcGVjdG9yVUlQcm94eTsKIH0KIAogbmFtZXNwYWNl
IEFQSSB7CkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIEluc3BlY3RvckNsaWVudCB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yQ2xpZW50KCkgPSBkZWZhdWx0OwogCi0gICAgdmlydHVh
bCB2b2lkIG9wZW5VUkxFeHRlcm5hbGx5KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkmLCBjb25z
dCBXVEY6OlN0cmluZyYgdXJsKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb3BlblVSTEV4dGVybmFs
bHkoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5JiwgY29uc3QgV1RGOjpTdHJpbmcmIHVybCkg
eyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSVVJQ2xpZW50LmgKaW5kZXggN2NlYmUyZmFiYWQ1YjMzNWViMzYyYTMyN2ViMzQ0YWU4MmRi
ZTY2ZS4uODM1ZDI1NWUyOWU1NjhiODQ2OWY1MGIwZGQyYjk1YThiMGU5YTA3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVJQ2xpZW50LmgKQEAgLTE5NSw5ICsxOTUsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJ1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWwoV2ViS2l0
OjpXZWJQYWdlUHJveHkmLCBXZWJBdXRoZW50aWNhdGlvblBhbmVsJiwgV2ViS2l0OjpXZWJGcmFt
ZVByb3h5JiwgV2ViS2l0OjpGcmFtZUluZm9EYXRhJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
V2ViS2l0OjpXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0KT4mJiBjb21wbGV0aW9uSGFuZGxl
cikgeyBjb21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6OldlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1
bHQ6OlVuYXZhaWxhYmxlKTsgfQogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQXR0YWNo
TG9jYWxJbnNwZWN0b3IoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkluc3BlY3Rv
clByb3h5JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKFdl
YktpdDo6V2ViUGFnZVByb3h5JiwgV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eSYpIHsgfQotICAg
IHZpcnR1YWwgUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbkZv
ckxvY2FsSW5zcGVjdG9yKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgV2ViS2l0OjpXZWJJbnNwZWN0
b3JQcm94eSYpCisgICAgdmlydHVhbCB2b2lkIGRpZEF0dGFjaExvY2FsSW5zcGVjdG9yKFdlYktp
dDo6V2ViUGFnZVByb3h5JiwgV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5JikgeyB9CisgICAg
dmlydHVhbCB2b2lkIHdpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKFdlYktpdDo6V2ViUGFnZVByb3h5
JiwgV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5JikgeyB9CisgICAgdmlydHVhbCBSZWY8QVBJ
OjpJbnNwZWN0b3JDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3Io
V2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHkmKQogICAg
IHsKICAgICAgICAgcmV0dXJuIEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tBUElD
YXN0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAppbmRleCBj
OGExODk1YTZkMGRlNzA5ZjlhZTM5OGJlNDViZWE2NmI5ZWJmYTBkLi4yZWFiNzdlODA0YTU1OGU3
ZmJhMjViNzlkNDc0ZjczMDFiMTBmMzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS0FQSUNhc3QuaApAQCAtOTUsNyArOTUsNyBAQCBjbGFzcyBXZWJGcmFtZVByb3h5OwogY2xh
c3MgV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk7CiBjbGFzcyBXZWJHZW9sb2NhdGlvblBvc2l0
aW9uOwogY2xhc3MgV2ViSWNvbkRhdGFiYXNlOwotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHk7Citj
bGFzcyBXZWJJbnNwZWN0b3JVSVByb3h5OwogY2xhc3MgV2ViTm90aWZpY2F0aW9uOwogY2xhc3Mg
V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5OwogY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJvdmlk
ZXI7CkBAIC0xMzUsNyArMTM1LDcgQEAgV0tfQUREX0FQSV9NQVBQSU5HKFdLR2VvbG9jYXRpb25Q
b3NpdGlvblJlZiwgV2ViR2VvbG9jYXRpb25Qb3NpdGlvbikKIFdLX0FERF9BUElfTUFQUElORyhX
S0hUVFBDb29raWVTdG9yZVJlZiwgQVBJOjpIVFRQQ29va2llU3RvcmUpCiBXS19BRERfQVBJX01B
UFBJTkcoV0tIaXRUZXN0UmVzdWx0UmVmLCBBUEk6OkhpdFRlc3RSZXN1bHQpCiBXS19BRERfQVBJ
X01BUFBJTkcoV0tJY29uRGF0YWJhc2VSZWYsIFdlYkljb25EYXRhYmFzZSkKLVdLX0FERF9BUElf
TUFQUElORyhXS0luc3BlY3RvclJlZiwgV2ViSW5zcGVjdG9yUHJveHkpCitXS19BRERfQVBJX01B
UFBJTkcoV0tJbnNwZWN0b3JSZWYsIFdlYkluc3BlY3RvclVJUHJveHkpCiBXS19BRERfQVBJX01B
UFBJTkcoV0tNZWRpYUtleVN5c3RlbVBlcm1pc3Npb25DYWxsYmFja1JlZiwgTWVkaWFLZXlTeXN0
ZW1QZXJtaXNzaW9uQ2FsbGJhY2spCiBXS19BRERfQVBJX01BUFBJTkcoV0tNZXNzYWdlTGlzdGVu
ZXJSZWYsIEFQSTo6TWVzc2FnZUxpc3RlbmVyKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLTmF2aWdh
dGlvbkFjdGlvblJlZiwgQVBJOjpOYXZpZ2F0aW9uQWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tJbnNwZWN0b3IuY3BwCmluZGV4IDM5MzI3YzVjOTIzMDU5MWU0ZjUy
ZTQ1NzRjNDE2ZTM2Njg3Nzg4ZjAuLmUxNDY1ZWRkMjljYWYzMTA5YzE3ZDQ0YmIzYzg4YWFiYTk4
Y2ZiYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLSW5zcGVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0luc3BlY3Rvci5j
cHAKQEAgLTI5LDE0ICsyOSwxNCBAQAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogCiAjaW5j
bHVkZSAiV0tBUElDYXN0LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNs
dWRlICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFdLVHlwZUlEIFdLSW5zcGVjdG9yR2V0VHlwZUlE
KCkKIHsKLSAgICByZXR1cm4gdG9BUEkoV2ViSW5zcGVjdG9yUHJveHk6OkFQSVR5cGUpOworICAg
IHJldHVybiB0b0FQSShXZWJJbnNwZWN0b3JVSVByb3h5OjpBUElUeXBlKTsKIH0KIAogV0tQYWdl
UmVmIFdLSW5zcGVjdG9yR2V0UGFnZShXS0luc3BlY3RvclJlZiBpbnNwZWN0b3JSZWYpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAppbmRleCAwMzZjYWY5NzMwMzViZmRh
MzE2ZGZmZjVjYWY2NTFkNzE1MTIxODI1Li4yODlkNmRhZGE3N2IxNGIyMjgwNDVkNzQ1MTA4MTYz
NTJiNmQ2ODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAg
LTczLDcgKzczLDcgQEAKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRl
ICJXZWJGb3JtQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKLSNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHkuaCIKICNpbmNs
dWRlICJXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZUdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tJbnNwZWN0b3JQcml2YXRlTWFjLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tJbnNwZWN0b3JQcml2YXRlTWFjLmgK
aW5kZXggNTJjNDRmYzEyYzdiNGJkMDhkZmZiZmMyMGVjOWNhOGRiMDA3MzQ0NC4uNWY4ODgwZmYx
MzIwNGIzOWIzODg0NmE3ZWUxMjM1NTE0MGJhNDM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvbWFjL1dLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0luc3BlY3RvclByaXZhdGVNYWMuaApAQCAt
NDEsNyArNDEsNyBAQCBjb25zdCBOU0ludGVnZXIgV0tJbnNwZWN0b3JWaWV3VGFnID0gMTAwMDsK
IAogLy8gVGhpcyBjbGFzcyBpcyB0aGUgV2ViIEluc3BlY3RvciB3aW5kb3cgZGVsZWdhdGUuIEl0
IGNhbiBiZSB1c2VkIHRvIGFkZCBpbnRlcmZhY2UKIC8vIGFjdGlvbnMgdGhhdCBuZWVkIHRvIHdv
cmsgd2hlbiB0aGUgV2ViIEluc3BlY3RvciB3aW5kb3cgaXMga2V5LgotV0tfRVhQT1JUIEBpbnRl
cmZhY2UgV0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIDogTlNPYmplY3QgPE5TV2luZG93
RGVsZWdhdGU+CitXS19FWFBPUlQgQGludGVyZmFjZSBXS1dlYkluc3BlY3RvclVJUHJveHlPYmpD
QWRhcHRlciA6IE5TT2JqZWN0IDxOU1dpbmRvd0RlbGVnYXRlPgogCiBAcHJvcGVydHkgKHJlYWRv
bmx5KSBXS0luc3BlY3RvclJlZiBpbnNwZWN0b3JSZWY7CiBAcHJvcGVydHkgKHJlYWRvbmx5KSBf
V0tJbnNwZWN0b3IgKmluc3BlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tJbnNwZWN0b3JJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS0luc3BlY3RvckludGVybmFsLmgKaW5kZXggN2ZkYmQ1OGQ5Yzcz
N2NjMjNmMWUwNTM1OTUyMjUxMzhkNzg5M2U5MC4uZmM0MTlhYmM2ODIwYjRiY2U1ZDdlMWJkY2Ix
MTI2NDY3ZmUzNTk4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS0luc3BlY3RvckludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS0luc3BlY3RvckludGVybmFsLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBv
cnQgIl9XS0luc3BlY3RvclByaXZhdGUuaCIKIAogI2ltcG9ydCAiV0tPYmplY3QuaCIKLSNpbXBv
cnQgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSVByb3h5Lmgi
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgSW5zcGVjdG9yRGVsZWdhdGU7CkBAIC0zNCw3
ICszNCw3IEBAIGNsYXNzIEluc3BlY3RvckRlbGVnYXRlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotdGVtcGxhdGU8PiBzdHJ1Y3QgV3JhcHBlclRyYWl0czxXZWJJbnNwZWN0b3JQcm94eT4gewor
dGVtcGxhdGU8PiBzdHJ1Y3QgV3JhcHBlclRyYWl0czxXZWJJbnNwZWN0b3JVSVByb3h5PiB7CiAg
ICAgdXNpbmcgV3JhcHBlckNsYXNzID0gX1dLSW5zcGVjdG9yOwogfTsKIApAQCAtNDIsNyArNDIs
NyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBXcmFwcGVyVHJhaXRzPFdlYkluc3BlY3RvclByb3h5PiB7
CiAKIEBpbnRlcmZhY2UgX1dLSW5zcGVjdG9yICgpIDxXS09iamVjdD4gewogQHBhY2thZ2UKLSAg
ICBBUEk6Ok9iamVjdFN0b3JhZ2U8V2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eT4gX2luc3BlY3Rv
cjsKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5PiBf
aW5zcGVjdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6Okluc3BlY3RvckRlbGVnYXRl
PiBfZGVsZWdhdGU7CiB9CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIubW0KaW5kZXggMDZlMmVlY2U3MTJiNTkyNTBmNTM5MGJkYzQ4MDE0YjVkN2U1MGIy
NS4uYzEzMDM5OWNmOWYzMDYzZjVhMmRjYzM5MmUxOWVlZmQ3NjNjMTUzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1JlbW90ZVdlYkluc3BlY3RvclZp
ZXdDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQpAQCAtMzEsNyArMzEsNyBAQAog
I2ltcG9ydCAiQVBJRGVidWdnYWJsZUluZm8uaCIKICNpbXBvcnQgIkFQSUluc3BlY3RvckNvbmZp
Z3VyYXRpb24uaCIKICNpbXBvcnQgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgotI2ltcG9ydCAiUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHkuaCIKICNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tJbnNwZWN0
b3JDb25maWd1cmF0aW9uSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS0luc3BlY3RvckRlYnVnZ2Fi
bGVJbmZvSW50ZXJuYWwuaCIKQEAgLTUzLDE1ICs1MywxNSBAQCBAZW5kCiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1jbGFzcyBfV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCBmaW5hbCA6
IHB1YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7CitjbGFzcyBfV0tSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50IGZpbmFsIDogcHVibGljIFJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHlDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIF9XS1JlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KF9XS1JlbW90ZVdlYkluc3BlY3Rv
clZpZXdDb250cm9sbGVyICpjb250cm9sbGVyKQorICAgIF9XS1JlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHlDbGllbnQoX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKmNvbnRyb2xs
ZXIpCiAgICAgICAgIDogbV9jb250cm9sbGVyKGNvbnRyb2xsZXIpCiAgICAgewogICAgIH0KIAot
ICAgIHZpcnR1YWwgfl9XS1JlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KCkKKyAgICB2aXJ0
dWFsIH5fV0tSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50KCkKICAgICB7CiAgICAgfQog
CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgW21fY29udHJvbGxlciBjbG9zZUZy
b21Gcm9udGVuZF07CiAgICAgfQogICAgIAotICAgIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3Vy
YXRpb24+IGNvbmZpZ3VyYXRpb25Gb3JSZW1vdGVJbnNwZWN0b3IoUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkmIGluc3BlY3Rvcikgb3ZlcnJpZGUKKyAgICBSZWY8QVBJOjpJbnNwZWN0b3JDb25maWd1
cmF0aW9uPiBjb25maWd1cmF0aW9uRm9yUmVtb3RlSW5zcGVjdG9yKFJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHkmIGluc3BlY3Rvcikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24mPihbbV9jb250cm9sbGVyLmNvbmZp
Z3VyYXRpb24gX2FwaU9iamVjdF0pOwogICAgIH0KQEAgLTg3LDcgKzg3LDcgQEAgcHJpdmF0ZToK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiBAaW1wbGVtZW50YXRpb24gX1dLUmVtb3RlV2ViSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgewotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6Ol9XS1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50PiBtX3JlbW90ZUluc3BlY3RvckNsaWVudDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpfV0tSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xp
ZW50PiBtX3JlbW90ZUluc3BlY3RvckNsaWVudDsKICAgICBfV0tJbnNwZWN0b3JDb25maWd1cmF0
aW9uICpfY29uZmlndXJhdGlvbjsKIH0KIApAQCAtOTgsOCArOTgsOCBAQCAtIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb25maWd1cmF0aW9uOihfV0tJbnNwZWN0b3JDb25maWd1cmF0aW9uICopY29u
ZmlndXJhdGlvbgogCiAgICAgX2NvbmZpZ3VyYXRpb24gPSBbY29uZmlndXJhdGlvbiBjb3B5XTsK
IAotICAgIG1fcmVtb3RlSW5zcGVjdG9yUHJveHkgPSBXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpjcmVhdGUoKTsKLSAgICBtX3JlbW90ZUluc3BlY3RvckNsaWVudCA9IG1ha2VVbmlx
dWU8V2ViS2l0OjpfV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4oc2VsZik7CisgICAg
bV9yZW1vdGVJbnNwZWN0b3JQcm94eSA9IFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eTo6Y3JlYXRlKCk7CisgICAgbV9yZW1vdGVJbnNwZWN0b3JDbGllbnQgPSBtYWtlVW5pcXVlPFdl
YktpdDo6X1dLUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudD4oc2VsZik7CiAgICAgbV9y
ZW1vdGVJbnNwZWN0b3JQcm94eS0+c2V0Q2xpZW50KG1fcmVtb3RlSW5zcGVjdG9yQ2xpZW50Lmdl
dCgpKTsKIAogICAgIHJldHVybiBzZWxmOwpAQCAtMTM1LDcgKzEzNSw3IEBAIC0gKHZvaWQpc2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kOihOU1N0cmluZyAqKW1lc3NhZ2UKICAgICBtX3JlbW90ZUluc3Bl
Y3RvclByb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSk7CiB9CiAKLS8vIE1BUks6
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IG1ldGhvZHMKKy8vIE1BUks6IFJlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHlDbGllbnQgbWV0aG9kcwogCiAtICh2b2lkKXNlbmRNZXNzYWdlVG9C
YWNrZW5kOihOU1N0cmluZyAqKW1lc3NhZ2UKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlcklu
dGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVtb3RlV2Vi
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnRlcm5hbC5oCmluZGV4IDA2NjVmN2U2MmU1MWZiZTlm
ZjUxNGQ5YzJiZjFiOTIzN2IzYTBhZjMuLjllZWM1OTQ1NGIwMWFlNDIyYzljMTRhOTZhNTg5ZjQx
Nzk2ZGZkMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlckludGVybmFsLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250
cm9sbGVySW50ZXJuYWwuaApAQCAtMjgsMTQgKzI4LDE0IEBACiAjaWYgIVRBUkdFVF9PU19JUEhP
TkUKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTsK
K2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk7CiB9CiAKIE5TX0FTU1VNRV9OT05OVUxM
X0JFR0lOCiAKIEBpbnRlcmZhY2UgX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
KCkgewogQHBhY2thZ2UKLSAgICBSZWZQdHI8V2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eT4gbV9yZW1vdGVJbnNwZWN0b3JQcm94eTsKKyAgICBSZWZQdHI8V2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5PiBtX3JlbW90ZUluc3BlY3RvclByb3h5OwogfQogQGVuZAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rv
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rv
ci5jcHAKaW5kZXggODBkMjBhYTc2MDNiYWRhYjkwMGZlNGJkMTU5MGFhZDM5YjMwZTJmZi4uZjQz
ODBhMTdmNzRjYzhhMmU4MGEwMWM2MmZiMGI0ZTc5YTMyZDFjYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNwZWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViSW5zcGVjdG9yLmNwcApAQCAt
MjAsOCArMjAsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFdlYklu
c3BlY3Rvci5oIgogCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRlICJX
ZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHku
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2Vi
S2l0V2ViSW5zcGVjdG9yUHJpdmF0ZS5oIgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAj
aW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgpAQCAtODMsNyArODMsNyBAQCBzdHJ1Y3QgX1dl
YktpdFdlYkluc3BlY3RvclByaXZhdGUgewogICAgICAgICB3ZWJJbnNwZWN0b3ItPnNldENsaWVu
dChudWxscHRyKTsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViSW5zcGVjdG9yUHJveHk+IHdlYklu
c3BlY3RvcjsKKyAgICBSZWZQdHI8V2ViSW5zcGVjdG9yVUlQcm94eT4gd2ViSW5zcGVjdG9yOwog
ICAgIENTdHJpbmcgaW5zcGVjdGVkVVJJOwogICAgIHVuc2lnbmVkIGF0dGFjaGVkSGVpZ2h0Owog
ICAgIGJvb2wgY2FuQXR0YWNoOwpAQCAtMjgzLDcgKzI4Myw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfaW5zcGVjdG9yX2NsYXNzX2luaXQoV2ViS2l0V2ViSW5zcGVjdG9yQ2xhc3MqIGZpbmRD
bGFzcykKICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDApOwogfQogCi1jbGFzcyBXZWJLaXRJbnNw
ZWN0b3JDbGllbnQgZmluYWwgOiBwdWJsaWMgV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgeworY2xh
c3MgV2ViS2l0SW5zcGVjdG9yQ2xpZW50IGZpbmFsIDogcHVibGljIFdlYkluc3BlY3RvclVJUHJv
eHlDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGV4
cGxpY2l0IFdlYktpdEluc3BlY3RvckNsaWVudChXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3Rv
cikKQEAgLTI5MiwyNiArMjkyLDI2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
Ym9vbCBvcGVuV2luZG93KFdlYkluc3BlY3RvclByb3h5Jikgb3ZlcnJpZGUKKyAgICBib29sIG9w
ZW5XaW5kb3coV2ViSW5zcGVjdG9yVUlQcm94eSYpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBn
Ym9vbGVhbiByZXR1cm5WYWx1ZTsKICAgICAgICAgZ19zaWduYWxfZW1pdChtX2luc3BlY3Rvciwg
c2lnbmFsc1tPUEVOX1dJTkRPV10sIDAsICZyZXR1cm5WYWx1ZSk7CiAgICAgICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKICAgICB9CiAKLSAgICB2b2lkIGRpZENsb3NlKFdlYkluc3BlY3RvclByb3h5
Jikgb3ZlcnJpZGUKKyAgICB2b2lkIGRpZENsb3NlKFdlYkluc3BlY3RvclVJUHJveHkmKSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgZ19zaWduYWxfZW1pdChtX2luc3BlY3Rvciwgc2lnbmFsc1tD
TE9TRURdLCAwKTsKICAgICB9CiAKLSAgICBib29sIGJyaW5nVG9Gcm9udChXZWJJbnNwZWN0b3JQ
cm94eSYpIG92ZXJyaWRlCisgICAgYm9vbCBicmluZ1RvRnJvbnQoV2ViSW5zcGVjdG9yVUlQcm94
eSYpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKICAgICAg
ICAgZ19zaWduYWxfZW1pdChtX2luc3BlY3Rvciwgc2lnbmFsc1tCUklOR19UT19GUk9OVF0sIDAs
ICZyZXR1cm5WYWx1ZSk7CiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9CiAKLSAg
ICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoV2ViSW5zcGVjdG9yUHJveHkmLCBjb25zdCBTdHJp
bmcmIHVybCkgb3ZlcnJpZGUKKyAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoV2ViSW5zcGVj
dG9yVUlQcm94eSYsIGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZQogICAgIHsKICAgICAgICAg
Q1N0cmluZyB1cmkgPSB1cmwudXRmOCgpOwogICAgICAgICBpZiAodXJpID09IG1faW5zcGVjdG9y
LT5wcml2LT5pbnNwZWN0ZWRVUkkpCkBAIC0zMjAsMjEgKzMyMCwyMSBAQCBwcml2YXRlOgogICAg
ICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QobV9pbnNwZWN0b3IpLCAiaW5zcGVjdGVkLXVy
aSIpOwogICAgIH0KIAotICAgIGJvb2wgYXR0YWNoKFdlYkluc3BlY3RvclByb3h5Jikgb3ZlcnJp
ZGUKKyAgICBib29sIGF0dGFjaChXZWJJbnNwZWN0b3JVSVByb3h5Jikgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIGdib29sZWFuIHJldHVyblZhbHVlOwogICAgICAgICBnX3NpZ25hbF9lbWl0KG1f
aW5zcGVjdG9yLCBzaWduYWxzW0FUVEFDSF0sIDAsICZyZXR1cm5WYWx1ZSk7CiAgICAgICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKICAgICB9CiAKLSAgICBib29sIGRldGFjaChXZWJJbnNwZWN0b3JQ
cm94eSYpIG92ZXJyaWRlCisgICAgYm9vbCBkZXRhY2goV2ViSW5zcGVjdG9yVUlQcm94eSYpIG92
ZXJyaWRlCiAgICAgewogICAgICAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKICAgICAgICAgZ19z
aWduYWxfZW1pdChtX2luc3BlY3Rvciwgc2lnbmFsc1tERVRBQ0hdLCAwLCAmcmV0dXJuVmFsdWUp
OwogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogCi0gICAgdm9pZCBkaWRDaGFu
Z2VBdHRhY2hlZEhlaWdodChXZWJJbnNwZWN0b3JQcm94eSYsIHVuc2lnbmVkIGhlaWdodCkgb3Zl
cnJpZGUKKyAgICB2b2lkIGRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0KFdlYkluc3BlY3RvclVJUHJv
eHkmLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAobV9pbnNw
ZWN0b3ItPnByaXYtPmF0dGFjaGVkSGVpZ2h0ID09IGhlaWdodCkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTM0MiwxMSArMzQyLDExIEBAIHByaXZhdGU6CiAgICAgICAgIGdfb2JqZWN0X25vdGlm
eShHX09CSkVDVChtX2luc3BlY3RvciksICJhdHRhY2hlZC1oZWlnaHQiKTsKICAgICB9CiAKLSAg
ICB2b2lkIGRpZENoYW5nZUF0dGFjaGVkV2lkdGgoV2ViSW5zcGVjdG9yUHJveHkmLCB1bnNpZ25l
ZCB3aWR0aCkgb3ZlcnJpZGUKKyAgICB2b2lkIGRpZENoYW5nZUF0dGFjaGVkV2lkdGgoV2ViSW5z
cGVjdG9yVUlQcm94eSYsIHVuc2lnbmVkIHdpZHRoKSBvdmVycmlkZQogICAgIHsKICAgICB9CiAK
LSAgICB2b2lkIGRpZENoYW5nZUF0dGFjaEF2YWlsYWJpbGl0eShXZWJJbnNwZWN0b3JQcm94eSYs
IGJvb2wgYXZhaWxhYmxlKSBvdmVycmlkZQorICAgIHZvaWQgZGlkQ2hhbmdlQXR0YWNoQXZhaWxh
YmlsaXR5KFdlYkluc3BlY3RvclVJUHJveHkmLCBib29sIGF2YWlsYWJsZSkgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIGlmIChtX2luc3BlY3Rvci0+cHJpdi0+Y2FuQXR0YWNoID09IGF2YWlsYWJs
ZSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM1Nyw3ICszNTcsNyBAQCBwcml2YXRlOgogICAg
IFdlYktpdFdlYkluc3BlY3RvciogbV9pbnNwZWN0b3I7CiB9OwogCi1XZWJLaXRXZWJJbnNwZWN0
b3IqIHdlYmtpdFdlYkluc3BlY3RvckNyZWF0ZShXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVj
dG9yKQorV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJraXRXZWJJbnNwZWN0b3JDcmVhdGUoV2ViSW5z
cGVjdG9yVUlQcm94eSogd2ViSW5zcGVjdG9yKQogewogICAgIFdlYktpdFdlYkluc3BlY3Rvciog
aW5zcGVjdG9yID0gV0VCS0lUX1dFQl9JTlNQRUNUT1IoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X1dFQl9JTlNQRUNUT1IsIE5VTEwpKTsKICAgICBpbnNwZWN0b3ItPnByaXYtPndlYkluc3BlY3Rv
ciA9IHdlYkluc3BlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViSW5zcGVjdG9yUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlLmgKaW5kZXggYmI1ZGJiM2NiOTBm
OWIwYmI4NjUyZWJlYzllZmNkMGMzOTA5ODI0Mi4uZWM3Y2ZhZGMxYjI1MmY5NjZjMmRhZmI3NjIy
MjNmZDNkMGRhMzJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlLmgKQEAgLTIxLDQgKzIxLDQgQEAK
IAogI2luY2x1ZGUgIldlYktpdFdlYkluc3BlY3Rvci5oIgogCi1XZWJLaXRXZWJJbnNwZWN0b3Iq
IHdlYmtpdFdlYkluc3BlY3RvckNyZWF0ZShXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Kik7CitX
ZWJLaXRXZWJJbnNwZWN0b3IqIHdlYmtpdFdlYkluc3BlY3RvckNyZWF0ZShXZWJLaXQ6OldlYklu
c3BlY3RvclVJUHJveHkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggZGQwZWI2YWIwODk1YTkyNjVjZDIyN2Vh
N2NkODQ1OGU3ZGMxYmRmMy4uNjBlMjM4YjM3ZjFkZTA5YmNlMWZkOTU0MWE1OWUxZjI4OTBkY2Ux
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJQb2ludGVyTG9ja01h
bmFnZXIuaCIKICNpbmNsdWRlICJWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJX
ZWJFdmVudEZhY3RvcnkuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1
ZGUgIldlYkluc3BlY3RvclVJUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5o
IgogI2luY2x1ZGUgIldlYktpdEVtb2ppQ2hvb3Nlci5oIgogI2luY2x1ZGUgIldlYktpdEluaXRp
YWxpemUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCmluZGV4IGQwOWFlYTQ1ZDk0ZmI3MzY3YmE4OGZk
ZjgzMjZkZWExMjA5ZDAyY2UuLjBiNDM4ZGFhNDQxZTBjOWI2NWU2ZWMwNGNjNGNiNzA1Zjg0NDNj
MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIlZp
ZXdTbmFwc2hvdFN0b3JlLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oIgog
I2luY2x1ZGUgIldlYkhpdFRlc3RSZXN1bHREYXRhLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9y
UHJveHkuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCiAjaW5jbHVkZSAiV2Vi
S2l0SW5wdXRNZXRob2RDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2UuaCIK
ICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggNjk3
YzM0MjcyZjRhM2ViMDljODViZDFkNzkyOTY5ODVmMTA1YjVkNC4uNTYxYjkzMWRkNTc2M2MyYWI4
NzM2YjJmZjBiN2YyNmZjOThiM2E5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTM4LDcg
KzM4LDcgQEAKICNpbmNsdWRlICJXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5TWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNs
dWRlICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NQb29sLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tCmluZGV4IDY0
Y2U5NzJmY2I4MWZjNjVjMThjNTY2Yzk1NjJkODkyZDdhNTU1YzMuLjc4YWRmYzYwZDAyYzE1ODc4
MWMxYmNhYzI3ODUwY2Y5ZDExY2UyNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFj
Lm1tCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIldl
YkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5o
IgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5
LmgiCiAjaW1wb3J0ICJfV0tBdXRvbWF0aW9uU2Vzc2lvbi5oIgogI2ltcG9ydCA8Q2FyYm9uL0Nh
cmJvbi5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxl
Z2F0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCmluZGV4
IDcyYTQ1YTRjOTc1ZTM2YjdlZWQwMGQ0YzlkZTg1NDAzOGIyODNmNTIuLmQ0NzBkMjI1MjE5Yzhl
YjYwYzVkM2E1N2UwOGI4MmI2NDQzMWFlNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9VSURlbGVnYXRlLmgKQEAgLTEyNSw5ICsxMjUsOSBAQCBwcml2YXRlOgogICAgICAgICBi
b29sIHJ1bk9wZW5QYW5lbChXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5KiwgRnJhbWVJbmZv
RGF0YSYmLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqLCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lclByb3h5KikgZmluYWw7CiAgICAgICAgIHZvaWQgZGlkRXhjZWVkQmFja2dyb3VuZFJlc291
cmNlTGltaXRXaGlsZUluRm9yZWdyb3VuZChXZWJQYWdlUHJveHkmLCBXS1Jlc291cmNlTGltaXQp
IGZpbmFsOwogICAgICAgICB2b2lkIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoV2Vi
UGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0
IFVSTCYsIEFQSTo6RGF0YSYpIGZpbmFsOwotICAgICAgICBSZWY8QVBJOjpJbnNwZWN0b3JDb25m
aWd1cmF0aW9uPiBjb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3IoV2ViUGFnZVByb3h5Jiwg
V2ViSW5zcGVjdG9yUHJveHkmKSBmaW5hbDsKLSAgICAgICAgdm9pZCBkaWRBdHRhY2hMb2NhbElu
c3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0b3JQcm94eSYpIGZpbmFsOwotICAgICAg
ICB2b2lkIHdpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKFdlYlBhZ2VQcm94eSYsIFdlYkluc3BlY3Rv
clByb3h5JikgZmluYWw7CisgICAgICAgIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+
IGNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0
b3JVSVByb3h5JikgZmluYWw7CisgICAgICAgIHZvaWQgZGlkQXR0YWNoTG9jYWxJbnNwZWN0b3Io
V2ViUGFnZVByb3h5JiwgV2ViSW5zcGVjdG9yVUlQcm94eSYpIGZpbmFsOworICAgICAgICB2b2lk
IHdpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKFdlYlBhZ2VQcm94eSYsIFdlYkluc3BlY3RvclVJUHJv
eHkmKSBmaW5hbDsKICNlbmRpZgogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAg
ICAgIHZvaWQgc2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyhXZWJL
aXQ6OldlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmLCBGcmFtZUluZm9EYXRhJiYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1VJRGVsZWdhdGUubW0KaW5kZXggYzhhYmVkNjE0NWE5ODJhODYxMTc2NDkxNDU3
ZmFmNDhhYTVmZTg0OC4uMzg2YmIyN2VkZWQ5NDNlYTA5ZTQzYmMyYWJkYmJlMGI4MDAwNGRjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCkBAIC05NTYs
NyArOTU2LDcgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViS2l0OjoKICAgICB9KS5nZXQoKV07CiB9CiAK
LVJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpj
b25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3IoV2ViUGFnZVByb3h5JiwgV2ViSW5zcGVjdG9y
UHJveHkmIGluc3BlY3RvcikKK1JlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IFVJRGVs
ZWdhdGU6OlVJQ2xpZW50Ojpjb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3IoV2ViUGFnZVBy
b3h5JiwgV2ViSW5zcGVjdG9yVUlQcm94eSYgaW5zcGVjdG9yKQogewogICAgIGlmICghbV91aURl
bGVnYXRlKQogICAgICAgICByZXR1cm4gQVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uOjpjcmVh
dGUoKTsKQEAgLTk3MSw3ICs5NzEsNyBAQCBSZWY8QVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9u
PiBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y29uZmlndXJhdGlvbkZvckxvY2FsSW5zcAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24mPihbWyhpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZp
ZXcuZ2V0KCkuZ2V0KCkgY29uZmlndXJhdGlvbkZvckxvY2FsSW5zcGVjdG9yOndyYXBwZXIoaW5z
cGVjdG9yKV0gX2FwaU9iamVjdF0pOwogfQogCi12b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpk
aWRBdHRhY2hMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0b3JQcm94eSYg
aW5zcGVjdG9yKQordm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkQXR0YWNoTG9jYWxJbnNw
ZWN0b3IoV2ViUGFnZVByb3h5JiwgV2ViSW5zcGVjdG9yVUlQcm94eSYgaW5zcGVjdG9yKQogewog
ICAgIGlmICghbV91aURlbGVnYXRlKQogICAgICAgICByZXR1cm47CkBAIC05ODYsNyArOTg2LDcg
QEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkQXR0YWNoTG9jYWxJbnNwZWN0b3IoV2Vi
UGFnZVByb3h5JiwgV2ViSW5zcGVjdG9yUHIKICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRl
PilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBk
aWRBdHRhY2hMb2NhbEluc3BlY3Rvcjp3cmFwcGVyKGluc3BlY3RvcildOwogfQogCi12b2lkIFVJ
RGVsZWdhdGU6OlVJQ2xpZW50Ojp3aWxsQ2xvc2VMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkm
LCBXZWJJbnNwZWN0b3JQcm94eSYgaW5zcGVjdG9yKQordm9pZCBVSURlbGVnYXRlOjpVSUNsaWVu
dDo6d2lsbENsb3NlTG9jYWxJbnNwZWN0b3IoV2ViUGFnZVByb3h5JiwgV2ViSW5zcGVjdG9yVUlQ
cm94eSYgaW5zcGVjdG9yKQogewogICAgIGlmICghbV91aURlbGVnYXRlKQogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCmluZGV4
IGEwNzc3M2NhOTc1YmM2ZTgyYzA1NjAzODFkNDYzODY2NTUzZjA0M2QuLjQ4MDViODAxZDIyNTE5
NzU1OTE0ZjBhMDYzOWM0MjE1MjY2NzVkNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlZpZXdJbXBsLm1tCkBAIC03NCw3ICs3NCw3IEBACiAjaW1wb3J0ICJXZWJCYWNr
Rm9yd2FyZExpc3QuaCIKICNpbXBvcnQgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKICNpbXBvcnQg
IldlYkV2ZW50RmFjdG9yeS5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbXBv
cnQgIldlYkluc3BlY3RvclVJUHJveHkuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2lt
cG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0
b3JCcm93c2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0Fn
ZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwCmluZGV4IGRiZDYzODI1NDVhMTQ5ZjM5ZDdh
MjY0ZWFmZTQ0YzM5M2M3NmRkMjEuLmZmNjgwYjUxZGFjNjg2ZDM4NzliZWVmN2U1MDM4ODRhZjJm
YmVhNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2Vu
dHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAKQEAgLTI3LDcgKzI3
LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JCcm93c2VyQWdlbnQuaCIKIAogI2luY2x1ZGUgIkFQ
SVVJQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJJbnNwZWN0b3JVSVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9Db2NvYS9JbnNwZWN0b3JEZWxlZ2F0ZS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0NvY29hL0luc3BlY3RvckRlbGVnYXRlLmgKaW5kZXgg
ZTFmYWVlNjk1NDQ5YWQ5Yjg0MjI2YzM5YzZjNGZmYTg4MDIxOTBmOS4uODBkNzRlNzVjMmFmMjJm
OTNjMDlkZjY1NWE1MTI4MmQ0NTI5YTQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL0NvY29hL0luc3BlY3RvckRlbGVnYXRlLmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0NvY29hL0luc3BlY3RvckRlbGVnYXRlLmgKQEAgLTM0
LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFdlYkluc3BlY3RvclBy
b3h5OworY2xhc3MgV2ViSW5zcGVjdG9yVUlQcm94eTsKIAogY2xhc3MgSW5zcGVjdG9yRGVsZWdh
dGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNTQsNyArNTQsNyBAQCBwcml2
YXRlOgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gQVBJOjpJbnNwZWN0b3JDbGllbnQKLSAg
ICAgICAgdm9pZCBvcGVuVVJMRXh0ZXJuYWxseShXZWJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0
cmluZyYgdXJsKTsKKyAgICAgICAgdm9pZCBvcGVuVVJMRXh0ZXJuYWxseShXZWJJbnNwZWN0b3JV
SVByb3h5JiwgY29uc3QgU3RyaW5nJiB1cmwpOwogCiAgICAgICAgIEluc3BlY3RvckRlbGVnYXRl
JiBtX2luc3BlY3RvckRlbGVnYXRlOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRGVsZWdhdGUubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRGVsZWdhdGUubW0KaW5k
ZXggYTJlODM3ODJjNjY3MDk2Yzg2NDY5NzVjMzNlNGRkZGE1YjE1NWY5NS4uYzJiOGUwYzliZjIz
ZTZiMGNhZGRlMTk4YzRlMDExYzA2NDY0NDVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL0NvY29hL0luc3BlY3RvckRlbGVnYXRlLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9Db2NvYS9JbnNwZWN0b3JEZWxlZ2F0ZS5tbQpA
QCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJJbnNwZWN0b3JE
ZWxlZ2F0ZS5oIgogCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2ltcG9ydCAiV2Vi
SW5zcGVjdG9yVUlQcm94eS5oIgogI2ltcG9ydCAiX1dLSW5zcGVjdG9yRGVsZWdhdGUuaCIKICNp
bXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCiAKQEAgLTU3LDcgKzU3LDcgQEAgSW5zcGVj
dG9yRGVsZWdhdGU6Okluc3BlY3RvckNsaWVudDo6fkluc3BlY3RvckNsaWVudCgpCiB7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVsZWdhdGU6Okluc3BlY3RvckNsaWVudDo6b3BlblVSTEV4dGVybmFs
bHkoV2ViSW5zcGVjdG9yUHJveHkmLCBjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgSW5zcGVjdG9y
RGVsZWdhdGU6Okluc3BlY3RvckNsaWVudDo6b3BlblVSTEV4dGVybmFsbHkoV2ViSW5zcGVjdG9y
VUlQcm94eSYsIGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmICghbV9pbnNwZWN0b3JEZWxl
Z2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy5pbnNwZWN0b3JPcGVuVVJMRXh0ZXJuYWxseSkKICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L0NvY29hL0luc3BlY3RvckV4dGVuc2lvbkRlbGVnYXRlLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL0NvY29hL0luc3BlY3RvckV4dGVuc2lvbkRlbGVnYXRlLm1tCmluZGV4
IGY3ZjM3MmY5OGNlMzFkMGIyOWQwYTU5Y2Q2MmZhZDAzMGZiNDQwZTQuLjdlMGZiOThiNmYzZWZh
NmVjODljOTRmOThmNDdlZTQyNzg0Y2EyNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9Db2NvYS9JbnNwZWN0b3JFeHRlbnNpb25EZWxlZ2F0ZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRXh0ZW5z
aW9uRGVsZWdhdGUubW0KQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
RVhURU5TSU9OUykKIAotI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbXBvcnQgIldl
Ykluc3BlY3RvclVJUHJveHkuaCIKICNpbXBvcnQgIl9XS0luc3BlY3RvckV4dGVuc2lvbkRlbGVn
YXRlLmgiCiAjaW1wb3J0ICJfV0tJbnNwZWN0b3JFeHRlbnNpb25JbnRlcm5hbC5oIgogI2ltcG9y
dCA8d3RmL1VuaXF1ZVJlZi5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDJiZGE2Zjc3M2QyMmFhNDExMjhkNmY5OTcwMTVlNjM1ZTAyZWRi
MzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2lu
Y2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgiCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgot
I2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJS
ZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJv
eHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvTm90SW1wbGVtZW50ZWQuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykK
LSNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eS5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpCi0gICAgOiBt
X2RlYnVnZ2FibGVJbmZvKEFQSTo6RGVidWdnYWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dhYmxlSW5m
b0RhdGE6OmVtcHR5KCkpKQotewotfQotCi1SZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6flJlbW90
ZVdlYkluc3BlY3RvclByb3h5KCkKLXsKLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yUGFnZSk7Ci19
Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmludmFsaWRhdGUoKQotewotICAgIGNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotewot
I2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2Vu
ZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNldERpYWdub3N0aWNMb2dnaW5nQXZh
aWxhYmxlKGF2YWlsYWJsZSkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsK
LSNlbmRpZgotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpsb2FkKFJlZjxBUEk6
OkRlYnVnZ2FibGVJbmZvPiYmIGRlYnVnZ2FibGVJbmZvLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRD
b21tYW5kc1VSTCkKLXsKLSAgICBtX2RlYnVnZ2FibGVJbmZvID0gV1RGTW92ZShkZWJ1Z2dhYmxl
SW5mbyk7Ci0gICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBiYWNrZW5kQ29tbWFuZHNVUkw7Ci0K
LSAgICBjcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIG1faW5zcGVjdG9yUGFn
ZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkluaXRpYWxpemUobV9kZWJ1
Z2dhYmxlSW5mby0+ZGVidWdnYWJsZUluZm9EYXRhKCksIGJhY2tlbmRDb21tYW5kc1VSTCkpOwot
ICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBXZWJJbnNwZWN0b3JQ
cm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OmNsb3NlRnJvbUJhY2tlbmQoKQotewotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2lu
ZG93KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbUNyYXNo
KCkKLXsKLSAgICAvLyBCZWhhdmUgYXMgaWYgdGhlIGZyb250ZW5kIGp1c3QgY2xvc2VkLCBzbyBj
bGllbnRzIGFyZSBpbmZvcm1lZCB0aGUgZnJvbnRlbmQgaXMgZ29uZS4KLSAgICBmcm9udGVuZERp
ZENsb3NlKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQotewot
ICAgIGJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpz
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1faW5z
cGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNz
YWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OmZyb250ZW5kTG9hZGVkKCkKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMp
Ci0gICAgbV9leHRlbnNpb25Db250cm9sbGVyLT5pbnNwZWN0b3JGcm9udGVuZExvYWRlZCgpOwot
I2VuZGlmCi19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kRGlkQ2xv
c2UoKQotewotICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gcHJvdGVjdCgqdGhpcyk7
Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5jbG9zZUZyb21Gcm9udGVu
ZCgpOwotCi0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkKLXsKLSAgICBBU1NFUlQoIW1fYmFja2VuZENv
bW1hbmRzVVJMLmlzRW1wdHkoKSk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
OwotICAgIGxvYWQobV9kZWJ1Z2dhYmxlSW5mby5jb3B5UmVmKCksIG1fYmFja2VuZENvbW1hbmRz
VVJMKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cmVzZXRTdGF0ZSgpCi17
Ci0gICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wg
Zm9yY2VTYXZlRGlhbG9nKQotewotICAgIHBsYXRmb3JtU2F2ZShzdWdnZXN0ZWRVUkwsIGNvbnRl
bnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZURpYWxvZyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OmFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50KQotewotICAgIHBsYXRmb3JtQXBwZW5kKHN1Z2dlc3RlZFVSTCwgY29u
dGVudCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNldFNoZWV0UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcGxhdGZvcm1TZXRTaGVldFJlY3QocmVjdCk7
Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNldEZvcmNlZEFwcGVhcmFuY2Uo
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKLXsKLSAgICBw
bGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoYXBwZWFyYW5jZSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgcGxhdGZvcm1TdGFy
dFdpbmRvd0RyYWcoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6b3BlblVS
TEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgcGxhdGZvcm1PcGVuVVJMRXh0
ZXJuYWxseSh1cmwpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzaG93Q2Vy
dGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAg
cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKTsKLX0KLQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPnNlbmRNZXNz
YWdlVG9CYWNrZW5kKG1lc3NhZ2UpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpjcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmIChtX2luc3BlY3RvclBh
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZSA9IHBsYXRmb3JtQ3Jl
YXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0KLSAgICB0cmFja0luc3BlY3RvclBhZ2UobV9p
bnNwZWN0b3JQYWdlLCBudWxscHRyKTsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2Vzcygp
LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMp
OwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQotICAgIG1fZXh0ZW5zaW9uQ29u
dHJvbGxlciA9IFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5OjpjcmVhdGUo
Km1faW5zcGVjdG9yUGFnZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmICghbV9pbnNwZWN0
b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3Mo
KS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwot
Ci0gICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfRVhURU5TSU9OUykKLSAgICAvLyBUaGlzIGV4dGVuc2lvbiBjb250cm9sbGVy
IG1heSBiZSBrZXB0IGFsaXZlIGJ5IHRoZSBJUEMgZGlzcGF0Y2hlciBiZXlvbmQgdGhlIHBvaW50
Ci0gICAgLy8gd2hlbiBtX2luc3BlY3RvclBhZ2UgaXMgY2xlYXJlZCBiZWxvdy4gTm90aWZ5IHRo
ZSBjb250cm9sbGVyIHNvIGl0IGNhbiBjbGVhbiB1cCBiZWZvcmUgdGhlbi4KLSAgICBtX2V4dGVu
c2lvbkNvbnRyb2xsZXItPmluc3BlY3RvckZyb250ZW5kV2lsbENsb3NlKCk7Ci0gICAgbV9leHRl
bnNpb25Db250cm9sbGVyID0gbnVsbHB0cjsKLSNlbmRpZgotCi0gICAgbV9pbnNwZWN0b3JQYWdl
ID0gbnVsbHB0cjsKLQotICAgIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsK
LX0KLQotI2lmICFFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikgfHwgKCFQTEFURk9STShNQUMpICYm
ICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pKQotV2ViUGFnZVByb3h5KiBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpIHsgfQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKSB7IH0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmLCBib29sLCBib29sKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEZvcmNl
ZEFwcGVhcmFuY2UoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UpIHsgfQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlblVSTEV4dGVybmFsbHko
Y29uc3QgU3RyaW5nJikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mKSB7IH0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKSB7
IH0KLSNlbmRpZiAvLyAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8ICghUExBVEZPUk0oTUFD
KSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSkKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhNDM4OTg0YTY1MzcyZTQ3YjEyOTlmNTRjNjZlNGVkNTc5Nzc0M2Q3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
QVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9GbG9hdFJlY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xp
ZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLU9CSkNfQ0xBU1MgTlNVUkw7Ci1PQkpDX0NMQVNT
IE5TV2luZG93OwotT0JKQ19DTEFTUyBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyOwotT0JKQ19D
TEFTUyBXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXI7Ci1PQkpDX0NMQVNTIFdL
V2ViVmlldzsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDZXJ0aWZpY2F0
ZUluZm87Ci19Ci0KLW5hbWVzcGFjZSBBUEkgewotY2xhc3MgRGVidWdnYWJsZUluZm87Ci1jbGFz
cyBJbnNwZWN0b3JDb25maWd1cmF0aW9uOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk7Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBX
ZWJWaWV3OwotI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKLWNsYXNzIFdlYkluc3Bl
Y3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5OwotI2VuZGlmCi0KLWNsYXNzIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5Q2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eUNsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRv
QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xv
c2VGcm9tRnJvbnRlbmQoKSA9IDA7Ci0gICAgdmlydHVhbCBSZWY8QVBJOjpJbnNwZWN0b3JDb25m
aWd1cmF0aW9uPiBjb25maWd1cmF0aW9uRm9yUmVtb3RlSW5zcGVjdG9yKFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5JikgPSAwOwotfTsKLQotY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgOiBw
dWJsaWMgUmVmQ291bnRlZDxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4sIHB1YmxpYyBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJl
bW90ZVdlYkluc3BlY3RvclByb3h5KCkpOwotICAgIH0KLQotICAgIH5SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eSgpOwotCi0gICAgdm9pZCBzZXRDbGllbnQoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlD
bGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQotCi0gICAgYm9vbCBpc1VuZGVy
VGVzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldERpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlKGJvb2wpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICB2
b2lkIGxvYWQoUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+JiYsIGNvbnN0IFN0cmluZyYgYmFja2Vu
ZENvbW1hbmRzVVJMKTsKLSAgICB2b2lkIGNsb3NlRnJvbUJhY2tlbmQoKTsKLSAgICB2b2lkIHNo
b3coKTsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMpCi0gICAgV2ViSW5zcGVj
dG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkqIGV4dGVuc2lvbkNvbnRyb2xsZXIoKSBjb25z
dCB7IHJldHVybiBtX2V4dGVuc2lvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KLSNlbmRpZgotICAgIAot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICBOU1dpbmRvdyAqd2luZG93KCkgY29uc3QgeyByZXR1cm4g
bV93aW5kb3cuZ2V0KCk7IH0KLSAgICBXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKLQotICAg
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2hlZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9z
aGVldFJlY3Q7IH0KLQotICAgIHZvaWQgZGlkQmVjb21lQWN0aXZlKCk7Ci0jZW5kaWYKLQotI2lm
IFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHVwZGF0ZVdpbmRvd1RpdGxlKGNvbnN0IENTdHJpbmcm
KTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOX0NBSVJPKQotICAgIExSRVNVTFQgc2l6ZUNo
YW5nZSgpOwotICAgIExSRVNVTFQgb25DbG9zZSgpOwotCi0gICAgc3RhdGljIExSRVNVTFQgQ0FM
TEJBQ0sgV25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci0jZW5kaWYKLQotICAg
IHZvaWQgY2xvc2VGcm9tQ3Jhc2goKTsKLQotcHJpdmF0ZToKLSAgICBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eSgpOwotCi0gICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwot
Ci0gICAgLy8gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgbWVzc2FnZXMuCi0gICAgdm9pZCBmcm9u
dGVuZExvYWRlZCgpOwotICAgIHZvaWQgZnJvbnRlbmREaWRDbG9zZSgpOwotICAgIHZvaWQgcmVv
cGVuKCk7Ci0gICAgdm9pZCByZXNldFN0YXRlKCk7Ci0gICAgdm9pZCBicmluZ1RvRnJvbnQoKTsK
LSAgICB2b2lkIHNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250
ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpOwotICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCk7Ci0gICAg
dm9pZCBzZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBz
ZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBl
YXJhbmNlKTsKLSAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOwotICAgIHZvaWQgb3BlblVSTEV4
dGVybmFsbHkoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNv
bnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotICAgIHZvaWQgY3JlYXRlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCk7Ci0gICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwot
Ci0gICAgLy8gUGxhdGZvcm0gaW1wbGVtZW50YXRpb25zLgotICAgIFdlYlBhZ2VQcm94eSogcGxh
dGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICB2b2lkIHBsYXRmb3JtQ2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICB2b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgp
OwotICAgIHZvaWQgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLSAgICB2b2lkIHBsYXRmb3JtU2F2
ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGVuZChj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwotICAgIHZvaWQg
cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9p
ZCBwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OkFwcGVhcmFuY2UpOwotICAgIHZvaWQgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsK
LSAgICB2b2lkIHBsYXRmb3JtT3BlblVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJiB1cmwpOwot
ICAgIHZvaWQgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvJik7Ci0KLSAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogbV9jbGllbnQg
eyBudWxscHRyIH07Ci0gICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRy
IH07Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMpCi0gICAgUmVmUHRyPFdlYklu
c3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5PiBtX2V4dGVuc2lvbkNvbnRyb2xsZXI7
Ci0jZW5kaWYKLSAgICAKLSAgICBSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gbV9kZWJ1Z2dhYmxl
SW5mbzsKLSAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7Ci0KLSNpZiBQTEFURk9STShN
QUMpCi0gICAgUmV0YWluUHRyPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9y
VmlldzsKLSAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IG1fd2luZG93OwotICAgIFJldGFpblB0cjxX
S1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7Ci0gICAg
SGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxOU1VSTD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxN
YXA7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fc2hlZXRSZWN0OwotI2VuZGlmCi0jaWYgUExB
VEZPUk0oR1RLKQotICAgIEd0a1dpZGdldCogbV93ZWJWaWV3IHsgbnVsbHB0ciB9OwotICAgIEd0
a1dpZGdldCogbV93aW5kb3cgeyBudWxscHRyIH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShXSU5f
Q0FJUk8pCi0gICAgSFdORCBtX2Zyb250ZW5kSGFuZGxlOwotICAgIFJlZlB0cjxXZWJWaWV3PiBt
X3dlYlZpZXc7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclBy
b3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2NzRiZWMzMjQ2ZDM4ODkzZDU1MmU0NjZiN2VkN2VjZDJlMDhmZGZmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rl
di9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0j
IGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0j
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSB7Ci0gICAg
RnJvbnRlbmRMb2FkZWQoKQotICAgIEZyb250ZW5kRGlkQ2xvc2UoKQotICAgIFJlb3BlbigpCi0g
ICAgUmVzZXRTdGF0ZSgpCi0gICAgQnJpbmdUb0Zyb250KCkKLQotICAgIFNhdmUoU3RyaW5nIGZp
bGVuYW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2
ZUFzKQotICAgIEFwcGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQotCi0gICAg
U2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBw
ZWFyYW5jZSBhcHBlYXJhbmNlKQotCi0gICAgU2V0U2hlZXRSZWN0KFdlYkNvcmU6OkZsb2F0UmVj
dCByZWN0KQotCi0gICAgU3RhcnRXaW5kb3dEcmFnKCkKLQotICAgIE9wZW5VUkxFeHRlcm5hbGx5
KFN0cmluZyB1cmwpCi0gICAgU2hvd0NlcnRpZmljYXRlKFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byBjZXJ0aWZpY2F0ZUluZm8pCi0KLSAgICBTZW5kTWVzc2FnZVRvQmFja2VuZChTdHJpbmcgbWVz
c2FnZSkKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9S
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTZkYjM2
NDA2NzU4MWIzN2Q3ZmQ4Njg2MWRkODdkZWEzODJkMzU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHku
Y3BwCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oIgorCisjaW5jbHVkZSAi
QVBJRGVidWdnYWJsZUluZm8uaCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVk
ZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYklu
c3BlY3RvclVJUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHku
aCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKKyNp
bmNsdWRlICJXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eS5oIgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkoKQorICAgIDog
bV9kZWJ1Z2dhYmxlSW5mbyhBUEk6OkRlYnVnZ2FibGVJbmZvOjpjcmVhdGUoRGVidWdnYWJsZUlu
Zm9EYXRhOjplbXB0eSgpKSkKK3sKK30KKworUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6flJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHkoKQoreworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdl
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjppbnZhbGlkYXRlKCkKK3sK
KyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclVJUHJveHk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxh
YmxlKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNldERpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJsZSkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYXZh
aWxhYmxlKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6Omxv
YWQoUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+JiYgZGVidWdnYWJsZUluZm8sIGNvbnN0IFN0cmlu
ZyYgYmFja2VuZENvbW1hbmRzVVJMKQoreworICAgIG1fZGVidWdnYWJsZUluZm8gPSBXVEZNb3Zl
KGRlYnVnZ2FibGVJbmZvKTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IGJhY2tlbmRDb21t
YW5kc1VSTDsKKworICAgIGNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgbV9p
bnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6SW5pdGlh
bGl6ZShtX2RlYnVnZ2FibGVJbmZvLT5kZWJ1Z2dhYmxlSW5mb0RhdGEoKSwgYmFja2VuZENvbW1h
bmRzVVJMKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIFdl
Ykluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSkpOworfQorCit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbUJhY2tlbmQoKQoreworICAgIGNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eTo6Y2xvc2VGcm9tQ3Jhc2goKQoreworICAgIC8vIEJlaGF2ZSBhcyBpZiB0aGUgZnJvbnRlbmQg
anVzdCBjbG9zZWQsIHNvIGNsaWVudHMgYXJlIGluZm9ybWVkIHRoZSBmcm9udGVuZCBpcyBnb25l
LgorICAgIGZyb250ZW5kRGlkQ2xvc2UoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5OjpzaG93KCkKK3sKKyAgICBicmluZ1RvRnJvbnQoKTsKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQoreworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7Cit9CisKK3ZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6ZnJvbnRlbmRMb2FkZWQoKQoreworI2lmIEVOQUJM
RShJTlNQRUNUT1JfRVhURU5TSU9OUykKKyAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXItPmluc3Bl
Y3RvckZyb250ZW5kTG9hZGVkKCk7CisjZW5kaWYKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5Ojpmcm9udGVuZERpZENsb3NlKCkKK3sKKyAgICBSZWY8UmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eT4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAg
IG1fY2xpZW50LT5jbG9zZUZyb21Gcm9udGVuZCgpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpyZW9wZW4o
KQoreworICAgIEFTU0VSVCghbV9iYWNrZW5kQ29tbWFuZHNVUkwuaXNFbXB0eSgpKTsKKworICAg
IGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisgICAgbG9hZChtX2RlYnVnZ2FibGVJbmZv
LmNvcHlSZWYoKSwgbV9iYWNrZW5kQ29tbWFuZHNVUkwpOworfQorCit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclVJUHJveHk6OnJlc2V0U3RhdGUoKQoreworICAgIHBsYXRmb3JtUmVzZXRTdGF0ZSgp
OworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmJyaW5nVG9Gcm9udCgpCit7
CisgICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7Cisg
ICAgcGxhdGZvcm1TYXZlKHN1Z2dlc3RlZFVSTCwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9y
Y2VTYXZlRGlhbG9nKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjphcHBl
bmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKK3sK
KyAgICBwbGF0Zm9ybUFwcGVuZChzdWdnZXN0ZWRVUkwsIGNvbnRlbnQpOworfQorCit2b2lkIFJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgcGxhdGZvcm1TZXRTaGVldFJlY3QocmVjdCk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6QXBwZWFyYW5jZSBhcHBlYXJhbmNlKQoreworICAgIHBsYXRmb3JtU2V0Rm9yY2Vk
QXBwZWFyYW5jZShhcHBlYXJhbmNlKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5OjpzdGFydFdpbmRvd0RyYWcoKQoreworICAgIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7
Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6b3BlblVSTEV4dGVybmFsbHko
Y29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgcGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseSh1cmwp
OworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShj
b25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pOworfQorCit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zZW5kTWVzc2FnZVRvQmFj
a2VuZChtZXNzYWdlKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVh
dGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9yUGFnZSA9IHBsYXRmb3JtQ3JlYXRlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCk7CisKKyAgICB0cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0
b3JQYWdlLCBudWxscHRyKTsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMpCisgICAgbV9leHRlbnNpb25Db250cm9s
bGVyID0gV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHk6OmNyZWF0ZSgqbV9p
bnNwZWN0b3JQYWdlKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk6OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdG9y
UGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCku
cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwor
CisgICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfRVhURU5TSU9OUykKKyAgICAvLyBUaGlzIGV4dGVuc2lvbiBjb250cm9sbGVy
IG1heSBiZSBrZXB0IGFsaXZlIGJ5IHRoZSBJUEMgZGlzcGF0Y2hlciBiZXlvbmQgdGhlIHBvaW50
CisgICAgLy8gd2hlbiBtX2luc3BlY3RvclBhZ2UgaXMgY2xlYXJlZCBiZWxvdy4gTm90aWZ5IHRo
ZSBjb250cm9sbGVyIHNvIGl0IGNhbiBjbGVhbiB1cCBiZWZvcmUgdGhlbi4KKyAgICBtX2V4dGVu
c2lvbkNvbnRyb2xsZXItPmluc3BlY3RvckZyb250ZW5kV2lsbENsb3NlKCk7CisgICAgbV9leHRl
bnNpb25Db250cm9sbGVyID0gbnVsbHB0cjsKKyNlbmRpZgorCisgICAgbV9pbnNwZWN0b3JQYWdl
ID0gbnVsbHB0cjsKKworICAgIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsK
K30KKworI2lmICFFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikgfHwgKCFQTEFURk9STShNQUMpICYm
ICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pKQorV2ViUGFnZVByb3h5KiBSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKSB7IH0KK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKSB7IH0K
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7
IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFy
YW5jZSkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU3RhcnRX
aW5kb3dEcmFnKCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
T3BlblVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5m
byYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCkgeyB9CisjZW5kaWYgLy8gIUVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKSB8fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJ
TikpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzY5NGY0MzM3Y2U0NDcxNWFjNjQwNzI0ZDk0MTVjOGI2ZWQxNzNkOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5LmgKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiTWVzc2FnZVJl
Y2VpdmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKK09CSkNf
Q0xBU1MgTlNVUkw7CitPQkpDX0NMQVNTIE5TV2luZG93OworT0JKQ19DTEFTUyBXS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyOworT0JKQ19DTEFTUyBXS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlP
YmpDQWRhcHRlcjsKK09CSkNfQ0xBU1MgV0tXZWJWaWV3OworI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIENlcnRpZmljYXRlSW5mbzsKK30KKworbmFtZXNwYWNlIEFQSSB7Citj
bGFzcyBEZWJ1Z2dhYmxlSW5mbzsKK2NsYXNzIEluc3BlY3RvckNvbmZpZ3VyYXRpb247Cit9CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Owor
Y2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViVmlldzsKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0VYVEVOU0lPTlMpCitjbGFzcyBXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94
eTsKKyNlbmRpZgorCitjbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50KCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpID0gMDsKKyAg
ICB2aXJ0dWFsIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25G
b3JSZW1vdGVJbnNwZWN0b3IoUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSYpID0gMDsKK307CisK
K2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5PiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5KCkpOworICAgIH0KKworICAgIH5SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5KCk7CisK
KyAgICB2b2lkIHNldENsaWVudChSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50KiBjbGll
bnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKworICAgIGJvb2wgaXNVbmRlclRlc3QoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWls
YWJsZShib29sKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9pZCBsb2FkKFJl
ZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiYmLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VS
TCk7CisgICAgdm9pZCBjbG9zZUZyb21CYWNrZW5kKCk7CisgICAgdm9pZCBzaG93KCk7CisKKyAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQorICAgIFdlYkluc3BlY3RvclVJRXh0ZW5z
aW9uQ29udHJvbGxlclByb3h5KiBleHRlbnNpb25Db250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4g
bV9leHRlbnNpb25Db250cm9sbGVyLmdldCgpOyB9CisjZW5kaWYKKyAgICAKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgTlNXaW5kb3cgKndpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93Lmdl
dCgpOyB9CisgICAgV0tXZWJWaWV3ICp3ZWJWaWV3KCkgY29uc3Q7CisKKyAgICBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHNoZWV0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXRSZWN0OyB9
CisKKyAgICB2b2lkIGRpZEJlY29tZUFjdGl2ZSgpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShH
VEspCisgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRsZShjb25zdCBDU3RyaW5nJik7CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykKKyAgICBMUkVTVUxUIHNpemVDaGFuZ2UoKTsKKyAg
ICBMUkVTVUxUIG9uQ2xvc2UoKTsKKworICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFduZFBy
b2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworI2VuZGlmCisKKyAgICB2b2lkIGNsb3Nl
RnJvbUNyYXNoKCk7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSgp
OworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgLy8g
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSBtZXNzYWdlcy4KKyAgICB2b2lkIGZyb250ZW5kTG9h
ZGVkKCk7CisgICAgdm9pZCBmcm9udGVuZERpZENsb3NlKCk7CisgICAgdm9pZCByZW9wZW4oKTsK
KyAgICB2b2lkIHJlc2V0U3RhdGUoKTsKKyAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgIHZv
aWQgc2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJv
b2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7CisgICAgdm9pZCBhcHBlbmQoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKKyAgICB2b2lkIHNl
dFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHNldEZvcmNl
ZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2Up
OworICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCk7CisgICAgdm9pZCBvcGVuVVJMRXh0ZXJuYWxs
eShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBzaG93Q2VydGlmaWNhdGUoY29uc3QgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisgICAgdm9pZCBjcmVhdGVGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKTsKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisKKyAgICAv
LyBQbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMuCisgICAgV2ViUGFnZVByb3h5KiBwbGF0Zm9ybUNy
ZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIHZvaWQgcGxhdGZvcm1DbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIHZvaWQgcGxhdGZvcm1SZXNldFN0YXRlKCk7CisgICAg
dm9pZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworICAgIHZvaWQgcGxhdGZvcm1TYXZlKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNv
ZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKKyAgICB2b2lkIHBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CisgICAgdm9pZCBwbGF0Zm9y
bVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBsYXRm
b3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
QXBwZWFyYW5jZSk7CisgICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOworICAgIHZv
aWQgcGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9p
ZCBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8m
KTsKKworICAgIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQqIG1fY2xpZW50IHsgbnVs
bHB0ciB9OworICAgIFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0b3JQYWdlIHsgbnVsbHB0ciB9Owor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQorICAgIFJlZlB0cjxXZWJJbnNwZWN0
b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eT4gbV9leHRlbnNpb25Db250cm9sbGVyOworI2Vu
ZGlmCisgICAgCisgICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IG1fZGVidWdnYWJsZUluZm87
CisgICAgU3RyaW5nIG1fYmFja2VuZENvbW1hbmRzVVJMOworCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIFJldGFpblB0cjxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyPiBtX2luc3BlY3RvclZpZXc7
CisgICAgUmV0YWluUHRyPE5TV2luZG93PiBtX3dpbmRvdzsKKyAgICBSZXRhaW5QdHI8V0tSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7CisgICAgSGFz
aE1hcDxTdHJpbmcsIFJldGFpblB0cjxOU1VSTD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXA7
CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fc2hlZXRSZWN0OworI2VuZGlmCisjaWYgUExBVEZP
Uk0oR1RLKQorICAgIEd0a1dpZGdldCogbV93ZWJWaWV3IHsgbnVsbHB0ciB9OworICAgIEd0a1dp
ZGdldCogbV93aW5kb3cgeyBudWxscHRyIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShXSU5fQ0FJ
Uk8pCisgICAgSFdORCBtX2Zyb250ZW5kSGFuZGxlOworICAgIFJlZlB0cjxXZWJWaWV3PiBtX3dl
YlZpZXc7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDMxMWEwOTk1MzEy
MDRkMzU0NzIyODQ0MDYzZDgyYmM0NWQ5ZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHkubWVzc2Fn
ZXMuaW4KQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkgeworICAg
IEZyb250ZW5kTG9hZGVkKCkKKyAgICBGcm9udGVuZERpZENsb3NlKCkKKyAgICBSZW9wZW4oKQor
ICAgIFJlc2V0U3RhdGUoKQorICAgIEJyaW5nVG9Gcm9udCgpCisKKyAgICBTYXZlKFN0cmluZyBm
aWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNh
dmVBcykKKyAgICBBcHBlbmQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCkKKworICAg
IFNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFw
cGVhcmFuY2UgYXBwZWFyYW5jZSkKKworICAgIFNldFNoZWV0UmVjdChXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCkKKworICAgIFN0YXJ0V2luZG93RHJhZygpCisKKyAgICBPcGVuVVJMRXh0ZXJuYWxs
eShTdHJpbmcgdXJsKQorICAgIFNob3dDZXJ0aWZpY2F0ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8gY2VydGlmaWNhdGVJbmZvKQorCisgICAgU2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1l
c3NhZ2UpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvclByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Rj
YWI1MDIxYjZjY2RiZjQwNmNlMzdjZmZkYjJhMmU5MzkxOWFjOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODkwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaW5jbHVkZSAiQVBJSW5z
cGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIkFQ
SVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIkFQSVVJQ2xpZW50LmgiCi0j
aW5jbHVkZSAiSW5zcGVjdG9yQnJvd3NlckFnZW50LmgiCi0jaW5jbHVkZSAiV2ViQXV0b21hdGlv
blNlc3Npb24uaCIKLSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViSW5z
cGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVj
dG9yTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCi0j
aW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkuaCIKLSNpbmNs
dWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgi
Ci0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgIldlYlBy
b2Nlc3NQb29sLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01vY2tSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvVGV4dEVuY29kaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oR1RLKQot
I2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY29uc3QgdW5zaWduZWQgV2Vi
SW5zcGVjdG9yUHJveHk6Om1pbmltdW1XaW5kb3dXaWR0aCA9IDUwMDsKLWNvbnN0IHVuc2lnbmVk
IFdlYkluc3BlY3RvclByb3h5OjptaW5pbXVtV2luZG93SGVpZ2h0ID0gNDAwOwotCi1jb25zdCB1
bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoID0gMTAwMDsKLWNv
bnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0ID0gNjUw
OwotCi1XZWJJbnNwZWN0b3JQcm94eTo6V2ViSW5zcGVjdG9yUHJveHkoV2ViUGFnZVByb3h5JiBp
bnNwZWN0ZWRQYWdlKQotICAgIDogbV9pbnNwZWN0ZWRQYWdlKCZpbnNwZWN0ZWRQYWdlKQotICAg
ICwgbV9pbnNwZWN0b3JDbGllbnQobWFrZVVuaXF1ZTxBUEk6Okluc3BlY3RvckNsaWVudD4oKSkK
LSNpZiBQTEFURk9STShNQUMpCi0gICAgLCBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlU
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9u
dGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQpCi0jZW5kaWYKLXsKLSAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlE
KCksICp0aGlzKTsKLX0KLQotV2ViSW5zcGVjdG9yUHJveHk6On5XZWJJbnNwZWN0b3JQcm94eSgp
Ci17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEluc3BlY3RvckNsaWVudChzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpJbnNwZWN0b3JDbGllbnQ+JiYgaW5zcGVjdG9yQ2xpZW50KQotewot
ICAgIGlmICghaW5zcGVjdG9yQ2xpZW50KSB7Ci0gICAgICAgIG1faW5zcGVjdG9yQ2xpZW50ID0g
bWFrZVVuaXF1ZTxBUEk6Okluc3BlY3RvckNsaWVudD4oKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1faW5zcGVjdG9yQ2xpZW50ID0gV1RGTW92ZShpbnNwZWN0b3JDbGllbnQpOwot
fQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdGlvbkxldmVsKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSk7Ci19
Ci0KLVdlYlByZWZlcmVuY2VzJiBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVByZWZl
cmVuY2VzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKLSAgICByZXR1
cm4gbV9pbnNwZWN0b3JQYWdlLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjppbnZhbGlkYXRlKCkKLXsKLSAgICBjbG9zZUZyb250ZW5kUGFn
ZUFuZFdpbmRvdygpOwotICAgIHBsYXRmb3JtSW52YWxpZGF0ZSgpOwotCi0gICAgcmVzZXQoKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSTo6U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpKTsKLX0KLQotLy8gUHVibGljIEFQ
SXMKLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OmlzRnJvbnQoKQotewotICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1J
c0Zyb250KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNvbm5lY3QoKQotewotICAg
IGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faW5z
cGVjdGVkUGFnZS0+cHJlZmVyZW5jZXMoKS5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX3Nob3dNZXNzYWdlU2VudCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9zaG93TWVzc2FnZVNlbnQgPSB0cnVlOwotICAgIG1faWdub3JlRmlyc3RCcmlu
Z1RvRnJvbnQgPSB0cnVlOwotCi0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBtX2lu
c3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNo
ZXI6Ok5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCksIDApOwotICAgIG1faW5zcGVjdGVkUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93KCkpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpzaG93KCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKGlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgYnJpbmdUb0Zyb250
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25uZWN0KCk7Ci0KLSAgICAvLyBE
b24ndCBpZ25vcmUgdGhlIGZpcnN0IGJyaW5nVG9Gcm9udCBzbyBpdCBvcGVucyB0aGUgSW5zcGVj
dG9yLgotICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBmYWxzZTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6aGlkZSgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1faXNWaXNpYmxlID0gZmFsc2U7Ci0KLSAgICBwbGF0Zm9y
bUhpZGUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2UoKQotewotICAgIGlm
ICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RlZFBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6Q2xvc2UoKSk7Ci0KLSAgICBjbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9z
ZUZvckNyYXNoKCkKLXsKLSAgICBjbG9zZSgpOwotCi0gICAgcGxhdGZvcm1EaWRDbG9zZUZvckNy
YXNoKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlb3BlbigpCi17Ci0gICAgaWYg
KCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsb3NlKCk7Ci0gICAg
c2hvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpyZXNldFN0YXRlKCkKLXsKLSAg
ICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsK
LSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSB8fCAhbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JB
dHRhY2hlZEhlaWdodCgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUlu
c3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5k
ZWxldGVJbnNwZWN0b3JBdHRhY2htZW50U2lkZSgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLmRlbGV0ZUluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7Ci0gICAgaW5zcGVjdG9yUGFn
ZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yV2luZG93RnJhbWUoKTsKLQotICAgIHBsYXRm
b3JtUmVzZXRTdGF0ZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpyZXNldCgpCi17
Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSkgewotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnBy
b2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOwot
ICAgICAgICBtX2luc3BlY3RlZFBhZ2UgPSBudWxscHRyOwotICAgIH0KLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6dXBkYXRlRm9yTmV3UGFnZVByb2Nlc3MoV2ViUGFnZVByb3h5JiBpbnNw
ZWN0ZWRQYWdlKQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0ZWRQYWdlKTsKLQotICAgIG1faW5z
cGVjdGVkUGFnZSA9ICZpbnNwZWN0ZWRQYWdlOwotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2Vz
cygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMpOwot
Ci0gICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6VXBkYXRlQ29ubmVjdGlvbigpKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVu
dCBjb25uZWN0aW9uSWRlbnRpZmllcikKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3I6OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllcikpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93Q29uc29sZSgpCi17Ci0gICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNyZWF0ZUZyb250ZW5kUGFn
ZSgpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6
OlNob3dDb25zb2xlKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93UmVzb3Vy
Y2VzKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd1Jlc291cmNlcygpKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1l
KQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
cmVhdGVGcm9udGVuZFBhZ2UoKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yOjpTaG93TWFpblJlc291cmNlRm9yRnJhbWUoZnJhbWUtPmZyYW1lSUQo
KSkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hCb3R0b20oKQotewotICAg
IGF0dGFjaChBdHRhY2htZW50U2lkZTo6Qm90dG9tKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6YXR0YWNoUmlnaHQoKQotewotICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6UmlnaHQp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hMZWZ0KCkKLXsKLSAgICBhdHRh
Y2goQXR0YWNobWVudFNpZGU6OkxlZnQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojph
dHRhY2goQXR0YWNobWVudFNpZGUgc2lkZSkKLXsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdl
KTsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSB8fCAhbV9pbnNwZWN0b3JQYWdlIHx8ICghbV9p
c0F0dGFjaGVkICYmICFwbGF0Zm9ybUNhbkF0dGFjaChtX2NhbkF0dGFjaCkpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2lzQXR0YWNoZWQgPSB0cnVlOwotICAgIG1fYXR0YWNobWVudFNpZGUg
PSBzaWRlOwotCi0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0
YWNobWVudFNpZGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNpZGUpKTsKLQotICAgIGlmIChtX2lz
VmlzaWJsZSkKLSAgICAgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9y
U3RhcnRzQXR0YWNoZWQodHJ1ZSk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQodHJ1ZSkpOwotCi0gICAgc3dpdGNoIChtX2F0
dGFjaG1lbnRTaWRlKSB7Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgotICAgICAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hl
ZEJvdHRvbSgpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpS
aWdodDoKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSTo6QXR0YWNoZWRSaWdodCgpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEF0dGFj
aG1lbnRTaWRlOjpMZWZ0OgotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHBsYXRmb3JtQXR0YWNoKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmRl
dGFjaCgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UgfHwgIW1faW5zcGVjdG9yUGFnZSB8
fCAoIW1faXNBdHRhY2hlZCAmJiBtX2lzVmlzaWJsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1faXNBdHRhY2hlZCA9IGZhbHNlOwotCi0gICAgaWYgKG1faXNWaXNpYmxlKQotICAgICAgICBp
bnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChmYWxz
ZSk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6
U2V0QXR0YWNoZWQoZmFsc2UpKTsKLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpEZXRhY2hlZCgpKTsKLQotICAgIHBsYXRmb3JtRGV0YWNoKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2ln
bmVkIGhlaWdodCkKLXsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKLSAgICBpZiAoIW1f
aW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5zcGVjdG9yUGFnZVByZWZl
cmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoaGVpZ2h0KTsKLSAgICBwbGF0Zm9y
bVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi17Ci0gICAgQVNT
RVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvckF0
dGFjaGVkV2lkdGgod2lkdGgpOwotICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh3
aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldFNoZWV0UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcGxhdGZvcm1TZXRTaGVldFJlY3QocmVjdCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgcGxhdGZv
cm1TdGFydFdpbmRvd0RyYWcoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dG9nZ2xl
UGFnZVByb2ZpbGluZygpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2lzUHJvZmlsaW5nUGFnZSkKLSAgICAgICAgbV9pbnNwZWN0ZWRQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0b3BQYWdlUHJvZmlsaW5nKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3I6OlN0YXJ0UGFnZVByb2ZpbGluZygpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6dG9nZ2xlRWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUpIHsK
LSAgICAgICAgbV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlID0gdHJ1ZTsKLSAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0b3BFbGVtZW50
U2VsZWN0aW9uKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbm5lY3QoKTsKLSAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0YXJ0RWxlbWVu
dFNlbGVjdGlvbigpKTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFp
bk9yVGVzdEluc3BlY3RvclBhZ2UoY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgLy8gVXNlIFVSTCBz
byB3ZSBjYW4gY29tcGFyZSB0aGUgcGF0aHMgYW5kIHByb3RvY29scy4KLSAgICBVUkwgbWFpblBh
Z2VVUkwoVVJMKCksIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkpOwotICAg
IGlmICh1cmwucHJvdG9jb2woKSA9PSBtYWluUGFnZVVSTC5wcm90b2NvbCgpICYmIGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSA9PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMo
bWFpblBhZ2VVUkwucGF0aCgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBXZSBt
aWdodCBub3QgaGF2ZSBhIFRlc3QgVVJMIGluIFByb2R1Y3Rpb24gYnVpbGRzLgotICAgIFN0cmlu
ZyB0ZXN0UGFnZVVSTFN0cmluZyA9IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFn
ZVVSTCgpOwotICAgIGlmICh0ZXN0UGFnZVVSTFN0cmluZy5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgVVJMIHRlc3RQYWdlVVJMKFVSTCgpLCB0ZXN0UGFnZVVSTFN0cmlu
Zyk7Ci0gICAgcmV0dXJuIHVybC5wcm90b2NvbCgpID09IHRlc3RQYWdlVVJMLnByb3RvY29sKCkg
JiYgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRoKCkpID09IGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyh0ZXN0UGFnZVVSTC5wYXRoKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpjcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZSA9IHBsYXRmb3JtQ3JlYXRlRnJv
bnRlbmRQYWdlKCk7Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgaWYgKCFtX2lu
c3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYWNrSW5zcGVjdG9yUGFnZSht
X2luc3BlY3RvclBhZ2UsIG1faW5zcGVjdGVkUGFnZSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhl
IGluc3BlY3RlZCBwYWdlIGhhcyBhIHJ1bm5pbmcgV2ViUHJvY2VzcyBzbyB3ZSBjYW4gaW5zcGVj
dCBpdC4KLSAgICBtX2luc3BlY3RlZFBhZ2UtPmxhdW5jaEluaXRpYWxQcm9jZXNzSWZOZWNlc3Nh
cnkoKTsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9p
bnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCksICp0aGlzKTsKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfRVhURU5TSU9OUykKLSAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXIgPSBXZWJJbnNwZWN0b3JV
SUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eTo6Y3JlYXRlKCptX2luc3BlY3RvclBhZ2UpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW5Mb2NhbEluc3BlY3RvckZyb250
ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCkKLXsKLSAgICBpZiAoIW1faW5zcGVj
dGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UtPnBy
ZWZlcmVuY2VzKCkuZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuaGFzTG9jYWxG
cm9udGVuZCgpKSB7Ci0gICAgICAgIHNob3coKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fdW5kZXJUZXN0ID0gdW5kZXJUZXN0OwotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwot
Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OkVzdGFibGlzaENvbm5lY3Rpb24obV9pbnNwZWN0ZWRQYWdlLT5pZGVu
dGlmaWVyKCksIGluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKSwgbV91bmRlclRlc3QsIGluc3BlY3Rp
b25MZXZlbCgpKSk7Ci0KLSAgICBBU1NFUlQoIW1faXNBY3RpdmVGcm9udGVuZCk7Ci0gICAgbV9p
c0FjdGl2ZUZyb250ZW5kID0gdHJ1ZTsKLSAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKnRoaXMpOwotCi0gICAgaWYgKCFtX3VuZGVyVGVz
dCkgewotICAgICAgICBtX2NhbkF0dGFjaCA9IHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCk7
Ci0gICAgICAgIG1faXNBdHRhY2hlZCA9IHNob3VsZE9wZW5BdHRhY2hlZCgpOwotICAgICAgICBt
X2F0dGFjaG1lbnRTaWRlID0gc3RhdGljX2Nhc3Q8QXR0YWNobWVudFNpZGU+KGluc3BlY3RvclBh
Z2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCkpOwotCi0gICAgICAgIG1f
aW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZCht
X2lzQXR0YWNoZWQpKTsKLQotICAgICAgICBpZiAobV9pc0F0dGFjaGVkKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICAgICAgICAgIGNhc2UgQXR0YWNobWVu
dFNpZGU6OkJvdHRvbToKLSAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJvdHRvbSgpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6Ci0gICAg
ICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JV
STo6QXR0YWNoZWRSaWdodCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgICAgICAgICBtX2luc3BlY3Rv
clBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
RGV0YWNoZWQoKSk7Ci0KLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkpOwotICAg
IH0KLQotICAgIC8vIE5vdGlmeSBXZWJLaXQgY2xpZW50IHdoZW4gYSBsb2NhbCBpbnNwZWN0b3Ig
YXR0YWNoZXMgc28gdGhhdCBpdCBtYXkgaW5zdGFsbCBkZWxlZ2F0ZXMgcHJpb3IgdG8gdGhlIF9X
S0luc3BlY3RvciBsb2FkaW5nIGl0cyBmcm9udGVuZC4KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnVp
Q2xpZW50KCkuZGlkQXR0YWNoTG9jYWxJbnNwZWN0b3IoKm1faW5zcGVjdGVkUGFnZSwgKnRoaXMp
OwotCi0gICAgLy8gQmFpbCBvdXQgaWYgdGhlIGNsaWVudCBjbG9zZWQgdGhlIGluc3BlY3RvciBm
cm9tIHRoZSBkZWxlZ2F0ZSBtZXRob2QuCi0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgp
LCBtX3VuZGVyVGVzdCA/IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgp
IDogV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSkpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpvcGVuKCkKLXsKLSAgICBpZiAobV91bmRlclRlc3QpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBQTEFURk9STShHVEspCi0gICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaXNPcGVuaW5nKG1faXNP
cGVuaW5nLCB0cnVlKTsKLSNlbmRpZgotCi0gICAgbV9pc1Zpc2libGUgPSB0cnVlOwotICAgIG1f
aW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJs
ZShtX2lzVmlzaWJsZSkpOwotCi0gICAgaWYgKG1faXNBdHRhY2hlZCkKLSAgICAgICAgcGxhdGZv
cm1BdHRhY2goKTsKLSAgICBlbHNlCi0gICAgICAgIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5k
b3coKTsKLQotICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OmRpZENsb3NlKCkKLXsKLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRv
dygpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEd1YXJkIGFnYWluc3QgY2FsbHMgdG8gY2xvc2UoKSBtYWRlIGJ5IHRoZSBjbGllbnQgd2hp
bGUgYWxyZWFkeSBjbG9zaW5nLgotICAgIGlmIChtX2Nsb3NpbmcpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBTZXRGb3JTY29wZTxib29sPiByZWVudHJhbmN5UHJvdGVjdG9yKG1fY2xvc2lu
ZywgdHJ1ZSk7Ci0gICAgCi0gICAgLy8gTm90aWZ5IFdlYktpdCBjbGllbnQgd2hlbiBhIGxvY2Fs
IGluc3BlY3RvciBjbG9zZXMgc28gaXQgY2FuIGNsZWFyIF9XS0luc3BlY3RvckRlbGVnYXRlIGFu
ZCBwZXJmb3JtIG90aGVyIGNsZWFudXAuCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT51aUNsaWVudCgp
LndpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKCptX2luc3BlY3RlZFBhZ2UsICp0aGlzKTsKLQotICAg
IG1faXNWaXNpYmxlID0gZmFsc2U7Ci0gICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBmYWxzZTsKLSAg
ICBtX3Nob3dNZXNzYWdlU2VudCA9IGZhbHNlOwotICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJv
bnQgPSBmYWxzZTsKLQotICAgIHVudHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSk7
Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpT
ZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3Mo
KS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpKTsKLQotICAg
IGlmIChtX2lzQWN0aXZlRnJvbnRlbmQpIHsKLSAgICAgICAgbV9pc0FjdGl2ZUZyb250ZW5kID0g
ZmFsc2U7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRp
c2Nvbm5lY3RGcm9udGVuZCgqdGhpcyk7Ci0gICAgfQotCi0gICAgaWYgKG1faXNBdHRhY2hlZCkK
LSAgICAgICAgcGxhdGZvcm1EZXRhY2goKTsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5T
SU9OUykKLSAgICAvLyBUaGlzIGV4dGVuc2lvbiBjb250cm9sbGVyIG1heSBiZSBrZXB0IGFsaXZl
IGJ5IHRoZSBJUEMgZGlzcGF0Y2hlciBiZXlvbmQgdGhlIHBvaW50Ci0gICAgLy8gd2hlbiBtX2lu
c3BlY3RvclBhZ2UgaXMgY2xlYXJlZCBiZWxvdy4gTm90aWZ5IHRoZSBjb250cm9sbGVyIHNvIGl0
IGNhbiBjbGVhbiB1cCBiZWZvcmUgdGhlbi4KLSAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXItPmlu
c3BlY3RvckZyb250ZW5kV2lsbENsb3NlKCk7Ci0gICAgbV9leHRlbnNpb25Db250cm9sbGVyID0g
bnVsbHB0cjsKLSNlbmRpZgotICAgIAotICAgIC8vIE51bGwgb3V0IG1faW5zcGVjdG9yUGFnZSBh
ZnRlciBwbGF0Zm9ybURldGFjaCgpLCBzbyB0aGUgdmlld3MgY2FuIGJlIGNsZWFuZWQgdXAgY29y
cmVjdGx5LgotICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7Ci0KLSAgICBtX2lzQXR0YWNo
ZWQgPSBmYWxzZTsKLSAgICBtX2NhbkF0dGFjaCA9IGZhbHNlOwotICAgIG1fdW5kZXJUZXN0ID0g
ZmFsc2U7Ci0KLSAgICBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hN
ZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
Ojpmcm9udGVuZExvYWRlZCgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChhdXRvKiBhdXRvbWF0aW9uU2Vzc2lvbiA9IG1faW5zcGVjdGVk
UGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYXV0b21hdGlvblNlc3Npb24oKSkKLSAgICAg
ICAgYXV0b21hdGlvblNlc3Npb24tPmluc3BlY3RvckZyb250ZW5kTG9hZGVkKCptX2luc3BlY3Rl
ZFBhZ2UpOwotICAgIAotI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKLSAgICBpZiAo
bV9leHRlbnNpb25Db250cm9sbGVyKQotICAgICAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXItPmlu
c3BlY3RvckZyb250ZW5kTG9hZGVkKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6YnJpbmdUb0Zyb250KCkKLXsKLSAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsIHRlbGxzIHVzIHRvIGRvIHRoaXMgb24gbG9hZC4gV2Ugd2FudCB0bwotICAg
IC8vIGlnbm9yZSBpdCBvbmNlIGlmIHdlIG9ubHkgd2FudGVkIHRvIGNvbm5lY3QuIFRoaXMgYWxs
b3dzIHRoZSBJbnNwZWN0b3IgdG8gbGF0ZXIKLSAgICAvLyByZXF1ZXN0IHRvIGJlIGJyb3VnaHQg
dG8gdGhlIGZyb250IHdoZW4gYSBicmVha3BvaW50IGlzIGhpdCBvciBzb21lIG90aGVyIGFjdGlv
bi4KLSAgICBpZiAobV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCkgewotICAgICAgICBtX2lnbm9y
ZUZpcnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAobV9pc1Zpc2libGUpCi0gICAgICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7Ci0gICAg
ZWxzZQotICAgICAgICBvcGVuKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmJyaW5n
SW5zcGVjdGVkUGFnZVRvRnJvbnQoKQotewotICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdl
VG9Gcm9udCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hBdmFpbGFiaWxp
dHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQotewotICAgIGJvb2wgcHJldmlvdXNDYW5BdHRhY2gg
PSBtX2NhbkF0dGFjaDsKLQotICAgIG1fY2FuQXR0YWNoID0gbV9pc0F0dGFjaGVkIHx8IHBsYXRm
b3JtQ2FuQXR0YWNoKGF2YWlsYWJsZSk7Ci0KLSAgICBpZiAocHJldmlvdXNDYW5BdHRhY2ggPT0g
bV9jYW5BdHRhY2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2luc3BlY3RvclBhZ2Ug
JiYgIW1fdW5kZXJUZXN0KQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7Ci0K
LSAgICBwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQobV9jYW5BdHRhY2gpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRGb3JjZWRBcHBlYXJhbmNlKEluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlIGFwcGVhcmFuY2UpCi17Ci0gICAgcGxhdGZvcm1TZXRG
b3JjZWRBcHBlYXJhbmNlKGFwcGVhcmFuY2UpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpvcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBtX2luc3BlY3Rv
ckNsaWVudC0+b3BlblVSTEV4dGVybmFsbHkoKnRoaXMsIHVybCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
Ci17Ci0gICAgcGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUlu
Zm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjZXJ0
aWZpY2F0ZUluZm8pOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjplbGVtZW50U2VsZWN0
aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUg
PSBhY3RpdmU7Ci0KLSAgICBpZiAobV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlKSB7Ci0g
ICAgICAgIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlOwotICAgICAgICBp
ZiAoIW1faXNWaXNpYmxlKQotICAgICAgICAgICAgY2xvc2UoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChhY3RpdmUpCi0gICAgICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQ
YWdlVG9Gcm9udCgpOwotICAgIGVsc2UgaWYgKGlzQ29ubmVjdGVkKCkpCi0gICAgICAgIGJyaW5n
VG9Gcm9udCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0aW1lbGluZVJlY29yZGlu
Z0NoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBhY3RpdmU7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldERldmVsb3BlclByZWZlcmVuY2VPdmVy
cmlkZShXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2UgZGV2ZWxv
cGVyUHJlZmVyZW5jZSwgT3B0aW9uYWw8Ym9vbD4gb3ZlcnJpZGVWYWx1ZSkKLXsKLSAgICBzd2l0
Y2ggKGRldmVsb3BlclByZWZlcmVuY2UpIHsKLSAgICBjYXNlIEluc3BlY3RvckNsaWVudDo6RGV2
ZWxvcGVyUHJlZmVyZW5jZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREZWJ1Z01vZGVFbmFibGVk
OgotICAgICAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICAgICAgbV9pbnNwZWN0ZWRQ
YWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2V0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREZWJ1Z01v
ZGUob3ZlcnJpZGVWYWx1ZSAmJiBvdmVycmlkZVZhbHVlLnZhbHVlKCkpOwotICAgICAgICByZXR1
cm47Ci0KLSAgICBjYXNlIEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6SVRQ
RGVidWdNb2RlRW5hYmxlZDoKLSAgICAgICAgaWYgKG1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAg
ICAgIG1faW5zcGVjdGVkUGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUob3ZlcnJpZGVWYWx1ZSAmJiBvdmVycmlkZVZhbHVlLnZhbHVlKCkp
OwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVy
UHJlZmVyZW5jZTo6TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZDoKLSNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQotICAgICAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICAgICAgbV9pbnNw
ZWN0ZWRQYWdlLT5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUob3ZlcnJpZGVW
YWx1ZSk7Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLXsK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICBtX2luc3BlY3RvclBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJs
ZShhdmFpbGFibGUpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGF2YWlsYWJsZSk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2F2ZShjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3Jj
ZVNhdmVBcykKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZS0+cHJlZmVyZW5jZXMoKS5kZXZl
bG9wZXJFeHRyYXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghZmls
ZW5hbWUuaXNFbXB0eSgpKTsKLSAgICBpZiAoZmlsZW5hbWUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBwbGF0Zm9ybVNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29k
ZWQsIGZvcmNlU2F2ZUFzKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXBwZW5kKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsKLSAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZS0+cHJlZmVyZW5jZXMoKS5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghZmlsZW5hbWUuaXNFbXB0eSgpKTsKLSAg
ICBpZiAoZmlsZW5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0Zm9y
bUFwcGVuZChmaWxlbmFtZSwgY29udGVudCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6
OnNob3VsZE9wZW5BdHRhY2hlZCgpCi17Ci0gICAgcmV0dXJuIGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLmluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCkgJiYgY2FuQXR0YWNoKCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmV2YWx1YXRlSW5Gcm9udGVuZEZvclRlc3RpbmcoY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uKQotewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpFdmFsdWF0ZUluRnJvbnRlbmRGb3JUZXN0aW5nKGV4cHJlc3Npb24pKTsKLX0KLQot
Ly8gVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMgY2FuIHVzZSB0aGUgc3R1YnMgcHJvdmlkZWQg
aGVyZS4KLQotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9S
TShXSU4pCi0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRl
RnJvbnRlbmRQYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5k
V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENs
b3NlRm9yQ3Jhc2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUhpZGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0
Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZp
Y2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJv
b2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
VVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVp
Z2h0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi11bnNp
Z25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0Rh
dGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dp
ZHRoKHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKSAmJiAh
UExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
clByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMDVlMGM4OTRhZDdkNjE5
NTc0YTQyNDUwZDFlOTgxNjIwMGU0YTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3RvclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMzYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBv
cnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBUElP
YmplY3QuaCIKLSNpbmNsdWRlICJBdHRhY2htZW50LmgiCi0jaW5jbHVkZSAiRGVidWdnYWJsZUlu
Zm9EYXRhLmgiCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSAiV2ViSW5z
cGVjdG9yVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIldLR2VvbWV0cnku
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgot
Ci1PQkpDX0NMQVNTIE5TVVJMOwotT0JKQ19DTEFTUyBOU1ZpZXc7Ci1PQkpDX0NMQVNTIE5TV2lu
ZG93OwotT0JKQ19DTEFTUyBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXI7Ci1PQkpDX0NM
QVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci0jZWxpZiBQTEFURk9STShXSU4pCi0jaW5j
bHVkZSAiV2ViVmlldy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENl
cnRpZmljYXRlSW5mbzsKLX0KLQotbmFtZXNwYWNlIEFQSSB7Ci1jbGFzcyBJbnNwZWN0b3JDbGll
bnQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJGcmFtZVByb3h5OwotY2xh
c3MgV2ViSW5zcGVjdG9yUHJveHlDbGllbnQ7Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBX
ZWJQcmVmZXJlbmNlczsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMpCi1jbGFzcyBX
ZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eTsKLSNlbmRpZgotCi1lbnVtIGNs
YXNzIEF0dGFjaG1lbnRTaWRlIHsKLSAgICBCb3R0b20sCi0gICAgUmlnaHQsCi0gICAgTGVmdCwK
LX07Ci0KLWNsYXNzIFdlYkluc3BlY3RvclByb3h5Ci0gICAgOiBwdWJsaWMgQVBJOjpPYmplY3RJ
bXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpJbnNwZWN0b3I+Ci0gICAgLCBwdWJsaWMgSVBDOjpNZXNz
YWdlUmVjZWl2ZXIKLSAgICAsIHB1YmxpYyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbAotI2lm
IFBMQVRGT1JNKFdJTikKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlzdGVu
ZXIKLSNlbmRpZgotewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9yUHJveHk+
IGNyZWF0ZShXZWJQYWdlUHJveHkmIGluc3BlY3RlZFBhZ2UpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBXZWJJbnNwZWN0b3JQcm94eShpbnNwZWN0ZWRQYWdlKSk7Ci0gICAg
fQotCi0gICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yUHJveHkoV2ViUGFnZVByb3h5Jik7Ci0gICAg
dmlydHVhbCB+V2ViSW5zcGVjdG9yUHJveHkoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwot
Ci0gICAgQVBJOjpJbnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNsaWVudCgpIHsgcmV0dXJuICpt
X2luc3BlY3RvckNsaWVudDsgfQotICAgIHZvaWQgc2V0SW5zcGVjdG9yQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6Okluc3BlY3RvckNsaWVudD4mJik7Ci0KLSAgICAvLyBQdWJsaWMgQVBJcwot
ICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVj
dGVkUGFnZTsgfQotICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5zcGVjdG9yUGFnZTsgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05T
KQotICAgIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5KiBleHRlbnNpb25D
b250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnNpb25Db250cm9sbGVyLmdldCgpOyB9
Ci0jZW5kaWYKLQotICAgIGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhIW1faW5z
cGVjdG9yUGFnZTsgfQotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Zp
c2libGU7IH0KLSAgICBib29sIGlzRnJvbnQoKTsKLQotICAgIHZvaWQgY29ubmVjdCgpOwotCi0g
ICAgdm9pZCBzaG93KCk7Ci0gICAgdm9pZCBoaWRlKCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotICAg
IHZvaWQgY2xvc2VGb3JDcmFzaCgpOwotICAgIHZvaWQgcmVvcGVuKCk7Ci0gICAgdm9pZCByZXNl
dFN0YXRlKCk7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCB1cGRhdGVGb3JOZXdQYWdl
UHJvY2VzcyhXZWJQYWdlUHJveHkmKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBlbnVtIGNs
YXNzIEluc3BlY3Rpb25UYXJnZXRUeXBlIHsgTG9jYWwsIFJlbW90ZSB9OwotICAgIHN0YXRpYyBS
ZXRhaW5QdHI8TlNXaW5kb3c+IGNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRv
d0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZSk7Ci0KLSAgICB2b2lkIGRpZEJlY29tZUFjdGl2
ZSgpOwotCi0gICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0OwotICAg
IHZvaWQgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKENHRmxvYXQgPSAwKTsKLSAgICB2b2lk
IHdpbmRvd0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgdm9pZCB3aW5kb3dGdWxsU2NyZWVuRGlkQ2hh
bmdlKCk7Ci0gICAgTlNXaW5kb3cgKmluc3BlY3RvcldpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1f
aW5zcGVjdG9yV2luZG93LmdldCgpOyB9Ci0KLSAgICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdlKCk7
Ci0gICAgdm9pZCBjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCgpOwotCi0g
ICAgdm9pZCBhdHRhY2htZW50Vmlld0RpZENoYW5nZShOU1ZpZXcgKm9sZFZpZXcsIE5TVmlldyAq
bmV3Vmlldyk7Ci0gICAgdm9pZCBhdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KE5TV2luZG93
ICpvbGRXaW5kb3cpOwotICAgIHZvaWQgYXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhOU1dpbmRv
dyAqbmV3V2luZG93KTsKLQotICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2hlZXRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldFJlY3Q7IH0KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0o
R1RLKQotICAgIEd0a1dpZGdldCogaW5zcGVjdG9yVmlldygpIGNvbnN0IHsgcmV0dXJuIG1faW5z
cGVjdG9yVmlldzsgfTsKLSAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViSW5z
cGVjdG9yUHJveHlDbGllbnQ+JiYpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNob3dDb25zb2xlKCk7
Ci0gICAgdm9pZCBzaG93UmVzb3VyY2VzKCk7Ci0gICAgdm9pZCBzaG93TWFpblJlc291cmNlRm9y
RnJhbWUoV2ViRnJhbWVQcm94eSopOwotICAgIHZvaWQgb3BlblVSTEV4dGVybmFsbHkoY29uc3Qg
U3RyaW5nJiB1cmwpOwotCi0gICAgQXR0YWNobWVudFNpZGUgYXR0YWNobWVudFNpZGUoKSBjb25z
dCB7IHJldHVybiBtX2F0dGFjaG1lbnRTaWRlOyB9Ci0gICAgYm9vbCBpc0F0dGFjaGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc0F0dGFjaGVkOyB9Ci0gICAgdm9pZCBhdHRhY2hSaWdodCgpOwotICAg
IHZvaWQgYXR0YWNoTGVmdCgpOwotICAgIHZvaWQgYXR0YWNoQm90dG9tKCk7Ci0gICAgdm9pZCBh
dHRhY2goQXR0YWNobWVudFNpZGUgPSBBdHRhY2htZW50U2lkZTo6Qm90dG9tKTsKLSAgICB2b2lk
IGRldGFjaCgpOwotCi0gICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCk7
Ci0gICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKTsKLQotICAgIHZvaWQg
c2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBzdGFy
dFdpbmRvd0RyYWcoKTsKLQotICAgIGJvb2wgaXNQcm9maWxpbmdQYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pc1Byb2ZpbGluZ1BhZ2U7IH0KLSAgICB2b2lkIHRvZ2dsZVBhZ2VQcm9maWxpbmcoKTsK
LQotICAgIGJvb2wgaXNFbGVtZW50U2VsZWN0aW9uQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9l
bGVtZW50U2VsZWN0aW9uQWN0aXZlOyB9Ci0gICAgdm9pZCB0b2dnbGVFbGVtZW50U2VsZWN0aW9u
KCk7Ci0KLSAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gbV91bmRlclRlc3Q7
IH0KLQotICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCk7Ci0KLSAg
ICAvLyBQcm92aWRlZCBieSBwbGF0Zm9ybSBXZWJJbnNwZWN0b3JQcm94eSBpbXBsZW1lbnRhdGlv
bnMuCi0gICAgc3RhdGljIFN0cmluZyBpbnNwZWN0b3JQYWdlVVJMKCk7Ci0gICAgc3RhdGljIFN0
cmluZyBpbnNwZWN0b3JUZXN0UGFnZVVSTCgpOwotICAgIHN0YXRpYyBib29sIGlzTWFpbk9yVGVz
dEluc3BlY3RvclBhZ2UoY29uc3QgVVJMJik7Ci0gICAgc3RhdGljIERlYnVnZ2FibGVJbmZvRGF0
YSBpbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWluaW11bVdpbmRvd1dpZHRoOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtV2lu
ZG93SGVpZ2h0OwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxXaW5kb3dXaWR0
aDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbFdpbmRvd0hlaWdodDsKLQotICAg
IC8vIFRlc3RpbmcgbWV0aG9kcy4KLSAgICB2b2lkIGV2YWx1YXRlSW5Gcm9udGVuZEZvclRlc3Rp
bmcoY29uc3QgU3RyaW5nJik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjcmVhdGVGcm9udGVuZFBh
Z2UoKTsKLSAgICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0KLSAgICAvLyBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBJbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbAotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci0gICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb25uZWN0aW9uVHlwZTo6TG9jYWw7IH0KLQotICAg
IFdlYlBhZ2VQcm94eSogcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKTsKLSAgICB2b2lkIHBs
YXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKTsKLSAgICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIHZvaWQgcGxhdGZvcm1EaWRDbG9zZUZvckNyYXNo
KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUludmFsaWRhdGUoKTsKLSAgICB2b2lkIHBsYXRmb3JtUmVz
ZXRTdGF0ZSgpOwotICAgIHZvaWQgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLSAgICB2b2lkIHBs
YXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1IaWRl
KCk7Ci0gICAgYm9vbCBwbGF0Zm9ybUlzRnJvbnQoKTsKLSAgICB2b2lkIHBsYXRmb3JtQXR0YWNo
QXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0Rm9yY2VkQXBw
ZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSk7Ci0g
ICAgdm9pZCBwbGF0Zm9ybU9wZW5VUkxFeHRlcm5hbGx5KGNvbnN0IFN0cmluZyYpOwotICAgIHZv
aWQgcGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQg
cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7
Ci0gICAgdW5zaWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKTsKLSAgICB1bnNp
Z25lZCBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUF0
dGFjaCgpOwotICAgIHZvaWQgcGxhdGZvcm1EZXRhY2goKTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRBdHRh
Y2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0U2hlZXRSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgcGxhdGZvcm1TdGFydFdpbmRv
d0RyYWcoKTsKLSAgICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVB
cyk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnQpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGJvb2wgcGxhdGZv
cm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKTsKLSNlbHNlCi0gICAgYm9vbCBw
bGF0Zm9ybUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpIHsgcmV0dXJuIHdlYlBy
b2Nlc3NDYW5BdHRhY2g7IH0KLSNlbmRpZgotCi0gICAgLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3Rv
clByb3h5IG1lc3NhZ2VzCi0gICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29s
IGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpOwotICAgIHZvaWQgc2V0RnJvbnRlbmRDb25uZWN0
aW9uKElQQzo6QXR0YWNobWVudCk7Ci0KLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNv
bnN0IFN0cmluZyYpOwotICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKLSAgICB2b2lkIGRpZENs
b3NlKCk7Ci0gICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKLSAgICB2b2lkIGJyaW5nSW5zcGVjdGVk
UGFnZVRvRnJvbnQoKTsKLSAgICB2b2lkIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCk7
Ci0gICAgdm9pZCBzZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpBcHBlYXJhbmNlKTsKLSAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qg
U3RyaW5nJik7Ci0gICAgdm9pZCBzaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvJik7Ci0gICAgdm9pZCBlbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sKTsKLSAg
ICB2b2lkIHRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sKTsKLSAgICB2b2lkIHNldERldmVs
b3BlclByZWZlcmVuY2VPdmVycmlkZShXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3Bl
clByZWZlcmVuY2UsIE9wdGlvbmFsPGJvb2w+KTsKLQotICAgIHZvaWQgc2F2ZShjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwg
Ym9vbCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKLQotICAgIGJvb2wgY2FuQXR0YWNoKCkgY29uc3Qg
eyByZXR1cm4gbV9jYW5BdHRhY2g7IH0KLSAgICBib29sIHNob3VsZE9wZW5BdHRhY2hlZCgpOwot
Ci0gICAgdm9pZCBvcGVuKCk7Ci0KLSAgICB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwoKSBjb25z
dDsKLQotICAgIFdlYlByZWZlcmVuY2VzJiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKSBjb25z
dDsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIGFwcGx5Rm9yY2VkQXBwZWFyYW5jZSgp
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKLSAgICB2b2lk
IHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBMQVRG
T1JNKFdJTikKLSAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyB3bmRQcm9jKEhXTkQsIFVJTlQs
IFdQQVJBTSwgTFBBUkFNKTsKLSAgICBib29sIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKLSAgICB2
b2lkIHdpbmRvd1JlY2VpdmVkTWVzc2FnZShIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSkgb3Zl
cnJpZGU7Ci0jZW5kaWYKLQotICAgIFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0ZWRQYWdlIHsgbnVs
bHB0ciB9OwotICAgIFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0b3JQYWdlIHsgbnVsbHB0ciB9Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okluc3BlY3RvckNsaWVudD4gbV9pbnNwZWN0b3JDbGll
bnQ7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMpCi0gICAgUmVmUHRyPFdlYklu
c3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5PiBtX2V4dGVuc2lvbkNvbnRyb2xsZXI7
Ci0jZW5kaWYKLSAgICAKLSAgICBib29sIG1fdW5kZXJUZXN0IHsgZmFsc2UgfTsKLSAgICBib29s
IG1faXNWaXNpYmxlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNBdHRhY2hlZCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2NhbkF0dGFjaCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzUHJvZmlsaW5n
UGFnZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3dNZXNzYWdlU2VudCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250IHsgZmFsc2UgfTsKLSAgICBib29sIG1f
ZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lnbm9yZUVsZW1l
bnRTZWxlY3Rpb25DaGFuZ2UgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc0FjdGl2ZUZyb250ZW5k
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fY2xvc2luZyB7IGZhbHNlIH07Ci0KLSAgICBBdHRhY2ht
ZW50U2lkZSBtX2F0dGFjaG1lbnRTaWRlIHtBdHRhY2htZW50U2lkZTo6Qm90dG9tfTsKLQotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcj4g
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKLSAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IG1faW5z
cGVjdG9yV2luZG93OwotICAgIFJldGFpblB0cjxXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0
ZXI+IG1fb2JqQ0FkYXB0ZXI7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxOU1VSTD4+
IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXA7Ci0gICAgUnVuTG9vcDo6VGltZXI8V2ViSW5zcGVj
dG9yUHJveHk+IG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyOwotICAgIFN0cmlu
ZyBtX3VybFN0cmluZzsKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9zaGVldFJlY3Q7Ci0gICAg
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UgbV9mcm9udGVuZEFw
cGVhcmFuY2UgeyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZTo6
U3lzdGVtIH07Ci0gICAgYm9vbCBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QgeyBmYWxz
ZSB9OwotI2VsaWYgUExBVEZPUk0oR1RLKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJJbnNwZWN0
b3JQcm94eUNsaWVudD4gbV9jbGllbnQ7Ci0gICAgR3RrV2lkZ2V0KiBtX2luc3BlY3RvclZpZXcg
eyBudWxscHRyIH07Ci0gICAgR3RrV2lkZ2V0KiBtX2luc3BlY3RvcldpbmRvdyB7IG51bGxwdHIg
fTsKLSAgICBHdGtXaWRnZXQqIG1faGVhZGVyQmFyIHsgbnVsbHB0ciB9OwotICAgIFN0cmluZyBt
X2luc3BlY3RlZFVSTFN0cmluZzsKLSAgICBib29sIG1faXNPcGVuaW5nIHsgZmFsc2UgfTsKLSNl
bGlmIFBMQVRGT1JNKFdJTikKLSAgICBIV05EIG1faW5zcGVjdGVkVmlld1dpbmRvdyB7IG51bGxw
dHIgfTsKLSAgICBIV05EIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyB7IG51bGxwdHIgfTsK
LSAgICBIV05EIG1faW5zcGVjdG9yVmlld1dpbmRvdyB7IG51bGxwdHIgfTsKLSAgICBIV05EIG1f
aW5zcGVjdG9yRGV0YWNoV2luZG93IHsgbnVsbHB0ciB9OwotICAgIFJlZlB0cjxXZWJWaWV3PiBt
X2luc3BlY3RvclZpZXc7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclBy
b3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYklu
c3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
N2NiMTFmMjQ5OWU4YjUzYjg3OTEzMWZlMjVjMTA2YWMzZGJlYzY1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0x
LDYxICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0j
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci1tZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JQcm94eSB7Ci0gICAgT3BlbkxvY2FsSW5zcGVjdG9y
RnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KQotICAgIFNldEZyb250ZW5k
Q29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCi0KLSAgICBT
ZW5kTWVzc2FnZVRvQmFja2VuZChTdHJpbmcgbWVzc2FnZSkKLQotICAgIEZyb250ZW5kTG9hZGVk
KCkKLSAgICBEaWRDbG9zZSgpCi0gICAgQnJpbmdUb0Zyb250KCkKLSAgICBCcmluZ0luc3BlY3Rl
ZFBhZ2VUb0Zyb250KCkKLSAgICBSZW9wZW4oKQotICAgIFJlc2V0U3RhdGUoKQotCi0gICAgU2V0
Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFy
YW5jZSBhcHBlYXJhbmNlKQotICAgIE9wZW5VUkxFeHRlcm5hbGx5KFN0cmluZyB1cmwpCi0KLSAg
ICBJbnNwZWN0ZWRVUkxDaGFuZ2VkKFN0cmluZyB1cmxTdHJpbmcpCi0gICAgU2hvd0NlcnRpZmlj
YXRlKFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm8pCi0gICAgRWxlbWVu
dFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCi0gICAgVGltZWxpbmVSZWNvcmRpbmdDaGFu
Z2VkKGJvb2wgYWN0aXZlKQotICAgIFNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShXZWJD
b3JlOjpJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2UgZGV2ZWxvcGVyUHJlZmVy
ZW5jZSwgT3B0aW9uYWw8Ym9vbD4gb3ZlcnJpZGVWYWx1ZSkKLQotICAgIFNhdmUoU3RyaW5nIGZp
bGVuYW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2
ZUFzKQotICAgIEFwcGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQotCi0gICAg
QXR0YWNoQm90dG9tKCkKLSAgICBBdHRhY2hSaWdodCgpCi0gICAgQXR0YWNoTGVmdCgpCi0gICAg
RGV0YWNoKCkKLQotICAgIEF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUp
Ci0KLSAgICBTZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCi0gICAgU2V0
QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLQotICAgIFNldFNoZWV0UmVjdChX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLQotICAgIFN0YXJ0V2luZG93RHJhZygpCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUlQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
VUlQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFhN2E5ZTUzMTE5MjNiMDAwMTFhNTVkZjQ5NTMxMGJj
NGRkZTRkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5LmNwcApAQCAtMCwwICsxLDg5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkluc3BlY3RvclVJUHJveHkuaCIKKworI2luY2x1ZGUgIkFQSUluc3BlY3RvckNsaWVu
dC5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJBUElVSUNsaWVudC5oIgorI2luY2x1ZGUgIklu
c3BlY3RvckJyb3dzZXJBZ2VudC5oIgorI2luY2x1ZGUgIldlYkF1dG9tYXRpb25TZXNzaW9uLmgi
CisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3Rvck1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkuaCIK
KyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVj
dG9yVUlQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVk
ZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29s
LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0
aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01vY2tSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvVGV4dEVuY29kaW5nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUg
IldlYkluc3BlY3RvclVJUHJveHlDbGllbnQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0
b3JVSVByb3h5OjptaW5pbXVtV2luZG93V2lkdGggPSA1MDA7Citjb25zdCB1bnNpZ25lZCBXZWJJ
bnNwZWN0b3JVSVByb3h5OjptaW5pbXVtV2luZG93SGVpZ2h0ID0gNDAwOworCitjb25zdCB1bnNp
Z25lZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojppbml0aWFsV2luZG93V2lkdGggPSAxMDAwOworY29u
c3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5pdGlhbFdpbmRvd0hlaWdodCA9IDY1
MDsKKworV2ViSW5zcGVjdG9yVUlQcm94eTo6V2ViSW5zcGVjdG9yVUlQcm94eShXZWJQYWdlUHJv
eHkmIGluc3BlY3RlZFBhZ2UpCisgICAgOiBtX2luc3BlY3RlZFBhZ2UoJmluc3BlY3RlZFBhZ2Up
CisgICAgLCBtX2luc3BlY3RvckNsaWVudChtYWtlVW5pcXVlPEFQSTo6SW5zcGVjdG9yQ2xpZW50
PigpKQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAsIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rp
dml0eVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYkluc3BlY3RvclVJUHJveHk6OmNs
b3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKQorI2VuZGlmCit7CisgICAgbV9p
bnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+
d2ViUGFnZUlEKCksICp0aGlzKTsKK30KKworV2ViSW5zcGVjdG9yVUlQcm94eTo6fldlYkluc3Bl
Y3RvclVJUHJveHkoKQoreworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnNldEluc3Bl
Y3RvckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJbnNwZWN0b3JDbGllbnQ+JiYgaW5zcGVj
dG9yQ2xpZW50KQoreworICAgIGlmICghaW5zcGVjdG9yQ2xpZW50KSB7CisgICAgICAgIG1faW5z
cGVjdG9yQ2xpZW50ID0gbWFrZVVuaXF1ZTxBUEk6Okluc3BlY3RvckNsaWVudD4oKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1faW5zcGVjdG9yQ2xpZW50ID0gV1RGTW92ZShpbnNw
ZWN0b3JDbGllbnQpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0
aW9uTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoaW5z
cGVjdGVkUGFnZSgpKTsKK30KKworV2ViUHJlZmVyZW5jZXMmIFdlYkluc3BlY3RvclVJUHJveHk6
Omluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5zcGVj
dG9yUGFnZSk7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yUGFnZS0+cGFnZUdyb3VwKCkucHJlZmVy
ZW5jZXMoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjppbnZhbGlkYXRlKCkKK3sK
KyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIHBsYXRmb3JtSW52YWxpZGF0
ZSgpOworCisgICAgcmVzZXQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpzZW5k
TWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghbV9p
bnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2Fn
ZSkpOworfQorCisvLyBQdWJsaWMgQVBJcworYm9vbCBXZWJJbnNwZWN0b3JVSVByb3h5Ojppc0Zy
b250KCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHBsYXRmb3JtSXNGcm9udCgpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clVJUHJveHk6OmNvbm5lY3QoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZS0+cHJlZmVyZW5jZXMoKS5kZXZl
bG9wZXJFeHRyYXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Nob3dN
ZXNzYWdlU2VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaG93TWVzc2FnZVNlbnQgPSB0
cnVlOworICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSB0cnVlOworCisgICAgY3JlYXRl
RnJvbnRlbmRQYWdlKCk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Ok5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCks
IDApOworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpT
aG93KCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnNob3coKQoreworICAgIGlm
ICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNDb25uZWN0
ZWQoKSkgeworICAgICAgICBicmluZ1RvRnJvbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNvbm5lY3QoKTsKKworICAgIC8vIERvbid0IGlnbm9yZSB0aGUgZmlyc3QgYnJpbmdU
b0Zyb250IHNvIGl0IG9wZW5zIHRoZSBJbnNwZWN0b3IuCisgICAgbV9pZ25vcmVGaXJzdEJyaW5n
VG9Gcm9udCA9IGZhbHNlOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmhpZGUoKQor
eworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lz
VmlzaWJsZSA9IGZhbHNlOworCisgICAgcGxhdGZvcm1IaWRlKCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yVUlQcm94eTo6Y2xvc2UoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3Rvcjo6Q2xvc2UoKSk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmNsb3NlRm9yQ3Jhc2goKQoreworICAgIGNs
b3NlKCk7CisKKyAgICBwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSVByb3h5OjpyZW9wZW4oKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjbG9zZSgpOworICAgIHNob3coKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JVSVByb3h5OjpyZXNldFN0YXRlKCkKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0
ZWRQYWdlKTsKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKKyAgICBpZiAoIW1faW5zcGVj
dGVkUGFnZSB8fCAhbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnNw
ZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpOwor
ICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaGVkV2lk
dGgoKTsKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JBdHRh
Y2htZW50U2lkZSgpOworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3Bl
Y3RvclN0YXJ0c0F0dGFjaGVkKCk7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVs
ZXRlSW5zcGVjdG9yV2luZG93RnJhbWUoKTsKKworICAgIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9pbnNw
ZWN0ZWRQYWdlKSB7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9pbnNw
ZWN0ZWRQYWdlID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94
eTo6dXBkYXRlRm9yTmV3UGFnZVByb2Nlc3MoV2ViUGFnZVByb3h5JiBpbnNwZWN0ZWRQYWdlKQor
eworICAgIEFTU0VSVCghbV9pbnNwZWN0ZWRQYWdlKTsKKworICAgIG1faW5zcGVjdGVkUGFnZSA9
ICZpbnNwZWN0ZWRQYWdlOworICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7CisKKyAgICBpZiAo
bV9pbnNwZWN0b3JQYWdlKQorICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpVcGRhdGVDb25uZWN0aW9uKCkpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJUHJveHk6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVj
dGlvbklkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
OjpTZXRGcm9udGVuZENvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIpKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpzaG93Q29uc29sZSgpCit7CisgICAgaWYgKCFtX2luc3Bl
Y3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwor
CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dD
b25zb2xlKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnNob3dSZXNvdXJjZXMo
KQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBj
cmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yOjpTaG93UmVzb3VyY2VzKCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clVJUHJveHk6OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSkK
K3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3Jl
YXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGZyYW1lLT5mcmFtZUlEKCkp
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRhY2hCb3R0b20oKQoreworICAg
IGF0dGFjaChBdHRhY2htZW50U2lkZTo6Qm90dG9tKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjphdHRhY2hSaWdodCgpCit7CisgICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpSaWdo
dCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6YXR0YWNoTGVmdCgpCit7CisgICAg
YXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpMZWZ0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVBy
b3h5OjphdHRhY2goQXR0YWNobWVudFNpZGUgc2lkZSkKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0
b3JQYWdlKTsKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSB8fCAhbV9pbnNwZWN0b3JQYWdlIHx8
ICghbV9pc0F0dGFjaGVkICYmICFwbGF0Zm9ybUNhbkF0dGFjaChtX2NhbkF0dGFjaCkpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2lzQXR0YWNoZWQgPSB0cnVlOworICAgIG1fYXR0YWNobWVu
dFNpZGUgPSBzaWRlOworCisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVj
dG9yQXR0YWNobWVudFNpZGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNpZGUpKTsKKworICAgIGlm
IChtX2lzVmlzaWJsZSkKKyAgICAgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5z
cGVjdG9yU3RhcnRzQXR0YWNoZWQodHJ1ZSk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQodHJ1ZSkpOworCisgICAgc3dpdGNo
IChtX2F0dGFjaG1lbnRTaWRlKSB7CisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgor
ICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpB
dHRhY2hlZEJvdHRvbSgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEF0dGFjaG1lbnRT
aWRlOjpSaWdodDoKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JVSTo6QXR0YWNoZWRSaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgorICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHBsYXRmb3JtQXR0YWNoKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQ
cm94eTo6ZGV0YWNoKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSB8fCAhbV9pbnNwZWN0
b3JQYWdlIHx8ICghbV9pc0F0dGFjaGVkICYmIG1faXNWaXNpYmxlKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7CisKKyAgICBpZiAobV9pc1Zpc2libGUpCisg
ICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkKGZhbHNlKTsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yOjpTZXRBdHRhY2hlZChmYWxzZSkpOworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOworCisgICAgcGxhdGZvcm1EZXRh
Y2goKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Cisg
ICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGluc3BlY3Rv
clBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGhlaWdodCk7Cisg
ICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclVJUHJveHk6OnNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgp
Cit7CisgICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7CisgICAgaWYgKCFtX2luc3BlY3RvclBh
Z2UpCisgICAgICAgIHJldHVybjsKKworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNl
dEluc3BlY3RvckF0dGFjaGVkV2lkdGgod2lkdGgpOworICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRX
aW5kb3dXaWR0aCh3aWR0aCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0U2hl
ZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9ybVNldFNoZWV0UmVj
dChyZWN0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpzdGFydFdpbmRvd0RyYWco
KQoreworICAgIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6dG9nZ2xlUGFnZVByb2ZpbGluZygpCit7CisgICAgaWYgKCFtX2luc3BlY3Rl
ZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2lzUHJvZmlsaW5nUGFnZSkKKyAg
ICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0b3BQ
YWdlUHJvZmlsaW5nKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0YXJ0UGFnZVByb2ZpbGluZygpKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojp0b2dnbGVFbGVtZW50U2VsZWN0aW9uKCkKK3sKKyAgICBp
ZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZWxlbWVu
dFNlbGVjdGlvbkFjdGl2ZSkgeworICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFu
Z2UgPSB0cnVlOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3Rvcjo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Y29ubmVjdCgpOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3Rvcjo6U3RhcnRFbGVtZW50U2VsZWN0aW9uKCkpOworICAgIH0KK30KKworYm9vbCBXZWJJ
bnNwZWN0b3JVSVByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKGNvbnN0IFVSTCYgdXJs
KQoreworICAgIC8vIFVzZSBVUkwgc28gd2UgY2FuIGNvbXBhcmUgdGhlIHBhdGhzIGFuZCBwcm90
b2NvbHMuCisgICAgVVJMIG1haW5QYWdlVVJMKFVSTCgpLCBXZWJJbnNwZWN0b3JVSVByb3h5Ojpp
bnNwZWN0b3JQYWdlVVJMKCkpOworICAgIGlmICh1cmwucHJvdG9jb2woKSA9PSBtYWluUGFnZVVS
TC5wcm90b2NvbCgpICYmIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSA9PSBk
ZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMobWFpblBhZ2VVUkwucGF0aCgpKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBXZSBtaWdodCBub3QgaGF2ZSBhIFRlc3QgVVJMIGluIFByb2R1
Y3Rpb24gYnVpbGRzLgorICAgIFN0cmluZyB0ZXN0UGFnZVVSTFN0cmluZyA9IFdlYkluc3BlY3Rv
clVJUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCk7CisgICAgaWYgKHRlc3RQYWdlVVJMU3Ry
aW5nLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBVUkwgdGVzdFBhZ2VV
UkwoVVJMKCksIHRlc3RQYWdlVVJMU3RyaW5nKTsKKyAgICByZXR1cm4gdXJsLnByb3RvY29sKCkg
PT0gdGVzdFBhZ2VVUkwucHJvdG9jb2woKSAmJiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJs
LnBhdGgoKSkgPT0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRlc3RQYWdlVVJMLnBhdGgoKSk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6Y3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sK
KyAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3Bl
Y3RvclBhZ2UgPSBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpOworICAgIEFTU0VSVChtX2lu
c3BlY3RvclBhZ2UpOworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICB0cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlLCBtX2luc3BlY3RlZFBh
Z2UpOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBpbnNwZWN0ZWQgcGFnZSBoYXMgYSBydW5uaW5n
IFdlYlByb2Nlc3Mgc28gd2UgY2FuIGluc3BlY3QgaXQuCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5s
YXVuY2hJbml0aWFsUHJvY2Vzc0lmTmVjZXNzYXJ5KCk7CisKKyAgICBtX2luc3BlY3RvclBhZ2Ut
PnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCks
ICp0aGlzKTsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKKyAgICBtX2V4dGVu
c2lvbkNvbnRyb2xsZXIgPSBXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eTo6
Y3JlYXRlKCptX2luc3BlY3RvclBhZ2UpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUlQcm94eTo6b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wg
dW5kZXJUZXN0KQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZS0+cHJlZmVyZW5jZXMoKS5kZXZlbG9wZXJFeHRy
YXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2luc3BlY3RlZFBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5kKCkpIHsKKyAgICAgICAgc2hv
dygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV91bmRlclRlc3QgPSB1bmRlclRl
c3Q7CisgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQ
YWdlKTsKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RXN0YWJsaXNo
Q29ubmVjdGlvbihtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSwgaW5mb0ZvckxvY2FsRGVi
dWdnYWJsZSgpLCBtX3VuZGVyVGVzdCwgaW5zcGVjdGlvbkxldmVsKCkpKTsKKworICAgIEFTU0VS
VCghbV9pc0FjdGl2ZUZyb250ZW5kKTsKKyAgICBtX2lzQWN0aXZlRnJvbnRlbmQgPSB0cnVlOwor
ICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVu
ZCgqdGhpcyk7CisKKyAgICBpZiAoIW1fdW5kZXJUZXN0KSB7CisgICAgICAgIG1fY2FuQXR0YWNo
ID0gcGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKTsKKyAgICAgICAgbV9pc0F0dGFjaGVkID0g
c2hvdWxkT3BlbkF0dGFjaGVkKCk7CisgICAgICAgIG1fYXR0YWNobWVudFNpZGUgPSBzdGF0aWNf
Y2FzdDxBdHRhY2htZW50U2lkZT4oaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9y
QXR0YWNobWVudFNpZGUoKSk7CisKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKG1faXNBdHRhY2hlZCkpOworCisgICAgICAg
IGlmIChtX2lzQXR0YWNoZWQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lk
ZSkgeworICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgorICAgICAgICAg
ICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0
dGFjaGVkQm90dG9tKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBj
YXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKKyAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpM
ZWZ0OgorICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hlZCgpKTsKKworICAgICAgICBt
X2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXREb2NraW5n
VW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7CisgICAgfQorCisgICAgLy8gTm90aWZ5IFdlYktp
dCBjbGllbnQgd2hlbiBhIGxvY2FsIGluc3BlY3RvciBhdHRhY2hlcyBzbyB0aGF0IGl0IG1heSBp
bnN0YWxsIGRlbGVnYXRlcyBwcmlvciB0byB0aGUgX1dLSW5zcGVjdG9yIGxvYWRpbmcgaXRzIGZy
b250ZW5kLgorICAgIG1faW5zcGVjdGVkUGFnZS0+dWlDbGllbnQoKS5kaWRBdHRhY2hMb2NhbElu
c3BlY3RvcigqbV9pbnNwZWN0ZWRQYWdlLCAqdGhpcyk7CisKKyAgICAvLyBCYWlsIG91dCBpZiB0
aGUgY2xpZW50IGNsb3NlZCB0aGUgaW5zcGVjdG9yIGZyb20gdGhlIGRlbGVnYXRlIG1ldGhvZC4K
KyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNw
ZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIG1fdW5kZXJUZXN0ID8gV2ViSW5zcGVj
dG9yVUlQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKSA6IFdlYkluc3BlY3RvclVJUHJveHk6
Omluc3BlY3RvclBhZ2VVUkwoKSkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6Om9w
ZW4oKQoreworICAgIGlmIChtX3VuZGVyVGVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKEdUSykK
KyAgICBTZXRGb3JTY29wZTxib29sPiBpc09wZW5pbmcobV9pc09wZW5pbmcsIHRydWUpOworI2Vu
ZGlmCisKKyAgICBtX2lzVmlzaWJsZSA9IHRydWU7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7CisK
KyAgICBpZiAobV9pc0F0dGFjaGVkKQorICAgICAgICBwbGF0Zm9ybUF0dGFjaCgpOworICAgIGVs
c2UKKyAgICAgICAgcGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOworCisgICAgcGxhdGZv
cm1CcmluZ1RvRnJvbnQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpkaWRDbG9z
ZSgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSVByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYg
KCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEd1YXJkIGFnYWlu
c3QgY2FsbHMgdG8gY2xvc2UoKSBtYWRlIGJ5IHRoZSBjbGllbnQgd2hpbGUgYWxyZWFkeSBjbG9z
aW5nLgorICAgIGlmIChtX2Nsb3NpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTZXRG
b3JTY29wZTxib29sPiByZWVudHJhbmN5UHJvdGVjdG9yKG1fY2xvc2luZywgdHJ1ZSk7CisgICAg
CisgICAgLy8gTm90aWZ5IFdlYktpdCBjbGllbnQgd2hlbiBhIGxvY2FsIGluc3BlY3RvciBjbG9z
ZXMgc28gaXQgY2FuIGNsZWFyIF9XS0luc3BlY3RvckRlbGVnYXRlIGFuZCBwZXJmb3JtIG90aGVy
IGNsZWFudXAuCisgICAgbV9pbnNwZWN0ZWRQYWdlLT51aUNsaWVudCgpLndpbGxDbG9zZUxvY2Fs
SW5zcGVjdG9yKCptX2luc3BlY3RlZFBhZ2UsICp0aGlzKTsKKworICAgIG1faXNWaXNpYmxlID0g
ZmFsc2U7CisgICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBmYWxzZTsKKyAgICBtX3Nob3dNZXNzYWdl
U2VudCA9IGZhbHNlOworICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBmYWxzZTsKKwor
ICAgIHVudHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSk7CisKKyAgICBtX2luc3Bl
Y3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9p
c1Zpc2libGUpKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCkpOworCisgICAgaWYgKG1faXNBY3Rp
dmVGcm9udGVuZCkgeworICAgICAgICBtX2lzQWN0aXZlRnJvbnRlbmQgPSBmYWxzZTsKKyAgICAg
ICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250
ZW5kKCp0aGlzKTsKKyAgICB9CisKKyAgICBpZiAobV9pc0F0dGFjaGVkKQorICAgICAgICBwbGF0
Zm9ybURldGFjaCgpOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQorICAgIC8v
IFRoaXMgZXh0ZW5zaW9uIGNvbnRyb2xsZXIgbWF5IGJlIGtlcHQgYWxpdmUgYnkgdGhlIElQQyBk
aXNwYXRjaGVyIGJleW9uZCB0aGUgcG9pbnQKKyAgICAvLyB3aGVuIG1faW5zcGVjdG9yUGFnZSBp
cyBjbGVhcmVkIGJlbG93LiBOb3RpZnkgdGhlIGNvbnRyb2xsZXIgc28gaXQgY2FuIGNsZWFuIHVw
IGJlZm9yZSB0aGVuLgorICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlci0+aW5zcGVjdG9yRnJvbnRl
bmRXaWxsQ2xvc2UoKTsKKyAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXIgPSBudWxscHRyOworI2Vu
ZGlmCisgICAgCisgICAgLy8gTnVsbCBvdXQgbV9pbnNwZWN0b3JQYWdlIGFmdGVyIHBsYXRmb3Jt
RGV0YWNoKCksIHNvIHRoZSB2aWV3cyBjYW4gYmUgY2xlYW5lZCB1cCBjb3JyZWN0bHkuCisgICAg
bV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsKKworICAgIG1faXNBdHRhY2hlZCA9IGZhbHNlOwor
ICAgIG1fY2FuQXR0YWNoID0gZmFsc2U7CisgICAgbV91bmRlclRlc3QgPSBmYWxzZTsKKworICAg
IHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSVByb3h5OjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Cit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
aW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZyb21G
cm9udGVuZChtZXNzYWdlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojpmcm9udGVu
ZExvYWRlZCgpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChhdXRvKiBhdXRvbWF0aW9uU2Vzc2lvbiA9IG1faW5zcGVjdGVkUGFnZS0+cHJv
Y2VzcygpLnByb2Nlc3NQb29sKCkuYXV0b21hdGlvblNlc3Npb24oKSkKKyAgICAgICAgYXV0b21h
dGlvblNlc3Npb24tPmluc3BlY3RvckZyb250ZW5kTG9hZGVkKCptX2luc3BlY3RlZFBhZ2UpOwor
ICAgIAorI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKKyAgICBpZiAobV9leHRlbnNp
b25Db250cm9sbGVyKQorICAgICAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXItPmluc3BlY3RvckZy
b250ZW5kTG9hZGVkKCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojpi
cmluZ1RvRnJvbnQoKQoreworICAgIC8vIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwgdGVsbHMgdXMgdG8gZG8gdGhpcyBvbiBsb2FkLiBXZSB3YW50IHRvCisgICAgLy8gaWdu
b3JlIGl0IG9uY2UgaWYgd2Ugb25seSB3YW50ZWQgdG8gY29ubmVjdC4gVGhpcyBhbGxvd3MgdGhl
IEluc3BlY3RvciB0byBsYXRlcgorICAgIC8vIHJlcXVlc3QgdG8gYmUgYnJvdWdodCB0byB0aGUg
ZnJvbnQgd2hlbiBhIGJyZWFrcG9pbnQgaXMgaGl0IG9yIHNvbWUgb3RoZXIgYWN0aW9uLgorICAg
IGlmIChtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250KSB7CisgICAgICAgIG1faWdub3JlRmlyc3RC
cmluZ1RvRnJvbnQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X2lzVmlzaWJsZSkKKyAgICAgICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKKyAgICBlbHNlCisg
ICAgICAgIG9wZW4oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpicmluZ0luc3Bl
Y3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJv
bnQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQoreworICAgIGJvb2wgcHJldmlvdXNDYW5BdHRhY2ggPSBt
X2NhbkF0dGFjaDsKKworICAgIG1fY2FuQXR0YWNoID0gbV9pc0F0dGFjaGVkIHx8IHBsYXRmb3Jt
Q2FuQXR0YWNoKGF2YWlsYWJsZSk7CisKKyAgICBpZiAocHJldmlvdXNDYW5BdHRhY2ggPT0gbV9j
YW5BdHRhY2gpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2luc3BlY3RvclBhZ2UgJiYg
IW1fdW5kZXJUZXN0KQorICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7CisKKyAg
ICBwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQobV9jYW5BdHRhY2gpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnNldEZvcmNlZEFwcGVhcmFuY2UoSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKK3sKKyAgICBwbGF0Zm9ybVNldEZv
cmNlZEFwcGVhcmFuY2UoYXBwZWFyYW5jZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94
eTo6b3BlblVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgbV9pbnNwZWN0
b3JDbGllbnQtPm9wZW5VUkxFeHRlcm5hbGx5KCp0aGlzLCB1cmwpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJUHJveHk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpCit7CisgICAgcGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmlj
YXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRl
KGNlcnRpZmljYXRlSW5mbyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6ZWxlbWVu
dFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCit7CisgICAgbV9lbGVtZW50U2VsZWN0aW9u
QWN0aXZlID0gYWN0aXZlOworCisgICAgaWYgKG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5n
ZSkgeworICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoYWN0aXZlKQorICAgICAgICBwbGF0Zm9ybUJyaW5nSW5z
cGVjdGVkUGFnZVRvRnJvbnQoKTsKKyAgICBlbHNlIGlmIChpc0Nvbm5lY3RlZCgpKQorICAgICAg
ICBicmluZ1RvRnJvbnQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojp0aW1lbGlu
ZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCit7CisgICAgbV9pc1Byb2ZpbGluZ1BhZ2Ug
PSBhY3RpdmU7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0RGV2ZWxvcGVyUHJl
ZmVyZW5jZU92ZXJyaWRlKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVy
ZW5jZSBkZXZlbG9wZXJQcmVmZXJlbmNlLCBPcHRpb25hbDxib29sPiBvdmVycmlkZVZhbHVlKQor
eworICAgIHN3aXRjaCAoZGV2ZWxvcGVyUHJlZmVyZW5jZSkgeworICAgIGNhc2UgSW5zcGVjdG9y
Q2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudERlYnVn
TW9kZUVuYWJsZWQ6CisgICAgICAgIGlmIChtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgICAgICBt
X2luc3BlY3RlZFBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudERlYnVnTW9kZShvdmVycmlkZVZhbHVlICYmIG92ZXJyaWRlVmFsdWUudmFsdWUoKSk7Cisg
ICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVm
ZXJlbmNlOjpJVFBEZWJ1Z01vZGVFbmFibGVkOgorICAgICAgICBpZiAobV9pbnNwZWN0ZWRQYWdl
KQorICAgICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShvdmVycmlkZVZhbHVlICYmIG92ZXJyaWRlVmFs
dWUudmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgSW5zcGVjdG9yQ2xpZW50
OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOgorI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCisgICAgICAgIGlmIChtX2luc3BlY3RlZFBhZ2UpCisgICAgICAg
ICAgICBtX2luc3BlY3RlZFBhZ2UtPnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlk
ZShvdmVycmlkZVZhbHVlKTsKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBh
dmFpbGFibGUpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgbV9pbnNw
ZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RGlhZ25vc3RpY0xv
Z2dpbmdBdmFpbGFibGUoYXZhaWxhYmxlKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhdmFp
bGFibGUpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2F2ZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZS0+cHJl
ZmVyZW5jZXMoKS5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVCghZmlsZW5hbWUuaXNFbXB0eSgpKTsKKyAgICBpZiAoZmlsZW5hbWUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwbGF0Zm9ybVNhdmUoZmlsZW5hbWUsIGNvbnRl
bnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjphcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250
ZW50KQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlLT5wcmVmZXJlbmNlcygpLmRldmVsb3Bl
ckV4dHJhc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFmaWxlbmFt
ZS5pc0VtcHR5KCkpOworICAgIGlmIChmaWxlbmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHBsYXRmb3JtQXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KTsKK30KKworYm9vbCBX
ZWJJbnNwZWN0b3JVSVByb3h5OjpzaG91bGRPcGVuQXR0YWNoZWQoKQoreworICAgIHJldHVybiBp
bnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpICYmIGNh
bkF0dGFjaCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmV2YWx1YXRlSW5Gcm9u
dGVuZEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQoreworICAgIGlmICghbV9p
bnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpFdmFsdWF0ZUluRnJvbnRlbmRGb3JUZXN0aW5n
KGV4cHJlc3Npb24pKTsKK30KKworLy8gVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMgY2FuIHVz
ZSB0aGUgc3R1YnMgcHJvdmlkZWQgaGVyZS4KKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFU
Rk9STShHVEspICYmICFQTEFURk9STShXSU4pCisKK1dlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUludmFs
aWRhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUhpZGUoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1Jc0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFu
Y2UoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3Rl
ZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0
IENlcnRpZmljYXRlSW5mbyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRV
UkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNl
U2F2ZURpYWxvZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordW5z
aWduZWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVk
IFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1BdHRhY2goKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1EZXRhY2goKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1T
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclBh
Z2VVUkwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitEZWJ1
Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJs
ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRGVidWdnYWJsZUluZm9E
YXRhOjplbXB0eSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0
QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5
Q2hhbmdlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNlbmRpZiAvLyAh
UExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yVUlQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxZDliYTRhNDhlMTNi
ZTk3MTgxM2ZjMTgyM2MyMmQzMWQ0YTI5NDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUlQcm94eS5oCkBAIC0wLDAgKzEs
MzM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1v
YmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKKyNp
bmNsdWRlICJEZWJ1Z2dhYmxlSW5mb0RhdGEuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIu
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisj
aW5jbHVkZSAiV0tHZW9tZXRyeS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK09CSkNfQ0xBU1MgTlNVUkw7CitPQkpDX0NMQVNTIE5TVmll
dzsKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdLV2ViSW5zcGVjdG9yVUlQcm94
eU9iakNBZGFwdGVyOworT0JKQ19DTEFTUyBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyOworI2Vs
aWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBDZXJ0aWZpY2F0ZUluZm87Cit9CisKK25hbWVzcGFjZSBBUEkg
eworY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViRnJhbWVQcm94eTsKK2NsYXNzIFdlYkluc3BlY3RvclVJUHJveHlDbGllbnQ7CitjbGFz
cyBXZWJQYWdlUHJveHk7CitjbGFzcyBXZWJQcmVmZXJlbmNlczsKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0VYVEVOU0lPTlMpCitjbGFzcyBXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQ
cm94eTsKKyNlbmRpZgorCitlbnVtIGNsYXNzIEF0dGFjaG1lbnRTaWRlIHsKKyAgICBCb3R0b20s
CisgICAgUmlnaHQsCisgICAgTGVmdCwKK307CisKK2NsYXNzIFdlYkluc3BlY3RvclVJUHJveHkK
KyAgICA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6Okluc3BlY3Rv
cj4KKyAgICAsIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICwgcHVibGljIEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsCisjaWYgUExBVEZPUk0oV0lOKQorICAgICwgcHVibGljIFdl
YkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgorI2VuZGlmCit7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxXZWJJbnNwZWN0b3JVSVByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5JiBpbnNwZWN0
ZWRQYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9y
VUlQcm94eShpbnNwZWN0ZWRQYWdlKSk7CisgICAgfQorCisgICAgZXhwbGljaXQgV2ViSW5zcGVj
dG9yVUlQcm94eShXZWJQYWdlUHJveHkmKTsKKyAgICB2aXJ0dWFsIH5XZWJJbnNwZWN0b3JVSVBy
b3h5KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIEFQSTo6SW5zcGVjdG9yQ2xp
ZW50JiBpbnNwZWN0b3JDbGllbnQoKSB7IHJldHVybiAqbV9pbnNwZWN0b3JDbGllbnQ7IH0KKyAg
ICB2b2lkIHNldEluc3BlY3RvckNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJbnNwZWN0b3JD
bGllbnQ+JiYpOworCisgICAgLy8gUHVibGljIEFQSXMKKyAgICBXZWJQYWdlUHJveHkqIGluc3Bl
Y3RlZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KKyAgICBXZWJQYWdl
UHJveHkqIGluc3BlY3RvclBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclBhZ2U7IH0K
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKKyAgICBXZWJJbnNwZWN0b3JVSUV4
dGVuc2lvbkNvbnRyb2xsZXJQcm94eSogZXh0ZW5zaW9uQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZXh0ZW5zaW9uQ29udHJvbGxlci5nZXQoKTsgfQorI2VuZGlmCisKKyAgICBib29sIGlz
Q29ubmVjdGVkKCkgY29uc3QgeyByZXR1cm4gISFtX2luc3BlY3RvclBhZ2U7IH0KKyAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWaXNpYmxlOyB9CisgICAgYm9vbCBpc0Zy
b250KCk7CisKKyAgICB2b2lkIGNvbm5lY3QoKTsKKworICAgIHZvaWQgc2hvdygpOworICAgIHZv
aWQgaGlkZSgpOworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIGNsb3NlRm9yQ3Jhc2goKTsK
KyAgICB2b2lkIHJlb3BlbigpOworICAgIHZvaWQgcmVzZXRTdGF0ZSgpOworCisgICAgdm9pZCBy
ZXNldCgpOworICAgIHZvaWQgdXBkYXRlRm9yTmV3UGFnZVByb2Nlc3MoV2ViUGFnZVByb3h5Jik7
CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgZW51bSBjbGFzcyBJbnNwZWN0aW9uVGFyZ2V0VHlw
ZSB7IExvY2FsLCBSZW1vdGUgfTsKKyAgICBzdGF0aWMgUmV0YWluUHRyPE5TV2luZG93PiBjcmVh
dGVGcm9udGVuZFdpbmRvdyhOU1JlY3Qgc2F2ZWRXaW5kb3dGcmFtZSwgSW5zcGVjdGlvblRhcmdl
dFR5cGUpOworCisgICAgdm9pZCBkaWRCZWNvbWVBY3RpdmUoKTsKKworICAgIHZvaWQgdXBkYXRl
SW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdDsKKyAgICB2b2lkIGluc3BlY3RlZFZpZXdGcmFt
ZURpZENoYW5nZShDR0Zsb2F0ID0gMCk7CisgICAgdm9pZCB3aW5kb3dGcmFtZURpZENoYW5nZSgp
OworICAgIHZvaWQgd2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOworICAgIE5TV2luZG93ICpp
bnNwZWN0b3JXaW5kb3coKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvcldpbmRvdy5nZXQoKTsg
fQorCisgICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZSgpOworICAgIHZvaWQgY2xvc2VGcm9udGVu
ZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQoKTsKKworICAgIHZvaWQgYXR0YWNobWVudFZpZXdE
aWRDaGFuZ2UoTlNWaWV3ICpvbGRWaWV3LCBOU1ZpZXcgKm5ld1ZpZXcpOworICAgIHZvaWQgYXR0
YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhOU1dpbmRvdyAqb2xkV2luZG93KTsKKyAgICB2b2lk
IGF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coTlNXaW5kb3cgKm5ld1dpbmRvdyk7CisKKyAgICBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNoZWV0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hl
ZXRSZWN0OyB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHdGtXaWRnZXQqIGlu
c3BlY3RvclZpZXcoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclZpZXc7IH07CisgICAgdm9p
ZCBzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclVJUHJveHlDbGllbnQ+JiYp
OworI2VuZGlmCisKKyAgICB2b2lkIHNob3dDb25zb2xlKCk7CisgICAgdm9pZCBzaG93UmVzb3Vy
Y2VzKCk7CisgICAgdm9pZCBzaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViRnJhbWVQcm94eSop
OworICAgIHZvaWQgb3BlblVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJiB1cmwpOworCisgICAg
QXR0YWNobWVudFNpZGUgYXR0YWNobWVudFNpZGUoKSBjb25zdCB7IHJldHVybiBtX2F0dGFjaG1l
bnRTaWRlOyB9CisgICAgYm9vbCBpc0F0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0F0dGFj
aGVkOyB9CisgICAgdm9pZCBhdHRhY2hSaWdodCgpOworICAgIHZvaWQgYXR0YWNoTGVmdCgpOwor
ICAgIHZvaWQgYXR0YWNoQm90dG9tKCk7CisgICAgdm9pZCBhdHRhY2goQXR0YWNobWVudFNpZGUg
PSBBdHRhY2htZW50U2lkZTo6Qm90dG9tKTsKKyAgICB2b2lkIGRldGFjaCgpOworCisgICAgdm9p
ZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCk7CisgICAgdm9pZCBzZXRBdHRhY2hl
ZFdpbmRvd1dpZHRoKHVuc2lnbmVkKTsKKworICAgIHZvaWQgc2V0U2hlZXRSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpOworCisgICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKTsKKworICAg
IGJvb2wgaXNQcm9maWxpbmdQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Byb2ZpbGluZ1BhZ2U7
IH0KKyAgICB2b2lkIHRvZ2dsZVBhZ2VQcm9maWxpbmcoKTsKKworICAgIGJvb2wgaXNFbGVtZW50
U2VsZWN0aW9uQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50U2VsZWN0aW9uQWN0aXZl
OyB9CisgICAgdm9pZCB0b2dnbGVFbGVtZW50U2VsZWN0aW9uKCk7CisKKyAgICBib29sIGlzVW5k
ZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gbV91bmRlclRlc3Q7IH0KKworICAgIHZvaWQgc2V0RGlh
Z25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCk7CisKKyAgICAvLyBQcm92aWRlZCBieSBwbGF0
Zm9ybSBXZWJJbnNwZWN0b3JVSVByb3h5IGltcGxlbWVudGF0aW9ucy4KKyAgICBzdGF0aWMgU3Ry
aW5nIGluc3BlY3RvclBhZ2VVUkwoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclRlc3RQ
YWdlVVJMKCk7CisgICAgc3RhdGljIGJvb2wgaXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25z
dCBVUkwmKTsKKyAgICBzdGF0aWMgRGVidWdnYWJsZUluZm9EYXRhIGluZm9Gb3JMb2NhbERlYnVn
Z2FibGUoKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtV2luZG93V2lkdGg7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1XaW5kb3dIZWlnaHQ7CisKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbFdpbmRvd1dpZHRoOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBpbml0aWFsV2luZG93SGVpZ2h0OworCisgICAgLy8gVGVzdGluZyBtZXRob2Rz
LgorICAgIHZvaWQgZXZhbHVhdGVJbkZyb250ZW5kRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworICAgIHZvaWQgY2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVy
CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBvdmVycmlkZTsKKworICAgIC8vIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsCisgICAg
dm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlk
ZTsKKyAgICBDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIENvbm5lY3Rpb25UeXBlOjpMb2NhbDsgfQorCisgICAgV2ViUGFnZVByb3h5KiBwbGF0
Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpOworICAgIHZvaWQgcGxhdGZvcm1DcmVhdGVGcm9udGVu
ZFdpbmRvdygpOworICAgIHZvaWQgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
OworCisgICAgdm9pZCBwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKTsKKyAgICB2b2lkIHBsYXRm
b3JtSW52YWxpZGF0ZSgpOworICAgIHZvaWQgcGxhdGZvcm1SZXNldFN0YXRlKCk7CisgICAgdm9p
ZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworICAgIHZvaWQgcGxhdGZvcm1CcmluZ0luc3BlY3Rl
ZFBhZ2VUb0Zyb250KCk7CisgICAgdm9pZCBwbGF0Zm9ybUhpZGUoKTsKKyAgICBib29sIHBsYXRm
b3JtSXNGcm9udCgpOworICAgIHZvaWQgcGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2Vk
KGJvb2wpOworICAgIHZvaWQgcGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlKTsKKyAgICB2b2lkIHBsYXRmb3JtT3Bl
blVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBwbGF0Zm9ybUluc3BlY3Rl
ZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBwbGF0Zm9ybVNob3dDZXJ0aWZp
Y2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKKyAgICB1bnNpZ25lZCBwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpOworICAgIHVuc2lnbmVkIHBsYXRmb3JtSW5zcGVj
dGVkV2luZG93V2lkdGgoKTsKKyAgICB2b2lkIHBsYXRmb3JtQXR0YWNoKCk7CisgICAgdm9pZCBw
bGF0Zm9ybURldGFjaCgpOworICAgIHZvaWQgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCh1bnNpZ25lZCk7CisgICAgdm9pZCBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5z
aWduZWQpOworICAgIHZvaWQgcGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jik7CisgICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOworICAgIHZvaWQg
cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVu
dCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKKyAgICB2b2lkIHBsYXRm
b3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCk7
CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgYm9vbCBwbGF0Zm9ybUNhbkF0dGFjaChib29sIHdl
YlByb2Nlc3NDYW5BdHRhY2gpOworI2Vsc2UKKyAgICBib29sIHBsYXRmb3JtQ2FuQXR0YWNoKGJv
b2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCkgeyByZXR1cm4gd2ViUHJvY2Vzc0NhbkF0dGFjaDsgfQor
I2VuZGlmCisKKyAgICAvLyBDYWxsZWQgYnkgV2ViSW5zcGVjdG9yVUlQcm94eSBtZXNzYWdlcwor
ICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wg
dW5kZXJUZXN0KTsKKyAgICB2b2lkIHNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1l
bnQpOworCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmKTsKKyAg
ICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisgICAgdm9pZCBkaWRDbG9zZSgpOworICAgIHZvaWQg
YnJpbmdUb0Zyb250KCk7CisgICAgdm9pZCBicmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7Cisg
ICAgdm9pZCBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgc2V0Rm9y
Y2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5j
ZSk7CisgICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOworICAgIHZv
aWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAg
IHZvaWQgZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCB0aW1lbGluZVJl
Y29yZGluZ0NoYW5nZWQoYm9vbCk7CisgICAgdm9pZCBzZXREZXZlbG9wZXJQcmVmZXJlbmNlT3Zl
cnJpZGUoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlLCBPcHRp
b25hbDxib29sPik7CisKKyAgICB2b2lkIHNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29u
c3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMp
OworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYg
Y29udGVudCk7CisKKyAgICBib29sIGNhbkF0dGFjaCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuQXR0
YWNoOyB9CisgICAgYm9vbCBzaG91bGRPcGVuQXR0YWNoZWQoKTsKKworICAgIHZvaWQgb3Blbigp
OworCisgICAgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKCkgY29uc3Q7CisKKyAgICBXZWJQcmVm
ZXJlbmNlcyYgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkgY29uc3Q7CisKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgdm9pZCBhcHBseUZvcmNlZEFwcGVhcmFuY2UoKTsKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisgICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JX
aW5kb3dUaXRsZSgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgc3Rh
dGljIExSRVNVTFQgQ0FMTEJBQ0sgd25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7
CisgICAgYm9vbCByZWdpc3RlcldpbmRvd0NsYXNzKCk7CisgICAgdm9pZCB3aW5kb3dSZWNlaXZl
ZE1lc3NhZ2UoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pIG92ZXJyaWRlOworI2VuZGlmCisK
KyAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdGVkUGFnZSB7IG51bGxwdHIgfTsKKyAgICBXZWJQ
YWdlUHJveHkqIG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpJbnNwZWN0b3JDbGllbnQ+IG1faW5zcGVjdG9yQ2xpZW50OworCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9FWFRFTlNJT05TKQorICAgIFJlZlB0cjxXZWJJbnNwZWN0b3JVSUV4dGVuc2lv
bkNvbnRyb2xsZXJQcm94eT4gbV9leHRlbnNpb25Db250cm9sbGVyOworI2VuZGlmCisgICAgCisg
ICAgYm9vbCBtX3VuZGVyVGVzdCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVmlzaWJsZSB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2lzQXR0YWNoZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jYW5B
dHRhY2ggeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1Byb2ZpbGluZ1BhZ2UgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9zaG93TWVzc2FnZVNlbnQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pZ25vcmVG
aXJzdEJyaW5nVG9Gcm9udCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2VsZW1lbnRTZWxlY3Rpb25B
Y3RpdmUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdl
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNBY3RpdmVGcm9udGVuZCB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX2Nsb3NpbmcgeyBmYWxzZSB9OworCisgICAgQXR0YWNobWVudFNpZGUgbV9hdHRhY2ht
ZW50U2lkZSB7QXR0YWNobWVudFNpZGU6OkJvdHRvbX07CisKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgUmV0YWluUHRyPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXI7CisgICAgUmV0YWluUHRyPE5TV2luZG93PiBtX2luc3BlY3RvcldpbmRvdzsKKyAg
ICBSZXRhaW5QdHI8V0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXI+IG1fb2JqQ0FkYXB0
ZXI7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxOU1VSTD4+IG1fc3VnZ2VzdGVkVG9B
Y3R1YWxVUkxNYXA7CisgICAgUnVuTG9vcDo6VGltZXI8V2ViSW5zcGVjdG9yVUlQcm94eT4gbV9j
bG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXI7CisgICAgU3RyaW5nIG1fdXJsU3RyaW5n
OworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NoZWV0UmVjdDsKKyAgICBXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSBtX2Zyb250ZW5kQXBwZWFyYW5jZSB7IFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlOjpTeXN0ZW0gfTsKKyAg
ICBib29sIG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCB7IGZhbHNlIH07CisjZWxpZiBQ
TEFURk9STShHVEspCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclVJUHJveHlDbGll
bnQ+IG1fY2xpZW50OworICAgIEd0a1dpZGdldCogbV9pbnNwZWN0b3JWaWV3IHsgbnVsbHB0ciB9
OworICAgIEd0a1dpZGdldCogbV9pbnNwZWN0b3JXaW5kb3cgeyBudWxscHRyIH07CisgICAgR3Rr
V2lkZ2V0KiBtX2hlYWRlckJhciB7IG51bGxwdHIgfTsKKyAgICBTdHJpbmcgbV9pbnNwZWN0ZWRV
UkxTdHJpbmc7CisgICAgYm9vbCBtX2lzT3BlbmluZyB7IGZhbHNlIH07CisjZWxpZiBQTEFURk9S
TShXSU4pCisgICAgSFdORCBtX2luc3BlY3RlZFZpZXdXaW5kb3cgeyBudWxscHRyIH07CisgICAg
SFdORCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgeyBudWxscHRyIH07CisgICAgSFdORCBt
X2luc3BlY3RvclZpZXdXaW5kb3cgeyBudWxscHRyIH07CisgICAgSFdORCBtX2luc3BlY3RvckRl
dGFjaFdpbmRvdyB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8V2ViVmlldz4gbV9pbnNwZWN0b3JW
aWV3OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJ
UHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQ4ODY0NjZjYWMyZGEwMjkwMWYzYjE0NzEx
NWI3YzNiNGY1ZjY3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNjEg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
IyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdl
cyAtPiBXZWJJbnNwZWN0b3JVSVByb3h5IHsKKyAgICBPcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVu
ZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpCisgICAgU2V0RnJvbnRlbmRDb25uZWN0
aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmllcikKKworICAgIFNlbmRNZXNz
YWdlVG9CYWNrZW5kKFN0cmluZyBtZXNzYWdlKQorCisgICAgRnJvbnRlbmRMb2FkZWQoKQorICAg
IERpZENsb3NlKCkKKyAgICBCcmluZ1RvRnJvbnQoKQorICAgIEJyaW5nSW5zcGVjdGVkUGFnZVRv
RnJvbnQoKQorICAgIFJlb3BlbigpCisgICAgUmVzZXRTdGF0ZSgpCisKKyAgICBTZXRGb3JjZWRB
cHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlIGFw
cGVhcmFuY2UpCisgICAgT3BlblVSTEV4dGVybmFsbHkoU3RyaW5nIHVybCkKKworICAgIEluc3Bl
Y3RlZFVSTENoYW5nZWQoU3RyaW5nIHVybFN0cmluZykKKyAgICBTaG93Q2VydGlmaWNhdGUoV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykKKyAgICBFbGVtZW50U2VsZWN0
aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKKyAgICBUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9v
bCBhY3RpdmUpCisgICAgU2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKFdlYkNvcmU6Oklu
c3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZSBkZXZlbG9wZXJQcmVmZXJlbmNlLCBP
cHRpb25hbDxib29sPiBvdmVycmlkZVZhbHVlKQorCisgICAgU2F2ZShTdHJpbmcgZmlsZW5hbWUs
IFN0cmluZyBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCisg
ICAgQXBwZW5kKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQpCisKKyAgICBBdHRhY2hC
b3R0b20oKQorICAgIEF0dGFjaFJpZ2h0KCkKKyAgICBBdHRhY2hMZWZ0KCkKKyAgICBEZXRhY2go
KQorCisgICAgQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKKworICAg
IFNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKKyAgICBTZXRBdHRhY2hl
ZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQorCisgICAgU2V0U2hlZXRSZWN0KFdlYkNvcmU6
OkZsb2F0UmVjdCByZWN0KQorCisgICAgU3RhcnRXaW5kb3dEcmFnKCkKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNs
aWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuY3BwCmluZGV4IDM1OTA3NWFmZTk5MGI5YjJjZDVkMDAwZWQ4MWJjMzQ3
NDVhNmExNzMuLjliOTQ4ZmI4OGZkN2ViNjk5ZTA0ZmJlZmZkN2EyYTMxMTA4ZDMyYmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3Bl
Y3RvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2ds
aWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiQVBJRGVidWdnYWJsZUluZm8uaCIKICNpbmNsdWRlICJBUElJbnNwZWN0b3JDb25maWd1cmF0
aW9uLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVt
b3RlSW5zcGVjdG9yVXRpbHMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2Fi
bGVUeXBlLmg+CiAjaW5jbHVkZSA8Z2lvL2dpby5oPgpAQCAtNDAsMTEgKzQwLDExIEBACiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eSBmaW5hbCA6IHB1
YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7CitjbGFzcyBSZW1vdGVJbnNwZWN0
b3JQcm94eSBmaW5hbCA6IHB1YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOwogcHVibGljOgogICAgIFJlbW90ZUluc3Bl
Y3RvclByb3h5KFJlbW90ZUluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50LCB1aW50NjRf
dCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKQotICAgICAgICA6IG1fcHJveHkoUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpKQorICAgICAgICA6IG1fcHJveHkoUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6Y3JlYXRlKCkpCiAgICAgICAgICwgbV9pbnNwZWN0b3JDbGll
bnQoaW5zcGVjdG9yQ2xpZW50KQogICAgICAgICAsIG1fY29ubmVjdGlvbklEKGNvbm5lY3Rpb25J
RCkKICAgICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQpAQCAtNzgsNyArNzgsNyBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICAvLyBNQVJLOiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eUNsaWVudCBtZXRob2RzCisgICAgLy8gTUFSSzogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNs
aWVudCBtZXRob2RzCiAKICAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCiAgICAgewpAQCAtOTUsMTMgKzk1LDEzIEBAIHB1YmxpYzoKICAgICAgICAg
bV9pbnNwZWN0b3JDbGllbnQuY2xvc2VGcm9tRnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFy
Z2V0SUQpOwogICAgIH0KIAotICAgIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IGNv
bmZpZ3VyYXRpb25Gb3JSZW1vdGVJbnNwZWN0b3IoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkmKSBv
dmVycmlkZQorICAgIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRp
b25Gb3JSZW1vdGVJbnNwZWN0b3IoUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSYpIG92ZXJyaWRl
CiAgICAgewogICAgICAgICByZXR1cm4gQVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uOjpjcmVh
dGUoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5
PiBtX3Byb3h5OworICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5PiBtX3Byb3h5Owog
ICAgIFJlbW90ZUluc3BlY3RvckNsaWVudCYgbV9pbnNwZWN0b3JDbGllbnQ7CiAgICAgdWludDY0
X3QgbV9jb25uZWN0aW9uSUQ7CiAgICAgdWludDY0X3QgbV90YXJnZXRJRDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5z
cGVjdG9yQ2xpZW50LmgKaW5kZXggMzI0MzE2ZDVkZWFhNWM2YmI0YzMzMDViYjVjODI5NmQzYWRh
NGYxZS4uYjk0N2YxOTFjNDQ0NWIxMjdlNzliNDU2MTU0Yjg0NTljNTlhYWFhZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9y
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVt
b3RlSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudDsKIGNsYXNzIFJlbW90ZUluc3BlY3RvclBy
b3h5OwotY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk7CitjbGFzcyBSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5OwogCiBjbGFzcyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciB7CiBwdWJsaWM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzZGVlMGUzYWQ1MzA4NGVjNmQxNWJmZmYzZThiYTkzMDBlYjJhY2RhLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlHdGsuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKLQotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbmNsdWRl
ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5o
IgotI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYlBh
Z2VHcm91cC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZVdpbmRvd1RpdGxlKGNvbnN0IENTdHJpbmcm
IHRhcmdldE5hbWUpCi17Ci0gICAgaWYgKCFtX3dpbmRvdykKLSAgICAgICAgcmV0dXJuOwotICAg
IHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1YnRpdGxlKFdFQktJVF9JTlNQRUNUT1JfV0lORE9X
KG1fd2luZG93KSwgIXRhcmdldE5hbWUuaXNOdWxsKCkgPyB0YXJnZXROYW1lLmRhdGEoKSA6IG51
bGxwdHIpOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdGVJbnNwZWN0b3JWaWV3RGVzdHJveWVkKFJl
bW90ZVdlYkluc3BlY3RvclByb3h5KiBpbnNwZWN0b3JQcm94eSkKLXsKLSAgICBpbnNwZWN0b3JQ
cm94eS0+Y2xvc2VGcm9tQ3Jhc2goKTsKLX0KLQotV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAg
IEFTU0VSVCghbV93ZWJWaWV3KTsKLQotICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJl
bmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKLSNpZiBFTkFC
TEUoREVWRUxPUEVSX01PREUpCi0gICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRo
ZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdz
LgotICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwotICAg
IHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0
cnVlKTsKLSNlbmRpZgotICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUo
V2ViS2l0OjpkZWZhdWx0SW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UobnVsbHB0
cikpOwotCi0gICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRp
b246OmNyZWF0ZSgpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmV2Vi
S2l0OjpkZWZhdWx0SW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKG51
bGxwdHIpKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVu
Y2VzLnB0cigpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91
cC5wdHIoKSk7Ci0gICAgbV93ZWJWaWV3ID0gR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZUNy
ZWF0ZSgqcGFnZUNvbmZpZ3VyYXRpb24ucHRyKCkpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV93ZWJWaWV3LCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0socmVtb3RlSW5zcGVjdG9yVmll
d0Rlc3Ryb3llZCksIHRoaXMpOwotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpF
Q1QobV93ZWJWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dlYlZpZXcpKTsKLQot
ICAgIG1fd2luZG93ID0gd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KCk7Ci0jaWYgVVNFKEdUSzQp
Ci0gICAgZ3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyhtX3dpbmRvdyksIG1fd2ViVmll
dyk7Ci0jZWxzZQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV93aW5kb3cp
LCBtX3dlYlZpZXcpOwotICAgIGd0a193aWRnZXRfc2hvdyhtX3dlYlZpZXcpOwotI2VuZGlmCi0K
LSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1fd2luZG93KSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZtX3dpbmRvdykpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChH
VEtfV0lORE9XKG1fd2luZG93KSk7Ci0KLSAgICByZXR1cm4gd2Via2l0V2ViVmlld0Jhc2VHZXRQ
YWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG1fd2ViVmlldykpOwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsK
LSAgICBpZiAobV93ZWJWaWV3KSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJQYWdlID0gd2Via2l0
V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG1fd2ViVmlldykpKQotICAg
ICAgICAgICAgd2ViUGFnZS0+Y2xvc2UoKTsKLSAgICB9Ci0gICAgaWYgKG1fd2luZG93KQotICAg
ICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV93aW5kb3cpOwotfQotCi12b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQotewotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgaWYgKG1fd2lu
ZG93KQotICAgICAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhtX3dpbmRvdykpOwot
fQotCi1zdGF0aWMgdm9pZCByZW1vdGVGaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2soR09iamVj
dCogc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEp
Ci17Ci0gICAgR0ZpbGUqIGZpbGUgPSBHX0ZJTEUoc291cmNlT2JqZWN0KTsKLSAgICBpZiAoIWdf
ZmlsZV9yZXBsYWNlX2NvbnRlbnRzX2ZpbmlzaChmaWxlLCByZXN1bHQsIG51bGxwdHIsIG51bGxw
dHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBwYWdlID0gc3RhdGljX2Nhc3Q8V2Vi
UGFnZVByb3h5Kj4odXNlckRhdGEpOwotICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVf
Z2V0X3BhdGgoZmlsZSkpOwotICAgIHBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJOjpEaWRTYXZlKHBhdGguZ2V0KCkpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGZvcmNlU2F2ZURpYWxvZyk7Ci0KLSAgICBHUmVmUHRyPEd0
a0ZpbGVDaG9vc2VyTmF0aXZlPiBkaWFsb2cgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9u
YXRpdmVfbmV3KCJTYXZlIEZpbGUiLAotICAgICAgICBHVEtfV0lORE9XKG1fd2luZG93KSwgR1RL
X0ZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwgIlNhdmUiLCAiQ2FuY2VsIikpOwotCi0gICAgR3Rr
RmlsZUNob29zZXIqIGNob29zZXIgPSBHVEtfRklMRV9DSE9PU0VSKGRpYWxvZy5nZXQoKSk7Ci0j
aWYgIVVTRShHVEs0KQotICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2RvX292ZXJ3cml0ZV9jb25m
aXJtYXRpb24oY2hvb3NlciwgVFJVRSk7Ci0jZW5kaWYKLQotICAgIC8vIFNvbWUgaW5zcGVjdG9y
IHZpZXdzIChBdWRpdHMgZm9yIGluc3RhbmNlKSB1c2UgYSBjdXN0b20gVVJJIHNjaGVtZSwgc3Vj
aAotICAgIC8vIGFzIHdlYi1pbnNwZWN0b3IuIFNvIHdlIGNhbid0IHJlbHkgb24gdGhlIFVSTCBi
ZWluZyBhIHZhbGlkIGZpbGU6Ly8vIFVSTAotICAgIC8vIHVuZm9ydHVuYXRlbHkuCi0gICAgVVJM
IHVybChVUkwoKSwgc3VnZ2VzdGVkVVJMKTsKLSAgICAvLyBTdHJpcCBsZWFkaW5nIC8gY2hhcmFj
dGVyLgotICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZShjaG9vc2VyLCB1cmwu
cGF0aCgpLnN1YnN0cmluZygxKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmIChndGtfbmF0aXZl
X2RpYWxvZ19ydW4oR1RLX05BVElWRV9ESUFMT0coZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JFU1BP
TlNFX0FDQ0VQVCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0
b3I7Ci0gICAgQ1N0cmluZyBkYXRhU3RyaW5nOwotICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0g
ICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlk
YXRlUGFkZGluZykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGFWZWN0b3Iuc2hy
aW5rVG9GaXQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRm
OCgpOwotCi0gICAgY29uc3QgY2hhciogZGF0YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0
YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVjdG9yLmRhdGEoKTsKLSAgICBzaXplX3QgZGF0YUxlbmd0
aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFWZWN0
b3Iuc2l6ZSgpOwotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVf
Y2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdf
ZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7Ci0gICAgZ19maWxlX3JlcGxhY2VfY29udGVudHNf
YXN5bmMoZmlsZS5nZXQoKSwgZGF0YSwgZGF0YUxlbmd0aCwgbnVsbHB0ciwgZmFsc2UsCi0gICAg
ICAgIEdfRklMRV9DUkVBVEVfUkVQTEFDRV9ERVNUSU5BVElPTiwgbnVsbHB0ciwgcmVtb3RlRmls
ZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrLCBtX2luc3BlY3RvclBhZ2UpOwotfQotCi12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmKQotewotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmKQotewotfQotCi12b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OkFwcGVhcmFuY2UpCi17Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKLXsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmKQotewot
fQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0
ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjA5ZGVlNGZkY2UxYzMzZTE4Nzhl
ODI0ZTJjZDM4NmUyNjYwYmU5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAKQEAg
LTAsMCArMSwxODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHkuaCIKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAi
UmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJ
UHJveHkuaCIKKyNpbmNsdWRlICJXZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCIKKyNpbmNsdWRlICJX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Rr
VmVyc2lvbmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnVwZGF0ZVdpbmRvd1RpdGxlKGNvbnN0IENTdHJpbmcmIHRhcmdldE5hbWUp
Cit7CisgICAgaWYgKCFtX3dpbmRvdykKKyAgICAgICAgcmV0dXJuOworICAgIHdlYmtpdEluc3Bl
Y3RvcldpbmRvd1NldFN1YnRpdGxlKFdFQktJVF9JTlNQRUNUT1JfV0lORE9XKG1fd2luZG93KSwg
IXRhcmdldE5hbWUuaXNOdWxsKCkgPyB0YXJnZXROYW1lLmRhdGEoKSA6IG51bGxwdHIpOworfQor
CitzdGF0aWMgdm9pZCByZW1vdGVJbnNwZWN0b3JWaWV3RGVzdHJveWVkKFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHkqIGluc3BlY3RvclByb3h5KQoreworICAgIGluc3BlY3RvclByb3h5LT5jbG9z
ZUZyb21DcmFzaCgpOworfQorCitXZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBBU1NFUlQo
IW1fd2ViVmlldyk7CisKKyAgICBhdXRvIHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNy
ZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7CisjaWYgRU5BQkxFKERFVkVM
T1BFUl9NT0RFKQorICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIElu
c3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KKyAgICBw
cmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKKyAgICBwcmVmZXJl
bmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7Cisj
ZW5kaWYKKyAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKFdlYktpdDo6
ZGVmYXVsdEluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKG51bGxwdHIpKTsKKwor
ICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVh
dGUoKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJldlYktpdDo6ZGVm
YXVsdEluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3RvckxldmVsRm9yUGFnZShudWxscHRyKSkp
OworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5wdHIo
KSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cChwYWdlR3JvdXAucHRyKCkp
OworICAgIG1fd2ViVmlldyA9IEdUS19XSURHRVQod2Via2l0V2ViVmlld0Jhc2VDcmVhdGUoKnBh
Z2VDb25maWd1cmF0aW9uLnB0cigpKSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1f
d2ViVmlldywgImRlc3Ryb3kiLCBHX0NBTExCQUNLKHJlbW90ZUluc3BlY3RvclZpZXdEZXN0cm95
ZWQpLCB0aGlzKTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1fd2Vi
VmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93ZWJWaWV3KSk7CisKKyAgICBtX3dp
bmRvdyA9IHdlYmtpdEluc3BlY3RvcldpbmRvd05ldygpOworI2lmIFVTRShHVEs0KQorICAgIGd0
a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cobV93aW5kb3cpLCBtX3dlYlZpZXcpOworI2Vs
c2UKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fd2luZG93KSwgbV93ZWJW
aWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV93ZWJWaWV3KTsKKyNlbmRpZgorCisgICAgZ19v
YmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX3dpbmRvdyksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPigmbV93aW5kb3cpKTsKKyAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRP
VyhtX3dpbmRvdykpOworCisgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJL
SVRfV0VCX1ZJRVdfQkFTRShtX3dlYlZpZXcpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBp
ZiAobV93ZWJWaWV3KSB7CisgICAgICAgIGlmIChhdXRvKiB3ZWJQYWdlID0gd2Via2l0V2ViVmll
d0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG1fd2ViVmlldykpKQorICAgICAgICAg
ICAgd2ViUGFnZS0+Y2xvc2UoKTsKKyAgICB9CisgICAgaWYgKG1fd2luZG93KQorICAgICAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3kobV93aW5kb3cpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCit7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIGlmIChtX3dpbmRv
dykKKyAgICAgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1cobV93aW5kb3cpKTsKK30K
Kworc3RhdGljIHZvaWQgcmVtb3RlRmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrKEdPYmplY3Qq
IHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQor
eworICAgIEdGaWxlKiBmaWxlID0gR19GSUxFKHNvdXJjZU9iamVjdCk7CisgICAgaWYgKCFnX2Zp
bGVfcmVwbGFjZV9jb250ZW50c19maW5pc2goZmlsZSwgcmVzdWx0LCBudWxscHRyLCBudWxscHRy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogcGFnZSA9IHN0YXRpY19jYXN0PFdlYlBh
Z2VQcm94eSo+KHVzZXJEYXRhKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dl
dF9wYXRoKGZpbGUpKTsKKyAgICBwYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6RGlkU2F2ZShwYXRoLmdldCgpKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGZvcmNlU2F2ZURpYWxvZyk7CisKKyAgICBHUmVmUHRyPEd0
a0ZpbGVDaG9vc2VyTmF0aXZlPiBkaWFsb2cgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9u
YXRpdmVfbmV3KCJTYXZlIEZpbGUiLAorICAgICAgICBHVEtfV0lORE9XKG1fd2luZG93KSwgR1RL
X0ZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwgIlNhdmUiLCAiQ2FuY2VsIikpOworCisgICAgR3Rr
RmlsZUNob29zZXIqIGNob29zZXIgPSBHVEtfRklMRV9DSE9PU0VSKGRpYWxvZy5nZXQoKSk7Cisj
aWYgIVVTRShHVEs0KQorICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2RvX292ZXJ3cml0ZV9jb25m
aXJtYXRpb24oY2hvb3NlciwgVFJVRSk7CisjZW5kaWYKKworICAgIC8vIFNvbWUgaW5zcGVjdG9y
IHZpZXdzIChBdWRpdHMgZm9yIGluc3RhbmNlKSB1c2UgYSBjdXN0b20gVVJJIHNjaGVtZSwgc3Vj
aAorICAgIC8vIGFzIHdlYi1pbnNwZWN0b3IuIFNvIHdlIGNhbid0IHJlbHkgb24gdGhlIFVSTCBi
ZWluZyBhIHZhbGlkIGZpbGU6Ly8vIFVSTAorICAgIC8vIHVuZm9ydHVuYXRlbHkuCisgICAgVVJM
IHVybChVUkwoKSwgc3VnZ2VzdGVkVVJMKTsKKyAgICAvLyBTdHJpcCBsZWFkaW5nIC8gY2hhcmFj
dGVyLgorICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZShjaG9vc2VyLCB1cmwu
cGF0aCgpLnN1YnN0cmluZygxKS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmIChndGtfbmF0aXZl
X2RpYWxvZ19ydW4oR1RLX05BVElWRV9ESUFMT0coZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JFU1BP
TlNFX0FDQ0VQVCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0
b3I7CisgICAgQ1N0cmluZyBkYXRhU3RyaW5nOworICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Cisg
ICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlk
YXRlUGFkZGluZykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRhdGFWZWN0b3Iuc2hy
aW5rVG9GaXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRm
OCgpOworCisgICAgY29uc3QgY2hhciogZGF0YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0
YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVjdG9yLmRhdGEoKTsKKyAgICBzaXplX3QgZGF0YUxlbmd0
aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFWZWN0
b3Iuc2l6ZSgpOworICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVf
Y2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdf
ZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7CisgICAgZ19maWxlX3JlcGxhY2VfY29udGVudHNf
YXN5bmMoZmlsZS5nZXQoKSwgZGF0YSwgZGF0YUxlbmd0aCwgbnVsbHB0ciwgZmFsc2UsCisgICAg
ICAgIEdfRklMRV9DUkVBVEVfUkVQTEFDRV9ERVNUSU5BVElPTiwgbnVsbHB0ciwgcmVtb3RlRmls
ZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrLCBtX2luc3BlY3RvclBhZ2UpOworfQorCit2b2lkIFJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JikKK3sKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UpCit7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQoreworfQorCit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtT3BlblVSTEV4dGVybmFsbHkoY29uc3QgU3Ry
aW5nJikKK3sKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mKQoreworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQ
cm94eUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJ
bnNwZWN0b3JQcm94eUNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTlj
NDQ2NTc2ODhhMjhhYmFlN2FhMTAxYWIyMjY3N2JkODExM2FlLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkluc3BlY3RvclByb3h5OwotCi1jbGFzcyBXZWJJ
bnNwZWN0b3JQcm94eUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViSW5zcGVjdG9y
UHJveHlDbGllbnQoKSA9IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCBib29sIG9wZW5XaW5kb3coV2Vi
SW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKFdlYkluc3Bl
Y3RvclByb3h5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQoV2ViSW5zcGVj
dG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoV2Vi
SW5zcGVjdG9yUHJveHkmLCBjb25zdCBTdHJpbmcmIHVybCkgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBhdHRhY2goV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRldGFj
aChXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQXR0
YWNoZWRIZWlnaHQoV2ViSW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCBoZWlnaHQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aChXZWJJbnNwZWN0b3JQcm94eSYs
IHVuc2lnbmVkIHdpZHRoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaEF2
YWlsYWJpbGl0eShXZWJJbnNwZWN0b3JQcm94eSYsIGJvb2wgYXZhaWxhYmxlKSA9IDA7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMmRhNjQzYTMzYWVhZDlmMWI5ODQxZDNlNmRhMGYx
MWVkMWVjM2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5
cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+LgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2lu
Y2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgi
Ci0jaW5jbHVkZSAiV0tBcnJheS5oIgotI2luY2x1ZGUgIldLQ29udGV4dE1lbnVJdGVtLmgiCi0j
aW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKLSNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3Rl
bmVyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIgotI2luY2x1
ZGUgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJLaXRJbnNwZWN0b3JX
aW5kb3cuaCIKLSNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKLSNpbmNsdWRl
ICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1ZGUg
IldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3RrVXRp
bGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5nLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyB2
b2lkIGluc3BlY3RvclZpZXdEZXN0cm95ZWQoR3RrV2lkZ2V0KiwgZ3BvaW50ZXIgdXNlckRhdGEp
Ci17Ci0gICAgV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8
V2ViSW5zcGVjdG9yUHJveHkqPih1c2VyRGF0YSk7Ci0KLSAgICAvLyBJbmZvcm0gV2ViUHJvY2Vz
cyBhYm91dCB3ZWJpbnNwZWN0b3IgY2xvc3VyZS4gTm90IGRvaW5nIHNvLAotICAgIC8vIHJlc3Vs
dHMgaW4gZmFpbHVyZSBvZiBzdWJzZXF1ZW50IGludm9jYXRpb24gb2Ygd2ViaW5zcGVjdG9yLgot
ICAgIGluc3BlY3RvclByb3h5LT5jbG9zZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiYmIGNs
aWVudCkKLXsKLSAgICBtX2NsaWVudCA9IFdURk1vdmUoY2xpZW50KTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAotewotICAg
IEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0
U3VidGl0bGUoV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpLCAhbV9p
bnNwZWN0ZWRVUkxTdHJpbmcuaXNFbXB0eSgpID8gbV9pbnNwZWN0ZWRVUkxTdHJpbmcudXRmOCgp
LmRhdGEoKSA6IG51bGxwdHIpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV4Y2Vl
ZGVkRGF0YWJhc2VRdW90YShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLU2VjdXJpdHlPcmlnaW5S
ZWYsIFdLU3RyaW5nUmVmLCBXS1N0cmluZ1JlZiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25l
ZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5z
aWduZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNhZ2UsIGNvbnN0IHZvaWQqKQotewotICAgIHJldHVy
biBzdGQ6Om1heDx1bnNpZ25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnREYXRh
YmFzZVVzYWdlICogMS4yNSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYlByb2Nlc3NEaWRDcmFzaChX
S1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2ViSW5zcGVjdG9yUHJv
eHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPihj
b25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Ci0gICAgQVNTRVJUKHdlYkluc3BlY3RvclBy
b3h5KTsKLSAgICB3ZWJJbnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgpOwotfQotCi1zdGF0
aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFnZVJlZiBwYWdlUmVm
LCBXS05hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZiwgV0tGcmFtZVBvbGlj
eUxpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCi17Ci0gICAgLy8gQWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJl
LgotICAgIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFtZSA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0
aW9uUmVmKS0+c291cmNlRnJhbWUoKTsKLSAgICBpZiAoc291cmNlRnJhbWUgJiYgIXNvdXJjZUZy
YW1lLT5pc01haW5GcmFtZSgpKSB7Ci0gICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29uc3QgV2ViSW5zcGVjdG9yUHJv
eHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViSW5zcGVjdG9yUHJv
eHkqPihjbGllbnRJbmZvKTsKLSAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOwotCi0gICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlv
blJlZiktPnJlcXVlc3QoKTsKLQotICAgIC8vIEFsbG93IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5z
cGVjdG9yIGZpbGUuCi0gICAgaWYgKFdlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNw
ZWN0b3JQYWdlKHJlcXVlc3QudXJsKCkpKSB7Ci0gICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZikt
PnVzZSh7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUHJldmVudCBldmVy
eXRoaW5nIGVsc2UgZnJvbSBsb2FkaW5nIGluIHRoZSBpbnNwZWN0b3IncyBwYWdlLgotICAgIHRv
SW1wbChsaXN0ZW5lclJlZiktPmlnbm9yZSgpOwotCi0gICAgLy8gQW5kIGluc3RlYWQgbG9hZCBp
dCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCi0gICAgd2ViSW5zcGVjdG9yUHJveHktPmluc3BlY3Rl
ZFBhZ2UoKS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tBcnJh
eVJlZiBwcm9wb3NlZE1lbnVSZWYsIFdLQXJyYXlSZWYqIG5ld01lbnVSZWYsIFdLSGl0VGVzdFJl
c3VsdFJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKikKLXsKLSAgICBXS011dGFibGVBcnJheVJl
ZiBtZW51SXRlbXMgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOwotCi0gICAgc2l6ZV90IGNvdW50
ID0gV0tBcnJheUdldFNpemUocHJvcG9zZWRNZW51UmVmKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgV0tDb250ZXh0TWVudUl0ZW1SZWYgY29udGV4
dE1lbnVJdGVtID0gc3RhdGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJ
dGVtQXRJbmRleChwcm9wb3NlZE1lbnVSZWYsIGkpKTsKLSAgICAgICAgc3dpdGNoIChXS0NvbnRl
eHRNZW51SXRlbUdldFRhZyhjb250ZXh0TWVudUl0ZW0pKSB7Ci0gICAgICAgIGNhc2Uga1dLQ29u
dGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250
ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250
ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250
ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250
ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4
dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVudUl0ZW1zLCBj
b250ZXh0TWVudUl0ZW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAqbmV3TWVudVJlZiA9IG1lbnVJdGVtczsKLX0KLQotc3RhdGljIFJlZjxXZWJzaXRlRGF0
YVN0b3JlPiBpbnNwZWN0b3JXZWJzaXRlRGF0YVN0b3JlKCkKLXsKLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogdmVyc2lvbmVkRGlyZWN0b3J5ID0gIndlYmtpdGd0ay0iIFdFQktJVEdUS19BUElfVkVS
U0lPTl9TVFJJTkcgR19ESVJfU0VQQVJBVE9SX1MgIldlYkluc3BlY3RvciIgR19ESVJfU0VQQVJB
VE9SX1M7Ci0gICAgU3RyaW5nIGJhc2VDYWNoZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChGaWxlU3lzdGVtOjpzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKGdfZ2V0X3VzZXJfY2FjaGVfZGlyKCkpLCB2ZXJzaW9uZWREaXJlY3RvcnkpOwot
ICAgIFN0cmluZyBiYXNlRGF0YURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChGaWxlU3lzdGVtOjpzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSksIHZlcnNpb25lZERpcmVjdG9yeSk7Ci0KLSAgICBhdXRv
IGNvbmZpZ3VyYXRpb24gPSBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKElz
UGVyc2lzdGVudDo6WWVzLCBXaWxsQ29weVBhdGhzRnJvbUV4aXN0aW5nQ29uZmlndXJhdGlvbjo6
WWVzKTsKLSAgICBjb25maWd1cmF0aW9uLT5zZXROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoRmlsZVN5
c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VDYWNoZURpcmVjdG9yeSwgIldlYktp
dENhY2hlIikpOwotICAgIGNvbmZpZ3VyYXRpb24tPnNldEFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rv
cnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VDYWNoZURpcmVjdG9y
eSwgImFwcGxpY2F0aW9ucyIpKTsKLSAgICBjb25maWd1cmF0aW9uLT5zZXRIU1RTU3RvcmFnZURp
cmVjdG9yeShTdHJpbmcoYmFzZUNhY2hlRGlyZWN0b3J5KSk7Ci0gICAgY29uZmlndXJhdGlvbi0+
c2V0Q2FjaGVTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChiYXNlQ2FjaGVEaXJlY3RvcnksICJDYWNoZVN0b3JhZ2UiKSk7Ci0gICAgY29uZmlndXJh
dGlvbi0+c2V0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChiYXNlRGF0YURpcmVjdG9yeSwgImxvY2Fsc3RvcmFnZSIpKTsKLSAgICBjb25m
aWd1cmF0aW9uLT5zZXRJbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZURhdGFEaXJlY3RvcnksICJpbmRleGVkZGIiKSk7Ci0g
ICAgY29uZmlndXJhdGlvbi0+c2V0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoRmlsZVN5c3RlbTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRhRGlyZWN0b3J5LCAiZGF0YWJhc2VzIikp
OwotICAgIGNvbmZpZ3VyYXRpb24tPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnko
RmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRhRGlyZWN0b3J5LCAi
aXRwIikpOwotICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25E
aXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRhRGly
ZWN0b3J5LCAic2VydmljZXdvcmtlcnMiKSk7Ci0gICAgY29uZmlndXJhdGlvbi0+c2V0RGV2aWNl
SWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChiYXNlRGF0YURpcmVjdG9yeSwgImRldmljZWlkaGFzaHNhbHRzIikpOwotICAgIHJl
dHVybiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShjb25maWd1cmF0aW9uKSwgUEFM
OjpTZXNzaW9uSUQ6OmdlbmVyYXRlUGVyc2lzdGVudFNlc3Npb25JRCgpKTsKLX0KLQotV2ViUGFn
ZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQot
ewotICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOwotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JW
aWV3KTsKLQotICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0
cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKLSNpZiBFTkFCTEUoREVWRUxPUEVSX01P
REUpCi0gICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9y
IGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgotICAgIHByZWZlcmVu
Y2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwotICAgIHByZWZlcmVuY2VzLT5z
ZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgot
ICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKHRydWUpOwot
ICAgIHByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKHsKLSAgICB9KTsKLSAg
ICBpZiAobV91bmRlclRlc3QpCi0gICAgICAgIHByZWZlcmVuY2VzLT5zZXRIaWRkZW5QYWdlRE9N
VGltZXJUaHJvdHRsaW5nRW5hYmxlZChmYWxzZSk7Ci0gICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQ
YWdlR3JvdXA6OmNyZWF0ZShXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlm
aWVyRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpKTsKLSAgICBhdXRvIHdlYnNpdGVEYXRhU3RvcmUg
PSBpbnNwZWN0b3JXZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgYXV0byYgcHJvY2Vzc1Bvb2wgPSBX
ZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0aW9uTGV2ZWwoKSk7Ci0K
LSAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3Jl
YXRlKCk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZwcm9jZXNzUG9v
bCk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0
cigpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIo
KSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFdlYnNpdGVEYXRhU3RvcmUod2Vic2l0ZURh
dGFTdG9yZS5wdHIoKSk7Ci0gICAgbV9pbnNwZWN0b3JWaWV3ID0gR1RLX1dJREdFVCh3ZWJraXRX
ZWJWaWV3QmFzZUNyZWF0ZSgqcGFnZUNvbmZpZ3VyYXRpb24ucHRyKCkpKTsKLSAgICBnX29iamVj
dF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1faW5zcGVjdG9yVmlldyksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmbV9pbnNwZWN0b3JWaWV3KSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCht
X2luc3BlY3RvclZpZXcsICJkZXN0cm95IiwgR19DQUxMQkFDSyhpbnNwZWN0b3JWaWV3RGVzdHJv
eWVkKSwgdGhpcyk7Ci0KLSAgICBXS1BhZ2VVSUNsaWVudFYyIHVpQ2xpZW50ID0gewotICAgICAg
ICB7IDIsIHRoaXMgfSwKLSAgICAgICAgbnVsbHB0ciwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNh
dGVkRm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxwdHIsIC8vIHNob3dQYWdlCi0gICAgICAgIG51
bGxwdHIsIC8vIGNsb3NlUGFnZQotICAgICAgICBudWxscHRyLCAvLyB0YWtlRm9jdXMKLSAgICAg
ICAgbnVsbHB0ciwgLy8gZm9jdXMKLSAgICAgICAgbnVsbHB0ciwgLy8gdW5mb2N1cwotICAgICAg
ICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0QWxlcnQKLSAgICAgICAgbnVsbHB0ciwgLy8gcnVu
SmF2YVNjcmlwdENvbmZpcm0KLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdFByb21w
dAotICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0dXNUZXh0Ci0gICAgICAgIG51bGxwdHIsIC8v
IG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKLSAgICAgICAg
bnVsbHB0ciwgLy8gbWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdp
dGhWMAotICAgICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5kbGVLZXlFdmVudAotICAgICAgICBu
dWxscHRyLCAvLyBkaWROb3RIYW5kbGVXaGVlbEV2ZW50Ci0gICAgICAgIG51bGxwdHIsIC8vIGFy
ZVRvb2xiYXJzVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRUb29sYmFyc1Zpc2libGUK
LSAgICAgICAgbnVsbHB0ciwgLy8gaXNNZW51QmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAv
LyBzZXRNZW51QmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBpc1N0YXR1c0JhclZpc2li
bGUKLSAgICAgICAgbnVsbHB0ciwgLy8gc2V0U3RhdHVzQmFyVmlzaWJsZQotICAgICAgICBudWxs
cHRyLCAvLyBpc1Jlc2l6YWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRSZXNpemFibGUKLSAg
ICAgICAgbnVsbHB0ciwgLy8gZ2V0V2luZG93RnJhbWUsCi0gICAgICAgIG51bGxwdHIsIC8vIHNl
dFdpbmRvd0ZyYW1lLAotICAgICAgICBudWxscHRyLCAvLyBydW5CZWZvcmVVbmxvYWRDb25maXJt
UGFuZWwKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRHJhdwotICAgICAgICBudWxscHRyLCAvLyBw
YWdlRGlkU2Nyb2xsCi0gICAgICAgIGV4Y2VlZGVkRGF0YWJhc2VRdW90YSwKLSAgICAgICAgbnVs
bHB0ciwgLy8gcnVuT3BlblBhbmVsLAotICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lG
b3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Ci0gICAgICAgIG51bGxwdHIsIC8vIGhlYWRl
ckhlaWdodAotICAgICAgICBudWxscHRyLCAvLyBmb290ZXJIZWlnaHQKLSAgICAgICAgbnVsbHB0
ciwgLy8gZHJhd0hlYWRlcgotICAgICAgICBudWxscHRyLCAvLyBkcmF3Rm9vdGVyCi0gICAgICAg
IG51bGxwdHIsIC8vIHByaW50RnJhbWUKLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuTW9kYWwKLSAg
ICAgICAgbnVsbHB0ciwgLy8gdW51c2VkCi0gICAgICAgIG51bGxwdHIsIC8vIHNhdmVEYXRhVG9G
aWxlSW5Eb3dubG9hZHNGb2xkZXIKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvdWxkSW50ZXJydXB0
SmF2YVNjcmlwdAotICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVQYWdlCi0gICAgICAgIG51bGxw
dHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50Ci0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lk
ZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Ci0gICAgICAgIG51bGxwdHIs
IC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYx
Ci0gICAgICAgIG51bGxwdHIsIC8vIHNob3dDb2xvclBpY2tlcgotICAgICAgICBudWxscHRyLCAv
LyBoaWRlQ29sb3JQaWNrZXIKLSAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5C
dXR0b25DbGlja2VkCi0gICAgfTsKLQotICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZp
Z2F0aW9uQ2xpZW50ID0gewotICAgICAgICB7IDAsIHRoaXMgfSwKLSAgICAgICAgZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvblJlc3BvbnNlCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZv
clBsdWdpbkxvYWQKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmln
YXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25h
bE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdhdGlvbgotICAg
ICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8v
IGRpZEZhaWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25h
bExvYWRJblN1YmZyYW1lCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9h
ZAotICAgICAgICBudWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uCi0gICAgICAg
IG51bGxwdHIsIC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCi0gICAgICAgIG51bGxwdHIs
IC8vIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKLSAgICAgICAgbnVsbHB0
ciwgLy8gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi0gICAgICAgIHdlYlByb2Nl
c3NEaWRDcmFzaCwKLSAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0b01hc3RlcktleQot
Ci0gICAgICAgIG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAg
bnVsbHB0ciwgLy8gd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8v
IGRpZEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5h
dmlnYXRpb25HZXN0dXJlU25hcHNob3QKLSAgICB9OwotCi0gICAgV0tQYWdlQ29udGV4dE1lbnVD
bGllbnRWMyBjb250ZXh0TWVudUNsaWVudCA9IHsKLSAgICAgICAgeyAzLCB0aGlzIH0sCi0gICAg
ICAgIG51bGxwdHIsIC8vIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudV9kZXByZWNhdGVk
Rm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxwdHIsIC8vIGN1c3RvbUNvbnRleHRNZW51SXRlbVNl
bGVjdGVkCi0gICAgICAgIG51bGxwdHIsIC8vIGNvbnRleHRNZW51RGlzbWlzc2VkCi0gICAgICAg
IGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudSwKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hv
d0NvbnRleHRNZW51Ci0gICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb250ZXh0TWVudQotICAgIH07
Ci0KLSAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdl
dFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV9pbnNwZWN0b3JWaWV3KSk7Ci0gICAgQVNTRVJU
KGluc3BlY3RvclBhZ2UpOwotCi0gICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KHRvQVBJKGluc3Bl
Y3RvclBhZ2UpLCAmdWlDbGllbnQuYmFzZSk7Ci0gICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25D
bGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOwotICAg
IFdLUGFnZVNldFBhZ2VDb250ZXh0TWVudUNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJmNv
bnRleHRNZW51Q2xpZW50LmJhc2UpOwotCi0gICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQot
ewotICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+b3BlbldpbmRvdygqdGhpcykpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JXaW5kb3cpOwotICAgIG1faW5z
cGVjdG9yV2luZG93ID0gd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KCk7Ci0jaWYgVVNFKEdUSzQp
Ci0gICAgZ3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyhtX2luc3BlY3RvcldpbmRvdyks
IG1faW5zcGVjdG9yVmlldyk7Ci0jZWxzZQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05U
QUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOwotICAgIGd0a193aWRn
ZXRfc2hvdyhtX2luc3BlY3RvclZpZXcpOwotI2VuZGlmCi0KLSAgICBpZiAoIW1faW5zcGVjdGVk
VVJMU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUo
KTsKLQotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JX
aW5kb3cpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1faW5zcGVjdG9yV2luZG93KSk7Ci0g
ICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yVmlldykgewotICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCByZWludGVycHJldF9j
YXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7Ci0gICAgICAgIG1faW5z
cGVjdG9yVmlldyA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAg
ICBtX2NsaWVudC0+ZGlkQ2xvc2UoKnRoaXMpOwotCi0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93
KSB7Ci0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAg
ICAgIG1faW5zcGVjdG9yV2luZG93ID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKLXsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQotewotICAgIGlm
IChtX2lzT3BlbmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2xpZW50ICYmIG1f
Y2xpZW50LT5icmluZ1RvRnJvbnQoKnRoaXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHdGtX
aWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7
Ci0gICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQp
KQotICAgICAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhwYXJlbnQpKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUlzRnJvbnQoKQotewotICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdl
dF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0
SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCi0gICAgICAgIHJldHVybiBtX2lzVmlz
aWJsZSAmJiBndGtfd2luZG93X2lzX2FjdGl2ZShHVEtfV0lORE9XKHBhcmVudCkpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRGb3Jj
ZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNl
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBt
X2luc3BlY3RlZFVSTFN0cmluZyA9IHVybDsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1f
Y2xpZW50LT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKCp0aGlzLCB1cmwpOwotCi0gICAgaWYgKG1faW5z
cGVjdG9yV2luZG93KQotICAgICAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17Ci0gICAgcmV0
dXJuICJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlL01haW4u
aHRtbCJfczsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFn
ZVVSTCgpCi17Ci0gICAgcmV0dXJuICJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9V
c2VySW50ZXJmYWNlL1Rlc3QuaHRtbCJfczsKLX0KLQotRGVidWdnYWJsZUluZm9EYXRhIFdlYklu
c3BlY3RvclByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKLXsKLSAgICAvLyBGSVhNRSA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM2PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2Vm
dWwgZGF0YSBhYm91dCB0aGUgZGVidWcgdGFyZ2V0LgotICAgIGF1dG8gZGF0YSA9IERlYnVnZ2Fi
bGVJbmZvRGF0YTo6ZW1wdHkoKTsKLSAgICBkYXRhLmRlYnVnZ2FibGVUeXBlID0gSW5zcGVjdG9y
OjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsKLSAgICByZXR1cm4gZGF0YTsKLX0KLQotdW5zaWdu
ZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKLXsK
LSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX2hlaWdodChpbnNwZWN0ZWRQYWdl
KCktPnZpZXdXaWRnZXQoKSk7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRf
YWxsb2NhdGVkX3dpZHRoKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIEdSZWZQdHI8R3Rr
V2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JWaWV3OwotICAgIGlmIChtX2luc3Bl
Y3RvcldpbmRvdykgewotI2lmIFVTRShHVEs0KQotICAgICAgICBndGtfd2luZG93X3NldF9jaGls
ZChHVEtfV0lORE9XKG1faW5zcGVjdG9yV2luZG93KSwgbnVsbHB0cik7Ci0jZWxzZQotICAgICAg
ICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwg
bV9pbnNwZWN0b3JWaWV3KTsKLSNlbmRpZgotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9p
bnNwZWN0b3JXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgLy8gU2V0IGEgZGVmYXVsdCBzaXplcyBiYXNlZCBvbiBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNo
ZWRTaXplID0gMzAwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRX
aWR0aCA9IDc1MDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkSGVp
Z2h0ID0gMjUwOwotCi0gICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6
OkJvdHRvbSkgewotICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6
Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9y
bUluc3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1TZXRBdHRh
Y2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihk
ZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPmF0dGFjaCgqdGhpcykpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkV2ViSW5zcGVjdG9yKFdFQktJVF9XRUJfVklF
V19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgbV9pbnNwZWN0b3JWaWV3LCBt
X2F0dGFjaG1lbnRTaWRlKTsKLSAgICBndGtfd2lkZ2V0X3Nob3cobV9pbnNwZWN0b3JWaWV3KTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIGlm
ICghaW5zcGVjdGVkUGFnZSgpLT5oYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHUmVmUHRyPEd0a1dpZGdldD4gaW5zcGVjdG9yVmlldyA9IG1faW5zcGVjdG9yVmll
dzsKLSAgICBpZiAoIW1fY2xpZW50IHx8ICFtX2NsaWVudC0+ZGV0YWNoKCp0aGlzKSkgewotICAg
ICAgICAvLyBEZXRhY2ggaXMgY2FsbGVkIHdoZW4gbV9pc0F0dGFjaGVkIGlzIHRydWUsIGJ1dCBp
dCBjb3VsZCBjYWxsZWQgYmVmb3JlCi0gICAgICAgIC8vIHRoZSBpbnNwZWN0b3IgaXMgb3BlbmVk
IGlmIHRoZSBpbnNwZWN0b3IgaXMgc2hvd24vY2xvc2VkIHF1aWNrbHkuIFNvLAotICAgICAgICAv
LyB3ZSBtaWdodCBub3QgaGF2ZSBhIHBhcmVudCB5ZXQuCi0gICAgICAgIGlmIChHdGtXaWRnZXQq
IHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudChtX2luc3BlY3RvclZpZXcpKQotICAgICAg
ICAgICAgd2Via2l0V2ViVmlld0Jhc2VSZW1vdmVXZWJJbnNwZWN0b3IoV0VCS0lUX1dFQl9WSUVX
X0JBU0UocGFyZW50KSwgbV9pbnNwZWN0b3JWaWV3KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4g
ZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0b3Igd2Fz
IGNsb3NlZCB3aGlsZSBhdHRhY2hlZAotICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBh
bmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KLSAgICBpZiAoIW1faXNWaXNpYmxlKSB7Ci0g
ICAgICAgIC8vIFRoZSBpbnNwZWN0b3IgdmlldyB3aWxsIGJlIGRlc3Ryb3llZCwgYnV0IHdlIGRv
bid0IG5lZWQgdG8gbm90aWZ5IHRoZSB3ZWIgcHJvY2VzcyB0byBjbG9zZSB0aGUKLSAgICAgICAg
Ly8gaW5zcGVjdG9yIGluIHRoaXMgY2FzZSwgc2luY2UgaXQncyBhbHJlYWR5IGNsb3NlZC4KLSAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1faW5zcGVjdG9yVmll
dywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMp
OwotICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgb3BlbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBpZiAoIW1f
aXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAg
ICBtX2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQoKnRoaXMsIGhlaWdodCk7Ci0gICAg
d2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFT
RShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIGhlaWdodCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3
aWR0aCkKLXsKLSAgICBpZiAoIW1faXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aCgq
dGhpcywgd2lkdGgpOwotICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5zcGVjdG9yVmlld1NpemUo
V0VCS0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpLCB3aWR0
aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbGVSZXBsYWNlQ29udGVudHND
YWxsYmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9p
bnRlciB1c2VyRGF0YSkKLXsKLSAgICBHRmlsZSogZmlsZSA9IEdfRklMRShzb3VyY2VPYmplY3Qp
OwotICAgIGlmICghZ19maWxlX3JlcGxhY2VfY29udGVudHNfZmluaXNoKGZpbGUsIHJlc3VsdCwg
bnVsbHB0ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHBhZ2UgPSBz
dGF0aWNfY2FzdDxXZWJQYWdlUHJveHkqPih1c2VyRGF0YSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFy
PiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlKSk7Ci0gICAgcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0aC5nZXQoKSkpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0
IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxv
ZykKLXsKLSAgICBVTlVTRURfUEFSQU0oZm9yY2VTYXZlRGlhbG9nKTsKLQotICAgIEd0a1dpZGdl
dCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0b3JWaWV3KTsKLSAg
ICBpZiAoIVdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHUmVmUHRyPEd0a0ZpbGVDaG9vc2VyTmF0aXZlPiBkaWFs
b2cgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9uYXRpdmVfbmV3KCJTYXZlIEZpbGUiLAot
ICAgICAgICBHVEtfV0lORE9XKHBhcmVudCksIEdUS19GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUs
ICJTYXZlIiwgIkNhbmNlbCIpKTsKLQotICAgIEd0a0ZpbGVDaG9vc2VyKiBjaG9vc2VyID0gR1RL
X0ZJTEVfQ0hPT1NFUihkaWFsb2cuZ2V0KCkpOwotI2lmICFVU0UoR1RLNCkKLSAgICBndGtfZmls
ZV9jaG9vc2VyX3NldF9kb19vdmVyd3JpdGVfY29uZmlybWF0aW9uKGNob29zZXIsIFRSVUUpOwot
I2VuZGlmCi0KLSAgICAvLyBTb21lIGluc3BlY3RvciB2aWV3cyAoQXVkaXRzIGZvciBpbnN0YW5j
ZSkgdXNlIGEgY3VzdG9tIFVSSSBzY2hlbWUsIHN1Y2gKLSAgICAvLyBhcyB3ZWItaW5zcGVjdG9y
LiBTbyB3ZSBjYW4ndCByZWx5IG9uIHRoZSBVUkwgYmVpbmcgYSB2YWxpZCBmaWxlOi8vLyBVUkwK
LSAgICAvLyB1bmZvcnR1bmF0ZWx5LgotICAgIFVSTCB1cmwoVVJMKCksIHN1Z2dlc3RlZFVSTCk7
Ci0gICAgLy8gU3RyaXAgbGVhZGluZyAvIGNoYXJhY3Rlci4KLSAgICBndGtfZmlsZV9jaG9vc2Vy
X3NldF9jdXJyZW50X25hbWUoY2hvb3NlciwgdXJsLnBhdGgoKS5zdWJzdHJpbmcoMSkudXRmOCgp
LmRhdGEoKSk7Ci0KLSAgICBpZiAoZ3RrX25hdGl2ZV9kaWFsb2dfcnVuKEdUS19OQVRJVkVfRElB
TE9HKGRpYWxvZy5nZXQoKSkpICE9IEdUS19SRVNQT05TRV9BQ0NFUFQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFZlY3RvcjxjaGFyPiBkYXRhVmVjdG9yOwotICAgIENTdHJpbmcgZGF0YVN0cmlu
ZzsKLSAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShj
b250ZW50LCBkYXRhVmVjdG9yLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBkYXRhVmVjdG9yLnNocmlua1RvRml0KCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGRhdGFTdHJpbmcgPSBjb250ZW50LnV0ZjgoKTsKLQotICAgIGNvbnN0IGNoYXIqIGRh
dGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgpIDogZGF0YVZlY3Rv
ci5kYXRhKCk7Ci0gICAgc2l6ZV90IGRhdGFMZW5ndGggPSAhZGF0YVN0cmluZy5pc051bGwoKSA/
IGRhdGFTdHJpbmcubGVuZ3RoKCkgOiBkYXRhVmVjdG9yLnNpemUoKTsKLSAgICBHUmVmUHRyPEdG
aWxlPiBmaWxlID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGUoY2hvb3Nlcikp
OwotICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkp
OwotICAgIGdfZmlsZV9yZXBsYWNlX2NvbnRlbnRzX2FzeW5jKGZpbGUuZ2V0KCksIGRhdGEsIGRh
dGFMZW5ndGgsIG51bGxwdHIsIGZhbHNlLAotICAgICAgICBHX0ZJTEVfQ1JFQVRFX1JFUExBQ0Vf
REVTVElOQVRJT04sIG51bGxwdHIsIGZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjaywgbV9pbnNw
ZWN0b3JQYWdlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNo
YW5nZWQoYm9vbCBhdmFpbGFibGUpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2Ns
aWVudC0+ZGlkQ2hhbmdlQXR0YWNoQXZhaWxhYmlsaXR5KCp0aGlzLCBhdmFpbGFibGUpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYmE0NDVmYzc2NDcxMTQ4YzQ2ZDE4ZGVjNzY0MjhmODdkODk2ZjJkNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2Vi
SW5zcGVjdG9yVUlQcm94eUNsaWVudC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYkluc3BlY3RvclVJUHJveHk7CisKK2NsYXNzIFdlYkluc3BlY3RvclVJUHJveHlDbGllbnQg
eworcHVibGljOgorICAgIHZpcnR1YWwgfldlYkluc3BlY3RvclVJUHJveHlDbGllbnQoKSA9IGRl
ZmF1bHQ7CisgICAgdmlydHVhbCBib29sIG9wZW5XaW5kb3coV2ViSW5zcGVjdG9yVUlQcm94eSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2UoV2ViSW5zcGVjdG9yVUlQcm94eSYpID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgYnJpbmdUb0Zyb250KFdlYkluc3BlY3RvclVJUHJveHkmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoV2ViSW5zcGVjdG9yVUlQ
cm94eSYsIGNvbnN0IFN0cmluZyYgdXJsKSA9IDA7CisgICAgdmlydHVhbCBib29sIGF0dGFjaChX
ZWJJbnNwZWN0b3JVSVByb3h5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZXRhY2goV2ViSW5z
cGVjdG9yVUlQcm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRI
ZWlnaHQoV2ViSW5zcGVjdG9yVUlQcm94eSYsIHVuc2lnbmVkIGhlaWdodCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hlZFdpZHRoKFdlYkluc3BlY3RvclVJUHJveHkmLCB1
bnNpZ25lZCB3aWR0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hBdmFp
bGFiaWxpdHkoV2ViSW5zcGVjdG9yVUlQcm94eSYsIGJvb2wgYXZhaWxhYmxlKSA9IDA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjUwOWI4OTY3NjA5NjQzNGY3MTJhZWJmNWZmODc2ZDU5NDk5MWI1MjAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYklu
c3BlY3RvclVJUHJveHlHdGsuY3BwCkBAIC0wLDAgKzEsNTY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENv
cHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4uCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCisK
KyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbkFjdGlv
bi5oIgorI2luY2x1ZGUgIldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS0NvbnRleHRNZW51SXRlbS5o
IgorI2luY2x1ZGUgIldLTXV0YWJsZUFycmF5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQb2xpY3lM
aXN0ZW5lclByb3h5LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHlDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRJbnNw
ZWN0b3JXaW5kb3cuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgorI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
R3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5nLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0
YXRpYyB2b2lkIGluc3BlY3RvclZpZXdEZXN0cm95ZWQoR3RrV2lkZ2V0KiwgZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisgICAgV2ViSW5zcGVjdG9yVUlQcm94eSogaW5zcGVjdG9yUHJveHkgPSBzdGF0
aWNfY2FzdDxXZWJJbnNwZWN0b3JVSVByb3h5Kj4odXNlckRhdGEpOworCisgICAgLy8gSW5mb3Jt
IFdlYlByb2Nlc3MgYWJvdXQgd2ViaW5zcGVjdG9yIGNsb3N1cmUuIE5vdCBkb2luZyBzbywKKyAg
ICAvLyByZXN1bHRzIGluIGZhaWx1cmUgb2Ygc3Vic2VxdWVudCBpbnZvY2F0aW9uIG9mIHdlYmlu
c3BlY3Rvci4KKyAgICBpbnNwZWN0b3JQcm94eS0+Y2xvc2UoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSVByb3h5OjpzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclVJUHJv
eHlDbGllbnQ+JiYgY2xpZW50KQoreworICAgIG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxl
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOworICAgIHdlYmtpdElu
c3BlY3RvcldpbmRvd1NldFN1YnRpdGxlKFdFQktJVF9JTlNQRUNUT1JfV0lORE9XKG1faW5zcGVj
dG9yV2luZG93KSwgIW1faW5zcGVjdGVkVVJMU3RyaW5nLmlzRW1wdHkoKSA/IG1faW5zcGVjdGVk
VVJMU3RyaW5nLnV0ZjgoKS5kYXRhKCkgOiBudWxscHRyKTsKK30KKworc3RhdGljIHVuc2lnbmVk
IGxvbmcgbG9uZyBleGNlZWRlZERhdGFiYXNlUXVvdGEoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBX
S1NlY3VyaXR5T3JpZ2luUmVmLCBXS1N0cmluZ1JlZiwgV0tTdHJpbmdSZWYsIHVuc2lnbmVkIGxv
bmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudERh
dGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZFVzYWdlLCBjb25zdCB2b2lk
KikKK3sKKyAgICByZXR1cm4gc3RkOjptYXg8dW5zaWduZWQgbG9uZyBsb25nPihleHBlY3RlZFVz
YWdlLCBjdXJyZW50RGF0YWJhc2VVc2FnZSAqIDEuMjUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJQ
cm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IFdlYkluc3BlY3RvclVJUHJveHkqIFdlYkluc3BlY3RvclVJUHJveHkgPSBzdGF0aWNfY2FzdDxX
ZWJJbnNwZWN0b3JVSVByb3h5Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAg
IEFTU0VSVChXZWJJbnNwZWN0b3JVSVByb3h5KTsKKyAgICBXZWJJbnNwZWN0b3JVSVByb3h5LT5j
bG9zZUZvckNyYXNoKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0
aW9uQWN0aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXJSZWYsIFdLVHlw
ZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICAvLyBBbGxvdyBub24tbWFpbiBm
cmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCisgICAgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZy
YW1lID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zb3VyY2VGcmFtZSgpOworICAgIGlm
IChzb3VyY2VGcmFtZSAmJiAhc291cmNlRnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKKyAgICAgICAg
dG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBjb25zdCBXZWJJbnNwZWN0b3JVSVByb3h5KiBXZWJJbnNwZWN0b3JVSVByb3h5ID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgV2ViSW5zcGVjdG9yVUlQcm94eSo+KGNsaWVudEluZm8pOworICAgIEFT
U0VSVChXZWJJbnNwZWN0b3JVSVByb3h5KTsKKworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCByZXF1ZXN0ID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5yZXF1ZXN0KCk7CisKKyAg
ICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgorICAgIGlmIChX
ZWJJbnNwZWN0b3JVSVByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKHJlcXVlc3QudXJs
KCkpKSB7CisgICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UgZnJvbSBsb2Fk
aW5nIGluIHRoZSBpbnNwZWN0b3IncyBwYWdlLgorICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPmln
bm9yZSgpOworCisgICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBh
Z2UuCisgICAgV2ViSW5zcGVjdG9yVUlQcm94eS0+aW5zcGVjdGVkUGFnZSgpLT5sb2FkUmVxdWVz
dChXVEZNb3ZlKHJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQgZ2V0Q29udGV4dE1lbnVGcm9t
UHJvcG9zZWRNZW51KFdLUGFnZVJlZiBwYWdlUmVmLCBXS0FycmF5UmVmIHByb3Bvc2VkTWVudVJl
ZiwgV0tBcnJheVJlZiogbmV3TWVudVJlZiwgV0tIaXRUZXN0UmVzdWx0UmVmLCBXS1R5cGVSZWYs
IGNvbnN0IHZvaWQqKQoreworICAgIFdLTXV0YWJsZUFycmF5UmVmIG1lbnVJdGVtcyA9IFdLTXV0
YWJsZUFycmF5Q3JlYXRlKCk7CisKKyAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZShw
cm9wb3NlZE1lbnVSZWYpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
eworICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJlZiBjb250ZXh0TWVudUl0ZW0gPSBzdGF0aWNf
Y2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHByb3Bvc2Vk
TWVudVJlZiwgaSkpOworICAgICAgICBzd2l0Y2ggKFdLQ29udGV4dE1lbnVJdGVtR2V0VGFnKGNv
bnRleHRNZW51SXRlbSkpIHsKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVu
TGlua0luTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5J
bWFnZUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5G
cmFtZUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5N
ZWRpYUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ0Rvd25s
b2FkTGlua1RvRGlzazoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9h
ZEltYWdlVG9EaXNrOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZW51SXRlbXMsIGNvbnRleHRNZW51SXRlbSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgICpuZXdNZW51UmVmID0g
bWVudUl0ZW1zOworfQorCitzdGF0aWMgUmVmPFdlYnNpdGVEYXRhU3RvcmU+IGluc3BlY3Rvcldl
YnNpdGVEYXRhU3RvcmUoKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJzaW9uZWREaXJl
Y3RvcnkgPSAid2Via2l0Z3RrLSIgV0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORyBHX0RJUl9T
RVBBUkFUT1JfUyAiV2ViSW5zcGVjdG9yIiBHX0RJUl9TRVBBUkFUT1JfUzsKKyAgICBTdHJpbmcg
YmFzZUNhY2hlRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZ19nZXRfdXNl
cl9jYWNoZV9kaXIoKSksIHZlcnNpb25lZERpcmVjdG9yeSk7CisgICAgU3RyaW5nIGJhc2VEYXRh
RGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KEZpbGVTeXN0
ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZ19nZXRfdXNlcl9kYXRhX2Rp
cigpKSwgdmVyc2lvbmVkRGlyZWN0b3J5KTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IFdl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpZZXMsIFdp
bGxDb3B5UGF0aHNGcm9tRXhpc3RpbmdDb25maWd1cmF0aW9uOjpZZXMpOworICAgIGNvbmZpZ3Vy
YXRpb24tPnNldE5ldHdvcmtDYWNoZURpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoYmFzZUNhY2hlRGlyZWN0b3J5LCAiV2ViS2l0Q2FjaGUiKSk7CisgICAgY29u
ZmlndXJhdGlvbi0+c2V0QXBwbGljYXRpb25DYWNoZURpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZUNhY2hlRGlyZWN0b3J5LCAiYXBwbGljYXRpb25zIikp
OworICAgIGNvbmZpZ3VyYXRpb24tPnNldEhTVFNTdG9yYWdlRGlyZWN0b3J5KFN0cmluZyhiYXNl
Q2FjaGVEaXJlY3RvcnkpKTsKKyAgICBjb25maWd1cmF0aW9uLT5zZXRDYWNoZVN0b3JhZ2VEaXJl
Y3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VDYWNoZURpcmVj
dG9yeSwgIkNhY2hlU3RvcmFnZSIpKTsKKyAgICBjb25maWd1cmF0aW9uLT5zZXRMb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRh
RGlyZWN0b3J5LCAibG9jYWxzdG9yYWdlIikpOworICAgIGNvbmZpZ3VyYXRpb24tPnNldEluZGV4
ZWREQkRhdGFiYXNlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChiYXNlRGF0YURpcmVjdG9yeSwgImluZGV4ZWRkYiIpKTsKKyAgICBjb25maWd1cmF0aW9uLT5z
ZXRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQoYmFzZURhdGFEaXJlY3RvcnksICJkYXRhYmFzZXMiKSk7CisgICAgY29uZmlndXJhdGlv
bi0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQoYmFzZURhdGFEaXJlY3RvcnksICJpdHAiKSk7CisgICAgY29uZmln
dXJhdGlvbi0+c2V0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeShGaWxlU3lzdGVt
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZURhdGFEaXJlY3RvcnksICJzZXJ2aWNld29y
a2VycyIpKTsKKyAgICBjb25maWd1cmF0aW9uLT5zZXREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VE
aXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRhRGly
ZWN0b3J5LCAiZGV2aWNlaWRoYXNoc2FsdHMiKSk7CisgICAgcmV0dXJuIFdlYnNpdGVEYXRhU3Rv
cmU6OmNyZWF0ZShXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBQQUw6OlNlc3Npb25JRDo6Z2VuZXJh
dGVQZXJzaXN0ZW50U2Vzc2lvbklEKCkpOworfQorCitXZWJQYWdlUHJveHkqIFdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBBU1NFUlQoaW5z
cGVjdGVkUGFnZSgpKTsKKyAgICBBU1NFUlQoIW1faW5zcGVjdG9yVmlldyk7CisKKyAgICBhdXRv
IHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIu
IiwgIldlYktpdDIuIik7CisjaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQorICAgIC8vIEFsbG93
IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMg
d2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KKyAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZCh0cnVlKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdl
c1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7CisjZW5kaWYKKyAgICBwcmVmZXJlbmNlcy0+
c2V0QWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyh0cnVlKTsKKyAgICBwcmVmZXJlbmNlcy0+
c2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyh7CisgICAgfSk7CisgICAgaWYgKG1fdW5kZXJUZXN0
KQorICAgICAgICBwcmVmZXJlbmNlcy0+c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0Vu
YWJsZWQoZmFsc2UpOworICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUo
V2ViS2l0OjpkZWZhdWx0SW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoaW5zcGVj
dGVkUGFnZSgpKSk7CisgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlID0gaW5zcGVjdG9yV2Vic2l0
ZURhdGFTdG9yZSgpOworICAgIGF1dG8mIHByb2Nlc3NQb29sID0gV2ViS2l0OjpkZWZhdWx0SW5z
cGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdGlvbkxldmVsKCkpOworCisgICAgYXV0byBwYWdlQ29u
ZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VD
b25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmcHJvY2Vzc1Bvb2wpOworICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5wdHIoKSk7CisgICAgcGFnZUNv
bmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cChwYWdlR3JvdXAucHRyKCkpOworICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKHdlYnNpdGVEYXRhU3RvcmUucHRyKCkpOwor
ICAgIG1faW5zcGVjdG9yVmlldyA9IEdUS19XSURHRVQod2Via2l0V2ViVmlld0Jhc2VDcmVhdGUo
KnBhZ2VDb25maWd1cmF0aW9uLnB0cigpKSk7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRl
cihHX09CSkVDVChtX2luc3BlY3RvclZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1f
aW5zcGVjdG9yVmlldykpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3JWaWV3LCAi
ZGVzdHJveSIsIEdfQ0FMTEJBQ0soaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOworCisg
ICAgV0tQYWdlVUlDbGllbnRWMiB1aUNsaWVudCA9IHsKKyAgICAgICAgeyAyLCB0aGlzIH0sCisg
ICAgICAgIG51bGxwdHIsIC8vIGNyZWF0ZU5ld1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAor
ICAgICAgICBudWxscHRyLCAvLyBzaG93UGFnZQorICAgICAgICBudWxscHRyLCAvLyBjbG9zZVBh
Z2UKKyAgICAgICAgbnVsbHB0ciwgLy8gdGFrZUZvY3VzCisgICAgICAgIG51bGxwdHIsIC8vIGZv
Y3VzCisgICAgICAgIG51bGxwdHIsIC8vIHVuZm9jdXMKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVu
SmF2YVNjcmlwdEFsZXJ0CisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRDb25maXJt
CisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRQcm9tcHQKKyAgICAgICAgbnVsbHB0
ciwgLy8gc2V0U3RhdHVzVGV4dAorICAgICAgICBudWxscHRyLCAvLyBtb3VzZURpZE1vdmVPdmVy
RWxlbWVudF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIG1pc3Np
bmdQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVs
bHB0ciwgLy8gZGlkTm90SGFuZGxlS2V5RXZlbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkTm90
SGFuZGxlV2hlZWxFdmVudAorICAgICAgICBudWxscHRyLCAvLyBhcmVUb29sYmFyc1Zpc2libGUK
KyAgICAgICAgbnVsbHB0ciwgLy8gc2V0VG9vbGJhcnNWaXNpYmxlCisgICAgICAgIG51bGxwdHIs
IC8vIGlzTWVudUJhclZpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0TWVudUJhclZpc2li
bGUKKyAgICAgICAgbnVsbHB0ciwgLy8gaXNTdGF0dXNCYXJWaXNpYmxlCisgICAgICAgIG51bGxw
dHIsIC8vIHNldFN0YXR1c0JhclZpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gaXNSZXNpemFi
bGUKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0UmVzaXphYmxlCisgICAgICAgIG51bGxwdHIsIC8v
IGdldFdpbmRvd0ZyYW1lLAorICAgICAgICBudWxscHRyLCAvLyBzZXRXaW5kb3dGcmFtZSwKKyAg
ICAgICAgbnVsbHB0ciwgLy8gcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsCisgICAgICAgIG51
bGxwdHIsIC8vIGRpZERyYXcKKyAgICAgICAgbnVsbHB0ciwgLy8gcGFnZURpZFNjcm9sbAorICAg
ICAgICBleGNlZWRlZERhdGFiYXNlUXVvdGEsCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bk9wZW5Q
YW5lbCwKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdAorICAgICAgICBudWxscHRyLCAvLyBoZWFkZXJIZWlnaHQKKyAgICAgICAg
bnVsbHB0ciwgLy8gZm9vdGVySGVpZ2h0CisgICAgICAgIG51bGxwdHIsIC8vIGRyYXdIZWFkZXIK
KyAgICAgICAgbnVsbHB0ciwgLy8gZHJhd0Zvb3RlcgorICAgICAgICBudWxscHRyLCAvLyBwcmlu
dEZyYW1lCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bk1vZGFsCisgICAgICAgIG51bGxwdHIsIC8v
IHVudXNlZAorICAgICAgICBudWxscHRyLCAvLyBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9s
ZGVyCisgICAgICAgIG51bGxwdHIsIC8vIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQKKyAgICAg
ICAgbnVsbHB0ciwgLy8gY3JlYXRlUGFnZQorICAgICAgICBudWxscHRyLCAvLyBtb3VzZURpZE1v
dmVPdmVyRWxlbWVudAorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JOb3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdAorICAgICAgICBudWxscHRyLCAvLyB1bmF2YWlsYWJsZVBs
dWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMQorICAgICAgICBudWxscHRy
LCAvLyBzaG93Q29sb3JQaWNrZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gaGlkZUNvbG9yUGlja2Vy
CisgICAgICAgIG51bGxwdHIsIC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZAorICAg
IH07CisKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjAgbmF2aWdhdGlvbkNsaWVudCA9IHsK
KyAgICAgICAgeyAwLCB0aGlzIH0sCisgICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24sCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNw
b25zZQorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkCisgICAg
ICAgIG51bGxwdHIsIC8vIGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51
bGxwdHIsIC8vIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlv
bgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAg
ICAgIG51bGxwdHIsIC8vIGRpZENvbW1pdE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8g
ZGlkRmluaXNoTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsTmF2aWdhdGlv
bgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZQor
ICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hEb2N1bWVudExvYWQKKyAgICAgICAgbnVsbHB0
ciwgLy8gZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyByZW5k
ZXJpbmdQcm9ncmVzc0RpZENoYW5nZQorICAgICAgICBudWxscHRyLCAvLyBjYW5BdXRoZW50aWNh
dGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZQorICAgICAgICB3ZWJQcm9jZXNzRGlkQ3Jhc2gsCisgICAg
ICAgIG51bGxwdHIsIC8vIGNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkKKworICAgICAgICBudWxscHRy
LCAvLyBkaWRCZWdpbk5hdmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxF
bmROYXZpZ2F0aW9uR2VzdHVyZQorICAgICAgICBudWxscHRyLCAvLyBkaWRFbmROYXZpZ2F0aW9u
R2VzdHVyZQorICAgICAgICBudWxscHRyLCAvLyBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNu
YXBzaG90CisgICAgfTsKKworICAgIFdLUGFnZUNvbnRleHRNZW51Q2xpZW50VjMgY29udGV4dE1l
bnVDbGllbnQgPSB7CisgICAgICAgIHsgMywgdGhpcyB9LAorICAgICAgICBudWxscHRyLCAvLyBn
ZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnVfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAg
ICAgICBudWxscHRyLCAvLyBjdXN0b21Db250ZXh0TWVudUl0ZW1TZWxlY3RlZAorICAgICAgICBu
dWxscHRyLCAvLyBjb250ZXh0TWVudURpc21pc3NlZAorICAgICAgICBnZXRDb250ZXh0TWVudUZy
b21Qcm9wb3NlZE1lbnUsCisgICAgICAgIG51bGxwdHIsIC8vIHNob3dDb250ZXh0TWVudQorICAg
ICAgICBudWxscHRyLCAvLyBoaWRlQ29udGV4dE1lbnUKKyAgICB9OworCisgICAgV2ViUGFnZVBy
b3h5KiBpbnNwZWN0b3JQYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJf
VklFV19CQVNFKG1faW5zcGVjdG9yVmlldykpOworICAgIEFTU0VSVChpbnNwZWN0b3JQYWdlKTsK
KworICAgIFdLUGFnZVNldFBhZ2VVSUNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJnVpQ2xp
ZW50LmJhc2UpOworICAgIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KHRvQVBJKGluc3Bl
Y3RvclBhZ2UpLCAmbmF2aWdhdGlvbkNsaWVudC5iYXNlKTsKKyAgICBXS1BhZ2VTZXRQYWdlQ29u
dGV4dE1lbnVDbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZjb250ZXh0TWVudUNsaWVudC5i
YXNlKTsKKworICAgIHJldHVybiBpbnNwZWN0b3JQYWdlOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQoreworICAgIGlmIChtX2Ns
aWVudCAmJiBtX2NsaWVudC0+b3BlbldpbmRvdygqdGhpcykpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVCghbV9pbnNwZWN0b3JXaW5kb3cpOworICAgIG1faW5zcGVjdG9yV2luZG93ID0g
d2Via2l0SW5zcGVjdG9yV2luZG93TmV3KCk7CisjaWYgVVNFKEdUSzQpCisgICAgZ3RrX3dpbmRv
d19zZXRfY2hpbGQoR1RLX1dJTkRPVyhtX2luc3BlY3RvcldpbmRvdyksIG1faW5zcGVjdG9yVmll
dyk7CisjZWxzZQorICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9pbnNwZWN0
b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOworICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3Bl
Y3RvclZpZXcpOworI2VuZGlmCisKKyAgICBpZiAoIW1faW5zcGVjdGVkVVJMU3RyaW5nLmlzRW1w
dHkoKSkKKyAgICAgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKKworICAgIGdfb2Jq
ZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JXaW5kb3cpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJm1faW5zcGVjdG9yV2luZG93KSk7CisgICAgZ3RrX3dpbmRvd19w
cmVzZW50KEdUS19XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAg
ICBpZiAobV9pbnNwZWN0b3JWaWV3KSB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfYnlfZnVuYyhtX2luc3BlY3RvclZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGlu
c3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKKyAgICAgICAgbV9pbnNwZWN0b3JWaWV3ID0g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5k
aWRDbG9zZSgqdGhpcyk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAg
Z3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0
b3JXaW5kb3cgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQoreworfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
UHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1IaWRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCit7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIGlmICht
X2lzT3BlbmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xpZW50ICYmIG1fY2xp
ZW50LT5icmluZ1RvRnJvbnQoKnRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRn
ZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7Cisg
ICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQor
ICAgICAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhwYXJlbnQpKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1Jc0Zyb250KCkKK3sKKyAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRn
ZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7CisgICAgaWYgKFdlYkNvcmU6OndpZGdl
dElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQorICAgICAgICByZXR1cm4gbV9pc1Zp
c2libGUgJiYgZ3RrX3dpbmRvd19pc19hY3RpdmUoR1RLX1dJTkRPVyhwYXJlbnQpKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRG
b3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJh
bmNlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKQorewor
ICAgIG1faW5zcGVjdGVkVVJMU3RyaW5nID0gdXJsOworICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPmluc3BlY3RlZFVSTENoYW5nZWQoKnRoaXMsIHVybCk7CisKKyAgICBpZiAo
bV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUo
Y29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCit7
CisgICAgcmV0dXJuICJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJm
YWNlL01haW4uaHRtbCJfczsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJUHJveHk6Omluc3Bl
Y3RvclRlc3RQYWdlVVJMKCkKK3sKKyAgICByZXR1cm4gInJlc291cmNlOi8vL29yZy93ZWJraXQv
aW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UvVGVzdC5odG1sIl9zOworfQorCitEZWJ1Z2dhYmxlSW5m
b0RhdGEgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCit7Cisg
ICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNj46IHRoaXMgc2hvdWxkIGlu
ZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdldC4KKyAgICBhdXRvIGRh
dGEgPSBEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCk7CisgICAgZGF0YS5kZWJ1Z2dhYmxlVHlw
ZSA9IEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBhZ2U7CisgICAgcmV0dXJuIGRhdGE7
Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2lu
ZG93SGVpZ2h0KCkKK3sKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX2hlaWdo
dChpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIHJldHVy
biBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfd2lkdGgoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lk
Z2V0KCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkK
K3sKKyAgICBHUmVmUHRyPEd0a1dpZGdldD4gaW5zcGVjdG9yVmlldyA9IG1faW5zcGVjdG9yVmll
dzsKKyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKKyNpZiBVU0UoR1RLNCkKKyAgICAgICAg
Z3RrX3dpbmRvd19zZXRfY2hpbGQoR1RLX1dJTkRPVyhtX2luc3BlY3RvcldpbmRvdyksIG51bGxw
dHIpOworI2Vsc2UKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUiht
X2luc3BlY3RvcldpbmRvdyksIG1faW5zcGVjdG9yVmlldyk7CisjZW5kaWYKKyAgICAgICAgZ3Rr
X3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0b3JX
aW5kb3cgPSBudWxscHRyOworICAgIH0KKworICAgIC8vIFNldCBhIGRlZmF1bHQgc2l6ZXMgYmFz
ZWQgb24gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC4KKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZGVmYXVsdEF0dGFjaGVkU2l6ZSA9IDMwMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA3NTA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKKworICAgIGlmIChtX2F0dGFjaG1lbnRTaWRl
ID09IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pIHsKKyAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0
dGFjaGVkSGVpZ2h0ID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKSAqIDMgLyA0Owor
ICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHN0ZDo6bWF4KG1pbmltdW1B
dHRhY2hlZEhlaWdodCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFj
aGVkSGVpZ2h0KSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRh
Y2hlZFdpZHRoID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpICogMyAvIDQ7CisgICAg
ICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aChzdGQ6Om1heChtaW5pbXVtQXR0YWNo
ZWRXaWR0aCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkV2lk
dGgpKSk7CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5hdHRhY2goKnRo
aXMpKQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFdlYkluc3Bl
Y3RvcihXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSks
IG1faW5zcGVjdG9yVmlldywgbV9hdHRhY2htZW50U2lkZSk7CisgICAgZ3RrX3dpZGdldF9zaG93
KG1faW5zcGVjdG9yVmlldyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1EZXRhY2goKQoreworICAgIGlmICghaW5zcGVjdGVkUGFnZSgpLT5oYXNSdW5uaW5nUHJvY2Vz
cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEd0a1dpZGdldD4gaW5zcGVjdG9y
VmlldyA9IG1faW5zcGVjdG9yVmlldzsKKyAgICBpZiAoIW1fY2xpZW50IHx8ICFtX2NsaWVudC0+
ZGV0YWNoKCp0aGlzKSkgeworICAgICAgICAvLyBEZXRhY2ggaXMgY2FsbGVkIHdoZW4gbV9pc0F0
dGFjaGVkIGlzIHRydWUsIGJ1dCBpdCBjb3VsZCBjYWxsZWQgYmVmb3JlCisgICAgICAgIC8vIHRo
ZSBpbnNwZWN0b3IgaXMgb3BlbmVkIGlmIHRoZSBpbnNwZWN0b3IgaXMgc2hvd24vY2xvc2VkIHF1
aWNrbHkuIFNvLAorICAgICAgICAvLyB3ZSBtaWdodCBub3QgaGF2ZSBhIHBhcmVudCB5ZXQuCisg
ICAgICAgIGlmIChHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudChtX2lu
c3BlY3RvclZpZXcpKQorICAgICAgICAgICAgd2Via2l0V2ViVmlld0Jhc2VSZW1vdmVXZWJJbnNw
ZWN0b3IoV0VCS0lUX1dFQl9WSUVXX0JBU0UocGFyZW50KSwgbV9pbnNwZWN0b3JWaWV3KTsKKyAg
ICB9CisKKyAgICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1l
YW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRhY2hlZAorICAgIC8vIGFuZCB3
ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KKyAgICBp
ZiAoIW1faXNWaXNpYmxlKSB7CisgICAgICAgIC8vIFRoZSBpbnNwZWN0b3IgdmlldyB3aWxsIGJl
IGRlc3Ryb3llZCwgYnV0IHdlIGRvbid0IG5lZWQgdG8gbm90aWZ5IHRoZSB3ZWIgcHJvY2VzcyB0
byBjbG9zZSB0aGUKKyAgICAgICAgLy8gaW5zcGVjdG9yIGluIHRoaXMgY2FzZSwgc2luY2UgaXQn
cyBhbHJlYWR5IGNsb3NlZC4KKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9i
eV9mdW5jKG1faW5zcGVjdG9yVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zcGVjdG9y
Vmlld0Rlc3Ryb3llZCksIHRoaXMpOworICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRy
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3BlbigpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQg
aGVpZ2h0KQoreworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZEhlaWdo
dCgqdGhpcywgaGVpZ2h0KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVNldEluc3BlY3RvclZpZXdT
aXplKFdFQktJVF9XRUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwg
aGVpZ2h0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEF0dGFj
aGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCit7CisgICAgaWYgKCFtX2lzQXR0YWNoZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
PmRpZENoYW5nZUF0dGFjaGVkV2lkdGgoKnRoaXMsIHdpZHRoKTsKKyAgICB3ZWJraXRXZWJWaWV3
QmFzZVNldEluc3BlY3RvclZpZXdTaXplKFdFQktJVF9XRUJfVklFV19CQVNFKGluc3BlY3RlZFBh
Z2UoKS0+dmlld1dpZGdldCgpKSwgd2lkdGgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3Rh
dGljIHZvaWQgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVj
dCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIEdGaWxl
KiBmaWxlID0gR19GSUxFKHNvdXJjZU9iamVjdCk7CisgICAgaWYgKCFnX2ZpbGVfcmVwbGFjZV9j
b250ZW50c19maW5pc2goZmlsZSwgcmVzdWx0LCBudWxscHRyLCBudWxscHRyKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byogcGFnZSA9IHN0YXRpY19jYXN0PFdlYlBhZ2VQcm94eSo+KHVz
ZXJEYXRhKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUp
KTsKKyAgICBwYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShwYXRo
LmdldCgpKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgVU5VU0VEX1BBUkFNKGZv
cmNlU2F2ZURpYWxvZyk7CisKKyAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0
X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7CisgICAgaWYgKCFXZWJDb3JlOjp3aWRnZXRJc09u
c2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1Jl
ZlB0cjxHdGtGaWxlQ2hvb3Nlck5hdGl2ZT4gZGlhbG9nID0gYWRvcHRHUmVmKGd0a19maWxlX2No
b29zZXJfbmF0aXZlX25ldygiU2F2ZSBGaWxlIiwKKyAgICAgICAgR1RLX1dJTkRPVyhwYXJlbnQp
LCBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwiKSk7CisKKyAg
ICBHdGtGaWxlQ2hvb3NlciogY2hvb3NlciA9IEdUS19GSUxFX0NIT09TRVIoZGlhbG9nLmdldCgp
KTsKKyNpZiAhVVNFKEdUSzQpCisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRl
X2NvbmZpcm1hdGlvbihjaG9vc2VyLCBUUlVFKTsKKyNlbmRpZgorCisgICAgLy8gU29tZSBpbnNw
ZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3IgaW5zdGFuY2UpIHVzZSBhIGN1c3RvbSBVUkkgc2NoZW1l
LCBzdWNoCisgICAgLy8gYXMgd2ViLWluc3BlY3Rvci4gU28gd2UgY2FuJ3QgcmVseSBvbiB0aGUg
VVJMIGJlaW5nIGEgdmFsaWQgZmlsZTovLy8gVVJMCisgICAgLy8gdW5mb3J0dW5hdGVseS4KKyAg
ICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0ZWRVUkwpOworICAgIC8vIFN0cmlwIGxlYWRpbmcgLyBj
aGFyYWN0ZXIuCisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfY3VycmVudF9uYW1lKGNob29zZXIs
IHVybC5wYXRoKCkuc3Vic3RyaW5nKDEpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKGd0a19u
YXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBHVEtf
UkVTUE9OU0VfQUNDRVBUKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0
YVZlY3RvcjsKKyAgICBDU3RyaW5nIGRhdGFTdHJpbmc7CisgICAgaWYgKGJhc2U2NEVuY29kZWQp
IHsKKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0
VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YVZlY3Rv
ci5zaHJpbmtUb0ZpdCgpOworICAgIH0gZWxzZQorICAgICAgICBkYXRhU3RyaW5nID0gY29udGVu
dC51dGY4KCk7CisKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkg
PyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOworICAgIHNpemVfdCBkYXRh
TGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDogZGF0
YVZlY3Rvci5zaXplKCk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihndGtf
ZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBh
dGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKKyAgICBnX2ZpbGVfcmVwbGFjZV9jb250
ZW50c19hc3luYyhmaWxlLmdldCgpLCBkYXRhLCBkYXRhTGVuZ3RoLCBudWxscHRyLCBmYWxzZSwK
KyAgICAgICAgR19GSUxFX0NSRUFURV9SRVBMQUNFX0RFU1RJTkFUSU9OLCBudWxscHRyLCBmaWxl
UmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2ssIG1faW5zcGVjdG9yUGFnZSk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
UHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkK
K3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hB
dmFpbGFiaWxpdHkoKnRoaXMsIGF2YWlsYWJsZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJL
aXRJbnNwZWN0b3JXaW5kb3cuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCmluZGV4IGFjODkyZjhkNWFmNDJlMjA4OTEw
NDU4Y2FjOTQ3ZDY1ZDNkYTI2MmUuLmRiNDA4YmU0YzgzNzI5YTBkYjlkNjg4NzQ0NTNkNTllNDA2
OTA2OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsv
V2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCIK
IAotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9y
VUlQcm94eS5oIgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8d3RmL2ds
aWIvR1VuaXF1ZVB0ci5oPgogCkBAIC05Miw3ICs5Miw3IEBAIEd0a1dpZGdldCogd2Via2l0SW5z
cGVjdG9yV2luZG93TmV3KCkKICNpZiAhVVNFKEdUSzQpCiAgICAgICAgICJ0eXBlIiwgR1RLX1dJ
TkRPV19UT1BMRVZFTCwKICNlbmRpZgotICAgICAgICAiZGVmYXVsdC13aWR0aCIsIFdlYkluc3Bl
Y3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGgsICJkZWZhdWx0LWhlaWdodCIsIFdlYkluc3Bl
Y3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0LCBudWxscHRyKSk7CisgICAgICAgICJkZWZh
dWx0LXdpZHRoIiwgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoLCAiZGVm
YXVsdC1oZWlnaHQiLCBXZWJJbnNwZWN0b3JVSVByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0LCBu
dWxscHRyKSk7CiB9CiAKIHZvaWQgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV2Vi
S2l0SW5zcGVjdG9yV2luZG93KiB3aW5kb3csIGNvbnN0IGNoYXIqIHN1YnRpdGxlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMv
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDIyMzQxOGQwZDhhOTc3OGQ3ZmQ3Y2Q4NGRkYjkwN2I5Yzc5YmFkYzQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbQorKysgL2Rldi9u
dWxsCkBAIC0xLDI5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCi0KLSNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW1wb3J0ICJHbG9iYWxGaW5kSW5Q
YWdlU3RhdGUuaCIKLSNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIK
LSNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldLRnJh
bWVJbmZvLmgiCi0jaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgiCi0jaW1wb3J0
ICJXS05hdmlnYXRpb25BY3Rpb24uaCIKLSNpbXBvcnQgIldLTmF2aWdhdGlvbkRlbGVnYXRlLmgi
Ci0jaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJv
eHkuaCIKLSNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5Lmgi
Ci0jaW1wb3J0ICJfV0tJbnNwZWN0b3JDb25maWd1cmF0aW9uSW50ZXJuYWwuaCIKLSNpbXBvcnQg
PFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgotI2ltcG9ydCA8U2VjdXJp
dHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2VydGlm
aWNhdGVJbmZvLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotQGludGVyZmFjZSBX
S1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgOiBOU09iamVjdCA8TlNXaW5kb3dE
ZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPiB7Ci0gICAgV2ViS2l0
OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSogX2luc3BlY3RvclByb3h5OwotfQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5OwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
V0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyCi0KLS0gKE5TUmVjdCl3aW5kb3c6
KE5TV2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0OihOU1dpbmRvdyAqKXNoZWV0IHVz
aW5nUmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAg
ICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLmhlaWdo
dCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndpZHRoKCksIDApOwotICAgIHJldHVy
biByZWN0OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTooV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHkKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIF9pbnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5OwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3RGlkQmVjb21lQWN0aXZlOihXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsKLSAgICBfaW5z
cGVjdG9yUHJveHktPmRpZEJlY29tZUFjdGl2ZSgpOwotfQotCi0tICh2b2lkKWluc3BlY3RvclZp
ZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
KilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewotICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2VG
cm9tQ3Jhc2goKTsKLX0KLQotLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3Rv
cklzVW5kZXJUZXN0OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIKLXsKLSAgICByZXR1cm4gX2luc3BlY3RvclByb3h5LT5pc1VuZGVyVGVzdCgpOwot
fQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLVdLV2ViVmlldyAqUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OndlYlZpZXcoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2luc3BlY3RvclZpZXcuZ2V0KCkud2ViVmlldzsKLX0KLQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6ZGlkQmVjb21lQWN0aXZlKCkKLXsKLSAgICBtX2luc3Bl
Y3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpVcGRhdGVGaW5k
U3RyaW5nKFdlYktpdDo6c3RyaW5nRm9yRmluZCgpKSk7Ci19Ci0KLVdlYlBhZ2VQcm94eSogUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCkKLXsKLSAgICBtX29iakNBZGFwdGVyID0gYWRvcHROUyhbW1dLUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlPYmpDQWRhcHRlciBhbGxvY10gaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTp0
aGlzXSk7Ci0KLSAgICBSZWY8QVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uPiBjb25maWd1cmF0
aW9uID0gbV9jbGllbnQtPmNvbmZpZ3VyYXRpb25Gb3JSZW1vdGVJbnNwZWN0b3IoKnRoaXMpOwot
ICAgIG1faW5zcGVjdG9yVmlldyA9IGFkb3B0TlMoW1tXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
IGFsbG9jXSBpbml0V2l0aENvbmZpZ3VyYXRpb246IFdlYktpdDo6d3JhcHBlcihjb25maWd1cmF0
aW9uKSBpbnNwZWN0ZWRQYWdlOm51bGxwdHJdKTsKLSAgICBbbV9pbnNwZWN0b3JWaWV3LmdldCgp
IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOwotCi0gICAgbV93aW5kb3cgPSBXZWJJ
bnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3coTlNaZXJvUmVjdCwgV2ViSW5zcGVj
dG9yUHJveHk6Okluc3BlY3Rpb25UYXJnZXRUeXBlOjpSZW1vdGUpOwotICAgIFttX3dpbmRvdyBz
ZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKLSAgICBbbV93aW5kb3cgc2V0RnJhbWVB
dXRvc2F2ZU5hbWU6QCJXS1JlbW90ZVdlYkluc3BlY3RvcldpbmRvd0ZyYW1lIl07Ci0KLSAgICBO
U1ZpZXcgKmNvbnRlbnRWaWV3ID0gbV93aW5kb3cuZ2V0KCkuY29udGVudFZpZXc7Ci0gICAgW3dl
YlZpZXcoKSBzZXRGcmFtZTpjb250ZW50Vmlldy5ib3VuZHNdOwotICAgIFtjb250ZW50VmlldyBh
ZGRTdWJ2aWV3OndlYlZpZXcoKV07Ci0KLSAgICByZXR1cm4gd2ViVmlldygpLT5fcGFnZS5nZXQo
KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1fd2luZG93KSB7Ci0gICAgICAgIFttX3dp
bmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV93aW5kb3cgY2xvc2VdOwotICAgICAg
ICBtX3dpbmRvdyA9IG5pbDsKLSAgICB9Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JWaWV3KSB7Ci0g
ICAgICAgIFttX2luc3BlY3RvclZpZXcuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAg
bV9pbnNwZWN0b3JWaWV3ID0gbmlsOwotICAgIH0KLQotICAgIGlmIChtX29iakNBZGFwdGVyKQot
ICAgICAgICBtX29iakNBZGFwdGVyID0gbmlsOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQotewotICAgIFtOU1dpbmRvdyByZW1vdmVGcmFt
ZVVzaW5nTmFtZTpbbV93aW5kb3cgZnJhbWVBdXRvc2F2ZU5hbWVdXTsKLX0KLQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQotewotICAgIFttX3dp
bmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOwotICAgIFttX3dpbmRvdyBtYWtlRmlyc3RS
ZXNwb25kZXI6d2ViVmlldygpXTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCi17Ci0gICAg
Ly8gRklYTUU6IFNoYXJlIHdpdGggV2ViSW5zcGVjdG9yUHJveHlNYWMuCi0KLSAgICBBU1NFUlQo
IXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOwotICAgIAotICAgIE5TVVJMICpwbGF0Zm9ybVVSTCA9
IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCkuZ2V0KCk7Ci0gICAg
aWYgKCFwbGF0Zm9ybVVSTCkgewotICAgICAgICBwbGF0Zm9ybVVSTCA9IFtOU1VSTCBVUkxXaXRo
U3RyaW5nOnN1Z2dlc3RlZFVSTF07Ci0gICAgICAgIC8vIFRoZSB1c2VyIG11c3QgY29uZmlybSBu
ZXcgZmlsZW5hbWVzIGJlZm9yZSB3ZSBjYW4gc2F2ZSB0byB0aGVtLgotICAgICAgICBmb3JjZVNh
dmVEaWFsb2cgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQocGxhdGZvcm1VUkwpOwot
ICAgIGlmICghcGxhdGZvcm1VUkwpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE5lY2Vzc2Fy
eSBmb3IgdGhlIGJsb2NrIGJlbG93LgotICAgIFN0cmluZyBzdWdnZXN0ZWRVUkxDb3B5ID0gc3Vn
Z2VzdGVkVVJMOwotICAgIFN0cmluZyBjb250ZW50Q29weSA9IGNvbnRlbnQ7Ci0KLSAgICBhdXRv
IHNhdmVUb1VSTCA9IF4oTlNVUkwgKmFjdHVhbFVSTCkgewotICAgICAgICBBU1NFUlQoYWN0dWFs
VVJMKTsKLQotICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRV
UkxDb3B5LCBhY3R1YWxVUkwpOwotCi0gICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUo
Y29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFk
b3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0
LnNpemUoKV0pOwotICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJM
IGF0b21pY2FsbHk6WUVTXTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBbY29udGVudENv
cHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07Ci0KLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShbYWN0dWFsVVJMIGFic29s
dXRlU3RyaW5nXSkpOwotICAgIH07Ci0KLSAgICBpZiAoIWZvcmNlU2F2ZURpYWxvZykgewotICAg
ICAgICBzYXZlVG9VUkwocGxhdGZvcm1VUkwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgTlNTYXZlUGFuZWwgKnBhbmVsID0gW05TU2F2ZVBhbmVsIHNhdmVQYW5lbF07Ci0gICAgcGFu
ZWwubmFtZUZpZWxkU3RyaW5nVmFsdWUgPSBwbGF0Zm9ybVVSTC5sYXN0UGF0aENvbXBvbmVudDsK
LQotICAgIC8vIElmIHdlIGhhdmUgYSBmaWxlIFVSTCB3ZSd2ZSBhbHJlYWR5IHNhdmVkIHRoaXMg
ZmlsZSB0byBhIHBhdGggYW5kCi0gICAgLy8gY2FuIHByb3ZpZGUgYSBnb29kIGRpcmVjdG9yeSB0
byBzaG93LiBPdGhlcndpc2UsIHVzZSB0aGUgc3lzdGVtJ3MKLSAgICAvLyBkZWZhdWx0IGJlaGF2
aW9yIGZvciB0aGUgaW5pdGlhbCBkaXJlY3RvcnkgdG8gc2hvdyBpbiB0aGUgZGlhbG9nLgotICAg
IGlmIChwbGF0Zm9ybVVSTC5pc0ZpbGVVUkwpCi0gICAgICAgIHBhbmVsLmRpcmVjdG9yeVVSTCA9
IFtwbGF0Zm9ybVVSTCBVUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRdOwotCi0gICAgYXV0
byBjb21wbGV0aW9uSGFuZGxlciA9IF4oTlNJbnRlZ2VyIHJlc3VsdCkgewotICAgICAgICBpZiAo
cmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZUNhbmNlbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VPSyk7Ci0gICAgICAgIHNhdmVU
b1VSTChwYW5lbC5VUkwpOwotICAgIH07Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93ID0gbV93aW5k
b3cgPyBtX3dpbmRvdy5nZXQoKSA6IFtOU0FwcCBrZXlXaW5kb3ddOwotICAgIGlmICh3aW5kb3cp
Ci0gICAgICAgIFtwYW5lbCBiZWdpblNoZWV0TW9kYWxGb3JXaW5kb3c6d2luZG93IGNvbXBsZXRp
b25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFtwYW5lbCBydW5Nb2RhbF0pOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50KQotewotICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3Rv
clByb3h5TWFjLgotCi0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAK
LSAgICBSZXRhaW5QdHI8TlNVUkw+IGFjdHVhbFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxN
YXAuZ2V0KHN1Z2dlc3RlZFVSTCk7Ci0gICAgLy8gRG8gbm90IGFwcGVuZCB1bmxlc3MgdGhlIHVz
ZXIgaGFzIGFscmVhZHkgY29uZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgotICAgIGlm
ICghYWN0dWFsVVJMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU0ZpbGVIYW5kbGUgKmhhbmRs
ZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0
KCkgZXJyb3I6TlVMTF07Ci0gICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZpbGVdOwotICAgIFtoYW5k
bGUgd3JpdGVEYXRhOltjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nXV07Ci0gICAgW2hhbmRsZSBjbG9zZUZpbGVdOwotCi0gICAgV2ViUGFnZVByb3h5KiBpbnNw
ZWN0b3JQYWdlID0gd2ViVmlldygpLT5fcGFnZS5nZXQoKTsKLSAgICBpbnNwZWN0b3JQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxVUkwg
YWJzb2x1dGVTdHJpbmddKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3NoZWV0
UmVjdCA9IHJlY3Q7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSBh
cHBlYXJhbmNlKQotewotICAgIE5TQXBwZWFyYW5jZSAqcGxhdGZvcm1BcHBlYXJhbmNlOwotICAg
IHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgIGNhc2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OkFwcGVhcmFuY2U6OlN5c3RlbToKLSAgICAgICAgcGxhdGZvcm1BcHBlYXJhbmNlID0gbmlsOwot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVh
cmFuY2U6OkxpZ2h0OgotICAgICAgICBwbGF0Zm9ybUFwcGVhcmFuY2UgPSBbTlNBcHBlYXJhbmNl
IGFwcGVhcmFuY2VOYW1lZDpOU0FwcGVhcmFuY2VOYW1lQXF1YV07Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZTo6RGFyazoKLSAg
ICAgICAgcGxhdGZvcm1BcHBlYXJhbmNlID0gW05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6
TlNBcHBlYXJhbmNlTmFtZURhcmtBcXVhXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
d2ViVmlldygpLmFwcGVhcmFuY2UgPSBwbGF0Zm9ybUFwcGVhcmFuY2U7Ci0KLSAgICBOU1dpbmRv
dyAqd2luZG93ID0gbV93aW5kb3cuZ2V0KCk7Ci0gICAgQVNTRVJUKHdpbmRvdyk7Ci0gICAgd2lu
ZG93LmFwcGVhcmFuY2UgPSBwbGF0Zm9ybUFwcGVhcmFuY2U7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICB3ZWJWaWV3
KCktPl9wYWdlLT5zdGFydFdpbmRvd0RyYWcoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCkKLXsK
LSAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gb3BlblVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzp1cmxdXTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8p
Ci17Ci0gICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUluZm8uaXNFbXB0eSgpKTsKLQotICAgIFJldGFp
blB0cjxTRkNlcnRpZmljYXRlUGFuZWw+IGNlcnRpZmljYXRlUGFuZWwgPSBhZG9wdE5TKFtbU0ZD
ZXJ0aWZpY2F0ZVBhbmVsIGFsbG9jXSBpbml0XSk7Ci0KLSAgICBBU1NFUlQobV93aW5kb3cpOwot
I2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCi0gICAgW2NlcnRpZmljYXRlUGFuZWwg
YmVnaW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5pbCBkaWRF
bmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJbmZv
LnRydXN0KCkgc2hvd0dyb3VwOllFU107Ci0jZWxzZQotICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJl
Z2luU2hlZXRGb3JXaW5kb3c6bV93aW5kb3cuZ2V0KCkgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5k
U2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIGNlcnRpZmljYXRlczooTlNBcnJheSAq
KWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkgc2hvd0dyb3VwOllFU107Ci0jZW5k
aWYKLQotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRydXN0IHBhbmVsIGhh
cyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUgY2VydGlmaWNhdGVWaWV3IGRvZXNuJ3QgZXhp
c3QgYmVmb3JlaGFuZC4KLSAgICBTRkNlcnRpZmljYXRlVmlldyAqY2VydGlmaWNhdGVWaWV3ID0g
W2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVWaWV3XTsKLSAgICBbY2VydGlmaWNhdGVWaWV3
IHNldERpc3BsYXlUcnVzdDpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RWRpdGFibGVU
cnVzdDpOT107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5RGV0YWlsczpZRVNdOwot
ICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWlsc0Rpc2Nsb3NlZDpZRVNdOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHlNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjgyODk4ODE4MWFlYzQ3ZmNhNjI2MzczY2NhNzM5ODMz
NzJiYmFmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbQpAQCAtMCwwICsxLDI5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5LmgiCisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQorCisjaW1wb3J0ICJHbG9iYWxGaW5kSW5QYWdlU3RhdGUuaCIKKyNpbXBv
cnQgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlJlbW90ZVdlYklu
c3BlY3RvclVJUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV0tGcmFtZUluZm8uaCIKKyNpbXBv
cnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldLTmF2aWdhdGlvbkFj
dGlvbi5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldLV2Vi
Vmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCisjaW1wb3J0
ICJXZWJQYWdlR3JvdXAuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiX1dL
SW5zcGVjdG9yQ29uZmlndXJhdGlvbkludGVybmFsLmgiCisjaW1wb3J0IDxTZWN1cml0eUludGVy
ZmFjZS9TRkNlcnRpZmljYXRlUGFuZWwuaD4KKyNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NG
Q2VydGlmaWNhdGVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgor
I2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK0BpbnRlcmZhY2UgV0tSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgOiBOU09iamVjdCA8TlNXaW5kb3dEZWxlZ2F0ZSwgV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPiB7CisgICAgV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5KiBfaW5zcGVjdG9yUHJveHk7Cit9CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OihXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHkqKWluc3BlY3RvclByb3h5OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIKKworLSAoTlNSZWN0KXdpbmRvdzooTlNX
aW5kb3cgKil3aW5kb3cgd2lsbFBvc2l0aW9uU2hlZXQ6KE5TV2luZG93ICopc2hlZXQgdXNpbmdS
ZWN0OihOU1JlY3QpcmVjdAoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIHJl
dHVybiBOU01ha2VSZWN0KDAsIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkuaGVpZ2h0KCks
IF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkud2lkdGgoKSwgMCk7CisgICAgcmV0dXJuIHJl
Y3Q7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk6KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSopaW5zcGVjdG9yUHJveHkKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIF9pbnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5OworCisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3RGlkQmVjb21lQWN0aXZlOihXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sKKyAgICBfaW5z
cGVjdG9yUHJveHktPmRpZEJlY29tZUFjdGl2ZSgpOworfQorCistICh2b2lkKWluc3BlY3RvclZp
ZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
KilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgoreworICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2VG
cm9tQ3Jhc2goKTsKK30KKworLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3Rv
cklzVW5kZXJUZXN0OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIKK3sKKyAgICByZXR1cm4gX2luc3BlY3RvclByb3h5LT5pc1VuZGVyVGVzdCgpOwor
fQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK1dLV2ViVmlldyAqUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6d2ViVmlldygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yVmlldy5nZXQoKS53ZWJWaWV3OworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmRpZEJlY29tZUFjdGl2ZSgpCit7CisgICAgbV9p
bnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6VXBkYXRl
RmluZFN0cmluZyhXZWJLaXQ6OnN0cmluZ0ZvckZpbmQoKSkpOworfQorCitXZWJQYWdlUHJveHkq
IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCkKK3sKKyAgICBtX29iakNBZGFwdGVyID0gYWRvcHROUyhbW1dLUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGFsbG9jXSBpbml0V2l0aFJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6dGhpc10pOworCisgICAgUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4g
Y29uZmlndXJhdGlvbiA9IG1fY2xpZW50LT5jb25maWd1cmF0aW9uRm9yUmVtb3RlSW5zcGVjdG9y
KCp0aGlzKTsKKyAgICBtX2luc3BlY3RvclZpZXcgPSBhZG9wdE5TKFtbV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhDb25maWd1cmF0aW9uOiBXZWJLaXQ6OndyYXBwZXIo
Y29uZmlndXJhdGlvbikgaW5zcGVjdGVkUGFnZTpudWxscHRyXSk7CisgICAgW21faW5zcGVjdG9y
Vmlldy5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKKworICAgIG1fd2lu
ZG93ID0gV2ViSW5zcGVjdG9yVUlQcm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3coTlNaZXJvUmVj
dCwgV2ViSW5zcGVjdG9yVUlQcm94eTo6SW5zcGVjdGlvblRhcmdldFR5cGU6OlJlbW90ZSk7Cisg
ICAgW21fd2luZG93IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworICAgIFttX3dp
bmRvdyBzZXRGcmFtZUF1dG9zYXZlTmFtZTpAIldLUmVtb3RlV2ViSW5zcGVjdG9yV2luZG93RnJh
bWUiXTsKKworICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBtX3dpbmRvdy5nZXQoKS5jb250ZW50
VmlldzsKKyAgICBbd2ViVmlldygpIHNldEZyYW1lOmNvbnRlbnRWaWV3LmJvdW5kc107CisgICAg
W2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6d2ViVmlldygpXTsKKworICAgIHJldHVybiB3ZWJWaWV3
KCktPl9wYWdlLmdldCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmIChtX3dpbmRvdykg
eworICAgICAgICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21fd2luZG93
IGNsb3NlXTsKKyAgICAgICAgbV93aW5kb3cgPSBuaWw7CisgICAgfQorCisgICAgaWYgKG1faW5z
cGVjdG9yVmlldykgeworICAgICAgICBbbV9pbnNwZWN0b3JWaWV3LmdldCgpIHNldERlbGVnYXRl
Om5pbF07CisgICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAo
bV9vYmpDQWRhcHRlcikKKyAgICAgICAgbV9vYmpDQWRhcHRlciA9IG5pbDsKK30KKwordm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIFtO
U1dpbmRvdyByZW1vdmVGcmFtZVVzaW5nTmFtZTpbbV93aW5kb3cgZnJhbWVBdXRvc2F2ZU5hbWVd
XTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nVG9G
cm9udCgpCit7CisgICAgW21fd2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07CisgICAg
W21fd2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjp3ZWJWaWV3KCldOworfQorCit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9y
Y2VTYXZlRGlhbG9nKQoreworICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3RvclVJ
UHJveHlNYWMuCisKKyAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOworICAgIAor
ICAgIE5TVVJMICpwbGF0Zm9ybVVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1
Z2dlc3RlZFVSTCkuZ2V0KCk7CisgICAgaWYgKCFwbGF0Zm9ybVVSTCkgeworICAgICAgICBwbGF0
Zm9ybVVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnN1Z2dlc3RlZFVSTF07CisgICAgICAgIC8v
IFRoZSB1c2VyIG11c3QgY29uZmlybSBuZXcgZmlsZW5hbWVzIGJlZm9yZSB3ZSBjYW4gc2F2ZSB0
byB0aGVtLgorICAgICAgICBmb3JjZVNhdmVEaWFsb2cgPSB0cnVlOworICAgIH0KKyAgICAKKyAg
ICBBU1NFUlQocGxhdGZvcm1VUkwpOworICAgIGlmICghcGxhdGZvcm1VUkwpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIE5lY2Vzc2FyeSBmb3IgdGhlIGJsb2NrIGJlbG93LgorICAgIFN0cmlu
ZyBzdWdnZXN0ZWRVUkxDb3B5ID0gc3VnZ2VzdGVkVVJMOworICAgIFN0cmluZyBjb250ZW50Q29w
eSA9IGNvbnRlbnQ7CisKKyAgICBhdXRvIHNhdmVUb1VSTCA9IF4oTlNVUkwgKmFjdHVhbFVSTCkg
eworICAgICAgICBBU1NFUlQoYWN0dWFsVVJMKTsKKworICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0
dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOworCisgICAgICAgIGlm
IChiYXNlNjRFbmNvZGVkKSB7CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OworICAgICAg
ICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQ
YWRkaW5nKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBSZXRhaW5QdHI8
TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0
ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgW2RhdGFDb250
ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxs
eTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CisKKyAgICAg
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
RGlkU2F2ZShbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSkpOworICAgIH07CisKKyAgICBpZiAo
IWZvcmNlU2F2ZURpYWxvZykgeworICAgICAgICBzYXZlVG9VUkwocGxhdGZvcm1VUkwpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgTlNTYXZlUGFuZWwgKnBhbmVsID0gW05TU2F2ZVBh
bmVsIHNhdmVQYW5lbF07CisgICAgcGFuZWwubmFtZUZpZWxkU3RyaW5nVmFsdWUgPSBwbGF0Zm9y
bVVSTC5sYXN0UGF0aENvbXBvbmVudDsKKworICAgIC8vIElmIHdlIGhhdmUgYSBmaWxlIFVSTCB3
ZSd2ZSBhbHJlYWR5IHNhdmVkIHRoaXMgZmlsZSB0byBhIHBhdGggYW5kCisgICAgLy8gY2FuIHBy
b3ZpZGUgYSBnb29kIGRpcmVjdG9yeSB0byBzaG93LiBPdGhlcndpc2UsIHVzZSB0aGUgc3lzdGVt
J3MKKyAgICAvLyBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgaW5pdGlhbCBkaXJlY3RvcnkgdG8g
c2hvdyBpbiB0aGUgZGlhbG9nLgorICAgIGlmIChwbGF0Zm9ybVVSTC5pc0ZpbGVVUkwpCisgICAg
ICAgIHBhbmVsLmRpcmVjdG9yeVVSTCA9IFtwbGF0Zm9ybVVSTCBVUkxCeURlbGV0aW5nTGFzdFBh
dGhDb21wb25lbnRdOworCisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IF4oTlNJbnRlZ2Vy
IHJlc3VsdCkgeworICAgICAgICBpZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZUNhbmNlbCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBOU01vZGFsUmVz
cG9uc2VPSyk7CisgICAgICAgIHNhdmVUb1VSTChwYW5lbC5VUkwpOworICAgIH07CisKKyAgICBO
U1dpbmRvdyAqd2luZG93ID0gbV93aW5kb3cgPyBtX3dpbmRvdy5nZXQoKSA6IFtOU0FwcCBrZXlX
aW5kb3ddOworICAgIGlmICh3aW5kb3cpCisgICAgICAgIFtwYW5lbCBiZWdpblNoZWV0TW9kYWxG
b3JXaW5kb3c6d2luZG93IGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAg
ICBlbHNlCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFtwYW5lbCBydW5Nb2RhbF0pOworfQor
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgLy8gRklY
TUU6IFNoYXJlIHdpdGggV2ViSW5zcGVjdG9yVUlQcm94eU1hYy4KKworICAgIEFTU0VSVCghc3Vn
Z2VzdGVkVVJMLmlzRW1wdHkoKSk7CisgICAgCisgICAgUmV0YWluUHRyPE5TVVJMPiBhY3R1YWxV
UkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpOworICAgIC8v
IERvIG5vdCBhcHBlbmQgdW5sZXNzIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGNvbmZpcm1lZCB0aGlz
IGZpbGVuYW1lIGluIHNhdmUoKS4KKyAgICBpZiAoIWFjdHVhbFVSTCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTlNGaWxlSGFuZGxlICpoYW5kbGUgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVG
b3JXcml0aW5nVG9VUkw6YWN0dWFsVVJMLmdldCgpIGVycm9yOk5VTExdOworICAgIFtoYW5kbGUg
c2Vla1RvRW5kT2ZGaWxlXTsKKyAgICBbaGFuZGxlIHdyaXRlRGF0YTpbY29udGVudCBkYXRhVXNp
bmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOworICAgIFtoYW5kbGUgY2xvc2VGaWxl
XTsKKworICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSA9IHdlYlZpZXcoKS0+X3BhZ2Uu
Z2V0KCk7CisgICAgaW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yVUk6OkRpZEFwcGVuZChbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSkpOworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3NoZWV0UmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlIGFwcGVhcmFuY2UpCit7CisgICAgTlNBcHBl
YXJhbmNlICpwbGF0Zm9ybUFwcGVhcmFuY2U7CisgICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7Cisg
ICAgY2FzZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZTo6U3lzdGVtOgorICAg
ICAgICBwbGF0Zm9ybUFwcGVhcmFuY2UgPSBuaWw7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZTo6TGlnaHQ6CisgICAgICAgIHBs
YXRmb3JtQXBwZWFyYW5jZSA9IFtOU0FwcGVhcmFuY2UgYXBwZWFyYW5jZU5hbWVkOk5TQXBwZWFy
YW5jZU5hbWVBcXVhXTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjpBcHBlYXJhbmNlOjpEYXJrOgorICAgICAgICBwbGF0Zm9ybUFwcGVhcmFuY2Ug
PSBbTlNBcHBlYXJhbmNlIGFwcGVhcmFuY2VOYW1lZDpOU0FwcGVhcmFuY2VOYW1lRGFya0FxdWFd
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB3ZWJWaWV3KCkuYXBwZWFyYW5jZSA9IHBs
YXRmb3JtQXBwZWFyYW5jZTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX3dpbmRvdy5nZXQo
KTsKKyAgICBBU1NFUlQod2luZG93KTsKKyAgICB3aW5kb3cuYXBwZWFyYW5jZSA9IHBsYXRmb3Jt
QXBwZWFyYW5jZTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgd2ViVmlldygpLT5fcGFnZS0+c3RhcnRXaW5kb3dE
cmFnKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1PcGVu
VVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBbW05TV29ya3NwYWNlIHNo
YXJlZFdvcmtzcGFjZV0gb3BlblVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzp1cmxdXTsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShj
b25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBBU1NFUlQoIWNl
cnRpZmljYXRlSW5mby5pc0VtcHR5KCkpOworCisgICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQ
YW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxs
b2NdIGluaXRdKTsKKworICAgIEFTU0VSVChtX3dpbmRvdyk7CisjaWYgSEFWRShTRUNfVFJVU1Rf
U0VSSUFMSVpBVElPTikKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93
Om1fd2luZG93LmdldCgpIG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29u
dGV4dEluZm86bnVsbHB0ciB0cnVzdDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBzaG93R3JvdXA6
WUVTXTsKKyNlbHNlCisgICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzpt
X3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRl
eHRJbmZvOm51bGxwdHIgY2VydGlmaWNhdGVzOihOU0FycmF5ICopY2VydGlmaWNhdGVJbmZvLmNl
cnRpZmljYXRlQ2hhaW4oKSBzaG93R3JvdXA6WUVTXTsKKyNlbmRpZgorCisgICAgLy8gVGhpcyBt
dXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJ1c3QgcGFuZWwgaGFzIGJlZW4gZGlzcGxheWVkLCBi
ZWNhdXNlIHRoZSBjZXJ0aWZpY2F0ZVZpZXcgZG9lc24ndCBleGlzdCBiZWZvcmVoYW5kLgorICAg
IFNGQ2VydGlmaWNhdGVWaWV3ICpjZXJ0aWZpY2F0ZVZpZXcgPSBbY2VydGlmaWNhdGVQYW5lbCBj
ZXJ0aWZpY2F0ZVZpZXddOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheVRydXN0OllF
U107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXRFZGl0YWJsZVRydXN0Ok5PXTsKKyAgICBbY2Vy
dGlmaWNhdGVWaWV3IHNldERpc3BsYXlEZXRhaWxzOllFU107CisgICAgW2NlcnRpZmljYXRlVmll
dyBzZXREZXRhaWxzRGlzY2xvc2VkOllFU107Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9t
YWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQppbmRleCBmODFmNjk2
ZmExMmY5NmQwNTY2ZDE0OTg0NmFjOTZiZjUwN2Q4OGM2Li5lZDZmNzYzMjkyMDNjMDkwYzE2ZjQ3
Y2Y2MTY1NmJiYWQwMzRhYzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1t
CkBAIC00MCw3ICs0MCw3IEBACiAjaW1wb3J0ICJXS1VJRGVsZWdhdGVQcml2YXRlLmgiCiAjaW1w
b3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
UHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbXBvcnQgIldlYklu
c3BlY3RvclVJUHJveHkuaCIKICNpbXBvcnQgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgogI2lt
cG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJfV0tJbnNwZWN0b3JDb25maWd1cmF0aW9u
SW50ZXJuYWwuaCIKQEAgLTkzLDcgKzkzLDcgQEAgLSAoV0tXZWJWaWV3ICopd2ViVmlldwogewog
ICAgIC8vIENvbnN0cnVjdCBsYXppbHkgc28gdGhlIGNsaWVudCBjYW4gc2V0IHRoZSBkZWxlZ2F0
ZSBiZWZvcmUgdGhlIFdlYlZpZXcgaXMgY3JlYXRlZC4KICAgICBpZiAoIV93ZWJWaWV3KSB7Ci0g
ICAgICAgIE5TUmVjdCBpbml0aWFsRnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIFdlYktpdDo6V2Vi
SW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCwgV2ViS2l0OjpXZWJJbnNwZWN0b3JQ
cm94eTo6aW5pdGlhbFdpbmRvd0hlaWdodCk7CisgICAgICAgIE5TUmVjdCBpbml0aWFsRnJhbWUg
PSBOU01ha2VSZWN0KDAsIDAsIFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5pdGlhbFdp
bmRvd1dpZHRoLCBXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmluaXRpYWxXaW5kb3dIZWln
aHQpOwogICAgICAgICBfd2ViVmlldyA9IGFkb3B0TlMoW1tXS0luc3BlY3RvcldLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTppbml0aWFsRnJhbWUgY29uZmlndXJhdGlvbjpzZWxmLndlYlZp
ZXdDb25maWd1cmF0aW9uXSk7CiAgICAgICAgIFtfd2ViVmlldyBzZXRVSURlbGVnYXRlOnNlbGZd
OwogICAgICAgICBbX3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOnNlbGZdOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JQ
cm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5z
cGVjdG9yUHJveHlNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZGJiZjk4
MWVmODk4NTlkOWY1NzA5ODFkOWFlNGUyMDEyZjVkNWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDgzNyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYklu
c3BlY3RvclByb3h5LmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIkFQSUluc3Bl
Y3RvckNsaWVudC5oIgotI2ltcG9ydCAiQVBJSW5zcGVjdG9yQ29uZmlndXJhdGlvbi5oIgotI2lt
cG9ydCAiQVBJVUlDbGllbnQuaCIKLSNpbXBvcnQgIkdsb2JhbEZpbmRJblBhZ2VTdGF0ZS5oIgot
I2ltcG9ydCAiV0tJbnNwZWN0b3JQcml2YXRlTWFjLmgiCi0jaW1wb3J0ICJXS0luc3BlY3RvclZp
ZXdDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJXS09iamVjdC5oIgotI2ltcG9ydCAiV0tWaWV3SW50
ZXJuYWwuaCIKLSNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJJbnNw
ZWN0b3JVSU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIKLSNpbXBvcnQgIldl
YlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiX1dLSW5zcGVjdG9yQ29uZmlndXJhdGlvbkludGVybmFs
LmgiCi0jaW1wb3J0ICJfV0tJbnNwZWN0b3JJbnRlcm5hbC5oIgotI2ltcG9ydCAiX1dLSW5zcGVj
dG9yV2luZG93LmgiCi0jaW1wb3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRlUGFu
ZWwuaD4KLSNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVWaWV3Lmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2ltcG9ydCA8V2ViQ29yZS9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0
cmluZ3MuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotCi1zdGF0aWMgY29uc3QgTlNV
SW50ZWdlciB3aW5kb3dTdHlsZU1hc2sgPSBOU1dpbmRvd1N0eWxlTWFza1RpdGxlZCB8IE5TV2lu
ZG93U3R5bGVNYXNrQ2xvc2FibGUgfCBOU1dpbmRvd1N0eWxlTWFza01pbmlhdHVyaXphYmxlIHwg
TlNXaW5kb3dTdHlsZU1hc2tSZXNpemFibGUgfCBOU1dpbmRvd1N0eWxlTWFza0Z1bGxTaXplQ29u
dGVudFZpZXc7Ci0KLS8vIFRoZSB0aW1lIHdlIGtlZXAgb3VyIFdlYlZpZXcgYWxpdmUgYmVmb3Jl
IGNsb3NpbmcgaXQgYW5kIGl0cyBwcm9jZXNzLgotLy8gUmV1c2luZyB0aGUgV2ViVmlldyBpbXBy
b3ZlcyBzdGFydCB1cCB0aW1lIGZvciBwZW9wbGUgdGhhdCBqdW1wIGluIGFuZCBvdXQgb2YgdGhl
IEluc3BlY3Rvci4KLXN0YXRpYyBjb25zdCBTZWNvbmRzIHdlYlZpZXdDbG9zZVRpbWVvdXQgeyAx
X21pbiB9OwotCi1zdGF0aWMgdm9pZCoga1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRl
eHQgPSAma1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHQ7Ci0KLUBpbnRlcmZhY2Ug
V0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyICgpIDxOU1dpbmRvd0RlbGVnYXRlLCBXS0lu
c3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQ
cm94eTsKLS0gKHZvaWQpaW52YWxpZGF0ZTsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tX
ZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIHsKLSAgICBXZWJLaXQ6OldlYkluc3BlY3RvclBy
b3h5KiBfaW5zcGVjdG9yUHJveHk7Ci19Ci0KLS0gKFdLSW5zcGVjdG9yUmVmKWluc3BlY3RvclJl
ZgotewotICAgIHJldHVybiB0b0FQSShfaW5zcGVjdG9yUHJveHkpOwotfQotCi0tIChfV0tJbnNw
ZWN0b3IgKilpbnNwZWN0b3IKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBy
ZXR1cm4gd3JhcHBlcigqX2luc3BlY3RvclByb3h5KTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpXZWJJbnNw
ZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHkKLXsKLSAgICBBU1NFUlRfQVJHKGluc3BlY3RvclBy
b3h5LCBpbnNwZWN0b3JQcm94eSk7Ci0KLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIFVucmV0YWluZWQgdG8gYXZvaWQgYSByZWZl
cmVuY2UgY3ljbGUuCi0gICAgX2luc3BlY3RvclByb3h5ID0gaW5zcGVjdG9yUHJveHk7Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClpbnZhbGlkYXRlCi17Ci0gICAgX2luc3BlY3Rv
clByb3h5ID0gbnVsbHB0cjsKLX0KLQotLSAoTlNSZWN0KXdpbmRvdzooTlNXaW5kb3cgKil3aW5k
b3cgd2lsbFBvc2l0aW9uU2hlZXQ6KE5TV2luZG93ICopc2hlZXQgdXNpbmdSZWN0OihOU1JlY3Qp
cmVjdAotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIHJldHVybiBOU01ha2VS
ZWN0KDAsIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkuaGVpZ2h0KCksIF9pbnNwZWN0b3JQ
cm94eS0+c2hlZXRSZWN0KCkud2lkdGgoKSwgMCk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLS0g
KHZvaWQpd2luZG93RGlkTW92ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAg
ICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0Zy
YW1lRGlkQ2hhbmdlKCk7Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkUmVzaXplOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAg
IF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKLX0KLQotLSAodm9pZCl3
aW5kb3dXaWxsQ2xvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYg
KF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZSgpOwotfQot
Ci0tICh2b2lkKXdpbmRvd0RpZEVudGVyRnVsbFNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9y
UHJveHktPndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKTsKLX0KLQotLSAodm9pZCl3aW5kb3dE
aWRFeGl0RnVsbFNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBp
ZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0Z1bGxT
Y3JlZW5EaWRDaGFuZ2UoKTsKLX0KLQotLSAodm9pZClpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFu
Z2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgLy8gUmVzaXppbmcgdGhl
IHZpZXdzIHdoaWxlIGluc2lkZSB0aGlzIG5vdGlmaWNhdGlvbiBjYW4gbGVhZCB0byBiYWQgcmVz
dWx0cyB3aGVuIGVudGVyaW5nCi0gICAgLy8gb3IgZXhpdGluZyBmdWxsIHNjcmVlbi4gVG8gYXZv
aWQgdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0gdGhlIHdvcmsgYWZ0ZXIgYSBkZWxheS4gV2Ugb25s
eQotICAgIC8vIGRlcGVuZCBvbiB0aGlzIGZvciBlbmZvcmNpbmcgdGhlIGhlaWdodCBjb25zdHJh
aW50cywgc28gYSBzbWFsbCBkZWxheSBpc24ndCB0ZXJyaWJsZS4gTW9zdAotICAgIC8vIG9mIHRo
ZSB0aW1lIHRoZSB2aWV3cyB3aWxsIGFscmVhZHkgaGF2ZSB0aGUgY29ycmVjdCBmcmFtZXMgYmVj
YXVzZSBvZiBhdXRvcmVzaXppbmcgbWFza3MuCi0KLSAgICBkaXNwYXRjaF9hZnRlcihESVNQQVRD
SF9USU1FX05PVywgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgaWYgKF9p
bnNwZWN0b3JQcm94eSkKLSAgICAgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkVmll
d0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9y
S2V5UGF0aDooTlNTdHJpbmcgKilrZXlQYXRoIG9mT2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihO
U0RpY3Rpb25hcnk8TlNLZXlWYWx1ZUNoYW5nZUtleSwgaWQ+ICopY2hhbmdlIGNvbnRleHQ6KHZv
aWQgKiljb250ZXh0Ci17Ci0gICAgaWYgKGNvbnRleHQgIT0ga1dpbmRvd0NvbnRlbnRMYXlvdXRP
YnNlcnZlckNvbnRleHQpIHsKLSAgICAgICAgW3N1cGVyIG9ic2VydmVWYWx1ZUZvcktleVBhdGg6
a2V5UGF0aCBvZk9iamVjdDpvYmplY3QgY2hhbmdlOmNoYW5nZSBjb250ZXh0OmNvbnRleHRdOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IG9iamVjdDsK
LSAgICBBU1NFUlQoW3dpbmRvdyBpc0tpbmRPZkNsYXNzOltOU1dpbmRvdyBjbGFzc11dKTsKLSAg
ICBpZiAod2luZG93LmluTGl2ZVJlc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGlzcGF0
Y2hfYWZ0ZXIoRElTUEFUQ0hfVElNRV9OT1csIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57
Ci0gICAgICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgICAgICBfaW5zcGVjdG9yUHJv
eHktPmluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSgpOwotICAgIH0pOwotfQotCi0vLyBNQVJL
OiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGUgbWV0aG9kcwotCi0tICh2b2lkKWlu
c3BlY3RvclZpZXdDb250cm9sbGVyRGlkQmVjb21lQWN0aXZlOihXS0luc3BlY3RvclZpZXdDb250
cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsKLSAgICBpZiAoX2luc3BlY3RvclBy
b3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmRpZEJlY29tZUFjdGl2ZSgpOwotfQotCi0t
ICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewotICAgIGlmIChf
aW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgp
OwotfQotCi0tIChCT09MKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRl
c3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgot
ewotICAgIHJldHVybiBfaW5zcGVjdG9yUHJveHkgPyBfaW5zcGVjdG9yUHJveHktPmlzVW5kZXJU
ZXN0KCkgOiBmYWxzZTsKLX0KLQotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjooV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyIHdpbGxNb3Zl
VG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93Ci17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94
eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT5hdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93
KGluc3BlY3RvclZpZXdDb250cm9sbGVyLndlYlZpZXcud2luZG93KTsKLX0KLQotLSAodm9pZClp
bnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQ
cm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT5hdHRhY2htZW50RGlkTW92ZVRvV2luZG93
KGluc3BlY3RvclZpZXdDb250cm9sbGVyLndlYlZpZXcud2luZG93KTsKLX0KLQotLSAodm9pZClp
bnNwZWN0b3JWaWV3Q29udHJvbGxlcjooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3Bl
Y3RvclZpZXdDb250cm9sbGVyIG9wZW5VUkxFeHRlcm5hbGx5OihOU1VSTCAqKXVybAotewotICAg
IGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+b3BlblVSTEV4
dGVybmFsbHkodXJsLmFic29sdXRlU3RyaW5nKTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpkaWRCZWNvbWVBY3RpdmUoKQotewotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OlVwZGF0ZUZpbmRTdHJpbmcoV2ViS2l0OjpzdHJpbmdGb3JGaW5k
KCkpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNobWVudFZpZXdEaWRDaGFu
Z2UoTlNWaWV3ICpvbGRWaWV3LCBOU1ZpZXcgKm5ld1ZpZXcpCi17Ci0gICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdl
dCgpIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om9sZFZpZXdd
OwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
bV9vYmpDQWRhcHRlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1l
RGlkQ2hhbmdlOikgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6
bmV3Vmlld107Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAgICBhdHRhY2gobV9hdHRh
Y2htZW50U2lkZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnRXaWxs
TW92ZUZyb21XaW5kb3coTlNXaW5kb3cgKm9sZFdpbmRvdykKLXsKLSAgICBpZiAobV9pc09ic2Vy
dmluZ0NvbnRlbnRMYXlvdXRSZWN0KSB7Ci0gICAgICAgIG1faXNPYnNlcnZpbmdDb250ZW50TGF5
b3V0UmVjdCA9IGZhbHNlOwotICAgICAgICBbb2xkV2luZG93IHJlbW92ZU9ic2VydmVyOm1fb2Jq
Q0FkYXB0ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBjb250ZXh0OmtX
aW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0XTsKLSAgICB9Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coTlNXaW5kb3cgKm5ld1dp
bmRvdykKLXsKLSAgICBpZiAobV9pc0F0dGFjaGVkICYmICEhbmV3V2luZG93KSB7Ci0gICAgICAg
IG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCA9IHRydWU7Ci0gICAgICAgIFtuZXdXaW5k
b3cgYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBmb3JLZXlQYXRoOkAiY29udGVudExh
eW91dFJlY3QiIG9wdGlvbnM6MCBjb250ZXh0OmtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJD
b250ZXh0XTsKLSAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgfQot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdW5zaWduZWQgbGV2ZWwgPSBpbnNwZWN0aW9uTGV2ZWwoKTsKLSAgICBpZiAobGV2ZWwg
PiAxKSB7Ci0gICAgICAgIE5TU3RyaW5nICpkZWJ1Z1RpdGxlID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6V0VCX1VJX1NUUklORygiV2ViIEluc3BlY3RvciBbJWRdIOKAlCAlQCIsICJXZWIg
SW5zcGVjdG9yIHdpbmRvdyB0aXRsZSB3aGVuIGluc3BlY3RpbmcgV2ViIEluc3BlY3RvciIpLCBs
ZXZlbCwgKE5TU3RyaW5nICopbV91cmxTdHJpbmddOwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5k
b3cgc2V0VGl0bGU6ZGVidWdUaXRsZV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTlNTdHJpbmcg
KnRpdGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6V0VCX1VJX1NUUklORygiV2ViIElu
c3BlY3RvciDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUiKSwgKE5TU3RyaW5n
ICopbV91cmxTdHJpbmddOwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0VGl0bGU6dGl0
bGVdOwotICAgIH0KLX0KLQotUmV0YWluUHRyPE5TV2luZG93PiBXZWJJbnNwZWN0b3JQcm94eTo6
Y3JlYXRlRnJvbnRlbmRXaW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25U
YXJnZXRUeXBlIHRhcmdldFR5cGUpCi17Ci0gICAgTlNSZWN0IHdpbmRvd0ZyYW1lID0gIU5TSXNF
bXB0eVJlY3Qoc2F2ZWRXaW5kb3dGcmFtZSkgPyBzYXZlZFdpbmRvd0ZyYW1lIDogTlNNYWtlUmVj
dCgwLCAwLCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRpYWxXaW5kb3dIZWlnaHQpOwotICAgIGF1
dG8gd2luZG93ID0gYWRvcHROUyhbW19XS0luc3BlY3RvcldpbmRvdyBhbGxvY10gaW5pdFdpdGhD
b250ZW50UmVjdDp3aW5kb3dGcmFtZSBzdHlsZU1hc2s6d2luZG93U3R5bGVNYXNrIGJhY2tpbmc6
TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT10pOwotICAgIFt3aW5kb3cgc2V0TWluU2l6
ZTpOU01ha2VTaXplKG1pbmltdW1XaW5kb3dXaWR0aCwgbWluaW11bVdpbmRvd0hlaWdodCldOwot
ICAgIFt3aW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKLSAgICBbd2luZG93IHNldENv
bGxlY3Rpb25CZWhhdmlvcjooW3dpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3JdIHwgTlNXaW5kb3dD
b2xsZWN0aW9uQmVoYXZpb3JGdWxsU2NyZWVuUHJpbWFyeSldOwotCi0gICAgYm9vbCBmb3JSZW1v
dGVUYXJnZXQgPSB0YXJnZXRUeXBlID09IEluc3BlY3Rpb25UYXJnZXRUeXBlOjpSZW1vdGU7Ci0g
ICAgW3dpbmRvdyBzZXRGb3JSZW1vdGVUYXJnZXQ6Zm9yUmVtb3RlVGFyZ2V0XTsKLQotICAgIENH
RmxvYXQgYXBwcm94aW1hdGVseUhhbGZTY3JlZW5TaXplID0gKFt3aW5kb3cgc2NyZWVuXS5mcmFt
ZS5zaXplLndpZHRoIC8gMikgLSA0OwotICAgIENHRmxvYXQgbWluaW11bUZ1bGxTY3JlZW5XaWR0
aCA9IHN0ZDo6bWF4PENHRmxvYXQ+KDYzNiwgYXBwcm94aW1hdGVseUhhbGZTY3JlZW5TaXplKTsK
LSAgICBbd2luZG93IHNldE1pbkZ1bGxTY3JlZW5Db250ZW50U2l6ZTpOU01ha2VTaXplKG1pbmlt
dW1GdWxsU2NyZWVuV2lkdGgsIG1pbmltdW1XaW5kb3dIZWlnaHQpXTsKLSAgICBbd2luZG93IHNl
dENvbGxlY3Rpb25CZWhhdmlvcjooW3dpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3JdIHwgTlNXaW5k
b3dDb2xsZWN0aW9uQmVoYXZpb3JGdWxsU2NyZWVuQWxsb3dzVGlsaW5nKV07Ci0KLSAgICBbd2lu
ZG93IHNldFRpdGxlYmFyQXBwZWFyc1RyYW5zcGFyZW50OllFU107Ci0KLSAgICAvLyBDZW50ZXIg
dGhlIHdpbmRvdyBpZiB0aGUgc2F2ZWQgZnJhbWUgd2FzIGVtcHR5LgotICAgIGlmIChOU0lzRW1w
dHlSZWN0KHNhdmVkV2luZG93RnJhbWUpKQotICAgICAgICBbd2luZG93IGNlbnRlcl07Ci0KLSAg
ICByZXR1cm4gd2luZG93OwotfQotCi1XZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgQVNTRVJUKGluc3BlY3RlZFBhZ2Uo
KSk7Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RvclBhZ2UpOwotCi0gICAgbV9jbG9zZUZyb250ZW5k
QWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOwotCi0gICAgaWYgKG1faW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIpIHsKLSAgICAgICAgQVNTRVJUKG1fb2JqQ0FkYXB0ZXIpOwotICAgICAgICByZXR1
cm4gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLmdldCgpOwotICAg
IH0KLQotICAgIG1fb2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tXZWJJbnNwZWN0b3JQcm94eU9i
akNBZGFwdGVyIGFsbG9jXSBpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OnRoaXNdKTsKLSAgICBO
U1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1l
bnRWaWV3KCk7Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRP
YnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0ZWRW
aWV3RnJhbWVEaWRDaGFuZ2U6KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9u
IG9iamVjdDppbnNwZWN0ZWRWaWV3XTsKLQotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGluc3Bl
Y3RlZFBhZ2UoKS0+dWlDbGllbnQoKS5jb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3IoKmlu
c3BlY3RlZFBhZ2UoKSwgICp0aGlzKTsKLSAgICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0g
YWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoQ29uZmln
dXJhdGlvbjogV2ViS2l0Ojp3cmFwcGVyKGNvbmZpZ3VyYXRpb24uZ2V0KCkpIGluc3BlY3RlZFBh
Z2U6aW5zcGVjdGVkUGFnZSgpXSk7Ci0gICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuZ2V0
KCkgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0KLSAgICBXZWJQYWdlUHJveHkg
Kmluc3BlY3RvclBhZ2UgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+X3Bh
Z2UuZ2V0KCk7Ci0gICAgQVNTRVJUKGluc3BlY3RvclBhZ2UpOwotCi0gICAgcmV0dXJuIGluc3Bl
Y3RvclBhZ2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJv
bnRlbmRXaW5kb3coKQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JXaW5kb3cpOwotCi0gICAg
TlNTdHJpbmcgKnNhdmVkV2luZG93RnJhbWVTdHJpbmcgPSBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VH
cm91cCgpLnByZWZlcmVuY2VzKCkuaW5zcGVjdG9yV2luZG93RnJhbWUoKTsKLSAgICBOU1JlY3Qg
c2F2ZWRXaW5kb3dGcmFtZSA9IE5TUmVjdEZyb21TdHJpbmcoc2F2ZWRXaW5kb3dGcmFtZVN0cmlu
Zyk7Ci0KLSAgICBtX2luc3BlY3RvcldpbmRvdyA9IFdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVG
cm9udGVuZFdpbmRvdyhzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6TG9j
YWwpOwotICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdl
dCgpXTsKLQotICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZpZXdD
b250cm9sbGVyIHdlYlZpZXddOwotICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBbbV9pbnNwZWN0
b3JXaW5kb3cgY29udGVudFZpZXddOwotICAgIGluc3BlY3RvclZpZXcuZnJhbWUgPSBbY29udGVu
dFZpZXcgYm91bmRzXTsKLSAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzppbnNwZWN0b3JWaWV3
XTsKLQotICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Ci0gICAgYXBwbHlGb3JjZWRB
cHBlYXJhbmNlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRQ
YWdlKCkKLXsKLSAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCB8fCAhbV9pbnNwZWN0b3JXaW5kb3cp
OwotCi0gICAgaWYgKG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIpIHsKLSAgICAgICAgW21faW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgbV9p
bnNwZWN0b3JWaWV3Q29udHJvbGxlciA9IG5pbDsKLSAgICB9Ci0KLSAgICBpZiAobV9vYmpDQWRh
cHRlcikgewotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJl
bW92ZU9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOwotCi0gICAgICAgIFttX29iakNBZGFw
dGVyIGludmFsaWRhdGVdOwotICAgICAgICBtX29iakNBZGFwdGVyID0gbmlsOwotICAgIH0KLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRp
bWVyRmlyZWQoKQotewotICAgIGNsb3NlRnJvbnRlbmRQYWdlKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAg
IGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0
RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNsb3NlXTsKLSAgICAg
ICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7Ci0gICAgfQotCi0gICAgbV9jbG9zZUZyb250ZW5k
QWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RhcnRPbmVTaG90KHdlYlZpZXdDbG9zZVRpbWVvdXQpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQot
ewotICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKLQotICAg
IGNsb3NlRnJvbnRlbmRQYWdlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGlt
ZXIuc3RvcCgpOwotCi0gICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkKLXsKLSAgICBpZiAobV9pc0F0dGFjaGVkKSB7Ci0g
ICAgICAgIHBsYXRmb3JtRGV0YWNoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldERl
bGVnYXRlOm5pbF07Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07Ci0gICAgICAg
IG1faW5zcGVjdG9yV2luZG93ID0gbmlsOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKLXsKLSAgICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VH
cm91cCgpLnByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yV2luZG93RnJhbWUoKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQotewotICAgIC8v
IElmIHRoZSBXZWIgSW5zcGVjdG9yIGlzIG5vIGxvbmdlciBpbiB0aGUgc2FtZSB3aW5kb3cgYXMg
dGhlIGluc3BlY3RlZCB2aWV3LAotICAgIC8vIHRoZW4gd2UgbmVlZCB0byByZW9wZW4gdGhlIElu
c3BlY3RvciB0byBnZXQgaXQgYXR0YWNoZWQgdG8gdGhlIHJpZ2h0IHdpbmRvdy4KLSAgICAvLyBU
aGlzIGNhbiBoYXBwZW4gd2hlbiBkcmFnZ2luZyB0YWJzIHRvIGFub3RoZXIgd2luZG93IGluIFNh
ZmFyaS4KLSAgICBpZiAobV9pc0F0dGFjaGVkICYmIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVy
IHdlYlZpZXddLndpbmRvdyAhPSBpbnNwZWN0ZWRQYWdlKCktPnBsYXRmb3JtV2luZG93KCkpIHsK
LSAgICAgICAgb3BlbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUUg
PHJkYXI6Ly9wcm9ibGVtLzEwOTM3Njg4PjogdGhpcyB3aWxsIG5vdCBicmluZyBhIGJhY2tncm91
bmQgdGFiIGluIFNhZmFyaSB0byB0aGUgZnJvbnQsIG9ubHkgaXRzIHdpbmRvdy4KLSAgICBbW21f
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93IG1ha2VLZXlBbmRPcmRlckZy
b250Om5pbF07Ci0gICAgW1ttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRv
dyBtYWtlRmlyc3RSZXNwb25kZXI6W21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld11d
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFn
ZVRvRnJvbnQoKQotewotICAgIFtpbnNwZWN0ZWRQYWdlKCktPnBsYXRmb3JtV2luZG93KCkgbWFr
ZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1Jc0Zyb250KCkKLXsKLSAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTA5Mzc2ODg+
OiB0aGlzIHdpbGwgbm90IHJldHVybiBmYWxzZSBmb3IgYSBiYWNrZ3JvdW5kIHRhYiBpbiBTYWZh
cmksIG9ubHkgYSBiYWNrZ3JvdW5kIHdpbmRvdy4KLSAgICByZXR1cm4gbV9pc1Zpc2libGUgJiYg
W21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93LmlzTWFpbldpbmRvdzsK
LX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQ
cm9jZXNzQ2FuQXR0YWNoKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3Rl
ZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBpZiAoW1dLSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgdmlld0lzSW5zcGVjdG9yV2ViVmlldzppbnNwZWN0ZWRWaWV3XSkKLSAg
ICAgICAgcmV0dXJuIHdlYlByb2Nlc3NDYW5BdHRhY2g7Ci0KLSAgICBpZiAoaW5zcGVjdGVkVmll
dy5oaWRkZW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IG1h
eGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NTsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQg
bWluaW11bUF0dGFjaGVkV2lkdGggPSA1MDA7Ci0KLSAgICBOU1JlY3QgaW5zcGVjdGVkVmlld0Zy
YW1lID0gaW5zcGVjdGVkVmlldy5mcmFtZTsKLQotICAgIGZsb2F0IG1heGltdW1BdHRhY2hlZEhl
aWdodCA9IE5TSGVpZ2h0KGluc3BlY3RlZFZpZXdGcmFtZSkgKiBtYXhpbXVtQXR0YWNoZWRIZWln
aHRSYXRpbzsKLSAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGltdW1BdHRh
Y2hlZEhlaWdodCAmJiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBOU1dpZHRoKGluc3BlY3RlZFZp
ZXdGcmFtZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZh
aWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAgICAvLyBEbyBub3RoaW5nLgot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2Uo
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKLXsKLSAgICBt
X2Zyb250ZW5kQXBwZWFyYW5jZSA9IGFwcGVhcmFuY2U7Ci0KLSAgICBhcHBseUZvcmNlZEFwcGVh
cmFuY2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRV
UkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIG1fdXJsU3RyaW5nID0g
dXJsU3RyaW5nOwotCi0gICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlm
aWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUlu
Zm8uaXNFbXB0eSgpKTsKLQotICAgIFJldGFpblB0cjxTRkNlcnRpZmljYXRlUGFuZWw+IGNlcnRp
ZmljYXRlUGFuZWwgPSBhZG9wdE5TKFtbU0ZDZXJ0aWZpY2F0ZVBhbmVsIGFsbG9jXSBpbml0XSk7
Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93OwotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykKLSAg
ICAgICAgd2luZG93ID0gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCk7Ci0gICAgZWxzZQotICAgICAg
ICB3aW5kb3cgPSBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10gd2luZG93XTsK
LQotICAgIGlmICghd2luZG93KQotICAgICAgICB3aW5kb3cgPSBbTlNBcHAga2V5V2luZG93XTsK
LQotI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCi0gICAgW2NlcnRpZmljYXRlUGFu
ZWwgYmVnaW5TaGVldEZvcldpbmRvdzp3aW5kb3cgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5kU2Vs
ZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIHRydXN0OmNlcnRpZmljYXRlSW5mby50cnVz
dCgpIHNob3dHcm91cDpZRVNdOwotI2Vsc2UKLSAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNo
ZWV0Rm9yV2luZG93OndpbmRvdyBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxM
IGNvbnRleHRJbmZvOm51bGxwdHIgY2VydGlmaWNhdGVzOihOU0FycmF5ICopY2VydGlmaWNhdGVJ
bmZvLmNlcnRpZmljYXRlQ2hhaW4oKSBzaG93R3JvdXA6WUVTXTsKLSNlbmRpZgotCi0gICAgLy8g
VGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJ1c3QgcGFuZWwgaGFzIGJlZW4gZGlzcGxh
eWVkLCBiZWNhdXNlIHRoZSBjZXJ0aWZpY2F0ZVZpZXcgZG9lc24ndCBleGlzdCBiZWZvcmVoYW5k
LgotICAgIFNGQ2VydGlmaWNhdGVWaWV3ICpjZXJ0aWZpY2F0ZVZpZXcgPSBbY2VydGlmaWNhdGVQ
YW5lbCBjZXJ0aWZpY2F0ZVZpZXddOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheVRy
dXN0OllFU107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXRFZGl0YWJsZVRydXN0Ok5PXTsKLSAg
ICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlEZXRhaWxzOllFU107Ci0gICAgW2NlcnRpZmlj
YXRlVmlldyBzZXREZXRhaWxzRGlzY2xvc2VkOllFU107Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQot
ewotICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgTlNVUkwg
KnBsYXRmb3JtVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJM
KS5nZXQoKTsKLSAgICBpZiAoIXBsYXRmb3JtVVJMKSB7Ci0gICAgICAgIHBsYXRmb3JtVVJMID0g
W05TVVJMIFVSTFdpdGhTdHJpbmc6c3VnZ2VzdGVkVVJMXTsKLSAgICAgICAgLy8gVGhlIHVzZXIg
bXVzdCBjb25maXJtIG5ldyBmaWxlbmFtZXMgYmVmb3JlIHdlIGNhbiBzYXZlIHRvIHRoZW0uCi0g
ICAgICAgIGZvcmNlU2F2ZURpYWxvZyA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChw
bGF0Zm9ybVVSTCk7Ci0gICAgaWYgKCFwbGF0Zm9ybVVSTCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUgYmxvY2sgYmVsb3cuCi0gICAgU3RyaW5nIHN1Z2dlc3Rl
ZFVSTENvcHkgPSBzdWdnZXN0ZWRVUkw7Ci0gICAgU3RyaW5nIGNvbnRlbnRDb3B5ID0gY29udGVu
dDsKLQotICAgIGF1dG8gc2F2ZVRvVVJMID0gXihOU1VSTCAqYWN0dWFsVVJMKSB7Ci0gICAgICAg
IEFTU0VSVChhY3R1YWxVUkwpOwotCi0gICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAu
c2V0KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7Ci0KLSAgICAgICAgaWYgKGJhc2U2NEVu
Y29kZWQpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAo
IWJhc2U2NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRh
dGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0
YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7Ci0gICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVU
b1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKLQotICAgICAgICBtX2luc3Bl
Y3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxV
UkwgYWJzb2x1dGVTdHJpbmddKSk7Ci0gICAgfTsKLQotICAgIGlmICghZm9yY2VTYXZlRGlhbG9n
KSB7Ci0gICAgICAgIHNhdmVUb1VSTChwbGF0Zm9ybVVSTCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBOU1NhdmVQYW5lbCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsK
LSAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29t
cG9uZW50OwotCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2
ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKLSAgICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGly
ZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0ncwotICAgIC8vIGRlZmF1
bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRpcmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFs
b2cuCi0gICAgaWYgKHBsYXRmb3JtVVJMLmlzRmlsZVVSTCkKLSAgICAgICAgcGFuZWwuZGlyZWN0
b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07Ci0K
LSAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gXihOU0ludGVnZXIgcmVzdWx0KSB7Ci0gICAg
ICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlQ2FuY2VsKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBBU1NFUlQocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKTsKLSAgICAg
ICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7Ci0gICAgfTsKLQotICAgIE5TV2luZG93ICp3aW5kb3cg
PSBtX2luc3BlY3RvcldpbmRvdyA/IG1faW5zcGVjdG9yV2luZG93LmdldCgpIDogW05TQXBwIGtl
eVdpbmRvd107Ci0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgW3BhbmVsIGJlZ2luU2hlZXRNb2Rh
bEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwot
ICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgQVNTRVJUKCFzdWdn
ZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8TlNVUkw+IGFjdHVhbFVS
TCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCk7Ci0gICAgLy8g
RG8gbm90IGFwcGVuZCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFscmVhZHkgY29uZmlybWVkIHRoaXMg
ZmlsZW5hbWUgaW4gc2F2ZSgpLgotICAgIGlmICghYWN0dWFsVVJMKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBOU0ZpbGVIYW5kbGUgKmhhbmRsZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZv
cldyaXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0KCkgZXJyb3I6TlVMTF07Ci0gICAgW2hhbmRsZSBz
ZWVrVG9FbmRPZkZpbGVdOwotICAgIFtoYW5kbGUgd3JpdGVEYXRhOltjb250ZW50IGRhdGFVc2lu
Z0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgW2hhbmRsZSBjbG9zZUZpbGVd
OwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
RGlkQXBwZW5kKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OndpbmRvd0ZyYW1lRGlkQ2hhbmdlKCkKLXsKLSAgICBBU1NFUlQoIW1faXNB
dHRhY2hlZCk7Ci0gICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKLSAgICBBU1NFUlQobV9pbnNwZWN0
b3JXaW5kb3cpOwotCi0gICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUgfHwgIW1f
aW5zcGVjdG9yV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1N0cmluZyAqZnJhbWVT
dHJpbmcgPSBOU1N0cmluZ0Zyb21SZWN0KFttX2luc3BlY3RvcldpbmRvdyBmcmFtZV0pOwotICAg
IGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JX
aW5kb3dGcmFtZShmcmFtZVN0cmluZyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Ondp
bmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKQotewotICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkKTsK
LSAgICBBU1NFUlQobV9pc1Zpc2libGUpOwotICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7
Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkIHx8ICFtX2lzVmlzaWJsZSB8fCAhbV9pbnNwZWN0b3JX
aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQo
cGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKCkpKTsgICAgCi19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zsb2F0IGN1cnJlbnREaW1l
bnNpb24pCi17Ci0gICAgaWYgKCFtX2lzVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFtX2lzQXR0YWNoZWQpIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGF0dGFjaCBhdmFp
bGFiaWxpdHkgY2hhbmdlZC4gV2UgbmVlZCB0byBkbyB0aGlzIGhlcmUgaW4gY2FzZQotICAgICAg
ICAvLyB0aGUgYXR0YWNobWVudCB2aWV3IGlzIG5vdCB0aGUgV0tWaWV3LgotICAgICAgICBhdHRh
Y2hBdmFpbGFiaWxpdHlDaGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgp
LT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmll
dyA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOwotCi0gICAgTlNSZWN0IGlu
c3BlY3RlZFZpZXdGcmFtZSA9IGluc3BlY3RlZFZpZXcuZnJhbWU7Ci0gICAgTlNSZWN0IG9sZElu
c3BlY3RvclZpZXdGcmFtZSA9IGluc3BlY3RvclZpZXcuZnJhbWU7Ci0gICAgTlNSZWN0IG5ld0lu
c3BlY3RvclZpZXdGcmFtZSA9IE5TWmVyb1JlY3Q7Ci0gICAgTlNSZWN0IHBhcmVudEJvdW5kcyA9
IGluc3BlY3RlZFZpZXcuc3VwZXJ2aWV3LmJvdW5kczsKLSAgICBDR0Zsb2F0IGluc3BlY3RlZFZp
ZXdUb3AgPSBOU01heFkoaW5zcGVjdGVkVmlld0ZyYW1lKTsKLQotICAgIHN3aXRjaCAobV9hdHRh
Y2htZW50U2lkZSkgewotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTogewotICAgICAg
ICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCi0gICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uID0g
TlNIZWlnaHQob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKLQotICAgICAgICBDR0Zsb2F0IHBhcmVu
dEhlaWdodCA9IE5TSGVpZ2h0KHBhcmVudEJvdW5kcyk7Ci0gICAgICAgIENHRmxvYXQgaW5zcGVj
dG9ySGVpZ2h0ID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRh
Y2hlZFdpbmRvd0hlaWdodChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRIZWlnaHQpOwotCi0gICAg
ICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNv
IGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuCi0gICAgICAgIGluc3BlY3RlZFZpZXdGcmFt
ZSA9IE5TTWFrZVJlY3QoMCwgaW5zcGVjdG9ySGVpZ2h0LCBOU1dpZHRoKHBhcmVudEJvdW5kcyks
IGluc3BlY3RlZFZpZXdUb3AgLSBpbnNwZWN0b3JIZWlnaHQpOwotICAgICAgICBuZXdJbnNwZWN0
b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVjdGVkVmlld0ZyYW1l
KSwgaW5zcGVjdG9ySGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBB
dHRhY2htZW50U2lkZTo6UmlnaHQ6IHsKLSAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQot
ICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9yVmlld0Zy
YW1lKTsKLQotICAgICAgICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJlbnRCb3Vu
ZHMpOwotICAgICAgICBDR0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnREaW1lbnNp
b24sIHBhcmVudFdpZHRoKTsKLQotICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9u
IG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLiBC
dXQgZG9uJ3QgdXNlIHRoYXQKLSAgICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUgaW5zcGVj
dG9yIHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMgdGhlIGlu
c3BlY3RlZCB2aWV3LgotICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAs
IDAsIHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3RlZFZpZXdUb3ApOwotICAg
ICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KHBhcmVudFdpZHRoIC0gaW5z
cGVjdG9yV2lkdGgsIDAsIGluc3BlY3RvcldpZHRoLCBOU0hlaWdodChwYXJlbnRCb3VuZHMpKTsK
LQotICAgICAgICBpZiAoTlNXaW5kb3cgKmluc3BlY3RvcldpbmRvdyA9IGluc3BlY3RvclZpZXcu
d2luZG93KSB7Ci0gICAgICAgICAgICBOU1JlY3QgY29udGVudExheW91dFJlY3QgPSBbaW5zcGVj
dGVkVmlldy5zdXBlcnZpZXcgY29udmVydFJlY3Q6aW5zcGVjdG9yV2luZG93LmNvbnRlbnRMYXlv
dXRSZWN0IGZyb21WaWV3Om5pbF07Ci0gICAgICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUg
PSBOU0ludGVyc2VjdGlvblJlY3QobmV3SW5zcGVjdG9yVmlld0ZyYW1lLCBjb250ZW50TGF5b3V0
UmVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBBdHRh
Y2htZW50U2lkZTo6TGVmdDogewotICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCi0gICAg
ICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gTlNXaWR0aChvbGRJbnNwZWN0b3JWaWV3RnJhbWUp
OwotCi0gICAgICAgIENHRmxvYXQgcGFyZW50V2lkdGggPSBOU1dpZHRoKHBhcmVudEJvdW5kcyk7
Ci0gICAgICAgIENHRmxvYXQgaW5zcGVjdG9yV2lkdGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoY3VycmVudERpbWVuc2lvbiwg
cGFyZW50V2lkdGgpOwotCi0gICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2Yg
dGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuIEJ1dCBk
b24ndCB1c2UgdGhhdAotICAgICAgICAvLyB0b3AgcG9zaXRpb24gZm9yIHRoZSBpbnNwZWN0b3Ig
dmlldyBzaW5jZSB0aGUgYmFubmVycyBvbmx5IHN0cmV0Y2ggYXMgd2lkZSBhcyB0aGUgaW5zcGVj
dGVkIHZpZXcuCi0gICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoaW5zcGVj
dG9yV2lkdGgsIDAsIHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3RlZFZpZXdU
b3ApOwotICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIGlu
c3BlY3RvcldpZHRoLCBOU0hlaWdodChwYXJlbnRCb3VuZHMpKTsKLQotICAgICAgICBpZiAoTlNX
aW5kb3cgKmluc3BlY3RvcldpbmRvdyA9IGluc3BlY3RvclZpZXcud2luZG93KSB7Ci0gICAgICAg
ICAgICBOU1JlY3QgY29udGVudExheW91dFJlY3QgPSBbaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcg
Y29udmVydFJlY3Q6aW5zcGVjdG9yV2luZG93LmNvbnRlbnRMYXlvdXRSZWN0IGZyb21WaWV3Om5p
bF07Ci0gICAgICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU0ludGVyc2VjdGlvblJl
Y3QobmV3SW5zcGVjdG9yVmlld0ZyYW1lLCBjb250ZW50TGF5b3V0UmVjdCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLQotICAgIGlmIChOU0VxdWFsUmVjdHMob2xk
SW5zcGVjdG9yVmlld0ZyYW1lLCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUpICYmIE5TRXF1YWxSZWN0
cyhbaW5zcGVjdGVkVmlldyBmcmFtZV0sIGluc3BlY3RlZFZpZXdGcmFtZSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIERpc2FibGUgc2NyZWVuIHVwZGF0ZXMgdG8gbWFrZSBzdXJlIHRoZSBs
YXllcnMgZm9yIGJvdGggdmlld3MgcmVzaXplIGluIHN5bmMuCi0gICAgW2luc3BlY3RvclZpZXcu
d2luZG93IGRpc2FibGVTY3JlZW5VcGRhdGVzVW50aWxGbHVzaF07Ci0KLSAgICBbaW5zcGVjdG9y
VmlldyBzZXRGcmFtZTpuZXdJbnNwZWN0b3JWaWV3RnJhbWVdOwotICAgIFtpbnNwZWN0ZWRWaWV3
IHNldEZyYW1lOmluc3BlY3RlZFZpZXdGcmFtZV07Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCi17Ci0gICAgTlNWaWV3ICpp
bnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50Vmlldygp
OwotICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3UmVjdCA9IFtpbnNwZWN0ZWRWaWV3IGZyYW1lXTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluc3BlY3RlZFZpZXdSZWN0LnNpemUu
aGVpZ2h0KTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVj
dGVkV2luZG93V2lkdGgoKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3Rl
ZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBOU1JlY3QgaW5zcGVjdGVk
Vmlld1JlY3QgPSBbaW5zcGVjdGVkVmlldyBmcmFtZV07Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbnNwZWN0ZWRWaWV3UmVjdC5zaXplLndpZHRoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVk
VmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBX
S1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJW
aWV3XTsKLQotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAgICAgICBbbV9pbnNwZWN0
b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNs
b3NlXTsKLSAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7Ci0gICAgfQotCi0gICAgW2lu
c3BlY3RvclZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0KLSAgICBDR0Zsb2F0IGN1cnJlbnRE
aW1lbnNpb247Ci0gICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7Ci0gICAgY2FzZSBBdHRh
Y2htZW50U2lkZTo6Qm90dG9tOgotICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXpp
bmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld01heFlNYXJnaW5dOwotICAgICAgICBj
dXJyZW50RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0
YWNoZWRIZWlnaHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6
UmlnaHQ6Ci0gICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3
SGVpZ2h0U2l6YWJsZSB8IE5TVmlld01pblhNYXJnaW5dOwotICAgICAgICBjdXJyZW50RGltZW5z
aW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgotICAgICAg
ICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdodFNpemFibGUg
fCBOU1ZpZXdNYXhYTWFyZ2luXTsKLSAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3Rv
clBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKGN1cnJlbnREaW1l
bnNpb24pOwotCi0gICAgW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGFkZFN1YnZpZXc6aW5zcGVj
dG9yVmlldyBwb3NpdGlvbmVkOk5TV2luZG93QmVsb3cgcmVsYXRpdmVUbzppbnNwZWN0ZWRWaWV3
XTsKLSAgICBbaW5zcGVjdG9yVmlldy53aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOmluc3BlY3Rv
clZpZXddOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgpCi17
Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JB
dHRhY2htZW50VmlldygpOwotICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3Bl
Y3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOwotCi0gICAgW2luc3BlY3RvclZpZXcgcmVtb3Zl
RnJvbVN1cGVydmlld107Ci0KLSAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNr
Ok5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOwotCi0gICAgLy8gTWFr
ZSBzdXJlIHRoYXQgd2Ugc2l6ZSB0aGUgaW5zcGVjdGVkIHZpZXcncyBmcmFtZSBhZnRlciBkZXRh
Y2hpbmcgc28gdGhhdCBpdCB0YWtlcyB1cCB0aGUgc3BhY2UgdGhhdCB0aGUKLSAgICAvLyBhdHRh
Y2hlZCBpbnNwZWN0b3IgdXNlZCB0by4gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUg
aW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4KLQotICAgIGlu
c3BlY3RlZFZpZXcuZnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVjdGVkVmll
dy5zdXBlcnZpZXcuYm91bmRzKSwgTlNNYXhZKGluc3BlY3RlZFZpZXcuZnJhbWUpKTsKLQotICAg
IC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgbm90IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGlu
c3BlY3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVkCi0gICAgLy8gYW5kIHdlIHNob3VsZCBu
b3QgY3JlYXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0b3Igd2luZG93LgotICAgIGlmICghbV9pc1Zp
c2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG9wZW4oKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWln
aHQpCi17Ci0gICAgaWYgKCFtX2lzQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlu
c3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShoZWlnaHQpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi17
Ci0gICAgaWYgKCFtX2lzQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc3BlY3Rl
ZFZpZXdGcmFtZURpZENoYW5nZSh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3No
ZWV0UmVjdCA9IHJlY3Q7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3Rh
cnRXaW5kb3dEcmFnKCkKLXsKLSAgICBpZiAoYXV0byogd2ViVmlldyA9IFttX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyIHdlYlZpZXddKSB7Ci0gICAgICAgIGlmICh3ZWJWaWV3LT5fcGFnZSkKLSAg
ICAgICAgICAgIHdlYlZpZXctPl9wYWdlLT5zdGFydFdpbmRvd0RyYWcoKTsKLSAgICB9Ci19Ci0K
LVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17Ci0gICAgcmV0
dXJuIFtXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIFVSTEZvckluc3BlY3RvclJlc291cmNlOkAi
TWFpbi5odG1sIl0uYWJzb2x1dGVTdHJpbmc7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94
eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQotewotICAgIHJldHVybiBbV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlciBVUkxGb3JJbnNwZWN0b3JSZXNvdXJjZTpAIlRlc3QuaHRtbCJdLmFic29sdXRl
U3RyaW5nOwotfQotCi1zdGF0aWMgTlNEaWN0aW9uYXJ5ICpzeXN0ZW1WZXJzaW9uUGxpc3QoKQot
ewotICAgIE5TU3RyaW5nICpzeXN0ZW1MaWJyYXJ5UGF0aCA9IFtOU1NlYXJjaFBhdGhGb3JEaXJl
Y3Rvcmllc0luRG9tYWlucyhOU0xpYnJhcnlEaXJlY3RvcnksIE5TU3lzdGVtRG9tYWluTWFzaywg
WUVTKSBvYmplY3RBdEluZGV4OjBdOwotICAgIE5TU3RyaW5nICpzeXN0ZW1WZXJzaW9uUGxpc3RQ
YXRoID0gW3N5c3RlbUxpYnJhcnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpA
IkNvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0Il07Ci0gICAgTlNEaWN0aW9uYXJ5ICpz
eXN0ZW1WZXJzaW9uSW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhDb250ZW50c09m
RmlsZTpzeXN0ZW1WZXJzaW9uUGxpc3RQYXRoXTsKLSAgICByZXR1cm4gc3lzdGVtVmVyc2lvbklu
Zm87Ci19Ci0KLURlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0Zvckxv
Y2FsRGVidWdnYWJsZSgpCi17Ci0gICAgTlNEaWN0aW9uYXJ5ICpwbGlzdCA9IHN5c3RlbVZlcnNp
b25QbGlzdCgpOwotCi0gICAgRGVidWdnYWJsZUluZm9EYXRhIHJlc3VsdDsKLSAgICByZXN1bHQu
ZGVidWdnYWJsZVR5cGUgPSBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdlOwotICAg
IHJlc3VsdC50YXJnZXRQbGF0Zm9ybU5hbWUgPSAibWFjT1MiX3M7Ci0gICAgcmVzdWx0LnRhcmdl
dEJ1aWxkVmVyc2lvbiA9IHBsaXN0W0AiUHJvZHVjdEJ1aWxkVmVyc2lvbiJdOwotICAgIHJlc3Vs
dC50YXJnZXRQcm9kdWN0VmVyc2lvbiA9IHBsaXN0W0AiUHJvZHVjdFVzZXJWaXNpYmxlVmVyc2lv
biJdOwotICAgIHJlc3VsdC50YXJnZXRJc1NpbXVsYXRvciA9IGZhbHNlOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXBwbHlGb3JjZWRBcHBlYXJh
bmNlKCkKLXsKLSAgICBOU0FwcGVhcmFuY2UgKnBsYXRmb3JtQXBwZWFyYW5jZTsKLSAgICBzd2l0
Y2ggKG1fZnJvbnRlbmRBcHBlYXJhbmNlKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6QXBwZWFyYW5jZTo6U3lzdGVtOgotICAgICAgICBwbGF0Zm9ybUFwcGVhcmFuY2UgPSBu
aWw7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
QXBwZWFyYW5jZTo6TGlnaHQ6Ci0gICAgICAgIHBsYXRmb3JtQXBwZWFyYW5jZSA9IFtOU0FwcGVh
cmFuY2UgYXBwZWFyYW5jZU5hbWVkOk5TQXBwZWFyYW5jZU5hbWVBcXVhXTsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlOjpEYXJr
OgotICAgICAgICBwbGF0Zm9ybUFwcGVhcmFuY2UgPSBbTlNBcHBlYXJhbmNlIGFwcGVhcmFuY2VO
YW1lZDpOU0FwcGVhcmFuY2VOYW1lRGFya0FxdWFdOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBpZiAoTlNXaW5kb3cgKndpbmRvdyA9IG1faW5zcGVjdG9yV2luZG93LmdldCgpKQotICAg
ICAgICB3aW5kb3cuYXBwZWFyYW5jZSA9IHBsYXRmb3JtQXBwZWFyYW5jZTsKLQotICAgIFttX2lu
c3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLmFwcGVhcmFuY2UgPSBwbGF0Zm9ybUFwcGVh
cmFuY2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9X
ZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL21hYy9XZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwZjM3Njc5MDJl
ZjdlMThjYjJjMDhhMzA2MzZlM2RmYTlkOWFmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0K
QEAgLTAsMCArMSw4MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisj
aW1wb3J0ICJBUElJbnNwZWN0b3JDbGllbnQuaCIKKyNpbXBvcnQgIkFQSUluc3BlY3RvckNvbmZp
Z3VyYXRpb24uaCIKKyNpbXBvcnQgIkFQSVVJQ2xpZW50LmgiCisjaW1wb3J0ICJHbG9iYWxGaW5k
SW5QYWdlU3RhdGUuaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIgorI2ltcG9y
dCAiV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tPYmplY3QuaCIKKyNp
bXBvcnQgIldLVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgor
I2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUGFnZUdyb3Vw
LmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIl9XS0luc3BlY3RvckNvbmZp
Z3VyYXRpb25JbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLSW5zcGVjdG9ySW50ZXJuYWwuaCIKKyNp
bXBvcnQgIl9XS0luc3BlY3RvcldpbmRvdy5oIgorI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2Uv
U0ZDZXJ0aWZpY2F0ZVBhbmVsLmg+CisjaW1wb3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRp
ZmljYXRlVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KKwor
c3RhdGljIGNvbnN0IE5TVUludGVnZXIgd2luZG93U3R5bGVNYXNrID0gTlNXaW5kb3dTdHlsZU1h
c2tUaXRsZWQgfCBOU1dpbmRvd1N0eWxlTWFza0Nsb3NhYmxlIHwgTlNXaW5kb3dTdHlsZU1hc2tN
aW5pYXR1cml6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrUmVzaXphYmxlIHwgTlNXaW5kb3dTdHls
ZU1hc2tGdWxsU2l6ZUNvbnRlbnRWaWV3OworCisvLyBUaGUgdGltZSB3ZSBrZWVwIG91ciBXZWJW
aWV3IGFsaXZlIGJlZm9yZSBjbG9zaW5nIGl0IGFuZCBpdHMgcHJvY2Vzcy4KKy8vIFJldXNpbmcg
dGhlIFdlYlZpZXcgaW1wcm92ZXMgc3RhcnQgdXAgdGltZSBmb3IgcGVvcGxlIHRoYXQganVtcCBp
biBhbmQgb3V0IG9mIHRoZSBJbnNwZWN0b3IuCitzdGF0aWMgY29uc3QgU2Vjb25kcyB3ZWJWaWV3
Q2xvc2VUaW1lb3V0IHsgMV9taW4gfTsKKworc3RhdGljIHZvaWQqIGtXaW5kb3dDb250ZW50TGF5
b3V0T2JzZXJ2ZXJDb250ZXh0ID0gJmtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0
OworCitAaW50ZXJmYWNlIFdLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyICgpIDxOU1dp
bmRvd0RlbGVnYXRlLCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFdlYkluc3BlY3RvclVJUHJveHk6KFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eSopaW5zcGVjdG9yUHJveHk7CistICh2b2lkKWludmFsaWRhdGU7CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFdLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIHsKKyAg
ICBXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHkqIF9pbnNwZWN0b3JQcm94eTsKK30KKworLSAo
V0tJbnNwZWN0b3JSZWYpaW5zcGVjdG9yUmVmCit7CisgICAgcmV0dXJuIHRvQVBJKF9pbnNwZWN0
b3JQcm94eSk7Cit9CisKKy0gKF9XS0luc3BlY3RvciAqKWluc3BlY3RvcgoreworICAgIGlmIChf
aW5zcGVjdG9yUHJveHkpCisgICAgICAgIHJldHVybiB3cmFwcGVyKCpfaW5zcGVjdG9yUHJveHkp
OworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYkluc3Bl
Y3RvclVJUHJveHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eSopaW5zcGVjdG9yUHJveHkK
K3sKKyAgICBBU1NFUlRfQVJHKGluc3BlY3RvclByb3h5LCBpbnNwZWN0b3JQcm94eSk7CisKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IC8vIFVucmV0YWluZWQgdG8gYXZvaWQgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgX2luc3BlY3Rv
clByb3h5ID0gaW5zcGVjdG9yUHJveHk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClpbnZhbGlkYXRlCit7CisgICAgX2luc3BlY3RvclByb3h5ID0gbnVsbHB0cjsKK30KKworLSAo
TlNSZWN0KXdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgd2lsbFBvc2l0aW9uU2hlZXQ6KE5TV2lu
ZG93ICopc2hlZXQgdXNpbmdSZWN0OihOU1JlY3QpcmVjdAoreworICAgIGlmIChfaW5zcGVjdG9y
UHJveHkpCisgICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIF9pbnNwZWN0b3JQcm94eS0+c2hl
ZXRSZWN0KCkuaGVpZ2h0KCksIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkud2lkdGgoKSwg
MCk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKKy0gKHZvaWQpd2luZG93RGlkTW92ZTooTlNOb3Rp
ZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAg
ICAgICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0ZyYW1lRGlkQ2hhbmdlKCk7Cit9CisKKy0gKHZv
aWQpd2luZG93RGlkUmVzaXplOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAg
IGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnJh
bWVEaWRDaGFuZ2UoKTsKK30KKworLSAodm9pZCl3aW5kb3dXaWxsQ2xvc2U6KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAg
X2luc3BlY3RvclByb3h5LT5jbG9zZSgpOworfQorCistICh2b2lkKXdpbmRvd0RpZEVudGVyRnVs
bFNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3Bl
Y3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0Z1bGxTY3JlZW5EaWRD
aGFuZ2UoKTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRFeGl0RnVsbFNjcmVlbjooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAg
ICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKTsKK30KKworLSAo
dm9pZClpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCit7CisgICAgLy8gUmVzaXppbmcgdGhlIHZpZXdzIHdoaWxlIGluc2lkZSB0aGlzIG5v
dGlmaWNhdGlvbiBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyB3aGVuIGVudGVyaW5nCisgICAgLy8g
b3IgZXhpdGluZyBmdWxsIHNjcmVlbi4gVG8gYXZvaWQgdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0g
dGhlIHdvcmsgYWZ0ZXIgYSBkZWxheS4gV2Ugb25seQorICAgIC8vIGRlcGVuZCBvbiB0aGlzIGZv
ciBlbmZvcmNpbmcgdGhlIGhlaWdodCBjb25zdHJhaW50cywgc28gYSBzbWFsbCBkZWxheSBpc24n
dCB0ZXJyaWJsZS4gTW9zdAorICAgIC8vIG9mIHRoZSB0aW1lIHRoZSB2aWV3cyB3aWxsIGFscmVh
ZHkgaGF2ZSB0aGUgY29ycmVjdCBmcmFtZXMgYmVjYXVzZSBvZiBhdXRvcmVzaXppbmcgbWFza3Mu
CisKKyAgICBkaXNwYXRjaF9hZnRlcihESVNQQVRDSF9USU1FX05PVywgZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgICAg
IF9pbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7CisgICAgfSk7
Cit9CisKKy0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNTdHJpbmcgKilrZXlQYXRo
IG9mT2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnk8TlNLZXlWYWx1ZUNoYW5n
ZUtleSwgaWQ+ICopY2hhbmdlIGNvbnRleHQ6KHZvaWQgKiljb250ZXh0Cit7CisgICAgaWYgKGNv
bnRleHQgIT0ga1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHQpIHsKKyAgICAgICAg
W3N1cGVyIG9ic2VydmVWYWx1ZUZvcktleVBhdGg6a2V5UGF0aCBvZk9iamVjdDpvYmplY3QgY2hh
bmdlOmNoYW5nZSBjb250ZXh0OmNvbnRleHRdOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgTlNXaW5kb3cgKndpbmRvdyA9IG9iamVjdDsKKyAgICBBU1NFUlQoW3dpbmRvdyBpc0tpbmRP
ZkNsYXNzOltOU1dpbmRvdyBjbGFzc11dKTsKKyAgICBpZiAod2luZG93LmluTGl2ZVJlc2l6ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZGlzcGF0Y2hfYWZ0ZXIoRElTUEFUQ0hfVElNRV9OT1cs
IGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmIChfaW5zcGVjdG9yUHJv
eHkpCisgICAgICAgICAgICBfaW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFZpZXdGcmFtZURpZENo
YW5nZSgpOworICAgIH0pOworfQorCisvLyBNQVJLOiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
RGVsZWdhdGUgbWV0aG9kcworCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyRGlkQmVj
b21lQWN0aXZlOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJv
eHktPmRpZEJlY29tZUFjdGl2ZSgpOworfQorCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9s
bGVySW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0
b3JWaWV3Q29udHJvbGxlcgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9p
bnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgpOworfQorCistIChCT09MKWluc3BlY3RvclZp
ZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgoreworICAgIHJldHVybiBfaW5zcGVjdG9yUHJv
eHkgPyBfaW5zcGVjdG9yUHJveHktPmlzVW5kZXJUZXN0KCkgOiBmYWxzZTsKK30KKworLSAodm9p
ZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWlu
c3BlY3RvclZpZXdDb250cm9sbGVyIHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2lu
ZG93Cit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5
LT5hdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KGluc3BlY3RvclZpZXdDb250cm9sbGVyLndl
YlZpZXcud2luZG93KTsKK30KKworLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1v
dmVUb1dpbmRvdzooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250
cm9sbGVyCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclBy
b3h5LT5hdHRhY2htZW50RGlkTW92ZVRvV2luZG93KGluc3BlY3RvclZpZXdDb250cm9sbGVyLndl
YlZpZXcud2luZG93KTsKK30KKworLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjooV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyIG9wZW5VUkxF
eHRlcm5hbGx5OihOU1VSTCAqKXVybAoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAg
ICAgIF9pbnNwZWN0b3JQcm94eS0+b3BlblVSTEV4dGVybmFsbHkodXJsLmFic29sdXRlU3RyaW5n
KTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmRpZEJlY29tZUFjdGl2ZSgpCit7Cisg
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6VXBkYXRl
RmluZFN0cmluZyhXZWJLaXQ6OnN0cmluZ0ZvckZpbmQoKSkpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJUHJveHk6OmF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywgTlNW
aWV3ICpuZXdWaWV3KQoreworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBuYW1lOk5TVmlld0ZyYW1lRGlk
Q2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpvbGRWaWV3XTsKKyAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2Vs
ZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3
RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5ld1ZpZXddOworCisgICAgaWYgKG1f
aXNBdHRhY2hlZCkKKyAgICAgICAgYXR0YWNoKG1fYXR0YWNobWVudFNpZGUpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJUHJveHk6OmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coTlNXaW5k
b3cgKm9sZFdpbmRvdykKK3sKKyAgICBpZiAobV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0
KSB7CisgICAgICAgIG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCA9IGZhbHNlOworICAg
ICAgICBbb2xkV2luZG93IHJlbW92ZU9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgZm9yS2V5
UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBjb250ZXh0OmtXaW5kb3dDb250ZW50TGF5b3V0T2Jz
ZXJ2ZXJDb250ZXh0XTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6YXR0
YWNobWVudERpZE1vdmVUb1dpbmRvdyhOU1dpbmRvdyAqbmV3V2luZG93KQoreworICAgIGlmICht
X2lzQXR0YWNoZWQgJiYgISFuZXdXaW5kb3cpIHsKKyAgICAgICAgbV9pc09ic2VydmluZ0NvbnRl
bnRMYXlvdXRSZWN0ID0gdHJ1ZTsKKyAgICAgICAgW25ld1dpbmRvdyBhZGRPYnNlcnZlcjptX29i
akNBZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJjb250ZW50TGF5b3V0UmVjdCIgb3B0aW9uczow
IGNvbnRleHQ6a1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHRdOworICAgICAgICBp
bnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAoreworICAgIGlm
ICghbV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGxl
dmVsID0gaW5zcGVjdGlvbkxldmVsKCk7CisgICAgaWYgKGxldmVsID4gMSkgeworICAgICAgICBO
U1N0cmluZyAqZGVidWdUaXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9T
VFJJTkcoIldlYiBJbnNwZWN0b3IgWyVkXSDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cg
dGl0bGUgd2hlbiBpbnNwZWN0aW5nIFdlYiBJbnNwZWN0b3IiKSwgbGV2ZWwsIChOU1N0cmluZyAq
KW1fdXJsU3RyaW5nXTsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldFRpdGxlOmRlYnVn
VGl0bGVdOworICAgIH0gZWxzZSB7CisgICAgICAgIE5TU3RyaW5nICp0aXRsZSA9IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNwZWN0b3Ig4oCUICVAIiwg
IldlYiBJbnNwZWN0b3Igd2luZG93IHRpdGxlIiksIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsK
KyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldFRpdGxlOnRpdGxlXTsKKyAgICB9Cit9CisK
K1JldGFpblB0cjxOU1dpbmRvdz4gV2ViSW5zcGVjdG9yVUlQcm94eTo6Y3JlYXRlRnJvbnRlbmRX
aW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRUeXBlIHRhcmdl
dFR5cGUpCit7CisgICAgTlNSZWN0IHdpbmRvd0ZyYW1lID0gIU5TSXNFbXB0eVJlY3Qoc2F2ZWRX
aW5kb3dGcmFtZSkgPyBzYXZlZFdpbmRvd0ZyYW1lIDogTlNNYWtlUmVjdCgwLCAwLCBpbml0aWFs
V2luZG93V2lkdGgsIGluaXRpYWxXaW5kb3dIZWlnaHQpOworICAgIGF1dG8gd2luZG93ID0gYWRv
cHROUyhbW19XS0luc3BlY3RvcldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3aW5k
b3dGcmFtZSBzdHlsZU1hc2s6d2luZG93U3R5bGVNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVC
dWZmZXJlZCBkZWZlcjpOT10pOworICAgIFt3aW5kb3cgc2V0TWluU2l6ZTpOU01ha2VTaXplKG1p
bmltdW1XaW5kb3dXaWR0aCwgbWluaW11bVdpbmRvd0hlaWdodCldOworICAgIFt3aW5kb3cgc2V0
UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKKyAgICBbd2luZG93IHNldENvbGxlY3Rpb25CZWhhdmlv
cjooW3dpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3JdIHwgTlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZp
b3JGdWxsU2NyZWVuUHJpbWFyeSldOworCisgICAgYm9vbCBmb3JSZW1vdGVUYXJnZXQgPSB0YXJn
ZXRUeXBlID09IEluc3BlY3Rpb25UYXJnZXRUeXBlOjpSZW1vdGU7CisgICAgW3dpbmRvdyBzZXRG
b3JSZW1vdGVUYXJnZXQ6Zm9yUmVtb3RlVGFyZ2V0XTsKKworICAgIENHRmxvYXQgYXBwcm94aW1h
dGVseUhhbGZTY3JlZW5TaXplID0gKFt3aW5kb3cgc2NyZWVuXS5mcmFtZS5zaXplLndpZHRoIC8g
MikgLSA0OworICAgIENHRmxvYXQgbWluaW11bUZ1bGxTY3JlZW5XaWR0aCA9IHN0ZDo6bWF4PENH
RmxvYXQ+KDYzNiwgYXBwcm94aW1hdGVseUhhbGZTY3JlZW5TaXplKTsKKyAgICBbd2luZG93IHNl
dE1pbkZ1bGxTY3JlZW5Db250ZW50U2l6ZTpOU01ha2VTaXplKG1pbmltdW1GdWxsU2NyZWVuV2lk
dGgsIG1pbmltdW1XaW5kb3dIZWlnaHQpXTsKKyAgICBbd2luZG93IHNldENvbGxlY3Rpb25CZWhh
dmlvcjooW3dpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3JdIHwgTlNXaW5kb3dDb2xsZWN0aW9uQmVo
YXZpb3JGdWxsU2NyZWVuQWxsb3dzVGlsaW5nKV07CisKKyAgICBbd2luZG93IHNldFRpdGxlYmFy
QXBwZWFyc1RyYW5zcGFyZW50OllFU107CisKKyAgICAvLyBDZW50ZXIgdGhlIHdpbmRvdyBpZiB0
aGUgc2F2ZWQgZnJhbWUgd2FzIGVtcHR5LgorICAgIGlmIChOU0lzRW1wdHlSZWN0KHNhdmVkV2lu
ZG93RnJhbWUpKQorICAgICAgICBbd2luZG93IGNlbnRlcl07CisKKyAgICByZXR1cm4gd2luZG93
OworfQorCitXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRl
RnJvbnRlbmRQYWdlKCkKK3sKKyAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsKKyAgICBBU1NF
UlQoIW1faW5zcGVjdG9yUGFnZSk7CisKKyAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZp
dHlUaW1lci5zdG9wKCk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcikgewor
ICAgICAgICBBU1NFUlQobV9vYmpDQWRhcHRlcik7CisgICAgICAgIHJldHVybiBbbV9pbnNwZWN0
b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+X3BhZ2UuZ2V0KCk7CisgICAgfQorCisgICAgbV9v
YmpDQWRhcHRlciA9IGFkb3B0TlMoW1tXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciBh
bGxvY10gaW5pdFdpdGhXZWJJbnNwZWN0b3JVSVByb3h5OnRoaXNdKTsKKyAgICBOU1ZpZXcgKmlu
c3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7
CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpt
X29iakNBZGFwdGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0ZWRWaWV3RnJhbWVE
aWRDaGFuZ2U6KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpp
bnNwZWN0ZWRWaWV3XTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGluc3BlY3RlZFBhZ2Uo
KS0+dWlDbGllbnQoKS5jb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3IoKmluc3BlY3RlZFBh
Z2UoKSwgICp0aGlzKTsKKyAgICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhb
W1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoQ29uZmlndXJhdGlvbjog
V2ViS2l0Ojp3cmFwcGVyKGNvbmZpZ3VyYXRpb24uZ2V0KCkpIGluc3BlY3RlZFBhZ2U6aW5zcGVj
dGVkUGFnZSgpXSk7CisgICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuZ2V0KCkgc2V0RGVs
ZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07CisKKyAgICBXZWJQYWdlUHJveHkgKmluc3BlY3Rv
clBhZ2UgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+X3BhZ2UuZ2V0KCk7
CisgICAgQVNTRVJUKGluc3BlY3RvclBhZ2UpOworCisgICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdp
bmRvdygpCit7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvcldpbmRvdyk7CisKKyAgICBOU1N0cmlu
ZyAqc2F2ZWRXaW5kb3dGcmFtZVN0cmluZyA9IGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCku
cHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JXaW5kb3dGcmFtZSgpOworICAgIE5TUmVjdCBzYXZlZFdp
bmRvd0ZyYW1lID0gTlNSZWN0RnJvbVN0cmluZyhzYXZlZFdpbmRvd0ZyYW1lU3RyaW5nKTsKKwor
ICAgIG1faW5zcGVjdG9yV2luZG93ID0gV2ViSW5zcGVjdG9yVUlQcm94eTo6Y3JlYXRlRnJvbnRl
bmRXaW5kb3coc2F2ZWRXaW5kb3dGcmFtZSwgSW5zcGVjdGlvblRhcmdldFR5cGU6OkxvY2FsKTsK
KyAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07
CisKKyAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlciB3ZWJWaWV3XTsKKyAgICBOU1ZpZXcgKmNvbnRlbnRWaWV3ID0gW21faW5zcGVjdG9yV2lu
ZG93IGNvbnRlbnRWaWV3XTsKKyAgICBpbnNwZWN0b3JWaWV3LmZyYW1lID0gW2NvbnRlbnRWaWV3
IGJvdW5kc107CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6aW5zcGVjdG9yVmlld107CisK
KyAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOworICAgIGFwcGx5Rm9yY2VkQXBwZWFy
YW5jZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdl
KCkKK3sKKyAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCB8fCAhbV9pbnNwZWN0b3JXaW5kb3cpOwor
CisgICAgaWYgKG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgW21faW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgbV9pbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAobV9vYmpDQWRhcHRl
cikgeworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92
ZU9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworCisgICAgICAgIFttX29iakNBZGFwdGVy
IGludmFsaWRhdGVdOworICAgICAgICBtX29iakNBZGFwdGVyID0gbmlsOworICAgIH0KK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGlt
ZXJGaXJlZCgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAg
ICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNl
dERlbGVnYXRlOm5pbF07CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07CisgICAg
ICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOworICAgIH0KKworICAgIG1fY2xvc2VGcm9udGVu
ZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0YXJ0T25lU2hvdCh3ZWJWaWV3Q2xvc2VUaW1lb3V0KTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2go
KQoreworICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKKwor
ICAgIGNsb3NlRnJvbnRlbmRQYWdlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZp
dHlUaW1lci5zdG9wKCk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZSgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgaWYgKG1faXNBdHRhY2hl
ZCkgeworICAgICAgICBwbGF0Zm9ybURldGFjaCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIFttX2luc3BlY3RvcldpbmRv
dyBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOwor
ICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAgICBpbnNwZWN0ZWRQYWdl
KCktPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yV2luZG93RnJhbWUo
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgp
Cit7CisgICAgLy8gSWYgdGhlIFdlYiBJbnNwZWN0b3IgaXMgbm8gbG9uZ2VyIGluIHRoZSBzYW1l
IHdpbmRvdyBhcyB0aGUgaW5zcGVjdGVkIHZpZXcsCisgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIHJl
b3BlbiB0aGUgSW5zcGVjdG9yIHRvIGdldCBpdCBhdHRhY2hlZCB0byB0aGUgcmlnaHQgd2luZG93
LgorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGRyYWdnaW5nIHRhYnMgdG8gYW5vdGhlciB3
aW5kb3cgaW4gU2FmYXJpLgorICAgIGlmIChtX2lzQXR0YWNoZWQgJiYgW21faW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93ICE9IGluc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1X
aW5kb3coKSkgeworICAgICAgICBvcGVuKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTA5Mzc2ODg+OiB0aGlzIHdpbGwgbm90IGJyaW5n
IGEgYmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpIHRvIHRoZSBmcm9udCwgb25seSBpdHMgd2luZG93
LgorICAgIFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUtl
eUFuZE9yZGVyRnJvbnQ6bmlsXTsKKyAgICBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2Vi
Vmlld10ud2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjpbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciB3ZWJWaWV3XV07Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1Ccmlu
Z0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBbaW5zcGVjdGVkUGFnZSgpLT5wbGF0Zm9y
bVdpbmRvdygpIG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07Cit9CisKK2Jvb2wgV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKK3sKKyAgICAvLyBGSVhNRSA8cmRhcjovL3By
b2JsZW0vMTA5Mzc2ODg+OiB0aGlzIHdpbGwgbm90IHJldHVybiBmYWxzZSBmb3IgYSBiYWNrZ3Jv
dW5kIHRhYiBpbiBTYWZhcmksIG9ubHkgYSBiYWNrZ3JvdW5kIHdpbmRvdy4KKyAgICByZXR1cm4g
bV9pc1Zpc2libGUgJiYgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93
LmlzTWFpbldpbmRvdzsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNh
bkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpCit7CisgICAgTlNWaWV3ICppbnNwZWN0
ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAg
IGlmIChbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciB2aWV3SXNJbnNwZWN0b3JXZWJWaWV3Omlu
c3BlY3RlZFZpZXddKQorICAgICAgICByZXR1cm4gd2ViUHJvY2Vzc0NhbkF0dGFjaDsKKworICAg
IGlmIChpbnNwZWN0ZWRWaWV3LmhpZGRlbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
c3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKKyAgICBzdGF0
aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1OworICAgIHN0
YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDUwMDsKKworICAgIE5TUmVj
dCBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1lOworCisgICAgZmxvYXQg
bWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gTlNIZWlnaHQoaW5zcGVjdGVkVmlld0ZyYW1lKSAqIG1h
eGltdW1BdHRhY2hlZEhlaWdodFJhdGlvOworICAgIHJldHVybiBtaW5pbXVtQXR0YWNoZWRIZWln
aHQgPD0gbWF4aW11bUF0dGFjaGVkSGVpZ2h0ICYmIG1pbmltdW1BdHRhY2hlZFdpZHRoIDw9IE5T
V2lkdGgoaW5zcGVjdGVkVmlld0ZyYW1lKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCit7Cisg
ICAgLy8gRG8gbm90aGluZy4KK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bVNldEZvcmNlZEFwcGVhcmFuY2UoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2Ug
YXBwZWFyYW5jZSkKK3sKKyAgICBtX2Zyb250ZW5kQXBwZWFyYW5jZSA9IGFwcGVhcmFuY2U7CisK
KyAgICBhcHBseUZvcmNlZEFwcGVhcmFuY2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
Cit7CisgICAgbV91cmxTdHJpbmcgPSB1cmxTdHJpbmc7CisKKyAgICB1cGRhdGVJbnNwZWN0b3JX
aW5kb3dUaXRsZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hv
d0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQorewor
ICAgIEFTU0VSVCghY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSk7CisKKyAgICBSZXRhaW5QdHI8
U0ZDZXJ0aWZpY2F0ZVBhbmVsPiBjZXJ0aWZpY2F0ZVBhbmVsID0gYWRvcHROUyhbW1NGQ2VydGlm
aWNhdGVQYW5lbCBhbGxvY10gaW5pdF0pOworCisgICAgTlNXaW5kb3cgKndpbmRvdzsKKyAgICBp
ZiAobV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHdpbmRvdyA9IG1faW5zcGVjdG9yV2luZG93
LmdldCgpOworICAgIGVsc2UKKyAgICAgICAgd2luZG93ID0gW1ttX2luc3BlY3RvclZpZXdDb250
cm9sbGVyIHdlYlZpZXddIHdpbmRvd107CisKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgd2lu
ZG93ID0gW05TQXBwIGtleVdpbmRvd107CisKKyNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFU
SU9OKQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6d2luZG93IG1v
ZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciB0
cnVzdDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBzaG93R3JvdXA6WUVTXTsKKyNlbHNlCisgICAg
W2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzp3aW5kb3cgbW9kYWxEZWxlZ2F0
ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIGNlcnRpZmljYXRl
czooTlNBcnJheSAqKWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkgc2hvd0dyb3Vw
OllFU107CisjZW5kaWYKKworICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRy
dXN0IHBhbmVsIGhhcyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUgY2VydGlmaWNhdGVWaWV3
IGRvZXNuJ3QgZXhpc3QgYmVmb3JlaGFuZC4KKyAgICBTRkNlcnRpZmljYXRlVmlldyAqY2VydGlm
aWNhdGVWaWV3ID0gW2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVWaWV3XTsKKyAgICBbY2Vy
dGlmaWNhdGVWaWV3IHNldERpc3BsYXlUcnVzdDpZRVNdOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcg
c2V0RWRpdGFibGVUcnVzdDpOT107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5RGV0
YWlsczpZRVNdOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWlsc0Rpc2Nsb3NlZDpZRVNd
OworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29k
ZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlz
RW1wdHkoKSk7CisgICAgCisgICAgTlNVUkwgKnBsYXRmb3JtVVJMID0gbV9zdWdnZXN0ZWRUb0Fj
dHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKS5nZXQoKTsKKyAgICBpZiAoIXBsYXRmb3JtVVJM
KSB7CisgICAgICAgIHBsYXRmb3JtVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6c3VnZ2VzdGVk
VVJMXTsKKyAgICAgICAgLy8gVGhlIHVzZXIgbXVzdCBjb25maXJtIG5ldyBmaWxlbmFtZXMgYmVm
b3JlIHdlIGNhbiBzYXZlIHRvIHRoZW0uCisgICAgICAgIGZvcmNlU2F2ZURpYWxvZyA9IHRydWU7
CisgICAgfQorICAgIAorICAgIEFTU0VSVChwbGF0Zm9ybVVSTCk7CisgICAgaWYgKCFwbGF0Zm9y
bVVSTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUgYmxvY2sg
YmVsb3cuCisgICAgU3RyaW5nIHN1Z2dlc3RlZFVSTENvcHkgPSBzdWdnZXN0ZWRVUkw7CisgICAg
U3RyaW5nIGNvbnRlbnRDb3B5ID0gY29udGVudDsKKworICAgIGF1dG8gc2F2ZVRvVVJMID0gXihO
U1VSTCAqYWN0dWFsVVJMKSB7CisgICAgICAgIEFTU0VSVChhY3R1YWxVUkwpOworCisgICAgICAg
IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVS
TCk7CisKKyAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKKyAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiBvdXQ7CisgICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50Q29weSwgb3V0
LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBh
bGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAg
ICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNd
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFj
dHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJv
cjpOVUxMXTsKKworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSk7CisgICAgfTsK
KworICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7CisgICAgICAgIHNhdmVUb1VSTChwbGF0Zm9y
bVVSTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1NhdmVQYW5lbCAqcGFuZWwg
PSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKKyAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1
ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OworCisgICAgLy8gSWYgd2UgaGF2ZSBh
IGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKKyAg
ICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNl
IHRoZSBzeXN0ZW0ncworICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRp
cmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCisgICAgaWYgKHBsYXRmb3JtVVJMLmlzRmls
ZVVSTCkKKyAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVs
ZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisKKyAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0g
XihOU0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3Bv
bnNlQ2FuY2VsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQocmVzdWx0ID09
IE5TTW9kYWxSZXNwb25zZU9LKTsKKyAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7CisgICAg
fTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdyA/IG1faW5zcGVj
dG9yV2luZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107CisgICAgaWYgKHdpbmRvdykKKyAg
ICAgICAgW3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhh
bmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYg
Y29udGVudCkKK3sKKyAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOworICAgIAor
ICAgIFJldGFpblB0cjxOU1VSTD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1h
cC5nZXQoc3VnZ2VzdGVkVVJMKTsKKyAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUgdXNl
ciBoYXMgYWxyZWFkeSBjb25maXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCisgICAgaWYg
KCFhY3R1YWxVUkwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxl
ID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQo
KSBlcnJvcjpOVUxMXTsKKyAgICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07CisgICAgW2hhbmRs
ZSB3cml0ZURhdGE6W2NvbnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddXTsKKyAgICBbaGFuZGxlIGNsb3NlRmlsZV07CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRBcHBlbmQoW2FjdHVhbFVSTCBhYnNvbHV0
ZVN0cmluZ10pKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojp3aW5kb3dGcmFtZURp
ZENoYW5nZSgpCit7CisgICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQpOworICAgIEFTU0VSVChtX2lz
VmlzaWJsZSk7CisgICAgQVNTRVJUKG1faW5zcGVjdG9yV2luZG93KTsKKworICAgIGlmIChtX2lz
QXR0YWNoZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAg
cmV0dXJuOworCisgICAgTlNTdHJpbmcgKmZyYW1lU3RyaW5nID0gTlNTdHJpbmdGcm9tUmVjdChb
bV9pbnNwZWN0b3JXaW5kb3cgZnJhbWVdKTsKKyAgICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91
cCgpLnByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yV2luZG93RnJhbWUoZnJhbWVTdHJpbmcpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2Uo
KQoreworICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkKTsKKyAgICBBU1NFUlQobV9pc1Zpc2libGUp
OworICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7CisKKyAgICBpZiAobV9pc0F0dGFjaGVk
IHx8ICFtX2lzVmlzaWJsZSB8fCAhbV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHJldHVybjsK
KworICAgIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQocGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0
YWNoKCkpKTsgICAgCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdGVkVmll
d0ZyYW1lRGlkQ2hhbmdlKENHRmxvYXQgY3VycmVudERpbWVuc2lvbikKK3sKKyAgICBpZiAoIW1f
aXNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1faXNBdHRhY2hlZCkgewor
ICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXR0YWNoIGF2YWlsYWJpbGl0eSBjaGFuZ2VkLiBXZSBu
ZWVkIHRvIGRvIHRoaXMgaGVyZSBpbiBjYXNlCisgICAgICAgIC8vIHRoZSBhdHRhY2htZW50IHZp
ZXcgaXMgbm90IHRoZSBXS1ZpZXcuCisgICAgICAgIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQo
cGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICghaW5zcGVjdGVkUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1Zp
ZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRW
aWV3KCk7CisgICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIgd2ViVmlld107CisKKyAgICBOU1JlY3QgaW5zcGVjdGVkVmlld0ZyYW1lID0gaW5z
cGVjdGVkVmlldy5mcmFtZTsKKyAgICBOU1JlY3Qgb2xkSW5zcGVjdG9yVmlld0ZyYW1lID0gaW5z
cGVjdG9yVmlldy5mcmFtZTsKKyAgICBOU1JlY3QgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNa
ZXJvUmVjdDsKKyAgICBOU1JlY3QgcGFyZW50Qm91bmRzID0gaW5zcGVjdGVkVmlldy5zdXBlcnZp
ZXcuYm91bmRzOworICAgIENHRmxvYXQgaW5zcGVjdGVkVmlld1RvcCA9IE5TTWF4WShpbnNwZWN0
ZWRWaWV3RnJhbWUpOworCisgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7CisgICAgY2Fz
ZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOiB7CisgICAgICAgIGlmICghY3VycmVudERpbWVuc2lv
bikKKyAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBOU0hlaWdodChvbGRJbnNwZWN0b3JW
aWV3RnJhbWUpOworCisgICAgICAgIENHRmxvYXQgcGFyZW50SGVpZ2h0ID0gTlNIZWlnaHQocGFy
ZW50Qm91bmRzKTsKKyAgICAgICAgQ0dGbG9hdCBpbnNwZWN0b3JIZWlnaHQgPSBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGN1cnJl
bnREaW1lbnNpb24sIHBhcmVudEhlaWdodCk7CisKKyAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRv
cCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3Rp
bGwgd29yay4KKyAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCBpbnNw
ZWN0b3JIZWlnaHQsIE5TV2lkdGgocGFyZW50Qm91bmRzKSwgaW5zcGVjdGVkVmlld1RvcCAtIGlu
c3BlY3RvckhlaWdodCk7CisgICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TTWFrZVJl
Y3QoMCwgMCwgTlNXaWR0aChpbnNwZWN0ZWRWaWV3RnJhbWUpLCBpbnNwZWN0b3JIZWlnaHQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDog
eworICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCisgICAgICAgICAgICBjdXJyZW50RGlt
ZW5zaW9uID0gTlNXaWR0aChvbGRJbnNwZWN0b3JWaWV3RnJhbWUpOworCisgICAgICAgIENHRmxv
YXQgcGFyZW50V2lkdGggPSBOU1dpZHRoKHBhcmVudEJvdW5kcyk7CisgICAgICAgIENHRmxvYXQg
aW5zcGVjdG9yV2lkdGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5l
ZEF0dGFjaGVkV2luZG93V2lkdGgoY3VycmVudERpbWVuc2lvbiwgcGFyZW50V2lkdGgpOworCisg
ICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3
IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuIEJ1dCBkb24ndCB1c2UgdGhhdAorICAg
ICAgICAvLyB0b3AgcG9zaXRpb24gZm9yIHRoZSBpbnNwZWN0b3IgdmlldyBzaW5jZSB0aGUgYmFu
bmVycyBvbmx5IHN0cmV0Y2ggYXMgd2lkZSBhcyB0aGUgaW5zcGVjdGVkIHZpZXcuCisgICAgICAg
IGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgcGFyZW50V2lkdGggLSBpbnNw
ZWN0b3JXaWR0aCwgaW5zcGVjdGVkVmlld1RvcCk7CisgICAgICAgIG5ld0luc3BlY3RvclZpZXdG
cmFtZSA9IE5TTWFrZVJlY3QocGFyZW50V2lkdGggLSBpbnNwZWN0b3JXaWR0aCwgMCwgaW5zcGVj
dG9yV2lkdGgsIE5TSGVpZ2h0KHBhcmVudEJvdW5kcykpOworCisgICAgICAgIGlmIChOU1dpbmRv
dyAqaW5zcGVjdG9yV2luZG93ID0gaW5zcGVjdG9yVmlldy53aW5kb3cpIHsKKyAgICAgICAgICAg
IE5TUmVjdCBjb250ZW50TGF5b3V0UmVjdCA9IFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBjb252
ZXJ0UmVjdDppbnNwZWN0b3JXaW5kb3cuY29udGVudExheW91dFJlY3QgZnJvbVZpZXc6bmlsXTsK
KyAgICAgICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TSW50ZXJzZWN0aW9uUmVjdChu
ZXdJbnNwZWN0b3JWaWV3RnJhbWUsIGNvbnRlbnRMYXlvdXRSZWN0KTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OiB7Cisg
ICAgICAgIGlmICghY3VycmVudERpbWVuc2lvbikKKyAgICAgICAgICAgIGN1cnJlbnREaW1lbnNp
b24gPSBOU1dpZHRoKG9sZEluc3BlY3RvclZpZXdGcmFtZSk7CisKKyAgICAgICAgQ0dGbG9hdCBw
YXJlbnRXaWR0aCA9IE5TV2lkdGgocGFyZW50Qm91bmRzKTsKKyAgICAgICAgQ0dGbG9hdCBpbnNw
ZWN0b3JXaWR0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0
YWNoZWRXaW5kb3dXaWR0aChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRXaWR0aCk7CisKKyAgICAg
ICAgLy8gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28g
YmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4gQnV0IGRvbid0IHVzZSB0aGF0CisgICAgICAg
IC8vIHRvcCBwb3NpdGlvbiBmb3IgdGhlIGluc3BlY3RvciB2aWV3IHNpbmNlIHRoZSBiYW5uZXJz
IG9ubHkgc3RyZXRjaCBhcyB3aWRlIGFzIHRoZSBpbnNwZWN0ZWQgdmlldy4KKyAgICAgICAgaW5z
cGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVjdChpbnNwZWN0b3JXaWR0aCwgMCwgcGFyZW50V2lk
dGggLSBpbnNwZWN0b3JXaWR0aCwgaW5zcGVjdGVkVmlld1RvcCk7CisgICAgICAgIG5ld0luc3Bl
Y3RvclZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgaW5zcGVjdG9yV2lkdGgsIE5TSGVpZ2h0
KHBhcmVudEJvdW5kcykpOworCisgICAgICAgIGlmIChOU1dpbmRvdyAqaW5zcGVjdG9yV2luZG93
ID0gaW5zcGVjdG9yVmlldy53aW5kb3cpIHsKKyAgICAgICAgICAgIE5TUmVjdCBjb250ZW50TGF5
b3V0UmVjdCA9IFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBjb252ZXJ0UmVjdDppbnNwZWN0b3JX
aW5kb3cuY29udGVudExheW91dFJlY3QgZnJvbVZpZXc6bmlsXTsKKyAgICAgICAgICAgIG5ld0lu
c3BlY3RvclZpZXdGcmFtZSA9IE5TSW50ZXJzZWN0aW9uUmVjdChuZXdJbnNwZWN0b3JWaWV3RnJh
bWUsIGNvbnRlbnRMYXlvdXRSZWN0KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgfQorCisgICAgaWYgKE5TRXF1YWxSZWN0cyhvbGRJbnNwZWN0b3JWaWV3RnJhbWUsIG5l
d0luc3BlY3RvclZpZXdGcmFtZSkgJiYgTlNFcXVhbFJlY3RzKFtpbnNwZWN0ZWRWaWV3IGZyYW1l
XSwgaW5zcGVjdGVkVmlld0ZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRGlzYWJs
ZSBzY3JlZW4gdXBkYXRlcyB0byBtYWtlIHN1cmUgdGhlIGxheWVycyBmb3IgYm90aCB2aWV3cyBy
ZXNpemUgaW4gc3luYy4KKyAgICBbaW5zcGVjdG9yVmlldy53aW5kb3cgZGlzYWJsZVNjcmVlblVw
ZGF0ZXNVbnRpbEZsdXNoXTsKKworICAgIFtpbnNwZWN0b3JWaWV3IHNldEZyYW1lOm5ld0luc3Bl
Y3RvclZpZXdGcmFtZV07CisgICAgW2luc3BlY3RlZFZpZXcgc2V0RnJhbWU6aW5zcGVjdGVkVmll
d0ZyYW1lXTsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNw
ZWN0ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3Bl
Y3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBOU1JlY3QgaW5zcGVj
dGVkVmlld1JlY3QgPSBbaW5zcGVjdGVkVmlldyBmcmFtZV07CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbnNwZWN0ZWRWaWV3UmVjdC5zaXplLmhlaWdodCk7Cit9CisKK3Vuc2ln
bmVkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQor
eworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9y
QXR0YWNobWVudFZpZXcoKTsKKyAgICBOU1JlY3QgaW5zcGVjdGVkVmlld1JlY3QgPSBbaW5zcGVj
dGVkVmlldyBmcmFtZV07CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnNwZWN0
ZWRWaWV3UmVjdC5zaXplLndpZHRoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybUF0dGFjaCgpCit7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVk
UGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIFdLV2ViVmlldyAqaW5zcGVj
dG9yVmlldyA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOworCisgICAgaWYg
KG1faW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxl
Z2F0ZTpuaWxdOworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOworICAgICAgICBt
X2luc3BlY3RvcldpbmRvdyA9IG5pbDsKKyAgICB9CisKKyAgICBbaW5zcGVjdG9yVmlldyByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKworICAgIENHRmxvYXQgY3VycmVudERpbWVuc2lvbjsKKyAgICBz
d2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0
b206CisgICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lk
dGhTaXphYmxlIHwgTlNWaWV3TWF4WU1hcmdpbl07CisgICAgICAgIGN1cnJlbnREaW1lbnNpb24g
PSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKKyAgICAgICAg
W2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdIZWlnaHRTaXphYmxlIHwg
TlNWaWV3TWluWE1hcmdpbl07CisgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0b3JQ
YWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6CisgICAgICAgIFtpbnNwZWN0b3JWaWV3
IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3SGVpZ2h0U2l6YWJsZSB8IE5TVmlld01heFhNYXJn
aW5dOworICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2Vz
KCkuaW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoY3VycmVudERpbWVuc2lvbik7CisKKyAgICBb
aW5zcGVjdGVkVmlldy5zdXBlcnZpZXcgYWRkU3VidmlldzppbnNwZWN0b3JWaWV3IHBvc2l0aW9u
ZWQ6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOmluc3BlY3RlZFZpZXddOworICAgIFtpbnNwZWN0
b3JWaWV3LndpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6aW5zcGVjdG9yVmlld107Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1EZXRhY2goKQoreworICAgIE5TVmlldyAq
aW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXco
KTsKKyAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlciB3ZWJWaWV3XTsKKworICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXdd
OworCisgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNp
emFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlXTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdl
IHNpemUgdGhlIGluc3BlY3RlZCB2aWV3J3MgZnJhbWUgYWZ0ZXIgZGV0YWNoaW5nIHNvIHRoYXQg
aXQgdGFrZXMgdXAgdGhlIHNwYWNlIHRoYXQgdGhlCisgICAgLy8gYXR0YWNoZWQgaW5zcGVjdG9y
IHVzZWQgdG8uIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3
IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuCisKKyAgICBpbnNwZWN0ZWRWaWV3LmZy
YW1lID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGluc3BlY3RlZFZpZXcuc3VwZXJ2aWV3LmJv
dW5kcyksIE5TTWF4WShpbnNwZWN0ZWRWaWV3LmZyYW1lKSk7CisKKyAgICAvLyBSZXR1cm4gZWFy
bHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNs
b3NlZCB3aGlsZSBhdHRhY2hlZAorICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQg
c2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KKyAgICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBvcGVuKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAg
aWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGluc3BlY3RlZFZpZXdG
cmFtZURpZENoYW5nZShoZWlnaHQpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKK3sKKyAgICBpZiAo
IW1faXNBdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5zcGVjdGVkVmlld0ZyYW1l
RGlkQ2hhbmdlKHdpZHRoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9zaGVldFJlY3Qg
PSByZWN0OworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5k
b3dEcmFnKCkKK3sKKyAgICBpZiAoYXV0byogd2ViVmlldyA9IFttX2luc3BlY3RvclZpZXdDb250
cm9sbGVyIHdlYlZpZXddKSB7CisgICAgICAgIGlmICh3ZWJWaWV3LT5fcGFnZSkKKyAgICAgICAg
ICAgIHdlYlZpZXctPl9wYWdlLT5zdGFydFdpbmRvd0RyYWcoKTsKKyAgICB9Cit9CisKK1N0cmlu
ZyBXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sKKyAgICByZXR1cm4g
W1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgVVJMRm9ySW5zcGVjdG9yUmVzb3VyY2U6QCJNYWlu
Lmh0bWwiXS5hYnNvbHV0ZVN0cmluZzsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJUHJveHk6
Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKK3sKKyAgICByZXR1cm4gW1dLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIgVVJMRm9ySW5zcGVjdG9yUmVzb3VyY2U6QCJUZXN0Lmh0bWwiXS5hYnNvbHV0ZVN0
cmluZzsKK30KKworc3RhdGljIE5TRGljdGlvbmFyeSAqc3lzdGVtVmVyc2lvblBsaXN0KCkKK3sK
KyAgICBOU1N0cmluZyAqc3lzdGVtTGlicmFyeVBhdGggPSBbTlNTZWFyY2hQYXRoRm9yRGlyZWN0
b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1N5c3RlbURvbWFpbk1hc2ssIFlF
Uykgb2JqZWN0QXRJbmRleDowXTsKKyAgICBOU1N0cmluZyAqc3lzdGVtVmVyc2lvblBsaXN0UGF0
aCA9IFtzeXN0ZW1MaWJyYXJ5UGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJD
b3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCJdOworICAgIE5TRGljdGlvbmFyeSAqc3lz
dGVtVmVyc2lvbkluZm8gPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoQ29udGVudHNPZkZp
bGU6c3lzdGVtVmVyc2lvblBsaXN0UGF0aF07CisgICAgcmV0dXJuIHN5c3RlbVZlcnNpb25JbmZv
OworfQorCitEZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5mb0Zvckxv
Y2FsRGVidWdnYWJsZSgpCit7CisgICAgTlNEaWN0aW9uYXJ5ICpwbGlzdCA9IHN5c3RlbVZlcnNp
b25QbGlzdCgpOworCisgICAgRGVidWdnYWJsZUluZm9EYXRhIHJlc3VsdDsKKyAgICByZXN1bHQu
ZGVidWdnYWJsZVR5cGUgPSBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdlOworICAg
IHJlc3VsdC50YXJnZXRQbGF0Zm9ybU5hbWUgPSAibWFjT1MiX3M7CisgICAgcmVzdWx0LnRhcmdl
dEJ1aWxkVmVyc2lvbiA9IHBsaXN0W0AiUHJvZHVjdEJ1aWxkVmVyc2lvbiJdOworICAgIHJlc3Vs
dC50YXJnZXRQcm9kdWN0VmVyc2lvbiA9IHBsaXN0W0AiUHJvZHVjdFVzZXJWaXNpYmxlVmVyc2lv
biJdOworICAgIHJlc3VsdC50YXJnZXRJc1NpbXVsYXRvciA9IGZhbHNlOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjphcHBseUZvcmNlZEFwcGVh
cmFuY2UoKQoreworICAgIE5TQXBwZWFyYW5jZSAqcGxhdGZvcm1BcHBlYXJhbmNlOworICAgIHN3
aXRjaCAobV9mcm9udGVuZEFwcGVhcmFuY2UpIHsKKyAgICBjYXNlIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpBcHBlYXJhbmNlOjpTeXN0ZW06CisgICAgICAgIHBsYXRmb3JtQXBwZWFyYW5jZSA9
IG5pbDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjpBcHBlYXJhbmNlOjpMaWdodDoKKyAgICAgICAgcGxhdGZvcm1BcHBlYXJhbmNlID0gW05TQXBw
ZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6TlNBcHBlYXJhbmNlTmFtZUFxdWFdOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2U6OkRh
cms6CisgICAgICAgIHBsYXRmb3JtQXBwZWFyYW5jZSA9IFtOU0FwcGVhcmFuY2UgYXBwZWFyYW5j
ZU5hbWVkOk5TQXBwZWFyYW5jZU5hbWVEYXJrQXF1YV07CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGlmIChOU1dpbmRvdyAqd2luZG93ID0gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCkpCisg
ICAgICAgIHdpbmRvdy5hcHBlYXJhbmNlID0gcGxhdGZvcm1BcHBlYXJhbmNlOworCisgICAgW21f
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10uYXBwZWFyYW5jZSA9IHBsYXRmb3JtQXBw
ZWFyYW5jZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29j
a2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKaW5kZXggNmY2OTg2MTVi
M2VmMGM1YjM0YzUwNmQ3YjgzOTZkMzkyNzRkNjE1Yy4uYjFhY2Q4Mjc1Nzg2YTg0YWQ4NzY3NDJm
ODIxMGQxMWY2ZDFhM2I1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApA
QCAtMzAsMTcgKzMwLDE3IEBACiAKICNpbmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5mby5oIgogI2lu
Y2x1ZGUgIkFQSUluc3BlY3RvckNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuaCIK
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmlu
YWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgeworY2xhc3MgUmVtb3Rl
SW5zcGVjdG9yUHJveHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNs
aWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKIHB1YmxpYzoKICAgICBSZW1v
dGVJbnNwZWN0b3JQcm94eShSZW1vdGVJbnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNsaWVudCwg
Q29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQsIEluc3BlY3Rvcjo6
RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUpCi0gICAgICAgIDogbV9wcm94eShSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCisgICAgICAgIDogbV9wcm94eShSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5OjpjcmVhdGUoKSkKICAgICAgICAgLCBtX2luc3BlY3RvckNsaWVudChp
bnNwZWN0b3JDbGllbnQpCiAgICAgICAgICwgbV9jb25uZWN0aW9uSUQoY29ubmVjdGlvbklEKQog
ICAgICAgICAsIG1fdGFyZ2V0SUQodGFyZ2V0SUQpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9wcm94eS0+c2hvdygpOwogICAgIH0KIAotICAgIC8vIE1BUks6IFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5Q2xpZW50IG1ldGhvZHMKKyAgICAvLyBNQVJLOiBSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5Q2xpZW50IG1ldGhvZHMKIAogICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICB7CkBAIC04NSwxMyArODUsMTMgQEAgcHVi
bGljOgogICAgICAgICBtX2luc3BlY3RvckNsaWVudC5jbG9zZUZyb21Gcm9udGVuZChtX2Nvbm5l
Y3Rpb25JRCwgbV90YXJnZXRJRCk7CiAgICAgfQogCi0gICAgUmVmPEFQSTo6SW5zcGVjdG9yQ29u
ZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbkZvclJlbW90ZUluc3BlY3RvcihSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eSYpCisgICAgUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbkZvclJlbW90ZUluc3BlY3RvcihSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5JikKICAg
ICB7CiAgICAgICAgIHJldHVybiBBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb246OmNyZWF0ZSgp
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1f
cHJveHk7CisgICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk+IG1fcHJveHk7CiAgICAg
UmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKICAgICBDb25uZWN0aW9u
SUQgbV9jb25uZWN0aW9uSUQ7CiAgICAgVGFyZ2V0SUQgbV90YXJnZXRJRDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDUzODZlNjIwMzU0ZjJhMDg5YTFkMjFkZGQyZmI3MDkxNmI3ODcyODUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKLSNpbmNs
dWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgTFBDVFNUUiBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wID0gVEVYVCgiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQ
b2ludGVyIik7Ci1jb25zdCBMUENXU1RSIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1l
ID0gTCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzIjsKLQotTFJFU1VMVCBDQUxMQkFDSyBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6V25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFS
QU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFJlbW90ZVdlYkluc3BlY3RvclByb3h5Kj4oOjpH
ZXRQcm9wKGh3bmQsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3ApKTsKLQotICAg
IHN3aXRjaCAobXNnKSB7Ci0gICAgY2FzZSBXTV9TSVpFOgotICAgICAgICByZXR1cm4gY2xpZW50
LT5zaXplQ2hhbmdlKCk7Ci0gICAgY2FzZSBXTV9DTE9TRToKLSAgICAgICAgcmV0dXJuIGNsaWVu
dC0+b25DbG9zZSgpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Ci19Ci0K
LXN0YXRpYyBBVE9NIHJlZ2lzdGVyV2luZG93Q2xhc3MoKQotewotICAgIHN0YXRpYyBib29sIGhh
dmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKLSAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRX
aW5kb3dDbGFzcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBXTkRDTEFTU0VYIHdjZXg7
Ci0gICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0gICAgd2NleC5zdHlsZSAg
ICAgICAgICA9IDA7Ci0gICAgd2NleC5scGZuV25kUHJvYyAgICA9IFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpXbmRQcm9jOwotICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOwotICAgIHdjZXgu
Y2JXbmRFeHRyYSAgICAgPSAwOwotICAgIHdjZXguaEluc3RhbmNlICAgICAgPSAwOwotICAgIHdj
ZXguaEljb24gICAgICAgICAgPSAwOwotICAgIHdjZXguaEN1cnNvciAgICAgICAgPSBMb2FkQ3Vy
c29yKDAsIElEQ19BUlJPVyk7Ci0gICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IDA7Ci0gICAgd2Nl
eC5scHN6TWVudU5hbWUgICA9IDA7Ci0gICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5Q2xhc3NOYW1lOwotICAgIHdjZXguaEljb25TbSAgICAgICAgPSAwOwot
Ci0gICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7Ci0gICAgcmV0dXJuIDo6UmVn
aXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKLX0KLQotTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6c2l6ZUNoYW5nZSgpCi17Ci0gICAgaWYgKCFtX3dlYlZpZXcpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgUkVDVCByZWN0OwotICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kSGFuZGxl
LCAmcmVjdCk7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV93ZWJWaWV3LT53aW5kb3coKSwgMCwgcmVj
dC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSBy
ZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKLSAgICByZXR1cm4gMDsKLX0KLQotTFJFU1VMVCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6b25DbG9zZSgpCi17Ci0gICAgOjpTaG93V2luZG93KG1fZnJv
bnRlbmRIYW5kbGUsIFNXX0hJREUpOwotICAgIGZyb250ZW5kRGlkQ2xvc2UoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIFJlZlB0cjxXZWJQcmVmZXJl
bmNlcz4gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2Vi
S2l0Mi4iLCAiV2ViS2l0Mi4iKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0QWxsb3dGaWxlQWNjZXNz
RnJvbUZpbGVVUkxzKHRydWUpOwotCi0jaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQotICAgIHBy
ZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwotICAgIHByZWZlcmVu
Y2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKLSNl
bmRpZgotCi0gICAgUmVmUHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3Vw
OjpjcmVhdGUoV2ViS2l0OjpkZWZhdWx0SW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBh
Z2UobnVsbHB0cikpOwotCi0gICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNv
bmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNz
UG9vbCgmV2ViS2l0OjpkZWZhdWx0SW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxG
b3JQYWdlKG51bGxwdHIpKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2Vz
KHByZWZlcmVuY2VzLmdldCgpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3Vw
KHBhZ2VHcm91cC5nZXQoKSk7Ci0KLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoNjAsIDIwMCwg
MTUwMCwgMTAwMCk7Ci0gICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwotICAgIG1fZnJvbnRlbmRI
YW5kbGUgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NO
YW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAotICAgICAgICByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgMCwgMCwgMCwgMCk7Ci0KLSAgICA6OlNldFBy
b3AobV9mcm9udGVuZEhhbmRsZSwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCwg
cmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKLSAgICBTaG93V2luZG93KG1fZnJvbnRl
bmRIYW5kbGUsIFNXX1NIT1cpOwotCi0gICAgUkVDVCByOwotICAgIDo6R2V0Q2xpZW50UmVjdCht
X2Zyb250ZW5kSGFuZGxlLCAmcik7Ci0gICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIs
IHBhZ2VDb25maWd1cmF0aW9uLCBtX2Zyb250ZW5kSGFuZGxlKTsKLSAgICByZXR1cm4gbV93ZWJW
aWV3LT5wYWdlKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
UmVzZXRTdGF0ZSgpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1C
cmluZ1RvRnJvbnQoKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKSB7IH0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1T
ZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgeyB9Ci12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlblVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJikg
eyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0
ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKSB7IH0KLQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0g
ICAgOjpEZXN0cm95V2luZG93KG1fZnJvbnRlbmRIYW5kbGUpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4v
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE2ZjNhZjM5ZjY2
OTBiNjFhMjU4YTU2ZWZmNmQyODI3MzIxZDM1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eVdp
bi5jcHAKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuaCIKKworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIK
KyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3Vw
LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ludFJlY3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBMUENUU1RSIFJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHlQb2ludGVyUHJvcCA9IFRFWFQoIlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHlQb2ludGVyIik7Citjb25zdCBMUENXU1RSIFJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHlDbGFzc05hbWUgPSBMIlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGFzcyI7CisKK0xS
RVNVTFQgQ0FMTEJBQ0sgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6V25kUHJvYyhIV05EIGh3
bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHkqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eSo+KDo6R2V0UHJvcChod25kLCBSZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5UG9pbnRlclByb3ApKTsKKworICAgIHN3aXRjaCAobXNnKSB7CisgICAgY2FzZSBXTV9TSVpF
OgorICAgICAgICByZXR1cm4gY2xpZW50LT5zaXplQ2hhbmdlKCk7CisgICAgY2FzZSBXTV9DTE9T
RToKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+b25DbG9zZSgpOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNn
LCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK3N0YXRpYyBBVE9NIHJlZ2lzdGVyV2luZG93Q2xhc3Mo
KQoreworICAgIHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsK
KyAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBXTkRDTEFTU0VYIHdjZXg7CisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xB
U1NFWCk7CisgICAgd2NleC5zdHlsZSAgICAgICAgICA9IDA7CisgICAgd2NleC5scGZuV25kUHJv
YyAgICA9IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OlduZFByb2M7CisgICAgd2NleC5jYkNs
c0V4dHJhICAgICA9IDA7CisgICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7CisgICAgd2NleC5o
SW5zdGFuY2UgICAgICA9IDA7CisgICAgd2NleC5oSWNvbiAgICAgICAgICA9IDA7CisgICAgd2Nl
eC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4Lmhi
ckJhY2tncm91bmQgID0gMDsKKyAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKKyAgICB3Y2V4
Lmxwc3pDbGFzc05hbWUgID0gUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNsYXNzTmFtZTsKKyAg
ICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKKworICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xh
c3MgPSB0cnVlOworICAgIHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Cit9CisKK0xS
RVNVTFQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2l6ZUNoYW5nZSgpCit7CisgICAgaWYg
KCFtX3dlYlZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgUkVDVCByZWN0OworICAgIDo6
R2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kSGFuZGxlLCAmcmVjdCk7CisgICAgOjpTZXRXaW5kb3dQ
b3MobV93ZWJWaWV3LT53aW5kb3coKSwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdo
dCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKKyAg
ICByZXR1cm4gMDsKK30KKworTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpvbkNs
b3NlKCkKK3sKKyAgICA6OlNob3dXaW5kb3cobV9mcm9udGVuZEhhbmRsZSwgU1dfSElERSk7Cisg
ICAgZnJvbnRlbmREaWRDbG9zZSgpOworICAgIHJldHVybiAwOworfQorCitXZWJQYWdlUHJveHkq
IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCkKK3sKKyAgICBSZWZQdHI8V2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzID0gV2Vi
UHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7Cisg
ICAgcHJlZmVyZW5jZXMtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyh0cnVlKTsKKwor
I2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKKyAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZCh0cnVlKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdl
c1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7CisjZW5kaWYKKworICAgIFJlZlB0cjxXZWJQ
YWdlR3JvdXA+IHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKFdlYktpdDo6ZGVmYXVs
dEluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKG51bGxwdHIpKTsKKworICAgIGF1
dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsK
KyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJldlYktpdDo6ZGVmYXVsdElu
c3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3RvckxldmVsRm9yUGFnZShudWxscHRyKSkpOworICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5nZXQoKSk7Cisg
ICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cChwYWdlR3JvdXAuZ2V0KCkpOworCisg
ICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDYwLCAyMDAsIDE1MDAsIDEwMDApOworICAgIHJlZ2lz
dGVyV2luZG93Q2xhc3MoKTsKKyAgICBtX2Zyb250ZW5kSGFuZGxlID0gOjpDcmVhdGVXaW5kb3dF
eCgwLCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVE
V0lORE9XLAorICAgICAgICByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSwgMCwgMCwgMCwgMCk7CisKKyAgICA6OlNldFByb3AobV9mcm9udGVuZEhhbmRsZSwg
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eVBvaW50ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhB
TkRMRT4odGhpcykpOworICAgIFNob3dXaW5kb3cobV9mcm9udGVuZEhhbmRsZSwgU1dfU0hPVyk7
CisKKyAgICBSRUNUIHI7CisgICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZy
KTsKKyAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24s
IG1fZnJvbnRlbmRIYW5kbGUpOworICAgIHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKSB7IH0K
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKSB7
IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtT3BlblVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJikgeyB9
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRl
KGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIHsgfQorCit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQorewor
ICAgIDo6RGVzdHJveVdpbmRvdyhtX2Zyb250ZW5kSGFuZGxlKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJv
eHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNw
ZWN0b3JQcm94eVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2OGQyMDc4
YzM3ZjA1MzUwNDdkYjE5YTRiZDgyNDg4ZWVmNTk0NGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYklu
c3BlY3RvclByb3h5LmgiCi0KLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAi
QVBJTmF2aWdhdGlvbkFjdGlvbi5oIgotI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgi
Ci0jaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKLSNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgIldlYlBy
b2Nlc3NQb29sLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2Vy
dGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVu
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dl
YkNvcmVCdW5kbGVXaW4uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVJbnN0YW5jZUhhbmRs
ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLmg+Ci0jaW5j
bHVkZSA8V2ViS2l0L1dLUGFnZS5oPgotCi0jaWYgVVNFKENGKQotI2luY2x1ZGUgPHd0Zi9jZi9D
RlVSTEV4dHJhcy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgY29u
c3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wID0gTCJXZWJJbnNwZWN0b3JQ
cm94eVBvaW50ZXIiOwotc3RhdGljIGNvbnN0IExQQ1dTVFIgV2ViSW5zcGVjdG9yUHJveHlDbGFz
c05hbWUgPSBMIldlYkluc3BlY3RvclByb3h5Q2xhc3MiOwotCi1zdHJ1Y3QgSW5zcGVjdGVkV2lu
ZG93SW5mbyB7Ci0gICAgaW50IGxlZnQ7Ci0gICAgaW50IHRvcDsKLSAgICBpbnQgdmlld1dpZHRo
OwotICAgIGludCB2aWV3SGVpZ2h0OwotICAgIGludCBwYXJlbnRXaWR0aDsKLSAgICBpbnQgcGFy
ZW50SGVpZ2h0OwotfTsKLQotc3RhdGljIEluc3BlY3RlZFdpbmRvd0luZm8gZ2V0SW5zcGVjdGVk
V2luZG93SW5mbyhIV05EIGluc3BlY3RlZFdpbmRvdywgSFdORCBwYXJlbnRXaW5kb3cpCi17Ci0g
ICAgUkVDVCByZWN0OwotICAgIDo6R2V0Q2xpZW50UmVjdChpbnNwZWN0ZWRXaW5kb3csICZyZWN0
KTsKLSAgICA6Ok1hcFdpbmRvd1BvaW50cyhpbnNwZWN0ZWRXaW5kb3csIHBhcmVudFdpbmRvdywg
KExQUE9JTlQpJnJlY3QsIDIpOwotCi0gICAgUkVDVCBwYXJlbnRSZWN0OwotICAgIDo6R2V0Q2xp
ZW50UmVjdChwYXJlbnRXaW5kb3csICZwYXJlbnRSZWN0KTsKLSAgICByZXR1cm4geyByZWN0Lmxl
ZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3Qu
dG9wLCBwYXJlbnRSZWN0LnJpZ2h0IC0gcGFyZW50UmVjdC5sZWZ0LCBwYXJlbnRSZWN0LmJvdHRv
bSAtIHBhcmVudFJlY3QudG9wIH07Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OndpbmRv
d1JlY2VpdmVkTWVzc2FnZShIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0sIExQQVJBTSBsUGFy
YW0pCi17Ci0gICAgc3dpdGNoIChtc2cpIHsKLSAgICBjYXNlIFdNX1dJTkRPV1BPU0NIQU5HSU5H
OiB7Ci0gICAgICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGF1dG8gd2luZG93UG9zID0gcmVpbnRlcnByZXRfY2FzdDxXSU5ET1dQT1MqPihsUGFy
YW0pOwotCi0gICAgICAgIGlmICh3aW5kb3dQb3MtPmZsYWdzICYgU1dQX05PU0laRSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBIV05EIHBhcmVudCA9IEdldFBhcmVudChod25kKTsK
LSAgICAgICAgUkVDVCBwYXJlbnRSZWN0OwotICAgICAgICBHZXRDbGllbnRSZWN0KHBhcmVudCwg
JnBhcmVudFJlY3QpOwotCi0gICAgICAgIFJFQ1QgaW5zcGVjdG9yUmVjdDsKLSAgICAgICAgR2V0
Q2xpZW50UmVjdChtX2luc3BlY3RvclZpZXdXaW5kb3csICZpbnNwZWN0b3JSZWN0KTsKLQotICAg
ICAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICAgICAgY2FzZSBBdHRhY2htZW50
U2lkZTo6Qm90dG9tOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnNwZWN0b3JIZWlnaHQgPSBX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVk
V2luZG93SGVpZ2h0KGluc3BlY3RvclJlY3QuYm90dG9tIC0gaW5zcGVjdG9yUmVjdC50b3AsIHdp
bmRvd1Bvcy0+Y3kpOwotICAgICAgICAgICAgd2luZG93UG9zLT5jeSAtPSBpbnNwZWN0b3JIZWln
aHQ7Ci0gICAgICAgICAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAs
IHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5j
eCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9aT1JERVIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgY2Fz
ZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3Rv
cldpZHRoID0gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWlu
ZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGluc3BlY3RvclJlY3QucmlnaHQgLSBpbnNwZWN0b3JSZWN0
LmxlZnQsIHdpbmRvd1Bvcy0+Y3gpOwotICAgICAgICAgICAgd2luZG93UG9zLT5jeCAtPSBpbnNw
ZWN0b3JXaWR0aDsKLSAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dp
bmRvdywgMCwgd2luZG93UG9zLT54ICsgd2luZG93UG9zLT5jeCwgd2luZG93UG9zLT55LCBpbnNw
ZWN0b3JXaWR0aCwgd2luZG93UG9zLT5jeSwgU1dQX05PWk9SREVSKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi1MUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclByb3h5Ojp3bmRQ
cm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17
Ci0gICAgV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViSW5z
cGVjdG9yUHJveHkqPig6OkdldFByb3AoaHduZCwgV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJv
cCkpOwotICAgIHN3aXRjaCAobXNnKSB7Ci0gICAgY2FzZSBXTV9TSVpFOgotICAgICAgICA6OlNl
dFdpbmRvd1BvcyhjbGllbnQtPm1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwgTE9XT1JE
KGxQYXJhbSksIEhJV09SRChsUGFyYW0pLCBTV1BfTk9aT1JERVIpOwotICAgICAgICByZXR1cm4g
MDsKLSAgICBjYXNlIFdNX0NMT1NFOgotICAgICAgICBjbGllbnQtPmNsb3NlKCk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1
cm4gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOwotfQotCi1ib29s
IFdlYkluc3BlY3RvclByb3h5OjpyZWdpc3RlcldpbmRvd0NsYXNzKCkKLXsKLSAgICBzdGF0aWMg
Ym9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7Ci0KLSAgICBpZiAoaGF2ZVJl
Z2lzdGVyZWRXaW5kb3dDbGFzcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaGF2ZVJlZ2lz
dGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7Ci0KLSAgICBXTkRDTEFTU0VYIHdjZXg7Ci0gICAgd2Nl
eC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0gICAgd2NleC5zdHlsZSA9IDA7Ci0gICAg
d2NleC5scGZuV25kUHJvYyA9IHduZFByb2M7Ci0gICAgd2NleC5jYkNsc0V4dHJhID0gMDsKLSAg
ICB3Y2V4LmNiV25kRXh0cmEgPSAwOwotICAgIHdjZXguaEluc3RhbmNlID0gV2ViQ29yZTo6aW5z
dGFuY2VIYW5kbGUoKTsKLSAgICB3Y2V4LmhJY29uID0gMDsKLSAgICB3Y2V4LmhDdXJzb3IgPSBM
b2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7Ci0gICAgd2NleC5oYnJCYWNrZ3JvdW5kID0gMDsKLSAg
ICB3Y2V4Lmxwc3pNZW51TmFtZSA9IDA7Ci0gICAgd2NleC5scHN6Q2xhc3NOYW1lID0gV2ViSW5z
cGVjdG9yUHJveHlDbGFzc05hbWU7Ci0gICAgd2NleC5oSWNvblNtID0gMDsKLSAgICByZXR1cm4g
OjpSZWdpc3RlckNsYXNzRXgoJndjZXgpOwotfQotCi1zdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFnZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25BY3Rpb25S
ZWYgbmF2aWdhdGlvbkFjdGlvblJlZiwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVy
UmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgLy8gQWxsb3cg
bm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgotICAgIEFQSTo6RnJhbWVJbmZv
KiBzb3VyY2VGcmFtZSA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+c291cmNlRnJhbWUo
KTsKLSAgICBpZiAoc291cmNlRnJhbWUgJiYgIXNvdXJjZUZyYW1lLT5pc01haW5GcmFtZSgpKSB7
Ci0gICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgY29uc3QgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViSW5zcGVjdG9yUHJveHkqPihjbGllbnRJbmZvKTsKLSAg
ICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOwotCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnJlcXVlc3QoKTsKLQot
ICAgIC8vIEFsbG93IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCi0gICAgaWYg
KFdlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKHJlcXVlc3QudXJs
KCkpKSB7Ci0gICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UgZnJvbSBsb2Fk
aW5nIGluIHRoZSBpbnNwZWN0b3IncyBwYWdlLgotICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPmln
bm9yZSgpOwotCi0gICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBh
Z2UuCi0gICAgd2ViSW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFBhZ2UoKS0+bG9hZFJlcXVlc3Qo
V1RGTW92ZShyZXF1ZXN0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYlByb2Nlc3NEaWRDcmFzaChX
S1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2ViSW5zcGVjdG9yUHJv
eHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPihj
b25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Ci0gICAgQVNTRVJUKHdlYkluc3BlY3RvclBy
b3h5KTsKLSAgICB3ZWJJbnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgpOwotfQotCi1XZWJQ
YWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgp
Ci17Ci0gICAgQVNTRVJUKGluc3BlY3RlZFBhZ2UoKSk7Ci0KLSAgICBhdXRvIHByZWZlcmVuY2Vz
ID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIu
Iik7Ci0jaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQotICAgIC8vIEFsbG93IGRldmVsb3BlcnMg
dG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFu
Z2luZyBzZXR0aW5ncy4KLSAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZCh0cnVlKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29u
c29sZUVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBwcmVmZXJlbmNlcy0+c2V0QWxsb3dGaWxl
QWNjZXNzRnJvbUZpbGVVUkxzKHRydWUpOwotICAgIHByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0
UnVudGltZUZsYWdzKHsgfSk7Ci0gICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNy
ZWF0ZShXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShp
bnNwZWN0ZWRQYWdlKCkpKTsKLSAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdl
Q29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nl
c3NQb29sKCZXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0aW9uTGV2
ZWwoKSkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNl
cy5wdHIoKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cChwYWdlR3JvdXAu
cHRyKCkpOwotCi0gICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5hdmlnYXRpb25DbGllbnQg
PSB7Ci0gICAgICAgIHsgMCwgdGhpcyB9LAotICAgICAgICBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uLAotICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
UmVzcG9uc2UKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZAot
ICAgICAgICBudWxscHRyLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbgotICAgICAg
ICBudWxscHRyLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmln
YXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbgot
ICAgICAgICBudWxscHRyLCAvLyBkaWRDb21taXROYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIs
IC8vIGRpZEZpbmlzaE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbE5hdmln
YXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJh
bWUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoRG9jdW1lbnRMb2FkCi0gICAgICAgIG51
bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8g
cmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UKLSAgICAgICAgbnVsbHB0ciwgLy8gY2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZQotICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKLSAgICAgICAgd2ViUHJvY2Vzc0RpZENyYXNoLAot
ICAgICAgICBudWxscHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5Ci0KLSAgICAgICAgbnVs
bHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBudWxscHRyLCAvLyB3
aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRW5kTmF2aWdh
dGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1
cmVTbmFwc2hvdAotICAgIH07Ci0KLSAgICBSRUNUIHIgPSB7IDAsIDAsIHN0YXRpY19jYXN0PExP
Tkc+KGluaXRpYWxXaW5kb3dXaWR0aCksIHN0YXRpY19jYXN0PExPTkc+KGluaXRpYWxXaW5kb3dI
ZWlnaHQpIH07Ci0gICAgYXV0byBwYWdlID0gaW5zcGVjdGVkUGFnZSgpOwotICAgIG1faW5zcGVj
dGVkVmlld1dpbmRvdyA9IHBhZ2UtPnZpZXdXaWRnZXQoKTsKLSAgICBtX2luc3BlY3RlZFZpZXdQ
YXJlbnRXaW5kb3cgPSA6OkdldFBhcmVudChtX2luc3BlY3RlZFZpZXdXaW5kb3cpOwotICAgIGF1
dG8gdmlldyA9IFdlYlZpZXc6OmNyZWF0ZShyLCBwYWdlQ29uZmlndXJhdGlvbiwgbV9pbnNwZWN0
ZWRWaWV3UGFyZW50V2luZG93KTsKLSAgICBtX2luc3BlY3RvclZpZXcgPSAmdmlldy5sZWFrUmVm
KCk7Ci0gICAgYXV0byBpbnNwZWN0b3JQYWdlID0gbV9pbnNwZWN0b3JWaWV3LT5wYWdlKCk7Ci0g
ICAgbV9pbnNwZWN0b3JWaWV3V2luZG93ID0gaW5zcGVjdG9yUGFnZS0+dmlld1dpZGdldCgpOwot
ICAgIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAm
bmF2aWdhdGlvbkNsaWVudC5iYXNlKTsKLQotICAgIHJldHVybiBpbnNwZWN0b3JQYWdlOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2lu
ZG93KCkKLXsKLSAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6OnJlbW92ZUxp
c3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7Ci0gICAgbV9pbnNwZWN0b3JWaWV3
ID0gbnVsbHB0cjsKLSAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRyOwotICAgIGlmIChtX2lu
c3BlY3RvclZpZXdXaW5kb3cpIHsKLSAgICAgICAgOjpEZXN0cm95V2luZG93KG1faW5zcGVjdG9y
Vmlld1dpbmRvdyk7Ci0gICAgICAgIG1faW5zcGVjdG9yVmlld1dpbmRvdyA9IG51bGxwdHI7Ci0g
ICAgfQotICAgIGlmIChtX2luc3BlY3RvckRldGFjaFdpbmRvdykgewotICAgICAgICA6OlJlbW92
ZVByb3AobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclBy
b3ApOwotICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpOwot
ICAgICAgICBtX2luc3BlY3RvckRldGFjaFdpbmRvdyA9IG51bGxwdHI7Ci0gICAgfQotICAgIG1f
aW5zcGVjdGVkVmlld1dpbmRvdyA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0ZWRWaWV3UGFyZW50
V2luZG93ID0gbnVsbHB0cjsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JQYWdlVVJMKCkKLXsKLSNpZiBVU0UoQ0YpCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBodG1s
VVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRC
dW5kbGUoKSwgQ0ZTVFIoIk1haW4iKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZTVFIoIldlYkluc3BlY3Rv
clVJIikpKTsKLSAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoaHRtbFVSTFJlZi5nZXQoKSk7Ci0j
ZWxzZQotICAgIHJldHVybiB7IH07Ci0jZW5kaWYKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclBy
b3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0jaWYgVVNFKENGKQotICAgIFJldGFpblB0
cjxDRlVSTFJlZj4gaHRtbFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwo
V2ViQ29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RSKCJUZXN0IiksIENGU1RSKCJodG1sIiksIENG
U1RSKCJXZWJJbnNwZWN0b3JVSSIpKSk7Ci0gICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKGh0bWxV
UkxSZWYuZ2V0KCkpOwotI2Vsc2UKLSAgICByZXR1cm4geyB9OwotI2VuZGlmCi19Ci0KLURlYnVn
Z2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgp
Ci17Ci0gICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNz46IHRoaXMgc2hv
dWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEuCi0gICAgcmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0
YTo6ZW1wdHkoKTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5z
cGVjdGVkV2luZG93SGVpZ2h0KCkKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRS
ZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywgJnJlY3QpOwotICAgIHJldHVybiByZWN0LmJvdHRv
bSAtIHJlY3QudG9wOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1J
bnNwZWN0ZWRXaW5kb3dXaWR0aCgpCi17Ci0gICAgUkVDVCByZWN0OwotICAgIDo6R2V0Q2xpZW50
UmVjdChtX2luc3BlY3RlZFZpZXdXaW5kb3csICZyZWN0KTsKLSAgICByZXR1cm4gcmVjdC5yaWdo
dCAtIHJlY3QubGVmdDsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRh
Y2goKQotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRTaXplID0g
MzAwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDc1
MDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUw
OwotCi0gICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2luZG93ICYmIDo6R2V0UGFyZW50KG1faW5z
cGVjdG9yVmlld1dpbmRvdykgPT0gbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpIHsKLSAgICAgICAg
OjpTZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRX
aW5kb3cpOwotICAgICAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFNX
X0hJREUpOwotICAgIH0KLQotICAgIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6
YWRkTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKLQotICAgIGlmIChtX2F0
dGFjaG1lbnRTaWRlID09IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pIHsKLSAgICAgICAgdW5zaWdu
ZWQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQo
KSAqIDMgLyA0OwotICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHN0ZDo6
bWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwg
bWF4aW11bUF0dGFjaGVkSGVpZ2h0KSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVk
IG1heGltdW1BdHRhY2hlZFdpZHRoID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpICog
MyAvIDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aChzdGQ6Om1heCht
aW5pbXVtQXR0YWNoZWRXaWR0aCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11
bUF0dGFjaGVkV2lkdGgpKSk7Ci0gICAgfQotICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvclZp
ZXdXaW5kb3csIFNXX1NIT1cpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bURldGFjaCgpCi17Ci0gICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCktPmhhc1J1bm5pbmdQcm9jZXNz
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cp
IHsKLSAgICAgICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwotICAgICAgICBtX2luc3BlY3RvckRl
dGFjaFdpbmRvdyA9IDo6Q3JlYXRlV2luZG93RXgoMCwgV2ViSW5zcGVjdG9yUHJveHlDbGFzc05h
bWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCi0gICAgICAgICAgICBDV19VU0VERUZBVUxULCBD
V19VU0VERUZBVUxULCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRpYWxXaW5kb3dIZWlnaHQsCi0g
ICAgICAgICAgICAwLCAwLCBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpLCAwKTsKLSAgICAgICAg
OjpTZXRQcm9wKG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBXZWJJbnNwZWN0b3JQcm94eVBvaW50
ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOwotICAgIH0KLQotICAgIFdl
YkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0
ZWRWaWV3V2luZG93LCB0aGlzKTsKLQotICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENsaWVudFJl
Y3QobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csICZyZWN0KTsKLSAgICBhdXRvIHdpbmRvd0luZm8g
PSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dpbmRvdywgbV9pbnNwZWN0
ZWRWaWV3UGFyZW50V2luZG93KTsKLSAgICA6OlNldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5k
b3csIG1faW5zcGVjdG9yRGV0YWNoV2luZG93KTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX2luc3Bl
Y3RvclZpZXdXaW5kb3csIDAsIDAsIDAsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90
dG9tIC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNw
ZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5k
b3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhl
aWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOwotCi0gICAgaWYgKG1faXNWaXNp
YmxlKQotICAgICAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFNXX1NI
T1cpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBhdXRvIHdpbmRvd0luZm8gPSBnZXRJ
bnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dpbmRvdywgbV9pbnNwZWN0ZWRWaWV3
UGFyZW50V2luZG93KTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3cs
IDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSBoZWlnaHQsIHdp
bmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIGhlaWdodCwgU1dQX05PWk9S
REVSKTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRv
d0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5k
b3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNX
UF9OT1pPUkRFUik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0
YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsKLSAgICBhdXRvIHdpbmRvd0luZm8g
PSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dpbmRvdywgbV9pbnNwZWN0
ZWRWaWV3UGFyZW50V2luZG93KTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdX
aW5kb3csIDAsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aWR0aCwgd2luZG93SW5mby50b3As
IHdpZHRoLCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9a
T1JERVIpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwgd2lu
ZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdp
bmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwg
U1dQX05PWk9SREVSKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRT
aGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi1ib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1C
cmluZ1RvRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1T
ZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBl
YXJhbmNlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIC8qIHVybCAq
LykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8m
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hB
dmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgLyogYXZhaWxhYmxlICovKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJv
bnRlbmRXaW5kb3coKQotewotICAgIHBsYXRmb3JtRGV0YWNoKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9X
ZWJJbnNwZWN0b3JVSVByb3h5V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci93aW4vV2ViSW5zcGVjdG9yVUlQcm94eVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y3YjgxOWEy
Yjc3YmYzMzUzMWY4YTkxYWY3ZmU2ZDQzNTQzZmRkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yVUlQcm94eVdpbi5j
cHAKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCisKKyNpbmNsdWRlICJBUElOYXZpZ2F0
aW9uLmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbkFjdGlvbi5oIgorI2luY2x1ZGUgIkFQSVBh
Z2VDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKKyNpbmNsdWRl
ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAu
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5o
IgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVCdW5kbGVXaW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dl
YkNvcmVJbnN0YW5jZUhhbmRsZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93TWVzc2FnZUJy
b2FkY2FzdGVyLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUGFnZS5oPgorCisjaWYgVVNFKENGKQor
I2luY2x1ZGUgPHd0Zi9jZi9DRlVSTEV4dHJhcy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgY29uc3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JVSVByb3h5UG9pbnRlclBy
b3AgPSBMIldlYkluc3BlY3RvclVJUHJveHlQb2ludGVyIjsKK3N0YXRpYyBjb25zdCBMUENXU1RS
IFdlYkluc3BlY3RvclVJUHJveHlDbGFzc05hbWUgPSBMIldlYkluc3BlY3RvclVJUHJveHlDbGFz
cyI7CisKK3N0cnVjdCBJbnNwZWN0ZWRXaW5kb3dJbmZvIHsKKyAgICBpbnQgbGVmdDsKKyAgICBp
bnQgdG9wOworICAgIGludCB2aWV3V2lkdGg7CisgICAgaW50IHZpZXdIZWlnaHQ7CisgICAgaW50
IHBhcmVudFdpZHRoOworICAgIGludCBwYXJlbnRIZWlnaHQ7Cit9OworCitzdGF0aWMgSW5zcGVj
dGVkV2luZG93SW5mbyBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKEhXTkQgaW5zcGVjdGVkV2luZG93
LCBIV05EIHBhcmVudFdpbmRvdykKK3sKKyAgICBSRUNUIHJlY3Q7CisgICAgOjpHZXRDbGllbnRS
ZWN0KGluc3BlY3RlZFdpbmRvdywgJnJlY3QpOworICAgIDo6TWFwV2luZG93UG9pbnRzKGluc3Bl
Y3RlZFdpbmRvdywgcGFyZW50V2luZG93LCAoTFBQT0lOVCkmcmVjdCwgMik7CisKKyAgICBSRUNU
IHBhcmVudFJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KHBhcmVudFdpbmRvdywgJnBhcmVudFJl
Y3QpOworICAgIHJldHVybiB7IHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0
LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIHBhcmVudFJlY3QucmlnaHQgLSBwYXJlbnRS
ZWN0LmxlZnQsIHBhcmVudFJlY3QuYm90dG9tIC0gcGFyZW50UmVjdC50b3AgfTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojp3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCBod25kLCBV
SU5UIG1zZywgV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQoreworICAgIHN3aXRjaCAobXNnKSB7Cisg
ICAgY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0lORzogeworICAgICAgICBpZiAoIW1faXNBdHRhY2hl
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHdpbmRvd1BvcyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8V0lORE9XUE9TKj4obFBhcmFtKTsKKworICAgICAgICBpZiAod2luZG93UG9z
LT5mbGFncyAmIFNXUF9OT1NJWkUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSFdO
RCBwYXJlbnQgPSBHZXRQYXJlbnQoaHduZCk7CisgICAgICAgIFJFQ1QgcGFyZW50UmVjdDsKKyAg
ICAgICAgR2V0Q2xpZW50UmVjdChwYXJlbnQsICZwYXJlbnRSZWN0KTsKKworICAgICAgICBSRUNU
IGluc3BlY3RvclJlY3Q7CisgICAgICAgIEdldENsaWVudFJlY3QobV9pbnNwZWN0b3JWaWV3V2lu
ZG93LCAmaW5zcGVjdG9yUmVjdCk7CisKKyAgICAgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRl
KSB7CisgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTogeworICAgICAgICAgICAg
dW5zaWduZWQgaW5zcGVjdG9ySGVpZ2h0ID0gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChpbnNwZWN0b3JSZWN0LmJv
dHRvbSAtIGluc3BlY3RvclJlY3QudG9wLCB3aW5kb3dQb3MtPmN5KTsKKyAgICAgICAgICAgIHdp
bmRvd1Bvcy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0OworICAgICAgICAgICAgOjpTZXRXaW5kb3dQ
b3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dQb3MtPngsIHdpbmRvd1Bvcy0+eSAr
IHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+Y3gsIGluc3BlY3RvckhlaWdodCwgU1dQX05PWk9S
REVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXR0YWNo
bWVudFNpZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OiB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbnNwZWN0b3JXaWR0aCA9IFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChpbnNwZWN0
b3JSZWN0LnJpZ2h0IC0gaW5zcGVjdG9yUmVjdC5sZWZ0LCB3aW5kb3dQb3MtPmN4KTsKKyAgICAg
ICAgICAgIHdpbmRvd1Bvcy0+Y3ggLT0gaW5zcGVjdG9yV2lkdGg7CisgICAgICAgICAgICA6OlNl
dFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd1Bvcy0+eCArIHdpbmRv
d1Bvcy0+Y3gsIHdpbmRvd1Bvcy0+eSwgaW5zcGVjdG9yV2lkdGgsIHdpbmRvd1Bvcy0+Y3ksIFNX
UF9OT1pPUkRFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworTFJFU1VMVCBDQUxM
QkFDSyBXZWJJbnNwZWN0b3JVSVByb3h5Ojp3bmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQ
QVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgV2ViSW5zcGVjdG9yVUlQcm94eSog
Y2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJJbnNwZWN0b3JVSVByb3h5Kj4oOjpHZXRQcm9w
KGh3bmQsIFdlYkluc3BlY3RvclVJUHJveHlQb2ludGVyUHJvcCkpOworICAgIHN3aXRjaCAobXNn
KSB7CisgICAgY2FzZSBXTV9TSVpFOgorICAgICAgICA6OlNldFdpbmRvd1BvcyhjbGllbnQtPm1f
aW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwgTE9XT1JEKGxQYXJhbSksIEhJV09SRChsUGFy
YW0pLCBTV1BfTk9aT1JERVIpOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdNX0NMT1NF
OgorICAgICAgICBjbGllbnQtPmNsb3NlKCk7CisgICAgICAgIHJldHVybiAwOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3
bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOworfQorCitib29sIFdlYkluc3BlY3RvclVJUHJveHk6
OnJlZ2lzdGVyV2luZG93Q2xhc3MoKQoreworICAgIHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVk
V2luZG93Q2xhc3MgPSBmYWxzZTsKKworICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNz
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0g
dHJ1ZTsKKworICAgIFdORENMQVNTRVggd2NleDsKKyAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihX
TkRDTEFTU0VYKTsKKyAgICB3Y2V4LnN0eWxlID0gMDsKKyAgICB3Y2V4LmxwZm5XbmRQcm9jID0g
d25kUHJvYzsKKyAgICB3Y2V4LmNiQ2xzRXh0cmEgPSAwOworICAgIHdjZXguY2JXbmRFeHRyYSA9
IDA7CisgICAgd2NleC5oSW5zdGFuY2UgPSBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpOworICAg
IHdjZXguaEljb24gPSAwOworICAgIHdjZXguaEN1cnNvciA9IExvYWRDdXJzb3IoMCwgSURDX0FS
Uk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91bmQgPSAwOworICAgIHdjZXgubHBzek1lbnVOYW1l
ID0gMDsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBXZWJJbnNwZWN0b3JVSVByb3h5Q2xhc3NO
YW1lOworICAgIHdjZXguaEljb25TbSA9IDA7CisgICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4
KCZ3Y2V4KTsKK30KKworc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bihXS1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rp
b25SZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIC8vIEFsbG93IG5vbi1tYWluIGZyYW1lcyB0
byBuYXZpZ2F0ZSBhbnl3aGVyZS4KKyAgICBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUgPSB0
b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnNvdXJjZUZyYW1lKCk7CisgICAgaWYgKHNvdXJj
ZUZyYW1lICYmICFzb3VyY2VGcmFtZS0+aXNNYWluRnJhbWUoKSkgeworICAgICAgICB0b0ltcGwo
bGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNv
bnN0IFdlYkluc3BlY3RvclVJUHJveHkqIFdlYkluc3BlY3RvclVJUHJveHkgPSBzdGF0aWNfY2Fz
dDxjb25zdCBXZWJJbnNwZWN0b3JVSVByb3h5Kj4oY2xpZW50SW5mbyk7CisgICAgQVNTRVJUKFdl
Ykluc3BlY3RvclVJUHJveHkpOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3QgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnJlcXVlc3QoKTsKKworICAgIC8vIEFs
bG93IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCisgICAgaWYgKFdlYkluc3Bl
Y3RvclVJUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVxdWVzdC51cmwoKSkpIHsK
KyAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGxvYWRpbmcgaW4g
dGhlIGluc3BlY3RvcidzIHBhZ2UuCisgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+aWdub3JlKCk7
CisKKyAgICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4KKyAg
ICBXZWJJbnNwZWN0b3JVSVByb3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KFdURk1v
dmUocmVxdWVzdCkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJQcm9jZXNzRGlkQ3Jhc2goV0tQYWdl
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFdlYkluc3BlY3RvclVJUHJveHkq
IFdlYkluc3BlY3RvclVJUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JVSVByb3h5Kj4o
Y29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgIEFTU0VSVChXZWJJbnNwZWN0b3JV
SVByb3h5KTsKKyAgICBXZWJJbnNwZWN0b3JVSVByb3h5LT5jbG9zZUZvckNyYXNoKCk7Cit9CisK
K1dlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVu
ZFBhZ2UoKQoreworICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOworCisgICAgYXV0byBwcmVm
ZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJX
ZWJLaXQyLiIpOworI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKKyAgICAvLyBBbGxvdyBkZXZl
bG9wZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhv
dXQgY2hhbmdpbmcgc2V0dGluZ3MuCisgICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJh
c0VuYWJsZWQodHJ1ZSk7CisgICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5
c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOworI2VuZGlmCisgICAgcHJlZmVyZW5jZXMtPnNldEFs
bG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyh0cnVlKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0SmF2
YVNjcmlwdFJ1bnRpbWVGbGFncyh7IH0pOworICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdy
b3VwOjpjcmVhdGUoV2ViS2l0OjpkZWZhdWx0SW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZv
clBhZ2UoaW5zcGVjdGVkUGFnZSgpKSk7CisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQ
STo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5z
ZXRQcm9jZXNzUG9vbCgmV2ViS2l0OjpkZWZhdWx0SW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVj
dGlvbkxldmVsKCkpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJl
ZmVyZW5jZXMucHRyKCkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFn
ZUdyb3VwLnB0cigpKTsKKworICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZpZ2F0aW9u
Q2xpZW50ID0geworICAgICAgICB7IDAsIHRoaXMgfSwKKyAgICAgICAgZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbiwKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvblJlc3BvbnNlCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvclBsdWdp
bkxvYWQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24K
KyAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbE5hdmln
YXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdhdGlvbgorICAgICAgICBu
dWxscHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZh
aWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbExvYWRJ
blN1YmZyYW1lCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9hZAorICAg
ICAgICBudWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uCisgICAgICAgIG51bGxw
dHIsIC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCisgICAgICAgIG51bGxwdHIsIC8vIGNh
bkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKKyAgICAgICAgbnVsbHB0ciwgLy8g
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCisgICAgICAgIHdlYlByb2Nlc3NEaWRD
cmFzaCwKKyAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0b01hc3RlcktleQorCisgICAg
ICAgIG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0
ciwgLy8gd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEVu
ZE5hdmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5hdmlnYXRp
b25HZXN0dXJlU25hcHNob3QKKyAgICB9OworCisgICAgUkVDVCByID0geyAwLCAwLCBzdGF0aWNf
Y2FzdDxMT05HPihpbml0aWFsV2luZG93V2lkdGgpLCBzdGF0aWNfY2FzdDxMT05HPihpbml0aWFs
V2luZG93SGVpZ2h0KSB9OworICAgIGF1dG8gcGFnZSA9IGluc3BlY3RlZFBhZ2UoKTsKKyAgICBt
X2luc3BlY3RlZFZpZXdXaW5kb3cgPSBwYWdlLT52aWV3V2lkZ2V0KCk7CisgICAgbV9pbnNwZWN0
ZWRWaWV3UGFyZW50V2luZG93ID0gOjpHZXRQYXJlbnQobV9pbnNwZWN0ZWRWaWV3V2luZG93KTsK
KyAgICBhdXRvIHZpZXcgPSBXZWJWaWV3OjpjcmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24sIG1f
aW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0gJnZpZXcu
bGVha1JlZigpOworICAgIGF1dG8gaW5zcGVjdG9yUGFnZSA9IG1faW5zcGVjdG9yVmlldy0+cGFn
ZSgpOworICAgIG1faW5zcGVjdG9yVmlld1dpbmRvdyA9IGluc3BlY3RvclBhZ2UtPnZpZXdXaWRn
ZXQoKTsKKyAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0b3JQ
YWdlKSwgJm5hdmlnYXRpb25DbGllbnQuYmFzZSk7CisKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFn
ZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCkKK3sKKyAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6
OnJlbW92ZUxpc3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7CisgICAgbV9pbnNw
ZWN0b3JWaWV3ID0gbnVsbHB0cjsKKyAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRyOworICAg
IGlmIChtX2luc3BlY3RvclZpZXdXaW5kb3cpIHsKKyAgICAgICAgOjpEZXN0cm95V2luZG93KG1f
aW5zcGVjdG9yVmlld1dpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yVmlld1dpbmRvdyA9IG51
bGxwdHI7CisgICAgfQorICAgIGlmIChtX2luc3BlY3RvckRldGFjaFdpbmRvdykgeworICAgICAg
ICA6OlJlbW92ZVByb3AobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFdlYkluc3BlY3RvclVJUHJv
eHlQb2ludGVyUHJvcCk7CisgICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2luc3BlY3RvckRldGFj
aFdpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0gbnVsbHB0cjsKKyAg
ICB9CisgICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gbnVsbHB0cjsKKyAgICBtX2luc3BlY3Rl
ZFZpZXdQYXJlbnRXaW5kb3cgPSBudWxscHRyOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUlQ
cm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCit7CisjaWYgVVNFKENGKQorICAgIFJldGFpblB0cjxD
RlVSTFJlZj4gaHRtbFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoV2Vi
Q29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RSKCJNYWluIiksIENGU1RSKCJodG1sIiksIENGU1RS
KCJXZWJJbnNwZWN0b3JVSSIpKSk7CisgICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKGh0bWxVUkxS
ZWYuZ2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4geyB9OworI2VuZGlmCit9CisKK1N0cmluZyBX
ZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisjaWYgVVNFKENG
KQorICAgIFJldGFpblB0cjxDRlVSTFJlZj4gaHRtbFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVD
b3B5UmVzb3VyY2VVUkwoV2ViQ29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RSKCJUZXN0IiksIENG
U1RSKCJodG1sIiksIENGU1RSKCJXZWJJbnNwZWN0b3JVSSIpKSk7CisgICAgcmV0dXJuIENGVVJM
R2V0U3RyaW5nKGh0bWxVUkxSZWYuZ2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4geyB9OworI2Vu
ZGlmCit9CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JVSVByb3h5OjppbmZvRm9y
TG9jYWxEZWJ1Z2dhYmxlKCkKK3sKKyAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2Iv
MjA1NTM3PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YS4KKyAgICByZXR1cm4g
RGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgUkVDVCByZWN0
OworICAgIDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RlZFZpZXdXaW5kb3csICZyZWN0KTsKKyAg
ICByZXR1cm4gcmVjdC5ib3R0b20gLSByZWN0LnRvcDsKK30KKwordW5zaWduZWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCit7CisgICAgUkVDVCBy
ZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RlZFZpZXdXaW5kb3csICZyZWN0KTsK
KyAgICByZXR1cm4gcmVjdC5yaWdodCAtIHJlY3QubGVmdDsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGRlZmF1bHRBdHRhY2hlZFNpemUgPSAzMDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1p
bmltdW1BdHRhY2hlZFdpZHRoID0gNzUwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5p
bXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7CisKKyAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hXaW5k
b3cgJiYgOjpHZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93KSA9PSBtX2luc3BlY3RvckRl
dGFjaFdpbmRvdykgeworICAgICAgICA6OlNldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5kb3cs
IG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgICAgIDo6U2hvd1dpbmRvdyhtX2lu
c3BlY3RvckRldGFjaFdpbmRvdywgU1dfSElERSk7CisgICAgfQorCisgICAgV2ViQ29yZTo6V2lu
ZG93TWVzc2FnZUJyb2FkY2FzdGVyOjphZGRMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3cs
IHRoaXMpOworCisgICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJv
dHRvbSkgeworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9y
bUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAvIDQ7CisgICAgICAgIHBsYXRmb3JtU2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1p
bihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUlu
c3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsKKyAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hl
ZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZh
dWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKKyAgICB9CisgICAgOjpT
aG93V2luZG93KG1faW5zcGVjdG9yVmlld1dpbmRvdywgU1dfU0hPVyk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1EZXRhY2goKQoreworICAgIGlmICghaW5zcGVjdGVk
UGFnZSgpLT5oYXNSdW5uaW5nUHJvY2VzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7CisgICAgICAgIHJlZ2lzdGVyV2luZG93Q2xhc3Mo
KTsKKyAgICAgICAgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAs
IFdlYkluc3BlY3RvclVJUHJveHlDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCisg
ICAgICAgICAgICBDV19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULCBpbml0aWFsV2luZG93V2lk
dGgsIGluaXRpYWxXaW5kb3dIZWlnaHQsCisgICAgICAgICAgICAwLCAwLCBXZWJDb3JlOjppbnN0
YW5jZUhhbmRsZSgpLCAwKTsKKyAgICAgICAgOjpTZXRQcm9wKG1faW5zcGVjdG9yRGV0YWNoV2lu
ZG93LCBXZWJJbnNwZWN0b3JVSVByb3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFO
RExFPih0aGlzKSk7CisgICAgfQorCisgICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2Fz
dGVyOjpyZW1vdmVMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOworCisgICAg
UkVDVCByZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RvckRldGFjaFdpbmRvdywg
JnJlY3QpOworICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9p
bnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIDo6
U2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdywgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cp
OworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwgcmVj
dC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVS
KTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRvd0lu
Zm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJ
bmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9O
T1pPUkRFUik7CisKKyAgICBpZiAobV9pc1Zpc2libGUpCisgICAgICAgIDo6U2hvd1dpbmRvdyht
X2luc3BlY3RvckRldGFjaFdpbmRvdywgU1dfU0hPVyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQp
Cit7CisgICAgYXV0byB3aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3Bl
Y3RlZFZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgOjpTZXRX
aW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRv
d0luZm8ucGFyZW50SGVpZ2h0IC0gaGVpZ2h0LCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2lu
ZG93SW5mby5sZWZ0LCBoZWlnaHQsIFNXUF9OT1pPUkRFUik7CisgICAgOjpTZXRXaW5kb3dQb3Mo
bV9pbnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9w
LCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBh
cmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25l
ZCB3aWR0aCkKK3sKKyAgICBhdXRvIHdpbmRvd0luZm8gPSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZv
KG1faW5zcGVjdGVkVmlld1dpbmRvdywgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKKyAg
ICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ucGFy
ZW50V2lkdGggLSB3aWR0aCwgd2luZG93SW5mby50b3AsIHdpZHRoLCB3aW5kb3dJbmZvLnBhcmVu
dEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93
UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZv
LnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5m
by5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUhpZGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFw
cGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiAvKiB1cmwgKi8pCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BdHRhY2hB
dmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgLyogYXZhaWxhYmxlICovKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVG
cm9udGVuZFdpbmRvdygpCit7CisgICAgcGxhdGZvcm1EZXRhY2goKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnZh
bGlkYXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRl
eCAyNmViMTk3YTJhNWVkMjVkZWFiNGFkNzVkMDk3YzgwMzUwY2EyZmM5Li45OWIzNDYwOTg3MWRk
ZmFjZDk2N2RiOTc2YTY2NGQxNjAzOGUxN2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKQEAgLTExMyw3ICsxMTMsNyBAQAogI2luY2x1ZGUgIldlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWVz
c2FnZXMuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgogI2luY2x1ZGUgIldlYklu
c3BlY3RvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIldlYktleWJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgiCkBAIC01NDksNyArNTQ5LDcgQEAgV2ViUGFn
ZVByb3h5OjpXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgV2ViUHJvY2Vzc1By
b3h5JiBwcm9jZXNzLCBSZWYKICAgICBtX3ByZWZlcmVuY2VzLT5hZGRQYWdlKCp0aGlzKTsKICAg
ICBtX3BhZ2VHcm91cC0+YWRkUGFnZSgqdGhpcyk7CiAKLSAgICBtX2luc3BlY3RvciA9IFdlYklu
c3BlY3RvclByb3h5OjpjcmVhdGUoKnRoaXMpOworICAgIG1faW5zcGVjdG9yID0gV2ViSW5zcGVj
dG9yVUlQcm94eTo6Y3JlYXRlKCp0aGlzKTsKIAogICAgIGlmIChoYXNSdW5uaW5nUHJvY2Vzcygp
KQogICAgICAgICBkaWRBdHRhY2hUb1J1bm5pbmdQcm9jZXNzKCk7CkBAIC02MTk0LDcgKzYxOTQs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRW5kRGF0ZVRpbWVQaWNrZXIoKQogCiAjZW5kaWYK
IAotV2ViSW5zcGVjdG9yUHJveHkqIFdlYlBhZ2VQcm94eTo6aW5zcGVjdG9yKCkgY29uc3QKK1dl
Ykluc3BlY3RvclVJUHJveHkqIFdlYlBhZ2VQcm94eTo6aW5zcGVjdG9yKCkgY29uc3QKIHsKICAg
ICBpZiAoaXNDbG9zZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDE0Nzc5Yzc1M2Q5ZjY0MzdiOWQ5MTAyZGJkYjE0
NWVmZTBhZGI2NTUuLmY4Y2M4MWI5ZDZiOTZlYWU3YTRmMjYwODc2Yzc2NWFjY2VhNGZmZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC00ODYsNyArNDg2LDcgQEAg
cHVibGljOgogICAgIHZvaWQgZGlkRW50ZXJGdWxsc2NyZWVuKCk7CiAgICAgdm9pZCBkaWRFeGl0
RnVsbHNjcmVlbigpOwogCi0gICAgV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvcigpIGNvbnN0
OworICAgIFdlYkluc3BlY3RvclVJUHJveHkqIGluc3BlY3RvcigpIGNvbnN0OwogICAgIEdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkmIGdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyKCkgeyByZXR1cm4gbV9nZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlcjsgfQogCiAgICAgdm9pZCByZXNvdXJjZUxvYWREaWRTZW5kUmVxdWVzdChSZXNvdXJj
ZUxvYWRJbmZvJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKTsKQEAgLTI0NzIsNyArMjQ3
Miw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fY3VzdG9tVGV4dEVuY29kaW5nTmFtZTsKICAg
ICBTdHJpbmcgbV9vdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeTsKIAotICAgIFJlZlB0cjxX
ZWJJbnNwZWN0b3JQcm94eT4gbV9pbnNwZWN0b3I7CisgICAgUmVmUHRyPFdlYkluc3BlY3RvclVJ
UHJveHk+IG1faW5zcGVjdG9yOwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5PiBtX2Z1bGxTY3JlZW5NYW5h
Z2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNzNiYWJkMDE0ZWJkYjZmYWQ1MjBkNTJmMzBkZmM4NDcwY2FkNWM2YS4uNmVkYmUxMTlj
ZjYyZDRiYWQyNGQ1NzBjM2RlNjZjNmNlZDdmNWZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MTgsMTIgKzQxOCwxMiBAQAogCQkx
QzIxODQwMjIyMzM4NzI4MDBCQUM3MDAgLyogTlNBdHRyaWJ1dGVkU3RyaW5nUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyMTg0MDEyMjMz
ODcyODAwQkFDNzAwIC8qIE5TQXR0cmlidXRlZFN0cmluZ1ByaXZhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQzg5MUQ2NjE5QjEyNEZGMDBC
QTc5REQgLyogV2ViSW5zcGVjdG9yVUkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFDODkxRDYzMTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JV
SS5oICovOyB9OwogCQkxQzhFMjgyMDEyNzVEMTU0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzhFMjgxRTEy
NzVEMTU0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLmggKi87IH07Ci0JCTFDOEUyODM0MTI3NUQ3
MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM4RTI4MzIxMjc1RDczODAwQkM3QkQwIC8qIFdlYklu
c3BlY3RvclByb3h5LmggKi87IH07CisJCTFDOEUyODM0MTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJ
bnNwZWN0b3JVSVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQzhFMjgzMjEyNzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yVUlQcm94eS5o
ICovOyB9OwogCQkxQzhFMjkzOTEyNzYxRTVCMDBCQzdCRDAgLyogV0tJbnNwZWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDOEUyOTM3MTI3NjFF
NUIwMEJDN0JEMCAvKiBXS0luc3BlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTFDOEUyQTM1MTI3Nzg1MjQwMEJDN0JEMCAvKiBXZWJJbnNw
ZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUM4RTJBMzExMjc3ODUyNDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvck1l
c3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTFDOEUyQTM2MTI3Nzg1MjQwMEJDN0JEMCAvKiBX
ZWJJbnNwZWN0b3JNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUM4RTJBMzIxMjc3ODUyNDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvck1lc3Nh
Z2VzLmggKi87IH07Ci0JCTFDQThCOTQ1MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQ0E4Qjk0MzEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQkxQ0E4Qjk0NjEyN0M4ODJBMDA1NzZDMkIg
LyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBOEI5NDQxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3Bl
Y3RvclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKKwkJMUNBOEI5NDUxMjdDODgyQTAwNTc2QzJCIC8q
IFdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBOEI5NDMxMjdDODgyQTAwNTc2QzJCIC8q
IFdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQkxQ0E4Qjk0
NjEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0E4Qjk0NDEyN0M4ODJB
MDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCTFDQkJF
NEEwMTlCNjZDNTMwMDZCN0Q4MSAvKiBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0JCRTQ5RTE5
QjY2QzUzMDA2QjdEODEgLyogV2ViSW5zcGVjdG9yVUlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9
OwogCQkxQ0JCRTRBMTE5QjY2QzUzMDA2QjdEODEgLyogV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNCQkU0OUYx
OUI2NkM1MzAwNkI3RDgxIC8qIFdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCAqLzsgfTsKIAkJMUQ0
RDczNzAyM0E5RTU0NzAwNzE3QTI1IC8qIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFENEQ3MzZCMjNBOURGNTUwMDcxN0EyNSAvKiBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdl
ck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0xNjA0LDkgKzE2MDQsOSBAQAogCQlBNTQz
RTMwRDIxNUM4QTkwMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NDNFMzBC
MjE1QzhBODQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oICov
OyB9OwogCQlBNTVCQTgxMDFCQTEzMTdFMDA3Q0QzM0QgLyogX1dLUmVtb3RlV2ViSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1NUJBODBDMUJBMTJCRTEwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JW
aWV3Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE1NUJBODE3MUJBMjNFMTIwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JV
SS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4
MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmggKi87IH07Ci0JCUE1
NUJBODFGMUJBMjVCMjcwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4MTkxQkEyNUIx
RTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5LmggKi87IH07Ci0JCUE1NUJBODI1
MUJBMjVDRkIwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTVCQTgyMjFCQTI1
QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oICovOyB9Owot
CQlBNTVCQTgyNjFCQTI1Q0ZEMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTU1QkE4MjExQkEyNUJCODAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKKwkJQTU1QkE4MUYxQkEyNUIyNzAwN0NEMzNEIC8q
IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1NUJBODE5MUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5LmggKi87IH07CisJCUE1NUJBODI1MUJBMjVDRkIwMDdDRDMzRCAvKiBS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NUJBODIyMUJBMjVCQjgwMDdDRDMzRCAvKiBSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCAqLzsgfTsKKwkJQTU1QkE4MjYxQkEyNUNG
RDAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4MjEx
QkEyNUJCODAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwICovOyB9OwogCQlBNTVCQTgyQjFCQTM4RTYxMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9y
VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNTVCQTgyODFCQTM4RTFFMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmggKi87
IH07CiAJCUE1ODYwRTcxMjMwRjY3RkMwMDQ2MUFBRSAvKiBXZWJSZXNvdXJjZUludGVyY2VwdENv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1ODYwRTcwMjMwRjY3REUwMDQ2MUFBRSAvKiBXZWJSZXNvdXJjZUludGVyY2VwdENvbnRyb2xs
ZXIuaCAqLzsgfTsKIAkJQTU4QjZGMDgxOEZDQTczMzAwOENCQTUzIC8qIFdLRmlsZVVwbG9hZFBh
bmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNThC
NkYwNjE4RkNBNzMzMDA4Q0JBNTMgLyogV0tGaWxlVXBsb2FkUGFuZWwuaCAqLzsgfTsKQEAgLTI5
NTEsMTQgKzI5NTEsMTQgQEAKIAkJMUMyMTg0MDEyMjMzODcyODAwQkFDNzAwIC8qIE5TQXR0cmli
dXRlZFN0cmluZ1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTlNB
dHRyaWJ1dGVkU3RyaW5nUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QzczOUU4NTIzNDdCQ0Y2MDBDNjIxRUMgLyogQ29yZVRleHRIZWxwZXJzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQ29yZVRleHRIZWxwZXJzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQzczOUU4NzIzNDdCRDBGMDBDNjIxRUMgLyogQ29yZVRleHRIZWxwZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvcmVUZXh0SGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQzc3QzE5NTEyODhBODcyMDA2QTc0MkYgLyogV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMu
aW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNzdDMTk1MTI4OEE4NzIwMDZBNzQyRiAv
KiBXZWJJbnNwZWN0b3JVSVByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDODkxRDYyMTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JVSS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJbnNwZWN0b3JVSS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODkxRDYzMTlCMTI0RkYwMEJBNzlERCAvKiBX
ZWJJbnNwZWN0b3JVSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJbnNw
ZWN0b3JVSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzg5MUQ2NDE5QjEyNEZG
MDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDOEUyODFFMTI3NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDOEUyODFGMTI3NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViSW5zcGVjdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUM4RTI4MzIxMjc1RDczODAwQkM3QkQw
IC8qIFdlYkluc3BlY3RvclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkluc3BlY3RvclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDOEUy
ODMzMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJbnNwZWN0b3JQcm94eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDOEUyODMyMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNw
ZWN0b3JVSVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkluc3Bl
Y3RvclVJUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM4RTI4MzMxMjc1
RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclVJUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViSW5zcGVjdG9yVUlQcm94eS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDOEUyOTM3MTI3NjFFNUIwMEJDN0JEMCAvKiBXS0luc3BlY3Rv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0luc3BlY3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzhFMjkzODEyNzYxRTVCMDBCQzdCRDAgLyogV0tJ
bnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tJbnNw
ZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzhFMkExQzEyNzc4MzNG
MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFdlYkluc3BlY3Rvci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI5NjYsOSArMjk2Niw5IEBACiAJCTFDOEUyQTMyMTI3Nzg1MjQwMEJDN0JEMCAvKiBXZWJJ
bnNwZWN0b3JNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJJ
bnNwZWN0b3JNZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNw
ZWN0b3JNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkx
QzhFMkRBRDEyNzhDNUIyMDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yVUlNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJJbnNwZWN0b3JVSU1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5RUJBNUIyMDg3RTc0RTAwMDU0NDI5IC8qIE5h
dGl2ZVdlYk1vdXNlRXZlbnRJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBOYXRpdmVXZWJNb3VzZUV2ZW50SU9TLm1tOyBwYXRoID0gaW9zL05hdGl2ZVdlYk1v
dXNlRXZlbnRJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDQThCOTM1MTI3
Qzc3NEUwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkluc3BlY3RvclByb3h5TWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxQ0E4Qjk0MzEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5z
cGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0g
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTFDQThCOTQ0MTI3Qzg4
MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkxQ0E4QjkzNTEyN0M3NzRFMDA1NzZDMkIg
LyogV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYkluc3BlY3RvclVJUHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDQThCOTQzMTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JVSVBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJMUNBOEI5NDQxMjdDODgyQTAw
NTc2QzJCIC8qIFdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmg7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFDQkJFNDlFMTlCNjZDNTMwMDZCN0Q4
MSAvKiBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBh
dGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVy
LmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUNCQkU0OUYxOUI2
NkM1MzAwNkI3RDgxIC8qIFdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFEMDUzMEM5MjU4RUFCNDQwMEU0MzZGNyAvKiBjb21i
aW5lLWZlYXR1cmUtZmxhZ3MtcGxpc3QucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSAiY29tYmluZS1m
ZWF0dXJlLWZsYWdzLXBsaXN0LnB5Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUw
NDAsMTEgKzUwNDAsMTEgQEAKIAkJQTU1QkE4MTIxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdl
Ykluc3BlY3RvclVJLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bW90ZVdlYkluc3BlY3RvclVJLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU1
QkE4MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVdlYkluc3BlY3RvclVJLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NUJBODE0MUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVX
ZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVX
ZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NUJBODFBMUJBMjVCMUUwMDdDRDMzRCAv
KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTU1QkE4MUIxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90
ZVdlYkluc3BlY3RvclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU1
QkE4MjExQkEyNUJCODAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQlBNTVCQTgyMjFCQTI1QkI4MDA3Q0Qz
M0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmg7IHBhdGgg
PSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMu
aDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJQTU1QkE4MTkxQkEyNUIx
RTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBNTVCQTgxQTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBNTVCQTgxQjFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTU1QkE4
MjExQkEyNUJCODAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlBNTVCQTgyMjFCQTI1QkI4MDA3
Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5o
OyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQTU1QkE4
MjcxQkEzOEUxRTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvclV0aWxpdGllcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTVCQTgyODFCQTM4RTFFMDA3Q0QzM0QgLyog
V2ViSW5zcGVjdG9yVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkluc3BlY3RvclV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NTg2MEU2RjIzMEY2N0RFMDA0NjFBQUUgLyogV2ViUmVzb3VyY2VJbnRlcmNlcHRDb250cm9sbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlJlc291cmNlSW50ZXJjZXB0Q29udHJvbGxlci5j
cHA7IHBhdGggPSBOZXR3b3JrL1dlYlJlc291cmNlSW50ZXJjZXB0Q29udHJvbGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MDU1LDcgKzUwNTUsNyBAQAogCQlBNUMwRjBB
NjIwMDA2NTQ0MDA1MzY1MzYgLyogX1dLTlNXaW5kb3dFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gX1dLTlNXaW5kb3dFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTVDMEYwQTkyMDAwNjU2RTAwNTM2NTM2IC8qIF9XS0luc3BlY3RvcldpbmRv
dy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS0luc3BlY3Rv
cldpbmRvdy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVDMEYwQUEyMDAwNjU2
RTAwNTM2NTM2IC8qIF9XS0luc3BlY3RvcldpbmRvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBfV0tJbnNwZWN0b3JXaW5kb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTVEMzUwNEQxRDc4RjBEMjAwNTEyNEE5IC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1RDM1
MDREMUQ3OEYwRDIwMDUxMjRBOSAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVFMzkxRkIyMTgz
QzFFOTAwQzhGQjMxIC8qIEluc3BlY3RvclRhcmdldFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclRhcmdldFByb3h5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVFMzkxRkMyMTgzQzFFOTAwQzhGQjMxIC8qIEluc3BlY3Rv
clRhcmdldFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3Rv
clRhcmdldFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1RUM2QUQyMjE1
MUJENjkwMDY3N0QxNyAvKiBXZWJQYWdlRGVidWdnYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJQYWdlRGVidWdnYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05
MjI4LDE1ICs5MjI4LDE1IEBACiAJCQkJOTFEOTcwRDYyM0RBNkQ1NTAwNTdEQkMzIC8qIG1hYyAq
LywKIAkJCQlBNUUzOTFGQjIxODNDMUU5MDBDOEZCMzEgLyogSW5zcGVjdG9yVGFyZ2V0UHJveHku
Y3BwICovLAogCQkJCUE1RTM5MUZDMjE4M0MxRTkwMEM4RkIzMSAvKiBJbnNwZWN0b3JUYXJnZXRQ
cm94eS5oICovLAotCQkJCUE1NUJBODFCMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eS5jcHAgKi8sCi0JCQkJQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5LmggKi8sCi0JCQkJQTU1QkE4MUExQkEyNUIxRTAwN0NEMzNEIC8q
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCTFDOEUyODMzMTI3
NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCi0JCQkJMUM4RTI4MzIx
Mjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmggKi8sCi0JCQkJMUM3N0MxOTUx
Mjg4QTg3MjAwNkE3NDJGIC8qIFdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJ
CUE1NUJBODFCMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5LmNw
cCAqLywKKwkJCQlBNTVCQTgxOTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eS5oICovLAorCQkJCUE1NUJBODFBMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCTk5QjE2NzVEMjUyQkJFMEEwMDcz
MTQwRSAvKiBXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eS5jcHAgKi8sCiAJ
CQkJOTlCMTY3NUEyNTJCQkFERDAwNzMxNDBFIC8qIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29u
dHJvbGxlclByb3h5LmggKi8sCiAJCQkJOTk2QjJCOTMyNUUyNDMxNDAwNzE5Mzc5IC8qIFdlYklu
c3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCTFD
OEUyODMzMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JVSVByb3h5LmNwcCAqLywKKwkJ
CQkxQzhFMjgzMjEyNzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yVUlQcm94eS5oICovLAor
CQkJCTFDNzdDMTk1MTI4OEE4NzIwMDZBNzQyRiAvKiBXZWJJbnNwZWN0b3JVSVByb3h5Lm1lc3Nh
Z2VzLmluICovLAogCQkJCUE1NUJBODI3MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JV
dGlsaXRpZXMuY3BwICovLAogCQkJCUE1NUJBODI4MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNw
ZWN0b3JVdGlsaXRpZXMuaCAqLywKIAkJCQlBNUVDNkFEMjIxNTFCRDY5MDA2NzdEMTcgLyogV2Vi
UGFnZURlYnVnZ2FibGUuY3BwICovLApAQCAtOTI2MCw4ICs5MjYwLDggQEAKIAkJOTFEOTcwRDYy
M0RBNkQ1NTAwNTdEQkMzIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJQTVEMzUwNEQxRDc4RjBEMjAwNTEyNEE5IC8qIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5TWFjLm1tICovLAotCQkJCTFDQThCOTM1MTI3Qzc3NEUwMDU3NkMyQiAvKiBXZWJJ
bnNwZWN0b3JQcm94eU1hYy5tbSAqLywKKwkJCQlBNUQzNTA0RDFENzhGMEQyMDA1MTI0QTkgLyog
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbSAqLywKKwkJCQkxQ0E4QjkzNTEyN0M3NzRF
MDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbSAqLywKIAkJCQk5OUE3QUNFMzI2
MDEyOTE5MDA2RDU3RkQgLyogV0tJbnNwZWN0b3JSZXNvdXJjZVVSTFNjaGVtZUhhbmRsZXIuaCAq
LywKIAkJCQk5OUE3QUNFNDI2MDEyOTFBMDA2RDU3RkQgLyogV0tJbnNwZWN0b3JSZXNvdXJjZVVS
TFNjaGVtZUhhbmRsZXIubW0gKi8sCiAJCQkJOTk0QkFERjExRjdENzdFQTAwQjU3MUU3IC8qIFdL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCAqLywKQEAgLTEwOTgzLDkgKzEwOTgzLDkgQEAKIAkJ
CQkxREQyQTY2QjI1NjIwMjFFMDBGRjdCNkYgLyogUmVtb3RlU291cmNlQnVmZmVyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTFERDJBNjY5MjU2MjAyMUUwMEZGN0I2RiAvKiBSZW1v
dGVTb3VyY2VCdWZmZXJQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkJMUREMkE2NkEyNTYyMDIxRTAw
RkY3QjZGIC8qIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5TWVzc2FnZXNSZXBsaWVzLmggKi8sCi0J
CQkJQTU1QkE4MjExQkEyNUJCODAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJCQlBNTVCQTgyMjFCQTI1QkI4MDA3Q0QzM0QgLyogUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oICovLAogCQkJCTFCQkJFNDlFMTlCNjZDNTMw
MDZCN0Q4MSAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCisJ
CQkJQTU1QkE4MjExQkEyNUJCODAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCUE1NUJBODIyMUJBMjVCQjgwMDdDRDMzRCAvKiBS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQlFMThFNjkxMzE2OUI2
NjdCMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJ
CQkJRTE4RTY5MTQxNjlCNjY3QjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHlNZXNzYWdlcy5o
ICovLAogCQkJCTJERTY5NDNCMThCRDJBNjgwMDVDMTVFNSAvKiBTbWFydE1hZ25pZmljYXRpb25D
b250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKQEAgLTExMDYzLDggKzExMDYzLDYgQEAK
IAkJCQlGRURCRENENTFFNjhEMTlDMDBBNTlGOEYgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlck1lc3NhZ2VzLmggKi8sCiAJCQkJMUM4RTJBMzExMjc3ODUyNDAwQkM3QkQwIC8qIFdl
Ykluc3BlY3Rvck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUM4RTJBMzIxMjc3ODUyNDAw
QkM3QkQwIC8qIFdlYkluc3BlY3Rvck1lc3NhZ2VzLmggKi8sCi0JCQkJMUNBOEI5NDMxMjdDODgy
QTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKLQkJ
CQkxQ0E4Qjk0NDEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5o
ICovLAogCQkJCTk5Nzk2NTlCMjUzMTBBNDgwMEIzMUFFMyAvKiBXZWJJbnNwZWN0b3JVSUV4dGVu
c2lvbkNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTk5Nzk2NTlBMjUzMTBB
NDgwMEIzMUFFMyAvKiBXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJNZXNzYWdlcy5o
ICovLAogCQkJCTk5NkIyQjk1MjVFMjQ0ODEwMDcxOTM3OSAvKiBXZWJJbnNwZWN0b3JVSUV4dGVu
c2lvbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCkBAIC0xMTA3Miw2ICsx
MTA3MCw4IEBACiAJCQkJOTk2QjJCOTcyNUUyNDQ4MjAwNzE5Mzc5IC8qIFdlYkluc3BlY3RvclVJ
RXh0ZW5zaW9uQ29udHJvbGxlclByb3h5TWVzc2FnZXNSZXBsaWVzLmggKi8sCiAJCQkJMUNCQkU0
OUUxOUI2NkM1MzAwNkI3RDgxIC8qIFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LywKIAkJCQkxQ0JCRTQ5RjE5QjY2QzUzMDA2QjdEODEgLyogV2ViSW5zcGVjdG9yVUlNZXNzYWdl
cy5oICovLAorCQkJCTFDQThCOTQzMTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JVSVBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJCQkxQ0E4Qjk0NDEyN0M4ODJBMDA1NzZDMkIg
LyogV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkJNTFGMDYwREQxNjU0MzE3
NTAwRjMyODJGIC8qIFdlYk1ETlNSZWdpc3Rlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJ
MzFCQTkyNDgxNDg4MzA4MTAwNjJFREI1IC8qIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwICovLAogCQkJCTMxQkE5MjQ5MTQ4ODMwODEwMDYyRURCNSAvKiBXZWJOb3Rp
ZmljYXRpb25NYW5hZ2VyTWVzc2FnZXMuaCAqLywKQEAgLTEyMDQ4LDkgKzEyMDQ4LDkgQEAKIAkJ
CQkwRjU5NDc5RDE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nVHJlZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUREMkE2ODYyNTYzM0M3MjAwRkY3QjZGIC8qIFJlbW90ZVNvdXJjZUJ1
ZmZlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFERDJBNjg3MjU2MzNDODcw
MEZGN0I2RiAvKiBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQTU1QkE4MUYxQkEyNUIyNzAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBNTVCQTgyNTFCQTI1Q0ZCMDA3Q0QzM0Qg
LyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTU1QkE4MTcxQkEyM0UxMjAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBNTVCQTgxRjFCQTI1QjI3MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTU1QkE4MjUxQkEyNUNGQjAwN0NEMzNE
IC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNCN0FGRTcyM0M2ODIwNzAwRTQ5Q0YzIC8qIFJlc291cmNlTG9hZEluZm8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTZCRTk2OUNEMUU1NEUwNTQwMDhCNzQ4MyAvKiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzQ2xhc3NpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkJFOTY5Q0IxRTU0RDRDRjAw
OEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTIyNzgsOCArMTIyNzgsNiBAQAogCQkJCUZFRTQzRkQzMUU2N0IwMTgwMDc3
RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRURCRENENzFFNjhEMjA1MDBBNTlGOEYgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzhFMkEzNjEyNzc4NTI0MDBC
QzdCRDAgLyogV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFDOEUy
ODM0MTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMUNBOEI5NDYxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODkxRDY2MTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJ
bnNwZWN0b3JVSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlCMTY3NjQyNTJCQkU2MjAwNzMxNDBF
IC8qIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk3OTY1OUUyNTMxMEE0OTAwQjMxQUUzIC8qIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29u
dHJvbGxlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTEyMjg3LDYgKzEyMjg1LDggQEAK
IAkJCQk5OTZCMkI5OTI1RTI0NDgyMDA3MTkzNzkgLyogV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25D
b250cm9sbGVyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjJCOUEyNUUy
NDQ4MjAwNzE5Mzc5IC8qIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5TWVz
c2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0JCRTRBMTE5QjY2QzUzMDA2QjdE
ODEgLyogV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUM4RTI4
MzQxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclVJUHJveHkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTFDQThCOTQ2MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JVSVByb3h5TWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUJBODJCMUJBMzhFNjEwMDdDRDMzRCAvKiBX
ZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQTk0NEEwMTg4NEU0
RjAwMEVEODZEQiAvKiBXZWJJT1NFdmVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
ODVFNDcyMUUzMDNGMzcwMDkxNDU5OSAvKiBXZWJLaXQuYXBpbm90ZXMgaW4gSGVhZGVycyAqLywK
QEAgLTEzOTI4LDggKzEzOTI4LDggQEAKIAkJCQlDRDgyNTJERTI1RDQ5MTZDMDA4NjJGRDggLyog
UmVtb3RlUmVtb3RlQ29tbWFuZExpc3RlbmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY1OTQ3QTcxODdCNTE3NjAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFERDJB
NjZFMjU2MjAyMUUwMEZGN0I2RiAvKiBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNTVCQTgyNjFCQTI1Q0ZEMDA3Q0QzM0QgLyog
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUJCQkU0QTAxOUI2NkM1MzAwNkI3RDgxIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJTWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE1NUJBODI2MUJBMjVDRkQwMDdD
RDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxOEU2OTE3MTY5QjY2N0IwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxREU3QzZDMjIyNzhG
MUUwMDUzMkI2NSAvKiBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTJEOTJBNzg3MjEyQjZBQjEwMEY0OTNGRCAvKiBTaGFyZWFibGVCaXRtYXAuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0xNDE2NSwxMCArMTQxNjUsMTAgQEAKIAkJCQlGRURCRENENjFFNjhEMjAw
MDBBNTlGOEYgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzhFMkEzNTEyNzc4NTI0MDBCQzdCRDAgLyogV2Vi
SW5zcGVjdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxOEYzQTE1
MjU2MzMzNDMwMDc5N0U2NiAvKiBXZWJJbnNwZWN0b3JQcmVmZXJlbmNlT2JzZXJ2ZXIubW0gaW4g
U291cmNlcyAqLywKLQkJCQkxQ0E4Qjk0NTEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9y
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTk3OTY1OUYyNTMx
MEE0OTAwQjMxQUUzIC8qIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTZCMkI5ODI1RTI0NDgyMDA3MTkzNzkg
LyogV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNCQkU0QTAxOUI2NkM1MzAwNkI3RDgxIC8qIFdlYklu
c3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFDQThCOTQ1
MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzhBMjEyQjZBQjEwMEY0OTNGRCAvKiBXZWJLZXli
b2FyZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNjI4MEYzMTkxOTk4MkEwMDZBRDlG
OSAvKiBXZWJLaXQubSBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzhCMjEyQjZBQjEwMEY0OTNG
RCAvKiBXZWJLaXQySW5pdGlhbGl6ZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JV
SS5jcHAKaW5kZXggYzdhYzVkNmJmZjI2ODA3ZGUzZWQxYmJmYmE5MmEyYTg4ZjNkNjVmMi4uNDkz
MWRmMzI5ODdiMjRmZGVhMGM2MDdmMTAwYTEyYjJhZWJmMjZiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JV
SS5jcHAKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJS
ZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgogCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSS5oIgog
I2luY2x1ZGUgIldlYlBhZ2UuaCIKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
CiB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpTZW5kTWVzc2FnZVRvQmFja2Vu
ZChtZXNzYWdlKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OndpbmRvd09iamVjdENsZWFyZWQoKQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OmZyb250ZW5kTG9hZGVkKCkKIAogICAgIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyLT5kaXNwYXRjaENvbW1hbmRXaXRoUmVzdWx0QXN5bmMoInNldElzVmlzaWJs
ZSJfcywgeyBKU09OOjpWYWx1ZTo6Y3JlYXRlKHRydWUpIH0pOwogCi0gICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OkZyb250ZW5kTG9hZGVkKCksIG1fcGFnZS5pZGVudGlmaWVy
KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OkZyb250ZW5kTG9h
ZGVkKCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwogCiAgICAgYnJpbmdUb0Zyb250KCk7CiB9CkBA
IC0xMzYsMTcgKzEzNiwxNyBAQCB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpwYWdlVW5wYXVz
ZWQoKQogCiB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpjaGFuZ2VTaGVldFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpTZXRTaGVldFJlY3QocmVjdCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OlNldFNoZWV0UmVjdChyZWN0KSwgbV9wYWdlLmlk
ZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNldEZvcmNlZEFw
cGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UgYXBw
ZWFyYW5jZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6U2V0Rm9y
Y2VkQXBwZWFyYW5jZShhcHBlYXJhbmNlKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6U2V0Rm9yY2VkQXBwZWFyYW5jZShhcHBl
YXJhbmNlKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpTdGFydFdpbmRvd0RyYWcoKSwgbV9w
YWdlLmlkZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6Om1vdmVX
aW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQpAQCAtMTc5LDcgKzE3OSw3IEBAIGJvb2wgUmVtb3Rl
V2ViSW5zcGVjdG9yVUk6OnN1cHBvcnRzRG9ja1NpZGUoRG9ja1NpZGUgZG9ja1NpZGUpCiAKIHZv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9Gcm9udCgpCiB7Ci0gICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3BhZ2UuaWRlbnRpZmll
cigpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpCcmluZ1RvRnJv
bnQoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OmNsb3NlV2luZG93KCkKQEAgLTE5MCwzMiArMTkwLDMyIEBAIHZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OmNsb3NlV2luZG93KCkKICAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXIgPSBudWxs
cHRyOwogI2VuZGlmCiAgICAgCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OkZyb250ZW5kRGlkQ2xvc2UoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6RnJvbnRlbmREaWRDbG9zZSgpLCBtX3BhZ2UuaWRl
bnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKIHsK
LSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1fcGFnZS5p
ZGVudGlmaWVyKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OlJl
b3BlbigpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6cmVzZXRTdGF0ZSgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OlJlc2V0U3RhdGUoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6UmVzZXRTdGF0ZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigp
KTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6b3BlblVSTEV4dGVybmFsbHkoY29u
c3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
Ok9wZW5VUkxFeHRlcm5hbGx5KHVybCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6Ok9wZW5VUkxFeHRlcm5hbGx5KHVybCksIG1f
cGFnZS5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzYXZl
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNl
NjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3Jj
ZVNhdmVBcyksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYklu
c3BlY3RvclVJUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZv
cmNlU2F2ZUFzKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OmFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkFwcGVuZChm
aWxlbmFtZSwgY29udGVudCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1fcGFn
ZS5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjppbnNwZWN0
ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQpAQCAtMjI1LDcgKzIyNSw3IEBA
IHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpCiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNob3dDZXJ0aWZp
Y2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKIHsKLSAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6U2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRl
SW5mbyksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OlNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBtX3BhZ2UuaWRl
bnRpZmllcigpKTsKIH0KIAogSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBSZW1vdGVXZWJJbnNw
ZWN0b3JVSTo6ZGVidWdnYWJsZVR5cGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuY3BwCmluZGV4IDViYmM2MzQ0MTcxZTU3
MTYyZDU1ZDY5MGVhNGVkMjFkNTcxYTlkOTQuLjhhZWVhM2U0Y2IyMDhmNTY4MDgyMmU5MTE1YWIw
ZjIzMjlhY2M3NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3Rvci5jcHAKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1ZGUgIldlYkZy
YW1lLmgiCiAjaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdl
cy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9D
aHJvbWUuaD4KQEAgLTcyLDcgKzcyLDcgQEAgV2ViSW5zcGVjdG9yOjp+V2ViSW5zcGVjdG9yKCkK
IAogdm9pZCBXZWJJbnNwZWN0b3I6Om9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgdW5k
ZXJUZXN0KQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpPcGVuTG9jYWxJbnNw
ZWN0b3JGcm9udGVuZChjYW5BdHRhY2hXaW5kb3coKSwgdW5kZXJUZXN0KSwgbV9wYWdlLT5pZGVu
dGlmaWVyKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6Ok9wZW5Mb2NhbElu
c3BlY3RvckZyb250ZW5kKGNhbkF0dGFjaFdpbmRvdygpLCB1bmRlclRlc3QpLCBtX3BhZ2UtPmlk
ZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yOjpzZXRGcm9udGVuZENvbm5lY3Rp
b24oSVBDOjpBdHRhY2htZW50IGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllcikKQEAgLTEwOCw3
ICsxMDgsNyBAQCB2b2lkIFdlYkluc3BlY3Rvcjo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6
QXR0YWNobWVudCBlbmNvZGVkQ29ubmVjdGlvbklkZW50aQogCiB2b2lkIFdlYkluc3BlY3Rvcjo6
Y2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpEaWRDbG9zZSgpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUlQcm94eTo6RGlkQ2xvc2UoKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwogCiAg
ICAgLy8gSWYgd2UgdHJpZWQgdG8gY2xvc2UgdGhlIGZyb250ZW5kIGJlZm9yZSBpdCB3YXMgY3Jl
YXRlZCwgdGhlbiBubyBjb25uZWN0aW9uIGV4aXN0cyB5ZXQuCiAgICAgaWYgKG1fZnJvbnRlbmRD
b25uZWN0aW9uKSB7CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3I6OmNsb3Nl
RnJvbnRlbmRDb25uZWN0aW9uKCkKIAogdm9pZCBXZWJJbnNwZWN0b3I6OmJyaW5nVG9Gcm9udCgp
CiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3Bh
Z2UtPmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6QnJp
bmdUb0Zyb250KCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0
b3I6OndoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChGdW5jdGlvbjx2b2lkKCk+JiYg
Y2FsbGJhY2spCkBAIC0yNTQsMTcgKzI1NCwxNyBAQCB2b2lkIFdlYkluc3BlY3Rvcjo6c3RvcEVs
ZW1lbnRTZWxlY3Rpb24oKQogCiB2b2lkIFdlYkluc3BlY3Rvcjo6ZWxlbWVudFNlbGVjdGlvbkNo
YW5nZWQoYm9vbCBhY3RpdmUpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkVs
ZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpFbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChh
Y3RpdmUpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yOjp0
aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yUHJveHk6OlRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChhY3RpdmUpLCBtX3BhZ2Ut
PmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6VGltZWxp
bmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKIH0KIAog
dm9pZCBXZWJJbnNwZWN0b3I6OnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0
b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2UgZGV2ZWxvcGVyUHJlZmVyZW5jZSwgT3B0aW9u
YWw8Ym9vbD4gb3ZlcnJpZGVWYWx1ZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6U2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKGRldmVsb3BlclByZWZlcmVuY2UsIG92
ZXJyaWRlVmFsdWUpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6U2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKGRldmVsb3BlclBy
ZWZlcmVuY2UsIG92ZXJyaWRlVmFsdWUpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7CiB9CiAKIGJv
b2wgV2ViSW5zcGVjdG9yOjpjYW5BdHRhY2hXaW5kb3coKQpAQCAtMjk4LDcgKzI5OCw3IEBAIHZv
aWQgV2ViSW5zcGVjdG9yOjp1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCkKIAogICAgIG1fcHJl
dmlvdXNDYW5BdHRhY2ggPSBjYW5BdHRhY2hXaW5kb3c7CiAKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChjYW5BdHRhY2hXaW5kb3cpLCBt
X3BhZ2UtPmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChjYW5BdHRhY2hXaW5kb3cpLCBtX3BhZ2UtPmlkZW50
aWZpZXIoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcAppbmRleCBlZjJl
MGY5NjJhZThjMjZiMDM4ZjM2MjU1NjkwZTNiNzdiNzgzMWY1Li5mOWQzYTU1ODg4OGRlMzBlZDYw
NmY3ZmFhMDc4MjdlNTFiZGM0ZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViSW5zcGVjdG9y
TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRl
SW5mby5oPgpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnVwZGF0ZUNv
bm5lY3Rpb24oKQogICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPm9wZW4oKTsKICNlbmRpZgogCi0g
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25u
ZWN0aW9uQ2xpZW50UG9ydCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJUHJveHk6OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25uZWN0aW9u
Q2xpZW50UG9ydCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYklu
c3BlY3RvclVJOjp3aW5kb3dPYmplY3RDbGVhcmVkKCkKQEAgLTE1MCwxNCArMTUwLDE0IEBAIHZv
aWQgV2ViSW5zcGVjdG9yVUk6OmZyb250ZW5kTG9hZGVkKCkKICAgICBzZXREb2NrU2lkZShtX2Rv
Y2tTaWRlKTsKICAgICBzZXRJc1Zpc2libGUobV9pc1Zpc2libGUpOwogCi0gICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OkZyb250ZW5kTG9hZGVkKCksIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkZyb250ZW5kTG9hZGVk
KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogCiAgICAgYnJpbmdUb0Zyb250KCk7CiB9
CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCiB7Ci0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpTdGFydFdpbmRv
d0RyYWcoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVj
dG9yVUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQpAQCAtMTY5LDEyICsxNjksMTIg
QEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCiAK
IHZvaWQgV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9Gcm9udCgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9p
bnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OmNsb3Nl
V2luZG93KCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RGlkQ2xvc2UoKSwg
bV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQ
cm94eTo6RGlkQ2xvc2UoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiAKICAgICBpZiAo
bV9iYWNrZW5kQ29ubmVjdGlvbikgewogICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5pbnZh
bGlkYXRlKCk7CkBAIC0xOTksMTcgKzE5OSwxNyBAQCB2b2lkIFdlYkluc3BlY3RvclVJOjpjbG9z
ZVdpbmRvdygpCiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlb3BlbigpCiB7Ci0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OlJlb3BlbigpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpSZW9wZW4oKSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlc2V0U3RhdGUo
KQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpSZXNldFN0YXRlKCksIG1faW5z
cGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6
OlJlc2V0U3RhdGUoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OkFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6U2V0Rm9yY2VkQXBwZWFyYW5jZShhcHBlYXJhbmNlKSwgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6U2V0Rm9y
Y2VkQXBwZWFyYW5jZShhcHBlYXJhbmNlKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9
CiAKIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gV2ViSW5zcGVjdG9yVUk6
OnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdApAQCAtMjM2LDE2ICsyMzYsMTYg
QEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlIGRvY2tT
aWRlKQogICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKICAg
ICBzd2l0Y2ggKGRvY2tTaWRlKSB7CiAgICAgY2FzZSBEb2NrU2lkZTo6VW5kb2NrZWQ6Ci0gICAg
ICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OkRldGFjaCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsK
KyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpEZXRhY2goKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRp
Zmllcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG9ja1NpZGU6OlJpZ2h0OgotICAgICAg
ICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpBdHRhY2hSaWdodCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpBdHRhY2hSaWdodCgpLCBtX2luc3BlY3RlZFBh
Z2VJZGVudGlmaWVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEb2NrU2lkZTo6TGVmdDoK
LSAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoTGVmdCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVu
dGlmaWVyKTsKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpBdHRhY2hMZWZ0KCksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERvY2tTaWRlOjpC
b3R0b206Ci0gICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaEJvdHRvbSgpLCBtX2luc3BlY3Rl
ZFBhZ2VJZGVudGlmaWVyKTsKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpBdHRhY2hCb3R0b20o
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
QEAgLTI5OCw0MiArMjk4LDQyIEBAIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnVwZGF0ZUZpbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiBmaW5kU3RyaW5nKQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjpjaGFu
Z2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCksIG1faW5z
cGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6
OlNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZp
ZXIpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkIHdpZHRoKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRB
dHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh3
aWR0aCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYkluc3BlY3Rv
clVJOjpjaGFuZ2VTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRTaGVldFJlY3QocmVjdCksIG1faW5zcGVjdGVkUGFn
ZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OlNldFNoZWV0
UmVjdChyZWN0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5z
cGVjdG9yVUk6Om9wZW5VUkxFeHRlcm5hbGx5KGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpPcGVuVVJMRXh0ZXJuYWxseSh1cmwpLCBtX2luc3Bl
Y3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpP
cGVuVVJMRXh0ZXJuYWxseSh1cmwpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAog
dm9pZCBXZWJJbnNwZWN0b3JVSTo6c2F2ZShjb25zdCBXVEY6OlN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IFdURjo6U3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VT
YXZlQXMpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUs
IGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9pbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6U2F2ZShmaWxlbmFt
ZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6YXBwZW5kKGNvbnN0IFdURjo6
U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQpCiB7Ci0gICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1faW5z
cGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6
OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwog
fQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpJbnNwZWN0
ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6Okluc3BlY3RlZFVSTENoYW5nZWQodXJsU3Ry
aW5nKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9y
VUk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5m
bykKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2hvd0NlcnRpZmljYXRlKGNl
cnRpZmljYXRlSW5mbyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJUHJveHk6OlNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBt
X2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVM
RU1FVFJZKQpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnBhZ2VVbnBh
dXNlZCgpCiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2Vu
ZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1l
c3NhZ2UpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogU3RyaW5nIFdlYkluc3Bl
Y3RvclVJOjp0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdAo=
</data>
<flag name="commit-queue"
          id="443436"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423930</attachid>
            <date>2021-03-22 13:32:14 -0700</date>
            <delta_ts>2021-03-22 16:26:09 -0700</delta_ts>
            <desc>Patch v1.4 - for GTK/Win EWS</desc>
            <filename>bug-223551-20210322133213.patch</filename>
            <type>text/plain</type>
            <size>423655</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0Nzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM1NzA2Mzg1OGQ0ODRiZGUx
N2FkNTdjNGEyZDFiYzQ0ODE5ZjlkNGIuLmZjMWE4Njg0ODFhODIxMTJmNTcyOTIyYWUyYjZiNGU5
N2Y0MDkwYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQ0IEBACisyMDIxLTAzLTIyICBCSiBCdXJn
ICA8YmJ1cmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlbmFtZSBXZWJJ
bnNwZWN0b3JQcm94eSB0byBXZWJJbnNwZWN0b3JVSVByb3h5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM1NTEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUbyBpbXByb3ZlIGNsYXJpdHkgaW4gdGhlIGNv
ZGViYXNlLCBJJ20gcmVuYW1pbmcgdGhpcyB0byBiZSBjb25zaXN0ZW50CisgICAgICAgIHdpdGgg
aXQncyBXZWJQcm9jZXNzLXNpZGUgY291bnRlcnBhcnQsIFdlYkluc3BlY3RvclVJLiBUaGVyZSBh
cmUgbWFueQorICAgICAgICBkaWZmZXJlbnQgY2xhc3NlcyB3aXRoIHRoZSAnV2ViSW5zcGVjdG9y
JyBwcmVmaXgsIHNvIGl0IGNhbiBiZSBkaWZmaWN1bHQKKyAgICAgICAgdG8gdW5kZXJzdGFuZCB3
aGV0aGVyIGEgY2xhc3MgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBXZWJJbnNwZWN0b3JVSQorICAg
ICAgICBmcm9udGVuZCBvciB0aGUgSW5zcGVjdG9yQ29udHJvbGxlciBiYWNrZW5kLiBUaGlzIGZp
eGVzIG9uZSBvZiB0aGUgYmlnZ2VzdAorICAgICAgICBvZmZlbmRlcnMuCisKKyAgICAgICAgRm9y
IGJyZXZpdHksIEkgaGF2ZSBlbGlkZWQgZnVuY3Rpb24tbGV2ZWwgY2hhbmdlbG9nIGVudHJpZXMg
ZnJvbSBmaWxlcworICAgICAgICB0aGF0IGhhdmUgYmVlbiByZW5hbWVkLiBUaGlzIGlzIGEgbWVj
aGFuaWNhbCByZWZhY3RvcmluZy4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFr
ZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0Ogor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgIChB
UEk6Okluc3BlY3RvckNsaWVudDo6b3BlblVSTEV4dGVybmFsbHkpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQVBJVUlDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmRpZEF0dGFj
aExvY2FsSW5zcGVjdG9yKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OndpbGxDbG9zZUxvY2Fs
SW5zcGVjdG9yKToKKyAgICAgICAgKEFQSTo6VUlDbGllbnQ6OmNvbmZpZ3VyYXRpb25Gb3JMb2Nh
bEluc3BlY3Rvcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0luc3BlY3Rvci5jcHA6CisgICAgICAgIChXS0luc3Bl
Y3RvckdldFR5cGVJRCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL21hYy9XS0luc3BlY3RvclByaXZhdGVNYWMuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS0luc3BlY3RvckludGVybmFsLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJv
bGxlci5tbToKKyAgICAgICAgKC1bX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
aW5pdFdpdGhDb25maWd1cmF0aW9uOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnRlcm5hbC5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rvci5jcHA6CisgICAgICAgICh3ZWJr
aXRXZWJJbnNwZWN0b3JDcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkluc3BlY3RvclByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlE
ZWxlZ2F0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tOgorICAg
ICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6Y29uZmlndXJhdGlvbkZvckxvY2Fs
SW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZEF0
dGFjaExvY2FsSW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OndpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwubW06CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5z
cGVjdG9yQnJvd3NlckFnZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0Nv
Y29hL0luc3BlY3RvckRlbGVnYXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9D
b2NvYS9JbnNwZWN0b3JEZWxlZ2F0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRGVs
ZWdhdGU6Okluc3BlY3RvckNsaWVudDo6b3BlblVSTEV4dGVybmFsbHkpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRXh0ZW5zaW9uRGVsZWdhdGUubW06Cisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5LmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eS5jcHAuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojp+UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmludmFsaWRhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXREaWFnbm9zdGlj
TG9nZ2luZ0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHk6OmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjpjbG9zZUZyb21CYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eTo6Y2xvc2VGcm9tQ3Jhc2gpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5OjpzaG93KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojpmcm9udGVuZERpZENsb3NlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cmVvcGVuKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnNhdmUpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjphcHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXRTaGVldFJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXRGb3JjZWRBcHBlYXJhbmNlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c3RhcnRXaW5kb3dEcmFnKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6b3BlblVSTEV4dGVy
bmFsbHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpzaG93
Q2VydGlmaWNhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjpzZW5kTWVzc2FnZVRvQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1D
cmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXBwZW5kKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRT
aGVldFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZyk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtT3BlblVSTEV4dGVybmFsbHkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3cpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5
LmguCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQ6On5S
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6aXNVbmRlclRlc3QgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpleHRlbnNpb25Db250cm9sbGVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6d2luZG93IGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2hlZXRSZWN0IGNv
bnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5LmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5jcHAu
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OldlYkluc3BlY3RvclVJUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojp+V2ViSW5zcGVjdG9y
VUlQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnNldEluc3Bl
Y3RvckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omluc3Bl
Y3Rpb25MZXZlbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
Omluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclVJUHJveHk6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JVSVByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5Ojppc0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OnNob3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpoaWRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6Y2xvc2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpjbG9zZUZvckNyYXNoKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cmVvcGVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnJlc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
dXBkYXRlRm9yTmV3UGFnZVByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JV
SVByb3h5OjpzZXRGcm9udGVuZENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjpzaG93Q29uc29sZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnNob3dSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JV
SVByb3h5OjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjphdHRhY2hCb3R0b20pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjphdHRhY2hSaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OmF0dGFjaExlZnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjphdHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpkZXRh
Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnNldEF0
dGFjaGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5
OjpzZXRTaGVldFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpz
dGFydFdpbmRvd0RyYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojp0
b2dnbGVQYWdlUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6dG9nZ2xlRWxlbWVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGVGcm9udGVuZFBhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Om9wZW4pOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpmcm9udGVuZExvYWRlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0Rm9yY2Vk
QXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Om9wZW5V
UkxFeHRlcm5hbGx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5z
cGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
VUlQcm94eTo6dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yVUlQcm94eTo6c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFp
bGFibGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpzYXZlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6YXBwZW5kKToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvdWxkT3BlbkF0dGFjaGVkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6ZXZhbHVhdGVJbkZyb250ZW5kRm9yVGVzdGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRl
RnJvbnRlbmRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3cpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2gpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJlc2V0U3Rh
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5n
VG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
QnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtSGlkZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJ
UHJveHk6OnBsYXRmb3JtSXNGcm9udCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJ
UHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRv
d0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
SW5zcGVjdGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybUF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtRGV0YWNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JQYWdlVVJMKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dh
YmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRB
dHRhY2hlZFdpbmRvd1dpZHRoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJUHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5oLgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0ZWRQYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yUGFnZSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmV4dGVuc2lvbkNvbnRyb2xsZXIgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojppc0Nvbm5lY3RlZCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmlzVmlzaWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvcldpbmRvdyBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnNoZWV0UmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclZp
ZXcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRhY2ht
ZW50U2lkZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omlz
QXR0YWNoZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpp
c1Byb2ZpbGluZ1BhZ2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5Ojppc0VsZW1lbnRTZWxlY3Rpb25BY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5Ojppc1VuZGVyVGVzdCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2FuQXR0YWNoKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6Y2FuQXR0YWNoIGNvbnN0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHku
bWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1Jl
bW90ZUluc3BlY3RvckNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3Rr
L1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5j
cHAuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnVwZGF0ZVdp
bmRvd1RpdGxlKToKKyAgICAgICAgKFdlYktpdDo6cmVtb3RlSW5zcGVjdG9yVmlld0Rlc3Ryb3ll
ZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
Q3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRT
dGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtQnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6cmVtb3RlRmlsZVJlcGxhY2VDb250
ZW50c0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1BcHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5k
b3dEcmFnKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1PcGVuVVJMRXh0ZXJuYWxseSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5
Q2xpZW50LmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9y
VUlQcm94eUd0ay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcC4KKyAgICAgICAgKFdlYktpdDo6aW5z
cGVjdG9yVmlld0Rlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJv
eHk6OnNldENsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnVw
ZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6ZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKToKKyAgICAgICAgKFdlYktpdDo6d2ViUHJvY2Vzc0RpZENyYXNoKToK
KyAgICAgICAgKFdlYktpdDo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OmdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudSk6CisgICAgICAgIChX
ZWJLaXQ6Omluc3BlY3RvcldlYnNpdGVEYXRhU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3cp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1IaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUlzRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFw
cGVhcmFuY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bUluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3Bl
Y3RvclVJUHJveHk6Omluc3BlY3RvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclVJUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVk
V2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtRGV0YWNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcpOgor
ICAgICAgICAoV2ViS2l0OjpmaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2spOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUFwcGVuZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdl
ZCk6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2lu
ZG93LmNwcDoKKyAgICAgICAgKHdlYmtpdEluc3BlY3RvcldpbmRvd05ldyk6CisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbTog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlNYWMubW0uCisgICAgICAgICgtW1dLUmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eU9iakNBZGFwdGVyIHdpbmRvdzp3aWxsUG9zaXRpb25TaGVldDp1c2luZ1JlY3Q6XSk6
CisgICAgICAgICgtW1dLUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGluaXRX
aXRoUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTpdKToKKyAgICAgICAgKC1bV0tSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVjdG9yV0tXZWJWaWV3RGlkQmVjb21lQWN0
aXZlOl0pOgorICAgICAgICAoLVtXS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRl
ciBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOl0pOgorICAgICAgICAo
LVtXS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciBpbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0Ol0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5Ojp3ZWJWaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6ZGlkQmVjb21lQWN0aXZlKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VB
bmRXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUFw
cGVuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtU2V0U2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybU9wZW5VUkxFeHRl
cm5hbGx5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1TaG93Q2VydGlmaWNhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIgd2ViVmlld10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1dlYkluc3BlY3RvclVJUHJveHlNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tLgorICAgICAgICAo
LVtXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciBpbnNwZWN0b3JSZWZdKToKKyAgICAg
ICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVjdG9yXSk6CisgICAg
ICAgICgtW1dLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGluaXRXaXRoV2ViSW5zcGVj
dG9yVUlQcm94eTpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0
ZXIgaW52YWxpZGF0ZV0pOgorICAgICAgICAoLVtXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRh
cHRlciB3aW5kb3c6d2lsbFBvc2l0aW9uU2hlZXQ6dXNpbmdSZWN0Ol0pOgorICAgICAgICAoLVtX
S1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciB3aW5kb3dEaWRNb3ZlOl0pOgorICAgICAg
ICAoLVtXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciB3aW5kb3dEaWRSZXNpemU6XSk6
CisgICAgICAgICgtW1dLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIHdpbmRvd1dpbGxD
bG9zZTpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgd2lu
ZG93RGlkRW50ZXJGdWxsU2NyZWVuOl0pOgorICAgICAgICAoLVtXS1dlYkluc3BlY3RvclVJUHJv
eHlPYmpDQWRhcHRlciB3aW5kb3dEaWRFeGl0RnVsbFNjcmVlbjpdKToKKyAgICAgICAgKC1bV0tX
ZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdl
Ol0pOgorICAgICAgICAoLVtXS1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciBvYnNlcnZl
VmFsdWVGb3JLZXlQYXRoOm9mT2JqZWN0OmNoYW5nZTpjb250ZXh0Ol0pOgorICAgICAgICAoLVtX
S1dlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRp
ZEJlY29tZUFjdGl2ZTpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0Fk
YXB0ZXIgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDpdKToKKyAgICAg
ICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JV
SVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6d2lsbE1vdmVUb1dpbmRv
dzpdKToKKyAgICAgICAgKC1bV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6XSk6CisgICAgICAgICgtW1dLV2ViSW5z
cGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIGluc3BlY3RvclZpZXdDb250cm9sbGVyOm9wZW5VUkxF
eHRlcm5hbGx5Ol0pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpkaWRC
ZWNvbWVBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRh
Y2htZW50Vmlld0RpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJv
eHk6OmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JVSVByb3h5OjphdHRhY2htZW50RGlkTW92ZVRvV2luZG93KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGVGcm9udGVu
ZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
Q3JlYXRlRnJvbnRlbmRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclVJUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yVUlQcm94eTo6Y2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1IaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUlzRnJvbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNhbkF0dGFjaCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZh
aWxhYmlsaXR5Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojp3aW5kb3dGcmFtZURpZENoYW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0ZWRWaWV3
RnJhbWVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpw
bGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUF0dGFjaCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGV0YWNoKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dXaWR0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU2V0U2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JVSVByb3h5OjppbnNwZWN0b3JQYWdlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpzeXN0
ZW1WZXJzaW9uUGxpc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5Ojpp
bmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQ
cm94eTo6YXBwbHlGb3JjZWRBcHBlYXJhbmNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlXaW4uY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eVdpbi5jcHAuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHk6OlduZFByb2MpOgorICAgICAgICAoV2ViS2l0OjpyZWdpc3RlcldpbmRvd0NsYXNzKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2l6ZUNoYW5nZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6Om9uQ2xvc2UpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtU2V0Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0Nl
cnRpZmljYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgICogVUlQcm9jZXNz
L0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yVUlQcm94eVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2lu
LmNwcC4KKyAgICAgICAgKFdlYktpdDo6Z2V0SW5zcGVjdGVkV2luZG93SW5mbyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OndpbmRvd1JlY2VpdmVkTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnduZFByb2MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpyZWdpc3RlcldpbmRvd0NsYXNzKToKKyAgICAg
ICAgKFdlYktpdDo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OndlYlByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclBhZ2VVUkwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JUZXN0UGFn
ZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OmluZm9Gb3JMb2Nh
bERlYnVnZ2FibGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGV0YWNoKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRX
aW5kb3dXaWR0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtU2V0U2hlZXRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1Jc0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1IaWRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1SZXNldFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1CcmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU2F2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRm
b3JtQXBwZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dE
cmFnKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6bV9saW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjppbnNwZWN0b3IgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JV
SS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2Fn
ZVRvQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpmcm9u
dGVuZExvYWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpjaGFu
Z2VTaGVldFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2V0
Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJ
OjpzdGFydFdpbmRvd0RyYWcpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JV
STo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6
OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OnJl
b3Blbik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpyZXNldFN0YXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6Om9wZW5VUkxFeHRlcm5h
bGx5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNhdmUpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6YXBwZW5kKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNob3dDZXJ0aWZpY2F0ZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yOjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3Rvcjo6Y2xvc2VGcm9udGVuZENvbm5lY3Rpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3I6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3Rvcjo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3I6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3Rvcjo6c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViSW5zcGVjdG9yOjp1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJOjp1cGRhdGVDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yVUk6OmZyb250ZW5kTG9hZGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5z
cGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJOjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6Y2xv
c2VXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yVUk6OnJlc2V0U3RhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSTo6c2V0Rm9yY2VkQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkluc3BlY3RvclVJOjpyZXF1ZXN0U2V0RG9ja1NpZGUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dXaWR0aCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJOjpjaGFuZ2VTaGVldFJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6b3BlblVSTEV4dGVybmFsbHkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JVSTo6c2F2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clVJOjphcHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVk
VVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclVJOjpzaG93Q2VydGlm
aWNhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQpOgorCiAyMDIxLTAzLTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06MjY4
MTo5OiBydW50aW1lIGVycm9yOiBsb2FkIG9mIHZhbHVlIG5ubiwgd2hpY2ggaXMgbm90IGEgdmFs
aWQgdmFsdWUgZm9yIHR5cGUgJ0JPT0wnIChha2EgJ3NpZ25lZCBjaGFyJykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMu
dHh0CmluZGV4IDUyZjhkOTRlZmYzYjUxYmZlMWM0ZTU1MWU0NzM3Y2Q1ZmI1ODQ0MTAuLmQwYzky
MTc4MmFlNTUxNWUwOTUxNWJkYjUxY2M0ZTE5MGVlOTY1MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApA
QCAtMjAyLDggKzIwMiw4IEBAIHNldChXZWJLaXRfTUVTU0FHRVNfSU5fRklMRVMKIAogICAgIFVJ
UHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc1Byb3h5CiAKLSAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5Ci0gICAgVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JQcm94eQorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eQorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUlQcm94eQogCiAgICAgVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggOWYyMjk3MTA3MTZiNDE5MzAwYTI0
NmQwZDNmYmI4MGZjZWE4NmJiMi4uNWU4ZmQzY2I4NzkyMDc5ZGYxYjEzY2FkOTM1YjdiNzNkMTE0
Mjg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2Zp
bGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dApAQCAtMTA0LDggKzEwNCw4IEBAICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9Db2NvYS9WaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJ
UHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCi0kKFBST0pFQ1RfRElSKS9V
SVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCi0k
KFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5Lm1lc3Nh
Z2VzLmluCiskKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHkubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yVUlQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eS5tZXNz
YWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL01lZGlhL0F1ZGlvU2Vzc2lvblJvdXRp
bmdBcmJpdHJhdG9yUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5t
ZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRw
dXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmls
ZWxpc3QKaW5kZXggODM5OGNmYzAxM2QzY2FmZjU3YzdjZjFkMjhhZmE0MzhlMzdmZGYyMC4uZWYy
MTVhYzM3OTY5OGU0N2E4NjQ5ZTI0MWM3YzY4ZGQwYjc3NzM2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0yODIsOSArMjgyLDkgQEAg
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlVGV4dFRy
YWNrUHJveHlNZXNzYWdlc1JlcGxpZXMKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZVZpZGVvVHJhY2tQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVZpZGVvVHJh
Y2tQcm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZVZpZGVvVHJhY2tQcm94eU1lc3NhZ2VzUmVwbGllcy5oCi0kKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAKLSQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaAotJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlN
ZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHlNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3Rv
clVJTWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3Nh
Z2VzUmVwbGllcy5oCkBAIC00MTIsOSArNDEyLDkgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3MK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3Rv
ck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1dlYkluc3BlY3Rvck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3Rvck1lc3NhZ2VzUmVwbGllcy5oCi0kKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAKLSQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1dlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaAotJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlc1JlcGxp
ZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViSW5z
cGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oCiskKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JVSVBy
b3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1dlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZl
ci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYklu
c3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJv
bGxlck1lc3NhZ2VzUmVwbGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNWZk
NThkMjI0YTdjN2Q5NGM3ODIyNGNhNTA1NjAxYTNiMmZlNzM2YS4uZjUyOTRkZTk1ZDUxYTFmMTU2
M2RlZWI3OWYxOTIxMjQwMmMzMzI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAt
MTQ3LDggKzE0Nyw4IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogCVVJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9XZWJBdXRoblByb2Nlc3NQcm94eSBcCiAJVUlQcm9jZXNzL1dlYlBhc3RlYm9h
cmRQcm94eSBcCiAJVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5IFwKLQlVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5IFwKLQlVSVBy
b2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5IFwKKwlVSVByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvclVJUHJveHkgXAorCVVJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eSBcCiAJVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JV
SUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eSBcCiAJVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
Y2Vzc1Byb3h5IFwKIAlVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eSBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUZU
Vy5jbWFrZQppbmRleCBjYjcwYWI4YWU3MTVhNzMzZDU2ZTkwMTU0OTUwYjU2NTk1ZDAwNTM4Li5k
YWJmMzIzZTM2N2RhYjI2NGNiMWFmODY0MTAzNDk1ZTRmNjljNDc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1G
VFcuY21ha2UKQEAgLTUwLDcgKzUwLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAog
ICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGlu
YXRlZEdyYXBoaWNzLmNwcAogCi0gICAgVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVj
dG9yUHJveHlXaW4uY3BwCisgICAgVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9y
VUlQcm94eVdpbi5jcHAKIAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci93aW4vUHJvY2Vzc0xhdW5j
aGVyV2luLmNwcAogCkBAIC0xNzgsNyArMTc4LDcgQEAgaWYgKEVOQUJMRV9SRU1PVEVfSU5TUEVD
VE9SKQogICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwCiAgICAgICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3Bl
Y3RvclByb3RvY29sSGFuZGxlci5jcHAKIAotICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3dp
bi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKyAgICAgICAgVUlQcm9jZXNzL0luc3Bl
Y3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eVdpbi5jcHAKICAgICApCiAKICAgICBs
aXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21h
a2UKaW5kZXggMDNhZjU2NWVkMWFlMzllNzdlMTgzYTRhZWJkMWU2NGEyZTI0N2UwYS4uYmY1YmNh
MjNkYjY1N2M2YWQ5ZjMxZWZiYjU3MGNjY2QxYzEzYTBmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlCkBAIC01Nyw3ICs1Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRH
cmFwaGljcy5jcHAKIAotICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclBy
b3h5V2luLmNwcAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclVJUHJv
eHlXaW4uY3BwCiAKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvd2luL1Byb2Nlc3NMYXVuY2hlcldp
bi5jcHAKIApAQCAtMTg1LDcgKzE4NSw3IEBAIGlmIChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikK
ICAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50
LmNwcAogICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQ
cm90b2NvbEhhbmRsZXIuY3BwCiAKLSAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCisgICAgICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Iv
d2luL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlXaW4uY3BwCiAgICAgKQogCiAgICAgbGlzdChB
UFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDdhZWMxNTgw
NzVhYTk1NWU0NzUyNjBmNGEyOGNhOTc5ZjUzNmI4NTMuLjNlZWQ0YjJhMDdlMGNlOTYwY2MzOTFm
YzFkNjRkMDI4MTc4MzA1MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtNDU1LDggKzQ1NSw4IEBAIFVJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCiBVSVByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NQcm94eS5jcHAKIAogVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94
eS5jcHAKLVVJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCi1V
SVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5LmNwcAorVUlQcm9jZXNzL0luc3Bl
Y3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5LmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3JVSVByb3h5LmNwcAogVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JV
SUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eS5jcHAKIFVJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yVXRpbGl0aWVzLmNwcAogVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlRGVidWdnYWJs
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCAyMDM5MGE3ZWNkOWFiMzcwZGYyOTAzMGY4
Y2JhYWUwYzk0Y2JhMDZhLi41NThkMjZkOTMxNTc1ZjczYjk0NzBjZjA5ZDJkOTJlZjhiYjVlOTI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNl
L1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC00MjcsOCArNDI3LDggQEAgVUlQcm9jZXNzL0lu
c3BlY3Rvci9Db2NvYS9JbnNwZWN0b3JFeHRlbnNpb25EZWxlZ2F0ZS5tbQogVUlQcm9jZXNzL0lu
c3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCiBVSVByb2Nlc3MvSW5zcGVj
dG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQogCi1VSVBy
b2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbQotVUlQcm9j
ZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KK1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0KK1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJUHJveHlNYWMubW0KIFVJUHJvY2Vzcy9JbnNwZWN0b3Iv
bWFjL1dLSW5zcGVjdG9yUmVzb3VyY2VVUkxTY2hlbWVIYW5kbGVyLm1tCiBVSVByb2Nlc3MvSW5z
cGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tCiBVSVByb2Nlc3MvSW5zcGVj
dG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggNDJi
OTljZDNjZjBlYThmZGNhYWZlZTY4YzM4NzJiODg1NDBlNGRmNi4uZjhkYmQyYWI3YzJlMDRmNWY5
YjUxZGEwY2Y1NDY5OTRjZjZjMmFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
R1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC0yMjEsOCArMjIx
LDggQEAgVUlQcm9jZXNzL2dlb2NsdWUvR2VvY2x1ZUdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwCiAK
IFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCiAKLVVJ
UHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcAotVUlQ
cm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCitVSVByb2Nlc3Mv
SW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcAorVUlQcm9jZXNz
L0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAKIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKIAogVUlQcm9jZXNzL0xhdW5jaGVy
L2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJSW5zcGVjdG9yQ2xpZW50LmgKaW5kZXggYjg0MTFlNmYwMDc2
OWIxZTA0YjkwOGI3ODBiOTU0YmJhYjdiMjAyNi4uNjExOTE0MGQzNjk0ZmMzNmE2Y2U3NDlkODVl
ZTQ5OWYxZjQ4NjEyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUluc3BlY3RvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElJ
bnNwZWN0b3JDbGllbnQuaApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHk7CitjbGFz
cyBXZWJJbnNwZWN0b3JVSVByb3h5OwogfQogCiBuYW1lc3BhY2UgQVBJIHsKQEAgLTM4LDcgKzM4
LDcgQEAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbnNw
ZWN0b3JDbGllbnQoKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIHZvaWQgb3BlblVSTEV4dGVy
bmFsbHkoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiB1cmwp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBvcGVuVVJMRXh0ZXJuYWxseShXZWJLaXQ6OldlYkluc3Bl
Y3RvclVJUHJveHkmLCBjb25zdCBXVEY6OlN0cmluZyYgdXJsKSB7IH0KIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVVJ
Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaAppbmRl
eCA3Y2ViZTJmYWJhZDViMzM1ZWIzNjJhMzI3ZWIzNDRhZTgyZGJlNjZlLi44MzVkMjU1ZTI5ZTU2
OGI4NDY5ZjUwYjBkZDJiOTVhOGIwZTlhMDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJVUlDbGllbnQuaApAQCAtMTk1LDkgKzE5NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgcnVuV2ViQXV0aGVudGljYXRpb25QYW5lbChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdl
YkF1dGhlbnRpY2F0aW9uUGFuZWwmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBXZWJLaXQ6OkZy
YW1lSW5mb0RhdGEmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJLaXQ6OldlYkF1dGhlbnRp
Y2F0aW9uUGFuZWxSZXN1bHQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7IGNvbXBsZXRpb25IYW5k
bGVyKFdlYktpdDo6V2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUpOyB9
CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRBdHRhY2hMb2NhbEluc3BlY3RvcihXZWJL
aXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkmKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgd2lsbENsb3NlTG9jYWxJbnNwZWN0b3IoV2ViS2l0OjpXZWJQYWdlUHJveHkm
LCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5JikgeyB9Ci0gICAgdmlydHVhbCBSZWY8QVBJOjpJ
bnNwZWN0b3JDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3IoV2Vi
S2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5JikKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQXR0YWNoTG9jYWxJbnNwZWN0b3IoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBX
ZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHkmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENs
b3NlTG9jYWxJbnNwZWN0b3IoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkluc3Bl
Y3RvclVJUHJveHkmKSB7IH0KKyAgICB2aXJ0dWFsIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3Vy
YXRpb24+IGNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3RvcihXZWJLaXQ6OldlYlBhZ2VQcm94
eSYsIFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eSYpCiAgICAgewogICAgICAgICByZXR1cm4g
QVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCmluZGV4IGM4YTE4OTVhNmQwZGU3MDlmOWFl
Mzk4YmU0NWJlYTY2YjllYmZhMGQuLjJlYWI3N2U4MDRhNTU4ZTdmYmEyNWI3OWQ0NzRmNzMwMWIx
MGYzMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2Fz
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCkBAIC05
NSw3ICs5NSw3IEBAIGNsYXNzIFdlYkZyYW1lUHJveHk7CiBjbGFzcyBXZWJHZW9sb2NhdGlvbk1h
bmFnZXJQcm94eTsKIGNsYXNzIFdlYkdlb2xvY2F0aW9uUG9zaXRpb247CiBjbGFzcyBXZWJJY29u
RGF0YWJhc2U7Ci1jbGFzcyBXZWJJbnNwZWN0b3JQcm94eTsKK2NsYXNzIFdlYkluc3BlY3RvclVJ
UHJveHk7CiBjbGFzcyBXZWJOb3RpZmljYXRpb247CiBjbGFzcyBXZWJOb3RpZmljYXRpb25NYW5h
Z2VyUHJveHk7CiBjbGFzcyBXZWJOb3RpZmljYXRpb25Qcm92aWRlcjsKQEAgLTEzNSw3ICsxMzUs
NyBAQCBXS19BRERfQVBJX01BUFBJTkcoV0tHZW9sb2NhdGlvblBvc2l0aW9uUmVmLCBXZWJHZW9s
b2NhdGlvblBvc2l0aW9uKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLSFRUUENvb2tpZVN0b3JlUmVm
LCBBUEk6OkhUVFBDb29raWVTdG9yZSkKIFdLX0FERF9BUElfTUFQUElORyhXS0hpdFRlc3RSZXN1
bHRSZWYsIEFQSTo6SGl0VGVzdFJlc3VsdCkKIFdLX0FERF9BUElfTUFQUElORyhXS0ljb25EYXRh
YmFzZVJlZiwgV2ViSWNvbkRhdGFiYXNlKQotV0tfQUREX0FQSV9NQVBQSU5HKFdLSW5zcGVjdG9y
UmVmLCBXZWJJbnNwZWN0b3JQcm94eSkKK1dLX0FERF9BUElfTUFQUElORyhXS0luc3BlY3RvclJl
ZiwgV2ViSW5zcGVjdG9yVUlQcm94eSkKIFdLX0FERF9BUElfTUFQUElORyhXS01lZGlhS2V5U3lz
dGVtUGVybWlzc2lvbkNhbGxiYWNrUmVmLCBNZWRpYUtleVN5c3RlbVBlcm1pc3Npb25DYWxsYmFj
aykKIFdLX0FERF9BUElfTUFQUElORyhXS01lc3NhZ2VMaXN0ZW5lclJlZiwgQVBJOjpNZXNzYWdl
TGlzdGVuZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tOYXZpZ2F0aW9uQWN0aW9uUmVmLCBBUEk6
Ok5hdmlnYXRpb25BY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0luc3BlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0lu
c3BlY3Rvci5jcHAKaW5kZXggMzkzMjdjNWM5MjMwNTkxZTRmNTJlNDU3NGM0MTZlMzY2ODc3ODhm
MC4uZTE0NjVlZGQyOWNhZjMxMDljMTdkNDRiYjNjODhhYWJhOThjZmJiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tJbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLSW5zcGVjdG9yLmNwcApAQCAtMjksMTQgKzI5LDE0
IEBACiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIK
LSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJ
UHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKIAogV0tUeXBlSUQgV0tJbnNwZWN0b3JHZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0
b0FQSShXZWJJbnNwZWN0b3JQcm94eTo6QVBJVHlwZSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYklu
c3BlY3RvclVJUHJveHk6OkFQSVR5cGUpOwogfQogCiBXS1BhZ2VSZWYgV0tJbnNwZWN0b3JHZXRQ
YWdlKFdLSW5zcGVjdG9yUmVmIGluc3BlY3RvclJlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuY3BwCmluZGV4IDAzNmNhZjk3MzAzNWJmZGEzMTZkZmZmNWNhZjY1MWQ3MTUx
MjE4MjUuLjI4OWQ2ZGFkYTc3YjE0YjIyODA0NWQ3NDUxMDgxNjM1MmI2ZDY4MmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcApAQCAtNzMsNyArNzMsNyBAQAogI2lu
Y2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgIldlYkZvcm1DbGllbnQuaCIK
ICNpbmNsdWRlICJXZWJJbWFnZS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisj
aW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgogI2luY2x1ZGUgIldlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyUHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKICNpbmNsdWRl
ICJXZWJQYWdlTWVzc2FnZXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL21hYy9XS0luc3BlY3RvclByaXZhdGVNYWMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL21hYy9XS0luc3BlY3RvclByaXZhdGVNYWMuaAppbmRleCA1MmM0NGZjMTJjN2I0
YmQwOGRmZmJmYzIwZWM5Y2E4ZGIwMDczNDQ0Li41Zjg4ODBmZjEzMjA0YjM5YjM4ODQ2YTdlZTEy
MzU1MTQwYmE0MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9t
YWMvV0tJbnNwZWN0b3JQcml2YXRlTWFjLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvbWFjL1dLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oCkBAIC00MSw3ICs0MSw3IEBAIGNvbnN0
IE5TSW50ZWdlciBXS0luc3BlY3RvclZpZXdUYWcgPSAxMDAwOwogCiAvLyBUaGlzIGNsYXNzIGlz
IHRoZSBXZWIgSW5zcGVjdG9yIHdpbmRvdyBkZWxlZ2F0ZS4gSXQgY2FuIGJlIHVzZWQgdG8gYWRk
IGludGVyZmFjZQogLy8gYWN0aW9ucyB0aGF0IG5lZWQgdG8gd29yayB3aGVuIHRoZSBXZWIgSW5z
cGVjdG9yIHdpbmRvdyBpcyBrZXkuCi1XS19FWFBPUlQgQGludGVyZmFjZSBXS1dlYkluc3BlY3Rv
clByb3h5T2JqQ0FkYXB0ZXIgOiBOU09iamVjdCA8TlNXaW5kb3dEZWxlZ2F0ZT4KK1dLX0VYUE9S
VCBAaW50ZXJmYWNlIFdLV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIDogTlNPYmplY3Qg
PE5TV2luZG93RGVsZWdhdGU+CiAKIEBwcm9wZXJ0eSAocmVhZG9ubHkpIFdLSW5zcGVjdG9yUmVm
IGluc3BlY3RvclJlZjsKIEBwcm9wZXJ0eSAocmVhZG9ubHkpIF9XS0luc3BlY3RvciAqaW5zcGVj
dG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0lu
c3BlY3RvckludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
SW5zcGVjdG9ySW50ZXJuYWwuaAppbmRleCA3ZmRiZDU4ZDljNzM3Y2MyM2YxZTA1MzU5NTIyNTEz
OGQ3ODkzZTkwLi5mYzQxOWFiYzY4MjBiNGJjZTVkN2UxYmRjYjExMjY0NjdmZTM1OTg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLSW5zcGVjdG9ySW50
ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLSW5zcGVj
dG9ySW50ZXJuYWwuaApAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiX1dLSW5zcGVjdG9yUHJp
dmF0ZS5oIgogCiAjaW1wb3J0ICJXS09iamVjdC5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJv
eHkuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclVJUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiBjbGFzcyBJbnNwZWN0b3JEZWxlZ2F0ZTsKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgSW5z
cGVjdG9yRGVsZWdhdGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi10ZW1wbGF0ZTw+IHN0cnVj
dCBXcmFwcGVyVHJhaXRzPFdlYkluc3BlY3RvclByb3h5PiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBX
cmFwcGVyVHJhaXRzPFdlYkluc3BlY3RvclVJUHJveHk+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xh
c3MgPSBfV0tJbnNwZWN0b3I7CiB9OwogCkBAIC00Miw3ICs0Miw3IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IFdyYXBwZXJUcmFpdHM8V2ViSW5zcGVjdG9yUHJveHk+IHsKIAogQGludGVyZmFjZSBfV0tJ
bnNwZWN0b3IgKCkgPFdLT2JqZWN0PiB7CiBAcGFja2FnZQotICAgIEFQSTo6T2JqZWN0U3RvcmFn
ZTxXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5PiBfaW5zcGVjdG9yOworICAgIEFQSTo6T2JqZWN0
U3RvcmFnZTxXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHk+IF9pbnNwZWN0b3I7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYktpdDo6SW5zcGVjdG9yRGVsZWdhdGU+IF9kZWxlZ2F0ZTsKIH0KIEBl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tSZW1v
dGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQppbmRleCAw
NmUyZWVjZTcxMmI1OTI1MGY1MzkwYmRjNDgwMTRiNWQ3ZTUwYjI1Li5jMTMwMzk5Y2Y5ZjMwNjNm
NWEyZGNjMzkyZTE5ZWVmZDc2M2MxNTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1JlbW90ZVdlYkluc3BlY3Rv
clZpZXdDb250cm9sbGVyLm1tCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJBUElEZWJ1Z2dh
YmxlSW5mby5oIgogI2ltcG9ydCAiQVBJSW5zcGVjdG9yQ29uZmlndXJhdGlvbi5oIgogI2ltcG9y
dCAiRGVidWdnYWJsZUluZm9EYXRhLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5oIgorI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oIgogI2ltcG9ydCAiV0tX
ZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS0luc3BlY3RvckNvbmZpZ3VyYXRpb25JbnRl
cm5hbC5oIgogI2ltcG9ydCAiX1dLSW5zcGVjdG9yRGVidWdnYWJsZUluZm9JbnRlcm5hbC5oIgpA
QCAtNTMsMTUgKzUzLDE1IEBAIEBlbmQKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIF9X
S1JlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IGZpbmFsIDogcHVibGljIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5Q2xpZW50IHsKK2NsYXNzIF9XS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlD
bGllbnQgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgX1dLUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlDbGllbnQoX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKmNv
bnRyb2xsZXIpCisgICAgX1dLUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudChfV0tSZW1v
dGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqY29udHJvbGxlcikKICAgICAgICAgOiBtX2Nv
bnRyb2xsZXIoY29udHJvbGxlcikKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB+X1dLUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQoKQorICAgIHZpcnR1YWwgfl9XS1JlbW90ZVdlYklu
c3BlY3RvclVJUHJveHlDbGllbnQoKQogICAgIHsKICAgICB9CiAKQEAgLTc1LDcgKzc1LDcgQEAg
cHVibGljOgogICAgICAgICBbbV9jb250cm9sbGVyIGNsb3NlRnJvbUZyb250ZW5kXTsKICAgICB9
CiAgICAgCi0gICAgUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlv
bkZvclJlbW90ZUluc3BlY3RvcihSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSYgaW5zcGVjdG9yKSBv
dmVycmlkZQorICAgIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRp
b25Gb3JSZW1vdGVJbnNwZWN0b3IoUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSYgaW5zcGVjdG9y
KSBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFQSTo6SW5zcGVj
dG9yQ29uZmlndXJhdGlvbiY+KFttX2NvbnRyb2xsZXIuY29uZmlndXJhdGlvbiBfYXBpT2JqZWN0
XSk7CiAgICAgfQpAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKIEBpbXBsZW1lbnRhdGlvbiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6X1dLUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlDbGllbnQ+IG1fcmVtb3RlSW5zcGVjdG9yQ2xpZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJLaXQ6Ol9XS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQ+IG1fcmVtb3RlSW5zcGVj
dG9yQ2xpZW50OwogICAgIF9XS0luc3BlY3RvckNvbmZpZ3VyYXRpb24gKl9jb25maWd1cmF0aW9u
OwogfQogCkBAIC05OCw4ICs5OCw4IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbmZpZ3Vy
YXRpb246KF9XS0luc3BlY3RvckNvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uCiAKICAgICBf
Y29uZmlndXJhdGlvbiA9IFtjb25maWd1cmF0aW9uIGNvcHldOwogCi0gICAgbV9yZW1vdGVJbnNw
ZWN0b3JQcm94eSA9IFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpOwot
ICAgIG1fcmVtb3RlSW5zcGVjdG9yQ2xpZW50ID0gbWFrZVVuaXF1ZTxXZWJLaXQ6Ol9XS1JlbW90
ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50PihzZWxmKTsKKyAgICBtX3JlbW90ZUluc3BlY3RvclBy
b3h5ID0gV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpjcmVhdGUoKTsKKyAgICBt
X3JlbW90ZUluc3BlY3RvckNsaWVudCA9IG1ha2VVbmlxdWU8V2ViS2l0OjpfV0tSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5Q2xpZW50PihzZWxmKTsKICAgICBtX3JlbW90ZUluc3BlY3RvclByb3h5
LT5zZXRDbGllbnQobV9yZW1vdGVJbnNwZWN0b3JDbGllbnQuZ2V0KCkpOwogCiAgICAgcmV0dXJu
IHNlbGY7CkBAIC0xMzUsNyArMTM1LDcgQEAgLSAodm9pZClzZW5kTWVzc2FnZVRvRnJvbnRlbmQ6
KE5TU3RyaW5nICopbWVzc2FnZQogICAgIG1fcmVtb3RlSW5zcGVjdG9yUHJveHktPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChtZXNzYWdlKTsKIH0KIAotLy8gTUFSSzogUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlDbGllbnQgbWV0aG9kcworLy8gTUFSSzogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNs
aWVudCBtZXRob2RzCiAKIC0gKHZvaWQpc2VuZE1lc3NhZ2VUb0JhY2tlbmQ6KE5TU3RyaW5nICop
bWVzc2FnZQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVySW50ZXJuYWwuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJv
bGxlckludGVybmFsLmgKaW5kZXggMDY2NWY3ZTYyZTUxZmJlOWZmNTE0ZDljMmJmMWI5MjM3YjNh
MGFmMy4uOWVlYzU5NDU0YjAxYWU0MjJjOWMxNGE5NmE1ODlmNDE3OTZkZmQxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1JlbW90ZVdlYkluc3BlY3Rv
clZpZXdDb250cm9sbGVySW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnRlcm5hbC5oCkBA
IC0yOCwxNCArMjgsMTQgQEAKICNpZiAhVEFSR0VUX09TX0lQSE9ORQogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKLWNsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OworY2xhc3MgUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eTsKIH0KIAogTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAogQGludGVyZmFj
ZSBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAoKSB7CiBAcGFja2FnZQotICAg
IFJlZlB0cjxXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBtX3JlbW90ZUluc3BlY3Rv
clByb3h5OworICAgIFJlZlB0cjxXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk+IG1f
cmVtb3RlSW5zcGVjdG9yUHJveHk7CiB9CiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViSW5zcGVjdG9yLmNwcAppbmRleCA4MGQyMGFh
NzYwM2JhZGFiOTAwZmU0YmQxNTkwYWFkMzliMzBlMmZmLi5mNDM4MGExN2Y3NGNjOGEyZTgwYTAx
YzYyZmIwYjRlNzlhMzJkMWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNwZWN0b3IuY3BwCkBAIC0yMCw4ICsyMCw4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViSW5zcGVjdG9yLmgiCiAKLSNpbmNs
dWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xp
ZW50LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgorI2luY2x1ZGUgIldlYklu
c3BlY3RvclVJUHJveHlDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJJbnNwZWN0b3JQcml2
YXRlLmgiCiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9H
UmVmUHRyLmg+CkBAIC04Myw3ICs4Myw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViSW5zcGVjdG9yUHJp
dmF0ZSB7CiAgICAgICAgIHdlYkluc3BlY3Rvci0+c2V0Q2xpZW50KG51bGxwdHIpOwogICAgIH0K
IAotICAgIFJlZlB0cjxXZWJJbnNwZWN0b3JQcm94eT4gd2ViSW5zcGVjdG9yOworICAgIFJlZlB0
cjxXZWJJbnNwZWN0b3JVSVByb3h5PiB3ZWJJbnNwZWN0b3I7CiAgICAgQ1N0cmluZyBpbnNwZWN0
ZWRVUkk7CiAgICAgdW5zaWduZWQgYXR0YWNoZWRIZWlnaHQ7CiAgICAgYm9vbCBjYW5BdHRhY2g7
CkBAIC0yODMsNyArMjgzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xh
c3NfaW5pdChXZWJLaXRXZWJJbnNwZWN0b3JDbGFzcyogZmluZENsYXNzKQogICAgICAgICBHX1RZ
UEVfQk9PTEVBTiwgMCk7CiB9CiAKLWNsYXNzIFdlYktpdEluc3BlY3RvckNsaWVudCBmaW5hbCA6
IHB1YmxpYyBXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7CitjbGFzcyBXZWJLaXRJbnNwZWN0b3JD
bGllbnQgZmluYWwgOiBwdWJsaWMgV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgV2ViS2l0SW5zcGVj
dG9yQ2xpZW50KFdlYktpdFdlYkluc3BlY3RvciogaW5zcGVjdG9yKQpAQCAtMjkyLDI2ICsyOTIs
MjYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIG9wZW5XaW5kb3coV2Vi
SW5zcGVjdG9yUHJveHkmKSBvdmVycmlkZQorICAgIGJvb2wgb3BlbldpbmRvdyhXZWJJbnNwZWN0
b3JVSVByb3h5Jikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGdib29sZWFuIHJldHVyblZhbHVl
OwogICAgICAgICBnX3NpZ25hbF9lbWl0KG1faW5zcGVjdG9yLCBzaWduYWxzW09QRU5fV0lORE9X
XSwgMCwgJnJldHVyblZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0K
IAotICAgIHZvaWQgZGlkQ2xvc2UoV2ViSW5zcGVjdG9yUHJveHkmKSBvdmVycmlkZQorICAgIHZv
aWQgZGlkQ2xvc2UoV2ViSW5zcGVjdG9yVUlQcm94eSYpIG92ZXJyaWRlCiAgICAgewogICAgICAg
ICBnX3NpZ25hbF9lbWl0KG1faW5zcGVjdG9yLCBzaWduYWxzW0NMT1NFRF0sIDApOwogICAgIH0K
IAotICAgIGJvb2wgYnJpbmdUb0Zyb250KFdlYkluc3BlY3RvclByb3h5Jikgb3ZlcnJpZGUKKyAg
ICBib29sIGJyaW5nVG9Gcm9udChXZWJJbnNwZWN0b3JVSVByb3h5Jikgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIGdib29sZWFuIHJldHVyblZhbHVlOwogICAgICAgICBnX3NpZ25hbF9lbWl0KG1f
aW5zcGVjdG9yLCBzaWduYWxzW0JSSU5HX1RPX0ZST05UXSwgMCwgJnJldHVyblZhbHVlKTsKICAg
ICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgIH0KIAotICAgIHZvaWQgaW5zcGVjdGVkVVJM
Q2hhbmdlZChXZWJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZQor
ICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChXZWJJbnNwZWN0b3JVSVByb3h5JiwgY29uc3Qg
U3RyaW5nJiB1cmwpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBDU3RyaW5nIHVyaSA9IHVybC51
dGY4KCk7CiAgICAgICAgIGlmICh1cmkgPT0gbV9pbnNwZWN0b3ItPnByaXYtPmluc3BlY3RlZFVS
SSkKQEAgLTMyMCwyMSArMzIwLDIxIEBAIHByaXZhdGU6CiAgICAgICAgIGdfb2JqZWN0X25vdGlm
eShHX09CSkVDVChtX2luc3BlY3RvciksICJpbnNwZWN0ZWQtdXJpIik7CiAgICAgfQogCi0gICAg
Ym9vbCBhdHRhY2goV2ViSW5zcGVjdG9yUHJveHkmKSBvdmVycmlkZQorICAgIGJvb2wgYXR0YWNo
KFdlYkluc3BlY3RvclVJUHJveHkmKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgZ2Jvb2xlYW4g
cmV0dXJuVmFsdWU7CiAgICAgICAgIGdfc2lnbmFsX2VtaXQobV9pbnNwZWN0b3IsIHNpZ25hbHNb
QVRUQUNIXSwgMCwgJnJldHVyblZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwog
ICAgIH0KIAotICAgIGJvb2wgZGV0YWNoKFdlYkluc3BlY3RvclByb3h5Jikgb3ZlcnJpZGUKKyAg
ICBib29sIGRldGFjaChXZWJJbnNwZWN0b3JVSVByb3h5Jikgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIGdib29sZWFuIHJldHVyblZhbHVlOwogICAgICAgICBnX3NpZ25hbF9lbWl0KG1faW5zcGVj
dG9yLCBzaWduYWxzW0RFVEFDSF0sIDAsICZyZXR1cm5WYWx1ZSk7CiAgICAgICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKICAgICB9CiAKLSAgICB2b2lkIGRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0KFdl
Ykluc3BlY3RvclByb3h5JiwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlkZQorICAgIHZvaWQgZGlk
Q2hhbmdlQXR0YWNoZWRIZWlnaHQoV2ViSW5zcGVjdG9yVUlQcm94eSYsIHVuc2lnbmVkIGhlaWdo
dCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChtX2luc3BlY3Rvci0+cHJpdi0+YXR0YWNo
ZWRIZWlnaHQgPT0gaGVpZ2h0KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzQyLDExICszNDIs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKG1faW5zcGVj
dG9yKSwgImF0dGFjaGVkLWhlaWdodCIpOwogICAgIH0KIAotICAgIHZvaWQgZGlkQ2hhbmdlQXR0
YWNoZWRXaWR0aChXZWJJbnNwZWN0b3JQcm94eSYsIHVuc2lnbmVkIHdpZHRoKSBvdmVycmlkZQor
ICAgIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aChXZWJJbnNwZWN0b3JVSVByb3h5JiwgdW5z
aWduZWQgd2lkdGgpIG92ZXJyaWRlCiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZGlkQ2hhbmdl
QXR0YWNoQXZhaWxhYmlsaXR5KFdlYkluc3BlY3RvclByb3h5JiwgYm9vbCBhdmFpbGFibGUpIG92
ZXJyaWRlCisgICAgdm9pZCBkaWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoV2ViSW5zcGVjdG9y
VUlQcm94eSYsIGJvb2wgYXZhaWxhYmxlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKG1f
aW5zcGVjdG9yLT5wcml2LT5jYW5BdHRhY2ggPT0gYXZhaWxhYmxlKQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMzU3LDcgKzM1Nyw3IEBAIHByaXZhdGU6CiAgICAgV2ViS2l0V2ViSW5zcGVjdG9y
KiBtX2luc3BlY3RvcjsKIH07CiAKLVdlYktpdFdlYkluc3BlY3Rvciogd2Via2l0V2ViSW5zcGVj
dG9yQ3JlYXRlKFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3IpCitXZWJLaXRXZWJJbnNw
ZWN0b3IqIHdlYmtpdFdlYkluc3BlY3RvckNyZWF0ZShXZWJJbnNwZWN0b3JVSVByb3h5KiB3ZWJJ
bnNwZWN0b3IpCiB7CiAgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBpbnNwZWN0b3IgPSBXRUJLSVRf
V0VCX0lOU1BFQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0lOU1BFQ1RPUiwgTlVM
TCkpOwogICAgIGluc3BlY3Rvci0+cHJpdi0+d2ViSW5zcGVjdG9yID0gd2ViSW5zcGVjdG9yOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNw
ZWN0b3JQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
Ykluc3BlY3RvclByaXZhdGUuaAppbmRleCBiYjVkYmIzY2I5MGY5YjBiYjg2NTJlYmVjOWVmY2Qw
YzM5MDk4MjQyLi5lYzdjZmFkYzFiMjUyZjk2NmMyZGFmYjc2MjIyM2ZkM2QwZGEzMmU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rv
clByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
Ykluc3BlY3RvclByaXZhdGUuaApAQCAtMjEsNCArMjEsNCBAQAogCiAjaW5jbHVkZSAiV2ViS2l0
V2ViSW5zcGVjdG9yLmgiCiAKLVdlYktpdFdlYkluc3BlY3Rvciogd2Via2l0V2ViSW5zcGVjdG9y
Q3JlYXRlKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqKTsKK1dlYktpdFdlYkluc3BlY3Rvciog
d2Via2l0V2ViSW5zcGVjdG9yQ3JlYXRlKFdlYktpdDo6V2ViSW5zcGVjdG9yVUlQcm94eSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlLmNwcAppbmRleCBkZDBlYjZhYjA4OTVhOTI2NWNkMjI3ZWE3Y2Q4NDU4ZTdkYzFiZGYzLi42
MGUyMzhiMzdmMWRlMDliY2UxZmQ5NTQxYTU5ZTFmMjg5MGRjZTExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAt
NDMsNyArNDMsNyBAQAogI2luY2x1ZGUgIlBvaW50ZXJMb2NrTWFuYWdlci5oIgogI2luY2x1ZGUg
IlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeS5oIgot
I2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQ
cm94eS5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiV2ViS2l0
RW1vamlDaG9vc2VyLmgiCiAjaW5jbHVkZSAiV2ViS2l0SW5pdGlhbGl6ZS5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlLmgKaW5kZXggZDA5YWVhNDVkOTRmYjczNjdiYTg4ZmRmODMyNmRlYTEyMDlkMDJjZS4u
MGI0MzhkYWE0NDFlMGM5YjY1ZTZlYzA0Y2M0Y2I3MDVmODQ0M2MwOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZS5oCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiVmlld1NuYXBzaG90U3RvcmUuaCIK
ICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5R3RrLmgiCiAjaW5jbHVkZSAiV2ViSGl0VGVz
dFJlc3VsdERhdGEuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUg
IldlYkluc3BlY3RvclVJUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRJbnB1dE1ldGhvZENvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCA2OTdjMzQyNzJmNGEzZWIwOWM4NWJk
MWQ3OTI5Njk4NWYxMDViNWQ0Li41NjFiOTMxZGQ1NzYzYzJhYjg3MzZiMmZmMGI3ZjI2ZmM5OGIz
YTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUg
IldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvb2tp
ZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIK
LSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJ
UHJveHkuaCIKICNpbmNsdWRlICJXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9t
YXRpb25TZXNzaW9uTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9t
YWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KaW5kZXggNjRjZTk3MmZjYjgxZmM2NWMxOGM1
NjZjOTU2MmQ4OTJkN2E1NTVjMy4uNzhhZGZjNjBkMDJjMTU4NzgxYzFiY2FjMjc4NTBjZjlkMTFj
ZTI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMv
V2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KQEAgLTMwLDcgKzMwLDcg
QEAKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiV2ViQXV0b21hdGlvblNlc3Npb25N
YWNyb3MuaCIKLSNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW1wb3J0ICJXZWJJbnNw
ZWN0b3JVSVByb3h5LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgIl9XS0F1
dG9tYXRpb25TZXNzaW9uLmgiCiAjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmgKaW5kZXggNzJhNDVhNGM5NzVlMzZiN2Vl
ZDAwZDRjOWRlODU0MDM4YjI4M2Y1Mi4uZDQ3MGQyMjUyMTljOGViNjBjNWQzYTU3ZTA4YjgyYjY0
NDMxYWU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxl
Z2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaApA
QCAtMTI1LDkgKzEyNSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgcnVuT3BlblBhbmVsKFdl
YlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkqLCBGcmFtZUluZm9EYXRhJiYsIEFQSTo6T3BlblBh
bmVsUGFyYW1ldGVycyosIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqKSBmaW5hbDsK
ICAgICAgICAgdm9pZCBkaWRFeGNlZWRCYWNrZ3JvdW5kUmVzb3VyY2VMaW1pdFdoaWxlSW5Gb3Jl
Z3JvdW5kKFdlYlBhZ2VQcm94eSYsIFdLUmVzb3VyY2VMaW1pdCkgZmluYWw7CiAgICAgICAgIHZv
aWQgc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihXZWJQYWdlUHJveHkqLCBjb25zdCBX
VEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgVVJMJiwgQVBJOjpEYXRhJikg
ZmluYWw7Ci0gICAgICAgIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3Vy
YXRpb25Gb3JMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0b3JQcm94eSYp
IGZpbmFsOwotICAgICAgICB2b2lkIGRpZEF0dGFjaExvY2FsSW5zcGVjdG9yKFdlYlBhZ2VQcm94
eSYsIFdlYkluc3BlY3RvclByb3h5JikgZmluYWw7Ci0gICAgICAgIHZvaWQgd2lsbENsb3NlTG9j
YWxJbnNwZWN0b3IoV2ViUGFnZVByb3h5JiwgV2ViSW5zcGVjdG9yUHJveHkmKSBmaW5hbDsKKyAg
ICAgICAgUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbkZvckxv
Y2FsSW5zcGVjdG9yKFdlYlBhZ2VQcm94eSYsIFdlYkluc3BlY3RvclVJUHJveHkmKSBmaW5hbDsK
KyAgICAgICAgdm9pZCBkaWRBdHRhY2hMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJ
bnNwZWN0b3JVSVByb3h5JikgZmluYWw7CisgICAgICAgIHZvaWQgd2lsbENsb3NlTG9jYWxJbnNw
ZWN0b3IoV2ViUGFnZVByb3h5JiwgV2ViSW5zcGVjdG9yVUlQcm94eSYpIGZpbmFsOwogI2VuZGlm
CiAjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKICAgICAgICAgdm9pZCBzaG91bGRBbGxv
d0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKFdlYktpdDo6V2ViUGFnZVByb3h5Jiwg
V2ViRnJhbWVQcm94eSYsIEZyYW1lSW5mb0RhdGEmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJikgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9VSURlbGVnYXRlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0
ZS5tbQppbmRleCBjOGFiZWQ2MTQ1YTk4MmE4NjExNzY0OTE0NTdmYWY0OGFhNWZlODQ4Li4zODZi
YjI3ZWRlZDk0M2VhMDllNDNiYzJhYmRiYmUwYjgwMDA0ZGNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0KQEAgLTk1Niw3ICs5NTYsNyBAQCB2b2lkIFVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9u
UmVxdWVzdChXZWJLaXQ6OgogICAgIH0pLmdldCgpXTsKIH0KIAotUmVmPEFQSTo6SW5zcGVjdG9y
Q29uZmlndXJhdGlvbj4gVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNvbmZpZ3VyYXRpb25Gb3JMb2Nh
bEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0b3JQcm94eSYgaW5zcGVjdG9yKQor
UmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNv
bmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0b3JV
SVByb3h5JiBpbnNwZWN0b3IpCiB7CiAgICAgaWYgKCFtX3VpRGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybiBBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwpAQCAtOTcxLDcgKzk3
MSw3IEBAIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IFVJRGVsZWdhdGU6OlVJQ2xp
ZW50Ojpjb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFQ
STo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbiY+KFtbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilk
ZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBjb25m
aWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3I6d3JhcHBlcihpbnNwZWN0b3IpXSBfYXBpT2JqZWN0
XSk7CiB9CiAKLXZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZEF0dGFjaExvY2FsSW5zcGVj
dG9yKFdlYlBhZ2VQcm94eSYsIFdlYkluc3BlY3RvclByb3h5JiBpbnNwZWN0b3IpCit2b2lkIFVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRBdHRhY2hMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkm
LCBXZWJJbnNwZWN0b3JVSVByb3h5JiBpbnNwZWN0b3IpCiB7CiAgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCiAgICAgICAgIHJldHVybjsKQEAgLTk4Niw3ICs5ODYsNyBAQCB2b2lkIFVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpkaWRBdHRhY2hMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNw
ZWN0b3JQcgogICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3
Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZEF0dGFjaExvY2FsSW5zcGVj
dG9yOndyYXBwZXIoaW5zcGVjdG9yKV07CiB9CiAKLXZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OndpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKFdlYlBhZ2VQcm94eSYsIFdlYkluc3BlY3RvclByb3h5
JiBpbnNwZWN0b3IpCit2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp3aWxsQ2xvc2VMb2NhbElu
c3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0b3JVSVByb3h5JiBpbnNwZWN0b3IpCiB7
CiAgICAgaWYgKCFtX3VpRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KaW5kZXggNjMzM2U3ZmI1YzMzNGJlZmFm
ZjQxZjQwMzYxOTMyMzczN2YzYjBhZS4uNmQzZDEyOWQ1OGM2OTUwODUyMWZhZTI5NWIzNGFhNWJm
NTFhOTBlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmll
d0ltcGwubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwu
bW0KQEAgLTc0LDcgKzc0LDcgQEAKICNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2lt
cG9ydCAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgogI2ltcG9ydCAiV2ViRXZlbnRGYWN0b3J5Lmgi
Ci0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlQ
cm94eS5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUG9v
bC5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dz
ZXJBZ2VudC5jcHAKaW5kZXggZGJkNjM4MjU0NWExNDlmMzlkN2EyNjRlYWZlNDRjMzkzYzc2ZGQy
MS4uZmY2ODBiNTFkYWM2ODZkMzg3OWJlZWY3ZTUwMzg4NGFmMmZiZWE2MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2Vy
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMv
SW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIklu
c3BlY3RvckJyb3dzZXJBZ2VudC5oIgogCiAjaW5jbHVkZSAiQVBJVUlDbGllbnQuaCIKLSNpbmNs
dWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHku
aCIKICNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29s
T2JqZWN0cy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L0NvY29hL0luc3BlY3RvckRlbGVnYXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvQ29jb2EvSW5zcGVjdG9yRGVsZWdhdGUuaAppbmRleCBlMWZhZWU2OTU0NDlhZDliODQy
MjZjMzljNmM0ZmZhODgwMjE5MGY5Li44MGQ3NGU3NWMyYWYyMmY5M2MwOWRmNjU1YTUxMjgyZDQ1
MjlhNDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQ29j
b2EvSW5zcGVjdG9yRGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvQ29jb2EvSW5zcGVjdG9yRGVsZWdhdGUuaApAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHk7CitjbGFzcyBXZWJJbnNw
ZWN0b3JVSVByb3h5OwogCiBjbGFzcyBJbnNwZWN0b3JEZWxlZ2F0ZSB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAKICAgICBwcml2YXRl
OgogICAgICAgICAvLyBBUEk6Okluc3BlY3RvckNsaWVudAotICAgICAgICB2b2lkIG9wZW5VUkxF
eHRlcm5hbGx5KFdlYkluc3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiB1cmwpOworICAgICAg
ICB2b2lkIG9wZW5VUkxFeHRlcm5hbGx5KFdlYkluc3BlY3RvclVJUHJveHkmLCBjb25zdCBTdHJp
bmcmIHVybCk7CiAKICAgICAgICAgSW5zcGVjdG9yRGVsZWdhdGUmIG1faW5zcGVjdG9yRGVsZWdh
dGU7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9Db2NvYS9JbnNwZWN0b3JEZWxlZ2F0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9Db2NvYS9JbnNwZWN0b3JEZWxlZ2F0ZS5tbQppbmRleCBhMmU4Mzc4MmM2NjcwOTZj
ODY0Njk3NWMzM2U0ZGRkYTViMTU1Zjk1Li5jMmI4ZTBjOWJmMjNlNmIwY2FkZGUxOThjNGUwMTFj
MDY0NjQ0NWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
Q29jb2EvSW5zcGVjdG9yRGVsZWdhdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL0NvY29hL0luc3BlY3RvckRlbGVnYXRlLm1tCkBAIC0yNiw3ICsyNiw3IEBACiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkluc3BlY3RvckRlbGVnYXRlLmgiCiAKLSNpbXBv
cnQgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSVByb3h5Lmgi
CiAjaW1wb3J0ICJfV0tJbnNwZWN0b3JEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiX1dLSW5zcGVjdG9y
SW50ZXJuYWwuaCIKIApAQCAtNTcsNyArNTcsNyBAQCBJbnNwZWN0b3JEZWxlZ2F0ZTo6SW5zcGVj
dG9yQ2xpZW50Ojp+SW5zcGVjdG9yQ2xpZW50KCkKIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWxl
Z2F0ZTo6SW5zcGVjdG9yQ2xpZW50OjpvcGVuVVJMRXh0ZXJuYWxseShXZWJJbnNwZWN0b3JQcm94
eSYsIGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBJbnNwZWN0b3JEZWxlZ2F0ZTo6SW5zcGVjdG9y
Q2xpZW50OjpvcGVuVVJMRXh0ZXJuYWxseShXZWJJbnNwZWN0b3JVSVByb3h5JiwgY29uc3QgU3Ry
aW5nJiB1cmwpCiB7CiAgICAgaWYgKCFtX2luc3BlY3RvckRlbGVnYXRlLm1fZGVsZWdhdGVNZXRo
b2RzLmluc3BlY3Rvck9wZW5VUkxFeHRlcm5hbGx5KQogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQ29jb2EvSW5zcGVjdG9yRXh0
ZW5zaW9uRGVsZWdhdGUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQ29j
b2EvSW5zcGVjdG9yRXh0ZW5zaW9uRGVsZWdhdGUubW0KaW5kZXggZjdmMzcyZjk4Y2UzMWQwYjI5
ZDBhNTljZDYyZmFkMDMwZmI0NDBlNC4uN2UwZmI5OGI2ZjNlZmE2ZWM4OWM5NGY5OGY0N2VlNDI3
ODRjYTI0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0Nv
Y29hL0luc3BlY3RvckV4dGVuc2lvbkRlbGVnYXRlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9Db2NvYS9JbnNwZWN0b3JFeHRlbnNpb25EZWxlZ2F0ZS5tbQpAQCAt
MjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQogCi0jaW1w
b3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlQcm94eS5o
IgogI2ltcG9ydCAiX1dLSW5zcGVjdG9yRXh0ZW5zaW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIl9X
S0luc3BlY3RvckV4dGVuc2lvbkludGVybmFsLmgiCiAjaW1wb3J0IDx3dGYvVW5pcXVlUmVmLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MmJkYTZmNzczZDIyYWE0MTEyOGQ2Zjk5NzAxNWU2MzVlMDJlZGIzNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MjM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaW5jbHVkZSAiQVBJRGVidWdnYWJs
ZUluZm8uaCIKLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJ
TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgIldl
YlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5o
PgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQotI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KCkKLSAgICA6IG1fZGVidWdnYWJsZUluZm8oQVBJ
OjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSkpCi17
Ci19Ci0KLVJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojp+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHko
KQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdlKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0RGlhZ25vc3Rp
Y0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RP
Ul9URUxFTUVUUlkpCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6U2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYXZhaWxhYmxlKSk7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhdmFpbGFibGUpOwotI2VuZGlmCi19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmxvYWQoUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+JiYg
ZGVidWdnYWJsZUluZm8sIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKQotewotICAg
IG1fZGVidWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKLSAgICBtX2JhY2tl
bmRDb21tYW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKLQotICAgIGNyZWF0ZUZyb250ZW5k
UGFnZUFuZFdpbmRvdygpOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6SW5pdGlhbGl6ZShtX2RlYnVnZ2FibGVJbmZvLT5kZWJ1Z2dh
YmxlSW5mb0RhdGEoKSwgYmFja2VuZENvbW1hbmRzVVJMKSk7Ci0gICAgbV9pbnNwZWN0b3JQYWdl
LT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdl
VVJMKCkpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9tQmFj
a2VuZCgpCi17Ci0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9tQ3Jhc2goKQotewotICAgIC8vIEJlaGF2
ZSBhcyBpZiB0aGUgZnJvbnRlbmQganVzdCBjbG9zZWQsIHNvIGNsaWVudHMgYXJlIGluZm9ybWVk
IHRoZSBmcm9udGVuZCBpcyBnb25lLgotICAgIGZyb250ZW5kRGlkQ2xvc2UoKTsKLX0KLQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2hvdygpCi17Ci0gICAgYnJpbmdUb0Zyb250KCk7
Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3Nh
Z2UpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6ZnJvbnRlbmRMb2FkZWQo
KQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKLSAgICBtX2V4dGVuc2lvbkNv
bnRyb2xsZXItPmluc3BlY3RvckZyb250ZW5kTG9hZGVkKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6ZnJvbnRlbmREaWRDbG9zZSgpCi17Ci0gICAgUmVmPFJl
bW90ZVdlYkluc3BlY3RvclByb3h5PiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIGlmIChtX2NsaWVu
dCkKLSAgICAgICAgbV9jbGllbnQtPmNsb3NlRnJvbUZyb250ZW5kKCk7Ci0KLSAgICBjbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpyZW9wZW4oKQotewotICAgIEFTU0VSVCghbV9iYWNrZW5kQ29tbWFuZHNVUkwuaXNFbXB0eSgp
KTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgbG9hZChtX2RlYnVn
Z2FibGVJbmZvLmNvcHlSZWYoKSwgbV9iYWNrZW5kQ29tbWFuZHNVUkwpOwotfQotCi12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpyZXNldFN0YXRlKCkKLXsKLSAgICBwbGF0Zm9ybVJlc2V0
U3RhdGUoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdUb0Zyb250
KCkKLXsKLSAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCi17
Ci0gICAgcGxhdGZvcm1TYXZlKHN1Z2dlc3RlZFVSTCwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwg
Zm9yY2VTYXZlRGlhbG9nKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6YXBw
ZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17
Ci0gICAgcGxhdGZvcm1BcHBlbmQoc3VnZ2VzdGVkVVJMLCBjb250ZW50KTsKLX0KLQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICBwbGF0Zm9ybVNldFNoZWV0UmVjdChyZWN0KTsKLX0KLQotdm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6c2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6QXBwZWFyYW5jZSBhcHBlYXJhbmNlKQotewotICAgIHBsYXRmb3JtU2V0Rm9yY2VkQXBw
ZWFyYW5jZShhcHBlYXJhbmNlKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
c3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOwotfQot
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpvcGVuVVJMRXh0ZXJuYWxseShjb25zdCBT
dHJpbmcmIHVybCkKLXsKLSAgICBwbGF0Zm9ybU9wZW5VUkxFeHRlcm5hbGx5KHVybCk7Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0
aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBwbGF0Zm9ybVNob3dDZXJ0aWZp
Y2F0ZShjZXJ0aWZpY2F0ZUluZm8pOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYg
KG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2Fn
ZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFn
ZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKTsKLQotICAgIHRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG51bGxw
dHIpOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0VYVEVOU0lPTlMpCi0gICAgbV9leHRlbnNpb25Db250cm9sbGVyID0gV2ViSW5zcGVj
dG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHk6OmNyZWF0ZSgqbV9pbnNwZWN0b3JQYWdlKTsK
LSNlbmRpZgotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5k
UGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Ci0KLSAgICB1bnRyYWNrSW5zcGVj
dG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJ
T05TKQotICAgIC8vIFRoaXMgZXh0ZW5zaW9uIGNvbnRyb2xsZXIgbWF5IGJlIGtlcHQgYWxpdmUg
YnkgdGhlIElQQyBkaXNwYXRjaGVyIGJleW9uZCB0aGUgcG9pbnQKLSAgICAvLyB3aGVuIG1faW5z
cGVjdG9yUGFnZSBpcyBjbGVhcmVkIGJlbG93LiBOb3RpZnkgdGhlIGNvbnRyb2xsZXIgc28gaXQg
Y2FuIGNsZWFuIHVwIGJlZm9yZSB0aGVuLgotICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlci0+aW5z
cGVjdG9yRnJvbnRlbmRXaWxsQ2xvc2UoKTsKLSAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXIgPSBu
dWxscHRyOwotI2VuZGlmCi0KLSAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRyOwotCi0gICAg
cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi0jaWYgIUVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYg
IVBMQVRGT1JNKFdJTikpCi1XZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJv
b2wpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmKSB7IH0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmKSB7IH0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNv
bnN0IENlcnRpZmljYXRlSW5mbyYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpIHsgfQotI2VuZGlmIC8vICFFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikgfHwgKCFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEsp
ICYmICFQTEFURk9STShXSU4pKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0Mzg5ODRhNjUzNzJlNDdi
MTI5OWY1NGM2NmU0ZWQ1Nzk3NzQzZDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdl
Ykluc3BlY3RvclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNs
dWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZP
Uk0oTUFDKQotT0JKQ19DTEFTUyBOU1VSTDsKLU9CSkNfQ0xBU1MgTlNXaW5kb3c7Ci1PQkpDX0NM
QVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci1PQkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlPYmpDQWRhcHRlcjsKLU9CSkNfQ0xBU1MgV0tXZWJWaWV3OwotI2VuZGlmCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENlcnRpZmljYXRlSW5mbzsKLX0KLQotbmFtZXNw
YWNlIEFQSSB7Ci1jbGFzcyBEZWJ1Z2dhYmxlSW5mbzsKLWNsYXNzIEluc3BlY3RvckNvbmZpZ3Vy
YXRpb247Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTsKLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlZpZXc7Ci0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9FWFRFTlNJT05TKQotY2xhc3MgV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250
cm9sbGVyUHJveHk7Ci0jZW5kaWYKLQotY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGll
bnQgewotcHVibGljOgotICAgIHZpcnR1YWwgflJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpID0g
MDsKLSAgICB2aXJ0dWFsIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3Vy
YXRpb25Gb3JSZW1vdGVJbnNwZWN0b3IoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci19
OwotCi1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFJl
bW90ZVdlYkluc3BlY3RvclByb3h5PiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBjcmVhdGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkoKSk7Ci0gICAgfQotCi0gICAgflJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7Ci0KLSAgICB2
b2lkIHNldENsaWVudChSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogY2xpZW50KSB7IG1f
Y2xpZW50ID0gY2xpZW50OyB9Ci0KLSAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9v
bCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIHZvaWQgbG9hZChSZWY8QVBJOjpE
ZWJ1Z2dhYmxlSW5mbz4mJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpOwotICAg
IHZvaWQgY2xvc2VGcm9tQmFja2VuZCgpOwotICAgIHZvaWQgc2hvdygpOwotCi0gICAgdm9pZCBz
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfRVhURU5TSU9OUykKLSAgICBXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRy
b2xsZXJQcm94eSogZXh0ZW5zaW9uQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW5z
aW9uQ29udHJvbGxlci5nZXQoKTsgfQotI2VuZGlmCi0gICAgCi0jaWYgUExBVEZPUk0oTUFDKQot
ICAgIE5TV2luZG93ICp3aW5kb3coKSBjb25zdCB7IHJldHVybiBtX3dpbmRvdy5nZXQoKTsgfQot
ICAgIFdLV2ViVmlldyAqd2ViVmlldygpIGNvbnN0OwotCi0gICAgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBzaGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVjdDsgfQotCi0gICAg
dm9pZCBkaWRCZWNvbWVBY3RpdmUoKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oR1RLKQotICAg
IHZvaWQgdXBkYXRlV2luZG93VGl0bGUoY29uc3QgQ1N0cmluZyYpOwotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShXSU5fQ0FJUk8pCi0gICAgTFJFU1VMVCBzaXplQ2hhbmdlKCk7Ci0gICAgTFJFU1VM
VCBvbkNsb3NlKCk7Ci0KLSAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQs
IFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLSNlbmRpZgotCi0gICAgdm9pZCBjbG9zZUZyb21DcmFz
aCgpOwotCi1wcml2YXRlOgotICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7Ci0KLSAgICAv
LyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eSBtZXNzYWdlcy4KLSAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7Ci0gICAg
dm9pZCBmcm9udGVuZERpZENsb3NlKCk7Ci0gICAgdm9pZCByZW9wZW4oKTsKLSAgICB2b2lkIHJl
c2V0U3RhdGUoKTsKLSAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOwotICAgIHZvaWQgc2F2ZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKLSAgICB2b2lkIHNldFNoZWV0UmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZvcmNlZEFwcGVhcmFuY2Uo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UpOwotICAgIHZvaWQg
c3RhcnRXaW5kb3dEcmFnKCk7Ci0gICAgdm9pZCBvcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJp
bmcmIHVybCk7Ci0gICAgdm9pZCBzaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvJik7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwotCi0gICAgdm9pZCBjcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAg
ICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0KLSAgICAvLyBQbGF0Zm9ybSBp
bXBsZW1lbnRhdGlvbnMuCi0gICAgV2ViUGFnZVByb3h5KiBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5k
UGFnZUFuZFdpbmRvdygpOwotICAgIHZvaWQgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpOwotICAgIHZvaWQgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci0gICAgdm9pZCBwbGF0Zm9y
bUJyaW5nVG9Gcm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZv
cmNlU2F2ZUFzKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGNvbnN0IFN0cmluZyYgY29udGVudCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNldFNoZWV0UmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0Rm9yY2Vk
QXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSk7
Ci0gICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOwotICAgIHZvaWQgcGxhdGZvcm1P
cGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKLQotICAgIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KiBtX2NsaWVudCB7IG51bGxwdHIgfTsKLSAgICBX
ZWJQYWdlUHJveHkqIG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfRVhURU5TSU9OUykKLSAgICBSZWZQdHI8V2ViSW5zcGVjdG9yVUlFeHRlbnNpb25D
b250cm9sbGVyUHJveHk+IG1fZXh0ZW5zaW9uQ29udHJvbGxlcjsKLSNlbmRpZgotICAgIAotICAg
IFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiBtX2RlYnVnZ2FibGVJbmZvOwotICAgIFN0cmluZyBt
X2JhY2tlbmRDb21tYW5kc1VSTDsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcj4gbV9pbnNwZWN0b3JWaWV3OwotICAgIFJldGFpblB0
cjxOU1dpbmRvdz4gbV93aW5kb3c7Ci0gICAgUmV0YWluUHRyPFdLUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsKLSAgICBIYXNoTWFwPFN0cmluZywgUmV0
YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcDsKLSAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgbV9zaGVldFJlY3Q7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShHVEspCi0gICAgR3Rr
V2lkZ2V0KiBtX3dlYlZpZXcgeyBudWxscHRyIH07Ci0gICAgR3RrV2lkZ2V0KiBtX3dpbmRvdyB7
IG51bGxwdHIgfTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykKLSAgICBIV05EIG1f
ZnJvbnRlbmRIYW5kbGU7Ci0gICAgUmVmUHRyPFdlYlZpZXc+IG1fd2ViVmlldzsKLSNlbmRpZgot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHku
bWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NGJlYzMyNDZkMzg4
OTNkNTUyZTQ2NmI3ZWQ3ZWNkMmUwOGZkZmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAs
MCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
Ci0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3Nh
Z2VzIC0+IFJlbW90ZVdlYkluc3BlY3RvclByb3h5IHsKLSAgICBGcm9udGVuZExvYWRlZCgpCi0g
ICAgRnJvbnRlbmREaWRDbG9zZSgpCi0gICAgUmVvcGVuKCkKLSAgICBSZXNldFN0YXRlKCkKLSAg
ICBCcmluZ1RvRnJvbnQoKQotCi0gICAgU2F2ZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250
ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCi0gICAgQXBwZW5kKFN0
cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQpCi0KLSAgICBTZXRGb3JjZWRBcHBlYXJhbmNl
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlIGFwcGVhcmFuY2Up
Ci0KLSAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0KLSAgICBTdGFy
dFdpbmRvd0RyYWcoKQotCi0gICAgT3BlblVSTEV4dGVybmFsbHkoU3RyaW5nIHVybCkKLSAgICBT
aG93Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykK
LQotICAgIFNlbmRNZXNzYWdlVG9CYWNrZW5kKFN0cmluZyBtZXNzYWdlKQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYklu
c3BlY3RvclVJUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlNmRiMzY0MDY3NTgxYjM3ZDdmZDg2ODYx
ZGQ4N2RlYTM4MmQzNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5jcHAKQEAgLTAsMCArMSwyMzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5LmgiCisKKyNpbmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5mby5o
IgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0
b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgorI2luY2x1ZGUgIldlYlBh
Z2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
Q2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQorI2luY2x1ZGUgIldlYkluc3BlY3Rv
clVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktp
dCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eTo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSgpCisgICAgOiBtX2RlYnVnZ2FibGVJbmZvKEFQ
STo6RGVidWdnYWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpKQor
eworfQorCitSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Ojp+UmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eSgpCit7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvclBhZ2UpOworfQorCit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OmludmFsaWRhdGUoKQoreworICAgIGNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0
RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCit7CisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYXZh
aWxhYmxlKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhdmFpbGFibGUpOworI2VuZGlmCit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6bG9hZChSZWY8QVBJOjpEZWJ1Z2dh
YmxlSW5mbz4mJiBkZWJ1Z2dhYmxlSW5mbywgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNV
UkwpCit7CisgICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOwor
ICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFja2VuZENvbW1hbmRzVVJMOworCisgICAgY3Jl
YXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQo
TWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpJbml0aWFsaXplKG1fZGVidWdnYWJsZUlu
Zm8tPmRlYnVnZ2FibGVJbmZvRGF0YSgpLCBiYWNrZW5kQ29tbWFuZHNVUkwpKTsKKyAgICBtX2lu
c3BlY3RvclBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgV2ViSW5zcGVjdG9yVUlQcm94eTo6
aW5zcGVjdG9yUGFnZVVSTCgpKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eTo6Y2xvc2VGcm9tQmFja2VuZCgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpjbG9zZUZyb21DcmFzaCgp
Cit7CisgICAgLy8gQmVoYXZlIGFzIGlmIHRoZSBmcm9udGVuZCBqdXN0IGNsb3NlZCwgc28gY2xp
ZW50cyBhcmUgaW5mb3JtZWQgdGhlIGZyb250ZW5kIGlzIGdvbmUuCisgICAgZnJvbnRlbmREaWRD
bG9zZSgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnNob3coKQorewor
ICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9p
bnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5Ojpmcm9udGVuZExvYWRlZCgpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJ
T05TKQorICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlci0+aW5zcGVjdG9yRnJvbnRlbmRMb2FkZWQo
KTsKKyNlbmRpZgorfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmZyb250ZW5k
RGlkQ2xvc2UoKQoreworICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5PiBwcm90ZWN0
KCp0aGlzKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmNsb3NlRnJv
bUZyb250ZW5kKCk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnJlb3BlbigpCit7CisgICAgQVNTRVJUKCFt
X2JhY2tlbmRDb21tYW5kc1VSTC5pc0VtcHR5KCkpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKTsKKyAgICBsb2FkKG1fZGVidWdnYWJsZUluZm8uY29weVJlZigpLCBtX2JhY2tl
bmRDb21tYW5kc1VSTCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cmVz
ZXRTdGF0ZSgpCit7CisgICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBwbGF0Zm9ybUJyaW5n
VG9Gcm9udCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnNhdmUoY29u
c3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNl
NjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKK3sKKyAgICBwbGF0Zm9ybVNhdmUoc3Vn
Z2VzdGVkVVJMLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVEaWFsb2cpOworfQor
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmFwcGVuZChjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAgIHBsYXRmb3JtQXBwZW5k
KHN1Z2dlc3RlZFVSTCwgY29udGVudCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eTo6c2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9y
bVNldFNoZWV0UmVjdChyZWN0KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjpzZXRGb3JjZWRBcHBlYXJhbmNlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNl
IGFwcGVhcmFuY2UpCit7CisgICAgcGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKGFwcGVhcmFu
Y2UpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnN0YXJ0V2luZG93RHJh
ZygpCit7CisgICAgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5OjpvcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCkK
K3sKKyAgICBwbGF0Zm9ybU9wZW5VUkxFeHRlcm5hbGx5KHVybCk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5m
byYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNlcnRp
ZmljYXRlSW5mbyk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6c2VuZE1l
c3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOworfQor
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpCit7CisgICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KTsKKworICAgIHRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG51bGxwdHIpOwor
CisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
aW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfRVhURU5TSU9OUykKKyAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXIgPSBXZWJJbnNwZWN0b3JV
SUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eTo6Y3JlYXRlKCptX2luc3BlY3RvclBhZ2UpOworI2Vu
ZGlmCit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6Y2xvc2VGcm9udGVuZFBh
Z2VBbmRXaW5kb3coKQoreworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisKKyAgICB1bnRyYWNrSW5zcGVj
dG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJ
T05TKQorICAgIC8vIFRoaXMgZXh0ZW5zaW9uIGNvbnRyb2xsZXIgbWF5IGJlIGtlcHQgYWxpdmUg
YnkgdGhlIElQQyBkaXNwYXRjaGVyIGJleW9uZCB0aGUgcG9pbnQKKyAgICAvLyB3aGVuIG1faW5z
cGVjdG9yUGFnZSBpcyBjbGVhcmVkIGJlbG93LiBOb3RpZnkgdGhlIGNvbnRyb2xsZXIgc28gaXQg
Y2FuIGNsZWFuIHVwIGJlZm9yZSB0aGVuLgorICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlci0+aW5z
cGVjdG9yRnJvbnRlbmRXaWxsQ2xvc2UoKTsKKyAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXIgPSBu
dWxscHRyOworI2VuZGlmCisKKyAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRyOworCisgICAg
cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCisjaWYgIUVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYg
IVBMQVRGT1JNKFdJTikpCitXZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
Ym9vbCwgYm9vbCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
QXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmKSB7
IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRGb3JjZWRBcHBl
YXJhbmNlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlKSB7IH0KK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShj
b25zdCBTdHJpbmcmKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikgeyB9Cit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KSB7IH0KKyNlbmRpZiAvLyAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8ICghUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSkKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjk0ZjQzMzdj
ZTQ0NzE1YWM2NDA3MjRkOTQxNWM4YjZlZDE3M2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuaApA
QCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorT0JKQ19DTEFTUyBOU1VSTDsKK09CSkNf
Q0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7CitP
QkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyOworT0JKQ19D
TEFTUyBXS1dlYlZpZXc7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2Vy
dGlmaWNhdGVJbmZvOworfQorCituYW1lc3BhY2UgQVBJIHsKK2NsYXNzIERlYnVnZ2FibGVJbmZv
OworY2xhc3MgSW5zcGVjdG9yQ29uZmlndXJhdGlvbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk7CitjbGFzcyBXZWJQYWdlUHJveHk7
CitjbGFzcyBXZWJWaWV3OworI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKK2NsYXNz
IFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5OworI2VuZGlmCisKK2NsYXNz
IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwg
flJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkgPSAwOworICAgIHZpcnR1YWwgUmVmPEFQSTo6
SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbkZvclJlbW90ZUluc3BlY3RvcihS
ZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5JikgPSAwOworfTsKKworY2xhc3MgUmVtb3RlV2ViSW5z
cGVjdG9yVUlQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkoKSk7CisgICAgfQor
CisgICAgflJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkoKTsKKworICAgIHZvaWQgc2V0Q2xpZW50
KFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNs
aWVudDsgfQorCisgICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisKKyAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wpOworCisgICAg
dm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2b2lkIGxvYWQoUmVmPEFQSTo6RGVidWdnYWJsZUlu
Zm8+JiYsIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKTsKKyAgICB2b2lkIGNsb3Nl
RnJvbUJhY2tlbmQoKTsKKyAgICB2b2lkIHNob3coKTsKKworICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0VYVEVOU0lPTlMpCisgICAgV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkq
IGV4dGVuc2lvbkNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX2V4dGVuc2lvbkNvbnRyb2xs
ZXIuZ2V0KCk7IH0KKyNlbmRpZgorICAgIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBOU1dpbmRv
dyAqd2luZG93KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3cuZ2V0KCk7IH0KKyAgICBXS1dlYlZp
ZXcgKndlYlZpZXcoKSBjb25zdDsKKworICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2hl
ZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldFJlY3Q7IH0KKworICAgIHZvaWQgZGlkQmVj
b21lQWN0aXZlKCk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHVwZGF0
ZVdpbmRvd1RpdGxlKGNvbnN0IENTdHJpbmcmKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lO
X0NBSVJPKQorICAgIExSRVNVTFQgc2l6ZUNoYW5nZSgpOworICAgIExSRVNVTFQgb25DbG9zZSgp
OworCisgICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05ELCBVSU5ULCBXUEFS
QU0sIExQQVJBTSk7CisjZW5kaWYKKworICAgIHZvaWQgY2xvc2VGcm9tQ3Jhc2goKTsKKworcHJp
dmF0ZToKKyAgICBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5KCk7CisKKyAgICAvLyBJUEM6Ok1l
c3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5IG1lc3NhZ2VzLgorICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKKyAgICB2b2lkIGZy
b250ZW5kRGlkQ2xvc2UoKTsKKyAgICB2b2lkIHJlb3BlbigpOworICAgIHZvaWQgcmVzZXRTdGF0
ZSgpOworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdm9pZCBzYXZlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBi
b29sIGZvcmNlU2F2ZUFzKTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworICAgIHZvaWQgc2V0U2hlZXRSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgc2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3Jl
OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSk7CisgICAgdm9pZCBzdGFydFdp
bmRvd0RyYWcoKTsKKyAgICB2b2lkIG9wZW5VUkxFeHRlcm5hbGx5KGNvbnN0IFN0cmluZyYgdXJs
KTsKKyAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8mKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7CisKKyAgICB2b2lkIGNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIHZvaWQg
Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKworICAgIC8vIFBsYXRmb3JtIGltcGxlbWVu
dGF0aW9ucy4KKyAgICBXZWJQYWdlUHJveHkqIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCk7CisgICAgdm9pZCBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7
CisgICAgdm9pZCBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKKyAgICB2b2lkIHBsYXRmb3JtQnJpbmdU
b0Zyb250KCk7CisgICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZl
QXMpOworICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29u
c3QgU3RyaW5nJiBjb250ZW50KTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgcGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJh
bmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlKTsKKyAgICB2
b2lkIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7CisgICAgdm9pZCBwbGF0Zm9ybU9wZW5VUkxF
eHRlcm5hbGx5KGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIHBsYXRmb3JtU2hvd0NlcnRp
ZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworCisgICAgUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eUNsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CisgICAgV2ViUGFn
ZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0VYVEVOU0lPTlMpCisgICAgUmVmUHRyPFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJv
bGxlclByb3h5PiBtX2V4dGVuc2lvbkNvbnRyb2xsZXI7CisjZW5kaWYKKyAgICAKKyAgICBSZWY8
QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gbV9kZWJ1Z2dhYmxlSW5mbzsKKyAgICBTdHJpbmcgbV9iYWNr
ZW5kQ29tbWFuZHNVUkw7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRyPFdLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlldzsKKyAgICBSZXRhaW5QdHI8TlNX
aW5kb3c+IG1fd2luZG93OworICAgIFJldGFpblB0cjxXS1JlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsKKyAgICBIYXNoTWFwPFN0cmluZywgUmV0YWlu
UHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcDsKKyAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgbV9zaGVldFJlY3Q7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgR3RrV2lk
Z2V0KiBtX3dlYlZpZXcgeyBudWxscHRyIH07CisgICAgR3RrV2lkZ2V0KiBtX3dpbmRvdyB7IG51
bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykKKyAgICBIV05EIG1fZnJv
bnRlbmRIYW5kbGU7CisgICAgUmVmUHRyPFdlYlZpZXc+IG1fd2ViVmlldzsKKyNlbmRpZgorfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwMzExYTA5OTUzMTIwNGQzNTQ3MjI4NDQwNjNkODJi
YzQ1ZDlmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDQz
IEBACisjIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2Fn
ZXMgLT4gUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSB7CisgICAgRnJvbnRlbmRMb2FkZWQoKQor
ICAgIEZyb250ZW5kRGlkQ2xvc2UoKQorICAgIFJlb3BlbigpCisgICAgUmVzZXRTdGF0ZSgpCisg
ICAgQnJpbmdUb0Zyb250KCkKKworICAgIFNhdmUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29u
dGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQorICAgIEFwcGVuZChT
dHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQorCisgICAgU2V0Rm9yY2VkQXBwZWFyYW5j
ZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSBhcHBlYXJhbmNl
KQorCisgICAgU2V0U2hlZXRSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorCisgICAgU3Rh
cnRXaW5kb3dEcmFnKCkKKworICAgIE9wZW5VUkxFeHRlcm5hbGx5KFN0cmluZyB1cmwpCisgICAg
U2hvd0NlcnRpZmljYXRlKFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm8p
CisKKyAgICBTZW5kTWVzc2FnZVRvQmFja2VuZChTdHJpbmcgbWVzc2FnZSkKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHku
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGNhYjUwMjFiNmNjZGJmNDA2Y2Uz
N2NmZmRiMmEyZTkzOTE5YWM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQ
cm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRp
b25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
Ykluc3BlY3RvclByb3h5LmgiCi0KLSNpbmNsdWRlICJBUElJbnNwZWN0b3JDbGllbnQuaCIKLSNp
bmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAiQVBJUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmgiCi0jaW5jbHVkZSAiQVBJVUlDbGllbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JC
cm93c2VyQWdlbnQuaCIKLSNpbmNsdWRlICJXZWJBdXRvbWF0aW9uU2Vzc2lvbi5oIgotI2luY2x1
ZGUgIldlYkZyYW1lUHJveHkuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNw
YXRjaGVyTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgotI2lu
Y2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0
b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclVJ
TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdl
SW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1
ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKLSNpbmNs
dWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5m
by5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9U
ZXh0RW5jb2RpbmcuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSAiV2ViSW5zcGVj
dG9yUHJveHlDbGllbnQuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1jb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6bWlu
aW11bVdpbmRvd1dpZHRoID0gNTAwOwotY29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6
Om1pbmltdW1XaW5kb3dIZWlnaHQgPSA0MDA7Ci0KLWNvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3Rv
clByb3h5Ojppbml0aWFsV2luZG93V2lkdGggPSAxMDAwOwotY29uc3QgdW5zaWduZWQgV2ViSW5z
cGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQgPSA2NTA7Ci0KLVdlYkluc3BlY3RvclBy
b3h5OjpXZWJJbnNwZWN0b3JQcm94eShXZWJQYWdlUHJveHkmIGluc3BlY3RlZFBhZ2UpCi0gICAg
OiBtX2luc3BlY3RlZFBhZ2UoJmluc3BlY3RlZFBhZ2UpCi0gICAgLCBtX2luc3BlY3RvckNsaWVu
dChtYWtlVW5pcXVlPEFQSTo6SW5zcGVjdG9yQ2xpZW50PigpKQotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICAsIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJldlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5
VGltZXJGaXJlZCkKLSNlbmRpZgotewotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLmFk
ZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMpOwotfQotCi1X
ZWJJbnNwZWN0b3JQcm94eTo6fldlYkluc3BlY3RvclByb3h5KCkKLXsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6c2V0SW5zcGVjdG9yQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Oklu
c3BlY3RvckNsaWVudD4mJiBpbnNwZWN0b3JDbGllbnQpCi17Ci0gICAgaWYgKCFpbnNwZWN0b3JD
bGllbnQpIHsKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQgPSBtYWtlVW5pcXVlPEFQSTo6SW5z
cGVjdG9yQ2xpZW50PigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9pbnNwZWN0
b3JDbGllbnQgPSBXVEZNb3ZlKGluc3BlY3RvckNsaWVudCk7Ci19Ci0KLXVuc2lnbmVkIFdlYklu
c3BlY3RvclByb3h5OjppbnNwZWN0aW9uTGV2ZWwoKSBjb25zdAotewotICAgIHJldHVybiBpbnNw
ZWN0b3JMZXZlbEZvclBhZ2UoaW5zcGVjdGVkUGFnZSgpKTsKLX0KLQotV2ViUHJlZmVyZW5jZXMm
IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKSBjb25zdAotewot
ICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOwotICAgIHJldHVybiBtX2luc3BlY3RvclBhZ2Ut
PnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OmludmFsaWRhdGUoKQotewotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAg
cGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci0KLSAgICByZXNldCgpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lu
c3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZW5kTWVzc2FnZVRv
RnJvbnRlbmQobWVzc2FnZSkpOwotfQotCi0vLyBQdWJsaWMgQVBJcwotYm9vbCBXZWJJbnNwZWN0
b3JQcm94eTo6aXNGcm9udCgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBwbGF0Zm9ybUlzRnJvbnQoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6Y29ubmVjdCgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBh
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlLT5wcmVmZXJl
bmNlcygpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1fc2hvd01lc3NhZ2VTZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3dNZXNz
YWdlU2VudCA9IHRydWU7Ci0gICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IHRydWU7Ci0K
LSAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVn
Z2VyQnJlYWsoKSwgMCk7Ci0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3I6OlNob3coKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQot
ewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
aXNDb25uZWN0ZWQoKSkgewotICAgICAgICBicmluZ1RvRnJvbnQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGNvbm5lY3QoKTsKLQotICAgIC8vIERvbid0IGlnbm9yZSB0aGUgZmly
c3QgYnJpbmdUb0Zyb250IHNvIGl0IG9wZW5zIHRoZSBJbnNwZWN0b3IuCi0gICAgbV9pZ25vcmVG
aXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpo
aWRlKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKLQotICAgIHBsYXRmb3JtSGlkZSgpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yOjpDbG9zZSgpKTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRm9yQ3Jhc2goKQotewotICAg
IGNsb3NlKCk7Ci0KLSAgICBwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xvc2UoKTsKLSAgICBzaG93KCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0U3RhdGUoKQotewotICAgIEFTU0VSVChtX2luc3BlY3Rl
ZFBhZ2UpOwotICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOwotICAgIGlmICghbV9pbnNwZWN0
ZWRQYWdlIHx8ICFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc3Bl
Y3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7Ci0g
ICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0YWNoZWRXaWR0
aCgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFj
aG1lbnRTaWRlKCk7Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVj
dG9yU3RhcnRzQXR0YWNoZWQoKTsKLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxl
dGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwotCi0gICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0KCkKLXsKLSAgICBpZiAobV9pbnNwZWN0
ZWRQYWdlKSB7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7Ci0gICAgICAgIG1faW5zcGVjdGVk
UGFnZSA9IG51bGxwdHI7Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRh
dGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJveHkmIGluc3BlY3RlZFBhZ2UpCi17Ci0gICAg
QVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlID0gJmluc3Bl
Y3RlZFBhZ2U7Ci0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7Ci0KLSAgICBpZiAobV9pbnNwZWN0
b3JQYWdlKQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpVcGRhdGVDb25uZWN0aW9uKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlm
aWVyKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0RnJvbnRl
bmRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnNob3dDb25zb2xlKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBtX2luc3Bl
Y3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd0NvbnNvbGUoKSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dSZXNvdXJjZXMoKQotewotICAgIGlmICgh
bV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVGcm9udGVuZFBh
Z2UoKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
OjpTaG93UmVzb3VyY2VzKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93TWFp
blJlc291cmNlRm9yRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUpCi17Ci0gICAgaWYgKCFtX2lu
c3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgp
OwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNo
b3dNYWluUmVzb3VyY2VGb3JGcmFtZShmcmFtZS0+ZnJhbWVJRCgpKSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmF0dGFjaEJvdHRvbSgpCi17Ci0gICAgYXR0YWNoKEF0dGFjaG1lbnRT
aWRlOjpCb3R0b20pOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hSaWdodCgp
Ci17Ci0gICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpSaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmF0dGFjaExlZnQoKQotewotICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6
TGVmdCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaChBdHRhY2htZW50U2lk
ZSBzaWRlKQotewotICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOwotICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlIHx8ICFtX2luc3BlY3RvclBhZ2UgfHwgKCFtX2lzQXR0YWNoZWQgJiYgIXBsYXRm
b3JtQ2FuQXR0YWNoKG1fY2FuQXR0YWNoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNB
dHRhY2hlZCA9IHRydWU7Ci0gICAgbV9hdHRhY2htZW50U2lkZSA9IHNpZGU7Ci0KLSAgICBpbnNw
ZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2htZW50U2lkZShzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oc2lkZSkpOwotCi0gICAgaWYgKG1faXNWaXNpYmxlKQotICAgICAgICBp
bnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCh0cnVl
KTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpT
ZXRBdHRhY2hlZCh0cnVlKSk7Ci0KLSAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAg
ICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkQm90dG9tKCkpOwotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OgotICAgICAgICBtX2lu
c3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0
KCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6Ci0g
ICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0
dGFjaGVkTGVmdCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcGxhdGZvcm1BdHRh
Y2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGV0YWNoKCkKLXsKLSAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZSB8fCAhbV9pbnNwZWN0b3JQYWdlIHx8ICghbV9pc0F0dGFjaGVkICYm
IG1faXNWaXNpYmxlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc0F0dGFjaGVkID0gZmFs
c2U7Ci0KLSAgICBpZiAobV9pc1Zpc2libGUpCi0gICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGZhbHNlKTsKLQotICAgIG1faW5zcGVj
dGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZChmYWxzZSkp
OwotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRl
dGFjaGVkKCkpOwotCi0gICAgcGxhdGZvcm1EZXRhY2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAg
IEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOwotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0
b3JBdHRhY2hlZEhlaWdodChoZWlnaHQpOwotICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQoaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0QXR0YWNoZWRX
aW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdl
KTsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5z
cGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNoZWRXaWR0aCh3aWR0aCk7
Ci0gICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6c2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsK
LSAgICBwbGF0Zm9ybVNldFNoZWV0UmVjdChyZWN0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6c3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVQYWdlUHJvZmlsaW5nKCkKLXsK
LSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aXNQcm9maWxpbmdQYWdlKQotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U3RvcFBhZ2VQcm9maWxpbmcoKSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRQYWdlUHJv
ZmlsaW5nKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVFbGVtZW50U2Vs
ZWN0aW9uKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSkgewotICAgICAgICBtX2lnbm9yZUVs
ZW1lbnRTZWxlY3Rpb25DaGFuZ2UgPSB0cnVlOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgY29ubmVjdCgpOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRFbGVtZW50U2VsZWN0aW9uKCkpOwotICAg
IH0KLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFn
ZShjb25zdCBVUkwmIHVybCkKLXsKLSAgICAvLyBVc2UgVVJMIHNvIHdlIGNhbiBjb21wYXJlIHRo
ZSBwYXRocyBhbmQgcHJvdG9jb2xzLgotICAgIFVSTCBtYWluUGFnZVVSTChVUkwoKSwgV2ViSW5z
cGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSk7Ci0gICAgaWYgKHVybC5wcm90b2NvbCgp
ID09IG1haW5QYWdlVVJMLnByb3RvY29sKCkgJiYgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVy
bC5wYXRoKCkpID09IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtYWluUGFnZVVSTC5wYXRoKCkp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFdlIG1pZ2h0IG5vdCBoYXZlIGEgVGVz
dCBVUkwgaW4gUHJvZHVjdGlvbiBidWlsZHMuCi0gICAgU3RyaW5nIHRlc3RQYWdlVVJMU3RyaW5n
ID0gV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCk7Ci0gICAgaWYgKHRl
c3RQYWdlVVJMU3RyaW5nLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBV
UkwgdGVzdFBhZ2VVUkwoVVJMKCksIHRlc3RQYWdlVVJMU3RyaW5nKTsKLSAgICByZXR1cm4gdXJs
LnByb3RvY29sKCkgPT0gdGVzdFBhZ2VVUkwucHJvdG9jb2woKSAmJiBkZWNvZGVVUkxFc2NhcGVT
ZXF1ZW5jZXModXJsLnBhdGgoKSkgPT0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRlc3RQYWdl
VVJMLnBhdGgoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5k
UGFnZSgpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKTsKLSAgICBB
U1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSwgbV9p
bnNwZWN0ZWRQYWdlKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgaW5zcGVjdGVkIHBhZ2UgaGFz
IGEgcnVubmluZyBXZWJQcm9jZXNzIHNvIHdlIGNhbiBpbnNwZWN0IGl0LgotICAgIG1faW5zcGVj
dGVkUGFnZS0+bGF1bmNoSW5pdGlhbFByb2Nlc3NJZk5lY2Vzc2FyeSgpOwotCi0gICAgbV9pbnNw
ZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50
aWZpZXIoKSwgKnRoaXMpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQotICAg
IG1fZXh0ZW5zaW9uQ29udHJvbGxlciA9IFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxl
clByb3h5OjpjcmVhdGUoKm1faW5zcGVjdG9yUGFnZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gs
IGJvb2wgdW5kZXJUZXN0KQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZS0+cHJlZmVyZW5jZXMoKS5kZXZlbG9w
ZXJFeHRyYXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2luc3BlY3Rl
ZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5kKCkpIHsKLSAgICAg
ICAgc2hvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV91bmRlclRlc3QgPSB1
bmRlclRlc3Q7Ci0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBBU1NFUlQobV9pbnNw
ZWN0b3JQYWdlKTsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RXN0
YWJsaXNoQ29ubmVjdGlvbihtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSwgaW5mb0Zvckxv
Y2FsRGVidWdnYWJsZSgpLCBtX3VuZGVyVGVzdCwgaW5zcGVjdGlvbkxldmVsKCkpKTsKLQotICAg
IEFTU0VSVCghbV9pc0FjdGl2ZUZyb250ZW5kKTsKLSAgICBtX2lzQWN0aXZlRnJvbnRlbmQgPSB0
cnVlOwotICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RG
cm9udGVuZCgqdGhpcyk7Ci0KLSAgICBpZiAoIW1fdW5kZXJUZXN0KSB7Ci0gICAgICAgIG1fY2Fu
QXR0YWNoID0gcGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKTsKLSAgICAgICAgbV9pc0F0dGFj
aGVkID0gc2hvdWxkT3BlbkF0dGFjaGVkKCk7Ci0gICAgICAgIG1fYXR0YWNobWVudFNpZGUgPSBz
dGF0aWNfY2FzdDxBdHRhY2htZW50U2lkZT4oaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5z
cGVjdG9yQXR0YWNobWVudFNpZGUoKSk7Ci0KLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKG1faXNBdHRhY2hlZCkpOwotCi0g
ICAgICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobV9hdHRhY2ht
ZW50U2lkZSkgewotICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgotICAg
ICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
VUk6OkF0dGFjaGVkQm90dG9tKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKLSAgICAgICAgICAgICAgICBtX2luc3Bl
Y3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRT
aWRlOjpMZWZ0OgotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2luc3BlY3Rv
clBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hlZCgpKTsKLQotICAg
ICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRE
b2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7Ci0gICAgfQotCi0gICAgLy8gTm90aWZ5
IFdlYktpdCBjbGllbnQgd2hlbiBhIGxvY2FsIGluc3BlY3RvciBhdHRhY2hlcyBzbyB0aGF0IGl0
IG1heSBpbnN0YWxsIGRlbGVnYXRlcyBwcmlvciB0byB0aGUgX1dLSW5zcGVjdG9yIGxvYWRpbmcg
aXRzIGZyb250ZW5kLgotICAgIG1faW5zcGVjdGVkUGFnZS0+dWlDbGllbnQoKS5kaWRBdHRhY2hM
b2NhbEluc3BlY3RvcigqbV9pbnNwZWN0ZWRQYWdlLCAqdGhpcyk7Ci0KLSAgICAvLyBCYWlsIG91
dCBpZiB0aGUgY2xpZW50IGNsb3NlZCB0aGUgaW5zcGVjdG9yIGZyb20gdGhlIGRlbGVnYXRlIG1l
dGhvZC4KLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9pbnNwZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIG1fdW5kZXJUZXN0ID8gV2Vi
SW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkgOiBXZWJJbnNwZWN0b3JQcm94
eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9w
ZW4oKQotewotICAgIGlmIChtX3VuZGVyVGVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKEdUSykK
LSAgICBTZXRGb3JTY29wZTxib29sPiBpc09wZW5pbmcobV9pc09wZW5pbmcsIHRydWUpOwotI2Vu
ZGlmCi0KLSAgICBtX2lzVmlzaWJsZSA9IHRydWU7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7Ci0K
LSAgICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAgICBwbGF0Zm9ybUF0dGFjaCgpOwotICAgIGVs
c2UKLSAgICAgICAgcGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOwotCi0gICAgcGxhdGZv
cm1CcmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGlkQ2xvc2Uo
KQotewotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAoIW1f
aW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gR3VhcmQgYWdhaW5zdCBj
YWxscyB0byBjbG9zZSgpIG1hZGUgYnkgdGhlIGNsaWVudCB3aGlsZSBhbHJlYWR5IGNsb3Npbmcu
Ci0gICAgaWYgKG1fY2xvc2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFNldEZvclNj
b3BlPGJvb2w+IHJlZW50cmFuY3lQcm90ZWN0b3IobV9jbG9zaW5nLCB0cnVlKTsKLSAgICAKLSAg
ICAvLyBOb3RpZnkgV2ViS2l0IGNsaWVudCB3aGVuIGEgbG9jYWwgaW5zcGVjdG9yIGNsb3NlcyBz
byBpdCBjYW4gY2xlYXIgX1dLSW5zcGVjdG9yRGVsZWdhdGUgYW5kIHBlcmZvcm0gb3RoZXIgY2xl
YW51cC4KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnVpQ2xpZW50KCkud2lsbENsb3NlTG9jYWxJbnNw
ZWN0b3IoKm1faW5zcGVjdGVkUGFnZSwgKnRoaXMpOwotCi0gICAgbV9pc1Zpc2libGUgPSBmYWxz
ZTsKLSAgICBtX2lzUHJvZmlsaW5nUGFnZSA9IGZhbHNlOwotICAgIG1fc2hvd01lc3NhZ2VTZW50
ID0gZmFsc2U7Ci0gICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwotCi0gICAg
dW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKLQotICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJsZShtX2lzVmlz
aWJsZSkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
bV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCkpOwotCi0gICAgaWYgKG1faXNBY3RpdmVGcm9u
dGVuZCkgewotICAgICAgICBtX2lzQWN0aXZlRnJvbnRlbmQgPSBmYWxzZTsKLSAgICAgICAgbV9p
bnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKCp0
aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAgICBwbGF0Zm9ybURl
dGFjaCgpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQotICAgIC8vIFRoaXMg
ZXh0ZW5zaW9uIGNvbnRyb2xsZXIgbWF5IGJlIGtlcHQgYWxpdmUgYnkgdGhlIElQQyBkaXNwYXRj
aGVyIGJleW9uZCB0aGUgcG9pbnQKLSAgICAvLyB3aGVuIG1faW5zcGVjdG9yUGFnZSBpcyBjbGVh
cmVkIGJlbG93LiBOb3RpZnkgdGhlIGNvbnRyb2xsZXIgc28gaXQgY2FuIGNsZWFuIHVwIGJlZm9y
ZSB0aGVuLgotICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlci0+aW5zcGVjdG9yRnJvbnRlbmRXaWxs
Q2xvc2UoKTsKLSAgICBtX2V4dGVuc2lvbkNvbnRyb2xsZXIgPSBudWxscHRyOwotI2VuZGlmCi0g
ICAgCi0gICAgLy8gTnVsbCBvdXQgbV9pbnNwZWN0b3JQYWdlIGFmdGVyIHBsYXRmb3JtRGV0YWNo
KCksIHNvIHRoZSB2aWV3cyBjYW4gYmUgY2xlYW5lZCB1cCBjb3JyZWN0bHkuCi0gICAgbV9pbnNw
ZWN0b3JQYWdlID0gbnVsbHB0cjsKLQotICAgIG1faXNBdHRhY2hlZCA9IGZhbHNlOwotICAgIG1f
Y2FuQXR0YWNoID0gZmFsc2U7Ci0gICAgbV91bmRlclRlc3QgPSBmYWxzZTsKLQotICAgIHBsYXRm
b3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAg
IGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3Rl
ZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQo
bWVzc2FnZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kTG9hZGVkKCkK
LXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGF1dG8qIGF1dG9tYXRpb25TZXNzaW9uID0gbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucHJv
Y2Vzc1Bvb2woKS5hdXRvbWF0aW9uU2Vzc2lvbigpKQotICAgICAgICBhdXRvbWF0aW9uU2Vzc2lv
bi0+aW5zcGVjdG9yRnJvbnRlbmRMb2FkZWQoKm1faW5zcGVjdGVkUGFnZSk7Ci0gICAgCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQotICAgIGlmIChtX2V4dGVuc2lvbkNvbnRyb2xs
ZXIpCi0gICAgICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlci0+aW5zcGVjdG9yRnJvbnRlbmRMb2Fk
ZWQoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpicmluZ1RvRnJvbnQo
KQotewotICAgIC8vIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgdGVsbHMg
dXMgdG8gZG8gdGhpcyBvbiBsb2FkLiBXZSB3YW50IHRvCi0gICAgLy8gaWdub3JlIGl0IG9uY2Ug
aWYgd2Ugb25seSB3YW50ZWQgdG8gY29ubmVjdC4gVGhpcyBhbGxvd3MgdGhlIEluc3BlY3RvciB0
byBsYXRlcgotICAgIC8vIHJlcXVlc3QgdG8gYmUgYnJvdWdodCB0byB0aGUgZnJvbnQgd2hlbiBh
IGJyZWFrcG9pbnQgaXMgaGl0IG9yIHNvbWUgb3RoZXIgYWN0aW9uLgotICAgIGlmIChtX2lnbm9y
ZUZpcnN0QnJpbmdUb0Zyb250KSB7Ci0gICAgICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQg
PSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2lzVmlzaWJsZSkK
LSAgICAgICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLSAgICBlbHNlCi0gICAgICAgIG9wZW4o
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9u
dCgpCi17Ci0gICAgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFp
bGFibGUpCi17Ci0gICAgYm9vbCBwcmV2aW91c0NhbkF0dGFjaCA9IG1fY2FuQXR0YWNoOwotCi0g
ICAgbV9jYW5BdHRhY2ggPSBtX2lzQXR0YWNoZWQgfHwgcGxhdGZvcm1DYW5BdHRhY2goYXZhaWxh
YmxlKTsKLQotICAgIGlmIChwcmV2aW91c0NhbkF0dGFjaCA9PSBtX2NhbkF0dGFjaCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW5zcGVjdG9yUGFnZSAmJiAhbV91bmRlclRlc3QpCi0g
ICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNl
dERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsKLQotICAgIHBsYXRmb3JtQXR0YWNo
QXZhaWxhYmlsaXR5Q2hhbmdlZChtX2NhbkF0dGFjaCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnNldEZvcmNlZEFwcGVhcmFuY2UoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVh
cmFuY2UgYXBwZWFyYW5jZSkKLXsKLSAgICBwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoYXBw
ZWFyYW5jZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW5VUkxFeHRlcm5hbGx5
KGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIG1faW5zcGVjdG9yQ2xpZW50LT5vcGVuVVJMRXh0
ZXJuYWxseSgqdGhpcywgdXJsKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBwbGF0Zm9ybUlu
c3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZv
KQotewotICAgIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0
aXZlKQotewotICAgIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSA9IGFjdGl2ZTsKLQotICAgIGlm
IChtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UpIHsKLSAgICAgICAgbV9pZ25vcmVFbGVt
ZW50U2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7Ci0gICAgICAgIGlmICghbV9pc1Zpc2libGUpCi0g
ICAgICAgICAgICBjbG9zZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGFj
dGl2ZSkKLSAgICAgICAgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7Ci0gICAg
ZWxzZSBpZiAoaXNDb25uZWN0ZWQoKSkKLSAgICAgICAgYnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2
ZSkKLXsKLSAgICBtX2lzUHJvZmlsaW5nUGFnZSA9IGFjdGl2ZTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKFdlYkNvcmU6Okluc3Bl
Y3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZSBkZXZlbG9wZXJQcmVmZXJlbmNlLCBPcHRp
b25hbDxib29sPiBvdmVycmlkZVZhbHVlKQotewotICAgIHN3aXRjaCAoZGV2ZWxvcGVyUHJlZmVy
ZW5jZSkgewotICAgIGNhc2UgSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudERlYnVnTW9kZUVuYWJsZWQ6Ci0gICAgICAgIGlmIChtX2lu
c3BlY3RlZFBhZ2UpCi0gICAgICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPndlYnNpdGVEYXRhU3Rv
cmUoKS5zZXRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudERlYnVnTW9kZShvdmVycmlkZVZhbHVlICYm
IG92ZXJyaWRlVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgSW5z
cGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpJVFBEZWJ1Z01vZGVFbmFibGVkOgot
ICAgICAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICAgICAgbV9pbnNwZWN0ZWRQYWdl
LT53ZWJzaXRlRGF0YVN0b3JlKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShv
dmVycmlkZVZhbHVlICYmIG92ZXJyaWRlVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsK
LQotICAgIGNhc2UgSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpNb2NrQ2Fw
dHVyZURldmljZXNFbmFibGVkOgotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgICAgIGlm
IChtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNldE1vY2tD
YXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldERpYWdub3N0
aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotewotI2lmIEVOQUJMRShJTlNQRUNU
T1JfVEVMRU1FVFJZKQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OlNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJsZSkpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYg
Y29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQotewotICAgIGlm
ICghbV9pbnNwZWN0ZWRQYWdlLT5wcmVmZXJlbmNlcygpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFmaWxlbmFtZS5pc0VtcHR5KCkpOwot
ICAgIGlmIChmaWxlbmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRm
b3JtU2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlLT5w
cmVmZXJlbmNlcygpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKCFmaWxlbmFtZS5pc0VtcHR5KCkpOwotICAgIGlmIChmaWxlbmFtZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQXBwZW5kKGZpbGVuYW1lLCBj
b250ZW50KTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvdWxkT3BlbkF0dGFjaGVk
KCkKLXsKLSAgICByZXR1cm4gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yU3Rh
cnRzQXR0YWNoZWQoKSAmJiBjYW5BdHRhY2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6ZXZhbHVhdGVJbkZyb250ZW5kRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24p
Ci17Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
aW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkV2YWx1YXRlSW5G
cm9udGVuZEZvclRlc3RpbmcoZXhwcmVzc2lvbikpOwotfQotCi0vLyBVbnN1cHBvcnRlZCBjb25m
aWd1cmF0aW9ucyBjYW4gdXNlIHRoZSBzdHVicyBwcm92aWRlZCBoZXJlLgotCi0jaWYgIVBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKLQotV2ViUGFnZVBy
b3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1JbnZhbGlkYXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1J
c0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKElu
c3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hh
bmdlZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmlj
YXRlSW5mbyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYg
Y29udGVudCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi11bnNpZ25lZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUF0dGFjaCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQo
dW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0
YXJ0V2luZG93RHJhZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIFdl
Ykluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5
OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLURlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94
eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotI2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQ
TEFURk9STShXSU4pCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOWYwNWUwYzg5NGFkN2Q2MTk1NzRhNDI0NTBkMWU5ODE2MjAw
ZTRhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuaAorKysgL2Rl
di9udWxsCkBAIC0xLDMzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChj
KSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUg
IkF0dGFjaG1lbnQuaCIKLSNpbmNsdWRlICJEZWJ1Z2dhYmxlSW5mb0RhdGEuaCIKLSNpbmNsdWRl
ICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9y
Q2xpZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNp
ZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLU9CSkNfQ0xBU1MgTlNVUkw7
Ci1PQkpDX0NMQVNTIE5TVmlldzsKLU9CSkNfQ0xBU1MgTlNXaW5kb3c7Ci1PQkpDX0NMQVNTIFdL
V2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcjsKLU9CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlcjsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ2VydGlmaWNhdGVJbmZvOwotfQot
Ci1uYW1lc3BhY2UgQVBJIHsKLWNsYXNzIEluc3BlY3RvckNsaWVudDsKLX0KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIFdlYkZyYW1lUHJveHk7Ci1jbGFzcyBXZWJJbnNwZWN0b3JQcm94
eUNsaWVudDsKLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlByZWZlcmVuY2VzOwotI2lm
IEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKLWNsYXNzIFdlYkluc3BlY3RvclVJRXh0ZW5z
aW9uQ29udHJvbGxlclByb3h5OwotI2VuZGlmCi0KLWVudW0gY2xhc3MgQXR0YWNobWVudFNpZGUg
ewotICAgIEJvdHRvbSwKLSAgICBSaWdodCwKLSAgICBMZWZ0LAotfTsKLQotY2xhc3MgV2ViSW5z
cGVjdG9yUHJveHkKLSAgICA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5
cGU6Okluc3BlY3Rvcj4KLSAgICAsIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgICwg
cHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsCi0jaWYgUExBVEZPUk0oV0lOKQotICAg
ICwgcHVibGljIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgotI2VuZGlmCi17Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3JQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94
eSYgaW5zcGVjdGVkUGFnZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdl
Ykluc3BlY3RvclByb3h5KGluc3BlY3RlZFBhZ2UpKTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBX
ZWJJbnNwZWN0b3JQcm94eShXZWJQYWdlUHJveHkmKTsKLSAgICB2aXJ0dWFsIH5XZWJJbnNwZWN0
b3JQcm94eSgpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICBBUEk6Okluc3BlY3Rv
ckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50KCkgeyByZXR1cm4gKm1faW5zcGVjdG9yQ2xpZW50OyB9
Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6SW5zcGVj
dG9yQ2xpZW50PiYmKTsKLQotICAgIC8vIFB1YmxpYyBBUElzCi0gICAgV2ViUGFnZVByb3h5KiBp
bnNwZWN0ZWRQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlOyB9Ci0gICAgV2Vi
UGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JQYWdl
OyB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMpCi0gICAgV2ViSW5zcGVjdG9y
VUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkqIGV4dGVuc2lvbkNvbnRyb2xsZXIoKSBjb25zdCB7
IHJldHVybiBtX2V4dGVuc2lvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KLSNlbmRpZgotCi0gICAgYm9v
bCBpc0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbnNwZWN0b3JQYWdlOyB9Ci0gICAg
Ym9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX2lzVmlzaWJsZTsgfQotICAgIGJvb2wg
aXNGcm9udCgpOwotCi0gICAgdm9pZCBjb25uZWN0KCk7Ci0KLSAgICB2b2lkIHNob3coKTsKLSAg
ICB2b2lkIGhpZGUoKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0gICAgdm9pZCBjbG9zZUZvckNyYXNo
KCk7Ci0gICAgdm9pZCByZW9wZW4oKTsKLSAgICB2b2lkIHJlc2V0U3RhdGUoKTsKLQotICAgIHZv
aWQgcmVzZXQoKTsKLSAgICB2b2lkIHVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQcm94
eSYpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGVudW0gY2xhc3MgSW5zcGVjdGlvblRhcmdl
dFR5cGUgeyBMb2NhbCwgUmVtb3RlIH07Ci0gICAgc3RhdGljIFJldGFpblB0cjxOU1dpbmRvdz4g
Y3JlYXRlRnJvbnRlbmRXaW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25U
YXJnZXRUeXBlKTsKLQotICAgIHZvaWQgZGlkQmVjb21lQWN0aXZlKCk7Ci0KLSAgICB2b2lkIHVw
ZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29uc3Q7Ci0gICAgdm9pZCBpbnNwZWN0ZWRWaWV3
RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCA9IDApOwotICAgIHZvaWQgd2luZG93RnJhbWVEaWRDaGFu
Z2UoKTsKLSAgICB2b2lkIHdpbmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKTsKLSAgICBOU1dpbmRv
dyAqaW5zcGVjdG9yV2luZG93KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0
KCk7IH0KLQotICAgIHZvaWQgY2xvc2VGcm9udGVuZFBhZ2UoKTsKLSAgICB2b2lkIGNsb3NlRnJv
bnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKCk7Ci0KLSAgICB2b2lkIGF0dGFjaG1lbnRW
aWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywgTlNWaWV3ICpuZXdWaWV3KTsKLSAgICB2b2lk
IGF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coTlNXaW5kb3cgKm9sZFdpbmRvdyk7Ci0gICAg
dm9pZCBhdHRhY2htZW50RGlkTW92ZVRvV2luZG93KE5TV2luZG93ICpuZXdXaW5kb3cpOwotCi0g
ICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzaGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NoZWV0UmVjdDsgfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi0gICAgR3RrV2lkZ2V0
KiBpbnNwZWN0b3JWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JWaWV3OyB9OwotICAg
IHZvaWQgc2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4m
Jik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2hvd0NvbnNvbGUoKTsKLSAgICB2b2lkIHNob3dSZXNv
dXJjZXMoKTsKLSAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5
Kik7Ci0gICAgdm9pZCBvcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCk7Ci0KLSAg
ICBBdHRhY2htZW50U2lkZSBhdHRhY2htZW50U2lkZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNo
bWVudFNpZGU7IH0KLSAgICBib29sIGlzQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0
YWNoZWQ7IH0KLSAgICB2b2lkIGF0dGFjaFJpZ2h0KCk7Ci0gICAgdm9pZCBhdHRhY2hMZWZ0KCk7
Ci0gICAgdm9pZCBhdHRhY2hCb3R0b20oKTsKLSAgICB2b2lkIGF0dGFjaChBdHRhY2htZW50U2lk
ZSA9IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pOwotICAgIHZvaWQgZGV0YWNoKCk7Ci0KLSAgICB2
b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKLSAgICB2b2lkIHNldEF0dGFj
aGVkV2luZG93V2lkdGgodW5zaWduZWQpOwotCi0gICAgdm9pZCBzZXRTaGVldFJlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOwotCi0g
ICAgYm9vbCBpc1Byb2ZpbGluZ1BhZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzUHJvZmlsaW5nUGFn
ZTsgfQotICAgIHZvaWQgdG9nZ2xlUGFnZVByb2ZpbGluZygpOwotCi0gICAgYm9vbCBpc0VsZW1l
bnRTZWxlY3Rpb25BY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRTZWxlY3Rpb25BY3Rp
dmU7IH0KLSAgICB2b2lkIHRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oKTsKLQotICAgIGJvb2wgaXNV
bmRlclRlc3QoKSBjb25zdCB7IHJldHVybiBtX3VuZGVyVGVzdDsgfQotCi0gICAgdm9pZCBzZXRE
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sKTsKLQotICAgIC8vIFByb3ZpZGVkIGJ5IHBs
YXRmb3JtIFdlYkluc3BlY3RvclByb3h5IGltcGxlbWVudGF0aW9ucy4KLSAgICBzdGF0aWMgU3Ry
aW5nIGluc3BlY3RvclBhZ2VVUkwoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclRlc3RQ
YWdlVVJMKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25z
dCBVUkwmKTsKLSAgICBzdGF0aWMgRGVidWdnYWJsZUluZm9EYXRhIGluZm9Gb3JMb2NhbERlYnVn
Z2FibGUoKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtV2luZG93V2lkdGg7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1XaW5kb3dIZWlnaHQ7Ci0KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbFdpbmRvd1dpZHRoOwotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBpbml0aWFsV2luZG93SGVpZ2h0OwotCi0gICAgLy8gVGVzdGluZyBtZXRob2Rz
LgotICAgIHZvaWQgZXZhbHVhdGVJbkZyb250ZW5kRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKTsK
LQotcHJpdmF0ZToKLSAgICB2b2lkIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotICAgIHZvaWQgY2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVy
Ci0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBvdmVycmlkZTsKLQotICAgIC8vIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsCi0gICAg
dm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlk
ZTsKLSAgICBDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIENvbm5lY3Rpb25UeXBlOjpMb2NhbDsgfQotCi0gICAgV2ViUGFnZVByb3h5KiBwbGF0
Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpOwotICAgIHZvaWQgcGxhdGZvcm1DcmVhdGVGcm9udGVu
ZFdpbmRvdygpOwotICAgIHZvaWQgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
OwotCi0gICAgdm9pZCBwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKTsKLSAgICB2b2lkIHBsYXRm
b3JtSW52YWxpZGF0ZSgpOwotICAgIHZvaWQgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci0gICAgdm9p
ZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1CcmluZ0luc3BlY3Rl
ZFBhZ2VUb0Zyb250KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUhpZGUoKTsKLSAgICBib29sIHBsYXRm
b3JtSXNGcm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2Vk
KGJvb2wpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlKTsKLSAgICB2b2lkIHBsYXRmb3JtT3Bl
blVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwbGF0Zm9ybUluc3BlY3Rl
ZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwbGF0Zm9ybVNob3dDZXJ0aWZp
Y2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKLSAgICB1bnNpZ25lZCBwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpOwotICAgIHVuc2lnbmVkIHBsYXRmb3JtSW5zcGVj
dGVkV2luZG93V2lkdGgoKTsKLSAgICB2b2lkIHBsYXRmb3JtQXR0YWNoKCk7Ci0gICAgdm9pZCBw
bGF0Zm9ybURldGFjaCgpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCh1bnNpZ25lZCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5z
aWduZWQpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOwotICAgIHZvaWQg
cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVu
dCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKLSAgICB2b2lkIHBsYXRm
b3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCk7
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgYm9vbCBwbGF0Zm9ybUNhbkF0dGFjaChib29sIHdl
YlByb2Nlc3NDYW5BdHRhY2gpOwotI2Vsc2UKLSAgICBib29sIHBsYXRmb3JtQ2FuQXR0YWNoKGJv
b2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCkgeyByZXR1cm4gd2ViUHJvY2Vzc0NhbkF0dGFjaDsgfQot
I2VuZGlmCi0KLSAgICAvLyBDYWxsZWQgYnkgV2ViSW5zcGVjdG9yUHJveHkgbWVzc2FnZXMKLSAg
ICB2b2lkIG9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVu
ZGVyVGVzdCk7Ci0gICAgdm9pZCBzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50
KTsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJik7Ci0gICAg
dm9pZCBmcm9udGVuZExvYWRlZCgpOwotICAgIHZvaWQgZGlkQ2xvc2UoKTsKLSAgICB2b2lkIGJy
aW5nVG9Gcm9udCgpOwotICAgIHZvaWQgYnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpOwotICAg
IHZvaWQgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKTsKLSAgICB2b2lkIHNldEZvcmNl
ZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2Up
OwotICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lk
IHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKLSAgICB2
b2lkIGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgdGltZWxpbmVSZWNv
cmRpbmdDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgc2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJy
aWRlKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZSwgT3B0aW9u
YWw8Ym9vbD4pOwotCi0gICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsK
LSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQpOwotCi0gICAgYm9vbCBjYW5BdHRhY2goKSBjb25zdCB7IHJldHVybiBtX2NhbkF0dGFj
aDsgfQotICAgIGJvb2wgc2hvdWxkT3BlbkF0dGFjaGVkKCk7Ci0KLSAgICB2b2lkIG9wZW4oKTsK
LQotICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0OwotCi0gICAgV2ViUHJlZmVy
ZW5jZXMmIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpIGNvbnN0OwotCi0jaWYgUExBVEZPUk0o
TUFDKQotICAgIHZvaWQgYXBwbHlGb3JjZWRBcHBlYXJhbmNlKCk7Ci0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQotICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9yV2lu
ZG93VGl0bGUoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIHN0YXRp
YyBMUkVTVUxUIENBTExCQUNLIHduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwot
ICAgIGJvb2wgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwotICAgIHZvaWQgd2luZG93UmVjZWl2ZWRN
ZXNzYWdlKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKSBvdmVycmlkZTsKLSNlbmRpZgotCi0g
ICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RlZFBhZ2UgeyBudWxscHRyIH07Ci0gICAgV2ViUGFn
ZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEFQSTo6SW5zcGVjdG9yQ2xpZW50PiBtX2luc3BlY3RvckNsaWVudDsKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfRVhURU5TSU9OUykKLSAgICBSZWZQdHI8V2ViSW5zcGVjdG9yVUlFeHRlbnNpb25D
b250cm9sbGVyUHJveHk+IG1fZXh0ZW5zaW9uQ29udHJvbGxlcjsKLSNlbmRpZgotICAgIAotICAg
IGJvb2wgbV91bmRlclRlc3QgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9pc0F0dGFjaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fY2FuQXR0
YWNoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNQcm9maWxpbmdQYWdlIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1fc2hvd01lc3NhZ2VTZW50IHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlRmly
c3RCcmluZ1RvRnJvbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9lbGVtZW50U2VsZWN0aW9uQWN0
aXZlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzQWN0aXZlRnJvbnRlbmQgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9jbG9zaW5nIHsgZmFsc2UgfTsKLQotICAgIEF0dGFjaG1lbnRTaWRlIG1fYXR0YWNobWVu
dFNpZGUge0F0dGFjaG1lbnRTaWRlOjpCb3R0b219OwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IFJldGFpblB0cjxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyPiBtX2luc3BlY3RvclZpZXdDb250
cm9sbGVyOwotICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV9pbnNwZWN0b3JXaW5kb3c7Ci0gICAg
UmV0YWluUHRyPFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsK
LSAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVh
bFVSTE1hcDsKLSAgICBSdW5Mb29wOjpUaW1lcjxXZWJJbnNwZWN0b3JQcm94eT4gbV9jbG9zZUZy
b250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXI7Ci0gICAgU3RyaW5nIG1fdXJsU3RyaW5nOwotICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NoZWV0UmVjdDsKLSAgICBXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSBtX2Zyb250ZW5kQXBwZWFyYW5jZSB7IFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlOjpTeXN0ZW0gfTsKLSAgICBib29s
IG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCB7IGZhbHNlIH07Ci0jZWxpZiBQTEFURk9S
TShHVEspCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiBtX2Ns
aWVudDsKLSAgICBHdGtXaWRnZXQqIG1faW5zcGVjdG9yVmlldyB7IG51bGxwdHIgfTsKLSAgICBH
dGtXaWRnZXQqIG1faW5zcGVjdG9yV2luZG93IHsgbnVsbHB0ciB9OwotICAgIEd0a1dpZGdldCog
bV9oZWFkZXJCYXIgeyBudWxscHRyIH07Ci0gICAgU3RyaW5nIG1faW5zcGVjdGVkVVJMU3RyaW5n
OwotICAgIGJvb2wgbV9pc09wZW5pbmcgeyBmYWxzZSB9OwotI2VsaWYgUExBVEZPUk0oV0lOKQot
ICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3V2luZG93IHsgbnVsbHB0ciB9OwotICAgIEhXTkQgbV9p
bnNwZWN0ZWRWaWV3UGFyZW50V2luZG93IHsgbnVsbHB0ciB9OwotICAgIEhXTkQgbV9pbnNwZWN0
b3JWaWV3V2luZG93IHsgbnVsbHB0ciB9OwotICAgIEhXTkQgbV9pbnNwZWN0b3JEZXRhY2hXaW5k
b3cgeyBudWxscHRyIH07Ci0gICAgUmVmUHRyPFdlYlZpZXc+IG1faW5zcGVjdG9yVmlldzsKLSNl
bmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkubWVzc2Fn
ZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3Y2IxMWYyNDk5ZThiNTNiODc5
MTMxZmUyNWMxMDZhYzNkYmVjNjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
clByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotIyBDb3B5
cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0j
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFdlYklu
c3BlY3RvclByb3h5IHsKLSAgICBPcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0
dGFjaCwgYm9vbCB1bmRlclRlc3QpCi0gICAgU2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0
YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmllcikKLQotICAgIFNlbmRNZXNzYWdlVG9CYWNrZW5k
KFN0cmluZyBtZXNzYWdlKQotCi0gICAgRnJvbnRlbmRMb2FkZWQoKQotICAgIERpZENsb3NlKCkK
LSAgICBCcmluZ1RvRnJvbnQoKQotICAgIEJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQotICAg
IFJlb3BlbigpCi0gICAgUmVzZXRTdGF0ZSgpCi0KLSAgICBTZXRGb3JjZWRBcHBlYXJhbmNlKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlIGFwcGVhcmFuY2UpCi0g
ICAgT3BlblVSTEV4dGVybmFsbHkoU3RyaW5nIHVybCkKLQotICAgIEluc3BlY3RlZFVSTENoYW5n
ZWQoU3RyaW5nIHVybFN0cmluZykKLSAgICBTaG93Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykKLSAgICBFbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChi
b29sIGFjdGl2ZSkKLSAgICBUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCi0g
ICAgU2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKFdlYkNvcmU6Okluc3BlY3RvckNsaWVu
dDo6RGV2ZWxvcGVyUHJlZmVyZW5jZSBkZXZlbG9wZXJQcmVmZXJlbmNlLCBPcHRpb25hbDxib29s
PiBvdmVycmlkZVZhbHVlKQotCi0gICAgU2F2ZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250
ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCi0gICAgQXBwZW5kKFN0
cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQpCi0KLSAgICBBdHRhY2hCb3R0b20oKQotICAg
IEF0dGFjaFJpZ2h0KCkKLSAgICBBdHRhY2hMZWZ0KCkKLSAgICBEZXRhY2goKQotCi0gICAgQXR0
YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLQotICAgIFNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLSAgICBTZXRBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkIHdpZHRoKQotCi0gICAgU2V0U2hlZXRSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KQotCi0gICAgU3RhcnRXaW5kb3dEcmFnKCkKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kYWE3YTllNTMxMTkyM2IwMDAxMWE1NWRmNDk1MzEwYmM0ZGRlNGRkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJ
UHJveHkuY3BwCkBAIC0wLDAgKzEsODkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQ
cm94eS5oIgorCisjaW5jbHVkZSAiQVBJSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiQVBJ
TmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIkFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgor
I2luY2x1ZGUgIkFQSVVJQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQnJvd3NlckFnZW50
LmgiCisjaW5jbHVkZSAiV2ViQXV0b21hdGlvblNlc3Npb24uaCIKKyNpbmNsdWRlICJXZWJGcmFt
ZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclVJTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlBy
ZWZlcmVuY2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQ
cm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0RW5jb2Rp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94
eUNsaWVudC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK2NvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclVJUHJveHk6Om1pbmltdW1X
aW5kb3dXaWR0aCA9IDUwMDsKK2NvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclVJUHJveHk6Om1p
bmltdW1XaW5kb3dIZWlnaHQgPSA0MDA7CisKK2NvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclVJ
UHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCA9IDEwMDA7Citjb25zdCB1bnNpZ25lZCBXZWJJbnNw
ZWN0b3JVSVByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0ID0gNjUwOworCitXZWJJbnNwZWN0b3JV
SVByb3h5OjpXZWJJbnNwZWN0b3JVSVByb3h5KFdlYlBhZ2VQcm94eSYgaW5zcGVjdGVkUGFnZSkK
KyAgICA6IG1faW5zcGVjdGVkUGFnZSgmaW5zcGVjdGVkUGFnZSkKKyAgICAsIG1faW5zcGVjdG9y
Q2xpZW50KG1ha2VVbmlxdWU8QVBJOjpJbnNwZWN0b3JDbGllbnQ+KCkpCisjaWYgUExBVEZPUk0o
TUFDKQorICAgICwgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIoUnVuTG9vcDo6
bWFpbigpLCB0aGlzLCAmV2ViSW5zcGVjdG9yVUlQcm94eTo6Y2xvc2VGcm9udGVuZEFmdGVySW5h
Y3Rpdml0eVRpbWVyRmlyZWQpCisjZW5kaWYKK3sKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nl
c3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMp
OworfQorCitXZWJJbnNwZWN0b3JVSVByb3h5Ojp+V2ViSW5zcGVjdG9yVUlQcm94eSgpCit7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0SW5zcGVjdG9yQ2xpZW50KHN0ZDo6dW5p
cXVlX3B0cjxBUEk6Okluc3BlY3RvckNsaWVudD4mJiBpbnNwZWN0b3JDbGllbnQpCit7CisgICAg
aWYgKCFpbnNwZWN0b3JDbGllbnQpIHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQgPSBtYWtl
VW5pcXVlPEFQSTo6SW5zcGVjdG9yQ2xpZW50PigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9pbnNwZWN0b3JDbGllbnQgPSBXVEZNb3ZlKGluc3BlY3RvckNsaWVudCk7Cit9CisK
K3Vuc2lnbmVkIFdlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3Rpb25MZXZlbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGluc3BlY3RvckxldmVsRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpOworfQor
CitXZWJQcmVmZXJlbmNlcyYgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yUGFnZVByZWZl
cmVuY2VzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKKyAgICByZXR1
cm4gbV9pbnNwZWN0b3JQYWdlLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJUHJveHk6OmludmFsaWRhdGUoKQoreworICAgIGNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCk7CisgICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7CisKKyAgICByZXNldCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7Cit9CisKKy8vIFB1Ymxp
YyBBUElzCitib29sIFdlYkluc3BlY3RvclVJUHJveHk6OmlzRnJvbnQoKQoreworICAgIGlmICgh
bV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcGxh
dGZvcm1Jc0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6Y29ubmVjdCgp
Cit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghbV9pbnNwZWN0ZWRQYWdlLT5wcmVmZXJlbmNlcygpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2hvd01lc3NhZ2VTZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3Nob3dNZXNzYWdlU2VudCA9IHRydWU7CisgICAgbV9pZ25vcmVG
aXJzdEJyaW5nVG9Gcm9udCA9IHRydWU7CisKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKwor
ICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKSwgMCk7CisgICAgbV9pbnNwZWN0
ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvdygpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpc0Nvbm5lY3RlZCgpKSB7CisgICAgICAgIGJy
aW5nVG9Gcm9udCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29ubmVjdCgpOwor
CisgICAgLy8gRG9uJ3QgaWdub3JlIHRoZSBmaXJzdCBicmluZ1RvRnJvbnQgc28gaXQgb3BlbnMg
dGhlIEluc3BlY3Rvci4KKyAgICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6aGlkZSgpCit7CisgICAgaWYgKCFtX2luc3Bl
Y3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CisK
KyAgICBwbGF0Zm9ybUhpZGUoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpjbG9z
ZSgpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpDbG9zZSgpKTsK
KworICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6Y2xvc2VGb3JDcmFzaCgpCit7CisgICAgY2xvc2UoKTsKKworICAgIHBsYXRm
b3JtRGlkQ2xvc2VGb3JDcmFzaCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnJl
b3BlbigpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNsb3NlKCk7CisgICAgc2hvdygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6
OnJlc2V0U3RhdGUoKQoreworICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOworICAgIEFTU0VS
VChtX2luc3BlY3RvclBhZ2UpOworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlIHx8ICFtX2luc3Bl
Y3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNl
cygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7CisgICAgaW5zcGVjdG9yUGFnZVBy
ZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOworICAgIGluc3BlY3Rv
clBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCk7CisgICAg
aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQo
KTsKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dG
cmFtZSgpOworCisgICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6cmVzZXQoKQoreworICAgIGlmIChtX2luc3BlY3RlZFBhZ2UpIHsKKyAgICAg
ICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVj
dGVkUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UgPSBudWxscHRy
OworICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojp1cGRhdGVGb3JOZXdQYWdl
UHJvY2VzcyhXZWJQYWdlUHJveHkmIGluc3BlY3RlZFBhZ2UpCit7CisgICAgQVNTRVJUKCFtX2lu
c3BlY3RlZFBhZ2UpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlID0gJmluc3BlY3RlZFBhZ2U7Cisg
ICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSVByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVk
UGFnZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKKworICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCisg
ICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlVw
ZGF0ZUNvbm5lY3Rpb24oKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0RnJv
bnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmllcikKK3sK
KyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNw
ZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEZyb250ZW5kQ29ubmVj
dGlvbihjb25uZWN0aW9uSWRlbnRpZmllcikpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJv
eHk6OnNob3dDb25zb2xlKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBtX2luc3BlY3RlZFBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd0NvbnNvbGUoKSk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvd1Jlc291cmNlcygpCit7CisgICAgaWYgKCFtX2lu
c3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgp
OworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNo
b3dSZXNvdXJjZXMoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2hvd01haW5S
ZXNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lKQoreworICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsK
KworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93
TWFpblJlc291cmNlRm9yRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSkpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJUHJveHk6OmF0dGFjaEJvdHRvbSgpCit7CisgICAgYXR0YWNoKEF0dGFjaG1lbnRT
aWRlOjpCb3R0b20pOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmF0dGFjaFJpZ2h0
KCkKK3sKKyAgICBhdHRhY2goQXR0YWNobWVudFNpZGU6OlJpZ2h0KTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSVByb3h5OjphdHRhY2hMZWZ0KCkKK3sKKyAgICBhdHRhY2goQXR0YWNobWVudFNp
ZGU6OkxlZnQpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmF0dGFjaChBdHRhY2ht
ZW50U2lkZSBzaWRlKQoreworICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOworICAgIGlmICgh
bV9pbnNwZWN0ZWRQYWdlIHx8ICFtX2luc3BlY3RvclBhZ2UgfHwgKCFtX2lzQXR0YWNoZWQgJiYg
IXBsYXRmb3JtQ2FuQXR0YWNoKG1fY2FuQXR0YWNoKSkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1faXNBdHRhY2hlZCA9IHRydWU7CisgICAgbV9hdHRhY2htZW50U2lkZSA9IHNpZGU7CisKKyAg
ICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2htZW50U2lkZShz
dGF0aWNfY2FzdDx1aW50MzJfdD4oc2lkZSkpOworCisgICAgaWYgKG1faXNWaXNpYmxlKQorICAg
ICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hl
ZCh0cnVlKTsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yOjpTZXRBdHRhY2hlZCh0cnVlKSk7CisKKyAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUp
IHsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206CisgICAgICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkQm90dG9tKCkpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OgorICAgICAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hl
ZFJpZ2h0KCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6Okxl
ZnQ6CisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
VUk6OkF0dGFjaGVkTGVmdCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcGxhdGZv
cm1BdHRhY2goKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpkZXRhY2goKQorewor
ICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlIHx8ICFtX2luc3BlY3RvclBhZ2UgfHwgKCFtX2lzQXR0
YWNoZWQgJiYgbV9pc1Zpc2libGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzQXR0YWNo
ZWQgPSBmYWxzZTsKKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAgICAgICAgaW5zcGVjdG9yUGFn
ZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoZmFsc2UpOworCisgICAg
bV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVk
KGZhbHNlKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSTo6RGV0YWNoZWQoKSk7CisKKyAgICBwbGF0Zm9ybURldGFjaCgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclVJUHJveHk6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdo
dCkKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKKyAgICBpZiAoIW1faW5zcGVjdG9y
UGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCku
c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoaGVpZ2h0KTsKKyAgICBwbGF0Zm9ybVNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6
c2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKK3sKKyAgICBBU1NFUlQobV9p
bnNwZWN0b3JQYWdlKTsKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNoZWRX
aWR0aCh3aWR0aCk7CisgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRoKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXRTaGVldFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQoreworICAgIHBsYXRmb3JtU2V0U2hlZXRSZWN0KHJlY3QpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJUHJveHk6OnN0YXJ0V2luZG93RHJhZygpCit7CisgICAgcGxhdGZvcm1T
dGFydFdpbmRvd0RyYWcoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojp0b2dnbGVQ
YWdlUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1faXNQcm9maWxpbmdQYWdlKQorICAgICAgICBtX2luc3BlY3RlZFBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RvcFBhZ2VQcm9maWxpbmcoKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3Rvcjo6U3RhcnRQYWdlUHJvZmlsaW5nKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJv
eHk6OnRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlKSB7
CisgICAgICAgIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IHRydWU7CisgICAgICAg
IG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdG9wRWxlbWVu
dFNlbGVjdGlvbigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25uZWN0KCk7CisgICAgICAg
IG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdGFydEVsZW1l
bnRTZWxlY3Rpb24oKSk7CisgICAgfQorfQorCitib29sIFdlYkluc3BlY3RvclVJUHJveHk6Omlz
TWFpbk9yVGVzdEluc3BlY3RvclBhZ2UoY29uc3QgVVJMJiB1cmwpCit7CisgICAgLy8gVXNlIFVS
TCBzbyB3ZSBjYW4gY29tcGFyZSB0aGUgcGF0aHMgYW5kIHByb3RvY29scy4KKyAgICBVUkwgbWFp
blBhZ2VVUkwoVVJMKCksIFdlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSk7
CisgICAgaWYgKHVybC5wcm90b2NvbCgpID09IG1haW5QYWdlVVJMLnByb3RvY29sKCkgJiYgZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRoKCkpID09IGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyhtYWluUGFnZVVSTC5wYXRoKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IFdlIG1pZ2h0IG5vdCBoYXZlIGEgVGVzdCBVUkwgaW4gUHJvZHVjdGlvbiBidWlsZHMuCisgICAg
U3RyaW5nIHRlc3RQYWdlVVJMU3RyaW5nID0gV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9y
VGVzdFBhZ2VVUkwoKTsKKyAgICBpZiAodGVzdFBhZ2VVUkxTdHJpbmcuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFVSTCB0ZXN0UGFnZVVSTChVUkwoKSwgdGVzdFBhZ2VV
UkxTdHJpbmcpOworICAgIHJldHVybiB1cmwucHJvdG9jb2woKSA9PSB0ZXN0UGFnZVVSTC5wcm90
b2NvbCgpICYmIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSA9PSBkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXModGVzdFBhZ2VVUkwucGF0aCgpKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSVByb3h5OjpjcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIGlmIChtX2luc3BlY3Rv
clBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9yUGFnZSA9IHBsYXRmb3Jt
Q3JlYXRlRnJvbnRlbmRQYWdlKCk7CisgICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7CisgICAg
aWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIHRyYWNrSW5zcGVj
dG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG1faW5zcGVjdGVkUGFnZSk7CisKKyAgICAvLyBNYWtl
IHN1cmUgdGhlIGluc3BlY3RlZCBwYWdlIGhhcyBhIHJ1bm5pbmcgV2ViUHJvY2VzcyBzbyB3ZSBj
YW4gaW5zcGVjdCBpdC4KKyAgICBtX2luc3BlY3RlZFBhZ2UtPmxhdW5jaEluaXRpYWxQcm9jZXNz
SWZOZWNlc3NhcnkoKTsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSwgKnRoaXMpOworCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9FWFRFTlNJT05TKQorICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlciA9IFdl
Ykluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5OjpjcmVhdGUoKm1faW5zcGVjdG9y
UGFnZSk7CisjZW5kaWYKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpvcGVuTG9jYWxJ
bnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpCit7CisgICAg
aWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlLT5wcmVmZXJlbmNlcygpLmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLmhhc0xvY2FsRnJvbnRlbmQoKSkgeworICAgICAgICBzaG93KCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX3VuZGVyVGVzdCA9IHVuZGVyVGVzdDsKKyAgICBjcmVhdGVGcm9u
dGVuZFBhZ2UoKTsKKworICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOworICAgIGlmICghbV9p
bnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpFc3RhYmxpc2hDb25uZWN0aW9uKG1faW5zcGVj
dGVkUGFnZS0+aWRlbnRpZmllcigpLCBpbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCksIG1fdW5kZXJU
ZXN0LCBpbnNwZWN0aW9uTGV2ZWwoKSkpOworCisgICAgQVNTRVJUKCFtX2lzQWN0aXZlRnJvbnRl
bmQpOworICAgIG1faXNBY3RpdmVGcm9udGVuZCA9IHRydWU7CisgICAgbV9pbnNwZWN0ZWRQYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKCp0aGlzKTsKKworICAgIGlm
ICghbV91bmRlclRlc3QpIHsKKyAgICAgICAgbV9jYW5BdHRhY2ggPSBwbGF0Zm9ybUNhbkF0dGFj
aChjYW5BdHRhY2gpOworICAgICAgICBtX2lzQXR0YWNoZWQgPSBzaG91bGRPcGVuQXR0YWNoZWQo
KTsKKyAgICAgICAgbV9hdHRhY2htZW50U2lkZSA9IHN0YXRpY19jYXN0PEF0dGFjaG1lbnRTaWRl
PihpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2htZW50U2lkZSgpKTsK
KworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6
U2V0QXR0YWNoZWQobV9pc0F0dGFjaGVkKSk7CisKKyAgICAgICAgaWYgKG1faXNBdHRhY2hlZCkg
eworICAgICAgICAgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7CisgICAgICAgICAgICBj
YXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206CisgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20oKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6
OlJpZ2h0OgorICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6CisgICAgICAgICAgICAg
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNo
ZWRMZWZ0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOworCisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5B
dHRhY2gpKTsKKyAgICB9CisKKyAgICAvLyBOb3RpZnkgV2ViS2l0IGNsaWVudCB3aGVuIGEgbG9j
YWwgaW5zcGVjdG9yIGF0dGFjaGVzIHNvIHRoYXQgaXQgbWF5IGluc3RhbGwgZGVsZWdhdGVzIHBy
aW9yIHRvIHRoZSBfV0tJbnNwZWN0b3IgbG9hZGluZyBpdHMgZnJvbnRlbmQuCisgICAgbV9pbnNw
ZWN0ZWRQYWdlLT51aUNsaWVudCgpLmRpZEF0dGFjaExvY2FsSW5zcGVjdG9yKCptX2luc3BlY3Rl
ZFBhZ2UsICp0aGlzKTsKKworICAgIC8vIEJhaWwgb3V0IGlmIHRoZSBjbGllbnQgY2xvc2VkIHRo
ZSBpbnNwZWN0b3IgZnJvbSB0aGUgZGVsZWdhdGUgbWV0aG9kLgorICAgIGlmICghbV9pbnNwZWN0
b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPmxvYWRSZXF1
ZXN0KFVSTChVUkwoKSwgbV91bmRlclRlc3QgPyBXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0
b3JUZXN0UGFnZVVSTCgpIDogV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgp
KSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6b3BlbigpCit7CisgICAgaWYgKG1f
dW5kZXJUZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oR1RLKQorICAgIFNldEZvclNjb3BlPGJv
b2w+IGlzT3BlbmluZyhtX2lzT3BlbmluZywgdHJ1ZSk7CisjZW5kaWYKKworICAgIG1faXNWaXNp
YmxlID0gdHJ1ZTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKKworICAgIGlmIChtX2lzQXR0YWNo
ZWQpCisgICAgICAgIHBsYXRmb3JtQXR0YWNoKCk7CisgICAgZWxzZQorICAgICAgICBwbGF0Zm9y
bUNyZWF0ZUZyb250ZW5kV2luZG93KCk7CisKKyAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmRpZENsb3NlKCkKK3sKKyAgICBjbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR3VhcmQgYWdhaW5zdCBjYWxscyB0byBjbG9zZSgp
IG1hZGUgYnkgdGhlIGNsaWVudCB3aGlsZSBhbHJlYWR5IGNsb3NpbmcuCisgICAgaWYgKG1fY2xv
c2luZykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNldEZvclNjb3BlPGJvb2w+IHJlZW50
cmFuY3lQcm90ZWN0b3IobV9jbG9zaW5nLCB0cnVlKTsKKyAgICAKKyAgICAvLyBOb3RpZnkgV2Vi
S2l0IGNsaWVudCB3aGVuIGEgbG9jYWwgaW5zcGVjdG9yIGNsb3NlcyBzbyBpdCBjYW4gY2xlYXIg
X1dLSW5zcGVjdG9yRGVsZWdhdGUgYW5kIHBlcmZvcm0gb3RoZXIgY2xlYW51cC4KKyAgICBtX2lu
c3BlY3RlZFBhZ2UtPnVpQ2xpZW50KCkud2lsbENsb3NlTG9jYWxJbnNwZWN0b3IoKm1faW5zcGVj
dGVkUGFnZSwgKnRoaXMpOworCisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKyAgICBtX2lzUHJv
ZmlsaW5nUGFnZSA9IGZhbHNlOworICAgIG1fc2hvd01lc3NhZ2VTZW50ID0gZmFsc2U7CisgICAg
bV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOworCisgICAgdW50cmFja0luc3BlY3Rv
clBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJsZShtX2lzVmlzaWJsZSkpOworICAgIG1f
aW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUlQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBh
Z2UtPmlkZW50aWZpZXIoKSk7CisKKyAgICBpZiAobV9pc0FjdGl2ZUZyb250ZW5kKSB7CisgICAg
ICAgIG1faXNBY3RpdmVGcm9udGVuZCA9IGZhbHNlOworICAgICAgICBtX2luc3BlY3RlZFBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoKnRoaXMpOworICAgIH0K
KworICAgIGlmIChtX2lzQXR0YWNoZWQpCisgICAgICAgIHBsYXRmb3JtRGV0YWNoKCk7CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lPTlMpCisgICAgLy8gVGhpcyBleHRlbnNpb24gY29u
dHJvbGxlciBtYXkgYmUga2VwdCBhbGl2ZSBieSB0aGUgSVBDIGRpc3BhdGNoZXIgYmV5b25kIHRo
ZSBwb2ludAorICAgIC8vIHdoZW4gbV9pbnNwZWN0b3JQYWdlIGlzIGNsZWFyZWQgYmVsb3cuIE5v
dGlmeSB0aGUgY29udHJvbGxlciBzbyBpdCBjYW4gY2xlYW4gdXAgYmVmb3JlIHRoZW4uCisgICAg
bV9leHRlbnNpb25Db250cm9sbGVyLT5pbnNwZWN0b3JGcm9udGVuZFdpbGxDbG9zZSgpOworICAg
IG1fZXh0ZW5zaW9uQ29udHJvbGxlciA9IG51bGxwdHI7CisjZW5kaWYKKyAgICAKKyAgICAvLyBO
dWxsIG91dCBtX2luc3BlY3RvclBhZ2UgYWZ0ZXIgcGxhdGZvcm1EZXRhY2goKSwgc28gdGhlIHZp
ZXdzIGNhbiBiZSBjbGVhbmVkIHVwIGNvcnJlY3RseS4KKyAgICBtX2luc3BlY3RvclBhZ2UgPSBu
dWxscHRyOworCisgICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7CisgICAgbV9jYW5BdHRhY2ggPSBm
YWxzZTsKKyAgICBtX3VuZGVyVGVzdCA9IGZhbHNlOworCisgICAgcGxhdGZvcm1DbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnNlbmRN
ZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIW1faW5z
cGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAgICBp
ZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIGF1
dG9tYXRpb25TZXNzaW9uID0gbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2wo
KS5hdXRvbWF0aW9uU2Vzc2lvbigpKQorICAgICAgICBhdXRvbWF0aW9uU2Vzc2lvbi0+aW5zcGVj
dG9yRnJvbnRlbmRMb2FkZWQoKm1faW5zcGVjdGVkUGFnZSk7CisgICAgCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9FWFRFTlNJT05TKQorICAgIGlmIChtX2V4dGVuc2lvbkNvbnRyb2xsZXIpCisgICAg
ICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlci0+aW5zcGVjdG9yRnJvbnRlbmRMb2FkZWQoKTsKKyNl
bmRpZgorfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmJyaW5nVG9Gcm9udCgpCit7Cisg
ICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCB0ZWxscyB1cyB0byBk
byB0aGlzIG9uIGxvYWQuIFdlIHdhbnQgdG8KKyAgICAvLyBpZ25vcmUgaXQgb25jZSBpZiB3ZSBv
bmx5IHdhbnRlZCB0byBjb25uZWN0LiBUaGlzIGFsbG93cyB0aGUgSW5zcGVjdG9yIHRvIGxhdGVy
CisgICAgLy8gcmVxdWVzdCB0byBiZSBicm91Z2h0IHRvIHRoZSBmcm9udCB3aGVuIGEgYnJlYWtw
b2ludCBpcyBoaXQgb3Igc29tZSBvdGhlciBhY3Rpb24uCisgICAgaWYgKG1faWdub3JlRmlyc3RC
cmluZ1RvRnJvbnQpIHsKKyAgICAgICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNl
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1faXNWaXNpYmxlKQorICAgICAg
ICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworICAgIGVsc2UKKyAgICAgICAgb3BlbigpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQor
eworICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclVJUHJveHk6OmF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFi
bGUpCit7CisgICAgYm9vbCBwcmV2aW91c0NhbkF0dGFjaCA9IG1fY2FuQXR0YWNoOworCisgICAg
bV9jYW5BdHRhY2ggPSBtX2lzQXR0YWNoZWQgfHwgcGxhdGZvcm1DYW5BdHRhY2goYXZhaWxhYmxl
KTsKKworICAgIGlmIChwcmV2aW91c0NhbkF0dGFjaCA9PSBtX2NhbkF0dGFjaCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1faW5zcGVjdG9yUGFnZSAmJiAhbV91bmRlclRlc3QpCisgICAg
ICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERv
Y2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsKKworICAgIHBsYXRmb3JtQXR0YWNoQXZh
aWxhYmlsaXR5Q2hhbmdlZChtX2NhbkF0dGFjaCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQ
cm94eTo6c2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFy
YW5jZSBhcHBlYXJhbmNlKQoreworICAgIHBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShhcHBl
YXJhbmNlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpvcGVuVVJMRXh0ZXJuYWxs
eShjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2luc3BlY3RvckNsaWVudC0+b3BlblVSTEV4
dGVybmFsbHkoKnRoaXMsIHVybCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBwbGF0Zm9y
bUluc3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0
ZUluZm8pCit7CisgICAgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChi
b29sIGFjdGl2ZSkKK3sKKyAgICBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUgPSBhY3RpdmU7CisK
KyAgICBpZiAobV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlKSB7CisgICAgICAgIG1faWdu
b3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlOworICAgICAgICBpZiAoIW1faXNWaXNp
YmxlKQorICAgICAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChhY3RpdmUpCisgICAgICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgp
OworICAgIGVsc2UgaWYgKGlzQ29ubmVjdGVkKCkpCisgICAgICAgIGJyaW5nVG9Gcm9udCgpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChi
b29sIGFjdGl2ZSkKK3sKKyAgICBtX2lzUHJvZmlsaW5nUGFnZSA9IGFjdGl2ZTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpzZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoV2Vi
Q29yZTo6SW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlIGRldmVsb3BlclByZWZl
cmVuY2UsIE9wdGlvbmFsPGJvb2w+IG92ZXJyaWRlVmFsdWUpCit7CisgICAgc3dpdGNoIChkZXZl
bG9wZXJQcmVmZXJlbmNlKSB7CisgICAgY2FzZSBJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclBy
ZWZlcmVuY2U6OlByaXZhdGVDbGlja01lYXN1cmVtZW50RGVidWdNb2RlRW5hYmxlZDoKKyAgICAg
ICAgaWYgKG1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+d2Vi
c2l0ZURhdGFTdG9yZSgpLnNldFByaXZhdGVDbGlja01lYXN1cmVtZW50RGVidWdNb2RlKG92ZXJy
aWRlVmFsdWUgJiYgb3ZlcnJpZGVWYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9k
ZUVuYWJsZWQ6CisgICAgICAgIGlmIChtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgICAgICBtX2lu
c3BlY3RlZFBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlKG92ZXJyaWRlVmFsdWUgJiYgb3ZlcnJpZGVWYWx1ZS52YWx1ZSgpKTsKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2FzZSBJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVu
Y2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQ6CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
KyAgICAgICAgaWYgKG1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgICAgIG1faW5zcGVjdGVkUGFn
ZS0+c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwor
I2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5
OjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKK3sKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShhdmFp
bGFibGUpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGF2YWlsYWJsZSk7CisjZW5kaWYKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUs
IGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2
ZUFzKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlLT5wcmVmZXJlbmNlcygpLmRldmVsb3Bl
ckV4dHJhc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFmaWxlbmFt
ZS5pc0VtcHR5KCkpOworICAgIGlmIChmaWxlbmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHBsYXRmb3JtU2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwg
Zm9yY2VTYXZlQXMpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OmFwcGVuZChjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UtPnByZWZlcmVuY2VzKCkuZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIWZpbGVuYW1lLmlzRW1wdHkoKSk7CisgICAg
aWYgKGZpbGVuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxhdGZvcm1B
cHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpOworfQorCitib29sIFdlYkluc3BlY3RvclVJUHJveHk6
OnNob3VsZE9wZW5BdHRhY2hlZCgpCit7CisgICAgcmV0dXJuIGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLmluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCkgJiYgY2FuQXR0YWNoKCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6ZXZhbHVhdGVJbkZyb250ZW5kRm9yVGVzdGluZyhjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24pCit7CisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OkV2YWx1YXRlSW5Gcm9udGVuZEZvclRlc3RpbmcoZXhwcmVzc2lvbikpOworfQor
CisvLyBVbnN1cHBvcnRlZCBjb25maWd1cmF0aW9ucyBjYW4gdXNlIHRoZSBzdHVicyBwcm92aWRl
ZCBoZXJlLgorCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRG
T1JNKFdJTikKKworV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNy
ZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZy
b250ZW5kV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJl
c2V0U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3Rl
ZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6QXBwZWFyYW5jZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBT
dHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBj
b250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVu
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bUF0dGFjaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybURldGFjaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBs
YXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitT
dHJpbmcgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJJbnNw
ZWN0b3JVSVByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJ
bnNwZWN0b3JVSVByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQ
TEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
clVJUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JVSVByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDFkOWJhNGE0OGUxM2JlOTcxODEzZmMxODIzYzIyZDMx
ZDRhMjk0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3JVSVByb3h5LmgKQEAgLTAsMCArMSwzMzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQ
b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJ
T2JqZWN0LmgiCisjaW5jbHVkZSAiQXR0YWNobWVudC5oIgorI2luY2x1ZGUgIkRlYnVnZ2FibGVJ
bmZvRGF0YS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIldlYklu
c3BlY3RvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJXS0dlb21ldHJ5
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
KworT0JKQ19DTEFTUyBOU1VSTDsKK09CSkNfQ0xBU1MgTlNWaWV3OworT0JKQ19DTEFTUyBOU1dp
bmRvdzsKK09CSkNfQ0xBU1MgV0tXZWJJbnNwZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXI7CitPQkpD
X0NMQVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7CisjZWxpZiBQTEFURk9STShXSU4pCisj
aW5jbHVkZSAiV2ViVmlldy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IENlcnRpZmljYXRlSW5mbzsKK30KKworbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBJbnNwZWN0b3JD
bGllbnQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJGcmFtZVByb3h5Owor
Y2xhc3MgV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudDsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK2Ns
YXNzIFdlYlByZWZlcmVuY2VzOworI2lmIEVOQUJMRShJTlNQRUNUT1JfRVhURU5TSU9OUykKK2Ns
YXNzIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5OworI2VuZGlmCisKK2Vu
dW0gY2xhc3MgQXR0YWNobWVudFNpZGUgeworICAgIEJvdHRvbSwKKyAgICBSaWdodCwKKyAgICBM
ZWZ0LAorfTsKKworY2xhc3MgV2ViSW5zcGVjdG9yVUlQcm94eQorICAgIDogcHVibGljIEFQSTo6
T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6SW5zcGVjdG9yPgorICAgICwgcHVibGljIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyCisgICAgLCBwdWJsaWMgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwKKyNpZiBQTEFURk9STShXSU4pCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6V2luZG93TWVzc2Fn
ZUxpc3RlbmVyCisjZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3Rv
clVJUHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmIGluc3BlY3RlZFBhZ2UpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJbnNwZWN0b3JVSVByb3h5KGluc3BlY3RlZFBh
Z2UpKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBXZWJJbnNwZWN0b3JVSVByb3h5KFdlYlBhZ2VQ
cm94eSYpOworICAgIHZpcnR1YWwgfldlYkluc3BlY3RvclVJUHJveHkoKTsKKworICAgIHZvaWQg
aW52YWxpZGF0ZSgpOworCisgICAgQVBJOjpJbnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNsaWVu
dCgpIHsgcmV0dXJuICptX2luc3BlY3RvckNsaWVudDsgfQorICAgIHZvaWQgc2V0SW5zcGVjdG9y
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okluc3BlY3RvckNsaWVudD4mJik7CisKKyAgICAv
LyBQdWJsaWMgQVBJcworICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQorICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yUGFnZTsgfQorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9FWFRFTlNJT05TKQorICAgIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclBy
b3h5KiBleHRlbnNpb25Db250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnNpb25Db250
cm9sbGVyLmdldCgpOyB9CisjZW5kaWYKKworICAgIGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdCB7
IHJldHVybiAhIW1faW5zcGVjdG9yUGFnZTsgfQorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1Zpc2libGU7IH0KKyAgICBib29sIGlzRnJvbnQoKTsKKworICAgIHZvaWQg
Y29ubmVjdCgpOworCisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9p
ZCBjbG9zZSgpOworICAgIHZvaWQgY2xvc2VGb3JDcmFzaCgpOworICAgIHZvaWQgcmVvcGVuKCk7
CisgICAgdm9pZCByZXNldFN0YXRlKCk7CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCB1
cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJveHkmKTsKKworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBlbnVtIGNsYXNzIEluc3BlY3Rpb25UYXJnZXRUeXBlIHsgTG9jYWwsIFJlbW90ZSB9
OworICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNXaW5kb3c+IGNyZWF0ZUZyb250ZW5kV2luZG93KE5T
UmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZSk7CisKKyAgICB2b2lk
IGRpZEJlY29tZUFjdGl2ZSgpOworCisgICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRs
ZSgpIGNvbnN0OworICAgIHZvaWQgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKENHRmxvYXQg
PSAwKTsKKyAgICB2b2lkIHdpbmRvd0ZyYW1lRGlkQ2hhbmdlKCk7CisgICAgdm9pZCB3aW5kb3dG
dWxsU2NyZWVuRGlkQ2hhbmdlKCk7CisgICAgTlNXaW5kb3cgKmluc3BlY3RvcldpbmRvdygpIGNv
bnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yV2luZG93LmdldCgpOyB9CisKKyAgICB2b2lkIGNsb3Nl
RnJvbnRlbmRQYWdlKCk7CisgICAgdm9pZCBjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGlt
ZXJGaXJlZCgpOworCisgICAgdm9pZCBhdHRhY2htZW50Vmlld0RpZENoYW5nZShOU1ZpZXcgKm9s
ZFZpZXcsIE5TVmlldyAqbmV3Vmlldyk7CisgICAgdm9pZCBhdHRhY2htZW50V2lsbE1vdmVGcm9t
V2luZG93KE5TV2luZG93ICpvbGRXaW5kb3cpOworICAgIHZvaWQgYXR0YWNobWVudERpZE1vdmVU
b1dpbmRvdyhOU1dpbmRvdyAqbmV3V2luZG93KTsKKworICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgc2hlZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldFJlY3Q7IH0KKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oR1RLKQorICAgIEd0a1dpZGdldCogaW5zcGVjdG9yVmlldygpIGNvbnN0
IHsgcmV0dXJuIG1faW5zcGVjdG9yVmlldzsgfTsKKyAgICB2b2lkIHNldENsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8V2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudD4mJik7CisjZW5kaWYKKworICAgIHZv
aWQgc2hvd0NvbnNvbGUoKTsKKyAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNo
b3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5Kik7CisgICAgdm9pZCBvcGVuVVJM
RXh0ZXJuYWxseShjb25zdCBTdHJpbmcmIHVybCk7CisKKyAgICBBdHRhY2htZW50U2lkZSBhdHRh
Y2htZW50U2lkZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNobWVudFNpZGU7IH0KKyAgICBib29s
IGlzQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0YWNoZWQ7IH0KKyAgICB2b2lkIGF0
dGFjaFJpZ2h0KCk7CisgICAgdm9pZCBhdHRhY2hMZWZ0KCk7CisgICAgdm9pZCBhdHRhY2hCb3R0
b20oKTsKKyAgICB2b2lkIGF0dGFjaChBdHRhY2htZW50U2lkZSA9IEF0dGFjaG1lbnRTaWRlOjpC
b3R0b20pOworICAgIHZvaWQgZGV0YWNoKCk7CisKKyAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWdu
ZWQpOworCisgICAgdm9pZCBzZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7
CisKKyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOworCisgICAgYm9vbCBpc1Byb2ZpbGluZ1Bh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2lzUHJvZmlsaW5nUGFnZTsgfQorICAgIHZvaWQgdG9nZ2xl
UGFnZVByb2ZpbGluZygpOworCisgICAgYm9vbCBpc0VsZW1lbnRTZWxlY3Rpb25BY3RpdmUoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmU7IH0KKyAgICB2b2lkIHRvZ2ds
ZUVsZW1lbnRTZWxlY3Rpb24oKTsKKworICAgIGJvb2wgaXNVbmRlclRlc3QoKSBjb25zdCB7IHJl
dHVybiBtX3VuZGVyVGVzdDsgfQorCisgICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWls
YWJsZShib29sKTsKKworICAgIC8vIFByb3ZpZGVkIGJ5IHBsYXRmb3JtIFdlYkluc3BlY3RvclVJ
UHJveHkgaW1wbGVtZW50YXRpb25zLgorICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yUGFnZVVS
TCgpOworICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yVGVzdFBhZ2VVUkwoKTsKKyAgICBzdGF0
aWMgYm9vbCBpc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKGNvbnN0IFVSTCYpOworICAgIHN0YXRp
YyBEZWJ1Z2dhYmxlSW5mb0RhdGEgaW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpOworCisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1XaW5kb3dXaWR0aDsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWluaW11bVdpbmRvd0hlaWdodDsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBpbml0aWFsV2luZG93V2lkdGg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxX
aW5kb3dIZWlnaHQ7CisKKyAgICAvLyBUZXN0aW5nIG1ldGhvZHMuCisgICAgdm9pZCBldmFsdWF0
ZUluRnJvbnRlbmRGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIHZv
aWQgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisgICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisg
ICAgLy8gSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9G
cm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIENvbm5lY3Rpb25U
eXBlIGNvbm5lY3Rpb25UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29ubmVjdGlvblR5
cGU6OkxvY2FsOyB9CisKKyAgICBXZWJQYWdlUHJveHkqIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQ
YWdlKCk7CisgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCk7CisgICAgdm9p
ZCBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisKKyAgICB2b2lkIHBsYXRm
b3JtRGlkQ2xvc2VGb3JDcmFzaCgpOworICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Cisg
ICAgdm9pZCBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKKyAgICB2b2lkIHBsYXRmb3JtQnJpbmdUb0Zy
b250KCk7CisgICAgdm9pZCBwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsKKyAg
ICB2b2lkIHBsYXRmb3JtSGlkZSgpOworICAgIGJvb2wgcGxhdGZvcm1Jc0Zyb250KCk7CisgICAg
dm9pZCBwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCBw
bGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OkFwcGVhcmFuY2UpOworICAgIHZvaWQgcGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyYpOworICAgIHVuc2lnbmVkIHBsYXRmb3JtSW5zcGVjdGVkV2luZG93
SGVpZ2h0KCk7CisgICAgdW5zaWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpOwor
ICAgIHZvaWQgcGxhdGZvcm1BdHRhY2goKTsKKyAgICB2b2lkIHBsYXRmb3JtRGV0YWNoKCk7Cisg
ICAgdm9pZCBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2
b2lkIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCk7CisgICAgdm9pZCBw
bGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lk
IHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7CisgICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29k
ZWQsIGJvb2wgZm9yY2VTYXZlQXMpOworICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKKworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBib29sIHBsYXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCk7
CisjZWxzZQorICAgIGJvb2wgcGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0
YWNoKSB7IHJldHVybiB3ZWJQcm9jZXNzQ2FuQXR0YWNoOyB9CisjZW5kaWYKKworICAgIC8vIENh
bGxlZCBieSBXZWJJbnNwZWN0b3JVSVByb3h5IG1lc3NhZ2VzCisgICAgdm9pZCBvcGVuTG9jYWxJ
bnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpOworICAgIHZv
aWQgc2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCk7CisKKyAgICB2b2lkIHNl
bmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgZnJvbnRlbmRMb2Fk
ZWQoKTsKKyAgICB2b2lkIGRpZENsb3NlKCk7CisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAg
ICB2b2lkIGJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsKKyAgICB2b2lkIGF0dGFjaEF2YWls
YWJpbGl0eUNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCBzZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlKTsKKyAgICB2b2lkIGluc3Bl
Y3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzaG93Q2VydGlmaWNhdGUo
Y29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CisgICAgdm9pZCBlbGVtZW50U2VsZWN0
aW9uQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIHRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29s
KTsKKyAgICB2b2lkIHNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShXZWJDb3JlOjpJbnNw
ZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2UsIE9wdGlvbmFsPGJvb2w+KTsKKworICAg
IHZvaWQgc2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7CisgICAgdm9pZCBhcHBlbmQo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKKworICAgIGJv
b2wgY2FuQXR0YWNoKCkgY29uc3QgeyByZXR1cm4gbV9jYW5BdHRhY2g7IH0KKyAgICBib29sIHNo
b3VsZE9wZW5BdHRhY2hlZCgpOworCisgICAgdm9pZCBvcGVuKCk7CisKKyAgICB1bnNpZ25lZCBp
bnNwZWN0aW9uTGV2ZWwoKSBjb25zdDsKKworICAgIFdlYlByZWZlcmVuY2VzJiBpbnNwZWN0b3JQ
YWdlUHJlZmVyZW5jZXMoKSBjb25zdDsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGFw
cGx5Rm9yY2VkQXBwZWFyYW5jZSgpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspIHx8IFBM
QVRGT1JNKFdQRSkKKyAgICB2b2lkIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29uc3Q7
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFD
SyB3bmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKKyAgICBib29sIHJlZ2lzdGVy
V2luZG93Q2xhc3MoKTsKKyAgICB2b2lkIHdpbmRvd1JlY2VpdmVkTWVzc2FnZShIV05ELCBVSU5U
LCBXUEFSQU0sIExQQVJBTSkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIFdlYlBhZ2VQcm94eSog
bV9pbnNwZWN0ZWRQYWdlIHsgbnVsbHB0ciB9OworICAgIFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0
b3JQYWdlIHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okluc3BlY3RvckNs
aWVudD4gbV9pbnNwZWN0b3JDbGllbnQ7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0VYVEVOU0lP
TlMpCisgICAgUmVmUHRyPFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5PiBt
X2V4dGVuc2lvbkNvbnRyb2xsZXI7CisjZW5kaWYKKyAgICAKKyAgICBib29sIG1fdW5kZXJUZXN0
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNWaXNpYmxlIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
aXNBdHRhY2hlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2NhbkF0dGFjaCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2lzUHJvZmlsaW5nUGFnZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Nob3dNZXNz
YWdlU2VudCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250IHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9pc0FjdGl2ZUZyb250ZW5kIHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2xvc2luZyB7IGZh
bHNlIH07CisKKyAgICBBdHRhY2htZW50U2lkZSBtX2F0dGFjaG1lbnRTaWRlIHtBdHRhY2htZW50
U2lkZTo6Qm90dG9tfTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8V0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlcj4gbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKKyAgICBSZXRh
aW5QdHI8TlNXaW5kb3c+IG1faW5zcGVjdG9yV2luZG93OworICAgIFJldGFpblB0cjxXS1dlYklu
c3BlY3RvclVJUHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsKKyAgICBIYXNoTWFwPFN0
cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcDsKKyAgICBS
dW5Mb29wOjpUaW1lcjxXZWJJbnNwZWN0b3JVSVByb3h5PiBtX2Nsb3NlRnJvbnRlbmRBZnRlcklu
YWN0aXZpdHlUaW1lcjsKKyAgICBTdHJpbmcgbV91cmxTdHJpbmc7CisgICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IG1fc2hlZXRSZWN0OworICAgIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjpBcHBlYXJhbmNlIG1fZnJvbnRlbmRBcHBlYXJhbmNlIHsgV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OkFwcGVhcmFuY2U6OlN5c3RlbSB9OworICAgIGJvb2wgbV9pc09ic2Vydmlu
Z0NvbnRlbnRMYXlvdXRSZWN0IHsgZmFsc2UgfTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudD4gbV9jbGllbnQ7CisgICAg
R3RrV2lkZ2V0KiBtX2luc3BlY3RvclZpZXcgeyBudWxscHRyIH07CisgICAgR3RrV2lkZ2V0KiBt
X2luc3BlY3RvcldpbmRvdyB7IG51bGxwdHIgfTsKKyAgICBHdGtXaWRnZXQqIG1faGVhZGVyQmFy
IHsgbnVsbHB0ciB9OworICAgIFN0cmluZyBtX2luc3BlY3RlZFVSTFN0cmluZzsKKyAgICBib29s
IG1faXNPcGVuaW5nIHsgZmFsc2UgfTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBIV05EIG1f
aW5zcGVjdGVkVmlld1dpbmRvdyB7IG51bGxwdHIgfTsKKyAgICBIV05EIG1faW5zcGVjdGVkVmll
d1BhcmVudFdpbmRvdyB7IG51bGxwdHIgfTsKKyAgICBIV05EIG1faW5zcGVjdG9yVmlld1dpbmRv
dyB7IG51bGxwdHIgfTsKKyAgICBIV05EIG1faW5zcGVjdG9yRGV0YWNoV2luZG93IHsgbnVsbHB0
ciB9OworICAgIFJlZlB0cjxXZWJWaWV3PiBtX2luc3BlY3RvclZpZXc7CisjZW5kaWYKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUlQcm94eS5tZXNzYWdlcy5pbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNDg4NjQ2NmNhYzJkYTAyOTAxZjNiMTQ3MTE1YjdjM2I0ZjVmNjdkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3RvclVJUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSw2MSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+IFdlYkluc3BlY3RvclVJ
UHJveHkgeworICAgIE9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBi
b29sIHVuZGVyVGVzdCkKKyAgICBTZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50
IGNvbm5lY3Rpb25JZGVudGlmaWVyKQorCisgICAgU2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5n
IG1lc3NhZ2UpCisKKyAgICBGcm9udGVuZExvYWRlZCgpCisgICAgRGlkQ2xvc2UoKQorICAgIEJy
aW5nVG9Gcm9udCgpCisgICAgQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCisgICAgUmVvcGVu
KCkKKyAgICBSZXNldFN0YXRlKCkKKworICAgIFNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKKyAgICBPcGVu
VVJMRXh0ZXJuYWxseShTdHJpbmcgdXJsKQorCisgICAgSW5zcGVjdGVkVVJMQ2hhbmdlZChTdHJp
bmcgdXJsU3RyaW5nKQorICAgIFNob3dDZXJ0aWZpY2F0ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8gY2VydGlmaWNhdGVJbmZvKQorICAgIEVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0
aXZlKQorICAgIFRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKKyAgICBTZXRE
ZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50OjpEZXZl
bG9wZXJQcmVmZXJlbmNlIGRldmVsb3BlclByZWZlcmVuY2UsIE9wdGlvbmFsPGJvb2w+IG92ZXJy
aWRlVmFsdWUpCisKKyAgICBTYXZlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJv
b2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKKyAgICBBcHBlbmQoU3RyaW5nIGZp
bGVuYW1lLCBTdHJpbmcgY29udGVudCkKKworICAgIEF0dGFjaEJvdHRvbSgpCisgICAgQXR0YWNo
UmlnaHQoKQorICAgIEF0dGFjaExlZnQoKQorICAgIERldGFjaCgpCisKKyAgICBBdHRhY2hBdmFp
bGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQorCisgICAgU2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQodW5zaWduZWQgaGVpZ2h0KQorICAgIFNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWdu
ZWQgd2lkdGgpCisKKyAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisK
KyAgICBTdGFydFdpbmRvd0RyYWcoKQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAK
aW5kZXggMzU5MDc1YWZlOTkwYjliMmNkNWQwMDBlZDgxYmMzNDc0NWE2YTE3My4uOWI5NDhmYjg4
ZmQ3ZWI2OTllMDRmYmVmZmQ3YTJhMzExMDhkMzJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5m
by5oIgogI2luY2x1ZGUgIkFQSUluc3BlY3RvckNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHkuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVJbnNwZWN0b3JVdGlscy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRGVidWdnYWJsZVR5cGUuaD4KICNpbmNsdWRl
IDxnaW8vZ2lvLmg+CkBAIC00MCwxMSArNDAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVibGljIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5Q2xpZW50IHsKK2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVi
bGljIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEKCk7CiBwdWJsaWM6CiAgICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVtb3RlSW5z
cGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQsIHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWlu
dDY0X3QgdGFyZ2V0SUQpCi0gICAgICAgIDogbV9wcm94eShSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6Y3JlYXRlKCkpCisgICAgICAgIDogbV9wcm94eShSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjpjcmVhdGUoKSkKICAgICAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQp
CiAgICAgICAgICwgbV9jb25uZWN0aW9uSUQoY29ubmVjdGlvbklEKQogICAgICAgICAsIG1fdGFy
Z2V0SUQodGFyZ2V0SUQpCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0K
IAotICAgIC8vIE1BUks6IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IG1ldGhvZHMKKyAg
ICAvLyBNQVJLOiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50IG1ldGhvZHMKIAogICAg
IHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICB7
CkBAIC05NSwxMyArOTUsMTMgQEAgcHVibGljOgogICAgICAgICBtX2luc3BlY3RvckNsaWVudC5j
bG9zZUZyb21Gcm9udGVuZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXRJRCk7CiAgICAgfQogCi0g
ICAgUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbkZvclJlbW90
ZUluc3BlY3RvcihSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSYpIG92ZXJyaWRlCisgICAgUmVmPEFQ
STo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbkZvclJlbW90ZUluc3BlY3Rv
cihSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Jikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJl
dHVybiBBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1fcHJveHk7CisgICAgUmVm
PFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk+IG1fcHJveHk7CiAgICAgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKICAgICB1aW50NjRfdCBtX2Nvbm5lY3Rpb25JRDsK
ICAgICB1aW50NjRfdCBtX3RhcmdldElEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaAppbmRl
eCAzMjQzMTZkNWRlYWE1YzZiYjRjMzMwNWJiNWM4Mjk2ZDNhZGE0ZjFlLi5iOTQ3ZjE5MWM0NDQ1
YjEyN2U3OWI0NTYxNTRiODQ1OWM1OWFhYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
aApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50OwogY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHk7Ci1jbGFzcyBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTsKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk7CiAKIGNs
YXNzIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlH
dGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZWUw
ZTNhZDUzMDg0ZWM2ZDE1YmZmZjNlOGJhOTMwMGViMmFjZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuaCIKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiUmVt
b3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5
LmgiCi0jaW5jbHVkZSAiV2ViS2l0SW5zcGVjdG9yV2luZG93LmgiCi0jaW5jbHVkZSAiV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNp
b25pbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6dXBkYXRlV2luZG93VGl0bGUoY29uc3QgQ1N0cmluZyYgdGFyZ2V0TmFtZSkKLXsKLSAg
ICBpZiAoIW1fd2luZG93KQotICAgICAgICByZXR1cm47Ci0gICAgd2Via2l0SW5zcGVjdG9yV2lu
ZG93U2V0U3VidGl0bGUoV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1cobV93aW5kb3cpLCAhdGFyZ2V0
TmFtZS5pc051bGwoKSA/IHRhcmdldE5hbWUuZGF0YSgpIDogbnVsbHB0cik7Ci19Ci0KLXN0YXRp
YyB2b2lkIHJlbW90ZUluc3BlY3RvclZpZXdEZXN0cm95ZWQoUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkqIGluc3BlY3RvclByb3h5KQotewotICAgIGluc3BlY3RvclByb3h5LT5jbG9zZUZyb21DcmFz
aCgpOwotfQotCi1XZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgQVNTRVJUKCFtX3dlYlZpZXcp
OwotCi0gICAgYXV0byBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5n
KCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOwotI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkK
LSAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJbnNwZWN0b3IgaW4g
ZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcgc2V0dGluZ3MuCi0gICAgcHJlZmVyZW5jZXMt
PnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldExv
Z3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwotI2VuZGlmCi0gICAg
YXV0byBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShXZWJLaXQ6OmRlZmF1bHRJbnNw
ZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShudWxscHRyKSk7Ci0KLSAgICBhdXRvIHBh
Z2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAg
cGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0
b3JQcm9jZXNzUG9vbChpbnNwZWN0b3JMZXZlbEZvclBhZ2UobnVsbHB0cikpKTsKLSAgICBwYWdl
Q29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMucHRyKCkpOwotICAgIHBh
Z2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigpKTsKLSAgICBtX3dl
YlZpZXcgPSBHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKCpwYWdlQ29uZmlndXJh
dGlvbi5wdHIoKSkpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYlZpZXcsICJk
ZXN0cm95IiwgR19DQUxMQkFDSyhyZW1vdGVJbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7
Ci0gICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX3dlYlZpZXcpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViVmlldykpOwotCi0gICAgbV93aW5kb3cgPSB3ZWJr
aXRJbnNwZWN0b3JXaW5kb3dOZXcoKTsKLSNpZiBVU0UoR1RLNCkKLSAgICBndGtfd2luZG93X3Nl
dF9jaGlsZChHVEtfV0lORE9XKG1fd2luZG93KSwgbV93ZWJWaWV3KTsKLSNlbHNlCi0gICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3dpbmRvdyksIG1fd2ViVmlldyk7Ci0gICAg
Z3RrX3dpZGdldF9zaG93KG1fd2ViVmlldyk7Ci0jZW5kaWYKLQotICAgIGdfb2JqZWN0X2FkZF93
ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV93aW5kb3cpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4o
Jm1fd2luZG93KSk7Ci0gICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1cobV93aW5kb3cp
KTsKLQotICAgIHJldHVybiB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVX
X0JBU0UobV93ZWJWaWV3KSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmIChtX3dlYlZpZXcp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHdlYlBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2Uo
V0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSkpCi0gICAgICAgICAgICB3ZWJQYWdlLT5j
bG9zZSgpOwotICAgIH0KLSAgICBpZiAobV93aW5kb3cpCi0gICAgICAgIGd0a193aWRnZXRfZGVz
dHJveShtX3dpbmRvdyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtUmVzZXRTdGF0ZSgpCi17Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBpZiAobV93aW5kb3cpCi0gICAgICAgIGd0a193
aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKG1fd2luZG93KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJl
bW90ZUZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdB
c3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBHRmlsZSogZmls
ZSA9IEdfRklMRShzb3VyY2VPYmplY3QpOwotICAgIGlmICghZ19maWxlX3JlcGxhY2VfY29udGVu
dHNfZmluaXNoKGZpbGUsIHJlc3VsdCwgbnVsbHB0ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGF1dG8qIHBhZ2UgPSBzdGF0aWNfY2FzdDxXZWJQYWdlUHJveHkqPih1c2VyRGF0
YSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlKSk7Ci0g
ICAgcGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0
aC5nZXQoKSkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNh
dmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9v
bCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZm9yY2VTYXZlRGlhbG9nKTsKLQotICAgIEdSZWZQdHI8R3RrRmlsZUNob29zZXJOYXRpdmU+
IGRpYWxvZyA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUgRmls
ZSIsCi0gICAgICAgIEdUS19XSU5ET1cobV93aW5kb3cpLCBHVEtfRklMRV9DSE9PU0VSX0FDVElP
Tl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwiKSk7Ci0KLSAgICBHdGtGaWxlQ2hvb3NlciogY2hvb3Nl
ciA9IEdUS19GSUxFX0NIT09TRVIoZGlhbG9nLmdldCgpKTsKLSNpZiAhVVNFKEdUSzQpCi0gICAg
Z3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRlX2NvbmZpcm1hdGlvbihjaG9vc2VyLCBU
UlVFKTsKLSNlbmRpZgotCi0gICAgLy8gU29tZSBpbnNwZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3Ig
aW5zdGFuY2UpIHVzZSBhIGN1c3RvbSBVUkkgc2NoZW1lLCBzdWNoCi0gICAgLy8gYXMgd2ViLWlu
c3BlY3Rvci4gU28gd2UgY2FuJ3QgcmVseSBvbiB0aGUgVVJMIGJlaW5nIGEgdmFsaWQgZmlsZTov
Ly8gVVJMCi0gICAgLy8gdW5mb3J0dW5hdGVseS4KLSAgICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0
ZWRVUkwpOwotICAgIC8vIFN0cmlwIGxlYWRpbmcgLyBjaGFyYWN0ZXIuCi0gICAgZ3RrX2ZpbGVf
Y2hvb3Nlcl9zZXRfY3VycmVudF9uYW1lKGNob29zZXIsIHVybC5wYXRoKCkuc3Vic3RyaW5nKDEp
LnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFU
SVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBUKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKLSAgICBDU3RyaW5nIGRh
dGFTdHJpbmc7Ci0gICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgaWYgKCFiYXNlNjRE
ZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOwotICAgIH0g
ZWxzZQotICAgICAgICBkYXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7Ci0KLSAgICBjb25zdCBj
aGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRh
dGFWZWN0b3IuZGF0YSgpOwotICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNO
dWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7Ci0gICAgR1Jl
ZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNo
b29zZXIpKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUu
Z2V0KCkpKTsKLSAgICBnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19hc3luYyhmaWxlLmdldCgpLCBk
YXRhLCBkYXRhTGVuZ3RoLCBudWxscHRyLCBmYWxzZSwKLSAgICAgICAgR19GSUxFX0NSRUFURV9S
RVBMQUNFX0RFU1RJTkFUSU9OLCBudWxscHRyLCByZW1vdGVGaWxlUmVwbGFjZUNvbnRlbnRzQ2Fs
bGJhY2ssIG1faW5zcGVjdG9yUGFnZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpCi17Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5j
ZSkKLXsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdp
bmRvd0RyYWcoKQotewotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bU9wZW5VUkxFeHRlcm5hbGx5KGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRl
SW5mbyYpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlHdGsuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3Rr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mMDlkZWU0ZmRjZTFjMzNlMTg3OGU4MjRlMmNkMzg2ZTI2NjBiZTll
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0
ay9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcApAQCAtMCwwICsxLDE4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oIgorCisjaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JV
SU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eS5oIgorI2luY2x1ZGUg
IldlYktpdEluc3BlY3RvcldpbmRvdy5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2Vy
dGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5nLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6dXBkYXRl
V2luZG93VGl0bGUoY29uc3QgQ1N0cmluZyYgdGFyZ2V0TmFtZSkKK3sKKyAgICBpZiAoIW1fd2lu
ZG93KQorICAgICAgICByZXR1cm47CisgICAgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0
bGUoV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1cobV93aW5kb3cpLCAhdGFyZ2V0TmFtZS5pc051bGwo
KSA/IHRhcmdldE5hbWUuZGF0YSgpIDogbnVsbHB0cik7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW90
ZUluc3BlY3RvclZpZXdEZXN0cm95ZWQoUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSogaW5zcGVj
dG9yUHJveHkpCit7CisgICAgaW5zcGVjdG9yUHJveHktPmNsb3NlRnJvbUNyYXNoKCk7Cit9CisK
K1dlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DcmVhdGVG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIEFTU0VSVCghbV93ZWJWaWV3KTsKKworICAg
IGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2Vi
S2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCisgICAgLy8g
QWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1
aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgorICAgIHByZWZlcmVuY2VzLT5zZXREZXZl
bG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1l
c3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorICAgIGF1dG8gcGFn
ZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoV2ViS2l0OjpkZWZhdWx0SW5zcGVjdG9yUGFn
ZUdyb3VwSWRlbnRpZmllckZvclBhZ2UobnVsbHB0cikpOworCisgICAgYXV0byBwYWdlQ29uZmln
dXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmV2ViS2l0OjpkZWZhdWx0SW5zcGVjdG9yUHJvY2Vz
c1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKG51bGxwdHIpKSk7CisgICAgcGFnZUNvbmZpZ3Vy
YXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsKKyAgICBwYWdlQ29uZmln
dXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7CisgICAgbV93ZWJWaWV3ID0g
R1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZSgqcGFnZUNvbmZpZ3VyYXRpb24ucHRy
KCkpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJWaWV3LCAiZGVzdHJveSIs
IEdfQ0FMTEJBQ0socmVtb3RlSW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOworICAgIGdf
b2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV93ZWJWaWV3KSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZtX3dlYlZpZXcpKTsKKworICAgIG1fd2luZG93ID0gd2Via2l0SW5zcGVj
dG9yV2luZG93TmV3KCk7CisjaWYgVVNFKEdUSzQpCisgICAgZ3RrX3dpbmRvd19zZXRfY2hpbGQo
R1RLX1dJTkRPVyhtX3dpbmRvdyksIG1fd2ViVmlldyk7CisjZWxzZQorICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIobV93aW5kb3cpLCBtX3dlYlZpZXcpOworICAgIGd0a193aWRn
ZXRfc2hvdyhtX3dlYlZpZXcpOworI2VuZGlmCisKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2lu
dGVyKEdfT0JKRUNUKG1fd2luZG93KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dpbmRv
dykpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKG1fd2luZG93KSk7CisKKyAg
ICByZXR1cm4gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG1f
d2ViVmlldykpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
Q2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmIChtX3dlYlZpZXcpIHsKKyAg
ICAgICAgaWYgKGF1dG8qIHdlYlBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSkpCisgICAgICAgICAgICB3ZWJQYWdlLT5jbG9zZSgp
OworICAgIH0KKyAgICBpZiAobV93aW5kb3cpCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveSht
X3dpbmRvdyk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1S
ZXNldFN0YXRlKCkKK3sKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUJyaW5nVG9Gcm9udCgpCit7CisgICAgaWYgKG1fd2luZG93KQorICAgICAgICBndGtfd2lu
ZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhtX3dpbmRvdykpOworfQorCitzdGF0aWMgdm9pZCByZW1v
dGVGaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2soR09iamVjdCogc291cmNlT2JqZWN0LCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgR0ZpbGUqIGZpbGUg
PSBHX0ZJTEUoc291cmNlT2JqZWN0KTsKKyAgICBpZiAoIWdfZmlsZV9yZXBsYWNlX2NvbnRlbnRz
X2ZpbmlzaChmaWxlLCByZXN1bHQsIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvKiBwYWdlID0gc3RhdGljX2Nhc3Q8V2ViUGFnZVByb3h5Kj4odXNlckRhdGEp
OworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3BhdGgoZmlsZSkpOworICAg
IHBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRTYXZlKHBhdGgu
Z2V0KCkpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNh
dmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9v
bCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZm9yY2VTYXZlRGlhbG9nKTsKKworICAgIEdSZWZQdHI8R3RrRmlsZUNob29zZXJOYXRpdmU+
IGRpYWxvZyA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUgRmls
ZSIsCisgICAgICAgIEdUS19XSU5ET1cobV93aW5kb3cpLCBHVEtfRklMRV9DSE9PU0VSX0FDVElP
Tl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwiKSk7CisKKyAgICBHdGtGaWxlQ2hvb3NlciogY2hvb3Nl
ciA9IEdUS19GSUxFX0NIT09TRVIoZGlhbG9nLmdldCgpKTsKKyNpZiAhVVNFKEdUSzQpCisgICAg
Z3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRlX2NvbmZpcm1hdGlvbihjaG9vc2VyLCBU
UlVFKTsKKyNlbmRpZgorCisgICAgLy8gU29tZSBpbnNwZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3Ig
aW5zdGFuY2UpIHVzZSBhIGN1c3RvbSBVUkkgc2NoZW1lLCBzdWNoCisgICAgLy8gYXMgd2ViLWlu
c3BlY3Rvci4gU28gd2UgY2FuJ3QgcmVseSBvbiB0aGUgVVJMIGJlaW5nIGEgdmFsaWQgZmlsZTov
Ly8gVVJMCisgICAgLy8gdW5mb3J0dW5hdGVseS4KKyAgICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0
ZWRVUkwpOworICAgIC8vIFN0cmlwIGxlYWRpbmcgLyBjaGFyYWN0ZXIuCisgICAgZ3RrX2ZpbGVf
Y2hvb3Nlcl9zZXRfY3VycmVudF9uYW1lKGNob29zZXIsIHVybC5wYXRoKCkuc3Vic3RyaW5nKDEp
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFU
SVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBUKQorICAgICAg
ICByZXR1cm47CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKKyAgICBDU3RyaW5nIGRh
dGFTdHJpbmc7CisgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKKyAgICAgICAgaWYgKCFiYXNlNjRE
ZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOworICAgIH0g
ZWxzZQorICAgICAgICBkYXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7CisKKyAgICBjb25zdCBj
aGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRh
dGFWZWN0b3IuZGF0YSgpOworICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNO
dWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7CisgICAgR1Jl
ZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNo
b29zZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUu
Z2V0KCkpKTsKKyAgICBnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19hc3luYyhmaWxlLmdldCgpLCBk
YXRhLCBkYXRhTGVuZ3RoLCBudWxscHRyLCBmYWxzZSwKKyAgICAgICAgR19GSUxFX0NSRUFURV9S
RVBMQUNFX0RFU1RJTkFUSU9OLCBudWxscHRyLCByZW1vdGVGaWxlUmVwbGFjZUNvbnRlbnRzQ2Fs
bGJhY2ssIG1faW5zcGVjdG9yUGFnZSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQ
cm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKK30K
Kwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChj
b25zdCBGbG9hdFJlY3QmKQoreworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBw
ZWFyYW5jZSkKK3sKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bVN0YXJ0V2luZG93RHJhZygpCit7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1PcGVuVVJMRXh0ZXJuYWxseShjb25zdCBTdHJpbmcmKQoreworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0
IENlcnRpZmljYXRlSW5mbyYpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5OWM0NDY1NzY4OGEyOGFiYWU3YWEx
MDFhYjIyNjc3YmQ4MTEzYWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0
b3JQcm94eUNsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgV2ViSW5zcGVjdG9yUHJveHk7Ci0KLWNsYXNzIFdlYkluc3BlY3RvclByb3h5Q2xpZW50
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJJbnNwZWN0b3JQcm94eUNsaWVudCgpID0gZGVm
YXVsdDsKLSAgICB2aXJ0dWFsIGJvb2wgb3BlbldpbmRvdyhXZWJJbnNwZWN0b3JQcm94eSYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2UoV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGJyaW5nVG9Gcm9udChXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChXZWJJbnNwZWN0b3JQcm94eSYsIGNv
bnN0IFN0cmluZyYgdXJsKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGF0dGFjaChXZWJJbnNwZWN0
b3JQcm94eSYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGV0YWNoKFdlYkluc3BlY3RvclByb3h5
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hlZEhlaWdodChXZWJJbnNw
ZWN0b3JQcm94eSYsIHVuc2lnbmVkIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRD
aGFuZ2VBdHRhY2hlZFdpZHRoKFdlYkluc3BlY3RvclByb3h5JiwgdW5zaWduZWQgd2lkdGgpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQXR0YWNoQXZhaWxhYmlsaXR5KFdlYkluc3Bl
Y3RvclByb3h5JiwgYm9vbCBhdmFpbGFibGUpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9X
ZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOWUyZGE2NDNhMzNhZWFkOWYxYjk4NDFkM2U2ZGEwZjExZWQxZWMzZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDU2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEd1c3Rhdm8gTm9yb25o
YSBTaWx2YSA8Z25zQGdub21lLm9yZz4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlv
bi5oIgotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25BY3Rpb24uaCIKLSNpbmNsdWRlICJXS0FycmF5
LmgiCi0jaW5jbHVkZSAiV0tDb250ZXh0TWVudUl0ZW0uaCIKLSNpbmNsdWRlICJXS011dGFibGVB
cnJheS5oIgotI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgotI2luY2x1
ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5oIgotI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgot
I2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5Lmgi
Ci0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlm
aWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRl
YnVnZ2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIHZvaWQgaW5zcGVjdG9yVmlld0Rl
c3Ryb3llZChHdGtXaWRnZXQqLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBXZWJJbnNwZWN0
b3JQcm94eSogaW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+
KHVzZXJEYXRhKTsKLQotICAgIC8vIEluZm9ybSBXZWJQcm9jZXNzIGFib3V0IHdlYmluc3BlY3Rv
ciBjbG9zdXJlLiBOb3QgZG9pbmcgc28sCi0gICAgLy8gcmVzdWx0cyBpbiBmYWlsdXJlIG9mIHN1
YnNlcXVlbnQgaW52b2NhdGlvbiBvZiB3ZWJpbnNwZWN0b3IuCi0gICAgaW5zcGVjdG9yUHJveHkt
PmNsb3NlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldENsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8V2ViSW5zcGVjdG9yUHJveHlDbGllbnQ+JiYgY2xpZW50KQotewotICAgIG1fY2xp
ZW50ID0gV1RGTW92ZShjbGllbnQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRh
dGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9y
V2luZG93KTsKLSAgICB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShXRUJLSVRfSU5T
UEVDVE9SX1dJTkRPVyhtX2luc3BlY3RvcldpbmRvdyksICFtX2luc3BlY3RlZFVSTFN0cmluZy5p
c0VtcHR5KCkgPyBtX2luc3BlY3RlZFVSTFN0cmluZy51dGY4KCkuZGF0YSgpIDogbnVsbHB0cik7
Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdL
UGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTZWN1cml0eU9yaWdpblJlZiwgV0tTdHJpbmdSZWYsIFdL
U3RyaW5nUmVmLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWdu
ZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhw
ZWN0ZWRVc2FnZSwgY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWF4PHVuc2lnbmVk
IGxvbmcgbG9uZz4oZXhwZWN0ZWRVc2FnZSwgY3VycmVudERhdGFiYXNlVXNhZ2UgKiAxLjI1KTsK
LX0KLQotc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0RpZENyYXNoKFdLUGFnZVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKLXsKLSAgICBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJv
eHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNs
aWVudEluZm8pKTsKLSAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOwotICAgIHdlYkluc3Bl
Y3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTmF2aWdhdGlvbkFjdGlv
blJlZiBuYXZpZ2F0aW9uQWN0aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVu
ZXJSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICAvLyBBbGxv
dyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCi0gICAgQVBJOjpGcmFtZUlu
Zm8qIHNvdXJjZUZyYW1lID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zb3VyY2VGcmFt
ZSgpOwotICAgIGlmIChzb3VyY2VGcmFtZSAmJiAhc291cmNlRnJhbWUtPmlzTWFpbkZyYW1lKCkp
IHsKLSAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBjb25zdCBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJv
eHkgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJbnNwZWN0b3JQcm94eSo+KGNsaWVudEluZm8pOwot
ICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVzdCgpOwot
Ci0gICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KLSAgICBp
ZiAoV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVxdWVzdC51
cmwoKSkpIHsKLSAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGxv
YWRpbmcgaW4gdGhlIGluc3BlY3RvcidzIHBhZ2UuCi0gICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+
aWdub3JlKCk7Ci0KLSAgICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQg
cGFnZS4KLSAgICB3ZWJJbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkUGFnZSgpLT5sb2FkUmVxdWVz
dChXVEZNb3ZlKHJlcXVlc3QpKTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0Q29udGV4dE1lbnVGcm9t
UHJvcG9zZWRNZW51KFdLUGFnZVJlZiBwYWdlUmVmLCBXS0FycmF5UmVmIHByb3Bvc2VkTWVudVJl
ZiwgV0tBcnJheVJlZiogbmV3TWVudVJlZiwgV0tIaXRUZXN0UmVzdWx0UmVmLCBXS1R5cGVSZWYs
IGNvbnN0IHZvaWQqKQotewotICAgIFdLTXV0YWJsZUFycmF5UmVmIG1lbnVJdGVtcyA9IFdLTXV0
YWJsZUFycmF5Q3JlYXRlKCk7Ci0KLSAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZShw
cm9wb3NlZE1lbnVSZWYpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
ewotICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJlZiBjb250ZXh0TWVudUl0ZW0gPSBzdGF0aWNf
Y2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHByb3Bvc2Vk
TWVudVJlZiwgaSkpOwotICAgICAgICBzd2l0Y2ggKFdLQ29udGV4dE1lbnVJdGVtR2V0VGFnKGNv
bnRleHRNZW51SXRlbSkpIHsKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVu
TGlua0luTmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5J
bWFnZUluTmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5G
cmFtZUluTmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5N
ZWRpYUluTmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ0Rvd25s
b2FkTGlua1RvRGlzazoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9h
ZEltYWdlVG9EaXNrOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZW51SXRlbXMsIGNvbnRleHRNZW51SXRlbSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgICpuZXdNZW51UmVmID0g
bWVudUl0ZW1zOwotfQotCi1zdGF0aWMgUmVmPFdlYnNpdGVEYXRhU3RvcmU+IGluc3BlY3Rvcldl
YnNpdGVEYXRhU3RvcmUoKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJzaW9uZWREaXJl
Y3RvcnkgPSAid2Via2l0Z3RrLSIgV0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORyBHX0RJUl9T
RVBBUkFUT1JfUyAiV2ViSW5zcGVjdG9yIiBHX0RJUl9TRVBBUkFUT1JfUzsKLSAgICBTdHJpbmcg
YmFzZUNhY2hlRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZ19nZXRfdXNl
cl9jYWNoZV9kaXIoKSksIHZlcnNpb25lZERpcmVjdG9yeSk7Ci0gICAgU3RyaW5nIGJhc2VEYXRh
RGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KEZpbGVTeXN0
ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZ19nZXRfdXNlcl9kYXRhX2Rp
cigpKSwgdmVyc2lvbmVkRGlyZWN0b3J5KTsKLQotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IFdl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uOjpjcmVhdGUoSXNQZXJzaXN0ZW50OjpZZXMsIFdp
bGxDb3B5UGF0aHNGcm9tRXhpc3RpbmdDb25maWd1cmF0aW9uOjpZZXMpOwotICAgIGNvbmZpZ3Vy
YXRpb24tPnNldE5ldHdvcmtDYWNoZURpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoYmFzZUNhY2hlRGlyZWN0b3J5LCAiV2ViS2l0Q2FjaGUiKSk7Ci0gICAgY29u
ZmlndXJhdGlvbi0+c2V0QXBwbGljYXRpb25DYWNoZURpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZUNhY2hlRGlyZWN0b3J5LCAiYXBwbGljYXRpb25zIikp
OwotICAgIGNvbmZpZ3VyYXRpb24tPnNldEhTVFNTdG9yYWdlRGlyZWN0b3J5KFN0cmluZyhiYXNl
Q2FjaGVEaXJlY3RvcnkpKTsKLSAgICBjb25maWd1cmF0aW9uLT5zZXRDYWNoZVN0b3JhZ2VEaXJl
Y3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VDYWNoZURpcmVj
dG9yeSwgIkNhY2hlU3RvcmFnZSIpKTsKLSAgICBjb25maWd1cmF0aW9uLT5zZXRMb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRh
RGlyZWN0b3J5LCAibG9jYWxzdG9yYWdlIikpOwotICAgIGNvbmZpZ3VyYXRpb24tPnNldEluZGV4
ZWREQkRhdGFiYXNlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChiYXNlRGF0YURpcmVjdG9yeSwgImluZGV4ZWRkYiIpKTsKLSAgICBjb25maWd1cmF0aW9uLT5z
ZXRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQoYmFzZURhdGFEaXJlY3RvcnksICJkYXRhYmFzZXMiKSk7Ci0gICAgY29uZmlndXJhdGlv
bi0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeShGaWxlU3lzdGVtOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQoYmFzZURhdGFEaXJlY3RvcnksICJpdHAiKSk7Ci0gICAgY29uZmln
dXJhdGlvbi0+c2V0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeShGaWxlU3lzdGVt
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZURhdGFEaXJlY3RvcnksICJzZXJ2aWNld29y
a2VycyIpKTsKLSAgICBjb25maWd1cmF0aW9uLT5zZXREZXZpY2VJZEhhc2hTYWx0c1N0b3JhZ2VE
aXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRhRGly
ZWN0b3J5LCAiZGV2aWNlaWRoYXNoc2FsdHMiKSk7Ci0gICAgcmV0dXJuIFdlYnNpdGVEYXRhU3Rv
cmU6OmNyZWF0ZShXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBQQUw6OlNlc3Npb25JRDo6Z2VuZXJh
dGVQZXJzaXN0ZW50U2Vzc2lvbklEKCkpOwotfQotCi1XZWJQYWdlUHJveHkqIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgQVNTRVJUKGluc3Bl
Y3RlZFBhZ2UoKSk7Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RvclZpZXcpOwotCi0gICAgYXV0byBw
cmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIs
ICJXZWJLaXQyLiIpOwotI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKLSAgICAvLyBBbGxvdyBk
ZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdp
dGhvdXQgY2hhbmdpbmcgc2V0dGluZ3MuCi0gICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4
dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNU
b1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwotI2VuZGlmCi0gICAgcHJlZmVyZW5jZXMtPnNl
dEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHModHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNl
dEphdmFTY3JpcHRSdW50aW1lRmxhZ3MoewotICAgIH0pOwotICAgIGlmIChtX3VuZGVyVGVzdCkK
LSAgICAgICAgcHJlZmVyZW5jZXMtPnNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFi
bGVkKGZhbHNlKTsKLSAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKFdl
YktpdDo6ZGVmYXVsdEluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3Rl
ZFBhZ2UoKSkpOwotICAgIGF1dG8gd2Vic2l0ZURhdGFTdG9yZSA9IGluc3BlY3RvcldlYnNpdGVE
YXRhU3RvcmUoKTsKLSAgICBhdXRvJiBwcm9jZXNzUG9vbCA9IFdlYktpdDo6ZGVmYXVsdEluc3Bl
Y3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZlbCgpKTsKLQotICAgIGF1dG8gcGFnZUNvbmZp
Z3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdlQ29u
ZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJnByb2Nlc3NQb29sKTsKLSAgICBwYWdlQ29uZmln
dXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMucHRyKCkpOwotICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigpKTsKLSAgICBwYWdlQ29uZmln
dXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZSh3ZWJzaXRlRGF0YVN0b3JlLnB0cigpKTsKLSAg
ICBtX2luc3BlY3RvclZpZXcgPSBHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKCpw
YWdlQ29uZmlndXJhdGlvbi5wdHIoKSkpOwotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIo
R19PQkpFQ1QobV9pbnNwZWN0b3JWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2lu
c3BlY3RvclZpZXcpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yVmlldywgImRl
c3Ryb3kiLCBHX0NBTExCQUNLKGluc3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKLQotICAg
IFdLUGFnZVVJQ2xpZW50VjIgdWlDbGllbnQgPSB7Ci0gICAgICAgIHsgMiwgdGhpcyB9LAotICAg
ICAgICBudWxscHRyLCAvLyBjcmVhdGVOZXdQYWdlX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKLSAg
ICAgICAgbnVsbHB0ciwgLy8gc2hvd1BhZ2UKLSAgICAgICAgbnVsbHB0ciwgLy8gY2xvc2VQYWdl
Ci0gICAgICAgIG51bGxwdHIsIC8vIHRha2VGb2N1cwotICAgICAgICBudWxscHRyLCAvLyBmb2N1
cwotICAgICAgICBudWxscHRyLCAvLyB1bmZvY3VzCi0gICAgICAgIG51bGxwdHIsIC8vIHJ1bkph
dmFTY3JpcHRBbGVydAotICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0Q29uZmlybQot
ICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0UHJvbXB0Ci0gICAgICAgIG51bGxwdHIs
IC8vIHNldFN0YXR1c1RleHQKLSAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAotICAgICAgICBudWxscHRyLCAvLyBtaXNzaW5n
UGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxw
dHIsIC8vIGRpZE5vdEhhbmRsZUtleUV2ZW50Ci0gICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhh
bmRsZVdoZWVsRXZlbnQKLSAgICAgICAgbnVsbHB0ciwgLy8gYXJlVG9vbGJhcnNWaXNpYmxlCi0g
ICAgICAgIG51bGxwdHIsIC8vIHNldFRvb2xiYXJzVmlzaWJsZQotICAgICAgICBudWxscHRyLCAv
LyBpc01lbnVCYXJWaXNpYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIHNldE1lbnVCYXJWaXNpYmxl
Ci0gICAgICAgIG51bGxwdHIsIC8vIGlzU3RhdHVzQmFyVmlzaWJsZQotICAgICAgICBudWxscHRy
LCAvLyBzZXRTdGF0dXNCYXJWaXNpYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIGlzUmVzaXphYmxl
Ci0gICAgICAgIG51bGxwdHIsIC8vIHNldFJlc2l6YWJsZQotICAgICAgICBudWxscHRyLCAvLyBn
ZXRXaW5kb3dGcmFtZSwKLSAgICAgICAgbnVsbHB0ciwgLy8gc2V0V2luZG93RnJhbWUsCi0gICAg
ICAgIG51bGxwdHIsIC8vIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbAotICAgICAgICBudWxs
cHRyLCAvLyBkaWREcmF3Ci0gICAgICAgIG51bGxwdHIsIC8vIHBhZ2VEaWRTY3JvbGwKLSAgICAg
ICAgZXhjZWVkZWREYXRhYmFzZVF1b3RhLAotICAgICAgICBudWxscHRyLCAvLyBydW5PcGVuUGFu
ZWwsCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3QKLSAgICAgICAgbnVsbHB0ciwgLy8gaGVhZGVySGVpZ2h0Ci0gICAgICAgIG51
bGxwdHIsIC8vIGZvb3RlckhlaWdodAotICAgICAgICBudWxscHRyLCAvLyBkcmF3SGVhZGVyCi0g
ICAgICAgIG51bGxwdHIsIC8vIGRyYXdGb290ZXIKLSAgICAgICAgbnVsbHB0ciwgLy8gcHJpbnRG
cmFtZQotICAgICAgICBudWxscHRyLCAvLyBydW5Nb2RhbAotICAgICAgICBudWxscHRyLCAvLyB1
bnVzZWQKLSAgICAgICAgbnVsbHB0ciwgLy8gc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRl
cgotICAgICAgICBudWxscHRyLCAvLyBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0Ci0gICAgICAg
IG51bGxwdHIsIC8vIGNyZWF0ZVBhZ2UKLSAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QKLSAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVn
aW5CdXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEKLSAgICAgICAgbnVsbHB0ciwg
Ly8gc2hvd0NvbG9yUGlja2VyCi0gICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb2xvclBpY2tlcgot
ICAgICAgICBudWxscHRyLCAvLyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQKLSAgICB9
OwotCi0gICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5hdmlnYXRpb25DbGllbnQgPSB7Ci0g
ICAgICAgIHsgMCwgdGhpcyB9LAotICAgICAgICBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uLAotICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9u
c2UKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZAotICAgICAg
ICBudWxscHRyLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbgotICAgICAgICBudWxs
cHRyLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24K
LSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbgotICAgICAg
ICBudWxscHRyLCAvLyBkaWRDb21taXROYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRp
ZEZpbmlzaE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbE5hdmlnYXRpb24K
LSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJhbWUKLSAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoRG9jdW1lbnRMb2FkCi0gICAgICAgIG51bGxwdHIs
IC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gcmVuZGVy
aW5nUHJvZ3Jlc3NEaWRDaGFuZ2UKLSAgICAgICAgbnVsbHB0ciwgLy8gY2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZQotICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UKLSAgICAgICAgd2ViUHJvY2Vzc0RpZENyYXNoLAotICAgICAg
ICBudWxscHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5Ci0KLSAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBudWxscHRyLCAvLyB3aWxsRW5k
TmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRW5kTmF2aWdhdGlvbkdl
c3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFw
c2hvdAotICAgIH07Ci0KLSAgICBXS1BhZ2VDb250ZXh0TWVudUNsaWVudFYzIGNvbnRleHRNZW51
Q2xpZW50ID0gewotICAgICAgICB7IDMsIHRoaXMgfSwKLSAgICAgICAgbnVsbHB0ciwgLy8gZ2V0
Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKLSAgICAg
ICAgbnVsbHB0ciwgLy8gY3VzdG9tQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQKLSAgICAgICAgbnVs
bHB0ciwgLy8gY29udGV4dE1lbnVEaXNtaXNzZWQKLSAgICAgICAgZ2V0Q29udGV4dE1lbnVGcm9t
UHJvcG9zZWRNZW51LAotICAgICAgICBudWxscHRyLCAvLyBzaG93Q29udGV4dE1lbnUKLSAgICAg
ICAgbnVsbHB0ciwgLy8gaGlkZUNvbnRleHRNZW51Ci0gICAgfTsKLQotICAgIFdlYlBhZ2VQcm94
eSogaW5zcGVjdG9yUGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJ
RVdfQkFTRShtX2luc3BlY3RvclZpZXcpKTsKLSAgICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7Ci0K
LSAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZ1aUNsaWVu
dC5iYXNlKTsKLSAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0
b3JQYWdlKSwgJm5hdmlnYXRpb25DbGllbnQuYmFzZSk7Ci0gICAgV0tQYWdlU2V0UGFnZUNvbnRl
eHRNZW51Q2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAmY29udGV4dE1lbnVDbGllbnQuYmFz
ZSk7Ci0KLSAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1fY2xpZW50
ICYmIG1fY2xpZW50LT5vcGVuV2luZG93KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKCFtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgbV9pbnNwZWN0b3JXaW5kb3cgPSB3ZWJr
aXRJbnNwZWN0b3JXaW5kb3dOZXcoKTsKLSNpZiBVU0UoR1RLNCkKLSAgICBndGtfd2luZG93X3Nl
dF9jaGlsZChHVEtfV0lORE9XKG1faW5zcGVjdG9yV2luZG93KSwgbV9pbnNwZWN0b3JWaWV3KTsK
LSNlbHNlCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX2luc3BlY3Rvcldp
bmRvdyksIG1faW5zcGVjdG9yVmlldyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1faW5zcGVjdG9y
Vmlldyk7Ci0jZW5kaWYKLQotICAgIGlmICghbV9pbnNwZWN0ZWRVUkxTdHJpbmcuaXNFbXB0eSgp
KQotICAgICAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOwotCi0gICAgZ19vYmplY3Rf
YWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2luc3BlY3RvcldpbmRvdyksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmbV9pbnNwZWN0b3JXaW5kb3cpKTsKLSAgICBndGtfd2luZG93X3ByZXNl
bnQoR1RLX1dJTkRPVyhtX2luc3BlY3RvcldpbmRvdykpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAo
bV9pbnNwZWN0b3JWaWV3KSB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZnVuYyhtX2luc3BlY3RvclZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluc3BlY3Rv
clZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKLSAgICAgICAgbV9pbnNwZWN0b3JWaWV3ID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRDbG9z
ZSgqdGhpcyk7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAgZ3RrX3dp
ZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKLSAgICAgICAgbV9pbnNwZWN0b3JXaW5k
b3cgPSBudWxscHRyOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1EaWRDbG9zZUZvckNyYXNoKCkKLXsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1JbnZhbGlkYXRlKCkKLXsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1IaWRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgaWYgKG1faXNPcGVuaW5nKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPmJyaW5nVG9Gcm9u
dCgqdGhpcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3Rr
X3dpZGdldF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBpZiAoV2ViQ29yZTo6
d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCi0gICAgICAgIGd0a193aW5k
b3dfcHJlc2VudChHVEtfV0lORE9XKHBhcmVudCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgp
Ci17Ci0gICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2lu
c3BlY3RvclZpZXcpOwotICAgIGlmIChXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxX
aW5kb3cocGFyZW50KSkKLSAgICAgICAgcmV0dXJuIG1faXNWaXNpYmxlICYmIGd0a193aW5kb3df
aXNfYWN0aXZlKEdUS19XSU5ET1cocGFyZW50KSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRV
UkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIG1faW5zcGVjdGVkVVJMU3RyaW5n
ID0gdXJsOwotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmluc3BlY3RlZFVS
TENoYW5nZWQoKnRoaXMsIHVybCk7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpCi0gICAg
ICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3Rv
clByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsKLSAgICByZXR1cm4gInJlc291cmNlOi8vL29y
Zy93ZWJraXQvaW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIl9zOwotfQotCi1TdHJp
bmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKLXsKLSAgICByZXR1
cm4gInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UvVGVzdC5o
dG1sIl9zOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9G
b3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcv
Yi8yMDU1MzY+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBk
ZWJ1ZyB0YXJnZXQuCi0gICAgYXV0byBkYXRhID0gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgp
OwotICAgIGRhdGEuZGVidWdnYWJsZVR5cGUgPSBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpX
ZWJQYWdlOwotICAgIHJldHVybiBkYXRhOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewotICAgIHJldHVybiBndGtfd2lk
Z2V0X2dldF9hbGxvY2F0ZWRfaGVpZ2h0KGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsK
LX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93
V2lkdGgoKQotewotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfd2lkdGgoaW5z
cGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZp
ZXcgPSBtX2luc3BlY3RvclZpZXc7Ci0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0jaWYg
VVNFKEdUSzQpCi0gICAgICAgIGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cobV9pbnNw
ZWN0b3JXaW5kb3cpLCBudWxscHRyKTsKLSNlbHNlCi0gICAgICAgIGd0a19jb250YWluZXJfcmVt
b3ZlKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOwot
I2VuZGlmCi0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7Ci0g
ICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBTZXQg
YSBkZWZhdWx0IHNpemVzIGJhc2VkIG9uIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZFNpemUgPSAzMDA7Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNzUwOwotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7Ci0KLSAgICBp
ZiAobV9hdHRhY2htZW50U2lkZSA9PSBBdHRhY2htZW50U2lkZTo6Qm90dG9tKSB7Ci0gICAgICAg
IHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93
SGVpZ2h0KCkgKiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hl
ZFNpemUsIG1heGltdW1BdHRhY2hlZEhlaWdodCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICB1
bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRXaWR0aCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lk
dGgoKSAqIDMgLyA0OwotICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgoc3Rk
OjptYXgobWluaW11bUF0dGFjaGVkV2lkdGgsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUs
IG1heGltdW1BdHRhY2hlZFdpZHRoKSkpOwotICAgIH0KLQotICAgIGlmIChtX2NsaWVudCAmJiBt
X2NsaWVudC0+YXR0YWNoKCp0aGlzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2Via2l0V2Vi
Vmlld0Jhc2VBZGRXZWJJbnNwZWN0b3IoV0VCS0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVjdGVkUGFn
ZSgpLT52aWV3V2lkZ2V0KCkpLCBtX2luc3BlY3RvclZpZXcsIG1fYXR0YWNobWVudFNpZGUpOwot
ICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3BlY3RvclZpZXcpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgpCi17Ci0gICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCkt
Pmhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdSZWZQdHI8R3Rr
V2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JWaWV3OwotICAgIGlmICghbV9jbGll
bnQgfHwgIW1fY2xpZW50LT5kZXRhY2goKnRoaXMpKSB7Ci0gICAgICAgIC8vIERldGFjaCBpcyBj
YWxsZWQgd2hlbiBtX2lzQXR0YWNoZWQgaXMgdHJ1ZSwgYnV0IGl0IGNvdWxkIGNhbGxlZCBiZWZv
cmUKLSAgICAgICAgLy8gdGhlIGluc3BlY3RvciBpcyBvcGVuZWQgaWYgdGhlIGluc3BlY3RvciBp
cyBzaG93bi9jbG9zZWQgcXVpY2tseS4gU28sCi0gICAgICAgIC8vIHdlIG1pZ2h0IG5vdCBoYXZl
IGEgcGFyZW50IHlldC4KLSAgICAgICAgaWYgKEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdl
dF9nZXRfcGFyZW50KG1faW5zcGVjdG9yVmlldykpCi0gICAgICAgICAgICB3ZWJraXRXZWJWaWV3
QmFzZVJlbW92ZVdlYkluc3BlY3RvcihXRUJLSVRfV0VCX1ZJRVdfQkFTRShwYXJlbnQpLCBtX2lu
c3BlY3RvclZpZXcpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgbm90
IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGluc3BlY3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFj
aGVkCi0gICAgLy8gYW5kIHdlIHNob3VsZCBub3QgY3JlYXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0
b3Igd2luZG93LgotICAgIGlmICghbV9pc1Zpc2libGUpIHsKLSAgICAgICAgLy8gVGhlIGluc3Bl
Y3RvciB2aWV3IHdpbGwgYmUgZGVzdHJveWVkLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBub3RpZnkg
dGhlIHdlYiBwcm9jZXNzIHRvIGNsb3NlIHRoZQotICAgICAgICAvLyBpbnNwZWN0b3IgaW4gdGhp
cyBjYXNlLCBzaW5jZSBpdCdzIGFscmVhZHkgY2xvc2VkLgotICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0
PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7Ci0gICAgICAgIG1faW5zcGVj
dG9yVmlldyA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBvcGVuKCk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRDaGFu
Z2VBdHRhY2hlZEhlaWdodCgqdGhpcywgaGVpZ2h0KTsKLSAgICB3ZWJraXRXZWJWaWV3QmFzZVNl
dEluc3BlY3RvclZpZXdTaXplKFdFQktJVF9XRUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+
dmlld1dpZGdldCgpKSwgaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGlmICgh
bV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAg
ICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZFdpZHRoKCp0aGlzLCB3aWR0aCk7Ci0gICAg
d2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFT
RShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIHdpZHRoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotc3RhdGljIHZvaWQgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrKEdPYmplY3QqIHNv
dXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQotewot
ICAgIEdGaWxlKiBmaWxlID0gR19GSUxFKHNvdXJjZU9iamVjdCk7Ci0gICAgaWYgKCFnX2ZpbGVf
cmVwbGFjZV9jb250ZW50c19maW5pc2goZmlsZSwgcmVzdWx0LCBudWxscHRyLCBudWxscHRyKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogcGFnZSA9IHN0YXRpY19jYXN0PFdlYlBhZ2VQ
cm94eSo+KHVzZXJEYXRhKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9w
YXRoKGZpbGUpKTsKLSAgICBwYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGlk
U2F2ZShwYXRoLmdldCgpKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBi
b29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAgIFVOVVNFRF9Q
QVJBTShmb3JjZVNhdmVEaWFsb2cpOwotCi0gICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lk
Z2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOwotICAgIGlmICghV2ViQ29yZTo6d2lk
Z2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEdSZWZQdHI8R3RrRmlsZUNob29zZXJOYXRpdmU+IGRpYWxvZyA9IGFkb3B0R1JlZihndGtf
ZmlsZV9jaG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUgRmlsZSIsCi0gICAgICAgIEdUS19XSU5ET1co
cGFyZW50KSwgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwgIlNhdmUiLCAiQ2FuY2VsIikp
OwotCi0gICAgR3RrRmlsZUNob29zZXIqIGNob29zZXIgPSBHVEtfRklMRV9DSE9PU0VSKGRpYWxv
Zy5nZXQoKSk7Ci0jaWYgIVVTRShHVEs0KQotICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2RvX292
ZXJ3cml0ZV9jb25maXJtYXRpb24oY2hvb3NlciwgVFJVRSk7Ci0jZW5kaWYKLQotICAgIC8vIFNv
bWUgaW5zcGVjdG9yIHZpZXdzIChBdWRpdHMgZm9yIGluc3RhbmNlKSB1c2UgYSBjdXN0b20gVVJJ
IHNjaGVtZSwgc3VjaAotICAgIC8vIGFzIHdlYi1pbnNwZWN0b3IuIFNvIHdlIGNhbid0IHJlbHkg
b24gdGhlIFVSTCBiZWluZyBhIHZhbGlkIGZpbGU6Ly8vIFVSTAotICAgIC8vIHVuZm9ydHVuYXRl
bHkuCi0gICAgVVJMIHVybChVUkwoKSwgc3VnZ2VzdGVkVVJMKTsKLSAgICAvLyBTdHJpcCBsZWFk
aW5nIC8gY2hhcmFjdGVyLgotICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZShj
aG9vc2VyLCB1cmwucGF0aCgpLnN1YnN0cmluZygxKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlm
IChndGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RLX05BVElWRV9ESUFMT0coZGlhbG9nLmdldCgpKSkg
IT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPGNo
YXI+IGRhdGFWZWN0b3I7Ci0gICAgQ1N0cmluZyBkYXRhU3RyaW5nOwotICAgIGlmIChiYXNlNjRF
bmNvZGVkKSB7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3Is
IEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRh
dGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGF0YVN0cmluZyA9
IGNvbnRlbnQudXRmOCgpOwotCi0gICAgY29uc3QgY2hhciogZGF0YSA9ICFkYXRhU3RyaW5nLmlz
TnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVjdG9yLmRhdGEoKTsKLSAgICBzaXpl
X3QgZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5sZW5ndGgo
KSA6IGRhdGFWZWN0b3Iuc2l6ZSgpOwotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdS
ZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7Ci0gICAgR1VuaXF1ZVB0cjxj
aGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7Ci0gICAgZ19maWxlX3JlcGxh
Y2VfY29udGVudHNfYXN5bmMoZmlsZS5nZXQoKSwgZGF0YSwgZGF0YUxlbmd0aCwgbnVsbHB0ciwg
ZmFsc2UsCi0gICAgICAgIEdfRklMRV9DUkVBVEVfUkVQTEFDRV9ERVNUSU5BVElPTiwgbnVsbHB0
ciwgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrLCBtX2luc3BlY3RvclBhZ2UpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJs
ZSkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRh
Y2hBdmFpbGFiaWxpdHkoKnRoaXMsIGF2YWlsYWJsZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9X
ZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJUHJveHlDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYTQ0NWZj
NzY0NzExNDhjNDZkMThkZWM3NjQyOGY4N2Q4OTZmMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSVByb3h5Q2xp
ZW50LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViSW5zcGVjdG9yVUlQcm94
eTsKKworY2xhc3MgV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudCB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+V2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFs
IGJvb2wgb3BlbldpbmRvdyhXZWJJbnNwZWN0b3JVSVByb3h5JikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkaWRDbG9zZShXZWJJbnNwZWN0b3JVSVByb3h5JikgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBicmluZ1RvRnJvbnQoV2ViSW5zcGVjdG9yVUlQcm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChXZWJJbnNwZWN0b3JVSVByb3h5JiwgY29uc3QgU3RyaW5n
JiB1cmwpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYXR0YWNoKFdlYkluc3BlY3RvclVJUHJveHkm
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGRldGFjaChXZWJJbnNwZWN0b3JVSVByb3h5JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hlZEhlaWdodChXZWJJbnNwZWN0b3JV
SVByb3h5JiwgdW5zaWduZWQgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5n
ZUF0dGFjaGVkV2lkdGgoV2ViSW5zcGVjdG9yVUlQcm94eSYsIHVuc2lnbmVkIHdpZHRoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaEF2YWlsYWJpbGl0eShXZWJJbnNwZWN0
b3JVSVByb3h5JiwgYm9vbCBhdmFpbGFibGUpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9X
ZWJJbnNwZWN0b3JVSVByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZiZGM3NDc1
MTdkMWU4YjhlOGYwNWRiY2M5YzgzNGY3YjExNDdhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlQcm94eUd0ay5j
cHAKQEAgLTAsMCArMSw1NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1v
dG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR3VzdGF2byBOb3Jv
bmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHkuaCIKKworI2luY2x1ZGUgIkFQSU5hdmln
YXRpb24uaCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCisjaW5jbHVkZSAiV0tB
cnJheS5oIgorI2luY2x1ZGUgIldLQ29udGV4dE1lbnVJdGVtLmgiCisjaW5jbHVkZSAiV0tNdXRh
YmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKKyNp
bmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9y
VUlQcm94eUNsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5oIgorI2lu
Y2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91
cC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1By
b3h5LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
Q2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3Bl
Y3RvckRlYnVnZ2FibGVUeXBlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIHZvaWQgaW5zcGVjdG9y
Vmlld0Rlc3Ryb3llZChHdGtXaWRnZXQqLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJJ
bnNwZWN0b3JVSVByb3h5KiBpbnNwZWN0b3IgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JVSVBy
b3h5Kj4odXNlckRhdGEpOworCisgICAgLy8gSW5mb3JtIFdlYlByb2Nlc3MgYWJvdXQgd2ViaW5z
cGVjdG9yIGNsb3N1cmUuIE5vdCBkb2luZyBzbywKKyAgICAvLyByZXN1bHRzIGluIGZhaWx1cmUg
b2Ygc3Vic2VxdWVudCBpbnZvY2F0aW9uIG9mIHdlYmluc3BlY3Rvci4KKyAgICBpbnNwZWN0b3It
PmNsb3NlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6c2V0Q2xpZW50KHN0ZDo6
dW5pcXVlX3B0cjxXZWJJbnNwZWN0b3JVSVByb3h5Q2xpZW50PiYmIGNsaWVudCkKK3sKKyAgICBt
X2NsaWVudCA9IFdURk1vdmUoY2xpZW50KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5
Ojp1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5z
cGVjdG9yV2luZG93KTsKKyAgICB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShXRUJL
SVRfSU5TUEVDVE9SX1dJTkRPVyhtX2luc3BlY3RvcldpbmRvdyksICFtX2luc3BlY3RlZFVSTFN0
cmluZy5pc0VtcHR5KCkgPyBtX2luc3BlY3RlZFVSTFN0cmluZy51dGY4KCkuZGF0YSgpIDogbnVs
bHB0cik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXhjZWVkZWREYXRhYmFzZVF1
b3RhKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTZWN1cml0eU9yaWdpblJlZiwgV0tTdHJpbmdS
ZWYsIFdLU3RyaW5nUmVmLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywg
dW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBsb25nIGxv
bmcgZXhwZWN0ZWRVc2FnZSwgY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4PHVu
c2lnbmVkIGxvbmcgbG9uZz4oZXhwZWN0ZWRVc2FnZSwgY3VycmVudERhdGFiYXNlVXNhZ2UgKiAx
LjI1KTsKK30KKworc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0RpZENyYXNoKFdLUGFnZVJlZiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXZWJJbnNwZWN0b3JVSVByb3h5KiBpbnNwZWN0
b3IgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JVSVByb3h5Kj4oY29uc3RfY2FzdDx2b2lkKj4o
Y2xpZW50SW5mbykpOworICAgIEFTU0VSVChpbnNwZWN0b3IpOworICAgIGluc3BlY3Rvci0+Y2xv
c2VGb3JDcmFzaCgpOworfQorCitzdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uKFdLUGFnZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlv
bkFjdGlvblJlZiwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBXS1R5cGVS
ZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgLy8gQWxsb3cgbm9uLW1haW4gZnJh
bWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgorICAgIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFt
ZSA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+c291cmNlRnJhbWUoKTsKKyAgICBpZiAo
c291cmNlRnJhbWUgJiYgIXNvdXJjZUZyYW1lLT5pc01haW5GcmFtZSgpKSB7CisgICAgICAgIHRv
SW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29uc3QgV2ViSW5zcGVjdG9yVUlQcm94eSogaW5zcGVjdG9yID0gc3RhdGljX2Nhc3Q8Y29u
c3QgV2ViSW5zcGVjdG9yVUlQcm94eSo+KGNsaWVudEluZm8pOworICAgIEFTU0VSVChpbnNwZWN0
b3IpOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSB0b0ltcGwobmF2
aWdhdGlvbkFjdGlvblJlZiktPnJlcXVlc3QoKTsKKworICAgIC8vIEFsbG93IGxvYWRpbmcgb2Yg
dGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCisgICAgaWYgKFdlYkluc3BlY3RvclVJUHJveHk6Omlz
TWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVxdWVzdC51cmwoKSkpIHsKKyAgICAgICAgdG9JbXBs
KGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGxvYWRpbmcgaW4gdGhlIGluc3BlY3Rvcidz
IHBhZ2UuCisgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+aWdub3JlKCk7CisKKyAgICAvLyBBbmQg
aW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4KKyAgICBpbnNwZWN0b3ItPmlu
c3BlY3RlZFBhZ2UoKS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Cit9CisKK3N0YXRp
YyB2b2lkIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXS1BhZ2VSZWYgcGFnZVJlZiwg
V0tBcnJheVJlZiBwcm9wb3NlZE1lbnVSZWYsIFdLQXJyYXlSZWYqIG5ld01lbnVSZWYsIFdLSGl0
VGVzdFJlc3VsdFJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKikKK3sKKyAgICBXS011dGFibGVB
cnJheVJlZiBtZW51SXRlbXMgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOworCisgICAgc2l6ZV90
IGNvdW50ID0gV0tBcnJheUdldFNpemUocHJvcG9zZWRNZW51UmVmKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgV0tDb250ZXh0TWVudUl0ZW1SZWYg
Y29udGV4dE1lbnVJdGVtID0gc3RhdGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJy
YXlHZXRJdGVtQXRJbmRleChwcm9wb3NlZE1lbnVSZWYsIGkpKTsKKyAgICAgICAgc3dpdGNoIChX
S0NvbnRleHRNZW51SXRlbUdldFRhZyhjb250ZXh0TWVudUl0ZW0pKSB7CisgICAgICAgIGNhc2Ug
a1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CisgICAgICAgIGNhc2Uga1dL
Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVudUl0
ZW1zLCBjb250ZXh0TWVudUl0ZW0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAqbmV3TWVudVJlZiA9IG1lbnVJdGVtczsKK30KKworc3RhdGljIFJlZjxXZWJz
aXRlRGF0YVN0b3JlPiBpbnNwZWN0b3JXZWJzaXRlRGF0YVN0b3JlKCkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogdmVyc2lvbmVkRGlyZWN0b3J5ID0gIndlYmtpdGd0ay0iIFdFQktJVEdUS19B
UElfVkVSU0lPTl9TVFJJTkcgR19ESVJfU0VQQVJBVE9SX1MgIldlYkluc3BlY3RvciIgR19ESVJf
U0VQQVJBVE9SX1M7CisgICAgU3RyaW5nIGJhc2VDYWNoZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChGaWxlU3lzdGVtOjpzdHJpbmdGcm9tRmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKGdfZ2V0X3VzZXJfY2FjaGVfZGlyKCkpLCB2ZXJzaW9uZWREaXJlY3Rv
cnkpOworICAgIFN0cmluZyBiYXNlRGF0YURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChGaWxlU3lzdGVtOjpzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSksIHZlcnNpb25lZERpcmVjdG9yeSk7CisKKyAg
ICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6Y3Jl
YXRlKElzUGVyc2lzdGVudDo6WWVzLCBXaWxsQ29weVBhdGhzRnJvbUV4aXN0aW5nQ29uZmlndXJh
dGlvbjo6WWVzKTsKKyAgICBjb25maWd1cmF0aW9uLT5zZXROZXR3b3JrQ2FjaGVEaXJlY3Rvcnko
RmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VDYWNoZURpcmVjdG9yeSwg
IldlYktpdENhY2hlIikpOworICAgIGNvbmZpZ3VyYXRpb24tPnNldEFwcGxpY2F0aW9uQ2FjaGVE
aXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VDYWNoZURp
cmVjdG9yeSwgImFwcGxpY2F0aW9ucyIpKTsKKyAgICBjb25maWd1cmF0aW9uLT5zZXRIU1RTU3Rv
cmFnZURpcmVjdG9yeShTdHJpbmcoYmFzZUNhY2hlRGlyZWN0b3J5KSk7CisgICAgY29uZmlndXJh
dGlvbi0+c2V0Q2FjaGVTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChiYXNlQ2FjaGVEaXJlY3RvcnksICJDYWNoZVN0b3JhZ2UiKSk7CisgICAgY29u
ZmlndXJhdGlvbi0+c2V0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChiYXNlRGF0YURpcmVjdG9yeSwgImxvY2Fsc3RvcmFnZSIpKTsKKyAg
ICBjb25maWd1cmF0aW9uLT5zZXRJbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeShGaWxlU3lzdGVt
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZURhdGFEaXJlY3RvcnksICJpbmRleGVkZGIi
KSk7CisgICAgY29uZmlndXJhdGlvbi0+c2V0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoRmlsZVN5
c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRhRGlyZWN0b3J5LCAiZGF0YWJh
c2VzIikpOworICAgIGNvbmZpZ3VyYXRpb24tPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VEYXRhRGlyZWN0
b3J5LCAiaXRwIikpOworICAgIGNvbmZpZ3VyYXRpb24tPnNldFNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnkoRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2VE
YXRhRGlyZWN0b3J5LCAic2VydmljZXdvcmtlcnMiKSk7CisgICAgY29uZmlndXJhdGlvbi0+c2V0
RGV2aWNlSWRIYXNoU2FsdHNTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChiYXNlRGF0YURpcmVjdG9yeSwgImRldmljZWlkaGFzaHNhbHRzIikpOwor
ICAgIHJldHVybiBXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShjb25maWd1cmF0aW9u
KSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlUGVyc2lzdGVudFNlc3Npb25JRCgpKTsKK30KKwor
V2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5k
UGFnZSgpCit7CisgICAgQVNTRVJUKGluc3BlY3RlZFBhZ2UoKSk7CisgICAgQVNTRVJUKCFtX2lu
c3BlY3RvclZpZXcpOworCisgICAgYXV0byBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpj
cmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOworI2lmIEVOQUJMRShERVZF
TE9QRVJfTU9ERSkKKyAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJ
bnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcgc2V0dGluZ3MuCisgICAg
cHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7CisgICAgcHJlZmVy
ZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwor
I2VuZGlmCisgICAgcHJlZmVyZW5jZXMtPnNldEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMo
dHJ1ZSk7CisgICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRSdW50aW1lRmxhZ3MoeworICAg
IH0pOworICAgIGlmIChtX3VuZGVyVGVzdCkKKyAgICAgICAgcHJlZmVyZW5jZXMtPnNldEhpZGRl
blBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKGZhbHNlKTsKKyAgICBhdXRvIHBhZ2VHcm91
cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKFdlYktpdDo6ZGVmYXVsdEluc3BlY3RvclBhZ2VHcm91
cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOworICAgIGF1dG8gd2Vic2l0ZURh
dGFTdG9yZSA9IGluc3BlY3RvcldlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICBhdXRvJiBwcm9jZXNz
UG9vbCA9IFdlYktpdDo6ZGVmYXVsdEluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZl
bCgpKTsKKworICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0
aW9uOjpjcmVhdGUoKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJnBy
b2Nlc3NQb29sKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVy
ZW5jZXMucHRyKCkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdy
b3VwLnB0cigpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0ZURhdGFTdG9yZSh3
ZWJzaXRlRGF0YVN0b3JlLnB0cigpKTsKKyAgICBtX2luc3BlY3RvclZpZXcgPSBHVEtfV0lER0VU
KHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKCpwYWdlQ29uZmlndXJhdGlvbi5wdHIoKSkpOworICAg
IGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JWaWV3KSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2luc3BlY3RvclZpZXcpKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KG1faW5zcGVjdG9yVmlldywgImRlc3Ryb3kiLCBHX0NBTExCQUNLKGluc3BlY3RvclZp
ZXdEZXN0cm95ZWQpLCB0aGlzKTsKKworICAgIFdLUGFnZVVJQ2xpZW50VjIgdWlDbGllbnQgPSB7
CisgICAgICAgIHsgMiwgdGhpcyB9LAorICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVOZXdQYWdl
X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvd1BhZ2UKKyAg
ICAgICAgbnVsbHB0ciwgLy8gY2xvc2VQYWdlCisgICAgICAgIG51bGxwdHIsIC8vIHRha2VGb2N1
cworICAgICAgICBudWxscHRyLCAvLyBmb2N1cworICAgICAgICBudWxscHRyLCAvLyB1bmZvY3Vz
CisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRBbGVydAorICAgICAgICBudWxscHRy
LCAvLyBydW5KYXZhU2NyaXB0Q29uZmlybQorICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2Ny
aXB0UHJvbXB0CisgICAgICAgIG51bGxwdHIsIC8vIHNldFN0YXR1c1RleHQKKyAgICAgICAgbnVs
bHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAor
ICAgICAgICBudWxscHRyLCAvLyBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVk
Rm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZUtleUV2ZW50Cisg
ICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQKKyAgICAgICAgbnVsbHB0
ciwgLy8gYXJlVG9vbGJhcnNWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldFRvb2xiYXJz
VmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBpc01lbnVCYXJWaXNpYmxlCisgICAgICAgIG51
bGxwdHIsIC8vIHNldE1lbnVCYXJWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGlzU3RhdHVz
QmFyVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0dXNCYXJWaXNpYmxlCisgICAg
ICAgIG51bGxwdHIsIC8vIGlzUmVzaXphYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldFJlc2l6
YWJsZQorICAgICAgICBudWxscHRyLCAvLyBnZXRXaW5kb3dGcmFtZSwKKyAgICAgICAgbnVsbHB0
ciwgLy8gc2V0V2luZG93RnJhbWUsCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbAorICAgICAgICBudWxscHRyLCAvLyBkaWREcmF3CisgICAgICAgIG51bGxw
dHIsIC8vIHBhZ2VEaWRTY3JvbGwKKyAgICAgICAgZXhjZWVkZWREYXRhYmFzZVF1b3RhLAorICAg
ICAgICBudWxscHRyLCAvLyBydW5PcGVuUGFuZWwsCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lk
ZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKKyAgICAgICAgbnVsbHB0ciwg
Ly8gaGVhZGVySGVpZ2h0CisgICAgICAgIG51bGxwdHIsIC8vIGZvb3RlckhlaWdodAorICAgICAg
ICBudWxscHRyLCAvLyBkcmF3SGVhZGVyCisgICAgICAgIG51bGxwdHIsIC8vIGRyYXdGb290ZXIK
KyAgICAgICAgbnVsbHB0ciwgLy8gcHJpbnRGcmFtZQorICAgICAgICBudWxscHRyLCAvLyBydW5N
b2RhbAorICAgICAgICBudWxscHRyLCAvLyB1bnVzZWQKKyAgICAgICAgbnVsbHB0ciwgLy8gc2F2
ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcgorICAgICAgICBudWxscHRyLCAvLyBzaG91bGRJ
bnRlcnJ1cHRKYXZhU2NyaXB0CisgICAgICAgIG51bGxwdHIsIC8vIGNyZWF0ZVBhZ2UKKyAgICAg
ICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQKKyAgICAgICAgbnVsbHB0ciwg
Ly8gZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKKyAgICAgICAg
bnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JV
c2VXaXRoVjEKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbG9yUGlja2VyCisgICAgICAgIG51
bGxwdHIsIC8vIGhpZGVDb2xvclBpY2tlcgorICAgICAgICBudWxscHRyLCAvLyB1bmF2YWlsYWJs
ZVBsdWdpbkJ1dHRvbkNsaWNrZWQKKyAgICB9OworCisgICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVu
dFYwIG5hdmlnYXRpb25DbGllbnQgPSB7CisgICAgICAgIHsgMCwgdGhpcyB9LAorICAgICAgICBk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLAorICAgICAgICBudWxscHRyLCAvLyBkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRl
UG9saWN5Rm9yUGx1Z2luTG9hZAorICAgICAgICBudWxscHRyLCAvLyBkaWRTdGFydFByb3Zpc2lv
bmFsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJl
Y3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFBy
b3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRDb21taXROYXZpZ2F0
aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaE5hdmlnYXRpb24KKyAgICAgICAgbnVs
bHB0ciwgLy8gZGlkRmFpbE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZEluU3ViZnJhbWUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoRG9j
dW1lbnRMb2FkCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24K
KyAgICAgICAgbnVsbHB0ciwgLy8gcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UKKyAgICAgICAg
bnVsbHB0ciwgLy8gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZQorICAgICAg
ICBudWxscHRyLCAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKKyAgICAgICAg
d2ViUHJvY2Vzc0RpZENyYXNoLAorICAgICAgICBudWxscHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFz
dGVyS2V5CisKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQor
ICAgICAgICBudWxscHRyLCAvLyB3aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVs
bHB0ciwgLy8gZGlkRW5kTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlk
UmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAorICAgIH07CisKKyAgICBXS1BhZ2VDb250
ZXh0TWVudUNsaWVudFYzIGNvbnRleHRNZW51Q2xpZW50ID0geworICAgICAgICB7IDMsIHRoaXMg
fSwKKyAgICAgICAgbnVsbHB0ciwgLy8gZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51X2Rl
cHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gY3VzdG9tQ29udGV4dE1l
bnVJdGVtU2VsZWN0ZWQKKyAgICAgICAgbnVsbHB0ciwgLy8gY29udGV4dE1lbnVEaXNtaXNzZWQK
KyAgICAgICAgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51LAorICAgICAgICBudWxscHRy
LCAvLyBzaG93Q29udGV4dE1lbnUKKyAgICAgICAgbnVsbHB0ciwgLy8gaGlkZUNvbnRleHRNZW51
CisgICAgfTsKKworICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSA9IHdlYmtpdFdlYlZp
ZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX2luc3BlY3RvclZpZXcpKTsKKyAg
ICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7CisKKyAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQodG9B
UEkoaW5zcGVjdG9yUGFnZSksICZ1aUNsaWVudC5iYXNlKTsKKyAgICBXS1BhZ2VTZXRQYWdlTmF2
aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJm5hdmlnYXRpb25DbGllbnQuYmFz
ZSk7CisgICAgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KHRvQVBJKGluc3BlY3RvclBh
Z2UpLCAmY29udGV4dE1lbnVDbGllbnQuYmFzZSk7CisKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFn
ZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5k
V2luZG93KCkKK3sKKyAgICBpZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPm9wZW5XaW5kb3coKnRo
aXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1faW5zcGVjdG9yV2luZG93KTsK
KyAgICBtX2luc3BlY3RvcldpbmRvdyA9IHdlYmtpdEluc3BlY3RvcldpbmRvd05ldygpOworI2lm
IFVTRShHVEs0KQorICAgIGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1cobV9pbnNwZWN0
b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOworI2Vsc2UKKyAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwgbV9pbnNwZWN0b3JWaWV3KTsKKyAg
ICBndGtfd2lkZ2V0X3Nob3cobV9pbnNwZWN0b3JWaWV3KTsKKyNlbmRpZgorCisgICAgaWYgKCFt
X2luc3BlY3RlZFVSTFN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHVwZGF0ZUluc3BlY3Rvcldp
bmRvd1RpdGxlKCk7CisKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1f
aW5zcGVjdG9yV2luZG93KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2luc3BlY3Rvcldp
bmRvdykpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKG1faW5zcGVjdG9yV2lu
ZG93KSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1faW5zcGVjdG9yVmlldykgeworICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7Cisg
ICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ2xvc2UoKnRoaXMpOworCisgICAgaWYgKG1faW5z
cGVjdG9yV2luZG93KSB7CisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3Rvcldp
bmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbnVsbHB0cjsKKyAgICB9Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKK3sK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQorewor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVJl
c2V0U3RhdGUoKQoreworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQnJp
bmdUb0Zyb250KCkKK3sKKyAgICBpZiAobV9pc09wZW5pbmcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+YnJpbmdUb0Zyb250KCp0aGlzKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3Bs
ZXZlbChtX2luc3BlY3RvclZpZXcpOworICAgIGlmIChXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVu
VG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKKyAgICAgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19X
SU5ET1cocGFyZW50KSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1C
cmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Citib29sIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCit7CisgICAgR3Rr
V2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcp
OworICAgIGlmIChXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50
KSkKKyAgICAgICAgcmV0dXJuIG1faXNWaXNpYmxlICYmIGd0a193aW5kb3dfaXNfYWN0aXZlKEdU
S19XSU5ET1cocGFyZW50KSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2luc3BlY3RlZFVSTFN0cmluZyA9IHVybDsK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5pbnNwZWN0ZWRVUkxDaGFuZ2Vk
KCp0aGlzLCB1cmwpOworCisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQorICAgICAgICB1cGRh
dGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJUHJv
eHk6Omluc3BlY3RvclBhZ2VVUkwoKQoreworICAgIHJldHVybiAicmVzb3VyY2U6Ly8vb3JnL3dl
YmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS9NYWluLmh0bWwiX3M7Cit9CisKK1N0cmluZyBX
ZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisgICAgcmV0dXJu
ICJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRt
bCJfczsKK30KKworRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclVJUHJveHk6OmluZm9G
b3JMb2NhbERlYnVnZ2FibGUoKQoreworICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcv
Yi8yMDU1MzY+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBk
ZWJ1ZyB0YXJnZXQuCisgICAgYXV0byBkYXRhID0gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgp
OworICAgIGRhdGEuZGVidWdnYWJsZVR5cGUgPSBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpX
ZWJQYWdlOworICAgIHJldHVybiBkYXRhOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JVSVBy
b3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgcmV0dXJuIGd0a193
aWRnZXRfZ2V0X2FsbG9jYXRlZF9oZWlnaHQoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkp
OworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdp
bmRvd1dpZHRoKCkKK3sKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX3dpZHRo
KGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGluc3Bl
Y3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7
CisjaWYgVVNFKEdUSzQpCisgICAgICAgIGd0a193aW5kb3dfc2V0X2NoaWxkKEdUS19XSU5ET1co
bV9pbnNwZWN0b3JXaW5kb3cpLCBudWxscHRyKTsKKyNlbHNlCisgICAgICAgIGd0a19jb250YWlu
ZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZp
ZXcpOworI2VuZGlmCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRv
dyk7CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICAv
LyBTZXQgYSBkZWZhdWx0IHNpemVzIGJhc2VkIG9uIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZFNpemUgPSAzMDA7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNzUwOwor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7CisK
KyAgICBpZiAobV9hdHRhY2htZW50U2lkZSA9PSBBdHRhY2htZW50U2lkZTo6Qm90dG9tKSB7Cisg
ICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IHBsYXRmb3JtSW5zcGVjdGVk
V2luZG93SGVpZ2h0KCkgKiAzIC8gNDsKKyAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRv
d0hlaWdodChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIHN0ZDo6bWluKGRlZmF1bHRB
dHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZEhlaWdodCkpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRXaWR0aCA9IHBsYXRmb3JtSW5zcGVjdGVkV2lu
ZG93V2lkdGgoKSAqIDMgLyA0OworICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lk
dGgoc3RkOjptYXgobWluaW11bUF0dGFjaGVkV2lkdGgsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hl
ZFNpemUsIG1heGltdW1BdHRhY2hlZFdpZHRoKSkpOworICAgIH0KKworICAgIGlmIChtX2NsaWVu
dCAmJiBtX2NsaWVudC0+YXR0YWNoKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2Vi
a2l0V2ViVmlld0Jhc2VBZGRXZWJJbnNwZWN0b3IoV0VCS0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVj
dGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpLCBtX2luc3BlY3RvclZpZXcsIG1fYXR0YWNobWVudFNp
ZGUpOworICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3BlY3RvclZpZXcpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKK3sKKyAgICBpZiAoIWluc3BlY3Rl
ZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1Jl
ZlB0cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7CisgICAgaWYg
KCFtX2NsaWVudCB8fCAhbV9jbGllbnQtPmRldGFjaCgqdGhpcykpIHsKKyAgICAgICAgLy8gRGV0
YWNoIGlzIGNhbGxlZCB3aGVuIG1faXNBdHRhY2hlZCBpcyB0cnVlLCBidXQgaXQgY291bGQgY2Fs
bGVkIGJlZm9yZQorICAgICAgICAvLyB0aGUgaW5zcGVjdG9yIGlzIG9wZW5lZCBpZiB0aGUgaW5z
cGVjdG9yIGlzIHNob3duL2Nsb3NlZCBxdWlja2x5LiBTbywKKyAgICAgICAgLy8gd2UgbWlnaHQg
bm90IGhhdmUgYSBwYXJlbnQgeWV0LgorICAgICAgICBpZiAoR3RrV2lkZ2V0KiBwYXJlbnQgPSBn
dGtfd2lkZ2V0X2dldF9wYXJlbnQobV9pbnNwZWN0b3JWaWV3KSkKKyAgICAgICAgICAgIHdlYmtp
dFdlYlZpZXdCYXNlUmVtb3ZlV2ViSW5zcGVjdG9yKFdFQktJVF9XRUJfVklFV19CQVNFKHBhcmVu
dCksIG1faW5zcGVjdG9yVmlldyk7CisgICAgfQorCisgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHdl
IGFyZSBub3QgdmlzaWJsZS4gVGhpcyBtZWFucyB0aGUgaW5zcGVjdG9yIHdhcyBjbG9zZWQgd2hp
bGUgYXR0YWNoZWQKKyAgICAvLyBhbmQgd2Ugc2hvdWxkIG5vdCBjcmVhdGUgYW5kIHNob3cgdGhl
IGluc3BlY3RvciB3aW5kb3cuCisgICAgaWYgKCFtX2lzVmlzaWJsZSkgeworICAgICAgICAvLyBU
aGUgaW5zcGVjdG9yIHZpZXcgd2lsbCBiZSBkZXN0cm95ZWQsIGJ1dCB3ZSBkb24ndCBuZWVkIHRv
IG5vdGlmeSB0aGUgd2ViIHByb2Nlc3MgdG8gY2xvc2UgdGhlCisgICAgICAgIC8vIGluc3BlY3Rv
ciBpbiB0aGlzIGNhc2UsIHNpbmNlIGl0J3MgYWxyZWFkeSBjbG9zZWQuCisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2luc3BlY3RvclZpZXcsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGluc3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKKyAgICAgICAg
bV9pbnNwZWN0b3JWaWV3ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG9wZW4oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBpZiAoIW1faXNBdHRhY2hl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVu
dC0+ZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQoKnRoaXMsIGhlaWdodCk7CisgICAgd2Via2l0V2Vi
Vmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0
ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQor
eworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9j
bGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZFdpZHRoKCp0aGlzLCB3
aWR0aCk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRf
V0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIHdpZHRoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVSZXBsYWNlQ29udGVudHNDYWxs
YmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRl
ciB1c2VyRGF0YSkKK3sKKyAgICBHRmlsZSogZmlsZSA9IEdfRklMRShzb3VyY2VPYmplY3QpOwor
ICAgIGlmICghZ19maWxlX3JlcGxhY2VfY29udGVudHNfZmluaXNoKGZpbGUsIHJlc3VsdCwgbnVs
bHB0ciwgbnVsbHB0cikpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHBhZ2UgPSBzdGF0
aWNfY2FzdDxXZWJQYWdlUHJveHkqPih1c2VyRGF0YSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBw
YXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlKSk7CisgICAgcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0aC5nZXQoKSkpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9n
KQoreworICAgIFVOVVNFRF9QQVJBTShmb3JjZVNhdmVEaWFsb2cpOworCisgICAgR3RrV2lkZ2V0
KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOworICAg
IGlmICghV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8R3RrRmlsZUNob29zZXJOYXRpdmU+IGRpYWxv
ZyA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUgRmlsZSIsCisg
ICAgICAgIEdUS19XSU5ET1cocGFyZW50KSwgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwg
IlNhdmUiLCAiQ2FuY2VsIikpOworCisgICAgR3RrRmlsZUNob29zZXIqIGNob29zZXIgPSBHVEtf
RklMRV9DSE9PU0VSKGRpYWxvZy5nZXQoKSk7CisjaWYgIVVTRShHVEs0KQorICAgIGd0a19maWxl
X2Nob29zZXJfc2V0X2RvX292ZXJ3cml0ZV9jb25maXJtYXRpb24oY2hvb3NlciwgVFJVRSk7Cisj
ZW5kaWYKKworICAgIC8vIFNvbWUgaW5zcGVjdG9yIHZpZXdzIChBdWRpdHMgZm9yIGluc3RhbmNl
KSB1c2UgYSBjdXN0b20gVVJJIHNjaGVtZSwgc3VjaAorICAgIC8vIGFzIHdlYi1pbnNwZWN0b3Iu
IFNvIHdlIGNhbid0IHJlbHkgb24gdGhlIFVSTCBiZWluZyBhIHZhbGlkIGZpbGU6Ly8vIFVSTAor
ICAgIC8vIHVuZm9ydHVuYXRlbHkuCisgICAgVVJMIHVybChVUkwoKSwgc3VnZ2VzdGVkVVJMKTsK
KyAgICAvLyBTdHJpcCBsZWFkaW5nIC8gY2hhcmFjdGVyLgorICAgIGd0a19maWxlX2Nob29zZXJf
c2V0X2N1cnJlbnRfbmFtZShjaG9vc2VyLCB1cmwucGF0aCgpLnN1YnN0cmluZygxKS51dGY4KCku
ZGF0YSgpKTsKKworICAgIGlmIChndGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RLX05BVElWRV9ESUFM
T0coZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7CisgICAgQ1N0cmluZyBkYXRhU3RyaW5n
OworICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CisgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNv
bnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRmOCgpOworCisgICAgY29uc3QgY2hhciogZGF0
YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVjdG9y
LmRhdGEoKTsKKyAgICBzaXplX3QgZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8g
ZGF0YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFWZWN0b3Iuc2l6ZSgpOworICAgIEdSZWZQdHI8R0Zp
bGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7
CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7
CisgICAgZ19maWxlX3JlcGxhY2VfY29udGVudHNfYXN5bmMoZmlsZS5nZXQoKSwgZGF0YSwgZGF0
YUxlbmd0aCwgbnVsbHB0ciwgZmFsc2UsCisgICAgICAgIEdfRklMRV9DUkVBVEVfUkVQTEFDRV9E
RVNUSU5BVElPTiwgbnVsbHB0ciwgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrLCBtX2luc3Bl
Y3RvclBhZ2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXBwZW5k
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0
eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBt
X2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoQXZhaWxhYmlsaXR5KCp0aGlzLCBhdmFpbGFibGUpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcApp
bmRleCBhYzg5MmY4ZDVhZjQyZTIwODkxMDQ1OGNhYzk0N2Q2NWQzZGEyNjJlLi5kYjQwOGJlNGM4
MzcyOWEwZGI5ZDY4ODc0NDUzZDU5ZTQwNjkwNjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5k
b3cuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
V2ViS2l0SW5zcGVjdG9yV2luZG93LmgiCiAKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5o
IgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJUHJveHkuaCIKICNpbmNsdWRlIDxnbGliL2dpMThu
LWxpYi5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KIApAQCAtOTIsNyArOTIs
NyBAQCBHdGtXaWRnZXQqIHdlYmtpdEluc3BlY3RvcldpbmRvd05ldygpCiAjaWYgIVVTRShHVEs0
KQogICAgICAgICAidHlwZSIsIEdUS19XSU5ET1dfVE9QTEVWRUwsCiAjZW5kaWYKLSAgICAgICAg
ImRlZmF1bHQtd2lkdGgiLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoLCAi
ZGVmYXVsdC1oZWlnaHQiLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd0hlaWdodCwg
bnVsbHB0cikpOworICAgICAgICAiZGVmYXVsdC13aWR0aCIsIFdlYkluc3BlY3RvclVJUHJveHk6
OmluaXRpYWxXaW5kb3dXaWR0aCwgImRlZmF1bHQtaGVpZ2h0IiwgV2ViSW5zcGVjdG9yVUlQcm94
eTo6aW5pdGlhbFdpbmRvd0hlaWdodCwgbnVsbHB0cikpOwogfQogCiB2b2lkIHdlYmtpdEluc3Bl
Y3RvcldpbmRvd1NldFN1YnRpdGxlKFdlYktpdEluc3BlY3RvcldpbmRvdyogd2luZG93LCBjb25z
dCBjaGFyKiBzdWJ0aXRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjM0MThkMGQ4YTk3NzhkN2ZkN2NkODRkZGI5
MDdiOWM3OWJhZGM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyOTggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eS5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
LQotI2ltcG9ydCAiR2xvYmFsRmluZEluUGFnZVN0YXRlLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1l
c3NhZ2VzLmgiCi0jaW1wb3J0ICJXS0ZyYW1lSW5mby5oIgotI2ltcG9ydCAiV0tJbnNwZWN0b3JW
aWV3Q29udHJvbGxlci5oIgotI2ltcG9ydCAiV0tOYXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW1wb3J0
ICJXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIK
LSNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCi0jaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIK
LSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiX1dLSW5zcGVjdG9yQ29uZmlndXJh
dGlvbkludGVybmFsLmgiCi0jaW1wb3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRl
UGFuZWwuaD4KLSNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVWaWV3Lmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2ltcG9ydCA8d3RmL3RleHQv
QmFzZTY0Lmg+Ci0KLUBpbnRlcmZhY2UgV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFw
dGVyIDogTlNPYmplY3QgPE5TV2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXJEZWxlZ2F0ZT4gewotICAgIFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqIF9pbnNw
ZWN0b3JQcm94eTsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OihXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eTsK
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRh
cHRlcgotCi0tIChOU1JlY3Qpd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRpb25T
aGVldDooTlNXaW5kb3cgKilzaGVldCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgaWYg
KF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgX2luc3BlY3Rv
clByb3h5LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3Qo
KS53aWR0aCgpLCAwKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkqKWluc3BlY3RvclByb3h5Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQ
cm94eTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWluc3BlY3RvcldLV2ViVmll
d0RpZEJlY29tZUFjdGl2ZTooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZp
ZXdDb250cm9sbGVyCi17Ci0gICAgX2luc3BlY3RvclByb3h5LT5kaWRCZWNvbWVBY3RpdmUoKTsK
LX0KLQotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOihX
S0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsKLSAg
ICBfaW5zcGVjdG9yUHJveHktPmNsb3NlRnJvbUNyYXNoKCk7Ci19Ci0KLS0gKEJPT0wpaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0gICAgcmV0dXJuIF9pbnNwZWN0
b3JQcm94eS0+aXNVbmRlclRlc3QoKTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1XS1dlYlZpZXcgKlJlbW90ZVdlYkluc3BlY3Rv
clByb3h5Ojp3ZWJWaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbnNwZWN0b3JWaWV3Lmdl
dCgpLndlYlZpZXc7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmRpZEJlY29t
ZUFjdGl2ZSgpCi17Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6VXBkYXRlRmluZFN0cmluZyhXZWJLaXQ6OnN0cmluZ0ZvckZpbmQoKSkp
OwotfQotCi1XZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNy
ZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgbV9vYmpDQWRhcHRlciA9IGFkb3B0
TlMoW1tXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgYWxsb2NdIGluaXRXaXRo
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6dGhpc10pOwotCi0gICAgUmVmPEFQSTo6SW5zcGVjdG9y
Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IG1fY2xpZW50LT5jb25maWd1cmF0aW9uRm9y
UmVtb3RlSW5zcGVjdG9yKCp0aGlzKTsKLSAgICBtX2luc3BlY3RvclZpZXcgPSBhZG9wdE5TKFtb
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhDb25maWd1cmF0aW9uOiBX
ZWJLaXQ6OndyYXBwZXIoY29uZmlndXJhdGlvbikgaW5zcGVjdGVkUGFnZTpudWxscHRyXSk7Ci0g
ICAgW21faW5zcGVjdG9yVmlldy5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgp
XTsKLQotICAgIG1fd2luZG93ID0gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2lu
ZG93KE5TWmVyb1JlY3QsIFdlYkluc3BlY3RvclByb3h5OjpJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6
UmVtb3RlKTsKLSAgICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07
Ci0gICAgW21fd2luZG93IHNldEZyYW1lQXV0b3NhdmVOYW1lOkAiV0tSZW1vdGVXZWJJbnNwZWN0
b3JXaW5kb3dGcmFtZSJdOwotCi0gICAgTlNWaWV3ICpjb250ZW50VmlldyA9IG1fd2luZG93Lmdl
dCgpLmNvbnRlbnRWaWV3OwotICAgIFt3ZWJWaWV3KCkgc2V0RnJhbWU6Y29udGVudFZpZXcuYm91
bmRzXTsKLSAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp3ZWJWaWV3KCldOwotCi0gICAgcmV0
dXJuIHdlYlZpZXcoKS0+X3BhZ2UuZ2V0KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmICht
X3dpbmRvdykgewotICAgICAgICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAg
W21fd2luZG93IGNsb3NlXTsKLSAgICAgICAgbV93aW5kb3cgPSBuaWw7Ci0gICAgfQotCi0gICAg
aWYgKG1faW5zcGVjdG9yVmlldykgewotICAgICAgICBbbV9pbnNwZWN0b3JWaWV3LmdldCgpIHNl
dERlbGVnYXRlOm5pbF07Ci0gICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG5pbDsKLSAgICB9Ci0K
LSAgICBpZiAobV9vYmpDQWRhcHRlcikKLSAgICAgICAgbV9vYmpDQWRhcHRlciA9IG5pbDsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKLXsK
LSAgICBbTlNXaW5kb3cgcmVtb3ZlRnJhbWVVc2luZ05hbWU6W21fd2luZG93IGZyYW1lQXV0b3Nh
dmVOYW1lXV07Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJp
bmdUb0Zyb250KCkKLXsKLSAgICBbbV93aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsK
LSAgICBbbV93aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOndlYlZpZXcoKV07Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wg
Zm9yY2VTYXZlRGlhbG9nKQotewotICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3Rv
clByb3h5TWFjLgotCi0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAK
LSAgICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChz
dWdnZXN0ZWRVUkwpLmdldCgpOwotICAgIGlmICghcGxhdGZvcm1VUkwpIHsKLSAgICAgICAgcGxh
dGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpzdWdnZXN0ZWRVUkxdOwotICAgICAgICAv
LyBUaGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUg
dG8gdGhlbS4KLSAgICAgICAgZm9yY2VTYXZlRGlhbG9nID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsKLSAgICBpZiAoIXBsYXRmb3JtVVJMKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBibG9jayBiZWxvdy4KLSAgICBTdHJp
bmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVSTDsKLSAgICBTdHJpbmcgY29udGVudENv
cHkgPSBjb250ZW50OwotCi0gICAgYXV0byBzYXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwp
IHsKLSAgICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7Ci0KLSAgICAgICAgbV9zdWdnZXN0ZWRUb0Fj
dHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKLQotICAgICAgICBp
ZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAg
ICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRl
UGFkZGluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRy
PE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5
dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKLSAgICAgICAgICAgIFtkYXRhQ29u
dGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2Fs
bHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwotCi0gICAg
ICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6
OkRpZFNhdmUoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmluZ10pKTsKLSAgICB9OwotCi0gICAgaWYg
KCFmb3JjZVNhdmVEaWFsb2cpIHsKLSAgICAgICAgc2F2ZVRvVVJMKHBsYXRmb3JtVVJMKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE5TU2F2ZVBhbmVsICpwYW5lbCA9IFtOU1NhdmVQ
YW5lbCBzYXZlUGFuZWxdOwotICAgIHBhbmVsLm5hbWVGaWVsZFN0cmluZ1ZhbHVlID0gcGxhdGZv
cm1VUkwubGFzdFBhdGhDb21wb25lbnQ7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsZSBVUkwg
d2UndmUgYWxyZWFkeSBzYXZlZCB0aGlzIGZpbGUgdG8gYSBwYXRoIGFuZAotICAgIC8vIGNhbiBw
cm92aWRlIGEgZ29vZCBkaXJlY3RvcnkgdG8gc2hvdy4gT3RoZXJ3aXNlLCB1c2UgdGhlIHN5c3Rl
bSdzCi0gICAgLy8gZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIGluaXRpYWwgZGlyZWN0b3J5IHRv
IHNob3cgaW4gdGhlIGRpYWxvZy4KLSAgICBpZiAocGxhdGZvcm1VUkwuaXNGaWxlVVJMKQotICAg
ICAgICBwYW5lbC5kaXJlY3RvcnlVUkwgPSBbcGxhdGZvcm1VUkwgVVJMQnlEZWxldGluZ0xhc3RQ
YXRoQ29tcG9uZW50XTsKLQotICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBeKE5TSW50ZWdl
ciByZXN1bHQpIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VDYW5jZWwp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gTlNNb2RhbFJl
c3BvbnNlT0spOwotICAgICAgICBzYXZlVG9VUkwocGFuZWwuVVJMKTsKLSAgICB9OwotCi0gICAg
TlNXaW5kb3cgKndpbmRvdyA9IG1fd2luZG93ID8gbV93aW5kb3cuZ2V0KCkgOiBbTlNBcHAga2V5
V2luZG93XTsKLSAgICBpZiAod2luZG93KQotICAgICAgICBbcGFuZWwgYmVnaW5TaGVldE1vZGFs
Rm9yV2luZG93OndpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci0g
ICAgZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbcGFuZWwgcnVuTW9kYWxdKTsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsKLSAgICAvLyBGSVhN
RTogU2hhcmUgd2l0aCBXZWJJbnNwZWN0b3JQcm94eU1hYy4KLQotICAgIEFTU0VSVCghc3VnZ2Vz
dGVkVVJMLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgUmV0YWluUHRyPE5TVVJMPiBhY3R1YWxVUkwg
PSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpOwotICAgIC8vIERv
IG5vdCBhcHBlbmQgdW5sZXNzIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGNvbmZpcm1lZCB0aGlzIGZp
bGVuYW1lIGluIHNhdmUoKS4KLSAgICBpZiAoIWFjdHVhbFVSTCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgTlNGaWxlSGFuZGxlICpoYW5kbGUgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVGb3JX
cml0aW5nVG9VUkw6YWN0dWFsVVJMLmdldCgpIGVycm9yOk5VTExdOwotICAgIFtoYW5kbGUgc2Vl
a1RvRW5kT2ZGaWxlXTsKLSAgICBbaGFuZGxlIHdyaXRlRGF0YTpbY29udGVudCBkYXRhVXNpbmdF
bmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtoYW5kbGUgY2xvc2VGaWxlXTsK
LQotICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSA9IHdlYlZpZXcoKS0+X3BhZ2UuZ2V0
KCk7Ci0gICAgaW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9y
VUk6OkRpZEFwcGVuZChbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSkpOwotfQotCi12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgbV9zaGVldFJlY3QgPSByZWN0OwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVhcmFuY2UoSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKLXsKLSAgICBOU0FwcGVhcmFuY2Ug
KnBsYXRmb3JtQXBwZWFyYW5jZTsKLSAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKLSAgICBjYXNl
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlOjpTeXN0ZW06Ci0gICAgICAgIHBs
YXRmb3JtQXBwZWFyYW5jZSA9IG5pbDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlOjpMaWdodDoKLSAgICAgICAgcGxhdGZvcm1B
cHBlYXJhbmNlID0gW05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6TlNBcHBlYXJhbmNlTmFt
ZUFxdWFdOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OkFwcGVhcmFuY2U6OkRhcms6Ci0gICAgICAgIHBsYXRmb3JtQXBwZWFyYW5jZSA9IFtOU0Fw
cGVhcmFuY2UgYXBwZWFyYW5jZU5hbWVkOk5TQXBwZWFyYW5jZU5hbWVEYXJrQXF1YV07Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIHdlYlZpZXcoKS5hcHBlYXJhbmNlID0gcGxhdGZvcm1B
cHBlYXJhbmNlOwotCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IG1fd2luZG93LmdldCgpOwotICAg
IEFTU0VSVCh3aW5kb3cpOwotICAgIHdpbmRvdy5hcHBlYXJhbmNlID0gcGxhdGZvcm1BcHBlYXJh
bmNlOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2lu
ZG93RHJhZygpCi17Ci0gICAgd2ViVmlldygpLT5fcGFnZS0+c3RhcnRXaW5kb3dEcmFnKCk7Ci19
Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlblVSTEV4dGVybmFs
bHkoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3Bh
Y2VdIG9wZW5VUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6dXJsXV07Ci19Ci0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmlj
YXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIEFTU0VSVCghY2VydGlmaWNhdGVJbmZv
LmlzRW1wdHkoKSk7Ci0KLSAgICBSZXRhaW5QdHI8U0ZDZXJ0aWZpY2F0ZVBhbmVsPiBjZXJ0aWZp
Y2F0ZVBhbmVsID0gYWRvcHROUyhbW1NGQ2VydGlmaWNhdGVQYW5lbCBhbGxvY10gaW5pdF0pOwot
Ci0gICAgQVNTRVJUKG1fd2luZG93KTsKLSNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9O
KQotICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6bV93aW5kb3cuZ2V0
KCkgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxs
cHRyIHRydXN0OmNlcnRpZmljYXRlSW5mby50cnVzdCgpIHNob3dHcm91cDpZRVNdOwotI2Vsc2UK
LSAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93Om1fd2luZG93LmdldCgp
IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0
ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFp
bigpIHNob3dHcm91cDpZRVNdOwotI2VuZGlmCi0KLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVk
IGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBkaXNwbGF5ZWQsIGJlY2F1c2UgdGhlIGNl
cnRpZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJlZm9yZWhhbmQuCi0gICAgU0ZDZXJ0aWZpY2F0
ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0aWZpY2F0ZVBhbmVsIGNlcnRpZmljYXRlVmll
d107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5VHJ1c3Q6WUVTXTsKLSAgICBbY2Vy
dGlmaWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9dOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcg
c2V0RGlzcGxheURldGFpbHM6WUVTXTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERldGFpbHNE
aXNjbG9zZWQ6WUVTXTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJ
bnNwZWN0b3JVSVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L21hYy9SZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4Mjg5ODgx
ODFhZWM0N2ZjYTYyNjM3M2NjYTczOTgzMzcyYmJhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHlNYWMubW0KQEAgLTAsMCArMSwyOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oIgorCisjaWYgUExB
VEZPUk0oTUFDKSAmJiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2ltcG9ydCAiR2xvYmFs
RmluZEluUGFnZVN0YXRlLmgiCisjaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2Vz
LmgiCisjaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCIKKyNpbXBv
cnQgIldLRnJhbWVJbmZvLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgi
CisjaW1wb3J0ICJXS05hdmlnYXRpb25BY3Rpb24uaCIKKyNpbXBvcnQgIldLTmF2aWdhdGlvbkRl
bGVnYXRlLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViSW5z
cGVjdG9yVUlQcm94eS5oIgorI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCisjaW1wb3J0ICJXZWJQ
YWdlUHJveHkuaCIKKyNpbXBvcnQgIl9XS0luc3BlY3RvckNvbmZpZ3VyYXRpb25JbnRlcm5hbC5o
IgorI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVBhbmVsLmg+CisjaW1w
b3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRlVmlldy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCitA
aW50ZXJmYWNlIFdLUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVyIDogTlNPYmpl
Y3QgPE5TV2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4g
eworICAgIFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eSogX2luc3BlY3RvclByb3h5
OworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eToo
V2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5KilpbnNwZWN0b3JQcm94eTsKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFdLUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU9iakNBZGFwdGVy
CisKKy0gKE5TUmVjdCl3aW5kb3c6KE5TV2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0
OihOU1dpbmRvdyAqKXNoZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBpZiAoX2lu
c3BlY3RvclByb3h5KQorICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJv
eHktPnNoZWV0UmVjdCgpLmhlaWdodCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndp
ZHRoKCksIDApOworICAgIHJldHVybiByZWN0OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OihXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHkqKWluc3BlY3RvclByb3h5Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQ
cm94eTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWluc3BlY3RvcldLV2ViVmll
d0RpZEJlY29tZUFjdGl2ZTooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZp
ZXdDb250cm9sbGVyCit7CisgICAgX2luc3BlY3RvclByb3h5LT5kaWRCZWNvbWVBY3RpdmUoKTsK
K30KKworLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOihX
S0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sKKyAg
ICBfaW5zcGVjdG9yUHJveHktPmNsb3NlRnJvbUNyYXNoKCk7Cit9CisKKy0gKEJPT0wpaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgcmV0dXJuIF9pbnNwZWN0
b3JQcm94eS0+aXNVbmRlclRlc3QoKTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXS1dlYlZpZXcgKlJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6OndlYlZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBtX2luc3BlY3RvclZpZXcu
Z2V0KCkud2ViVmlldzsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpkaWRC
ZWNvbWVBY3RpdmUoKQoreworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yVUk6OlVwZGF0ZUZpbmRTdHJpbmcoV2ViS2l0OjpzdHJpbmdGb3JGaW5k
KCkpKTsKK30KKworV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgbV9vYmpDQWRhcHRlciA9
IGFkb3B0TlMoW1tXS1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlPYmpDQWRhcHRlciBhbGxvY10g
aW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OnRoaXNdKTsKKworICAgIFJlZjxBUEk6
Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBtX2NsaWVudC0+Y29uZmln
dXJhdGlvbkZvclJlbW90ZUluc3BlY3RvcigqdGhpcyk7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0g
YWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoQ29uZmln
dXJhdGlvbjogV2ViS2l0Ojp3cmFwcGVyKGNvbmZpZ3VyYXRpb24pIGluc3BlY3RlZFBhZ2U6bnVs
bHB0cl0pOworICAgIFttX2luc3BlY3RvclZpZXcuZ2V0KCkgc2V0RGVsZWdhdGU6bV9vYmpDQWRh
cHRlci5nZXQoKV07CisKKyAgICBtX3dpbmRvdyA9IFdlYkluc3BlY3RvclVJUHJveHk6OmNyZWF0
ZUZyb250ZW5kV2luZG93KE5TWmVyb1JlY3QsIFdlYkluc3BlY3RvclVJUHJveHk6Okluc3BlY3Rp
b25UYXJnZXRUeXBlOjpSZW1vdGUpOworICAgIFttX3dpbmRvdyBzZXREZWxlZ2F0ZTptX29iakNB
ZGFwdGVyLmdldCgpXTsKKyAgICBbbV93aW5kb3cgc2V0RnJhbWVBdXRvc2F2ZU5hbWU6QCJXS1Jl
bW90ZVdlYkluc3BlY3RvcldpbmRvd0ZyYW1lIl07CisKKyAgICBOU1ZpZXcgKmNvbnRlbnRWaWV3
ID0gbV93aW5kb3cuZ2V0KCkuY29udGVudFZpZXc7CisgICAgW3dlYlZpZXcoKSBzZXRGcmFtZTpj
b250ZW50Vmlldy5ib3VuZHNdOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OndlYlZpZXco
KV07CisKKyAgICByZXR1cm4gd2ViVmlldygpLT5fcGFnZS5nZXQoKTsKK30KKwordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCkKK3sKKyAgICBpZiAobV93aW5kb3cpIHsKKyAgICAgICAgW21fd2luZG93IHNldERlbGVnYXRl
Om5pbF07CisgICAgICAgIFttX3dpbmRvdyBjbG9zZV07CisgICAgICAgIG1fd2luZG93ID0gbmls
OworICAgIH0KKworICAgIGlmIChtX2luc3BlY3RvclZpZXcpIHsKKyAgICAgICAgW21faW5zcGVj
dG9yVmlldy5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBtX2luc3BlY3RvclZpZXcg
PSBuaWw7CisgICAgfQorCisgICAgaWYgKG1fb2JqQ0FkYXB0ZXIpCisgICAgICAgIG1fb2JqQ0Fk
YXB0ZXIgPSBuaWw7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZv
cm1SZXNldFN0YXRlKCkKK3sKKyAgICBbTlNXaW5kb3cgcmVtb3ZlRnJhbWVVc2luZ05hbWU6W21f
d2luZG93IGZyYW1lQXV0b3NhdmVOYW1lXV07Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIFttX3dpbmRvdyBtYWtlS2V5
QW5kT3JkZXJGcm9udDpuaWxdOworICAgIFttX3dpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6d2Vi
VmlldygpXTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNh
dmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9v
bCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKK3sKKyAgICAvLyBGSVhNRTog
U2hhcmUgd2l0aCBXZWJJbnNwZWN0b3JVSVByb3h5TWFjLgorCisgICAgQVNTRVJUKCFzdWdnZXN0
ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dl
c3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOworICAgIGlmICghcGxh
dGZvcm1VUkwpIHsKKyAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpz
dWdnZXN0ZWRVUkxdOworICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVu
YW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KKyAgICAgICAgZm9yY2VTYXZlRGlhbG9n
ID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsKKyAgICBpZiAo
IXBsYXRmb3JtVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBOZWNlc3NhcnkgZm9yIHRo
ZSBibG9jayBiZWxvdy4KKyAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVS
TDsKKyAgICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50OworCisgICAgYXV0byBzYXZlVG9V
UkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKKyAgICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7CisK
KyAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwg
YWN0dWFsVVJMKTsKKworICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgeworICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IG91dDsKKyAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRD
b3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtb
TlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCld
KTsKKyAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNh
bGx5OllFU107CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRl
VG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nIGVycm9yOk5VTExdOworCisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmlu
Z10pKTsKKyAgICB9OworCisgICAgaWYgKCFmb3JjZVNhdmVEaWFsb2cpIHsKKyAgICAgICAgc2F2
ZVRvVVJMKHBsYXRmb3JtVVJMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TU2F2
ZVBhbmVsICpwYW5lbCA9IFtOU1NhdmVQYW5lbCBzYXZlUGFuZWxdOworICAgIHBhbmVsLm5hbWVG
aWVsZFN0cmluZ1ZhbHVlID0gcGxhdGZvcm1VUkwubGFzdFBhdGhDb21wb25lbnQ7CisKKyAgICAv
LyBJZiB3ZSBoYXZlIGEgZmlsZSBVUkwgd2UndmUgYWxyZWFkeSBzYXZlZCB0aGlzIGZpbGUgdG8g
YSBwYXRoIGFuZAorICAgIC8vIGNhbiBwcm92aWRlIGEgZ29vZCBkaXJlY3RvcnkgdG8gc2hvdy4g
T3RoZXJ3aXNlLCB1c2UgdGhlIHN5c3RlbSdzCisgICAgLy8gZGVmYXVsdCBiZWhhdmlvciBmb3Ig
dGhlIGluaXRpYWwgZGlyZWN0b3J5IHRvIHNob3cgaW4gdGhlIGRpYWxvZy4KKyAgICBpZiAocGxh
dGZvcm1VUkwuaXNGaWxlVVJMKQorICAgICAgICBwYW5lbC5kaXJlY3RvcnlVUkwgPSBbcGxhdGZv
cm1VUkwgVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XTsKKworICAgIGF1dG8gY29tcGxl
dGlvbkhhbmRsZXIgPSBeKE5TSW50ZWdlciByZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9
PSBOU01vZGFsUmVzcG9uc2VDYW5jZWwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spOworICAgICAgICBzYXZlVG9VUkwocGFu
ZWwuVVJMKTsKKyAgICB9OworCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IG1fd2luZG93ID8gbV93
aW5kb3cuZ2V0KCkgOiBbTlNBcHAga2V5V2luZG93XTsKKyAgICBpZiAod2luZG93KQorICAgICAg
ICBbcGFuZWwgYmVnaW5TaGVldE1vZGFsRm9yV2luZG93OndpbmRvdyBjb21wbGV0aW9uSGFuZGxl
cjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihbcGFuZWwgcnVuTW9kYWxdKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5n
JiBjb250ZW50KQoreworICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3RvclVJUHJv
eHlNYWMuCisKKyAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOworICAgIAorICAg
IFJldGFpblB0cjxOU1VSTD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5n
ZXQoc3VnZ2VzdGVkVVJMKTsKKyAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUgdXNlciBo
YXMgYWxyZWFkeSBjb25maXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCisgICAgaWYgKCFh
Y3R1YWxVUkwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxlID0g
W05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQoKSBl
cnJvcjpOVUxMXTsKKyAgICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07CisgICAgW2hhbmRsZSB3
cml0ZURhdGE6W2NvbnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmdd
XTsKKyAgICBbaGFuZGxlIGNsb3NlRmlsZV07CisKKyAgICBXZWJQYWdlUHJveHkqIGluc3BlY3Rv
clBhZ2UgPSB3ZWJWaWV3KCktPl9wYWdlLmdldCgpOworICAgIGluc3BlY3RvclBhZ2UtPnNlbmQo
TWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRBcHBlbmQoW2FjdHVhbFVSTCBhYnNv
bHV0ZVN0cmluZ10pKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9zaGVldFJl
Y3QgPSByZWN0OworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
U2V0Rm9yY2VkQXBwZWFyYW5jZShJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSBh
cHBlYXJhbmNlKQoreworICAgIE5TQXBwZWFyYW5jZSAqcGxhdGZvcm1BcHBlYXJhbmNlOworICAg
IHN3aXRjaCAoYXBwZWFyYW5jZSkgeworICAgIGNhc2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OkFwcGVhcmFuY2U6OlN5c3RlbToKKyAgICAgICAgcGxhdGZvcm1BcHBlYXJhbmNlID0gbmlsOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVh
cmFuY2U6OkxpZ2h0OgorICAgICAgICBwbGF0Zm9ybUFwcGVhcmFuY2UgPSBbTlNBcHBlYXJhbmNl
IGFwcGVhcmFuY2VOYW1lZDpOU0FwcGVhcmFuY2VOYW1lQXF1YV07CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZTo6RGFyazoKKyAg
ICAgICAgcGxhdGZvcm1BcHBlYXJhbmNlID0gW05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6
TlNBcHBlYXJhbmNlTmFtZURhcmtBcXVhXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
d2ViVmlldygpLmFwcGVhcmFuY2UgPSBwbGF0Zm9ybUFwcGVhcmFuY2U7CisKKyAgICBOU1dpbmRv
dyAqd2luZG93ID0gbV93aW5kb3cuZ2V0KCk7CisgICAgQVNTRVJUKHdpbmRvdyk7CisgICAgd2lu
ZG93LmFwcGVhcmFuY2UgPSBwbGF0Zm9ybUFwcGVhcmFuY2U7Cit9CisKK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQoreworICAgIHdlYlZp
ZXcoKS0+X3BhZ2UtPnN0YXJ0V2luZG93RHJhZygpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtT3BlblVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJiB1cmwp
Cit7CisgICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6W05TVVJMIFVS
TFdpdGhTdHJpbmc6dXJsXV07Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0
ZUluZm8pCit7CisgICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUluZm8uaXNFbXB0eSgpKTsKKworICAg
IFJldGFpblB0cjxTRkNlcnRpZmljYXRlUGFuZWw+IGNlcnRpZmljYXRlUGFuZWwgPSBhZG9wdE5T
KFtbU0ZDZXJ0aWZpY2F0ZVBhbmVsIGFsbG9jXSBpbml0XSk7CisKKyAgICBBU1NFUlQobV93aW5k
b3cpOworI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCisgICAgW2NlcnRpZmljYXRl
UGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5p
bCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNh
dGVJbmZvLnRydXN0KCkgc2hvd0dyb3VwOllFU107CisjZWxzZQorICAgIFtjZXJ0aWZpY2F0ZVBh
bmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6bV93aW5kb3cuZ2V0KCkgbW9kYWxEZWxlZ2F0ZTpuaWwg
ZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIGNlcnRpZmljYXRlczooTlNB
cnJheSAqKWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkgc2hvd0dyb3VwOllFU107
CisjZW5kaWYKKworICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRydXN0IHBh
bmVsIGhhcyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUgY2VydGlmaWNhdGVWaWV3IGRvZXNu
J3QgZXhpc3QgYmVmb3JlaGFuZC4KKyAgICBTRkNlcnRpZmljYXRlVmlldyAqY2VydGlmaWNhdGVW
aWV3ID0gW2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVWaWV3XTsKKyAgICBbY2VydGlmaWNh
dGVWaWV3IHNldERpc3BsYXlUcnVzdDpZRVNdOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RWRp
dGFibGVUcnVzdDpOT107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5RGV0YWlsczpZ
RVNdOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWlsc0Rpc2Nsb3NlZDpZRVNdOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIubW0KaW5kZXggZjgxZjY5NmZhMTJmOTZkMDU2NmQxNDk4NDZhYzk2YmY1MDdkODhj
Ni4uZWQ2Zjc2MzI5MjAzYzA5MGMxNmY0N2NmNjE2NTZiYmFkMDM0YWMzMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250
cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQpAQCAtNDAsNyArNDAsNyBAQAogI2ltcG9ydCAiV0tV
SURlbGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZh
dGUuaCIKICNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKLSNpbXBvcnQgIldlYkluc3BlY3Rv
clByb3h5LmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSVByb3h5LmgiCiAjaW1wb3J0ICJXZWJJ
bnNwZWN0b3JVdGlsaXRpZXMuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCAi
X1dLSW5zcGVjdG9yQ29uZmlndXJhdGlvbkludGVybmFsLmgiCkBAIC05Myw3ICs5Myw3IEBAIC0g
KFdLV2ViVmlldyAqKXdlYlZpZXcKIHsKICAgICAvLyBDb25zdHJ1Y3QgbGF6aWx5IHNvIHRoZSBj
bGllbnQgY2FuIHNldCB0aGUgZGVsZWdhdGUgYmVmb3JlIHRoZSBXZWJWaWV3IGlzIGNyZWF0ZWQu
CiAgICAgaWYgKCFfd2ViVmlldykgewotICAgICAgICBOU1JlY3QgaW5pdGlhbEZyYW1lID0gTlNN
YWtlUmVjdCgwLCAwLCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lk
dGgsIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQpOworICAg
ICAgICBOU1JlY3QgaW5pdGlhbEZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBXZWJLaXQ6OldlYklu
c3BlY3RvclVJUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCwgV2ViS2l0OjpXZWJJbnNwZWN0b3JV
SVByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0KTsKICAgICAgICAgX3dlYlZpZXcgPSBhZG9wdE5T
KFtbV0tJbnNwZWN0b3JXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6aW5pdGlhbEZyYW1l
IGNvbmZpZ3VyYXRpb246c2VsZi53ZWJWaWV3Q29uZmlndXJhdGlvbl0pOwogICAgICAgICBbX3dl
YlZpZXcgc2V0VUlEZWxlZ2F0ZTpzZWxmXTsKICAgICAgICAgW193ZWJWaWV3IHNldE5hdmlnYXRp
b25EZWxlZ2F0ZTpzZWxmXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzZWRiYmY5ODFlZjg5ODU5ZDlmNTcwOTgxZDlhZTRlMjAxMmY1ZDVk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KKysr
IC9kZXYvbnVsbApAQCAtMSw4MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaWYgUExBVEZPUk0o
TUFDKQotCi0jaW1wb3J0ICJBUElJbnNwZWN0b3JDbGllbnQuaCIKLSNpbXBvcnQgIkFQSUluc3Bl
Y3RvckNvbmZpZ3VyYXRpb24uaCIKLSNpbXBvcnQgIkFQSVVJQ2xpZW50LmgiCi0jaW1wb3J0ICJH
bG9iYWxGaW5kSW5QYWdlU3RhdGUuaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yUHJpdmF0ZU1hYy5o
IgotI2ltcG9ydCAiV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIgotI2ltcG9ydCAiV0tPYmpl
Y3QuaCIKLSNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdJbnRl
cm5hbC5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2Vi
UGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIl9XS0luc3Bl
Y3RvckNvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgotI2ltcG9ydCAiX1dLSW5zcGVjdG9ySW50ZXJu
YWwuaCIKLSNpbXBvcnQgIl9XS0luc3BlY3RvcldpbmRvdy5oIgotI2ltcG9ydCA8U2VjdXJpdHlJ
bnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVBhbmVsLmg+Ci0jaW1wb3J0IDxTZWN1cml0eUludGVyZmFj
ZS9TRkNlcnRpZmljYXRlVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8u
aD4KLSNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgotI2lt
cG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9CYXNl
NjQuaD4KLQotc3RhdGljIGNvbnN0IE5TVUludGVnZXIgd2luZG93U3R5bGVNYXNrID0gTlNXaW5k
b3dTdHlsZU1hc2tUaXRsZWQgfCBOU1dpbmRvd1N0eWxlTWFza0Nsb3NhYmxlIHwgTlNXaW5kb3dT
dHlsZU1hc2tNaW5pYXR1cml6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrUmVzaXphYmxlIHwgTlNX
aW5kb3dTdHlsZU1hc2tGdWxsU2l6ZUNvbnRlbnRWaWV3OwotCi0vLyBUaGUgdGltZSB3ZSBrZWVw
IG91ciBXZWJWaWV3IGFsaXZlIGJlZm9yZSBjbG9zaW5nIGl0IGFuZCBpdHMgcHJvY2Vzcy4KLS8v
IFJldXNpbmcgdGhlIFdlYlZpZXcgaW1wcm92ZXMgc3RhcnQgdXAgdGltZSBmb3IgcGVvcGxlIHRo
YXQganVtcCBpbiBhbmQgb3V0IG9mIHRoZSBJbnNwZWN0b3IuCi1zdGF0aWMgY29uc3QgU2Vjb25k
cyB3ZWJWaWV3Q2xvc2VUaW1lb3V0IHsgMV9taW4gfTsKLQotc3RhdGljIHZvaWQqIGtXaW5kb3dD
b250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0ID0gJmtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2
ZXJDb250ZXh0OwotCi1AaW50ZXJmYWNlIFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciAo
KSA8TlNXaW5kb3dEZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPgot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpXZWJJ
bnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHk7Ci0tICh2b2lkKWludmFsaWRhdGU7Ci0KLUBl
bmQKLQotQGltcGxlbWVudGF0aW9uIFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciB7Ci0g
ICAgV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eSogX2luc3BlY3RvclByb3h5OwotfQotCi0tIChX
S0luc3BlY3RvclJlZilpbnNwZWN0b3JSZWYKLXsKLSAgICByZXR1cm4gdG9BUEkoX2luc3BlY3Rv
clByb3h5KTsKLX0KLQotLSAoX1dLSW5zcGVjdG9yICopaW5zcGVjdG9yCi17Ci0gICAgaWYgKF9p
bnNwZWN0b3JQcm94eSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXIoKl9pbnNwZWN0b3JQcm94eSk7
Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViSW5zcGVj
dG9yUHJveHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5Ci17Ci0g
ICAgQVNTRVJUX0FSRyhpbnNwZWN0b3JQcm94eSwgaW5zcGVjdG9yUHJveHkpOwotCi0gICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAvLyBV
bnJldGFpbmVkIHRvIGF2b2lkIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIF9pbnNwZWN0b3JQcm94
eSA9IGluc3BlY3RvclByb3h5OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW52
YWxpZGF0ZQotewotICAgIF9pbnNwZWN0b3JQcm94eSA9IG51bGxwdHI7Ci19Ci0KLS0gKE5TUmVj
dCl3aW5kb3c6KE5TV2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0OihOU1dpbmRvdyAq
KXNoZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5
KQotICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVj
dCgpLmhlaWdodCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndpZHRoKCksIDApOwot
ICAgIHJldHVybiByZWN0OwotfQotCi0tICh2b2lkKXdpbmRvd0RpZE1vdmU6KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAg
X2luc3BlY3RvclByb3h5LT53aW5kb3dGcmFtZURpZENoYW5nZSgpOwotfQotCi0tICh2b2lkKXdp
bmRvd0RpZFJlc2l6ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAo
X2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0ZyYW1lRGlk
Q2hhbmdlKCk7Ci19Ci0KLS0gKHZvaWQpd2luZG93V2lsbENsb3NlOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNw
ZWN0b3JQcm94eS0+Y2xvc2UoKTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxTY3Jl
ZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQ
cm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdl
KCk7Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkRXhpdEZ1bGxTY3JlZW46KE5TTm90aWZpY2F0aW9u
ICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2lu
c3BlY3RvclByb3h5LT53aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCk7Ci19Ci0KLS0gKHZvaWQp
aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgotewotICAgIC8vIFJlc2l6aW5nIHRoZSB2aWV3cyB3aGlsZSBpbnNpZGUgdGhpcyBub3RpZmlj
YXRpb24gY2FuIGxlYWQgdG8gYmFkIHJlc3VsdHMgd2hlbiBlbnRlcmluZwotICAgIC8vIG9yIGV4
aXRpbmcgZnVsbCBzY3JlZW4uIFRvIGF2b2lkIHRoYXQgd2UgbmVlZCB0byBwZXJmb3JtIHRoZSB3
b3JrIGFmdGVyIGEgZGVsYXkuIFdlIG9ubHkKLSAgICAvLyBkZXBlbmQgb24gdGhpcyBmb3IgZW5m
b3JjaW5nIHRoZSBoZWlnaHQgY29uc3RyYWludHMsIHNvIGEgc21hbGwgZGVsYXkgaXNuJ3QgdGVy
cmlibGUuIE1vc3QKLSAgICAvLyBvZiB0aGUgdGltZSB0aGUgdmlld3Mgd2lsbCBhbHJlYWR5IGhh
dmUgdGhlIGNvcnJlY3QgZnJhbWVzIGJlY2F1c2Ugb2YgYXV0b3Jlc2l6aW5nIG1hc2tzLgotCi0g
ICAgZGlzcGF0Y2hfYWZ0ZXIoRElTUEFUQ0hfVElNRV9OT1csIGRpc3BhdGNoX2dldF9tYWluX3F1
ZXVlKCksIF57Ci0gICAgICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgICAgICBfaW5z
cGVjdG9yUHJveHktPmluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSgpOwotICAgIH0pOwotfQot
Ci0tICh2b2lkKW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBvZk9i
amVjdDooaWQpb2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5PE5TS2V5VmFsdWVDaGFuZ2VLZXks
IGlkPiAqKWNoYW5nZSBjb250ZXh0Oih2b2lkICopY29udGV4dAotewotICAgIGlmIChjb250ZXh0
ICE9IGtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0KSB7Ci0gICAgICAgIFtzdXBl
ciBvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOmtleVBhdGggb2ZPYmplY3Q6b2JqZWN0IGNoYW5nZTpj
aGFuZ2UgY29udGV4dDpjb250ZXh0XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE5T
V2luZG93ICp3aW5kb3cgPSBvYmplY3Q7Ci0gICAgQVNTRVJUKFt3aW5kb3cgaXNLaW5kT2ZDbGFz
czpbTlNXaW5kb3cgY2xhc3NdXSk7Ci0gICAgaWYgKHdpbmRvdy5pbkxpdmVSZXNpemUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGRpc3BhdGNoX2FmdGVyKERJU1BBVENIX1RJTUVfTk9XLCBkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAoX2luc3BlY3RvclByb3h5KQot
ICAgICAgICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2Uo
KTsKLSAgICB9KTsKLX0KLQotLy8gTUFSSzogV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVn
YXRlIG1ldGhvZHMKLQotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZEJlY29tZUFj
dGl2ZTooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVy
Ci17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT5k
aWRCZWNvbWVBY3RpdmUoKTsKLX0KLQotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlcklu
c3BlY3RvckRpZENyYXNoOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVj
dG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKLX0KLQotLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICop
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsKLSAgICByZXR1cm4gX2luc3BlY3RvclByb3h5ID8g
X2luc3BlY3RvclByb3h5LT5pc1VuZGVyVGVzdCgpIDogZmFsc2U7Ci19Ci0KLS0gKHZvaWQpaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXI6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0
b3JWaWV3Q29udHJvbGxlciB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdwot
ewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+YXR0
YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhpbnNwZWN0b3JWaWV3Q29udHJvbGxlci53ZWJWaWV3
LndpbmRvdyk7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9X
aW5kb3c6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxl
cgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+
YXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhpbnNwZWN0b3JWaWV3Q29udHJvbGxlci53ZWJWaWV3
LndpbmRvdyk7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6KFdLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlciBvcGVuVVJMRXh0ZXJu
YWxseTooTlNVUkwgKil1cmwKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBf
aW5zcGVjdG9yUHJveHktPm9wZW5VUkxFeHRlcm5hbGx5KHVybC5hYnNvbHV0ZVN0cmluZyk7Ci19
Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGlkQmVjb21lQWN0aXZlKCkKLXsKLSAgICBtX2lu
c3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpVcGRhdGVGaW5kU3Ry
aW5nKFdlYktpdDo6c3RyaW5nRm9yRmluZCgpKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OmF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywgTlNWaWV3ICpuZXdW
aWV3KQotewotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3Zl
T2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90
aWZpY2F0aW9uIG9iamVjdDpvbGRWaWV3XTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6QHNl
bGVjdG9yKGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVEaWRD
aGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5ld1ZpZXddOwotCi0gICAgaWYgKG1faXNBdHRhY2hl
ZCkKLSAgICAgICAgYXR0YWNoKG1fYXR0YWNobWVudFNpZGUpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjphdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KE5TV2luZG93ICpvbGRXaW5k
b3cpCi17Ci0gICAgaWYgKG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCkgewotICAgICAg
ICBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QgPSBmYWxzZTsKLSAgICAgICAgW29sZFdp
bmRvdyByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJjb250
ZW50TGF5b3V0UmVjdCIgY29udGV4dDprV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4
dF07Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50RGlkTW92
ZVRvV2luZG93KE5TV2luZG93ICpuZXdXaW5kb3cpCi17Ci0gICAgaWYgKG1faXNBdHRhY2hlZCAm
JiAhIW5ld1dpbmRvdykgewotICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3Qg
PSB0cnVlOwotICAgICAgICBbbmV3V2luZG93IGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0
KCkgZm9yS2V5UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBvcHRpb25zOjAgY29udGV4dDprV2lu
ZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dF07Ci0gICAgICAgIGluc3BlY3RlZFZpZXdG
cmFtZURpZENoYW5nZSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBk
YXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAotewotICAgIGlmICghbV9pbnNwZWN0b3JX
aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGxldmVsID0gaW5zcGVjdGlv
bkxldmVsKCk7Ci0gICAgaWYgKGxldmVsID4gMSkgewotICAgICAgICBOU1N0cmluZyAqZGVidWdU
aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNw
ZWN0b3IgWyVkXSDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUgd2hlbiBpbnNw
ZWN0aW5nIFdlYiBJbnNwZWN0b3IiKSwgbGV2ZWwsIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsK
LSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldFRpdGxlOmRlYnVnVGl0bGVdOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIE5TU3RyaW5nICp0aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNwZWN0b3Ig4oCUICVAIiwgIldlYiBJbnNwZWN0b3Ig
d2luZG93IHRpdGxlIiksIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKLSAgICAgICAgW21faW5z
cGVjdG9yV2luZG93IHNldFRpdGxlOnRpdGxlXTsKLSAgICB9Ci19Ci0KLVJldGFpblB0cjxOU1dp
bmRvdz4gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZl
ZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQotewotICAgIE5T
UmVjdCB3aW5kb3dGcmFtZSA9ICFOU0lzRW1wdHlSZWN0KHNhdmVkV2luZG93RnJhbWUpID8gc2F2
ZWRXaW5kb3dGcmFtZSA6IE5TTWFrZVJlY3QoMCwgMCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0
aWFsV2luZG93SGVpZ2h0KTsKLSAgICBhdXRvIHdpbmRvdyA9IGFkb3B0TlMoW1tfV0tJbnNwZWN0
b3JXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93RnJhbWUgc3R5bGVNYXNr
OndpbmRvd1N0eWxlTWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9d
KTsKLSAgICBbd2luZG93IHNldE1pblNpemU6TlNNYWtlU2l6ZShtaW5pbXVtV2luZG93V2lkdGgs
IG1pbmltdW1XaW5kb3dIZWlnaHQpXTsKLSAgICBbd2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3Nl
ZDpOT107Ci0gICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVj
dGlvbkJlaGF2aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlblByaW1h
cnkpXTsKLQotICAgIGJvb2wgZm9yUmVtb3RlVGFyZ2V0ID0gdGFyZ2V0VHlwZSA9PSBJbnNwZWN0
aW9uVGFyZ2V0VHlwZTo6UmVtb3RlOwotICAgIFt3aW5kb3cgc2V0Rm9yUmVtb3RlVGFyZ2V0OmZv
clJlbW90ZVRhcmdldF07Ci0KLSAgICBDR0Zsb2F0IGFwcHJveGltYXRlbHlIYWxmU2NyZWVuU2l6
ZSA9IChbd2luZG93IHNjcmVlbl0uZnJhbWUuc2l6ZS53aWR0aCAvIDIpIC0gNDsKLSAgICBDR0Zs
b2F0IG1pbmltdW1GdWxsU2NyZWVuV2lkdGggPSBzdGQ6Om1heDxDR0Zsb2F0Pig2MzYsIGFwcHJv
eGltYXRlbHlIYWxmU2NyZWVuU2l6ZSk7Ci0gICAgW3dpbmRvdyBzZXRNaW5GdWxsU2NyZWVuQ29u
dGVudFNpemU6TlNNYWtlU2l6ZShtaW5pbXVtRnVsbFNjcmVlbldpZHRoLCBtaW5pbXVtV2luZG93
SGVpZ2h0KV07Ci0gICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29s
bGVjdGlvbkJlaGF2aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlbkFs
bG93c1RpbGluZyldOwotCi0gICAgW3dpbmRvdyBzZXRUaXRsZWJhckFwcGVhcnNUcmFuc3BhcmVu
dDpZRVNdOwotCi0gICAgLy8gQ2VudGVyIHRoZSB3aW5kb3cgaWYgdGhlIHNhdmVkIGZyYW1lIHdh
cyBlbXB0eS4KLSAgICBpZiAoTlNJc0VtcHR5UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSkKLSAgICAg
ICAgW3dpbmRvdyBjZW50ZXJdOwotCi0gICAgcmV0dXJuIHdpbmRvdzsKLX0KLQotV2ViUGFnZVBy
b3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewot
ICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOwotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdl
KTsKLQotICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKLQot
ICAgIGlmIChtX2luc3BlY3RvclZpZXdDb250cm9sbGVyKSB7Ci0gICAgICAgIEFTU0VSVChtX29i
akNBZGFwdGVyKTsKLSAgICAgICAgcmV0dXJuIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdl
YlZpZXddLT5fcGFnZS5nZXQoKTsKLSAgICB9Ci0KLSAgICBtX29iakNBZGFwdGVyID0gYWRvcHRO
UyhbW1dLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciBhbGxvY10gaW5pdFdpdGhXZWJJbnNw
ZWN0b3JQcm94eTp0aGlzXSk7Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVk
UGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBzZWxl
Y3RvcjpAc2VsZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikgbmFtZTpOU1ZpZXdG
cmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6aW5zcGVjdGVkVmlld107Ci0KLSAgICBh
dXRvIGNvbmZpZ3VyYXRpb24gPSBpbnNwZWN0ZWRQYWdlKCktPnVpQ2xpZW50KCkuY29uZmlndXJh
dGlvbkZvckxvY2FsSW5zcGVjdG9yKCppbnNwZWN0ZWRQYWdlKCksICAqdGhpcyk7Ci0gICAgbV9p
bnNwZWN0b3JWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tXS0luc3BlY3RvclZpZXdDb250cm9s
bGVyIGFsbG9jXSBpbml0V2l0aENvbmZpZ3VyYXRpb246IFdlYktpdDo6d3JhcHBlcihjb25maWd1
cmF0aW9uLmdldCgpKSBpbnNwZWN0ZWRQYWdlOmluc3BlY3RlZFBhZ2UoKV0pOwotICAgIFttX2lu
c3BlY3RvclZpZXdDb250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0
KCldOwotCi0gICAgV2ViUGFnZVByb3h5ICppbnNwZWN0b3JQYWdlID0gW21faW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLmdldCgpOwotICAgIEFTU0VSVChpbnNwZWN0b3JQ
YWdlKTsKLQotICAgIHJldHVybiBpbnNwZWN0b3JQYWdlOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKLXsKLSAgICBBU1NFUlQoIW1f
aW5zcGVjdG9yV2luZG93KTsKLQotICAgIE5TU3RyaW5nICpzYXZlZFdpbmRvd0ZyYW1lU3RyaW5n
ID0gaW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLmluc3BlY3Rvcldp
bmRvd0ZyYW1lKCk7Ci0gICAgTlNSZWN0IHNhdmVkV2luZG93RnJhbWUgPSBOU1JlY3RGcm9tU3Ry
aW5nKHNhdmVkV2luZG93RnJhbWVTdHJpbmcpOwotCi0gICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBX
ZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3coc2F2ZWRXaW5kb3dGcmFtZSwg
SW5zcGVjdGlvblRhcmdldFR5cGU6OkxvY2FsKTsKLSAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0
RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0KLSAgICBXS1dlYlZpZXcgKmluc3BlY3Rv
clZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKLSAgICBOU1ZpZXcg
KmNvbnRlbnRWaWV3ID0gW21faW5zcGVjdG9yV2luZG93IGNvbnRlbnRWaWV3XTsKLSAgICBpbnNw
ZWN0b3JWaWV3LmZyYW1lID0gW2NvbnRlbnRWaWV3IGJvdW5kc107Ci0gICAgW2NvbnRlbnRWaWV3
IGFkZFN1YnZpZXc6aW5zcGVjdG9yVmlld107Ci0KLSAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dU
aXRsZSgpOwotICAgIGFwcGx5Rm9yY2VkQXBwZWFyYW5jZSgpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzQXR0YWNo
ZWQgfHwgIW1faW5zcGVjdG9yV2luZG93KTsKLQotICAgIGlmIChtX2luc3BlY3RvclZpZXdDb250
cm9sbGVyKSB7Ci0gICAgICAgIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyLmdldCgpIHNldERl
bGVnYXRlOm5pbF07Ci0gICAgICAgIG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0g
ICAgfQotCi0gICAgaWYgKG1fb2JqQ0FkYXB0ZXIpIHsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgp
XTsKLQotICAgICAgICBbbV9vYmpDQWRhcHRlciBpbnZhbGlkYXRlXTsKLSAgICAgICAgbV9vYmpD
QWRhcHRlciA9IG5pbDsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3Nl
RnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKCkKLXsKLSAgICBjbG9zZUZyb250ZW5k
UGFnZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRl
bmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAg
ICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX2luc3Bl
Y3RvcldpbmRvdyBjbG9zZV07Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOwotICAg
IH0KLQotICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0YXJ0T25lU2hv
dCh3ZWJWaWV3Q2xvc2VUaW1lb3V0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKLXsKLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0
aXZpdHlUaW1lci5zdG9wKCk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZSgpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIG1fY2xvc2VG
cm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKLQotICAgIGNsb3NlRnJvbnRlbmRQ
YWdlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0g
ICAgaWYgKG1faXNBdHRhY2hlZCkgewotICAgICAgICBwbGF0Zm9ybURldGFjaCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAg
IFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV9pbnNwZWN0
b3JXaW5kb3cgY2xvc2VdOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKLSAgICB9
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci0g
ICAgaW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLmRlbGV0ZUluc3Bl
Y3RvcldpbmRvd0ZyYW1lKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
QnJpbmdUb0Zyb250KCkKLXsKLSAgICAvLyBJZiB0aGUgV2ViIEluc3BlY3RvciBpcyBubyBsb25n
ZXIgaW4gdGhlIHNhbWUgd2luZG93IGFzIHRoZSBpbnNwZWN0ZWQgdmlldywKLSAgICAvLyB0aGVu
IHdlIG5lZWQgdG8gcmVvcGVuIHRoZSBJbnNwZWN0b3IgdG8gZ2V0IGl0IGF0dGFjaGVkIHRvIHRo
ZSByaWdodCB3aW5kb3cuCi0gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gZHJhZ2dpbmcgdGFi
cyB0byBhbm90aGVyIHdpbmRvdyBpbiBTYWZhcmkuCi0gICAgaWYgKG1faXNBdHRhY2hlZCAmJiBb
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgIT0gaW5zcGVjdGVkUGFn
ZSgpLT5wbGF0Zm9ybVdpbmRvdygpKSB7Ci0gICAgICAgIG9wZW4oKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMDkzNzY4OD46IHRoaXMg
d2lsbCBub3QgYnJpbmcgYSBiYWNrZ3JvdW5kIHRhYiBpbiBTYWZhcmkgdG8gdGhlIGZyb250LCBv
bmx5IGl0cyB3aW5kb3cuCi0gICAgW1ttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXdd
LndpbmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOwotICAgIFtbbV9pbnNwZWN0b3JWaWV3
Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOlttX2luc3BlY3Rv
clZpZXdDb250cm9sbGVyIHdlYlZpZXddXTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBbaW5zcGVjdGVkUGFn
ZSgpLT5wbGF0Zm9ybVdpbmRvdygpIG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07Ci19Ci0KLWJv
b2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCi17Ci0gICAgLy8gRklYTUUg
PHJkYXI6Ly9wcm9ibGVtLzEwOTM3Njg4PjogdGhpcyB3aWxsIG5vdCByZXR1cm4gZmFsc2UgZm9y
IGEgYmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpLCBvbmx5IGEgYmFja2dyb3VuZCB3aW5kb3cuCi0g
ICAgcmV0dXJuIG1faXNWaXNpYmxlICYmIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZp
ZXddLndpbmRvdy5pc01haW5XaW5kb3c7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCkKLXsKLSAgICBOU1ZpZXcg
Kmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3
KCk7Ci0gICAgaWYgKFtXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIHZpZXdJc0luc3BlY3Rvcldl
YlZpZXc6aW5zcGVjdGVkVmlld10pCi0gICAgICAgIHJldHVybiB3ZWJQcm9jZXNzQ2FuQXR0YWNo
OwotCi0gICAgaWYgKGluc3BlY3RlZFZpZXcuaGlkZGVuKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwOwot
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7
Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNTAwOwotCi0g
ICAgTlNSZWN0IGluc3BlY3RlZFZpZXdGcmFtZSA9IGluc3BlY3RlZFZpZXcuZnJhbWU7Ci0KLSAg
ICBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBOU0hlaWdodChpbnNwZWN0ZWRWaWV3RnJh
bWUpICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW87Ci0gICAgcmV0dXJuIG1pbmltdW1BdHRh
Y2hlZEhlaWdodCA8PSBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgJiYgbWluaW11bUF0dGFjaGVkV2lk
dGggPD0gTlNXaWR0aChpbnNwZWN0ZWRWaWV3RnJhbWUpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUp
Ci17Ci0gICAgLy8gRG8gbm90aGluZy4KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJh
bmNlIGFwcGVhcmFuY2UpCi17Ci0gICAgbV9mcm9udGVuZEFwcGVhcmFuY2UgPSBhcHBlYXJhbmNl
OwotCi0gICAgYXBwbHlGb3JjZWRBcHBlYXJhbmNlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZykKLXsKLSAgICBtX3VybFN0cmluZyA9IHVybFN0cmluZzsKLQotICAgIHVwZGF0ZUluc3BlY3Rv
cldpbmRvd1RpdGxlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hv
d0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewot
ICAgIEFTU0VSVCghY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSk7Ci0KLSAgICBSZXRhaW5QdHI8
U0ZDZXJ0aWZpY2F0ZVBhbmVsPiBjZXJ0aWZpY2F0ZVBhbmVsID0gYWRvcHROUyhbW1NGQ2VydGlm
aWNhdGVQYW5lbCBhbGxvY10gaW5pdF0pOwotCi0gICAgTlNXaW5kb3cgKndpbmRvdzsKLSAgICBp
ZiAobV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgIHdpbmRvdyA9IG1faW5zcGVjdG9yV2luZG93
LmdldCgpOwotICAgIGVsc2UKLSAgICAgICAgd2luZG93ID0gW1ttX2luc3BlY3RvclZpZXdDb250
cm9sbGVyIHdlYlZpZXddIHdpbmRvd107Ci0KLSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgd2lu
ZG93ID0gW05TQXBwIGtleVdpbmRvd107Ci0KLSNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFU
SU9OKQotICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6d2luZG93IG1v
ZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciB0
cnVzdDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBzaG93R3JvdXA6WUVTXTsKLSNlbHNlCi0gICAg
W2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzp3aW5kb3cgbW9kYWxEZWxlZ2F0
ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIGNlcnRpZmljYXRl
czooTlNBcnJheSAqKWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkgc2hvd0dyb3Vw
OllFU107Ci0jZW5kaWYKLQotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRy
dXN0IHBhbmVsIGhhcyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUgY2VydGlmaWNhdGVWaWV3
IGRvZXNuJ3QgZXhpc3QgYmVmb3JlaGFuZC4KLSAgICBTRkNlcnRpZmljYXRlVmlldyAqY2VydGlm
aWNhdGVWaWV3ID0gW2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVWaWV3XTsKLSAgICBbY2Vy
dGlmaWNhdGVWaWV3IHNldERpc3BsYXlUcnVzdDpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcg
c2V0RWRpdGFibGVUcnVzdDpOT107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5RGV0
YWlsczpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWlsc0Rpc2Nsb3NlZDpZRVNd
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5n
JiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVk
LCBib29sIGZvcmNlU2F2ZURpYWxvZykKLXsKLSAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0Vt
cHR5KCkpOwotICAgIAotICAgIE5TVVJMICpwbGF0Zm9ybVVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1
YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCkuZ2V0KCk7Ci0gICAgaWYgKCFwbGF0Zm9ybVVSTCkg
ewotICAgICAgICBwbGF0Zm9ybVVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnN1Z2dlc3RlZFVS
TF07Ci0gICAgICAgIC8vIFRoZSB1c2VyIG11c3QgY29uZmlybSBuZXcgZmlsZW5hbWVzIGJlZm9y
ZSB3ZSBjYW4gc2F2ZSB0byB0aGVtLgotICAgICAgICBmb3JjZVNhdmVEaWFsb2cgPSB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICBBU1NFUlQocGxhdGZvcm1VUkwpOwotICAgIGlmICghcGxhdGZvcm1V
UkwpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE5lY2Vzc2FyeSBmb3IgdGhlIGJsb2NrIGJl
bG93LgotICAgIFN0cmluZyBzdWdnZXN0ZWRVUkxDb3B5ID0gc3VnZ2VzdGVkVVJMOwotICAgIFN0
cmluZyBjb250ZW50Q29weSA9IGNvbnRlbnQ7Ci0KLSAgICBhdXRvIHNhdmVUb1VSTCA9IF4oTlNV
UkwgKmFjdHVhbFVSTCkgewotICAgICAgICBBU1NFUlQoYWN0dWFsVVJMKTsKLQotICAgICAgICBt
X3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwp
OwotCi0gICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hh
cj4gb3V0OwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwg
QmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxs
b2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOwotICAgICAg
ICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1
YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6
TlVMTF07Ci0KLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSTo6RGlkU2F2ZShbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSkpOwotICAgIH07Ci0K
LSAgICBpZiAoIWZvcmNlU2F2ZURpYWxvZykgewotICAgICAgICBzYXZlVG9VUkwocGxhdGZvcm1V
UkwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTlNTYXZlUGFuZWwgKnBhbmVsID0g
W05TU2F2ZVBhbmVsIHNhdmVQYW5lbF07Ci0gICAgcGFuZWwubmFtZUZpZWxkU3RyaW5nVmFsdWUg
PSBwbGF0Zm9ybVVSTC5sYXN0UGF0aENvbXBvbmVudDsKLQotICAgIC8vIElmIHdlIGhhdmUgYSBm
aWxlIFVSTCB3ZSd2ZSBhbHJlYWR5IHNhdmVkIHRoaXMgZmlsZSB0byBhIHBhdGggYW5kCi0gICAg
Ly8gY2FuIHByb3ZpZGUgYSBnb29kIGRpcmVjdG9yeSB0byBzaG93LiBPdGhlcndpc2UsIHVzZSB0
aGUgc3lzdGVtJ3MKLSAgICAvLyBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgaW5pdGlhbCBkaXJl
Y3RvcnkgdG8gc2hvdyBpbiB0aGUgZGlhbG9nLgotICAgIGlmIChwbGF0Zm9ybVVSTC5pc0ZpbGVV
UkwpCi0gICAgICAgIHBhbmVsLmRpcmVjdG9yeVVSTCA9IFtwbGF0Zm9ybVVSTCBVUkxCeURlbGV0
aW5nTGFzdFBhdGhDb21wb25lbnRdOwotCi0gICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IF4o
TlNJbnRlZ2VyIHJlc3VsdCkgewotICAgICAgICBpZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25z
ZUNhbmNlbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBO
U01vZGFsUmVzcG9uc2VPSyk7Ci0gICAgICAgIHNhdmVUb1VSTChwYW5lbC5VUkwpOwotICAgIH07
Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93ID0gbV9pbnNwZWN0b3JXaW5kb3cgPyBtX2luc3BlY3Rv
cldpbmRvdy5nZXQoKSA6IFtOU0FwcCBrZXlXaW5kb3ddOwotICAgIGlmICh3aW5kb3cpCi0gICAg
ICAgIFtwYW5lbCBiZWdpblNoZWV0TW9kYWxGb3JXaW5kb3c6d2luZG93IGNvbXBsZXRpb25IYW5k
bGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFtwYW5lbCBydW5Nb2RhbF0pOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250
ZW50KQotewotICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAg
UmV0YWluUHRyPE5TVVJMPiBhY3R1YWxVUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdl
dChzdWdnZXN0ZWRVUkwpOwotICAgIC8vIERvIG5vdCBhcHBlbmQgdW5sZXNzIHRoZSB1c2VyIGhh
cyBhbHJlYWR5IGNvbmZpcm1lZCB0aGlzIGZpbGVuYW1lIGluIHNhdmUoKS4KLSAgICBpZiAoIWFj
dHVhbFVSTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNGaWxlSGFuZGxlICpoYW5kbGUgPSBb
TlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVGb3JXcml0aW5nVG9VUkw6YWN0dWFsVVJMLmdldCgpIGVy
cm9yOk5VTExdOwotICAgIFtoYW5kbGUgc2Vla1RvRW5kT2ZGaWxlXTsKLSAgICBbaGFuZGxlIHdy
aXRlRGF0YTpbY29udGVudCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11d
OwotICAgIFtoYW5kbGUgY2xvc2VGaWxlXTsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVuZChbYWN0dWFsVVJMIGFic29sdXRlU3Ry
aW5nXSkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dGcmFtZURpZENoYW5n
ZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQpOwotICAgIEFTU0VSVChtX2lzVmlzaWJs
ZSk7Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yV2luZG93KTsKLQotICAgIGlmIChtX2lzQXR0YWNo
ZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFtX2luc3BlY3RvcldpbmRvdykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgTlNTdHJpbmcgKmZyYW1lU3RyaW5nID0gTlNTdHJpbmdGcm9tUmVjdChbbV9pbnNw
ZWN0b3JXaW5kb3cgZnJhbWVdKTsKLSAgICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgpLnBy
ZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yV2luZG93RnJhbWUoZnJhbWVTdHJpbmcpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCkKLXsKLSAg
ICBBU1NFUlQoIW1faXNBdHRhY2hlZCk7Ci0gICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKLSAgICBB
U1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOwotCi0gICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9p
c1Zpc2libGUgfHwgIW1faW5zcGVjdG9yV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7
ICAgIAotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0ZWRWaWV3RnJhbWVEaWRD
aGFuZ2UoQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9uKQotewotICAgIGlmICghbV9pc1Zpc2libGUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0F0dGFjaGVkKSB7Ci0gICAgICAgIC8v
IENoZWNrIGlmIHRoZSBhdHRhY2ggYXZhaWxhYmlsaXR5IGNoYW5nZWQuIFdlIG5lZWQgdG8gZG8g
dGhpcyBoZXJlIGluIGNhc2UKLSAgICAgICAgLy8gdGhlIGF0dGFjaG1lbnQgdmlldyBpcyBub3Qg
dGhlIFdLVmlldy4KLSAgICAgICAgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChwbGF0Zm9ybUNh
bkF0dGFjaChjYW5BdHRhY2goKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCFpbnNwZWN0ZWRQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TVmlldyAqaW5zcGVj
dGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAg
ICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3
ZWJWaWV3XTsKLQotICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRWaWV3
LmZyYW1lOwotICAgIE5TUmVjdCBvbGRJbnNwZWN0b3JWaWV3RnJhbWUgPSBpbnNwZWN0b3JWaWV3
LmZyYW1lOwotICAgIE5TUmVjdCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU1plcm9SZWN0Owot
ICAgIE5TUmVjdCBwYXJlbnRCb3VuZHMgPSBpbnNwZWN0ZWRWaWV3LnN1cGVydmlldy5ib3VuZHM7
Ci0gICAgQ0dGbG9hdCBpbnNwZWN0ZWRWaWV3VG9wID0gTlNNYXhZKGluc3BlY3RlZFZpZXdGcmFt
ZSk7Ci0KLSAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICBjYXNlIEF0dGFjaG1l
bnRTaWRlOjpCb3R0b206IHsKLSAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQotICAgICAg
ICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TSGVpZ2h0KG9sZEluc3BlY3RvclZpZXdGcmFtZSk7
Ci0KLSAgICAgICAgQ0dGbG9hdCBwYXJlbnRIZWlnaHQgPSBOU0hlaWdodChwYXJlbnRCb3VuZHMp
OwotICAgICAgICBDR0Zsb2F0IGluc3BlY3RvckhlaWdodCA9IEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoY3VycmVudERpbWVuc2lv
biwgcGFyZW50SGVpZ2h0KTsKLQotICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9u
IG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLgot
ICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIGluc3BlY3RvckhlaWdo
dCwgTlNXaWR0aChwYXJlbnRCb3VuZHMpLCBpbnNwZWN0ZWRWaWV3VG9wIC0gaW5zcGVjdG9ySGVp
Z2h0KTsKLSAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBO
U1dpZHRoKGluc3BlY3RlZFZpZXdGcmFtZSksIGluc3BlY3RvckhlaWdodCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OiB7Ci0gICAgICAg
IGlmICghY3VycmVudERpbWVuc2lvbikKLSAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBO
U1dpZHRoKG9sZEluc3BlY3RvclZpZXdGcmFtZSk7Ci0KLSAgICAgICAgQ0dGbG9hdCBwYXJlbnRX
aWR0aCA9IE5TV2lkdGgocGFyZW50Qm91bmRzKTsKLSAgICAgICAgQ0dGbG9hdCBpbnNwZWN0b3JX
aWR0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRX
aW5kb3dXaWR0aChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRXaWR0aCk7Ci0KLSAgICAgICAgLy8g
UHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVy
cyBpbiBTYWZhcmkgc3RpbGwgd29yay4gQnV0IGRvbid0IHVzZSB0aGF0Ci0gICAgICAgIC8vIHRv
cCBwb3NpdGlvbiBmb3IgdGhlIGluc3BlY3RvciB2aWV3IHNpbmNlIHRoZSBiYW5uZXJzIG9ubHkg
c3RyZXRjaCBhcyB3aWRlIGFzIHRoZSBpbnNwZWN0ZWQgdmlldy4KLSAgICAgICAgaW5zcGVjdGVk
Vmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRo
LCBpbnNwZWN0ZWRWaWV3VG9wKTsKLSAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNN
YWtlUmVjdChwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCAwLCBpbnNwZWN0b3JXaWR0aCwg
TlNIZWlnaHQocGFyZW50Qm91bmRzKSk7Ci0KLSAgICAgICAgaWYgKE5TV2luZG93ICppbnNwZWN0
b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykgewotICAgICAgICAgICAgTlNSZWN0IGNv
bnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omlu
c3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOwotICAgICAgICAg
ICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3BlY3Rv
clZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6IHsKLSAgICAgICAgaWYg
KCFjdXJyZW50RGltZW5zaW9uKQotICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TV2lk
dGgob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKLQotICAgICAgICBDR0Zsb2F0IHBhcmVudFdpZHRo
ID0gTlNXaWR0aChwYXJlbnRCb3VuZHMpOwotICAgICAgICBDR0Zsb2F0IGluc3BlY3RvcldpZHRo
ID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRv
d1dpZHRoKGN1cnJlbnREaW1lbnNpb24sIHBhcmVudFdpZHRoKTsKLQotICAgICAgICAvLyBQcmVz
ZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGlu
IFNhZmFyaSBzdGlsbCB3b3JrLiBCdXQgZG9uJ3QgdXNlIHRoYXQKLSAgICAgICAgLy8gdG9wIHBv
c2l0aW9uIGZvciB0aGUgaW5zcGVjdG9yIHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBzdHJl
dGNoIGFzIHdpZGUgYXMgdGhlIGluc3BlY3RlZCB2aWV3LgotICAgICAgICBpbnNwZWN0ZWRWaWV3
RnJhbWUgPSBOU01ha2VSZWN0KGluc3BlY3RvcldpZHRoLCAwLCBwYXJlbnRXaWR0aCAtIGluc3Bl
Y3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKLSAgICAgICAgbmV3SW5zcGVjdG9yVmlld0Zy
YW1lID0gTlNNYWtlUmVjdCgwLCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50Qm91
bmRzKSk7Ci0KLSAgICAgICAgaWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNwZWN0
b3JWaWV3LndpbmRvdykgewotICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0ID0g
W2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5jb250
ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOwotICAgICAgICAgICAgbmV3SW5zcGVjdG9yVmll
d0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29udGVu
dExheW91dFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoTlNFcXVhbFJlY3RzKG9sZEluc3BlY3RvclZpZXdGcmFtZSwgbmV3SW5zcGVjdG9y
Vmlld0ZyYW1lKSAmJiBOU0VxdWFsUmVjdHMoW2luc3BlY3RlZFZpZXcgZnJhbWVdLCBpbnNwZWN0
ZWRWaWV3RnJhbWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEaXNhYmxlIHNjcmVlbiB1
cGRhdGVzIHRvIG1ha2Ugc3VyZSB0aGUgbGF5ZXJzIGZvciBib3RoIHZpZXdzIHJlc2l6ZSBpbiBz
eW5jLgotICAgIFtpbnNwZWN0b3JWaWV3LndpbmRvdyBkaXNhYmxlU2NyZWVuVXBkYXRlc1VudGls
Rmx1c2hdOwotCi0gICAgW2luc3BlY3RvclZpZXcgc2V0RnJhbWU6bmV3SW5zcGVjdG9yVmlld0Zy
YW1lXTsKLSAgICBbaW5zcGVjdGVkVmlldyBzZXRGcmFtZTppbnNwZWN0ZWRWaWV3RnJhbWVdOwot
fQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dI
ZWlnaHQoKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+
aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBOU1JlY3QgaW5zcGVjdGVkVmlld1JlY3Qg
PSBbaW5zcGVjdGVkVmlldyBmcmFtZV07Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpbnNwZWN0ZWRWaWV3UmVjdC5zaXplLmhlaWdodCk7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICBOU1ZpZXcg
Kmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3
KCk7Ci0gICAgTlNSZWN0IGluc3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJhbWVd
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1JlY3Quc2l6
ZS53aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkK
LXsKLSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3Rv
ckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JXaW5k
b3cpIHsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0gICAg
ICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93
ID0gbmlsOwotICAgIH0KLQotICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXdd
OwotCi0gICAgQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9uOwotICAgIHN3aXRjaCAobV9hdHRhY2ht
ZW50U2lkZSkgewotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKLSAgICAgICAgW2lu
c3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1Zp
ZXdNYXhZTWFyZ2luXTsKLSAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQ
cmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OgotICAgICAgICBbaW5zcGVjdG9yVmlldyBz
ZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdodFNpemFibGUgfCBOU1ZpZXdNaW5YTWFyZ2lu
XTsKLSAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygp
Lmluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBdHRh
Y2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5n
TWFzazpOU1ZpZXdIZWlnaHRTaXphYmxlIHwgTlNWaWV3TWF4WE1hcmdpbl07Ci0gICAgICAgIGN1
cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRh
Y2hlZFdpZHRoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGluc3BlY3RlZFZpZXdG
cmFtZURpZENoYW5nZShjdXJyZW50RGltZW5zaW9uKTsKLQotICAgIFtpbnNwZWN0ZWRWaWV3LnN1
cGVydmlldyBhZGRTdWJ2aWV3Omluc3BlY3RvclZpZXcgcG9zaXRpb25lZDpOU1dpbmRvd0JlbG93
IHJlbGF0aXZlVG86aW5zcGVjdGVkVmlld107Ci0gICAgW2luc3BlY3RvclZpZXcud2luZG93IG1h
a2VGaXJzdFJlc3BvbmRlcjppbnNwZWN0b3JWaWV3XTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGlu
c3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBXS1dlYlZpZXcg
Kmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKLQot
ICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0gICAgW2luc3BlY3Rv
clZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWln
aHRTaXphYmxlXTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIHNpemUgdGhlIGluc3BlY3Rl
ZCB2aWV3J3MgZnJhbWUgYWZ0ZXIgZGV0YWNoaW5nIHNvIHRoYXQgaXQgdGFrZXMgdXAgdGhlIHNw
YWNlIHRoYXQgdGhlCi0gICAgLy8gYXR0YWNoZWQgaW5zcGVjdG9yIHVzZWQgdG8uIFByZXNlcnZl
IHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2Fm
YXJpIHN0aWxsIHdvcmsuCi0KLSAgICBpbnNwZWN0ZWRWaWV3LmZyYW1lID0gTlNNYWtlUmVjdCgw
LCAwLCBOU1dpZHRoKGluc3BlY3RlZFZpZXcuc3VwZXJ2aWV3LmJvdW5kcyksIE5TTWF4WShpbnNw
ZWN0ZWRWaWV3LmZyYW1lKSk7Ci0KLSAgICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5vdCB2
aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRhY2hl
ZAotICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVjdG9y
IHdpbmRvdy4KLSAgICBpZiAoIW1faXNWaXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBv
cGVuKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRX
aW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGlmICghbV9pc0F0dGFjaGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoaGVpZ2h0
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRv
d1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2Uod2lkdGgpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgbV9zaGVldFJlY3QgPSByZWN0OwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgaWYgKGF1dG8q
IHdlYlZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XSkgewotICAgICAg
ICBpZiAod2ViVmlldy0+X3BhZ2UpCi0gICAgICAgICAgICB3ZWJWaWV3LT5fcGFnZS0+c3RhcnRX
aW5kb3dEcmFnKCk7Ci0gICAgfQotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3Bl
Y3RvclBhZ2VVUkwoKQotewotICAgIHJldHVybiBbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBV
UkxGb3JJbnNwZWN0b3JSZXNvdXJjZTpAIk1haW4uaHRtbCJdLmFic29sdXRlU3RyaW5nOwotfQot
Ci1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKLXsKLSAg
ICByZXR1cm4gW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgVVJMRm9ySW5zcGVjdG9yUmVzb3Vy
Y2U6QCJUZXN0Lmh0bWwiXS5hYnNvbHV0ZVN0cmluZzsKLX0KLQotc3RhdGljIE5TRGljdGlvbmFy
eSAqc3lzdGVtVmVyc2lvblBsaXN0KCkKLXsKLSAgICBOU1N0cmluZyAqc3lzdGVtTGlicmFyeVBh
dGggPSBbTlNTZWFyY2hQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0
b3J5LCBOU1N5c3RlbURvbWFpbk1hc2ssIFlFUykgb2JqZWN0QXRJbmRleDowXTsKLSAgICBOU1N0
cmluZyAqc3lzdGVtVmVyc2lvblBsaXN0UGF0aCA9IFtzeXN0ZW1MaWJyYXJ5UGF0aCBzdHJpbmdC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDb3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlz
dCJdOwotICAgIE5TRGljdGlvbmFyeSAqc3lzdGVtVmVyc2lvbkluZm8gPSBbTlNEaWN0aW9uYXJ5
IGRpY3Rpb25hcnlXaXRoQ29udGVudHNPZkZpbGU6c3lzdGVtVmVyc2lvblBsaXN0UGF0aF07Ci0g
ICAgcmV0dXJuIHN5c3RlbVZlcnNpb25JbmZvOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2Vi
SW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIE5TRGljdGlv
bmFyeSAqcGxpc3QgPSBzeXN0ZW1WZXJzaW9uUGxpc3QoKTsKLQotICAgIERlYnVnZ2FibGVJbmZv
RGF0YSByZXN1bHQ7Ci0gICAgcmVzdWx0LmRlYnVnZ2FibGVUeXBlID0gSW5zcGVjdG9yOjpEZWJ1
Z2dhYmxlVHlwZTo6V2ViUGFnZTsKLSAgICByZXN1bHQudGFyZ2V0UGxhdGZvcm1OYW1lID0gIm1h
Y09TIl9zOwotICAgIHJlc3VsdC50YXJnZXRCdWlsZFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RC
dWlsZFZlcnNpb24iXTsKLSAgICByZXN1bHQudGFyZ2V0UHJvZHVjdFZlcnNpb24gPSBwbGlzdFtA
IlByb2R1Y3RVc2VyVmlzaWJsZVZlcnNpb24iXTsKLSAgICByZXN1bHQudGFyZ2V0SXNTaW11bGF0
b3IgPSBmYWxzZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OmFwcGx5Rm9yY2VkQXBwZWFyYW5jZSgpCi17Ci0gICAgTlNBcHBlYXJhbmNlICpwbGF0
Zm9ybUFwcGVhcmFuY2U7Ci0gICAgc3dpdGNoIChtX2Zyb250ZW5kQXBwZWFyYW5jZSkgewotICAg
IGNhc2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2U6OlN5c3RlbToKLSAgICAg
ICAgcGxhdGZvcm1BcHBlYXJhbmNlID0gbmlsOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2U6OkxpZ2h0OgotICAgICAgICBwbGF0
Zm9ybUFwcGVhcmFuY2UgPSBbTlNBcHBlYXJhbmNlIGFwcGVhcmFuY2VOYW1lZDpOU0FwcGVhcmFu
Y2VOYW1lQXF1YV07Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6QXBwZWFyYW5jZTo6RGFyazoKLSAgICAgICAgcGxhdGZvcm1BcHBlYXJhbmNlID0g
W05TQXBwZWFyYW5jZSBhcHBlYXJhbmNlTmFtZWQ6TlNBcHBlYXJhbmNlTmFtZURhcmtBcXVhXTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKE5TV2luZG93ICp3aW5kb3cgPSBtX2lu
c3BlY3RvcldpbmRvdy5nZXQoKSkKLSAgICAgICAgd2luZG93LmFwcGVhcmFuY2UgPSBwbGF0Zm9y
bUFwcGVhcmFuY2U7Ci0KLSAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS5h
cHBlYXJhbmNlID0gcGxhdGZvcm1BcHBlYXJhbmNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lMGYzNzY3OTAyZWY3ZTE4Y2IyYzA4YTMwNjM2ZTNkZmE5ZDlhZjcxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9X
ZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tCkBAIC0wLDAgKzEsODM3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclVJUHJveHkuaCIK
KworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAiQVBJSW5zcGVjdG9yQ2xpZW50LmgiCisj
aW1wb3J0ICJBUElJbnNwZWN0b3JDb25maWd1cmF0aW9uLmgiCisjaW1wb3J0ICJBUElVSUNsaWVu
dC5oIgorI2ltcG9ydCAiR2xvYmFsRmluZEluUGFnZVN0YXRlLmgiCisjaW1wb3J0ICJXS0luc3Bl
Y3RvclByaXZhdGVNYWMuaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIK
KyNpbXBvcnQgIldLT2JqZWN0LmgiCisjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgorI2ltcG9y
dCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclVJTWVzc2FnZXMu
aCIKKyNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisj
aW1wb3J0ICJfV0tJbnNwZWN0b3JDb25maWd1cmF0aW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9X
S0luc3BlY3RvckludGVybmFsLmgiCisjaW1wb3J0ICJfV0tJbnNwZWN0b3JXaW5kb3cuaCIKKyNp
bXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgorI2ltcG9ydCA8
U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
Q2VydGlmaWNhdGVJbmZvLmg+CisjaW1wb3J0IDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9y
dCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3N0YXRpYyBjb25zdCBOU1VJbnRlZ2VyIHdpbmRvd1N0
eWxlTWFzayA9IE5TV2luZG93U3R5bGVNYXNrVGl0bGVkIHwgTlNXaW5kb3dTdHlsZU1hc2tDbG9z
YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrTWluaWF0dXJpemFibGUgfCBOU1dpbmRvd1N0eWxlTWFz
a1Jlc2l6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrRnVsbFNpemVDb250ZW50VmlldzsKKworLy8g
VGhlIHRpbWUgd2Uga2VlcCBvdXIgV2ViVmlldyBhbGl2ZSBiZWZvcmUgY2xvc2luZyBpdCBhbmQg
aXRzIHByb2Nlc3MuCisvLyBSZXVzaW5nIHRoZSBXZWJWaWV3IGltcHJvdmVzIHN0YXJ0IHVwIHRp
bWUgZm9yIHBlb3BsZSB0aGF0IGp1bXAgaW4gYW5kIG91dCBvZiB0aGUgSW5zcGVjdG9yLgorc3Rh
dGljIGNvbnN0IFNlY29uZHMgd2ViVmlld0Nsb3NlVGltZW91dCB7IDFfbWluIH07CisKK3N0YXRp
YyB2b2lkKiBrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dCA9ICZrV2luZG93Q29u
dGVudExheW91dE9ic2VydmVyQ29udGV4dDsKKworQGludGVyZmFjZSBXS1dlYkluc3BlY3RvclVJ
UHJveHlPYmpDQWRhcHRlciAoKSA8TlNXaW5kb3dEZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckRlbGVnYXRlPgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJJbnNwZWN0b3JV
SVByb3h5OihXZWJLaXQ6OldlYkluc3BlY3RvclVJUHJveHkqKWluc3BlY3RvclByb3h5OworLSAo
dm9pZClpbnZhbGlkYXRlOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYkluc3BlY3Rv
clVJUHJveHlPYmpDQWRhcHRlciB7CisgICAgV2ViS2l0OjpXZWJJbnNwZWN0b3JVSVByb3h5KiBf
aW5zcGVjdG9yUHJveHk7Cit9CisKKy0gKFdLSW5zcGVjdG9yUmVmKWluc3BlY3RvclJlZgorewor
ICAgIHJldHVybiB0b0FQSShfaW5zcGVjdG9yUHJveHkpOworfQorCistIChfV0tJbnNwZWN0b3Ig
KilpbnNwZWN0b3IKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICByZXR1cm4g
d3JhcHBlcigqX2luc3BlY3RvclByb3h5KTsKKyAgICByZXR1cm4gbmlsOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhXZWJJbnNwZWN0b3JVSVByb3h5OihXZWJLaXQ6OldlYkluc3BlY3Rv
clVJUHJveHkqKWluc3BlY3RvclByb3h5Cit7CisgICAgQVNTRVJUX0FSRyhpbnNwZWN0b3JQcm94
eSwgaW5zcGVjdG9yUHJveHkpOworCisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBVbnJldGFpbmVkIHRvIGF2b2lkIGEgcmVmZXJl
bmNlIGN5Y2xlLgorICAgIF9pbnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5OworCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZQoreworICAgIF9pbnNwZWN0b3JQ
cm94eSA9IG51bGxwdHI7Cit9CisKKy0gKE5TUmVjdCl3aW5kb3c6KE5TV2luZG93ICopd2luZG93
IHdpbGxQb3NpdGlvblNoZWV0OihOU1dpbmRvdyAqKXNoZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJl
Y3QKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICByZXR1cm4gTlNNYWtlUmVj
dCgwLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLmhlaWdodCgpLCBfaW5zcGVjdG9yUHJv
eHktPnNoZWV0UmVjdCgpLndpZHRoKCksIDApOworICAgIHJldHVybiByZWN0OworfQorCistICh2
b2lkKXdpbmRvd0RpZE1vdmU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAg
aWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGcmFt
ZURpZENoYW5nZSgpOworfQorCistICh2b2lkKXdpbmRvd0RpZFJlc2l6ZTooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBf
aW5zcGVjdG9yUHJveHktPndpbmRvd0ZyYW1lRGlkQ2hhbmdlKCk7Cit9CisKKy0gKHZvaWQpd2lu
ZG93V2lsbENsb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChf
aW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2UoKTsKK30KKwor
LSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxTY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclBy
b3h5LT53aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCk7Cit9CisKKy0gKHZvaWQpd2luZG93RGlk
RXhpdEZ1bGxTY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYg
KF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGdWxsU2Ny
ZWVuRGlkQ2hhbmdlKCk7Cit9CisKKy0gKHZvaWQpaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdl
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIC8vIFJlc2l6aW5nIHRoZSB2
aWV3cyB3aGlsZSBpbnNpZGUgdGhpcyBub3RpZmljYXRpb24gY2FuIGxlYWQgdG8gYmFkIHJlc3Vs
dHMgd2hlbiBlbnRlcmluZworICAgIC8vIG9yIGV4aXRpbmcgZnVsbCBzY3JlZW4uIFRvIGF2b2lk
IHRoYXQgd2UgbmVlZCB0byBwZXJmb3JtIHRoZSB3b3JrIGFmdGVyIGEgZGVsYXkuIFdlIG9ubHkK
KyAgICAvLyBkZXBlbmQgb24gdGhpcyBmb3IgZW5mb3JjaW5nIHRoZSBoZWlnaHQgY29uc3RyYWlu
dHMsIHNvIGEgc21hbGwgZGVsYXkgaXNuJ3QgdGVycmlibGUuIE1vc3QKKyAgICAvLyBvZiB0aGUg
dGltZSB0aGUgdmlld3Mgd2lsbCBhbHJlYWR5IGhhdmUgdGhlIGNvcnJlY3QgZnJhbWVzIGJlY2F1
c2Ugb2YgYXV0b3Jlc2l6aW5nIG1hc2tzLgorCisgICAgZGlzcGF0Y2hfYWZ0ZXIoRElTUEFUQ0hf
VElNRV9OT1csIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmIChfaW5z
cGVjdG9yUHJveHkpCisgICAgICAgICAgICBfaW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFZpZXdG
cmFtZURpZENoYW5nZSgpOworICAgIH0pOworfQorCistICh2b2lkKW9ic2VydmVWYWx1ZUZvcktl
eVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBvZk9iamVjdDooaWQpb2JqZWN0IGNoYW5nZTooTlNE
aWN0aW9uYXJ5PE5TS2V5VmFsdWVDaGFuZ2VLZXksIGlkPiAqKWNoYW5nZSBjb250ZXh0Oih2b2lk
ICopY29udGV4dAoreworICAgIGlmIChjb250ZXh0ICE9IGtXaW5kb3dDb250ZW50TGF5b3V0T2Jz
ZXJ2ZXJDb250ZXh0KSB7CisgICAgICAgIFtzdXBlciBvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOmtl
eVBhdGggb2ZPYmplY3Q6b2JqZWN0IGNoYW5nZTpjaGFuZ2UgY29udGV4dDpjb250ZXh0XTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBvYmplY3Q7Cisg
ICAgQVNTRVJUKFt3aW5kb3cgaXNLaW5kT2ZDbGFzczpbTlNXaW5kb3cgY2xhc3NdXSk7CisgICAg
aWYgKHdpbmRvdy5pbkxpdmVSZXNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGRpc3BhdGNo
X2FmdGVyKERJU1BBVENIX1RJTUVfTk9XLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewor
ICAgICAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICAgICAgX2luc3BlY3RvclByb3h5
LT5pbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKKyAgICB9KTsKK30KKworLy8gTUFSSzog
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlIG1ldGhvZHMKKworLSAodm9pZClpbnNw
ZWN0b3JWaWV3Q29udHJvbGxlckRpZEJlY29tZUFjdGl2ZTooV0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94
eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT5kaWRCZWNvbWVBY3RpdmUoKTsKK30KKworLSAo
dm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOihXS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoX2lu
c3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsK
K30KKworLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0
OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sK
KyAgICByZXR1cm4gX2luc3BlY3RvclByb3h5ID8gX2luc3BlY3RvclByb3h5LT5pc1VuZGVyVGVz
dCgpIDogZmFsc2U7Cit9CisKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6KFdLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3aWxsTW92ZVRv
V2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdworeworICAgIGlmIChfaW5zcGVjdG9yUHJveHkp
CisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+YXR0YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhp
bnNwZWN0b3JWaWV3Q29udHJvbGxlci53ZWJWaWV3LndpbmRvdyk7Cit9CisKKy0gKHZvaWQpaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgoreworICAgIGlmIChfaW5zcGVjdG9yUHJv
eHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+YXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhp
bnNwZWN0b3JWaWV3Q29udHJvbGxlci53ZWJWaWV3LndpbmRvdyk7Cit9CisKKy0gKHZvaWQpaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXI6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0
b3JWaWV3Q29udHJvbGxlciBvcGVuVVJMRXh0ZXJuYWxseTooTlNVUkwgKil1cmwKK3sKKyAgICBp
ZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPm9wZW5VUkxFeHRl
cm5hbGx5KHVybC5hYnNvbHV0ZVN0cmluZyk7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktp
dCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5
OjpkaWRCZWNvbWVBY3RpdmUoKQoreworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OlVwZGF0ZUZpbmRTdHJpbmcoV2ViS2l0OjpzdHJpbmdGb3JGaW5k
KCkpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRhY2htZW50Vmlld0RpZENo
YW5nZShOU1ZpZXcgKm9sZFZpZXcsIE5TVmlldyAqbmV3VmlldykKK3sKKyAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIu
Z2V0KCkgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6b2xkVmll
d107CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjptX29iakNBZGFwdGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0ZWRWaWV3RnJh
bWVEaWRDaGFuZ2U6KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVj
dDpuZXdWaWV3XTsKKworICAgIGlmIChtX2lzQXR0YWNoZWQpCisgICAgICAgIGF0dGFjaChtX2F0
dGFjaG1lbnRTaWRlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjphdHRhY2htZW50
V2lsbE1vdmVGcm9tV2luZG93KE5TV2luZG93ICpvbGRXaW5kb3cpCit7CisgICAgaWYgKG1faXNP
YnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCkgeworICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVu
dExheW91dFJlY3QgPSBmYWxzZTsKKyAgICAgICAgW29sZFdpbmRvdyByZW1vdmVPYnNlcnZlcjpt
X29iakNBZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJjb250ZW50TGF5b3V0UmVjdCIgY29udGV4
dDprV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dF07CisgICAgfQorfQorCit2b2lk
IFdlYkluc3BlY3RvclVJUHJveHk6OmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coTlNXaW5kb3cg
Km5ld1dpbmRvdykKK3sKKyAgICBpZiAobV9pc0F0dGFjaGVkICYmICEhbmV3V2luZG93KSB7Cisg
ICAgICAgIG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCA9IHRydWU7CisgICAgICAgIFtu
ZXdXaW5kb3cgYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBmb3JLZXlQYXRoOkAiY29u
dGVudExheW91dFJlY3QiIG9wdGlvbnM6MCBjb250ZXh0OmtXaW5kb3dDb250ZW50TGF5b3V0T2Jz
ZXJ2ZXJDb250ZXh0XTsKKyAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7Cisg
ICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnVwZGF0ZUluc3BlY3RvcldpbmRv
d1RpdGxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQorICAgICAgICBy
ZXR1cm47CisKKyAgICB1bnNpZ25lZCBsZXZlbCA9IGluc3BlY3Rpb25MZXZlbCgpOworICAgIGlm
IChsZXZlbCA+IDEpIHsKKyAgICAgICAgTlNTdHJpbmcgKmRlYnVnVGl0bGUgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5HKCJXZWIgSW5zcGVjdG9yIFslZF0g4oCUICVA
IiwgIldlYiBJbnNwZWN0b3Igd2luZG93IHRpdGxlIHdoZW4gaW5zcGVjdGluZyBXZWIgSW5zcGVj
dG9yIiksIGxldmVsLCAoTlNTdHJpbmcgKiltX3VybFN0cmluZ107CisgICAgICAgIFttX2luc3Bl
Y3RvcldpbmRvdyBzZXRUaXRsZTpkZWJ1Z1RpdGxlXTsKKyAgICB9IGVsc2UgeworICAgICAgICBO
U1N0cmluZyAqdGl0bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5H
KCJXZWIgSW5zcGVjdG9yIOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSIpLCAo
TlNTdHJpbmcgKiltX3VybFN0cmluZ107CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXRU
aXRsZTp0aXRsZV07CisgICAgfQorfQorCitSZXRhaW5QdHI8TlNXaW5kb3c+IFdlYkluc3BlY3Rv
clVJUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJ
bnNwZWN0aW9uVGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQoreworICAgIE5TUmVjdCB3aW5kb3dGcmFt
ZSA9ICFOU0lzRW1wdHlSZWN0KHNhdmVkV2luZG93RnJhbWUpID8gc2F2ZWRXaW5kb3dGcmFtZSA6
IE5TTWFrZVJlY3QoMCwgMCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0
KTsKKyAgICBhdXRvIHdpbmRvdyA9IGFkb3B0TlMoW1tfV0tJbnNwZWN0b3JXaW5kb3cgYWxsb2Nd
IGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93RnJhbWUgc3R5bGVNYXNrOndpbmRvd1N0eWxlTWFz
ayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dKTsKKyAgICBbd2luZG93
IHNldE1pblNpemU6TlNNYWtlU2l6ZShtaW5pbXVtV2luZG93V2lkdGgsIG1pbmltdW1XaW5kb3dI
ZWlnaHQpXTsKKyAgICBbd2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107CisgICAgW3dp
bmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9yXSB8
IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlblByaW1hcnkpXTsKKworICAgIGJv
b2wgZm9yUmVtb3RlVGFyZ2V0ID0gdGFyZ2V0VHlwZSA9PSBJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6
UmVtb3RlOworICAgIFt3aW5kb3cgc2V0Rm9yUmVtb3RlVGFyZ2V0OmZvclJlbW90ZVRhcmdldF07
CisKKyAgICBDR0Zsb2F0IGFwcHJveGltYXRlbHlIYWxmU2NyZWVuU2l6ZSA9IChbd2luZG93IHNj
cmVlbl0uZnJhbWUuc2l6ZS53aWR0aCAvIDIpIC0gNDsKKyAgICBDR0Zsb2F0IG1pbmltdW1GdWxs
U2NyZWVuV2lkdGggPSBzdGQ6Om1heDxDR0Zsb2F0Pig2MzYsIGFwcHJveGltYXRlbHlIYWxmU2Ny
ZWVuU2l6ZSk7CisgICAgW3dpbmRvdyBzZXRNaW5GdWxsU2NyZWVuQ29udGVudFNpemU6TlNNYWtl
U2l6ZShtaW5pbXVtRnVsbFNjcmVlbldpZHRoLCBtaW5pbXVtV2luZG93SGVpZ2h0KV07CisgICAg
W3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9y
XSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlbkFsbG93c1RpbGluZyldOwor
CisgICAgW3dpbmRvdyBzZXRUaXRsZWJhckFwcGVhcnNUcmFuc3BhcmVudDpZRVNdOworCisgICAg
Ly8gQ2VudGVyIHRoZSB3aW5kb3cgaWYgdGhlIHNhdmVkIGZyYW1lIHdhcyBlbXB0eS4KKyAgICBp
ZiAoTlNJc0VtcHR5UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSkKKyAgICAgICAgW3dpbmRvdyBjZW50
ZXJdOworCisgICAgcmV0dXJuIHdpbmRvdzsKK30KKworV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0
b3JVSVByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgQVNTRVJUKGlu
c3BlY3RlZFBhZ2UoKSk7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvclBhZ2UpOworCisgICAgbV9j
bG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOworCisgICAgaWYgKG1faW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fb2JqQ0FkYXB0ZXIpOwor
ICAgICAgICByZXR1cm4gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdl
LmdldCgpOworICAgIH0KKworICAgIG1fb2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tXZWJJbnNw
ZWN0b3JVSVByb3h5T2JqQ0FkYXB0ZXIgYWxsb2NdIGluaXRXaXRoV2ViSW5zcGVjdG9yVUlQcm94
eTp0aGlzXSk7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5p
bnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBzZWxlY3RvcjpAc2Vs
ZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikgbmFtZTpOU1ZpZXdGcmFtZURpZENo
YW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6aW5zcGVjdGVkVmlld107CisKKyAgICBhdXRvIGNvbmZp
Z3VyYXRpb24gPSBpbnNwZWN0ZWRQYWdlKCktPnVpQ2xpZW50KCkuY29uZmlndXJhdGlvbkZvckxv
Y2FsSW5zcGVjdG9yKCppbnNwZWN0ZWRQYWdlKCksICAqdGhpcyk7CisgICAgbV9pbnNwZWN0b3JW
aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIGFsbG9j
XSBpbml0V2l0aENvbmZpZ3VyYXRpb246IFdlYktpdDo6d3JhcHBlcihjb25maWd1cmF0aW9uLmdl
dCgpKSBpbnNwZWN0ZWRQYWdlOmluc3BlY3RlZFBhZ2UoKV0pOworICAgIFttX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworCisg
ICAgV2ViUGFnZVByb3h5ICppbnNwZWN0b3JQYWdlID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIgd2ViVmlld10tPl9wYWdlLmdldCgpOworICAgIEFTU0VSVChpbnNwZWN0b3JQYWdlKTsKKwor
ICAgIHJldHVybiBpbnNwZWN0b3JQYWdlOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQoreworICAgIEFTU0VSVCghbV9pbnNwZWN0
b3JXaW5kb3cpOworCisgICAgTlNTdHJpbmcgKnNhdmVkV2luZG93RnJhbWVTdHJpbmcgPSBpbnNw
ZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCkuaW5zcGVjdG9yV2luZG93RnJh
bWUoKTsKKyAgICBOU1JlY3Qgc2F2ZWRXaW5kb3dGcmFtZSA9IE5TUmVjdEZyb21TdHJpbmcoc2F2
ZWRXaW5kb3dGcmFtZVN0cmluZyk7CisKKyAgICBtX2luc3BlY3RvcldpbmRvdyA9IFdlYkluc3Bl
Y3RvclVJUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KHNhdmVkV2luZG93RnJhbWUsIEluc3Bl
Y3Rpb25UYXJnZXRUeXBlOjpMb2NhbCk7CisgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVn
YXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworCisgICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3
ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107CisgICAgTlNWaWV3ICpjb250
ZW50VmlldyA9IFttX2luc3BlY3RvcldpbmRvdyBjb250ZW50Vmlld107CisgICAgaW5zcGVjdG9y
Vmlldy5mcmFtZSA9IFtjb250ZW50VmlldyBib3VuZHNdOworICAgIFtjb250ZW50VmlldyBhZGRT
dWJ2aWV3Omluc3BlY3RvclZpZXddOworCisgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUo
KTsKKyAgICBhcHBseUZvcmNlZEFwcGVhcmFuY2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjpjbG9zZUZyb250ZW5kUGFnZSgpCit7CisgICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQg
fHwgIW1faW5zcGVjdG9yV2luZG93KTsKKworICAgIGlmIChtX2luc3BlY3RvclZpZXdDb250cm9s
bGVyKSB7CisgICAgICAgIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyLmdldCgpIHNldERlbGVn
YXRlOm5pbF07CisgICAgICAgIG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgPSBuaWw7CisgICAg
fQorCisgICAgaWYgKG1fb2JqQ0FkYXB0ZXIpIHsKKyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpXTsK
KworICAgICAgICBbbV9vYmpDQWRhcHRlciBpbnZhbGlkYXRlXTsKKyAgICAgICAgbV9vYmpDQWRh
cHRlciA9IG5pbDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6Y2xvc2VG
cm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQoKQoreworICAgIGNsb3NlRnJvbnRlbmRQ
YWdlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAg
ICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBbbV9pbnNw
ZWN0b3JXaW5kb3cgY2xvc2VdOworICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKKyAg
ICB9CisKKyAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdGFydE9uZVNo
b3Qod2ViVmlld0Nsb3NlVGltZW91dCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKK3sKKyAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlcklu
YWN0aXZpdHlUaW1lci5zdG9wKCk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZSgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgbV9j
bG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOworCisgICAgY2xvc2VGcm9u
dGVuZFBhZ2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUhpZGUo
KQoreworICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKKyAgICAgICAgcGxhdGZvcm1EZXRhY2goKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewor
ICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21f
aW5zcGVjdG9yV2luZG93IGNsb3NlXTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7
CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0
ZSgpCit7CisgICAgaW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLmRl
bGV0ZUluc3BlY3RvcldpbmRvd0ZyYW1lKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94
eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIC8vIElmIHRoZSBXZWIgSW5zcGVjdG9y
IGlzIG5vIGxvbmdlciBpbiB0aGUgc2FtZSB3aW5kb3cgYXMgdGhlIGluc3BlY3RlZCB2aWV3LAor
ICAgIC8vIHRoZW4gd2UgbmVlZCB0byByZW9wZW4gdGhlIEluc3BlY3RvciB0byBnZXQgaXQgYXR0
YWNoZWQgdG8gdGhlIHJpZ2h0IHdpbmRvdy4KKyAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBk
cmFnZ2luZyB0YWJzIHRvIGFub3RoZXIgd2luZG93IGluIFNhZmFyaS4KKyAgICBpZiAobV9pc0F0
dGFjaGVkICYmIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRvdyAhPSBp
bnNwZWN0ZWRQYWdlKCktPnBsYXRmb3JtV2luZG93KCkpIHsKKyAgICAgICAgb3BlbigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEwOTM3
Njg4PjogdGhpcyB3aWxsIG5vdCBicmluZyBhIGJhY2tncm91bmQgdGFiIGluIFNhZmFyaSB0byB0
aGUgZnJvbnQsIG9ubHkgaXRzIHdpbmRvdy4KKyAgICBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIgd2ViVmlld10ud2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07CisgICAgW1ttX2lu
c3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6
W21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld11dOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCit7CisgICAg
W2luc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3coKSBtYWtlS2V5QW5kT3JkZXJGcm9udDpu
aWxdOworfQorCitib29sIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCit7
CisgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEwOTM3Njg4PjogdGhpcyB3aWxsIG5vdCBy
ZXR1cm4gZmFsc2UgZm9yIGEgYmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpLCBvbmx5IGEgYmFja2dy
b3VuZCB3aW5kb3cuCisgICAgcmV0dXJuIG1faXNWaXNpYmxlICYmIFttX2luc3BlY3RvclZpZXdD
b250cm9sbGVyIHdlYlZpZXddLndpbmRvdy5pc01haW5XaW5kb3c7Cit9CisKK2Jvb2wgV2ViSW5z
cGVjdG9yVUlQcm94eTo6cGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNo
KQoreworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVj
dG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBpZiAoW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
dmlld0lzSW5zcGVjdG9yV2ViVmlldzppbnNwZWN0ZWRWaWV3XSkKKyAgICAgICAgcmV0dXJuIHdl
YlByb2Nlc3NDYW5BdHRhY2g7CisKKyAgICBpZiAoaW5zcGVjdGVkVmlldy5oaWRkZW4pCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNo
ZWRIZWlnaHQgPSAyNTA7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhl
aWdodFJhdGlvID0gMC43NTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVk
V2lkdGggPSA1MDA7CisKKyAgICBOU1JlY3QgaW5zcGVjdGVkVmlld0ZyYW1lID0gaW5zcGVjdGVk
Vmlldy5mcmFtZTsKKworICAgIGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodCA9IE5TSGVpZ2h0
KGluc3BlY3RlZFZpZXdGcmFtZSkgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKKyAgICBy
ZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBt
aW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBOU1dpZHRoKGluc3BlY3RlZFZpZXdGcmFtZSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFu
Z2VkKGJvb2wgYXZhaWxhYmxlKQoreworICAgIC8vIERvIG5vdGhpbmcuCit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKEluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlIGFwcGVhcmFuY2UpCit7CisgICAgbV9mcm9udGVuZEFw
cGVhcmFuY2UgPSBhcHBlYXJhbmNlOworCisgICAgYXBwbHlGb3JjZWRBcHBlYXJhbmNlKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIG1fdXJsU3RyaW5nID0gdXJsU3RyaW5n
OworCisgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUlu
Zm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0Vt
cHR5KCkpOworCisgICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQ
YW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKKworICAg
IE5TV2luZG93ICp3aW5kb3c7CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQorICAgICAgICB3
aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdy5nZXQoKTsKKyAgICBlbHNlCisgICAgICAgIHdpbmRv
dyA9IFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XSB3aW5kb3ddOworCisgICAg
aWYgKCF3aW5kb3cpCisgICAgICAgIHdpbmRvdyA9IFtOU0FwcCBrZXlXaW5kb3ddOworCisjaWYg
SEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdp
blNoZWV0Rm9yV2luZG93OndpbmRvdyBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpO
VUxMIGNvbnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJbmZvLnRydXN0KCkgc2hv
d0dyb3VwOllFU107CisjZWxzZQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JX
aW5kb3c6d2luZG93IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4
dEluZm86bnVsbHB0ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZpY2F0ZUluZm8uY2Vy
dGlmaWNhdGVDaGFpbigpIHNob3dHcm91cDpZRVNdOworI2VuZGlmCisKKyAgICAvLyBUaGlzIG11
c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBkaXNwbGF5ZWQsIGJl
Y2F1c2UgdGhlIGNlcnRpZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJlZm9yZWhhbmQuCisgICAg
U0ZDZXJ0aWZpY2F0ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0aWZpY2F0ZVBhbmVsIGNl
cnRpZmljYXRlVmlld107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5VHJ1c3Q6WUVT
XTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9dOworICAgIFtjZXJ0
aWZpY2F0ZVZpZXcgc2V0RGlzcGxheURldGFpbHM6WUVTXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3
IHNldERldGFpbHNEaXNjbG9zZWQ6WUVTXTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYg
Y29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKK3sKKyAg
ICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOworICAgIAorICAgIE5TVVJMICpwbGF0
Zm9ybVVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCkuZ2V0
KCk7CisgICAgaWYgKCFwbGF0Zm9ybVVSTCkgeworICAgICAgICBwbGF0Zm9ybVVSTCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOnN1Z2dlc3RlZFVSTF07CisgICAgICAgIC8vIFRoZSB1c2VyIG11c3Qg
Y29uZmlybSBuZXcgZmlsZW5hbWVzIGJlZm9yZSB3ZSBjYW4gc2F2ZSB0byB0aGVtLgorICAgICAg
ICBmb3JjZVNhdmVEaWFsb2cgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQocGxhdGZv
cm1VUkwpOworICAgIGlmICghcGxhdGZvcm1VUkwpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IE5lY2Vzc2FyeSBmb3IgdGhlIGJsb2NrIGJlbG93LgorICAgIFN0cmluZyBzdWdnZXN0ZWRVUkxD
b3B5ID0gc3VnZ2VzdGVkVVJMOworICAgIFN0cmluZyBjb250ZW50Q29weSA9IGNvbnRlbnQ7CisK
KyAgICBhdXRvIHNhdmVUb1VSTCA9IF4oTlNVUkwgKmFjdHVhbFVSTCkgeworICAgICAgICBBU1NF
UlQoYWN0dWFsVVJMKTsKKworICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChz
dWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOworCisgICAgICAgIGlmIChiYXNlNjRFbmNvZGVk
KSB7CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OworICAgICAgICAgICAgaWYgKCFiYXNl
NjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29u
dGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBs
ZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6
YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBb
Y29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CisKKyAgICAgICAgbV9pbnNwZWN0b3JQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShbYWN0dWFsVVJMIGFi
c29sdXRlU3RyaW5nXSkpOworICAgIH07CisKKyAgICBpZiAoIWZvcmNlU2F2ZURpYWxvZykgewor
ICAgICAgICBzYXZlVG9VUkwocGxhdGZvcm1VUkwpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgTlNTYXZlUGFuZWwgKnBhbmVsID0gW05TU2F2ZVBhbmVsIHNhdmVQYW5lbF07CisgICAg
cGFuZWwubmFtZUZpZWxkU3RyaW5nVmFsdWUgPSBwbGF0Zm9ybVVSTC5sYXN0UGF0aENvbXBvbmVu
dDsKKworICAgIC8vIElmIHdlIGhhdmUgYSBmaWxlIFVSTCB3ZSd2ZSBhbHJlYWR5IHNhdmVkIHRo
aXMgZmlsZSB0byBhIHBhdGggYW5kCisgICAgLy8gY2FuIHByb3ZpZGUgYSBnb29kIGRpcmVjdG9y
eSB0byBzaG93LiBPdGhlcndpc2UsIHVzZSB0aGUgc3lzdGVtJ3MKKyAgICAvLyBkZWZhdWx0IGJl
aGF2aW9yIGZvciB0aGUgaW5pdGlhbCBkaXJlY3RvcnkgdG8gc2hvdyBpbiB0aGUgZGlhbG9nLgor
ICAgIGlmIChwbGF0Zm9ybVVSTC5pc0ZpbGVVUkwpCisgICAgICAgIHBhbmVsLmRpcmVjdG9yeVVS
TCA9IFtwbGF0Zm9ybVVSTCBVUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRdOworCisgICAg
YXV0byBjb21wbGV0aW9uSGFuZGxlciA9IF4oTlNJbnRlZ2VyIHJlc3VsdCkgeworICAgICAgICBp
ZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZUNhbmNlbCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VPSyk7CisgICAgICAgIHNh
dmVUb1VSTChwYW5lbC5VUkwpOworICAgIH07CisKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gbV9p
bnNwZWN0b3JXaW5kb3cgPyBtX2luc3BlY3RvcldpbmRvdy5nZXQoKSA6IFtOU0FwcCBrZXlXaW5k
b3ddOworICAgIGlmICh3aW5kb3cpCisgICAgICAgIFtwYW5lbCBiZWdpblNoZWV0TW9kYWxGb3JX
aW5kb3c6d2luZG93IGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBl
bHNlCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFtwYW5lbCBydW5Nb2RhbF0pOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgQVNTRVJUKCFzdWdnZXN0
ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8TlNVUkw+IGFjdHVhbFVSTCA9
IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCk7CisgICAgLy8gRG8g
bm90IGFwcGVuZCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFscmVhZHkgY29uZmlybWVkIHRoaXMgZmls
ZW5hbWUgaW4gc2F2ZSgpLgorICAgIGlmICghYWN0dWFsVVJMKQorICAgICAgICByZXR1cm47CisK
KyAgICBOU0ZpbGVIYW5kbGUgKmhhbmRsZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvcldy
aXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0KCkgZXJyb3I6TlVMTF07CisgICAgW2hhbmRsZSBzZWVr
VG9FbmRPZkZpbGVdOworICAgIFtoYW5kbGUgd3JpdGVEYXRhOltjb250ZW50IGRhdGFVc2luZ0Vu
Y29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07CisgICAgW2hhbmRsZSBjbG9zZUZpbGVdOwor
CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGlk
QXBwZW5kKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6d2luZG93RnJhbWVEaWRDaGFuZ2UoKQoreworICAgIEFTU0VSVCghbV9pc0F0
dGFjaGVkKTsKKyAgICBBU1NFUlQobV9pc1Zpc2libGUpOworICAgIEFTU0VSVChtX2luc3BlY3Rv
cldpbmRvdyk7CisKKyAgICBpZiAobV9pc0F0dGFjaGVkIHx8ICFtX2lzVmlzaWJsZSB8fCAhbV9p
bnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIE5TU3RyaW5nICpmcmFtZVN0
cmluZyA9IE5TU3RyaW5nRnJvbVJlY3QoW21faW5zcGVjdG9yV2luZG93IGZyYW1lXSk7CisgICAg
aW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLnNldEluc3BlY3Rvcldp
bmRvd0ZyYW1lKGZyYW1lU3RyaW5nKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5Ojp3
aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCkKK3sKKyAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCk7
CisgICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cp
OworCisgICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUgfHwgIW1faW5zcGVjdG9y
V2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2Vk
KHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7ICAgIAorfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJUHJveHk6Omluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zsb2F0IGN1cnJlbnRE
aW1lbnNpb24pCit7CisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX2lzQXR0YWNoZWQpIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGF0dGFjaCBh
dmFpbGFiaWxpdHkgY2hhbmdlZC4gV2UgbmVlZCB0byBkbyB0aGlzIGhlcmUgaW4gY2FzZQorICAg
ICAgICAvLyB0aGUgYXR0YWNobWVudCB2aWV3IGlzIG5vdCB0aGUgV0tWaWV3LgorICAgICAgICBh
dHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFn
ZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIFdLV2ViVmlldyAqaW5zcGVjdG9y
VmlldyA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOworCisgICAgTlNSZWN0
IGluc3BlY3RlZFZpZXdGcmFtZSA9IGluc3BlY3RlZFZpZXcuZnJhbWU7CisgICAgTlNSZWN0IG9s
ZEluc3BlY3RvclZpZXdGcmFtZSA9IGluc3BlY3RvclZpZXcuZnJhbWU7CisgICAgTlNSZWN0IG5l
d0luc3BlY3RvclZpZXdGcmFtZSA9IE5TWmVyb1JlY3Q7CisgICAgTlNSZWN0IHBhcmVudEJvdW5k
cyA9IGluc3BlY3RlZFZpZXcuc3VwZXJ2aWV3LmJvdW5kczsKKyAgICBDR0Zsb2F0IGluc3BlY3Rl
ZFZpZXdUb3AgPSBOU01heFkoaW5zcGVjdGVkVmlld0ZyYW1lKTsKKworICAgIHN3aXRjaCAobV9h
dHRhY2htZW50U2lkZSkgeworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTogeworICAg
ICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCisgICAgICAgICAgICBjdXJyZW50RGltZW5zaW9u
ID0gTlNIZWlnaHQob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKKworICAgICAgICBDR0Zsb2F0IHBh
cmVudEhlaWdodCA9IE5TSGVpZ2h0KHBhcmVudEJvdW5kcyk7CisgICAgICAgIENHRmxvYXQgaW5z
cGVjdG9ySGVpZ2h0ID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRB
dHRhY2hlZFdpbmRvd0hlaWdodChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRIZWlnaHQpOworCisg
ICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3
IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuCisgICAgICAgIGluc3BlY3RlZFZpZXdG
cmFtZSA9IE5TTWFrZVJlY3QoMCwgaW5zcGVjdG9ySGVpZ2h0LCBOU1dpZHRoKHBhcmVudEJvdW5k
cyksIGluc3BlY3RlZFZpZXdUb3AgLSBpbnNwZWN0b3JIZWlnaHQpOworICAgICAgICBuZXdJbnNw
ZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVjdGVkVmlld0Zy
YW1lKSwgaW5zcGVjdG9ySGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6IHsKKyAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9u
KQorICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9yVmll
d0ZyYW1lKTsKKworICAgICAgICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJlbnRC
b3VuZHMpOworICAgICAgICBDR0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnREaW1l
bnNpb24sIHBhcmVudFdpZHRoKTsKKworICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0
aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3Jr
LiBCdXQgZG9uJ3QgdXNlIHRoYXQKKyAgICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUgaW5z
cGVjdG9yIHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMgdGhl
IGluc3BlY3RlZCB2aWV3LgorICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0
KDAsIDAsIHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3RlZFZpZXdUb3ApOwor
ICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KHBhcmVudFdpZHRoIC0g
aW5zcGVjdG9yV2lkdGgsIDAsIGluc3BlY3RvcldpZHRoLCBOU0hlaWdodChwYXJlbnRCb3VuZHMp
KTsKKworICAgICAgICBpZiAoTlNXaW5kb3cgKmluc3BlY3RvcldpbmRvdyA9IGluc3BlY3RvclZp
ZXcud2luZG93KSB7CisgICAgICAgICAgICBOU1JlY3QgY29udGVudExheW91dFJlY3QgPSBbaW5z
cGVjdGVkVmlldy5zdXBlcnZpZXcgY29udmVydFJlY3Q6aW5zcGVjdG9yV2luZG93LmNvbnRlbnRM
YXlvdXRSZWN0IGZyb21WaWV3Om5pbF07CisgICAgICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJh
bWUgPSBOU0ludGVyc2VjdGlvblJlY3QobmV3SW5zcGVjdG9yVmlld0ZyYW1lLCBjb250ZW50TGF5
b3V0UmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBB
dHRhY2htZW50U2lkZTo6TGVmdDogeworICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCisg
ICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gTlNXaWR0aChvbGRJbnNwZWN0b3JWaWV3RnJh
bWUpOworCisgICAgICAgIENHRmxvYXQgcGFyZW50V2lkdGggPSBOU1dpZHRoKHBhcmVudEJvdW5k
cyk7CisgICAgICAgIENHRmxvYXQgaW5zcGVjdG9yV2lkdGggPSBJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoY3VycmVudERpbWVuc2lv
biwgcGFyZW50V2lkdGgpOworCisgICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24g
b2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuIEJ1
dCBkb24ndCB1c2UgdGhhdAorICAgICAgICAvLyB0b3AgcG9zaXRpb24gZm9yIHRoZSBpbnNwZWN0
b3IgdmlldyBzaW5jZSB0aGUgYmFubmVycyBvbmx5IHN0cmV0Y2ggYXMgd2lkZSBhcyB0aGUgaW5z
cGVjdGVkIHZpZXcuCisgICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoaW5z
cGVjdG9yV2lkdGgsIDAsIHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3RlZFZp
ZXdUb3ApOworICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAs
IGluc3BlY3RvcldpZHRoLCBOU0hlaWdodChwYXJlbnRCb3VuZHMpKTsKKworICAgICAgICBpZiAo
TlNXaW5kb3cgKmluc3BlY3RvcldpbmRvdyA9IGluc3BlY3RvclZpZXcud2luZG93KSB7CisgICAg
ICAgICAgICBOU1JlY3QgY29udGVudExheW91dFJlY3QgPSBbaW5zcGVjdGVkVmlldy5zdXBlcnZp
ZXcgY29udmVydFJlY3Q6aW5zcGVjdG9yV2luZG93LmNvbnRlbnRMYXlvdXRSZWN0IGZyb21WaWV3
Om5pbF07CisgICAgICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU0ludGVyc2VjdGlv
blJlY3QobmV3SW5zcGVjdG9yVmlld0ZyYW1lLCBjb250ZW50TGF5b3V0UmVjdCk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGlmIChOU0VxdWFsUmVjdHMo
b2xkSW5zcGVjdG9yVmlld0ZyYW1lLCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUpICYmIE5TRXF1YWxS
ZWN0cyhbaW5zcGVjdGVkVmlldyBmcmFtZV0sIGluc3BlY3RlZFZpZXdGcmFtZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIERpc2FibGUgc2NyZWVuIHVwZGF0ZXMgdG8gbWFrZSBzdXJlIHRo
ZSBsYXllcnMgZm9yIGJvdGggdmlld3MgcmVzaXplIGluIHN5bmMuCisgICAgW2luc3BlY3RvclZp
ZXcud2luZG93IGRpc2FibGVTY3JlZW5VcGRhdGVzVW50aWxGbHVzaF07CisKKyAgICBbaW5zcGVj
dG9yVmlldyBzZXRGcmFtZTpuZXdJbnNwZWN0b3JWaWV3RnJhbWVdOworICAgIFtpbnNwZWN0ZWRW
aWV3IHNldEZyYW1lOmluc3BlY3RlZFZpZXdGcmFtZV07Cit9CisKK3Vuc2lnbmVkIFdlYkluc3Bl
Y3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKK3sKKyAgICBOU1Zp
ZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRW
aWV3KCk7CisgICAgTlNSZWN0IGluc3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJh
bWVdOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1JlY3Qu
c2l6ZS5oZWlnaHQpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBp
bnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgTlNSZWN0IGlu
c3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJhbWVdOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1JlY3Quc2l6ZS53aWR0aCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BdHRhY2goKQoreworICAgIE5TVmlldyAq
aW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXco
KTsKKyAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlciB3ZWJWaWV3XTsKKworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICBb
bV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21faW5zcGVjdG9y
V2luZG93IGNsb3NlXTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7CisgICAgfQor
CisgICAgW2luc3BlY3RvclZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBDR0Zsb2F0
IGN1cnJlbnREaW1lbnNpb247CisgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7CisgICAg
Y2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgorICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRB
dXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld01heFlNYXJnaW5dOwor
ICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5z
cGVjdG9yQXR0YWNoZWRIZWlnaHQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHRhY2ht
ZW50U2lkZTo6UmlnaHQ6CisgICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01h
c2s6TlNWaWV3SGVpZ2h0U2l6YWJsZSB8IE5TVmlld01pblhNYXJnaW5dOworICAgICAgICBjdXJy
ZW50RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNo
ZWRXaWR0aCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0
OgorICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdo
dFNpemFibGUgfCBOU1ZpZXdNYXhYTWFyZ2luXTsKKyAgICAgICAgY3VycmVudERpbWVuc2lvbiA9
IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKGN1
cnJlbnREaW1lbnNpb24pOworCisgICAgW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGFkZFN1YnZp
ZXc6aW5zcGVjdG9yVmlldyBwb3NpdGlvbmVkOk5TV2luZG93QmVsb3cgcmVsYXRpdmVUbzppbnNw
ZWN0ZWRWaWV3XTsKKyAgICBbaW5zcGVjdG9yVmlldy53aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVy
Omluc3BlY3RvclZpZXddOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
RGV0YWNoKCkKK3sKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCkt
Pmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3
ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107CisKKyAgICBbaW5zcGVjdG9y
VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKworICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9y
ZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07CisK
KyAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBzaXplIHRoZSBpbnNwZWN0ZWQgdmlldydzIGZyYW1l
IGFmdGVyIGRldGFjaGluZyBzbyB0aGF0IGl0IHRha2VzIHVwIHRoZSBzcGFjZSB0aGF0IHRoZQor
ICAgIC8vIGF0dGFjaGVkIGluc3BlY3RvciB1c2VkIHRvLiBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0
aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3Jr
LgorCisgICAgaW5zcGVjdGVkVmlldy5mcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgTlNXaWR0aChp
bnNwZWN0ZWRWaWV3LnN1cGVydmlldy5ib3VuZHMpLCBOU01heFkoaW5zcGVjdGVkVmlldy5mcmFt
ZSkpOworCisgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHdlIGFyZSBub3QgdmlzaWJsZS4gVGhpcyBt
ZWFucyB0aGUgaW5zcGVjdG9yIHdhcyBjbG9zZWQgd2hpbGUgYXR0YWNoZWQKKyAgICAvLyBhbmQg
d2Ugc2hvdWxkIG5vdCBjcmVhdGUgYW5kIHNob3cgdGhlIGluc3BlY3RvciB3aW5kb3cuCisgICAg
aWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgb3BlbigpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQo
dW5zaWduZWQgaGVpZ2h0KQoreworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoaGVpZ2h0KTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5z
aWduZWQgd2lkdGgpCit7CisgICAgaWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSh3aWR0aCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIG1fc2hlZXRSZWN0ID0gcmVjdDsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgaWYgKGF1dG8qIHdlYlZp
ZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XSkgeworICAgICAgICBpZiAo
d2ViVmlldy0+X3BhZ2UpCisgICAgICAgICAgICB3ZWJWaWV3LT5fcGFnZS0+c3RhcnRXaW5kb3dE
cmFnKCk7CisgICAgfQorfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVjdG9y
UGFnZVVSTCgpCit7CisgICAgcmV0dXJuIFtXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIFVSTEZv
ckluc3BlY3RvclJlc291cmNlOkAiTWFpbi5odG1sIl0uYWJzb2x1dGVTdHJpbmc7Cit9CisKK1N0
cmluZyBXZWJJbnNwZWN0b3JVSVByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisgICAg
cmV0dXJuIFtXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIFVSTEZvckluc3BlY3RvclJlc291cmNl
OkAiVGVzdC5odG1sIl0uYWJzb2x1dGVTdHJpbmc7Cit9CisKK3N0YXRpYyBOU0RpY3Rpb25hcnkg
KnN5c3RlbVZlcnNpb25QbGlzdCgpCit7CisgICAgTlNTdHJpbmcgKnN5c3RlbUxpYnJhcnlQYXRo
ID0gW05TU2VhcmNoUGF0aEZvckRpcmVjdG9yaWVzSW5Eb21haW5zKE5TTGlicmFyeURpcmVjdG9y
eSwgTlNTeXN0ZW1Eb21haW5NYXNrLCBZRVMpIG9iamVjdEF0SW5kZXg6MF07CisgICAgTlNTdHJp
bmcgKnN5c3RlbVZlcnNpb25QbGlzdFBhdGggPSBbc3lzdGVtTGlicmFyeVBhdGggc3RyaW5nQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ29yZVNlcnZpY2VzL1N5c3RlbVZlcnNpb24ucGxpc3Qi
XTsKKyAgICBOU0RpY3Rpb25hcnkgKnN5c3RlbVZlcnNpb25JbmZvID0gW05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aENvbnRlbnRzT2ZGaWxlOnN5c3RlbVZlcnNpb25QbGlzdFBhdGhdOworICAg
IHJldHVybiBzeXN0ZW1WZXJzaW9uSW5mbzsKK30KKworRGVidWdnYWJsZUluZm9EYXRhIFdlYklu
c3BlY3RvclVJUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQoreworICAgIE5TRGljdGlv
bmFyeSAqcGxpc3QgPSBzeXN0ZW1WZXJzaW9uUGxpc3QoKTsKKworICAgIERlYnVnZ2FibGVJbmZv
RGF0YSByZXN1bHQ7CisgICAgcmVzdWx0LmRlYnVnZ2FibGVUeXBlID0gSW5zcGVjdG9yOjpEZWJ1
Z2dhYmxlVHlwZTo6V2ViUGFnZTsKKyAgICByZXN1bHQudGFyZ2V0UGxhdGZvcm1OYW1lID0gIm1h
Y09TIl9zOworICAgIHJlc3VsdC50YXJnZXRCdWlsZFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RC
dWlsZFZlcnNpb24iXTsKKyAgICByZXN1bHQudGFyZ2V0UHJvZHVjdFZlcnNpb24gPSBwbGlzdFtA
IlByb2R1Y3RVc2VyVmlzaWJsZVZlcnNpb24iXTsKKyAgICByZXN1bHQudGFyZ2V0SXNTaW11bGF0
b3IgPSBmYWxzZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUlQcm94eTo6YXBwbHlGb3JjZWRBcHBlYXJhbmNlKCkKK3sKKyAgICBOU0FwcGVhcmFuY2UgKnBs
YXRmb3JtQXBwZWFyYW5jZTsKKyAgICBzd2l0Y2ggKG1fZnJvbnRlbmRBcHBlYXJhbmNlKSB7Cisg
ICAgY2FzZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZTo6U3lzdGVtOgorICAg
ICAgICBwbGF0Zm9ybUFwcGVhcmFuY2UgPSBuaWw7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZTo6TGlnaHQ6CisgICAgICAgIHBs
YXRmb3JtQXBwZWFyYW5jZSA9IFtOU0FwcGVhcmFuY2UgYXBwZWFyYW5jZU5hbWVkOk5TQXBwZWFy
YW5jZU5hbWVBcXVhXTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjpBcHBlYXJhbmNlOjpEYXJrOgorICAgICAgICBwbGF0Zm9ybUFwcGVhcmFuY2Ug
PSBbTlNBcHBlYXJhbmNlIGFwcGVhcmFuY2VOYW1lZDpOU0FwcGVhcmFuY2VOYW1lRGFya0FxdWFd
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoTlNXaW5kb3cgKndpbmRvdyA9IG1f
aW5zcGVjdG9yV2luZG93LmdldCgpKQorICAgICAgICB3aW5kb3cuYXBwZWFyYW5jZSA9IHBsYXRm
b3JtQXBwZWFyYW5jZTsKKworICAgIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXdd
LmFwcGVhcmFuY2UgPSBwbGF0Zm9ybUFwcGVhcmFuY2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwCmluZGV4IDZmNjk4NjE1YjNlZjBjNWIzNGM1MDZkN2I4Mzk2ZDM5Mjc0ZDYxNWMu
LmIxYWNkODI3NTc4NmE4NGFkODc2NzQyZjgyMTBkMTFmNmQxYTNiNWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5jcHAKQEAgLTMwLDE3ICszMCwxNyBAQAogCiAjaW5jbHVkZSAi
QVBJRGVidWdnYWJsZUluZm8uaCIKICNpbmNsdWRlICJBUElJbnNwZWN0b3JDb25maWd1cmF0aW9u
LmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNz
IFJlbW90ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVibGljIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5Q2xpZW50IHsKK2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVibGljIFJl
bW90ZVdlYkluc3BlY3RvclVJUHJveHlDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEKCk7CiBwdWJsaWM6CiAgICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVtb3RlSW5zcGVjdG9y
Q2xpZW50JiBpbnNwZWN0b3JDbGllbnQsIENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdl
dElEIHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKQot
ICAgICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpKQorICAg
ICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6Y3JlYXRlKCkpCiAgICAg
ICAgICwgbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQogICAgICAgICAsIG1fY29u
bmVjdGlvbklEKGNvbm5lY3Rpb25JRCkKICAgICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQpA
QCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJveHktPnNob3coKTsKICAgICB9
CiAKLSAgICAvLyBNQVJLOiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCBtZXRob2RzCisg
ICAgLy8gTUFSSzogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNsaWVudCBtZXRob2RzCiAKICAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAg
ewpAQCAtODUsMTMgKzg1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQu
Y2xvc2VGcm9tRnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOwogICAgIH0KIAot
ICAgIFJlZjxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gb3JSZW1v
dGVJbnNwZWN0b3IoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkmKQorICAgIFJlZjxBUEk6Okluc3Bl
Y3RvckNvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25Gb3JSZW1vdGVJbnNwZWN0b3IoUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eSYpCiAgICAgewogICAgICAgICByZXR1cm4gQVBJOjpJbnNwZWN0
b3JDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUmVmPFJl
bW90ZVdlYkluc3BlY3RvclByb3h5PiBtX3Byb3h5OworICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5PiBtX3Byb3h5OwogICAgIFJlbW90ZUluc3BlY3RvckNsaWVudCYgbV9pbnNwZWN0
b3JDbGllbnQ7CiAgICAgQ29ubmVjdGlvbklEIG1fY29ubmVjdGlvbklEOwogICAgIFRhcmdldElE
IG1fdGFyZ2V0SUQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzg2ZTYyMDM1NGYyYTA4OWExZDIxZGRkMmZiNzA5
MTZiNzg3Mjg1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclBy
b3h5LmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkFQSVBh
Z2VDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNs
dWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRl
ICJXZWJWaWV3LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
c3RhdGljIExQQ1RTVFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCA9IFRFWFQo
IlJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlciIpOwotY29uc3QgTFBDV1NUUiBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSA9IEwiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFz
cyI7Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlduZFByb2Mo
SFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAg
ICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eSo+KDo6R2V0UHJvcChod25kLCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eVBvaW50ZXJQcm9wKSk7Ci0KLSAgICBzd2l0Y2ggKG1zZykgewotICAgIGNhc2UgV01fU0la
RToKLSAgICAgICAgcmV0dXJuIGNsaWVudC0+c2l6ZUNoYW5nZSgpOwotICAgIGNhc2UgV01fQ0xP
U0U6Ci0gICAgICAgIHJldHVybiBjbGllbnQtPm9uQ2xvc2UoKTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1z
Zywgd1BhcmFtLCBsUGFyYW0pOwotfQotCi1zdGF0aWMgQVRPTSByZWdpc3RlcldpbmRvd0NsYXNz
KCkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7
Ci0gICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgV05EQ0xBU1NFWCB3Y2V4OwotICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENM
QVNTRVgpOwotICAgIHdjZXguc3R5bGUgICAgICAgICAgPSAwOwotICAgIHdjZXgubHBmblduZFBy
b2MgICAgPSBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6V25kUHJvYzsKLSAgICB3Y2V4LmNiQ2xz
RXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmhJ
bnN0YW5jZSAgICAgID0gMDsKLSAgICB3Y2V4LmhJY29uICAgICAgICAgID0gMDsKLSAgICB3Y2V4
LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAgIHdjZXguaGJy
QmFja2dyb3VuZCAgPSAwOwotICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSAwOwotICAgIHdjZXgu
bHBzekNsYXNzTmFtZSAgPSBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZTsKLSAgICB3
Y2V4LmhJY29uU20gICAgICAgID0gMDsKLQotICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3Mg
PSB0cnVlOwotICAgIHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Ci19Ci0KLUxSRVNV
TFQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNpemVDaGFuZ2UoKQotewotICAgIGlmICghbV93
ZWJWaWV3KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENs
aWVudFJlY3QobV9mcm9udGVuZEhhbmRsZSwgJnJlY3QpOwotICAgIDo6U2V0V2luZG93UG9zKG1f
d2ViVmlldy0+d2luZG93KCksIDAsIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSBy
ZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLUxSRVNVTFQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om9uQ2xvc2UoKQot
ewotICAgIDo6U2hvd1dpbmRvdyhtX2Zyb250ZW5kSGFuZGxlLCBTV19ISURFKTsKLSAgICBmcm9u
dGVuZERpZENsb3NlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVdlYlBhZ2VQcm94eSogUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkK
LXsKLSAgICBSZWZQdHI8V2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5j
ZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7Ci0gICAgcHJlZmVy
ZW5jZXMtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyh0cnVlKTsKLQotI2lmIEVOQUJM
RShERVZFTE9QRVJfTU9ERSkKLSAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCh0cnVlKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVt
Q29uc29sZUVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxXZWJQYWdlR3JvdXA+
IHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKFdlYktpdDo6ZGVmYXVsdEluc3BlY3Rv
clBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKG51bGxwdHIpKTsKLQotICAgIGF1dG8gcGFnZUNv
bmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdl
Q29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJldlYktpdDo6ZGVmYXVsdEluc3BlY3RvclBy
b2Nlc3NQb29sKGluc3BlY3RvckxldmVsRm9yUGFnZShudWxscHRyKSkpOwotICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5nZXQoKSk7Ci0gICAgcGFnZUNv
bmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cChwYWdlR3JvdXAuZ2V0KCkpOwotCi0gICAgV2ViQ29y
ZTo6SW50UmVjdCByZWN0KDYwLCAyMDAsIDE1MDAsIDEwMDApOwotICAgIHJlZ2lzdGVyV2luZG93
Q2xhc3MoKTsKLSAgICBtX2Zyb250ZW5kSGFuZGxlID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKLSAg
ICAgICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIDAs
IDAsIDAsIDApOwotCi0gICAgOjpTZXRQcm9wKG1fZnJvbnRlbmRIYW5kbGUsIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7
Ci0gICAgU2hvd1dpbmRvdyhtX2Zyb250ZW5kSGFuZGxlLCBTV19TSE9XKTsKLQotICAgIFJFQ1Qg
cjsKLSAgICA6OkdldENsaWVudFJlY3QobV9mcm9udGVuZEhhbmRsZSwgJnIpOwotICAgIG1fd2Vi
VmlldyA9IFdlYlZpZXc6OmNyZWF0ZShyLCBwYWdlQ29uZmlndXJhdGlvbiwgbV9mcm9udGVuZEhh
bmRsZSk7Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+cGFnZSgpOwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKSB7IH0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkgeyB9Ci12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiwgYm9vbCwgYm9vbCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRGb3Jj
ZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNl
KSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dE
cmFnKCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5VUkxF
eHRlcm5hbGx5KGNvbnN0IFN0cmluZyYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
JikgeyB9Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIDo6RGVzdHJveVdpbmRvdyhtX2Zyb250ZW5kSGFu
ZGxlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVN
T1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlXaW4uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQxNmYzYWYzOWY2NjkwYjYxYTI1OGE1NmVmZjZkMjgyNzMyMWQzNTQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1Jl
bW90ZVdlYkluc3BlY3RvclVJUHJveHlXaW4uY3BwCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0
b3JVSVByb3h5LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUg
IkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eS5o
IgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgor
I2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5k
Q2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgTFBDVFNUUiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5UG9pbnRlclBy
b3AgPSBURVhUKCJSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5UG9pbnRlciIpOworY29uc3QgTFBD
V1NUUiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Q2xhc3NOYW1lID0gTCJSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5Q2xhc3MiOworCitMUkVTVUxUIENBTExCQUNLIFJlbW90ZVdlYkluc3BlY3Rv
clVJUHJveHk6OlduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSkKK3sKKyAgICBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5KiBjbGllbnQgPSBy
ZWludGVycHJldF9jYXN0PFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkqPig6OkdldFByb3AoaHdu
ZCwgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eVBvaW50ZXJQcm9wKSk7CisKKyAgICBzd2l0Y2gg
KG1zZykgeworICAgIGNhc2UgV01fU0laRToKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+c2l6ZUNo
YW5nZSgpOworICAgIGNhc2UgV01fQ0xPU0U6CisgICAgICAgIHJldHVybiBjbGllbnQtPm9uQ2xv
c2UoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
OjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOworfQorCitzdGF0aWMg
QVRPTSByZWdpc3RlcldpbmRvd0NsYXNzKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0
ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CisgICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xh
c3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgV05EQ0xBU1NFWCB3Y2V4OworICAgIHdj
ZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOworICAgIHdjZXguc3R5bGUgICAgICAgICAg
PSAwOworICAgIHdjZXgubHBmblduZFByb2MgICAgPSBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjpXbmRQcm9jOworICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOworICAgIHdjZXguY2JXbmRF
eHRyYSAgICAgPSAwOworICAgIHdjZXguaEluc3RhbmNlICAgICAgPSAwOworICAgIHdjZXguaElj
b24gICAgICAgICAgPSAwOworICAgIHdjZXguaEN1cnNvciAgICAgICAgPSBMb2FkQ3Vyc29yKDAs
IElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IDA7CisgICAgd2NleC5scHN6
TWVudU5hbWUgICA9IDA7CisgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHlDbGFzc05hbWU7CisgICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7CisKKyAg
ICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKyAgICByZXR1cm4gOjpSZWdpc3Rl
ckNsYXNzRXgoJndjZXgpOworfQorCitMUkVTVUxUIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6
OnNpemVDaGFuZ2UoKQoreworICAgIGlmICghbV93ZWJWaWV3KQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFJFQ1QgcmVjdDsKKyAgICA6OkdldENsaWVudFJlY3QobV9mcm9udGVuZEhhbmRsZSwg
JnJlY3QpOworICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmlldy0+d2luZG93KCksIDAsIHJlY3Qu
bGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVj
dC50b3AsIFNXUF9OT1pPUkRFUik7CisgICAgcmV0dXJuIDA7Cit9CisKK0xSRVNVTFQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6b25DbG9zZSgpCit7CisgICAgOjpTaG93V2luZG93KG1fZnJv
bnRlbmRIYW5kbGUsIFNXX0hJREUpOworICAgIGZyb250ZW5kRGlkQ2xvc2UoKTsKKyAgICByZXR1
cm4gMDsKK30KKworV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0
Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgUmVmUHRyPFdlYlByZWZl
cmVuY2VzPiBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJX
ZWJLaXQyLiIsICJXZWJLaXQyLiIpOworICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nl
c3NGcm9tRmlsZVVSTHModHJ1ZSk7CisKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCisgICAg
cHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7CisgICAgcHJlZmVy
ZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwor
I2VuZGlmCisKKyAgICBSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAgPSBXZWJQYWdlR3Jv
dXA6OmNyZWF0ZShXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9y
UGFnZShudWxscHRyKSk7CisKKyAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdl
Q29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nl
c3NQb29sKCZXZWJLaXQ6OmRlZmF1bHRJbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0b3JMZXZl
bEZvclBhZ2UobnVsbHB0cikpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5j
ZXMocHJlZmVyZW5jZXMuZ2V0KCkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3Jv
dXAocGFnZUdyb3VwLmdldCgpKTsKKworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCg2MCwgMjAw
LCAxNTAwLCAxMDAwKTsKKyAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7CisgICAgbV9mcm9udGVu
ZEhhbmRsZSA9IDo6Q3JlYXRlV2luZG93RXgoMCwgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eUNs
YXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKKyAgICAgICAgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIDAsIDAsIDAsIDApOworCisgICAgOjpT
ZXRQcm9wKG1fZnJvbnRlbmRIYW5kbGUsIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlQb2ludGVy
UHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKKyAgICBTaG93V2luZG93KG1f
ZnJvbnRlbmRIYW5kbGUsIFNXX1NIT1cpOworCisgICAgUkVDVCByOworICAgIDo6R2V0Q2xpZW50
UmVjdChtX2Zyb250ZW5kSGFuZGxlLCAmcik7CisgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3Jl
YXRlKHIsIHBhZ2VDb25maWd1cmF0aW9uLCBtX2Zyb250ZW5kSGFuZGxlKTsKKyAgICByZXR1cm4g
bV93ZWJWaWV3LT5wYWdlKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6
cGxhdGZvcm1SZXNldFN0YXRlKCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6
OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJUHJv
eHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29s
KSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJ
UHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsg
fQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVNldEZvcmNlZEFwcGVh
cmFuY2UoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OkFwcGVhcmFuY2UpIHsgfQor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygp
IHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybU9wZW5VUkxFeHRl
cm5hbGx5KGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8m
KSB7IH0KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICA6OkRlc3Ryb3lXaW5kb3cobV9mcm9udGVuZEhh
bmRsZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxNjhkMjA3OGMzN2YwNTM1MDQ3ZGIxOWE0YmQ4MjQ4OGVlZjU5NDRh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaW5jbHVkZSAiQVBJ
TmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25BY3Rpb24uaCIKLSNpbmNsdWRl
ICJBUElQYWdlQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCi0j
aW5jbHVkZSAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFn
ZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVy
ZW5jZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1ZGUgIldlYlZpZXcu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlQnVuZGxlV2luLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd01l
c3NhZ2VCcm9hZGNhc3Rlci5oPgotI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2UuaD4KLQotI2lmIFVT
RShDRikKLSNpbmNsdWRlIDx3dGYvY2YvQ0ZVUkxFeHRyYXMuaD4KLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IExQQ1dTVFIgV2ViSW5zcGVjdG9yUHJveHlQb2lu
dGVyUHJvcCA9IEwiV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyIjsKLXN0YXRpYyBjb25zdCBMUENX
U1RSIFdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lID0gTCJXZWJJbnNwZWN0b3JQcm94eUNsYXNz
IjsKLQotc3RydWN0IEluc3BlY3RlZFdpbmRvd0luZm8gewotICAgIGludCBsZWZ0OwotICAgIGlu
dCB0b3A7Ci0gICAgaW50IHZpZXdXaWR0aDsKLSAgICBpbnQgdmlld0hlaWdodDsKLSAgICBpbnQg
cGFyZW50V2lkdGg7Ci0gICAgaW50IHBhcmVudEhlaWdodDsKLX07Ci0KLXN0YXRpYyBJbnNwZWN0
ZWRXaW5kb3dJbmZvIGdldEluc3BlY3RlZFdpbmRvd0luZm8oSFdORCBpbnNwZWN0ZWRXaW5kb3cs
IEhXTkQgcGFyZW50V2luZG93KQotewotICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENsaWVudFJl
Y3QoaW5zcGVjdGVkV2luZG93LCAmcmVjdCk7Ci0gICAgOjpNYXBXaW5kb3dQb2ludHMoaW5zcGVj
dGVkV2luZG93LCBwYXJlbnRXaW5kb3csIChMUFBPSU5UKSZyZWN0LCAyKTsKLQotICAgIFJFQ1Qg
cGFyZW50UmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QocGFyZW50V2luZG93LCAmcGFyZW50UmVj
dCk7Ci0gICAgcmV0dXJuIHsgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3Qu
bGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgcGFyZW50UmVjdC5yaWdodCAtIHBhcmVudFJl
Y3QubGVmdCwgcGFyZW50UmVjdC5ib3R0b20gLSBwYXJlbnRSZWN0LnRvcCB9OwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCBod25kLCBVSU5U
IG1zZywgV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQotewotICAgIHN3aXRjaCAobXNnKSB7Ci0gICAg
Y2FzZSBXTV9XSU5ET1dQT1NDSEFOR0lORzogewotICAgICAgICBpZiAoIW1faXNBdHRhY2hlZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIHdpbmRvd1BvcyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8V0lORE9XUE9TKj4obFBhcmFtKTsKLQotICAgICAgICBpZiAod2luZG93UG9zLT5m
bGFncyAmIFNXUF9OT1NJWkUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgSFdORCBw
YXJlbnQgPSBHZXRQYXJlbnQoaHduZCk7Ci0gICAgICAgIFJFQ1QgcGFyZW50UmVjdDsKLSAgICAg
ICAgR2V0Q2xpZW50UmVjdChwYXJlbnQsICZwYXJlbnRSZWN0KTsKLQotICAgICAgICBSRUNUIGlu
c3BlY3RvclJlY3Q7Ci0gICAgICAgIEdldENsaWVudFJlY3QobV9pbnNwZWN0b3JWaWV3V2luZG93
LCAmaW5zcGVjdG9yUmVjdCk7Ci0KLSAgICAgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7
Ci0gICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTogewotICAgICAgICAgICAgdW5z
aWduZWQgaW5zcGVjdG9ySGVpZ2h0ID0gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChpbnNwZWN0b3JSZWN0LmJvdHRv
bSAtIGluc3BlY3RvclJlY3QudG9wLCB3aW5kb3dQb3MtPmN5KTsKLSAgICAgICAgICAgIHdpbmRv
d1Bvcy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0OwotICAgICAgICAgICAgOjpTZXRXaW5kb3dQb3Mo
bV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dQb3MtPngsIHdpbmRvd1Bvcy0+eSArIHdp
bmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+Y3gsIGluc3BlY3RvckhlaWdodCwgU1dQX05PWk9SREVS
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXR0YWNobWVu
dFNpZGU6OkxlZnQ6Ci0gICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OiB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBpbnNwZWN0b3JXaWR0aCA9IFdlYkNvcmU6Okluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChpbnNwZWN0b3JS
ZWN0LnJpZ2h0IC0gaW5zcGVjdG9yUmVjdC5sZWZ0LCB3aW5kb3dQb3MtPmN4KTsKLSAgICAgICAg
ICAgIHdpbmRvd1Bvcy0+Y3ggLT0gaW5zcGVjdG9yV2lkdGg7Ci0gICAgICAgICAgICA6OlNldFdp
bmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd1Bvcy0+eCArIHdpbmRvd1Bv
cy0+Y3gsIHdpbmRvd1Bvcy0+eSwgaW5zcGVjdG9yV2lkdGgsIHdpbmRvd1Bvcy0+Y3ksIFNXUF9O
T1pPUkRFUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotTFJFU1VMVCBDQUxMQkFD
SyBXZWJJbnNwZWN0b3JQcm94eTo6d25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQg
PSByZWludGVycHJldF9jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oOjpHZXRQcm9wKGh3bmQsIFdl
Ykluc3BlY3RvclByb3h5UG9pbnRlclByb3ApKTsKLSAgICBzd2l0Y2ggKG1zZykgewotICAgIGNh
c2UgV01fU0laRToKLSAgICAgICAgOjpTZXRXaW5kb3dQb3MoY2xpZW50LT5tX2luc3BlY3RvclZp
ZXdXaW5kb3csIDAsIDAsIDAsIExPV09SRChsUGFyYW0pLCBISVdPUkQobFBhcmFtKSwgU1dQX05P
Wk9SREVSKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBXTV9DTE9TRToKLSAgICAgICAg
Y2xpZW50LT5jbG9zZSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQ
YXJhbSwgbFBhcmFtKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cmVnaXN0ZXJXaW5k
b3dDbGFzcygpCi17Ci0gICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9
IGZhbHNlOwotCi0gICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOwotCi0gICAg
V05EQ0xBU1NFWCB3Y2V4OwotICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOwot
ICAgIHdjZXguc3R5bGUgPSAwOwotICAgIHdjZXgubHBmblduZFByb2MgPSB3bmRQcm9jOwotICAg
IHdjZXguY2JDbHNFeHRyYSA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJhID0gMDsKLSAgICB3Y2V4
LmhJbnN0YW5jZSA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCk7Ci0gICAgd2NleC5oSWNvbiA9
IDA7Ci0gICAgd2NleC5oQ3Vyc29yID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAgIHdj
ZXguaGJyQmFja2dyb3VuZCA9IDA7Ci0gICAgd2NleC5scHN6TWVudU5hbWUgPSAwOwotICAgIHdj
ZXgubHBzekNsYXNzTmFtZSA9IFdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lOwotICAgIHdjZXgu
aEljb25TbSA9IDA7Ci0gICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKLX0KLQot
c3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS1BhZ2VSZWYgcGFn
ZVJlZiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYsIFdLRnJhbWVQ
b2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQotewotICAgIC8vIEFsbG93IG5vbi1tYWluIGZyYW1lcyB0byBuYXZpZ2F0ZSBhbnl3
aGVyZS4KLSAgICBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUgPSB0b0ltcGwobmF2aWdhdGlv
bkFjdGlvblJlZiktPnNvdXJjZUZyYW1lKCk7Ci0gICAgaWYgKHNvdXJjZUZyYW1lICYmICFzb3Vy
Y2VGcmFtZS0+aXNNYWluRnJhbWUoKSkgewotICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51
c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkluc3BlY3Rv
clByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkluc3BlY3Rv
clByb3h5Kj4oY2xpZW50SW5mbyk7Ci0gICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKLQot
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gdG9JbXBsKG5hdmlnYXRpb25B
Y3Rpb25SZWYpLT5yZXF1ZXN0KCk7Ci0KLSAgICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBtYWlu
IGluc3BlY3RvciBmaWxlLgotICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0
SW5zcGVjdG9yUGFnZShyZXF1ZXN0LnVybCgpKSkgewotICAgICAgICB0b0ltcGwobGlzdGVuZXJS
ZWYpLT51c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFByZXZlbnQg
ZXZlcnl0aGluZyBlbHNlIGZyb20gbG9hZGluZyBpbiB0aGUgaW5zcGVjdG9yJ3MgcGFnZS4KLSAg
ICB0b0ltcGwobGlzdGVuZXJSZWYpLT5pZ25vcmUoKTsKLQotICAgIC8vIEFuZCBpbnN0ZWFkIGxv
YWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgotICAgIHdlYkluc3BlY3RvclByb3h5LT5pbnNw
ZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOwotfQotCi1zdGF0aWMg
dm9pZCB3ZWJQcm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQotewotICAgIFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19j
YXN0PFdlYkluc3BlY3RvclByb3h5Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwot
ICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Ci0gICAgd2ViSW5zcGVjdG9yUHJveHktPmNs
b3NlRm9yQ3Jhc2goKTsKLX0KLQotV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkp
OwotCi0gICAgYXV0byBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5n
KCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOwotI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkK
LSAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJbnNwZWN0b3IgaW4g
ZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcgc2V0dGluZ3MuCi0gICAgcHJlZmVyZW5jZXMt
PnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldExv
Z3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwotI2VuZGlmCi0gICAg
cHJlZmVyZW5jZXMtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyh0cnVlKTsKLSAgICBw
cmVmZXJlbmNlcy0+c2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyh7IH0pOwotICAgIGF1dG8gcGFn
ZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoV2ViS2l0OjpkZWZhdWx0SW5zcGVjdG9yUGFn
ZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoaW5zcGVjdGVkUGFnZSgpKSk7Ci0gICAgYXV0byBwYWdl
Q29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotICAgIHBh
Z2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmV2ViS2l0OjpkZWZhdWx0SW5zcGVjdG9y
UHJvY2Vzc1Bvb2woaW5zcGVjdGlvbkxldmVsKCkpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+
c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMucHRyKCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigpKTsKLQotICAgIFdLUGFnZU5hdmlnYXRpb25D
bGllbnRWMCBuYXZpZ2F0aW9uQ2xpZW50ID0gewotICAgICAgICB7IDAsIHRoaXMgfSwKLSAgICAg
ICAgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwKLSAgICAgICAgbnVsbHB0ciwgLy8g
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlCi0gICAgICAgIG51bGxwdHIsIC8vIGRl
Y2lkZVBvbGljeUZvclBsdWdpbkxvYWQKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92
aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZh
aWxQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2
aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCi0gICAgICAg
IG51bGxwdHIsIC8vIGRpZEZhaWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZh
aWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlz
aERvY3VtZW50TG9hZAotICAgICAgICBudWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0
aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCi0gICAg
ICAgIG51bGxwdHIsIC8vIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKLSAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi0gICAg
ICAgIHdlYlByb2Nlc3NEaWRDcmFzaCwKLSAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0
b01hc3RlcktleQotCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1
cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAg
IG51bGxwdHIsIC8vIGRpZEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8v
IGRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKLSAgICB9OwotCi0gICAgUkVDVCBy
ID0geyAwLCAwLCBzdGF0aWNfY2FzdDxMT05HPihpbml0aWFsV2luZG93V2lkdGgpLCBzdGF0aWNf
Y2FzdDxMT05HPihpbml0aWFsV2luZG93SGVpZ2h0KSB9OwotICAgIGF1dG8gcGFnZSA9IGluc3Bl
Y3RlZFBhZ2UoKTsKLSAgICBtX2luc3BlY3RlZFZpZXdXaW5kb3cgPSBwYWdlLT52aWV3V2lkZ2V0
KCk7Ci0gICAgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93ID0gOjpHZXRQYXJlbnQobV9pbnNw
ZWN0ZWRWaWV3V2luZG93KTsKLSAgICBhdXRvIHZpZXcgPSBXZWJWaWV3OjpjcmVhdGUociwgcGFn
ZUNvbmZpZ3VyYXRpb24sIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgbV9pbnNw
ZWN0b3JWaWV3ID0gJnZpZXcubGVha1JlZigpOwotICAgIGF1dG8gaW5zcGVjdG9yUGFnZSA9IG1f
aW5zcGVjdG9yVmlldy0+cGFnZSgpOwotICAgIG1faW5zcGVjdG9yVmlld1dpbmRvdyA9IGluc3Bl
Y3RvclBhZ2UtPnZpZXdXaWRnZXQoKTsKLSAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVu
dCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJm5hdmlnYXRpb25DbGllbnQuYmFzZSk7Ci0KLSAgICBy
ZXR1cm4gaW5zcGVjdG9yUGFnZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgV2ViQ29yZTo6V2luZG93TWVz
c2FnZUJyb2FkY2FzdGVyOjpyZW1vdmVMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRo
aXMpOwotICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JQYWdl
ID0gbnVsbHB0cjsKLSAgICBpZiAobV9pbnNwZWN0b3JWaWV3V2luZG93KSB7Ci0gICAgICAgIDo6
RGVzdHJveVdpbmRvdyhtX2luc3BlY3RvclZpZXdXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3Rv
clZpZXdXaW5kb3cgPSBudWxscHRyOwotICAgIH0KLSAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hX
aW5kb3cpIHsKLSAgICAgICAgOjpSZW1vdmVQcm9wKG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBX
ZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wKTsKLSAgICAgICAgOjpEZXN0cm95V2luZG93KG1f
aW5zcGVjdG9yRGV0YWNoV2luZG93KTsKLSAgICAgICAgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cg
PSBudWxscHRyOwotICAgIH0KLSAgICBtX2luc3BlY3RlZFZpZXdXaW5kb3cgPSBudWxscHRyOwot
ICAgIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyA9IG51bGxwdHI7Ci19Ci0KLVN0cmluZyBX
ZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17Ci0jaWYgVVNFKENGKQotICAg
IFJldGFpblB0cjxDRlVSTFJlZj4gaHRtbFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVz
b3VyY2VVUkwoV2ViQ29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RSKCJNYWluIiksIENGU1RSKCJo
dG1sIiksIENGU1RSKCJXZWJJbnNwZWN0b3JVSSIpKSk7Ci0gICAgcmV0dXJuIENGVVJMR2V0U3Ry
aW5nKGh0bWxVUkxSZWYuZ2V0KCkpOwotI2Vsc2UKLSAgICByZXR1cm4geyB9OwotI2VuZGlmCi19
Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQotewot
I2lmIFVTRShDRikKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENG
KENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigi
VGVzdCIpLCBDRlNUUigiaHRtbCIpLCBDRlNUUigiV2ViSW5zcGVjdG9yVUkiKSkpOwotICAgIHJl
dHVybiBDRlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJu
IHsgfTsKLSNlbmRpZgotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6
OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtp
dC5vcmcvYi8yMDU1Mzc+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhLgotICAg
IHJldHVybiBEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCk7Ci19Ci0KLXVuc2lnbmVkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCi17Ci0gICAgUkVD
VCByZWN0OwotICAgIDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RlZFZpZXdXaW5kb3csICZyZWN0
KTsKLSAgICByZXR1cm4gcmVjdC5ib3R0b20gLSByZWN0LnRvcDsKLX0KLQotdW5zaWduZWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQotewotICAgIFJF
Q1QgcmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVj
dCk7Ci0gICAgcmV0dXJuIHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgZGVmYXVsdEF0dGFjaGVkU2l6ZSA9IDMwMDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWluaW11bUF0dGFjaGVkV2lkdGggPSA3NTA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1p
bmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKLQotICAgIGlmIChtX2luc3BlY3RvckRldGFjaFdp
bmRvdyAmJiA6OkdldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5kb3cpID09IG1faW5zcGVjdG9y
RGV0YWNoV2luZG93KSB7Ci0gICAgICAgIDo6U2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRv
dywgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKLSAgICAgICAgOjpTaG93V2luZG93KG1f
aW5zcGVjdG9yRGV0YWNoV2luZG93LCBTV19ISURFKTsKLSAgICB9Ci0KLSAgICBXZWJDb3JlOjpX
aW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6OmFkZExpc3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRv
dywgdGhpcyk7Ci0KLSAgICBpZiAobV9hdHRhY2htZW50U2lkZSA9PSBBdHRhY2htZW50U2lkZTo6
Qm90dG9tKSB7Ci0gICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IHBsYXRm
b3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkgKiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1TZXRB
dHRhY2hlZFdpbmRvd0hlaWdodChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIHN0ZDo6
bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZEhlaWdodCkpKTsKLSAgICB9
IGVsc2UgewotICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRXaWR0aCA9IHBsYXRmb3Jt
SW5zcGVjdGVkV2luZG93V2lkdGgoKSAqIDMgLyA0OwotICAgICAgICBwbGF0Zm9ybVNldEF0dGFj
aGVkV2luZG93V2lkdGgoc3RkOjptYXgobWluaW11bUF0dGFjaGVkV2lkdGgsIHN0ZDo6bWluKGRl
ZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZFdpZHRoKSkpOwotICAgIH0KLSAgICA6
OlNob3dXaW5kb3cobV9pbnNwZWN0b3JWaWV3V2luZG93LCBTV19TSE9XKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIGlmICghaW5zcGVjdGVk
UGFnZSgpLT5oYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IW1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7Ci0gICAgICAgIHJlZ2lzdGVyV2luZG93Q2xhc3Mo
KTsKLSAgICAgICAgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAs
IFdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAotICAg
ICAgICAgICAgQ1dfVVNFREVGQVVMVCwgQ1dfVVNFREVGQVVMVCwgaW5pdGlhbFdpbmRvd1dpZHRo
LCBpbml0aWFsV2luZG93SGVpZ2h0LAotICAgICAgICAgICAgMCwgMCwgV2ViQ29yZTo6aW5zdGFu
Y2VIYW5kbGUoKSwgMCk7Ci0gICAgICAgIDo6U2V0UHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRv
dywgV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+
KHRoaXMpKTsKLSAgICB9Ci0KLSAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6
OnJlbW92ZUxpc3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7Ci0KLSAgICBSRUNU
IHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCAmcmVj
dCk7Ci0gICAgYXV0byB3aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3Bl
Y3RlZFZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgOjpTZXRQ
YXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93LCBtX2luc3BlY3RvckRldGFjaFdpbmRvdyk7Ci0g
ICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCByZWN0LnJp
Z2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOwot
ICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5s
ZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8u
bGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9S
REVSKTsKLQotICAgIGlmIChtX2lzVmlzaWJsZSkKLSAgICAgICAgOjpTaG93V2luZG93KG1faW5z
cGVjdG9yRGV0YWNoV2luZG93LCBTV19TSE9XKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0g
ICAgYXV0byB3aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZp
ZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgOjpTZXRXaW5kb3dQ
b3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8u
cGFyZW50SGVpZ2h0IC0gaGVpZ2h0LCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5m
by5sZWZ0LCBoZWlnaHQsIFNXUF9OT1pPUkRFUik7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNw
ZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5k
b3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhl
aWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgp
Ci17Ci0gICAgYXV0byB3aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3Bl
Y3RlZFZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgOjpTZXRX
aW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRo
IC0gd2lkdGgsIHdpbmRvd0luZm8udG9wLCB3aWR0aCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQg
LSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX2lu
c3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdp
bmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50
SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1Jc0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVJlc2V0U3RhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVj
dGVkUGFnZVRvRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgU3RyaW5nJiAvKiB1cmwgKi8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3Qg
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIC8qIGF2YWls
YWJsZSAqLykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKLXsKLSAgICBwbGF0Zm9ybURl
dGFjaCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9y
Q3Jhc2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yVUlQcm94eVdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclVJUHJveHlXaW4u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdkMDJiOTczZTA1MmE1OTk3Y2EyYmUzMzYzYWZiZTdmNjZlYTUzNTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2lu
L1dlYkluc3BlY3RvclVJUHJveHlXaW4uY3BwCkBAIC0wLDAgKzEsNDU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eS5o
IgorCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25B
Y3Rpb24uaCIKKyNpbmNsdWRlICJBUElQYWdlQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIlBh
Z2VDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgor
I2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlQnVuZGxlV2lu
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oPgorI2luY2x1ZGUgPFdlYktpdC9X
S1BhZ2UuaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDx3dGYvY2YvQ0ZVUkxFeHRyYXMuaD4K
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IExQQ1dTVFIgV2Vi
SW5zcGVjdG9yVUlQcm94eVBvaW50ZXJQcm9wID0gTCJXZWJJbnNwZWN0b3JVSVByb3h5UG9pbnRl
ciI7CitzdGF0aWMgY29uc3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JVSVByb3h5Q2xhc3NOYW1lID0g
TCJXZWJJbnNwZWN0b3JVSVByb3h5Q2xhc3MiOworCitzdHJ1Y3QgSW5zcGVjdGVkV2luZG93SW5m
byB7CisgICAgaW50IGxlZnQ7CisgICAgaW50IHRvcDsKKyAgICBpbnQgdmlld1dpZHRoOworICAg
IGludCB2aWV3SGVpZ2h0OworICAgIGludCBwYXJlbnRXaWR0aDsKKyAgICBpbnQgcGFyZW50SGVp
Z2h0OworfTsKKworc3RhdGljIEluc3BlY3RlZFdpbmRvd0luZm8gZ2V0SW5zcGVjdGVkV2luZG93
SW5mbyhIV05EIGluc3BlY3RlZFdpbmRvdywgSFdORCBwYXJlbnRXaW5kb3cpCit7CisgICAgUkVD
VCByZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChpbnNwZWN0ZWRXaW5kb3csICZyZWN0KTsKKyAg
ICA6Ok1hcFdpbmRvd1BvaW50cyhpbnNwZWN0ZWRXaW5kb3csIHBhcmVudFdpbmRvdywgKExQUE9J
TlQpJnJlY3QsIDIpOworCisgICAgUkVDVCBwYXJlbnRSZWN0OworICAgIDo6R2V0Q2xpZW50UmVj
dChwYXJlbnRXaW5kb3csICZwYXJlbnRSZWN0KTsKKyAgICByZXR1cm4geyByZWN0LmxlZnQsIHJl
Y3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBw
YXJlbnRSZWN0LnJpZ2h0IC0gcGFyZW50UmVjdC5sZWZ0LCBwYXJlbnRSZWN0LmJvdHRvbSAtIHBh
cmVudFJlY3QudG9wIH07Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6d2luZG93UmVj
ZWl2ZWRNZXNzYWdlKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkK
K3sKKyAgICBzd2l0Y2ggKG1zZykgeworICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6IHsK
KyAgICAgICAgaWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgYXV0byB3aW5kb3dQb3MgPSByZWludGVycHJldF9jYXN0PFdJTkRPV1BPUyo+KGxQYXJhbSk7
CisKKyAgICAgICAgaWYgKHdpbmRvd1Bvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpFKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIEhXTkQgcGFyZW50ID0gR2V0UGFyZW50KGh3bmQpOworICAg
ICAgICBSRUNUIHBhcmVudFJlY3Q7CisgICAgICAgIEdldENsaWVudFJlY3QocGFyZW50LCAmcGFy
ZW50UmVjdCk7CisKKyAgICAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OworICAgICAgICBHZXRDbGll
bnRSZWN0KG1faW5zcGVjdG9yVmlld1dpbmRvdywgJmluc3BlY3RvclJlY3QpOworCisgICAgICAg
IHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgeworICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRl
OjpCb3R0b206IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3RvckhlaWdodCA9IFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5k
b3dIZWlnaHQoaW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRvcCwgd2luZG93
UG9zLT5jeSk7CisgICAgICAgICAgICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3RvckhlaWdodDsK
KyAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2lu
ZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5kb3dQb3MtPmN4LCBp
bnNwZWN0b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgorICAgICAgICBjYXNlIEF0
dGFjaG1lbnRTaWRlOjpSaWdodDogeworICAgICAgICAgICAgdW5zaWduZWQgaW5zcGVjdG9yV2lk
dGggPSBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0
dGFjaGVkV2luZG93V2lkdGgoaW5zcGVjdG9yUmVjdC5yaWdodCAtIGluc3BlY3RvclJlY3QubGVm
dCwgd2luZG93UG9zLT5jeCk7CisgICAgICAgICAgICB3aW5kb3dQb3MtPmN4IC09IGluc3BlY3Rv
cldpZHRoOworICAgICAgICAgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93
LCAwLCB3aW5kb3dQb3MtPnggKyB3aW5kb3dQb3MtPmN4LCB3aW5kb3dQb3MtPnksIGluc3BlY3Rv
cldpZHRoLCB3aW5kb3dQb3MtPmN5LCBTV1BfTk9aT1JERVIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK0xSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yVUlQcm94eTo6d25kUHJv
YyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorewor
ICAgIFdlYkluc3BlY3RvclVJUHJveHkqIGluc3BlY3RvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
SW5zcGVjdG9yVUlQcm94eSo+KDo6R2V0UHJvcChod25kLCBXZWJJbnNwZWN0b3JVSVByb3h5UG9p
bnRlclByb3ApKTsKKyAgICBzd2l0Y2ggKG1zZykgeworICAgIGNhc2UgV01fU0laRToKKyAgICAg
ICAgOjpTZXRXaW5kb3dQb3MoaW5zcGVjdG9yLT5tX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIDAs
IDAsIExPV09SRChsUGFyYW0pLCBISVdPUkQobFBhcmFtKSwgU1dQX05PWk9SREVSKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgY2FzZSBXTV9DTE9TRToKKyAgICAgICAgaW5zcGVjdG9yLT5jbG9z
ZSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFt
KTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JVSVByb3h5OjpyZWdpc3RlcldpbmRvd0NsYXNzKCkK
K3sKKyAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CisK
KyAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7CisKKyAgICBXTkRDTEFTU0VY
IHdjZXg7CisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CisgICAgd2NleC5z
dHlsZSA9IDA7CisgICAgd2NleC5scGZuV25kUHJvYyA9IHduZFByb2M7CisgICAgd2NleC5jYkNs
c0V4dHJhID0gMDsKKyAgICB3Y2V4LmNiV25kRXh0cmEgPSAwOworICAgIHdjZXguaEluc3RhbmNl
ID0gV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKTsKKyAgICB3Y2V4LmhJY29uID0gMDsKKyAgICB3
Y2V4LmhDdXJzb3IgPSBMb2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNr
Z3JvdW5kID0gMDsKKyAgICB3Y2V4Lmxwc3pNZW51TmFtZSA9IDA7CisgICAgd2NleC5scHN6Q2xh
c3NOYW1lID0gV2ViSW5zcGVjdG9yVUlQcm94eUNsYXNzTmFtZTsKKyAgICB3Y2V4LmhJY29uU20g
PSAwOworICAgIHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Cit9CisKK3N0YXRpYyB2
b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdL
TmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlz
dGVuZXJSZWYgbGlzdGVuZXJSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
K3sKKyAgICAvLyBBbGxvdyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCisg
ICAgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZyYW1lID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25S
ZWYpLT5zb3VyY2VGcmFtZSgpOworICAgIGlmIChzb3VyY2VGcmFtZSAmJiAhc291cmNlRnJhbWUt
PmlzTWFpbkZyYW1lKCkpIHsKKyAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBXZWJJbnNwZWN0b3JVSVByb3h5
KiBpbnNwZWN0b3IgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJbnNwZWN0b3JVSVByb3h5Kj4oY2xp
ZW50SW5mbyk7CisgICAgQVNTRVJUKGluc3BlY3Rvcik7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVzdCgp
OworCisgICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KKyAg
ICBpZiAoV2ViSW5zcGVjdG9yVUlQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShyZXF1
ZXN0LnVybCgpKSkgeworICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFByZXZlbnQgZXZlcnl0aGluZyBlbHNlIGZy
b20gbG9hZGluZyBpbiB0aGUgaW5zcGVjdG9yJ3MgcGFnZS4KKyAgICB0b0ltcGwobGlzdGVuZXJS
ZWYpLT5pZ25vcmUoKTsKKworICAgIC8vIEFuZCBpbnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3Bl
Y3RlZCBwYWdlLgorICAgIGluc3BlY3Rvci0+aW5zcGVjdGVkUGFnZSgpLT5sb2FkUmVxdWVzdChX
VEZNb3ZlKHJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0RpZENyYXNoKFdL
UGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXZWJJbnNwZWN0b3JVSVBy
b3h5KiBpbnNwZWN0b3IgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JVSVByb3h5Kj4oY29uc3Rf
Y2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgIEFTU0VSVChpbnNwZWN0b3IpOworICAgIGlu
c3BlY3Rvci0+Y2xvc2VGb3JDcmFzaCgpOworfQorCitXZWJQYWdlUHJveHkqIFdlYkluc3BlY3Rv
clVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBBU1NFUlQoaW5z
cGVjdGVkUGFnZSgpKTsKKworICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6
Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyNpZiBFTkFCTEUoREVW
RUxPUEVSX01PREUpCisgICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIg
SW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgorICAg
IHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZl
cmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsK
KyNlbmRpZgorICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMo
dHJ1ZSk7CisgICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRSdW50aW1lRmxhZ3MoeyB9KTsK
KyAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKFdlYktpdDo6ZGVmYXVs
dEluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOwor
ICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVh
dGUoKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJldlYktpdDo6ZGVm
YXVsdEluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZlbCgpKSk7CisgICAgcGFnZUNv
bmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsKKyAgICBwYWdl
Q29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7CisKKyAgICBXS1Bh
Z2VOYXZpZ2F0aW9uQ2xpZW50VjAgbmF2aWdhdGlvbkNsaWVudCA9IHsKKyAgICAgICAgeyAwLCB0
aGlzIH0sCisgICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24sCisgICAgICAg
IG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZQorICAgICAgICBu
dWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkCisgICAgICAgIG51bGxwdHIsIC8v
IGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAgICBudWxs
cHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8v
IGRpZENvbW1pdE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoTmF2aWdh
dGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsTmF2aWdhdGlvbgorICAgICAgICBudWxs
cHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZQorICAgICAgICBudWxscHRy
LCAvLyBkaWRGaW5pc2hEb2N1bWVudExvYWQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkU2FtZURv
Y3VtZW50TmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyByZW5kZXJpbmdQcm9ncmVzc0Rp
ZENoYW5nZQorICAgICAgICBudWxscHRyLCAvLyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZQorICAgICAgICB3ZWJQcm9jZXNzRGlkQ3Jhc2gsCisgICAgICAgIG51bGxwdHIsIC8v
IGNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkKKworICAgICAgICBudWxscHRyLCAvLyBkaWRCZWdpbk5h
dmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxFbmROYXZpZ2F0aW9uR2Vz
dHVyZQorICAgICAgICBudWxscHRyLCAvLyBkaWRFbmROYXZpZ2F0aW9uR2VzdHVyZQorICAgICAg
ICBudWxscHRyLCAvLyBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90CisgICAgfTsK
KworICAgIFJFQ1QgciA9IHsgMCwgMCwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd1dp
ZHRoKSwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd0hlaWdodCkgfTsKKyAgICBhdXRv
IHBhZ2UgPSBpbnNwZWN0ZWRQYWdlKCk7CisgICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gcGFn
ZS0+dmlld1dpZGdldCgpOworICAgIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyA9IDo6R2V0
UGFyZW50KG1faW5zcGVjdGVkVmlld1dpbmRvdyk7CisgICAgYXV0byB2aWV3ID0gV2ViVmlldzo6
Y3JlYXRlKHIsIHBhZ2VDb25maWd1cmF0aW9uLCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cp
OworICAgIG1faW5zcGVjdG9yVmlldyA9ICZ2aWV3LmxlYWtSZWYoKTsKKyAgICBhdXRvIGluc3Bl
Y3RvclBhZ2UgPSBtX2luc3BlY3RvclZpZXctPnBhZ2UoKTsKKyAgICBtX2luc3BlY3RvclZpZXdX
aW5kb3cgPSBpbnNwZWN0b3JQYWdlLT52aWV3V2lkZ2V0KCk7CisgICAgV0tQYWdlU2V0UGFnZU5h
dmlnYXRpb25DbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJh
c2UpOworCisgICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUlQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgV2Vi
Q29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjpyZW1vdmVMaXN0ZW5lcihtX2luc3BlY3Rl
ZFZpZXdXaW5kb3csIHRoaXMpOworICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7CisgICAg
bV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsKKyAgICBpZiAobV9pbnNwZWN0b3JWaWV3V2luZG93
KSB7CisgICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2luc3BlY3RvclZpZXdXaW5kb3cpOworICAg
ICAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9p
bnNwZWN0b3JEZXRhY2hXaW5kb3cpIHsKKyAgICAgICAgOjpSZW1vdmVQcm9wKG1faW5zcGVjdG9y
RGV0YWNoV2luZG93LCBXZWJJbnNwZWN0b3JVSVByb3h5UG9pbnRlclByb3ApOworICAgICAgICA6
OkRlc3Ryb3lXaW5kb3cobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpOworICAgICAgICBtX2luc3Bl
Y3RvckRldGFjaFdpbmRvdyA9IG51bGxwdHI7CisgICAgfQorICAgIG1faW5zcGVjdGVkVmlld1dp
bmRvdyA9IG51bGxwdHI7CisgICAgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93ID0gbnVsbHB0
cjsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQor
eworI2lmIFVTRShDRikKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9w
dENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNU
UigiTWFpbiIpLCBDRlNUUigiaHRtbCIpLCBDRlNUUigiV2ViSW5zcGVjdG9yVUkiKSkpOworICAg
IHJldHVybiBDRlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgpKTsKKyNlbHNlCisgICAgcmV0
dXJuIHsgfTsKKyNlbmRpZgorfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5zcGVj
dG9yVGVzdFBhZ2VVUkwoKQoreworI2lmIFVTRShDRikKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+
IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6Ondl
YktpdEJ1bmRsZSgpLCBDRlNUUigiVGVzdCIpLCBDRlNUUigiaHRtbCIpLCBDRlNUUigiV2ViSW5z
cGVjdG9yVUkiKSkpOworICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgp
KTsKKyNlbHNlCisgICAgcmV0dXJuIHsgfTsKKyNlbmRpZgorfQorCitEZWJ1Z2dhYmxlSW5mb0Rh
dGEgV2ViSW5zcGVjdG9yVUlQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCit7CisgICAg
Ly8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNz46IHRoaXMgc2hvdWxkIGluZmVy
IG1vcmUgdXNlZnVsIGRhdGEuCisgICAgcmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHko
KTsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRX
aW5kb3dIZWlnaHQoKQoreworICAgIFJFQ1QgcmVjdDsKKyAgICA6OkdldENsaWVudFJlY3QobV9p
bnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7CisgICAgcmV0dXJuIHJlY3QuYm90dG9tIC0gcmVj
dC50b3A7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW5zcGVj
dGVkV2luZG93V2lkdGgoKQoreworICAgIFJFQ1QgcmVjdDsKKyAgICA6OkdldENsaWVudFJlY3Qo
bV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7CisgICAgcmV0dXJuIHJlY3QucmlnaHQgLSBy
ZWN0LmxlZnQ7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BdHRhY2go
KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRTaXplID0gMzAw
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDc1MDsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwOwor
CisgICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2luZG93ICYmIDo6R2V0UGFyZW50KG1faW5zcGVj
dG9yVmlld1dpbmRvdykgPT0gbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpIHsKKyAgICAgICAgOjpT
ZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5k
b3cpOworICAgICAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFNXX0hJ
REUpOworICAgIH0KKworICAgIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6YWRk
TGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKKworICAgIGlmIChtX2F0dGFj
aG1lbnRTaWRlID09IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pIHsKKyAgICAgICAgdW5zaWduZWQg
bWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKSAq
IDMgLyA0OworICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHN0ZDo6bWF4
KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4
aW11bUF0dGFjaGVkSGVpZ2h0KSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIG1h
eGltdW1BdHRhY2hlZFdpZHRoID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpICogMyAv
IDQ7CisgICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aChzdGQ6Om1heChtaW5p
bXVtQXR0YWNoZWRXaWR0aCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0
dGFjaGVkV2lkdGgpKSk7CisgICAgfQorICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvclZpZXdX
aW5kb3csIFNXX1NIT1cpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3Jt
RGV0YWNoKCkKK3sKKyAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nlc3Mo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2luc3BlY3RvckRldGFjaFdpbmRvdykg
eworICAgICAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7CisgICAgICAgIG1faW5zcGVjdG9yRGV0
YWNoV2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBXZWJJbnNwZWN0b3JVSVByb3h5Q2xhc3NO
YW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAorICAgICAgICAgICAgQ1dfVVNFREVGQVVMVCwg
Q1dfVVNFREVGQVVMVCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0LAor
ICAgICAgICAgICAgMCwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7CisgICAgICAg
IDo6U2V0UHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgV2ViSW5zcGVjdG9yVUlQcm94eVBv
aW50ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOworICAgIH0KKworICAg
IFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNw
ZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKKworICAgIFJFQ1QgcmVjdDsKKyAgICA6OkdldENsaWVu
dFJlY3QobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csICZyZWN0KTsKKyAgICBhdXRvIHdpbmRvd0lu
Zm8gPSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dpbmRvdywgbV9pbnNw
ZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKKyAgICA6OlNldFBhcmVudChtX2luc3BlY3RvclZpZXdX
aW5kb3csIG1faW5zcGVjdG9yRGV0YWNoV2luZG93KTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2lu
c3BlY3RvclZpZXdXaW5kb3csIDAsIDAsIDAsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3Qu
Ym90dG9tIC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7CisgICAgOjpTZXRXaW5kb3dQb3MobV9p
bnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3
aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVu
dEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOworCisgICAgaWYgKG1faXNW
aXNpYmxlKQorICAgICAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFNX
X1NIT1cpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQoreworICAgIGF1dG8gd2luZG93SW5mbyA9
IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3Rl
ZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dp
bmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIGhlaWdo
dCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgaGVpZ2h0LCBTV1Bf
Tk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwg
d2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAt
IHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRv
cCwgU1dQX05PWk9SREVSKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9y
bVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCit7CisgICAgYXV0byB3aW5k
b3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1f
aW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0
b3JWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2lkdGgsIHdpbmRvd0lu
Zm8udG9wLCB3aWR0aCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwg
U1dQX05PWk9SREVSKTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3cs
IDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lk
dGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5m
by50b3AsIFNXUF9OT1pPUkRFUik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxh
dGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitib29sIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSXNG
cm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1IaWRlKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtUmVzZXRT
dGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
SVByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFn
ZVRvRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUlQcm94eTo6cGxhdGZvcm1TZXRGb3JjZWRBcHBlYXJhbmNlKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpBcHBlYXJhbmNlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYgLyogdXJsICovKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3Qg
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmLCBib29sLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIC8q
IGF2YWlsYWJsZSAqLykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQoreworICAgIHBs
YXRmb3JtRGV0YWNoKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUlQcm94eTo6cGxhdGZvcm1E
aWRDbG9zZUZvckNyYXNoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclVJUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSVByb3h5OjpwbGF0Zm9ybVN0YXJ0V2lu
ZG93RHJhZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMjZlYjE5N2EyYTVlZDI1ZGVhYjRhZDc1
ZDA5N2M4MDM1MGNhMmZjOS4uOTliMzQ2MDk4NzFkZGZhY2Q5NjdkYjk3NmE2NjRkMTYwMzhlMTdh
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xMTMsNyAr
MTEzLDcgQEAKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViSW1h
Z2UuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclVJUHJveHkuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViTmF2aWdhdGlvbkRhdGFTdG9y
ZS5oIgpAQCAtNTQ5LDcgKzU0OSw3IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KFBhZ2VD
bGllbnQmIHBhZ2VDbGllbnQsIFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgUmVmCiAgICAgbV9w
cmVmZXJlbmNlcy0+YWRkUGFnZSgqdGhpcyk7CiAgICAgbV9wYWdlR3JvdXAtPmFkZFBhZ2UoKnRo
aXMpOwogCi0gICAgbV9pbnNwZWN0b3IgPSBXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCp0aGlz
KTsKKyAgICBtX2luc3BlY3RvciA9IFdlYkluc3BlY3RvclVJUHJveHk6OmNyZWF0ZSgqdGhpcyk7
CiAKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgZGlkQXR0YWNoVG9SdW5u
aW5nUHJvY2VzcygpOwpAQCAtNjE5NCw3ICs2MTk0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRp
ZEVuZERhdGVUaW1lUGlja2VyKCkKIAogI2VuZGlmCiAKLVdlYkluc3BlY3RvclByb3h5KiBXZWJQ
YWdlUHJveHk6Omluc3BlY3RvcigpIGNvbnN0CitXZWJJbnNwZWN0b3JVSVByb3h5KiBXZWJQYWdl
UHJveHk6Omluc3BlY3RvcigpIGNvbnN0CiB7CiAgICAgaWYgKGlzQ2xvc2VkKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRl
eCBmZjAyNDY5YzEzZWFmNmQwNmI2M2U1ZjRhMTA1ZTlkZjM1OWRkOWEzLi5hMmNiZThhYTg2YmI3
ZWYyZTNmYjg1ZDU4NTg4Y2M1YzNjYjViNmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaApAQCAtNDkzLDcgKzQ5Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEVudGVy
RnVsbHNjcmVlbigpOwogICAgIHZvaWQgZGlkRXhpdEZ1bGxzY3JlZW4oKTsKIAotICAgIFdlYklu
c3BlY3RvclByb3h5KiBpbnNwZWN0b3IoKSBjb25zdDsKKyAgICBXZWJJbnNwZWN0b3JVSVByb3h5
KiBpbnNwZWN0b3IoKSBjb25zdDsKICAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlclByb3h5JiBnZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcigpIHsgcmV0dXJu
IG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7IH0KIAogICAgIHZvaWQgcmVz
b3VyY2VMb2FkRGlkU2VuZFJlcXVlc3QoUmVzb3VyY2VMb2FkSW5mbyYmLCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmJik7CkBAIC0yNDgzLDcgKzI0ODMsNyBAQCBwcml2YXRlOgogICAgIFN0cmlu
ZyBtX2N1c3RvbVRleHRFbmNvZGluZ05hbWU7CiAgICAgU3RyaW5nIG1fb3ZlcnJpZGVDb250ZW50
U2VjdXJpdHlQb2xpY3k7CiAKLSAgICBSZWZQdHI8V2ViSW5zcGVjdG9yUHJveHk+IG1faW5zcGVj
dG9yOworICAgIFJlZlB0cjxXZWJJbnNwZWN0b3JVSVByb3h5PiBtX2luc3BlY3RvcjsKIAogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV9jb2NvYVZpZXc7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA2ZTgzYzVmZGNhZWJlNjhkYTllZmIyZTlhMGRiOTA5OTU5YjIxMWE1Li42Yzc3ZDBkMTU1M2Vk
ODk4NjlkMmExMDlhOThmNzU1NTAwYmUwZTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQxOCwxMiArNDE4LDEyIEBACiAJCTFDMjE4
NDAyMjIzMzg3MjgwMEJBQzcwMCAvKiBOU0F0dHJpYnV0ZWRTdHJpbmdQcml2YXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzIxODQwMTIyMzM4NzI4
MDBCQUM3MDAgLyogTlNBdHRyaWJ1dGVkU3RyaW5nUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDODkxRDY2MTlCMTI0RkYwMEJBNzlE
RCAvKiBXZWJJbnNwZWN0b3JVSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUM4OTFENjMxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJLmgg
Ki87IH07CiAJCTFDOEUyODIwMTI3NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDOEUyODFFMTI3NUQx
NTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuaCAqLzsgfTsKLQkJMUM4RTI4MzQxMjc1RDczODAw
QkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQzhFMjgzMjEyNzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVj
dG9yUHJveHkuaCAqLzsgfTsKKwkJMUM4RTI4MzQxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3Bl
Y3RvclVJUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFDOEUyODMyMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JVSVByb3h5LmggKi87
IH07CiAJCTFDOEUyOTM5MTI3NjFFNUIwMEJDN0JEMCAvKiBXS0luc3BlY3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM4RTI5MzcxMjc2MUU1QjAw
QkM3QkQwIC8qIFdLSW5zcGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMUM4RTJBMzUxMjc3ODUyNDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rv
ck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzhFMkEzMTEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMUM4RTJBMzYxMjc3ODUyNDAwQkM3QkQwIC8qIFdlYklu
c3BlY3Rvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQzhFMkEzMjEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWVzc2FnZXMu
aCAqLzsgfTsKLQkJMUNBOEI5NDUxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFDQThCOTQzMTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCTFDQThCOTQ2MTI3Qzg4MkEwMDU3NkMyQiAvKiBX
ZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQ0E4Qjk0NDEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9y
UHJveHlNZXNzYWdlcy5oICovOyB9OworCQkxQ0E4Qjk0NTEyN0M4ODJBMDA1NzZDMkIgLyogV2Vi
SW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0E4Qjk0MzEyN0M4ODJBMDA1NzZDMkIgLyogV2Vi
SW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCTFDQThCOTQ2MTI3
Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQThCOTQ0MTI3Qzg4MkEwMDU3
NkMyQiAvKiBXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCAqLzsgfTsKIAkJMUNCQkU0QTAx
OUI2NkM1MzAwNkI3RDgxIC8qIFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQkJFNDlFMTlCNjZD
NTMwMDZCN0Q4MSAvKiBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJ
CTFDQkJFNEExMTlCNjZDNTMwMDZCN0Q4MSAvKiBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQ0JCRTQ5RjE5QjY2
QzUzMDA2QjdEODEgLyogV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oICovOyB9OwogCQkxRDRENzM3
MDIzQTlFNTQ3MDA3MTdBMjUgLyogUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUQ0RDczNkIyM0E5REY1NTAwNzE3QTI1IC8qIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVz
c2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAgLTE2MDMsOSArMTYwMyw5IEBACiAJCUE1NDNFMzBE
MjE1QzhBOTAwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0M0UzMEIyMTVD
OEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmggKi87IH07
CiAJCUE1NUJBODEwMUJBMTMxN0UwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTU1QkE4MEMxQkExMkJFMTAwN0NEMzNEIC8qIF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdD
b250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQTU1QkE4MTcxQkEyM0UxMjAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTVCQTgxMzFC
QTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCAqLzsgfTsKLQkJQTU1QkE4
MUYxQkEyNUIyNzAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTVCQTgxOTFCQTI1QjFFMDA3
Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCAqLzsgfTsKLQkJQTU1QkE4MjUxQkEy
NUNGQjAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NUJBODIyMUJBMjVCQjgw
MDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggKi87IH07Ci0JCUE1
NUJBODI2MUJBMjVDRkQwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNTVCQTgyMTFCQTI1QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQlBNTVCQTgxRjFCQTI1QjI3MDA3Q0QzM0QgLyogUmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHkuaCAqLzsgfTsKKwkJQTU1QkE4MjUxQkEyNUNGQjAwN0NEMzNEIC8qIFJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1QkE4MjIxQkEyNUJCODAwN0NEMzNEIC8qIFJlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oICovOyB9OworCQlBNTVCQTgyNjFCQTI1Q0ZEMDA3
Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTVCQTgyMTFCQTI1
QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgKi87IH07CiAJCUE1NUJBODJCMUJBMzhFNjEwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGls
aXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1
NUJBODI4MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCAqLzsgfTsK
IAkJQTU4NjBFNzEyMzBGNjdGQzAwNDYxQUFFIC8qIFdlYlJlc291cmNlSW50ZXJjZXB0Q29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU4
NjBFNzAyMzBGNjdERTAwNDYxQUFFIC8qIFdlYlJlc291cmNlSW50ZXJjZXB0Q29udHJvbGxlci5o
ICovOyB9OwogCQlBNThCNkYwODE4RkNBNzMzMDA4Q0JBNTMgLyogV0tGaWxlVXBsb2FkUGFuZWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1OEI2RjA2
MThGQ0E3MzMwMDhDQkE1MyAvKiBXS0ZpbGVVcGxvYWRQYW5lbC5oICovOyB9OwpAQCAtMjk1MCwx
NCArMjk1MCwxNCBAQAogCQkxQzIxODQwMTIyMzM4NzI4MDBCQUM3MDAgLyogTlNBdHRyaWJ1dGVk
U3RyaW5nUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOU0F0dHJp
YnV0ZWRTdHJpbmdQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNzM5
RTg1MjM0N0JDRjYwMEM2MjFFQyAvKiBDb3JlVGV4dEhlbHBlcnMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBDb3JlVGV4dEhlbHBlcnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDNzM5RTg3MjM0N0JEMEYwMEM2MjFFQyAvKiBDb3JlVGV4dEhlbHBlcnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29yZVRleHRIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFD
NzdDMTk1MTI4OEE4NzIwMDZBNzQyRiAvKiBXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM3N0MxOTUxMjg4QTg3MjAwNkE3NDJGIC8qIFdl
Ykluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2Vi
SW5zcGVjdG9yVUlQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUM4OTFENjIxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkluc3BlY3RvclVJLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4OTFENjMxOUIxMjRGRjAwQkE3OUREIC8qIFdlYklu
c3BlY3RvclVJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkluc3BlY3Rv
clVJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODkxRDY0MTlCMTI0RkYwMEJB
NzlERCAvKiBXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUM4RTI4MUUxMjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUM4RTI4MUYxMjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJbnNwZWN0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQzhFMjgzMjEyNzVENzM4MDBCQzdCRDAgLyog
V2ViSW5zcGVjdG9yUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
SW5zcGVjdG9yUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUM4RTI4MzMx
Mjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkluc3BlY3RvclByb3h5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUM4RTI4MzIxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3Rv
clVJUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSW5zcGVjdG9y
VUlQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzhFMjgzMzEyNzVENzM4
MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yVUlQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJJbnNwZWN0b3JVSVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUM4RTI5MzcxMjc2MUU1QjAwQkM3QkQwIC8qIFdLSW5zcGVjdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLSW5zcGVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOEUyOTM4MTI3NjFFNUIwMEJDN0JEMCAvKiBXS0luc3Bl
Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0luc3BlY3Rv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOEUyQTFDMTI3NzgzM0YwMEJD
N0JEMCAvKiBXZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
V2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
Mjk2NSw5ICsyOTY1LDkgQEAKIAkJMUM4RTJBMzIxMjc3ODUyNDAwQkM3QkQwIC8qIFdlYkluc3Bl
Y3Rvck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkluc3Bl
Y3Rvck1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3Rv
ck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFDOEUy
REFEMTI3OEM1QjIwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JVSU1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkluc3BlY3RvclVJTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQzlFQkE1QjIwODdFNzRFMDAwNTQ0MjkgLyogTmF0aXZl
V2ViTW91c2VFdmVudElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IE5hdGl2ZVdlYk1vdXNlRXZlbnRJT1MubW07IHBhdGggPSBpb3MvTmF0aXZlV2ViTW91c2VF
dmVudElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUNBOEI5MzUxMjdDNzc0
RTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViSW5zcGVjdG9yUHJveHlNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFDQThCOTQzMTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0
b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJp
dmVkU291cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMUNBOEI5NDQxMjdDODgyQTAw
NTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTFDQThCOTM1MTI3Qzc3NEUwMDU3NkMyQiAvKiBX
ZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViSW5zcGVjdG9yVUlQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUNBOEI5NDMxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclVJUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
V2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291
cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkxQ0E4Qjk0NDEyN0M4ODJBMDA1NzZD
MkIgLyogV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9XZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUNCQkU0OUUxOUI2NkM1MzAwNkI3RDgxIC8q
IFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9
IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViSW5zcGVjdG9yVUlNZXNzYWdlUmVjZWl2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQ0JCRTQ5RjE5QjY2QzUz
MDA2QjdEODEgLyogV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291
cmNlcy9XZWJLaXQyL1dlYkluc3BlY3RvclVJTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKIAkJMUQwNTMwQzkyNThFQUI0NDAwRTQzNkY3IC8qIGNvbWJpbmUt
ZmVhdHVyZS1mbGFncy1wbGlzdC5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9ICJjb21iaW5lLWZlYXR1
cmUtZmxhZ3MtcGxpc3QucHkiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTA0NCwx
MSArNTA0NCwxMSBAQAogCQlBNTVCQTgxMjFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5z
cGVjdG9yVUkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3Rl
V2ViSW5zcGVjdG9yVUkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTVCQTgx
MzFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlV2ViSW5zcGVjdG9yVUkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTU1QkE4MTQxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYklu
c3BlY3RvclVJLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVdlYklu
c3BlY3RvclVJLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNTVC
QTgxOTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU1QkE4MUExQkEyNUIxRTAwN0NEMzNEIC8qIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBNTVCQTgxQjFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNTVCQTgy
MTFCQTI1QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCUE1NUJBODIyMUJBMjVCQjgwMDdDRDMzRCAv
KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlBNTVCQTgxOTFCQTI1QjFFMDA3
Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUE1NUJBODFBMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVdl
Ykluc3BlY3RvclVJUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUE1NUJBODFCMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTVCQTgyMTFC
QTI1QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZW1vdGVXZWJJbnNw
ZWN0b3JVSVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCUE1NUJBODIyMUJBMjVCQjgwMDdDRDMz
RCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmg7IHBh
dGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNz
YWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBNTVCQTgyNzFC
QTM4RTFFMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkluc3BlY3RvclV0aWxpdGllcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NUJBODI4MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJ
bnNwZWN0b3JVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
SW5zcGVjdG9yVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1ODYw
RTZGMjMwRjY3REUwMDQ2MUFBRSAvKiBXZWJSZXNvdXJjZUludGVyY2VwdENvbnRyb2xsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUmVzb3VyY2VJbnRlcmNlcHRDb250cm9sbGVyLmNwcDsg
cGF0aCA9IE5ldHdvcmsvV2ViUmVzb3VyY2VJbnRlcmNlcHRDb250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwNTksNyArNTA1OSw3IEBACiAJCUE1QzBGMEE2MjAw
MDY1NDQwMDUzNjUzNiAvKiBfV0tOU1dpbmRvd0V4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBfV0tOU1dpbmRvd0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNUMwRjBBOTIwMDA2NTZFMDA1MzY1MzYgLyogX1dLSW5zcGVjdG9yV2luZG93Lm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLSW5zcGVjdG9yV2lu
ZG93Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUMwRjBBQTIwMDA2NTZFMDA1
MzY1MzYgLyogX1dLSW5zcGVjdG9yV2luZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IF9XS0luc3BlY3RvcldpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBNUQzNTA0RDFENzhGMEQyMDA1MTI0QTkgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTVEMzUwNEQx
RDc4RjBEMjAwNTEyNEE5IC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUUzOTFGQjIxODNDMUU5
MDBDOEZCMzEgLyogSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNUUzOTFGQzIxODNDMUU5MDBDOEZCMzEgLyogSW5zcGVjdG9yVGFy
Z2V0UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yVGFy
Z2V0UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVFQzZBRDIyMTUxQkQ2
OTAwNjc3RDE3IC8qIFdlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YlBhZ2VEZWJ1Z2dhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkyMzcs
MTUgKzkyMzcsMTUgQEAKIAkJCQk5MUQ5NzBENjIzREE2RDU1MDA1N0RCQzMgLyogbWFjICovLAog
CQkJCUE1RTM5MUZCMjE4M0MxRTkwMEM4RkIzMSAvKiBJbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAg
Ki8sCiAJCQkJQTVFMzkxRkMyMTgzQzFFOTAwQzhGQjMxIC8qIEluc3BlY3RvclRhcmdldFByb3h5
LmggKi8sCi0JCQkJQTU1QkE4MUIxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5LmNwcCAqLywKLQkJCQlBNTVCQTgxOTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkuaCAqLywKLQkJCQlBNTVCQTgxQTFCQTI1QjFFMDA3Q0QzM0QgLyogUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJMUM4RTI4MzMxMjc1RDcz
ODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmNwcCAqLywKLQkJCQkxQzhFMjgzMjEyNzVE
NzM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yUHJveHkuaCAqLywKLQkJCQkxQzc3QzE5NTEyODhB
ODcyMDA2QTc0MkYgLyogV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJQTU1
QkE4MUIxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHkuY3BwICov
LAorCQkJCUE1NUJBODE5MUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSVBy
b3h5LmggKi8sCisJCQkJQTU1QkE4MUExQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3Bl
Y3RvclVJUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJOTlCMTY3NUQyNTJCQkUwQTAwNzMxNDBF
IC8qIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlclByb3h5LmNwcCAqLywKIAkJCQk5
OUIxNjc1QTI1MkJCQUREMDA3MzE0MEUgLyogV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9s
bGVyUHJveHkuaCAqLywKIAkJCQk5OTZCMkI5MzI1RTI0MzE0MDA3MTkzNzkgLyogV2ViSW5zcGVj
dG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJMUM4RTI4
MzMxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclVJUHJveHkuY3BwICovLAorCQkJCTFD
OEUyODMyMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JVSVByb3h5LmggKi8sCisJCQkJ
MUM3N0MxOTUxMjg4QTg3MjAwNkE3NDJGIC8qIFdlYkluc3BlY3RvclVJUHJveHkubWVzc2FnZXMu
aW4gKi8sCiAJCQkJQTU1QkE4MjcxQkEzOEUxRTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvclV0aWxp
dGllcy5jcHAgKi8sCiAJCQkJQTU1QkE4MjgxQkEzOEUxRTAwN0NEMzNEIC8qIFdlYkluc3BlY3Rv
clV0aWxpdGllcy5oICovLAogCQkJCUE1RUM2QUQyMjE1MUJENjkwMDY3N0QxNyAvKiBXZWJQYWdl
RGVidWdnYWJsZS5jcHAgKi8sCkBAIC05MjY5LDggKzkyNjksOCBAQAogCQk5MUQ5NzBENjIzREE2
RDU1MDA1N0RCQzMgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKLQkJCQlBNUQzNTA0RDFENzhGMEQyMDA1MTI0QTkgLyogUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlNYWMubW0gKi8sCi0JCQkJMUNBOEI5MzUxMjdDNzc0RTAwNTc2QzJCIC8qIFdlYkluc3Bl
Y3RvclByb3h5TWFjLm1tICovLAorCQkJCUE1RDM1MDREMUQ3OEYwRDIwMDUxMjRBOSAvKiBSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tICovLAorCQkJCTFDQThCOTM1MTI3Qzc3NEUwMDU3
NkMyQiAvKiBXZWJJbnNwZWN0b3JVSVByb3h5TWFjLm1tICovLAogCQkJCTk5QTdBQ0UzMjYwMTI5
MTkwMDZENTdGRCAvKiBXS0luc3BlY3RvclJlc291cmNlVVJMU2NoZW1lSGFuZGxlci5oICovLAog
CQkJCTk5QTdBQ0U0MjYwMTI5MUEwMDZENTdGRCAvKiBXS0luc3BlY3RvclJlc291cmNlVVJMU2No
ZW1lSGFuZGxlci5tbSAqLywKIAkJCQk5OTRCQURGMTFGN0Q3N0VBMDBCNTcxRTcgLyogV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlci5oICovLApAQCAtMTA5OTIsOSArMTA5OTIsOSBAQAogCQkJCTFE
RDJBNjZCMjU2MjAyMUUwMEZGN0I2RiAvKiBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8sCiAJCQkJMUREMkE2NjkyNTYyMDIxRTAwRkY3QjZGIC8qIFJlbW90ZVNv
dXJjZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQkxREQyQTY2QTI1NjIwMjFFMDBGRjdC
NkYgLyogUmVtb3RlU291cmNlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxpZXMuaCAqLywKLQkJCQlB
NTVCQTgyMTFCQTI1QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwICovLAotCQkJCUE1NUJBODIyMUJBMjVCQjgwMDdDRDMzRCAvKiBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkJMUJCQkU0OUUxOUI2NkM1MzAwNkI3
RDgxIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJCQlB
NTVCQTgyMTFCQTI1QkI4MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8sCisJCQkJQTU1QkE4MjIxQkEyNUJCODAwN0NEMzNEIC8qIFJlbW90
ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oICovLAogCQkJCUUxOEU2OTEzMTY5QjY2N0Iw
MDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQlF
MThFNjkxNDE2OUI2NjdCMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eU1lc3NhZ2VzLmggKi8s
CiAJCQkJMkRFNjk0M0IxOEJEMkE2ODAwNUMxNUU1IC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRy
b2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLApAQCAtMTEwNzIsOCArMTEwNzIsNiBAQAogCQkJ
CUZFREJEQ0Q1MUU2OEQxOUMwMEE1OUY4RiAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyTWVzc2FnZXMuaCAqLywKIAkJCQkxQzhFMkEzMTEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5z
cGVjdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQkxQzhFMkEzMjEyNzc4NTI0MDBCQzdC
RDAgLyogV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCAqLywKLQkJCQkxQ0E4Qjk0MzEyN0M4ODJBMDA1
NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAotCQkJCTFD
QThCOTQ0MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggKi8s
CiAJCQkJOTk3OTY1OUIyNTMxMEE0ODAwQjMxQUUzIC8qIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9u
Q29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJOTk3OTY1OUEyNTMxMEE0ODAw
QjMxQUUzIC8qIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9uQ29udHJvbGxlck1lc3NhZ2VzLmggKi8s
CiAJCQkJOTk2QjJCOTUyNUUyNDQ4MTAwNzE5Mzc5IC8qIFdlYkluc3BlY3RvclVJRXh0ZW5zaW9u
Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKQEAgLTExMDgxLDYgKzExMDc5
LDggQEAKIAkJCQk5OTZCMkI5NzI1RTI0NDgyMDA3MTkzNzkgLyogV2ViSW5zcGVjdG9yVUlFeHRl
bnNpb25Db250cm9sbGVyUHJveHlNZXNzYWdlc1JlcGxpZXMuaCAqLywKIAkJCQkxQ0JCRTQ5RTE5
QjY2QzUzMDA2QjdEODEgLyogV2ViSW5zcGVjdG9yVUlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAog
CQkJCTFDQkJFNDlGMTlCNjZDNTMwMDZCN0Q4MSAvKiBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgg
Ki8sCisJCQkJMUNBOEI5NDMxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclVJUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTFDQThCOTQ0MTI3Qzg4MkEwMDU3NkMyQiAvKiBX
ZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQk1MUYwNjBERDE2NTQzMTc1MDBG
MzI4MkYgLyogV2ViTUROU1JlZ2lzdGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQkzMUJB
OTI0ODE0ODgzMDgxMDA2MkVEQjUgLyogV2ViTm90aWZpY2F0aW9uTWFuYWdlck1lc3NhZ2VSZWNl
aXZlci5jcHAgKi8sCiAJCQkJMzFCQTkyNDkxNDg4MzA4MTAwNjJFREI1IC8qIFdlYk5vdGlmaWNh
dGlvbk1hbmFnZXJNZXNzYWdlcy5oICovLApAQCAtMTIwNTYsOSArMTIwNTYsOSBAQAogCQkJCTBG
NTk0NzlEMTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxREQyQTY4NjI1NjMzQzcyMDBGRjdCNkYgLyogUmVtb3RlU291cmNlQnVmZmVy
UHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUREMkE2ODcyNTYzM0M4NzAwRkY3
QjZGIC8qIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5TWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlBNTVCQTgxRjFCQTI1QjI3MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuaCBpbiBIZWFkZXJzICovLAotCQkJCUE1NUJBODI1MUJBMjVDRkIwMDdDRDMzRCAvKiBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTVC
QTgxNzFCQTIzRTEyMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUE1NUJBODFGMUJBMjVCMjcwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JV
SVByb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQlBNTVCQTgyNTFCQTI1Q0ZCMDA3Q0QzM0QgLyog
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
Q0I3QUZFNzIzQzY4MjA3MDBFNDlDRjMgLyogUmVzb3VyY2VMb2FkSW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNkJFOTY5Q0QxRTU0RTA1NDAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QkU5NjlDQjFFNTRENENGMDA4Qjc0
ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMjI4Niw4ICsxMjI4Niw2IEBACiAJCQkJRkVFNDNGRDMxRTY3QjAxODAwNzdENkQx
IC8qIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFREJEQ0Q3MUU2OEQyMDUwMEE1OUY4RiAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDOEUyQTM2MTI3Nzg1MjQwMEJDN0JE
MCAvKiBXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUM4RTI4MzQx
Mjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmggaW4gSGVhZGVycyAqLywKLQkJ
CQkxQ0E4Qjk0NjEyN0M4ODJBMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4OTFENjYxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3Bl
Y3RvclVJLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUIxNjc2NDI1MkJCRTYyMDA3MzE0MEUgLyog
V2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OTc5NjU5RTI1MzEwQTQ5MDBCMzFBRTMgLyogV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9s
bGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTIyOTUsNiArMTIyOTMsOCBAQAogCQkJ
CTk5NkIyQjk5MjVFMjQ0ODIwMDcxOTM3OSAvKiBXZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRy
b2xsZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCMkI5QTI1RTI0NDgy
MDA3MTkzNzkgLyogV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyUHJveHlNZXNzYWdl
c1JlcGxpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDQkJFNEExMTlCNjZDNTMwMDZCN0Q4MSAv
KiBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQzhFMjgzNDEy
NzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yVUlQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMUNBOEI5NDYxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1QkE4MkIxQkEzOEU2MTAwN0NEMzNEIC8qIFdlYklu
c3BlY3RvclV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBOTQ0QTAxODg0RTRGMDAw
RUQ4NkRCIC8qIFdlYklPU0V2ZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4NUU0
NzIxRTMwM0YzNzAwOTE0NTk5IC8qIFdlYktpdC5hcGlub3RlcyBpbiBIZWFkZXJzICovLApAQCAt
MTM5MzYsOCArMTM5MzYsOCBAQAogCQkJCUNEODI1MkRFMjVENDkxNkMwMDg2MkZEOCAvKiBSZW1v
dGVSZW1vdGVDb21tYW5kTGlzdGVuZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjU5NDdBNzE4N0I1MTc2MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUREMkE2NkUy
NTYyMDIxRTAwRkY3QjZGIC8qIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE1NUJBODI2MUJBMjVDRkQwMDdDRDMzRCAvKiBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQkJCRTRBMDE5QjY2QzUzMDA2QjdEODEgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTU1QkE4MjYxQkEyNUNGRDAwN0NEMzNE
IC8qIFJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTE4RTY5MTcxNjlCNjY3QjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFERTdDNkMyMjI3OEYxRTAw
NTMyQjY1IC8qIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MkQ5MkE3ODcyMTJCNkFCMTAwRjQ5M0ZEIC8qIFNoYXJlYWJsZUJpdG1hcC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTE0MTczLDEwICsxNDE3MywxMCBAQAogCQkJCUZFREJEQ0Q2MUU2OEQyMDAwMEE1
OUY4RiAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFDOEUyQTM1MTI3Nzg1MjQwMEJDN0JEMCAvKiBXZWJJbnNw
ZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzE4RjNBMTUyNTYz
MzM0MzAwNzk3RTY2IC8qIFdlYkluc3BlY3RvclByZWZlcmVuY2VPYnNlcnZlci5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCTFDQThCOTQ1MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTc5NjU5RjI1MzEwQTQ5
MDBCMzFBRTMgLyogV2ViSW5zcGVjdG9yVUlFeHRlbnNpb25Db250cm9sbGVyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5NkIyQjk4MjVFMjQ0ODIwMDcxOTM3OSAvKiBX
ZWJJbnNwZWN0b3JVSUV4dGVuc2lvbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQ0JCRTRBMDE5QjY2QzUzMDA2QjdEODEgLyogV2ViSW5zcGVj
dG9yVUlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUNBOEI5NDUxMjdD
ODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3OEEyMTJCNkFCMTAwRjQ5M0ZEIC8qIFdlYktleWJvYXJk
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2MjgwRjMxOTE5OTgyQTAwNkFEOUY5IC8q
IFdlYktpdC5tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3OEIyMTJCNkFCMTAwRjQ5M0ZEIC8q
IFdlYktpdDJJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmNw
cAppbmRleCBjN2FjNWQ2YmZmMjY4MDdkZTNlZDFiYmZiYTkyYTJhODhmM2Q2NWYyLi40OTMxZGYz
Mjk4N2IyNGZkZWEwYzYwN2YxMDBhMTJiMmFlYmYyNmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmNw
cApAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbW90
ZVdlYkluc3BlY3RvclVJLmgiCiAKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldl
YkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkluc3BlY3RvclVJLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZS5oIgpAQCAtMTAxLDcgKzEwMSw3IEBAIHZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAKIHZv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6U2Vu
ZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1l
c3NhZ2UpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6ZnJvbnRlbmRMb2FkZWQoKQogCiAgICAgbV9mcm9udGVuZEFQSURp
c3BhdGNoZXItPmRpc3BhdGNoQ29tbWFuZFdpdGhSZXN1bHRBc3luYygic2V0SXNWaXNpYmxlIl9z
LCB7IEpTT046OlZhbHVlOjpjcmVhdGUodHJ1ZSkgfSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6RnJvbnRlbmRMb2FkZWQoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6RnJvbnRlbmRMb2FkZWQo
KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CiAKICAgICBicmluZ1RvRnJvbnQoKTsKIH0KQEAgLTEz
NiwxNyArMTM2LDE3IEBAIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnBhZ2VVbnBhdXNlZCgp
CiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNl
dFNoZWV0UmVjdChyZWN0KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6U2V0U2hlZXRSZWN0KHJlY3QpLCBtX3BhZ2UuaWRlbnRp
ZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2V0Rm9yY2VkQXBwZWFy
YW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6QXBwZWFyYW5jZSBhcHBlYXJh
bmNlKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTZXRGb3JjZWRB
cHBlYXJhbmNlKGFwcGVhcmFuY2UpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSVByb3h5OjpTZXRGb3JjZWRBcHBlYXJhbmNlKGFwcGVhcmFu
Y2UpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JV
STo6c3RhcnRXaW5kb3dEcmFnKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6U3RhcnRXaW5kb3dEcmFnKCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX3BhZ2Uu
aWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRv
d0J5KGZsb2F0IHgsIGZsb2F0IHkpCkBAIC0xNzksNyArMTc5LDcgQEAgYm9vbCBSZW1vdGVXZWJJ
bnNwZWN0b3JVSTo6c3VwcG9ydHNEb2NrU2lkZShEb2NrU2lkZSBkb2NrU2lkZSkKIAogdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zyb250KCkKIHsKLSAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1fcGFnZS5pZGVudGlmaWVyKCkp
OworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJUHJveHk6OkJyaW5nVG9Gcm9udCgp
LCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
Y2xvc2VXaW5kb3coKQpAQCAtMTkwLDMyICsxOTAsMzIgQEAgdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6Y2xvc2VXaW5kb3coKQogICAgIG1fZXh0ZW5zaW9uQ29udHJvbGxlciA9IG51bGxwdHI7
CiAjZW5kaWYKICAgICAKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6RnJv
bnRlbmREaWRDbG9zZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1v
dGVXZWJJbnNwZWN0b3JVSVByb3h5OjpGcm9udGVuZERpZENsb3NlKCksIG1fcGFnZS5pZGVudGlm
aWVyKCkpOwogfQogCiB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpyZW9wZW4oKQogewotICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpSZW9wZW4oKSwgbV9wYWdlLmlkZW50
aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6UmVvcGVu
KCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJ
OjpyZXNldFN0YXRlKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
UmVzZXRTdGF0ZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JVSVByb3h5OjpSZXNldFN0YXRlKCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwog
fQogCiB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpvcGVuVVJMRXh0ZXJuYWxseShjb25zdCBT
dHJpbmcmIHVybCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6T3Bl
blVSTEV4dGVybmFsbHkodXJsKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
UmVtb3RlV2ViSW5zcGVjdG9yVUlQcm94eTo6T3BlblVSTEV4dGVybmFsbHkodXJsKSwgbV9wYWdl
LmlkZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVu
Y29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2
ZUFzKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yVUlQcm94eTo6U2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VT
YXZlQXMpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVu
dCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6QXBwZW5kKGZpbGVu
YW1lLCBjb250ZW50KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3Rl
V2ViSW5zcGVjdG9yVUlQcm94eTo6QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KSwgbV9wYWdlLmlk
ZW50aWZpZXIoKSk7CiB9CiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6Omluc3BlY3RlZFVS
TENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2hvd0NlcnRpZmljYXRl
KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQogewotICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZv
KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9y
VUlQcm94eTo6U2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyksIG1fcGFnZS5pZGVudGlm
aWVyKCkpOwogfQogCiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIFJlbW90ZVdlYkluc3BlY3Rv
clVJOjpkZWJ1Z2dhYmxlVHlwZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHAKaW5kZXggNWJiYzYzNDQxNzFlNTcxNjJk
NTVkNjkwZWE0ZWQyMWQ1NzFhOWQ5NC4uOGFlZWEzZTRjYjIwOGY1NjgwODIyZTkxMTVhYjBmMjMy
OWFjYzc0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yLmNwcApAQCAtMjgsOCArMjgsOCBAQAogCiAjaW5jbHVkZSAiV2ViRnJhbWUu
aCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nocm9t
ZS5oPgpAQCAtNzIsNyArNzIsNyBAQCBXZWJJbnNwZWN0b3I6On5XZWJJbnNwZWN0b3IoKQogCiB2
b2lkIFdlYkluc3BlY3Rvcjo6b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCB1bmRlclRl
c3QpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Ok9wZW5Mb2NhbEluc3BlY3Rv
ckZyb250ZW5kKGNhbkF0dGFjaFdpbmRvdygpLCB1bmRlclRlc3QpLCBtX3BhZ2UtPmlkZW50aWZp
ZXIoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6T3BlbkxvY2FsSW5zcGVj
dG9yRnJvbnRlbmQoY2FuQXR0YWNoV2luZG93KCksIHVuZGVyVGVzdCksIG1fcGFnZS0+aWRlbnRp
ZmllcigpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3I6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJ
UEM6OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyKQpAQCAtMTA4LDcgKzEw
OCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yOjpzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRh
Y2htZW50IGVuY29kZWRDb25uZWN0aW9uSWRlbnRpCiAKIHZvaWQgV2ViSW5zcGVjdG9yOjpjbG9z
ZUZyb250ZW5kQ29ubmVjdGlvbigpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OkRpZENsb3NlKCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSVByb3h5OjpEaWRDbG9zZSgpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7CiAKICAgICAv
LyBJZiB3ZSB0cmllZCB0byBjbG9zZSB0aGUgZnJvbnRlbmQgYmVmb3JlIGl0IHdhcyBjcmVhdGVk
LCB0aGVuIG5vIGNvbm5lY3Rpb24gZXhpc3RzIHlldC4KICAgICBpZiAobV9mcm9udGVuZENvbm5l
Y3Rpb24pIHsKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2VGcm9u
dGVuZENvbm5lY3Rpb24oKQogCiB2b2lkIFdlYkluc3BlY3Rvcjo6YnJpbmdUb0Zyb250KCkKIHsK
LSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1fcGFnZS0+
aWRlbnRpZmllcigpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpCcmluZ1Rv
RnJvbnQoKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lkIFdlYkluc3BlY3Rvcjo6
d2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKEZ1bmN0aW9uPHZvaWQoKT4mJiBjYWxs
YmFjaykKQEAgLTI1NCwxNyArMjU0LDE3IEBAIHZvaWQgV2ViSW5zcGVjdG9yOjpzdG9wRWxlbWVu
dFNlbGVjdGlvbigpCiAKIHZvaWQgV2ViSW5zcGVjdG9yOjplbGVtZW50U2VsZWN0aW9uQ2hhbmdl
ZChib29sIGFjdGl2ZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RWxlbWVu
dFNlbGVjdGlvbkNoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGFjdGl2
ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3I6OnRpbWVs
aW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6VGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRl
bnRpZmllcigpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpUaW1lbGluZVJl
Y29yZGluZ0NoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwogfQogCiB2b2lk
IFdlYkluc3BlY3Rvcjo6c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNs
aWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZSBkZXZlbG9wZXJQcmVmZXJlbmNlLCBPcHRpb25hbDxi
b29sPiBvdmVycmlkZVZhbHVlKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpT
ZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoZGV2ZWxvcGVyUHJlZmVyZW5jZSwgb3ZlcnJp
ZGVWYWx1ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSVByb3h5OjpTZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoZGV2ZWxvcGVyUHJlZmVy
ZW5jZSwgb3ZlcnJpZGVWYWx1ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKIH0KIAogYm9vbCBX
ZWJJbnNwZWN0b3I6OmNhbkF0dGFjaFdpbmRvdygpCkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBX
ZWJJbnNwZWN0b3I6OnVwZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHkoKQogCiAgICAgbV9wcmV2aW91
c0NhbkF0dGFjaCA9IGNhbkF0dGFjaFdpbmRvdzsKIAotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpBdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGNhbkF0dGFjaFdpbmRvdyksIG1fcGFn
ZS0+aWRlbnRpZmllcigpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpBdHRh
Y2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGNhbkF0dGFjaFdpbmRvdyksIG1fcGFnZS0+aWRlbnRpZmll
cigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCmluZGV4IGVmMmUwZjk2
MmFlOGMyNmIwMzhmMzYyNTU2OTBlM2I3N2I3ODMxZjUuLmY5ZDNhNTU4ODg4ZGUzMGVkNjA2Zjdm
YWEwNzgyN2U1MWJkYzRmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNz
YWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJXZWJJbnNwZWN0b3JVSVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZv
Lmg+CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6dXBkYXRlQ29ubmVj
dGlvbigpCiAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+b3BlbigpOwogI2VuZGlmCiAKLSAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rp
b25DbGllbnRQb3J0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUlQcm94eTo6U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25DbGll
bnRQb3J0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVj
dG9yVUk6OndpbmRvd09iamVjdENsZWFyZWQoKQpAQCAtMTUwLDE0ICsxNTAsMTQgQEAgdm9pZCBX
ZWJJbnNwZWN0b3JVSTo6ZnJvbnRlbmRMb2FkZWQoKQogICAgIHNldERvY2tTaWRlKG1fZG9ja1Np
ZGUpOwogICAgIHNldElzVmlzaWJsZShtX2lzVmlzaWJsZSk7CiAKLSAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JQcm94eTo6RnJvbnRlbmRMb2FkZWQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmll
cik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6RnJvbnRlbmRMb2FkZWQoKSwg
bV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiAKICAgICBicmluZ1RvRnJvbnQoKTsKIH0KIAog
dm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RhcnRXaW5kb3dEcmFnKCkKIHsKLSAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6U3RhcnRXaW5kb3dEcmFnKCksIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OlN0YXJ0V2luZG93RHJh
ZygpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JV
STo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCkBAIC0xNjksMTIgKzE2OSwxMiBAQCB2
b2lkIFdlYkluc3BlY3RvclVJOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkKIAogdm9p
ZCBXZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zyb250KCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX2luc3Bl
Y3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2xvc2VXaW5k
b3coKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9zZSgpLCBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5
OjpEaWRDbG9zZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIAogICAgIGlmIChtX2Jh
Y2tlbmRDb25uZWN0aW9uKSB7CiAgICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPmludmFsaWRh
dGUoKTsKQEAgLTE5OSwxNyArMTk5LDE3IEBAIHZvaWQgV2ViSW5zcGVjdG9yVUk6OmNsb3NlV2lu
ZG93KCkKIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKIHsKLSAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OlJlb3BlbigpLCBtX2luc3BlY3RlZFBh
Z2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVzZXRTdGF0ZSgpCiB7
Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlJlc2V0U3RhdGUoKSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6UmVz
ZXRTdGF0ZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNw
ZWN0b3JVSTo6c2V0Rm9yY2VkQXBwZWFyYW5jZShXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6QXBwZWFyYW5jZSBhcHBlYXJhbmNlKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpTZXRGb3JjZWRBcHBlYXJhbmNlKGFwcGVhcmFuY2UpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpTZXRGb3JjZWRB
cHBlYXJhbmNlKGFwcGVhcmFuY2UpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAog
V2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBXZWJJbnNwZWN0b3JVSTo6dXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0CkBAIC0yMzYsMTYgKzIzNiwxNiBAQCB2
b2lkIFdlYkluc3BlY3RvclVJOjpyZXF1ZXN0U2V0RG9ja1NpZGUoRG9ja1NpZGUgZG9ja1NpZGUp
CiAgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwogICAgIHN3
aXRjaCAoZG9ja1NpZGUpIHsKICAgICBjYXNlIERvY2tTaWRlOjpVbmRvY2tlZDoKLSAgICAgICAg
d2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JQcm94eTo6RGV0YWNoKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAg
ICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJUHJveHk6OkRldGFjaCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEb2NrU2lkZTo6UmlnaHQ6Ci0gICAgICAgIHdl
YlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OkF0dGFjaFJpZ2h0KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwor
ICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkF0dGFjaFJpZ2h0KCksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERvY2tTaWRlOjpMZWZ0OgotICAg
ICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hMZWZ0KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZp
ZXIpOworICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkF0dGFjaExlZnQoKSwgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG9ja1NpZGU6OkJvdHRv
bToKLSAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQm90dG9tKCksIG1faW5zcGVjdGVkUGFn
ZUlkZW50aWZpZXIpOworICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6OkF0dGFjaEJvdHRvbSgpLCBt
X2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAt
Mjk4LDQyICsyOTgsNDIgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6dXBkYXRlRmluZFN0cmluZyhj
b25zdCBTdHJpbmcmIGZpbmRTdHJpbmcpCiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6U2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7
CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5z
aWduZWQgd2lkdGgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFj
aGVkV2luZG93V2lkdGgod2lkdGgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpTZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRo
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6
OmNoYW5nZVNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OlNldFNoZWV0UmVjdChyZWN0KSwgbV9pbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6U2V0U2hlZXRSZWN0
KHJlY3QpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0
b3JVSTo6b3BlblVSTEV4dGVybmFsbHkoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6Ok9wZW5VUkxFeHRlcm5hbGx5KHVybCksIG1faW5zcGVjdGVk
UGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJUHJveHk6Ok9wZW5V
UkxFeHRlcm5hbGx5KHVybCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiB2b2lk
IFdlYkluc3BlY3RvclVJOjpzYXZlKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qg
V1RGOjpTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVB
cykKIHsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2F2ZShmaWxlbmFtZSwgY29u
dGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlm
aWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSVByb3h5OjpTYXZlKGZpbGVuYW1lLCBj
b250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyksIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjphcHBlbmQoY29uc3QgV1RGOjpTdHJp
bmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCkKIHsKLSAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6QXBw
ZW5kKGZpbGVuYW1lLCBjb250ZW50KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAK
IHZvaWQgV2ViSW5zcGVjdG9yVUk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Okluc3BlY3RlZFVS
TENoYW5nZWQodXJsU3RyaW5nKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6SW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmxTdHJpbmcp
LCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6
c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQog
ewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTaG93Q2VydGlmaWNhdGUoY2VydGlm
aWNhdGVJbmZvKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUlQcm94eTo6U2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyksIG1faW5z
cGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVU
UlkpCkBAIC00NDcsNyArNDQ3LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6cGFnZVVucGF1c2Vk
KCkKIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZW5kTWVz
c2FnZVRvQmFja2VuZChtZXNzYWdlKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUlQcm94eTo6U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2Fn
ZSksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiBTdHJpbmcgV2ViSW5zcGVjdG9y
VUk6OnRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>