<?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>123333</bug_id>
          
          <creation_ts>2013-10-25 05:27:13 -0700</creation_ts>
          <short_desc>[curl] Add file cache</short_desc>
          <delta_ts>2013-11-18 10:32:56 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>117300</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Mátyás Mustoha">mmatyas</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>chenzx</cc>
    
    <cc>commit-queue</cc>
    
    <cc>davidsz</cc>
    
    <cc>galpeter</cc>
    
    <cc>sipka</cc>
    
    <cc>zsborbely.u-szeged</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>943548</commentid>
    <comment_count>0</comment_count>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2013-10-25 05:27:13 -0700</bug_when>
    <thetext>This is a work-in-progress patch for implementing an on-disc file cache for the curl network backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943549</commentid>
    <comment_count>1</comment_count>
      <attachid>215165</attachid>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2013-10-25 05:30:15 -0700</bug_when>
    <thetext>Created attachment 215165
work in progress patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947190</commentid>
    <comment_count>2</comment_count>
      <attachid>216042</attachid>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2013-11-05 08:44:48 -0800</bug_when>
    <thetext>Created attachment 216042
work in progress patch 2

Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947489</commentid>
    <comment_count>3</comment_count>
    <who name="Chen Zhixiang">chenzx</who>
    <bug_when>2013-11-05 20:05:37 -0800</bug_when>
    <thetext>Hi, I&apos;ve implemented a http discache module for WinCE port&apos;s default WinInet backend, and later migrated to cURL.

The impl. is based on Qt&apos;s source code, but later trimmed a lot.

The cache file format mainly contains 3 parts: a fixed-size header struct; a http response header, but can be skipped by header-length field of previous struct; the response body.

And it also uses Qt&apos;s tricks: such as storing cache file first into a temple file, and later renamed to a url-hashed file name. This may maximize the `ACID` property of low-level file operations.

Hope these information may help you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947659</commentid>
    <comment_count>4</comment_count>
      <attachid>216164</attachid>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2013-11-06 04:47:14 -0800</bug_when>
    <thetext>Created attachment 216164
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947746</commentid>
    <comment_count>5</comment_count>
      <attachid>216164</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-11-06 09:42:12 -0800</bug_when>
    <thetext>Comment on attachment 216164
Proposed patch

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

A very nice start!  There seems to be a bit of excess copying going on, as well as a few coding standard violations in this patch.  Please revise and resubmit so we can push it forward.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:47
&gt; +CurlCacheEntry::CurlCacheEntry(String url, String cacheDir)

These should be passed by const ref to avoid copying.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:87
&gt; +    return &amp;m_requestHeaders;

If the m_requestHeaders member always exists, why do we return as a pointer?  Why not return it by reference?

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:90
&gt; +bool CurlCacheEntry::saveCachedData(const char *data, int size)

We write this as &quot;const char* data&quot;

It seems like size should be a &quot;size_t&quot; type.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:92
&gt; +    PlatformFileHandle contentFile = openFile(m_contentFilename, OpenForWrite);

It&apos;s too bad we don&apos;t have some kind of smart pointer for file operations (to ensure it is closed for any return state).

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:105
&gt; +bool CurlCacheEntry::loadCachedData(ResourceHandle *job)

We write this as &quot;ResourceHandle* job&quot;

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:117
&gt; +bool CurlCacheEntry::saveResponseHeaders(ResourceResponse &amp;response)

We write this as &quot;ResourceResponse&amp; response&quot;.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:142
&gt; +// load the headers from cache file into memory

This comment isn&apos;t really needed.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:149
&gt; +    // create strings from buffer

This comment doesn&apos;t really add anything.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:167
&gt; +void CurlCacheEntry::setResponseFromCachedHeaders(ResourceResponse &amp;response)

We write this as &quot;ResourceResponse&amp; response&quot;.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:173
&gt; +    HTTPHeaderMap cachedResponseHeaders = m_cachedResponse.httpHeaderFields();

This is making a copy; is that intentional?

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:207
&gt; +void CurlCacheEntry::generateBaseFilename(CString url)

Cstring might be fairly big; shouldn&apos;t this be a const reference?

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:220
&gt; +bool CurlCacheEntry::loadFileToBuffer(String filepath, Vector&lt;char&gt; &amp;buffer)

Strings can be big; should probably pass by const reference.

We write this as &quot;Vector&lt;char&gt;&amp; buffer&quot;

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:265
&gt; +bool CurlCacheEntry::parseResponseHeaders(ResourceResponse &amp;response)

We write this as &quot;ResourceResponse&amp; response&quot;

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:271
&gt; +    bool maxAgeIsValid = false;

In general, we prefer to define values as close to the point they are used as possible.  Several of these could be located further down in the method implementation.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:338
&gt; +

Extra space should be removed.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.h:42
&gt; +private:

We put private stuff at the end of our header files, not the top.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.h:54
&gt; +    bool loadFileToBuffer(String filepath, Vector&lt;char&gt; &amp;buffer);

See my comments about using const references and proper syntax (e.g., use &quot;Vector&lt;char&gt;&amp; buffer&quot;, etc.)

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.h:58
&gt; +    CurlCacheEntry(String url, String cacheDir);

Ditto const references.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.h:62
&gt; +    bool isInMemory() { return m_headerInMemory; }

This should be const.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.h:65
&gt; +    bool saveCachedData(const char* data, int size);

It seems like size should be a &quot;size_t&quot; type.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:54
&gt; +void CurlCacheManager::setCacheDirectory(String directory)

Pass by const reference.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:90
&gt; +    long long filesize = -1;

You might be better off using one of the C99 size types, such as &quot;int64_t&quot; to represent a long-long.  What should this be for a 64-bit build, for example? Should it be a 128-bit value?

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:100
&gt; +    int bufferReadSize = 4096;

The &quot;4096&quot; magic number should be declared as a constant somewhere and given a meaningful name.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:158
&gt; +void CurlCacheManager::didReceiveResponse(ResourceHandle *job, ResourceResponse&amp; response)

We write this as &quot;ResourceHandle* job&quot;.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:167
&gt; +

Remove this blank line.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:182
&gt; +

Remove this blank line.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:185
&gt; +void CurlCacheManager::didFinishLoading(String url)

Pass by const reference.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:195
&gt; +bool CurlCacheManager::isCached(String url)

Pass by const reference.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:210
&gt; +HTTPHeaderMap* CurlCacheManager::requestHeaders(String url)

Pass by const reference.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:222
&gt; +void CurlCacheManager::didReceiveData(String url, const char *data, int size)

Pass by const reference.

We write this as &quot;const char* data&quot;

&quot;size&quot; should probably be a size_t, unless you are using -1 as a sentinel value.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:233
&gt; +void CurlCacheManager::saveResponseHeaders(String url, ResourceResponse&amp; response)

Pass url as const reference.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:244
&gt; +void CurlCacheManager::invalidateCacheEntry(String url)

Pass url as const reference.  Why copy a few hundred bytes if you don&apos;t need to?

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:256
&gt; +void CurlCacheManager::didFail(String url)

Pass by const reference.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:261
&gt; +void CurlCacheManager::loadCachedData(String url, ResourceHandle *job, ResourceResponse&amp; response)

Pass by const reference.

We write this as &quot;ResourceHandle* job&quot;

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.h:40
&gt; +private:

Private stuff goes at the bottom of the file.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.h:43
&gt; +    CurlCacheManager(CurlCacheManager const &amp;);

We write this as &quot;CurlCacheManager const&amp;&quot;

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.h:44
&gt; +    void operator=(CurlCacheManager const &amp;);

Ditto.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.h:55
&gt; +    void loadCachedData(String, ResourceHandle*, ResourceResponse&amp;);

The above should be passing by const reference.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.h:58
&gt; +    static CurlCacheManager &amp; getInstance()

This should be written as &quot;CurlCacheManager&amp; getInstance&quot;.

Move this implementation into the cpp file. You don&apos;t want this being emitted into every compilation unit, do you?

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.h:64
&gt; +    String getCacheDirectory() { return m_cacheDir; }

Return as const reference. Make the method const.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.h:65
&gt; +    void setCacheDirectory(String);

Pass a const reference.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.h:68
&gt; +    HTTPHeaderMap* requestHeaders(String); // load headers

Pass the above two Strings as const references.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.h:71
&gt; +    void didReceiveData(String, const char*, int); // save data

Consider making this &apos;int&apos; type a size_t.

Pass String by const reference.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.h:73
&gt; +    void didFinishLoading(String);

Pass the above strings as const references.

&gt; Source/WebCore/platform/network/curl/ResourceHandleManager.cpp:953
&gt; +            HTTPHeaderMap* requestHeaders = CurlCacheManager::getInstance().requestHeaders(url);

It seems like requestHeaders should be returned by reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948618</commentid>
    <comment_count>6</comment_count>
      <attachid>216378</attachid>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2013-11-08 05:34:09 -0800</bug_when>
    <thetext>Created attachment 216378
Proposed patch 2

Thanks for the detailed review! I fixed the issues you&apos;ve mentioned.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:90
&gt; +    long long filesize = -1;

I&apos;ve used &quot;long long&quot; because getFileSize() in FileSystem.h expects a long long variable as parameter:
bool getFileSize(const String&amp;, long long&amp; result);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948700</commentid>
    <comment_count>7</comment_count>
      <attachid>216378</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-11-08 09:51:25 -0800</bug_when>
    <thetext>Comment on attachment 216378
Proposed patch 2

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

This is looking really good!  I had a couple of more minor things, then I think we&apos;re ready to land this.  Thanks for doing this work!

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:105
&gt; +bool CurlCacheEntry::loadCachedData(ResourceHandle *job)

ResourceHandle* please.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:165
&gt; +void CurlCacheEntry::setResponseFromCachedHeaders(ResourceResponse &amp;response)

ResourceResponse&amp; please.

&gt; Source/WebCore/platform/network/curl/CurlCacheEntry.cpp:326
&gt; +

DOn&apos;t need this line.

&gt; Source/WebCore/platform/network/curl/CurlCacheManager.cpp:158
&gt; +        CString urlLatin1 = it-&gt;key.latin1();

This is making a copy.  I think you could use a const reference to avoid that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949042</commentid>
    <comment_count>8</comment_count>
      <attachid>216491</attachid>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2013-11-09 03:54:52 -0800</bug_when>
    <thetext>Created attachment 216491
Proposed patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951669</commentid>
    <comment_count>9</comment_count>
      <attachid>216491</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-11-18 10:28:25 -0800</bug_when>
    <thetext>Comment on attachment 216491
Proposed patch 3

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951671</commentid>
    <comment_count>10</comment_count>
      <attachid>216491</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-18 10:32:54 -0800</bug_when>
    <thetext>Comment on attachment 216491
Proposed patch 3

Clearing flags on attachment: 216491

Committed r159432: &lt;http://trac.webkit.org/changeset/159432&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951672</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-18 10:32:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215165</attachid>
            <date>2013-10-25 05:30:15 -0700</date>
            <delta_ts>2013-11-05 08:44:48 -0800</delta_ts>
            <desc>work in progress patch</desc>
            <filename>diff.diff</filename>
            <type>text/plain</type>
            <size>33771</size>
            <attacher name="Mátyás Mustoha">mmatyas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5Nzg0NzkzLi5hODEwZWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTMtMTAtMjUgIE3DoXR5w6FzIE11c3RvaGEgIDxtbWF0eWFzQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBbY3VybF0gQWRkIGZpbGUgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzMzMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAg
