<?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>67870</bug_id>
          
          <creation_ts>2011-09-09 15:35:20 -0700</creation_ts>
          <short_desc>Private Browsing is a per-page setting that sets a global value</short_desc>
          <delta_ts>2012-11-16 09:47:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jessie Berlin">jberlin</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>japhet</cc>
    
    <cc>jberlin</cc>
    
    <cc>leandro</cc>
    
    <cc>psolanki</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>465063</commentid>
    <comment_count>0</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-09-09 15:35:20 -0700</bug_when>
    <thetext>In WebCore’s Settings.cpp’s setPrivateBrowsingEnabled, both of the following methods for turning on or off Private Browsing affect global settings:

// This modifies a static on ResourceHandle.
#if USE(CFURLSTORAGESESSIONS)
    ResourceHandle::setPrivateBrowsingEnabled(privateBrowsingEnabled);
#endif

and 

// This modifies the shared NSHTTPCookieStorage.
setCookieStoragePrivateBrowsingEnabled(privateBrowsingEnabled);

However, the Settings object is the Settings for a single Page. It should not be modifying global settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465065</commentid>
    <comment_count>1</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-09-09 15:36:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/10103215&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465115</commentid>
    <comment_count>2</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-09-09 17:03:31 -0700</bug_when>
    <thetext>Re-titling to express the interest that Private Browsing should be able to be something done per-page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767479</commentid>
    <comment_count>3</comment_count>
      <attachid>174291</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-14 16:59:32 -0800</bug_when>
    <thetext>Created attachment 174291
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767488</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-14 17:02:30 -0800</bug_when>
    <thetext>Attachment 174291 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/platform/network/cf/CookieJarCFNet.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767681</commentid>
    <comment_count>5</comment_count>
      <attachid>174291</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-14 21:12:21 -0800</bug_when>
    <thetext>Comment on attachment 174291
WIP

Attachment 174291 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14844336</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768625</commentid>
    <comment_count>6</comment_count>
      <attachid>174545</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-15 16:20:18 -0800</bug_when>
    <thetext>Created attachment 174545
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768635</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-15 16:23:56 -0800</bug_when>
    <thetext>Attachment 174545 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/network/cf/CookieJarCFNet.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 45 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768644</commentid>
    <comment_count>8</comment_count>
      <attachid>174545</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-15 16:26:18 -0800</bug_when>
    <thetext>Comment on attachment 174545
proposed patch

Actually, this doesn&apos;t work. A Web Inspector page created while private browsing is active would kill the private session.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768667</commentid>
    <comment_count>9</comment_count>
      <attachid>174545</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-11-15 16:41:32 -0800</bug_when>
    <thetext>Comment on attachment 174545
proposed patch

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

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:422
&gt; +    RetainPtr&lt;CFArrayRef&gt; cookies(AdoptCF, CFHTTPCookieStorageCopyCookiesForURL(cfCookieStorage.get(), cfURL.get(), false));

This should use the adoptCF() function (like above).

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:827
&gt; +    RetainPtr&lt;CFDataRef&gt; data(AdoptCF, CFURLConnectionSendSynchronousRequest(request.cfURLRequest(), &amp;cfResponse, &amp;cfError, request.timeoutInterval()));

This should use adoptCF()

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:113
&gt; +    if (CFURLStorageSessionRef session = WebFrameNetworkingContext::defaultStorageSession())
&gt; +        return RetainPtr&lt;CFHTTPCookieStorageRef&gt;(AdoptCF, WKCopyHTTPCookieStorage(session));

This should use the adoptCF() function, rather than the RetainPtr constructor (we are moving to that to be consistent with RefPtr.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebPlatformStrategiesMac.mm:39
&gt; +    if (CFURLStorageSessionRef session = WebFrameNetworkingContext::defaultStorageSession())
&gt; +        return RetainPtr&lt;CFHTTPCookieStorageRef&gt;(AdoptCF, WKCopyHTTPCookieStorage(session));

This should use adoptCF().

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2185
&gt; +#if PLATFORM(MAC) || USE(CFNETWORK)
&gt; +    if (privateBrowsingEnabled)
&gt; +        WebFrameNetworkingContext::ensurePrivateBrowsingSession();
&gt; +    else
&gt; +        WebFrameNetworkingContext::destroyPrivateBrowsingSession();
&gt; +#endif

Can this go in platformPreferencesDidChange()?

&gt; Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm:87
&gt; +    if (CFURLStorageSessionRef session = WebFrameNetworkingContext::defaultStorageSession())
&gt; +        return RetainPtr&lt;CFHTTPCookieStorageRef&gt;(AdoptCF, WKCopyHTTPCookieStorage(session));

This should use adoptCF().

&gt; Source/WebKit/win/WebCoreSupport/WebPlatformStrategies.cpp:84
&gt; +    if (CFURLStorageSessionRef session = WebFrameNetworkingContext::defaultStorageSession())
&gt; +        return RetainPtr&lt;CFHTTPCookieStorageRef&gt;(AdoptCF, wkCopyHTTPCookieStorage(session));

Please use adoptCF().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768728</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-15 17:22:21 -0800</bug_when>
    <thetext>&gt; Can this go in platformPreferencesDidChange()?

Probably not - it&apos;s a cross platform preference with some semi-temporary platform specific implementation details, not something entirely specific to a platform. So, we&apos;d have the code to support it confusingly sprinkled around the code base.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768735</commentid>
    <comment_count>11</comment_count>
      <attachid>174567</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-15 17:27:52 -0800</bug_when>
    <thetext>Created attachment 174567
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768752</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-15 17:39:06 -0800</bug_when>
    <thetext>By the way, I&apos;m shamelessly using this bug, because it&apos;s in WebCore component, and I&apos;m fixing it for WebCore, if not for WebKit :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768883</commentid>
    <comment_count>13</comment_count>
      <attachid>174567</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-15 20:28:54 -0800</bug_when>
    <thetext>Comment on attachment 174567
updated patch

Attachment 174567 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14845747</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768900</commentid>
    <comment_count>14</comment_count>
      <attachid>174567</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-15 21:19:11 -0800</bug_when>
    <thetext>Comment on attachment 174567
updated patch

Rejecting attachment 174567 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
ommit-queue/Source/WebKit/chromium/third_party/snappy/src --revision 63 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
50&gt;At revision 63.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/14848677</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769375</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-16 09:47:43 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/134960&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174291</attachid>
            <date>2012-11-14 16:59:32 -0800</date>
            <delta_ts>2012-11-15 16:20:18 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>Sessions.txt</filename>
            <type>text/plain</type>
            <size>75192</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjgyLDcgKzI4Miw2IEBAIF9f
Wk43V2ViQ29yZTE0UmVzb3VyY2VCdWZmZXJEMUV2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlQnVm
ZmVyRDJFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIwZm9yY2VDb250ZW50U25pZmZp
bmdFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTI2c3luY2hyb25vdXNMb2FkUnVuTG9v
cE1vZGVFdgotX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTM1Y3JlYXRlUHJpdmF0ZUJyb3dz
aW5nU3RvcmFnZVNlc3Npb25FUEsxMF9fQ0ZTdHJpbmcKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VI
YW5kbGU2Y3JlYXRlRVBOU18xN05ldHdvcmtpbmdDb250ZXh0RVJLTlNfMTVSZXNvdXJjZVJlcXVl
c3RFUE5TXzIwUmVzb3VyY2VIYW5kbGVDbGllbnRFYmIKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VM
b2FkZXIxM3NldElkZW50aWZpZXJFbQogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2Fu
Y2VsbGVkRXJyb3JFdgpAQCAtNjcyLDYgKzY3MSw3IEBAIF9fWk43V2ViQ29yZTI3Q1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW8KIF9fWk43V2ViQ29yZTI3RGV2aWNlT3JpZW50YXRpb25DbGllbnRN
b2NrMTRzZXRPcmllbnRhdGlvbkVOM1dURjEwUGFzc1JlZlB0cklOU18yMURldmljZU9yaWVudGF0
aW9uRGF0YUVFRQogX19aTjdXZWJDb3JlMjdEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2tDMUV2
CiBfX1pON1dlYkNvcmUyN3N0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlc0V2CitfX1pON1dlYkNv
cmUyNmRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlRXYKIF9fWk43V2ViQ29yZTI4ZW5jb2RlV2l0
aFVSTEVzY2FwZVNlcXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI4cmVtb3Zl
TGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlckVQdgogX19aTjdXZWJDb3JlMjlpc0NoYXJhY3RlclNtYXJ0
UmVwbGFjZUV4ZW1wdEVpYgpAQCAtMjIxNiwxMiArMjIxNiw2IEBAIF9fWk43V2ViQ29yZTEyU2No
ZWR1bGVQYWlyQzFFUDlOU1J1bkxvb3AKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUxMnJl
bGVhc2VQcm94eUV2CiAjZW5kaWYKIAotX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTQ2c2V0
UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZUVSS04zV1RGNlN0cmlu
Z0UKLV9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyMWN1cnJlbnRTdG9yYWdlU2Vzc2lvbkV2
Ci1fX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjlwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbkV2Ci1fX1pON1dlYkNvcmUyNmN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlRXYKLV9fWk43
V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyNHNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbkVQSzIxX19D
RlVSTFN0b3JhZ2VTZXNzaW9uCi0KICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKIF9fWk43V2Vi
Q29yZTExQ29udGV4dE1lbnUyMnNldFBsYXRmb3JtRGVzY3JpcHRpb25FUDE0TlNNdXRhYmxlQXJy
YXkKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBzZW5kQ29udGV4dE1lbnVFdmVudEVSS05T
XzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TmV0d29ya2luZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBAIHByb3RlY3RlZDoKICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lOyB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25z
dCB7IHJldHVybiBtX2ZyYW1lOyB9CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX2ZyYW1lOyB9CiAKICAgICBGcmFtZSogbV9mcmFtZTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OCwyMiArNTc4
LDYgQEAgdm9pZCBTZXR0aW5nczo6c2V0U2Vzc2lvblN0b3JhZ2VRdW90YSh1bgogCiB2b2lkIFNl
dHRpbmdzOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZCkKIHsKLSAgICAvLyBGSVhNRSBodHRwOi8vd2Via2l0Lm9yZy9iLzY3ODcwOiBUaGUgcHJp
dmF0ZSBicm93c2luZyBzdG9yYWdlIHNlc3Npb24gYW5kIGNvb2tpZSBwcml2YXRlCi0gICAgLy8g
YnJvd3NpbmcgbW9kZSAod2hpY2ggaXMgdXNlZCBpZiBzdG9yYWdlIHNlc3Npb25zIGFyZSBub3Qg
YXZhaWxhYmxlKSBhcmUgZ2xvYmFsIHNldHRpbmdzLCBzbwotICAgIC8vIGl0IGlzIG1pc2xlYWRp
bmcgdG8gaGF2ZSB0aGVtIGFzIHBlci1wYWdlIHNldHRpbmdzLgotICAgIC8vIEluIGFkZGl0aW9u
LCBpZiB0aGV5IGFyZSB0cmVhdGVkIGFzIGEgcGVyIFBhZ2Ugc2V0dGluZ3MsIHRoZSBnbG9iYWwg
dmFsdWVzIGNhbiBnZXQgb3V0IG9mCi0gICAgLy8gc3luYyB3aXRoIHRoZSBwZXIgUGFnZSB2YWx1
ZSBpbiB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbjoKLSAgICAvLyAxLiBUaGUgZ2xvYmFsIHZhbHVl
cyBnZXQgc2V0IHRvIHRydWUgd2hlbiBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHRydWUpIGlz
IGNhbGxlZC4KLSAgICAvLyAyLiBBbGwgUGFnZXMgYXJlIGNsb3NlZCwgc28gYWxsIFNldHRpbmdz
IG9iamVjdHMgZ28gYXdheS4KLSAgICAvLyAzLiBBIG5ldyBQYWdlIGlzIGNyZWF0ZWQsIGFuZCBh
IGNvcnJlc3BvbmRpbmcgbmV3IFNldHRpbmdzIG9iamVjdCBpcyBjcmVhdGVkIC0gd2l0aAotICAg
IC8vICAgIG1fcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCBzdGFydGluZyBvdXQgYXMgZmFsc2UgaW4g
dGhlIGNvbnN0cnVjdG9yLgotICAgIC8vIDQuIFRoZSBXZWJQYWdlIHNldHRpbmdzIGdldCBhcHBs
aWVkIHRvIHRoZSBuZXcgUGFnZSBhbmQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChmYWxzZSkK
LSAgICAvLyAgICBpcyBjYWxsZWQsIGJ1dCBhbiBpZiAobV9wcml2YXRlQnJvd3NpbmdFbmFibGVk
ID09IHByaXZhdGVCcm93c2luZ0VuYWJsZWQpIGVhcmx5IHJldHVybgotICAgIC8vICAgIHByZXZl
bnRzIHRoZSBnbG9iYWwgdmFsdWVzIGZyb20gZ2V0dGluZyBjaGFuZ2VkIGZyb20gdHJ1ZSB0byBm
YWxzZS4KLSNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCi0gICAgUmVzb3VyY2VI
YW5kbGU6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7
Ci0jZW5kaWYKLQogICAgIGlmIChtX3ByaXZhdGVCcm93c2luZ0VuYWJsZWQgPT0gcHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ29va2llc1N0cmF0ZWd5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEy
ICsyOCwyMiBAQAogCiAjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCiAKKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisKKyNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCit0
eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBDb29raWVTdG9yYWdlKiAgQ0ZIVFRQQ29va2llU3Rv
cmFnZVJlZjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvb2tpZXNT
dHJhdGVneSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvb2tpZXNDaGFuZ2Vk
KCkgPSAwOwogCisjaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQorICAgIHZpcnR1
YWwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGRlZmF1bHRDb29raWVTdG9yYWdl
KCkgPSAwOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Db29raWVzU3RyYXRl
Z3koKSB7IH0KIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdv
cmtpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9OZXR3b3JraW5nQ29udGV4dC5oCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDEyICsyMywyMiBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKICNpZiBQ
TEFURk9STShNQUMpCi1PQkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CiAjaW5jbHVkZSAiU2No
ZWR1bGVQYWlyLmgiCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgPHFnbG9i
YWwuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorT0JKQ19DTEFTUyBOU09wZXJhdGlv
blF1ZXVlOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCit0
eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGVVJMU3RvcmFnZVNlc3Npb24qIENGVVJMU3RvcmFnZVNl
c3Npb25SZWY7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQogUVRfQkVHSU5fTkFNRVNQQUNF
CiBjbGFzcyBRT2JqZWN0OwogY2xhc3MgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOwpAQCAtNTMsMTIg
KzYzLDE2IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIGJvb2wg
bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGxv
Y2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSBjb25zdCA9IDA7IC8vIEZJWE1F
OiBSZWNvbmNpbGUgd2l0aCBSZXNvdXJjZUhhbmRsZTo6Zm9yY2VDb250ZW50U25pZmZpbmcoKS4K
ICAgICB2aXJ0dWFsIFNjaGVkdWxlUGFpckhhc2hTZXQqIHNjaGVkdWxlZFJ1bkxvb3BQYWlycygp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIE5TT3BlcmF0aW9uUXVldWUgKnNjaGVk
dWxlZE9wZXJhdGlvblF1ZXVlKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgUmVz
b3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3QgPSAw
OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCisgICAgdmly
dHVhbCBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKCkgY29uc3QgPSAwOwor
I2VuZGlmCisKICNpZiBQTEFURk9STShRVCkKICAgICB2aXJ0dWFsIFFPYmplY3QqIG9yaWdpbmF0
aW5nT2JqZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUU5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KiBuZXR3b3JrQWNjZXNzTWFuYWdlcigpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDEzNDY4
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTk2LDE2ICsxOTYsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZp
cmVGYWlsdXJlKFRpbWVyPFJlc291cmNlSGFuZGxlPiopOwogCi0jaWYgUExBVEZPUk0oTUFDKSB8
fCBVU0UoQ0ZORVRXT1JLKQotICAgIHN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGN1cnJl
bnRTdG9yYWdlU2Vzc2lvbigpOwotICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRTdG9yYWdlU2Vz
c2lvbihDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmKTsKLSAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vz
c2lvblJlZiBkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRQcml2
YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wpOwotCi0gICAgc3RhdGljIHZvaWQgc2V0UHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZShjb25zdCBTdHJpbmcmKTsKLSAgICBz
dGF0aWMgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IGNyZWF0ZVByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIpOwotI2VuZGlmCi0KICAg
ICB1c2luZyBSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlPjo6cmVmOwogICAgIHVzaW5nIFJlZkNv
dW50ZWQ8UmVzb3VyY2VIYW5kbGU+OjpkZXJlZjsKIApAQCAtMjQwLDE0ICsyMzAsOSBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgeyBkZXJl
ZigpOyB9CiAKICNpZiBQTEFURk9STShNQUMpICYmICFVU0UoQ0ZORVRXT1JLKQotICAgIHZvaWQg
Y3JlYXRlTlNVUkxDb25uZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZik7CisgICAgdm9pZCBjcmVhdGVOU1VS
TENvbm5lY3Rpb24oaWQgZGVsZWdhdGUsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Us
IGJvb2wgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llUG9saWN5LCBib29sIHNob3VsZENvbnRl
bnRTbmlmZik7CiAjZWxpZiBVU0UoQ0YpCi0gICAgdm9pZCBjcmVhdGVDRlVSTENvbm5lY3Rpb24o
Ym9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYp
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCi0gICAgc3Rh
dGljIFN0cmluZyBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJEZWZhdWx0
QmFzZSgpOwotICAgIHN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHByaXZhdGVCcm93c2lu
Z1N0b3JhZ2VTZXNzaW9uKCk7CisgICAgdm9pZCBjcmVhdGVDRlVSTENvbm5lY3Rpb24oYm9vbCBz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbCBzaG91bGRSZWxheFRoaXJkUGFydHlDb29r
aWVQb2xpY3ksIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKTsKICNlbmRpZgogCiAgICAgZnJpZW5k
IGNsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAkocmV2
aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBAIE9CSkNf
Q0xBU1MgTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKIE9CSkNfQ0xBU1MgTlNVUkxDb25u
ZWN0aW9uOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCit0
eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGVVJMU3RvcmFnZVNlc3Npb24qIENGVVJMU3RvcmFnZVNl
c3Npb25SZWY7CisjZW5kaWYKKwogLy8gVGhlIGFsbG9jYXRpb25zIGFuZCByZWxlYXNlcyBpbiBS
ZXNvdXJjZUhhbmRsZUludGVybmFsIGFyZQogLy8gQ29jb2EtZXhjZXB0aW9uLWZyZWUgKGVpdGhl
ciBzaW1wbGUgRm91bmRhdGlvbiBjbGFzc2VzIG9yCiAvLyBXZWJDb3JlUmVzb3VyY2VMb2FkZXJJ
bXAgd2hpY2ggYXZvaWRzIGRvaW5nIHdvcmsgaW4gZGVhbGxvYykuCkBAIC0xNTcsNiArMTYxLDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fc3RhcnRXaGVuU2NoZWR1bGVk
OwogICAgICAgICBib29sIG1fbmVlZHNTaXRlU3BlY2lmaWNRdWlya3M7CiAjZW5kaWYKKyNpZiBQ
TEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCisgICAgICAgIFJldGFpblB0cjxDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmPiBtX3N0b3JhZ2VTZXNzaW9uOworI2VuZGlmCiAjaWYgVVNFKFdJTklO
RVQpCiAgICAgICAgIFRpbWVyPFJlc291cmNlSGFuZGxlPiBtX2ZpbGVMb2FkVGltZXI7CiAgICAg
ICAgIEhJTlRFUk5FVCBtX2ludGVybmV0SGFuZGxlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHJldmlzaW9u
IDEzNDY4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFy
Q0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29v
a2llU3RvcmFnZUNGTmV0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlLmgiCisjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJTb2Z0
TGlua2luZy5oIgogI2luY2x1ZGUgPENGTmV0d29yay9DRkhUVFBDb29raWVzUHJpdi5oPgogI2lu
Y2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CkBAIC0xMDAsOSArMTAxLDgg
QEAgdm9pZCBzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dAogICAgIGlmICh2YWx1
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIGlmICghY29v
a2llU3RvcmFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKGNvbnRleHQpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBBU1NF
UlQoY29va2llU3RvcmFnZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0
Q0YsIHVybC5jcmVhdGVDRlVSTCgpKTsKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFy
dHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZmlyc3RQYXJ0eS5jcmVhdGVDRlVSTCgpKTsKQEAgLTEy
NCw5ICsxMjQsOCBAQCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0CiAK
IFN0cmluZyBjb29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBL
VVJMJiwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9y
YWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIGlmICghY29va2llU3Rv
cmFnZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKGNvbnRleHQpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBB
U1NFUlQoY29va2llU3RvcmFnZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFk
b3B0Q0YsIHVybC5jcmVhdGVDRlVSTCgpKTsKIApAQCAtMTM4LDkgKzEzNyw4IEBAIFN0cmluZyBj
b29raWVzRm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiAKIAogU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1
cmwpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3Jh
Z2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhU
VFBDb29raWVTdG9yYWdlKCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tp
ZVN0b3JhZ2UgPSBjb250ZXh0ID8gY29udGV4dC0+Y29va2llU3RvcmFnZSgpIDogZGVmYXVsdENG
SFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7CiAKICAgICBS
ZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0Q0YsIHVybC5jcmVhdGVDRlVSTCgpKTsKIApA
QCAtMTUzLDcgKzE1MSw3IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShO
ZXQKIGJvb2wgY29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAg
ICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVT
dG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47Ci0gICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7
CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBj
b250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0Q0ZI
VFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmIChjb29raWVTdG9yYWdlKQogICAgICAgICBwb2xp
Y3kgPSBDRkhUVFBDb29raWVTdG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3Jh
Z2UuZ2V0KCkpOwogICAgIHJldHVybiBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2Vw
dFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8IHBvbGljeSA9PSBDRkhUVFBDb29r
aWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzOwpAQCAtMTYyLDkgKzE2MCw4IEBAIGJvb2wgY29v
a2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGMKIGJvb2wgZ2V0UmF3Q29va2llcyhOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYg
cmF3Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7Ci0gICAg
aWYgKCFjb29raWVTdG9yYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY29udGV4
dC0+Y29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBB
U1NFUlQoY29va2llU3RvcmFnZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFk
b3B0Q0YsIHVybC5jcmVhdGVDRlVSTCgpKTsKIApAQCAtMTk1LDkgKzE5Miw4IEBAIGJvb2wgZ2V0
UmF3Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY28KIAogdm9pZCBkZWxldGVDb29raWUoTmV0
d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBu
YW1lKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9y
YWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZI
VFRQQ29va2llU3RvcmFnZSgpOwotICAgIGlmICghY29va2llU3RvcmFnZSkKLSAgICAgICAgcmV0
dXJuOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdl
ID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRleHQpIDogZGVmYXVs
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7CiAKICAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0Q0YsIHVybC5jcmVhdGVDRlVSTCgpKTsK
IApAQCAtMjE2LDkgKzIxMiw4IEBAIHZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0
KiBjb24KIAogdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7Ci0gICAg
aWYgKCFjb29raWVTdG9yYWdlKQotICAgICAgICByZXR1cm47CisgICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwor
ICAgIEFTU0VSVChjb29raWVTdG9yYWdlKTsKIAogICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBj
b29raWVzQ0YoQWRvcHRDRiwgQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzKGNvb2tpZVN0
b3JhZ2UuZ2V0KCkpKTsKICAgICBpZiAoIWNvb2tpZXNDRikKQEAgLTIzNCw5ICsyMjksOCBAQCB2
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDCiAKIHZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29r
aWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZh
dWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIGlmICghY29va2llU3RvcmFnZSkKLSAgICAg
ICAgcmV0dXJuOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRleHQpIDog
ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7
CiAKICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGKEFkb3B0Q0YsIENGSFRUUENv
b2tpZVN0b3JhZ2VDb3B5Q29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKSk7CiAgICAgaWYgKCFj
b29raWVzQ0YpCkBAIC0yNTMsOSArMjQ3LDggQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoTmV0d29ya2luZwogCiB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tp
ZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1
bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlKQotICAgICAg
ICByZXR1cm47CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0
b3JhZ2UgPSBjb250ZXh0ID8gY29udGV4dC0+Y29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKKyAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7CiAKICAgICBDRkhU
VFBDb29raWVTdG9yYWdlRGVsZXRlQWxsQ29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3RvcmFnZUNG
TmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L0Nvb2tpZVN0b3JhZ2VDRk5ldC5jcHAJKHJldmlzaW9uIDEzNDY4NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3RvcmFnZUNGTmV0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTYsMTQgKzU2LDE0IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4KIAogI2VuZGlmCiAKLVJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpCitSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQpCiB7CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4mIG92ZXJyaWRlID0gY29va2llU3RvcmFnZU92ZXJyaWRlKCkpCiAgICAgICAg
IHJldHVybiBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25S
ZWYgc2Vzc2lvbiA9IFJlc291cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFnZVNlc3Npb24oKSkKKyAg
ICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzZXNzaW9uID0gY29udGV4dC0+c3RvcmFnZVNl
c3Npb24oKSkKICAgICAgICAgcmV0dXJuIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PihBZG9wdENGLCB3a0NvcHlIVFRQQ29va2llU3RvcmFnZShzZXNzaW9uKSk7CiAKICNpZiBVU0Uo
Q0ZORVRXT1JLKQpAQCAtODEsMTUgKzgxLDcgQEAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGRlZmF1bAogICAgICAgICByZXR1cm4gb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIGlm
IChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHNlc3Npb24gPSBSZXNvdXJjZUhhbmRsZTo6ZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKCkpCi0gICAgICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4oQWRvcHRDRiwgd2tDb3B5SFRUUENvb2tpZVN0b3JhZ2Uoc2Vzc2lvbikpOwot
Ci0jaWYgVVNFKENGTkVUV09SSykKLSAgICByZXR1cm4gd2tHZXREZWZhdWx0SFRUUENvb2tpZVN0
b3JhZ2UoKTsKLSNlbHNlCi0gICAgLy8gV2hlbiB1c2luZyBOU1VSTENvbm5lY3Rpb24sIHdlIGFs
c28gdXNlIGl0cyBzaGFyZWQgY29va2llIHN0b3JhZ2UuCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYK
KyAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWZh
dWx0Q29va2llU3RvcmFnZSgpOwogfQogCiAjaWYgUExBVEZPUk0oV0lOKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZVN0b3JhZ2VD
Rk5ldC5oCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL0Nvb2tpZVN0b3JhZ2VDRk5ldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5
IEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1SZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoKTsgLy8gV2lsbCBiZSBudWxsIHdoZW4gdXNpbmcgc2hhcmVkIE5T
SFRUUENvb2tpZVN0b3JhZ2UuCitjbGFzcyBOZXR3b3JraW5nQ29udGV4dDsKKworUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKE5ldHdv
cmtpbmdDb250ZXh0Kik7IC8vIFdpbGwgYmUgbnVsbCB3aGVuIHVzaW5nIHNoYXJlZCBOU0hUVFBD
b29raWVTdG9yYWdlLgogUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGRlZmF1bHRD
RkhUVFBDb29raWVTdG9yYWdlKCk7IC8vIERvZXNuJ3QgdGFrZSBjdXJyZW50IHNlc3Npb24gaW50
byBhY2NvdW50LgogCiAjaWYgUExBVEZPUk0oV0lOKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3Bw
CShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcg
QEAgc3RhdGljIENGVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3QoQwogICAgICAgICAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBuZXdNZXRob2QgPSBhZG9wdENGKENGVVJMUmVxdWVzdENv
cHlIVFRQUmVxdWVzdE1ldGhvZChjZlJlcXVlc3QpKTsKICAgICAgICAgICAgIGlmIChDRlN0cmlu
Z0NvbXBhcmVXaXRoT3B0aW9ucyhsYXN0SFRUUE1ldGhvZC5nZXQoKSwgbmV3TWV0aG9kLmdldCgp
LCBDRlJhbmdlTWFrZSgwLCBDRlN0cmluZ0dldExlbmd0aChsYXN0SFRUUE1ldGhvZC5nZXQoKSkp
LCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSkgewogICAgICAgICAgICAgICAgIFJldGFpblB0
cjxDRk11dGFibGVVUkxSZXF1ZXN0UmVmPiBtdXRhYmxlUmVxdWVzdChBZG9wdENGLCBDRlVSTFJl
cXVlc3RDcmVhdGVNdXRhYmxlQ29weSgwLCBjZlJlcXVlc3QpKTsKLSAgICAgICAgICAgICAgICB3
a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbihSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFN0b3JhZ2VT
ZXNzaW9uKCksIG11dGFibGVSZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICB3a1NldFJl
cXVlc3RTdG9yYWdlU2Vzc2lvbihkLT5tX3N0b3JhZ2VTZXNzaW9uLCBtdXRhYmxlUmVxdWVzdC5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUFJlcXVlc3RNZXRob2Qo
bXV0YWJsZVJlcXVlc3QuZ2V0KCksIGxhc3RIVFRQTWV0aG9kLmdldCgpKTsKIAogICAgICAgICAg
ICAgICAgIEZvcm1EYXRhKiBib2R5ID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwQm9keSgp
OwpAQCAtMzk1LDcgKzM5NSw3IEBAIFJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQog
c3RhdGljIENGVVJMUmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCiB7CiAgICAgQ0ZNdXRhYmxl
VVJMUmVxdWVzdFJlZiBuZXdSZXF1ZXN0ID0gQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHko
a0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVxdWVzdC5jZlVSTFJlcXVlc3QoKSk7Ci0gICAgd2tTZXRS
ZXF1ZXN0U3RvcmFnZVNlc3Npb24oUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lv
bigpLCBuZXdSZXF1ZXN0KTsKKyAgICB3a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbihkLT5tX3N0
b3JhZ2VTZXNzaW9uLCBuZXdSZXF1ZXN0KTsKICAgICAKICAgICBpZiAoIXNob3VsZENvbnRlbnRT
bmlmZikKICAgICAgICAgd2tTZXRDRlVSTFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYobmV3UmVx
dWVzdCwgZmFsc2UpOwpAQCAtNTE1LDYgKzUxNSw4IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0
YXJ0KE5ldHdvcmtpbmdDb24KICAgICBpZiAoIWNvbnRleHQtPmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgZC0+bV9zdG9yYWdlU2Vzc2lvbiA9IGNvbnRleHQtPnN0b3Jh
Z2VTZXNzaW9uKCk7CisKICAgICBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlID0gIWNs
aWVudCgpIHx8IGNsaWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKTsKIAog
ICAgIGNyZWF0ZUNGVVJMQ29ubmVjdGlvbihzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgZC0+
bV9zaG91bGRDb250ZW50U25pZmYpOwpAQCAtNTY2LDcgKzU2OCw3IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OndpbGxTZW5kUmVxdWVzdChSZXMKICAgICAgICAgfQogICAgIH0KIAotICAgICByZXF1
ZXN0LnNldFN0b3JhZ2VTZXNzaW9uKFJlc291cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFnZVNlc3Np
b24oKSk7CisgICAgcmVxdWVzdC5zZXRTdG9yYWdlU2Vzc2lvbihkLT5tX3N0b3JhZ2VTZXNzaW9u
KTsKIAogICAgIGNsaWVudCgpLT53aWxsU2VuZFJlcXVlc3QodGhpcywgcmVxdWVzdCwgcmVkaXJl
Y3RSZXNwb25zZSk7CiB9CkBAIC03NDAsNyArNzQyLDkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6
bG9hZFJlc291cmNlU3luY2hybwogCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUg
PSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50LmdldCgpLCBmYWxz
ZSAvKmRlZmVyc0xvYWRpbmcqLywgdHJ1ZSAvKnNob3VsZENvbnRlbnRTbmlmZiovKSk7CiAKLSAg
ICBpZiAoY29udGV4dCAmJiBoYW5kbGUtPmQtPm1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9G
YWlsdXJlKSB7CisgICAgaGFuZGxlLT5kLT5tX3N0b3JhZ2VTZXNzaW9uID0gY29udGV4dC0+c3Rv
cmFnZVNlc3Npb24oKTsKKworICAgIGlmIChoYW5kbGUtPmQtPm1fc2NoZWR1bGVkRmFpbHVyZVR5
cGUgIT0gTm9GYWlsdXJlKSB7CiAgICAgICAgIGVycm9yID0gY29udGV4dC0+YmxvY2tlZEVycm9y
KHJlcXVlc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTM4LDg0ICs5NDIsNSBAQCB2
b2lkIFJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhQXJyYXkoQ0ZBCiB9CiAjZW5kaWYKIAotUmV0
YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IFJlc291cmNlSGFuZGxlOjpjcmVhdGVQcml2
YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKQotewotI2lm
IFBMQVRGT1JNKFdJTikKLSAgICByZXR1cm4gUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25S
ZWY+KEFkb3B0Q0YsIHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGlkZW50aWZpZXIsIGRl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpKSk7Ci0jZWxzZQotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZV
UkxTdG9yYWdlU2Vzc2lvblJlZj4oQWRvcHRDRiwgd2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Np
b24oaWRlbnRpZmllcikpOwotI2VuZGlmCi19Ci0KLUNGVVJMU3RvcmFnZVNlc3Npb25SZWYgUmVz
b3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpCi17Ci0gICAgaWYgKENGVVJMU3Rv
cmFnZVNlc3Npb25SZWYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uID0gcHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb24oKSkKLSAgICAgICAgcmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lvbjsKLSAg
ICByZXR1cm4gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8
Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4mIGRlZmF1bHRDRlVSTFN0b3JhZ2VTZXNzaW9uKCkKLXsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVm
Piwgc3RvcmFnZVNlc3Npb24sICgpKTsKLSAgICByZXR1cm4gc3RvcmFnZVNlc3Npb247Ci19Ci0K
LXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbihDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKQotewotICAgIGRlZmF1bHRDRlVSTFN0b3JhZ2VT
ZXNzaW9uKCkgPSBzdG9yYWdlU2Vzc2lvbjsKLX0KLQotQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBS
ZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkKLXsKLSAgICByZXR1cm4gZGVm
YXVsdENGVVJMU3RvcmFnZVNlc3Npb24oKS5nZXQoKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxD
RlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkKLXsKLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiwgc3Rv
cmFnZVNlc3Npb24sICgpKTsKLSAgICByZXR1cm4gc3RvcmFnZVNlc3Npb247Ci19Ci0KLXN0YXRp
YyBTdHJpbmcmIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYXNlLCAoKSk7Ci0gICAgcmV0dXJu
IGJhc2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQotewotICAgIGlmICghZW5hYmxlZCkgewotICAgICAgICBwcml2YXRl
U3RvcmFnZVNlc3Npb24oKSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAocHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0
cmluZyBiYXNlID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZSgp
LmlzTnVsbCgpID8gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyRGVmYXVs
dEJhc2UoKSA6IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKTsK
LSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IFN0cmluZyhiYXNlICsg
Ii5Qcml2YXRlQnJvd3NpbmciKS5jcmVhdGVDRlN0cmluZygpOwotCi0gICAgcHJpdmF0ZVN0b3Jh
Z2VTZXNzaW9uKCkgPSBjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihjZklkZW50
aWZpZXIuZ2V0KCkpOwotfQotCi1DRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJlc291cmNlSGFuZGxl
Ojpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpCi17Ci0gICAgcmV0dXJuIHByaXZhdGVT
dG9yYWdlU2Vzc2lvbigpLmdldCgpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpzZXRQcml2
YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllcikKLXsKLSAgICBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJC
YXNlKCkgPSBpZGVudGlmaWVyOwotfQotCi0jaWYgUExBVEZPUk0oV0lOKSB8fCBVU0UoQ0ZORVRX
T1JLKQotCi1TdHJpbmcgUmVzb3VyY2VIYW5kbGU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNz
aW9uSWRlbnRpZmllckRlZmF1bHRCYXNlKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtl
eShDRkJ1bmRsZUdldE1haW5CdW5kbGUoKSwga0NGQnVuZGxlSWRlbnRpZmllcktleSkpKTsKLX0K
LQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENG
TmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNiw3ICsxMzYsNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRh
dGVQbGF0Zm9ybVJlCiAgICAgICAgIENGVVJMUmVxdWVzdFNldFRpbWVvdXRJbnRlcnZhbChjZlJl
cXVlc3QsIHRpbWVvdXRJbnRlcnZhbCgpKTsKICAgICB9IGVsc2UKICAgICAgICAgY2ZSZXF1ZXN0
ID0gQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZSgwLCB1cmwuZ2V0KCksIChDRlVSTFJlcXVlc3RD
YWNoZVBvbGljeSljYWNoZVBvbGljeSgpLCB0aW1lb3V0SW50ZXJ2YWwoKSwgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMuZ2V0KCkpOwotICAgIHdrU2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9uKFJlc291cmNl
SGFuZGxlOjpjdXJyZW50U3RvcmFnZVNlc3Npb24oKSwgY2ZSZXF1ZXN0KTsKIAogICAgIENGVVJM
UmVxdWVzdFNldEhUVFBSZXF1ZXN0TWV0aG9kKGNmUmVxdWVzdCwgaHR0cE1ldGhvZCgpLmNyZWF0
ZUNGU3RyaW5nKCkuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL21hYy9Db29raWVKYXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2UuaCIKICNp
bXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgogI2ltcG9ydCAiS1VSTC5oIgorI2ltcG9ydCAi
TmV0d29ya2luZ0NvbnRleHQuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUsNyArNjYsNyBAQCBTdHJpbmcgY29va2llc0Zv
ckRPTShOZXR3b3JraW5nQ29udGV4dCogCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogCi0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3Jh
Z2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoY29u
dGV4dCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIE5TQXJyYXkgKmNvb2tp
ZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCk7CiAgICAg
cmV0dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpmaWx0
ZXJDb29raWVzKGNvb2tpZXMpLmdldCgpXSBvYmplY3RGb3JLZXk6QCJDb29raWUiXTsKIApAQCAt
NzcsNyArNzgsNyBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0CiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOwogICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNv
b2tpZVN0b3JhZ2UuZ2V0KCksIHVybCk7CiAgICAgcmV0dXJuIFtbTlNIVFRQQ29va2llIHJlcXVl
c3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpjb29raWVzXSBvYmplY3RGb3JLZXk6QCJDb29raWUi
XTsKIApAQCAtMTAyLDcgKzEwMyw3IEBAIHZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29ya2lu
Z0NvbnRleHQKICAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29raWVzID0gZmlsdGVy
Q29va2llcyhbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHM6W05T
RGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcgZm9yS2V5OkAiU2V0
LUNvb2tpZSJdIGZvclVSTDpjb29raWVVUkxdKTsKICAgICBBU1NFUlQoW2ZpbHRlcmVkQ29va2ll
cy5nZXQoKSBjb3VudF0gPD0gMSk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZShjb250ZXh0KSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAg
ICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCBmaWx0ZXJlZENv
b2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eSk7CiAKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwpAQCAtMTEyLDcgKzExMyw3IEBAIGJvb2wgY29va2llc0VuYWJsZWQoTmV0
d29ya2luZ0NvbnRleHQqIGMKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAK
LSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNv
bnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KSA6
IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgTlNIVFRQQ29va2llQWNjZXB0UG9s
aWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IHN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBv
bGljeT4od2tHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCkpKTsK
ICAgICByZXR1cm4gY29va2llQWNjZXB0UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGlj
eUFsd2F5cyB8fCBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5
T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAKQEAgLTEyNSw3ICsxMjYsNyBAQCBib29sIGdl
dFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvCiAgICAgcmF3Q29va2llcy5jbGVhcigp
OwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJl
dGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRleHQpIDogZGVmYXVsdENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKICAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChj
b29raWVTdG9yYWdlLmdldCgpLCB1cmwpOwogICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2ll
cyBjb3VudF07CiAgICAgcmF3Q29va2llcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwpAQCAtMTQ1
LDcgKzE0Niw3IEBAIHZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBjb24KICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBOU1VSTCAqY29va2llVVJMID0g
dXJsOwotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdl
ID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
b29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRl
eHQpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBOU0FycmF5ICpjb29raWVz
ID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWVVUkwpOwog
CiAgICAgTlNTdHJpbmcgKmNvb2tpZU5hbWVTdHJpbmcgPSBjb29raWVOYW1lOwpAQCAtMTY0LDcg
KzE2NSw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0MKIHsKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29v
a2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9y
YWdlKCk7CiAgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMoY29va2llU3RvcmFn
ZS5nZXQoKSk7CiAgICAgCiAgICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVz
KQpAQCAtMTc3LDcgKzE3OCw3IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdv
cmtpbmcKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsK
KyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNv
bnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KSA6IGRlZmF1bHRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CiAgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMo
Y29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgaWYgKCFjb29raWVzKQogICAgICAgICByZXR1cm47
CkBAIC0xOTIsNyArMTkzLDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29y
a2luZwogCiB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQp
CiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2Ug
PSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBD
b29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoY29udGV4
dCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIHdrRGVsZXRlQWxsSFRUUENv
b2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCShy
ZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9S
ZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQzLDMyICsxNDMsMjIgQEAg
UmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCiAgICAgTE9HKE5ldHdvcmssICJIYW5k
bGUgJXAgZGVzdHJveWVkIiwgdGhpcyk7CiB9CiAKLXN0YXRpYyBib29sIHNob3VsZFJlbGF4VGhp
cmRQYXJ0eUNvb2tpZVBvbGljeShjb25zdCBLVVJMJiB1cmwpCitzdGF0aWMgYm9vbCBzaG91bGRS
ZWxheFRoaXJkUGFydHlDb29raWVQb2xpY3koTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEtVUkwmIHVybCkKIHsKICAgICAvLyBJZiBhIFVSTCBhbHJlYWR5IGhhcyBjb29raWVzLCB0
aGVuIHdlJ2xsIHJlbGF4IHRoZSAzcmQgcGFydHkgY29va2llIHBvbGljeSBhbmQgYWNjZXB0IG5l
dyBjb29raWVzLgogCi0gICAgTlNIVFRQQ29va2llU3RvcmFnZSAqc2hhcmVkU3RvcmFnZSA9IFtO
U0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXTsKLQotICAgIE5TSFRU
UENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3k7Ci0gICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNmQ29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCk7Ci0gICAgaWYgKGNmQ29va2llU3RvcmFnZSkKLSAgICAgICAgY29va2llQWNj
ZXB0UG9saWN5ID0gc3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pih3a0dldEhU
VFBDb29raWVBY2NlcHRQb2xpY3koY2ZDb29raWVTdG9yYWdlLmdldCgpKSk7Ci0gICAgZWxzZQot
ICAgICAgICBjb29raWVBY2NlcHRQb2xpY3kgPSBbc2hhcmVkU3RvcmFnZSBjb29raWVBY2NlcHRQ
b2xpY3ldOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0
b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KTsKKyAgICBOU0hUVFBD
b29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nhc3Q8TlNIVFRQ
Q29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY2ZDb29raWVT
dG9yYWdlLmdldCgpKSk7CiAKICAgICBpZiAoY29va2llQWNjZXB0UG9saWN5ICE9IE5TSFRUUENv
b2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBOU0FycmF5ICpjb29raWVzOwotICAgIGlmIChjZkNvb2tpZVN0b3Jh
Z2UpCi0gICAgICAgIGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNmQ29va2llU3RvcmFn
ZS5nZXQoKSwgdXJsKTsKLSAgICBlbHNlCi0gICAgICAgIGNvb2tpZXMgPSBbc2hhcmVkU3RvcmFn
ZSBjb29raWVzRm9yVVJMOnVybF07CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tp
ZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdldCgpLCB1cmwpOwogCiAgICAgcmV0dXJuIFtjb29r
aWVzIGNvdW50XTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25uZWN0
aW9uKGlkIGRlbGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sIHNo
b3VsZENvbnRlbnRTbmlmZikKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVj
dGlvbihpZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbCBz
aG91bGRSZWxheFRoaXJkUGFydHlDb29raWVQb2xpY3ksIGJvb2wgc2hvdWxkQ29udGVudFNuaWZm
KQogewogICAgIC8vIENyZWRlbnRpYWxzIGZvciBmdHAgY2FuIG9ubHkgYmUgcGFzc2VkIGluIFVS
TCwgdGhlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOiBkZWxl
Z2F0ZSBjYWxsIHdvbid0IGJlIG1hZGUuCiAgICAgaWYgKCghZC0+bV91c2VyLmlzRW1wdHkoKSB8
fCAhZC0+bV9wYXNzLmlzRW1wdHkoKSkgJiYgIWZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29s
SXNJbkhUVFBGYW1pbHkoKSkgewpAQCAtMTc4LDcgKzE2OCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGkKICAgICAgICAgZmlyc3RSZXF1ZXN0KCkuc2V0VVJMKHVy
bFdpdGhDcmVkZW50aWFscyk7CiAgICAgfQogCi0gICAgaWYgKHNob3VsZFJlbGF4VGhpcmRQYXJ0
eUNvb2tpZVBvbGljeShmaXJzdFJlcXVlc3QoKS51cmwoKSkpCisgICAgaWYgKHNob3VsZFJlbGF4
VGhpcmRQYXJ0eUNvb2tpZVBvbGljeSkKICAgICAgICAgZmlyc3RSZXF1ZXN0KCkuc2V0Rmlyc3RQ
YXJ0eUZvckNvb2tpZXMoZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogCiAgICAgaWYgKHNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlICYmIGZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkgewpAQCAtMjEzLDggKzIwMyw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNy
ZWF0ZU5TVVJMQ29ubmVjdGkKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1NldHRpbmdDb25uZWN0
aW9uUHJvcGVydGllcyA9IFtOU1VSTENvbm5lY3Rpb24gaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0
b3I6QHNlbGVjdG9yKF9pbml0V2l0aFJlcXVlc3Q6ZGVsZWdhdGU6dXNlc0NhY2hlOm1heENvbnRl
bnRMZW5ndGg6c3RhcnRJbW1lZGlhdGVseTpjb25uZWN0aW9uUHJvcGVydGllczopXTsKICNlbmRp
ZgogCi0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24gPSBjdXJy
ZW50U3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAgbnNSZXF1ZXN0ID0gW3drQ29weVJlcXVlc3RX
aXRoU3RvcmFnZVNlc3Npb24oc3RvcmFnZVNlc3Npb24sIG5zUmVxdWVzdCkgYXV0b3JlbGVhc2Vd
OworICAgIGlmIChkLT5tX3N0b3JhZ2VTZXNzaW9uKQorICAgICAgICBuc1JlcXVlc3QgPSBbd2tD
b3B5UmVxdWVzdFdpdGhTdG9yYWdlU2Vzc2lvbihkLT5tX3N0b3JhZ2VTZXNzaW9uLmdldCgpLCBu
c1JlcXVlc3QpIGF1dG9yZWxlYXNlXTsKIAogICAgIGlmIChzdXBwb3J0c1NldHRpbmdDb25uZWN0
aW9uUHJvcGVydGllcykgewogICAgICAgICBOU0RpY3Rpb25hcnkgKnNlc3Npb25JRCA9IHNob3Vs
ZFVzZUNyZWRlbnRpYWxTdG9yYWdlID8gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5XSA6IFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6QCJXZWJLaXRQcml2YXRlU2Vzc2lvbiIgZm9y
S2V5OkAiX2tDRlVSTENvbm5lY3Rpb25TZXNzaW9uSUQiXTsKQEAgLTI0MCw2ICsyMzAsOCBAQCBi
b29sIFJlc291cmNlSGFuZGxlOjpzdGFydChOZXR3b3JraW5nQ29uCiAgICAgaWYgKCFjb250ZXh0
LT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGQtPm1fc3RvcmFnZVNl
c3Npb24gPSBjb250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpOworCiAgICAgQVNTRVJUKCFkLT5tX3By
b3h5KTsKICAgICBkLT5tX3Byb3h5LmFkb3B0TlMod2tDcmVhdGVOU1VSTENvbm5lY3Rpb25EZWxl
Z2F0ZVByb3h5KCkpOwogICAgIFtzdGF0aWNfY2FzdDxXZWJDb3JlTlNVUkxDb25uZWN0aW9uRGVs
ZWdhdGVQcm94eSo+KGQtPm1fcHJveHkuZ2V0KCkpIHNldERlbGVnYXRlOlJlc291cmNlSGFuZGxl
OjpkZWxlZ2F0ZSgpXTsKQEAgLTI1MSw2ICsyNDMsNyBAQCBib29sIFJlc291cmNlSGFuZGxlOjpz
dGFydChOZXR3b3JraW5nQ29uCiAgICAgY3JlYXRlTlNVUkxDb25uZWN0aW9uKAogICAgICAgICBk
LT5tX3Byb3h5LmdldCgpLAogICAgICAgICBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwKKyAg
ICAgICAgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llUG9saWN5KGNvbnRleHQsIGZpcnN0UmVx
dWVzdCgpLnVybCgpKSwKICAgICAgICAgZC0+bV9zaG91bGRDb250ZW50U25pZmYgfHwgY29udGV4
dC0+bG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpKTsKIAogICAgIGJvb2wgc2NoZWR1
bGVkID0gZmFsc2U7CkBAIC00MDMsNiArMzk2LDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9h
ZFJlc291cmNlU3luY2hybwogCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBh
ZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50LmdldCgpLCBmYWxzZSAv
KmRlZmVyc0xvYWRpbmcqLywgdHJ1ZSAvKnNob3VsZENvbnRlbnRTbmlmZiovKSk7CiAKKyAgICBo
YW5kbGUtPmQtPm1fc3RvcmFnZVNlc3Npb24gPSBjb250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpOwor
CiAgICAgaWYgKGNvbnRleHQgJiYgaGFuZGxlLT5kLT5tX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9
IE5vRmFpbHVyZSkgewogICAgICAgICBlcnJvciA9IGNvbnRleHQtPmJsb2NrZWRFcnJvcihyZXF1
ZXN0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDExLDcgKzQwNiw4IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm8KICAgICBoYW5kbGUtPmNyZWF0ZU5TVVJMQ29ubmVj
dGlvbigKICAgICAgICAgaGFuZGxlLT5kZWxlZ2F0ZSgpLCAvLyBBIHN5bmNocm9ub3VzIHJlcXVl
c3QgY2Fubm90IHR1cm4gaW50byBhIGRvd25sb2FkLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHBy
b3h5IHRoZSBkZWxlZ2F0ZS4KICAgICAgICAgc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9y
ZWRDcmVkZW50aWFscywKLSAgICAgICAgaGFuZGxlLT5zaG91bGRDb250ZW50U25pZmYoKSB8fCAo
Y29udGV4dCAmJiBjb250ZXh0LT5sb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkpKTsK
KyAgICAgICAgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llUG9saWN5KGNvbnRleHQsIHJlcXVl
c3QudXJsKCkpLAorICAgICAgICBoYW5kbGUtPnNob3VsZENvbnRlbnRTbmlmZigpIHx8IGNvbnRl
eHQtPmxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSk7CiAKICAgICBbaGFuZGxlLT5j
b25uZWN0aW9uKCkgc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBjdXJyZW50UnVuTG9vcF0g
Zm9yTW9kZTooTlNTdHJpbmcgKilzeW5jaHJvbm91c0xvYWRSdW5Mb29wTW9kZSgpXTsKICAgICBb
aGFuZGxlLT5jb25uZWN0aW9uKCkgc3RhcnRdOwpAQCAtNDc2LDggKzQ3Miw4IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OndpbGxTZW5kUmVxdWVzdChSZXMKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uID0gY3VycmVudFN0b3Jh
Z2VTZXNzaW9uKCkpCi0gICAgICAgIHJlcXVlc3Quc2V0U3RvcmFnZVNlc3Npb24oc3RvcmFnZVNl
c3Npb24pOworICAgIGlmIChkLT5tX3N0b3JhZ2VTZXNzaW9uKQorICAgICAgICByZXF1ZXN0LnNl
dFN0b3JhZ2VTZXNzaW9uKGQtPm1fc3RvcmFnZVNlc3Npb24uZ2V0KCkpOwogCiAgICAgY2xpZW50
KCktPndpbGxTZW5kUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKIH0K
QEAgLTYyMywxMSArNjE5LDYgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxs
YXRpbwogICAgICAgICBjbGllbnQoKS0+cmVjZWl2ZWRDYW5jZWxsYXRpb24odGhpcywgY2hhbGxl
bmdlKTsKIH0KIAotU3RyaW5nIFJlc291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdl
U2Vzc2lvbklkZW50aWZpZXJEZWZhdWx0QmFzZSgpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhbW05T
QnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiBAaW1wbGVtZW50YXRpb24gV2ViQ29yZVJlc291cmNlSGFuZGxlQXNEZWxl
Z2F0ZQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdv
cmtpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgJKHJldmlzaW9uIDEzNDY4NykKKysrIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFs
IGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0
dWFsIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbigpIGNv
bnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgTlNPcGVyYXRpb25RdWV1ZSAqc2NoZWR1bGVkT3Bl
cmF0aW9uUXVldWUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291
cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNv
bnN0IE9WRVJSSURFOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCShyZXZpc2lvbiAx
MzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDEyIEBAIGJvb2wgUmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmxvY2FsRmlsZUMKICAgICByZXR1cm4gbV9sb2NhbEZpbGVD
b250ZW50U25pZmZpbmdFbmFibGVkOwogfQogCitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJlbW90
ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbigpIGNvbnN0Cit7CisgICAgLy8gRklY
TUUgKE5ldHdvcmtQcm9jZXNzKTogSW1wbGVtZW50LgorICAgIHJldHVybiAwOworfQorCiBOU09w
ZXJhdGlvblF1ZXVlICpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6c2NoZWR1bGVkT3BlcmF0aW9u
UXVldWUoKSBjb25zdAogewogICAgIHN0YXRpYyBOU09wZXJhdGlvblF1ZXVlICpxdWV1ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTAzNSw2ICsxMDM1LDcgQEAKIAkJ
RTFCNzg0NzMxNjNGMjUzRTAwMDdCNjkyIC8qIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCNzg0NzIxNjNG
MjUzRTAwMDdCNjkyIC8qIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tICovOyB9OwogCQlFMUND
MUI5MDEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNDMUI4RTEyRDdFQURGMDA2MjU4MzggLyogUHJp
bnRJbmZvLmggKi87IH07CiAJCUUxQ0MxQjkxMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm9N
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUND
MUI4RjEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvTWFjLm1tICovOyB9OworCQlFMUQyMjk3
MTE2NTJEQzUyMDBCQUE0QkQgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFEMjI5NkUxNjUyREI5QzAw
QkFBNEJEIC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llc01hYy5tbSAqLzsgfTsKIAkJRTFFREZEQTYx
NjI4ODY4RTAwMzlFQ0RBIC8qIE1haW5NYWNQcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNkZBMzEwMTFFMzkyMUUwMERCMTM3MSAvKiBN
YWluTWFjUHJvY2Vzcy5jcHAgKi87IH07CiAJCUUxRURGREE3MTYyODg2OTYwMDM5RUNEQSAvKiBT
aGFyZWRXb3JrZXJQcm9jZXNzTWFpbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxRURGRDlCMTYyODdEMEIwMDM5RUNEQSAvKiBTaGFyZWRXb3Jr
ZXJQcm9jZXNzTWFpbk1hYy5tbSAqLzsgfTsKIAkJRTFFREZEQTgxNjI4ODY5OTAwMzlFQ0RBIC8q
IFNoYXJlZFdvcmtlclByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMUVERkRBMjE2Mjg4MzhDMDAzOUVDREEgLyogU2hhcmVkV29ya2Vy
UHJvY2Vzc01hYy5tbSAqLzsgfTsKQEAgLTIzMjUsNiArMjMyNiw3IEBACiAJCUUxQjc4NDcyMTYz
RjI1M0UwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUNDMUI4RTEyRDdFQURGMDA2MjU4MzggLyog
UHJpbnRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW50SW5mby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUNDMUI4RjEyRDdFQURGMDA2MjU4Mzgg
LyogUHJpbnRJbmZvTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gUHJpbnRJbmZvTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUQyMjk2
RTE2NTJEQjlDMDBCQUE0QkQgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUGxhdGZvcm1TdHJhdGVnaWVzTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUVERkQ5ODE2Mjg3QkQxMDAzOUVD
REEgLyogU2hhcmVkV29ya2VyUHJvY2Vzc01haW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2hhcmVkV29ya2VyUHJvY2Vzc01haW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTFFREZEOUIxNjI4N0QwQjAwMzlFQ0RBIC8qIFNoYXJlZFdvcmtlclByb2Nlc3NN
YWluTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2hhcmVk
V29ya2VyUHJvY2Vzc01haW5NYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
RURGRDlEMTYyODdGMTkwMDM5RUNEQSAvKiBTaGFyZWRXb3JrZXJQcm9jZXNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFdvcmtlclByb2Nlc3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3MDYsNiArMzcwOCw3IEBACiAJCQkJQkMxMTFBREYxMTJG
NUJDMjAwMzM3QkFCIC8qIFdlYkVycm9yc01hYy5tbSAqLywKIAkJCQk5MzkxRjI4MzEyMUIzOEY1
MDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oICovLAogCQkJCTkzOTFGMjg0
MTIxQjM4RjUwMEVCRjdFOCAvKiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tICovLAorCQkJ
CUUxRDIyOTZFMTY1MkRCOUMwMEJBQTRCRCAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXNNYWMubW0g
Ki8sCiAJCQkJQkNDNDNBQzYxMjdCOTlERTAwMzE3RjE2IC8qIFdlYlBvcHVwTWVudU1hYy5tbSAq
LywKIAkJCQlCQ0M1NzE1OTExNUFEQUVGMDAxQ0NBRjkgLyogV2ViU3lzdGVtSW50ZXJmYWNlLmgg
Ki8sCiAJCQkJQkNDNTcxNUExMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5t
bSAqLywKQEAgLTU5MzAsNiArNTkzMyw3IEBACiAJCQkJNTEyMTc0NjAxNjRDMjBFMzAwMzdBNUMx
IC8qIFNoYXJlYWJsZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMjE3NDY0MTY0
QzIxMzcwMDM3QTVDMSAvKiBXZWJSZXNvdXJjZUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQUYxQUM2QjE2NTE3NTlFMDBDMTdEN0YgLyogUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24u
bW0gaW4gU291cmNlcyAqLywKKwkJCQlFMUQyMjk3MTE2NTJEQzUyMDBCQUE0QkQgLyogV2ViUGxh
dGZvcm1TdHJhdGVnaWVzTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBM0Q3NUIxNjUxQjQ0
RjAwODcxM0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QUEzRDc2MTE2NTFCN0QzMDA4NzEzRDAgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdE1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUZEMThCNTE2NTFGQkFEMDBEQkUxQ0UgLyog
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVk
ZSAiV2ViRGF0YWJhc2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRl
ICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25N
YW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiV2ViTWVkaWFDYWNoZU1hbmFnZXIuaCIKQEAgLTI4MCw3ICsyODEsNyBAQCB2
b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKGNvCiAKICNpZiBQTEFURk9STShN
QUMpIHx8IFVTRShDRk5FVFdPUkspCiAgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogU2Vu
ZCB0aGlzIGlkZW50aWZpZXIgdG8gbmV0d29yayBwcm9jZXNzLgotICAgIFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNl
KHBhcmFtZXRlcnMudWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcik7CisgICAgV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dDo6c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVy
QmFzZShwYXJhbWV0ZXJzLnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIpOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQko
cmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL21h
Yy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBA
CiAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiV2ViQ29va2llTWFuYWdlci5oIgotI2lt
cG9ydCA8V2ViQ29yZS9Db29raWVTdG9yYWdlQ0ZOZXQuaD4KLSNpbXBvcnQgPFdlYktpdFN5c3Rl
bUludGVyZmFjZS5oPgorCisjaW1wb3J0ICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zNCwxMCArMzQsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCiB7Ci0gICAgW1tOU0hU
VFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVBY2NlcHRQ
b2xpY3k6c3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pihwb2xpY3kpXTsKLQot
ICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCi0gICAgICAgIFdLU2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpLCBwb2xpY3kpOworICAgIFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OnNldENvb2tpZUFjY2VwdFBvbGljeUZvckFsbENvbnRleHRzKHBvbGlj
eSk7CiB9CiAKIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZv
cm1HZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
CShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBA
QAogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkRhdGFi
YXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQ
cmVmZXJlbmNlc1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgpAQCAtMjY4LDYgKzI2
OSwxMiBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRKYXZhU2NyaXB0Q2FuQWNjCiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoV2ViUGFnZUdyb3VwUHJv
eHkqIHBhZ2VHcm91cCwgYm9vbCBlbmFibGVkKQogeworI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNF
KENGTkVUV09SSykKKyAgICBpZiAoZW5hYmxlZCkKKyAgICAgICAgV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpOworICAgIGVsc2UKKyAgICAg
ICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZGVzdHJveVByaXZhdGVCcm93c2luZ1Nlc3Np
b24oKTsKKyNlbmRpZgogICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IFBhZ2VHcm91
cDo6cGFnZUdyb3VwKHBhZ2VHcm91cC0+aWRlbnRpZmllcigpKS0+cGFnZXMoKTsKICAgICBmb3Ig
KEhhc2hTZXQ8UGFnZSo+OjppdGVyYXRvciBpdGVyID0gcGFnZXMuYmVnaW4oKTsgaXRlciAhPSBw
YWdlcy5lbmQoKTsgKytpdGVyKQogICAgICAgICAoKml0ZXIpLT5zZXR0aW5ncygpLT5zZXRQcml2
YXRlQnJvd3NpbmdFbmFibGVkKGVuYWJsZWQpOwpAQCAtMjg0LDEwICsyOTEsOCBAQCB2b2lkIElu
amVjdGVkQnVuZGxlOjpzZXRQb3B1cEJsb2NraW5nRW5hCiB2b2lkIEluamVjdGVkQnVuZGxlOjpz
d2l0Y2hOZXR3b3JrTG9hZGVyVG9OZXdUZXN0aW5nU2Vzc2lvbigpCiB7CiAjaWYgUExBVEZPUk0o
TUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQotICAgIC8vIFNldCBhIHByaXZhdGUgc2Vzc2lvbiBmb3Ig
dGVzdGluZyB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGdsb2JhbCBjb29raWVzLiBUaGlzIHNo
b3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb24uCiAgICAgLy8g
RklYTUUgKE5ldHdvcmtQcm9jZXNzKTogRG8gdGhpcyBpbiBuZXR3b3JrIHByb2Nlc3MsIHRvby4K
LSAgICBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gc2Vzc2lvbiA9IFJlc291cmNl
SGFuZGxlOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlNUUigiUHJpdmF0
ZSBXZWJLaXQgU2Vzc2lvbiIpKTsKLSAgICBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uKHNlc3Npb24uZ2V0KCkpOworICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6
OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDExIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybVBhc3RlYm9hcmQuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogCisjaWYgUExB
VEZPUk0oV0lOKQorI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNs
dWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5k
aWYKKwogI2lmIFVTRShDRikKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKQEAg
LTEwMSw2ICsxMDYsMTYgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Om5vdGlmeUNvb2tp
ZQogICAgIFdlYkNvb2tpZU1hbmFnZXI6OnNoYXJlZCgpLmRpc3BhdGNoQ29va2llc0RpZENoYW5n
ZSgpOwogfQogCisjaWYgUExBVEZPUk0oV0lOKQorUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVmYXVsdENvb2tpZVN0b3JhZ2UoKQorewor
ICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHNlc3Npb24gPSBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0OjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSkKKyAgICAgICAgcmV0dXJuIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPihBZG9wdENGLCBXS0NvcHlIVFRQQ29va2llU3Rv
cmFnZShzZXNzaW9uKSk7CisKKyAgICByZXR1cm4gV0tHZXREZWZhdWx0SFRUUENvb2tpZVN0b3Jh
Z2UoKTsKK30KKyNlbmRpZgorCiAvLyBMb2FkZXJTdHJhdGVneQogCiAjaWYgRU5BQkxFKE5FVFdP
UktfUFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNp
b24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOSBAQCBw
cml2YXRlOgogCiAgICAgLy8gV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCB2
b2lkIG5vdGlmeUNvb2tpZXNDaGFuZ2VkKCkgT1ZFUlJJREU7CisjaWYgUExBVEZPUk0oTUFDKSB8
fCBVU0UoQ0ZORVRXT1JLKQorICAgIHZpcnR1YWwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGRlZmF1bHRDb29raWVTdG9yYWdlKCkgT1ZFUlJJREU7CisjZW5kaWYKIAogICAgIC8v
IFdlYkNvcmU6OkxvYWRlclN0cmF0ZWd5CiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgJKHJldmlz
aW9uIDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
bWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMzEg
KzIwLDM1IEBACiAjaWZuZGVmIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHRfaAogI2RlZmluZSBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0X2gKIAorI2luY2x1ZGUgIkhUVFBDb29raWVBY2NlcHRQ
b2xpY3kuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgotCi0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
TmV0d29ya2luZ0NvbnRleHQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7CisjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZU5ldHdvcmtpbmdDb250ZXh0Lmg+CiAKIGNsYXNzIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQgOiBwdWJsaWMgV2ViQ29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dD4gY3Jl
YXRlKFdlYkZyYW1lKiBmcmFtZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0PiBjcmVhdGUoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUpCiAgICAgewogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoZnJhbWUp
KTsKICAgICB9CiAKKyAgICBzdGF0aWMgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIHN3aXRj
aFRvTmV3VGVzdGluZ1Nlc3Npb24oKTsKKyAgICBzdGF0aWMgdm9pZCBlbnN1cmVQcml2YXRlQnJv
d3NpbmdTZXNzaW9uKCk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveVByaXZhdGVCcm93c2luZ1Nl
c3Npb24oKTsKKyAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBkZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxD
b250ZXh0cyhXZWJLaXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kpOworCiBwcml2YXRlOgotICAg
IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoV2ViRnJhbWUqIGZyYW1lKQorICAgIFdlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUpCiAgICAgICAgIDogV2Vi
Q29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dChmcmFtZS0+Y29yZUZyYW1lKCkpCiAgICAgewog
ICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hlZHVsZWRS
dW5Mb29wUGFpcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3Ig
YmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgYm9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNz
aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY2hlZHVsZVBhaXJI
YXNoU2V0KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpIGNvbnN0IE9WRVJSSURFOwogfTsKIAotfQotCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNp
b24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICAgIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDE0ICsyMSwx
OCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0LmgiCiAKKyNpbXBvcnQgPFdlYkNvcmUvQ29va2llU3RvcmFnZUNGTmV0Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0
aW5ncy5oPgorI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAotbmFtZXNwYWNlIFdlYktp
dCB7CitzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lv
bjsKK3N0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uOwogCiBib29sIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6Om5lZWRzU2l0ZVNwZWNp
ZmljUXVpcmtzKCkgY29uc3QKIHsKQEAgLTQ5LDQgKzU0LDc1IEBAIFJlc291cmNlRXJyb3IgV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dDoKICAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNs
aWVudCgpLT5ibG9ja2VkRXJyb3IocmVxdWVzdCk7CiB9CiAKK3N0YXRpYyBTdHJpbmcmIHByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhc2UsICgp
KTsKKyAgICByZXR1cm4gYmFzZTsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
OjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllcikKK3sKKyAgICBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklk
ZW50aWZpZXJCYXNlKCkgPSBpZGVudGlmaWVyOworfQorCit2b2lkIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ6OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKQoreworICAgIC8vIFNldCBhIHBy
aXZhdGUgc2Vzc2lvbiBmb3IgdGVzdGluZyB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGdsb2Jh
bCBjb29raWVzLiBUaGlzIHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBwcml2YXRlIGJyb3dzaW5n
IHNlc3Npb24uCisgICAgaWYgKGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uKQorICAgICAgICBDRlJl
bGVhc2UoZGVmYXVsdENGU3RvcmFnZVNlc3Npb24pOworICAgIGRlZmF1bHRDRlN0b3JhZ2VTZXNz
aW9uID0gV0tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oQ0ZTVFIoIlByaXZhdGUgV2ViS2l0
IFNlc3Npb24iKSk7Cit9CisKK3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJl
UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pCisgICAgICAgIHJldHVybjsK
KworICAgIFN0cmluZyBiYXNlID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlm
aWVyQmFzZSgpLmlzTnVsbCgpID8gU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxl
SWRlbnRpZmllcl0pIDogcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFz
ZSgpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gU3RyaW5nKGJh
c2UgKyAiLlByaXZhdGVCcm93c2luZyIpLmNyZWF0ZUNGU3RyaW5nKCk7CisKKyAgICBwcml2YXRl
QnJvd3NpbmdTdG9yYWdlU2Vzc2lvbiA9IFdLQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGNm
SWRlbnRpZmllci5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6
ZGVzdHJveVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKQoreworICAgIGlmICghcHJpdmF0ZUJyb3dz
aW5nU3RvcmFnZVNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIENGUmVsZWFzZShwcml2
YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbik7CisgICAgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNl
c3Npb24gPSAwOworfQorCitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpCit7CisgICAgcmV0dXJuIGRlZmF1bHRD
RlN0b3JhZ2VTZXNzaW9uOworfQorCitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKK3sKKyAgICBib29sIHByaXZh
dGVCcm93c2luZ0VuYWJsZWQgPSBmcmFtZSgpICYmIGZyYW1lKCktPnNldHRpbmdzKCkgJiYgZnJh
bWUoKS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworICAgIGlmIChwcml2
YXRlQnJvd3NpbmdFbmFibGVkKSB7CisgICAgICAgIEFTU0VSVChwcml2YXRlQnJvd3NpbmdTdG9y
YWdlU2Vzc2lvbik7CisgICAgICAgIHJldHVybiBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lv
bjsKKyAgICB9CisgICAgcmV0dXJuIGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uOworfQorCit2b2lk
IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENvb2tpZUFjY2VwdFBvbGljeUZvckFsbENv
bnRleHRzKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQoreworICAgIFtbTlNIVFRQQ29v
a2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llQWNjZXB0UG9saWN5
OnN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4ocG9saWN5KV07CisKKyAgICBp
ZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBkZWZh
dWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpKSB7CisgICAgQ0ZTaG93KGNvb2tpZVN0b3JhZ2UuZ2V0
KCkpOworICAgIHByaW50ZigiV0tTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5IGZvciBkZWZhdWx0
IHN0b3JhZ2UgJXAsICVkXG4iLCBjb29raWVTdG9yYWdlLmdldCgpLCBwb2xpY3kpOworICAgICAg
ICBXS1NldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQoKSwgcG9saWN5
KTsKKyAgICB9CisKKyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pIHsKKyAg
ICAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IHByaXZhdGVCcm93c2luZ0Nv
b2tpZVN0b3JhZ2UgPSBhZG9wdENGKFdLQ29weUhUVFBDb29raWVTdG9yYWdlKHByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uKSk7CisgICAgcHJpbnRmKCJXS1NldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3kgJXAsICVkXG4iLCBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlLmdldCgpLCBwb2xp
Y3kpOworICAgICAgICBXS1NldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocHJpdmF0ZUJyb3dzaW5n
Q29va2llU3RvcmFnZS5nZXQoKSwgcG9saWN5KTsKKyAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXNN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViUGxhdGZvcm1TdHJhdGVnaWVzTWFjLm1tCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzTWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIgor
CisjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgPFdlYktp
dFN5c3RlbUludGVyZmFjZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1JldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmRlZmF1bHRDb29raWVTdG9yYWdlKCkKK3sKKyAgICBpZiAoQ0ZVUkxT
dG9yYWdlU2Vzc2lvblJlZiBzZXNzaW9uID0gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKCkpCisgICAgICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4oQWRvcHRDRiwgV0tDb3B5SFRUUENvb2tpZVN0b3JhZ2Uoc2Vzc2lvbikp
OworCisjaWYgVVNFKENGTkVUV09SSykKKyAgICByZXR1cm4gV0tHZXREZWZhdWx0SFRUUENvb2tp
ZVN0b3JhZ2UoKTsKKyNlbHNlCisgICAgLy8gV2hlbiB1c2luZyBOU1VSTENvbm5lY3Rpb24sIHdl
IGFsc28gdXNlIGl0cyBzaGFyZWQgY29va2llIHN0b3JhZ2UuCisgICAgcmV0dXJuIDA7CisjZW5k
aWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXNNYWMubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2
aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiV2ViRXZl
bnQuaCIKICNpbmNsdWRlICJXZWJFdmVudENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJXZWJGcmFt
ZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJX
ZWJGdWxsU2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJXZWJHZW9sb2NhdGlvbkNsaWVudC5oIgpAQCAtMjE3NCw3ICsy
MTc1LDE2IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2UKICAgICBz
ZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXko
V2ViUHJlZmVyZW5jZXNLZXk6OmxvY2FsU3RvcmFnZUVuYWJsZWRLZXkoKSkpOwogICAgIHNldHRp
bmdzLT5zZXRYU1NBdWRpdG9yRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJl
ZmVyZW5jZXNLZXk6Onhzc0F1ZGl0b3JFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0
RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVy
ZW5jZXNLZXk6OmZyYW1lRmxhdHRlbmluZ0VuYWJsZWRLZXkoKSkpOwotICAgIHNldHRpbmdzLT5z
ZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVm
ZXJlbmNlc0tleTo6cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZEtleSgpKSk7CisKKyAgICBib29sIHBy
aXZhdGVCcm93c2luZ0VuYWJsZWQgPSBzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVy
ZW5jZXNLZXk6OnByaXZhdGVCcm93c2luZ0VuYWJsZWRLZXkoKSk7CisjaWYgUExBVEZPUk0oTUFD
KSB8fCBVU0UoQ0ZORVRXT1JLKQorICAgIGlmIChwcml2YXRlQnJvd3NpbmdFbmFibGVkKQorICAg
ICAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNz
aW9uKCk7CisgICAgZWxzZQorICAgICAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpkZXN0
cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpOworI2VuZGlmCisgICAgc2V0dGluZ3MtPnNldFBy
aXZhdGVCcm93c2luZ0VuYWJsZWQocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CisKICAgICBzZXR0
aW5ncy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXko
V2ViUHJlZmVyZW5jZXNLZXk6OmRldmVsb3BlckV4dHJhc0VuYWJsZWRLZXkoKSkpOwogICAgIHNl
dHRpbmdzLT5zZXRKYXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1
ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6amF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZEtl
eSgpKSk7CiAgICAgc2V0dGluZ3MtPnNldFRleHRBcmVhc0FyZVJlc2l6YWJsZShzdG9yZS5nZXRC
b29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnRleHRBcmVhc0FyZVJlc2l6YWJsZUtl
eSgpKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3
OSw3ICs2NzksNyBAQCBib29sIFdlYlBhZ2U6OnBsYXRmb3JtSGFzTG9jYWxEYXRhRm9yVVJMCiAg
ICAgTlNNdXRhYmxlVVJMUmVxdWVzdCogcmVxdWVzdCA9IFtbTlNNdXRhYmxlVVJMUmVxdWVzdCBh
bGxvY10gaW5pdFdpdGhVUkw6dXJsXTsKICAgICBbcmVxdWVzdCBzZXRWYWx1ZTooTlNTdHJpbmcq
KXVzZXJBZ2VudCgpIGZvckhUVFBIZWFkZXJGaWVsZDpAIlVzZXItQWdlbnQiXTsKICAgICBOU0Nh
Y2hlZFVSTFJlc3BvbnNlICpjYWNoZWRSZXNwb25zZTsKLSAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vz
c2lvblJlZiBzdG9yYWdlU2Vzc2lvbiA9IFJlc291cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFnZVNl
c3Npb24oKSkKKyAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbiA9
IGNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKS0+
c3RvcmFnZVNlc3Npb24oKSkKICAgICAgICAgY2FjaGVkUmVzcG9uc2UgPSBXS0NhY2hlZFJlc3Bv
bnNlRm9yUmVxdWVzdChzdG9yYWdlU2Vzc2lvbiwgcmVxdWVzdCk7CiAgICAgZWxzZQogICAgICAg
ICBjYWNoZWRSZXNwb25zZSA9IFtbTlNVUkxDYWNoZSBzaGFyZWRVUkxDYWNoZV0gY2FjaGVkUmVz
cG9uc2VGb3JSZXF1ZXN0OnJlcXVlc3RdOwpAQCAtNjkzLDcgKzY5Myw3IEBAIHN0YXRpYyBOU0Nh
Y2hlZFVSTFJlc3BvbnNlICpjYWNoZWRSZXNwb24KICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlVVJM
UmVxdWVzdD4gcmVxdWVzdChBZG9wdE5TLCBbW05TTXV0YWJsZVVSTFJlcXVlc3QgYWxsb2NdIGlu
aXRXaXRoVVJMOnVybF0pOwogICAgIFtyZXF1ZXN0LmdldCgpIHNldFZhbHVlOihOU1N0cmluZyAq
KXdlYlBhZ2UtPnVzZXJBZ2VudCgpIGZvckhUVFBIZWFkZXJGaWVsZDpAIlVzZXItQWdlbnQiXTsK
IAotICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uID0gUmVzb3Vy
Y2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpKQorICAgIGlmIChDRlVSTFN0b3JhZ2VT
ZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uID0gd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1l
KCktPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpLT5zdG9yYWdlU2Vzc2lvbigpKQogICAg
ICAgICByZXR1cm4gV0tDYWNoZWRSZXNwb25zZUZvclJlcXVlc3Qoc3RvcmFnZVNlc3Npb24sIHJl
cXVlc3QuZ2V0KCkpOwogCiAgICAgcmV0dXJuIFtbTlNVUkxDYWNoZSBzaGFyZWRVUkxDYWNoZV0g
Y2FjaGVkUmVzcG9uc2VGb3JSZXF1ZXN0OnJlcXVlc3QuZ2V0KCldOwpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQuaAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYs
NiArMjcsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQoZnJhbWUpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgdm9pZCBzZXRQ
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYp
OworICAgIHN0YXRpYyB2b2lkIHN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKTsKKyAgICBzdGF0
aWMgdm9pZCBlbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCk7CisgICAgc3RhdGljIHZvaWQg
ZGVzdHJveVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKTsKKyAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdl
U2Vzc2lvblJlZiBkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKKworICAgIHN0YXRpYyB2b2lkIHNl
dENvb2tpZUFjY2VwdFBvbGljeUZvclRlc3RpbmdDb250ZXh0KE5TSFRUUENvb2tpZUFjY2VwdFBv
bGljeSk7CisKIHByaXZhdGU6CiAgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dChXZWJDb3Jl
OjpGcmFtZSogZnJhbWUpCiAgICAgICAgIDogV2ViQ29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4
dChmcmFtZSkKQEAgLTM0LDYgKzQzLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBu
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9v
bCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKCkgY29uc3QgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hlZHVs
ZWRSdW5Mb29wUGFpcnMoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlJl
c291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
IGNvbnN0IE9WRVJSSURFOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2
aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICAgIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkgKzI0LDEzIEBACiAjaW1w
b3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJm
YWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitzdGF0aWMgQ0ZVUkxTdG9yYWdl
U2Vzc2lvblJlZiBkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lvbjsKK3N0YXRpYyBDRlVSTFN0b3JhZ2VT
ZXNzaW9uUmVmIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uOworCiBib29sIFdlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQ6Om5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gZnJhbWUoKSAmJiBmcmFtZSgpLT5zZXR0aW5ncygpICYmIGZyYW1lKCktPnNldHRp
bmdzKCktPm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCk7CkBAIC00NSwzICs1MCw2NiBAQCBSZXNv
dXJjZUVycm9yIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6CiB7CiAgICAgcmV0dXJuIGZyYW1l
KCktPmxvYWRlcigpLT5jbGllbnQoKS0+YmxvY2tlZEVycm9yKHJlcXVlc3QpOwogfQorCitzdGF0
aWMgU3RyaW5nJiBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBiYXNlLCAoKSk7CisgICAgcmV0dXJuIGJhc2U7Cit9CisKK3ZvaWQgV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dDo6c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlm
aWVyQmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgcHJpdmF0ZUJyb3dzaW5n
U3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZSgpID0gaWRlbnRpZmllcjsKK30KKwordm9pZCBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCkKK3sK
KyAgICAvLyBTZXQgYSBwcml2YXRlIHNlc3Npb24gZm9yIHRlc3RpbmcgdG8gYXZvaWQgaW50ZXJm
ZXJpbmcgd2l0aCBnbG9iYWwgY29va2llcy4gVGhpcyBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20g
cHJpdmF0ZSBicm93c2luZyBzZXNzaW9uLgorICAgIGlmIChkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lv
bikKKyAgICAgICAgQ0ZSZWxlYXNlKGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uKTsKKyAgICBkZWZh
dWx0Q0ZTdG9yYWdlU2Vzc2lvbiA9IFdLQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKENGU1RS
KCJQcml2YXRlIFdlYktpdCBTZXNzaW9uIikpOworfQorCit2b2lkIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgaWYgKHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgYmFzZSA9IHByaXZhdGVCcm93c2luZ1N0b3Jh
Z2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKS5pc051bGwoKSA/IFN0cmluZyhbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdKSA6IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNz
aW9uSWRlbnRpZmllckJhc2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRp
ZmllciA9IFN0cmluZyhiYXNlICsgIi5Qcml2YXRlQnJvd3NpbmciKS5jcmVhdGVDRlN0cmluZygp
OworCisgICAgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24gPSBXS0NyZWF0ZVByaXZhdGVT
dG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCkpOworfQorCit2b2lkIFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCkKK3sKKyAgICBp
ZiAoIXByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDRlJlbGVhc2UocHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOworICAgIHByaXZhdGVC
cm93c2luZ1N0b3JhZ2VTZXNzaW9uID0gMDsKK30KKworQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKQoreworICAg
IHJldHVybiBkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lvbjsKK30KKworQ0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbigpIGNvbnN0Cit7
CisgICAgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkID0gZnJhbWUoKSAmJiBmcmFtZSgpLT5z
ZXR0aW5ncygpICYmIGZyYW1lKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQo
KTsKKyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkgeworICAgICAgICBBU1NFUlQocHJp
dmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOworICAgICAgICByZXR1cm4gcHJpdmF0ZUJyb3dz
aW5nU3RvcmFnZVNlc3Npb247CisgICAgfQorICAgIHJldHVybiBkZWZhdWx0Q0ZTdG9yYWdlU2Vz
c2lvbjsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVBY2Nl
cHRQb2xpY3lGb3JUZXN0aW5nQ29udGV4dChOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5
KQoreworICAgIEFTU0VSVChkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lvbik7CisgICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGRlZmF1bHRDb29raWVTdG9yYWdlID0gYWRvcHRDRihX
S0NvcHlIVFRQQ29va2llU3RvcmFnZShkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lvbikpOworICAgIFdL
U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShkZWZhdWx0Q29va2llU3RvcmFnZS5nZXQoKSwgcG9s
aWN5KTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gV2ViQ29yZTo6
Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvb2tpZXNDaGFuZ2VkKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
ZGVmYXVsdENvb2tpZVN0b3JhZ2UoKSBPVkVSUklERTsKIAogICAgIC8vIFdlYkNvcmU6OlBsdWdp
blN0cmF0ZWd5CiAgICAgdmlydHVhbCB2b2lkIHJlZnJlc2hQbHVnaW5zKCkgT1ZFUlJJREU7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLm1tCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2ltcG9ydCAiV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgi
CiAKKyNpbXBvcnQgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbXBvcnQgIldlYlBs
dWdpbkRhdGFiYXNlLmgiCiAjaW1wb3J0ICJXZWJQbHVnaW5QYWNrYWdlLmgiCiAjaW1wb3J0IDxX
ZWJDb3JlL0Jsb2NrRXhjZXB0aW9ucy5oPgpAQCAtMzIsNiArMzMsNyBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzksNiArODEsMTkgQEAgdm9p
ZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Om5vdGlmeUNvb2tpZQogewogfQogCitSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWZhdWx0Q29v
a2llU3RvcmFnZSgpCit7CisgICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc2Vzc2lvbiA9
IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKQorICAg
ICAgICByZXR1cm4gUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+KEFkb3B0Q0YsIFdL
Q29weUhUVFBDb29raWVTdG9yYWdlKHNlc3Npb24pKTsKKworI2lmIFVTRShDRk5FVFdPUkspCisg
ICAgcmV0dXJuIFdLR2V0RGVmYXVsdEhUVFBDb29raWVTdG9yYWdlKCk7CisjZWxzZQorICAgIC8v
IFdoZW4gdXNpbmcgTlNVUkxDb25uZWN0aW9uLCB3ZSBhbHNvIHVzZSBpdHMgc2hhcmVkIGNvb2tp
ZSBzdG9yYWdlLgorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKIHZvaWQgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpyZWZyZXNoUGx1Z2lucygpCiB7CiAgICAgW1tXZWJQbHVnaW5EYXRhYmFzZSBz
aGFyZWREYXRhYmFzZV0gcmVmcmVzaF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViUHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbXBvcnQgIldlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oIgogCiAjaW1wb3J0ICJX
ZWJBcHBsaWNhdGlvbkNhY2hlLmgiCisjaW1wb3J0ICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
LmgiCiAjaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCiAjaW1wb3J0ICJXZWJLaXROU1N0cmluZ0V4
dHJhcy5oIgogI2ltcG9ydCAiV2ViS2l0U3lzdGVtQml0cy5oIgpAQCAtMTI4NSwxNyArMTI4Niwx
MiBAQCArICh2b2lkKV9zZXRJQkNyZWF0b3JJRDooTlNTdHJpbmcgKilzdHJpCiAKICsgKHZvaWQp
X3N3aXRjaE5ldHdvcmtMb2FkZXJUb05ld1Rlc3RpbmdTZXNzaW9uCiB7Ci0gICAgLy8gU2V0IGEg
cHJpdmF0ZSBzZXNzaW9uIGZvciB0ZXN0aW5nIHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggZ2xv
YmFsIGNvb2tpZXMuIFRoaXMgc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHByaXZhdGUgYnJvd3Np
bmcgc2Vzc2lvbi4KLSAgICBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4gc2Vzc2lv
biA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihD
RlNUUigiV2ViS2l0IFRlc3RpbmcgU2Vzc2lvbiIpKTsKLSAgICBSZXNvdXJjZUhhbmRsZTo6c2V0
RGVmYXVsdFN0b3JhZ2VTZXNzaW9uKHNlc3Npb24uZ2V0KCkpOworICAgIFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQ6OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKTsKIH0KIAogKyAodm9pZClf
c2V0Q3VycmVudE5ldHdvcmtMb2FkZXJTZXNzaW9uQ29va2llQWNjZXB0UG9saWN5OihOU0hUVFBD
b29raWVBY2NlcHRQb2xpY3kpcG9saWN5CiB7Ci0gICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNo
YXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVBY2NlcHRQb2xpY3k6cG9saWN5XTsKLQot
ICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCi0gICAgICAgIFdLU2V0SFRUUENvb2tpZUFj
Y2VwdFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpLCBwb2xpY3kpOworICAgIFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OnNldENvb2tpZUFjY2VwdFBvbGljeUZvclRlc3RpbmdDb250ZXh0KHBv
bGljeSk7CiB9CiAKIC0gKEJPT0wpaXNET01QYXN0ZUFsbG93ZWQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAkocmV2aXNpb24g
MTM0Njg3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDYgKzI0Niw4IEBAIEBpbnRlcmZhY2UgV2ViUHJl
ZmVyZW5jZXMgKFdlYlByaXZhdGUpCiArIChDRlN0cmluZ0VuY29kaW5nKV9zeXN0ZW1DRlN0cmlu
Z0VuY29kaW5nOwogKyAodm9pZClfc2V0SW5pdGlhbERlZmF1bHRUZXh0RW5jb2RpbmdUb1N5c3Rl
bUVuY29kaW5nOwogKyAodm9pZClfc2V0SUJDcmVhdG9ySUQ6KE5TU3RyaW5nICopc3RyaW5nOwor
CisvLyBGb3IgRHVtcFJlbmRlclRyZWUgdXNlIG9ubHkuCiArICh2b2lkKV9zd2l0Y2hOZXR3b3Jr
TG9hZGVyVG9OZXdUZXN0aW5nU2Vzc2lvbjsKICsgKHZvaWQpX3NldEN1cnJlbnROZXR3b3JrTG9h
ZGVyU2Vzc2lvbkNvb2tpZUFjY2VwdFBvbGljeTooTlNIVFRQQ29va2llQWNjZXB0UG9saWN5KWNv
b2tpZUFjY2VwdFBvbGljeTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW1wb3J0ICJXZWJFZGl0b3JD
bGllbnQuaCIKICNpbXBvcnQgIldlYkZvcm1EZWxlZ2F0ZVByaXZhdGUuaCIKICNpbXBvcnQgIldl
YkZyYW1lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIK
ICNpbXBvcnQgIldlYkZyYW1lVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJGdWxsU2NyZWVu
Q29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViR2VvbG9jYXRpb25DbGllbnQuaCIKQEAgLTE0NzAs
NyArMTQ3MSwxNiBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdlYlByZWZlcmVuCiAj
ZW5kaWYKICAgICBzZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRW5hYmxlZChbcHJlZmVyZW5jZXMg
bG9jYWxTdG9yYWdlRW5hYmxlZF0pOwogICAgIHNldHRpbmdzLT5zZXRFeHBlcmltZW50YWxOb3Rp
ZmljYXRpb25zRW5hYmxlZChbcHJlZmVyZW5jZXMgZXhwZXJpbWVudGFsTm90aWZpY2F0aW9uc0Vu
YWJsZWRdKTsKLSAgICBzZXR0aW5ncy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChbcHJlZmVy
ZW5jZXMgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZF0pOworCisgICAgYm9vbCBwcml2YXRlQnJvd3Np
bmdFbmFibGVkID0gW3ByZWZlcmVuY2VzIHByaXZhdGVCcm93c2luZ0VuYWJsZWRdOworI2lmIFBM
QVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykKKyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZCkKKyAgICAgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJy
b3dzaW5nU2Vzc2lvbigpOworICAgIGVsc2UKKyAgICAgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29u
dGV4dDo6ZGVzdHJveVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKTsKKyNlbmRpZgorICAgIHNldHRp
bmdzLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwor
CiAgICAgc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoW3ByZWZlcmVuY2VzIHNhbnNT
ZXJpZkZvbnRGYW1pbHldKTsKICAgICBzZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KFtwcmVm
ZXJlbmNlcyBzZXJpZkZvbnRGYW1pbHldKTsKICAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250
RmFtaWx5KFtwcmVmZXJlbmNlcyBzdGFuZGFyZEZvbnRGYW1pbHldKTsKQEAgLTE5OTcsMTQgKzIw
MDcsMTggQEAgLSAodm9pZClfZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvcgogCiAtIChO
U0NhY2hlZFVSTFJlc3BvbnNlICopX2NhY2hlZFJlc3BvbnNlRm9yVVJMOihOU1VSTCAqKVVSTAog
ewotICAgIE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QgPSBbW05TTXV0YWJsZVVSTFJlcXVl
c3QgYWxsb2NdIGluaXRXaXRoVVJMOlVSTF07CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZVVSTFJl
cXVlc3QgKj4gcmVxdWVzdCA9IGFkb3B0TlMoW1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBp
bml0V2l0aFVSTDpVUkxdKTsKICAgICBbcmVxdWVzdCBfd2ViX3NldEhUVFBVc2VyQWdlbnQ6W3Nl
bGYgdXNlckFnZW50Rm9yVVJMOlVSTF1dOwogICAgIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKmNhY2hl
ZFJlc3BvbnNlOwotICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9u
ID0gUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpKQotICAgICAgICBjYWNo
ZWRSZXNwb25zZSA9IFdLQ2FjaGVkUmVzcG9uc2VGb3JSZXF1ZXN0KHN0b3JhZ2VTZXNzaW9uLCBy
ZXF1ZXN0KTsKKworICAgIGlmICghX3ByaXZhdGUtPnBhZ2UpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbiA9IF9wcml2
YXRlLT5wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCktPnN0
b3JhZ2VTZXNzaW9uKCkpCisgICAgICAgIGNhY2hlZFJlc3BvbnNlID0gV0tDYWNoZWRSZXNwb25z
ZUZvclJlcXVlc3Qoc3RvcmFnZVNlc3Npb24sIHJlcXVlc3QuZ2V0KCkpOwogICAgIGVsc2UKLSAg
ICAgICAgY2FjaGVkUmVzcG9uc2UgPSBbW05TVVJMQ2FjaGUgc2hhcmVkVVJMQ2FjaGVdIGNhY2hl
ZFJlc3BvbnNlRm9yUmVxdWVzdDpyZXF1ZXN0XTsKLSAgICBbcmVxdWVzdCByZWxlYXNlXTsKKyAg
ICAgICAgY2FjaGVkUmVzcG9uc2UgPSBbW05TVVJMQ2FjaGUgc2hhcmVkVVJMQ2FjaGVdIGNhY2hl
ZFJlc3BvbnNlRm9yUmVxdWVzdDpyZXF1ZXN0LmdldCgpXTsKKwogICAgIHJldHVybiBjYWNoZWRS
ZXNwb25zZTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAJKHJldmlzaW9u
IDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw5ICsyMSwxMyBAQAogI2lu
Y2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKIAogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3Rl
bUludGVyZmFjZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorc3RhdGljIENGVVJM
U3RvcmFnZVNlc3Npb25SZWYgZGVmYXVsdENGU3RvcmFnZVNlc3Npb247CitzdGF0aWMgQ0ZVUkxT
dG9yYWdlU2Vzc2lvblJlZiBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbjsKKwogUGFzc1Jl
ZlB0cjxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
OjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoZnJhbWUsIHVzZXJB
Z2VudCkpOwpAQCAtNDMsMyArNDcsNjYgQEAgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBXZWJGcmFt
ZU5ldHdvcmtpbgogewogICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmJs
b2NrZWRFcnJvcihyZXF1ZXN0KTsKIH0KKworc3RhdGljIFN0cmluZyYgcHJpdmF0ZUJyb3dzaW5n
U3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFzZSwgKCkpOworICAgIHJl
dHVybiBiYXNlOworfQorCit2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldFByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoY29uc3QgU3RyaW5nJiBpZGVu
dGlmaWVyKQoreworICAgIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJh
c2UoKSA9IGlkZW50aWZpZXI7Cit9CisKK3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6
c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpCit7CisgICAgLy8gU2V0IGEgcHJpdmF0ZSBzZXNz
aW9uIGZvciB0ZXN0aW5nIHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggZ2xvYmFsIGNvb2tpZXMu
IFRoaXMgc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHByaXZhdGUgYnJvd3Npbmcgc2Vzc2lvbi4K
KyAgICBpZiAoZGVmYXVsdENGU3RvcmFnZVNlc3Npb24pCisgICAgICAgIENGUmVsZWFzZShkZWZh
dWx0Q0ZTdG9yYWdlU2Vzc2lvbik7CisgICAgZGVmYXVsdENGU3RvcmFnZVNlc3Npb24gPSBXS0Ny
ZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihDRlNUUigiUHJpdmF0ZSBXZWJLaXQgU2Vzc2lvbiIp
KTsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJv
d3NpbmdTZXNzaW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChw
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgU3Ry
aW5nIGJhc2UgPSBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKCku
aXNOdWxsKCkgPyBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZCdW5kbGVH
ZXRWYWx1ZUZvckluZm9EaWN0aW9uYXJ5S2V5KENGQnVuZGxlR2V0TWFpbkJ1bmRsZSgpLCBrQ0ZC
dW5kbGVJZGVudGlmaWVyS2V5KSkpIDogcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVu
dGlmaWVyQmFzZSgpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0g
U3RyaW5nKGJhc2UgKyAiLlByaXZhdGVCcm93c2luZyIpLmNyZWF0ZUNGU3RyaW5nKCk7CisKKyAg
ICBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbiA9IFdLQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VT
ZXNzaW9uKGNmSWRlbnRpZmllci5nZXQoKSwgZGVmYXVsdENGU3RvcmFnZVNlc3Npb24pOworfQor
Cit2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdT
ZXNzaW9uKCkKK3sKKyAgICBpZiAoIXByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDRlJlbGVhc2UocHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Np
b24pOworICAgIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uID0gMDsKK30KKworQ0ZVUkxT
dG9yYWdlU2Vzc2lvblJlZiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpkZWZhdWx0U3RvcmFn
ZVNlc3Npb24oKQoreworICAgIHJldHVybiBkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lvbjsKK30KKwor
Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdl
U2Vzc2lvbigpIGNvbnN0Cit7CisgICAgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkID0gZnJh
bWUoKSAmJiBmcmFtZSgpLT5zZXR0aW5ncygpICYmIGZyYW1lKCktPnNldHRpbmdzKCktPnByaXZh
dGVCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkgewor
ICAgICAgICBBU1NFUlQocHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOworICAgICAgICBy
ZXR1cm4gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb247CisgICAgfQorICAgIHJldHVybiBk
ZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lvbjsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0OjpzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JUZXN0aW5nQ29udGV4dChOU0hUVFBDb29raWVB
Y2NlcHRQb2xpY3kgcG9saWN5KQoreworICAgIEFTU0VSVChkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lv
bik7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGRlZmF1bHRDb29raWVT
dG9yYWdlID0gYWRvcHRDRihXS0NvcHlIVFRQQ29va2llU3RvcmFnZShkZWZhdWx0Q0ZTdG9yYWdl
U2Vzc2lvbikpOworICAgIFdLU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShkZWZhdWx0Q29va2ll
U3RvcmFnZS5nZXQoKSwgcG9saWN5KTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgJ
KHJldmlzaW9uIDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICAgIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDYgKzI4LDE0IEBAIGNs
YXNzIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQgOiBwdWJsaWMKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjcmVhdGUoV2ViQ29yZTo6
RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYgdXNlckFnZW50KTsKIAorICAgIHN0YXRpYyB2b2lk
IHNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoY29uc3QgU3Ry
aW5nJik7CisgICAgc3RhdGljIHZvaWQgc3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpOworICAg
IHN0YXRpYyB2b2lkIGVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKTsKKyAgICBzdGF0aWMg
dm9pZCBkZXN0cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpOworICAgIHN0YXRpYyBDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOworCisgICAgc3RhdGljIHZv
aWQgc2V0Q29va2llQWNjZXB0UG9saWN5Rm9yVGVzdGluZ0NvbnRleHQoTlNIVFRQQ29va2llQWNj
ZXB0UG9saWN5KTsKKwogcHJpdmF0ZToKICAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KFdl
YkNvcmU6OkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIHVzZXJBZ2VudCkKICAgICAg
ICAgOiBXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0KGZyYW1lKQpAQCAtMzYsNiArNDUs
OSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBXVEY6OlN0cmluZyB1c2VyQWdlbnQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIHJlZmVycmVyKCkgY29uc3Q7CisgICAgdmlydHVh
bCBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9y
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0OwogICAgIHZpcnR1YWwgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JikgY29uc3Q7CiAKICAgICBXVEY6OlN0cmluZyBtX3VzZXJBZ2VudDsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzYsNiArNzYsMTkgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Om5vdGlmeUNvb2tp
ZQogewogfQogCitSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpkZWZhdWx0Q29va2llU3RvcmFnZSgpCit7CisgICAgaWYgKENGVVJMU3RvcmFn
ZVNlc3Npb25SZWYgc2Vzc2lvbiA9IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpKQorICAgICAgICByZXR1cm4gUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+KEFkb3B0Q0YsIFdLQ29weUhUVFBDb29raWVTdG9yYWdlKHNlc3Npb24pKTsKKwor
I2lmIFVTRShDRk5FVFdPUkspCisgICAgcmV0dXJuIFdLR2V0RGVmYXVsdEhUVFBDb29raWVTdG9y
YWdlKCk7CisjZWxzZQorICAgIC8vIFdoZW4gdXNpbmcgTlNVUkxDb25uZWN0aW9uLCB3ZSBhbHNv
IHVzZSBpdHMgc2hhcmVkIGNvb2tpZSBzdG9yYWdlLgorICAgIHJldHVybiAwOworI2VuZGlmCit9
CisKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWZyZXNoUGx1Z2lucygpCiB7CiAgICAg
UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOwpJbmRleDogU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmgJKHJldmlzaW9uIDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2
ICs1MCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kKICAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5Q29va2llc0NoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBkZWZhdWx0Q29va2llU3RvcmFnZSgpOwogCiAg
ICAgLy8gV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBs
dWdpbnMoKTsK
</data>
<flag name="commit-queue"
          id="189359"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174545</attachid>
            <date>2012-11-15 16:20:18 -0800</date>
            <delta_ts>2012-11-15 17:27:52 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>Sessions.txt</filename>
            <type>text/plain</type>
            <size>102107</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDEyLTExLTE1ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFByaXZhdGUgQnJvd3Npbmcg
aXMgYSBwZXItcGFnZSBzZXR0aW5nIHRoYXQgc2V0cyBhIGdsb2JhbCB2YWx1ZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4NzAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIFJlc291cmNlSGFuZGxl
e01hYyxDRk5ldH0gdXNlIGNvbnRleHQgdG8gYWNjZXNzIHN0b3JhZ2Ugc2Vzc2lvbi4KKworICAg
ICAgICAqIFdlYkNvcmUuZXhwLmluOiBXZSB0cmFjayBsZXNzIHNlc3Npb24gc3RhdGUgaW4gV2Vi
Q29yZSBub3csIHNvIHdlIG5lZWQgZmV3ZXIKKyAgICAgICAgZXhwb3J0cy4KKworICAgICAgICAq
IGxvYWRlci9GcmFtZU5ldHdvcmtpbmdDb250ZXh0Lmg6IEFkZGVkIGFuIE9WRVJSSURFLgorCisg
ICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6IChXZWJDb3JlOjpTZXR0aW5nczo6c2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCk6IFdlYkNvcmUKKyAgICAgICAgbm8gbG9uZ2VyIGtlZXBzIHRyYWNr
IG9mIGEgZ2xvYmFsbHkgZW5hYmxlZCBwcml2YXRlIENGTmV0d29yayBzdG9yYWdlIHNlc3Npb24u
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaDogQWRkZWQgZGVmYXVsdENv
b2tpZVN0b3JhZ2UoKS4gU29tZSBjb29raWUgamFyIG1ldGhvZHMKKyAgICAgICAgZG9uJ3QgaGF2
ZSBhIE5ldHdvcmtpbmdDb250ZXh0IHBvaW50ZXIsIGFuZCBoYXZlIHRvIHVzZSB3aGF0ZXZlciBh
IGNsaWVudCBleHBlY3RzCisgICAgICAgIHRoZW0gdG8gZG8uIFBlcmhhcHMgd2Ugc2hvdWxkIG1v
dmUgdGhvc2UgbWV0aG9kcyBhd2F5IGZyb20gV2ViQ29yZSBldmVudHVhbGx5LgorCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9OZXR3b3JraW5nQ29udGV4dC5oOiBBZGRlZCBzdG9yYWdlU2Vz
c2lvbigpLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOiBS
ZW1vdmVkIHN0dGFpYyBtZXRob2RzIGZvciBkZWFsaW5nIHdpdGggZ2xvYmFsCisgICAgICAgIHNl
c3Npb25zLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVy
bmFsLmg6IEFkZGVkIG1fc3RvcmFnZVNlc3Npb24uIFdlIG5lZWQgdG8KKyAgICAgICAgcmVtZW1i
ZXIgaXQgcG9zdC1jcmVhdGlvbiB0byBkbyB0aGluZ3MgaW4gd2lsbFNlbmRSZXF1ZXN0LiBBbHRl
cm5hdGl2ZWx5LCB3ZSBjb3VsZAorICAgICAgICBrZWVwIGEgcmVmZXJlbmNlIHRvIE5ldHdvcmtp
bmdDb250ZXh0IGl0c2VsZi4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvQ29va2ll
SmFyQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00pOiBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSBub3cgbmVlZHMgYSBjb250ZXh0LAorICAgICAgICB0aGVy
ZSBpcyBubyBnbG9iYWxseSBjdXJyZW50IG9uZSBhbnkgbW9yZS4gQWxzbywgd2UgZG9uJ3QgcmVh
bGx5IGV4cGVjdCBjb29raWUKKyAgICAgICAgc3RpcmFnZSB0byBiZSAwIHdoZW4gbm90IHVzaW5n
IE5TVVJMQ29ubmVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JET00pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRl
Q29va2llKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKTogRGl0dG8uCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UpOiBVc2UgYSBjb250ZXh0Lgor
ICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UpOiBFeGNlcHQgZm9y
IFdpbmRvd3Mtb25seSBvdmVycmlkZSBzZXNzaW9uLAorICAgICAgICB0aGlzIGlzIGltcGxlbWVu
dGVkIGluIGEgc3RyYXRlZ3kuCisgICAgICAgIChXZWJDb3JlOjpvdmVycmlkZW5Db29raWVTdG9y
YWdlKTogRXhwb3NlZCB0aGUgb3ZlcnJpZGUgZm9yIFdlYktpdCB1c2Ugb24gV2luZG93cy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3RvcmFnZUNGTmV0Lmg6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndpbGxTZW5kUmVxdWVzdCk6IFVzZSBzdG9yYWdlIHNlc3Np
b24gZnJvbSB0aGUgY29udGV4dCwgbm90IGdsb2JhbCBvbmUuCisgICAgICAgIChXZWJDb3JlOjpt
YWtlRmluYWxSZXF1ZXN0KTogTWVyZ2VkIHRoaXMgaW50byB0aGUgb25seSByZW1haW5pbmcgY2Fs
bGVyLiBUaGlzCisgICAgICAgIGZ1bmN0aW9uIGRpZG4ndCByZWFsbHkgbWFrZSBhbnkgc2Vuc2Ug
b24gaXRzIG93bi4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tp
ZVBvbGljeSk6IEZhY3RvcmVkIG91dCBvZiBjcmVhdGVDRlVSTENvbm5lY3Rpb24KKyAgICAgICAg
dG8gbWF0Y2ggTWFjLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNG
VVJMQ29ubmVjdGlvbik6IFdoaWxlIG1lcmdpbmcgbWFrZUZpbmFsUmVxdWVzdCgpCisgICAgICAg
IGluLCByZW1vdmVkIHNvbWUgc2VlbWluZ2x5IG5vbnNlbnNpY2FsIGNvZGUgdGhhdCB3YXMgZ2V0
dGluZyBhbmQgaW1tZWRpYXRlbHkgcmUtYXBwbHlpbmcKKyAgICAgICAgY29va2llIHN0b3JhZ2Ug
YWNjZXB0IHBvbGljeS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6
IFN0b3JlIGNvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCkgZm9yIHVzZSBpbiB3aWxsU2VuZFJlcXVl
c3QuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KTog
QXBwbHkgdGhlIHN0b3JlZCBzZXNzaW9uLCBub3QgZ2xvYmFsIG9uZS4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpzdG9yYWdlU2Vzc2lvbik6IEFuIGFjY2Vzc29yIGZvciBzdGF0
aWMgbWV0aG9kcyB0aGF0IGNhbm5vdAorICAgICAgICBhY2Nlc3MgImQiLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOiBTdG9yZSBj
b250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpIGZvciB1c2UgaW4gd2lsbFNlbmRSZXF1ZXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKTogRG9uJ3Qg
Y2FsbCBtYWtlRmluYWxSZXF1ZXN0IGhlcmUuCisgICAgICAgIEl0IGRpZG4ndCBtYXRjaCBNYWMs
IGFuZCBub3RoaW5nIGluIG1ha2VGaW5hbFJlcXVlc3Qgc2hvdWxkIGhhdmUgYWZmZWN0ZWQgdGhl
IHJlc3VsdC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuY3BwOiAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVx
dWVzdCk6CisgICAgICAgIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBhcHBseSBjdXJyZW50IHN0b3Jh
Z2Ugc2Vzc2lvbiB0byBldmVyeSByZXF1ZXN0IGZvciBubyBhcHBhcmVudAorICAgICAgICByZWFz
b24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9yRE9NKTogQ2hhbmdlZCB0byBwYXNzIGNvbnRleHQg
dG8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UuCisgICAgICAgIChXZWJDb3JlOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29v
a2llc0Zyb21ET00pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpnZXRSYXdDb29raWVzKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpkZWxldGVDb29raWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tp
ZXMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRs
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVBv
bGljeSk6IFRoZXJlIHdhcyBubyBuZWVkIHRvIHNwZWNpYWwgY2FzZQorICAgICAgICBudWxsIGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlLCBXS1NJIGhhbmRsZXMgdGhhdCBpbnRlcm5hbGx5LiBB
ZGRlZCBhIGNvbnRleHQKKyAgICAgICAgYXJndW1lbnQsIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIGNh
biBhY2Nlc3MgY3VycmVudCBzZXNzaW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbik6IFVwZGF0ZWQgZm9yIG90aGVyIGNvZGUgY2hhbmdl
cy4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6IFN0b3JlIGNvbnRl
eHQtPnN0b3JhZ2VTZXNzaW9uKCkgZm9yIHVzZSBpbiB3aWxsU2VuZFJlcXVlc3QuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUpOiBTdHlsZSBmaXgu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6IFN0b3JlIGNvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCkKKyAgICAgICAgZm9yIHVzZSBp
biB3aWxsU2VuZFJlcXVlc3QuIAorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6Ondp
bGxTZW5kUmVxdWVzdCk6IFVzZSBzdG9yZWQgc2Vzc2lvbiwgbm90IGdsb2JhbCBvbmUuCisKIDIw
MTItMTEtMTUgIEVsbGlvdHQgU3ByZWhuICA8ZXNwcmVobkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgTXV0YXRpb25PYnNlcnZlciB3cmFwcGVyIHNob3VsZCBub3QgYmUgY29sbGVjdGVkIHdoaWxl
IHN0aWxsIG9ic2VydmluZwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDEzNDY4
NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODIsNyArMjgyLDYgQEAgX19aTjdXZWJDb3JlMTRSZXNvdXJjZUJ1ZmZlckQxRXYKIF9fWk43V2Vi
Q29yZTE0UmVzb3VyY2VCdWZmZXJEMkV2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjBm
b3JjZUNvbnRlbnRTbmlmZmluZ0V2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjZzeW5j
aHJvbm91c0xvYWRSdW5Mb29wTW9kZUV2Ci1fX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMzVj
cmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbkVQSzEwX19DRlN0cmluZwogX19aTjdX
ZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTZjcmVhdGVFUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUktO
U18xNVJlc291cmNlUmVxdWVzdEVQTlNfMjBSZXNvdXJjZUhhbmRsZUNsaWVudEViYgogX19aTjdX
ZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjEzc2V0SWRlbnRpZmllckVtCiBfX1pON1dlYkNvcmUxNFJl
c291cmNlTG9hZGVyMTRjYW5jZWxsZWRFcnJvckV2CkBAIC02NzIsNiArNjcxLDcgQEAgX19aTjdX
ZWJDb3JlMjdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpbwogX19aTjdXZWJDb3JlMjdEZXZpY2VP
cmllbnRhdGlvbkNsaWVudE1vY2sxNHNldE9yaWVudGF0aW9uRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzIxRGV2aWNlT3JpZW50YXRpb25EYXRhRUVFCiBfX1pON1dlYkNvcmUyN0RldmljZU9yaWVudGF0
aW9uQ2xpZW50TW9ja0MxRXYKIF9fWk43V2ViQ29yZTI3c3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzRXYKK19fWk43V2ViQ29yZTI2ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2VFdgogX19aTjdX
ZWJDb3JlMjhlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzRVJLTjNXVEY2U3RyaW5nRQogX19a
TjdXZWJDb3JlMjhyZW1vdmVMYW5ndWFnZUNoYW5nZU9ic2VydmVyRVB2CiBfX1pON1dlYkNvcmUy
OWlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0RWliCkBAIC0yMjE2LDEyICsyMjE2LDYgQEAg
X19aTjdXZWJDb3JlMTJTY2hlZHVsZVBhaXJDMUVQOU5TUnVuTG9vcAogX19aTjdXZWJDb3JlMTRS
ZXNvdXJjZUhhbmRsZTEycmVsZWFzZVByb3h5RXYKICNlbmRpZgogCi1fX1pON1dlYkNvcmUxNFJl
c291cmNlSGFuZGxlNDZzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJC
YXNlRVJLTjNXVEY2U3RyaW5nRQotX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIxY3VycmVu
dFN0b3JhZ2VTZXNzaW9uRXYKLV9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyOXByaXZhdGVC
cm93c2luZ1N0b3JhZ2VTZXNzaW9uRXYKLV9fWk43V2ViQ29yZTI2Y3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2VFdgotX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTI0c2V0RGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uRVBLMjFfX0NGVVJMU3RvcmFnZVNlc3Npb24KLQogI2lmIEVOQUJMRShDT05URVhU
X01FTlVTKQogX19aTjdXZWJDb3JlMTFDb250ZXh0TWVudTIyc2V0UGxhdGZvcm1EZXNjcmlwdGlv
bkVQMTROU011dGFibGVBcnJheQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMHNlbmRDb250
ZXh0TWVudUV2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgJKHJldmlzaW9uIDEzNDY4
NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHJvdGVjdGVkOgogICAgIEZyYW1lKiBmcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fZnJhbWU7IH0KIAogICAgIEZyYW1l
KiBtX2ZyYW1lOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiAx
MzQ2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTc4LDIyICs1NzgsNiBAQCB2b2lkIFNldHRpbmdzOjpzZXRTZXNzaW9uU3RvcmFnZVF1
b3RhKHVuCiAKIHZvaWQgU2V0dGluZ3M6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBw
cml2YXRlQnJvd3NpbmdFbmFibGVkKQogewotICAgIC8vIEZJWE1FIGh0dHA6Ly93ZWJraXQub3Jn
L2IvNjc4NzA6IFRoZSBwcml2YXRlIGJyb3dzaW5nIHN0b3JhZ2Ugc2Vzc2lvbiBhbmQgY29va2ll
IHByaXZhdGUKLSAgICAvLyBicm93c2luZyBtb2RlICh3aGljaCBpcyB1c2VkIGlmIHN0b3JhZ2Ug
c2Vzc2lvbnMgYXJlIG5vdCBhdmFpbGFibGUpIGFyZSBnbG9iYWwgc2V0dGluZ3MsIHNvCi0gICAg
Ly8gaXQgaXMgbWlzbGVhZGluZyB0byBoYXZlIHRoZW0gYXMgcGVyLXBhZ2Ugc2V0dGluZ3MuCi0g
ICAgLy8gSW4gYWRkaXRpb24sIGlmIHRoZXkgYXJlIHRyZWF0ZWQgYXMgYSBwZXIgUGFnZSBzZXR0
aW5ncywgdGhlIGdsb2JhbCB2YWx1ZXMgY2FuIGdldCBvdXQgb2YKLSAgICAvLyBzeW5jIHdpdGgg
dGhlIHBlciBQYWdlIHZhbHVlIGluIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgotICAgIC8vIDEu
IFRoZSBnbG9iYWwgdmFsdWVzIGdldCBzZXQgdG8gdHJ1ZSB3aGVuIHNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQodHJ1ZSkgaXMgY2FsbGVkLgotICAgIC8vIDIuIEFsbCBQYWdlcyBhcmUgY2xvc2Vk
LCBzbyBhbGwgU2V0dGluZ3Mgb2JqZWN0cyBnbyBhd2F5LgotICAgIC8vIDMuIEEgbmV3IFBhZ2Ug
aXMgY3JlYXRlZCwgYW5kIGEgY29ycmVzcG9uZGluZyBuZXcgU2V0dGluZ3Mgb2JqZWN0IGlzIGNy
ZWF0ZWQgLSB3aXRoCi0gICAgLy8gICAgbV9wcml2YXRlQnJvd3NpbmdFbmFibGVkIHN0YXJ0aW5n
IG91dCBhcyBmYWxzZSBpbiB0aGUgY29uc3RydWN0b3IuCi0gICAgLy8gNC4gVGhlIFdlYlBhZ2Ug
c2V0dGluZ3MgZ2V0IGFwcGxpZWQgdG8gdGhlIG5ldyBQYWdlIGFuZCBzZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKGZhbHNlKQotICAgIC8vICAgIGlzIGNhbGxlZCwgYnV0IGFuIGlmIChtX3ByaXZh
dGVCcm93c2luZ0VuYWJsZWQgPT0gcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkgZWFybHkgcmV0dXJu
Ci0gICAgLy8gICAgcHJldmVudHMgdGhlIGdsb2JhbCB2YWx1ZXMgZnJvbSBnZXR0aW5nIGNoYW5n
ZWQgZnJvbSB0cnVlIHRvIGZhbHNlLgotI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09S
SykKLSAgICBSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChwcml2YXRl
QnJvd3NpbmdFbmFibGVkKTsKLSNlbmRpZgotCiAgICAgaWYgKG1fcHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZCA9PSBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZXNTdHJhdGVneS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZXNTdHJhdGVneS5oCShyZXZpc2lvbiAxMzQ2
ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDIyIEBACiAKICNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lF
UykKIAorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFBMQVRGT1JNKE1BQykgfHwg
VVNFKENGTkVUV09SSykKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2Uq
ICBDRkhUVFBDb29raWVTdG9yYWdlUmVmOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ29va2llc1N0cmF0ZWd5IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5Q29va2llc0NoYW5nZWQoKSA9IDA7CiAKKyNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5F
VFdPUkspCisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gZGVm
YXVsdENvb2tpZVN0b3JhZ2UoKSA9IDA7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgfkNvb2tpZXNTdHJhdGVneSgpIHsgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250ZXh0LmgJKHJldmlzaW9uIDEzNDY4
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTIgKzIzLDIyIEBACiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKLU9CSkNfQ0xBU1MgTlNPcGVyYXRpb25RdWV1
ZTsKICNpbmNsdWRlICJTY2hlZHVsZVBhaXIuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQp
CiAjaW5jbHVkZSA8cWdsb2JhbC5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCitPQkpD
X0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwg
VVNFKENGTkVUV09SSykKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZVUkxTdG9yYWdlU2Vzc2lv
biogQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZjsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCiBR
VF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFPYmplY3Q7CiBjbGFzcyBRTmV0d29ya0FjY2Vzc01h
bmFnZXI7CkBAIC01MywxMiArNjMsMTYgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIHZpcnR1YWwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNv
bnN0ID0gMDsgLy8gRklYTUU6IFJlY29uY2lsZSB3aXRoIFJlc291cmNlSGFuZGxlOjpmb3JjZUNv
bnRlbnRTbmlmZmluZygpLgogICAgIHZpcnR1YWwgU2NoZWR1bGVQYWlySGFzaFNldCogc2NoZWR1
bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgTlNPcGVy
YXRpb25RdWV1ZSAqc2NoZWR1bGVkT3BlcmF0aW9uUXVldWUoKSBjb25zdCB7IHJldHVybiAwOyB9
CiAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKSBjb25zdCA9IDA7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENG
TkVUV09SSykKKyAgICB2aXJ0dWFsIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Np
b24oKSBjb25zdCA9IDA7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFFUKQogICAgIHZpcnR1YWwg
UU9iamVjdCogb3JpZ2luYXRpbmdPYmplY3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBRTmV0
d29ya0FjY2Vzc01hbmFnZXIqIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3QgPSAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
aAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgdW5zY2hlZHVsZShTY2hlZHVsZVBhaXIqKTsKICNlbmRpZgogI2lmIFVTRShD
Rk5FVFdPUkspCisgICAgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbigpIGNv
bnN0OwogICAgIENGVVJMQ29ubmVjdGlvblJlZiBjb25uZWN0aW9uKCkgY29uc3Q7CiAgICAgQ0ZV
UkxDb25uZWN0aW9uUmVmIHJlbGVhc2VDb25uZWN0aW9uRm9yRG93bmxvYWQoKTsKICAgICBzdGF0
aWMgdm9pZCBzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmKTsK
QEAgLTE5NiwxNiArMTk3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaXJlRmFpbHVyZShUaW1l
cjxSZXNvdXJjZUhhbmRsZT4qKTsKIAotI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09S
SykKLSAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBjdXJyZW50U3RvcmFnZVNlc3Np
b24oKTsKLSAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9y
YWdlU2Vzc2lvblJlZik7Ci0gICAgc3RhdGljIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZChib29sKTsKLQotICAgIHN0YXRpYyB2b2lkIHNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uSWRlbnRpZmllckJhc2UoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIFJldGFpblB0
cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKTsKLSNlbmRpZgotCiAgICAgdXNpbmcgUmVmQ291
bnRlZDxSZXNvdXJjZUhhbmRsZT46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPFJlc291cmNl
SGFuZGxlPjo6ZGVyZWY7CiAKQEAgLTI0MCwxNCArMjMxLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgZGVyZWZBdXRoZW50aWNhdGlvbkNsaWVudCgpIHsgZGVyZWYoKTsgfQogCiAjaWYg
UExBVEZPUk0oTUFDKSAmJiAhVVNFKENGTkVUV09SSykKLSAgICB2b2lkIGNyZWF0ZU5TVVJMQ29u
bmVjdGlvbihpZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9v
bCBzaG91bGRDb250ZW50U25pZmYpOwotI2VsaWYgVVNFKENGKQotICAgIHZvaWQgY3JlYXRlQ0ZV
UkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wgc2hvdWxk
Q29udGVudFNuaWZmKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRX
T1JLKQotICAgIHN0YXRpYyBTdHJpbmcgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVu
dGlmaWVyRGVmYXVsdEJhc2UoKTsKLSAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBw
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpOworICAgIHZvaWQgY3JlYXRlTlNVUkxDb25u
ZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29s
IHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVBvbGljeSwgYm9vbCBzaG91bGRDb250ZW50U25p
ZmYpOworI2VsaWYgVVNFKENGTkVUV09SSykKKyAgICB2b2lkIGNyZWF0ZUNGVVJMQ29ubmVjdGlv
bihib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sIHNob3VsZFJlbGF4VGhpcmRQ
YXJ0eUNvb2tpZVBvbGljeSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYpOwogI2VuZGlmCiAKICAg
ICBmcmllbmQgY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bC5oCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAg
QEAgT0JKQ19DTEFTUyBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogT0JKQ19DTEFTUyBO
U1VSTENvbm5lY3Rpb247CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVU
V09SSykKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZVUkxTdG9yYWdlU2Vzc2lvbiogQ0ZVUkxT
dG9yYWdlU2Vzc2lvblJlZjsKKyNlbmRpZgorCiAvLyBUaGUgYWxsb2NhdGlvbnMgYW5kIHJlbGVh
c2VzIGluIFJlc291cmNlSGFuZGxlSW50ZXJuYWwgYXJlCiAvLyBDb2NvYS1leGNlcHRpb24tZnJl
ZSAoZWl0aGVyIHNpbXBsZSBGb3VuZGF0aW9uIGNsYXNzZXMgb3IKIC8vIFdlYkNvcmVSZXNvdXJj
ZUxvYWRlckltcCB3aGljaCBhdm9pZHMgZG9pbmcgd29yayBpbiBkZWFsbG9jKS4KQEAgLTE1Nyw2
ICsxNjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9zdGFydFdoZW5T
Y2hlZHVsZWQ7CiAgICAgICAgIGJvb2wgbV9uZWVkc1NpdGVTcGVjaWZpY1F1aXJrczsKICNlbmRp
ZgorI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykKKyAgICAgICAgUmV0YWluUHRy
PENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IG1fc3RvcmFnZVNlc3Npb247CisjZW5kaWYKICNpZiBV
U0UoV0lOSU5FVCkKICAgICAgICAgVGltZXI8UmVzb3VyY2VIYW5kbGU+IG1fZmlsZUxvYWRUaW1l
cjsKICAgICAgICAgSElOVEVSTkVUIG1faW50ZXJuZXRIYW5kbGU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAko
cmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9D
b29raWVKYXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIlNvZnRMaW5raW5nLmgiCiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGSFRUUENvb2tpZXNQcml2
Lmg+CiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KQEAgLTEwMCw5
ICsxMDEsOCBAQCB2b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0CiAgICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7Ci0gICAg
aWYgKCFjb29raWVTdG9yYWdlKQotICAgICAgICByZXR1cm47CisgICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwor
ICAgIEFTU0VSVChjb29raWVTdG9yYWdlKTsKIAogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJs
Q0YoQWRvcHRDRiwgdXJsLmNyZWF0ZUNGVVJMKCkpOwogICAgIFJldGFpblB0cjxDRlVSTFJlZj4g
Zmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBmaXJzdFBhcnR5LmNyZWF0ZUNGVVJMKCkp
OwpAQCAtMTI0LDkgKzEyNCw4IEBAIHZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0Nv
bnRleHQKIAogU3RyaW5nIGNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7Ci0gICAgaWYgKCFj
b29raWVTdG9yYWdlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgp
OworICAgIEFTU0VSVChjb29raWVTdG9yYWdlKTsKIAogICAgIFJldGFpblB0cjxDRlVSTFJlZj4g
dXJsQ0YoQWRvcHRDRiwgdXJsLmNyZWF0ZUNGVVJMKCkpOwogCkBAIC0xMzgsOSArMTM3LDggQEAg
U3RyaW5nIGNvb2tpZXNGb3JET00oTmV0d29ya2luZ0NvbnRleHQqIAogCiBTdHJpbmcgY29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEtVUkwmIHVybCkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShj
b250ZXh0KSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgQVNTRVJUKGNvb2tp
ZVN0b3JhZ2UpOwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwu
Y3JlYXRlQ0ZVUkwoKSk7CiAKQEAgLTE1MiwxOSArMTUwLDE4IEBAIFN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShOZXQKIAogYm9vbCBjb29raWVzRW5hYmxlZChOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCkKIHsKLSAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5
IHBvbGljeSA9IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1
bWVudERvbWFpbjsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVs
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKLSAgICBpZiAoY29va2llU3RvcmFnZSkKLSAgICAgICAg
cG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBvbGljeShjb29raWVT
dG9yYWdlLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0
KSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgQVNTRVJUKGNvb2tpZVN0b3Jh
Z2UpOworCisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBDRkhU
VFBDb29raWVTdG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCkp
OwogICAgIHJldHVybiBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9u
bHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdl
QWNjZXB0UG9saWN5QWx3YXlzOwogfQogCiBib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tp
ZXMpCiB7CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIGlmICghY29v
a2llU3RvcmFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJldGFpblB0cjxDRkhUVFBD
b29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBD
b29raWVTdG9yYWdlKGNvbnRleHQpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAg
ICBBU1NFUlQoY29va2llU3RvcmFnZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENG
KEFkb3B0Q0YsIHVybC5jcmVhdGVDRlVSTCgpKTsKIApAQCAtMTk1LDkgKzE5Miw4IEBAIGJvb2wg
Z2V0UmF3Q29va2llcyhOZXR3b3JraW5nQ29udGV4dCogY28KIAogdm9pZCBkZWxldGVDb29raWUo
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0
Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIGlmICghY29va2llU3RvcmFnZSkKLSAgICAgICAg
cmV0dXJuOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9y
YWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRleHQpIDogZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7CiAK
ICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0Q0YsIHVybC5jcmVhdGVDRlVSTCgp
KTsKIApAQCAtMjE2LDkgKzIxMiw4IEBAIHZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250
ZXh0KiBjb24KIAogdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCwgSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7Ci0gICAgUmV0YWluUHRy
PENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7Ci0g
ICAgaWYgKCFjb29raWVTdG9yYWdlKQotICAgICAgICByZXR1cm47CisgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgp
OworICAgIEFTU0VSVChjb29raWVTdG9yYWdlKTsKIAogICAgIFJldGFpblB0cjxDRkFycmF5UmVm
PiBjb29raWVzQ0YoQWRvcHRDRiwgQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzKGNvb2tp
ZVN0b3JhZ2UuZ2V0KCkpKTsKICAgICBpZiAoIWNvb2tpZXNDRikKQEAgLTIzNCw5ICsyMjksOCBA
QCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKE5ldHdvcmtpbmdDCiAKIHZvaWQgZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIGhvc3RuYW1lKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
b29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBk
ZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIGlmICghY29va2llU3RvcmFnZSkKLSAg
ICAgICAgcmV0dXJuOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29r
aWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRleHQp
IDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBBU1NFUlQoY29va2llU3RvcmFn
ZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGKEFkb3B0Q0YsIENGSFRU
UENvb2tpZVN0b3JhZ2VDb3B5Q29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKSk7CiAgICAgaWYg
KCFjb29raWVzQ0YpCkBAIC0yNTMsOSArMjQ3LDggQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoTmV0d29ya2luZwogCiB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRl
eHQqIGNvbnRleHQpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRl
ZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlKQotICAg
ICAgICByZXR1cm47CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tp
ZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoY29udGV4dCkg
OiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIEFTU0VSVChjb29raWVTdG9yYWdl
KTsKIAogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VEZWxldGVBbGxDb29raWVzKGNvb2tpZVN0b3Jh
Z2UuZ2V0KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9D
b29raWVTdG9yYWdlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvQ29va2llU3RvcmFnZUNGTmV0LmNwcAkocmV2aXNpb24gMTM0Njg3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxNCArNTYsMTQgQEAgc3RhdGljIFJldGFpblB0cjxD
RkhUVFBDb29raWVTdG9yYWdlUmVmPgogCiAjZW5kaWYKIAotUmV0YWluUHRyPENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWY+IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkKK1JldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCkKIHsKICNpZiBQTEFURk9STShXSU4pCiAgICAgaWYgKFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiYgb3ZlcnJpZGUgPSBjb29raWVTdG9yYWdlT3ZlcnJp
ZGUoKSkKICAgICAgICAgcmV0dXJuIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICBpZiAoQ0ZVUkxT
dG9yYWdlU2Vzc2lvblJlZiBzZXNzaW9uID0gUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdl
U2Vzc2lvbigpKQorICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHNlc3Npb24gPSBjb250
ZXh0LT5zdG9yYWdlU2Vzc2lvbigpKQogICAgICAgICByZXR1cm4gUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+KEFkb3B0Q0YsIHdrQ29weUhUVFBDb29raWVTdG9yYWdlKHNlc3Npb24p
KTsKIAogI2lmIFVTRShDRk5FVFdPUkspCkBAIC04MSwxNSArODEsNyBAQCBSZXRhaW5QdHI8Q0ZI
VFRQQ29va2llU3RvcmFnZVJlZj4gZGVmYXVsCiAgICAgICAgIHJldHVybiBvdmVycmlkZTsKICNl
bmRpZgogCi0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc2Vzc2lvbiA9IFJlc291cmNl
SGFuZGxlOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAgcmV0dXJuIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPihBZG9wdENGLCB3a0NvcHlIVFRQQ29va2llU3RvcmFn
ZShzZXNzaW9uKSk7Ci0KLSNpZiBVU0UoQ0ZORVRXT1JLKQotICAgIHJldHVybiB3a0dldERlZmF1
bHRIVFRQQ29va2llU3RvcmFnZSgpOwotI2Vsc2UKLSAgICAvLyBXaGVuIHVzaW5nIE5TVVJMQ29u
bmVjdGlvbiwgd2UgYWxzbyB1c2UgaXRzIHNoYXJlZCBjb29raWUgc3RvcmFnZS4KLSAgICByZXR1
cm4gMDsKLSNlbmRpZgorICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+Y29va2llc1N0
cmF0ZWd5KCktPmRlZmF1bHRDb29raWVTdG9yYWdlKCk7CiB9CiAKICNpZiBQTEFURk9STShXSU4p
CkBAIC0xMDEsNiArOTMsMTEgQEAgdm9pZCBvdmVycmlkZUNvb2tpZVN0b3JhZ2UoQ0ZIVFRQQ29v
a2llUwogICAgIGNvb2tpZVN0b3JhZ2VPdmVycmlkZSgpLmFkb3B0Q0YoY29va2llU3RvcmFnZSk7
CiB9CiAKK0NGSFRUUENvb2tpZVN0b3JhZ2VSZWYgb3ZlcnJpZGVuQ29va2llU3RvcmFnZSgpCit7
CisgICAgcmV0dXJuIGNvb2tpZVN0b3JhZ2VPdmVycmlkZSgpLmdldCgpOworfQorCiBzdGF0aWMg
dm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZE9uTWFpblRocmVhZCh2b2lkKikKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZVN0b3JhZ2VDRk5ldC5oCShyZXZpc2lvbiAxMzQ2ODcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZVN0b3JhZ2VDRk5l
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgT3Bh
cXVlQ0ZIVFRQQ29va2llU3RvcmFnZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOyAv
LyBXaWxsIGJlIG51bGwgd2hlbiB1c2luZyBzaGFyZWQgTlNIVFRQQ29va2llU3RvcmFnZS4KK2Ns
YXNzIE5ldHdvcmtpbmdDb250ZXh0OworCitSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoTmV0d29ya2luZ0NvbnRleHQqKTsgLy8gV2ls
bCBiZSBudWxsIHdoZW4gdXNpbmcgc2hhcmVkIE5TSFRUUENvb2tpZVN0b3JhZ2UuCiBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsg
Ly8gRG9lc24ndCB0YWtlIGN1cnJlbnQgc2Vzc2lvbiBpbnRvIGFjY291bnQuCiAKICNpZiBQTEFU
Rk9STShXSU4pCiAvLyBOZWVkZWQgZm9yIFdlYktpdDEgQVBJIG9ubHkuCiB2b2lkIG92ZXJyaWRl
Q29va2llU3RvcmFnZShDRkhUVFBDb29raWVTdG9yYWdlUmVmKTsKK0NGSFRUUENvb2tpZVN0b3Jh
Z2VSZWYgb3ZlcnJpZGVuQ29va2llU3RvcmFnZSgpOwogI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGTmV0LmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY1LDcgKzE2NSw3IEBAIHN0YXRpYyBDRlVSTFJlcXVlc3RSZWYgd2lsbFNlbmRSZXF1ZXN0KEMK
ICAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmV3TWV0aG9kID0gYWRvcHRDRihD
RlVSTFJlcXVlc3RDb3B5SFRUUFJlcXVlc3RNZXRob2QoY2ZSZXF1ZXN0KSk7CiAgICAgICAgICAg
ICBpZiAoQ0ZTdHJpbmdDb21wYXJlV2l0aE9wdGlvbnMobGFzdEhUVFBNZXRob2QuZ2V0KCksIG5l
d01ldGhvZC5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgQ0ZTdHJpbmdHZXRMZW5ndGgobGFzdEhUVFBN
ZXRob2QuZ2V0KCkpKSwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkpIHsKICAgICAgICAgICAg
ICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZj4gbXV0YWJsZVJlcXVlc3QoQWRv
cHRDRiwgQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoMCwgY2ZSZXF1ZXN0KSk7Ci0gICAg
ICAgICAgICAgICAgd2tTZXRSZXF1ZXN0U3RvcmFnZVNlc3Npb24oUmVzb3VyY2VIYW5kbGU6OmN1
cnJlbnRTdG9yYWdlU2Vzc2lvbigpLCBtdXRhYmxlUmVxdWVzdC5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgd2tTZXRSZXF1ZXN0U3RvcmFnZVNlc3Npb24oaGFuZGxlLT5zdG9yYWdlU2Vzc2lvbigp
LCBtdXRhYmxlUmVxdWVzdC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0
SFRUUFJlcXVlc3RNZXRob2QobXV0YWJsZVJlcXVlc3QuZ2V0KCksIGxhc3RIVFRQTWV0aG9kLmdl
dCgpKTsKIAogICAgICAgICAgICAgICAgIEZvcm1EYXRhKiBib2R5ID0gaGFuZGxlLT5maXJzdFJl
cXVlc3QoKS5odHRwQm9keSgpOwpAQCAtMzkyLDUzICszOTIsNiBAQCBSZXNvdXJjZUhhbmRsZTo6
flJlc291cmNlSGFuZGxlKCkKICAgICBMT0coTmV0d29yaywgIkNGTmV0IC0gRGVzdHJveWluZyBq
b2IgJXAgKCVzKSIsIHRoaXMsIGQtPm1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogfQogCi1zdGF0aWMgQ0ZVUkxSZXF1ZXN0UmVmIG1ha2VGaW5hbFJlcXVlc3Qo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNob3VsZENvbnRlbnRTbmlmZikK
LXsKLSAgICBDRk11dGFibGVVUkxSZXF1ZXN0UmVmIG5ld1JlcXVlc3QgPSBDRlVSTFJlcXVlc3RD
cmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZXF1ZXN0LmNmVVJMUmVxdWVz
dCgpKTsKLSAgICB3a1NldFJlcXVlc3RTdG9yYWdlU2Vzc2lvbihSZXNvdXJjZUhhbmRsZTo6Y3Vy
cmVudFN0b3JhZ2VTZXNzaW9uKCksIG5ld1JlcXVlc3QpOwotICAgIAotICAgIGlmICghc2hvdWxk
Q29udGVudFNuaWZmKQotICAgICAgICB3a1NldENGVVJMUmVxdWVzdFNob3VsZENvbnRlbnRTbmlm
ZihuZXdSZXF1ZXN0LCBmYWxzZSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFy
eVJlZj4gc3NsUHJvcHM7Ci0KLSAgICBpZiAoYWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3Rz
KCkuY29udGFpbnMocmVxdWVzdC51cmwoKS5ob3N0KCkubG93ZXIoKSkpIHsKLSAgICAgICAgc3Ns
UHJvcHMuYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoc3NsUHJvcHMu
Z2V0KCksIGtDRlN0cmVhbVNTTEFsbG93c0FueVJvb3QsIGtDRkJvb2xlYW5UcnVlKTsKLSAgICAg
ICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoc3NsUHJvcHMuZ2V0KCksIGtDRlN0cmVhbVNTTEFsbG93
c0V4cGlyZWRSb290cywga0NGQm9vbGVhblRydWUpOwotICAgICAgICBDRkRpY3Rpb25hcnlBZGRW
YWx1ZShzc2xQcm9wcy5nZXQoKSwga0NGU3RyZWFtU1NMQWxsb3dzRXhwaXJlZENlcnRpZmljYXRl
cywga0NGQm9vbGVhblRydWUpOwotICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShzc2xQcm9w
cy5nZXQoKSwga0NGU3RyZWFtU1NMVmFsaWRhdGVzQ2VydGlmaWNhdGVDaGFpbiwga0NGQm9vbGVh
bkZhbHNlKTsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPENGRGF0YVJl
Zj4gPjo6aXRlcmF0b3IgY2xpZW50Q2VydCA9IGNsaWVudENlcnRzKCkuZmluZChyZXF1ZXN0LnVy
bCgpLmhvc3QoKS5sb3dlcigpKTsKLSAgICBpZiAoY2xpZW50Q2VydCAhPSBjbGllbnRDZXJ0cygp
LmVuZCgpKSB7Ci0gICAgICAgIGlmICghc3NsUHJvcHMpCi0gICAgICAgICAgICBzc2xQcm9wcy5h
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwg
JmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcykpOwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICAgICAgd2tTZXRDbGllbnRDZXJ0aWZp
Y2F0ZUluU1NMUHJvcGVydGllcyhzc2xQcm9wcy5nZXQoKSwgKGNsaWVudENlcnQtPnZhbHVlKS5n
ZXQoKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAoc3NsUHJvcHMpCi0gICAgICAgIENGVVJM
UmVxdWVzdFNldFNTTFByb3BlcnRpZXMobmV3UmVxdWVzdCwgc3NsUHJvcHMuZ2V0KCkpOwotCi0g
ICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkgewotICAgICAgICBDRlVSTFJlcXVlc3RTZXRI
VFRQQ29va2llU3RvcmFnZShuZXdSZXF1ZXN0LCBjb29raWVTdG9yYWdlLmdldCgpKTsKLSAgICAg
ICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVT
dG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCkpOwotICAgICAg
ICBDRlVSTFJlcXVlc3RTZXRIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeShuZXdSZXF1ZXN0
LCBwb2xpY3kpOwotCi0gICAgICAgIC8vIElmIGEgVVJMIGFscmVhZHkgaGFzIGNvb2tpZXMsIHRo
ZW4gd2UnbGwgcmVsYXggdGhlIDNyZCBwYXJ0eSBjb29raWUgcG9saWN5IGFuZCBhY2NlcHQgbmV3
IGNvb2tpZXMuCi0gICAgICAgIGlmIChwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2Vw
dFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluKSB7Ci0gICAgICAgICAgICBDRlVSTFJl
ZiB1cmwgPSBDRlVSTFJlcXVlc3RHZXRVUkwobmV3UmVxdWVzdCk7Ci0gICAgICAgICAgICBSZXRh
aW5QdHI8Q0ZBcnJheVJlZj4gY29va2llcyhBZG9wdENGLCBDRkhUVFBDb29raWVTdG9yYWdlQ29w
eUNvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJsLCBmYWxzZSkpOwotICAgICAg
ICAgICAgaWYgKENGQXJyYXlHZXRDb3VudChjb29raWVzLmdldCgpKSkKLSAgICAgICAgICAgICAg
ICBDRlVSTFJlcXVlc3RTZXRNYWluRG9jdW1lbnRVUkwobmV3UmVxdWVzdCwgdXJsKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBuZXdSZXF1ZXN0OwotfQotCiBzdGF0aWMgQ0ZEaWN0
aW9uYXJ5UmVmIGNyZWF0ZUNvbm5lY3Rpb25Qcm9wZXJ0aWVzKGJvb2wgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UpCiB7CiAgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHdlYktpdFByaXZh
dGVTZXNzaW9uQ0YgPSBDRlNUUigiV2ViS2l0UHJpdmF0ZVNlc3Npb24iKTsKQEAgLTQ1NSw3ICs0
MDgsMjIgQEAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBjcmVhdGVDb25uZWN0aW9uUAogICAgIHJl
dHVybiBwcm9wZXJ0aWVzRGljdGlvbmFyeTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3Jl
YXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wg
c2hvdWxkQ29udGVudFNuaWZmKQorc3RhdGljIGJvb2wgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29v
a2llUG9saWN5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwpCit7
CisgICAgLy8gSWYgYSBVUkwgYWxyZWFkeSBoYXMgY29va2llcywgdGhlbiB3ZSdsbCByZWxheCB0
aGUgM3JkIHBhcnR5IGNvb2tpZSBwb2xpY3kgYW5kIGFjY2VwdCBuZXcgY29va2llcy4KKworICAg
IFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2UgPSBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KTsKKyAgICBDRkhUVFBDb29raWVTdG9yYWdl
QWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IENGSFRUUENvb2tpZVN0b3JhZ2VHZXRD
b29raWVBY2NlcHRQb2xpY3koY2ZDb29raWVTdG9yYWdlLmdldCgpKTsKKworICAgIGlmIChjb29r
aWVBY2NlcHRQb2xpY3kgIT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9t
TWFpbkRvY3VtZW50RG9tYWluKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5Q
dHI8Q0ZVUkxSZWY+IGNmVVJMID0gYWRvcHRDRih1cmwuY3JlYXRlQ0ZVUkwoKSk7CisgICAgUmV0
YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXMoQWRvcHRDRiwgQ0ZIVFRQQ29va2llU3RvcmFnZUNv
cHlDb29raWVzRm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQoKSwgY2ZVUkwuZ2V0KCksIGZhbHNl
KSk7CisgICAgcmV0dXJuIENGQXJyYXlHZXRDb3VudChjb29raWVzLmdldCgpKTsKK30KKwordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UsIGJvb2wgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llUG9saWN5LCBi
b29sIHNob3VsZENvbnRlbnRTbmlmZikKIHsKICAgICBpZiAoKCFkLT5tX3VzZXIuaXNFbXB0eSgp
IHx8ICFkLT5tX3Bhc3MuaXNFbXB0eSgpKSAmJiAhZmlyc3RSZXF1ZXN0KCkudXJsKCkucHJvdG9j
b2xJc0luSFRUUEZhbWlseSgpKSB7CiAgICAgICAgIC8vIENyZWRlbnRpYWxzIGZvciBmdHAgY2Fu
IG9ubHkgYmUgcGFzc2VkIGluIFVSTCwgdGhlIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSBkZWxlZ2F0ZSBjYWxsIHdvbid0IGJlIG1hZGUuCkBAIC00NjUsNiArNDMzLDkgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aQogICAgICAgICBmaXJzdFJlcXVl
c3QoKS5zZXRVUkwodXJsV2l0aENyZWRlbnRpYWxzKTsKICAgICB9CiAKKyAgICBpZiAoc2hvdWxk
UmVsYXhUaGlyZFBhcnR5Q29va2llUG9saWN5KQorICAgICAgICBmaXJzdFJlcXVlc3QoKS5zZXRG
aXJzdFBhcnR5Rm9yQ29va2llcyhmaXJzdFJlcXVlc3QoKS51cmwoKSk7CisKICAgICAvLyA8cmRh
cjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0
aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24s
IAogICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhlIGNyZWRlbnRpYWwgcHJlZW1wdGl2ZWx5LCBhcyBh
bGxvd2VkIGJ5IFJGQyAyNjE3LgogICAgIGlmIChzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSAm
JiBmaXJzdFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKQEAgLTQ4
NSw3ICs0NTYsNDAgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ0ZVUkxDb25uZWN0aQog
ICAgICAgICBhcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcihmaXJzdFJlcXVlc3QoKSwgZC0+
bV9pbml0aWFsQ3JlZGVudGlhbCk7CiAgICAgfQogCi0gICAgUmV0YWluUHRyPENGVVJMUmVxdWVz
dFJlZj4gcmVxdWVzdChBZG9wdENGLCBtYWtlRmluYWxSZXF1ZXN0KGZpcnN0UmVxdWVzdCgpLCBz
aG91bGRDb250ZW50U25pZmYpKTsKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlVVJMUmVxdWVzdFJl
Zj4gcmVxdWVzdCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgZmlyc3RSZXF1ZXN0KCkuY2ZVUkxSZXF1ZXN0KCkpKTsKKyAgICB3a1Nl
dFJlcXVlc3RTdG9yYWdlU2Vzc2lvbihkLT5tX3N0b3JhZ2VTZXNzaW9uLmdldCgpLCByZXF1ZXN0
LmdldCgpKTsKKyAgICAKKyAgICBpZiAoIXNob3VsZENvbnRlbnRTbmlmZikKKyAgICAgICAgd2tT
ZXRDRlVSTFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYocmVxdWVzdC5nZXQoKSwgZmFsc2UpOwor
CisgICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IHNzbFByb3BzOworCisgICAg
aWYgKGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmNvbnRhaW5zKGZpcnN0UmVxdWVz
dCgpLnVybCgpLmhvc3QoKS5sb3dlcigpKSkgeworICAgICAgICBzc2xQcm9wcy5hZG9wdENGKENG
RGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OworICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShzc2xQcm9wcy5nZXQoKSwga0NGU3RyZWFt
U1NMQWxsb3dzQW55Um9vdCwga0NGQm9vbGVhblRydWUpOworICAgICAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShzc2xQcm9wcy5nZXQoKSwga0NGU3RyZWFtU1NMQWxsb3dzRXhwaXJlZFJvb3RzLCBr
Q0ZCb29sZWFuVHJ1ZSk7CisgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHNzbFByb3BzLmdl
dCgpLCBrQ0ZTdHJlYW1TU0xBbGxvd3NFeHBpcmVkQ2VydGlmaWNhdGVzLCBrQ0ZCb29sZWFuVHJ1
ZSk7CisgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHNzbFByb3BzLmdldCgpLCBrQ0ZTdHJl
YW1TU0xWYWxpZGF0ZXNDZXJ0aWZpY2F0ZUNoYWluLCBrQ0ZCb29sZWFuRmFsc2UpOworICAgIH0K
KworICAgIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiA+OjppdGVyYXRvciBj
bGllbnRDZXJ0ID0gY2xpZW50Q2VydHMoKS5maW5kKGZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3Qo
KS5sb3dlcigpKTsKKyAgICBpZiAoY2xpZW50Q2VydCAhPSBjbGllbnRDZXJ0cygpLmVuZCgpKSB7
CisgICAgICAgIGlmICghc3NsUHJvcHMpCisgICAgICAgICAgICBzc2xQcm9wcy5hZG9wdENGKENG
RGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OworI2lmIFBMQVRGT1JNKFdJTikKKyAgICAgICAgd2tTZXRDbGllbnRDZXJ0aWZpY2F0ZUluU1NM
UHJvcGVydGllcyhzc2xQcm9wcy5nZXQoKSwgKGNsaWVudENlcnQtPnZhbHVlKS5nZXQoKSk7Cisj
ZW5kaWYKKyAgICB9CisKKyAgICBpZiAoc3NsUHJvcHMpCisgICAgICAgIENGVVJMUmVxdWVzdFNl
dFNTTFByb3BlcnRpZXMocmVxdWVzdC5nZXQoKSwgc3NsUHJvcHMuZ2V0KCkpOworCisjaWYgUExB
VEZPUk0oV0lOKQorICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdlUmVmIGNvb2tpZVN0b3JhZ2Ug
PSBvdmVycmlkZW5Db29raWVTdG9yYWdlKCkpIHsKKyAgICAgICAgLy8gT3ZlcnJpZGRlbiBjb29r
aWUgc3RvcmFnZSBkb2Vzbid0IGNvbWUgZnJvbSBhIHNlc3Npb24sIHNvIHRoZSByZXF1ZXN0IGRv
ZXMgbm90IGhhdmUgaXQgeWV0LgorICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQQ29va2llU3Rv
cmFnZShyZXF1ZXN0LmdldCgpLCBjb29raWVTdG9yYWdlKTsKKyAgICB9CisjZW5kaWYKIAogICAg
IENGVVJMQ29ubmVjdGlvbkNsaWVudF9WNiBjbGllbnQgPSB7IDYsIHRoaXMsIDAsIDAsIDAsIFdl
YkNvcmU6OndpbGxTZW5kUmVxdWVzdCwgZGlkUmVjZWl2ZVJlc3BvbnNlLCBkaWRSZWNlaXZlRGF0
YSwgMCwgZGlkRmluaXNoTG9hZGluZywgZGlkRmFpbCwgd2lsbENhY2hlUmVzcG9uc2UsIGRpZFJl
Y2VpdmVDaGFsbGVuZ2UsIGRpZFNlbmRCb2R5RGF0YSwgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2VDYWxsYmFjaywgMCwKICNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQpA
QCAtNTE1LDkgKzUxOSwxMSBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChOZXR3b3JraW5n
Q29uCiAgICAgaWYgKCFjb250ZXh0LT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIGQtPm1fc3RvcmFnZVNlc3Npb24gPSBjb250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpOwor
CiAgICAgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSA9ICFjbGllbnQoKSB8fCBjbGll
bnQoKS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UodGhpcyk7CiAKLSAgICBjcmVhdGVDRlVS
TENvbm5lY3Rpb24oc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGQtPm1fc2hvdWxkQ29udGVu
dFNuaWZmKTsKKyAgICBjcmVhdGVDRlVSTENvbm5lY3Rpb24oc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UsIHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVBvbGljeShjb250ZXh0LCBmaXJzdFJl
cXVlc3QoKS51cmwoKSksIGQtPm1fc2hvdWxkQ29udGVudFNuaWZmKTsKIAogI2lmIFBMQVRGT1JN
KFdJTikKICAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhDdXJyZW50TWVzc2FnZVF1ZXVl
KGQtPm1fY29ubmVjdGlvbi5nZXQoKSk7CkBAIC01NjYsNyArNTcyLDcgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KFJlcwogICAgICAgICB9CiAgICAgfQogCi0gICAgIHJl
cXVlc3Quc2V0U3RvcmFnZVNlc3Npb24oUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vz
c2lvbigpKTsKKyAgICByZXF1ZXN0LnNldFN0b3JhZ2VTZXNzaW9uKGQtPm1fc3RvcmFnZVNlc3Np
b24uZ2V0KCkpOwogCiAgICAgY2xpZW50KCktPndpbGxTZW5kUmVxdWVzdCh0aGlzLCByZXF1ZXN0
LCByZWRpcmVjdFJlc3BvbnNlKTsKIH0KQEAgLTcxMCw2ICs3MTYsMTEgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpbwogICAgICAgICBjbGllbnQoKS0+cmVjZWl2ZWRD
YW5jZWxsYXRpb24odGhpcywgY2hhbGxlbmdlKTsKIH0KIAorQ0ZVUkxTdG9yYWdlU2Vzc2lvblJl
ZiBSZXNvdXJjZUhhbmRsZTo6c3RvcmFnZVNlc3Npb24oKSBjb25zdAoreworICAgIHJldHVybiBk
LT5tX3N0b3JhZ2VTZXNzaW9uLmdldCgpOworfQorCiBDRlVSTENvbm5lY3Rpb25SZWYgUmVzb3Vy
Y2VIYW5kbGU6OmNvbm5lY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX2Nvbm5lY3Rp
b24uZ2V0KCk7CkBAIC03NDAsMTIgKzc1MSwxNCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpsb2Fk
UmVzb3VyY2VTeW5jaHJvCiAKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFk
b3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQuZ2V0KCksIGZhbHNlIC8q
ZGVmZXJzTG9hZGluZyovLCB0cnVlIC8qc2hvdWxkQ29udGVudFNuaWZmKi8pKTsKIAotICAgIGlm
IChjb250ZXh0ICYmIGhhbmRsZS0+ZC0+bV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1
cmUpIHsKKyAgICBoYW5kbGUtPmQtPm1fc3RvcmFnZVNlc3Npb24gPSBjb250ZXh0LT5zdG9yYWdl
U2Vzc2lvbigpOworCisgICAgaWYgKGhhbmRsZS0+ZC0+bV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAh
PSBOb0ZhaWx1cmUpIHsKICAgICAgICAgZXJyb3IgPSBjb250ZXh0LT5ibG9ja2VkRXJyb3IocmVx
dWVzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBoYW5kbGUtPmNyZWF0ZUNGVVJM
Q29ubmVjdGlvbihzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBS
ZXNvdXJjZUhhbmRsZTo6c2hvdWxkQ29udGVudFNuaWZmVVJMKHJlcXVlc3QudXJsKCkpKTsKKyAg
ICBoYW5kbGUtPmNyZWF0ZUNGVVJMQ29ubmVjdGlvbihzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVQb2xpY3koY29u
dGV4dCwgcmVxdWVzdC51cmwoKSksIFJlc291cmNlSGFuZGxlOjpzaG91bGRDb250ZW50U25pZmZV
UkwocmVxdWVzdC51cmwoKSkpOwogCiAgICAgQ0ZVUkxDb25uZWN0aW9uU2NoZWR1bGVXaXRoUnVu
TG9vcChoYW5kbGUtPmNvbm5lY3Rpb24oKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBzeW5jaHJv
bm91c0xvYWRSdW5Mb29wTW9kZSgpKTsKICAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZURvd25s
b2FkV2l0aFJ1bkxvb3AoaGFuZGxlLT5jb25uZWN0aW9uKCksIENGUnVuTG9vcEdldEN1cnJlbnQo
KSwgc3luY2hyb25vdXNMb2FkUnVuTG9vcE1vZGUoKSk7CkBAIC04MTEsOCArODI0LDcgQEAgYm9v
bCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUgogICAgIAogICAgIENGVVJMUmVz
cG9uc2VSZWYgY2ZSZXNwb25zZSA9IDA7CiAgICAgQ0ZFcnJvclJlZiBjZkVycm9yID0gMDsKLSAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZXF1ZXN0UmVmPiBjZlJlcXVlc3QoQWRvcHRDRiwgbWFrZUZpbmFs
UmVxdWVzdChyZXF1ZXN0LCB0cnVlKSk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YShB
ZG9wdENGLCBDRlVSTENvbm5lY3Rpb25TZW5kU3luY2hyb25vdXNSZXF1ZXN0KGNmUmVxdWVzdC5n
ZXQoKSwgJmNmUmVzcG9uc2UsICZjZkVycm9yLCByZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgpKSk7
CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRlVSTENvbm5lY3Rpb25T
ZW5kU3luY2hyb25vdXNSZXF1ZXN0KHJlcXVlc3QuY2ZVUkxSZXF1ZXN0KCksICZjZlJlc3BvbnNl
LCAmY2ZFcnJvciwgcmVxdWVzdC50aW1lb3V0SW50ZXJ2YWwoKSkpOwogICAgIGJvb2wgY2FjaGVk
ID0gY2ZSZXNwb25zZSAmJiAhY2ZFcnJvcjsKIAogICAgIGlmIChjZkVycm9yKQpAQCAtOTM4LDg0
ICs5NTAsNSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhQXJyYXkoQ0ZBCiB9CiAj
ZW5kaWYKIAotUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IFJlc291cmNlSGFuZGxl
OjpjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlm
aWVyKQotewotI2lmIFBMQVRGT1JNKFdJTikKLSAgICByZXR1cm4gUmV0YWluUHRyPENGVVJMU3Rv
cmFnZVNlc3Npb25SZWY+KEFkb3B0Q0YsIHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGlk
ZW50aWZpZXIsIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKSk7Ci0jZWxzZQotICAgIHJldHVybiBS
ZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4oQWRvcHRDRiwgd2tDcmVhdGVQcml2YXRl
U3RvcmFnZVNlc3Npb24oaWRlbnRpZmllcikpOwotI2VuZGlmCi19Ci0KLUNGVVJMU3RvcmFnZVNl
c3Npb25SZWYgUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpCi17Ci0gICAg
aWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uID0gcHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAgcmV0dXJuIHByaXZhdGVTdG9yYWdl
U2Vzc2lvbjsKLSAgICByZXR1cm4gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci19Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZj4mIGRlZmF1bHRDRlVSTFN0b3JhZ2VT
ZXNzaW9uKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmPiwgc3RvcmFnZVNlc3Npb24sICgpKTsKLSAgICByZXR1cm4gc3RvcmFnZVNl
c3Npb247Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdlU2Vzc2lv
bihDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uKQotewotICAgIGRlZmF1bHRD
RlVSTFN0b3JhZ2VTZXNzaW9uKCkgPSBzdG9yYWdlU2Vzc2lvbjsKLX0KLQotQ0ZVUkxTdG9yYWdl
U2Vzc2lvblJlZiBSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkKLXsKLSAg
ICByZXR1cm4gZGVmYXVsdENGVVJMU3RvcmFnZVNlc3Npb24oKS5nZXQoKTsKLX0KLQotc3RhdGlj
IFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9u
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNz
aW9uUmVmPiwgc3RvcmFnZVNlc3Npb24sICgpKTsKLSAgICByZXR1cm4gc3RvcmFnZVNlc3Npb247
Ci19Ci0KLXN0YXRpYyBTdHJpbmcmIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRp
ZmllckJhc2UoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYXNlLCAoKSk7
Ci0gICAgcmV0dXJuIGJhc2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVC
cm93c2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIGlmICghZW5hYmxlZCkgewotICAg
ICAgICBwcml2YXRlU3RvcmFnZVNlc3Npb24oKSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAocHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFN0cmluZyBiYXNlID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVu
dGlmaWVyQmFzZSgpLmlzTnVsbCgpID8gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVu
dGlmaWVyRGVmYXVsdEJhc2UoKSA6IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRp
ZmllckJhc2UoKTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IFN0
cmluZyhiYXNlICsgIi5Qcml2YXRlQnJvd3NpbmciKS5jcmVhdGVDRlN0cmluZygpOwotCi0gICAg
cHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkgPSBjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbihjZklkZW50aWZpZXIuZ2V0KCkpOwotfQotCi1DRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJl
c291cmNlSGFuZGxlOjpwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpCi17Ci0gICAgcmV0
dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lvbigpLmdldCgpOwotfQotCi12b2lkIFJlc291cmNlSGFu
ZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllcikKLXsKLSAgICBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lv
bklkZW50aWZpZXJCYXNlKCkgPSBpZGVudGlmaWVyOwotfQotCi0jaWYgUExBVEZPUk0oV0lOKSB8
fCBVU0UoQ0ZORVRXT1JLKQotCi1TdHJpbmcgUmVzb3VyY2VIYW5kbGU6OnByaXZhdGVCcm93c2lu
Z1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckRlZmF1bHRCYXNlKCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQnVuZGxlR2V0VmFsdWVGb3JJbmZv
RGljdGlvbmFyeUtleShDRkJ1bmRsZUdldE1haW5CdW5kbGUoKSwga0NGQnVuZGxlSWRlbnRpZmll
cktleSkpKTsKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291
cmNlUmVxdWVzdENGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAkocmV2aXNpb24gMTM0Njg3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5l
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYsNiBAQCB2b2lkIFJlc291cmNlUmVx
dWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlCiAgICAgICAgIENGVVJMUmVxdWVzdFNldFRpbWVvdXRJ
bnRlcnZhbChjZlJlcXVlc3QsIHRpbWVvdXRJbnRlcnZhbCgpKTsKICAgICB9IGVsc2UKICAgICAg
ICAgY2ZSZXF1ZXN0ID0gQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZSgwLCB1cmwuZ2V0KCksIChD
RlVSTFJlcXVlc3RDYWNoZVBvbGljeSljYWNoZVBvbGljeSgpLCB0aW1lb3V0SW50ZXJ2YWwoKSwg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMuZ2V0KCkpOwotICAgIHdrU2V0UmVxdWVzdFN0b3JhZ2VTZXNz
aW9uKFJlc291cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFnZVNlc3Npb24oKSwgY2ZSZXF1ZXN0KTsK
IAogICAgIENGVVJMUmVxdWVzdFNldEhUVFBSZXF1ZXN0TWV0aG9kKGNmUmVxdWVzdCwgaHR0cE1l
dGhvZCgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29va2llSmFyTWFjLm1tCShyZXZpc2lvbiAx
MzQ2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkNvb2tpZVN0
b3JhZ2UuaCIKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgogI2ltcG9ydCAiS1VSTC5o
IgorI2ltcG9ydCAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUsNyArNjYsNyBAQCBTdHJp
bmcgY29va2llc0ZvckRPTShOZXR3b3JraW5nQ29udGV4dCogCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCi0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6
IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIE5T
QXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCks
IHVybCk7CiAgICAgcmV0dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRo
Q29va2llczpmaWx0ZXJDb29raWVzKGNvb2tpZXMpLmdldCgpXSBvYmplY3RGb3JLZXk6QCJDb29r
aWUiXTsKIApAQCAtNzcsNyArNzgsNyBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoTmV0CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdl
KCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2Ug
PSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0
Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29r
aWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCk7CiAgICAgcmV0dXJuIFtbTlNIVFRQ
Q29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpjb29raWVzXSBvYmplY3RGb3JL
ZXk6QCJDb29raWUiXTsKIApAQCAtMTAyLDcgKzEwMyw3IEBAIHZvaWQgc2V0Q29va2llc0Zyb21E
T00oTmV0d29ya2luZ0NvbnRleHQKICAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29r
aWVzID0gZmlsdGVyQ29va2llcyhbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFk
ZXJGaWVsZHM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcg
Zm9yS2V5OkAiU2V0LUNvb2tpZSJdIGZvclVSTDpjb29raWVVUkxdKTsKICAgICBBU1NFUlQoW2Zp
bHRlcmVkQ29va2llcy5nZXQoKSBjb3VudF0gPD0gMSk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KSA6IGRlZmF1bHRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CiAgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgp
LCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eSk7CiAKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMTEyLDcgKzExMyw3IEBAIGJvb2wgY29va2ll
c0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGMKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CiAKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVs
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZShjb250ZXh0KSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgTlNIVFRQQ29v
a2llQWNjZXB0UG9saWN5IGNvb2tpZUFjY2VwdFBvbGljeSA9IHN0YXRpY19jYXN0PE5TSFRUUENv
b2tpZUFjY2VwdFBvbGljeT4od2tHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3Jh
Z2UuZ2V0KCkpKTsKICAgICByZXR1cm4gY29va2llQWNjZXB0UG9saWN5ID09IE5TSFRUUENvb2tp
ZUFjY2VwdFBvbGljeUFsd2F5cyB8fCBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29va2ll
QWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAKQEAgLTEyNSw3ICsxMjYs
NyBAQCBib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvCiAgICAgcmF3Q29v
a2llcy5jbGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIFJl
dGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdl
ID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRleHQpIDogZGVmYXVs
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29v
a2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCB1cmwpOwogICAgIE5TVUludGVnZXIgY291
bnQgPSBbY29va2llcyBjb3VudF07CiAgICAgcmF3Q29va2llcy5yZXNlcnZlQ2FwYWNpdHkoY291
bnQpOwpAQCAtMTQ1LDcgKzE0Niw3IEBAIHZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250
ZXh0KiBjb24KICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBOU1VSTCAq
Y29va2llVVJMID0gdXJsOwotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
b29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBk
ZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKGNvbnRleHQpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBOU0Fy
cmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCBj
b29raWVVUkwpOwogCiAgICAgTlNTdHJpbmcgKmNvb2tpZU5hbWVTdHJpbmcgPSBjb29raWVOYW1l
OwpAQCAtMTY0LDcgKzE2NSw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29y
a2luZ0MKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsK
KyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNv
bnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KSA6IGRlZmF1bHRDRkhU
VFBDb29raWVTdG9yYWdlKCk7CiAgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMo
Y29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgCiAgICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tp
ZSBpbiBjb29raWVzKQpAQCAtMTc3LDcgKzE3OCw3IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKE5ldHdvcmtpbmcKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAK
LSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNv
bnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KSA6
IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgTlNBcnJheSAqY29va2llcyA9IHdr
SFRUUENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7CiAgICAgaWYgKCFjb29raWVzKQogICAg
ICAgICByZXR1cm47CkBAIC0xOTIsNyArMTkzLDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoTmV0d29ya2luZwogCiB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRl
eHQqIGNvbnRleHQpCiB7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRl
ZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0
b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIHdrRGVs
ZXRlQWxsSFRUUENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFu
ZGxlTWFjLm1tCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQzLDMy
ICsxNDMsMjIgQEAgUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCiAgICAgTE9HKE5l
dHdvcmssICJIYW5kbGUgJXAgZGVzdHJveWVkIiwgdGhpcyk7CiB9CiAKLXN0YXRpYyBib29sIHNo
b3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVBvbGljeShjb25zdCBLVVJMJiB1cmwpCitzdGF0aWMg
Ym9vbCBzaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVQb2xpY3koTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICAvLyBJZiBhIFVSTCBhbHJlYWR5IGhh
cyBjb29raWVzLCB0aGVuIHdlJ2xsIHJlbGF4IHRoZSAzcmQgcGFydHkgY29va2llIHBvbGljeSBh
bmQgYWNjZXB0IG5ldyBjb29raWVzLgogCi0gICAgTlNIVFRQQ29va2llU3RvcmFnZSAqc2hhcmVk
U3RvcmFnZSA9IFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXTsK
LQotICAgIE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3k7Ci0gICAg
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNmQ29va2llU3RvcmFnZSA9IGN1cnJl
bnRDRkhUVFBDb29raWVTdG9yYWdlKCk7Ci0gICAgaWYgKGNmQ29va2llU3RvcmFnZSkKLSAgICAg
ICAgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9s
aWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY2ZDb29raWVTdG9yYWdlLmdldCgpKSk7
Ci0gICAgZWxzZQotICAgICAgICBjb29raWVBY2NlcHRQb2xpY3kgPSBbc2hhcmVkU3RvcmFnZSBj
b29raWVBY2NlcHRQb2xpY3ldOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBjZkNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KTsK
KyAgICBOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGlj
X2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xp
Y3koY2ZDb29raWVTdG9yYWdlLmdldCgpKSk7CiAKICAgICBpZiAoY29va2llQWNjZXB0UG9saWN5
ICE9IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBOU0FycmF5ICpjb29raWVzOwotICAgIGlmIChj
ZkNvb2tpZVN0b3JhZ2UpCi0gICAgICAgIGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNm
Q29va2llU3RvcmFnZS5nZXQoKSwgdXJsKTsKLSAgICBlbHNlCi0gICAgICAgIGNvb2tpZXMgPSBb
c2hhcmVkU3RvcmFnZSBjb29raWVzRm9yVVJMOnVybF07CisgICAgTlNBcnJheSAqY29va2llcyA9
IHdrSFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdldCgpLCB1cmwpOwogCiAgICAg
cmV0dXJuIFtjb29raWVzIGNvdW50XTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRl
TlNVUkxDb25uZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZU5TVVJMQ29ubmVjdGlvbihpZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSwgYm9vbCBzaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVQb2xpY3ksIGJvb2wgc2hvdWxk
Q29udGVudFNuaWZmKQogewogICAgIC8vIENyZWRlbnRpYWxzIGZvciBmdHAgY2FuIG9ubHkgYmUg
cGFzc2VkIGluIFVSTCwgdGhlIGNvbm5lY3Rpb246ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOiBkZWxlZ2F0ZSBjYWxsIHdvbid0IGJlIG1hZGUuCiAgICAgaWYgKCghZC0+bV91c2Vy
LmlzRW1wdHkoKSB8fCAhZC0+bV9wYXNzLmlzRW1wdHkoKSkgJiYgIWZpcnN0UmVxdWVzdCgpLnVy
bCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewpAQCAtMTc4LDcgKzE2OCw3IEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGkKICAgICAgICAgZmlyc3RSZXF1ZXN0
KCkuc2V0VVJMKHVybFdpdGhDcmVkZW50aWFscyk7CiAgICAgfQogCi0gICAgaWYgKHNob3VsZFJl
bGF4VGhpcmRQYXJ0eUNvb2tpZVBvbGljeShmaXJzdFJlcXVlc3QoKS51cmwoKSkpCisgICAgaWYg
KHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVBvbGljeSkKICAgICAgICAgZmlyc3RSZXF1ZXN0
KCkuc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogCiAgICAg
aWYgKHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlICYmIGZpcnN0UmVxdWVzdCgpLnVybCgpLnBy
b3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewpAQCAtMjEzLDggKzIwMyw4IEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGkKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1Nl
dHRpbmdDb25uZWN0aW9uUHJvcGVydGllcyA9IFtOU1VSTENvbm5lY3Rpb24gaW5zdGFuY2VzUmVz
cG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKF9pbml0V2l0aFJlcXVlc3Q6ZGVsZWdhdGU6dXNlc0Nh
Y2hlOm1heENvbnRlbnRMZW5ndGg6c3RhcnRJbW1lZGlhdGVseTpjb25uZWN0aW9uUHJvcGVydGll
czopXTsKICNlbmRpZgogCi0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNl
c3Npb24gPSBjdXJyZW50U3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAgbnNSZXF1ZXN0ID0gW3dr
Q29weVJlcXVlc3RXaXRoU3RvcmFnZVNlc3Npb24oc3RvcmFnZVNlc3Npb24sIG5zUmVxdWVzdCkg
YXV0b3JlbGVhc2VdOworICAgIGlmIChkLT5tX3N0b3JhZ2VTZXNzaW9uKQorICAgICAgICBuc1Jl
cXVlc3QgPSBbd2tDb3B5UmVxdWVzdFdpdGhTdG9yYWdlU2Vzc2lvbihkLT5tX3N0b3JhZ2VTZXNz
aW9uLmdldCgpLCBuc1JlcXVlc3QpIGF1dG9yZWxlYXNlXTsKIAogICAgIGlmIChzdXBwb3J0c1Nl
dHRpbmdDb25uZWN0aW9uUHJvcGVydGllcykgewogICAgICAgICBOU0RpY3Rpb25hcnkgKnNlc3Np
b25JRCA9IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlID8gW05TRGljdGlvbmFyeSBkaWN0aW9u
YXJ5XSA6IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6QCJXZWJLaXRQcml2YXRl
U2Vzc2lvbiIgZm9yS2V5OkAiX2tDRlVSTENvbm5lY3Rpb25TZXNzaW9uSUQiXTsKQEAgLTI0MCw2
ICsyMzAsOCBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChOZXR3b3JraW5nQ29uCiAgICAg
aWYgKCFjb250ZXh0LT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGQt
Pm1fc3RvcmFnZVNlc3Npb24gPSBjb250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpOworCiAgICAgQVNT
RVJUKCFkLT5tX3Byb3h5KTsKICAgICBkLT5tX3Byb3h5LmFkb3B0TlMod2tDcmVhdGVOU1VSTENv
bm5lY3Rpb25EZWxlZ2F0ZVByb3h5KCkpOwogICAgIFtzdGF0aWNfY2FzdDxXZWJDb3JlTlNVUkxD
b25uZWN0aW9uRGVsZWdhdGVQcm94eSo+KGQtPm1fcHJveHkuZ2V0KCkpIHNldERlbGVnYXRlOlJl
c291cmNlSGFuZGxlOjpkZWxlZ2F0ZSgpXTsKQEAgLTI1MSw2ICsyNDMsNyBAQCBib29sIFJlc291
cmNlSGFuZGxlOjpzdGFydChOZXR3b3JraW5nQ29uCiAgICAgY3JlYXRlTlNVUkxDb25uZWN0aW9u
KAogICAgICAgICBkLT5tX3Byb3h5LmdldCgpLAogICAgICAgICBzaG91bGRVc2VDcmVkZW50aWFs
U3RvcmFnZSwKKyAgICAgICAgc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llUG9saWN5KGNvbnRl
eHQsIGZpcnN0UmVxdWVzdCgpLnVybCgpKSwKICAgICAgICAgZC0+bV9zaG91bGRDb250ZW50U25p
ZmYgfHwgY29udGV4dC0+bG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpKTsKIAogICAg
IGJvb2wgc2NoZWR1bGVkID0gZmFsc2U7CkBAIC0zNjksOCArMzYyLDggQEAgYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUgogICAgIHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3ko
UmV0dXJuQ2FjaGVEYXRhRG9udExvYWQpOwogICAgIE5TVVJMUmVzcG9uc2UgKm5zVVJMUmVzcG9u
c2UgPSBuaWw7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgW05T
VVJMQ29ubmVjdGlvbiBzZW5kU3luY2hyb25vdXNSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0
KCkgcmV0dXJuaW5nUmVzcG9uc2U6Jm5zVVJMUmVzcG9uc2UgZXJyb3I6bmlsXTsKKworICAgIFtO
U1VSTENvbm5lY3Rpb24gc2VuZFN5bmNocm9ub3VzUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVz
dCgpIHJldHVybmluZ1Jlc3BvbnNlOiZuc1VSTFJlc3BvbnNlIGVycm9yOm5pbF07CiAgICAgCiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKQEAgLTQwMyw2ICszOTYsOCBAQCB2
b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvCiAKICAgICBSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0
LCBjbGllbnQuZ2V0KCksIGZhbHNlIC8qZGVmZXJzTG9hZGluZyovLCB0cnVlIC8qc2hvdWxkQ29u
dGVudFNuaWZmKi8pKTsKIAorICAgIGhhbmRsZS0+ZC0+bV9zdG9yYWdlU2Vzc2lvbiA9IGNvbnRl
eHQtPnN0b3JhZ2VTZXNzaW9uKCk7CisKICAgICBpZiAoY29udGV4dCAmJiBoYW5kbGUtPmQtPm1f
c2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKSB7CiAgICAgICAgIGVycm9yID0gY29u
dGV4dC0+YmxvY2tlZEVycm9yKHJlcXVlc3QpOwogICAgICAgICByZXR1cm47CkBAIC00MTEsNyAr
NDA2LDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hybwogICAgIGhh
bmRsZS0+Y3JlYXRlTlNVUkxDb25uZWN0aW9uKAogICAgICAgICBoYW5kbGUtPmRlbGVnYXRlKCks
IC8vIEEgc3luY2hyb25vdXMgcmVxdWVzdCBjYW5ub3QgdHVybiBpbnRvIGEgZG93bmxvYWQsIHNv
IHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJveHkgdGhlIGRlbGVnYXRlLgogICAgICAgICBzdG9yZWRD
cmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzLAotICAgICAgICBoYW5kbGUtPnNo
b3VsZENvbnRlbnRTbmlmZigpIHx8IChjb250ZXh0ICYmIGNvbnRleHQtPmxvY2FsRmlsZUNvbnRl
bnRTbmlmZmluZ0VuYWJsZWQoKSkpOworICAgICAgICBzaG91bGRSZWxheFRoaXJkUGFydHlDb29r
aWVQb2xpY3koY29udGV4dCwgcmVxdWVzdC51cmwoKSksCisgICAgICAgIGhhbmRsZS0+c2hvdWxk
Q29udGVudFNuaWZmKCkgfHwgY29udGV4dC0+bG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxl
ZCgpKTsKIAogICAgIFtoYW5kbGUtPmNvbm5lY3Rpb24oKSBzY2hlZHVsZUluUnVuTG9vcDpbTlNS
dW5Mb29wIGN1cnJlbnRSdW5Mb29wXSBmb3JNb2RlOihOU1N0cmluZyAqKXN5bmNocm9ub3VzTG9h
ZFJ1bkxvb3BNb2RlKCldOwogICAgIFtoYW5kbGUtPmNvbm5lY3Rpb24oKSBzdGFydF07CkBAIC00
NzYsOCArNDcyLDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KFJlcwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFn
ZVNlc3Npb24gPSBjdXJyZW50U3RvcmFnZVNlc3Npb24oKSkKLSAgICAgICAgcmVxdWVzdC5zZXRT
dG9yYWdlU2Vzc2lvbihzdG9yYWdlU2Vzc2lvbik7CisgICAgaWYgKGQtPm1fc3RvcmFnZVNlc3Np
b24pCisgICAgICAgIHJlcXVlc3Quc2V0U3RvcmFnZVNlc3Npb24oZC0+bV9zdG9yYWdlU2Vzc2lv
bi5nZXQoKSk7CiAKICAgICBjbGllbnQoKS0+d2lsbFNlbmRSZXF1ZXN0KHRoaXMsIHJlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOwogfQpAQCAtNjIzLDExICs2MTksNiBAQCB2b2lkIFJlc291cmNl
SGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlvCiAgICAgICAgIGNsaWVudCgpLT5yZWNlaXZlZENh
bmNlbGxhdGlvbih0aGlzLCBjaGFsbGVuZ2UpOwogfQogCi1TdHJpbmcgUmVzb3VyY2VIYW5kbGU6
OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckRlZmF1bHRCYXNlKCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmll
cl0pOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJD
b3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVnYXRlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzQ4
MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw1NCBAQAorMjAxMi0xMS0xNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4K
KworICAgICAgICBQcml2YXRlIEJyb3dzaW5nIGlzIGEgcGVyLXBhZ2Ugc2V0dGluZyB0aGF0IHNl
dHMgYSBnbG9iYWwgdmFsdWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY3ODcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBw
cm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJl
bG93IChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQuaDogQWRkZWQgc3RvcmFnZVNlc3Npb24oKS4KKworICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKTogSnVzdCBhbHdheXMg
ZmFsbCBiYWNrIHRvIGRlZmF1bHQKKyAgICAgICAgc28gZmFyLgorCisgICAgICAgICogV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXNN
YWMubW0gZm9yIHN0cmF0ZWd5CisgICAgICAgIGNvZGUgdGhhdCB1c2VzIE9iamVjdGl2ZSBDLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kpOiBVc2UgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dAorICAgICAgICBp
bnN0ZWFkIG9mIGhhcmRjb2RpbmcgYWNjZXNzIHRvIHNlc3Npb3NuIGhlcmUuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQpOiBDcmVh
dGUgYW5kIGRlc3Ryb3kgcHJpdmF0ZQorICAgICAgICBicm93c2luZyBzZXNzaW9uIGFzIGFwcHJv
cHJpYXRlLgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6c3dpdGNoTmV0d29ya0xv
YWRlclRvTmV3VGVzdGluZ1Nlc3Npb24pOiBVc2UgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dAor
ICAgICAgICBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgYWNjZXNzIHRvIHNlc3Npb3NuIGhlcmUuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBsYXRmb3Jt
U3RyYXRlZ2llc01hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6ZGVmYXVsdENvb2tpZVN0b3JhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWZhdWx0Q29va2llU3RvcmFnZSk6CisgICAgICAgIElt
cGxlbWVudGVkIGRlZmF1bHRDb29raWVTdG9yYWdlKCkgdGhyb3VnaCBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIE1vdmVkIGNv
ZGUgZm9yIGRlYWxpbmcgd2l0aCBnbG9iYWwgY29udGV4dHMgaGVyZSBmcm9tIFdlYkNvcmUuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6IChXZWJLaXQ6OldlYlBh
Z2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKyAgICAgICAgQ3JlYXRlIGEgZ2xvYmFsIHByaXZhdGUg
c2Vzc2lvbiB3aGVuIGFueSBwYWdlIGVudGVycyBwcml2YXRlIGJyb3dzaW5nLCBhbmQKKyAgICAg
ICAgZGVsZXRlIGl0IHdoZW4gYW55IHBhZ2UgZXhpdHMgcHJpdmF0ZSBicm93c2luZy4gVGhpcyBp
cyBoYW5kbGluZyBhIHByZWZlcmVuY2UKKyAgICAgICAgY2hhbmdlLCBzbyBhbGwgcGFnZXMgZ2V0
IGl0IG9uY2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtSGFzTG9jYWxEYXRhRm9yVVJM
KTogVXNlIG1haW4gZnJhbWUncyBjb250ZXh0LgorICAgICAgICAoV2ViS2l0OjpjYWNoZWRSZXNw
b25zZUZvclVSTCk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cDogKFdlYktpdDo6V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MpOiBVcGRhdGVkCisg
ICAgICAgIHRvIHRhbGsgdG8gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCBpbnN0ZWFkIG9mIFJl
c291cmNlSGFuZGxlIGZvciBnbG9iYWwgc2Vzc2lvbi4KKwogMjAxMi0xMS0xNSAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnNvbGlkYXRlIGZvdXIg
YWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgV0tWaWV3IG1ldGhvZHMgaW50byBhIHNpbmdsZSBtZXRo
b2QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBi
b29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBib29sIGxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24oKSBjb25z
dCBPVkVSUklERTsKICAgICB2aXJ0dWFsIE5TT3BlcmF0aW9uUXVldWUgKnNjaGVkdWxlZE9wZXJh
dGlvblF1ZXVlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25z
dCBPVkVSUklERTsKIApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1Jl
bW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMTM0
Njg3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxMiBAQCBib29sIFJlbW90
ZU5ldHdvcmtpbmdDb250ZXh0Ojpsb2NhbEZpbGVDCiAgICAgcmV0dXJuIG1fbG9jYWxGaWxlQ29u
dGVudFNuaWZmaW5nRW5hYmxlZDsKIH0KIAorQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBSZW1vdGVO
ZXR3b3JraW5nQ29udGV4dDo6c3RvcmFnZVNlc3Npb24oKSBjb25zdAoreworICAgIC8vIEZJWE1F
IChOZXR3b3JrUHJvY2Vzcyk6IEltcGxlbWVudC4KKyAgICByZXR1cm4gMDsKK30KKwogTlNPcGVy
YXRpb25RdWV1ZSAqUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OnNjaGVkdWxlZE9wZXJhdGlvblF1
ZXVlKCkgY29uc3QKIHsKICAgICBzdGF0aWMgTlNPcGVyYXRpb25RdWV1ZSAqcXVldWU7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwMzUsNiArMTAzNSw3IEBACiAJCUUx
Qjc4NDczMTYzRjI1M0UwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQjc4NDcyMTYzRjI1
M0UwMDA3QjY5MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSAqLzsgfTsKIAkJRTFDQzFC
OTAxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQzFCOEUxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50
SW5mby5oICovOyB9OwogCQlFMUNDMUI5MTEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQzFC
OEYxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mb01hYy5tbSAqLzsgfTsKKwkJRTFEMjI5NzEx
NjUyREM1MjAwQkFBNEJEIC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llc01hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRDIyOTZFMTY1MkRCOUMwMEJB
QTRCRCAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXNNYWMubW0gKi87IH07CiAJCUUxRURGREE2MTYy
ODg2OEUwMDM5RUNEQSAvKiBNYWluTWFjUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTZGQTMxMDExRTM5MjFFMDBEQjEzNzEgLyogTWFp
bk1hY1Byb2Nlc3MuY3BwICovOyB9OwogCQlFMUVERkRBNzE2Mjg4Njk2MDAzOUVDREEgLyogU2hh
cmVkV29ya2VyUHJvY2Vzc01haW5NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMUVERkQ5QjE2Mjg3RDBCMDAzOUVDREEgLyogU2hhcmVkV29ya2Vy
UHJvY2Vzc01haW5NYWMubW0gKi87IH07CiAJCUUxRURGREE4MTYyODg2OTkwMDM5RUNEQSAvKiBT
aGFyZWRXb3JrZXJQcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFFREZEQTIxNjI4ODM4QzAwMzlFQ0RBIC8qIFNoYXJlZFdvcmtlclBy
b2Nlc3NNYWMubW0gKi87IH07CkBAIC0yMzI1LDYgKzIzMjYsNyBAQAogCQlFMUI3ODQ3MjE2M0Yy
NTNFMDAwN0I2OTIgLyogUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDQzFCOEUxMkQ3RUFERjAwNjI1ODM4IC8qIFBy
aW50SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmludEluZm8uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDQzFCOEYxMkQ3RUFERjAwNjI1ODM4IC8q
IFByaW50SW5mb01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFByaW50SW5mb01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFEMjI5NkUx
NjUyREI5QzAwQkFBNEJEIC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llc01hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBsYXRmb3JtU3RyYXRlZ2llc01hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFREZEOTgxNjI4N0JEMTAwMzlFQ0RB
IC8qIFNoYXJlZFdvcmtlclByb2Nlc3NNYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNoYXJlZFdvcmtlclByb2Nlc3NNYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxRURGRDlCMTYyODdEMEIwMDM5RUNEQSAvKiBTaGFyZWRXb3JrZXJQcm9jZXNzTWFp
bk1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNoYXJlZFdv
cmtlclByb2Nlc3NNYWluTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUVE
RkQ5RDE2Mjg3RjE5MDAzOUVDREEgLyogU2hhcmVkV29ya2VyUHJvY2Vzcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRXb3JrZXJQcm9jZXNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0zNzA2LDYgKzM3MDgsNyBAQAogCQkJCUJDMTExQURGMTEyRjVC
QzIwMDMzN0JBQiAvKiBXZWJFcnJvcnNNYWMubW0gKi8sCiAJCQkJOTM5MUYyODMxMjFCMzhGNTAw
RUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCAqLywKIAkJCQk5MzkxRjI4NDEy
MUIzOEY1MDBFQkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbSAqLywKKwkJCQlF
MUQyMjk2RTE2NTJEQjlDMDBCQUE0QkQgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzTWFjLm1tICov
LAogCQkJCUJDQzQzQUM2MTI3Qjk5REUwMDMxN0YxNiAvKiBXZWJQb3B1cE1lbnVNYWMubW0gKi8s
CiAJCQkJQkNDNTcxNTkxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5oICov
LAogCQkJCUJDQzU3MTVBMTE1QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubW0g
Ki8sCkBAIC01OTMwLDYgKzU5MzMsNyBAQAogCQkJCTUxMjE3NDYwMTY0QzIwRTMwMDM3QTVDMSAv
KiBTaGFyZWFibGVSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTIxNzQ2NDE2NEMy
MTM3MDAzN0E1QzEgLyogV2ViUmVzb3VyY2VCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUFGMUFDNkIxNjUxNzU5RTAwQzE3RDdGIC8qIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJRTFEMjI5NzExNjUyREM1MjAwQkFBNEJEIC8qIFdlYlBsYXRm
b3JtU3RyYXRlZ2llc01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQTNENzVCMTY1MUI0NEYw
MDg3MTNEMCAvKiBSZW1vdGVMYXllclRyZWVIb3N0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFB
M0Q3NjExNjUxQjdEMzAwODcxM0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3RNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGRDE4QjUxNjUxRkJBRDAwREJFMUNFIC8qIE5l
dHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsNyBAQAogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUg
IldlYkRhdGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAi
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uTWFu
YWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5oIgog
I2luY2x1ZGUgIldlYk1lZGlhQ2FjaGVNYW5hZ2VyLmgiCkBAIC0yODAsNyArMjgxLDcgQEAgdm9p
ZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhjbwogCiAjaWYgUExBVEZPUk0oTUFD
KSB8fCBVU0UoQ0ZORVRXT1JLKQogICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFNlbmQg
dGhpcyBpZGVudGlmaWVyIHRvIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICBXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZShw
YXJhbWV0ZXJzLnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIpOworICAgIFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQ6OnNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJh
c2UocGFyYW1ldGVycy51aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyKTsKICNlbmRpZgogCiAjaWYg
RU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Q29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0JKHJl
dmlzaW9uIDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9tYWMv
V2ViQ29va2llTWFuYWdlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAog
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkNvb2tpZU1hbmFnZXIuaCIKLSNpbXBv
cnQgPFdlYkNvcmUvQ29va2llU3RvcmFnZUNGTmV0Lmg+Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1J
bnRlcmZhY2UuaD4KKworI2ltcG9ydCAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMzQsMTAgKzM0LDcgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNj
ZXB0UG9saWN5KEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQogewotICAgIFtbTlNIVFRQ
Q29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llQWNjZXB0UG9s
aWN5OnN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4ocG9saWN5KV07Ci0KLSAg
ICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQotICAgICAgICBXS1NldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQoKSwgcG9saWN5KTsKKyAgICBXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0OjpzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyhwb2xpY3kp
OwogfQogCiBIVFRQQ29va2llQWNjZXB0UG9saWN5IFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3Jt
R2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAko
cmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAK
ICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFz
ZU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUHJl
ZmVyZW5jZXNTdG9yZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKQEAgLTI2OCw2ICsyNjks
MTIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0SmF2YVNjcmlwdENhbkFjYwogCiB2b2lkIElu
amVjdGVkQnVuZGxlOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKFdlYlBhZ2VHcm91cFByb3h5
KiBwYWdlR3JvdXAsIGJvb2wgZW5hYmxlZCkKIHsKKyNpZiBQTEFURk9STShNQUMpIHx8IFVTRShD
Rk5FVFdPUkspCisgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIFdlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKTsKKyAgICBlbHNlCisgICAgICAg
IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9u
KCk7CisjZW5kaWYKICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBQYWdlR3JvdXA6
OnBhZ2VHcm91cChwYWdlR3JvdXAtPmlkZW50aWZpZXIoKSktPnBhZ2VzKCk7CiAgICAgZm9yIChI
YXNoU2V0PFBhZ2UqPjo6aXRlcmF0b3IgaXRlciA9IHBhZ2VzLmJlZ2luKCk7IGl0ZXIgIT0gcGFn
ZXMuZW5kKCk7ICsraXRlcikKICAgICAgICAgKCppdGVyKS0+c2V0dGluZ3MoKS0+c2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZChlbmFibGVkKTsKQEAgLTI4NCwxMCArMjkxLDggQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6c2V0UG9wdXBCbG9ja2luZ0VuYQogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c3dp
dGNoTmV0d29ya0xvYWRlclRvTmV3VGVzdGluZ1Nlc3Npb24oKQogewogI2lmIFBMQVRGT1JNKE1B
QykgfHwgVVNFKENGTkVUV09SSykKLSAgICAvLyBTZXQgYSBwcml2YXRlIHNlc3Npb24gZm9yIHRl
c3RpbmcgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBnbG9iYWwgY29va2llcy4gVGhpcyBzaG91
bGQgYmUgZGlmZmVyZW50IGZyb20gcHJpdmF0ZSBicm93c2luZyBzZXNzaW9uLgogICAgIC8vIEZJ
WE1FIChOZXR3b3JrUHJvY2Vzcyk6IERvIHRoaXMgaW4gbmV0d29yayBwcm9jZXNzLCB0b28uCi0g
ICAgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IHNlc3Npb24gPSBSZXNvdXJjZUhh
bmRsZTo6Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24oQ0ZTVFIoIlByaXZhdGUg
V2ViS2l0IFNlc3Npb24iKSk7Ci0gICAgUmVzb3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdl
U2Vzc2lvbihzZXNzaW9uLmdldCgpKTsKKyAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpz
d2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1QYXN0ZWJvYXJkLmg+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KIAorI2lmIFBMQVRG
T1JNKFdJTikKKyNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2VuZGlm
CisKICNpZiBVU0UoQ0YpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCkBAIC0x
MDEsNiArMTA2LDE2IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpub3RpZnlDb29raWUK
ICAgICBXZWJDb29raWVNYW5hZ2VyOjpzaGFyZWQoKS5kaXNwYXRjaENvb2tpZXNEaWRDaGFuZ2Uo
KTsKIH0KIAorI2lmIFBMQVRGT1JNKFdJTikKK1JldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlZmF1bHRDb29raWVTdG9yYWdlKCkKK3sKKyAg
ICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzZXNzaW9uID0gV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dDo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpCisgICAgICAgIHJldHVybiBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4oQWRvcHRDRiwgV0tDb3B5SFRUUENvb2tpZVN0b3Jh
Z2Uoc2Vzc2lvbikpOworCisgICAgcmV0dXJuIFdLR2V0RGVmYXVsdEhUVFBDb29raWVTdG9yYWdl
KCk7Cit9CisjZW5kaWYKKwogLy8gTG9hZGVyU3RyYXRlZ3kKIAogI2lmIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9u
IDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDkgQEAgcHJp
dmF0ZToKIAogICAgIC8vIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneQogICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpIE9WRVJSSURFOworI2lmIFBMQVRGT1JNKE1BQykgfHwg
VVNFKENGTkVUV09SSykKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBkZWZhdWx0Q29va2llU3RvcmFnZSgpIE9WRVJSSURFOworI2VuZGlmCiAKICAgICAvLyBX
ZWJDb3JlOjpMb2FkZXJTdHJhdGVneQogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCShyZXZpc2lv
biAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21h
Yy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDkgKzIw
LDkgQEAKICNpZm5kZWYgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dF9oCiAjZGVmaW5lIFdlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHRfaAogCisjaW5jbHVkZSAiSFRUUENvb2tpZUFjY2VwdFBvbGlj
eS5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMzMsMTYgKzMzLDI0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KGZy
YW1lKSk7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFn
ZVNlc3Npb25JZGVudGlmaWVyQmFzZShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdm9pZCBz
d2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCk7CisgICAgc3RhdGljIHZvaWQgZW5zdXJlUHJpdmF0
ZUJyb3dzaW5nU2Vzc2lvbigpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lQcml2YXRlQnJvd3Np
bmdTZXNzaW9uKCk7CisgICAgc3RhdGljIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgZGVmYXVsdFN0
b3JhZ2VTZXNzaW9uKCk7CisgICAgc3RhdGljIHZvaWQgc2V0Q29va2llQWNjZXB0UG9saWN5Rm9y
QWxsQ29udGV4dHMoSFRUUENvb2tpZUFjY2VwdFBvbGljeSk7CisKIHByaXZhdGU6CiAgICAgV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dChXZWJGcmFtZSogZnJhbWUpCiAgICAgICAgIDogV2ViQ29y
ZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dChmcmFtZS0+Y29yZUZyYW1lKCkpCiAgICAgewogICAg
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTY2hlZHVsZVBhaXJIYXNoU2V0KiBzY2hlZHVsZWRSdW5M
b29wUGFpcnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxv
Y2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgYm9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY2hlZHVsZVBhaXJIYXNo
U2V0KiBzY2hlZHVsZWRSdW5Mb29wUGFpcnMoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYpIGNvbnN0IE9WRVJSSURFOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCShyZXZpc2lvbiAxMzQ2ODcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTUgKzIxLDIwIEBACiAjaW1wb3J0
ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKIAorI2lt
cG9ydCA8V2ViQ29yZS9Db29raWVTdG9yYWdlQ0ZOZXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVMb2FkZXJDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9SZXNvdXJjZUVycm9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CisjaW1w
b3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBk
ZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lvbjsKK3N0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHBy
aXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uOworCiBib29sIFdlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQ6Om5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkgY29uc3QKIHsKICAgICByZXR1cm4gZnJh
bWUoKSAmJiBmcmFtZSgpLT5zZXR0aW5ncygpICYmIGZyYW1lKCktPnNldHRpbmdzKCktPm5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzKCk7CkBAIC00OSw0ICs1NSw3MyBAQCBSZXNvdXJjZUVycm9yIFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6CiAgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5j
bGllbnQoKS0+YmxvY2tlZEVycm9yKHJlcXVlc3QpOwogfQogCitzdGF0aWMgU3RyaW5nJiBwcml2
YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYXNlLCAo
KSk7CisgICAgcmV0dXJuIGJhc2U7Cit9CisKK3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dDo6c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZShjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25J
ZGVudGlmaWVyQmFzZSgpID0gaWRlbnRpZmllcjsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0Ojpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCkKK3sKKyAgICAvLyBTZXQgYSBw
cml2YXRlIHNlc3Npb24gZm9yIHRlc3RpbmcgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBnbG9i
YWwgY29va2llcy4gVGhpcyBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20gcHJpdmF0ZSBicm93c2lu
ZyBzZXNzaW9uLgorICAgIGlmIChkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lvbikKKyAgICAgICAgQ0ZS
ZWxlYXNlKGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uKTsKKyAgICBkZWZhdWx0Q0ZTdG9yYWdlU2Vz
c2lvbiA9IFdLQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKENGU1RSKCJQcml2YXRlIFdlYktp
dCBTZXNzaW9uIikpOworfQorCit2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3Vy
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgaWYgKHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBTdHJpbmcgYmFzZSA9IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRp
ZmllckJhc2UoKS5pc051bGwoKSA/IFN0cmluZyhbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRs
ZUlkZW50aWZpZXJdKSA6IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJh
c2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IFN0cmluZyhi
YXNlICsgIi5Qcml2YXRlQnJvd3NpbmciKS5jcmVhdGVDRlN0cmluZygpOworCisgICAgcHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24gPSBXS0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihj
ZklkZW50aWZpZXIuZ2V0KCkpOworfQorCit2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6
OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCkKK3sKKyAgICBpZiAoIXByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBDRlJlbGVhc2UocHJp
dmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pOworICAgIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uID0gMDsKK30KKworQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0OjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKQoreworICAgIHJldHVybiBkZWZhdWx0
Q0ZTdG9yYWdlU2Vzc2lvbjsKK30KKworQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbigpIGNvbnN0Cit7CisgICAgYm9vbCBwcml2
YXRlQnJvd3NpbmdFbmFibGVkID0gZnJhbWUoKSAmJiBmcmFtZSgpLT5zZXR0aW5ncygpICYmIGZy
YW1lKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBpZiAocHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZCkgeworICAgICAgICBBU1NFUlQocHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb24pOworICAgICAgICByZXR1cm4gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Np
b247CisgICAgfQorICAgIHJldHVybiBkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lvbjsKK30KKwordm9p
ZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxD
b250ZXh0cyhIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKK3sKKyAgICBbW05TSFRUUENv
b2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZUFjY2VwdFBvbGlj
eTpzdGF0aWNfY2FzdDxOU0hUVFBDb29raWVBY2NlcHRQb2xpY3k+KHBvbGljeSldOworCisgICAg
aWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKKyAgICAgICAgV0tTZXRIVFRQQ29va2llQWNjZXB0
UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHBvbGljeSk7CisKKyAgICBpZiAocHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb24pIHsKKyAgICAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UgPSBhZG9wdENGKFdLQ29weUhU
VFBDb29raWVTdG9yYWdlKHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKSk7CisgICAgICAg
IFdLU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdl
LmdldCgpLCBwb2xpY3kpOworICAgIH0KK30KKwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUGxhdGZvcm1TdHJhdGVnaWVzTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFj
L1dlYlBsYXRmb3JtU3RyYXRlZ2llc01hYy5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBsYXRmb3JtU3RyYXRlZ2llc01h
Yy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKKworI2luY2x1
ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1J
bnRlcmZhY2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpkZWZhdWx0Q29va2llU3RvcmFnZSgpCit7CisgICAgaWYgKENGVVJMU3RvcmFnZVNl
c3Npb25SZWYgc2Vzc2lvbiA9IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpKQorICAgICAgICByZXR1cm4gUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+KEFkb3B0Q0YsIFdLQ29weUhUVFBDb29raWVTdG9yYWdlKHNlc3Npb24pKTsKKworI2lm
IFVTRShDRk5FVFdPUkspCisgICAgcmV0dXJuIFdLR2V0RGVmYXVsdEhUVFBDb29raWVTdG9yYWdl
KCk7CisjZWxzZQorICAgIC8vIFdoZW4gdXNpbmcgTlNVUkxDb25uZWN0aW9uLCB3ZSBhbHNvIHVz
ZSBpdHMgc2hhcmVkIGNvb2tpZSBzdG9yYWdlLgorICAgIHJldHVybiAwOworI2VuZGlmCit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViUGxhdGZvcm1TdHJhdGVnaWVzTWFj
Lm1tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDEz
NDY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIldlYkV2ZW50LmgiCiAj
aW5jbHVkZSAiV2ViRXZlbnRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNp
bmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViRnVsbFNj
cmVlbk1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlck1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25DbGllbnQuaCIKQEAgLTIxNzQsNyArMjE3NSwxNiBA
QCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlCiAgICAgc2V0dGluZ3Mt
PnNldExvY2FsU3RvcmFnZUVuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZl
cmVuY2VzS2V5Ojpsb2NhbFN0b3JhZ2VFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0
WFNTQXVkaXRvckVuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2Vz
S2V5Ojp4c3NBdWRpdG9yRW5hYmxlZEtleSgpKSk7CiAgICAgc2V0dGluZ3MtPnNldEZyYW1lRmxh
dHRlbmluZ0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5
OjpmcmFtZUZsYXR0ZW5pbmdFbmFibGVkS2V5KCkpKTsKLSAgICBzZXR0aW5ncy0+c2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNL
ZXk6OnByaXZhdGVCcm93c2luZ0VuYWJsZWRLZXkoKSkpOworCisgICAgYm9vbCBwcml2YXRlQnJv
d3NpbmdFbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5
Ojpwcml2YXRlQnJvd3NpbmdFbmFibGVkS2V5KCkpOworI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNF
KENGTkVUV09SSykKKyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKKyAgICAgICAgV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpOwor
ICAgIGVsc2UKKyAgICAgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZGVzdHJveVByaXZh
dGVCcm93c2luZ1Nlc3Npb24oKTsKKyNlbmRpZgorICAgIHNldHRpbmdzLT5zZXRQcml2YXRlQnJv
d3NpbmdFbmFibGVkKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOworCiAgICAgc2V0dGluZ3MtPnNl
dERldmVsb3BlckV4dHJhc0VuYWJsZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZl
cmVuY2VzS2V5OjpkZXZlbG9wZXJFeHRyYXNFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+
c2V0SmF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXko
V2ViUHJlZmVyZW5jZXNLZXk6OmphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWRLZXkoKSkpOwog
ICAgIHNldHRpbmdzLT5zZXRUZXh0QXJlYXNBcmVSZXNpemFibGUoc3RvcmUuZ2V0Qm9vbFZhbHVl
Rm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojp0ZXh0QXJlYXNBcmVSZXNpemFibGVLZXkoKSkpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NzksNyArNjc5
LDcgQEAgYm9vbCBXZWJQYWdlOjpwbGF0Zm9ybUhhc0xvY2FsRGF0YUZvclVSTAogICAgIE5TTXV0
YWJsZVVSTFJlcXVlc3QqIHJlcXVlc3QgPSBbW05TTXV0YWJsZVVSTFJlcXVlc3QgYWxsb2NdIGlu
aXRXaXRoVVJMOnVybF07CiAgICAgW3JlcXVlc3Qgc2V0VmFsdWU6KE5TU3RyaW5nKil1c2VyQWdl
bnQoKSBmb3JIVFRQSGVhZGVyRmllbGQ6QCJVc2VyLUFnZW50Il07CiAgICAgTlNDYWNoZWRVUkxS
ZXNwb25zZSAqY2FjaGVkUmVzcG9uc2U7Ci0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYg
c3RvcmFnZVNlc3Npb24gPSBSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFN0b3JhZ2VTZXNzaW9uKCkp
CisgICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24gPSBjb3JlUGFn
ZSgpLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCktPnN0b3JhZ2VT
ZXNzaW9uKCkpCiAgICAgICAgIGNhY2hlZFJlc3BvbnNlID0gV0tDYWNoZWRSZXNwb25zZUZvclJl
cXVlc3Qoc3RvcmFnZVNlc3Npb24sIHJlcXVlc3QpOwogICAgIGVsc2UKICAgICAgICAgY2FjaGVk
UmVzcG9uc2UgPSBbW05TVVJMQ2FjaGUgc2hhcmVkVVJMQ2FjaGVdIGNhY2hlZFJlc3BvbnNlRm9y
UmVxdWVzdDpyZXF1ZXN0XTsKQEAgLTY5Myw3ICs2OTMsNyBAQCBzdGF0aWMgTlNDYWNoZWRVUkxS
ZXNwb25zZSAqY2FjaGVkUmVzcG9uCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZVVSTFJlcXVlc3Q+
IHJlcXVlc3QoQWRvcHROUywgW1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVS
TDp1cmxdKTsKICAgICBbcmVxdWVzdC5nZXQoKSBzZXRWYWx1ZTooTlNTdHJpbmcgKil3ZWJQYWdl
LT51c2VyQWdlbnQoKSBmb3JIVFRQSGVhZGVyRmllbGQ6QCJVc2VyLUFnZW50Il07CiAKLSAgICBp
ZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbiA9IFJlc291cmNlSGFuZGxl
OjpjdXJyZW50U3RvcmFnZVNlc3Npb24oKSkKKyAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJl
ZiBzdG9yYWdlU2Vzc2lvbiA9IHdlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT5sb2Fk
ZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKS0+c3RvcmFnZVNlc3Npb24oKSkKICAgICAgICAgcmV0
dXJuIFdLQ2FjaGVkUmVzcG9uc2VGb3JSZXF1ZXN0KHN0b3JhZ2VTZXNzaW9uLCByZXF1ZXN0Lmdl
dCgpKTsKIAogICAgIHJldHVybiBbW05TVVJMQ2FjaGUgc2hhcmVkVVJMQ2FjaGVdIGNhY2hlZFJl
c3BvbnNlRm9yUmVxdWVzdDpyZXF1ZXN0LmdldCgpXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEzNDgzNSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDEyLTExLTE1ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAYXBwbGUuY29tPgorCisgICAgICAgIFByaXZhdGUgQnJvd3NpbmcgaXMgYSBwZXItcGFnZSBz
ZXR0aW5nIHRoYXQgc2V0cyBhIGdsb2JhbCB2YWx1ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0Lm1tOgorICAgICAgICBNb3ZlZCBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGdsb2JhbCBz
ZXNzaW9ucyBmcm9tIFdlYkNvcmUuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMubW06CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlZmF1bHRDb29r
aWVTdG9yYWdlKTogQWRkZWQuIFVzZXMgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dAorICAgICAg
ICB0byByZWFjaCB0aGUgc3RvcmFnZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5j
ZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIF9zd2l0Y2hOZXR3b3JrTG9hZGVyVG9O
ZXdUZXN0aW5nU2Vzc2lvbl0pOiBEaXR0by4KKyAgICAgICAgKCtbV2ViUHJlZmVyZW5jZXMgX3Nl
dEN1cnJlbnROZXR3b3JrTG9hZGVyU2Vzc2lvbkNvb2tpZUFjY2VwdFBvbGljeTpdKTogRGl0dG8u
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOiBBZGRlZCBhIGNv
bW1lbnQgZXhwbGFpbmluZyB0aGF0IHR3byBmdW5jdGlvbnMKKyAgICAgICAgYXJlIG5vdCBnZW5l
cmljIGVub3VnaCBmb3IgdXNlIG91dHNpZGUgRFJUIChvbmUgb2YgdGhlbSBoYWQgInRlc3Rpbmci
IGluIG5hbWUsCisgICAgICAgIGJ1dCBhbm90aGVyIGRpZCBub3QpLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9wcmVmZXJlbmNlc0NoYW5nZWQ6
XSk6IENyZWF0ZSBhIGdsb2JhbCBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb24gd2hlbgorICAgICAg
ICB0aGUgZmlyc3QgdmlldyB3aXRoIHByaXZhdGUgYnJvd3NpbmcgaXMgY3JlYXRlZCwgZGVsZXRl
IGl0IHdoZW4gYW55IHdpbmRvdyB3aXRoCisgICAgICAgIGl0IGRpc2FibGVkIGlzIGNyZWF0ZWQg
KHNpbmNlIHRoaXMgY29tZXMgZnJvbSBwcmVmZXJlbmNlcywgaXQgYXBwbGllcyB0byBhbGwKKyAg
ICAgICAgdmlld3MgZXF1YWxseSwgZXZlbiB0aG91Z2ggd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHNp
bmdsZSBvbmUgaGVyZSkuCisgICAgICAgICgtW1dlYlZpZXcgX2NhY2hlZFJlc3BvbnNlRm9yVVJM
Ol0pOiBVc2UgbWFpbiBmcmFtZSdzIG5ldHdvcmtpbmcgY29udGV4dCBpbnN0ZWFkIG9mCisgICAg
ICAgIGEgZ2xvYmFsIG9uZS4KKwogMjAxMi0xMS0xMyAgVGltb3RoeSBIYXRjaGVyICA8dGltb3Ro
eUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRqdXN0IHRoZSBXZWIgSW5zcGVjdG9yIHdpbmRvdyB0
aXRsZSBmcmFtZSBpZiBuZWVkZWQgdG8gcHJldmVudCBpdCBmcm9tIGludGVyc2VjdGluZyB0aGUg
ZG9jayBidXR0b24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCShyZXZpc2lvbiAxMzQ2
ODcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICAgIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw2ICsyNywxNCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dChmcmFtZSkpOwog
ICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIHNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9u
SWRlbnRpZmllckJhc2UoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHZvaWQgc3dpdGNoVG9O
ZXdUZXN0aW5nU2Vzc2lvbigpOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZVByaXZhdGVCcm93c2lu
Z1Nlc3Npb24oKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lv
bigpOworICAgIHN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGRlZmF1bHRTdG9yYWdlU2Vz
c2lvbigpOworCisgICAgc3RhdGljIHZvaWQgc2V0Q29va2llQWNjZXB0UG9saWN5Rm9yVGVzdGlu
Z0NvbnRleHQoTlNIVFRQQ29va2llQWNjZXB0UG9saWN5KTsKKwogcHJpdmF0ZToKICAgICBXZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0KFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKICAgICAgICAgOiBX
ZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0KGZyYW1lKQpAQCAtMzQsNiArNDMsNyBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0Vu
YWJsZWQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIENGVVJMU3RvcmFnZVNlc3Npb25S
ZWYgc3RvcmFnZVNlc3Npb24oKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6
OlNjaGVkdWxlUGFpckhhc2hTZXQqIHNjaGVkdWxlZFJ1bkxvb3BQYWlycygpIGNvbnN0IE9WRVJS
SURFOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JikgY29uc3QgT1ZFUlJJREU7CiB9OwpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjMsOSArMjQsMTMgQEAKICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+
CisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKK3N0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGRlZmF1bHRDRlN0b3JhZ2VT
ZXNzaW9uOworc3RhdGljIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb247CisKIGJvb2wgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6bmVlZHNTaXRl
U3BlY2lmaWNRdWlya3MoKSBjb25zdAogewogICAgIHJldHVybiBmcmFtZSgpICYmIGZyYW1lKCkt
PnNldHRpbmdzKCkgJiYgZnJhbWUoKS0+c2V0dGluZ3MoKS0+bmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MoKTsKQEAgLTQ1LDMgKzUwLDY2IEBAIFJlc291cmNlRXJyb3IgV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dDoKIHsKICAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5ibG9j
a2VkRXJyb3IocmVxdWVzdCk7CiB9CisKK3N0YXRpYyBTdHJpbmcmIHByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhc2UsICgpKTsKKyAgICByZXR1
cm4gYmFzZTsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRQcml2YXRl
QnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllcikKK3sKKyAgICBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNl
KCkgPSBpZGVudGlmaWVyOworfQorCit2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnN3
aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKQoreworICAgIC8vIFNldCBhIHByaXZhdGUgc2Vzc2lv
biBmb3IgdGVzdGluZyB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGdsb2JhbCBjb29raWVzLiBU
aGlzIHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb24uCisg
ICAgaWYgKGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uKQorICAgICAgICBDRlJlbGVhc2UoZGVmYXVs
dENGU3RvcmFnZVNlc3Npb24pOworICAgIGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uID0gV0tDcmVh
dGVQcml2YXRlU3RvcmFnZVNlc3Npb24oQ0ZTVFIoIlByaXZhdGUgV2ViS2l0IFNlc3Npb24iKSk7
Cit9CisKK3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dz
aW5nU2Vzc2lvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAocHJp
dmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmlu
ZyBiYXNlID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZSgpLmlz
TnVsbCgpID8gU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0p
IDogcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZSgpOworICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZJZGVudGlmaWVyID0gU3RyaW5nKGJhc2UgKyAiLlByaXZh
dGVCcm93c2luZyIpLmNyZWF0ZUNGU3RyaW5nKCk7CisKKyAgICBwcml2YXRlQnJvd3NpbmdTdG9y
YWdlU2Vzc2lvbiA9IFdLQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGNmSWRlbnRpZmllci5n
ZXQoKSk7Cit9CisKK3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZGVzdHJveVByaXZh
dGVCcm93c2luZ1Nlc3Npb24oKQoreworICAgIGlmICghcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNl
c3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIENGUmVsZWFzZShwcml2YXRlQnJvd3NpbmdT
dG9yYWdlU2Vzc2lvbik7CisgICAgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24gPSAwOwor
fQorCitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmRl
ZmF1bHRTdG9yYWdlU2Vzc2lvbigpCit7CisgICAgcmV0dXJuIGRlZmF1bHRDRlN0b3JhZ2VTZXNz
aW9uOworfQorCitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQ6OnN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKK3sKKyAgICBib29sIHByaXZhdGVCcm93c2luZ0Vu
YWJsZWQgPSBmcmFtZSgpICYmIGZyYW1lKCktPnNldHRpbmdzKCkgJiYgZnJhbWUoKS0+c2V0dGlu
Z3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworICAgIGlmIChwcml2YXRlQnJvd3NpbmdF
bmFibGVkKSB7CisgICAgICAgIEFTU0VSVChwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbik7
CisgICAgICAgIHJldHVybiBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbjsKKyAgICB9Cisg
ICAgcmV0dXJuIGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uOworfQorCit2b2lkIFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ6OnNldENvb2tpZUFjY2VwdFBvbGljeUZvclRlc3RpbmdDb250ZXh0KE5T
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit7CisgICAgQVNTRVJUKGRlZmF1bHRDRlN0
b3JhZ2VTZXNzaW9uKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gZGVm
YXVsdENvb2tpZVN0b3JhZ2UgPSBhZG9wdENGKFdLQ29weUhUVFBDb29raWVTdG9yYWdlKGRlZmF1
bHRDRlN0b3JhZ2VTZXNzaW9uKSk7CisgICAgV0tTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGRl
ZmF1bHRDb29raWVTdG9yYWdlLmdldCgpLCBwb2xpY3kpOworfQpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmgJKHJldmlzaW9uIDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBA
IHByaXZhdGU6CiAKICAgICAvLyBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kKICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5Q29va2llc0NoYW5nZWQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBkZWZhdWx0Q29va2llU3RvcmFnZSgpIE9WRVJS
SURFOwogCiAgICAgLy8gV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQg
cmVmcmVzaFBsdWdpbnMoKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0JKHJldmlz
aW9uIDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW1w
b3J0ICJXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKIAorI2ltcG9ydCAiV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5oIgogI2ltcG9ydCAiV2ViUGx1Z2luRGF0YWJhc2UuaCIKICNpbXBvcnQgIldl
YlBsdWdpblBhY2thZ2UuaCIKICNpbXBvcnQgPFdlYkNvcmUvQmxvY2tFeGNlcHRpb25zLmg+CkBA
IC0zMiw2ICszMyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUGFnZUdyb3VwLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVib2FyZC5oPgor
I2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCkBAIC03OSw2ICs4MSwxOSBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6bm90
aWZ5Q29va2llCiB7CiB9CiAKK1JldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmRlZmF1bHRDb29raWVTdG9yYWdlKCkKK3sKKyAgICBpZiAoQ0ZV
UkxTdG9yYWdlU2Vzc2lvblJlZiBzZXNzaW9uID0gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkpCisgICAgICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4oQWRvcHRDRiwgV0tDb3B5SFRUUENvb2tpZVN0b3JhZ2Uoc2Vzc2lv
bikpOworCisjaWYgVVNFKENGTkVUV09SSykKKyAgICByZXR1cm4gV0tHZXREZWZhdWx0SFRUUENv
b2tpZVN0b3JhZ2UoKTsKKyNlbHNlCisgICAgLy8gV2hlbiB1c2luZyBOU1VSTENvbm5lY3Rpb24s
IHdlIGFsc28gdXNlIGl0cyBzaGFyZWQgY29va2llIHN0b3JhZ2UuCisgICAgcmV0dXJuIDA7Cisj
ZW5kaWYKK30KKwogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlZnJlc2hQbHVnaW5zKCkK
IHsKICAgICBbW1dlYlBsdWdpbkRhdGFiYXNlIHNoYXJlZERhdGFiYXNlXSByZWZyZXNoXTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkocmV2aXNp
b24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5j
ZUtleXNQcml2YXRlLmgiCiAKICNpbXBvcnQgIldlYkFwcGxpY2F0aW9uQ2FjaGUuaCIKKyNpbXBv
cnQgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbXBvcnQgIldlYktpdExvZ2dpbmcu
aCIKICNpbXBvcnQgIldlYktpdE5TU3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJLaXRTeXN0
ZW1CaXRzLmgiCkBAIC0xMjg1LDE3ICsxMjg2LDEyIEBAICsgKHZvaWQpX3NldElCQ3JlYXRvcklE
OihOU1N0cmluZyAqKXN0cmkKIAogKyAodm9pZClfc3dpdGNoTmV0d29ya0xvYWRlclRvTmV3VGVz
dGluZ1Nlc3Npb24KIHsKLSAgICAvLyBTZXQgYSBwcml2YXRlIHNlc3Npb24gZm9yIHRlc3Rpbmcg
dG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBnbG9iYWwgY29va2llcy4gVGhpcyBzaG91bGQgYmUg
ZGlmZmVyZW50IGZyb20gcHJpdmF0ZSBicm93c2luZyBzZXNzaW9uLgotICAgIFJldGFpblB0cjxD
RlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBzZXNzaW9uID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZVBy
aXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKENGU1RSKCJXZWJLaXQgVGVzdGluZyBTZXNzaW9u
IikpOwotICAgIFJlc291cmNlSGFuZGxlOjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oc2Vzc2lv
bi5nZXQoKSk7CisgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c3dpdGNoVG9OZXdUZXN0
aW5nU2Vzc2lvbigpOwogfQogCiArICh2b2lkKV9zZXRDdXJyZW50TmV0d29ya0xvYWRlclNlc3Np
b25Db29raWVBY2NlcHRQb2xpY3k6KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSlwb2xpY3kKIHsK
LSAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENv
b2tpZUFjY2VwdFBvbGljeTpwb2xpY3ldOwotCi0gICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2Uo
KSkKLSAgICAgICAgV0tTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0
KCksIHBvbGljeSk7CisgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNj
ZXB0UG9saWN5Rm9yVGVzdGluZ0NvbnRleHQocG9saWN5KTsKIH0KIAogLSAoQk9PTClpc0RPTVBh
c3RlQWxsb3dlZApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNl
c1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBy
ZWZlcmVuY2VzUHJpdmF0ZS5oCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYs
NiArMjQ2LDggQEAgQGludGVyZmFjZSBXZWJQcmVmZXJlbmNlcyAoV2ViUHJpdmF0ZSkKICsgKENG
U3RyaW5nRW5jb2RpbmcpX3N5c3RlbUNGU3RyaW5nRW5jb2Rpbmc7CiArICh2b2lkKV9zZXRJbml0
aWFsRGVmYXVsdFRleHRFbmNvZGluZ1RvU3lzdGVtRW5jb2Rpbmc7CiArICh2b2lkKV9zZXRJQkNy
ZWF0b3JJRDooTlNTdHJpbmcgKilzdHJpbmc7CisKKy8vIEZvciBEdW1wUmVuZGVyVHJlZSB1c2Ug
b25seS4KICsgKHZvaWQpX3N3aXRjaE5ldHdvcmtMb2FkZXJUb05ld1Rlc3RpbmdTZXNzaW9uOwog
KyAodm9pZClfc2V0Q3VycmVudE5ldHdvcmtMb2FkZXJTZXNzaW9uQ29va2llQWNjZXB0UG9saWN5
OihOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kpY29va2llQWNjZXB0UG9saWN5OwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxLDYg
KzYxLDcgQEAKICNpbXBvcnQgIldlYkVkaXRvckNsaWVudC5oIgogI2ltcG9ydCAiV2ViRm9ybURl
bGVnYXRlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgorI2ltcG9ydCAi
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgogI2ltcG9ydCAiV2ViRnJhbWVWaWV3SW50ZXJu
YWwuaCIKICNpbXBvcnQgIldlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJH
ZW9sb2NhdGlvbkNsaWVudC5oIgpAQCAtMTQ3MCw3ICsxNDcxLDE2IEBAIC0gKHZvaWQpX3ByZWZl
cmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW4KICNlbmRpZgogICAgIHNldHRpbmdzLT5zZXRMb2Nh
bFN0b3JhZ2VFbmFibGVkKFtwcmVmZXJlbmNlcyBsb2NhbFN0b3JhZ2VFbmFibGVkXSk7CiAgICAg
c2V0dGluZ3MtPnNldEV4cGVyaW1lbnRhbE5vdGlmaWNhdGlvbnNFbmFibGVkKFtwcmVmZXJlbmNl
cyBleHBlcmltZW50YWxOb3RpZmljYXRpb25zRW5hYmxlZF0pOwotICAgIHNldHRpbmdzLT5zZXRQ
cml2YXRlQnJvd3NpbmdFbmFibGVkKFtwcmVmZXJlbmNlcyBwcml2YXRlQnJvd3NpbmdFbmFibGVk
XSk7CisKKyAgICBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBbcHJlZmVyZW5jZXMgcHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZF07CisjaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JL
KQorICAgIGlmIChwcml2YXRlQnJvd3NpbmdFbmFibGVkKQorICAgICAgICBXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCk7CisgICAgZWxzZQor
ICAgICAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpkZXN0cm95UHJpdmF0ZUJyb3dzaW5n
U2Vzc2lvbigpOworI2VuZGlmCisgICAgc2V0dGluZ3MtPnNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CisKICAgICBzZXR0aW5ncy0+c2V0U2Fuc1Nlcmlm
Rm9udEZhbWlseShbcHJlZmVyZW5jZXMgc2Fuc1NlcmlmRm9udEZhbWlseV0pOwogICAgIHNldHRp
bmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoW3ByZWZlcmVuY2VzIHNlcmlmRm9udEZhbWlseV0pOwog
ICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoW3ByZWZlcmVuY2VzIHN0YW5kYXJk
Rm9udEZhbWlseV0pOwpAQCAtMTk5NywxNCArMjAwNywxOCBAQCAtICh2b2lkKV9kaWRGYWlsUHJv
dmlzaW9uYWxMb2FkV2l0aEVycm9yCiAKIC0gKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKilfY2FjaGVk
UmVzcG9uc2VGb3JVUkw6KE5TVVJMICopVVJMCiB7Ci0gICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAq
cmVxdWVzdCA9IFtbTlNNdXRhYmxlVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6VVJMXTsK
KyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlVVJMUmVxdWVzdCAqPiByZXF1ZXN0ID0gYWRvcHROUyhb
W05TTXV0YWJsZVVSTFJlcXVlc3QgYWxsb2NdIGluaXRXaXRoVVJMOlVSTF0pOwogICAgIFtyZXF1
ZXN0IF93ZWJfc2V0SFRUUFVzZXJBZ2VudDpbc2VsZiB1c2VyQWdlbnRGb3JVUkw6VVJMXV07CiAg
ICAgTlNDYWNoZWRVUkxSZXNwb25zZSAqY2FjaGVkUmVzcG9uc2U7Ci0gICAgaWYgKENGVVJMU3Rv
cmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24gPSBSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFN0
b3JhZ2VTZXNzaW9uKCkpCi0gICAgICAgIGNhY2hlZFJlc3BvbnNlID0gV0tDYWNoZWRSZXNwb25z
ZUZvclJlcXVlc3Qoc3RvcmFnZVNlc3Npb24sIHJlcXVlc3QpOworCisgICAgaWYgKCFfcHJpdmF0
ZS0+cGFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNz
aW9uUmVmIHN0b3JhZ2VTZXNzaW9uID0gX3ByaXZhdGUtPnBhZ2UtPm1haW5GcmFtZSgpLT5sb2Fk
ZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKS0+c3RvcmFnZVNlc3Npb24oKSkKKyAgICAgICAgY2Fj
aGVkUmVzcG9uc2UgPSBXS0NhY2hlZFJlc3BvbnNlRm9yUmVxdWVzdChzdG9yYWdlU2Vzc2lvbiwg
cmVxdWVzdC5nZXQoKSk7CiAgICAgZWxzZQotICAgICAgICBjYWNoZWRSZXNwb25zZSA9IFtbTlNV
UkxDYWNoZSBzaGFyZWRVUkxDYWNoZV0gY2FjaGVkUmVzcG9uc2VGb3JSZXF1ZXN0OnJlcXVlc3Rd
OwotICAgIFtyZXF1ZXN0IHJlbGVhc2VdOworICAgICAgICBjYWNoZWRSZXNwb25zZSA9IFtbTlNV
UkxDYWNoZSBzaGFyZWRVUkxDYWNoZV0gY2FjaGVkUmVzcG9uc2VGb3JSZXF1ZXN0OnJlcXVlc3Qu
Z2V0KCldOworCiAgICAgcmV0dXJuIGNhY2hlZFJlc3BvbnNlOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMzQ4MzUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxMi0xMS0xNSAgQWxleGV5IFByb3Nr
dXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBQcml2YXRlIEJyb3dzaW5nIGlzIGEg
cGVyLXBhZ2Ugc2V0dGluZyB0aGF0IHNldHMgYSBnbG9iYWwgdmFsdWUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODcwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb29raWVNYW5hZ2VyQ0ZOZXQu
Y3BwOiAoV2ViQ29va2llTWFuYWdlcjo6Y29va2llU3RvcmFnZSk6IFdlIGNhbid0IGdldAorICAg
ICAgICBjdXJyZW50IHNlc3Npb24gd2l0aG91dCBhbnkgY29udGV4dCwgYnV0IHRoZSBjb2RlIHdh
cyBub3QgY29ycmVjdCBhbnl3YXksIHRoZSBjbGllbnQKKyAgICAgICAgaXMgY2xlYXJseSBpbnRl
cmVzdGVkIGluIGEgZ2V0dGVyIHRvIG1hdGNoIG92ZXJyaWRlIHNldHRlci4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwOiBNb3ZlZCBjb2Rl
IGZvciB0cmFja2luZyBnbG9iYWwKKyAgICAgICAgc2Vzc2lvbnMgZnJvbSBXZWJDb3JlIHRvIFdl
YktpdC4gVGhlIGJlaGF2aW9yIGlzIHVuY2hhbmdlZCwgYnV0IGxvd2VyIGxldmVscyBhcmUKKyAg
ICAgICAgbm93IGNsZWFuZXIuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0Lmg6IERpdHRvLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmNwcDoKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVmYXVs
dENvb2tpZVN0b3JhZ2UpOiBBZGRlZC4gVXNlIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQKKyAg
ICAgICAgZm9yIHRyYWNraW5nIHRoZSBkZWZhdWx0IHNlc3Npb24uCisKKyAgICAgICAgKiBXZWJW
aWV3LmNwcDogKHVwZGF0ZVNoYXJlZFNldHRpbmdzRnJvbVByZWZlcmVuY2VzSWZOZWVkZWQpOgor
ICAgICAgICBVc2UgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9s
aWN5Rm9yQWxsQ29udGV4dHMuIFVwZGF0aW5nIG9ubHkKKyAgICAgICAgdGhlIGN1cnJlbnQgc2Vz
c2lvbiBpcyBub3Qgc3VmZmljaWVudCwgYW5kIGRpZCBub3QgbWF0Y2ggTWFjLgorCiAyMDEyLTEx
LTE0ICBHZW9yZ2UgVHNvdW1hbGlzICA8dHN1bWFsaXM5NkBnbWFpbC5jb20+CiAKICAgICAgICAg
SW1wbGVtZW50YXRpb24gZm9yIG1laG9kcyBpbiBXZWJNdXRhYmxlVVJMUmVxdWVzdC5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvb2tpZU1hbmFnZXJDRk5ldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29va2llTWFuYWdlckNGTmV0LmNwcAkocmV2aXNp
b24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29va2llTWFuYWdlckNGTmV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBXZWJDb29raWVNYW5hZwogICAgaWYgKCFzdG9yYWdlKQogICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOwogCi0gICAgLy8gTmVlZCB0byByZXRhaW4gbG9jYWxseSB0byBtYWtlIHN1cmUgdGhl
IHJlc3VsdCBpcyB2YWxpZCBpbiBjYWxsZXIuCi0gICAgc3RhdGljIFJldGFpblB0cjxDRkhUVFBD
b29raWVTdG9yYWdlUmVmPiByZXN1bHQ7Ci0gICAgcmVzdWx0ID0gY3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKLQotICAgICpzdG9yYWdlID0gcmVzdWx0LmdldCgpOworICAgICpzdG9yYWdl
ID0gb3ZlcnJpZGVuQ29va2llU3RvcmFnZSgpOwogICAgIHJldHVybiBTX09LOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdC93
aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRl
ICJXZWJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJXZWJFbGVtZW50UHJvcGVydHlCYWcuaCIK
ICNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJHZW9sb2NhdGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIldlYkdl
b2xvY2F0aW9uUG9zaXRpb24uaCIKICNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKQEAgLTQ5
NjAsOSArNDk2MSw3IEBAIEhSRVNVTFQgdXBkYXRlU2hhcmVkU2V0dGluZ3NGcm9tUHJlZmVyZW4K
ICAgICAgICAgcmV0dXJuIGhyOwogCiAjaWYgVVNFKENGTkVUV09SSykKLSAgICAvLyBTZXQgY29v
a2llIHN0b3JhZ2UgYWNjZXB0IHBvbGljeQotICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkp
Ci0gICAgICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVBY2NlcHRQb2xpY3koY29va2ll
U3RvcmFnZS5nZXQoKSwgYWNjZXB0UG9saWN5KTsKKyAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0OjpzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyhhY2NlcHRQb2xpY3kpOwog
I2VuZGlmCiAKICAgICByZXR1cm4gU19PSzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQu
Y3BwCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsOSAr
MjEsMTYgQEAKICNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAKICNpbmNs
dWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPENGTmV0d29yay9DRkhUVFBDb29r
aWVzUHJpdi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llU3RvcmFnZUNGTmV0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
K3N0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uOwor
c3RhdGljIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Np
b247CisKIFBhc3NSZWZQdHI8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dD4gV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
KGZyYW1lLCB1c2VyQWdlbnQpKTsKQEAgLTQzLDMgKzUwLDc1IEBAIFdlYkNvcmU6OlJlc291cmNl
RXJyb3IgV2ViRnJhbWVOZXR3b3JraW4KIHsKICAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCkt
PmNsaWVudCgpLT5ibG9ja2VkRXJyb3IocmVxdWVzdCk7CiB9CisKK3N0YXRpYyBTdHJpbmcmIHBy
aXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhc2Us
ICgpKTsKKyAgICByZXR1cm4gYmFzZTsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0OjpzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllcikKK3sKKyAgICBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lv
bklkZW50aWZpZXJCYXNlKCkgPSBpZGVudGlmaWVyOworfQorCit2b2lkIFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQ6OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKQoreworICAgIC8vIFNldCBh
IHByaXZhdGUgc2Vzc2lvbiBmb3IgdGVzdGluZyB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGds
b2JhbCBjb29raWVzLiBUaGlzIHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBwcml2YXRlIGJyb3dz
aW5nIHNlc3Npb24uCisgICAgZGVmYXVsdENGU3RvcmFnZVNlc3Npb24gPSB3a0NyZWF0ZVByaXZh
dGVTdG9yYWdlU2Vzc2lvbihDRlNUUigiUHJpdmF0ZSBXZWJLaXQgU2Vzc2lvbiIpLCBkZWZhdWx0
Q0ZTdG9yYWdlU2Vzc2lvbik7Cit9CisKK3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6
ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIFN0cmluZyBiYXNlID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25J
ZGVudGlmaWVyQmFzZSgpLmlzTnVsbCgpID8gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJp
bmdSZWY+KENGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShDRkJ1bmRsZUdldE1h
aW5CdW5kbGUoKSwga0NGQnVuZGxlSWRlbnRpZmllcktleSkpKSA6IHByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGNmSWRlbnRpZmllciA9IFN0cmluZyhiYXNlICsgIi5Qcml2YXRlQnJvd3NpbmciKS5jcmVhdGVD
RlN0cmluZygpOworCisgICAgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24gPSB3a0NyZWF0
ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCksIGRlZmF1bHRDRlN0b3Jh
Z2VTZXNzaW9uKTsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpkZXN0cm95
UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpCit7CisgICAgaWYgKCFwcml2YXRlQnJvd3NpbmdTdG9y
YWdlU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZSZWxlYXNlKHByaXZhdGVCcm93
c2luZ1N0b3JhZ2VTZXNzaW9uKTsKKyAgICBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbiA9
IDA7Cit9CisKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dDo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkKK3sKKyAgICByZXR1cm4gZGVmYXVsdENGU3RvcmFn
ZVNlc3Npb247Cit9CisKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYgV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dDo6c3RvcmFnZVNlc3Npb24oKSBjb25zdAoreworICAgIGJvb2wgcHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZCA9IGZyYW1lKCkgJiYgZnJhbWUoKS0+c2V0dGluZ3MoKSAmJiBmcmFtZSgpLT5z
ZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7CisgICAgaWYgKHByaXZhdGVCcm93
c2luZ0VuYWJsZWQpIHsKKyAgICAgICAgQVNTRVJUKHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNz
aW9uKTsKKyAgICAgICAgcmV0dXJuIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uOworICAg
IH0KKyAgICByZXR1cm4gZGVmYXVsdENGU3RvcmFnZVNlc3Npb247Cit9CisKK3ZvaWQgV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9yVGVzdGluZ0NvbnRl
eHQoQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBwb2xpY3kpCit7CisgICAgQVNTRVJU
KGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gZGVmYXVsdENvb2tpZVN0b3JhZ2UgPSBhZG9wdENGKHdrQ29weUhUVFBDb29raWVT
dG9yYWdlKGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uKSk7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFn
ZVNldENvb2tpZUFjY2VwdFBvbGljeShkZWZhdWx0Q29va2llU3RvcmFnZS5nZXQoKSwgcG9saWN5
KTsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVBY2NlcHRQ
b2xpY3lGb3JBbGxDb250ZXh0cyhDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGlj
eSkKK3sKKyAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0
b3JhZ2UgPSBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQorICAgICAgICBDRkhUVFBDb29r
aWVTdG9yYWdlU2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHBvbGlj
eSk7CisKKyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pIHsKKyAgICAgICAg
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0
b3JhZ2UgPSBhZG9wdENGKHdrQ29weUhUVFBDb29raWVTdG9yYWdlKHByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uKSk7CisgICAgICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVBY2Nl
cHRQb2xpY3kocHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZS5nZXQoKSwgcG9saWN5KTsKKyAg
ICB9Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCShyZXZpc2lvbiAxMzQ2ODcpCisr
KyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAo
QykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNyw2ICsyOCwxNSBAQCBjbGFzcyBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0IDogcHVibGljCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RGOjpT
dHJpbmcmIHVzZXJBZ2VudCk7CiAKKyAgICBzdGF0aWMgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdT
dG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2
b2lkIHN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKTsKKyAgICBzdGF0aWMgdm9pZCBlbnN1cmVQ
cml2YXRlQnJvd3NpbmdTZXNzaW9uKCk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveVByaXZhdGVC
cm93c2luZ1Nlc3Npb24oKTsKKyAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKTsKKworICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUFjY2VwdFBv
bGljeUZvclRlc3RpbmdDb250ZXh0KENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kpOwor
ICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUFjY2VwdFBvbGljeUZvckFsbENvbnRleHRzKENGSFRU
UENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kpOworCiBwcml2YXRlOgogICAgIFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQoV2ViQ29yZTo6RnJhbWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyYg
dXNlckFnZW50KQogICAgICAgICA6IFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQoZnJh
bWUpCkBAIC0zNiw2ICs0Niw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIFdURjo6U3RyaW5n
IHVzZXJBZ2VudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgcmVmZXJyZXIoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24o
KSBjb25zdDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9y
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0OwogCiAgICAgV1RGOjpTdHJp
bmcgbV91c2VyQWdlbnQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHJldmlzaW9uIDEzNDY4
NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDExIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAKKyNpbmNsdWRlICJX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRh
dGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUlu
dGVyZmFjZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzYsNiArNzgsMTQg
QEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Om5vdGlmeUNvb2tpZQogewogfQogCitSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWZh
dWx0Q29va2llU3RvcmFnZSgpCit7CisgICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc2Vz
c2lvbiA9IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigp
KQorICAgICAgICByZXR1cm4gUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+KEFkb3B0
Q0YsIHdrQ29weUhUVFBDb29raWVTdG9yYWdlKHNlc3Npb24pKTsKKworICAgIHJldHVybiB3a0dl
dERlZmF1bHRIVFRQQ29va2llU3RvcmFnZSgpOworfQorCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6cmVmcmVzaFBsdWdpbnMoKQogewogICAgIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQ
bHVnaW5zKCktPnJlZnJlc2goKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCShyZXZpc2lvbiAxMzQ2
ODcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBwcml2YXRlOgogCiAgICAg
Ly8gV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvb2tp
ZXNDaGFuZ2VkKCk7CisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gZGVmYXVsdENvb2tpZVN0b3JhZ2UoKTsKIAogICAgIC8vIFdlYkNvcmU6OlBsdWdpblN0cmF0
ZWd5CiAgICAgdmlydHVhbCB2b2lkIHJlZnJlc2hQbHVnaW5zKCk7CkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzQ4MzUpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0x
MS0xNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBQcml2
YXRlIEJyb3dzaW5nIGlzIGEgcGVyLXBhZ2Ugc2V0dGluZyB0aGF0IHNldHMgYSBnbG9iYWwgdmFs
dWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODcw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06IChzZXREZWZhdWx0c1RvQ29uc2lzdGVu
dFZhbHVlc0ZvclRlc3RpbmcpOgorICAgICAgICBDYWxsIF9zd2l0Y2hOZXR3b3JrTG9hZGVyVG9O
ZXdUZXN0aW5nU2Vzc2lvbiBiZWZvcmUgbWFraW5nIG90aGVyIHNldHRpbmdzLCBzbyB0aGF0Cisg
ICAgICAgIHRoZXkgd291bGQgYWN0dWFsbHkgYXBwbHkgdG8gdGhlIHRlc3Rpbmcgc2Vzc2lvbi4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlOjpiZWdpblRlc3RpbmcpOgorICAgICAgICBPbmx5IGNh
bGwgV0tCdW5kbGVTd2l0Y2hOZXR3b3JrTG9hZGVyVG9OZXdUZXN0aW5nU2Vzc2lvbiBvbmNlIHBl
ciBwcm9jZXNzLCBtYXRjaGluZworICAgICAgICBXZWJLaXQxLiBJJ20gbm90IGZ1bGx5IHN1cmUg
d2hhdCBpcyBnb2luZyB3cm9uZywgYnV0IGFwcGFyZW50bHkgY3JlYXRpbmcgbXV0aXBsZQorICAg
ICAgICBzZXNzaW9ucyB3aXRoIHRoZSBzYW1lIGlkZW50aWZpZXIgZG9lc24ndCBxdWl0ZSB3b3Jr
LgorCiAyMDEyLTExLTE1ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgR2VuZXJhdGUgU2V0dGluZ3MgZnJvbSBhIC5pbiBmaWxlCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiAxMzQ3ODYpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTY5Myw2ICs2OTMsOSBAQCBzdGF0aWMgdm9pZCByZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFs
CiAvLyBDYWxsZWQgb25jZSBvbiBEdW1wUmVuZGVyVHJlZSBzdGFydHVwLgogc3RhdGljIHZvaWQg
c2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXNGb3JUZXN0aW5nKCkKIHsKKyAgICAvLyBGSVhN
RTogV2UnZCBsaWtlIHRvIHN0YXJ0IHdpdGggYSBjbGVhbiBzdGF0ZSBmb3IgZXZlcnkgdGVzdCwg
YnV0IHRoaXMgZnVuY3Rpb24gY2FuJ3QgYmUgdXNlZCBtb3JlIHRoYW4gb25jZSB5ZXQuCisgICAg
W1dlYlByZWZlcmVuY2VzIF9zd2l0Y2hOZXR3b3JrTG9hZGVyVG9OZXdUZXN0aW5nU2Vzc2lvbl07
CisKICAgICByZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzKCk7CiAKICAgICBOU1N0cmlu
ZyAqcGF0aCA9IGxpYnJhcnlQYXRoRm9yRHVtcFJlbmRlclRyZWUoKTsKQEAgLTcwMiw4ICs3MDUs
NiBAQCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrUGF0aDpbcGF0aCBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6QCJVUkxDYWNoZSJdXTsKICAgICBbTlNVUkxDYWNoZSBzZXRT
aGFyZWRVUkxDYWNoZTpzaGFyZWRDYWNoZV07CiAgICAgW3NoYXJlZENhY2hlIHJlbGVhc2VdOwot
Ci0gICAgW1dlYlByZWZlcmVuY2VzIF9zd2l0Y2hOZXR3b3JrTG9hZGVyVG9OZXdUZXN0aW5nU2Vz
c2lvbl07CiB9CiAKIHN0YXRpYyB2b2lkIHJ1blRocmVhZCh2b2lkKiBhcmcpCkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcAkocmV2aXNpb24gMTM0Nzg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2
ICsxMDMsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjppbml0aWFsaXplKFdLQnVuZGxlCiAKICAg
ICBhY3RpdmF0ZUZvbnRzKCk7CiAgICAgV0tCdW5kbGVBY3RpdmF0ZU1hY0ZvbnRBc2NlbnRIYWNr
KG1fYnVuZGxlKTsKKworICAgIC8vIEZJWE1FOiBXZSdkIGxpa2UgdG8gc3RhcnQgd2l0aCBhIGNs
ZWFuIHN0YXRlIGZvciBldmVyeSB0ZXN0LCBidXQgdGhpcyBmdW5jdGlvbiBjYW4ndCBiZSB1c2Vk
IG1vcmUgdGhhbiBvbmNlIHlldC4KKyAgICBXS0J1bmRsZVN3aXRjaE5ldHdvcmtMb2FkZXJUb05l
d1Rlc3RpbmdTZXNzaW9uKG1fYnVuZGxlKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlk
Q3JlYXRlUGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKQEAgLTI0Miw3ICsyNDUsNiBAQCB2b2lk
IEluamVjdGVkQnVuZGxlOjpiZWdpblRlc3RpbmcoV0tEaWN0CiAgICAgV0tCdW5kbGVTZXRBbGxv
d1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIHRydWUp
OwogICAgIFdLQnVuZGxlU2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChtX2J1bmRsZSwg
bV9wYWdlR3JvdXAsIHRydWUpOwogICAgIFdLQnVuZGxlU2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZChtX2J1bmRsZSwgbV9wYWdlR3JvdXAsIGZhbHNlKTsKLSAgICBXS0J1bmRsZVN3aXRjaE5ldHdv
cmtMb2FkZXJUb05ld1Rlc3RpbmdTZXNzaW9uKG1fYnVuZGxlKTsKICAgICBXS0J1bmRsZVNldEF1
dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKG1fYnVuZGxlLCBtX3BhZ2VHcm91cCwgdHJ1ZSk7CiAg
ICAgV0tCdW5kbGVTZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKG1fYnVuZGxlLCBtX3BhZ2VHcm91
cCwgZmFsc2UpOwogICAgIFdLQnVuZGxlU2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZShtX2J1bmRs
ZSwgbV9wYWdlR3JvdXAsIDkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174567</attachid>
            <date>2012-11-15 17:27:52 -0800</date>
            <delta_ts>2012-11-15 21:19:11 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>Sessions.txt</filename>
            <type>text/plain</type>
            <size>101946</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDEyLTExLTE1ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFByaXZhdGUgQnJvd3Npbmcg
aXMgYSBwZXItcGFnZSBzZXR0aW5nIHRoYXQgc2V0cyBhIGdsb2JhbCB2YWx1ZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4NzAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIFJlc291cmNlSGFuZGxl
e01hYyxDRk5ldH0gdXNlIGNvbnRleHQgdG8gYWNjZXNzIHN0b3JhZ2Ugc2Vzc2lvbi4KKworICAg
ICAgICAqIFdlYkNvcmUuZXhwLmluOiBXZSB0cmFjayBsZXNzIHNlc3Npb24gc3RhdGUgaW4gV2Vi
Q29yZSBub3csIHNvIHdlIG5lZWQgZmV3ZXIKKyAgICAgICAgZXhwb3J0cy4KKworICAgICAgICAq
IGxvYWRlci9GcmFtZU5ldHdvcmtpbmdDb250ZXh0Lmg6IEFkZGVkIGFuIE9WRVJSSURFLgorCisg
ICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6IChXZWJDb3JlOjpTZXR0aW5nczo6c2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCk6IFdlYkNvcmUKKyAgICAgICAgbm8gbG9uZ2VyIGtlZXBzIHRyYWNr
IG9mIGEgZ2xvYmFsbHkgZW5hYmxlZCBwcml2YXRlIENGTmV0d29yayBzdG9yYWdlIHNlc3Npb24u
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaDogQWRkZWQgZGVmYXVsdENv
b2tpZVN0b3JhZ2UoKS4gU29tZSBjb29raWUgamFyIG1ldGhvZHMKKyAgICAgICAgZG9uJ3QgaGF2
ZSBhIE5ldHdvcmtpbmdDb250ZXh0IHBvaW50ZXIsIGFuZCBoYXZlIHRvIHVzZSB3aGF0ZXZlciBh
IGNsaWVudCBleHBlY3RzCisgICAgICAgIHRoZW0gdG8gZG8uIFBlcmhhcHMgd2Ugc2hvdWxkIG1v
dmUgdGhvc2UgbWV0aG9kcyBhd2F5IGZyb20gV2ViQ29yZSBldmVudHVhbGx5LgorCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9OZXR3b3JraW5nQ29udGV4dC5oOiBBZGRlZCBzdG9yYWdlU2Vz
c2lvbigpLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOiBS
ZW1vdmVkIHN0dGFpYyBtZXRob2RzIGZvciBkZWFsaW5nIHdpdGggZ2xvYmFsCisgICAgICAgIHNl
c3Npb25zLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVy
bmFsLmg6IEFkZGVkIG1fc3RvcmFnZVNlc3Npb24uIFdlIG5lZWQgdG8KKyAgICAgICAgcmVtZW1i
ZXIgaXQgcG9zdC1jcmVhdGlvbiB0byBkbyB0aGluZ3MgaW4gd2lsbFNlbmRSZXF1ZXN0LiBBbHRl
cm5hdGl2ZWx5LCB3ZSBjb3VsZAorICAgICAgICBrZWVwIGEgcmVmZXJlbmNlIHRvIE5ldHdvcmtp
bmdDb250ZXh0IGl0c2VsZi4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvQ29va2ll
SmFyQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00pOiBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSBub3cgbmVlZHMgYSBjb250ZXh0LAorICAgICAgICB0aGVy
ZSBpcyBubyBnbG9iYWxseSBjdXJyZW50IG9uZSBhbnkgbW9yZS4gQWxzbywgd2UgZG9uJ3QgcmVh
bGx5IGV4cGVjdCBjb29raWUKKyAgICAgICAgc3RpcmFnZSB0byBiZSAwIHdoZW4gbm90IHVzaW5n
IE5TVVJMQ29ubmVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JET00pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRl
Q29va2llKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKTogRGl0dG8uCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UpOiBVc2UgYSBjb250ZXh0Lgor
ICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UpOiBFeGNlcHQgZm9y
IFdpbmRvd3Mtb25seSBvdmVycmlkZSBzZXNzaW9uLAorICAgICAgICB0aGlzIGlzIGltcGxlbWVu
dGVkIGluIGEgc3RyYXRlZ3kuCisgICAgICAgIChXZWJDb3JlOjpvdmVycmlkZW5Db29raWVTdG9y
YWdlKTogRXhwb3NlZCB0aGUgb3ZlcnJpZGUgZm9yIFdlYktpdCB1c2Ugb24gV2luZG93cy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3RvcmFnZUNGTmV0Lmg6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndpbGxTZW5kUmVxdWVzdCk6IFVzZSBzdG9yYWdlIHNlc3Np
b24gZnJvbSB0aGUgY29udGV4dCwgbm90IGdsb2JhbCBvbmUuCisgICAgICAgIChXZWJDb3JlOjpt
YWtlRmluYWxSZXF1ZXN0KTogTWVyZ2VkIHRoaXMgaW50byB0aGUgb25seSByZW1haW5pbmcgY2Fs
bGVyLiBUaGlzCisgICAgICAgIGZ1bmN0aW9uIGRpZG4ndCByZWFsbHkgbWFrZSBhbnkgc2Vuc2Ug
b24gaXRzIG93bi4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tp
ZVBvbGljeSk6IEZhY3RvcmVkIG91dCBvZiBjcmVhdGVDRlVSTENvbm5lY3Rpb24KKyAgICAgICAg
dG8gbWF0Y2ggTWFjLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNG
VVJMQ29ubmVjdGlvbik6IFdoaWxlIG1lcmdpbmcgbWFrZUZpbmFsUmVxdWVzdCgpCisgICAgICAg
IGluLCByZW1vdmVkIHNvbWUgc2VlbWluZ2x5IG5vbnNlbnNpY2FsIGNvZGUgdGhhdCB3YXMgZ2V0
dGluZyBhbmQgaW1tZWRpYXRlbHkgcmUtYXBwbHlpbmcKKyAgICAgICAgY29va2llIHN0b3JhZ2Ug
YWNjZXB0IHBvbGljeS4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6
IFN0b3JlIGNvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCkgZm9yIHVzZSBpbiB3aWxsU2VuZFJlcXVl
c3QuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KTog
QXBwbHkgdGhlIHN0b3JlZCBzZXNzaW9uLCBub3QgZ2xvYmFsIG9uZS4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpzdG9yYWdlU2Vzc2lvbik6IEFuIGFjY2Vzc29yIGZvciBzdGF0
aWMgbWV0aG9kcyB0aGF0IGNhbm5vdAorICAgICAgICBhY2Nlc3MgImQiLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOiBTdG9yZSBj
b250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpIGZvciB1c2UgaW4gd2lsbFNlbmRSZXF1ZXN0LgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKTogRG9uJ3Qg
Y2FsbCBtYWtlRmluYWxSZXF1ZXN0IGhlcmUuCisgICAgICAgIEl0IGRpZG4ndCBtYXRjaCBNYWMs
IGFuZCBub3RoaW5nIGluIG1ha2VGaW5hbFJlcXVlc3Qgc2hvdWxkIGhhdmUgYWZmZWN0ZWQgdGhl
IHJlc3VsdC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuY3BwOiAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVx
dWVzdCk6CisgICAgICAgIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBhcHBseSBjdXJyZW50IHN0b3Jh
Z2Ugc2Vzc2lvbiB0byBldmVyeSByZXF1ZXN0IGZvciBubyBhcHBhcmVudAorICAgICAgICByZWFz
b24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9yRE9NKTogQ2hhbmdlZCB0byBwYXNzIGNvbnRleHQg
dG8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UuCisgICAgICAgIChXZWJDb3JlOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29v
a2llc0Zyb21ET00pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpnZXRSYXdDb29raWVzKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpkZWxldGVDb29raWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tp
ZXMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRs
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVBv
bGljeSk6IFRoZXJlIHdhcyBubyBuZWVkIHRvIHNwZWNpYWwgY2FzZQorICAgICAgICBudWxsIGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlLCBXS1NJIGhhbmRsZXMgdGhhdCBpbnRlcm5hbGx5LiBB
ZGRlZCBhIGNvbnRleHQKKyAgICAgICAgYXJndW1lbnQsIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIGNh
biBhY2Nlc3MgY3VycmVudCBzZXNzaW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbik6IFVwZGF0ZWQgZm9yIG90aGVyIGNvZGUgY2hhbmdl
cy4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6IFN0b3JlIGNvbnRl
eHQtPnN0b3JhZ2VTZXNzaW9uKCkgZm9yIHVzZSBpbiB3aWxsU2VuZFJlcXVlc3QuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUpOiBTdHlsZSBmaXgu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6IFN0b3JlIGNvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCkKKyAgICAgICAgZm9yIHVzZSBp
biB3aWxsU2VuZFJlcXVlc3QuIAorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6Ondp
bGxTZW5kUmVxdWVzdCk6IFVzZSBzdG9yZWQgc2Vzc2lvbiwgbm90IGdsb2JhbCBvbmUuCisKIDIw
MTItMTEtMTUgIEVsbGlvdHQgU3ByZWhuICA8ZXNwcmVobkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgTXV0YXRpb25PYnNlcnZlciB3cmFwcGVyIHNob3VsZCBub3QgYmUgY29sbGVjdGVkIHdoaWxl
IHN0aWxsIG9ic2VydmluZwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDEzNDY4
NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODIsNyArMjgyLDYgQEAgX19aTjdXZWJDb3JlMTRSZXNvdXJjZUJ1ZmZlckQxRXYKIF9fWk43V2Vi
Q29yZTE0UmVzb3VyY2VCdWZmZXJEMkV2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjBm
b3JjZUNvbnRlbnRTbmlmZmluZ0V2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjZzeW5j
aHJvbm91c0xvYWRSdW5Mb29wTW9kZUV2Ci1fX1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMzVj
cmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbkVQSzEwX19DRlN0cmluZwogX19aTjdX
ZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTZjcmVhdGVFUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUktO
U18xNVJlc291cmNlUmVxdWVzdEVQTlNfMjBSZXNvdXJjZUhhbmRsZUNsaWVudEViYgogX19aTjdX
ZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjEzc2V0SWRlbnRpZmllckVtCiBfX1pON1dlYkNvcmUxNFJl
c291cmNlTG9hZGVyMTRjYW5jZWxsZWRFcnJvckV2CkBAIC02NzIsNiArNjcxLDcgQEAgX19aTjdX
ZWJDb3JlMjdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpbwogX19aTjdXZWJDb3JlMjdEZXZpY2VP
cmllbnRhdGlvbkNsaWVudE1vY2sxNHNldE9yaWVudGF0aW9uRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzIxRGV2aWNlT3JpZW50YXRpb25EYXRhRUVFCiBfX1pON1dlYkNvcmUyN0RldmljZU9yaWVudGF0
aW9uQ2xpZW50TW9ja0MxRXYKIF9fWk43V2ViQ29yZTI3c3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzRXYKK19fWk43V2ViQ29yZTI2ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2VFdgogX19aTjdX
ZWJDb3JlMjhlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzRVJLTjNXVEY2U3RyaW5nRQogX19a
TjdXZWJDb3JlMjhyZW1vdmVMYW5ndWFnZUNoYW5nZU9ic2VydmVyRVB2CiBfX1pON1dlYkNvcmUy
OWlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0RWliCkBAIC0yMjE2LDEyICsyMjE2LDYgQEAg
X19aTjdXZWJDb3JlMTJTY2hlZHVsZVBhaXJDMUVQOU5TUnVuTG9vcAogX19aTjdXZWJDb3JlMTRS
ZXNvdXJjZUhhbmRsZTEycmVsZWFzZVByb3h5RXYKICNlbmRpZgogCi1fX1pON1dlYkNvcmUxNFJl
c291cmNlSGFuZGxlNDZzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJC
YXNlRVJLTjNXVEY2U3RyaW5nRQotX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIxY3VycmVu
dFN0b3JhZ2VTZXNzaW9uRXYKLV9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyOXByaXZhdGVC
cm93c2luZ1N0b3JhZ2VTZXNzaW9uRXYKLV9fWk43V2ViQ29yZTI2Y3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2VFdgotX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTI0c2V0RGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uRVBLMjFfX0NGVVJMU3RvcmFnZVNlc3Npb24KLQogI2lmIEVOQUJMRShDT05URVhU
X01FTlVTKQogX19aTjdXZWJDb3JlMTFDb250ZXh0TWVudTIyc2V0UGxhdGZvcm1EZXNjcmlwdGlv
bkVQMTROU011dGFibGVBcnJheQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMHNlbmRDb250
ZXh0TWVudUV2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgJKHJldmlzaW9uIDEzNDY4
NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHJvdGVjdGVkOgogICAgIEZyYW1lKiBmcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fZnJhbWU7IH0KIAogICAgIEZyYW1l
KiBtX2ZyYW1lOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiAx
MzQ2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTc4LDIyICs1NzgsNiBAQCB2b2lkIFNldHRpbmdzOjpzZXRTZXNzaW9uU3RvcmFnZVF1
b3RhKHVuCiAKIHZvaWQgU2V0dGluZ3M6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBw
cml2YXRlQnJvd3NpbmdFbmFibGVkKQogewotICAgIC8vIEZJWE1FIGh0dHA6Ly93ZWJraXQub3Jn
L2IvNjc4NzA6IFRoZSBwcml2YXRlIGJyb3dzaW5nIHN0b3JhZ2Ugc2Vzc2lvbiBhbmQgY29va2ll
IHByaXZhdGUKLSAgICAvLyBicm93c2luZyBtb2RlICh3aGljaCBpcyB1c2VkIGlmIHN0b3JhZ2Ug
c2Vzc2lvbnMgYXJlIG5vdCBhdmFpbGFibGUpIGFyZSBnbG9iYWwgc2V0dGluZ3MsIHNvCi0gICAg
Ly8gaXQgaXMgbWlzbGVhZGluZyB0byBoYXZlIHRoZW0gYXMgcGVyLXBhZ2Ugc2V0dGluZ3MuCi0g
ICAgLy8gSW4gYWRkaXRpb24sIGlmIHRoZXkgYXJlIHRyZWF0ZWQgYXMgYSBwZXIgUGFnZSBzZXR0
aW5ncywgdGhlIGdsb2JhbCB2YWx1ZXMgY2FuIGdldCBvdXQgb2YKLSAgICAvLyBzeW5jIHdpdGgg
dGhlIHBlciBQYWdlIHZhbHVlIGluIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgotICAgIC8vIDEu
IFRoZSBnbG9iYWwgdmFsdWVzIGdldCBzZXQgdG8gdHJ1ZSB3aGVuIHNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQodHJ1ZSkgaXMgY2FsbGVkLgotICAgIC8vIDIuIEFsbCBQYWdlcyBhcmUgY2xvc2Vk
LCBzbyBhbGwgU2V0dGluZ3Mgb2JqZWN0cyBnbyBhd2F5LgotICAgIC8vIDMuIEEgbmV3IFBhZ2Ug
aXMgY3JlYXRlZCwgYW5kIGEgY29ycmVzcG9uZGluZyBuZXcgU2V0dGluZ3Mgb2JqZWN0IGlzIGNy
ZWF0ZWQgLSB3aXRoCi0gICAgLy8gICAgbV9wcml2YXRlQnJvd3NpbmdFbmFibGVkIHN0YXJ0aW5n
IG91dCBhcyBmYWxzZSBpbiB0aGUgY29uc3RydWN0b3IuCi0gICAgLy8gNC4gVGhlIFdlYlBhZ2Ug
c2V0dGluZ3MgZ2V0IGFwcGxpZWQgdG8gdGhlIG5ldyBQYWdlIGFuZCBzZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKGZhbHNlKQotICAgIC8vICAgIGlzIGNhbGxlZCwgYnV0IGFuIGlmIChtX3ByaXZh
dGVCcm93c2luZ0VuYWJsZWQgPT0gcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkgZWFybHkgcmV0dXJu
Ci0gICAgLy8gICAgcHJldmVudHMgdGhlIGdsb2JhbCB2YWx1ZXMgZnJvbSBnZXR0aW5nIGNoYW5n
ZWQgZnJvbSB0cnVlIHRvIGZhbHNlLgotI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09S
SykKLSAgICBSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChwcml2YXRl
QnJvd3NpbmdFbmFibGVkKTsKLSNlbmRpZgotCiAgICAgaWYgKG1fcHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZCA9PSBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZXNTdHJhdGVneS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZXNTdHJhdGVneS5oCShyZXZpc2lvbiAxMzQ2
ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVzU3RyYXRlZ3kuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDIyIEBACiAKICNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lF
UykKIAorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFBMQVRGT1JNKE1BQykgfHwg
VVNFKENGTkVUV09SSykKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2Uq
ICBDRkhUVFBDb29raWVTdG9yYWdlUmVmOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ29va2llc1N0cmF0ZWd5IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5Q29va2llc0NoYW5nZWQoKSA9IDA7CiAKKyNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5F
VFdPUkspCisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gZGVm
YXVsdENvb2tpZVN0b3JhZ2UoKSA9IDA7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgfkNvb2tpZXNTdHJhdGVneSgpIHsgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250ZXh0LmgJKHJldmlzaW9uIDEzNDY4
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTIgKzIzLDIyIEBACiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKLU9CSkNfQ0xBU1MgTlNPcGVyYXRpb25RdWV1
ZTsKICNpbmNsdWRlICJTY2hlZHVsZVBhaXIuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQp
CiAjaW5jbHVkZSA8cWdsb2JhbC5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCitPQkpD
X0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwg
VVNFKENGTkVUV09SSykKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZVUkxTdG9yYWdlU2Vzc2lv
biogQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZjsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCiBR
VF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFPYmplY3Q7CiBjbGFzcyBRTmV0d29ya0FjY2Vzc01h
bmFnZXI7CkBAIC01MywxMiArNjMsMTYgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIHZpcnR1YWwgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNv
bnN0ID0gMDsgLy8gRklYTUU6IFJlY29uY2lsZSB3aXRoIFJlc291cmNlSGFuZGxlOjpmb3JjZUNv
bnRlbnRTbmlmZmluZygpLgogICAgIHZpcnR1YWwgU2NoZWR1bGVQYWlySGFzaFNldCogc2NoZWR1
bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgTlNPcGVy
YXRpb25RdWV1ZSAqc2NoZWR1bGVkT3BlcmF0aW9uUXVldWUoKSBjb25zdCB7IHJldHVybiAwOyB9
CiAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKSBjb25zdCA9IDA7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENG
TkVUV09SSykKKyAgICB2aXJ0dWFsIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Np
b24oKSBjb25zdCA9IDA7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFFUKQogICAgIHZpcnR1YWwg
UU9iamVjdCogb3JpZ2luYXRpbmdPYmplY3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBRTmV0
d29ya0FjY2Vzc01hbmFnZXIqIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3QgPSAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
aAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgdW5zY2hlZHVsZShTY2hlZHVsZVBhaXIqKTsKICNlbmRpZgogI2lmIFVTRShD
Rk5FVFdPUkspCisgICAgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbigpIGNv
bnN0OwogICAgIENGVVJMQ29ubmVjdGlvblJlZiBjb25uZWN0aW9uKCkgY29uc3Q7CiAgICAgQ0ZV
UkxDb25uZWN0aW9uUmVmIHJlbGVhc2VDb25uZWN0aW9uRm9yRG93bmxvYWQoKTsKICAgICBzdGF0
aWMgdm9pZCBzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmKTsK
QEAgLTE5NiwxNiArMTk3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaXJlRmFpbHVyZShUaW1l
cjxSZXNvdXJjZUhhbmRsZT4qKTsKIAotI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09S
SykKLSAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBjdXJyZW50U3RvcmFnZVNlc3Np
b24oKTsKLSAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9y
YWdlU2Vzc2lvblJlZik7Ci0gICAgc3RhdGljIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZChib29sKTsKLQotICAgIHN0YXRpYyB2b2lkIHNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uSWRlbnRpZmllckJhc2UoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIFJldGFpblB0
cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKTsKLSNlbmRpZgotCiAgICAgdXNpbmcgUmVmQ291
bnRlZDxSZXNvdXJjZUhhbmRsZT46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPFJlc291cmNl
SGFuZGxlPjo6ZGVyZWY7CiAKQEAgLTI0MCwxNCArMjMxLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgZGVyZWZBdXRoZW50aWNhdGlvbkNsaWVudCgpIHsgZGVyZWYoKTsgfQogCiAjaWYg
UExBVEZPUk0oTUFDKSAmJiAhVVNFKENGTkVUV09SSykKLSAgICB2b2lkIGNyZWF0ZU5TVVJMQ29u
bmVjdGlvbihpZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9v
bCBzaG91bGRDb250ZW50U25pZmYpOwotI2VsaWYgVVNFKENGKQotICAgIHZvaWQgY3JlYXRlQ0ZV
UkxDb25uZWN0aW9uKGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UsIGJvb2wgc2hvdWxk
Q29udGVudFNuaWZmKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRX
T1JLKQotICAgIHN0YXRpYyBTdHJpbmcgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVu
dGlmaWVyRGVmYXVsdEJhc2UoKTsKLSAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBw
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpOworICAgIHZvaWQgY3JlYXRlTlNVUkxDb25u
ZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29s
IHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVBvbGljeSwgYm9vbCBzaG91bGRDb250ZW50U25p
ZmYpOworI2VsaWYgVVNFKENGTkVUV09SSykKKyAgICB2b2lkIGNyZWF0ZUNGVVJMQ29ubmVjdGlv
bihib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sIHNob3VsZFJlbGF4VGhpcmRQ
YXJ0eUNvb2tpZVBvbGljeSwgYm9vbCBzaG91bGRDb250ZW50U25pZmYpOwogI2VuZGlmCiAKICAg
ICBmcmllbmQgY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bC5oCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTAg
QEAgT0JKQ19DTEFTUyBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogT0JKQ19DTEFTUyBO
U1VSTENvbm5lY3Rpb247CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVU
V09SSykKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZVUkxTdG9yYWdlU2Vzc2lvbiogQ0ZVUkxT
dG9yYWdlU2Vzc2lvblJlZjsKKyNlbmRpZgorCiAvLyBUaGUgYWxsb2NhdGlvbnMgYW5kIHJlbGVh
c2VzIGluIFJlc291cmNlSGFuZGxlSW50ZXJuYWwgYXJlCiAvLyBDb2NvYS1leGNlcHRpb24tZnJl
ZSAoZWl0aGVyIHNpbXBsZSBGb3VuZGF0aW9uIGNsYXNzZXMgb3IKIC8vIFdlYkNvcmVSZXNvdXJj
ZUxvYWRlckltcCB3aGljaCBhdm9pZHMgZG9pbmcgd29yayBpbiBkZWFsbG9jKS4KQEAgLTE1Nyw2
ICsxNjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9zdGFydFdoZW5T
Y2hlZHVsZWQ7CiAgICAgICAgIGJvb2wgbV9uZWVkc1NpdGVTcGVjaWZpY1F1aXJrczsKICNlbmRp
ZgorI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykKKyAgICAgICAgUmV0YWluUHRy
PENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IG1fc3RvcmFnZVNlc3Npb247CisjZW5kaWYKICNpZiBV
U0UoV0lOSU5FVCkKICAgICAgICAgVGltZXI8UmVzb3VyY2VIYW5kbGU+IG1fZmlsZUxvYWRUaW1l
cjsKICAgICAgICAgSElOVEVSTkVUIG1faW50ZXJuZXRIYW5kbGU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAko
cmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9D
b29raWVKYXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKICNpbmNsdWRl
ICJLVVJMLmgiCisjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCiAjaW5jbHVkZSA8Q0ZOZXR3
b3JrL0NGSFRUUENvb2tpZXNQcml2Lmg+CkBAIC0xMDAsOSArMTAxLDggQEAgdm9pZCBzZXRDb29r
aWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dAogICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
b29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBk
ZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIGlmICghY29va2llU3RvcmFnZSkKLSAg
ICAgICAgcmV0dXJuOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29r
aWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRleHQp
IDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBBU1NFUlQoY29va2llU3RvcmFn
ZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0Q0YsIHVybC5jcmVhdGVD
RlVSTCgpKTsKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVzQ0Yo
QWRvcHRDRiwgZmlyc3RQYXJ0eS5jcmVhdGVDRlVSTCgpKTsKQEAgLTEyNCw5ICsxMjQsOCBAQCB2
b2lkIHNldENvb2tpZXNGcm9tRE9NKE5ldHdvcmtpbmdDb250ZXh0CiAKIFN0cmluZyBjb29raWVz
Rm9yRE9NKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiwgY29uc3QgS1VS
TCYgdXJsKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0
Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIGlmICghY29va2llU3RvcmFnZSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
b29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRl
eHQpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBBU1NFUlQoY29va2llU3Rv
cmFnZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0Q0YsIHVybC5jcmVh
dGVDRlVSTCgpKTsKIApAQCAtMTM4LDkgKzEzNyw4IEBAIFN0cmluZyBjb29raWVzRm9yRE9NKE5l
dHdvcmtpbmdDb250ZXh0KiAKIAogU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdl
KCk7Ci0gICAgaWYgKCFjb29raWVTdG9yYWdlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250
ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOworICAgIEFTU0VSVChjb29raWVTdG9yYWdlKTsKIAogICAgIFJldGFp
blB0cjxDRlVSTFJlZj4gdXJsQ0YoQWRvcHRDRiwgdXJsLmNyZWF0ZUNGVVJMKCkpOwogCkBAIC0x
NTIsMTkgKzE1MCwxOCBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0
CiAKIGJvb2wgY29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVT
dG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47Ci0gICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7
Ci0gICAgaWYgKGNvb2tpZVN0b3JhZ2UpCi0gICAgICAgIHBvbGljeSA9IENGSFRUUENvb2tpZVN0
b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQoKSk7CisgICAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOworICAgIEFTU0VSVChjb29raWVTdG9yYWdlKTsKKworICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUdldENvb2tp
ZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpKTsKICAgICByZXR1cm4gcG9saWN5ID09
IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFp
biB8fCBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0K
IAogYm9vbCBnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBL
VVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMu
Y2xlYXIoKTsKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3Rv
cmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENG
SFRUUENvb2tpZVN0b3JhZ2UoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KSA6
IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgQVNTRVJUKGNvb2tpZVN0b3JhZ2Up
OwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZV
UkwoKSk7CiAKQEAgLTE5NSw5ICsxOTIsOCBAQCBib29sIGdldFJhd0Nvb2tpZXMoTmV0d29ya2lu
Z0NvbnRleHQqIGNvCiAKIHZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsK
LSAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdl
KCk7CisgICAgQVNTRVJUKGNvb2tpZVN0b3JhZ2UpOwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVm
PiB1cmxDRihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZVUkwoKSk7CiAKQEAgLTIxNiw5ICsyMTIsOCBA
QCB2b2lkIGRlbGV0ZUNvb2tpZShOZXR3b3JraW5nQ29udGV4dCogY29uCiAKIHZvaWQgZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQogewotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkg
OiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwotICAgIGlmICghY29va2llU3RvcmFnZSkK
LSAgICAgICAgcmV0dXJuOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
b29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRl
eHQpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBBU1NFUlQoY29va2llU3Rv
cmFnZSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGKEFkb3B0Q0YsIENG
SFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKSk7CiAgICAg
aWYgKCFjb29raWVzQ0YpCkBAIC0yMzQsOSArMjI5LDggQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhOZXR3b3JraW5nQwogCiB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKLSAgICBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQg
PyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3Jh
Z2UoKTsKLSAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KSA6IGRlZmF1bHRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CisgICAgQVNTRVJUKGNvb2tpZVN0b3JhZ2UpOwogCiAgICAgUmV0YWluUHRyPENG
QXJyYXlSZWY+IGNvb2tpZXNDRihBZG9wdENGLCBDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tp
ZXMoY29va2llU3RvcmFnZS5nZXQoKSkpOwogICAgIGlmICghY29va2llc0NGKQpAQCAtMjUzLDkg
KzI0Nyw4IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmcKIAogdm9p
ZCBkZWxldGVBbGxDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQogewotICAgIFJl
dGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpOwotICAgIGlmICghY29va2llU3RvcmFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRleHQpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0
b3JhZ2UoKTsKKyAgICBBU1NFUlQoY29va2llU3RvcmFnZSk7CiAKICAgICBDRkhUVFBDb29raWVT
dG9yYWdlRGVsZXRlQWxsQ29va2llcyhjb29raWVTdG9yYWdlLmdldCgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3RvcmFnZUNGTmV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZVN0
b3JhZ2VDRk5ldC5jcHAJKHJldmlzaW9uIDEzNDY4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvQ29va2llU3RvcmFnZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsMTQgKzU2LDE0IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4K
IAogI2VuZGlmCiAKLVJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSgpCitSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAj
aWYgUExBVEZPUk0oV0lOKQogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4mIG92ZXJyaWRlID0gY29va2llU3RvcmFnZU92ZXJyaWRlKCkpCiAgICAgICAgIHJldHVybiBv
dmVycmlkZTsKICNlbmRpZgogCi0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc2Vzc2lv
biA9IFJlc291cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFnZVNlc3Npb24oKSkKKyAgICBpZiAoQ0ZV
UkxTdG9yYWdlU2Vzc2lvblJlZiBzZXNzaW9uID0gY29udGV4dC0+c3RvcmFnZVNlc3Npb24oKSkK
ICAgICAgICAgcmV0dXJuIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPihBZG9wdENG
LCB3a0NvcHlIVFRQQ29va2llU3RvcmFnZShzZXNzaW9uKSk7CiAKICNpZiBVU0UoQ0ZORVRXT1JL
KQpAQCAtODEsMTUgKzgxLDcgQEAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGRl
ZmF1bAogICAgICAgICByZXR1cm4gb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIGlmIChDRlVSTFN0
b3JhZ2VTZXNzaW9uUmVmIHNlc3Npb24gPSBSZXNvdXJjZUhhbmRsZTo6ZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKCkpCi0gICAgICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4oQWRvcHRDRiwgd2tDb3B5SFRUUENvb2tpZVN0b3JhZ2Uoc2Vzc2lvbikpOwotCi0jaWYgVVNF
KENGTkVUV09SSykKLSAgICByZXR1cm4gd2tHZXREZWZhdWx0SFRUUENvb2tpZVN0b3JhZ2UoKTsK
LSNlbHNlCi0gICAgLy8gV2hlbiB1c2luZyBOU1VSTENvbm5lY3Rpb24sIHdlIGFsc28gdXNlIGl0
cyBzaGFyZWQgY29va2llIHN0b3JhZ2UuCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKKyAgICByZXR1
cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPmNvb2tpZXNTdHJhdGVneSgpLT5kZWZhdWx0Q29va2ll
U3RvcmFnZSgpOwogfQogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtMTAxLDYgKzkzLDExIEBAIHZv
aWQgb3ZlcnJpZGVDb29raWVTdG9yYWdlKENGSFRUUENvb2tpZVMKICAgICBjb29raWVTdG9yYWdl
T3ZlcnJpZGUoKS5hZG9wdENGKGNvb2tpZVN0b3JhZ2UpOwogfQogCitDRkhUVFBDb29raWVTdG9y
YWdlUmVmIG92ZXJyaWRlbkNvb2tpZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBjb29raWVTdG9y
YWdlT3ZlcnJpZGUoKS5nZXQoKTsKK30KKwogc3RhdGljIHZvaWQgbm90aWZ5Q29va2llc0NoYW5n
ZWRPbk1haW5UaHJlYWQodm9pZCopCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llU3RvcmFnZUNGTmV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29r
aWVTdG9yYWdlQ0ZOZXQuaAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9Db29raWVTdG9yYWdlQ0ZOZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTIgKzMyLDE1IEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsgLy8gV2lsbCBiZSBudWxsIHdoZW4gdXNp
bmcgc2hhcmVkIE5TSFRUUENvb2tpZVN0b3JhZ2UuCitjbGFzcyBOZXR3b3JraW5nQ29udGV4dDsK
KworUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKE5ldHdvcmtpbmdDb250ZXh0Kik7IC8vIFdpbGwgYmUgbnVsbCB3aGVuIHVzaW5nIHNo
YXJlZCBOU0hUVFBDb29raWVTdG9yYWdlLgogUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWY+IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7IC8vIERvZXNuJ3QgdGFrZSBjdXJyZW50
IHNlc3Npb24gaW50byBhY2NvdW50LgogCiAjaWYgUExBVEZPUk0oV0lOKQogLy8gTmVlZGVkIGZv
ciBXZWJLaXQxIEFQSSBvbmx5Lgogdm9pZCBvdmVycmlkZUNvb2tpZVN0b3JhZ2UoQ0ZIVFRQQ29v
a2llU3RvcmFnZVJlZik7CitDRkhUVFBDb29raWVTdG9yYWdlUmVmIG92ZXJyaWRlbkNvb2tpZVN0
b3JhZ2UoKTsKICNlbmRpZgogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAJKHJldmlzaW9u
IDEzNDY4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VI
YW5kbGVDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBzdGF0aWMg
Q0ZVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdChDCiAgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IG5ld01ldGhvZCA9IGFkb3B0Q0YoQ0ZVUkxSZXF1ZXN0Q29weUhUVFBSZXF1
ZXN0TWV0aG9kKGNmUmVxdWVzdCkpOwogICAgICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZVdp
dGhPcHRpb25zKGxhc3RIVFRQTWV0aG9kLmdldCgpLCBuZXdNZXRob2QuZ2V0KCksIENGUmFuZ2VN
YWtlKDAsIENGU3RyaW5nR2V0TGVuZ3RoKGxhc3RIVFRQTWV0aG9kLmdldCgpKSksIGtDRkNvbXBh
cmVDYXNlSW5zZW5zaXRpdmUpKSB7CiAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGTXV0YWJs
ZVVSTFJlcXVlc3RSZWY+IG11dGFibGVSZXF1ZXN0KEFkb3B0Q0YsIENGVVJMUmVxdWVzdENyZWF0
ZU11dGFibGVDb3B5KDAsIGNmUmVxdWVzdCkpOwotICAgICAgICAgICAgICAgIHdrU2V0UmVxdWVz
dFN0b3JhZ2VTZXNzaW9uKFJlc291cmNlSGFuZGxlOjpjdXJyZW50U3RvcmFnZVNlc3Npb24oKSwg
bXV0YWJsZVJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgICAgIHdrU2V0UmVxdWVzdFN0b3Jh
Z2VTZXNzaW9uKGhhbmRsZS0+c3RvcmFnZVNlc3Npb24oKSwgbXV0YWJsZVJlcXVlc3QuZ2V0KCkp
OwogICAgICAgICAgICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBSZXF1ZXN0TWV0aG9kKG11dGFi
bGVSZXF1ZXN0LmdldCgpLCBsYXN0SFRUUE1ldGhvZC5nZXQoKSk7CiAKICAgICAgICAgICAgICAg
ICBGb3JtRGF0YSogYm9keSA9IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKQEAg
LTM5Miw1MyArMzkyLDYgQEAgUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCiAgICAg
TE9HKE5ldHdvcmssICJDRk5ldCAtIERlc3Ryb3lpbmcgam9iICVwICglcykiLCB0aGlzLCBkLT5t
X2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAotc3RhdGlj
IENGVVJMUmVxdWVzdFJlZiBtYWtlRmluYWxSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCi17Ci0gICAgQ0ZNdXRhYmxlVVJMUmVx
dWVzdFJlZiBuZXdSZXF1ZXN0ID0gQ0ZVUkxSZXF1ZXN0Q3JlYXRlTXV0YWJsZUNvcHkoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgcmVxdWVzdC5jZlVSTFJlcXVlc3QoKSk7Ci0gICAgd2tTZXRSZXF1ZXN0
U3RvcmFnZVNlc3Npb24oUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpLCBu
ZXdSZXF1ZXN0KTsKLSAgICAKLSAgICBpZiAoIXNob3VsZENvbnRlbnRTbmlmZikKLSAgICAgICAg
d2tTZXRDRlVSTFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYobmV3UmVxdWVzdCwgZmFsc2UpOwot
Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IHNzbFByb3BzOwotCi0gICAg
aWYgKGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpLmNvbnRhaW5zKHJlcXVlc3QudXJs
KCkuaG9zdCgpLmxvd2VyKCkpKSB7Ci0gICAgICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9u
YXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAg
ICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHNzbFByb3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xBbGxv
d3NBbnlSb290LCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KHNzbFByb3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xBbGxvd3NFeHBpcmVkUm9vdHMsIGtDRkJvb2xl
YW5UcnVlKTsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoc3NsUHJvcHMuZ2V0KCksIGtD
RlN0cmVhbVNTTEFsbG93c0V4cGlyZWRDZXJ0aWZpY2F0ZXMsIGtDRkJvb2xlYW5UcnVlKTsKLSAg
ICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoc3NsUHJvcHMuZ2V0KCksIGtDRlN0cmVhbVNTTFZh
bGlkYXRlc0NlcnRpZmljYXRlQ2hhaW4sIGtDRkJvb2xlYW5GYWxzZSk7Ci0gICAgfQotCi0gICAg
SGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxDRkRhdGFSZWY+ID46Oml0ZXJhdG9yIGNsaWVudENl
cnQgPSBjbGllbnRDZXJ0cygpLmZpbmQocmVxdWVzdC51cmwoKS5ob3N0KCkubG93ZXIoKSk7Ci0g
ICAgaWYgKGNsaWVudENlcnQgIT0gY2xpZW50Q2VydHMoKS5lbmQoKSkgewotICAgICAgICBpZiAo
IXNzbFByb3BzKQotICAgICAgICAgICAgc3NsUHJvcHMuYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVh
dGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSNpZiBQTEFURk9S
TShXSU4pCi0gICAgICAgIHdrU2V0Q2xpZW50Q2VydGlmaWNhdGVJblNTTFByb3BlcnRpZXMoc3Ns
UHJvcHMuZ2V0KCksIChjbGllbnRDZXJ0LT52YWx1ZSkuZ2V0KCkpOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgaWYgKHNzbFByb3BzKQotICAgICAgICBDRlVSTFJlcXVlc3RTZXRTU0xQcm9wZXJ0aWVz
KG5ld1JlcXVlc3QsIHNzbFByb3BzLmdldCgpKTsKLQotICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9y
YWdlKCkpIHsKLSAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUENvb2tpZVN0b3JhZ2UobmV3UmVx
dWVzdCwgY29va2llU3RvcmFnZS5nZXQoKSk7Ci0gICAgICAgIENGSFRUUENvb2tpZVN0b3JhZ2VB
Y2NlcHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBv
bGljeShjb29raWVTdG9yYWdlLmdldCgpKTsKLSAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0SFRUUENv
b2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kobmV3UmVxdWVzdCwgcG9saWN5KTsKLQotICAgICAgICAv
LyBJZiBhIFVSTCBhbHJlYWR5IGhhcyBjb29raWVzLCB0aGVuIHdlJ2xsIHJlbGF4IHRoZSAzcmQg
cGFydHkgY29va2llIHBvbGljeSBhbmQgYWNjZXB0IG5ldyBjb29raWVzLgotICAgICAgICBpZiAo
cG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1
bWVudERvbWFpbikgewotICAgICAgICAgICAgQ0ZVUkxSZWYgdXJsID0gQ0ZVUkxSZXF1ZXN0R2V0
VVJMKG5ld1JlcXVlc3QpOwotICAgICAgICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tp
ZXMoQWRvcHRDRiwgQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKGNvb2tpZVN0
b3JhZ2UuZ2V0KCksIHVybCwgZmFsc2UpKTsKLSAgICAgICAgICAgIGlmIChDRkFycmF5R2V0Q291
bnQoY29va2llcy5nZXQoKSkpCi0gICAgICAgICAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0TWFpbkRv
Y3VtZW50VVJMKG5ld1JlcXVlc3QsIHVybCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gbmV3UmVxdWVzdDsKLX0KLQogc3RhdGljIENGRGljdGlvbmFyeVJlZiBjcmVhdGVDb25uZWN0
aW9uUHJvcGVydGllcyhib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKQogewogICAgIHN0
YXRpYyBjb25zdCBDRlN0cmluZ1JlZiB3ZWJLaXRQcml2YXRlU2Vzc2lvbkNGID0gQ0ZTVFIoIldl
YktpdFByaXZhdGVTZXNzaW9uIik7CkBAIC00NTUsNyArNDA4LDIyIEBAIHN0YXRpYyBDRkRpY3Rp
b25hcnlSZWYgY3JlYXRlQ29ubmVjdGlvblAKICAgICByZXR1cm4gcHJvcGVydGllc0RpY3Rpb25h
cnk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZUNGVVJMQ29ubmVjdGlvbihib29s
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKK3N0
YXRpYyBib29sIHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVBvbGljeShOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIC8vIElmIGEgVVJMIGFscmVh
ZHkgaGFzIGNvb2tpZXMsIHRoZW4gd2UnbGwgcmVsYXggdGhlIDNyZCBwYXJ0eSBjb29raWUgcG9s
aWN5IGFuZCBhY2NlcHQgbmV3IGNvb2tpZXMuCisKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2Uo
Y29udGV4dCk7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBjb29raWVBY2Nl
cHRQb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNmQ29v
a2llU3RvcmFnZS5nZXQoKSk7CisKKyAgICBpZiAoY29va2llQWNjZXB0UG9saWN5ICE9IENGSFRU
UENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTCA9IGFk
b3B0Q0YodXJsLmNyZWF0ZUNGVVJMKCkpOworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29r
aWVzID0gYWRvcHRDRihDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JVUkwoY2ZDb29r
aWVTdG9yYWdlLmdldCgpLCBjZlVSTC5nZXQoKSwgZmFsc2UpKTsKKyAgICByZXR1cm4gQ0ZBcnJh
eUdldENvdW50KGNvb2tpZXMuZ2V0KCkpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVh
dGVDRlVSTENvbm5lY3Rpb24oYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbCBz
aG91bGRSZWxheFRoaXJkUGFydHlDb29raWVQb2xpY3ksIGJvb2wgc2hvdWxkQ29udGVudFNuaWZm
KQogewogICAgIGlmICgoIWQtPm1fdXNlci5pc0VtcHR5KCkgfHwgIWQtPm1fcGFzcy5pc0VtcHR5
KCkpICYmICFmaXJzdFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsK
ICAgICAgICAgLy8gQ3JlZGVudGlhbHMgZm9yIGZ0cCBjYW4gb25seSBiZSBwYXNzZWQgaW4gVVJM
LCB0aGUgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGRlbGVnYXRlIGNhbGwgd29u
J3QgYmUgbWFkZS4KQEAgLTQ2NSw2ICs0MzMsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjcmVh
dGVDRlVSTENvbm5lY3RpCiAgICAgICAgIGZpcnN0UmVxdWVzdCgpLnNldFVSTCh1cmxXaXRoQ3Jl
ZGVudGlhbHMpOwogICAgIH0KIAorICAgIGlmIChzaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVQ
b2xpY3kpCisgICAgICAgIGZpcnN0UmVxdWVzdCgpLnNldEZpcnN0UGFydHlGb3JDb29raWVzKGZp
cnN0UmVxdWVzdCgpLnVybCgpKTsKKwogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MTc0MDUwPiAt
IEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3NlIHByZXZpb3VzbHkgY2hhbGxl
bmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCiAgICAgLy8gdHJ5IGFuZCByZXVz
ZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcuCiAg
ICAgaWYgKHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlICYmIGZpcnN0UmVxdWVzdCgpLnVybCgp
LnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewpAQCAtNDg1LDcgKzQ1Niw0MCBAQCB2b2lkIFJl
c291cmNlSGFuZGxlOjpjcmVhdGVDRlVSTENvbm5lY3RpCiAgICAgICAgIGFwcGx5QmFzaWNBdXRo
b3JpemF0aW9uSGVhZGVyKGZpcnN0UmVxdWVzdCgpLCBkLT5tX2luaXRpYWxDcmVkZW50aWFsKTsK
ICAgICB9CiAKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZXF1ZXN0UmVmPiByZXF1ZXN0KEFkb3B0Q0Ys
IG1ha2VGaW5hbFJlcXVlc3QoZmlyc3RSZXF1ZXN0KCksIHNob3VsZENvbnRlbnRTbmlmZikpOwor
ICAgIFJldGFpblB0cjxDRk11dGFibGVVUkxSZXF1ZXN0UmVmPiByZXF1ZXN0ID0gYWRvcHRDRihD
RlVSTFJlcXVlc3RDcmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmaXJzdFJl
cXVlc3QoKS5jZlVSTFJlcXVlc3QoKSkpOworICAgIHdrU2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9u
KGQtPm1fc3RvcmFnZVNlc3Npb24uZ2V0KCksIHJlcXVlc3QuZ2V0KCkpOworICAgIAorICAgIGlm
ICghc2hvdWxkQ29udGVudFNuaWZmKQorICAgICAgICB3a1NldENGVVJMUmVxdWVzdFNob3VsZENv
bnRlbnRTbmlmZihyZXF1ZXN0LmdldCgpLCBmYWxzZSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZNdXRh
YmxlRGljdGlvbmFyeVJlZj4gc3NsUHJvcHM7CisKKyAgICBpZiAoYWxsb3dzQW55SFRUUFNDZXJ0
aWZpY2F0ZUhvc3RzKCkuY29udGFpbnMoZmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmxvd2Vy
KCkpKSB7CisgICAgICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJs
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgICAgIENGRGljdGlvbmFy
eUFkZFZhbHVlKHNzbFByb3BzLmdldCgpLCBrQ0ZTdHJlYW1TU0xBbGxvd3NBbnlSb290LCBrQ0ZC
b29sZWFuVHJ1ZSk7CisgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHNzbFByb3BzLmdldCgp
LCBrQ0ZTdHJlYW1TU0xBbGxvd3NFeHBpcmVkUm9vdHMsIGtDRkJvb2xlYW5UcnVlKTsKKyAgICAg
ICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoc3NsUHJvcHMuZ2V0KCksIGtDRlN0cmVhbVNTTEFsbG93
c0V4cGlyZWRDZXJ0aWZpY2F0ZXMsIGtDRkJvb2xlYW5UcnVlKTsKKyAgICAgICAgQ0ZEaWN0aW9u
YXJ5QWRkVmFsdWUoc3NsUHJvcHMuZ2V0KCksIGtDRlN0cmVhbVNTTFZhbGlkYXRlc0NlcnRpZmlj
YXRlQ2hhaW4sIGtDRkJvb2xlYW5GYWxzZSk7CisgICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcs
IFJldGFpblB0cjxDRkRhdGFSZWY+ID46Oml0ZXJhdG9yIGNsaWVudENlcnQgPSBjbGllbnRDZXJ0
cygpLmZpbmQoZmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmxvd2VyKCkpOworICAgIGlmIChj
bGllbnRDZXJ0ICE9IGNsaWVudENlcnRzKCkuZW5kKCkpIHsKKyAgICAgICAgaWYgKCFzc2xQcm9w
cykKKyAgICAgICAgICAgIHNzbFByb3BzLmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJs
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisjaWYgUExBVEZPUk0oV0lOKQor
ICAgICAgICB3a1NldENsaWVudENlcnRpZmljYXRlSW5TU0xQcm9wZXJ0aWVzKHNzbFByb3BzLmdl
dCgpLCAoY2xpZW50Q2VydC0+dmFsdWUpLmdldCgpKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlm
IChzc2xQcm9wcykKKyAgICAgICAgQ0ZVUkxSZXF1ZXN0U2V0U1NMUHJvcGVydGllcyhyZXF1ZXN0
LmdldCgpLCBzc2xQcm9wcy5nZXQoKSk7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgaWYgKENG
SFRUUENvb2tpZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IG92ZXJyaWRlbkNvb2tpZVN0b3Jh
Z2UoKSkgeworICAgICAgICAvLyBPdmVycmlkZGVuIGNvb2tpZSBzdG9yYWdlIGRvZXNuJ3QgY29t
ZSBmcm9tIGEgc2Vzc2lvbiwgc28gdGhlIHJlcXVlc3QgZG9lcyBub3QgaGF2ZSBpdCB5ZXQuCisg
ICAgICAgIENGVVJMUmVxdWVzdFNldEhUVFBDb29raWVTdG9yYWdlKHJlcXVlc3QuZ2V0KCksIGNv
b2tpZVN0b3JhZ2UpOworICAgIH0KKyNlbmRpZgogCiAgICAgQ0ZVUkxDb25uZWN0aW9uQ2xpZW50
X1Y2IGNsaWVudCA9IHsgNiwgdGhpcywgMCwgMCwgMCwgV2ViQ29yZTo6d2lsbFNlbmRSZXF1ZXN0
LCBkaWRSZWNlaXZlUmVzcG9uc2UsIGRpZFJlY2VpdmVEYXRhLCAwLCBkaWRGaW5pc2hMb2FkaW5n
LCBkaWRGYWlsLCB3aWxsQ2FjaGVSZXNwb25zZSwgZGlkUmVjZWl2ZUNoYWxsZW5nZSwgZGlkU2Vu
ZEJvZHlEYXRhLCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUNhbGxiYWNrLCAwLAogI2lmIFVT
RShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCkBAIC01MTUsOSArNTE5LDExIEBAIGJv
b2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KE5ldHdvcmtpbmdDb24KICAgICBpZiAoIWNvbnRleHQt
PmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgZC0+bV9zdG9yYWdlU2Vz
c2lvbiA9IGNvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCk7CisKICAgICBib29sIHNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlID0gIWNsaWVudCgpIHx8IGNsaWVudCgpLT5zaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZSh0aGlzKTsKIAotICAgIGNyZWF0ZUNGVVJMQ29ubmVjdGlvbihzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZSwgZC0+bV9zaG91bGRDb250ZW50U25pZmYpOworICAgIGNyZWF0ZUNG
VVJMQ29ubmVjdGlvbihzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgc2hvdWxkUmVsYXhUaGly
ZFBhcnR5Q29va2llUG9saWN5KGNvbnRleHQsIGZpcnN0UmVxdWVzdCgpLnVybCgpKSwgZC0+bV9z
aG91bGRDb250ZW50U25pZmYpOwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIENGVVJMQ29ubmVj
dGlvblNjaGVkdWxlV2l0aEN1cnJlbnRNZXNzYWdlUXVldWUoZC0+bV9jb25uZWN0aW9uLmdldCgp
KTsKQEAgLTU2Niw3ICs1NzIsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjp3aWxsU2VuZFJlcXVl
c3QoUmVzCiAgICAgICAgIH0KICAgICB9CiAKLSAgICAgcmVxdWVzdC5zZXRTdG9yYWdlU2Vzc2lv
bihSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFN0b3JhZ2VTZXNzaW9uKCkpOworICAgIHJlcXVlc3Qu
c2V0U3RvcmFnZVNlc3Npb24oZC0+bV9zdG9yYWdlU2Vzc2lvbi5nZXQoKSk7CiAKICAgICBjbGll
bnQoKS0+d2lsbFNlbmRSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwog
fQpAQCAtNzEwLDYgKzcxNiwxMSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNl
bGxhdGlvCiAgICAgICAgIGNsaWVudCgpLT5yZWNlaXZlZENhbmNlbGxhdGlvbih0aGlzLCBjaGFs
bGVuZ2UpOwogfQogCitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJlc291cmNlSGFuZGxlOjpzdG9y
YWdlU2Vzc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm1fc3RvcmFnZVNlc3Npb24uZ2V0
KCk7Cit9CisKIENGVVJMQ29ubmVjdGlvblJlZiBSZXNvdXJjZUhhbmRsZTo6Y29ubmVjdGlvbigp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGQtPm1fY29ubmVjdGlvbi5nZXQoKTsKQEAgLTc0MCwxMiAr
NzUxLDE0IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm8KIAogICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFu
ZGxlKHJlcXVlc3QsIGNsaWVudC5nZXQoKSwgZmFsc2UgLypkZWZlcnNMb2FkaW5nKi8sIHRydWUg
LypzaG91bGRDb250ZW50U25pZmYqLykpOwogCi0gICAgaWYgKGNvbnRleHQgJiYgaGFuZGxlLT5k
LT5tX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkgeworICAgIGhhbmRsZS0+ZC0+
bV9zdG9yYWdlU2Vzc2lvbiA9IGNvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCk7CisKKyAgICBpZiAo
aGFuZGxlLT5kLT5tX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkgewogICAgICAg
ICBlcnJvciA9IGNvbnRleHQtPmJsb2NrZWRFcnJvcihyZXF1ZXN0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGhhbmRsZS0+Y3JlYXRlQ0ZVUkxDb25uZWN0aW9uKHN0b3JlZENyZWRl
bnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlSGFuZGxlOjpzaG91bGRD
b250ZW50U25pZmZVUkwocmVxdWVzdC51cmwoKSkpOworICAgIGhhbmRsZS0+Y3JlYXRlQ0ZVUkxD
b25uZWN0aW9uKHN0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIHNo
b3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVBvbGljeShjb250ZXh0LCByZXF1ZXN0LnVybCgpKSwg
UmVzb3VyY2VIYW5kbGU6OnNob3VsZENvbnRlbnRTbmlmZlVSTChyZXF1ZXN0LnVybCgpKSk7CiAK
ICAgICBDRlVSTENvbm5lY3Rpb25TY2hlZHVsZVdpdGhSdW5Mb29wKGhhbmRsZS0+Y29ubmVjdGlv
bigpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIHN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlKCkp
OwogICAgIENGVVJMQ29ubmVjdGlvblNjaGVkdWxlRG93bmxvYWRXaXRoUnVuTG9vcChoYW5kbGUt
PmNvbm5lY3Rpb24oKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBzeW5jaHJvbm91c0xvYWRSdW5M
b29wTW9kZSgpKTsKQEAgLTgxMSw4ICs4MjQsNyBAQCBib29sIFJlc291cmNlSGFuZGxlOjp3aWxs
TG9hZEZyb21DYWNoZShSCiAgICAgCiAgICAgQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlID0g
MDsKICAgICBDRkVycm9yUmVmIGNmRXJyb3IgPSAwOwotICAgIFJldGFpblB0cjxDRlVSTFJlcXVl
c3RSZWY+IGNmUmVxdWVzdChBZG9wdENGLCBtYWtlRmluYWxSZXF1ZXN0KHJlcXVlc3QsIHRydWUp
KTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGVVJMQ29ubmVjdGlv
blNlbmRTeW5jaHJvbm91c1JlcXVlc3QoY2ZSZXF1ZXN0LmdldCgpLCAmY2ZSZXNwb25zZSwgJmNm
RXJyb3IsIHJlcXVlc3QudGltZW91dEludGVydmFsKCkpKTsKKyAgICBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBkYXRhID0gYWRvcHRDRihDRlVSTENvbm5lY3Rpb25TZW5kU3luY2hyb25vdXNSZXF1ZXN0
KHJlcXVlc3QuY2ZVUkxSZXF1ZXN0KCksICZjZlJlc3BvbnNlLCAmY2ZFcnJvciwgcmVxdWVzdC50
aW1lb3V0SW50ZXJ2YWwoKSkpOwogICAgIGJvb2wgY2FjaGVkID0gY2ZSZXNwb25zZSAmJiAhY2ZF
cnJvcjsKIAogICAgIGlmIChjZkVycm9yKQpAQCAtOTM4LDg0ICs5NTAsNSBAQCB2b2lkIFJlc291
cmNlSGFuZGxlOjpoYW5kbGVEYXRhQXJyYXkoQ0ZBCiB9CiAjZW5kaWYKIAotUmV0YWluUHRyPENG
VVJMU3RvcmFnZVNlc3Npb25SZWY+IFJlc291cmNlSGFuZGxlOjpjcmVhdGVQcml2YXRlQnJvd3Np
bmdTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKQotewotI2lmIFBMQVRGT1JN
KFdJTikKLSAgICByZXR1cm4gUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+KEFkb3B0
Q0YsIHdrQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKGlkZW50aWZpZXIsIGRlZmF1bHRTdG9y
YWdlU2Vzc2lvbigpKSk7Ci0jZWxzZQotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZVUkxTdG9yYWdl
U2Vzc2lvblJlZj4oQWRvcHRDRiwgd2tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oaWRlbnRp
ZmllcikpOwotI2VuZGlmCi19Ci0KLUNGVVJMU3RvcmFnZVNlc3Npb25SZWYgUmVzb3VyY2VIYW5k
bGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpCi17Ci0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Np
b25SZWYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Np
b24oKSkKLSAgICAgICAgcmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vzc2lvbjsKLSAgICByZXR1cm4g
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZVUkxTdG9y
YWdlU2Vzc2lvblJlZj4mIGRlZmF1bHRDRlVSTFN0b3JhZ2VTZXNzaW9uKCkKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiwgc3RvcmFn
ZVNlc3Npb24sICgpKTsKLSAgICByZXR1cm4gc3RvcmFnZVNlc3Npb247Ci19Ci0KLXZvaWQgUmVz
b3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbihDRlVSTFN0b3JhZ2VTZXNzaW9u
UmVmIHN0b3JhZ2VTZXNzaW9uKQotewotICAgIGRlZmF1bHRDRlVSTFN0b3JhZ2VTZXNzaW9uKCkg
PSBzdG9yYWdlU2Vzc2lvbjsKLX0KLQotQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBSZXNvdXJjZUhh
bmRsZTo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkKLXsKLSAgICByZXR1cm4gZGVmYXVsdENGVVJM
U3RvcmFnZVNlc3Npb24oKS5nZXQoKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmPiYgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKCkKLXsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiwgc3RvcmFnZVNlc3Np
b24sICgpKTsKLSAgICByZXR1cm4gc3RvcmFnZVNlc3Npb247Ci19Ci0KLXN0YXRpYyBTdHJpbmcm
IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKQotewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBiYXNlLCAoKSk7Ci0gICAgcmV0dXJuIGJhc2U7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBl
bmFibGVkKQotewotICAgIGlmICghZW5hYmxlZCkgewotICAgICAgICBwcml2YXRlU3RvcmFnZVNl
c3Npb24oKSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocHJp
dmF0ZVN0b3JhZ2VTZXNzaW9uKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBiYXNl
ID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZSgpLmlzTnVsbCgp
ID8gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyRGVmYXVsdEJhc2UoKSA6
IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKTsKLSAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmllciA9IFN0cmluZyhiYXNlICsgIi5Qcml2YXRl
QnJvd3NpbmciKS5jcmVhdGVDRlN0cmluZygpOwotCi0gICAgcHJpdmF0ZVN0b3JhZ2VTZXNzaW9u
KCkgPSBjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0
KCkpOwotfQotCi1DRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIFJlc291cmNlSGFuZGxlOjpwcml2YXRl
QnJvd3NpbmdTdG9yYWdlU2Vzc2lvbigpCi17Ci0gICAgcmV0dXJuIHByaXZhdGVTdG9yYWdlU2Vz
c2lvbigpLmdldCgpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpzZXRQcml2YXRlQnJvd3Np
bmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikK
LXsKLSAgICBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKCkgPSBp
ZGVudGlmaWVyOwotfQotCi0jaWYgUExBVEZPUk0oV0lOKSB8fCBVU0UoQ0ZORVRXT1JLKQotCi1T
dHJpbmcgUmVzb3VyY2VIYW5kbGU6OnByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRp
ZmllckRlZmF1bHRCYXNlKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Q0ZTdHJpbmdSZWY+KENGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShDRkJ1bmRs
ZUdldE1haW5CdW5kbGUoKSwga0NGQnVuZGxlSWRlbnRpZmllcktleSkpKTsKLX0KLQotI2VuZGlm
IC8vIFBMQVRGT1JNKFdJTikKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
UmVxdWVzdENGTmV0LmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNiw3ICsxMzYsNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9y
bVJlCiAgICAgICAgIENGVVJMUmVxdWVzdFNldFRpbWVvdXRJbnRlcnZhbChjZlJlcXVlc3QsIHRp
bWVvdXRJbnRlcnZhbCgpKTsKICAgICB9IGVsc2UKICAgICAgICAgY2ZSZXF1ZXN0ID0gQ0ZVUkxS
ZXF1ZXN0Q3JlYXRlTXV0YWJsZSgwLCB1cmwuZ2V0KCksIChDRlVSTFJlcXVlc3RDYWNoZVBvbGlj
eSljYWNoZVBvbGljeSgpLCB0aW1lb3V0SW50ZXJ2YWwoKSwgZmlyc3RQYXJ0eUZvckNvb2tpZXMu
Z2V0KCkpOwotICAgIHdrU2V0UmVxdWVzdFN0b3JhZ2VTZXNzaW9uKFJlc291cmNlSGFuZGxlOjpj
dXJyZW50U3RvcmFnZVNlc3Npb24oKSwgY2ZSZXF1ZXN0KTsKIAogICAgIENGVVJMUmVxdWVzdFNl
dEhUVFBSZXF1ZXN0TWV0aG9kKGNmUmVxdWVzdCwgaHR0cE1ldGhvZCgpLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9D
b29raWVKYXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvQ29va2llSmFyTWFjLm1tCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2UuaCIKICNpbXBvcnQgIkNv
b2tpZVN0b3JhZ2VDRk5ldC5oIgogI2ltcG9ydCAiS1VSTC5oIgorI2ltcG9ydCAiTmV0d29ya2lu
Z0NvbnRleHQuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNjUsNyArNjYsNyBAQCBTdHJpbmcgY29va2llc0ZvckRPTShOZXR3
b3JraW5nQ29udGV4dCogCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0g
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250
ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0
b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBk
ZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hU
VFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybCk7CiAgICAgcmV0dXJuIFtb
TlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpmaWx0ZXJDb29raWVz
KGNvb2tpZXMpLmdldCgpXSBvYmplY3RGb3JLZXk6QCJDb29raWUiXTsKIApAQCAtNzcsNyArNzgs
NyBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0CiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0
b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CisgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0ID8gY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgp
OwogICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNvb2tpZVN0b3Jh
Z2UuZ2V0KCksIHVybCk7CiAgICAgcmV0dXJuIFtbTlNIVFRQQ29va2llIHJlcXVlc3RIZWFkZXJG
aWVsZHNXaXRoQ29va2llczpjb29raWVzXSBvYmplY3RGb3JLZXk6QCJDb29raWUiXTsKIApAQCAt
MTAyLDcgKzEwMyw3IEBAIHZvaWQgc2V0Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQK
ICAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29raWVzID0gZmlsdGVyQ29va2llcyhb
TlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHM6W05TRGljdGlvbmFy
eSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcgZm9yS2V5OkAiU2V0LUNvb2tpZSJd
IGZvclVSTDpjb29raWVVUkxdKTsKICAgICBBU1NFUlQoW2ZpbHRlcmVkQ29va2llcy5nZXQoKSBj
b3VudF0gPD0gMSk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29v
a2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3Rv
cmFnZShjb250ZXh0KSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgd2tTZXRI
VFRQQ29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0
KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eSk7CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwpAQCAtMTEyLDcgKzExMyw3IEBAIGJvb2wgY29va2llc0VuYWJsZWQoTmV0d29ya2luZ0Nv
bnRleHQqIGMKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2Uo
KTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9
IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KSA6IGRlZmF1bHRD
RkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IGNvb2tp
ZUFjY2VwdFBvbGljeSA9IHN0YXRpY19jYXN0PE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeT4od2tH
ZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCkpKTsKICAgICByZXR1
cm4gY29va2llQWNjZXB0UG9saWN5ID09IE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyB8
fCBjb29raWVBY2NlcHRQb2xpY3kgPT0gTlNIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21N
YWluRG9jdW1lbnREb21haW47CiAKQEAgLTEyNSw3ICsxMjYsNyBAQCBib29sIGdldFJhd0Nvb2tp
ZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOworICAgIFJldGFpblB0cjxD
RkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4dCA/IGN1cnJlbnRD
RkhUVFBDb29raWVTdG9yYWdlKGNvbnRleHQpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2Uo
KTsKICAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29va2llc0ZvclVSTChjb29raWVTdG9y
YWdlLmdldCgpLCB1cmwpOwogICAgIE5TVUludGVnZXIgY291bnQgPSBbY29va2llcyBjb3VudF07
CiAgICAgcmF3Q29va2llcy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwpAQCAtMTQ1LDcgKzE0Niw3
IEBAIHZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiBjb24KICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwotICAg
IFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY29udGV4
dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkgOiBkZWZhdWx0Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpOworICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9y
YWdlID0gY29udGV4dCA/IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKGNvbnRleHQpIDogZGVm
YXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQ
Q29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCBjb29raWVVUkwpOwogCiAgICAgTlNT
dHJpbmcgKmNvb2tpZU5hbWVTdHJpbmcgPSBjb29raWVOYW1lOwpAQCAtMTY0LDcgKzE2NSw3IEBA
IHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29ya2luZ0MKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZShjb250ZXh0KSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAg
ICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSk7
CiAgICAgCiAgICAgZm9yIChOU0hUVFBDb29raWUqIGNvb2tpZSBpbiBjb29raWVzKQpAQCAtMTc3
LDcgKzE3OCw3IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmcKIHsK
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpIDogZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKKyAgICBSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGNvbnRleHQgPyBj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KSA6IGRlZmF1bHRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CiAgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXMoY29va2llU3Rv
cmFnZS5nZXQoKSk7CiAgICAgaWYgKCFjb29raWVzKQogICAgICAgICByZXR1cm47CkBAIC0xOTIs
NyArMTkzLDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZwogCiB2
b2lkIGRlbGV0ZUFsbENvb2tpZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAg
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjb250ZXh0
ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSA6IGRlZmF1bHRDRkhUVFBDb29raWVTdG9y
YWdlKCk7CisgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3Jh
Z2UgPSBjb250ZXh0ID8gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoY29udGV4dCkgOiBkZWZh
dWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIHdrRGVsZXRlQWxsSFRUUENvb2tpZXMoY29v
a2llU3RvcmFnZS5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tCShyZXZpc2lvbiAx
MzQ2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhh
bmRsZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQzLDMyICsxNDMsMjIgQEAgUmVzb3VyY2VI
YW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCiAgICAgTE9HKE5ldHdvcmssICJIYW5kbGUgJXAgZGVz
dHJveWVkIiwgdGhpcyk7CiB9CiAKLXN0YXRpYyBib29sIHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNv
b2tpZVBvbGljeShjb25zdCBLVVJMJiB1cmwpCitzdGF0aWMgYm9vbCBzaG91bGRSZWxheFRoaXJk
UGFydHlDb29raWVQb2xpY3koTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwm
IHVybCkKIHsKICAgICAvLyBJZiBhIFVSTCBhbHJlYWR5IGhhcyBjb29raWVzLCB0aGVuIHdlJ2xs
IHJlbGF4IHRoZSAzcmQgcGFydHkgY29va2llIHBvbGljeSBhbmQgYWNjZXB0IG5ldyBjb29raWVz
LgogCi0gICAgTlNIVFRQQ29va2llU3RvcmFnZSAqc2hhcmVkU3RvcmFnZSA9IFtOU0hUVFBDb29r
aWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXTsKLQotICAgIE5TSFRUUENvb2tpZUFj
Y2VwdFBvbGljeSBjb29raWVBY2NlcHRQb2xpY3k7Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWY+IGNmQ29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCk7Ci0gICAgaWYgKGNmQ29va2llU3RvcmFnZSkKLSAgICAgICAgY29va2llQWNjZXB0UG9saWN5
ID0gc3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVB
Y2NlcHRQb2xpY3koY2ZDb29raWVTdG9yYWdlLmdldCgpKSk7Ci0gICAgZWxzZQotICAgICAgICBj
b29raWVBY2NlcHRQb2xpY3kgPSBbc2hhcmVkU3RvcmFnZSBjb29raWVBY2NlcHRQb2xpY3ldOwor
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2UgPSBj
dXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZShjb250ZXh0KTsKKyAgICBOU0hUVFBDb29raWVBY2Nl
cHRQb2xpY3kgY29va2llQWNjZXB0UG9saWN5ID0gc3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNj
ZXB0UG9saWN5Pih3a0dldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY2ZDb29raWVTdG9yYWdlLmdl
dCgpKSk7CiAKICAgICBpZiAoY29va2llQWNjZXB0UG9saWN5ICE9IE5TSFRUUENvb2tpZUFjY2Vw
dFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBOU0FycmF5ICpjb29raWVzOwotICAgIGlmIChjZkNvb2tpZVN0b3JhZ2UpCi0gICAg
ICAgIGNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQoKSwg
dXJsKTsKLSAgICBlbHNlCi0gICAgICAgIGNvb2tpZXMgPSBbc2hhcmVkU3RvcmFnZSBjb29raWVz
Rm9yVVJMOnVybF07CisgICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwo
Y2ZDb29raWVTdG9yYWdlLmdldCgpLCB1cmwpOwogCiAgICAgcmV0dXJuIFtjb29raWVzIGNvdW50
XTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25uZWN0aW9uKGlkIGRl
bGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlLCBib29sIHNob3VsZENvbnRl
bnRTbmlmZikKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbihpZCBk
ZWxlZ2F0ZSwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwgYm9vbCBzaG91bGRSZWxh
eFRoaXJkUGFydHlDb29raWVQb2xpY3ksIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQogewogICAg
IC8vIENyZWRlbnRpYWxzIGZvciBmdHAgY2FuIG9ubHkgYmUgcGFzc2VkIGluIFVSTCwgdGhlIGNv
bm5lY3Rpb246ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOiBkZWxlZ2F0ZSBjYWxs
IHdvbid0IGJlIG1hZGUuCiAgICAgaWYgKCghZC0+bV91c2VyLmlzRW1wdHkoKSB8fCAhZC0+bV9w
YXNzLmlzRW1wdHkoKSkgJiYgIWZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNJbkhUVFBG
YW1pbHkoKSkgewpAQCAtMTc4LDcgKzE2OCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZU5TVVJMQ29ubmVjdGkKICAgICAgICAgZmlyc3RSZXF1ZXN0KCkuc2V0VVJMKHVybFdpdGhDcmVk
ZW50aWFscyk7CiAgICAgfQogCi0gICAgaWYgKHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZVBv
bGljeShmaXJzdFJlcXVlc3QoKS51cmwoKSkpCisgICAgaWYgKHNob3VsZFJlbGF4VGhpcmRQYXJ0
eUNvb2tpZVBvbGljeSkKICAgICAgICAgZmlyc3RSZXF1ZXN0KCkuc2V0Rmlyc3RQYXJ0eUZvckNv
b2tpZXMoZmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogCiAgICAgaWYgKHNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlICYmIGZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHko
KSkgewpAQCAtMjEzLDggKzIwMyw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJM
Q29ubmVjdGkKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1NldHRpbmdDb25uZWN0aW9uUHJvcGVy
dGllcyA9IFtOU1VSTENvbm5lY3Rpb24gaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVj
dG9yKF9pbml0V2l0aFJlcXVlc3Q6ZGVsZWdhdGU6dXNlc0NhY2hlOm1heENvbnRlbnRMZW5ndGg6
c3RhcnRJbW1lZGlhdGVseTpjb25uZWN0aW9uUHJvcGVydGllczopXTsKICNlbmRpZgogCi0gICAg
aWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24gPSBjdXJyZW50U3RvcmFn
ZVNlc3Npb24oKSkKLSAgICAgICAgbnNSZXF1ZXN0ID0gW3drQ29weVJlcXVlc3RXaXRoU3RvcmFn
ZVNlc3Npb24oc3RvcmFnZVNlc3Npb24sIG5zUmVxdWVzdCkgYXV0b3JlbGVhc2VdOworICAgIGlm
IChkLT5tX3N0b3JhZ2VTZXNzaW9uKQorICAgICAgICBuc1JlcXVlc3QgPSBbd2tDb3B5UmVxdWVz
dFdpdGhTdG9yYWdlU2Vzc2lvbihkLT5tX3N0b3JhZ2VTZXNzaW9uLmdldCgpLCBuc1JlcXVlc3Qp
IGF1dG9yZWxlYXNlXTsKIAogICAgIGlmIChzdXBwb3J0c1NldHRpbmdDb25uZWN0aW9uUHJvcGVy
dGllcykgewogICAgICAgICBOU0RpY3Rpb25hcnkgKnNlc3Npb25JRCA9IHNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlID8gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5XSA6IFtOU0RpY3Rpb25hcnkg
ZGljdGlvbmFyeVdpdGhPYmplY3Q6QCJXZWJLaXRQcml2YXRlU2Vzc2lvbiIgZm9yS2V5OkAiX2tD
RlVSTENvbm5lY3Rpb25TZXNzaW9uSUQiXTsKQEAgLTI0MCw2ICsyMzAsOCBAQCBib29sIFJlc291
cmNlSGFuZGxlOjpzdGFydChOZXR3b3JraW5nQ29uCiAgICAgaWYgKCFjb250ZXh0LT5pc1ZhbGlk
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGQtPm1fc3RvcmFnZVNlc3Npb24gPSBj
b250ZXh0LT5zdG9yYWdlU2Vzc2lvbigpOworCiAgICAgQVNTRVJUKCFkLT5tX3Byb3h5KTsKICAg
ICBkLT5tX3Byb3h5LmFkb3B0TlMod2tDcmVhdGVOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZVByb3h5
KCkpOwogICAgIFtzdGF0aWNfY2FzdDxXZWJDb3JlTlNVUkxDb25uZWN0aW9uRGVsZWdhdGVQcm94
eSo+KGQtPm1fcHJveHkuZ2V0KCkpIHNldERlbGVnYXRlOlJlc291cmNlSGFuZGxlOjpkZWxlZ2F0
ZSgpXTsKQEAgLTI1MSw2ICsyNDMsNyBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChOZXR3
b3JraW5nQ29uCiAgICAgY3JlYXRlTlNVUkxDb25uZWN0aW9uKAogICAgICAgICBkLT5tX3Byb3h5
LmdldCgpLAogICAgICAgICBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSwKKyAgICAgICAgc2hv
dWxkUmVsYXhUaGlyZFBhcnR5Q29va2llUG9saWN5KGNvbnRleHQsIGZpcnN0UmVxdWVzdCgpLnVy
bCgpKSwKICAgICAgICAgZC0+bV9zaG91bGRDb250ZW50U25pZmYgfHwgY29udGV4dC0+bG9jYWxG
aWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpKTsKIAogICAgIGJvb2wgc2NoZWR1bGVkID0gZmFs
c2U7CkBAIC0zNjksOCArMzYyLDggQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9t
Q2FjaGUoUgogICAgIHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koUmV0dXJuQ2FjaGVEYXRhRG9udExv
YWQpOwogICAgIE5TVVJMUmVzcG9uc2UgKm5zVVJMUmVzcG9uc2UgPSBuaWw7CiAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgW05TVVJMQ29ubmVjdGlvbiBzZW5kU3lu
Y2hyb25vdXNSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KCkgcmV0dXJuaW5nUmVzcG9uc2U6
Jm5zVVJMUmVzcG9uc2UgZXJyb3I6bmlsXTsKKworICAgIFtOU1VSTENvbm5lY3Rpb24gc2VuZFN5
bmNocm9ub3VzUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdCgpIHJldHVybmluZ1Jlc3BvbnNl
OiZuc1VSTFJlc3BvbnNlIGVycm9yOm5pbF07CiAgICAgCiAgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKICAgICAKQEAgLTQwMyw2ICszOTYsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjps
b2FkUmVzb3VyY2VTeW5jaHJvCiAKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9
IGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQuZ2V0KCksIGZhbHNl
IC8qZGVmZXJzTG9hZGluZyovLCB0cnVlIC8qc2hvdWxkQ29udGVudFNuaWZmKi8pKTsKIAorICAg
IGhhbmRsZS0+ZC0+bV9zdG9yYWdlU2Vzc2lvbiA9IGNvbnRleHQtPnN0b3JhZ2VTZXNzaW9uKCk7
CisKICAgICBpZiAoY29udGV4dCAmJiBoYW5kbGUtPmQtPm1fc2NoZWR1bGVkRmFpbHVyZVR5cGUg
IT0gTm9GYWlsdXJlKSB7CiAgICAgICAgIGVycm9yID0gY29udGV4dC0+YmxvY2tlZEVycm9yKHJl
cXVlc3QpOwogICAgICAgICByZXR1cm47CkBAIC00MTEsNyArNDA2LDggQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hybwogICAgIGhhbmRsZS0+Y3JlYXRlTlNVUkxDb25u
ZWN0aW9uKAogICAgICAgICBoYW5kbGUtPmRlbGVnYXRlKCksIC8vIEEgc3luY2hyb25vdXMgcmVx
dWVzdCBjYW5ub3QgdHVybiBpbnRvIGEgZG93bmxvYWQsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8g
cHJveHkgdGhlIGRlbGVnYXRlLgogICAgICAgICBzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0
b3JlZENyZWRlbnRpYWxzLAotICAgICAgICBoYW5kbGUtPnNob3VsZENvbnRlbnRTbmlmZigpIHx8
IChjb250ZXh0ICYmIGNvbnRleHQtPmxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJsZWQoKSkp
OworICAgICAgICBzaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVQb2xpY3koY29udGV4dCwgcmVx
dWVzdC51cmwoKSksCisgICAgICAgIGhhbmRsZS0+c2hvdWxkQ29udGVudFNuaWZmKCkgfHwgY29u
dGV4dC0+bG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpKTsKIAogICAgIFtoYW5kbGUt
PmNvbm5lY3Rpb24oKSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIGN1cnJlbnRSdW5Mb29w
XSBmb3JNb2RlOihOU1N0cmluZyAqKXN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlKCldOwogICAg
IFtoYW5kbGUtPmNvbm5lY3Rpb24oKSBzdGFydF07CkBAIC00NzYsOCArNDcyLDggQEAgdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KFJlcwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24gPSBjdXJyZW50U3Rv
cmFnZVNlc3Npb24oKSkKLSAgICAgICAgcmVxdWVzdC5zZXRTdG9yYWdlU2Vzc2lvbihzdG9yYWdl
U2Vzc2lvbik7CisgICAgaWYgKGQtPm1fc3RvcmFnZVNlc3Npb24pCisgICAgICAgIHJlcXVlc3Qu
c2V0U3RvcmFnZVNlc3Npb24oZC0+bV9zdG9yYWdlU2Vzc2lvbi5nZXQoKSk7CiAKICAgICBjbGll
bnQoKS0+d2lsbFNlbmRSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwog
fQpAQCAtNjIzLDExICs2MTksNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNl
bGxhdGlvCiAgICAgICAgIGNsaWVudCgpLT5yZWNlaXZlZENhbmNlbGxhdGlvbih0aGlzLCBjaGFs
bGVuZ2UpOwogfQogCi1TdHJpbmcgUmVzb3VyY2VIYW5kbGU6OnByaXZhdGVCcm93c2luZ1N0b3Jh
Z2VTZXNzaW9uSWRlbnRpZmllckRlZmF1bHRCYXNlKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKFtb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0pOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0Rl
bGVnYXRlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzQ4MzUpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NCBAQAorMjAxMi0xMS0xNSAg
QWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBQcml2YXRlIEJy
b3dzaW5nIGlzIGEgcGVyLXBhZ2Ugc2V0dGluZyB0aGF0IHNldHMgYSBnbG9iYWwgdmFsdWUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODcwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBp
bmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxl
YXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaDogQWRkZWQg
c3RvcmFnZVNlc3Npb24oKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVO
ZXR3b3JraW5nQ29udGV4dC5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0Nv
bnRleHQ6OnN0b3JhZ2VTZXNzaW9uKTogSnVzdCBhbHdheXMgZmFsbCBiYWNrIHRvIGRlZmF1bHQK
KyAgICAgICAgc28gZmFyLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOiBBZGRlZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXNNYWMubW0gZm9yIHN0cmF0ZWd5Cisg
ICAgICAgIGNvZGUgdGhhdCB1c2VzIE9iamVjdGl2ZSBDLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9Db29raWVzL21hYy9XZWJDb29raWVNYW5hZ2VyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb29raWVNYW5hZ2VyOjpwbGF0Zm9ybVNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOiBVc2Ug
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dAorICAgICAgICBpbnN0ZWFkIG9mIGhhcmRjb2Rpbmcg
YWNjZXNzIHRvIHNlc3Npb3NuIGhlcmUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5k
bGU6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQpOiBDcmVhdGUgYW5kIGRlc3Ryb3kgcHJpdmF0
ZQorICAgICAgICBicm93c2luZyBzZXNzaW9uIGFzIGFwcHJvcHJpYXRlLgorICAgICAgICAoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZTo6c3dpdGNoTmV0d29ya0xvYWRlclRvTmV3VGVzdGluZ1Nlc3Np
b24pOiBVc2UgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dAorICAgICAgICBpbnN0ZWFkIG9mIGhh
cmRjb2RpbmcgYWNjZXNzIHRvIHNlc3Npb3NuIGhlcmUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBsYXRmb3JtU3RyYXRlZ2llc01hYy5tbTogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVmYXVsdENvb2tp
ZVN0b3JhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpkZWZhdWx0Q29va2llU3RvcmFnZSk6CisgICAgICAgIEltcGxlbWVudGVkIGRlZmF1bHRDb29r
aWVTdG9yYWdlKCkgdGhyb3VnaCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIE1vdmVkIGNvZGUgZm9yIGRlYWxpbmcgd2l0aCBn
bG9iYWwgY29udGV4dHMgaGVyZSBmcm9tIFdlYkNvcmUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHA6IChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2Vz
KToKKyAgICAgICAgQ3JlYXRlIGEgZ2xvYmFsIHByaXZhdGUgc2Vzc2lvbiB3aGVuIGFueSBwYWdl
IGVudGVycyBwcml2YXRlIGJyb3dzaW5nLCBhbmQKKyAgICAgICAgZGVsZXRlIGl0IHdoZW4gYW55
IHBhZ2UgZXhpdHMgcHJpdmF0ZSBicm93c2luZy4gVGhpcyBpcyBoYW5kbGluZyBhIHByZWZlcmVu
Y2UKKyAgICAgICAgY2hhbmdlLCBzbyBhbGwgcGFnZXMgZ2V0IGl0IG9uY2UuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnBsYXRmb3JtSGFzTG9jYWxEYXRhRm9yVVJMKTogVXNlIG1haW4gZnJhbWUncyBj
b250ZXh0LgorICAgICAgICAoV2ViS2l0OjpjYWNoZWRSZXNwb25zZUZvclVSTCk6IERpdHRvLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDogKFdlYktpdDo6V2ViUHJvY2Vz
czo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MpOiBVcGRhdGVkCisgICAgICAgIHRvIHRhbGsgdG8gV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dCBpbnN0ZWFkIG9mIFJlc291cmNlSGFuZGxlIGZvciBnbG9i
YWwgc2Vzc2lvbi4KKwogMjAxMi0xMS0xNSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBw
bGUuY29tPgogCiAgICAgICAgIENvbnNvbGlkYXRlIGZvdXIgYWNjZWxlcmF0ZWQgY29tcG9zaXRp
bmcgV0tWaWV3IG1ldGhvZHMgaW50byBhIHNpbmdsZSBtZXRob2QKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5n
Q29udGV4dC5oCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NiArNDUsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIG5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGxvY2FsRmlsZUNvbnRl
bnRTbmlmZmluZ0VuYWJsZWQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIENGVVJMU3Rv
cmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24oKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0
dWFsIE5TT3BlcmF0aW9uUXVldWUgKnNjaGVkdWxlZE9wZXJhdGlvblF1ZXVlKCkgY29uc3QgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCBPVkVSUklERTsKIApJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01OCw2ICs1OCwxMiBAQCBib29sIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Ojps
b2NhbEZpbGVDCiAgICAgcmV0dXJuIG1fbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZDsK
IH0KIAorQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6c3Rv
cmFnZVNlc3Npb24oKSBjb25zdAoreworICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IElt
cGxlbWVudC4KKyAgICByZXR1cm4gMDsKK30KKwogTlNPcGVyYXRpb25RdWV1ZSAqUmVtb3RlTmV0
d29ya2luZ0NvbnRleHQ6OnNjaGVkdWxlZE9wZXJhdGlvblF1ZXVlKCkgY29uc3QKIHsKICAgICBz
dGF0aWMgTlNPcGVyYXRpb25RdWV1ZSAqcXVldWU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzQ2ODcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTEwMzUsNiArMTAzNSw3IEBACiAJCUUxQjc4NDczMTYzRjI1M0UwMDA3QjY5
MiAvKiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQjc4NDcyMTYzRjI1M0UwMDA3QjY5MiAvKiBSZW1vdGVO
ZXR3b3JraW5nQ29udGV4dC5tbSAqLzsgfTsKIAkJRTFDQzFCOTAxMkQ3RUFERjAwNjI1ODM4IC8q
IFByaW50SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFDQzFCOEUxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mby5oICovOyB9OwogCQlFMUND
MUI5MTEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQzFCOEYxMkQ3RUFERjAwNjI1ODM4IC8q
IFByaW50SW5mb01hYy5tbSAqLzsgfTsKKwkJRTFEMjI5NzExNjUyREM1MjAwQkFBNEJEIC8qIFdl
YlBsYXRmb3JtU3RyYXRlZ2llc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxRDIyOTZFMTY1MkRCOUMwMEJBQTRCRCAvKiBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXNNYWMubW0gKi87IH07CiAJCUUxRURGREE2MTYyODg2OEUwMDM5RUNEQSAvKiBNYWlu
TWFjUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTZGQTMxMDExRTM5MjFFMDBEQjEzNzEgLyogTWFpbk1hY1Byb2Nlc3MuY3BwICovOyB9
OwogCQlFMUVERkRBNzE2Mjg4Njk2MDAzOUVDREEgLyogU2hhcmVkV29ya2VyUHJvY2Vzc01haW5N
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVE
RkQ5QjE2Mjg3RDBCMDAzOUVDREEgLyogU2hhcmVkV29ya2VyUHJvY2Vzc01haW5NYWMubW0gKi87
IH07CiAJCUUxRURGREE4MTYyODg2OTkwMDM5RUNEQSAvKiBTaGFyZWRXb3JrZXJQcm9jZXNzTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFREZE
QTIxNjI4ODM4QzAwMzlFQ0RBIC8qIFNoYXJlZFdvcmtlclByb2Nlc3NNYWMubW0gKi87IH07CkBA
IC0yMzI1LDYgKzIzMjYsNyBAQAogCQlFMUI3ODQ3MjE2M0YyNTNFMDAwN0I2OTIgLyogUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTFDQzFCOEUxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mby5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQcmludEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTFDQzFCOEYxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mb01hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFByaW50SW5mb01hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFEMjI5NkUxNjUyREI5QzAwQkFBNEJEIC8qIFdl
YlBsYXRmb3JtU3RyYXRlZ2llc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYlBsYXRmb3JtU3RyYXRlZ2llc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTFFREZEOTgxNjI4N0JEMTAwMzlFQ0RBIC8qIFNoYXJlZFdvcmtlclByb2Nl
c3NNYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFdvcmtlclBy
b2Nlc3NNYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRURGRDlCMTYyODdE
MEIwMDM5RUNEQSAvKiBTaGFyZWRXb3JrZXJQcm9jZXNzTWFpbk1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNoYXJlZFdvcmtlclByb2Nlc3NNYWluTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUVERkQ5RDE2Mjg3RjE5MDAzOUVDREEg
LyogU2hhcmVkV29ya2VyUHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaGFyZWRXb3JrZXJQcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0z
NzA2LDYgKzM3MDgsNyBAQAogCQkJCUJDMTExQURGMTEyRjVCQzIwMDMzN0JBQiAvKiBXZWJFcnJv
cnNNYWMubW0gKi8sCiAJCQkJOTM5MUYyODMxMjFCMzhGNTAwRUJGN0U4IC8qIFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQuaCAqLywKIAkJCQk5MzkxRjI4NDEyMUIzOEY1MDBFQkY3RTggLyogV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbSAqLywKKwkJCQlFMUQyMjk2RTE2NTJEQjlDMDBCQUE0
QkQgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzTWFjLm1tICovLAogCQkJCUJDQzQzQUM2MTI3Qjk5
REUwMDMxN0YxNiAvKiBXZWJQb3B1cE1lbnVNYWMubW0gKi8sCiAJCQkJQkNDNTcxNTkxMTVBREFF
RjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5oICovLAogCQkJCUJDQzU3MTVBMTE1QURB
RUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubW0gKi8sCkBAIC01OTMwLDYgKzU5MzMs
NyBAQAogCQkJCTUxMjE3NDYwMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTIxNzQ2NDE2NEMyMTM3MDAzN0E1QzEgLyogV2ViUmVz
b3VyY2VCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGMUFDNkIxNjUxNzU5RTAwQzE3
RDdGIC8qIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
RTFEMjI5NzExNjUyREM1MjAwQkFBNEJEIC8qIFdlYlBsYXRmb3JtU3RyYXRlZ2llc01hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTFBQTNENzVCMTY1MUI0NEYwMDg3MTNEMCAvKiBSZW1vdGVMYXll
clRyZWVIb3N0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBM0Q3NjExNjUxQjdEMzAwODcxM0Qw
IC8qIFJlbW90ZUxheWVyVHJlZUhvc3RNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFGRDE4QjUxNjUxRkJBRDAwREJFMUNFIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkRhdGFiYXNlTWFuYWdlci5o
IgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29u
dGV4dC5oIgogI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYk1lZGlhQ2Fj
aGVNYW5hZ2VyLmgiCkBAIC0yODAsNyArMjgxLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFs
aXplV2ViUHJvY2VzcyhjbwogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQog
ICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IFNlbmQgdGhpcyBpZGVudGlmaWVyIHRvIG5l
dHdvcmsgcHJvY2Vzcy4KLSAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZShwYXJhbWV0ZXJzLnVpUHJvY2Vzc0J1
bmRsZUlkZW50aWZpZXIpOworICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldFByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UocGFyYW1ldGVycy51aVByb2Nl
c3NCdW5kbGVJZGVudGlmaWVyKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VT
UykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2ll
TWFuYWdlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nv
b2tpZXMvbWFjL1dlYkNvb2tpZU1hbmFnZXJNYWMubW0JKHJldmlzaW9uIDEzNDY4NykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9tYWMvV2ViQ29va2llTWFuYWdlck1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIK
ICNpbXBvcnQgIldlYkNvb2tpZU1hbmFnZXIuaCIKLSNpbXBvcnQgPFdlYkNvcmUvQ29va2llU3Rv
cmFnZUNGTmV0Lmg+Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKworI2ltcG9y
dCAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIApAQCAtMzQsMTAgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViQ29v
a2llTWFuYWdlcjo6cGxhdGZvcm1TZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KEhUVFBDb29raWVB
Y2NlcHRQb2xpY3kgcG9saWN5KQogewotICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRI
VFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llQWNjZXB0UG9saWN5OnN0YXRpY19jYXN0PE5TSFRU
UENvb2tpZUFjY2VwdFBvbGljeT4ocG9saWN5KV07Ci0KLSAgICBpZiAoUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpKQotICAgICAgICBXS1NldEhUVFBDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFn
ZS5nZXQoKSwgcG9saWN5KTsKKyAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29r
aWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyhwb2xpY3kpOwogfQogCiBIVFRQQ29va2llQWNj
ZXB0UG9saWN5IFdlYkNvb2tpZU1hbmFnZXI6OnBsYXRmb3JtR2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFzZU1hbmFnZXIuaCIKICNpbmNsdWRl
ICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNp
bmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXNTdG9yZS5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3MuaCIKQEAgLTI2OCw2ICsyNjksMTIgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6c2V0SmF2YVNjcmlwdENhbkFjYwogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRQcml2
YXRlQnJvd3NpbmdFbmFibGVkKFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlR3JvdXAsIGJvb2wgZW5h
YmxlZCkKIHsKKyNpZiBQTEFURk9STShNQUMpIHx8IFVTRShDRk5FVFdPUkspCisgICAgaWYgKGVu
YWJsZWQpCisgICAgICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVC
cm93c2luZ1Nlc3Npb24oKTsKKyAgICBlbHNlCisgICAgICAgIFdlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQ6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCk7CisjZW5kaWYKICAgICBjb25z
dCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBQYWdlR3JvdXA6OnBhZ2VHcm91cChwYWdlR3JvdXAt
PmlkZW50aWZpZXIoKSktPnBhZ2VzKCk7CiAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0
b3IgaXRlciA9IHBhZ2VzLmJlZ2luKCk7IGl0ZXIgIT0gcGFnZXMuZW5kKCk7ICsraXRlcikKICAg
ICAgICAgKCppdGVyKS0+c2V0dGluZ3MoKS0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChlbmFi
bGVkKTsKQEAgLTI4NCwxMCArMjkxLDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0UG9wdXBC
bG9ja2luZ0VuYQogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c3dpdGNoTmV0d29ya0xvYWRlclRvTmV3
VGVzdGluZ1Nlc3Npb24oKQogewogI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykK
LSAgICAvLyBTZXQgYSBwcml2YXRlIHNlc3Npb24gZm9yIHRlc3RpbmcgdG8gYXZvaWQgaW50ZXJm
ZXJpbmcgd2l0aCBnbG9iYWwgY29va2llcy4gVGhpcyBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20g
cHJpdmF0ZSBicm93c2luZyBzZXNzaW9uLgogICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6
IERvIHRoaXMgaW4gbmV0d29yayBwcm9jZXNzLCB0b28uCi0gICAgUmV0YWluUHRyPENGVVJMU3Rv
cmFnZVNlc3Npb25SZWY+IHNlc3Npb24gPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlUHJpdmF0ZUJy
b3dzaW5nU3RvcmFnZVNlc3Npb24oQ0ZTVFIoIlByaXZhdGUgV2ViS2l0IFNlc3Npb24iKSk7Ci0g
ICAgUmVzb3VyY2VIYW5kbGU6OnNldERlZmF1bHRTdG9yYWdlU2Vzc2lvbihzZXNzaW9uLmdldCgp
KTsKKyAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNz
aW9uKCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw2ICs0MiwxMSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1QYXN0ZWJvYXJkLmg+CiAj
aW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KIAorI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJm
YWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2VuZGlmCisKICNpZiBVU0UoQ0YpCiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCkBAIC0xMDEsNiArMTA2LDE2IEBAIHZvaWQg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpub3RpZnlDb29raWUKICAgICBXZWJDb29raWVNYW5hZ2Vy
OjpzaGFyZWQoKS5kaXNwYXRjaENvb2tpZXNEaWRDaGFuZ2UoKTsKIH0KIAorI2lmIFBMQVRGT1JN
KFdJTikKK1JldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmRlZmF1bHRDb29raWVTdG9yYWdlKCkKK3sKKyAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vz
c2lvblJlZiBzZXNzaW9uID0gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uKCkpCisgICAgICAgIHJldHVybiBhZG9wdENGKFdLQ29weUhUVFBDb29raWVTdG9y
YWdlKHNlc3Npb24pKTsKKworICAgIHJldHVybiBXS0dldERlZmF1bHRIVFRQQ29va2llU3RvcmFn
ZSgpOworfQorI2VuZGlmCisKIC8vIExvYWRlclN0cmF0ZWd5CiAKICNpZiBFTkFCTEUoTkVUV09S
S19QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCShyZXZpc2lv
biAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw5IEBAIHBy
aXZhdGU6CiAKICAgICAvLyBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5Q29va2llc0NoYW5nZWQoKSBPVkVSUklERTsKKyNpZiBQTEFURk9STShNQUMpIHx8
IFVTRShDRk5FVFdPUkspCisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gZGVmYXVsdENvb2tpZVN0b3JhZ2UoKSBPVkVSUklERTsKKyNlbmRpZgogCiAgICAgLy8g
V2ViQ29yZTo6TG9hZGVyU3RyYXRlZ3kKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAkocmV2aXNp
b24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw5ICsy
MCw5IEBACiAjaWZuZGVmIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHRfaAogI2RlZmluZSBXZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0X2gKIAorI2luY2x1ZGUgIkhUVFBDb29raWVBY2NlcHRQb2xp
Y3kuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgotCi0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTmV0
d29ya2luZ0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTmV0d29ya2luZ0NvbnRl
eHQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTMzLDE2ICszMywyNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dChm
cmFtZSkpOwogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIHNldFByaXZhdGVCcm93c2luZ1N0b3Jh
Z2VTZXNzaW9uSWRlbnRpZmllckJhc2UoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHZvaWQg
c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpOworICAgIHN0YXRpYyB2b2lkIGVuc3VyZVByaXZh
dGVCcm93c2luZ1Nlc3Npb24oKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95UHJpdmF0ZUJyb3dz
aW5nU2Vzc2lvbigpOworICAgIHN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbigpOworICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUFjY2VwdFBvbGljeUZv
ckFsbENvbnRleHRzKEhUVFBDb29raWVBY2NlcHRQb2xpY3kpOworCiBwcml2YXRlOgogICAgIFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQoV2ViRnJhbWUqIGZyYW1lKQogICAgICAgICA6IFdlYkNv
cmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQoZnJhbWUtPmNvcmVGcmFtZSgpKQogICAgIHsKICAg
ICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2NoZWR1bGVQYWlySGFzaFNldCogc2NoZWR1bGVkUnVu
TG9vcFBhaXJzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJs
b2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lv
bigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U2NoZWR1bGVQYWlySGFz
aFNldCogc2NoZWR1bGVkUnVuTG9vcFBhaXJzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKSBjb25zdCBPVkVSUklERTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQkocmV2aXNpb24gMTM0Njg3KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICAgIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDE1ICsyMSwyMCBAQAogI2ltcG9y
dCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAKKyNp
bXBvcnQgPFdlYkNvcmUvQ29va2llU3RvcmFnZUNGTmV0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lTG9hZGVyQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2lt
cG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RhdGljIENGVVJMU3RvcmFnZVNlc3Npb25SZWYg
ZGVmYXVsdENGU3RvcmFnZVNlc3Npb247CitzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBw
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbjsKKwogYm9vbCBXZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0OjpuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZy
YW1lKCkgJiYgZnJhbWUoKS0+c2V0dGluZ3MoKSAmJiBmcmFtZSgpLT5zZXR0aW5ncygpLT5uZWVk
c1NpdGVTcGVjaWZpY1F1aXJrcygpOwpAQCAtNDksNCArNTUsNzMgQEAgUmVzb3VyY2VFcnJvciBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OgogICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+
Y2xpZW50KCktPmJsb2NrZWRFcnJvcihyZXF1ZXN0KTsKIH0KIAorc3RhdGljIFN0cmluZyYgcHJp
dmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZSgpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgYmFzZSwg
KCkpOworICAgIHJldHVybiBiYXNlOworfQorCit2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQ6OnNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9u
SWRlbnRpZmllckJhc2UoKSA9IGlkZW50aWZpZXI7Cit9CisKK3ZvaWQgV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dDo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpCit7CisgICAgLy8gU2V0IGEg
cHJpdmF0ZSBzZXNzaW9uIGZvciB0ZXN0aW5nIHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggZ2xv
YmFsIGNvb2tpZXMuIFRoaXMgc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHByaXZhdGUgYnJvd3Np
bmcgc2Vzc2lvbi4KKyAgICBpZiAoZGVmYXVsdENGU3RvcmFnZVNlc3Npb24pCisgICAgICAgIENG
UmVsZWFzZShkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lvbik7CisgICAgZGVmYXVsdENGU3RvcmFnZVNl
c3Npb24gPSBXS0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihDRlNUUigiUHJpdmF0ZSBXZWJL
aXQgU2Vzc2lvbiIpKTsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1
cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIGlmIChwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgU3RyaW5nIGJhc2UgPSBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50
aWZpZXJCYXNlKCkuaXNOdWxsKCkgPyBTdHJpbmcoW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5k
bGVJZGVudGlmaWVyXSkgOiBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJC
YXNlKCk7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZklkZW50aWZpZXIgPSBTdHJpbmco
YmFzZSArICIuUHJpdmF0ZUJyb3dzaW5nIikuY3JlYXRlQ0ZTdHJpbmcoKTsKKworICAgIHByaXZh
dGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uID0gV0tDcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24o
Y2ZJZGVudGlmaWVyLmdldCgpKTsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
OjpkZXN0cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpCit7CisgICAgaWYgKCFwcml2YXRlQnJv
d3NpbmdTdG9yYWdlU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZSZWxlYXNlKHBy
aXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKTsKKyAgICBwcml2YXRlQnJvd3NpbmdTdG9yYWdl
U2Vzc2lvbiA9IDA7Cit9CisKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYgV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dDo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkKK3sKKyAgICByZXR1cm4gZGVmYXVs
dENGU3RvcmFnZVNlc3Npb247Cit9CisKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYgV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dDo6c3RvcmFnZVNlc3Npb24oKSBjb25zdAoreworICAgIGJvb2wgcHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZCA9IGZyYW1lKCkgJiYgZnJhbWUoKS0+c2V0dGluZ3MoKSAmJiBm
cmFtZSgpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7CisgICAgaWYgKHBy
aXZhdGVCcm93c2luZ0VuYWJsZWQpIHsKKyAgICAgICAgQVNTRVJUKHByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uKTsKKyAgICAgICAgcmV0dXJuIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNz
aW9uOworICAgIH0KKyAgICByZXR1cm4gZGVmYXVsdENGU3RvcmFnZVNlc3Npb247Cit9CisKK3Zv
aWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9yQWxs
Q29udGV4dHMoSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit7CisgICAgW1tOU0hUVFBD
b29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVBY2NlcHRQb2xp
Y3k6c3RhdGljX2Nhc3Q8TlNIVFRQQ29va2llQWNjZXB0UG9saWN5Pihwb2xpY3kpXTsKKworICAg
IGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGRl
ZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCkpCisgICAgICAgIFdLU2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeShjb29raWVTdG9yYWdlLmdldCgpLCBwb2xpY3kpOworCisgICAgaWYgKHByaXZhdGVC
cm93c2luZ1N0b3JhZ2VTZXNzaW9uKSB7CisgICAgICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVT
dG9yYWdlUmVmPiBwcml2YXRlQnJvd3NpbmdDb29raWVTdG9yYWdlID0gYWRvcHRDRihXS0NvcHlI
VFRQQ29va2llU3RvcmFnZShwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbikpOworICAgICAg
ICBXS1NldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocHJpdmF0ZUJyb3dzaW5nQ29va2llU3RvcmFn
ZS5nZXQoKSwgcG9saWN5KTsKKyAgICB9Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYlBsYXRmb3JtU3RyYXRlZ2llc01hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21h
Yy9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXNNYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXNN
YWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgiCisKKyNpbmNs
dWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVt
SW50ZXJmYWNlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6ZGVmYXVsdENvb2tpZVN0b3JhZ2UoKQoreworICAgIGlmIChDRlVSTFN0b3JhZ2VT
ZXNzaW9uUmVmIHNlc3Npb24gPSBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpkZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoV0tDb3B5SFRUUENvb2tpZVN0
b3JhZ2Uoc2Vzc2lvbikpOworCisjaWYgVVNFKENGTkVUV09SSykKKyAgICByZXR1cm4gV0tHZXRE
ZWZhdWx0SFRUUENvb2tpZVN0b3JhZ2UoKTsKKyNlbHNlCisgICAgLy8gV2hlbiB1c2luZyBOU1VS
TENvbm5lY3Rpb24sIHdlIGFsc28gdXNlIGl0cyBzaGFyZWQgY29va2llIHN0b3JhZ2UuCisgICAg
cmV0dXJuIDA7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXNNYWMubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQogICArIExGCgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBACiAj
aW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlICJXZWJFdmVudENvbnZlcnNpb24uaCIKICNp
bmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQu
aCIKICNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkZ1bGxT
Y3JlZW5NYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJHZW9sb2NhdGlvbkNsaWVudC5o
IgpAQCAtMjE3NCw3ICsyMTc1LDE2IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMo
Y29uc3QgV2UKICAgICBzZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRW5hYmxlZChzdG9yZS5nZXRC
b29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmxvY2FsU3RvcmFnZUVuYWJsZWRLZXko
KSkpOwogICAgIHNldHRpbmdzLT5zZXRYU1NBdWRpdG9yRW5hYmxlZChzdG9yZS5nZXRCb29sVmFs
dWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6Onhzc0F1ZGl0b3JFbmFibGVkS2V5KCkpKTsKICAg
ICBzZXR0aW5ncy0+c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChzdG9yZS5nZXRCb29sVmFsdWVG
b3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmZyYW1lRmxhdHRlbmluZ0VuYWJsZWRLZXkoKSkpOwot
ICAgIHNldHRpbmdzLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1
ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZEtleSgpKSk7
CisKKyAgICBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBzdG9yZS5nZXRCb29sVmFsdWVG
b3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnByaXZhdGVCcm93c2luZ0VuYWJsZWRLZXkoKSk7Cisj
aWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQorICAgIGlmIChwcml2YXRlQnJvd3Np
bmdFbmFibGVkKQorICAgICAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2
YXRlQnJvd3NpbmdTZXNzaW9uKCk7CisgICAgZWxzZQorICAgICAgICBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0OjpkZXN0cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpOworI2VuZGlmCisgICAg
c2V0dGluZ3MtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQocHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCk7CisKICAgICBzZXR0aW5ncy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChzdG9yZS5nZXRC
b29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmRldmVsb3BlckV4dHJhc0VuYWJsZWRL
ZXkoKSkpOwogICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVkKHN0
b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6amF2YVNjcmlwdEV4cGVy
aW1lbnRzRW5hYmxlZEtleSgpKSk7CiAgICAgc2V0dGluZ3MtPnNldFRleHRBcmVhc0FyZVJlc2l6
YWJsZShzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnRleHRBcmVh
c0FyZVJlc2l6YWJsZUtleSgpKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTY3OSw3ICs2NzksNyBAQCBib29sIFdlYlBhZ2U6OnBsYXRmb3JtSGFzTG9j
YWxEYXRhRm9yVVJMCiAgICAgTlNNdXRhYmxlVVJMUmVxdWVzdCogcmVxdWVzdCA9IFtbTlNNdXRh
YmxlVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6dXJsXTsKICAgICBbcmVxdWVzdCBzZXRW
YWx1ZTooTlNTdHJpbmcqKXVzZXJBZ2VudCgpIGZvckhUVFBIZWFkZXJGaWVsZDpAIlVzZXItQWdl
bnQiXTsKICAgICBOU0NhY2hlZFVSTFJlc3BvbnNlICpjYWNoZWRSZXNwb25zZTsKLSAgICBpZiAo
Q0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbiA9IFJlc291cmNlSGFuZGxlOjpj
dXJyZW50U3RvcmFnZVNlc3Npb24oKSkKKyAgICBpZiAoQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBz
dG9yYWdlU2Vzc2lvbiA9IGNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bmV0d29y
a2luZ0NvbnRleHQoKS0+c3RvcmFnZVNlc3Npb24oKSkKICAgICAgICAgY2FjaGVkUmVzcG9uc2Ug
PSBXS0NhY2hlZFJlc3BvbnNlRm9yUmVxdWVzdChzdG9yYWdlU2Vzc2lvbiwgcmVxdWVzdCk7CiAg
ICAgZWxzZQogICAgICAgICBjYWNoZWRSZXNwb25zZSA9IFtbTlNVUkxDYWNoZSBzaGFyZWRVUkxD
YWNoZV0gY2FjaGVkUmVzcG9uc2VGb3JSZXF1ZXN0OnJlcXVlc3RdOwpAQCAtNjkzLDcgKzY5Myw3
IEBAIHN0YXRpYyBOU0NhY2hlZFVSTFJlc3BvbnNlICpjYWNoZWRSZXNwb24KICAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlVVJMUmVxdWVzdD4gcmVxdWVzdChBZG9wdE5TLCBbW05TTXV0YWJsZVVSTFJl
cXVlc3QgYWxsb2NdIGluaXRXaXRoVVJMOnVybF0pOwogICAgIFtyZXF1ZXN0LmdldCgpIHNldFZh
bHVlOihOU1N0cmluZyAqKXdlYlBhZ2UtPnVzZXJBZ2VudCgpIGZvckhUVFBIZWFkZXJGaWVsZDpA
IlVzZXItQWdlbnQiXTsKIAotICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VT
ZXNzaW9uID0gUmVzb3VyY2VIYW5kbGU6OmN1cnJlbnRTdG9yYWdlU2Vzc2lvbigpKQorICAgIGlm
IChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uID0gd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpLT5zdG9yYWdl
U2Vzc2lvbigpKQogICAgICAgICByZXR1cm4gV0tDYWNoZWRSZXNwb25zZUZvclJlcXVlc3Qoc3Rv
cmFnZVNlc3Npb24sIHJlcXVlc3QuZ2V0KCkpOwogCiAgICAgcmV0dXJuIFtbTlNVUkxDYWNoZSBz
aGFyZWRVUkxDYWNoZV0gY2FjaGVkUmVzcG9uc2VGb3JSZXF1ZXN0OnJlcXVlc3QuZ2V0KCldOwpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTM0ODM1KQorKysgU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTItMTEtMTUg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUHJpdmF0ZSBC
cm93c2luZyBpcyBhIHBlci1wYWdlIHNldHRpbmcgdGhhdCBzZXRzIGEgZ2xvYmFsIHZhbHVlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzg3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW06CisgICAgICAgIE1vdmVkIGZ1bmN0aW9u
cyBmb3IgbWFuYWdpbmcgZ2xvYmFsIHNlc3Npb25zIGZyb20gV2ViQ29yZS4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbToKKyAgICAgICAgKFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6ZGVmYXVsdENvb2tpZVN0b3JhZ2UpOiBBZGRlZC4gVXNlcyBXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0CisgICAgICAgIHRvIHJlYWNoIHRoZSBzdG9yYWdlLgorCisgICAgICAg
ICogV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKCtbV2ViUHJlZmVyZW5jZXMg
X3N3aXRjaE5ldHdvcmtMb2FkZXJUb05ld1Rlc3RpbmdTZXNzaW9uXSk6IERpdHRvLgorICAgICAg
ICAoK1tXZWJQcmVmZXJlbmNlcyBfc2V0Q3VycmVudE5ldHdvcmtMb2FkZXJTZXNzaW9uQ29va2ll
QWNjZXB0UG9saWN5Ol0pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5j
ZXNQcml2YXRlLmg6IEFkZGVkIGEgY29tbWVudCBleHBsYWluaW5nIHRoYXQgdHdvIGZ1bmN0aW9u
cworICAgICAgICBhcmUgbm90IGdlbmVyaWMgZW5vdWdoIGZvciB1c2Ugb3V0c2lkZSBEUlQgKG9u
ZSBvZiB0aGVtIGhhZCAidGVzdGluZyIgaW4gbmFtZSwKKyAgICAgICAgYnV0IGFub3RoZXIgZGlk
IG5vdCkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZp
ZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZDpdKTogQ3JlYXRlIGEgZ2xvYmFsIHByaXZhdGUgYnJvd3Np
bmcgc2Vzc2lvbiB3aGVuCisgICAgICAgIHRoZSBmaXJzdCB2aWV3IHdpdGggcHJpdmF0ZSBicm93
c2luZyBpcyBjcmVhdGVkLCBkZWxldGUgaXQgd2hlbiBhbnkgd2luZG93IHdpdGgKKyAgICAgICAg
aXQgZGlzYWJsZWQgaXMgY3JlYXRlZCAoc2luY2UgdGhpcyBjb21lcyBmcm9tIHByZWZlcmVuY2Vz
LCBpdCBhcHBsaWVzIHRvIGFsbAorICAgICAgICB2aWV3cyBlcXVhbGx5LCBldmVuIHRob3VnaCB3
ZSBhcmUgZGVhbGluZyB3aXRoIGEgc2luZ2xlIG9uZSBoZXJlKS4KKyAgICAgICAgKC1bV2ViVmll
dyBfY2FjaGVkUmVzcG9uc2VGb3JVUkw6XSk6IFVzZSBtYWluIGZyYW1lJ3MgbmV0d29ya2luZyBj
b250ZXh0IGluc3RlYWQgb2YKKyAgICAgICAgYSBnbG9iYWwgb25lLgorCiAyMDEyLTExLTEzICBU
aW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGp1c3QgdGhl
IFdlYiBJbnNwZWN0b3Igd2luZG93IHRpdGxlIGZyYW1lIGlmIG5lZWRlZCB0byBwcmV2ZW50IGl0
IGZyb20gaW50ZXJzZWN0aW5nIHRoZSBkb2NrIGJ1dHRvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0LmgJKHJldmlzaW9uIDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICAgIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDYgKzI3
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0KGZyYW1lKSk7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgc2V0UHJpdmF0
ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZShjb25zdCBTdHJpbmcmKTsKKyAg
ICBzdGF0aWMgdm9pZCBzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCk7CisgICAgc3RhdGljIHZv
aWQgZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCk7CisgICAgc3RhdGljIENGVVJMU3RvcmFnZVNlc3Np
b25SZWYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisKKyAgICBzdGF0aWMgdm9pZCBzZXRDb29r
aWVBY2NlcHRQb2xpY3lGb3JUZXN0aW5nQ29udGV4dChOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kp
OworCiBwcml2YXRlOgogICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoV2ViQ29yZTo6RnJh
bWUqIGZyYW1lKQogICAgICAgICA6IFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQoZnJh
bWUpCkBAIC0zNCw2ICs0Myw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNT
aXRlU3BlY2lmaWNRdWlya3MoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgbG9j
YWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbigpIGNvbnN0IE9WRVJSSURF
OwogICAgIHZpcnR1YWwgV2ViQ29yZTo6U2NoZWR1bGVQYWlySGFzaFNldCogc2NoZWR1bGVkUnVu
TG9vcFBhaXJzKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBjb25z
dCBPVkVSUklERTsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0JKHJldmlzaW9u
IDEzNDY4NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICAg
IENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMyw5ICsyNCwxMyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KICNpbXBv
cnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorc3RhdGljIENGVVJMU3RvcmFnZVNlc3Np
b25SZWYgZGVmYXVsdENGU3RvcmFnZVNlc3Npb247CitzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZiBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbjsKKwogYm9vbCBXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0OjpuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGZyYW1lKCkgJiYgZnJhbWUoKS0+c2V0dGluZ3MoKSAmJiBmcmFtZSgpLT5zZXR0aW5ncygp
LT5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpOwpAQCAtNDUsMyArNTAsNjYgQEAgUmVzb3VyY2VF
cnJvciBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OgogewogICAgIHJldHVybiBmcmFtZSgpLT5s
b2FkZXIoKS0+Y2xpZW50KCktPmJsb2NrZWRFcnJvcihyZXF1ZXN0KTsKIH0KKworc3RhdGljIFN0
cmluZyYgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFzZSgpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgYmFzZSwgKCkpOworICAgIHJldHVybiBiYXNlOworfQorCit2b2lkIFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQ6OnNldFByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJh
c2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIHByaXZhdGVCcm93c2luZ1N0b3Jh
Z2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKSA9IGlkZW50aWZpZXI7Cit9CisKK3ZvaWQgV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dDo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpCit7CisgICAg
Ly8gU2V0IGEgcHJpdmF0ZSBzZXNzaW9uIGZvciB0ZXN0aW5nIHRvIGF2b2lkIGludGVyZmVyaW5n
IHdpdGggZ2xvYmFsIGNvb2tpZXMuIFRoaXMgc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHByaXZh
dGUgYnJvd3Npbmcgc2Vzc2lvbi4KKyAgICBpZiAoZGVmYXVsdENGU3RvcmFnZVNlc3Npb24pCisg
ICAgICAgIENGUmVsZWFzZShkZWZhdWx0Q0ZTdG9yYWdlU2Vzc2lvbik7CisgICAgZGVmYXVsdENG
U3RvcmFnZVNlc3Npb24gPSBXS0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihDRlNUUigiUHJp
dmF0ZSBXZWJLaXQgU2Vzc2lvbiIpKTsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIGlmIChwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgU3RyaW5nIGJhc2UgPSBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vz
c2lvbklkZW50aWZpZXJCYXNlKCkuaXNOdWxsKCkgPyBTdHJpbmcoW1tOU0J1bmRsZSBtYWluQnVu
ZGxlXSBidW5kbGVJZGVudGlmaWVyXSkgOiBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklk
ZW50aWZpZXJCYXNlKCk7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZklkZW50aWZpZXIg
PSBTdHJpbmcoYmFzZSArICIuUHJpdmF0ZUJyb3dzaW5nIikuY3JlYXRlQ0ZTdHJpbmcoKTsKKwor
ICAgIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uID0gV0tDcmVhdGVQcml2YXRlU3RvcmFn
ZVNlc3Npb24oY2ZJZGVudGlmaWVyLmdldCgpKTsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0OjpkZXN0cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpCit7CisgICAgaWYgKCFw
cml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZS
ZWxlYXNlKHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKTsKKyAgICBwcml2YXRlQnJvd3Np
bmdTdG9yYWdlU2Vzc2lvbiA9IDA7Cit9CisKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYgV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dDo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkKK3sKKyAgICByZXR1
cm4gZGVmYXVsdENGU3RvcmFnZVNlc3Npb247Cit9CisKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYg
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c3RvcmFnZVNlc3Npb24oKSBjb25zdAoreworICAg
IGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IGZyYW1lKCkgJiYgZnJhbWUoKS0+c2V0dGlu
Z3MoKSAmJiBmcmFtZSgpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7Cisg
ICAgaWYgKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpIHsKKyAgICAgICAgQVNTRVJUKHByaXZhdGVC
cm93c2luZ1N0b3JhZ2VTZXNzaW9uKTsKKyAgICAgICAgcmV0dXJuIHByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uOworICAgIH0KKyAgICByZXR1cm4gZGVmYXVsdENGU3RvcmFnZVNlc3Npb247
Cit9CisKK3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9s
aWN5Rm9yVGVzdGluZ0NvbnRleHQoTlNIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKK3sK
KyAgICBBU1NFUlQoZGVmYXVsdENGU3RvcmFnZVNlc3Npb24pOworICAgIFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBkZWZhdWx0Q29va2llU3RvcmFnZSA9IGFkb3B0Q0YoV0tDb3B5
SFRUUENvb2tpZVN0b3JhZ2UoZGVmYXVsdENGU3RvcmFnZVNlc3Npb24pKTsKKyAgICBXS1NldEhU
VFBDb29raWVBY2NlcHRQb2xpY3koZGVmYXVsdENvb2tpZVN0b3JhZ2UuZ2V0KCksIHBvbGljeSk7
Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDYgKzUxLDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFdlYkNvcmU6OkNvb2tp
ZXNTdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGRlZmF1
bHRDb29raWVTdG9yYWdlKCkgT1ZFUlJJREU7CiAKICAgICAvLyBXZWJDb3JlOjpQbHVnaW5TdHJh
dGVneQogICAgIHZpcnR1YWwgdm9pZCByZWZyZXNoUGx1Z2lucygpIE9WRVJSSURFOwpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5tbQkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNpbXBvcnQgIldlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogCisj
aW1wb3J0ICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW1wb3J0ICJXZWJQbHVnaW5E
YXRhYmFzZS5oIgogI2ltcG9ydCAiV2ViUGx1Z2luUGFja2FnZS5oIgogI2ltcG9ydCA8V2ViQ29y
ZS9CbG9ja0V4Y2VwdGlvbnMuaD4KQEAgLTMyLDYgKzMzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
UGFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UGxhdGZvcm1QYXN0ZWJvYXJkLmg+CisjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTc5LDYgKzgxLDE5IEBAIHZvaWQgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpub3RpZnlDb29raWUKIHsKIH0KIAorUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVmYXVsdENvb2tpZVN0
b3JhZ2UoKQoreworICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHNlc3Npb24gPSBXZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0OjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKSkKKyAgICAgICAg
cmV0dXJuIGFkb3B0Q0YoV0tDb3B5SFRUUENvb2tpZVN0b3JhZ2Uoc2Vzc2lvbikpOworCisjaWYg
VVNFKENGTkVUV09SSykKKyAgICByZXR1cm4gV0tHZXREZWZhdWx0SFRUUENvb2tpZVN0b3JhZ2Uo
KTsKKyNlbHNlCisgICAgLy8gV2hlbiB1c2luZyBOU1VSTENvbm5lY3Rpb24sIHdlIGFsc28gdXNl
IGl0cyBzaGFyZWQgY29va2llIHN0b3JhZ2UuCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwog
dm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlZnJlc2hQbHVnaW5zKCkKIHsKICAgICBbW1dl
YlBsdWdpbkRhdGFiYXNlIHNoYXJlZERhdGFiYXNlXSByZWZyZXNoXTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkocmV2aXNpb24gMTM0Njg3KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZUtleXNQcml2YXRl
LmgiCiAKICNpbXBvcnQgIldlYkFwcGxpY2F0aW9uQ2FjaGUuaCIKKyNpbXBvcnQgIldlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQuaCIKICNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIKICNpbXBvcnQg
IldlYktpdE5TU3RyaW5nRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJLaXRTeXN0ZW1CaXRzLmgiCkBA
IC0xMjg1LDE3ICsxMjg2LDEyIEBAICsgKHZvaWQpX3NldElCQ3JlYXRvcklEOihOU1N0cmluZyAq
KXN0cmkKIAogKyAodm9pZClfc3dpdGNoTmV0d29ya0xvYWRlclRvTmV3VGVzdGluZ1Nlc3Npb24K
IHsKLSAgICAvLyBTZXQgYSBwcml2YXRlIHNlc3Npb24gZm9yIHRlc3RpbmcgdG8gYXZvaWQgaW50
ZXJmZXJpbmcgd2l0aCBnbG9iYWwgY29va2llcy4gVGhpcyBzaG91bGQgYmUgZGlmZmVyZW50IGZy
b20gcHJpdmF0ZSBicm93c2luZyBzZXNzaW9uLgotICAgIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VT
ZXNzaW9uUmVmPiBzZXNzaW9uID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZVByaXZhdGVCcm93c2lu
Z1N0b3JhZ2VTZXNzaW9uKENGU1RSKCJXZWJLaXQgVGVzdGluZyBTZXNzaW9uIikpOwotICAgIFJl
c291cmNlSGFuZGxlOjpzZXREZWZhdWx0U3RvcmFnZVNlc3Npb24oc2Vzc2lvbi5nZXQoKSk7Cisg
ICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigp
OwogfQogCiArICh2b2lkKV9zZXRDdXJyZW50TmV0d29ya0xvYWRlclNlc3Npb25Db29raWVBY2Nl
cHRQb2xpY3k6KE5TSFRUUENvb2tpZUFjY2VwdFBvbGljeSlwb2xpY3kKIHsKLSAgICBbW05TSFRU
UENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZUFjY2VwdFBv
bGljeTpwb2xpY3ldOwotCi0gICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKLSAgICAgICAg
V0tTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHBvbGljeSk7
CisgICAgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9y
VGVzdGluZ0NvbnRleHQocG9saWN5KTsKIH0KIAogLSAoQk9PTClpc0RPTVBhc3RlQWxsb3dlZApJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJp
dmF0ZS5oCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VzUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNiArMjQ2LDggQEAg
QGludGVyZmFjZSBXZWJQcmVmZXJlbmNlcyAoV2ViUHJpdmF0ZSkKICsgKENGU3RyaW5nRW5jb2Rp
bmcpX3N5c3RlbUNGU3RyaW5nRW5jb2Rpbmc7CiArICh2b2lkKV9zZXRJbml0aWFsRGVmYXVsdFRl
eHRFbmNvZGluZ1RvU3lzdGVtRW5jb2Rpbmc7CiArICh2b2lkKV9zZXRJQkNyZWF0b3JJRDooTlNT
dHJpbmcgKilzdHJpbmc7CisKKy8vIEZvciBEdW1wUmVuZGVyVHJlZSB1c2Ugb25seS4KICsgKHZv
aWQpX3N3aXRjaE5ldHdvcmtMb2FkZXJUb05ld1Rlc3RpbmdTZXNzaW9uOwogKyAodm9pZClfc2V0
Q3VycmVudE5ldHdvcmtMb2FkZXJTZXNzaW9uQ29va2llQWNjZXB0UG9saWN5OihOU0hUVFBDb29r
aWVBY2NlcHRQb2xpY3kpY29va2llQWNjZXB0UG9saWN5OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKICNp
bXBvcnQgIldlYkVkaXRvckNsaWVudC5oIgogI2ltcG9ydCAiV2ViRm9ybURlbGVnYXRlUHJpdmF0
ZS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5oIgogI2ltcG9ydCAiV2ViRnJhbWVWaWV3SW50ZXJuYWwuaCIKICNpbXBv
cnQgIldlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJHZW9sb2NhdGlvbkNs
aWVudC5oIgpAQCAtMTQ3MCw3ICsxNDcxLDE2IEBAIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdl
ZDooV2ViUHJlZmVyZW4KICNlbmRpZgogICAgIHNldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFi
bGVkKFtwcmVmZXJlbmNlcyBsb2NhbFN0b3JhZ2VFbmFibGVkXSk7CiAgICAgc2V0dGluZ3MtPnNl
dEV4cGVyaW1lbnRhbE5vdGlmaWNhdGlvbnNFbmFibGVkKFtwcmVmZXJlbmNlcyBleHBlcmltZW50
YWxOb3RpZmljYXRpb25zRW5hYmxlZF0pOwotICAgIHNldHRpbmdzLT5zZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKFtwcmVmZXJlbmNlcyBwcml2YXRlQnJvd3NpbmdFbmFibGVkXSk7CisKKyAgICBi
b29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBbcHJlZmVyZW5jZXMgcHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZF07CisjaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQorICAgIGlmIChw
cml2YXRlQnJvd3NpbmdFbmFibGVkKQorICAgICAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCk7CisgICAgZWxzZQorICAgICAgICBXZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0OjpkZXN0cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpOwor
I2VuZGlmCisgICAgc2V0dGluZ3MtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQocHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCk7CisKICAgICBzZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseShb
cHJlZmVyZW5jZXMgc2Fuc1NlcmlmRm9udEZhbWlseV0pOwogICAgIHNldHRpbmdzLT5zZXRTZXJp
ZkZvbnRGYW1pbHkoW3ByZWZlcmVuY2VzIHNlcmlmRm9udEZhbWlseV0pOwogICAgIHNldHRpbmdz
LT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoW3ByZWZlcmVuY2VzIHN0YW5kYXJkRm9udEZhbWlseV0p
OwpAQCAtMTk5NywxNCArMjAwNywxOCBAQCAtICh2b2lkKV9kaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
V2l0aEVycm9yCiAKIC0gKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKilfY2FjaGVkUmVzcG9uc2VGb3JV
Ukw6KE5TVVJMICopVVJMCiB7Ci0gICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtb
TlNNdXRhYmxlVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6VVJMXTsKKyAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlVVJMUmVxdWVzdCAqPiByZXF1ZXN0ID0gYWRvcHROUyhbW05TTXV0YWJsZVVS
TFJlcXVlc3QgYWxsb2NdIGluaXRXaXRoVVJMOlVSTF0pOwogICAgIFtyZXF1ZXN0IF93ZWJfc2V0
SFRUUFVzZXJBZ2VudDpbc2VsZiB1c2VyQWdlbnRGb3JVUkw6VVJMXV07CiAgICAgTlNDYWNoZWRV
UkxSZXNwb25zZSAqY2FjaGVkUmVzcG9uc2U7Ci0gICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25S
ZWYgc3RvcmFnZVNlc3Npb24gPSBSZXNvdXJjZUhhbmRsZTo6Y3VycmVudFN0b3JhZ2VTZXNzaW9u
KCkpCi0gICAgICAgIGNhY2hlZFJlc3BvbnNlID0gV0tDYWNoZWRSZXNwb25zZUZvclJlcXVlc3Qo
c3RvcmFnZVNlc3Npb24sIHJlcXVlc3QpOworCisgICAgaWYgKCFfcHJpdmF0ZS0+cGFnZSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlmIChDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3Jh
Z2VTZXNzaW9uID0gX3ByaXZhdGUtPnBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+bmV0d29y
a2luZ0NvbnRleHQoKS0+c3RvcmFnZVNlc3Npb24oKSkKKyAgICAgICAgY2FjaGVkUmVzcG9uc2Ug
PSBXS0NhY2hlZFJlc3BvbnNlRm9yUmVxdWVzdChzdG9yYWdlU2Vzc2lvbiwgcmVxdWVzdC5nZXQo
KSk7CiAgICAgZWxzZQotICAgICAgICBjYWNoZWRSZXNwb25zZSA9IFtbTlNVUkxDYWNoZSBzaGFy
ZWRVUkxDYWNoZV0gY2FjaGVkUmVzcG9uc2VGb3JSZXF1ZXN0OnJlcXVlc3RdOwotICAgIFtyZXF1
ZXN0IHJlbGVhc2VdOworICAgICAgICBjYWNoZWRSZXNwb25zZSA9IFtbTlNVUkxDYWNoZSBzaGFy
ZWRVUkxDYWNoZV0gY2FjaGVkUmVzcG9uc2VGb3JSZXF1ZXN0OnJlcXVlc3QuZ2V0KCldOworCiAg
ICAgcmV0dXJuIGNhY2hlZFJlc3BvbnNlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMzQ4MzUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyOSBAQAorMjAxMi0xMS0xNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFw
QGFwcGxlLmNvbT4KKworICAgICAgICBQcml2YXRlIEJyb3dzaW5nIGlzIGEgcGVyLXBhZ2Ugc2V0
dGluZyB0aGF0IHNldHMgYSBnbG9iYWwgdmFsdWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb29raWVNYW5hZ2VyQ0ZOZXQuY3BwOiAoV2ViQ29v
a2llTWFuYWdlcjo6Y29va2llU3RvcmFnZSk6IFdlIGNhbid0IGdldAorICAgICAgICBjdXJyZW50
IHNlc3Npb24gd2l0aG91dCBhbnkgY29udGV4dCwgYnV0IHRoZSBjb2RlIHdhcyBub3QgY29ycmVj
dCBhbnl3YXksIHRoZSBjbGllbnQKKyAgICAgICAgaXMgY2xlYXJseSBpbnRlcmVzdGVkIGluIGEg
Z2V0dGVyIHRvIG1hdGNoIG92ZXJyaWRlIHNldHRlci4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwOiBNb3ZlZCBjb2RlIGZvciB0cmFja2lu
ZyBnbG9iYWwKKyAgICAgICAgc2Vzc2lvbnMgZnJvbSBXZWJDb3JlIHRvIFdlYktpdC4gVGhlIGJl
aGF2aW9yIGlzIHVuY2hhbmdlZCwgYnV0IGxvd2VyIGxldmVscyBhcmUKKyAgICAgICAgbm93IGNs
ZWFuZXIuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0Lmg6IERpdHRvLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcDoKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVmYXVsdENvb2tpZVN0b3Jh
Z2UpOiBBZGRlZC4gVXNlIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQKKyAgICAgICAgZm9yIHRy
YWNraW5nIHRoZSBkZWZhdWx0IHNlc3Npb24uCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDogKHVw
ZGF0ZVNoYXJlZFNldHRpbmdzRnJvbVByZWZlcmVuY2VzSWZOZWVkZWQpOgorICAgICAgICBVc2Ug
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9yQWxsQ29u
dGV4dHMuIFVwZGF0aW5nIG9ubHkKKyAgICAgICAgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBub3Qg
c3VmZmljaWVudCwgYW5kIGRpZCBub3QgbWF0Y2ggTWFjLgorCiAyMDEyLTExLTE0ICBHZW9yZ2Ug
VHNvdW1hbGlzICA8dHN1bWFsaXM5NkBnbWFpbC5jb20+CiAKICAgICAgICAgSW1wbGVtZW50YXRp
b24gZm9yIG1laG9kcyBpbiBXZWJNdXRhYmxlVVJMUmVxdWVzdC5jcHAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkNvb2tpZU1hbmFnZXJDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW4vV2ViQ29va2llTWFuYWdlckNGTmV0LmNwcAkocmV2aXNpb24gMTM0Njg3KQor
KysgU291cmNlL1dlYktpdC93aW4vV2ViQ29va2llTWFuYWdlckNGTmV0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsMTEgKzQwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJDb29r
aWVNYW5hZwogICAgaWYgKCFzdG9yYWdlKQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0g
ICAgLy8gTmVlZCB0byByZXRhaW4gbG9jYWxseSB0byBtYWtlIHN1cmUgdGhlIHJlc3VsdCBpcyB2
YWxpZCBpbiBjYWxsZXIuCi0gICAgc3RhdGljIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiByZXN1bHQ7Ci0gICAgcmVzdWx0ID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsK
LQotICAgICpzdG9yYWdlID0gcmVzdWx0LmdldCgpOworICAgICpzdG9yYWdlID0gb3ZlcnJpZGVu
Q29va2llU3RvcmFnZSgpOwogICAgIHJldHVybiBTX09LOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcAkocmV2aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJXZWJFZGl0b3JD
bGllbnQuaCIKICNpbmNsdWRlICJXZWJFbGVtZW50UHJvcGVydHlCYWcuaCIKICNpbmNsdWRlICJX
ZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNs
dWRlICJXZWJHZW9sb2NhdGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uUG9z
aXRpb24uaCIKICNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKQEAgLTQ5NjAsOSArNDk2MSw3
IEBAIEhSRVNVTFQgdXBkYXRlU2hhcmVkU2V0dGluZ3NGcm9tUHJlZmVyZW4KICAgICAgICAgcmV0
dXJuIGhyOwogCiAjaWYgVVNFKENGTkVUV09SSykKLSAgICAvLyBTZXQgY29va2llIHN0b3JhZ2Ug
YWNjZXB0IHBvbGljeQotICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCi0gICAgICAgIENG
SFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZS5nZXQo
KSwgYWNjZXB0UG9saWN5KTsKKyAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29r
aWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyhhY2NlcHRQb2xpY3kpOwogI2VuZGlmCiAKICAg
ICByZXR1cm4gU19PSzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCShyZXZpc2lv
biAxMzQ2ODcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsOSArMjEsMTYgQEAKICNp
bmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAKICNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudC5oIgorI2luY2x1ZGUgPENGTmV0d29yay9DRkhUVFBDb29raWVzUHJpdi5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvQ29va2llU3RvcmFnZUNGTmV0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0
ZW1JbnRlcmZhY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3N0YXRpYyBDRlVS
TFN0b3JhZ2VTZXNzaW9uUmVmIGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uOworc3RhdGljIENGVVJM
U3RvcmFnZVNlc3Npb25SZWYgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb247CisKIFBhc3NS
ZWZQdHI8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dD4gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KGZyYW1lLCB1c2Vy
QWdlbnQpKTsKQEAgLTQzLDMgKzUwLDc1IEBAIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgV2ViRnJh
bWVOZXR3b3JraW4KIHsKICAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5i
bG9ja2VkRXJyb3IocmVxdWVzdCk7CiB9CisKK3N0YXRpYyBTdHJpbmcmIHByaXZhdGVCcm93c2lu
Z1N0b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UoKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGJhc2UsICgpKTsKKyAgICBy
ZXR1cm4gYmFzZTsKK30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRQcml2
YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllcikKK3sKKyAgICBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbklkZW50aWZpZXJC
YXNlKCkgPSBpZGVudGlmaWVyOworfQorCit2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6
OnN3aXRjaFRvTmV3VGVzdGluZ1Nlc3Npb24oKQoreworICAgIC8vIFNldCBhIHByaXZhdGUgc2Vz
c2lvbiBmb3IgdGVzdGluZyB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGdsb2JhbCBjb29raWVz
LiBUaGlzIHNob3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb24u
CisgICAgZGVmYXVsdENGU3RvcmFnZVNlc3Npb24gPSB3a0NyZWF0ZVByaXZhdGVTdG9yYWdlU2Vz
c2lvbihDRlNUUigiUHJpdmF0ZSBXZWJLaXQgU2Vzc2lvbiIpLCBkZWZhdWx0Q0ZTdG9yYWdlU2Vz
c2lvbik7Cit9CisKK3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0
ZUJyb3dzaW5nU2Vzc2lvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBp
ZiAocHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAg
IFN0cmluZyBiYXNlID0gcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVyQmFz
ZSgpLmlzTnVsbCgpID8gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQnVu
ZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShDRkJ1bmRsZUdldE1haW5CdW5kbGUoKSwg
a0NGQnVuZGxlSWRlbnRpZmllcktleSkpKSA6IHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9u
SWRlbnRpZmllckJhc2UoKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmSWRlbnRpZmll
ciA9IFN0cmluZyhiYXNlICsgIi5Qcml2YXRlQnJvd3NpbmciKS5jcmVhdGVDRlN0cmluZygpOwor
CisgICAgcHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24gPSB3a0NyZWF0ZVByaXZhdGVTdG9y
YWdlU2Vzc2lvbihjZklkZW50aWZpZXIuZ2V0KCksIGRlZmF1bHRDRlN0b3JhZ2VTZXNzaW9uKTsK
K30KKwordm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpkZXN0cm95UHJpdmF0ZUJyb3dz
aW5nU2Vzc2lvbigpCit7CisgICAgaWYgKCFwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZSZWxlYXNlKHByaXZhdGVCcm93c2luZ1N0b3JhZ2VT
ZXNzaW9uKTsKKyAgICBwcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbiA9IDA7Cit9CisKK0NG
VVJMU3RvcmFnZVNlc3Npb25SZWYgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZGVmYXVsdFN0
b3JhZ2VTZXNzaW9uKCkKK3sKKyAgICByZXR1cm4gZGVmYXVsdENGU3RvcmFnZVNlc3Npb247Cit9
CisKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c3Rv
cmFnZVNlc3Npb24oKSBjb25zdAoreworICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9
IGZyYW1lKCkgJiYgZnJhbWUoKS0+c2V0dGluZ3MoKSAmJiBmcmFtZSgpLT5zZXR0aW5ncygpLT5w
cml2YXRlQnJvd3NpbmdFbmFibGVkKCk7CisgICAgaWYgKHByaXZhdGVCcm93c2luZ0VuYWJsZWQp
IHsKKyAgICAgICAgQVNTRVJUKHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uKTsKKyAgICAg
ICAgcmV0dXJuIHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9uOworICAgIH0KKyAgICByZXR1
cm4gZGVmYXVsdENGU3RvcmFnZVNlc3Npb247Cit9CisKK3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9yVGVzdGluZ0NvbnRleHQoQ0ZIVFRQQ29v
a2llU3RvcmFnZUFjY2VwdFBvbGljeSBwb2xpY3kpCit7CisgICAgQVNTRVJUKGRlZmF1bHRDRlN0
b3JhZ2VTZXNzaW9uKTsKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gZGVm
YXVsdENvb2tpZVN0b3JhZ2UgPSBhZG9wdENGKHdrQ29weUhUVFBDb29raWVTdG9yYWdlKGRlZmF1
bHRDRlN0b3JhZ2VTZXNzaW9uKSk7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZUFj
Y2VwdFBvbGljeShkZWZhdWx0Q29va2llU3RvcmFnZS5nZXQoKSwgcG9saWN5KTsKK30KKwordm9p
ZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxD
b250ZXh0cyhDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGljeSkKK3sKKyAgICBp
ZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBkZWZh
dWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQorICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0
Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHBvbGljeSk7CisKKyAgICBp
ZiAocHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb24pIHsKKyAgICAgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IHByaXZhdGVCcm93c2luZ0Nvb2tpZVN0b3JhZ2UgPSBhZG9w
dENGKHdrQ29weUhUVFBDb29raWVTdG9yYWdlKHByaXZhdGVCcm93c2luZ1N0b3JhZ2VTZXNzaW9u
KSk7CisgICAgICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVBY2NlcHRQb2xpY3kocHJp
dmF0ZUJyb3dzaW5nQ29va2llU3RvcmFnZS5nZXQoKSwgcG9saWN5KTsKKyAgICB9Cit9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCShyZXZpc2lvbiAxMzQ2ODcpCisrKyBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNyw2ICsyOCwxNSBAQCBjbGFzcyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0IDog
cHVibGljCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dD4gY3JlYXRlKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmIHVzZXJB
Z2VudCk7CiAKKyAgICBzdGF0aWMgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lv
bklkZW50aWZpZXJCYXNlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIHN3aXRjaFRv
TmV3VGVzdGluZ1Nlc3Npb24oKTsKKyAgICBzdGF0aWMgdm9pZCBlbnN1cmVQcml2YXRlQnJvd3Np
bmdTZXNzaW9uKCk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveVByaXZhdGVCcm93c2luZ1Nlc3Np
b24oKTsKKyAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBkZWZhdWx0U3RvcmFnZVNl
c3Npb24oKTsKKworICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZUFjY2VwdFBvbGljeUZvclRlc3Rp
bmdDb250ZXh0KENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kpOworICAgIHN0YXRpYyB2
b2lkIHNldENvb2tpZUFjY2VwdFBvbGljeUZvckFsbENvbnRleHRzKENGSFRUUENvb2tpZVN0b3Jh
Z2VBY2NlcHRQb2xpY3kpOworCiBwcml2YXRlOgogICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQoV2ViQ29yZTo6RnJhbWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgdXNlckFnZW50KQog
ICAgICAgICA6IFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQoZnJhbWUpCkBAIC0zNiw2
ICs0Niw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIHVzZXJBZ2VudCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgcmVmZXJyZXIoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24oKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0OwogCiAgICAgV1RGOjpTdHJpbmcgbV91c2VyQWdl
bnQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHJldmlzaW9uIDEzNDY4NykKKysrIFNvdXJj
ZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAKKyNpbmNsdWRlICJXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGFiYXNlLmg+Cisj
aW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzYsNiArNzgsMTQgQEAgdm9pZCBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6Om5vdGlmeUNvb2tpZQogewogfQogCitSZXRhaW5QdHI8Q0ZIVFRQ
Q29va2llU3RvcmFnZVJlZj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWZhdWx0Q29va2llU3Rv
cmFnZSgpCit7CisgICAgaWYgKENGVVJMU3RvcmFnZVNlc3Npb25SZWYgc2Vzc2lvbiA9IFdlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQ6OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpKQorICAgICAgICBy
ZXR1cm4gYWRvcHRDRih3a0NvcHlIVFRQQ29va2llU3RvcmFnZShzZXNzaW9uKSk7CisKKyAgICBy
ZXR1cm4gd2tHZXREZWZhdWx0SFRUUENvb2tpZVN0b3JhZ2UoKTsKK30KKwogdm9pZCBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OnJlZnJlc2hQbHVnaW5zKCkKIHsKICAgICBQbHVnaW5EYXRhYmFzZTo6
aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkocmV2
aXNpb24gMTM0Njg3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgcHJpdmF0
ZToKIAogICAgIC8vIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlDb29raWVzQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgUmV0YWluUHRyPENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWY+IGRlZmF1bHRDb29raWVTdG9yYWdlKCk7CiAKICAgICAvLyBXZWJDb3JlOjpQ
bHVnaW5TdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCByZWZyZXNoUGx1Z2lucygpOwpJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
MTM0ODM1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTItMTEtMTUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAg
ICAgICAgUHJpdmF0ZSBCcm93c2luZyBpcyBhIHBlci1wYWdlIHNldHRpbmcgdGhhdCBzZXRzIGEg
Z2xvYmFsIHZhbHVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02Nzg3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOiAoc2V0RGVmYXVsdHNU
b0NvbnNpc3RlbnRWYWx1ZXNGb3JUZXN0aW5nKToKKyAgICAgICAgQ2FsbCBfc3dpdGNoTmV0d29y
a0xvYWRlclRvTmV3VGVzdGluZ1Nlc3Npb24gYmVmb3JlIG1ha2luZyBvdGhlciBzZXR0aW5ncywg
c28gdGhhdAorICAgICAgICB0aGV5IHdvdWxkIGFjdHVhbGx5IGFwcGx5IHRvIHRoZSB0ZXN0aW5n
IHNlc3Npb24uCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmluaXRpYWxp
emUpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0aW5nKToKKyAgICAg
ICAgT25seSBjYWxsIFdLQnVuZGxlU3dpdGNoTmV0d29ya0xvYWRlclRvTmV3VGVzdGluZ1Nlc3Np
b24gb25jZSBwZXIgcHJvY2VzcywgbWF0Y2hpbmcKKyAgICAgICAgV2ViS2l0MS4gSSdtIG5vdCBm
dWxseSBzdXJlIHdoYXQgaXMgZ29pbmcgd3JvbmcsIGJ1dCBhcHBhcmVudGx5IGNyZWF0aW5nIG11
dGlwbGUKKyAgICAgICAgc2Vzc2lvbnMgd2l0aCB0aGUgc2FtZSBpZGVudGlmaWVyIGRvZXNuJ3Qg
cXVpdGUgd29yay4KKwogMjAxMi0xMS0xNSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIEdlbmVyYXRlIFNldHRpbmdzIGZyb20gYSAuaW4gZmlsZQpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkocmV2aXNpb24gMTM0Nzg2
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02OTMsNiArNjkzLDkgQEAgc3RhdGljIHZvaWQgcmVzZXREZWZhdWx0c1RvQ29u
c2lzdGVudFZhbAogLy8gQ2FsbGVkIG9uY2Ugb24gRHVtcFJlbmRlclRyZWUgc3RhcnR1cC4KIHN0
YXRpYyB2b2lkIHNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzRm9yVGVzdGluZygpCiB7Cisg
ICAgLy8gRklYTUU6IFdlJ2QgbGlrZSB0byBzdGFydCB3aXRoIGEgY2xlYW4gc3RhdGUgZm9yIGV2
ZXJ5IHRlc3QsIGJ1dCB0aGlzIGZ1bmN0aW9uIGNhbid0IGJlIHVzZWQgbW9yZSB0aGFuIG9uY2Ug
eWV0LgorICAgIFtXZWJQcmVmZXJlbmNlcyBfc3dpdGNoTmV0d29ya0xvYWRlclRvTmV3VGVzdGlu
Z1Nlc3Npb25dOworCiAgICAgcmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygpOwogCiAg
ICAgTlNTdHJpbmcgKnBhdGggPSBsaWJyYXJ5UGF0aEZvckR1bXBSZW5kZXJUcmVlKCk7CkBAIC03
MDIsOCArNzA1LDYgQEAgc3RhdGljIHZvaWQgc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlza1BhdGg6W3BhdGgg
c3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiVVJMQ2FjaGUiXV07CiAgICAgW05TVVJM
Q2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6c2hhcmVkQ2FjaGVdOwogICAgIFtzaGFyZWRDYWNoZSBy
ZWxlYXNlXTsKLQotICAgIFtXZWJQcmVmZXJlbmNlcyBfc3dpdGNoTmV0d29ya0xvYWRlclRvTmV3
VGVzdGluZ1Nlc3Npb25dOwogfQogCiBzdGF0aWMgdm9pZCBydW5UaHJlYWQodm9pZCogYXJnKQpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDEzNDc4NikKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDMsNiArMTAzLDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZShXS0J1
bmRsZQogCiAgICAgYWN0aXZhdGVGb250cygpOwogICAgIFdLQnVuZGxlQWN0aXZhdGVNYWNGb250
QXNjZW50SGFjayhtX2J1bmRsZSk7CisKKyAgICAvLyBGSVhNRTogV2UnZCBsaWtlIHRvIHN0YXJ0
IHdpdGggYSBjbGVhbiBzdGF0ZSBmb3IgZXZlcnkgdGVzdCwgYnV0IHRoaXMgZnVuY3Rpb24gY2Fu
J3QgYmUgdXNlZCBtb3JlIHRoYW4gb25jZSB5ZXQuCisgICAgV0tCdW5kbGVTd2l0Y2hOZXR3b3Jr
TG9hZGVyVG9OZXdUZXN0aW5nU2Vzc2lvbihtX2J1bmRsZSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OmRpZENyZWF0ZVBhZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpCkBAIC0yNDIsNyArMjQ1
LDYgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6YmVnaW5UZXN0aW5nKFdLRGljdAogICAgIFdLQnVu
ZGxlU2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMobV9idW5kbGUsIG1fcGFnZUdy
b3VwLCB0cnVlKTsKICAgICBXS0J1bmRsZVNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQo
bV9idW5kbGUsIG1fcGFnZUdyb3VwLCB0cnVlKTsKICAgICBXS0J1bmRsZVNldFByaXZhdGVCcm93
c2luZ0VuYWJsZWQobV9idW5kbGUsIG1fcGFnZUdyb3VwLCBmYWxzZSk7Ci0gICAgV0tCdW5kbGVT
d2l0Y2hOZXR3b3JrTG9hZGVyVG9OZXdUZXN0aW5nU2Vzc2lvbihtX2J1bmRsZSk7CiAgICAgV0tC
dW5kbGVTZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChtX2J1bmRsZSwgbV9wYWdlR3JvdXAs
IHRydWUpOwogICAgIFdLQnVuZGxlU2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChtX2J1bmRsZSwg
bV9wYWdlR3JvdXAsIGZhbHNlKTsKICAgICBXS0J1bmRsZVNldE1pbmltdW1Mb2dpY2FsRm9udFNp
emUobV9idW5kbGUsIG1fcGFnZUdyb3VwLCA5KTsK
</data>
<flag name="review"
          id="189675"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="189724"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>