ICAgICogUGxhdGZvcm1OaXguY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxDYWNoZUVudHJ5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybENhY2hlRW50cnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OndyaXRlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6aGVhZGVyQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRp
bWVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpp
bml0aWFsaXplSGFuZGxlKToKKwogMjAxMy0xMC0yMSAgVGhpYWdvIGRlIEJhcnJvcyBMYWNlcmRh
ICA8dGhpYWdvLmxhY2VyZGFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBGaXhpbmcgbWVkaWFz
dHJlYW0gZGVidWcgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTml4
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1OaXguY21ha2UKaW5kZXggNGRiOTc2NS4u
OWMyZDQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1OaXguY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1OaXguY21ha2UKQEAgLTI3OCw2ICsyNzgsOCBAQCBp
ZiAoV1RGX1VTRV9DVVJMKQogICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llTm9k
ZS5jcHAKICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZVN0b3JhZ2VDdXJsLmNw
cAogICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3JlZGVudGlhbFN0b3JhZ2VDdXJsLmNw
cAorICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuY3BwCisgICAg
ICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcAogICAgICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvRE5TQ3VybC5jcHAKICAgICAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0Zvcm1EYXRhU3RyZWFtQ3VybC5jcHAKICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL011bHRpcGFydEhhbmRsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjU2YTc0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuY3BwCkBAIC0wLDAgKzEsMzMw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgTWF0eWFzIE11c3RvaGEgPG1tYXR5YXNAaW5mLnUtc3plZ2VkLmh1
PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJDdXJsQ2FjaGVFbnRyeS5oIgorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgor
I2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKKyNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVz
cG9uc2UuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvRGF0
ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL01ENS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1cmxDYWNoZUVudHJ5OjpDdXJsQ2FjaGVFbnRy
eShTdHJpbmcgdXJsLCBTdHJpbmcgY2FjaGVEaXIpCisgICAgOiBtX2hlYWRlckZpbGVuYW1lKGNh
Y2hlRGlyKQorICAgICwgbV9jb250ZW50RmlsZW5hbWUoY2FjaGVEaXIpCisgICAgLCBtX2V4cGly
ZURhdGUoLTEpCisgICAgLCBtX2hlYWRlckluTWVtb3J5KGZhbHNlKQoreworICAgIGdlbmVyYXRl
QmFzZUZpbGVuYW1lKHVybC5sYXRpbjEoKSk7CisKKyAgICBtX2hlYWRlckZpbGVuYW1lLmFwcGVu
ZChtX2Jhc2VuYW1lKTsKKyAgICBtX2hlYWRlckZpbGVuYW1lLmFwcGVuZCgiLmhlYWRlciIpOwor
CisgICAgbV9jb250ZW50RmlsZW5hbWUuYXBwZW5kKG1fYmFzZW5hbWUpOworICAgIG1fY29udGVu
dEZpbGVuYW1lLmFwcGVuZCgiLmNvbnRlbnQiKTsKK30KKworQ3VybENhY2hlRW50cnk6On5DdXJs
Q2FjaGVFbnRyeSgpCit7CisgICAgLy8gLi4uCit9CisKKy8vIGNhY2hlIG1hbmFnZXIgc2hvdWxk
IGludmFsaWRhdGUgdGhlIGVudHJ5IG9uIGZhbHNlCitib29sIEN1cmxDYWNoZUVudHJ5Ojppc0Nh
Y2hlZCgpCit7CisgICAgaWYgKCFmaWxlRXhpc3RzKG1fY29udGVudEZpbGVuYW1lKSB8fCAhZmls
ZUV4aXN0cyhtX2hlYWRlckZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fZXhwaXJlRGF0ZSAhPSAtMSAmJiBtX2V4cGlyZURhdGUgPCBjdXJyZW50VGltZU1TKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitIVFRQSGVh
ZGVyTWFwKiBDdXJsQ2FjaGVFbnRyeTo6cmVxdWVzdEhlYWRlcnMoKQoreworICAgIHJldHVybiAm
bV9yZXF1ZXN0SGVhZGVyczsKK30KKworYm9vbCBDdXJsQ2FjaGVFbnRyeTo6c2F2ZUNhY2hlZERh
dGEoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCit7CisgICAgUGxhdGZvcm1GaWxlSGFuZGxl
IGNvbnRlbnRGaWxlID0gb3BlbkZpbGUobV9jb250ZW50RmlsZW5hbWUsIE9wZW5Gb3JXcml0ZSk7
CisgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGNvbnRlbnRGaWxlKSkgeworICAgICAgICBMT0coTmV0
d29yaywgIkNhY2hlIEVycm9yOiBDb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGVcbiIsIG1fY29u
dGVudEZpbGVuYW1lLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBhcHBlbmQKKyAgICBzZWVrRmlsZShjb250ZW50RmlsZSwgMCwgU2Vla0Zy
b21FbmQpOworICAgIHdyaXRlVG9GaWxlKGNvbnRlbnRGaWxlLCBkYXRhLCBzaXplKTsKKyAgICBj
bG9zZUZpbGUoY29udGVudEZpbGUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEN1cmxD
YWNoZUVudHJ5Ojpsb2FkQ2FjaGVkRGF0YShSZXNvdXJjZUhhbmRsZSAqam9iKQoreworICAgIEFT
U0VSVChqb2ItPmNsaWVudCgpKTsKKworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgaWYg
KCFsb2FkRmlsZVRvQnVmZmVyKG1fY29udGVudEZpbGVuYW1lLCBidWZmZXIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBqb2ItPmdldEludGVybmFsKCktPmNsaWVudCgpLT5kaWRSZWNl
aXZlRGF0YShqb2IsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCksIDApOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEN1cmxDYWNoZUVudHJ5OjpzYXZlUmVzcG9uc2VIZWFkZXJzKFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBoZWFk
ZXJGaWxlID0gb3BlbkZpbGUobV9oZWFkZXJGaWxlbmFtZSwgT3BlbkZvcldyaXRlKTsKKyAgICBp
ZiAoIWlzSGFuZGxlVmFsaWQoaGVhZGVyRmlsZSkpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJD
YWNoZSBFcnJvcjogQ291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRlXG4iLCBtX2hlYWRlckZpbGVu
YW1lLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICAvLyBIZWFkZXJzCisgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNw
b25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CisgICAg
d2hpbGUgKGl0ICE9IGVuZCkgeworICAgICAgICBTdHJpbmcgaGVhZGVyRmllbGQgPSBpdC0+a2V5
OworICAgICAgICBoZWFkZXJGaWVsZC5hcHBlbmQoIjogIik7CisgICAgICAgIGhlYWRlckZpZWxk
LmFwcGVuZChpdC0+dmFsdWUpOworICAgICAgICBoZWFkZXJGaWVsZC5hcHBlbmQoIlxuIik7Cisg
ICAgICAgIENTdHJpbmcgaGVhZGVyRmllbGRMYXRpbjEgPSBoZWFkZXJGaWVsZC5sYXRpbjEoKTsK
KyAgICAgICAgd3JpdGVUb0ZpbGUoaGVhZGVyRmlsZSwgaGVhZGVyRmllbGRMYXRpbjEuZGF0YSgp
LCBoZWFkZXJGaWVsZExhdGluMS5sZW5ndGgoKSk7CisgICAgICAgICsraXQ7CisgICAgfQorCisg
ICAgY2xvc2VGaWxlKGhlYWRlckZpbGUpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBsb2Fk
IHRoZSBoZWFkZXJzIGZyb20gY2FjaGUgZmlsZSBpbnRvIG1lbW9yeQorYm9vbCBDdXJsQ2FjaGVF
bnRyeTo6bG9hZFJlc3BvbnNlSGVhZGVycygpCit7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsK
KyAgICBpZiAoIWxvYWRGaWxlVG9CdWZmZXIobV9oZWFkZXJGaWxlbmFtZSwgYnVmZmVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gY3JlYXRlIHN0cmluZ3MgZnJvbSBidWZmZXIK
KyAgICBTdHJpbmcgaGVhZGVyQ29udGVudCA9IFN0cmluZyhidWZmZXIuZGF0YSgpKTsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBoZWFkZXJGaWVsZHM7CisgICAgaGVhZGVyQ29udGVudC5zcGxpdCgiXG4i
LCBoZWFkZXJGaWVsZHMpOworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gaGVhZGVyRmllbGRzLmJlZ2luKCk7CisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKKyAgICB3aGlsZSAoaXQgIT0gZW5kKSB7Cisg
ICAgICAgIHNpemVfdCBzcGxpdFBvc2l0aW9uID0gaXQtPmZpbmQoIjoiKTsKKyAgICAgICAgaWYg
KHNwbGl0UG9zaXRpb24gIT0gbm90Rm91bmQpCisgICAgICAgICAgICBtX2NhY2hlZFJlc3BvbnNl
LnNldEhUVFBIZWFkZXJGaWVsZChpdC0+bGVmdChzcGxpdFBvc2l0aW9uKSwgaXQtPnN1YnN0cmlu
ZyhzcGxpdFBvc2l0aW9uKzEpLnN0cmlwV2hpdGVTcGFjZSgpKTsKKyAgICAgICAgKytpdDsKKyAg
ICB9CisKKyAgICBTdHJpbmcgZXRhZyA9IG1fY2FjaGVkUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KCJFVGFnIik7CisgICAgaWYgKCFldGFnLmlzTnVsbCgpKQorICAgICAgICBtX3JlcXVlc3RIZWFk
ZXJzLnNldCgiSWYtTm9uZS1NYXRjaCIsIGV0YWcpOworCisgICAgU3RyaW5nIGxhc3RNb2RpZmll
ZCA9IG1fY2FjaGVkUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJMYXN0LU1vZGlmaWVkIik7Cisg
ICAgaWYgKCFsYXN0TW9kaWZpZWQuaXNOdWxsKCkpCisgICAgICAgIG1fcmVxdWVzdEhlYWRlcnMu
c2V0KCJJZi1Nb2RpZmllZC1TaW5jZSIsIGxhc3RNb2RpZmllZCk7CisKKyAgICBpZiAoZXRhZy5p
c051bGwoKSAmJiBsYXN0TW9kaWZpZWQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBwYXJzZVJlc3BvbnNlSGVhZGVycyhtX2NhY2hlZFJlc3BvbnNlKTsKK30K
KworLy8gc2V0IHJlc3BvbnNlIGhlYWRlcnMgZnJvbSBtZW1vcnkKK3ZvaWQgQ3VybENhY2hlRW50
cnk6OnNldFJlc3BvbnNlRnJvbUNhY2hlZEhlYWRlcnMoUmVzb3VyY2VSZXNwb25zZSAmcmVzcG9u
c2UpCit7CisgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMzA0KTsKKyAgICByZXNwb25z
ZS5zZXRXYXNDYWNoZWQodHJ1ZSk7CisKKyAgICAvLyBJbnRlZ3JhdGUgdGhlIGhlYWRlcnMgaW4g
dGhlIHJlc3BvbnNlIHdpdGggdGhlIGNhY2hlZCBvbmVzLgorICAgIEhUVFBIZWFkZXJNYXAgY2Fj
aGVkUmVzcG9uc2VIZWFkZXJzID0gbV9jYWNoZWRSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCk7
CisgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjYWNoZWRSZXNwb25zZUhl
YWRlcnMuYmVnaW4oKTsKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBj
YWNoZWRSZXNwb25zZUhlYWRlcnMuZW5kKCk7CisgICAgd2hpbGUgKGl0ICE9IGVuZCkgeworICAg
ICAgICBpZiAocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKGl0LT5rZXkpLmlzTnVsbCgpKQorICAg
ICAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5rZXksIGl0LT52YWx1ZSk7
CisgICAgICAgICsraXQ7CisgICAgfQorCisgICAgLy8gVHJ5IHRvIHBhcnNlIGV4cGVjdGVkIGNv
bnRlbnQgbGVuZ3RoCisgICAgbG9uZyBsb25nIGNvbnRlbnRMZW5ndGggPSAtMTsKKyAgICBpZiAo
IXJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1MZW5ndGgiKS5pc051bGwoKSkgewor
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgbG9uZyBsb25nIHBhcnNlZENv
bnRlbnRMZW5ndGggPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtTGVuZ3RoIiku
dG9JbnQ2NCgmc3VjY2Vzcyk7CisgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAgICAgY29u
dGVudExlbmd0aCA9IHBhcnNlZENvbnRlbnRMZW5ndGg7CisgICAgfQorICAgIHJlc3BvbnNlLnNl
dEV4cGVjdGVkQ29udGVudExlbmd0aChjb250ZW50TGVuZ3RoKTsgLy8gLTEgb24gcGFyc2UgZXJy
b3Igb3IgbnVsbAorCisgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJv
bU1lZGlhVHlwZShyZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIpKSk7Cisg
ICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5
cGUocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50LVR5cGUiKSkpOworICAgIHJlc3Bv
bnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKGZpbGVuYW1lRnJvbUhUVFBDb250ZW50RGlzcG9zaXRp
b24ocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50LURpc3Bvc2l0aW9uIikpKTsKK30K
Kwordm9pZCBDdXJsQ2FjaGVFbnRyeTo6ZGlkRmFpbCgpCit7CisgICAgLy8gdGhlIGNhY2hlIG1h
bmFnZXIgd2lsbCBjYWxsIGludmFsaWRhdGUoKQorfQorCit2b2lkIEN1cmxDYWNoZUVudHJ5Ojpk
aWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICAvLyBub3RoaW5nIHRvIGRvIGhlcmUgeWV0Cit9CisK
K3ZvaWQgQ3VybENhY2hlRW50cnk6OmdlbmVyYXRlQmFzZUZpbGVuYW1lKENTdHJpbmcgdXJsKQor
eworICAgIE1ENSBtZDU7CisgICAgbWQ1LmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHVybC5kYXRhKCkpLCB1cmwubGVuZ3RoKCkpOworCisgICAgVmVjdG9yPHVpbnQ4
X3QsIDE2PiBzdW07CisgICAgbWQ1LmNoZWNrc3VtKHN1bSk7CisgICAgdWludDhfdCogcmF3ZGF0
YSA9IHN1bS5kYXRhKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTY7IGkrKykK
KyAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KHJhd2RhdGFbaV0sIG1fYmFzZW5hbWUsIExvd2VyY2Fz
ZSk7Cit9CisKK2Jvb2wgQ3VybENhY2hlRW50cnk6OmxvYWRGaWxlVG9CdWZmZXIoU3RyaW5nIGZp
bGVwYXRoLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICAvLyBvcGVuIHRoZSBmaWxlCisg
ICAgUGxhdGZvcm1GaWxlSGFuZGxlIGlucHV0RmlsZSA9IG9wZW5GaWxlKGZpbGVwYXRoLCBPcGVu
Rm9yUmVhZCk7CisgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGlucHV0RmlsZSkpIHsKKyAgICAgICAg
TE9HKE5ldHdvcmssICJDYWNoZSBFcnJvcjogQ291bGQgbm90IG9wZW4gJXMgZm9yIHJlYWRcbiIs
IGZpbGVwYXRoLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBsb25nIGxvbmcgZmlsZXNpemUgPSAtMTsKKyAgICBpZiAoIWdldEZpbGVTaXplKGZp
bGVwYXRoLCBmaWxlc2l6ZSkpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDYWNoZSBFcnJvcjog
Q291bGQgbm90IGdldCBmaWxlIHNpemUgb2YgJXNcbiIsIGZpbGVwYXRoLmxhdGluMSgpLmRhdGEo
KSk7CisgICAgICAgIGNsb3NlRmlsZShpbnB1dEZpbGUpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gbG9hZCB0aGUgZmlsZSBjb250ZW50IGludG8gYnVmZmVyCisgICAg
YnVmZmVyLnJlc2l6ZShmaWxlc2l6ZSk7CisgICAgaW50IGJ1ZmZlclBvc2l0aW9uID0gMDsKKyAg
ICBpbnQgYnVmZmVyUmVhZFNpemUgPSA0MDk2OworICAgIGludCBieXRlc1JlYWQgPSAwOworICAg
IHdoaWxlIChmaWxlc2l6ZSA+IGJ1ZmZlclBvc2l0aW9uKSB7CisgICAgICAgIGlmIChmaWxlc2l6
ZSAtIGJ1ZmZlclBvc2l0aW9uIDwgYnVmZmVyUmVhZFNpemUpCisgICAgICAgICAgICBidWZmZXJS
ZWFkU2l6ZSA9IGZpbGVzaXplIC0gYnVmZmVyUG9zaXRpb247CisKKyAgICAgICAgYnl0ZXNSZWFk
ID0gcmVhZEZyb21GaWxlKGlucHV0RmlsZSwgYnVmZmVyLmRhdGEoKSArIGJ1ZmZlclBvc2l0aW9u
LCBidWZmZXJSZWFkU2l6ZSk7CisgICAgICAgIGlmIChieXRlc1JlYWQgIT0gYnVmZmVyUmVhZFNp
emUpIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUgRXJyb3I6IENvdWxkIG5vdCBy
ZWFkIGZyb20gJXNcbiIsIGZpbGVwYXRoLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgICAgICBj
bG9zZUZpbGUoaW5wdXRGaWxlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIGJ1ZmZlclBvc2l0aW9uICs9IGJ1ZmZlclJlYWRTaXplOworICAgIH0KKyAg
ICBjbG9zZUZpbGUoaW5wdXRGaWxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDdXJs
Q2FjaGVFbnRyeTo6aW52YWxpZGF0ZSgpCit7CisgICAgZGVsZXRlRmlsZShtX2hlYWRlckZpbGVu
YW1lKTsKKyAgICBkZWxldGVGaWxlKG1fY29udGVudEZpbGVuYW1lKTsKKyAgICBMT0coTmV0d29y
aywgIkNhY2hlOiBpbnZhbGlkYXRlZCAlc1xuIiwgbV9iYXNlbmFtZS5sYXRpbjEoKS5kYXRhKCkp
OworfQorCitib29sIEN1cmxDYWNoZUVudHJ5OjpwYXJzZVJlc3BvbnNlSGVhZGVycyhSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBkb3VibGUgbGFzdE1vZGlmaWNhdGlvbkRhdGUg
PSAwOworICAgIGRvdWJsZSByZXNwb25zZURhdGUgPSAwOworICAgIGRvdWJsZSBleHBpcmF0aW9u
RGF0ZSA9IDA7CisgICAgZG91YmxlIG1heEFnZSA9IDA7CisgICAgYm9vbCBtYXhBZ2VJc1ZhbGlk
ID0gZmFsc2U7CisgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gY3VycmVudFRpbWVNUygpOyAvLyBH
TVQKKworCisgICAgaWYgKHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpIHx8
IHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAocmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNNdXN0UmV2YWxp
ZGF0ZSgpKQorICAgICAgICBtYXhBZ2UgPSAwOworICAgIGVsc2UgeworICAgICAgICBtYXhBZ2Ug
PSByZXNwb25zZS5jYWNoZUNvbnRyb2xNYXhBZ2UoKTsKKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4o
bWF4QWdlKSkKKyAgICAgICAgICAgIG1heEFnZSA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1heEFnZUlzVmFsaWQgPSB0cnVlOworICAgIH0KKworCisgICAgaWYgKCFyZXNwb25zZS5o
YXNDYWNoZVZhbGlkYXRvckZpZWxkcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBs
YXN0TW9kaWZpY2F0aW9uRGF0ZSA9IHJlc3BvbnNlLmxhc3RNb2RpZmllZCgpOworICAgIGlmIChz
dGQ6OmlzbmFuKGxhc3RNb2RpZmljYXRpb25EYXRlKSkKKyAgICAgICAgbGFzdE1vZGlmaWNhdGlv
bkRhdGUgPSAwOworCisgICAgcmVzcG9uc2VEYXRlID0gcmVzcG9uc2UuZGF0ZSgpOworICAgIGlm
IChzdGQ6OmlzbmFuKHJlc3BvbnNlRGF0ZSkpCisgICAgICAgIHJlc3BvbnNlRGF0ZSA9IDA7CisK
KyAgICBleHBpcmF0aW9uRGF0ZSA9IHJlc3BvbnNlLmV4cGlyZXMoKTsKKyAgICBpZiAoc3RkOjpp
c25hbihleHBpcmF0aW9uRGF0ZSkpCisgICAgICAgIGV4cGlyYXRpb25EYXRlID0gMDsKKworICAg
IGlmIChtYXhBZ2VJc1ZhbGlkKSB7CisgICAgICAgIC8vIHdoZW4gYm90aCB0aGUgY2FjaGUgZW50
cnkgYW5kIHRoZSByZXNwb25zZSBjb250YWluIG1heC1hZ2UsIHRoZSBsZXNzZXIgb25lIHRha2Vz
IHByaW9yaXR5CisgICAgICAgIGRvdWJsZSBleHBpcmVzID0gY3VycmVudFRpbWUgKyBtYXhBZ2Ug
KiAxMDAwOworICAgICAgICBpZiAobV9leHBpcmVEYXRlID09IC0xIHx8IG1fZXhwaXJlRGF0ZSA+
IGV4cGlyZXMpCisgICAgICAgICAgICBtX2V4cGlyZURhdGUgPSBleHBpcmVzOworICAgIH0gZWxz
ZSBpZiAocmVzcG9uc2VEYXRlID4gMCAmJiBleHBpcmF0aW9uRGF0ZSA+PSByZXNwb25zZURhdGUp
CisgICAgICAgIG1fZXhwaXJlRGF0ZSA9IGN1cnJlbnRUaW1lICsgKGV4cGlyYXRpb25EYXRlIC0g
cmVzcG9uc2VEYXRlKTsKKworICAgIC8vIGlmIHRoZXJlIHdlcmUgbm8gbGlmZXRpbWUgaW5mb3Jt
YXRpb24KKyAgICBpZiAobV9leHBpcmVEYXRlID09IC0xKSB7CisgICAgICAgIGlmIChsYXN0TW9k
aWZpY2F0aW9uRGF0ZSA+IDApCisgICAgICAgICAgICBtX2V4cGlyZURhdGUgPSBjdXJyZW50VGlt
ZSArIChjdXJyZW50VGltZSAtIGxhc3RNb2RpZmljYXRpb25EYXRlKSAqIDAuMTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9leHBpcmVEYXRlID0gMDsKKyAgICB9CisKKyAgICBtX2hlYWRl
ckluTWVtb3J5ID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjAxZGU1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5LmgK
QEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9m
IFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEzIE1hdHlhcyBNdXN0b2hhIDxtbWF0eWFzQGlu
Zi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
dXJsQ2FjaGVFbnRyeV9oCisjZGVmaW5lIEN1cmxDYWNoZUVudHJ5X2gKKworI2luY2x1ZGUgIkhU
VFBIZWFkZXJNYXAuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1
cmxDYWNoZUVudHJ5IHsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9iYXNlbmFtZTsKKyAgICBT
dHJpbmcgbV9oZWFkZXJGaWxlbmFtZTsKKyAgICBTdHJpbmcgbV9jb250ZW50RmlsZW5hbWU7CisK
KyAgICBkb3VibGUgbV9leHBpcmVEYXRlOworICAgIGJvb2wgbV9oZWFkZXJJbk1lbW9yeTsKKwor
ICAgIFJlc291cmNlUmVzcG9uc2UgbV9jYWNoZWRSZXNwb25zZTsKKyAgICBIVFRQSGVhZGVyTWFw
IG1fcmVxdWVzdEhlYWRlcnM7CisKKyAgICB2b2lkIGdlbmVyYXRlQmFzZUZpbGVuYW1lKENTdHJp
bmcgdXJsKTsKKyAgICBib29sIGxvYWRGaWxlVG9CdWZmZXIoU3RyaW5nIGZpbGVwYXRoLCBWZWN0
b3I8Y2hhcj4mIGJ1ZmZlcik7CisKK3B1YmxpYzoKKyAgICBDdXJsQ2FjaGVFbnRyeShTdHJpbmcg
dXJsLCBTdHJpbmcgY2FjaGVEaXIpOworICAgIH5DdXJsQ2FjaGVFbnRyeSgpOworCisgICAgYm9v
bCBpc0NhY2hlZCgpOworICAgIGJvb2wgaXNJbk1lbW9yeSgpIHsgcmV0dXJuIG1faGVhZGVySW5N
ZW1vcnk7IH0KKyAgICBIVFRQSGVhZGVyTWFwKiByZXF1ZXN0SGVhZGVycygpOworCisgICAgYm9v
bCBzYXZlQ2FjaGVkRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSk7CisgICAgYm9vbCBs
b2FkQ2FjaGVkRGF0YShSZXNvdXJjZUhhbmRsZSopOworCisgICAgYm9vbCBzYXZlUmVzcG9uc2VI
ZWFkZXJzKFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICBib29sIGxvYWRSZXNwb25zZUhlYWRlcnMo
KTsKKyAgICB2b2lkIHNldFJlc3BvbnNlRnJvbUNhY2hlZEhlYWRlcnMoUmVzb3VyY2VSZXNwb25z
ZSYpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAgdm9pZCBkaWRGYWlsKCk7CisgICAg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CisKKyAgICBib29sIHBhcnNlUmVzcG9uc2VIZWFkZXJz
KFJlc291cmNlUmVzcG9uc2UmKTsKK307CisKK30KKworI2VuZGlmIC8vIEN1cmxDYWNoZUVudHJ5
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Q2FjaGVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ2FjaGVNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
MjNiOTUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgTWF0eWFzIE11c3RvaGEgPG1tYXR5YXNAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VybENh
Y2hlTWFuYWdlci5oIgorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkhUVFBI
ZWFkZXJNYXAuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3VybENhY2hl
TWFuYWdlcjo6Q3VybENhY2hlTWFuYWdlcigpCisgICAgOiBtX2Rpc2FibGVkKHRydWUpCit7Cisg
ICAgLy8gLi4uCit9CisKK0N1cmxDYWNoZU1hbmFnZXI6On5DdXJsQ2FjaGVNYW5hZ2VyKCkKK3sK
KyAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2F2ZUluZGV4KCk7
CisKKyAgICBIYXNoTWFwPFN0cmluZywgQ3VybENhY2hlRW50cnkqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2luZGV4LmJlZ2luKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIEN1cmxDYWNoZUVudHJ5
Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1faW5kZXguZW5kKCk7CisgICAgd2hpbGUgKGl0ICE9
IGVuZCkgeworICAgICAgICBkZWxldGUgaXQtPnZhbHVlOworICAgICAgICArK2l0OworICAgIH0K
K30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpzZXRDYWNoZURpcmVjdG9yeShTdHJpbmcgZGly
ZWN0b3J5KQoreworICAgIG1fY2FjaGVEaXIgPSBkaXJlY3Rvcnk7CisgICAgbV9jYWNoZURpci5h
cHBlbmQoIi8iKTsKKyAgICBpZiAobV9jYWNoZURpci5pc0VtcHR5KCkpIHsKKyAgICAgICAgTE9H
KE5ldHdvcmssICJDYWNoZSBFcnJvcjogQ2FjaGUgbG9jYXRpb24gaXMgbm90IHNldCEgQ2FjaGVN
YW5hZ2VyIGRpc2FibGVkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWZpbGVFeGlzdHMobV9jYWNoZURpcikpIHsKKyAgICAgICAgaWYgKG1ha2VBbGxEaXJlY3Rvcmll
cyhtX2NhY2hlRGlyKSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJDYWNoZSBFcnJvcjog
Q291bGQgbm90IG9wZW4gb3IgY3JlYXRlIGNhY2hlIGRpcmVjdG9yeSEgQ2FjaGVNYW5hZ2VyIGRp
c2FibGVkLlxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBtX2Rpc2FibGVkID0gZmFsc2U7CisgICAgbG9hZEluZGV4KCk7Cit9CisKK3ZvaWQgQ3VybENh
Y2hlTWFuYWdlcjo6bG9hZEluZGV4KCkKK3sKKyAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgU3RyaW5nIGluZGV4RmlsZVBhdGgobV9jYWNoZURpcik7CisgICAgaW5k
ZXhGaWxlUGF0aC5hcHBlbmQoImluZGV4LmRhdCIpOworCisgICAgUGxhdGZvcm1GaWxlSGFuZGxl
IGluZGV4RmlsZSA9IG9wZW5GaWxlKGluZGV4RmlsZVBhdGgsIE9wZW5Gb3JSZWFkKTsKKyAgICBp
ZiAoIWlzSGFuZGxlVmFsaWQoaW5kZXhGaWxlKSkgeworICAgICAgICBMT0coTmV0d29yaywgIkNh
Y2hlIFdhcm5pbmc6IENvdWxkIG5vdCBvcGVuICVzIGZvciByZWFkXG4iLCBpbmRleEZpbGVQYXRo
LmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb25nIGxv
bmcgZmlsZXNpemUgPSAtMTsKKyAgICBpZiAoIWdldEZpbGVTaXplKGluZGV4RmlsZVBhdGgsIGZp
bGVzaXplKSkgeworICAgICAgICBMT0coTmV0d29yaywgIkNhY2hlIEVycm9yOiBDb3VsZCBub3Qg
Z2V0IGZpbGUgc2l6ZSBvZiAlc1xuIiwgaW5kZXhGaWxlUGF0aC5sYXRpbjEoKS5kYXRhKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gbG9hZCB0aGUgZmlsZSBjb250ZW50IGlu
dG8gYnVmZmVyCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzaXplKGZp
bGVzaXplKTsKKyAgICBpbnQgYnVmZmVyUG9zaXRpb24gPSAwOworICAgIGludCBidWZmZXJSZWFk
U2l6ZSA9IDQwOTY7CisgICAgd2hpbGUgKGZpbGVzaXplID4gYnVmZmVyUG9zaXRpb24pIHsKKyAg
ICAgICAgaWYgKGZpbGVzaXplIC0gYnVmZmVyUG9zaXRpb24gPCBidWZmZXJSZWFkU2l6ZSkKKyAg
ICAgICAgICAgIGJ1ZmZlclJlYWRTaXplID0gZmlsZXNpemUgLSBidWZmZXJQb3NpdGlvbjsKKwor
ICAgICAgICByZWFkRnJvbUZpbGUoaW5kZXhGaWxlLCBidWZmZXIuZGF0YSgpICsgYnVmZmVyUG9z
aXRpb24sIGJ1ZmZlclJlYWRTaXplKTsKKyAgICAgICAgYnVmZmVyUG9zaXRpb24gKz0gYnVmZmVy
UmVhZFNpemU7CisgICAgfQorICAgIGNsb3NlRmlsZShpbmRleEZpbGUpOworCisgICAgLy8gY3Jl
YXRlIHN0cmluZ3MgZnJvbSBidWZmZXIKKyAgICBTdHJpbmcgaGVhZGVyQ29udGVudCA9IFN0cmlu
ZyhidWZmZXIuZGF0YSgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBpbmRleFVSTHM7CisgICAgaGVh
ZGVyQ29udGVudC5zcGxpdCgiXG4iLCBpbmRleFVSTHMpOworICAgIGJ1ZmZlci5jbGVhcigpOwor
CisgICAgLy8gYWRkIGVudHJpZXMgdG8gaW5kZXgKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBpbmRleFVSTHMuYmVnaW4oKTsKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gaW5kZXhVUkxzLmVuZCgpOworICAgIGlmIChpbmRleFVSTHMuc2l6
ZSgpID4gMSkKKyAgICAgICAgLS1lbmQ7IC8vIGxhc3QgbGluZSBpcyBlbXB0eQorICAgIHdoaWxl
IChpdCAhPSBlbmQpIHsKKyAgICAgICAgU3RyaW5nIHVybCA9IGl0LT5zdHJpcFdoaXRlU3BhY2Uo
KTsKKworICAgICAgICBDdXJsQ2FjaGVFbnRyeSogY2FjaGVFbnRyeSA9IG5ldyBDdXJsQ2FjaGVF
bnRyeSh1cmwsIG1fY2FjaGVEaXIpOworICAgICAgICBpZiAoY2FjaGVFbnRyeS0+aXNDYWNoZWQo
KSkKKyAgICAgICAgICAgIG1faW5kZXguc2V0KHVybCwgY2FjaGVFbnRyeSk7CisKKyAgICAgICAg
KytpdDsKKyAgICB9Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFuYWdlcjo6c2F2ZUluZGV4KCkKK3sK
KyAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGluZGV4
RmlsZVBhdGgobV9jYWNoZURpcik7CisgICAgaW5kZXhGaWxlUGF0aC5hcHBlbmQoImluZGV4LmRh
dCIpOworCisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGluZGV4RmlsZSA9IG9wZW5GaWxlKGluZGV4
RmlsZVBhdGgsIE9wZW5Gb3JXcml0ZSk7CisgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGluZGV4Rmls
ZSkpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDYWNoZSBFcnJvcjogQ291bGQgbm90IG9wZW4g
JXMgZm9yIHdyaXRlXG4iLCBpbmRleEZpbGVQYXRoLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBIYXNoTWFwPFN0cmluZywgQ3VybENhY2hlRW50cnkqPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4LmJlZ2luKCk7CisgICAgSGFzaE1hcDxTdHJpbmcs
IEN1cmxDYWNoZUVudHJ5Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1faW5kZXguZW5kKCk7Cisg
ICAgd2hpbGUgKGl0ICE9IGVuZCkgeworICAgICAgICBDU3RyaW5nIHVybExhdGluMSA9IGl0LT5r
ZXkubGF0aW4xKCk7CisgICAgICAgIHdyaXRlVG9GaWxlKGluZGV4RmlsZSwgdXJsTGF0aW4xLmRh
dGEoKSwgdXJsTGF0aW4xLmxlbmd0aCgpKTsKKyAgICAgICAgd3JpdGVUb0ZpbGUoaW5kZXhGaWxl
LCAiXG4iLCAxKTsKKyAgICAgICAgKytpdDsKKyAgICB9CisKKyAgICBjbG9zZUZpbGUoaW5kZXhG
aWxlKTsKK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVz
b3VyY2VIYW5kbGUqIGpvYiwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYg
KG1fZGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyB1cmwgPSBqb2ItPmZp
cnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpOworCisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0
dXNDb2RlKCkgPT0gMzA0KQorICAgICAgICBsb2FkRW50cnlGaWxlcyh1cmwsIGpvYiwgcmVzcG9u
c2UpOworCisgICAgZWxzZSBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAyMDApIHsK
KyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEN1cmxDYWNoZUVudHJ5Kj46Oml0ZXJhdG9yIGl0ID0g
bV9pbmRleC5maW5kKHVybCk7CisgICAgICAgIGlmIChpdCAhPSBtX2luZGV4LmVuZCgpKQorICAg
ICAgICAgICAgaW52YWxpZGF0ZUNhY2hlRW50cnkodXJsKTsKKworICAgICAgICBDdXJsQ2FjaGVF
bnRyeSogZW50cnkgPSBuZXcgQ3VybENhY2hlRW50cnkodXJsLCBtX2NhY2hlRGlyKTsKKyAgICAg
ICAgYm9vbCBjYWNoZWFibGUgPSBlbnRyeS0+cGFyc2VSZXNwb25zZUhlYWRlcnMocmVzcG9uc2Up
OworICAgICAgICBpZiAoY2FjaGVhYmxlKSB7CisgICAgICAgICAgICBtX2luZGV4LnNldCh1cmws
IGVudHJ5KTsKKyAgICAgICAgICAgIHNhdmVSZXNwb25zZUhlYWRlcnModXJsLCByZXNwb25zZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbnRyeS0+aW52YWxpZGF0ZSgpOworICAg
ICAgICAgICAgZGVsZXRlIGVudHJ5OworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGlu
dmFsaWRhdGVDYWNoZUVudHJ5KHVybCk7Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFuYWdlcjo6ZGlk
RmluaXNoTG9hZGluZyhTdHJpbmcgdXJsKQoreworICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBIYXNoTWFwPFN0cmluZywgQ3VybENhY2hlRW50cnkqPjo6aXRlcmF0
b3IgaXQgPSBtX2luZGV4LmZpbmQodXJsKTsKKyAgICBpZiAoaXQgIT0gbV9pbmRleC5lbmQoKSkK
KyAgICAgICAgaXQtPnZhbHVlLT5kaWRGaW5pc2hMb2FkaW5nKCk7Cit9CisKK2Jvb2wgQ3VybENh
Y2hlTWFuYWdlcjo6aXNDYWNoZWQoU3RyaW5nIHVybCkKK3sKKyAgICBpZiAobV9kaXNhYmxlZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSGFzaE1hcDxTdHJpbmcsIEN1cmxDYWNoZUVu
dHJ5Kj46Oml0ZXJhdG9yIGl0ID0gbV9pbmRleC5maW5kKHVybCk7CisgICAgaWYgKGl0ICE9IG1f
aW5kZXguZW5kKCkpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNDYWNoZWQoKSkgeworICAg
ICAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNJbk1lbW9yeSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5sb2FkUmVzcG9uc2VIZWFk
ZXJzKCkpIC8vIGxvYWQgc2F2ZWQgaGVhZGVycyB0byBmdXR1cmUgcmVxdWVzdHMKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpbnZhbGlkYXRlQ2FjaGVF
bnRyeSh1cmwpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0hUVFBIZWFkZXJNYXAq
IEN1cmxDYWNoZU1hbmFnZXI6OnJlcXVlc3RIZWFkZXJzKFN0cmluZyB1cmwpCit7CisgICAgaWYg
KCFtX2Rpc2FibGVkKSB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDdXJsQ2FjaGVFbnRyeSo+
OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmluZCh1cmwpOworICAgICAgICBpZiAoaXQgIT0gbV9p
bmRleC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBpdC0+dmFsdWUtPnJlcXVlc3RIZWFkZXJz
KCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFuYWdlcjo6
ZGlkUmVjZWl2ZURhdGEoU3RyaW5nIHVybCwgY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCit7
CisgICAgaWYgKG1fZGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8U3Ry
aW5nLCBDdXJsQ2FjaGVFbnRyeSo+OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmluZCh1cmwpOwor
ICAgIGlmIChpdCAhPSBtX2luZGV4LmVuZCgpKQorICAgICAgICBpZiAoIWl0LT52YWx1ZS0+c2F2
ZUNhY2hlZERhdGEoZGF0YSwgc2l6ZSkpCisgICAgICAgICAgICBpbnZhbGlkYXRlQ2FjaGVFbnRy
eSh1cmwpOworfQorCit2b2lkIEN1cmxDYWNoZU1hbmFnZXI6OnNhdmVSZXNwb25zZUhlYWRlcnMo
U3RyaW5nIHVybCwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKG1fZGlz
YWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBDdXJsQ2FjaGVF
bnRyeSo+OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmluZCh1cmwpOworICAgIGlmIChpdCAhPSBt
X2luZGV4LmVuZCgpKQorICAgICAgICBpZiAoIWl0LT52YWx1ZS0+c2F2ZVJlc3BvbnNlSGVhZGVy
cyhyZXNwb25zZSkpCisgICAgICAgICAgICBpbnZhbGlkYXRlQ2FjaGVFbnRyeSh1cmwpOworfQor
Cit2b2lkIEN1cmxDYWNoZU1hbmFnZXI6OmludmFsaWRhdGVDYWNoZUVudHJ5KFN0cmluZyB1cmwp
Cit7CisgICAgaWYgKG1fZGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8
U3RyaW5nLCBDdXJsQ2FjaGVFbnRyeSo+OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmluZCh1cmwp
OworICAgIGlmIChpdCAhPSBtX2luZGV4LmVuZCgpKSB7CisgICAgICAgIGl0LT52YWx1ZS0+aW52
YWxpZGF0ZSgpOworICAgICAgICBkZWxldGUgaXQtPnZhbHVlOworICAgICAgICBtX2luZGV4LnJl
bW92ZSh1cmwpOworICAgIH0KK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRGYWlsKFN0
cmluZyB1cmwpCit7CisgICAgaW52YWxpZGF0ZUNhY2hlRW50cnkodXJsKTsKK30KKwordm9pZCBD
dXJsQ2FjaGVNYW5hZ2VyOjpsb2FkRW50cnlGaWxlcyhTdHJpbmcgdXJsLCBSZXNvdXJjZUhhbmRs
ZSogam9iLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAobV9kaXNhYmxl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaE1hcDxTdHJpbmcsIEN1cmxDYWNoZUVudHJ5
Kj46Oml0ZXJhdG9yIGl0ID0gbV9pbmRleC5maW5kKHVybCk7CisgICAgaWYgKGl0ICE9IG1faW5k
ZXguZW5kKCkpIHsKKyAgICAgICAgYm9vbCBub1Byb2JsZW1zID0gZmFsc2U7CisgICAgICAgIGlm
IChpdC0+dmFsdWUtPmlzSW5NZW1vcnkoKSkKKyAgICAgICAgICAgIG5vUHJvYmxlbXMgPSB0cnVl
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBub1Byb2JsZW1zID0gaXQtPnZhbHVlLT5sb2Fk
UmVzcG9uc2VIZWFkZXJzKCk7CisKKyAgICAgICAgaWYgKG5vUHJvYmxlbXMpIHsKKyAgICAgICAg
ICAgIGl0LT52YWx1ZS0+c2V0UmVzcG9uc2VGcm9tQ2FjaGVkSGVhZGVycyhyZXNwb25zZSk7Cisg
ICAgICAgICAgICBub1Byb2JsZW1zID0gaXQtPnZhbHVlLT5sb2FkQ2FjaGVkRGF0YShqb2IpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFub1Byb2JsZW1zKQorICAgICAgICAgICAgaW52YWxp
ZGF0ZUNhY2hlRW50cnkodXJsKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYWNiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5oCkBA
IC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBT
emVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMyBNYXR5YXMgTXVzdG9oYSA8bW1hdHlhc0BpbmYu
dS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3Vy
bENhY2hlTWFuYWdlcl9oCisjZGVmaW5lIEN1cmxDYWNoZU1hbmFnZXJfaAorCisjaW5jbHVkZSAi
Q3VybENhY2hlRW50cnkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1
cmxDYWNoZU1hbmFnZXIgeworCitwcml2YXRlOgorICAgIEN1cmxDYWNoZU1hbmFnZXIoKTsKKyAg
ICB+Q3VybENhY2hlTWFuYWdlcigpOworICAgIEN1cmxDYWNoZU1hbmFnZXIoQ3VybENhY2hlTWFu
YWdlciBjb25zdCAmKTsKKyAgICB2b2lkIG9wZXJhdG9yPShDdXJsQ2FjaGVNYW5hZ2VyIGNvbnN0
ICYpOworCisgICAgU3RyaW5nIG1fY2FjaGVEaXI7CisgICAgSGFzaE1hcDxTdHJpbmcsIEN1cmxD
YWNoZUVudHJ5Kj4gbV9pbmRleDsKKyAgICBib29sIG1fZGlzYWJsZWQ7CisKKyAgICB2b2lkIHNh
dmVJbmRleCgpOworICAgIHZvaWQgbG9hZEluZGV4KCk7CisKKyAgICB2b2lkIHNhdmVSZXNwb25z
ZUhlYWRlcnMoU3RyaW5nLCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCBpbnZhbGlkYXRl
Q2FjaGVFbnRyeShTdHJpbmcpOworICAgIHZvaWQgbG9hZEVudHJ5RmlsZXMoU3RyaW5nLCBSZXNv
dXJjZUhhbmRsZSosIFJlc291cmNlUmVzcG9uc2UmKTsKKworcHVibGljOgorICAgIHN0YXRpYyBD
dXJsQ2FjaGVNYW5hZ2VyICYgZ2V0SW5zdGFuY2UoKQorICAgIHsKKyAgICAgICAgc3RhdGljIEN1
cmxDYWNoZU1hbmFnZXIgaW5zdGFuY2U7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9
CisKKyAgICBTdHJpbmcgZ2V0Q2FjaGVEaXJlY3RvcnkoKSB7IHJldHVybiBtX2NhY2hlRGlyOyB9
CisgICAgdm9pZCBzZXRDYWNoZURpcmVjdG9yeShTdHJpbmcpOworCisgICAgYm9vbCBpc0NhY2hl
ZChTdHJpbmcpOworICAgIEhUVFBIZWFkZXJNYXAqIHJlcXVlc3RIZWFkZXJzKFN0cmluZyk7IC8v
IGxvYWQgaGVhZGVycworCisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5k
bGUqLCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShTdHJpbmcs
IGNvbnN0IGNoYXIqLCBpbnQpOyAvLyBzYXZlIGRhdGEKKyAgICB2b2lkIGRpZEZhaWwoU3RyaW5n
KTsKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3RyaW5nKTsKK307CisKK30KKworI2VuZGlm
IC8vIEN1cmxDYWNoZU1hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAppbmRleCBk
ODEyMWEyLi5lZDgxZGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcApAQCAtOSw2ICs5
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEzIFBldGVyIEdhbCA8Z2FscGV0ZXJAaW5mLnUt
c3plZ2VkLmh1PiwgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAxMyBB
bGV4IENocmlzdGVuc2VuIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMyBNYXR5YXMgTXVzdG9oYSA8bW1hdHlhc0BpbmYudS1zemVnZWQuaHU+LCBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTM4LDYgKzM5LDcgQEAKIAogI2luY2x1ZGUgIkNvb2tpZU1hbmFnZXIuaCIKICNpbmNsdWRl
ICJDcmVkZW50aWFsU3RvcmFnZS5oIgorI2luY2x1ZGUgIkN1cmxDYWNoZU1hbmFnZXIuaCIKICNp
bmNsdWRlICJEYXRhVVJMLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCkBAIC0yMTgsOCArMjIwLDEwIEBAIHN0YXRpYyBzaXplX3Qgd3Jp
dGVDYWxsYmFjayh2b2lkKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRh
dGEpCiAKICAgICBpZiAoZC0+bV9tdWx0aXBhcnRIYW5kbGUpCiAgICAgICAgIGQtPm1fbXVsdGlw
YXJ0SGFuZGxlLT5jb250ZW50UmVjZWl2ZWQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHB0ciks
IHRvdGFsU2l6ZSk7Ci0gICAgZWxzZSBpZiAoZC0+Y2xpZW50KCkpCisgICAgZWxzZSBpZiAoZC0+
Y2xpZW50KCkpIHsKICAgICAgICAgZC0+Y2xpZW50KCktPmRpZFJlY2VpdmVEYXRhKGpvYiwgc3Rh
dGljX2Nhc3Q8Y2hhcio+KHB0ciksIHRvdGFsU2l6ZSwgMCk7CisgICAgICAgIEN1cmxDYWNoZU1h
bmFnZXI6OmdldEluc3RhbmNlKCkuZGlkUmVjZWl2ZURhdGEoam9iLT5maXJzdFJlcXVlc3QoKS51
cmwoKS5zdHJpbmcoKSwgc3RhdGljX2Nhc3Q8Y2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CisgICAg
fQogCiAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKIH0KQEAgLTQyOSw4ICs0MzMsMTAgQEAgc3RhdGlj
IHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1l
bWIsIHZvaWQqIGRhdGEpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
Y2xpZW50KQorICAgICAgICBpZiAoY2xpZW50KSB7CiAgICAgICAgICAgICBjbGllbnQtPmRpZFJl
Y2VpdmVSZXNwb25zZShqb2IsIGQtPm1fcmVzcG9uc2UpOworICAgICAgICAgICAgQ3VybENhY2hl
TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRSZWNlaXZlUmVzcG9uc2Uoam9iLCBkLT5tX3Jlc3Bv
bnNlKTsKKyAgICAgICAgfQogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFJlc3BvbnNlRmlyZWQo
dHJ1ZSk7CiAKICAgICB9IGVsc2UgewpAQCAtNTc4LDE2ICs1ODQsMjAgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayhUaW1lcjxSZXNvdXJjZUhhbmRs
ZU1hbmFnZXI+KgogICAgICAgICAgICAgaWYgKGQtPm1fbXVsdGlwYXJ0SGFuZGxlKQogICAgICAg
ICAgICAgICAgIGQtPm1fbXVsdGlwYXJ0SGFuZGxlLT5jb250ZW50RW5kZWQoKTsKIAotICAgICAg
ICAgICAgaWYgKGQtPmNsaWVudCgpKQorICAgICAgICAgICAgaWYgKGQtPmNsaWVudCgpKSB7CiAg
ICAgICAgICAgICAgICAgZC0+Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcoam9iLCAwKTsKKyAg
ICAgICAgICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZpbmlzaExv
YWRpbmcoam9iLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjaGFyKiB1cmwgPSAwOwogICAgICAgICAg
ICAgY3VybF9lYXN5X2dldGluZm8oZC0+bV9oYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9VUkws
ICZ1cmwpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ3Vy
bCBFUlJPUiBmb3IgdXJsPSclcycsIGVycm9yOiAnJXMnXG4iLCB1cmwsIGN1cmxfZWFzeV9zdHJl
cnJvcihtc2ctPmRhdGEucmVzdWx0KSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGlmIChkLT5jbGll
bnQoKSkKKyAgICAgICAgICAgIGlmIChkLT5jbGllbnQoKSkgewogICAgICAgICAgICAgICAgIGQt
PmNsaWVudCgpLT5kaWRGYWlsKGpvYiwgUmVzb3VyY2VFcnJvcihTdHJpbmcoKSwgbXNnLT5kYXRh
LnJlc3VsdCwgU3RyaW5nKHVybCksIFN0cmluZyhjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRh
LnJlc3VsdCkpKSk7CisgICAgICAgICAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFu
Y2UoKS5kaWRGYWlsKGpvYi0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgcmVtb3ZlRnJvbUN1cmwoam9iKTsKQEAgLTkz
OCw2ICs5NDgsMTkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmluaXRpYWxpemVIYW5k
bGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKICAgICBzdHJ1Y3QgY3VybF9zbGlzdCogaGVhZGVycyA9
IDA7CiAgICAgaWYgKGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRlckZpZWxkcygpLnNpemUo
KSA+IDApIHsKICAgICAgICAgSFRUUEhlYWRlck1hcCBjdXN0b21IZWFkZXJzID0gam9iLT5maXJz
dFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CisKKyAgICAgICAgaWYgKEN1cmxDYWNoZU1h
bmFnZXI6OmdldEluc3RhbmNlKCkuaXNDYWNoZWQodXJsKSkgeworICAgICAgICAgICAgSFRUUEhl
YWRlck1hcCogcmVxdWVzdEhlYWRlcnMgPSBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgp
LnJlcXVlc3RIZWFkZXJzKHVybCk7CisKKyAgICAgICAgICAgIC8vIGFwcGVuZCBhZGRpdGlvbmFs
IGNhY2hlIGluZm9ybWF0aW9uCisgICAgICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IHJlcXVlc3RIZWFkZXJzLT5iZWdpbigpOworICAgICAgICAgICAgSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRlcnMtPmVuZCgpOworICAgICAg
ICAgICAgd2hpbGUgKGl0ICE9IGVuZCkgeworICAgICAgICAgICAgICAgIGN1c3RvbUhlYWRlcnMu
c2V0KGl0LT5rZXksIGl0LT52YWx1ZSk7CisgICAgICAgICAgICAgICAgKytpdDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGN1c3RvbUhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXN0b21IZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICAgICAgU3RyaW5nIGtleSA9IGl0LT5rZXk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggN2I1
MTk5YS4uOTYwM2RmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEzLTEwLTI1ICBN
w6F0ecOhcyBNdXN0b2hhICA8bW1hdHlhc0BpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgW2N1
cmxdIEFkZCBmaWxlIGNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjMzMzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvY3VybC9XZWJQcm9jZXNzQ3VybC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorCiAy
MDEzLTEwLTIxICBHZXJnbyBCYWxvZ2ggIDxnZXJ5eHl6QGluZi51LXN6ZWdlZC5odT4KIAogICAg
ICAgICBSZW1vdmUgcXQgZnJvbSBnZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY3VybC9XZWJQcm9jZXNzQ3VybC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2N1cmwvV2ViUHJvY2Vzc0N1cmwuY3BwCmluZGV4
IDgyZGU1OGMuLjI4NmRkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y3VybC9XZWJQcm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9j
dXJsL1dlYlByb2Nlc3NDdXJsLmNwcApAQCAtMSw2ICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogUG9ydGlvbnMgQ29w
eXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgTWF0eWFzIE11c3RvaGEgPG1tYXR5YXNAaW5mLnUtc3plZ2VkLmh1Pgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICszMSw3IEBACiAKICNpbmNs
dWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9D
b29raWVNYW5hZ2VyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DdXJsQ2FjaGVNYW5hZ2VyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9MYW5ndWFnZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ2
LDYgKzQ5LDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1DbGVhclJlc291cmNlQ2FjaGVz
KFJlc291cmNlQ2FjaGVzVG9DbGVhciBjYWNoZXNUb0NsZWFyCiB2b2lkIFdlYlByb2Nlc3M6OnBs
YXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYgcGFyYW1ldGVycywgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKQogewogICAgIFdlYkNv
cmU6OkNvb2tpZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuc2V0Q29va2llSmFyUGF0aChwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpOworCisgICAgU3RyaW5nIGNhY2hlRGlyZWN0b3J5
ID0gcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3Rvcnk7CisgICAgQVNTRVJUKCFjYWNoZURpcmVj
dG9yeS5pc0VtcHR5KCkpOworICAgIFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3Rh
bmNlKCkuc2V0Q2FjaGVEaXJlY3RvcnkoY2FjaGVEaXJlY3RvcnkpOwogfQogCiB2b2lkIFdlYlBy
b2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216042</attachid>
            <date>2013-11-05 08:44:48 -0800</date>
            <delta_ts>2013-11-06 04:47:14 -0800</delta_ts>
            <desc>work in progress patch 2</desc>
            <filename>diff_kesz.diff</filename>
            <type>text/plain</type>
            <size>39750</size>
            <attacher name="Mátyás Mustoha">mmatyas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5MmJmYjVkLi43YWUxMzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYg
QEAKKzIwMTMtMTEtMDUgIE3DoXR5w6FzIE11c3RvaGEgIDxtbWF0eWFzQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBbY3VybF0gQWRkIGZpbGUgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzMzMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXJsQ2FjaGVFbnRyeTo6Q3VybENhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENh
Y2hlRW50cnk6On5DdXJsQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVF
bnRyeTo6aXNDYWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnJlcXVl
c3RIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5OjpzYXZlQ2FjaGVk
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVFbnRyeTo6bG9hZENhY2hlZERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnNhdmVSZXNwb25zZUhlYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmxvYWRSZXNwb25zZUhlYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnNldFJlc3BvbnNlRnJvbUNhY2hl
ZEhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmRpZEZhaWwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmRpZEZpbmlzaExvYWRpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmdlbmVyYXRlQmFzZUZpbGVuYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5Ojpsb2FkRmlsZVRvQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxDYWNoZUVudHJ5OjpwYXJzZVJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybENhY2hlRW50cnk6OmlzSW5NZW1vcnkpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDdXJsQ2FjaGVNYW5hZ2VyOjpDdXJsQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxDYWNoZU1hbmFnZXI6On5DdXJsQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxDYWNoZU1hbmFnZXI6OnNldENhY2hlRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxDYWNoZU1hbmFnZXI6OmxvYWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2Fj
aGVNYW5hZ2VyOjpzYXZlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFn
ZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdl
cjo6aXNDYWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6cmVxdWVz
dEhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6ZGlkUmVjZWl2
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6c2F2ZVJlc3BvbnNl
SGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjppbnZhbGlkYXRl
Q2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRGYWls
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmxvYWRDYWNoZWREYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmdldENhY2hlRGlyZWN0b3J5KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OndyaXRlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6aGVh
ZGVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpk
b3dubG9hZFRpbWVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjppbml0aWFsaXplSGFuZGxlKToKKwogMjAxMy0xMS0wNCAgQmVtIEpvbmVzLUJleSAg
PGJqb25lc2JlQGFkb2JlLmNvbT4KIAogICAgICAgICBbY3NzIHNoYXBlc10gRml4IHN1cHBvcnQg
Zm9yIHNoYXBlLW91dHNpZGUgb24gYSBmbG9hdCB3aXRoIHBhZGRpbmcKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IGRkYzE2MDkuLjAyMmNi
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agpAQCAtODE3OCw2ICs4MTc4LDE4IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXEN1cmxDYWNoZUVudHJ5LmNwcCI+Cisg
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAg
IDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0Ns
Q29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3Vy
bFxDdXJsQ2FjaGVNYW5hZ2VyLmNwcCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsRG93bmxvYWQuY3BwIj4KICAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTE5MjUwLDYgKzE5MjYyLDE4
IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgogICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDdXN0b21CdWlsZFN0ZXAgSW5jbHVkZT0i
Li5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXEN1cmxDYWNoZU1hbmFnZXIuaCI+CisgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl
bGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1
Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0N1c3RvbUJ1aWxk
U3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtc
Y3VybFxDdXJsQ2FjaGVFbnRyeS5oIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgogICAgIDxDdXN0b21CdWls
ZFN0ZXAgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXEZvcm1EYXRhU3RyZWFtQ3Vy
bC5oIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmls
dGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmls
dGVycwppbmRleCBlMTBmOGQxLi42YmRiZDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0xODk5LDYgKzE4
OTksMTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3Vy
bFxDcmVkZW50aWFsU3RvcmFnZUN1cmwuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0
d29ya1xjdXJsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcQ3VybENhY2hlRW50cnkuY3BwIj4KKyAgICAg
IDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcQ3VybENh
Y2hlTWFuYWdlci5jcHAiPgorICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0Zp
bHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXG5ldHdvcmtcY3VybFxDdXJsRG93bmxvYWQuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZv
cm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xNDkwMyw2ICsx
NDkwOSwxMiBAQAogICAgIDxDdXN0b21CdWlsZFN0ZXAgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0
d29ya1xjdXJsXEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiPgogICAgICAgPEZpbHRlcj5wbGF0
Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8
Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsQ2Fj
aGVFbnRyeS5oIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+
CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CisgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcQ3VybENhY2hlTWFuYWdlci5oIj4KKyAgICAgIDxGaWx0
ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+
CiAgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxc
Rm9ybURhdGFTdHJlYW1DdXJsLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1
cmw8L0ZpbHRlcj4KICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYmMzYzcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuY3BwCkBA
IC0wLDAgKzEsMzQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWF0eWFzIE11c3RvaGEgPG1tYXR5YXNAaW5m
LnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJDdXJsQ2FjaGVFbnRyeS5oIgorCisjaW5jbHVkZSAiRmls
ZVN5c3RlbS5oIgorI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKKyNpbmNsdWRlICJIVFRQUGFy
c2Vycy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNs
dWRlIDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVk
ZSA8d3RmL01ENS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1cmxDYWNoZUVudHJ5OjpD
dXJsQ2FjaGVFbnRyeShTdHJpbmcgdXJsLCBTdHJpbmcgY2FjaGVEaXIpCisgICAgOiBtX2hlYWRl
ckZpbGVuYW1lKGNhY2hlRGlyKQorICAgICwgbV9jb250ZW50RmlsZW5hbWUoY2FjaGVEaXIpCisg
ICAgLCBtX2V4cGlyZURhdGUoLTEpCisgICAgLCBtX2hlYWRlckluTWVtb3J5KGZhbHNlKQorewor
ICAgIGdlbmVyYXRlQmFzZUZpbGVuYW1lKHVybC5sYXRpbjEoKSk7CisKKyAgICBtX2hlYWRlckZp
bGVuYW1lLmFwcGVuZChtX2Jhc2VuYW1lKTsKKyAgICBtX2hlYWRlckZpbGVuYW1lLmFwcGVuZCgi
LmhlYWRlciIpOworCisgICAgbV9jb250ZW50RmlsZW5hbWUuYXBwZW5kKG1fYmFzZW5hbWUpOwor
ICAgIG1fY29udGVudEZpbGVuYW1lLmFwcGVuZCgiLmNvbnRlbnQiKTsKK30KKworQ3VybENhY2hl
RW50cnk6On5DdXJsQ2FjaGVFbnRyeSgpCit7Cit9CisKKy8vIGNhY2hlIG1hbmFnZXIgc2hvdWxk
IGludmFsaWRhdGUgdGhlIGVudHJ5IG9uIGZhbHNlCitib29sIEN1cmxDYWNoZUVudHJ5Ojppc0Nh
Y2hlZCgpCit7CisgICAgaWYgKCFmaWxlRXhpc3RzKG1fY29udGVudEZpbGVuYW1lKSB8fCAhZmls
ZUV4aXN0cyhtX2hlYWRlckZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFtX2hlYWRlckluTWVtb3J5KSB7CisgICAgICAgIGlmICghbG9hZFJlc3BvbnNlSGVhZGVy
cygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChtX2V4cGly
ZURhdGUgPCBjdXJyZW50VGltZU1TKCkpIHsKKyAgICAgICAgbV9oZWFkZXJJbk1lbW9yeSA9IGZh
bHNlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0hUVFBIZWFkZXJNYXAqIEN1cmxDYWNoZUVudHJ5OjpyZXF1ZXN0SGVhZGVycygpCit7Cisg
ICAgcmV0dXJuICZtX3JlcXVlc3RIZWFkZXJzOworfQorCitib29sIEN1cmxDYWNoZUVudHJ5Ojpz
YXZlQ2FjaGVkRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKK3sKKyAgICBQbGF0Zm9y
bUZpbGVIYW5kbGUgY29udGVudEZpbGUgPSBvcGVuRmlsZShtX2NvbnRlbnRGaWxlbmFtZSwgT3Bl
bkZvcldyaXRlKTsKKyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoY29udGVudEZpbGUpKSB7CisgICAg
ICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUgRXJyb3I6IENvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0
ZVxuIiwgbV9jb250ZW50RmlsZW5hbWUubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vIGFwcGVuZAorICAgIHNlZWtGaWxlKGNvbnRlbnRGaWxl
LCAwLCBTZWVrRnJvbUVuZCk7CisgICAgd3JpdGVUb0ZpbGUoY29udGVudEZpbGUsIGRhdGEsIHNp
emUpOworICAgIGNsb3NlRmlsZShjb250ZW50RmlsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgQ3VybENhY2hlRW50cnk6OmxvYWRDYWNoZWREYXRhKFJlc291cmNlSGFuZGxlICpqb2Ip
Cit7CisgICAgQVNTRVJUKGpvYi0+Y2xpZW50KCkpOworCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZl
cjsKKyAgICBpZiAoIWxvYWRGaWxlVG9CdWZmZXIobV9jb250ZW50RmlsZW5hbWUsIGJ1ZmZlcikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGpvYi0+Z2V0SW50ZXJuYWwoKS0+Y2xpZW50
KCktPmRpZFJlY2VpdmVEYXRhKGpvYiwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSwgMCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ3VybENhY2hlRW50cnk6OnNhdmVSZXNwb25z
ZUhlYWRlcnMoUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgUGxhdGZvcm1GaWxl
SGFuZGxlIGhlYWRlckZpbGUgPSBvcGVuRmlsZShtX2hlYWRlckZpbGVuYW1lLCBPcGVuRm9yV3Jp
dGUpOworICAgIGlmICghaXNIYW5kbGVWYWxpZChoZWFkZXJGaWxlKSkgeworICAgICAgICBMT0co
TmV0d29yaywgIkNhY2hlIEVycm9yOiBDb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGVcbiIsIG1f
aGVhZGVyRmlsZW5hbWUubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vIEhlYWRlcnMKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOworICAgIEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5l
bmQoKTsKKyAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAgIFN0cmluZyBoZWFkZXJGaWVs
ZCA9IGl0LT5rZXk7CisgICAgICAgIGhlYWRlckZpZWxkLmFwcGVuZCgiOiAiKTsKKyAgICAgICAg
aGVhZGVyRmllbGQuYXBwZW5kKGl0LT52YWx1ZSk7CisgICAgICAgIGhlYWRlckZpZWxkLmFwcGVu
ZCgiXG4iKTsKKyAgICAgICAgQ1N0cmluZyBoZWFkZXJGaWVsZExhdGluMSA9IGhlYWRlckZpZWxk
LmxhdGluMSgpOworICAgICAgICB3cml0ZVRvRmlsZShoZWFkZXJGaWxlLCBoZWFkZXJGaWVsZExh
dGluMS5kYXRhKCksIGhlYWRlckZpZWxkTGF0aW4xLmxlbmd0aCgpKTsKKyAgICAgICAgKytpdDsK
KyAgICB9CisKKyAgICBjbG9zZUZpbGUoaGVhZGVyRmlsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKKy8vIGxvYWQgdGhlIGhlYWRlcnMgZnJvbSBjYWNoZSBmaWxlIGludG8gbWVtb3J5Citib29s
IEN1cmxDYWNoZUVudHJ5Ojpsb2FkUmVzcG9uc2VIZWFkZXJzKCkKK3sKKyAgICBWZWN0b3I8Y2hh
cj4gYnVmZmVyOworICAgIGlmICghbG9hZEZpbGVUb0J1ZmZlcihtX2hlYWRlckZpbGVuYW1lLCBi
dWZmZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBjcmVhdGUgc3RyaW5ncyBm
cm9tIGJ1ZmZlcgorICAgIFN0cmluZyBoZWFkZXJDb250ZW50ID0gU3RyaW5nKGJ1ZmZlci5kYXRh
KCkpOworICAgIFZlY3RvcjxTdHJpbmc+IGhlYWRlckZpZWxkczsKKyAgICBoZWFkZXJDb250ZW50
LnNwbGl0KCJcbiIsIGhlYWRlckZpZWxkcyk7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsKKyAgICBWZWN0b3I8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgpOworICAgIHdoaWxlIChpdCAh
PSBlbmQpIHsKKyAgICAgICAgc2l6ZV90IHNwbGl0UG9zaXRpb24gPSBpdC0+ZmluZCgiOiIpOwor
ICAgICAgICBpZiAoc3BsaXRQb3NpdGlvbiAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgIG1fY2Fj
aGVkUmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5sZWZ0KHNwbGl0UG9zaXRpb24pLCBp
dC0+c3Vic3RyaW5nKHNwbGl0UG9zaXRpb24rMSkuc3RyaXBXaGl0ZVNwYWNlKCkpOworICAgICAg
ICArK2l0OworICAgIH0KKworICAgIHJldHVybiBwYXJzZVJlc3BvbnNlSGVhZGVycyhtX2NhY2hl
ZFJlc3BvbnNlKTsKK30KKworLy8gc2V0IHJlc3BvbnNlIGhlYWRlcnMgZnJvbSBtZW1vcnkKK3Zv
aWQgQ3VybENhY2hlRW50cnk6OnNldFJlc3BvbnNlRnJvbUNhY2hlZEhlYWRlcnMoUmVzb3VyY2VS
ZXNwb25zZSAmcmVzcG9uc2UpCit7CisgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMzA0
KTsKKyAgICByZXNwb25zZS5zZXRXYXNDYWNoZWQodHJ1ZSk7CisKKyAgICAvLyBJbnRlZ3JhdGUg
dGhlIGhlYWRlcnMgaW4gdGhlIHJlc3BvbnNlIHdpdGggdGhlIGNhY2hlZCBvbmVzLgorICAgIEhU
VFBIZWFkZXJNYXAgY2FjaGVkUmVzcG9uc2VIZWFkZXJzID0gbV9jYWNoZWRSZXNwb25zZS5odHRw
SGVhZGVyRmllbGRzKCk7CisgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBj
YWNoZWRSZXNwb25zZUhlYWRlcnMuYmVnaW4oKTsKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBjYWNoZWRSZXNwb25zZUhlYWRlcnMuZW5kKCk7CisgICAgd2hpbGUgKGl0
ICE9IGVuZCkgeworICAgICAgICBpZiAocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKGl0LT5rZXkp
LmlzTnVsbCgpKQorICAgICAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5r
ZXksIGl0LT52YWx1ZSk7CisgICAgICAgICsraXQ7CisgICAgfQorCisgICAgLy8gVHJ5IHRvIHBh
cnNlIGV4cGVjdGVkIGNvbnRlbnQgbGVuZ3RoCisgICAgbG9uZyBsb25nIGNvbnRlbnRMZW5ndGgg
PSAtMTsKKyAgICBpZiAoIXJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1MZW5ndGgi
KS5pc051bGwoKSkgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgbG9u
ZyBsb25nIHBhcnNlZENvbnRlbnRMZW5ndGggPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNv
bnRlbnQtTGVuZ3RoIikudG9JbnQ2NCgmc3VjY2Vzcyk7CisgICAgICAgIGlmIChzdWNjZXNzKQor
ICAgICAgICAgICAgY29udGVudExlbmd0aCA9IHBhcnNlZENvbnRlbnRMZW5ndGg7CisgICAgfQor
ICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChjb250ZW50TGVuZ3RoKTsgLy8g
LTEgb24gcGFyc2UgZXJyb3Igb3IgbnVsbAorCisgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0
cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShyZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRl
bnQtVHlwZSIpKSk7CisgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hh
cnNldEZyb21NZWRpYVR5cGUocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50LVR5cGUi
KSkpOworICAgIHJlc3BvbnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKGZpbGVuYW1lRnJvbUhUVFBD
b250ZW50RGlzcG9zaXRpb24ocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50LURpc3Bv
c2l0aW9uIikpKTsKK30KKwordm9pZCBDdXJsQ2FjaGVFbnRyeTo6ZGlkRmFpbCgpCit7CisgICAg
Ly8gdGhlIGNhY2hlIG1hbmFnZXIgd2lsbCBjYWxsIGludmFsaWRhdGUoKQorfQorCit2b2lkIEN1
cmxDYWNoZUVudHJ5OjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICAvLyBub3RoaW5nIHRvIGRv
IGhlcmUgeWV0Cit9CisKK3ZvaWQgQ3VybENhY2hlRW50cnk6OmdlbmVyYXRlQmFzZUZpbGVuYW1l
KENTdHJpbmcgdXJsKQoreworICAgIE1ENSBtZDU7CisgICAgbWQ1LmFkZEJ5dGVzKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHVybC5kYXRhKCkpLCB1cmwubGVuZ3RoKCkpOworCisg
ICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBzdW07CisgICAgbWQ1LmNoZWNrc3VtKHN1bSk7CisgICAg
dWludDhfdCogcmF3ZGF0YSA9IHN1bS5kYXRhKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMTY7IGkrKykKKyAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KHJhd2RhdGFbaV0sIG1fYmFz
ZW5hbWUsIExvd2VyY2FzZSk7Cit9CisKK2Jvb2wgQ3VybENhY2hlRW50cnk6OmxvYWRGaWxlVG9C
dWZmZXIoU3RyaW5nIGZpbGVwYXRoLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICAvLyBv
cGVuIHRoZSBmaWxlCisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGlucHV0RmlsZSA9IG9wZW5GaWxl
KGZpbGVwYXRoLCBPcGVuRm9yUmVhZCk7CisgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGlucHV0Rmls
ZSkpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDYWNoZSBFcnJvcjogQ291bGQgbm90IG9wZW4g
JXMgZm9yIHJlYWRcbiIsIGZpbGVwYXRoLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBsb25nIGxvbmcgZmlsZXNpemUgPSAtMTsKKyAgICBpZiAo
IWdldEZpbGVTaXplKGZpbGVwYXRoLCBmaWxlc2l6ZSkpIHsKKyAgICAgICAgTE9HKE5ldHdvcmss
ICJDYWNoZSBFcnJvcjogQ291bGQgbm90IGdldCBmaWxlIHNpemUgb2YgJXNcbiIsIGZpbGVwYXRo
LmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIGNsb3NlRmlsZShpbnB1dEZpbGUpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gbG9hZCB0aGUgZmlsZSBjb250ZW50IGlu
dG8gYnVmZmVyCisgICAgYnVmZmVyLnJlc2l6ZShmaWxlc2l6ZSk7CisgICAgaW50IGJ1ZmZlclBv
c2l0aW9uID0gMDsKKyAgICBpbnQgYnVmZmVyUmVhZFNpemUgPSA0MDk2OworICAgIGludCBieXRl
c1JlYWQgPSAwOworICAgIHdoaWxlIChmaWxlc2l6ZSA+IGJ1ZmZlclBvc2l0aW9uKSB7CisgICAg
ICAgIGlmIChmaWxlc2l6ZSAtIGJ1ZmZlclBvc2l0aW9uIDwgYnVmZmVyUmVhZFNpemUpCisgICAg
ICAgICAgICBidWZmZXJSZWFkU2l6ZSA9IGZpbGVzaXplIC0gYnVmZmVyUG9zaXRpb247CisKKyAg
ICAgICAgYnl0ZXNSZWFkID0gcmVhZEZyb21GaWxlKGlucHV0RmlsZSwgYnVmZmVyLmRhdGEoKSAr
IGJ1ZmZlclBvc2l0aW9uLCBidWZmZXJSZWFkU2l6ZSk7CisgICAgICAgIGlmIChieXRlc1JlYWQg
IT0gYnVmZmVyUmVhZFNpemUpIHsKKyAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUgRXJy
b3I6IENvdWxkIG5vdCByZWFkIGZyb20gJXNcbiIsIGZpbGVwYXRoLmxhdGluMSgpLmRhdGEoKSk7
CisgICAgICAgICAgICBjbG9zZUZpbGUoaW5wdXRGaWxlKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGJ1ZmZlclBvc2l0aW9uICs9IGJ1ZmZlclJlYWRT
aXplOworICAgIH0KKyAgICBjbG9zZUZpbGUoaW5wdXRGaWxlKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBDdXJsQ2FjaGVFbnRyeTo6aW52YWxpZGF0ZSgpCit7CisgICAgZGVsZXRlRmls
ZShtX2hlYWRlckZpbGVuYW1lKTsKKyAgICBkZWxldGVGaWxlKG1fY29udGVudEZpbGVuYW1lKTsK
KyAgICBMT0coTmV0d29yaywgIkNhY2hlOiBpbnZhbGlkYXRlZCAlc1xuIiwgbV9iYXNlbmFtZS5s
YXRpbjEoKS5kYXRhKCkpOworfQorCitib29sIEN1cmxDYWNoZUVudHJ5OjpwYXJzZVJlc3BvbnNl
SGVhZGVycyhSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBkb3VibGUgbGFzdE1v
ZGlmaWNhdGlvbkRhdGUgPSAwOworICAgIGRvdWJsZSByZXNwb25zZURhdGUgPSAwOworICAgIGRv
dWJsZSBleHBpcmF0aW9uRGF0ZSA9IDA7CisgICAgZG91YmxlIG1heEFnZSA9IDA7CisgICAgYm9v
bCBtYXhBZ2VJc1ZhbGlkID0gZmFsc2U7CisKKyAgICBkb3VibGUgZmlsZVRpbWU7CisgICAgdGlt
ZV90IGZpbGVNb2RpZmljYXRpb25EYXRlOworICAgIGlmIChnZXRGaWxlTW9kaWZpY2F0aW9uVGlt
ZShtX2hlYWRlckZpbGVuYW1lLCBmaWxlTW9kaWZpY2F0aW9uRGF0ZSkpIHsKKyAgICAgICAgZmls
ZVRpbWUgPSBkaWZmdGltZShmaWxlTW9kaWZpY2F0aW9uRGF0ZSwgMCk7CisgICAgICAgIGZpbGVU
aW1lICo9IDEwMDAuMDsKKyAgICB9IGVsc2UKKyAgICAgICAgZmlsZVRpbWUgPSBjdXJyZW50VGlt
ZU1TKCk7IC8vIEdNVAorCisgICAgaWYgKHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9D
YWNoZSgpIHx8IHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNN
dXN0UmV2YWxpZGF0ZSgpKQorICAgICAgICBtYXhBZ2UgPSAwOworICAgIGVsc2UgeworICAgICAg
ICBtYXhBZ2UgPSByZXNwb25zZS5jYWNoZUNvbnRyb2xNYXhBZ2UoKTsKKyAgICAgICAgaWYgKHN0
ZDo6aXNuYW4obWF4QWdlKSkKKyAgICAgICAgICAgIG1heEFnZSA9IDA7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1heEFnZUlzVmFsaWQgPSB0cnVlOworICAgIH0KKworCisgICAgaWYgKCFy
ZXNwb25zZS5oYXNDYWNoZVZhbGlkYXRvckZpZWxkcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBsYXN0TW9kaWZpY2F0aW9uRGF0ZSA9IHJlc3BvbnNlLmxhc3RNb2RpZmllZCgpOwor
ICAgIGlmIChzdGQ6OmlzbmFuKGxhc3RNb2RpZmljYXRpb25EYXRlKSkKKyAgICAgICAgbGFzdE1v
ZGlmaWNhdGlvbkRhdGUgPSAwOworCisgICAgcmVzcG9uc2VEYXRlID0gcmVzcG9uc2UuZGF0ZSgp
OworICAgIGlmIChzdGQ6OmlzbmFuKHJlc3BvbnNlRGF0ZSkpCisgICAgICAgIHJlc3BvbnNlRGF0
ZSA9IDA7CisKKyAgICBleHBpcmF0aW9uRGF0ZSA9IHJlc3BvbnNlLmV4cGlyZXMoKTsKKyAgICBp
ZiAoc3RkOjppc25hbihleHBpcmF0aW9uRGF0ZSkpCisgICAgICAgIGV4cGlyYXRpb25EYXRlID0g
MDsKKworICAgIGlmIChtYXhBZ2VJc1ZhbGlkKSB7CisgICAgICAgIC8vIHdoZW4gYm90aCB0aGUg
Y2FjaGUgZW50cnkgYW5kIHRoZSByZXNwb25zZSBjb250YWluIG1heC1hZ2UsIHRoZSBsZXNzZXIg
b25lIHRha2VzIHByaW9yaXR5CisgICAgICAgIGRvdWJsZSBleHBpcmVzID0gZmlsZVRpbWUgKyBt
YXhBZ2UgKiAxMDAwOworICAgICAgICBpZiAobV9leHBpcmVEYXRlID09IC0xIHx8IG1fZXhwaXJl
RGF0ZSA+IGV4cGlyZXMpCisgICAgICAgICAgICBtX2V4cGlyZURhdGUgPSBleHBpcmVzOworICAg
IH0gZWxzZSBpZiAocmVzcG9uc2VEYXRlID4gMCAmJiBleHBpcmF0aW9uRGF0ZSA+PSByZXNwb25z
ZURhdGUpCisgICAgICAgIG1fZXhwaXJlRGF0ZSA9IGZpbGVUaW1lICsgKGV4cGlyYXRpb25EYXRl
IC0gcmVzcG9uc2VEYXRlKTsKKworICAgIC8vIGlmIHRoZXJlIHdlcmUgbm8gbGlmZXRpbWUgaW5m
b3JtYXRpb24KKyAgICBpZiAobV9leHBpcmVEYXRlID09IC0xKSB7CisgICAgICAgIGlmIChsYXN0
TW9kaWZpY2F0aW9uRGF0ZSA+IDApCisgICAgICAgICAgICBtX2V4cGlyZURhdGUgPSBmaWxlVGlt
ZSArIChmaWxlVGltZSAtIGxhc3RNb2RpZmljYXRpb25EYXRlKSAqIDAuMTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9leHBpcmVEYXRlID0gMDsKKyAgICB9CisKKworICAgIFN0cmluZyBl
dGFnID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJFVGFnIik7CisgICAgaWYgKCFldGFnLmlz
TnVsbCgpKQorICAgICAgICBtX3JlcXVlc3RIZWFkZXJzLnNldCgiSWYtTm9uZS1NYXRjaCIsIGV0
YWcpOworCisgICAgU3RyaW5nIGxhc3RNb2RpZmllZCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZCgiTGFzdC1Nb2RpZmllZCIpOworICAgIGlmICghbGFzdE1vZGlmaWVkLmlzTnVsbCgpKQorICAg
ICAgICBtX3JlcXVlc3RIZWFkZXJzLnNldCgiSWYtTW9kaWZpZWQtU2luY2UiLCBsYXN0TW9kaWZp
ZWQpOworCisgICAgaWYgKGV0YWcuaXNOdWxsKCkgJiYgbGFzdE1vZGlmaWVkLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKworICAgIG1faGVhZGVySW5NZW1vcnkgPSB0cnVlOwor
ICAgIHJldHVybiB0cnVlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjlhMTRkZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuaApAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgTWF0eWFzIE11c3RvaGEgPG1tYXR5YXNAaW5mLnUtc3plZ2VkLmh1PgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1cmxDYWNoZUVudHJ5X2gKKyNk
ZWZpbmUgQ3VybENhY2hlRW50cnlfaAorCisjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3VybENhY2hlRW50cnkgeworCitw
cml2YXRlOgorICAgIFN0cmluZyBtX2Jhc2VuYW1lOworICAgIFN0cmluZyBtX2hlYWRlckZpbGVu
YW1lOworICAgIFN0cmluZyBtX2NvbnRlbnRGaWxlbmFtZTsKKworICAgIGRvdWJsZSBtX2V4cGly
ZURhdGU7CisgICAgYm9vbCBtX2hlYWRlckluTWVtb3J5OworCisgICAgUmVzb3VyY2VSZXNwb25z
ZSBtX2NhY2hlZFJlc3BvbnNlOworICAgIEhUVFBIZWFkZXJNYXAgbV9yZXF1ZXN0SGVhZGVyczsK
KworICAgIHZvaWQgZ2VuZXJhdGVCYXNlRmlsZW5hbWUoQ1N0cmluZyB1cmwpOworICAgIGJvb2wg
bG9hZEZpbGVUb0J1ZmZlcihTdHJpbmcgZmlsZXBhdGgsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKTsK
KyAgICBib29sIGxvYWRSZXNwb25zZUhlYWRlcnMoKTsKKworcHVibGljOgorICAgIEN1cmxDYWNo
ZUVudHJ5KFN0cmluZyB1cmwsIFN0cmluZyBjYWNoZURpcik7CisgICAgfkN1cmxDYWNoZUVudHJ5
KCk7CisKKyAgICBib29sIGlzQ2FjaGVkKCk7CisgICAgYm9vbCBpc0luTWVtb3J5KCkgeyByZXR1
cm4gbV9oZWFkZXJJbk1lbW9yeTsgfQorICAgIEhUVFBIZWFkZXJNYXAqIHJlcXVlc3RIZWFkZXJz
KCk7CisKKyAgICBib29sIHNhdmVDYWNoZWREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXpl
KTsKKyAgICBib29sIGxvYWRDYWNoZWREYXRhKFJlc291cmNlSGFuZGxlKik7CisKKyAgICBib29s
IHNhdmVSZXNwb25zZUhlYWRlcnMoUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZvaWQgc2V0UmVz
cG9uc2VGcm9tQ2FjaGVkSGVhZGVycyhSZXNvdXJjZVJlc3BvbnNlJik7CisKKyAgICB2b2lkIGlu
dmFsaWRhdGUoKTsKKyAgICB2b2lkIGRpZEZhaWwoKTsKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoKTsKKworICAgIGJvb2wgcGFyc2VSZXNwb25zZUhlYWRlcnMoUmVzb3VyY2VSZXNwb25zZSYp
OworfTsKKworfQorCisjZW5kaWYgLy8gQ3VybENhY2hlRW50cnlfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNzQyY2UKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFu
YWdlci5jcHAKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5p
dmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMyBNYXR5YXMgTXVzdG9oYSA8
bW1hdHlhc0BpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdF
RCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCisKKyNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3Qu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXJsQ2FjaGVNYW5hZ2VyOjpDdXJsQ2FjaGVN
YW5hZ2VyKCkKKyAgICA6IG1fZGlzYWJsZWQodHJ1ZSkKK3sKK30KKworQ3VybENhY2hlTWFuYWdl
cjo6fkN1cmxDYWNoZU1hbmFnZXIoKQoreworICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzYXZlSW5kZXgoKTsKK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpz
ZXRDYWNoZURpcmVjdG9yeShTdHJpbmcgZGlyZWN0b3J5KQoreworICAgIG1fY2FjaGVEaXIgPSBk
aXJlY3Rvcnk7CisgICAgbV9jYWNoZURpci5hcHBlbmQoIi8iKTsKKyAgICBpZiAobV9jYWNoZURp
ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDYWNoZSBFcnJvcjogQ2FjaGUg
bG9jYXRpb24gaXMgbm90IHNldCEgQ2FjaGVNYW5hZ2VyIGRpc2FibGVkLlxuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWZpbGVFeGlzdHMobV9jYWNoZURpcikpIHsKKyAg
ICAgICAgaWYgKG1ha2VBbGxEaXJlY3RvcmllcyhtX2NhY2hlRGlyKSkgeworICAgICAgICAgICAg
TE9HKE5ldHdvcmssICJDYWNoZSBFcnJvcjogQ291bGQgbm90IG9wZW4gb3IgY3JlYXRlIGNhY2hl
IGRpcmVjdG9yeSEgQ2FjaGVNYW5hZ2VyIGRpc2FibGVkLlxuIik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2Rpc2FibGVkID0gZmFsc2U7CisgICAgbG9h
ZEluZGV4KCk7Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFuYWdlcjo6bG9hZEluZGV4KCkKK3sKKyAg
ICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGluZGV4Rmls
ZVBhdGgobV9jYWNoZURpcik7CisgICAgaW5kZXhGaWxlUGF0aC5hcHBlbmQoImluZGV4LmRhdCIp
OworCisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGluZGV4RmlsZSA9IG9wZW5GaWxlKGluZGV4Rmls
ZVBhdGgsIE9wZW5Gb3JSZWFkKTsKKyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaW5kZXhGaWxlKSkg
eworICAgICAgICBMT0coTmV0d29yaywgIkNhY2hlIFdhcm5pbmc6IENvdWxkIG5vdCBvcGVuICVz
IGZvciByZWFkXG4iLCBpbmRleEZpbGVQYXRoLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBsb25nIGxvbmcgZmlsZXNpemUgPSAtMTsKKyAgICBpZiAoIWdl
dEZpbGVTaXplKGluZGV4RmlsZVBhdGgsIGZpbGVzaXplKSkgeworICAgICAgICBMT0coTmV0d29y
aywgIkNhY2hlIEVycm9yOiBDb3VsZCBub3QgZ2V0IGZpbGUgc2l6ZSBvZiAlc1xuIiwgaW5kZXhG
aWxlUGF0aC5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gbG9hZCB0aGUgZmlsZSBjb250ZW50IGludG8gYnVmZmVyCisgICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlcjsKKyAgICBidWZmZXIucmVzaXplKGZpbGVzaXplKTsKKyAgICBpbnQgYnVmZmVyUG9zaXRp
b24gPSAwOworICAgIGludCBidWZmZXJSZWFkU2l6ZSA9IDQwOTY7CisgICAgd2hpbGUgKGZpbGVz
aXplID4gYnVmZmVyUG9zaXRpb24pIHsKKyAgICAgICAgaWYgKGZpbGVzaXplIC0gYnVmZmVyUG9z
aXRpb24gPCBidWZmZXJSZWFkU2l6ZSkKKyAgICAgICAgICAgIGJ1ZmZlclJlYWRTaXplID0gZmls
ZXNpemUgLSBidWZmZXJQb3NpdGlvbjsKKworICAgICAgICByZWFkRnJvbUZpbGUoaW5kZXhGaWxl
LCBidWZmZXIuZGF0YSgpICsgYnVmZmVyUG9zaXRpb24sIGJ1ZmZlclJlYWRTaXplKTsKKyAgICAg
ICAgYnVmZmVyUG9zaXRpb24gKz0gYnVmZmVyUmVhZFNpemU7CisgICAgfQorICAgIGNsb3NlRmls
ZShpbmRleEZpbGUpOworCisgICAgLy8gY3JlYXRlIHN0cmluZ3MgZnJvbSBidWZmZXIKKyAgICBT
dHJpbmcgaGVhZGVyQ29udGVudCA9IFN0cmluZyhidWZmZXIuZGF0YSgpKTsKKyAgICBWZWN0b3I8
U3RyaW5nPiBpbmRleFVSTHM7CisgICAgaGVhZGVyQ29udGVudC5zcGxpdCgiXG4iLCBpbmRleFVS
THMpOworICAgIGJ1ZmZlci5jbGVhcigpOworCisgICAgLy8gYWRkIGVudHJpZXMgdG8gaW5kZXgK
KyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbmRleFVSTHMuYmVnaW4o
KTsKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5kZXhVUkxzLmVu
ZCgpOworICAgIGlmIChpbmRleFVSTHMuc2l6ZSgpID4gMSkKKyAgICAgICAgLS1lbmQ7IC8vIGxh
c3QgbGluZSBpcyBlbXB0eQorICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKKyAgICAgICAgU3RyaW5n
IHVybCA9IGl0LT5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q3VybENhY2hlRW50cnk+IGNhY2hlRW50cnkobmV3IEN1cmxDYWNoZUVudHJ5KHVybCwgbV9jYWNo
ZURpcikpOworICAgICAgICBpZiAoY2FjaGVFbnRyeS0+aXNDYWNoZWQoKSkKKyAgICAgICAgICAg
IG1faW5kZXguc2V0KHVybCwgc3RkOjptb3ZlKGNhY2hlRW50cnkpKTsKKworICAgICAgICArK2l0
OworICAgIH0KK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpzYXZlSW5kZXgoKQoreworICAg
IGlmIChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgaW5kZXhGaWxl
UGF0aChtX2NhY2hlRGlyKTsKKyAgICBpbmRleEZpbGVQYXRoLmFwcGVuZCgiaW5kZXguZGF0Iik7
CisKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgaW5kZXhGaWxlID0gb3BlbkZpbGUoaW5kZXhGaWxl
UGF0aCwgT3BlbkZvcldyaXRlKTsKKyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaW5kZXhGaWxlKSkg
eworICAgICAgICBMT0coTmV0d29yaywgIkNhY2hlIEVycm9yOiBDb3VsZCBub3Qgb3BlbiAlcyBm
b3Igd3JpdGVcbiIsIGluZGV4RmlsZVBhdGgubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Q3VybENh
Y2hlRW50cnk+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4LmJlZ2luKCk7CisgICAgSGFz
aE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX2luZGV4LmVuZCgpOworICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKKyAgICAg
ICAgQ1N0cmluZyB1cmxMYXRpbjEgPSBpdC0+a2V5LmxhdGluMSgpOworICAgICAgICB3cml0ZVRv
RmlsZShpbmRleEZpbGUsIHVybExhdGluMS5kYXRhKCksIHVybExhdGluMS5sZW5ndGgoKSk7Cisg
ICAgICAgIHdyaXRlVG9GaWxlKGluZGV4RmlsZSwgIlxuIiwgMSk7CisgICAgICAgICsraXQ7Cisg
ICAgfQorCisgICAgY2xvc2VGaWxlKGluZGV4RmlsZSk7Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFu
YWdlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiBqb2IsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBTdHJpbmcgdXJsID0gam9iLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsK
KworICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNCkKKyAgICAgICAgbG9h
ZENhY2hlZERhdGEodXJsLCBqb2IsIHJlc3BvbnNlKTsKKworICAgIGVsc2UgaWYgKHJlc3BvbnNl
Lmh0dHBTdGF0dXNDb2RlKCkgPT0gMjAwKSB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6
OnVuaXF1ZV9wdHI8Q3VybENhY2hlRW50cnk+Pjo6aXRlcmF0b3IgaXQgPSBtX2luZGV4LmZpbmQo
dXJsKTsKKyAgICAgICAgaWYgKGl0ICE9IG1faW5kZXguZW5kKCkpCisgICAgICAgICAgICBpbnZh
bGlkYXRlQ2FjaGVFbnRyeSh1cmwpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2Fj
aGVFbnRyeT4gZW50cnkobmV3IEN1cmxDYWNoZUVudHJ5KHVybCwgbV9jYWNoZURpcikpOworICAg
ICAgICBib29sIGNhY2hlYWJsZSA9IGVudHJ5LT5wYXJzZVJlc3BvbnNlSGVhZGVycyhyZXNwb25z
ZSk7CisgICAgICAgIGlmIChjYWNoZWFibGUpIHsKKyAgICAgICAgICAgIG1faW5kZXguc2V0KHVy
bCwgc3RkOjptb3ZlKGVudHJ5KSk7CisgICAgICAgICAgICBzYXZlUmVzcG9uc2VIZWFkZXJzKHVy
bCwgcmVzcG9uc2UpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5pbnZhbGlk
YXRlKCk7CisgICAgfSBlbHNlCisgICAgICAgIGludmFsaWRhdGVDYWNoZUVudHJ5KHVybCk7CisK
K30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRGaW5pc2hMb2FkaW5nKFN0cmluZyB1cmwp
Cit7CisgICAgaWYgKG1fZGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8
U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Q3VybENhY2hlRW50cnk+Pjo6aXRlcmF0b3IgaXQgPSBt
X2luZGV4LmZpbmQodXJsKTsKKyAgICBpZiAoaXQgIT0gbV9pbmRleC5lbmQoKSkKKyAgICAgICAg
aXQtPnZhbHVlLT5kaWRGaW5pc2hMb2FkaW5nKCk7Cit9CisKK2Jvb2wgQ3VybENhY2hlTWFuYWdl
cjo6aXNDYWNoZWQoU3RyaW5nIHVybCkKK3sKKyAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxDdXJs
Q2FjaGVFbnRyeT4+OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmluZCh1cmwpOworICAgIGlmIChp
dCAhPSBtX2luZGV4LmVuZCgpKSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzQ2FjaGVkKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpbnZhbGlkYXRlQ2FjaGVFbnRy
eSh1cmwpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0hUVFBIZWFkZXJNYXAqIEN1
cmxDYWNoZU1hbmFnZXI6OnJlcXVlc3RIZWFkZXJzKFN0cmluZyB1cmwpCit7CisgICAgaWYgKG1f
ZGlzYWJsZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6
dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4+OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmluZCh1
cmwpOworICAgIGlmIChpdCAhPSBtX2luZGV4LmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnZh
bHVlLT5yZXF1ZXN0SGVhZGVycygpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ3VybENh
Y2hlTWFuYWdlcjo6ZGlkUmVjZWl2ZURhdGEoU3RyaW5nIHVybCwgY29uc3QgY2hhciogZGF0YSwg
aW50IHNpemUpCit7CisgICAgaWYgKG1fZGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Q3VybENhY2hlRW50cnk+Pjo6aXRlcmF0
b3IgaXQgPSBtX2luZGV4LmZpbmQodXJsKTsKKyAgICBpZiAoaXQgIT0gbV9pbmRleC5lbmQoKSkK
KyAgICAgICAgaWYgKCFpdC0+dmFsdWUtPnNhdmVDYWNoZWREYXRhKGRhdGEsIHNpemUpKQorICAg
ICAgICAgICAgaW52YWxpZGF0ZUNhY2hlRW50cnkodXJsKTsKK30KKwordm9pZCBDdXJsQ2FjaGVN
YW5hZ2VyOjpzYXZlUmVzcG9uc2VIZWFkZXJzKFN0cmluZyB1cmwsIFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEN1cmxDYWNoZUVudHJ5Pj46Oml0ZXJh
dG9yIGl0ID0gbV9pbmRleC5maW5kKHVybCk7CisgICAgaWYgKGl0ICE9IG1faW5kZXguZW5kKCkp
CisgICAgICAgIGlmICghaXQtPnZhbHVlLT5zYXZlUmVzcG9uc2VIZWFkZXJzKHJlc3BvbnNlKSkK
KyAgICAgICAgICAgIGludmFsaWRhdGVDYWNoZUVudHJ5KHVybCk7Cit9CisKK3ZvaWQgQ3VybENh
Y2hlTWFuYWdlcjo6aW52YWxpZGF0ZUNhY2hlRW50cnkoU3RyaW5nIHVybCkKK3sKKyAgICBpZiAo
bV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6
dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4+OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmluZCh1
cmwpOworICAgIGlmIChpdCAhPSBtX2luZGV4LmVuZCgpKSB7CisgICAgICAgIGl0LT52YWx1ZS0+
aW52YWxpZGF0ZSgpOworICAgICAgICBtX2luZGV4LnJlbW92ZSh1cmwpOworICAgIH0KK30KKwor
dm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRGYWlsKFN0cmluZyB1cmwpCit7CisgICAgaW52YWxp
ZGF0ZUNhY2hlRW50cnkodXJsKTsKK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpsb2FkQ2Fj
aGVkRGF0YShTdHJpbmcgdXJsLCBSZXNvdXJjZUhhbmRsZSogam9iLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKK3sKKyAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4+OjppdGVy
YXRvciBpdCA9IG1faW5kZXguZmluZCh1cmwpOworICAgIGlmIChpdCAhPSBtX2luZGV4LmVuZCgp
KSB7CisgICAgICAgIGl0LT52YWx1ZS0+c2V0UmVzcG9uc2VGcm9tQ2FjaGVkSGVhZGVycyhyZXNw
b25zZSk7CisgICAgICAgIGlmICghaXQtPnZhbHVlLT5sb2FkQ2FjaGVkRGF0YShqb2IpKQorICAg
ICAgICAgICAgaW52YWxpZGF0ZUNhY2hlRW50cnkodXJsKTsKKyAgICB9Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5h
Z2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFu
YWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWIwMDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENh
Y2hlTWFuYWdlci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
VW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMyBNYXR5YXMgTXVzdG9o
YSA8bW1hdHlhc0BpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBT
WkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNa
RUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ3VybENhY2hlTWFuYWdlcl9oCisjZGVmaW5lIEN1cmxDYWNoZU1hbmFnZXJf
aAorCisjaW5jbHVkZSAiQ3VybENhY2hlRW50cnkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEN1cmxDYWNoZU1hbmFnZXIgeworCitwcml2YXRlOgorICAgIEN1cmxDYWNo
ZU1hbmFnZXIoKTsKKyAgICB+Q3VybENhY2hlTWFuYWdlcigpOworICAgIEN1cmxDYWNoZU1hbmFn
ZXIoQ3VybENhY2hlTWFuYWdlciBjb25zdCAmKTsKKyAgICB2b2lkIG9wZXJhdG9yPShDdXJsQ2Fj
aGVNYW5hZ2VyIGNvbnN0ICYpOworCisgICAgU3RyaW5nIG1fY2FjaGVEaXI7CisgICAgSGFzaE1h
cDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4+IG1faW5kZXg7CisgICAg
Ym9vbCBtX2Rpc2FibGVkOworCisgICAgdm9pZCBzYXZlSW5kZXgoKTsKKyAgICB2b2lkIGxvYWRJ
bmRleCgpOworCisgICAgdm9pZCBzYXZlUmVzcG9uc2VIZWFkZXJzKFN0cmluZywgUmVzb3VyY2VS
ZXNwb25zZSYpOworICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlRW50cnkoU3RyaW5nKTsKKyAgICB2
b2lkIGxvYWRDYWNoZWREYXRhKFN0cmluZywgUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlc3Bv
bnNlJik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ3VybENhY2hlTWFuYWdlciAmIGdldEluc3Rh
bmNlKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBDdXJsQ2FjaGVNYW5hZ2VyIGluc3RhbmNlOwor
ICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAgfQorCisgICAgU3RyaW5nIGdldENhY2hlRGly
ZWN0b3J5KCkgeyByZXR1cm4gbV9jYWNoZURpcjsgfQorICAgIHZvaWQgc2V0Q2FjaGVEaXJlY3Rv
cnkoU3RyaW5nKTsKKworICAgIGJvb2wgaXNDYWNoZWQoU3RyaW5nKTsKKyAgICBIVFRQSGVhZGVy
TWFwKiByZXF1ZXN0SGVhZGVycyhTdHJpbmcpOyAvLyBsb2FkIGhlYWRlcnMKKworICAgIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXNwb25zZSYpOwor
ICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3RyaW5nLCBjb25zdCBjaGFyKiwgaW50KTsgLy8gc2F2
ZSBkYXRhCisgICAgdm9pZCBkaWRGYWlsKFN0cmluZyk7CisgICAgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKFN0cmluZyk7Cit9OworCit9CisKKyNlbmRpZiAvLyBDdXJsQ2FjaGVNYW5hZ2VyX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhh
bmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlTWFuYWdlci5jcHAKaW5kZXggZDgxMjFhMi4uZWQ4MWRjZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFu
YWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlTWFuYWdlci5jcHAKQEAgLTksNiArOSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQnJlbnQgRnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAxMyBQZXRlciBHYWwgPGdhbHBldGVyQGluZi51LXN6ZWdlZC5odT4sIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWxleCBDaHJpc3RlbnNlbiA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTWF0eWFzIE11c3RvaGEgPG1t
YXR5YXNAaW5mLnUtc3plZ2VkLmh1PiwgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOCw2ICszOSw3IEBACiAKICNpbmNs
dWRlICJDb29raWVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKKyNp
bmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRGF0YVVSTC5oIgogI2luY2x1
ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtMjE4
LDggKzIyMCwxMCBAQCBzdGF0aWMgc2l6ZV90IHdyaXRlQ2FsbGJhY2sodm9pZCogcHRyLCBzaXpl
X3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogCiAgICAgaWYgKGQtPm1fbXVsdGlw
YXJ0SGFuZGxlKQogICAgICAgICBkLT5tX211bHRpcGFydEhhbmRsZS0+Y29udGVudFJlY2VpdmVk
KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCB0b3RhbFNpemUpOwotICAgIGVsc2UgaWYg
KGQtPmNsaWVudCgpKQorICAgIGVsc2UgaWYgKGQtPmNsaWVudCgpKSB7CiAgICAgICAgIGQtPmNs
aWVudCgpLT5kaWRSZWNlaXZlRGF0YShqb2IsIHN0YXRpY19jYXN0PGNoYXIqPihwdHIpLCB0b3Rh
bFNpemUsIDApOworICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZFJl
Y2VpdmVEYXRhKGpvYi0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCksIHN0YXRpY19jYXN0
PGNoYXIqPihwdHIpLCB0b3RhbFNpemUpOworICAgIH0KIAogICAgIHJldHVybiB0b3RhbFNpemU7
CiB9CkBAIC00MjksOCArNDMzLDEwIEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hh
ciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNsaWVudCkKKyAgICAgICAgaWYgKGNsaWVu
dCkgewogICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2Uoam9iLCBkLT5tX3Jl
c3BvbnNlKTsKKyAgICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlk
UmVjZWl2ZVJlc3BvbnNlKGpvYiwgZC0+bV9yZXNwb25zZSk7CisgICAgICAgIH0KICAgICAgICAg
ZC0+bV9yZXNwb25zZS5zZXRSZXNwb25zZUZpcmVkKHRydWUpOwogCiAgICAgfSBlbHNlIHsKQEAg
LTU3OCwxNiArNTg0LDIwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRp
bWVyQ2FsbGJhY2soVGltZXI8UmVzb3VyY2VIYW5kbGVNYW5hZ2VyPioKICAgICAgICAgICAgIGlm
IChkLT5tX211bHRpcGFydEhhbmRsZSkKICAgICAgICAgICAgICAgICBkLT5tX211bHRpcGFydEhh
bmRsZS0+Y29udGVudEVuZGVkKCk7CiAKLSAgICAgICAgICAgIGlmIChkLT5jbGllbnQoKSkKKyAg
ICAgICAgICAgIGlmIChkLT5jbGllbnQoKSkgewogICAgICAgICAgICAgICAgIGQtPmNsaWVudCgp
LT5kaWRGaW5pc2hMb2FkaW5nKGpvYiwgMCk7CisgICAgICAgICAgICAgICAgQ3VybENhY2hlTWFu
YWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRGaW5pc2hMb2FkaW5nKGpvYi0+Zmlyc3RSZXF1ZXN0KCku
dXJsKCkuc3RyaW5nKCkpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgY2hhciogdXJsID0gMDsKICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGQtPm1f
aGFuZGxlLCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmdXJsKTsKICNpZm5kZWYgTkRFQlVHCiAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkN1cmwgRVJST1IgZm9yIHVybD0nJXMnLCBlcnJv
cjogJyVzJ1xuIiwgdXJsLCBjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpOwog
I2VuZGlmCi0gICAgICAgICAgICBpZiAoZC0+Y2xpZW50KCkpCisgICAgICAgICAgICBpZiAoZC0+
Y2xpZW50KCkpIHsKICAgICAgICAgICAgICAgICBkLT5jbGllbnQoKS0+ZGlkRmFpbChqb2IsIFJl
c291cmNlRXJyb3IoU3RyaW5nKCksIG1zZy0+ZGF0YS5yZXN1bHQsIFN0cmluZyh1cmwpLCBTdHJp
bmcoY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpKSkpOworICAgICAgICAgICAg
ICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkRmFpbChqb2ItPmZpcnN0UmVx
dWVzdCgpLnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAg
ICAgIHJlbW92ZUZyb21DdXJsKGpvYik7CkBAIC05MzgsNiArOTQ4LDE5IEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKiBqb2IpCiAg
ICAgc3RydWN0IGN1cmxfc2xpc3QqIGhlYWRlcnMgPSAwOwogICAgIGlmIChqb2ItPmZpcnN0UmVx
dWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKS5zaXplKCkgPiAwKSB7CiAgICAgICAgIEhUVFBIZWFk
ZXJNYXAgY3VzdG9tSGVhZGVycyA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRlckZpZWxk
cygpOworCisgICAgICAgIGlmIChDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmlzQ2Fj
aGVkKHVybCkpIHsKKyAgICAgICAgICAgIEhUVFBIZWFkZXJNYXAqIHJlcXVlc3RIZWFkZXJzID0g
Q3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5yZXF1ZXN0SGVhZGVycyh1cmwpOworCisg
ICAgICAgICAgICAvLyBhcHBlbmQgYWRkaXRpb25hbCBjYWNoZSBpbmZvcm1hdGlvbgorICAgICAg
ICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy0+
YmVnaW4oKTsKKyAgICAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHJlcXVlc3RIZWFkZXJzLT5lbmQoKTsKKyAgICAgICAgICAgIHdoaWxlIChpdCAhPSBlbmQpIHsK
KyAgICAgICAgICAgICAgICBjdXN0b21IZWFkZXJzLnNldChpdC0+a2V5LCBpdC0+dmFsdWUpOwor
ICAgICAgICAgICAgICAgICsraXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAg
ICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXN0b21IZWFkZXJzLmVuZCgp
OwogICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VzdG9t
SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIFN0cmluZyBr
ZXkgPSBpdC0+a2V5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDM1OTlkYTAuLmFhZDI3ZjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxMy0xMS0wNSAgTcOhdHnDoXMgTXVzdG9oYSAgPG1tYXR5YXNA
aW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFtjdXJsXSBBZGQgZmlsZSBjYWNoZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzMzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL2N1
cmwvV2ViUHJvY2Vzc0N1cmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKwogMjAxMy0xMS0wMyAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gV3JhcHBlcnMnIC1jb3B5V2l0aFpv
bmU6IHNob3VsZCBjb3B5IGlmIHRoZSBjb2xsZWN0aW9uIGlzIG11dGFibGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY3VybC9XZWJQcm9jZXNzQ3VybC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2N1cmwvV2ViUHJvY2Vzc0N1cmwuY3BwCmluZGV4IDgyZGU1
OGMuLjI4NmRkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY3VybC9X
ZWJQcm9jZXNzQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jdXJsL1dl
YlByb2Nlc3NDdXJsLmNwcApAQCAtMSw2ICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgTWF0eWFzIE11c3RvaGEgPG1tYXR5YXNAaW5mLnUtc3plZ2VkLmh1PgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJX
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29raWVN
YW5hZ2VyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DdXJsQ2FjaGVNYW5hZ2VyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9MYW5ndWFnZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ2LDYgKzQ5
LDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1DbGVhclJlc291cmNlQ2FjaGVzKFJlc291
cmNlQ2FjaGVzVG9DbGVhciBjYWNoZXNUb0NsZWFyCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYg
cGFyYW1ldGVycywgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKQogewogICAgIFdlYkNvcmU6OkNv
b2tpZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuc2V0Q29va2llSmFyUGF0aChwYXJhbWV0ZXJzLmNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkpOworCisgICAgU3RyaW5nIGNhY2hlRGlyZWN0b3J5ID0gcGFy
YW1ldGVycy5kaXNrQ2FjaGVEaXJlY3Rvcnk7CisgICAgQVNTRVJUKCFjYWNoZURpcmVjdG9yeS5p
c0VtcHR5KCkpOworICAgIFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCku
c2V0Q2FjaGVEaXJlY3RvcnkoY2FjaGVEaXJlY3RvcnkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6
OnBsYXRmb3JtVGVybWluYXRlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216164</attachid>
            <date>2013-11-06 04:47:14 -0800</date>
            <delta_ts>2013-11-08 05:35:20 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>diff-kesz.diff</filename>
            <type>text/plain</type>
            <size>37564</size>
            <attacher name="Mátyás Mustoha">mmatyas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5MmJmYjVkLi4xYWE5MzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcg
QEAKKzIwMTMtMTEtMDUgIE3DoXR5w6FzIE11c3RvaGEgIDxtbWF0eWFzQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBbY3VybF0gQWRkIGZpbGUgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzMzMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIG9uIGRpc2MgZmls
ZSBjYWNoZQorICAgICAgICBmb3IgdGhlIGN1cmwgbmV0d29yayBiYWNrZW5kLgorCisgICAgICAg
ICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxDYWNoZUVudHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJs
Q2FjaGVFbnRyeTo6Q3VybENhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hl
RW50cnk6On5DdXJsQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVFbnRy
eTo6aXNDYWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnJlcXVlc3RI
ZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5OjpzYXZlQ2FjaGVkRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVFbnRyeTo6bG9hZENhY2hlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnNhdmVSZXNwb25zZUhlYWRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmxvYWRSZXNwb25zZUhlYWRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnNldFJlc3BvbnNlRnJvbUNhY2hlZEhl
YWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmRpZEZhaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmdlbmVyYXRlQmFzZUZpbGVuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5Ojpsb2FkRmlsZVRvQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxDYWNoZUVudHJ5OjpwYXJzZVJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybENhY2hlRW50cnk6OmlzSW5NZW1vcnkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXJsQ2FjaGVNYW5hZ2VyOjpDdXJsQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxDYWNoZU1hbmFnZXI6On5DdXJsQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxDYWNoZU1hbmFnZXI6OnNldENhY2hlRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxDYWNoZU1hbmFnZXI6OmxvYWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVN
YW5hZ2VyOjpzYXZlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6
aXNDYWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6cmVxdWVzdEhl
YWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6ZGlkUmVjZWl2ZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6c2F2ZVJlc3BvbnNlSGVh
ZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjppbnZhbGlkYXRlQ2Fj
aGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmxvYWRDYWNoZWREYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmdldENhY2hlRGlyZWN0b3J5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6aGVhZGVy
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3du
bG9hZFRpbWVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5h
Z2VyOjppbml0aWFsaXplSGFuZGxlKToKKwogMjAxMy0xMS0wNCAgQmVtIEpvbmVzLUJleSAgPGJq
b25lc2JlQGFkb2JlLmNvbT4KIAogICAgICAgICBbY3NzIHNoYXBlc10gRml4IHN1cHBvcnQgZm9y
IHNoYXBlLW91dHNpZGUgb24gYSBmbG9hdCB3aXRoIHBhZGRpbmcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IGRkYzE2MDkuLjAyMmNiMTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpA
QCAtODE3OCw2ICs4MTc4LDE4IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXEN1cmxDYWNoZUVudHJ5LmNwcCI+CisgICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29t
cGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxD
dXJsQ2FjaGVNYW5hZ2VyLmNwcCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsRG93bmxvYWQuY3BwIj4KICAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTE5MjUwLDYgKzE5MjYyLDE4IEBA
CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgog
ICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDdXN0b21CdWlsZFN0ZXAgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cbmV0d29ya1xjdXJsXEN1cmxDYWNoZU1hbmFnZXIuaCI+CisgICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdT
dWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh
c2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rp
b258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0N1c3RvbUJ1aWxkU3Rl
cD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3Vy
bFxDdXJsQ2FjaGVFbnRyeS5oIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhj
bHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgorICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgogICAgIDxDdXN0b21CdWlsZFN0
ZXAgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXEZvcm1EYXRhU3RyZWFtQ3VybC5o
Ij4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAg
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVy
cyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVy
cwppbmRleCBlMTBmOGQxLi42YmRiZDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0xODk5LDYgKzE4OTks
MTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxD
cmVkZW50aWFsU3RvcmFnZUN1cmwuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29y
a1xjdXJsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcQ3VybENhY2hlRW50cnkuY3BwIj4KKyAgICAgIDxG
aWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcQ3VybENhY2hl
TWFuYWdlci5jcHAiPgorICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRl
cj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XG5ldHdvcmtcY3VybFxDdXJsRG93bmxvYWQuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1c
bmV0d29ya1xjdXJsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xNDkwMyw2ICsxNDkw
OSwxMiBAQAogICAgIDxDdXN0b21CdWlsZFN0ZXAgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29y
a1xjdXJsXEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9y
bVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3Vz
dG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsQ2FjaGVF
bnRyeS5oIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+Cisg
ICAgPC9DdXN0b21CdWlsZFN0ZXA+CisgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxuZXR3b3JrXGN1cmxcQ3VybENhY2hlTWFuYWdlci5oIj4KKyAgICAgIDxGaWx0ZXI+
cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CiAg
ICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcRm9y
bURhdGFTdHJlYW1DdXJsLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8
L0ZpbHRlcj4KICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MGY5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50cnkuY3BwCkBAIC0w
LDAgKzEsMzQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkN1cmxDYWNoZUVudHJ5LmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CisjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCisj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVy
bmFsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9E
YXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvTUQ1
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3VybENhY2hlRW50cnk6OkN1cmxDYWNoZUVu
dHJ5KFN0cmluZyB1cmwsIFN0cmluZyBjYWNoZURpcikKKyAgICA6IG1faGVhZGVyRmlsZW5hbWUo
Y2FjaGVEaXIpCisgICAgLCBtX2NvbnRlbnRGaWxlbmFtZShjYWNoZURpcikKKyAgICAsIG1fZXhw
aXJlRGF0ZSgtMSkKKyAgICAsIG1faGVhZGVySW5NZW1vcnkoZmFsc2UpCit7CisgICAgZ2VuZXJh
dGVCYXNlRmlsZW5hbWUodXJsLmxhdGluMSgpKTsKKworICAgIG1faGVhZGVyRmlsZW5hbWUuYXBw
ZW5kKG1fYmFzZW5hbWUpOworICAgIG1faGVhZGVyRmlsZW5hbWUuYXBwZW5kKCIuaGVhZGVyIik7
CisKKyAgICBtX2NvbnRlbnRGaWxlbmFtZS5hcHBlbmQobV9iYXNlbmFtZSk7CisgICAgbV9jb250
ZW50RmlsZW5hbWUuYXBwZW5kKCIuY29udGVudCIpOworfQorCitDdXJsQ2FjaGVFbnRyeTo6fkN1
cmxDYWNoZUVudHJ5KCkKK3sKK30KKworLy8gY2FjaGUgbWFuYWdlciBzaG91bGQgaW52YWxpZGF0
ZSB0aGUgZW50cnkgb24gZmFsc2UKK2Jvb2wgQ3VybENhY2hlRW50cnk6OmlzQ2FjaGVkKCkKK3sK
KyAgICBpZiAoIWZpbGVFeGlzdHMobV9jb250ZW50RmlsZW5hbWUpIHx8ICFmaWxlRXhpc3RzKG1f
aGVhZGVyRmlsZW5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1faGVh
ZGVySW5NZW1vcnkpIHsKKyAgICAgICAgaWYgKCFsb2FkUmVzcG9uc2VIZWFkZXJzKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1fZXhwaXJlRGF0ZSA8IGN1
cnJlbnRUaW1lTVMoKSkgeworICAgICAgICBtX2hlYWRlckluTWVtb3J5ID0gZmFsc2U7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSFRUUEhl
YWRlck1hcCogQ3VybENhY2hlRW50cnk6OnJlcXVlc3RIZWFkZXJzKCkKK3sKKyAgICByZXR1cm4g
Jm1fcmVxdWVzdEhlYWRlcnM7Cit9CisKK2Jvb2wgQ3VybENhY2hlRW50cnk6OnNhdmVDYWNoZWRE
YXRhKGNvbnN0IGNoYXIgKmRhdGEsIGludCBzaXplKQoreworICAgIFBsYXRmb3JtRmlsZUhhbmRs
ZSBjb250ZW50RmlsZSA9IG9wZW5GaWxlKG1fY29udGVudEZpbGVuYW1lLCBPcGVuRm9yV3JpdGUp
OworICAgIGlmICghaXNIYW5kbGVWYWxpZChjb250ZW50RmlsZSkpIHsKKyAgICAgICAgTE9HKE5l
dHdvcmssICJDYWNoZSBFcnJvcjogQ291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRlXG4iLCBtX2Nv
bnRlbnRGaWxlbmFtZS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gYXBwZW5kCisgICAgc2Vla0ZpbGUoY29udGVudEZpbGUsIDAsIFNlZWtG
cm9tRW5kKTsKKyAgICB3cml0ZVRvRmlsZShjb250ZW50RmlsZSwgZGF0YSwgc2l6ZSk7CisgICAg
Y2xvc2VGaWxlKGNvbnRlbnRGaWxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDdXJs
Q2FjaGVFbnRyeTo6bG9hZENhY2hlZERhdGEoUmVzb3VyY2VIYW5kbGUgKmpvYikKK3sKKyAgICBB
U1NFUlQoam9iLT5jbGllbnQoKSk7CisKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGlm
ICghbG9hZEZpbGVUb0J1ZmZlcihtX2NvbnRlbnRGaWxlbmFtZSwgYnVmZmVyKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgam9iLT5nZXRJbnRlcm5hbCgpLT5jbGllbnQoKS0+ZGlkUmVj
ZWl2ZURhdGEoam9iLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpLCAwKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBDdXJsQ2FjaGVFbnRyeTo6c2F2ZVJlc3BvbnNlSGVhZGVycyhS
ZXNvdXJjZVJlc3BvbnNlICZyZXNwb25zZSkKK3sKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgaGVh
ZGVyRmlsZSA9IG9wZW5GaWxlKG1faGVhZGVyRmlsZW5hbWUsIE9wZW5Gb3JXcml0ZSk7CisgICAg
aWYgKCFpc0hhbmRsZVZhbGlkKGhlYWRlckZpbGUpKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAi
Q2FjaGUgRXJyb3I6IENvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0ZVxuIiwgbV9oZWFkZXJGaWxl
bmFtZS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gSGVhZGVycworICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVz
cG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7CisgICAgSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOworICAg
IHdoaWxlIChpdCAhPSBlbmQpIHsKKyAgICAgICAgU3RyaW5nIGhlYWRlckZpZWxkID0gaXQtPmtl
eTsKKyAgICAgICAgaGVhZGVyRmllbGQuYXBwZW5kKCI6ICIpOworICAgICAgICBoZWFkZXJGaWVs
ZC5hcHBlbmQoaXQtPnZhbHVlKTsKKyAgICAgICAgaGVhZGVyRmllbGQuYXBwZW5kKCJcbiIpOwor
ICAgICAgICBDU3RyaW5nIGhlYWRlckZpZWxkTGF0aW4xID0gaGVhZGVyRmllbGQubGF0aW4xKCk7
CisgICAgICAgIHdyaXRlVG9GaWxlKGhlYWRlckZpbGUsIGhlYWRlckZpZWxkTGF0aW4xLmRhdGEo
KSwgaGVhZGVyRmllbGRMYXRpbjEubGVuZ3RoKCkpOworICAgICAgICArK2l0OworICAgIH0KKwor
ICAgIGNsb3NlRmlsZShoZWFkZXJGaWxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gbG9h
ZCB0aGUgaGVhZGVycyBmcm9tIGNhY2hlIGZpbGUgaW50byBtZW1vcnkKK2Jvb2wgQ3VybENhY2hl
RW50cnk6OmxvYWRSZXNwb25zZUhlYWRlcnMoKQoreworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7
CisgICAgaWYgKCFsb2FkRmlsZVRvQnVmZmVyKG1faGVhZGVyRmlsZW5hbWUsIGJ1ZmZlcikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIGNyZWF0ZSBzdHJpbmdzIGZyb20gYnVmZmVy
CisgICAgU3RyaW5nIGhlYWRlckNvbnRlbnQgPSBTdHJpbmcoYnVmZmVyLmRhdGEoKSk7CisgICAg
VmVjdG9yPFN0cmluZz4gaGVhZGVyRmllbGRzOworICAgIGhlYWRlckNvbnRlbnQuc3BsaXQoIlxu
IiwgaGVhZGVyRmllbGRzKTsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGhlYWRlckZpZWxkcy5iZWdpbigpOworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBoZWFkZXJGaWVsZHMuZW5kKCk7CisgICAgd2hpbGUgKGl0ICE9IGVuZCkgewor
ICAgICAgICBzaXplX3Qgc3BsaXRQb3NpdGlvbiA9IGl0LT5maW5kKCI6Iik7CisgICAgICAgIGlm
IChzcGxpdFBvc2l0aW9uICE9IG5vdEZvdW5kKQorICAgICAgICAgICAgbV9jYWNoZWRSZXNwb25z
ZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmxlZnQoc3BsaXRQb3NpdGlvbiksIGl0LT5zdWJzdHJp
bmcoc3BsaXRQb3NpdGlvbisxKS5zdHJpcFdoaXRlU3BhY2UoKSk7CisgICAgICAgICsraXQ7Cisg
ICAgfQorCisgICAgcmV0dXJuIHBhcnNlUmVzcG9uc2VIZWFkZXJzKG1fY2FjaGVkUmVzcG9uc2Up
OworfQorCisvLyBzZXQgcmVzcG9uc2UgaGVhZGVycyBmcm9tIG1lbW9yeQordm9pZCBDdXJsQ2Fj
aGVFbnRyeTo6c2V0UmVzcG9uc2VGcm9tQ2FjaGVkSGVhZGVycyhSZXNvdXJjZVJlc3BvbnNlICZy
ZXNwb25zZSkKK3sKKyAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSgzMDQpOworICAgIHJl
c3BvbnNlLnNldFdhc0NhY2hlZCh0cnVlKTsKKworICAgIC8vIEludGVncmF0ZSB0aGUgaGVhZGVy
cyBpbiB0aGUgcmVzcG9uc2Ugd2l0aCB0aGUgY2FjaGVkIG9uZXMuCisgICAgSFRUUEhlYWRlck1h
cCBjYWNoZWRSZXNwb25zZUhlYWRlcnMgPSBtX2NhY2hlZFJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZHMoKTsKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGNhY2hlZFJlc3Bv
bnNlSGVhZGVycy5iZWdpbigpOworICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGNhY2hlZFJlc3BvbnNlSGVhZGVycy5lbmQoKTsKKyAgICB3aGlsZSAoaXQgIT0gZW5kKSB7
CisgICAgICAgIGlmIChyZXNwb25zZS5odHRwSGVhZGVyRmllbGQoaXQtPmtleSkuaXNOdWxsKCkp
CisgICAgICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmtleSwgaXQtPnZh
bHVlKTsKKyAgICAgICAgKytpdDsKKyAgICB9CisKKyAgICAvLyBUcnkgdG8gcGFyc2UgZXhwZWN0
ZWQgY29udGVudCBsZW5ndGgKKyAgICBsb25nIGxvbmcgY29udGVudExlbmd0aCA9IC0xOworICAg
IGlmICghcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50LUxlbmd0aCIpLmlzTnVsbCgp
KSB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBsb25nIGxvbmcgcGFy
c2VkQ29udGVudExlbmd0aCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1MZW5n
dGgiKS50b0ludDY0KCZzdWNjZXNzKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgICAg
ICBjb250ZW50TGVuZ3RoID0gcGFyc2VkQ29udGVudExlbmd0aDsKKyAgICB9CisgICAgcmVzcG9u
c2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGNvbnRlbnRMZW5ndGgpOyAvLyAtMSBvbiBwYXJz
ZSBlcnJvciBvciBudWxsCisKKyAgICByZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5
cGVGcm9tTWVkaWFUeXBlKHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikp
KTsKKyAgICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1l
ZGlhVHlwZShyZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIpKSk7CisgICAg
cmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5hbWUoZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNw
b3NpdGlvbihyZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtRGlzcG9zaXRpb24iKSkp
OworfQorCit2b2lkIEN1cmxDYWNoZUVudHJ5OjpkaWRGYWlsKCkKK3sKKyAgICAvLyB0aGUgY2Fj
aGUgbWFuYWdlciB3aWxsIGNhbGwgaW52YWxpZGF0ZSgpCit9CisKK3ZvaWQgQ3VybENhY2hlRW50
cnk6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIC8vIG5vdGhpbmcgdG8gZG8gaGVyZSB5ZXQK
K30KKwordm9pZCBDdXJsQ2FjaGVFbnRyeTo6Z2VuZXJhdGVCYXNlRmlsZW5hbWUoQ1N0cmluZyB1
cmwpCit7CisgICAgTUQ1IG1kNTsKKyAgICBtZDUuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4odXJsLmRhdGEoKSksIHVybC5sZW5ndGgoKSk7CisKKyAgICBWZWN0b3I8
dWludDhfdCwgMTY+IHN1bTsKKyAgICBtZDUuY2hlY2tzdW0oc3VtKTsKKyAgICB1aW50OF90KiBy
YXdkYXRhID0gc3VtLmRhdGEoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxNjsg
aSsrKQorICAgICAgICBhcHBlbmRCeXRlQXNIZXgocmF3ZGF0YVtpXSwgbV9iYXNlbmFtZSwgTG93
ZXJjYXNlKTsKK30KKworYm9vbCBDdXJsQ2FjaGVFbnRyeTo6bG9hZEZpbGVUb0J1ZmZlcihTdHJp
bmcgZmlsZXBhdGgsIFZlY3RvcjxjaGFyPiAmYnVmZmVyKQoreworICAgIC8vIG9wZW4gdGhlIGZp
bGUKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgaW5wdXRGaWxlID0gb3BlbkZpbGUoZmlsZXBhdGgs
IE9wZW5Gb3JSZWFkKTsKKyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaW5wdXRGaWxlKSkgeworICAg
ICAgICBMT0coTmV0d29yaywgIkNhY2hlIEVycm9yOiBDb3VsZCBub3Qgb3BlbiAlcyBmb3IgcmVh
ZFxuIiwgZmlsZXBhdGgubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGxvbmcgbG9uZyBmaWxlc2l6ZSA9IC0xOworICAgIGlmICghZ2V0RmlsZVNp
emUoZmlsZXBhdGgsIGZpbGVzaXplKSkgeworICAgICAgICBMT0coTmV0d29yaywgIkNhY2hlIEVy
cm9yOiBDb3VsZCBub3QgZ2V0IGZpbGUgc2l6ZSBvZiAlc1xuIiwgZmlsZXBhdGgubGF0aW4xKCku
ZGF0YSgpKTsKKyAgICAgICAgY2xvc2VGaWxlKGlucHV0RmlsZSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBsb2FkIHRoZSBmaWxlIGNvbnRlbnQgaW50byBidWZmZXIK
KyAgICBidWZmZXIucmVzaXplKGZpbGVzaXplKTsKKyAgICBpbnQgYnVmZmVyUG9zaXRpb24gPSAw
OworICAgIGludCBidWZmZXJSZWFkU2l6ZSA9IDQwOTY7CisgICAgaW50IGJ5dGVzUmVhZCA9IDA7
CisgICAgd2hpbGUgKGZpbGVzaXplID4gYnVmZmVyUG9zaXRpb24pIHsKKyAgICAgICAgaWYgKGZp
bGVzaXplIC0gYnVmZmVyUG9zaXRpb24gPCBidWZmZXJSZWFkU2l6ZSkKKyAgICAgICAgICAgIGJ1
ZmZlclJlYWRTaXplID0gZmlsZXNpemUgLSBidWZmZXJQb3NpdGlvbjsKKworICAgICAgICBieXRl
c1JlYWQgPSByZWFkRnJvbUZpbGUoaW5wdXRGaWxlLCBidWZmZXIuZGF0YSgpICsgYnVmZmVyUG9z
aXRpb24sIGJ1ZmZlclJlYWRTaXplKTsKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCAhPSBidWZmZXJS
ZWFkU2l6ZSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJDYWNoZSBFcnJvcjogQ291bGQg
bm90IHJlYWQgZnJvbSAlc1xuIiwgZmlsZXBhdGgubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGNsb3NlRmlsZShpbnB1dEZpbGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgYnVmZmVyUG9zaXRpb24gKz0gYnVmZmVyUmVhZFNpemU7CisgICAg
fQorICAgIGNsb3NlRmlsZShpbnB1dEZpbGUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IEN1cmxDYWNoZUVudHJ5OjppbnZhbGlkYXRlKCkKK3sKKyAgICBkZWxldGVGaWxlKG1faGVhZGVy
RmlsZW5hbWUpOworICAgIGRlbGV0ZUZpbGUobV9jb250ZW50RmlsZW5hbWUpOworICAgIExPRyhO
ZXR3b3JrLCAiQ2FjaGU6IGludmFsaWRhdGVkICVzXG4iLCBtX2Jhc2VuYW1lLmxhdGluMSgpLmRh
dGEoKSk7Cit9CisKK2Jvb2wgQ3VybENhY2hlRW50cnk6OnBhcnNlUmVzcG9uc2VIZWFkZXJzKFJl
c291cmNlUmVzcG9uc2UgJnJlc3BvbnNlKQoreworICAgIGRvdWJsZSBsYXN0TW9kaWZpY2F0aW9u
RGF0ZSA9IDA7CisgICAgZG91YmxlIHJlc3BvbnNlRGF0ZSA9IDA7CisgICAgZG91YmxlIGV4cGly
YXRpb25EYXRlID0gMDsKKyAgICBkb3VibGUgbWF4QWdlID0gMDsKKyAgICBib29sIG1heEFnZUlz
VmFsaWQgPSBmYWxzZTsKKworICAgIGRvdWJsZSBmaWxlVGltZTsKKyAgICB0aW1lX3QgZmlsZU1v
ZGlmaWNhdGlvbkRhdGU7CisgICAgaWYgKGdldEZpbGVNb2RpZmljYXRpb25UaW1lKG1faGVhZGVy
RmlsZW5hbWUsIGZpbGVNb2RpZmljYXRpb25EYXRlKSkgeworICAgICAgICBmaWxlVGltZSA9IGRp
ZmZ0aW1lKGZpbGVNb2RpZmljYXRpb25EYXRlLCAwKTsKKyAgICAgICAgZmlsZVRpbWUgKj0gMTAw
MC4wOworICAgIH0gZWxzZQorICAgICAgICBmaWxlVGltZSA9IGN1cnJlbnRUaW1lTVMoKTsgLy8g
R01UCisKKyAgICBpZiAocmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgfHwg
cmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChyZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlk
YXRlKCkpCisgICAgICAgIG1heEFnZSA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIG1heEFnZSA9
IHJlc3BvbnNlLmNhY2hlQ29udHJvbE1heEFnZSgpOworICAgICAgICBpZiAoc3RkOjppc25hbiht
YXhBZ2UpKQorICAgICAgICAgICAgbWF4QWdlID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbWF4QWdlSXNWYWxpZCA9IHRydWU7CisgICAgfQorCisKKyAgICBpZiAoIXJlc3BvbnNlLmhh
c0NhY2hlVmFsaWRhdG9yRmllbGRzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGxh
c3RNb2RpZmljYXRpb25EYXRlID0gcmVzcG9uc2UubGFzdE1vZGlmaWVkKCk7CisgICAgaWYgKHN0
ZDo6aXNuYW4obGFzdE1vZGlmaWNhdGlvbkRhdGUpKQorICAgICAgICBsYXN0TW9kaWZpY2F0aW9u
RGF0ZSA9IDA7CisKKyAgICByZXNwb25zZURhdGUgPSByZXNwb25zZS5kYXRlKCk7CisgICAgaWYg
KHN0ZDo6aXNuYW4ocmVzcG9uc2VEYXRlKSkKKyAgICAgICAgcmVzcG9uc2VEYXRlID0gMDsKKwor
ICAgIGV4cGlyYXRpb25EYXRlID0gcmVzcG9uc2UuZXhwaXJlcygpOworICAgIGlmIChzdGQ6Omlz
bmFuKGV4cGlyYXRpb25EYXRlKSkKKyAgICAgICAgZXhwaXJhdGlvbkRhdGUgPSAwOworCisgICAg
aWYgKG1heEFnZUlzVmFsaWQpIHsKKyAgICAgICAgLy8gd2hlbiBib3RoIHRoZSBjYWNoZSBlbnRy
eSBhbmQgdGhlIHJlc3BvbnNlIGNvbnRhaW4gbWF4LWFnZSwgdGhlIGxlc3NlciBvbmUgdGFrZXMg
cHJpb3JpdHkKKyAgICAgICAgZG91YmxlIGV4cGlyZXMgPSBmaWxlVGltZSArIG1heEFnZSAqIDEw
MDA7CisgICAgICAgIGlmIChtX2V4cGlyZURhdGUgPT0gLTEgfHwgbV9leHBpcmVEYXRlID4gZXhw
aXJlcykKKyAgICAgICAgICAgIG1fZXhwaXJlRGF0ZSA9IGV4cGlyZXM7CisgICAgfSBlbHNlIGlm
IChyZXNwb25zZURhdGUgPiAwICYmIGV4cGlyYXRpb25EYXRlID49IHJlc3BvbnNlRGF0ZSkKKyAg
ICAgICAgbV9leHBpcmVEYXRlID0gZmlsZVRpbWUgKyAoZXhwaXJhdGlvbkRhdGUgLSByZXNwb25z
ZURhdGUpOworCisgICAgLy8gaWYgdGhlcmUgd2VyZSBubyBsaWZldGltZSBpbmZvcm1hdGlvbgor
ICAgIGlmIChtX2V4cGlyZURhdGUgPT0gLTEpIHsKKyAgICAgICAgaWYgKGxhc3RNb2RpZmljYXRp
b25EYXRlID4gMCkKKyAgICAgICAgICAgIG1fZXhwaXJlRGF0ZSA9IGZpbGVUaW1lICsgKGZpbGVU
aW1lIC0gbGFzdE1vZGlmaWNhdGlvbkRhdGUpICogMC4xOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX2V4cGlyZURhdGUgPSAwOworICAgIH0KKworCisgICAgU3RyaW5nIGV0YWcgPSByZXNw
b25zZS5odHRwSGVhZGVyRmllbGQoIkVUYWciKTsKKyAgICBpZiAoIWV0YWcuaXNOdWxsKCkpCisg
ICAgICAgIG1fcmVxdWVzdEhlYWRlcnMuc2V0KCJJZi1Ob25lLU1hdGNoIiwgZXRhZyk7CisKKyAg
ICBTdHJpbmcgbGFzdE1vZGlmaWVkID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJMYXN0LU1v
ZGlmaWVkIik7CisgICAgaWYgKCFsYXN0TW9kaWZpZWQuaXNOdWxsKCkpCisgICAgICAgIG1fcmVx
dWVzdEhlYWRlcnMuc2V0KCJJZi1Nb2RpZmllZC1TaW5jZSIsIGxhc3RNb2RpZmllZCk7CisKKyAg
ICBpZiAoZXRhZy5pc051bGwoKSAmJiBsYXN0TW9kaWZpZWQuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworCisgICAgbV9oZWFkZXJJbk1lbW9yeSA9IHRydWU7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsQ2FjaGVFbnRyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxDYWNoZUVudHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uY2E2Mjg3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRyeS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJT
SVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDdXJsQ2FjaGVFbnRyeV9oCisjZGVmaW5lIEN1cmxDYWNoZUVu
dHJ5X2gKKworI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEN1cmxDYWNoZUVudHJ5IHsKKworcHJpdmF0ZToKKyAgICBTdHJp
bmcgbV9iYXNlbmFtZTsKKyAgICBTdHJpbmcgbV9oZWFkZXJGaWxlbmFtZTsKKyAgICBTdHJpbmcg
bV9jb250ZW50RmlsZW5hbWU7CisKKyAgICBkb3VibGUgbV9leHBpcmVEYXRlOworICAgIGJvb2wg
bV9oZWFkZXJJbk1lbW9yeTsKKworICAgIFJlc291cmNlUmVzcG9uc2UgbV9jYWNoZWRSZXNwb25z
ZTsKKyAgICBIVFRQSGVhZGVyTWFwIG1fcmVxdWVzdEhlYWRlcnM7CisKKyAgICB2b2lkIGdlbmVy
YXRlQmFzZUZpbGVuYW1lKENTdHJpbmcgdXJsKTsKKyAgICBib29sIGxvYWRGaWxlVG9CdWZmZXIo
U3RyaW5nIGZpbGVwYXRoLCBWZWN0b3I8Y2hhcj4gJmJ1ZmZlcik7CisgICAgYm9vbCBsb2FkUmVz
cG9uc2VIZWFkZXJzKCk7CisKK3B1YmxpYzoKKyAgICBDdXJsQ2FjaGVFbnRyeShTdHJpbmcgdXJs
LCBTdHJpbmcgY2FjaGVEaXIpOworICAgIH5DdXJsQ2FjaGVFbnRyeSgpOworCisgICAgYm9vbCBp
c0NhY2hlZCgpOworICAgIGJvb2wgaXNJbk1lbW9yeSgpIHsgcmV0dXJuIG1faGVhZGVySW5NZW1v
cnk7IH0KKyAgICBIVFRQSGVhZGVyTWFwKiByZXF1ZXN0SGVhZGVycygpOworCisgICAgYm9vbCBz
YXZlQ2FjaGVkRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSk7CisgICAgYm9vbCBsb2Fk
Q2FjaGVkRGF0YShSZXNvdXJjZUhhbmRsZSopOworCisgICAgYm9vbCBzYXZlUmVzcG9uc2VIZWFk
ZXJzKFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIHNldFJlc3BvbnNlRnJvbUNhY2hlZEhl
YWRlcnMoUmVzb3VyY2VSZXNwb25zZSYpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAg
dm9pZCBkaWRGYWlsKCk7CisgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CisKKyAgICBib29s
IHBhcnNlUmVzcG9uc2VIZWFkZXJzKFJlc291cmNlUmVzcG9uc2UmKTsKK307CisKK30KKworI2Vu
ZGlmIC8vIEN1cmxDYWNoZUVudHJ5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zNDhjNmJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIuY3BwCkBAIC0wLDAg
KzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisj
aW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJu
YWwuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDdXJsQ2FjaGVNYW5hZ2VyOjpDdXJsQ2FjaGVNYW5hZ2VyKCkKKyAgICA6IG1fZGlzYWJs
ZWQodHJ1ZSkKK3sKK30KKworQ3VybENhY2hlTWFuYWdlcjo6fkN1cmxDYWNoZU1hbmFnZXIoKQor
eworICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBzYXZlSW5kZXgo
KTsKK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpzZXRDYWNoZURpcmVjdG9yeShTdHJpbmcg
ZGlyZWN0b3J5KQoreworICAgIG1fY2FjaGVEaXIgPSBkaXJlY3Rvcnk7CisgICAgbV9jYWNoZURp
ci5hcHBlbmQoIi8iKTsKKyAgICBpZiAobV9jYWNoZURpci5pc0VtcHR5KCkpIHsKKyAgICAgICAg
TE9HKE5ldHdvcmssICJDYWNoZSBFcnJvcjogQ2FjaGUgbG9jYXRpb24gaXMgbm90IHNldCEgQ2Fj
aGVNYW5hZ2VyIGRpc2FibGVkLlxuIik7CisgICAgICAgIG1fZGlzYWJsZWQgPSB0cnVlOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFmaWxlRXhpc3RzKG1fY2FjaGVEaXIpKSB7
CisgICAgICAgIGlmIChtYWtlQWxsRGlyZWN0b3JpZXMobV9jYWNoZURpcikpIHsKKyAgICAgICAg
ICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUgRXJyb3I6IENvdWxkIG5vdCBvcGVuIG9yIGNyZWF0ZSBj
YWNoZSBkaXJlY3RvcnkhIENhY2hlTWFuYWdlciBkaXNhYmxlZC5cbiIpOworICAgICAgICAgICAg
bV9kaXNhYmxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtX2Rpc2FibGVkID0gZmFsc2U7CisgICAgbG9hZEluZGV4KCk7Cit9CisKK3ZvaWQg
Q3VybENhY2hlTWFuYWdlcjo6bG9hZEluZGV4KCkKK3sKKyAgICBpZiAobV9kaXNhYmxlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGluZGV4RmlsZVBhdGgobV9jYWNoZURpcik7Cisg
ICAgaW5kZXhGaWxlUGF0aC5hcHBlbmQoImluZGV4LmRhdCIpOworCisgICAgUGxhdGZvcm1GaWxl
SGFuZGxlIGluZGV4RmlsZSA9IG9wZW5GaWxlKGluZGV4RmlsZVBhdGgsIE9wZW5Gb3JSZWFkKTsK
KyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaW5kZXhGaWxlKSkgeworICAgICAgICBMT0coTmV0d29y
aywgIkNhY2hlIFdhcm5pbmc6IENvdWxkIG5vdCBvcGVuICVzIGZvciByZWFkXG4iLCBpbmRleEZp
bGVQYXRoLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBs
b25nIGxvbmcgZmlsZXNpemUgPSAtMTsKKyAgICBpZiAoIWdldEZpbGVTaXplKGluZGV4RmlsZVBh
dGgsIGZpbGVzaXplKSkgeworICAgICAgICBMT0coTmV0d29yaywgIkNhY2hlIEVycm9yOiBDb3Vs
ZCBub3QgZ2V0IGZpbGUgc2l6ZSBvZiAlc1xuIiwgaW5kZXhGaWxlUGF0aC5sYXRpbjEoKS5kYXRh
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gbG9hZCB0aGUgZmlsZSBjb250
ZW50IGludG8gYnVmZmVyCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVz
aXplKGZpbGVzaXplKTsKKyAgICBpbnQgYnVmZmVyUG9zaXRpb24gPSAwOworICAgIGludCBidWZm
ZXJSZWFkU2l6ZSA9IDQwOTY7CisgICAgd2hpbGUgKGZpbGVzaXplID4gYnVmZmVyUG9zaXRpb24p
IHsKKyAgICAgICAgaWYgKGZpbGVzaXplIC0gYnVmZmVyUG9zaXRpb24gPCBidWZmZXJSZWFkU2l6
ZSkKKyAgICAgICAgICAgIGJ1ZmZlclJlYWRTaXplID0gZmlsZXNpemUgLSBidWZmZXJQb3NpdGlv
bjsKKworICAgICAgICByZWFkRnJvbUZpbGUoaW5kZXhGaWxlLCBidWZmZXIuZGF0YSgpICsgYnVm
ZmVyUG9zaXRpb24sIGJ1ZmZlclJlYWRTaXplKTsKKyAgICAgICAgYnVmZmVyUG9zaXRpb24gKz0g
YnVmZmVyUmVhZFNpemU7CisgICAgfQorICAgIGNsb3NlRmlsZShpbmRleEZpbGUpOworCisgICAg
Ly8gY3JlYXRlIHN0cmluZ3MgZnJvbSBidWZmZXIKKyAgICBTdHJpbmcgaGVhZGVyQ29udGVudCA9
IFN0cmluZyhidWZmZXIuZGF0YSgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBpbmRleFVSTHM7Cisg
ICAgaGVhZGVyQ29udGVudC5zcGxpdCgiXG4iLCBpbmRleFVSTHMpOworICAgIGJ1ZmZlci5jbGVh
cigpOworCisgICAgLy8gYWRkIGVudHJpZXMgdG8gaW5kZXgKKyAgICBWZWN0b3I8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBpbmRleFVSTHMuYmVnaW4oKTsKKyAgICBWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5kZXhVUkxzLmVuZCgpOworICAgIGlmIChpbmRleFVS
THMuc2l6ZSgpID4gMSkKKyAgICAgICAgLS1lbmQ7IC8vIGxhc3QgbGluZSBpcyBlbXB0eQorICAg
IHdoaWxlIChpdCAhPSBlbmQpIHsKKyAgICAgICAgU3RyaW5nIHVybCA9IGl0LT5zdHJpcFdoaXRl
U3BhY2UoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3VybENhY2hlRW50cnk+IGNhY2hl
RW50cnkobmV3IEN1cmxDYWNoZUVudHJ5KHVybCwgbV9jYWNoZURpcikpOworICAgICAgICBpZiAo
Y2FjaGVFbnRyeS0+aXNDYWNoZWQoKSkKKyAgICAgICAgICAgIG1faW5kZXguc2V0KHVybCwgc3Rk
Ojptb3ZlKGNhY2hlRW50cnkpKTsKKworICAgICAgICArK2l0OworICAgIH0KK30KKwordm9pZCBD
dXJsQ2FjaGVNYW5hZ2VyOjpzYXZlSW5kZXgoKQoreworICAgIGlmIChtX2Rpc2FibGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgaW5kZXhGaWxlUGF0aChtX2NhY2hlRGlyKTsKKyAg
ICBpbmRleEZpbGVQYXRoLmFwcGVuZCgiaW5kZXguZGF0Iik7CisKKyAgICBQbGF0Zm9ybUZpbGVI
YW5kbGUgaW5kZXhGaWxlID0gb3BlbkZpbGUoaW5kZXhGaWxlUGF0aCwgT3BlbkZvcldyaXRlKTsK
KyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaW5kZXhGaWxlKSkgeworICAgICAgICBMT0coTmV0d29y
aywgIkNhY2hlIEVycm9yOiBDb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGVcbiIsIGluZGV4Rmls
ZVBhdGgubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhh
c2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Q3VybENhY2hlRW50cnk+Pjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2luZGV4LmJlZ2luKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5p
cXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2luZGV4LmVu
ZCgpOworICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKKyAgICAgICAgQ1N0cmluZyB1cmxMYXRpbjEg
PSBpdC0+a2V5LmxhdGluMSgpOworICAgICAgICB3cml0ZVRvRmlsZShpbmRleEZpbGUsIHVybExh
dGluMS5kYXRhKCksIHVybExhdGluMS5sZW5ndGgoKSk7CisgICAgICAgIHdyaXRlVG9GaWxlKGlu
ZGV4RmlsZSwgIlxuIiwgMSk7CisgICAgICAgICsraXQ7CisgICAgfQorCisgICAgY2xvc2VGaWxl
KGluZGV4RmlsZSk7Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFuYWdlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKFJlc291cmNlSGFuZGxlICpqb2IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorewor
ICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgdXJsID0g
am9iLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsKKworICAgIGlmIChyZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpID09IDMwNCkKKyAgICAgICAgbG9hZENhY2hlZERhdGEodXJsLCBqb2Is
IHJlc3BvbnNlKTsKKworICAgIGVsc2UgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0g
MjAwKSB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Q3VybENhY2hl
RW50cnk+Pjo6aXRlcmF0b3IgaXQgPSBtX2luZGV4LmZpbmQodXJsKTsKKyAgICAgICAgaWYgKGl0
ICE9IG1faW5kZXguZW5kKCkpCisgICAgICAgICAgICBpbnZhbGlkYXRlQ2FjaGVFbnRyeSh1cmwp
OworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4gZW50cnkobmV3IEN1
cmxDYWNoZUVudHJ5KHVybCwgbV9jYWNoZURpcikpOworICAgICAgICBib29sIGNhY2hlYWJsZSA9
IGVudHJ5LT5wYXJzZVJlc3BvbnNlSGVhZGVycyhyZXNwb25zZSk7CisgICAgICAgIGlmIChjYWNo
ZWFibGUpIHsKKyAgICAgICAgICAgIG1faW5kZXguc2V0KHVybCwgc3RkOjptb3ZlKGVudHJ5KSk7
CisgICAgICAgICAgICBzYXZlUmVzcG9uc2VIZWFkZXJzKHVybCwgcmVzcG9uc2UpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5pbnZhbGlkYXRlKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIGludmFsaWRhdGVDYWNoZUVudHJ5KHVybCk7CisKK30KKwordm9pZCBDdXJsQ2FjaGVN
YW5hZ2VyOjpkaWRGaW5pc2hMb2FkaW5nKFN0cmluZyB1cmwpCit7CisgICAgaWYgKG1fZGlzYWJs
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9w
dHI8Q3VybENhY2hlRW50cnk+Pjo6aXRlcmF0b3IgaXQgPSBtX2luZGV4LmZpbmQodXJsKTsKKyAg
ICBpZiAoaXQgIT0gbV9pbmRleC5lbmQoKSkKKyAgICAgICAgaXQtPnZhbHVlLT5kaWRGaW5pc2hM
b2FkaW5nKCk7Cit9CisKK2Jvb2wgQ3VybENhY2hlTWFuYWdlcjo6aXNDYWNoZWQoU3RyaW5nIHVy
bCkKK3sKKyAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
SGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4+OjppdGVyYXRv
ciBpdCA9IG1faW5kZXguZmluZCh1cmwpOworICAgIGlmIChpdCAhPSBtX2luZGV4LmVuZCgpKSB7
CisgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzQ2FjaGVkKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgICBpbnZhbGlkYXRlQ2FjaGVFbnRyeSh1cmwpOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK0hUVFBIZWFkZXJNYXAqIEN1cmxDYWNoZU1hbmFnZXI6OnJlcXVl
c3RIZWFkZXJzKFN0cmluZyB1cmwpCit7CisgICAgaWYgKG1fZGlzYWJsZWQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVF
bnRyeT4+OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmluZCh1cmwpOworICAgIGlmIChpdCAhPSBt
X2luZGV4LmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnZhbHVlLT5yZXF1ZXN0SGVhZGVycygp
OworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFuYWdlcjo6ZGlkUmVjZWl2
ZURhdGEoU3RyaW5nIHVybCwgY29uc3QgY2hhciAqZGF0YSwgaW50IHNpemUpCit7CisgICAgaWYg
KG1fZGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6
OnVuaXF1ZV9wdHI8Q3VybENhY2hlRW50cnk+Pjo6aXRlcmF0b3IgaXQgPSBtX2luZGV4LmZpbmQo
dXJsKTsKKyAgICBpZiAoaXQgIT0gbV9pbmRleC5lbmQoKSkKKyAgICAgICAgaWYgKCFpdC0+dmFs
dWUtPnNhdmVDYWNoZWREYXRhKGRhdGEsIHNpemUpKQorICAgICAgICAgICAgaW52YWxpZGF0ZUNh
Y2hlRW50cnkodXJsKTsKK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpzYXZlUmVzcG9uc2VI
ZWFkZXJzKFN0cmluZyB1cmwsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlm
IChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoTWFwPFN0cmluZywgc3Rk
Ojp1bmlxdWVfcHRyPEN1cmxDYWNoZUVudHJ5Pj46Oml0ZXJhdG9yIGl0ID0gbV9pbmRleC5maW5k
KHVybCk7CisgICAgaWYgKGl0ICE9IG1faW5kZXguZW5kKCkpCisgICAgICAgIGlmICghaXQtPnZh
bHVlLT5zYXZlUmVzcG9uc2VIZWFkZXJzKHJlc3BvbnNlKSkKKyAgICAgICAgICAgIGludmFsaWRh
dGVDYWNoZUVudHJ5KHVybCk7Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFuYWdlcjo6aW52YWxpZGF0
ZUNhY2hlRW50cnkoU3RyaW5nIHVybCkKK3sKKyAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVF
bnRyeT4+OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmluZCh1cmwpOworICAgIGlmIChpdCAhPSBt
X2luZGV4LmVuZCgpKSB7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZSgpOworICAgICAg
ICBtX2luZGV4LnJlbW92ZSh1cmwpOworICAgIH0KK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2Vy
OjpkaWRGYWlsKFN0cmluZyB1cmwpCit7CisgICAgaW52YWxpZGF0ZUNhY2hlRW50cnkodXJsKTsK
K30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpsb2FkQ2FjaGVkRGF0YShTdHJpbmcgdXJsLCBS
ZXNvdXJjZUhhbmRsZSAqam9iLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBp
ZiAobV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHN0
ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4+OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmlu
ZCh1cmwpOworICAgIGlmIChpdCAhPSBtX2luZGV4LmVuZCgpKSB7CisgICAgICAgIGl0LT52YWx1
ZS0+c2V0UmVzcG9uc2VGcm9tQ2FjaGVkSGVhZGVycyhyZXNwb25zZSk7CisgICAgICAgIGlmICgh
aXQtPnZhbHVlLT5sb2FkQ2FjaGVkRGF0YShqb2IpKQorICAgICAgICAgICAgaW52YWxpZGF0ZUNh
Y2hlRW50cnkodXJsKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzN2U1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5oCkBAIC0wLDAg
KzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDdXJsQ2FjaGVNYW5hZ2Vy
X2gKKyNkZWZpbmUgQ3VybENhY2hlTWFuYWdlcl9oCisKKyNpbmNsdWRlICJDdXJsQ2FjaGVFbnRy
eS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNw
b25zZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3VybENhY2hlTWFuYWdl
ciB7CisKK3ByaXZhdGU6CisgICAgQ3VybENhY2hlTWFuYWdlcigpOworICAgIH5DdXJsQ2FjaGVN
YW5hZ2VyKCk7CisgICAgQ3VybENhY2hlTWFuYWdlcihDdXJsQ2FjaGVNYW5hZ2VyIGNvbnN0ICYp
OworICAgIHZvaWQgb3BlcmF0b3I9KEN1cmxDYWNoZU1hbmFnZXIgY29uc3QgJik7CisKKyAgICBT
dHJpbmcgbV9jYWNoZURpcjsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEN1
cmxDYWNoZUVudHJ5Pj4gbV9pbmRleDsKKyAgICBib29sIG1fZGlzYWJsZWQ7CisKKyAgICB2b2lk
IHNhdmVJbmRleCgpOworICAgIHZvaWQgbG9hZEluZGV4KCk7CisKKyAgICB2b2lkIHNhdmVSZXNw
b25zZUhlYWRlcnMoU3RyaW5nLCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCBpbnZhbGlk
YXRlQ2FjaGVFbnRyeShTdHJpbmcpOworICAgIHZvaWQgbG9hZENhY2hlZERhdGEoU3RyaW5nLCBS
ZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVzcG9uc2UmKTsKKworcHVibGljOgorICAgIHN0YXRp
YyBDdXJsQ2FjaGVNYW5hZ2VyICYgZ2V0SW5zdGFuY2UoKQorICAgIHsKKyAgICAgICAgc3RhdGlj
IEN1cmxDYWNoZU1hbmFnZXIgaW5zdGFuY2U7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgZ2V0Q2FjaGVEaXJlY3RvcnkoKSB7IHJldHVybiBtX2NhY2hlRGly
OyB9CisgICAgdm9pZCBzZXRDYWNoZURpcmVjdG9yeShTdHJpbmcpOworCisgICAgYm9vbCBpc0Nh
Y2hlZChTdHJpbmcpOworICAgIEhUVFBIZWFkZXJNYXAqIHJlcXVlc3RIZWFkZXJzKFN0cmluZyk7
IC8vIGxvYWQgaGVhZGVycworCisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VI
YW5kbGUqLCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShTdHJp
bmcsIGNvbnN0IGNoYXIqLCBpbnQpOyAvLyBzYXZlIGRhdGEKKyAgICB2b2lkIGRpZEZhaWwoU3Ry
aW5nKTsKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3RyaW5nKTsKK307CisKK30KKworI2Vu
ZGlmIC8vIEN1cmxDYWNoZU1hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAppbmRl
eCBkODEyMWEyLi43ZjU3YmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcApAQCAtOSw2
ICs5LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3
ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDEzIFBldGVyIEdhbCA8Z2FscGV0ZXJAaW5m
LnUtc3plZ2VkLmh1PiwgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAx
MyBBbGV4IENocmlzdGVuc2VuIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM4LDYgKzM5LDcgQEAKIAogI2luY2x1ZGUgIkNvb2tpZU1h
bmFnZXIuaCIKICNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5oIgorI2luY2x1ZGUgIkN1cmxD
YWNoZU1hbmFnZXIuaCIKICNpbmNsdWRlICJEYXRhVVJMLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNl
cnMuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCkBAIC0yMTgsOCArMjIwLDEwIEBA
IHN0YXRpYyBzaXplX3Qgd3JpdGVDYWxsYmFjayh2b2lkKiBwdHIsIHNpemVfdCBzaXplLCBzaXpl
X3Qgbm1lbWIsIHZvaWQqIGRhdGEpCiAKICAgICBpZiAoZC0+bV9tdWx0aXBhcnRIYW5kbGUpCiAg
ICAgICAgIGQtPm1fbXVsdGlwYXJ0SGFuZGxlLT5jb250ZW50UmVjZWl2ZWQoc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7Ci0gICAgZWxzZSBpZiAoZC0+Y2xpZW50KCkp
CisgICAgZWxzZSBpZiAoZC0+Y2xpZW50KCkpIHsKICAgICAgICAgZC0+Y2xpZW50KCktPmRpZFJl
Y2VpdmVEYXRhKGpvYiwgc3RhdGljX2Nhc3Q8Y2hhcio+KHB0ciksIHRvdGFsU2l6ZSwgMCk7Cisg
ICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkUmVjZWl2ZURhdGEoam9i
LT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSwgc3RhdGljX2Nhc3Q8Y2hhcio+KHB0ciks
IHRvdGFsU2l6ZSk7CisgICAgfQogCiAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKIH0KQEAgLTQyOSw4
ICs0MzMsMTAgQEAgc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVf
dCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoY2xpZW50KQorICAgICAgICBpZiAoY2xpZW50KSB7CiAgICAgICAg
ICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShqb2IsIGQtPm1fcmVzcG9uc2UpOworICAg
ICAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRSZWNlaXZlUmVzcG9u
c2Uoam9iLCBkLT5tX3Jlc3BvbnNlKTsKKyAgICAgICAgfQogICAgICAgICBkLT5tX3Jlc3BvbnNl
LnNldFJlc3BvbnNlRmlyZWQodHJ1ZSk7CiAKICAgICB9IGVsc2UgewpAQCAtNTc4LDE2ICs1ODQs
MjAgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayhU
aW1lcjxSZXNvdXJjZUhhbmRsZU1hbmFnZXI+KgogICAgICAgICAgICAgaWYgKGQtPm1fbXVsdGlw
YXJ0SGFuZGxlKQogICAgICAgICAgICAgICAgIGQtPm1fbXVsdGlwYXJ0SGFuZGxlLT5jb250ZW50
RW5kZWQoKTsKIAotICAgICAgICAgICAgaWYgKGQtPmNsaWVudCgpKQorICAgICAgICAgICAgaWYg
KGQtPmNsaWVudCgpKSB7CiAgICAgICAgICAgICAgICAgZC0+Y2xpZW50KCktPmRpZEZpbmlzaExv
YWRpbmcoam9iLCAwKTsKKyAgICAgICAgICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0
YW5jZSgpLmRpZEZpbmlzaExvYWRpbmcoam9iLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmco
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjaGFyKiB1
cmwgPSAwOwogICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oZC0+bV9oYW5kbGUsIENVUkxJ
TkZPX0VGRkVDVElWRV9VUkwsICZ1cmwpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiQ3VybCBFUlJPUiBmb3IgdXJsPSclcycsIGVycm9yOiAnJXMnXG4iLCB1
cmwsIGN1cmxfZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSk7CiAjZW5kaWYKLSAgICAg
ICAgICAgIGlmIChkLT5jbGllbnQoKSkKKyAgICAgICAgICAgIGlmIChkLT5jbGllbnQoKSkgewog
ICAgICAgICAgICAgICAgIGQtPmNsaWVudCgpLT5kaWRGYWlsKGpvYiwgUmVzb3VyY2VFcnJvcihT
dHJpbmcoKSwgbXNnLT5kYXRhLnJlc3VsdCwgU3RyaW5nKHVybCksIFN0cmluZyhjdXJsX2Vhc3lf
c3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpKSk7CisgICAgICAgICAgICAgICAgQ3VybENhY2hl
TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRGYWlsKGpvYi0+Zmlyc3RSZXF1ZXN0KCkudXJsKCku
c3RyaW5nKCkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgcmVtb3ZlRnJv
bUN1cmwoam9iKTsKQEAgLTkzOCw2ICs5NDgsMTkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFn
ZXI6OmluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKICAgICBzdHJ1Y3QgY3Vy
bF9zbGlzdCogaGVhZGVycyA9IDA7CiAgICAgaWYgKGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEhl
YWRlckZpZWxkcygpLnNpemUoKSA+IDApIHsKICAgICAgICAgSFRUUEhlYWRlck1hcCBjdXN0b21I
ZWFkZXJzID0gam9iLT5maXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CisKKyAgICAg
ICAgaWYgKEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuaXNDYWNoZWQodXJsKSkgewor
ICAgICAgICAgICAgSFRUUEhlYWRlck1hcCogcmVxdWVzdEhlYWRlcnMgPSBDdXJsQ2FjaGVNYW5h
Z2VyOjpnZXRJbnN0YW5jZSgpLnJlcXVlc3RIZWFkZXJzKHVybCk7CisKKyAgICAgICAgICAgIC8v
IGFwcGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9ybWF0aW9uCisgICAgICAgICAgICBIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlcXVlc3RIZWFkZXJzLT5iZWdpbigpOworICAg
ICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRl
cnMtPmVuZCgpOworICAgICAgICAgICAgd2hpbGUgKGl0ICE9IGVuZCkgeworICAgICAgICAgICAg
ICAgIGN1c3RvbUhlYWRlcnMuc2V0KGl0LT5rZXksIGl0LT52YWx1ZSk7CisgICAgICAgICAgICAg
ICAgKytpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIEhUVFBIZWFkZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1c3RvbUhlYWRlcnMuZW5kKCk7CiAgICAgICAgIGZv
ciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXN0b21IZWFkZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgU3RyaW5nIGtleSA9IGl0LT5rZXk7
Cg==
</data>
<flag name="review"
          id="239080"
          type_id="1"
          status="-"
          setter="bfulgham"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216378</attachid>
            <date>2013-11-08 05:34:09 -0800</date>
            <delta_ts>2013-11-09 03:54:52 -0800</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>diff-kesz.diff</filename>
            <type>text/plain</type>
            <size>37576</size>
            <attacher name="Mátyás Mustoha">mmatyas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkYjA4N2QwLi45ZjkxMTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcg
QEAKKzIwMTMtMTEtMDggIE3DoXR5w6FzIE11c3RvaGEgIDxtbWF0eWFzQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBbY3VybF0gQWRkIGZpbGUgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzMzMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIG9uIGRpc2MgZmls
ZSBjYWNoZQorICAgICAgICBmb3IgdGhlIGN1cmwgbmV0d29yayBiYWNrZW5kLgorCisgICAgICAg
ICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxDYWNoZUVudHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJs
Q2FjaGVFbnRyeTo6Q3VybENhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hl
RW50cnk6On5DdXJsQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVFbnRy
eTo6aXNDYWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnJlcXVlc3RI
ZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5OjpzYXZlQ2FjaGVkRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVFbnRyeTo6bG9hZENhY2hlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnNhdmVSZXNwb25zZUhlYWRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmxvYWRSZXNwb25zZUhlYWRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnNldFJlc3BvbnNlRnJvbUNhY2hlZEhl
YWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmRpZEZhaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmdlbmVyYXRlQmFzZUZpbGVuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5Ojpsb2FkRmlsZVRvQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxDYWNoZUVudHJ5OjpwYXJzZVJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybENhY2hlRW50cnk6OmlzSW5NZW1vcnkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2Fj
aGVNYW5hZ2VyOjpDdXJsQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNo
ZU1hbmFnZXI6On5DdXJsQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNo
ZU1hbmFnZXI6OnNldENhY2hlRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNo
ZU1hbmFnZXI6OmxvYWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVNYW5hZ2Vy
OjpzYXZlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmRpZEZp
bmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6aXNDYWNo
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6cmVxdWVzdEhlYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6c2F2ZVJlc3BvbnNlSGVhZGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjppbnZhbGlkYXRlQ2FjaGVFbnRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRGYWlsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmxvYWRDYWNoZWREYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmdldENhY2hlRGlyZWN0b3J5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6aGVhZGVy
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3du
bG9hZFRpbWVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5h
Z2VyOjppbml0aWFsaXplSGFuZGxlKToKKwogMjAxMy0xMS0wNiAgQmVtIEpvbmVzLUJleSAgPGJq
b25lc2JlQGFkb2JlLmNvbT4KIAogICAgICAgICBSZW5hbWUgcmVnaW9uIGxpbmUgb2Zmc2V0IG1l
dGhvZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
CmluZGV4IDA5Y2UwOTAuLmMyYjQ0ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtODE3OCw2ICs4MTc4LDE4IEBACiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21w
aWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXEN1
cmxDYWNoZUVudHJ5LmNwcCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsQ2FjaGVNYW5hZ2VyLmNwcCI+CisgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl
bGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1
Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsRG93
bmxvYWQuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9t
QnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
QEAgLTE5MjY1LDYgKzE5Mjc3LDE4IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDdXN0
b21CdWlsZFN0ZXAgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXEN1cmxDYWNoZU1h
bmFnZXIuaCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KKyAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsQ2FjaGVFbnRyeS5oIj4KKyAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVj
dGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwvQ3VzdG9tQnVpbGRT
dGVwPgogICAgIDxDdXN0b21CdWlsZFN0ZXAgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xj
dXJsXEZvcm1EYXRhU3RyZWFtQ3VybC5oIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA1NTMzNDg5Li5mZTg0OWZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5m
aWx0ZXJzCkBAIC0xODk5LDYgKzE4OTksMTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDcmVkZW50aWFsU3RvcmFnZUN1cmwuY3BwIj4KICAgICAg
IDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcQ3VybENh
Y2hlRW50cnkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0
ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxuZXR3b3JrXGN1cmxcQ3VybENhY2hlTWFuYWdlci5jcHAiPgorICAgICAgPEZpbHRlcj5wbGF0
Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsRG93bmxvYWQuY3BwIj4K
ICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+CkBAIC0xNDkxMiw2ICsxNDkxOCwxMiBAQAogICAgIDxDdXN0b21CdWlsZFN0ZXAgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgi
PgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0N1
c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XG5ldHdvcmtcY3VybFxDdXJsQ2FjaGVFbnRyeS5oIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1c
bmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CisgICAgPEN1c3Rv
bUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcQ3VybENhY2hlTWFu
YWdlci5oIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+Cisg
ICAgPC9DdXN0b21CdWlsZFN0ZXA+CiAgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxuZXR3b3JrXGN1cmxcRm9ybURhdGFTdHJlYW1DdXJsLmgiPgogICAgICAgPEZpbHRl
cj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2Fj
aGVFbnRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENh
Y2hlRW50cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMTRhNTMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybENhY2hlRW50cnkuY3BwCkBAIC0wLDAgKzEsMzQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBT
WkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNa
RUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkN1cmxDYWNoZUVudHJ5LmgiCisK
KyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgorI2lu
Y2x1ZGUgIkhUVFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1i
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTUQ1Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3Vy
bENhY2hlRW50cnk6OkN1cmxDYWNoZUVudHJ5KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIGNhY2hlRGlyKQorICAgIDogbV9oZWFkZXJGaWxlbmFtZShjYWNoZURpcikKKyAgICAsIG1f
Y29udGVudEZpbGVuYW1lKGNhY2hlRGlyKQorICAgICwgbV9leHBpcmVEYXRlKC0xKQorICAgICwg
bV9oZWFkZXJJbk1lbW9yeShmYWxzZSkKK3sKKyAgICBnZW5lcmF0ZUJhc2VGaWxlbmFtZSh1cmwu
bGF0aW4xKCkpOworCisgICAgbV9oZWFkZXJGaWxlbmFtZS5hcHBlbmQobV9iYXNlbmFtZSk7Cisg
ICAgbV9oZWFkZXJGaWxlbmFtZS5hcHBlbmQoIi5oZWFkZXIiKTsKKworICAgIG1fY29udGVudEZp
bGVuYW1lLmFwcGVuZChtX2Jhc2VuYW1lKTsKKyAgICBtX2NvbnRlbnRGaWxlbmFtZS5hcHBlbmQo
Ii5jb250ZW50Iik7Cit9CisKK0N1cmxDYWNoZUVudHJ5Ojp+Q3VybENhY2hlRW50cnkoKQorewor
fQorCisvLyBjYWNoZSBtYW5hZ2VyIHNob3VsZCBpbnZhbGlkYXRlIHRoZSBlbnRyeSBvbiBmYWxz
ZQorYm9vbCBDdXJsQ2FjaGVFbnRyeTo6aXNDYWNoZWQoKQoreworICAgIGlmICghZmlsZUV4aXN0
cyhtX2NvbnRlbnRGaWxlbmFtZSkgfHwgIWZpbGVFeGlzdHMobV9oZWFkZXJGaWxlbmFtZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9oZWFkZXJJbk1lbW9yeSkgeworICAg
ICAgICBpZiAoIWxvYWRSZXNwb25zZUhlYWRlcnMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAobV9leHBpcmVEYXRlIDwgY3VycmVudFRpbWVNUygpKSB7Cisg
ICAgICAgIG1faGVhZGVySW5NZW1vcnkgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitIVFRQSGVhZGVyTWFwJiBDdXJsQ2FjaGVF
bnRyeTo6cmVxdWVzdEhlYWRlcnMoKQoreworICAgIHJldHVybiBtX3JlcXVlc3RIZWFkZXJzOwor
fQorCitib29sIEN1cmxDYWNoZUVudHJ5OjpzYXZlQ2FjaGVkRGF0YShjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgY29udGVudEZpbGUgPSBv
cGVuRmlsZShtX2NvbnRlbnRGaWxlbmFtZSwgT3BlbkZvcldyaXRlKTsKKyAgICBpZiAoIWlzSGFu
ZGxlVmFsaWQoY29udGVudEZpbGUpKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUgRXJy
b3I6IENvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0ZVxuIiwgbV9jb250ZW50RmlsZW5hbWUubGF0
aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGFw
cGVuZAorICAgIHNlZWtGaWxlKGNvbnRlbnRGaWxlLCAwLCBTZWVrRnJvbUVuZCk7CisgICAgd3Jp
dGVUb0ZpbGUoY29udGVudEZpbGUsIGRhdGEsIHNpemUpOworICAgIGNsb3NlRmlsZShjb250ZW50
RmlsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ3VybENhY2hlRW50cnk6OmxvYWRD
YWNoZWREYXRhKFJlc291cmNlSGFuZGxlICpqb2IpCit7CisgICAgQVNTRVJUKGpvYi0+Y2xpZW50
KCkpOworCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBpZiAoIWxvYWRGaWxlVG9CdWZm
ZXIobV9jb250ZW50RmlsZW5hbWUsIGJ1ZmZlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGpvYi0+Z2V0SW50ZXJuYWwoKS0+Y2xpZW50KCktPmRpZFJlY2VpdmVEYXRhKGpvYiwgYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSwgMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgQ3VybENhY2hlRW50cnk6OnNhdmVSZXNwb25zZUhlYWRlcnMoUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCit7CisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGhlYWRlckZpbGUgPSBvcGVuRmls
ZShtX2hlYWRlckZpbGVuYW1lLCBPcGVuRm9yV3JpdGUpOworICAgIGlmICghaXNIYW5kbGVWYWxp
ZChoZWFkZXJGaWxlKSkgeworICAgICAgICBMT0coTmV0d29yaywgIkNhY2hlIEVycm9yOiBDb3Vs
ZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGVcbiIsIG1faGVhZGVyRmlsZW5hbWUubGF0aW4xKCkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEhlYWRlcnMKKyAg
ICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZHMoKS5iZWdpbigpOworICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICB3aGlsZSAoaXQgIT0gZW5k
KSB7CisgICAgICAgIFN0cmluZyBoZWFkZXJGaWVsZCA9IGl0LT5rZXk7CisgICAgICAgIGhlYWRl
ckZpZWxkLmFwcGVuZCgiOiAiKTsKKyAgICAgICAgaGVhZGVyRmllbGQuYXBwZW5kKGl0LT52YWx1
ZSk7CisgICAgICAgIGhlYWRlckZpZWxkLmFwcGVuZCgiXG4iKTsKKyAgICAgICAgQ1N0cmluZyBo
ZWFkZXJGaWVsZExhdGluMSA9IGhlYWRlckZpZWxkLmxhdGluMSgpOworICAgICAgICB3cml0ZVRv
RmlsZShoZWFkZXJGaWxlLCBoZWFkZXJGaWVsZExhdGluMS5kYXRhKCksIGhlYWRlckZpZWxkTGF0
aW4xLmxlbmd0aCgpKTsKKyAgICAgICAgKytpdDsKKyAgICB9CisKKyAgICBjbG9zZUZpbGUoaGVh
ZGVyRmlsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ3VybENhY2hlRW50cnk6Omxv
YWRSZXNwb25zZUhlYWRlcnMoKQoreworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgaWYg
KCFsb2FkRmlsZVRvQnVmZmVyKG1faGVhZGVyRmlsZW5hbWUsIGJ1ZmZlcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFN0cmluZyBoZWFkZXJDb250ZW50ID0gU3RyaW5nKGJ1ZmZlci5k
YXRhKCkpOworICAgIFZlY3RvcjxTdHJpbmc+IGhlYWRlckZpZWxkczsKKyAgICBoZWFkZXJDb250
ZW50LnNwbGl0KCJcbiIsIGhlYWRlckZpZWxkcyk7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsKKyAgICBWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgpOworICAgIHdoaWxlIChp
dCAhPSBlbmQpIHsKKyAgICAgICAgc2l6ZV90IHNwbGl0UG9zaXRpb24gPSBpdC0+ZmluZCgiOiIp
OworICAgICAgICBpZiAoc3BsaXRQb3NpdGlvbiAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgIG1f
Y2FjaGVkUmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5sZWZ0KHNwbGl0UG9zaXRpb24p
LCBpdC0+c3Vic3RyaW5nKHNwbGl0UG9zaXRpb24rMSkuc3RyaXBXaGl0ZVNwYWNlKCkpOworICAg
ICAgICArK2l0OworICAgIH0KKworICAgIHJldHVybiBwYXJzZVJlc3BvbnNlSGVhZGVycyhtX2Nh
Y2hlZFJlc3BvbnNlKTsKK30KKworLy8gc2V0IHJlc3BvbnNlIGhlYWRlcnMgZnJvbSBtZW1vcnkK
K3ZvaWQgQ3VybENhY2hlRW50cnk6OnNldFJlc3BvbnNlRnJvbUNhY2hlZEhlYWRlcnMoUmVzb3Vy
Y2VSZXNwb25zZSAmcmVzcG9uc2UpCit7CisgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUo
MzA0KTsKKyAgICByZXNwb25zZS5zZXRXYXNDYWNoZWQodHJ1ZSk7CisKKyAgICAvLyBJbnRlZ3Jh
dGUgdGhlIGhlYWRlcnMgaW4gdGhlIHJlc3BvbnNlIHdpdGggdGhlIGNhY2hlZCBvbmVzLgorICAg
IEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZWRSZXNwb25zZS5odHRw
SGVhZGVyRmllbGRzKCkuYmVnaW4oKTsKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX2NhY2hlZFJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICB3
aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAgIGlmIChyZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
aXQtPmtleSkuaXNOdWxsKCkpCisgICAgICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmll
bGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKKyAgICAgICAgKytpdDsKKyAgICB9CisKKyAgICAvLyBU
cnkgdG8gcGFyc2UgZXhwZWN0ZWQgY29udGVudCBsZW5ndGgKKyAgICBsb25nIGxvbmcgY29udGVu
dExlbmd0aCA9IC0xOworICAgIGlmICghcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50
LUxlbmd0aCIpLmlzTnVsbCgpKSB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAg
ICAgICBsb25nIGxvbmcgcGFyc2VkQ29udGVudExlbmd0aCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZCgiQ29udGVudC1MZW5ndGgiKS50b0ludDY0KCZzdWNjZXNzKTsKKyAgICAgICAgaWYgKHN1
Y2Nlc3MpCisgICAgICAgICAgICBjb250ZW50TGVuZ3RoID0gcGFyc2VkQ29udGVudExlbmd0aDsK
KyAgICB9CisgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGNvbnRlbnRMZW5n
dGgpOyAvLyAtMSBvbiBwYXJzZSBlcnJvciBvciBudWxsCisKKyAgICByZXNwb25zZS5zZXRNaW1l
VHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZCgiQ29udGVudC1UeXBlIikpKTsKKyAgICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4
dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShyZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRl
bnQtVHlwZSIpKSk7CisgICAgcmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5hbWUoZmlsZW5hbWVG
cm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihyZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRl
bnQtRGlzcG9zaXRpb24iKSkpOworfQorCit2b2lkIEN1cmxDYWNoZUVudHJ5OjpkaWRGYWlsKCkK
K3sKKyAgICAvLyB0aGUgY2FjaGUgbWFuYWdlciB3aWxsIGNhbGwgaW52YWxpZGF0ZSgpCit9CisK
K3ZvaWQgQ3VybENhY2hlRW50cnk6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIC8vIG5vdGhp
bmcgdG8gZG8gaGVyZSB5ZXQKK30KKwordm9pZCBDdXJsQ2FjaGVFbnRyeTo6Z2VuZXJhdGVCYXNl
RmlsZW5hbWUoY29uc3QgQ1N0cmluZyYgdXJsKQoreworICAgIE1ENSBtZDU7CisgICAgbWQ1LmFk
ZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHVybC5kYXRhKCkpLCB1cmwu
bGVuZ3RoKCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBzdW07CisgICAgbWQ1LmNoZWNr
c3VtKHN1bSk7CisgICAgdWludDhfdCogcmF3ZGF0YSA9IHN1bS5kYXRhKCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KHJh
d2RhdGFbaV0sIG1fYmFzZW5hbWUsIExvd2VyY2FzZSk7Cit9CisKK2Jvb2wgQ3VybENhY2hlRW50
cnk6OmxvYWRGaWxlVG9CdWZmZXIoY29uc3QgU3RyaW5nJiBmaWxlcGF0aCwgVmVjdG9yPGNoYXI+
JiBidWZmZXIpCit7CisgICAgLy8gb3BlbiB0aGUgZmlsZQorICAgIFBsYXRmb3JtRmlsZUhhbmRs
ZSBpbnB1dEZpbGUgPSBvcGVuRmlsZShmaWxlcGF0aCwgT3BlbkZvclJlYWQpOworICAgIGlmICgh
aXNIYW5kbGVWYWxpZChpbnB1dEZpbGUpKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUg
RXJyb3I6IENvdWxkIG5vdCBvcGVuICVzIGZvciByZWFkXG4iLCBmaWxlcGF0aC5sYXRpbjEoKS5k
YXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbG9uZyBsb25nIGZp
bGVzaXplID0gLTE7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShmaWxlcGF0aCwgZmlsZXNpemUpKSB7
CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUgRXJyb3I6IENvdWxkIG5vdCBnZXQgZmlsZSBz
aXplIG9mICVzXG4iLCBmaWxlcGF0aC5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICBjbG9zZUZp
bGUoaW5wdXRGaWxlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGxv
YWQgdGhlIGZpbGUgY29udGVudCBpbnRvIGJ1ZmZlcgorICAgIGJ1ZmZlci5yZXNpemUoZmlsZXNp
emUpOworICAgIGludCBidWZmZXJQb3NpdGlvbiA9IDA7CisgICAgaW50IGJ1ZmZlclJlYWRTaXpl
ID0gNDA5NjsKKyAgICBpbnQgYnl0ZXNSZWFkID0gMDsKKyAgICB3aGlsZSAoZmlsZXNpemUgPiBi
dWZmZXJQb3NpdGlvbikgeworICAgICAgICBpZiAoZmlsZXNpemUgLSBidWZmZXJQb3NpdGlvbiA8
IGJ1ZmZlclJlYWRTaXplKQorICAgICAgICAgICAgYnVmZmVyUmVhZFNpemUgPSBmaWxlc2l6ZSAt
IGJ1ZmZlclBvc2l0aW9uOworCisgICAgICAgIGJ5dGVzUmVhZCA9IHJlYWRGcm9tRmlsZShpbnB1
dEZpbGUsIGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJQb3NpdGlvbiwgYnVmZmVyUmVhZFNpemUpOwor
ICAgICAgICBpZiAoYnl0ZXNSZWFkICE9IGJ1ZmZlclJlYWRTaXplKSB7CisgICAgICAgICAgICBM
T0coTmV0d29yaywgIkNhY2hlIEVycm9yOiBDb3VsZCBub3QgcmVhZCBmcm9tICVzXG4iLCBmaWxl
cGF0aC5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICAgICAgY2xvc2VGaWxlKGlucHV0RmlsZSk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBidWZmZXJQ
b3NpdGlvbiArPSBidWZmZXJSZWFkU2l6ZTsKKyAgICB9CisgICAgY2xvc2VGaWxlKGlucHV0Rmls
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ3VybENhY2hlRW50cnk6OmludmFsaWRh
dGUoKQoreworICAgIGRlbGV0ZUZpbGUobV9oZWFkZXJGaWxlbmFtZSk7CisgICAgZGVsZXRlRmls
ZShtX2NvbnRlbnRGaWxlbmFtZSk7CisgICAgTE9HKE5ldHdvcmssICJDYWNoZTogaW52YWxpZGF0
ZWQgJXNcbiIsIG1fYmFzZW5hbWUubGF0aW4xKCkuZGF0YSgpKTsKK30KKworYm9vbCBDdXJsQ2Fj
aGVFbnRyeTo6cGFyc2VSZXNwb25zZUhlYWRlcnMoUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgZG91YmxlIGZpbGVUaW1lOworICAgIHRpbWVfdCBmaWxlTW9kaWZpY2F0aW9uRGF0
ZTsKKworICAgIGlmIChnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX2hlYWRlckZpbGVuYW1lLCBm
aWxlTW9kaWZpY2F0aW9uRGF0ZSkpIHsKKyAgICAgICAgZmlsZVRpbWUgPSBkaWZmdGltZShmaWxl
TW9kaWZpY2F0aW9uRGF0ZSwgMCk7CisgICAgICAgIGZpbGVUaW1lICo9IDEwMDAuMDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZmlsZVRpbWUgPSBjdXJyZW50VGltZU1TKCk7IC8vIEdNVAorCisgICAg
aWYgKHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpIHx8IHJlc3BvbnNlLmNh
Y2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKwor
ICAgIGRvdWJsZSBtYXhBZ2UgPSAwOworICAgIGJvb2wgbWF4QWdlSXNWYWxpZCA9IGZhbHNlOwor
CisgICAgaWYgKHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUoKSkK
KyAgICAgICAgbWF4QWdlID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgbWF4QWdlID0gcmVzcG9u
c2UuY2FjaGVDb250cm9sTWF4QWdlKCk7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKG1heEFnZSkp
CisgICAgICAgICAgICBtYXhBZ2UgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtYXhB
Z2VJc1ZhbGlkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXJlc3BvbnNlLmhhc0NhY2hlVmFs
aWRhdG9yRmllbGRzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworCisgICAgZG91YmxlIGxh
c3RNb2RpZmljYXRpb25EYXRlID0gMDsKKyAgICBkb3VibGUgcmVzcG9uc2VEYXRlID0gMDsKKyAg
ICBkb3VibGUgZXhwaXJhdGlvbkRhdGUgPSAwOworCisgICAgbGFzdE1vZGlmaWNhdGlvbkRhdGUg
PSByZXNwb25zZS5sYXN0TW9kaWZpZWQoKTsKKyAgICBpZiAoc3RkOjppc25hbihsYXN0TW9kaWZp
Y2F0aW9uRGF0ZSkpCisgICAgICAgIGxhc3RNb2RpZmljYXRpb25EYXRlID0gMDsKKworICAgIHJl
c3BvbnNlRGF0ZSA9IHJlc3BvbnNlLmRhdGUoKTsKKyAgICBpZiAoc3RkOjppc25hbihyZXNwb25z
ZURhdGUpKQorICAgICAgICByZXNwb25zZURhdGUgPSAwOworCisgICAgZXhwaXJhdGlvbkRhdGUg
PSByZXNwb25zZS5leHBpcmVzKCk7CisgICAgaWYgKHN0ZDo6aXNuYW4oZXhwaXJhdGlvbkRhdGUp
KQorICAgICAgICBleHBpcmF0aW9uRGF0ZSA9IDA7CisKKworICAgIGlmIChtYXhBZ2VJc1ZhbGlk
KSB7CisgICAgICAgIC8vIHdoZW4gYm90aCB0aGUgY2FjaGUgZW50cnkgYW5kIHRoZSByZXNwb25z
ZSBjb250YWluIG1heC1hZ2UsIHRoZSBsZXNzZXIgb25lIHRha2VzIHByaW9yaXR5CisgICAgICAg
IGRvdWJsZSBleHBpcmVzID0gZmlsZVRpbWUgKyBtYXhBZ2UgKiAxMDAwOworICAgICAgICBpZiAo
bV9leHBpcmVEYXRlID09IC0xIHx8IG1fZXhwaXJlRGF0ZSA+IGV4cGlyZXMpCisgICAgICAgICAg
ICBtX2V4cGlyZURhdGUgPSBleHBpcmVzOworICAgIH0gZWxzZSBpZiAocmVzcG9uc2VEYXRlID4g
MCAmJiBleHBpcmF0aW9uRGF0ZSA+PSByZXNwb25zZURhdGUpCisgICAgICAgIG1fZXhwaXJlRGF0
ZSA9IGZpbGVUaW1lICsgKGV4cGlyYXRpb25EYXRlIC0gcmVzcG9uc2VEYXRlKTsKKworICAgIC8v
IGlmIHRoZXJlIHdlcmUgbm8gbGlmZXRpbWUgaW5mb3JtYXRpb24KKyAgICBpZiAobV9leHBpcmVE
YXRlID09IC0xKSB7CisgICAgICAgIGlmIChsYXN0TW9kaWZpY2F0aW9uRGF0ZSA+IDApCisgICAg
ICAgICAgICBtX2V4cGlyZURhdGUgPSBmaWxlVGltZSArIChmaWxlVGltZSAtIGxhc3RNb2RpZmlj
YXRpb25EYXRlKSAqIDAuMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9leHBpcmVEYXRl
ID0gMDsKKyAgICB9CisKKworICAgIFN0cmluZyBldGFnID0gcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkKCJFVGFnIik7CisgICAgaWYgKCFldGFnLmlzTnVsbCgpKQorICAgICAgICBtX3JlcXVlc3RI
ZWFkZXJzLnNldCgiSWYtTm9uZS1NYXRjaCIsIGV0YWcpOworCisgICAgU3RyaW5nIGxhc3RNb2Rp
ZmllZCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiTGFzdC1Nb2RpZmllZCIpOworICAgIGlm
ICghbGFzdE1vZGlmaWVkLmlzTnVsbCgpKQorICAgICAgICBtX3JlcXVlc3RIZWFkZXJzLnNldCgi
SWYtTW9kaWZpZWQtU2luY2UiLCBsYXN0TW9kaWZpZWQpOworCisgICAgaWYgKGV0YWcuaXNOdWxs
KCkgJiYgbGFzdE1vZGlmaWVkLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBtX2hlYWRlckluTWVtb3J5ID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVu
dHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlRW50
cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDVmM2FiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNo
ZUVudHJ5LmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2
ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEN1cmxDYWNoZUVudHJ5X2gKKyNkZWZpbmUgQ3VybENhY2hlRW50cnlfaAorCisjaW5jbHVkZSAi
SFRUUEhlYWRlck1hcC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q3VybENhY2hlRW50cnkgeworCitwdWJsaWM6CisgICAgQ3VybENhY2hlRW50cnkoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2FjaGVEaXIpOworICAgIH5DdXJsQ2FjaGVFbnRyeSgp
OworCisgICAgYm9vbCBpc0NhY2hlZCgpOworICAgIGNvbnN0IGJvb2wmIGlzSW5NZW1vcnkoKSB7
IHJldHVybiBtX2hlYWRlckluTWVtb3J5OyB9CisgICAgSFRUUEhlYWRlck1hcCYgcmVxdWVzdEhl
YWRlcnMoKTsKKworICAgIGJvb2wgc2F2ZUNhY2hlZERhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90KTsKKyAgICBib29sIGxvYWRDYWNoZWREYXRhKFJlc291cmNlSGFuZGxlKik7CisKKyAgICBi
b29sIHNhdmVSZXNwb25zZUhlYWRlcnMoUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZvaWQgc2V0
UmVzcG9uc2VGcm9tQ2FjaGVkSGVhZGVycyhSZXNvdXJjZVJlc3BvbnNlJik7CisKKyAgICB2b2lk
IGludmFsaWRhdGUoKTsKKyAgICB2b2lkIGRpZEZhaWwoKTsKKyAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoKTsKKworICAgIGJvb2wgcGFyc2VSZXNwb25zZUhlYWRlcnMoUmVzb3VyY2VSZXNwb25z
ZSYpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX2Jhc2VuYW1lOworICAgIFN0cmluZyBtX2hl
YWRlckZpbGVuYW1lOworICAgIFN0cmluZyBtX2NvbnRlbnRGaWxlbmFtZTsKKworICAgIGRvdWJs
ZSBtX2V4cGlyZURhdGU7CisgICAgYm9vbCBtX2hlYWRlckluTWVtb3J5OworCisgICAgUmVzb3Vy
Y2VSZXNwb25zZSBtX2NhY2hlZFJlc3BvbnNlOworICAgIEhUVFBIZWFkZXJNYXAgbV9yZXF1ZXN0
SGVhZGVyczsKKworICAgIHZvaWQgZ2VuZXJhdGVCYXNlRmlsZW5hbWUoY29uc3QgQ1N0cmluZyYg
dXJsKTsKKyAgICBib29sIGxvYWRGaWxlVG9CdWZmZXIoY29uc3QgU3RyaW5nJiBmaWxlcGF0aCwg
VmVjdG9yPGNoYXI+JiBidWZmZXIpOworICAgIGJvb2wgbG9hZFJlc3BvbnNlSGVhZGVycygpOwor
fTsKKworfQorCisjZW5kaWYgLy8gQ3VybENhY2hlRW50cnlfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OWJmNzIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdl
ci5jcHAKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVy
c2l0eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1cmxDYWNoZU1hbmFnZXIuaCIKKworI2luY2x1ZGUgIkZp
bGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjZGVm
aW5lIElPX0JVRkZFUlNJWkUgNDA5NgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1cmxDYWNo
ZU1hbmFnZXImIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMg
Q3VybENhY2hlTWFuYWdlciBpbnN0YW5jZTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK0N1
cmxDYWNoZU1hbmFnZXI6OkN1cmxDYWNoZU1hbmFnZXIoKQorICAgIDogbV9kaXNhYmxlZCh0cnVl
KQoreworICAgIC8vIGNhbGwgc2V0Q2FjaGVEaXJlY3RvcnkoKSB0byBlbmFibGUKK30KKworQ3Vy
bENhY2hlTWFuYWdlcjo6fkN1cmxDYWNoZU1hbmFnZXIoKQoreworICAgIGlmIChtX2Rpc2FibGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBzYXZlSW5kZXgoKTsKK30KKwordm9pZCBDdXJsQ2Fj
aGVNYW5hZ2VyOjpzZXRDYWNoZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKK3sK
KyAgICBtX2NhY2hlRGlyID0gZGlyZWN0b3J5OworICAgIG1fY2FjaGVEaXIuYXBwZW5kKCIvIik7
CisgICAgaWYgKG1fY2FjaGVEaXIuaXNFbXB0eSgpKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAi
Q2FjaGUgRXJyb3I6IENhY2hlIGxvY2F0aW9uIGlzIG5vdCBzZXQhIENhY2hlTWFuYWdlciBkaXNh
YmxlZC5cbiIpOworICAgICAgICBtX2Rpc2FibGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghZmlsZUV4aXN0cyhtX2NhY2hlRGlyKSkgeworICAgICAgICBpZiAo
bWFrZUFsbERpcmVjdG9yaWVzKG1fY2FjaGVEaXIpKSB7CisgICAgICAgICAgICBMT0coTmV0d29y
aywgIkNhY2hlIEVycm9yOiBDb3VsZCBub3Qgb3BlbiBvciBjcmVhdGUgY2FjaGUgZGlyZWN0b3J5
ISBDYWNoZU1hbmFnZXIgZGlzYWJsZWQuXG4iKTsKKyAgICAgICAgICAgIG1fZGlzYWJsZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9kaXNh
YmxlZCA9IGZhbHNlOworICAgIGxvYWRJbmRleCgpOworfQorCit2b2lkIEN1cmxDYWNoZU1hbmFn
ZXI6OmxvYWRJbmRleCgpCit7CisgICAgaWYgKG1fZGlzYWJsZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIFN0cmluZyBpbmRleEZpbGVQYXRoKG1fY2FjaGVEaXIpOworICAgIGluZGV4RmlsZVBh
dGguYXBwZW5kKCJpbmRleC5kYXQiKTsKKworICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBpbmRleEZp
bGUgPSBvcGVuRmlsZShpbmRleEZpbGVQYXRoLCBPcGVuRm9yUmVhZCk7CisgICAgaWYgKCFpc0hh
bmRsZVZhbGlkKGluZGV4RmlsZSkpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDYWNoZSBXYXJu
aW5nOiBDb3VsZCBub3Qgb3BlbiAlcyBmb3IgcmVhZFxuIiwgaW5kZXhGaWxlUGF0aC5sYXRpbjEo
KS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbG9uZyBsb25nIGZpbGVz
aXplID0gLTE7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShpbmRleEZpbGVQYXRoLCBmaWxlc2l6ZSkp
IHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJDYWNoZSBFcnJvcjogQ291bGQgbm90IGdldCBmaWxl
IHNpemUgb2YgJXNcbiIsIGluZGV4RmlsZVBhdGgubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIGxvYWQgdGhlIGZpbGUgY29udGVudCBpbnRvIGJ1ZmZl
cgorICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgYnVmZmVyLnJlc2l6ZShmaWxlc2l6ZSk7
CisgICAgaW50IGJ1ZmZlclBvc2l0aW9uID0gMDsKKyAgICBpbnQgYnVmZmVyUmVhZFNpemUgPSBJ
T19CVUZGRVJTSVpFOworICAgIHdoaWxlIChmaWxlc2l6ZSA+IGJ1ZmZlclBvc2l0aW9uKSB7Cisg
ICAgICAgIGlmIChmaWxlc2l6ZSAtIGJ1ZmZlclBvc2l0aW9uIDwgYnVmZmVyUmVhZFNpemUpCisg
ICAgICAgICAgICBidWZmZXJSZWFkU2l6ZSA9IGZpbGVzaXplIC0gYnVmZmVyUG9zaXRpb247CisK
KyAgICAgICAgcmVhZEZyb21GaWxlKGluZGV4RmlsZSwgYnVmZmVyLmRhdGEoKSArIGJ1ZmZlclBv
c2l0aW9uLCBidWZmZXJSZWFkU2l6ZSk7CisgICAgICAgIGJ1ZmZlclBvc2l0aW9uICs9IGJ1ZmZl
clJlYWRTaXplOworICAgIH0KKyAgICBjbG9zZUZpbGUoaW5kZXhGaWxlKTsKKworICAgIC8vIGNy
ZWF0ZSBzdHJpbmdzIGZyb20gYnVmZmVyCisgICAgU3RyaW5nIGhlYWRlckNvbnRlbnQgPSBTdHJp
bmcoYnVmZmVyLmRhdGEoKSk7CisgICAgVmVjdG9yPFN0cmluZz4gaW5kZXhVUkxzOworICAgIGhl
YWRlckNvbnRlbnQuc3BsaXQoIlxuIiwgaW5kZXhVUkxzKTsKKyAgICBidWZmZXIuY2xlYXIoKTsK
KworICAgIC8vIGFkZCBlbnRyaWVzIHRvIGluZGV4CisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaW5kZXhVUkxzLmJlZ2luKCk7CisgICAgVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGluZGV4VVJMcy5lbmQoKTsKKyAgICBpZiAoaW5kZXhVUkxzLnNp
emUoKSA+IDEpCisgICAgICAgIC0tZW5kOyAvLyBsYXN0IGxpbmUgaXMgZW1wdHkKKyAgICB3aGls
ZSAoaXQgIT0gZW5kKSB7CisgICAgICAgIFN0cmluZyB1cmwgPSBpdC0+c3RyaXBXaGl0ZVNwYWNl
KCk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEN1cmxDYWNoZUVudHJ5PiBjYWNoZUVudHJ5
KG5ldyBDdXJsQ2FjaGVFbnRyeSh1cmwsIG1fY2FjaGVEaXIpKTsKKyAgICAgICAgaWYgKGNhY2hl
RW50cnktPmlzQ2FjaGVkKCkpCisgICAgICAgICAgICBtX2luZGV4LnNldCh1cmwsIHN0ZDo6bW92
ZShjYWNoZUVudHJ5KSk7CisKKyAgICAgICAgKytpdDsKKyAgICB9Cit9CisKK3ZvaWQgQ3VybENh
Y2hlTWFuYWdlcjo6c2F2ZUluZGV4KCkKK3sKKyAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgU3RyaW5nIGluZGV4RmlsZVBhdGgobV9jYWNoZURpcik7CisgICAgaW5k
ZXhGaWxlUGF0aC5hcHBlbmQoImluZGV4LmRhdCIpOworCisgICAgUGxhdGZvcm1GaWxlSGFuZGxl
IGluZGV4RmlsZSA9IG9wZW5GaWxlKGluZGV4RmlsZVBhdGgsIE9wZW5Gb3JXcml0ZSk7CisgICAg
aWYgKCFpc0hhbmRsZVZhbGlkKGluZGV4RmlsZSkpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJD
YWNoZSBFcnJvcjogQ291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRlXG4iLCBpbmRleEZpbGVQYXRo
LmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBIYXNoTWFw
PFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEN1cmxDYWNoZUVudHJ5Pj46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9pbmRleC5iZWdpbigpOworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9w
dHI8Q3VybENhY2hlRW50cnk+Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9pbmRleC5lbmQoKTsK
KyAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAgIENTdHJpbmcgdXJsTGF0aW4xID0gaXQt
PmtleS5sYXRpbjEoKTsKKyAgICAgICAgd3JpdGVUb0ZpbGUoaW5kZXhGaWxlLCB1cmxMYXRpbjEu
ZGF0YSgpLCB1cmxMYXRpbjEubGVuZ3RoKCkpOworICAgICAgICB3cml0ZVRvRmlsZShpbmRleEZp
bGUsICJcbiIsIDEpOworICAgICAgICArK2l0OworICAgIH0KKworICAgIGNsb3NlRmlsZShpbmRl
eEZpbGUpOworfQorCit2b2lkIEN1cmxDYWNoZU1hbmFnZXI6OmRpZFJlY2VpdmVSZXNwb25zZShS
ZXNvdXJjZUhhbmRsZSogam9iLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBp
ZiAobV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIHVybCA9IGpvYi0+
Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCk7CisKKyAgICBpZiAocmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSA9PSAzMDQpCisgICAgICAgIGxvYWRDYWNoZWREYXRhKHVybCwgam9iLCByZXNw
b25zZSk7CisgICAgZWxzZSBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAyMDApIHsK
KyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4+
OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmluZCh1cmwpOworICAgICAgICBpZiAoaXQgIT0gbV9p
bmRleC5lbmQoKSkKKyAgICAgICAgICAgIGludmFsaWRhdGVDYWNoZUVudHJ5KHVybCk7CisKKyAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPEN1cmxDYWNoZUVudHJ5PiBlbnRyeShuZXcgQ3VybENhY2hl
RW50cnkodXJsLCBtX2NhY2hlRGlyKSk7CisgICAgICAgIGJvb2wgY2FjaGVhYmxlID0gZW50cnkt
PnBhcnNlUmVzcG9uc2VIZWFkZXJzKHJlc3BvbnNlKTsKKyAgICAgICAgaWYgKGNhY2hlYWJsZSkg
eworICAgICAgICAgICAgbV9pbmRleC5zZXQodXJsLCBzdGQ6Om1vdmUoZW50cnkpKTsKKyAgICAg
ICAgICAgIHNhdmVSZXNwb25zZUhlYWRlcnModXJsLCByZXNwb25zZSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgZW50cnktPmludmFsaWRhdGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
aW52YWxpZGF0ZUNhY2hlRW50cnkodXJsKTsKK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpk
aWRGaW5pc2hMb2FkaW5nKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlmIChtX2Rpc2FibGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRy
PEN1cmxDYWNoZUVudHJ5Pj46Oml0ZXJhdG9yIGl0ID0gbV9pbmRleC5maW5kKHVybCk7CisgICAg
aWYgKGl0ICE9IG1faW5kZXguZW5kKCkpCisgICAgICAgIGl0LT52YWx1ZS0+ZGlkRmluaXNoTG9h
ZGluZygpOworfQorCitib29sIEN1cmxDYWNoZU1hbmFnZXI6OmlzQ2FjaGVkKGNvbnN0IFN0cmlu
ZyYgdXJsKQoreworICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEN1cmxDYWNoZUVudHJ5Pj46Oml0
ZXJhdG9yIGl0ID0gbV9pbmRleC5maW5kKHVybCk7CisgICAgaWYgKGl0ICE9IG1faW5kZXguZW5k
KCkpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNDYWNoZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgIGludmFsaWRhdGVDYWNoZUVudHJ5KHVybCk7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworSFRUUEhlYWRlck1hcCYgQ3VybENhY2hlTWFuYWdlcjo6
cmVxdWVzdEhlYWRlcnMoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgQVNTRVJUKGlzQ2FjaGVk
KHVybCkpOworICAgIHJldHVybiBtX2luZGV4LmZpbmQodXJsKS0+dmFsdWUtPnJlcXVlc3RIZWFk
ZXJzKCk7Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFuYWdlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIGlmICht
X2Rpc2FibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1
bmlxdWVfcHRyPEN1cmxDYWNoZUVudHJ5Pj46Oml0ZXJhdG9yIGl0ID0gbV9pbmRleC5maW5kKHVy
bCk7CisgICAgaWYgKGl0ICE9IG1faW5kZXguZW5kKCkpCisgICAgICAgIGlmICghaXQtPnZhbHVl
LT5zYXZlQ2FjaGVkRGF0YShkYXRhLCBzaXplKSkKKyAgICAgICAgICAgIGludmFsaWRhdGVDYWNo
ZUVudHJ5KHVybCk7Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFuYWdlcjo6c2F2ZVJlc3BvbnNlSGVh
ZGVycyhjb25zdCBTdHJpbmcmIHVybCwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7Cisg
ICAgaWYgKG1fZGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8U3RyaW5n
LCBzdGQ6OnVuaXF1ZV9wdHI8Q3VybENhY2hlRW50cnk+Pjo6aXRlcmF0b3IgaXQgPSBtX2luZGV4
LmZpbmQodXJsKTsKKyAgICBpZiAoaXQgIT0gbV9pbmRleC5lbmQoKSkKKyAgICAgICAgaWYgKCFp
dC0+dmFsdWUtPnNhdmVSZXNwb25zZUhlYWRlcnMocmVzcG9uc2UpKQorICAgICAgICAgICAgaW52
YWxpZGF0ZUNhY2hlRW50cnkodXJsKTsKK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjppbnZh
bGlkYXRlQ2FjaGVFbnRyeShjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAobV9kaXNhYmxl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0
cjxDdXJsQ2FjaGVFbnRyeT4+OjppdGVyYXRvciBpdCA9IG1faW5kZXguZmluZCh1cmwpOworICAg
IGlmIChpdCAhPSBtX2luZGV4LmVuZCgpKSB7CisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0
ZSgpOworICAgICAgICBtX2luZGV4LnJlbW92ZSh1cmwpOworICAgIH0KK30KKwordm9pZCBDdXJs
Q2FjaGVNYW5hZ2VyOjpkaWRGYWlsKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGludmFsaWRh
dGVDYWNoZUVudHJ5KHVybCk7Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFuYWdlcjo6bG9hZENhY2hl
ZERhdGEoY29uc3QgU3RyaW5nJiB1cmwsIFJlc291cmNlSGFuZGxlKiBqb2IsIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEN1cmxDYWNoZUVudHJ5Pj46
Oml0ZXJhdG9yIGl0ID0gbV9pbmRleC5maW5kKHVybCk7CisgICAgaWYgKGl0ICE9IG1faW5kZXgu
ZW5kKCkpIHsKKyAgICAgICAgaXQtPnZhbHVlLT5zZXRSZXNwb25zZUZyb21DYWNoZWRIZWFkZXJz
KHJlc3BvbnNlKTsKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmxvYWRDYWNoZWREYXRhKGpvYikp
CisgICAgICAgICAgICBpbnZhbGlkYXRlQ2FjaGVFbnRyeSh1cmwpOworICAgIH0KK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNo
ZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2Fj
aGVNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRhOTE2OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ2FjaGVNYW5hZ2VyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEN1cmxDYWNoZU1hbmFnZXJfaAorI2RlZmluZSBDdXJsQ2FjaGVNYW5hZ2VyX2gK
KworI2luY2x1ZGUgIkN1cmxDYWNoZUVudHJ5LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDdXJsQ2FjaGVNYW5hZ2VyIHsKKworcHVibGljOgorICAgIHN0YXRpYyBDdXJs
Q2FjaGVNYW5hZ2VyJiBnZXRJbnN0YW5jZSgpOworCisgICAgY29uc3QgU3RyaW5nJiBnZXRDYWNo
ZURpcmVjdG9yeSgpIHsgcmV0dXJuIG1fY2FjaGVEaXI7IH0KKyAgICB2b2lkIHNldENhY2hlRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYpOworCisgICAgYm9vbCBpc0NhY2hlZChjb25zdCBTdHJpbmcm
KTsKKyAgICBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0SGVhZGVycyhjb25zdCBTdHJpbmcmKTsgLy8g
bG9hZCBoZWFkZXJzCisKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRs
ZSosIFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IFN0
cmluZyYsIGNvbnN0IGNoYXIqLCBzaXplX3QpOyAvLyBzYXZlIGRhdGEKKyAgICB2b2lkIGRpZEZh
aWwoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKGNvbnN0IFN0cmlu
ZyYpOworCitwcml2YXRlOgorICAgIEN1cmxDYWNoZU1hbmFnZXIoKTsKKyAgICB+Q3VybENhY2hl
TWFuYWdlcigpOworICAgIEN1cmxDYWNoZU1hbmFnZXIoQ3VybENhY2hlTWFuYWdlciBjb25zdCYp
OworICAgIHZvaWQgb3BlcmF0b3I9KEN1cmxDYWNoZU1hbmFnZXIgY29uc3QmKTsKKworICAgIFN0
cmluZyBtX2NhY2hlRGlyOworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Q3Vy
bENhY2hlRW50cnk+PiBtX2luZGV4OworICAgIGJvb2wgbV9kaXNhYmxlZDsKKworICAgIHZvaWQg
c2F2ZUluZGV4KCk7CisgICAgdm9pZCBsb2FkSW5kZXgoKTsKKworICAgIHZvaWQgc2F2ZVJlc3Bv
bnNlSGVhZGVycyhjb25zdCBTdHJpbmcmLCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCBp
bnZhbGlkYXRlQ2FjaGVFbnRyeShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGxvYWRDYWNoZWRE
YXRhKGNvbnN0IFN0cmluZyYsIFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXNwb25zZSYpOwor
fTsKKworfQorCisjZW5kaWYgLy8gQ3VybENhY2hlTWFuYWdlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuY3BwCmluZGV4IGQ4MTIxYTIuLjAzYTZiZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFn
ZXIuY3BwCkBAIC05LDYgKzksNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdo
YW0gPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUGV0ZXIgR2Fs
IDxnYWxwZXRlckBpbmYudS1zemVnZWQuaHU+LCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFsZXggQ2hyaXN0ZW5zZW4gPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzgsNiArMzksNyBAQAogCiAjaW5j
bHVkZSAiQ29va2llTWFuYWdlci5oIgogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCisj
aW5jbHVkZSAiQ3VybENhY2hlTWFuYWdlci5oIgogI2luY2x1ZGUgIkRhdGFVUkwuaCIKICNpbmNs
dWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKQEAgLTIx
OCw4ICsyMjAsMTAgQEAgc3RhdGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKHZvaWQqIHB0ciwgc2l6
ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKIAogICAgIGlmIChkLT5tX211bHRp
cGFydEhhbmRsZSkKICAgICAgICAgZC0+bV9tdWx0aXBhcnRIYW5kbGUtPmNvbnRlbnRSZWNlaXZl
ZChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKLSAgICBlbHNlIGlm
IChkLT5jbGllbnQoKSkKKyAgICBlbHNlIGlmIChkLT5jbGllbnQoKSkgewogICAgICAgICBkLT5j
bGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEoam9iLCBzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSwgdG90
YWxTaXplLCAwKTsKKyAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRS
ZWNlaXZlRGF0YShqb2ItPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLCBzdGF0aWNfY2Fz
dDxjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKKyAgICB9CiAKICAgICByZXR1cm4gdG90YWxTaXpl
OwogfQpAQCAtNDI5LDggKzQzMywxMCBAQCBzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNo
YXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChjbGllbnQpCisgICAgICAgIGlmIChjbGll
bnQpIHsKICAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGpvYiwgZC0+bV9y
ZXNwb25zZSk7CisgICAgICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRp
ZFJlY2VpdmVSZXNwb25zZShqb2IsIGQtPm1fcmVzcG9uc2UpOworICAgICAgICB9CiAgICAgICAg
IGQtPm1fcmVzcG9uc2Uuc2V0UmVzcG9uc2VGaXJlZCh0cnVlKTsKIAogICAgIH0gZWxzZSB7CkBA
IC01NzgsMTYgKzU4NCwyMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRU
aW1lckNhbGxiYWNrKFRpbWVyPFJlc291cmNlSGFuZGxlTWFuYWdlcj4qCiAgICAgICAgICAgICBp
ZiAoZC0+bV9tdWx0aXBhcnRIYW5kbGUpCiAgICAgICAgICAgICAgICAgZC0+bV9tdWx0aXBhcnRI
YW5kbGUtPmNvbnRlbnRFbmRlZCgpOwogCi0gICAgICAgICAgICBpZiAoZC0+Y2xpZW50KCkpCisg
ICAgICAgICAgICBpZiAoZC0+Y2xpZW50KCkpIHsKICAgICAgICAgICAgICAgICBkLT5jbGllbnQo
KS0+ZGlkRmluaXNoTG9hZGluZyhqb2IsIDApOworICAgICAgICAgICAgICAgIEN1cmxDYWNoZU1h
bmFnZXI6OmdldEluc3RhbmNlKCkuZGlkRmluaXNoTG9hZGluZyhqb2ItPmZpcnN0UmVxdWVzdCgp
LnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGNoYXIqIHVybCA9IDA7CiAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhkLT5t
X2hhbmRsZSwgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwgJnVybCk7CiAjaWZuZGVmIE5ERUJVRwog
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDdXJsIEVSUk9SIGZvciB1cmw9JyVzJywgZXJy
b3I6ICclcydcbiIsIHVybCwgY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpKTsK
ICNlbmRpZgotICAgICAgICAgICAgaWYgKGQtPmNsaWVudCgpKQorICAgICAgICAgICAgaWYgKGQt
PmNsaWVudCgpKSB7CiAgICAgICAgICAgICAgICAgZC0+Y2xpZW50KCktPmRpZEZhaWwoam9iLCBS
ZXNvdXJjZUVycm9yKFN0cmluZygpLCBtc2ctPmRhdGEucmVzdWx0LCBTdHJpbmcodXJsKSwgU3Ry
aW5nKGN1cmxfZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSkpKTsKKyAgICAgICAgICAg
ICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZhaWwoam9iLT5maXJzdFJl
cXVlc3QoKS51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAg
ICAgICByZW1vdmVGcm9tQ3VybChqb2IpOwpAQCAtOTM4LDYgKzk0OCwxOSBAQCB2b2lkIFJlc291
cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQog
ICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBoZWFkZXJzID0gMDsKICAgICBpZiAoam9iLT5maXJzdFJl
cXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCkuc2l6ZSgpID4gMCkgewogICAgICAgICBIVFRQSGVh
ZGVyTWFwIGN1c3RvbUhlYWRlcnMgPSBqb2ItPmZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVs
ZHMoKTsKKworICAgICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5pc0Nh
Y2hlZCh1cmwpKSB7CisgICAgICAgICAgICBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0SGVhZGVycyA9
IEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkucmVxdWVzdEhlYWRlcnModXJsKTsKKwor
ICAgICAgICAgICAgLy8gYXBwZW5kIGFkZGl0aW9uYWwgY2FjaGUgaW5mb3JtYXRpb24KKyAgICAg
ICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVxdWVzdEhlYWRlcnMu
YmVnaW4oKTsKKyAgICAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHJlcXVlc3RIZWFkZXJzLmVuZCgpOworICAgICAgICAgICAgd2hpbGUgKGl0ICE9IGVuZCkgewor
ICAgICAgICAgICAgICAgIGN1c3RvbUhlYWRlcnMuc2V0KGl0LT5rZXksIGl0LT52YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAg
IEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1c3RvbUhlYWRlcnMuZW5kKCk7
CiAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXN0b21I
ZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgU3RyaW5nIGtl
eSA9IGl0LT5rZXk7Cg==
</data>
<flag name="review"
          id="239341"
          type_id="1"
          status="-"
          setter="bfulgham"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216491</attachid>
            <date>2013-11-09 03:54:52 -0800</date>
            <delta_ts>2013-11-18 10:32:54 -0800</delta_ts>
            <desc>Proposed patch 3</desc>
            <filename>diff-kesz.diff</filename>
            <type>text/plain</type>
            <size>37581</size>
            <attacher name="Mátyás Mustoha">mmatyas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkYjA4N2QwLi45ZjkxMTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcg
QEAKKzIwMTMtMTEtMDggIE3DoXR5w6FzIE11c3RvaGEgIDxtbWF0eWFzQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBbY3VybF0gQWRkIGZpbGUgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzMzMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIG9uIGRpc2MgZmls
ZSBjYWNoZQorICAgICAgICBmb3IgdGhlIGN1cmwgbmV0d29yayBiYWNrZW5kLgorCisgICAgICAg
ICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxDYWNoZUVudHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJs
Q2FjaGVFbnRyeTo6Q3VybENhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hl
RW50cnk6On5DdXJsQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVFbnRy
eTo6aXNDYWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnJlcXVlc3RI
ZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5OjpzYXZlQ2FjaGVkRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVFbnRyeTo6bG9hZENhY2hlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnNhdmVSZXNwb25zZUhlYWRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmxvYWRSZXNwb25zZUhlYWRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OnNldFJlc3BvbnNlRnJvbUNhY2hlZEhl
YWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmRpZEZhaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybENhY2hlRW50cnk6OmdlbmVyYXRlQmFzZUZpbGVuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5Ojpsb2FkRmlsZVRvQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxDYWNoZUVudHJ5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxDYWNoZUVudHJ5OjpwYXJzZVJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybENhY2hlRW50cnk6OmlzSW5NZW1vcnkpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2Fj
aGVNYW5hZ2VyOjpDdXJsQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNo
ZU1hbmFnZXI6On5DdXJsQ2FjaGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNo
ZU1hbmFnZXI6OnNldENhY2hlRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNo
ZU1hbmFnZXI6OmxvYWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVNYW5hZ2Vy
OjpzYXZlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmRpZEZp
bmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6aXNDYWNo
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6cmVxdWVzdEhlYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6ZGlkUmVjZWl2ZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybENhY2hlTWFuYWdlcjo6c2F2ZVJlc3BvbnNlSGVhZGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjppbnZhbGlkYXRlQ2FjaGVFbnRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRGYWlsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmxvYWRDYWNoZWREYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmdldENhY2hlRGlyZWN0b3J5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6aGVhZGVy
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3du
bG9hZFRpbWVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5h
Z2VyOjppbml0aWFsaXplSGFuZGxlKToKKwogMjAxMy0xMS0wNiAgQmVtIEpvbmVzLUJleSAgPGJq
b25lc2JlQGFkb2JlLmNvbT4KIAogICAgICAgICBSZW5hbWUgcmVnaW9uIGxpbmUgb2Zmc2V0IG1l
dGhvZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
CmluZGV4IDA5Y2UwOTAuLmMyYjQ0ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtODE3OCw2ICs4MTc4LDE4IEBACiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21w
aWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXEN1
cmxDYWNoZUVudHJ5LmNwcCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsQ2FjaGVNYW5hZ2VyLmNwcCI+CisgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl
bGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1
Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsRG93
bmxvYWQuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9t
QnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
QEAgLTE5MjY1LDYgKzE5Mjc3LDE4IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDdXN0
b21CdWlsZFN0ZXAgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXEN1cmxDYWNoZU1h
bmFnZXIuaCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KKyAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsQ2FjaGVFbnRyeS5oIj4KKyAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVj
dGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgIDwvQ3VzdG9tQnVpbGRT
dGVwPgogICAgIDxDdXN0b21CdWlsZFN0ZXAgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xj
dXJsXEZvcm1EYXRhU3RyZWFtQ3VybC5oIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA1NTMzNDg5Li5mZTg0OWZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRl
cnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5m
aWx0ZXJzCkBAIC0xODk5LDYgKzE4OTksMTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDcmVkZW50aWFsU3RvcmFnZUN1cmwuY3BwIj4KICAgICAg
IDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcQ3VybENh
Y2hlRW50cnkuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0
ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxuZXR3b3JrXGN1cmxcQ3VybENhY2hlTWFuYWdlci5jcHAiPgorICAgICAgPEZpbHRlcj5wbGF0
Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxDdXJsRG93bmxvYWQuY3BwIj4K
ICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+CkBAIC0xNDkxMiw2ICsxNDkxOCwxMiBAQAogICAgIDxDdXN0b21CdWlsZFN0ZXAgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgi
PgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0N1
c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRmb3Jt
XG5ldHdvcmtcY3VybFxDdXJsQ2FjaGVFbnRyeS5oIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1c
bmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CisgICAgPEN1c3Rv
bUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcQ3VybENhY2hlTWFu
YWdlci5oIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+Cisg
ICAgPC9DdXN0b21CdWlsZFN0ZXA+CiAgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxuZXR3b3JrXGN1cmxcRm9ybURhdGFTdHJlYW1DdXJsLmgiPgogICAgICAgPEZpbHRl
cj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2Fj
aGVFbnRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENh
Y2hlRW50cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjN2M4ZDMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybENhY2hlRW50cnkuY3BwCkBAIC0wLDAgKzEsMzQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBT
WkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNa
RUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkN1cmxDYWNoZUVudHJ5LmgiCisK
KyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgorI2lu
Y2x1ZGUgIkhUVFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1i
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTUQ1Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3Vy
bENhY2hlRW50cnk6OkN1cmxDYWNoZUVudHJ5KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIGNhY2hlRGlyKQorICAgIDogbV9oZWFkZXJGaWxlbmFtZShjYWNoZURpcikKKyAgICAsIG1f
Y29udGVudEZpbGVuYW1lKGNhY2hlRGlyKQorICAgICwgbV9leHBpcmVEYXRlKC0xKQorICAgICwg
bV9oZWFkZXJJbk1lbW9yeShmYWxzZSkKK3sKKyAgICBnZW5lcmF0ZUJhc2VGaWxlbmFtZSh1cmwu
bGF0aW4xKCkpOworCisgICAgbV9oZWFkZXJGaWxlbmFtZS5hcHBlbmQobV9iYXNlbmFtZSk7Cisg
ICAgbV9oZWFkZXJGaWxlbmFtZS5hcHBlbmQoIi5oZWFkZXIiKTsKKworICAgIG1fY29udGVudEZp
bGVuYW1lLmFwcGVuZChtX2Jhc2VuYW1lKTsKKyAgICBtX2NvbnRlbnRGaWxlbmFtZS5hcHBlbmQo
Ii5jb250ZW50Iik7Cit9CisKK0N1cmxDYWNoZUVudHJ5Ojp+Q3VybENhY2hlRW50cnkoKQorewor
fQorCisvLyBjYWNoZSBtYW5hZ2VyIHNob3VsZCBpbnZhbGlkYXRlIHRoZSBlbnRyeSBvbiBmYWxz
ZQorYm9vbCBDdXJsQ2FjaGVFbnRyeTo6aXNDYWNoZWQoKQoreworICAgIGlmICghZmlsZUV4aXN0
cyhtX2NvbnRlbnRGaWxlbmFtZSkgfHwgIWZpbGVFeGlzdHMobV9oZWFkZXJGaWxlbmFtZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9oZWFkZXJJbk1lbW9yeSkgeworICAg
ICAgICBpZiAoIWxvYWRSZXNwb25zZUhlYWRlcnMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAobV9leHBpcmVEYXRlIDwgY3VycmVudFRpbWVNUygpKSB7Cisg
ICAgICAgIG1faGVhZGVySW5NZW1vcnkgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitIVFRQSGVhZGVyTWFwJiBDdXJsQ2FjaGVF
bnRyeTo6cmVxdWVzdEhlYWRlcnMoKQoreworICAgIHJldHVybiBtX3JlcXVlc3RIZWFkZXJzOwor
fQorCitib29sIEN1cmxDYWNoZUVudHJ5OjpzYXZlQ2FjaGVkRGF0YShjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgY29udGVudEZpbGUgPSBv
cGVuRmlsZShtX2NvbnRlbnRGaWxlbmFtZSwgT3BlbkZvcldyaXRlKTsKKyAgICBpZiAoIWlzSGFu
ZGxlVmFsaWQoY29udGVudEZpbGUpKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUgRXJy
b3I6IENvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0ZVxuIiwgbV9jb250ZW50RmlsZW5hbWUubGF0
aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGFw
cGVuZAorICAgIHNlZWtGaWxlKGNvbnRlbnRGaWxlLCAwLCBTZWVrRnJvbUVuZCk7CisgICAgd3Jp
dGVUb0ZpbGUoY29udGVudEZpbGUsIGRhdGEsIHNpemUpOworICAgIGNsb3NlRmlsZShjb250ZW50
RmlsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ3VybENhY2hlRW50cnk6OmxvYWRD
YWNoZWREYXRhKFJlc291cmNlSGFuZGxlKiBqb2IpCit7CisgICAgQVNTRVJUKGpvYi0+Y2xpZW50
KCkpOworCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBpZiAoIWxvYWRGaWxlVG9CdWZm
ZXIobV9jb250ZW50RmlsZW5hbWUsIGJ1ZmZlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGpvYi0+Z2V0SW50ZXJuYWwoKS0+Y2xpZW50KCktPmRpZFJlY2VpdmVEYXRhKGpvYiwgYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSwgMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgQ3VybENhY2hlRW50cnk6OnNhdmVSZXNwb25zZUhlYWRlcnMoUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCit7CisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGhlYWRlckZpbGUgPSBvcGVuRmls
ZShtX2hlYWRlckZpbGVuYW1lLCBPcGVuRm9yV3JpdGUpOworICAgIGlmICghaXNIYW5kbGVWYWxp
ZChoZWFkZXJGaWxlKSkgeworICAgICAgICBMT0coTmV0d29yaywgIkNhY2hlIEVycm9yOiBDb3Vs
ZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGVcbiIsIG1faGVhZGVyRmlsZW5hbWUubGF0aW4xKCkuZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEhlYWRlcnMKKyAg
ICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZHMoKS5iZWdpbigpOworICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICB3aGlsZSAoaXQgIT0gZW5k
KSB7CisgICAgICAgIFN0cmluZyBoZWFkZXJGaWVsZCA9IGl0LT5rZXk7CisgICAgICAgIGhlYWRl
ckZpZWxkLmFwcGVuZCgiOiAiKTsKKyAgICAgICAgaGVhZGVyRmllbGQuYXBwZW5kKGl0LT52YWx1
ZSk7CisgICAgICAgIGhlYWRlckZpZWxkLmFwcGVuZCgiXG4iKTsKKyAgICAgICAgQ1N0cmluZyBo
ZWFkZXJGaWVsZExhdGluMSA9IGhlYWRlckZpZWxkLmxhdGluMSgpOworICAgICAgICB3cml0ZVRv
RmlsZShoZWFkZXJGaWxlLCBoZWFkZXJGaWVsZExhdGluMS5kYXRhKCksIGhlYWRlckZpZWxkTGF0
aW4xLmxlbmd0aCgpKTsKKyAgICAgICAgKytpdDsKKyAgICB9CisKKyAgICBjbG9zZUZpbGUoaGVh
ZGVyRmlsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ3VybENhY2hlRW50cnk6Omxv
YWRSZXNwb25zZUhlYWRlcnMoKQoreworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgaWYg
KCFsb2FkRmlsZVRvQnVmZmVyKG1faGVhZGVyRmlsZW5hbWUsIGJ1ZmZlcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFN0cmluZyBoZWFkZXJDb250ZW50ID0gU3RyaW5nKGJ1ZmZlci5k
YXRhKCkpOworICAgIFZlY3RvcjxTdHJpbmc+IGhlYWRlckZpZWxkczsKKyAgICBoZWFkZXJDb250
ZW50LnNwbGl0KCJcbiIsIGhlYWRlckZpZWxkcyk7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJGaWVsZHMuYmVnaW4oKTsKKyAgICBWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVyRmllbGRzLmVuZCgpOworICAgIHdoaWxlIChp
dCAhPSBlbmQpIHsKKyAgICAgICAgc2l6ZV90IHNwbGl0UG9zaXRpb24gPSBpdC0+ZmluZCgiOiIp
OworICAgICAgICBpZiAoc3BsaXRQb3NpdGlvbiAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgIG1f
Y2FjaGVkUmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5sZWZ0KHNwbGl0UG9zaXRpb24p
LCBpdC0+c3Vic3RyaW5nKHNwbGl0UG9zaXRpb24rMSkuc3RyaXBXaGl0ZVNwYWNlKCkpOworICAg
ICAgICArK2l0OworICAgIH0KKworICAgIHJldHVybiBwYXJzZVJlc3BvbnNlSGVhZGVycyhtX2Nh
Y2hlZFJlc3BvbnNlKTsKK30KKworLy8gc2V0IHJlc3BvbnNlIGhlYWRlcnMgZnJvbSBtZW1vcnkK
K3ZvaWQgQ3VybENhY2hlRW50cnk6OnNldFJlc3BvbnNlRnJvbUNhY2hlZEhlYWRlcnMoUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUo
MzA0KTsKKyAgICByZXNwb25zZS5zZXRXYXNDYWNoZWQodHJ1ZSk7CisKKyAgICAvLyBJbnRlZ3Jh
dGUgdGhlIGhlYWRlcnMgaW4gdGhlIHJlc3BvbnNlIHdpdGggdGhlIGNhY2hlZCBvbmVzLgorICAg
IEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZWRSZXNwb25zZS5odHRw
SGVhZGVyRmllbGRzKCkuYmVnaW4oKTsKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX2NhY2hlZFJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICB3
aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAgIGlmIChyZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
aXQtPmtleSkuaXNOdWxsKCkpCisgICAgICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmll
bGQoaXQtPmtleSwgaXQtPnZhbHVlKTsKKyAgICAgICAgKytpdDsKKyAgICB9CisKKyAgICAvLyBU
cnkgdG8gcGFyc2UgZXhwZWN0ZWQgY29udGVudCBsZW5ndGgKKyAgICBsb25nIGxvbmcgY29udGVu
dExlbmd0aCA9IC0xOworICAgIGlmICghcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50
LUxlbmd0aCIpLmlzTnVsbCgpKSB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAg
ICAgICBsb25nIGxvbmcgcGFyc2VkQ29udGVudExlbmd0aCA9IHJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZCgiQ29udGVudC1MZW5ndGgiKS50b0ludDY0KCZzdWNjZXNzKTsKKyAgICAgICAgaWYgKHN1
Y2Nlc3MpCisgICAgICAgICAgICBjb250ZW50TGVuZ3RoID0gcGFyc2VkQ29udGVudExlbmd0aDsK
KyAgICB9CisgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGNvbnRlbnRMZW5n
dGgpOyAvLyAtMSBvbiBwYXJzZSBlcnJvciBvciBudWxsCisKKyAgICByZXNwb25zZS5zZXRNaW1l
VHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZCgiQ29udGVudC1UeXBlIikpKTsKKyAgICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4
dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShyZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRl
bnQtVHlwZSIpKSk7CisgICAgcmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5hbWUoZmlsZW5hbWVG
cm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihyZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRl
bnQtRGlzcG9zaXRpb24iKSkpOworfQorCit2b2lkIEN1cmxDYWNoZUVudHJ5OjpkaWRGYWlsKCkK
K3sKKyAgICAvLyB0aGUgY2FjaGUgbWFuYWdlciB3aWxsIGNhbGwgaW52YWxpZGF0ZSgpCit9CisK
K3ZvaWQgQ3VybENhY2hlRW50cnk6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIC8vIG5vdGhp
bmcgdG8gZG8gaGVyZSB5ZXQKK30KKwordm9pZCBDdXJsQ2FjaGVFbnRyeTo6Z2VuZXJhdGVCYXNl
RmlsZW5hbWUoY29uc3QgQ1N0cmluZyYgdXJsKQoreworICAgIE1ENSBtZDU7CisgICAgbWQ1LmFk
ZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHVybC5kYXRhKCkpLCB1cmwu
bGVuZ3RoKCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBzdW07CisgICAgbWQ1LmNoZWNr
c3VtKHN1bSk7CisgICAgdWludDhfdCogcmF3ZGF0YSA9IHN1bS5kYXRhKCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KHJh
d2RhdGFbaV0sIG1fYmFzZW5hbWUsIExvd2VyY2FzZSk7Cit9CisKK2Jvb2wgQ3VybENhY2hlRW50
cnk6OmxvYWRGaWxlVG9CdWZmZXIoY29uc3QgU3RyaW5nJiBmaWxlcGF0aCwgVmVjdG9yPGNoYXI+
JiBidWZmZXIpCit7CisgICAgLy8gb3BlbiB0aGUgZmlsZQorICAgIFBsYXRmb3JtRmlsZUhhbmRs
ZSBpbnB1dEZpbGUgPSBvcGVuRmlsZShmaWxlcGF0aCwgT3BlbkZvclJlYWQpOworICAgIGlmICgh
aXNIYW5kbGVWYWxpZChpbnB1dEZpbGUpKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUg
RXJyb3I6IENvdWxkIG5vdCBvcGVuICVzIGZvciByZWFkXG4iLCBmaWxlcGF0aC5sYXRpbjEoKS5k
YXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbG9uZyBsb25nIGZp
bGVzaXplID0gLTE7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShmaWxlcGF0aCwgZmlsZXNpemUpKSB7
CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUgRXJyb3I6IENvdWxkIG5vdCBnZXQgZmlsZSBz
aXplIG9mICVzXG4iLCBmaWxlcGF0aC5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICBjbG9zZUZp
bGUoaW5wdXRGaWxlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIGxv
YWQgdGhlIGZpbGUgY29udGVudCBpbnRvIGJ1ZmZlcgorICAgIGJ1ZmZlci5yZXNpemUoZmlsZXNp
emUpOworICAgIGludCBidWZmZXJQb3NpdGlvbiA9IDA7CisgICAgaW50IGJ1ZmZlclJlYWRTaXpl
ID0gNDA5NjsKKyAgICBpbnQgYnl0ZXNSZWFkID0gMDsKKyAgICB3aGlsZSAoZmlsZXNpemUgPiBi
dWZmZXJQb3NpdGlvbikgeworICAgICAgICBpZiAoZmlsZXNpemUgLSBidWZmZXJQb3NpdGlvbiA8
IGJ1ZmZlclJlYWRTaXplKQorICAgICAgICAgICAgYnVmZmVyUmVhZFNpemUgPSBmaWxlc2l6ZSAt
IGJ1ZmZlclBvc2l0aW9uOworCisgICAgICAgIGJ5dGVzUmVhZCA9IHJlYWRGcm9tRmlsZShpbnB1
dEZpbGUsIGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJQb3NpdGlvbiwgYnVmZmVyUmVhZFNpemUpOwor
ICAgICAgICBpZiAoYnl0ZXNSZWFkICE9IGJ1ZmZlclJlYWRTaXplKSB7CisgICAgICAgICAgICBM
T0coTmV0d29yaywgIkNhY2hlIEVycm9yOiBDb3VsZCBub3QgcmVhZCBmcm9tICVzXG4iLCBmaWxl
cGF0aC5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICAgICAgY2xvc2VGaWxlKGlucHV0RmlsZSk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBidWZmZXJQ
b3NpdGlvbiArPSBidWZmZXJSZWFkU2l6ZTsKKyAgICB9CisgICAgY2xvc2VGaWxlKGlucHV0Rmls
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ3VybENhY2hlRW50cnk6OmludmFsaWRh
dGUoKQoreworICAgIGRlbGV0ZUZpbGUobV9oZWFkZXJGaWxlbmFtZSk7CisgICAgZGVsZXRlRmls
ZShtX2NvbnRlbnRGaWxlbmFtZSk7CisgICAgTE9HKE5ldHdvcmssICJDYWNoZTogaW52YWxpZGF0
ZWQgJXNcbiIsIG1fYmFzZW5hbWUubGF0aW4xKCkuZGF0YSgpKTsKK30KKworYm9vbCBDdXJsQ2Fj
aGVFbnRyeTo6cGFyc2VSZXNwb25zZUhlYWRlcnMoUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgZG91YmxlIGZpbGVUaW1lOworICAgIHRpbWVfdCBmaWxlTW9kaWZpY2F0aW9uRGF0
ZTsKKworICAgIGlmIChnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX2hlYWRlckZpbGVuYW1lLCBm
aWxlTW9kaWZpY2F0aW9uRGF0ZSkpIHsKKyAgICAgICAgZmlsZVRpbWUgPSBkaWZmdGltZShmaWxl
TW9kaWZpY2F0aW9uRGF0ZSwgMCk7CisgICAgICAgIGZpbGVUaW1lICo9IDEwMDAuMDsKKyAgICB9
IGVsc2UKKyAgICAgICAgZmlsZVRpbWUgPSBjdXJyZW50VGltZU1TKCk7IC8vIEdNVAorCisgICAg
aWYgKHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpIHx8IHJlc3BvbnNlLmNh
Y2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKwor
ICAgIGRvdWJsZSBtYXhBZ2UgPSAwOworICAgIGJvb2wgbWF4QWdlSXNWYWxpZCA9IGZhbHNlOwor
CisgICAgaWYgKHJlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUoKSkK
KyAgICAgICAgbWF4QWdlID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgbWF4QWdlID0gcmVzcG9u
c2UuY2FjaGVDb250cm9sTWF4QWdlKCk7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKG1heEFnZSkp
CisgICAgICAgICAgICBtYXhBZ2UgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtYXhB
Z2VJc1ZhbGlkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXJlc3BvbnNlLmhhc0NhY2hlVmFs
aWRhdG9yRmllbGRzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworCisgICAgZG91YmxlIGxh
c3RNb2RpZmljYXRpb25EYXRlID0gMDsKKyAgICBkb3VibGUgcmVzcG9uc2VEYXRlID0gMDsKKyAg
ICBkb3VibGUgZXhwaXJhdGlvbkRhdGUgPSAwOworCisgICAgbGFzdE1vZGlmaWNhdGlvbkRhdGUg
PSByZXNwb25zZS5sYXN0TW9kaWZpZWQoKTsKKyAgICBpZiAoc3RkOjppc25hbihsYXN0TW9kaWZp
Y2F0aW9uRGF0ZSkpCisgICAgICAgIGxhc3RNb2RpZmljYXRpb25EYXRlID0gMDsKKworICAgIHJl
c3BvbnNlRGF0ZSA9IHJlc3BvbnNlLmRhdGUoKTsKKyAgICBpZiAoc3RkOjppc25hbihyZXNwb25z
ZURhdGUpKQorICAgICAgICByZXNwb25zZURhdGUgPSAwOworCisgICAgZXhwaXJhdGlvbkRhdGUg
PSByZXNwb25zZS5leHBpcmVzKCk7CisgICAgaWYgKHN0ZDo6aXNuYW4oZXhwaXJhdGlvbkRhdGUp
KQorICAgICAgICBleHBpcmF0aW9uRGF0ZSA9IDA7CisKKworICAgIGlmIChtYXhBZ2VJc1ZhbGlk
KSB7CisgICAgICAgIC8vIHdoZW4gYm90aCB0aGUgY2FjaGUgZW50cnkgYW5kIHRoZSByZXNwb25z
ZSBjb250YWluIG1heC1hZ2UsIHRoZSBsZXNzZXIgb25lIHRha2VzIHByaW9yaXR5CisgICAgICAg
IGRvdWJsZSBleHBpcmVzID0gZmlsZVRpbWUgKyBtYXhBZ2UgKiAxMDAwOworICAgICAgICBpZiAo
bV9leHBpcmVEYXRlID09IC0xIHx8IG1fZXhwaXJlRGF0ZSA+IGV4cGlyZXMpCisgICAgICAgICAg
ICBtX2V4cGlyZURhdGUgPSBleHBpcmVzOworICAgIH0gZWxzZSBpZiAocmVzcG9uc2VEYXRlID4g
MCAmJiBleHBpcmF0aW9uRGF0ZSA+PSByZXNwb25zZURhdGUpCisgICAgICAgIG1fZXhwaXJlRGF0
ZSA9IGZpbGVUaW1lICsgKGV4cGlyYXRpb25EYXRlIC0gcmVzcG9uc2VEYXRlKTsKKworICAgIC8v
IGlmIHRoZXJlIHdlcmUgbm8gbGlmZXRpbWUgaW5mb3JtYXRpb24KKyAgICBpZiAobV9leHBpcmVE
YXRlID09IC0xKSB7CisgICAgICAgIGlmIChsYXN0TW9kaWZpY2F0aW9uRGF0ZSA+IDApCisgICAg
ICAgICAgICBtX2V4cGlyZURhdGUgPSBmaWxlVGltZSArIChmaWxlVGltZSAtIGxhc3RNb2RpZmlj
YXRpb25EYXRlKSAqIDAuMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9leHBpcmVEYXRl
ID0gMDsKKyAgICB9CisKKyAgICBTdHJpbmcgZXRhZyA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZCgiRVRhZyIpOworICAgIGlmICghZXRhZy5pc051bGwoKSkKKyAgICAgICAgbV9yZXF1ZXN0SGVh
ZGVycy5zZXQoIklmLU5vbmUtTWF0Y2giLCBldGFnKTsKKworICAgIFN0cmluZyBsYXN0TW9kaWZp
ZWQgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkxhc3QtTW9kaWZpZWQiKTsKKyAgICBpZiAo
IWxhc3RNb2RpZmllZC5pc051bGwoKSkKKyAgICAgICAgbV9yZXF1ZXN0SGVhZGVycy5zZXQoIklm
LU1vZGlmaWVkLVNpbmNlIiwgbGFzdE1vZGlmaWVkKTsKKworICAgIGlmIChldGFnLmlzTnVsbCgp
ICYmIGxhc3RNb2RpZmllZC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
bV9oZWFkZXJJbk1lbW9yeSA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVFbnRy
eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZUVudHJ5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1ZjNhYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVF
bnRyeS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVy
c2l0eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
dXJsQ2FjaGVFbnRyeV9oCisjZGVmaW5lIEN1cmxDYWNoZUVudHJ5X2gKKworI2luY2x1ZGUgIkhU
VFBIZWFkZXJNYXAuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1
cmxDYWNoZUVudHJ5IHsKKworcHVibGljOgorICAgIEN1cmxDYWNoZUVudHJ5KGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNhY2hlRGlyKTsKKyAgICB+Q3VybENhY2hlRW50cnkoKTsK
KworICAgIGJvb2wgaXNDYWNoZWQoKTsKKyAgICBjb25zdCBib29sJiBpc0luTWVtb3J5KCkgeyBy
ZXR1cm4gbV9oZWFkZXJJbk1lbW9yeTsgfQorICAgIEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFk
ZXJzKCk7CisKKyAgICBib29sIHNhdmVDYWNoZWREYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCk7CisgICAgYm9vbCBsb2FkQ2FjaGVkRGF0YShSZXNvdXJjZUhhbmRsZSopOworCisgICAgYm9v
bCBzYXZlUmVzcG9uc2VIZWFkZXJzKFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIHNldFJl
c3BvbnNlRnJvbUNhY2hlZEhlYWRlcnMoUmVzb3VyY2VSZXNwb25zZSYpOworCisgICAgdm9pZCBp
bnZhbGlkYXRlKCk7CisgICAgdm9pZCBkaWRGYWlsKCk7CisgICAgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKCk7CisKKyAgICBib29sIHBhcnNlUmVzcG9uc2VIZWFkZXJzKFJlc291cmNlUmVzcG9uc2Um
KTsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9iYXNlbmFtZTsKKyAgICBTdHJpbmcgbV9oZWFk
ZXJGaWxlbmFtZTsKKyAgICBTdHJpbmcgbV9jb250ZW50RmlsZW5hbWU7CisKKyAgICBkb3VibGUg
bV9leHBpcmVEYXRlOworICAgIGJvb2wgbV9oZWFkZXJJbk1lbW9yeTsKKworICAgIFJlc291cmNl
UmVzcG9uc2UgbV9jYWNoZWRSZXNwb25zZTsKKyAgICBIVFRQSGVhZGVyTWFwIG1fcmVxdWVzdEhl
YWRlcnM7CisKKyAgICB2b2lkIGdlbmVyYXRlQmFzZUZpbGVuYW1lKGNvbnN0IENTdHJpbmcmIHVy
bCk7CisgICAgYm9vbCBsb2FkRmlsZVRvQnVmZmVyKGNvbnN0IFN0cmluZyYgZmlsZXBhdGgsIFZl
Y3RvcjxjaGFyPiYgYnVmZmVyKTsKKyAgICBib29sIGxvYWRSZXNwb25zZUhlYWRlcnMoKTsKK307
CisKK30KKworI2VuZGlmIC8vIEN1cmxDYWNoZUVudHJ5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YThjMGUzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIu
Y3BwCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJGaWxl
U3lzdGVtLmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2RlZmlu
ZSBJT19CVUZGRVJTSVpFIDQwOTYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXJsQ2FjaGVN
YW5hZ2VyJiBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpCit7CisgICAgc3RhdGljIEN1
cmxDYWNoZU1hbmFnZXIgaW5zdGFuY2U7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitDdXJs
Q2FjaGVNYW5hZ2VyOjpDdXJsQ2FjaGVNYW5hZ2VyKCkKKyAgICA6IG1fZGlzYWJsZWQodHJ1ZSkK
K3sKKyAgICAvLyBjYWxsIHNldENhY2hlRGlyZWN0b3J5KCkgdG8gZW5hYmxlCit9CisKK0N1cmxD
YWNoZU1hbmFnZXI6On5DdXJsQ2FjaGVNYW5hZ2VyKCkKK3sKKyAgICBpZiAobV9kaXNhYmxlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc2F2ZUluZGV4KCk7Cit9CisKK3ZvaWQgQ3VybENhY2hl
TWFuYWdlcjo6c2V0Q2FjaGVEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCit7Cisg
ICAgbV9jYWNoZURpciA9IGRpcmVjdG9yeTsKKyAgICBtX2NhY2hlRGlyLmFwcGVuZCgiLyIpOwor
ICAgIGlmIChtX2NhY2hlRGlyLmlzRW1wdHkoKSkgeworICAgICAgICBMT0coTmV0d29yaywgIkNh
Y2hlIEVycm9yOiBDYWNoZSBsb2NhdGlvbiBpcyBub3Qgc2V0ISBDYWNoZU1hbmFnZXIgZGlzYWJs
ZWQuXG4iKTsKKyAgICAgICAgbV9kaXNhYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIWZpbGVFeGlzdHMobV9jYWNoZURpcikpIHsKKyAgICAgICAgaWYgKG1h
a2VBbGxEaXJlY3RvcmllcyhtX2NhY2hlRGlyKSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmss
ICJDYWNoZSBFcnJvcjogQ291bGQgbm90IG9wZW4gb3IgY3JlYXRlIGNhY2hlIGRpcmVjdG9yeSEg
Q2FjaGVNYW5hZ2VyIGRpc2FibGVkLlxuIik7CisgICAgICAgICAgICBtX2Rpc2FibGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fZGlzYWJs
ZWQgPSBmYWxzZTsKKyAgICBsb2FkSW5kZXgoKTsKK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2Vy
Ojpsb2FkSW5kZXgoKQoreworICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBTdHJpbmcgaW5kZXhGaWxlUGF0aChtX2NhY2hlRGlyKTsKKyAgICBpbmRleEZpbGVQYXRo
LmFwcGVuZCgiaW5kZXguZGF0Iik7CisKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgaW5kZXhGaWxl
ID0gb3BlbkZpbGUoaW5kZXhGaWxlUGF0aCwgT3BlbkZvclJlYWQpOworICAgIGlmICghaXNIYW5k
bGVWYWxpZChpbmRleEZpbGUpKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUgV2Fybmlu
ZzogQ291bGQgbm90IG9wZW4gJXMgZm9yIHJlYWRcbiIsIGluZGV4RmlsZVBhdGgubGF0aW4xKCku
ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxvbmcgbG9uZyBmaWxlc2l6
ZSA9IC0xOworICAgIGlmICghZ2V0RmlsZVNpemUoaW5kZXhGaWxlUGF0aCwgZmlsZXNpemUpKSB7
CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ2FjaGUgRXJyb3I6IENvdWxkIG5vdCBnZXQgZmlsZSBz
aXplIG9mICVzXG4iLCBpbmRleEZpbGVQYXRoLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBsb2FkIHRoZSBmaWxlIGNvbnRlbnQgaW50byBidWZmZXIK
KyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGJ1ZmZlci5yZXNpemUoZmlsZXNpemUpOwor
ICAgIGludCBidWZmZXJQb3NpdGlvbiA9IDA7CisgICAgaW50IGJ1ZmZlclJlYWRTaXplID0gSU9f
QlVGRkVSU0laRTsKKyAgICB3aGlsZSAoZmlsZXNpemUgPiBidWZmZXJQb3NpdGlvbikgeworICAg
ICAgICBpZiAoZmlsZXNpemUgLSBidWZmZXJQb3NpdGlvbiA8IGJ1ZmZlclJlYWRTaXplKQorICAg
ICAgICAgICAgYnVmZmVyUmVhZFNpemUgPSBmaWxlc2l6ZSAtIGJ1ZmZlclBvc2l0aW9uOworCisg
ICAgICAgIHJlYWRGcm9tRmlsZShpbmRleEZpbGUsIGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJQb3Np
dGlvbiwgYnVmZmVyUmVhZFNpemUpOworICAgICAgICBidWZmZXJQb3NpdGlvbiArPSBidWZmZXJS
ZWFkU2l6ZTsKKyAgICB9CisgICAgY2xvc2VGaWxlKGluZGV4RmlsZSk7CisKKyAgICAvLyBjcmVh
dGUgc3RyaW5ncyBmcm9tIGJ1ZmZlcgorICAgIFN0cmluZyBoZWFkZXJDb250ZW50ID0gU3RyaW5n
KGJ1ZmZlci5kYXRhKCkpOworICAgIFZlY3RvcjxTdHJpbmc+IGluZGV4VVJMczsKKyAgICBoZWFk
ZXJDb250ZW50LnNwbGl0KCJcbiIsIGluZGV4VVJMcyk7CisgICAgYnVmZmVyLmNsZWFyKCk7CisK
KyAgICAvLyBhZGQgZW50cmllcyB0byBpbmRleAorICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGluZGV4VVJMcy5iZWdpbigpOworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBpbmRleFVSTHMuZW5kKCk7CisgICAgaWYgKGluZGV4VVJMcy5zaXpl
KCkgPiAxKQorICAgICAgICAtLWVuZDsgLy8gbGFzdCBsaW5lIGlzIGVtcHR5CisgICAgd2hpbGUg
KGl0ICE9IGVuZCkgeworICAgICAgICBTdHJpbmcgdXJsID0gaXQtPnN0cmlwV2hpdGVTcGFjZSgp
OworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4gY2FjaGVFbnRyeShu
ZXcgQ3VybENhY2hlRW50cnkodXJsLCBtX2NhY2hlRGlyKSk7CisgICAgICAgIGlmIChjYWNoZUVu
dHJ5LT5pc0NhY2hlZCgpKQorICAgICAgICAgICAgbV9pbmRleC5zZXQodXJsLCBzdGQ6Om1vdmUo
Y2FjaGVFbnRyeSkpOworCisgICAgICAgICsraXQ7CisgICAgfQorfQorCit2b2lkIEN1cmxDYWNo
ZU1hbmFnZXI6OnNhdmVJbmRleCgpCit7CisgICAgaWYgKG1fZGlzYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIFN0cmluZyBpbmRleEZpbGVQYXRoKG1fY2FjaGVEaXIpOworICAgIGluZGV4
RmlsZVBhdGguYXBwZW5kKCJpbmRleC5kYXQiKTsKKworICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBp
bmRleEZpbGUgPSBvcGVuRmlsZShpbmRleEZpbGVQYXRoLCBPcGVuRm9yV3JpdGUpOworICAgIGlm
ICghaXNIYW5kbGVWYWxpZChpbmRleEZpbGUpKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiQ2Fj
aGUgRXJyb3I6IENvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0ZVxuIiwgaW5kZXhGaWxlUGF0aC5s
YXRpbjEoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSGFzaE1hcDxT
dHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1faW5kZXguYmVnaW4oKTsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRy
PEN1cmxDYWNoZUVudHJ5Pj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1faW5kZXguZW5kKCk7Cisg
ICAgd2hpbGUgKGl0ICE9IGVuZCkgeworICAgICAgICBjb25zdCBDU3RyaW5nJiB1cmxMYXRpbjEg
PSBpdC0+a2V5LmxhdGluMSgpOworICAgICAgICB3cml0ZVRvRmlsZShpbmRleEZpbGUsIHVybExh
dGluMS5kYXRhKCksIHVybExhdGluMS5sZW5ndGgoKSk7CisgICAgICAgIHdyaXRlVG9GaWxlKGlu
ZGV4RmlsZSwgIlxuIiwgMSk7CisgICAgICAgICsraXQ7CisgICAgfQorCisgICAgY2xvc2VGaWxl
KGluZGV4RmlsZSk7Cit9CisKK3ZvaWQgQ3VybENhY2hlTWFuYWdlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKFJlc291cmNlSGFuZGxlKiBqb2IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorewor
ICAgIGlmIChtX2Rpc2FibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgdXJsID0g
am9iLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsKKworICAgIGlmIChyZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpID09IDMwNCkKKyAgICAgICAgbG9hZENhY2hlZERhdGEodXJsLCBqb2Is
IHJlc3BvbnNlKTsKKyAgICBlbHNlIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDIw
MCkgeworICAgICAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEN1cmxDYWNoZUVu
dHJ5Pj46Oml0ZXJhdG9yIGl0ID0gbV9pbmRleC5maW5kKHVybCk7CisgICAgICAgIGlmIChpdCAh
PSBtX2luZGV4LmVuZCgpKQorICAgICAgICAgICAgaW52YWxpZGF0ZUNhY2hlRW50cnkodXJsKTsK
KworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3VybENhY2hlRW50cnk+IGVudHJ5KG5ldyBDdXJs
Q2FjaGVFbnRyeSh1cmwsIG1fY2FjaGVEaXIpKTsKKyAgICAgICAgYm9vbCBjYWNoZWFibGUgPSBl
bnRyeS0+cGFyc2VSZXNwb25zZUhlYWRlcnMocmVzcG9uc2UpOworICAgICAgICBpZiAoY2FjaGVh
YmxlKSB7CisgICAgICAgICAgICBtX2luZGV4LnNldCh1cmwsIHN0ZDo6bW92ZShlbnRyeSkpOwor
ICAgICAgICAgICAgc2F2ZVJlc3BvbnNlSGVhZGVycyh1cmwsIHJlc3BvbnNlKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBlbnRyeS0+aW52YWxpZGF0ZSgpOworICAgIH0gZWxzZQorICAg
ICAgICBpbnZhbGlkYXRlQ2FjaGVFbnRyeSh1cmwpOworfQorCit2b2lkIEN1cmxDYWNoZU1hbmFn
ZXI6OmRpZEZpbmlzaExvYWRpbmcoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgaWYgKG1fZGlz
YWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1
ZV9wdHI8Q3VybENhY2hlRW50cnk+Pjo6aXRlcmF0b3IgaXQgPSBtX2luZGV4LmZpbmQodXJsKTsK
KyAgICBpZiAoaXQgIT0gbV9pbmRleC5lbmQoKSkKKyAgICAgICAgaXQtPnZhbHVlLT5kaWRGaW5p
c2hMb2FkaW5nKCk7Cit9CisKK2Jvb2wgQ3VybENhY2hlTWFuYWdlcjo6aXNDYWNoZWQoY29uc3Qg
U3RyaW5nJiB1cmwpCit7CisgICAgaWYgKG1fZGlzYWJsZWQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Q3VybENhY2hlRW50cnk+
Pjo6aXRlcmF0b3IgaXQgPSBtX2luZGV4LmZpbmQodXJsKTsKKyAgICBpZiAoaXQgIT0gbV9pbmRl
eC5lbmQoKSkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc0NhY2hlZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaW52YWxpZGF0ZUNhY2hlRW50cnkodXJsKTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitIVFRQSGVhZGVyTWFwJiBDdXJsQ2FjaGVNYW5h
Z2VyOjpyZXF1ZXN0SGVhZGVycyhjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBBU1NFUlQoaXND
YWNoZWQodXJsKSk7CisgICAgcmV0dXJuIG1faW5kZXguZmluZCh1cmwpLT52YWx1ZS0+cmVxdWVz
dEhlYWRlcnMoKTsKK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRSZWNlaXZlRGF0YShj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAg
aWYgKG1fZGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBz
dGQ6OnVuaXF1ZV9wdHI8Q3VybENhY2hlRW50cnk+Pjo6aXRlcmF0b3IgaXQgPSBtX2luZGV4LmZp
bmQodXJsKTsKKyAgICBpZiAoaXQgIT0gbV9pbmRleC5lbmQoKSkKKyAgICAgICAgaWYgKCFpdC0+
dmFsdWUtPnNhdmVDYWNoZWREYXRhKGRhdGEsIHNpemUpKQorICAgICAgICAgICAgaW52YWxpZGF0
ZUNhY2hlRW50cnkodXJsKTsKK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpzYXZlUmVzcG9u
c2VIZWFkZXJzKGNvbnN0IFN0cmluZyYgdXJsLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
K3sKKyAgICBpZiAobV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaE1hcDxT
dHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxDdXJsQ2FjaGVFbnRyeT4+OjppdGVyYXRvciBpdCA9IG1f
aW5kZXguZmluZCh1cmwpOworICAgIGlmIChpdCAhPSBtX2luZGV4LmVuZCgpKQorICAgICAgICBp
ZiAoIWl0LT52YWx1ZS0+c2F2ZVJlc3BvbnNlSGVhZGVycyhyZXNwb25zZSkpCisgICAgICAgICAg
ICBpbnZhbGlkYXRlQ2FjaGVFbnRyeSh1cmwpOworfQorCit2b2lkIEN1cmxDYWNoZU1hbmFnZXI6
OmludmFsaWRhdGVDYWNoZUVudHJ5KGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlmIChtX2Rp
c2FibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlx
dWVfcHRyPEN1cmxDYWNoZUVudHJ5Pj46Oml0ZXJhdG9yIGl0ID0gbV9pbmRleC5maW5kKHVybCk7
CisgICAgaWYgKGl0ICE9IG1faW5kZXguZW5kKCkpIHsKKyAgICAgICAgaXQtPnZhbHVlLT5pbnZh
bGlkYXRlKCk7CisgICAgICAgIG1faW5kZXgucmVtb3ZlKHVybCk7CisgICAgfQorfQorCit2b2lk
IEN1cmxDYWNoZU1hbmFnZXI6OmRpZEZhaWwoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgaW52
YWxpZGF0ZUNhY2hlRW50cnkodXJsKTsKK30KKwordm9pZCBDdXJsQ2FjaGVNYW5hZ2VyOjpsb2Fk
Q2FjaGVkRGF0YShjb25zdCBTdHJpbmcmIHVybCwgUmVzb3VyY2VIYW5kbGUqIGpvYiwgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKG1fZGlzYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8Q3VybENhY2hlRW50
cnk+Pjo6aXRlcmF0b3IgaXQgPSBtX2luZGV4LmZpbmQodXJsKTsKKyAgICBpZiAoaXQgIT0gbV9p
bmRleC5lbmQoKSkgeworICAgICAgICBpdC0+dmFsdWUtPnNldFJlc3BvbnNlRnJvbUNhY2hlZEhl
YWRlcnMocmVzcG9uc2UpOworICAgICAgICBpZiAoIWl0LT52YWx1ZS0+bG9hZENhY2hlZERhdGEo
am9iKSkKKyAgICAgICAgICAgIGludmFsaWRhdGVDYWNoZUVudHJ5KHVybCk7CisgICAgfQorfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bENhY2hlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxDYWNoZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGE5
MTY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxDYWNoZU1hbmFnZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBP
RiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9G
IFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ3VybENhY2hlTWFuYWdlcl9oCisjZGVmaW5lIEN1cmxDYWNoZU1hbmFn
ZXJfaAorCisjaW5jbHVkZSAiQ3VybENhY2hlRW50cnkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEN1cmxDYWNoZU1hbmFnZXIgeworCitwdWJsaWM6CisgICAgc3RhdGlj
IEN1cmxDYWNoZU1hbmFnZXImIGdldEluc3RhbmNlKCk7CisKKyAgICBjb25zdCBTdHJpbmcmIGdl
dENhY2hlRGlyZWN0b3J5KCkgeyByZXR1cm4gbV9jYWNoZURpcjsgfQorICAgIHZvaWQgc2V0Q2Fj
aGVEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7CisKKyAgICBib29sIGlzQ2FjaGVkKGNvbnN0IFN0
cmluZyYpOworICAgIEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFkZXJzKGNvbnN0IFN0cmluZyYp
OyAvLyBsb2FkIGhlYWRlcnMKKworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNl
SGFuZGxlKiwgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29u
c3QgU3RyaW5nJiwgY29uc3QgY2hhciosIHNpemVfdCk7IC8vIHNhdmUgZGF0YQorICAgIHZvaWQg
ZGlkRmFpbChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoY29uc3Qg
U3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgQ3VybENhY2hlTWFuYWdlcigpOworICAgIH5DdXJs
Q2FjaGVNYW5hZ2VyKCk7CisgICAgQ3VybENhY2hlTWFuYWdlcihDdXJsQ2FjaGVNYW5hZ2VyIGNv
bnN0Jik7CisgICAgdm9pZCBvcGVyYXRvcj0oQ3VybENhY2hlTWFuYWdlciBjb25zdCYpOworCisg
ICAgU3RyaW5nIG1fY2FjaGVEaXI7CisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0
cjxDdXJsQ2FjaGVFbnRyeT4+IG1faW5kZXg7CisgICAgYm9vbCBtX2Rpc2FibGVkOworCisgICAg
dm9pZCBzYXZlSW5kZXgoKTsKKyAgICB2b2lkIGxvYWRJbmRleCgpOworCisgICAgdm9pZCBzYXZl
UmVzcG9uc2VIZWFkZXJzKGNvbnN0IFN0cmluZyYsIFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2
b2lkIGludmFsaWRhdGVDYWNoZUVudHJ5KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgbG9hZENh
Y2hlZERhdGEoY29uc3QgU3RyaW5nJiwgUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlc3BvbnNl
Jik7Cit9OworCit9CisKKyNlbmRpZiAvLyBDdXJsQ2FjaGVNYW5hZ2VyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlTWFuYWdlci5jcHAKaW5kZXggZDgxMjFhMi4uMDNhNmJlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxl
TWFuYWdlci5jcHAKQEAgLTksNiArOSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQnJlbnQg
RnVsZ2hhbSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMyBQZXRl
ciBHYWwgPGdhbHBldGVyQGluZi51LXN6ZWdlZC5odT4sIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQWxleCBDaHJpc3RlbnNlbiA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zOCw2ICszOSw3IEBACiAK
ICNpbmNsdWRlICJDb29raWVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2Uu
aCIKKyNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRGF0YVVSTC5oIgog
I2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpA
QCAtMjE4LDggKzIyMCwxMCBAQCBzdGF0aWMgc2l6ZV90IHdyaXRlQ2FsbGJhY2sodm9pZCogcHRy
LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogCiAgICAgaWYgKGQtPm1f
bXVsdGlwYXJ0SGFuZGxlKQogICAgICAgICBkLT5tX211bHRpcGFydEhhbmRsZS0+Y29udGVudFJl
Y2VpdmVkKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCB0b3RhbFNpemUpOwotICAgIGVs
c2UgaWYgKGQtPmNsaWVudCgpKQorICAgIGVsc2UgaWYgKGQtPmNsaWVudCgpKSB7CiAgICAgICAg
IGQtPmNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YShqb2IsIHN0YXRpY19jYXN0PGNoYXIqPihwdHIp
LCB0b3RhbFNpemUsIDApOworICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgp
LmRpZFJlY2VpdmVEYXRhKGpvYi0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCksIHN0YXRp
Y19jYXN0PGNoYXIqPihwdHIpLCB0b3RhbFNpemUpOworICAgIH0KIAogICAgIHJldHVybiB0b3Rh
bFNpemU7CiB9CkBAIC00MjksOCArNDMzLDEwIEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJh
Y2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNsaWVudCkKKyAgICAgICAgaWYg
KGNsaWVudCkgewogICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2Uoam9iLCBk
LT5tX3Jlc3BvbnNlKTsKKyAgICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNl
KCkuZGlkUmVjZWl2ZVJlc3BvbnNlKGpvYiwgZC0+bV9yZXNwb25zZSk7CisgICAgICAgIH0KICAg
ICAgICAgZC0+bV9yZXNwb25zZS5zZXRSZXNwb25zZUZpcmVkKHRydWUpOwogCiAgICAgfSBlbHNl
IHsKQEAgLTU3OCwxNiArNTg0LDIwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3du
bG9hZFRpbWVyQ2FsbGJhY2soVGltZXI8UmVzb3VyY2VIYW5kbGVNYW5hZ2VyPioKICAgICAgICAg
ICAgIGlmIChkLT5tX211bHRpcGFydEhhbmRsZSkKICAgICAgICAgICAgICAgICBkLT5tX211bHRp
cGFydEhhbmRsZS0+Y29udGVudEVuZGVkKCk7CiAKLSAgICAgICAgICAgIGlmIChkLT5jbGllbnQo
KSkKKyAgICAgICAgICAgIGlmIChkLT5jbGllbnQoKSkgewogICAgICAgICAgICAgICAgIGQtPmNs
aWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKGpvYiwgMCk7CisgICAgICAgICAgICAgICAgQ3VybENh
Y2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRGaW5pc2hMb2FkaW5nKGpvYi0+Zmlyc3RSZXF1
ZXN0KCkudXJsKCkuc3RyaW5nKCkpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgY2hhciogdXJsID0gMDsKICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZv
KGQtPm1faGFuZGxlLCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmdXJsKTsKICNpZm5kZWYgTkRF
QlVHCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkN1cmwgRVJST1IgZm9yIHVybD0nJXMn
LCBlcnJvcjogJyVzJ1xuIiwgdXJsLCBjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3Vs
dCkpOwogI2VuZGlmCi0gICAgICAgICAgICBpZiAoZC0+Y2xpZW50KCkpCisgICAgICAgICAgICBp
ZiAoZC0+Y2xpZW50KCkpIHsKICAgICAgICAgICAgICAgICBkLT5jbGllbnQoKS0+ZGlkRmFpbChq
b2IsIFJlc291cmNlRXJyb3IoU3RyaW5nKCksIG1zZy0+ZGF0YS5yZXN1bHQsIFN0cmluZyh1cmwp
LCBTdHJpbmcoY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpKSkpOworICAgICAg
ICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkRmFpbChqb2ItPmZp
cnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIHJlbW92ZUZyb21DdXJsKGpvYik7CkBAIC05MzgsNiArOTQ4LDE5IEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKiBq
b2IpCiAgICAgc3RydWN0IGN1cmxfc2xpc3QqIGhlYWRlcnMgPSAwOwogICAgIGlmIChqb2ItPmZp
cnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKS5zaXplKCkgPiAwKSB7CiAgICAgICAgIEhU
VFBIZWFkZXJNYXAgY3VzdG9tSGVhZGVycyA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRl
ckZpZWxkcygpOworCisgICAgICAgIGlmIChDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgp
LmlzQ2FjaGVkKHVybCkpIHsKKyAgICAgICAgICAgIEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFk
ZXJzID0gQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5yZXF1ZXN0SGVhZGVycyh1cmwp
OworCisgICAgICAgICAgICAvLyBhcHBlbmQgYWRkaXRpb25hbCBjYWNoZSBpbmZvcm1hdGlvbgor
ICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVh
ZGVycy5iZWdpbigpOworICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcmVxdWVzdEhlYWRlcnMuZW5kKCk7CisgICAgICAgICAgICB3aGlsZSAoaXQgIT0gZW5k
KSB7CisgICAgICAgICAgICAgICAgY3VzdG9tSGVhZGVycy5zZXQoaXQtPmtleSwgaXQtPnZhbHVl
KTsKKyAgICAgICAgICAgICAgICArK2l0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAg
ICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5l
bmQoKTsKICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1
c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBTdHJp
bmcga2V5ID0gaXQtPmtleTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>