<?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>177728</bug_id>
          
          <creation_ts>2017-10-01 16:28:08 -0700</creation_ts>
          <short_desc>Merge readFilenames() and read(PasteboardFileReader)</short_desc>
          <delta_ts>2017-10-02 00:03:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1355080</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 16:28:08 -0700</bug_when>
    <thetext>In https://trac.webkit.org/r222656, we introduced PasteboardFileReader which reads a single data-like file out of pasteboard.
Generalizing this class to support reading multiple files off of pasteboard allows us to eliminate
both Pasteboard::readFilenames() and Pasteboard::typesTreatedAsFiles now that we have Pasteboard::containsFiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355081</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-01 16:28:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/34761725&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355083</commentid>
    <comment_count>2</comment_count>
      <attachid>322337</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 16:51:53 -0700</bug_when>
    <thetext>Created attachment 322337
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355088</commentid>
    <comment_count>3</comment_count>
      <attachid>322339</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 17:19:21 -0700</bug_when>
    <thetext>Created attachment 322339
Fixed builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355091</commentid>
    <comment_count>4</comment_count>
      <attachid>322340</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 18:32:54 -0700</bug_when>
    <thetext>Created attachment 322340
Fixed Windows build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355093</commentid>
    <comment_count>5</comment_count>
      <attachid>322339</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-01 18:36:32 -0700</bug_when>
    <thetext>Comment on attachment 322339
Fixed builds

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

Not sure if the interface is quite right. The function doing the pasteboard processing needs to know if the client is going to need things or not.

&gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:106
&gt; +        return nullptr; // Don&apos;t support TIFF on iOS for now.

This comment doesn’t make sense because the line above says ASSERT_NOT_REACHED. Which is it? Not reached, or reached but not supported?

&gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:163
&gt; +    Vector&lt;String&gt; types;
&gt;      copyToVector(result, types);
&gt;      return types;

This is so lame. We should have a way to convert a ListHashSet to a vector with a return value rather than an out argument.

&gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:185
&gt; +    HashSet&lt;const char*&gt; existingMIMEs;

This HashSet is going to use the addresses of the string literals to define equality. Is that OK, or do we need a set that will treat equal strings that might not be the same literal at different addresses as equal too?

If we do want to use the pointers, we should add a comment to imageTypeToMIMEType cautioning it to only use each string literal once since they are not guaranteed to be coalesced.

&gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:191
&gt; +        if (imageType == ImageType::Invalid || existingMIMEs.contains(mimeType))
&gt; +            continue;
&gt; +        existingMIMEs.add(mimeType);

Double hash table lookup here. Need to combine the contains and the add by using the return value of &quot;add&quot; to avoid doing it twice.

&gt; Source/WebCore/platform/win/PasteboardWin.cpp:312
&gt; +struct PasteboardFileCounter final : public PasteboardFileReader {

No need for &quot;public&quot; here.

&gt; Source/WebCore/platform/win/PasteboardWin.cpp:313
&gt; +

Extra blank line here.

&gt; Source/WebCore/platform/win/PasteboardWin.cpp:315
&gt; +    void readBuffer(const String&amp;, const String&amp;, Ref&lt;SharedBuffer&gt;&amp;&amp;) final { ASSERT_NOT_REACHED(); }

This is ugly. It makes me think that we are using one type for two different purposes.

&gt; Source/WebCore/platform/win/PasteboardWin.cpp:355
&gt;      if (!m_dragDataMap.contains(cfHDropFormat()-&gt;cfFormat))
&gt; -        return fileNames;
&gt; -    return m_dragDataMap.get(cfHDropFormat()-&gt;cfFormat);
&gt; +        return;
&gt; +
&gt; +    Vector&lt;String&gt; list = m_dragDataMap.get(cfHDropFormat()-&gt;cfFormat);

Double hash table lookup here. Should use find instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355096</commentid>
    <comment_count>6</comment_count>
      <attachid>322340</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-01 18:52:16 -0700</bug_when>
    <thetext>Comment on attachment 322340
Fixed Windows build

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

&gt; Source/WebCore/editing/WebCorePasteboardFileReader.cpp:45
&gt; +    files.append(File::create(Blob::create(WTFMove(data), type), filename));

Is it really necessary to do this File wrapping a Blob dance? Given that a File isa Blob, I think you should be able to avoid it.

&gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:107
&gt; +#if PLATFORM(MAC)
&gt; +        return &quot;image/png&quot;; // For Web compatibility, we pretend to have PNG instead.
&gt; +#else
&gt;          ASSERT_NOT_REACHED();
&gt; -        return nullptr;
&gt; +        return nullptr; // Don&apos;t support TIFF on iOS for now.
&gt; +#endif

This would be slightly nicer as a #if HAVE(TIFF)

&gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:153
&gt; +    Vector&lt;String&gt; cocoaTypes = readTypesWithSecurityCheck();

auto?

&gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:154
&gt; +    if (!cocoaTypes.size())

I prefer this as cocoaTypes.isEmpty()

&gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:184
&gt; +    Vector&lt;String&gt; cocoaTypes = readTypesWithSecurityCheck();

auto?

&gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:188
&gt; +        const char* mimeType = imageTypeToMIMEType(imageType);

auto?

&gt; Source/WebCore/platform/win/PasteboardWin.cpp:314
&gt; +struct PasteboardFileCounter final : public PasteboardFileReader {
&gt; +
&gt; +    void readFilename(const String&amp;) final { ++count; }

Extra newline.

&gt; Source/WebCore/platform/win/PasteboardWin.cpp:355
&gt; +    Vector&lt;String&gt; list = m_dragDataMap.get(cfHDropFormat()-&gt;cfFormat);

auto? Or just put the call to get in loop header:

for (auto&amp; filename : m_dragDataMap.get(cfHDropFormat()-&gt;cfFormat))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355097</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 18:54:23 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 322339 [details]
&gt; Fixed builds
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=322339&amp;action=review
&gt; 
&gt; Not sure if the interface is quite right. The function doing the pasteboard
&gt; processing needs to know if the client is going to need things or not.

I don&apos;t follow. Any suggestions on how to improve it?

&gt; &gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:106
&gt; &gt; +        return nullptr; // Don&apos;t support TIFF on iOS for now.
&gt; 
&gt; This comment doesn’t make sense because the line above says
&gt; ASSERT_NOT_REACHED. Which is it? Not reached, or reached but not supported?

What I meant is that we don&apos;t expect reach there since we don&apos;t support TIFF on iOS. Maybe I can just get rid of the comment since we already have a comment about it in imageTypeToMIMEType.

&gt; &gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:163
&gt; &gt; +    Vector&lt;String&gt; types;
&gt; &gt;      copyToVector(result, types);
&gt; &gt;      return types;
&gt; 
&gt; This is so lame. We should have a way to convert a ListHashSet to a vector
&gt; with a return value rather than an out argument.

Indeed. What&apos;s the canonical way to get a Vector out of HashSet, etc...? I was thinking that we can add Vector::from(~) which supports any iterable type.

&gt; &gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:185
&gt; &gt; +    HashSet&lt;const char*&gt; existingMIMEs;
&gt; 
&gt; This HashSet is going to use the addresses of the string literals to define
&gt; equality. Is that OK, or do we need a set that will treat equal strings that
&gt; might not be the same literal at different addresses as equal too?

Yes, this is indeed intended as imageTypeToMIMEType always returns a const char* to a static string literal.

&gt; If we do want to use the pointers, we should add a comment to
&gt; imageTypeToMIMEType cautioning it to only use each string literal once since
&gt; they are not guaranteed to be coalesced.

Sure. I can add a comment.

&gt; &gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:191
&gt; &gt; +        if (imageType == ImageType::Invalid || existingMIMEs.contains(mimeType))
&gt; &gt; +            continue;
&gt; &gt; +        existingMIMEs.add(mimeType);
&gt; 
&gt; Double hash table lookup here. Need to combine the contains and the add by
&gt; using the return value of &quot;add&quot; to avoid doing it twice.

Nice catch. Fixed.

&gt; &gt; Source/WebCore/platform/win/PasteboardWin.cpp:312
&gt; &gt; +struct PasteboardFileCounter final : public PasteboardFileReader {
&gt; 
&gt; No need for &quot;public&quot; here.

Fixed.

&gt; &gt; Source/WebCore/platform/win/PasteboardWin.cpp:313
&gt; &gt; +
&gt; 
&gt; Extra blank line here.

Removed.

&gt; &gt; Source/WebCore/platform/win/PasteboardWin.cpp:315
&gt; &gt; +    void readBuffer(const String&amp;, const String&amp;, Ref&lt;SharedBuffer&gt;&amp;&amp;) final { ASSERT_NOT_REACHED(); }
&gt; 
&gt; This is ugly. It makes me think that we are using one type for two different
&gt; purposes.

Well, so it&apos;s possible that Windows would eventually support adding buffer types. Right now, we only support filenames. I&apos;m gonna just replace this with ++count since that&apos;d make this code future proof.

&gt; &gt; Source/WebCore/platform/win/PasteboardWin.cpp:355
&gt; &gt;      if (!m_dragDataMap.contains(cfHDropFormat()-&gt;cfFormat))
&gt; &gt; -        return fileNames;
&gt; &gt; -    return m_dragDataMap.get(cfHDropFormat()-&gt;cfFormat);
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    Vector&lt;String&gt; list = m_dragDataMap.get(cfHDropFormat()-&gt;cfFormat);
&gt; 
&gt; Double hash table lookup here. Should use find instead.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355098</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 19:00:28 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #6)
&gt; Comment on attachment 322340 [details]
&gt; Fixed Windows build
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=322340&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/WebCorePasteboardFileReader.cpp:45
&gt; &gt; +    files.append(File::create(Blob::create(WTFMove(data), type), filename));
&gt; 
&gt; Is it really necessary to do this File wrapping a Blob dance? Given that a
&gt; File isa Blob, I think you should be able to avoid it.

We don&apos;t currently have File::create variant that takes Vector&lt;uint8_t&gt;.

&gt; &gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:107
&gt; &gt; +#if PLATFORM(MAC)
&gt; &gt; +        return &quot;image/png&quot;; // For Web compatibility, we pretend to have PNG instead.
&gt; &gt; +#else
&gt; &gt;          ASSERT_NOT_REACHED();
&gt; &gt; -        return nullptr;
&gt; &gt; +        return nullptr; // Don&apos;t support TIFF on iOS for now.
&gt; &gt; +#endif
&gt; 
&gt; This would be slightly nicer as a #if HAVE(TIFF)

Do we even have HAVE(TIFF)? Anyhow, we do support TIFF format elsewhere on iOS. It&apos;s just that I didn&apos;t add the support for converting TIFF to PNG on iOS for now since that&apos;s rather involved.

&gt; &gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:153
&gt; &gt; +    Vector&lt;String&gt; cocoaTypes = readTypesWithSecurityCheck();
&gt; 
&gt; auto?

Fixed.

&gt; &gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:154
&gt; &gt; +    if (!cocoaTypes.size())
&gt; 
&gt; I prefer this as cocoaTypes.isEmpty()

Sure. Replaced.

&gt; &gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:184
&gt; &gt; +    Vector&lt;String&gt; cocoaTypes = readTypesWithSecurityCheck();
&gt; 
&gt; auto?

Fixed.

&gt; &gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:188
&gt; &gt; +        const char* mimeType = imageTypeToMIMEType(imageType);
&gt; 
&gt; auto?

Hm... I think I&apos;d prefer keeping const char* so that it&apos;s clear the function itself returns that given Darin&apos;s comment about existingMIMEs being HashSet&lt;const char*&gt;.

&gt; &gt; Source/WebCore/platform/win/PasteboardWin.cpp:314
&gt; &gt; +struct PasteboardFileCounter final : public PasteboardFileReader {
&gt; &gt; +
&gt; &gt; +    void readFilename(const String&amp;) final { ++count; }
&gt; 
&gt; Extra newline.

Fixed.

&gt; &gt; Source/WebCore/platform/win/PasteboardWin.cpp:355
&gt; &gt; +    Vector&lt;String&gt; list = m_dragDataMap.get(cfHDropFormat()-&gt;cfFormat);
&gt; 
&gt; auto? Or just put the call to get in loop header:
&gt; 
&gt; for (auto&amp; filename : m_dragDataMap.get(cfHDropFormat()-&gt;cfFormat))

Sure. In fact, after addressing Darin&apos;s comment, this looks like:
    auto list = m_dragDataMap.find(cfHDropFormat()-&gt;cfFormat);
    if (list == m_dragDataMap.end())
        return;

    for (auto&amp; filename : *list)
        reader.readFilename(filename);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355100</commentid>
    <comment_count>9</comment_count>
      <attachid>322342</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 19:04:06 -0700</bug_when>
    <thetext>Created attachment 322342
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355101</commentid>
    <comment_count>10</comment_count>
      <attachid>322342</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 19:04:18 -0700</bug_when>
    <thetext>Comment on attachment 322342
Patch for landing

Wait for EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355104</commentid>
    <comment_count>11</comment_count>
      <attachid>322344</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 19:40:06 -0700</bug_when>
    <thetext>Created attachment 322344
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355107</commentid>
    <comment_count>12</comment_count>
      <attachid>322344</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-01 19:44:30 -0700</bug_when>
    <thetext>Comment on attachment 322344
Patch for landing

Wait for EWS again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355117</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-01 20:11:28 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 322339 [details]
&gt; 
&gt; &gt; Source/WebCore/platform/cocoa/PasteboardCocoa.mm:163
&gt; &gt; +    Vector&lt;String&gt; types;
&gt; &gt;      copyToVector(result, types);
&gt; &gt;      return types;
&gt; 
&gt; This is so lame. We should have a way to convert a ListHashSet to a vector
&gt; with a return value rather than an out argument.

Totally agree. Filed https://bugs.webkit.org/show_bug.cgi?id=177732 with some thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355145</commentid>
    <comment_count>14</comment_count>
      <attachid>322344</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-02 00:03:48 -0700</bug_when>
    <thetext>Comment on attachment 322344
Patch for landing

Clearing flags on attachment: 322344

Committed r222699: &lt;http://trac.webkit.org/changeset/222699&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355146</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-02 00:03:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322337</attachid>
            <date>2017-10-01 16:51:53 -0700</date>
            <delta_ts>2017-10-01 17:05:01 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-177728-20171001165151.patch</filename>
            <type>text/plain</type>
            <size>23242</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjY5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE3LTEwLTAxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1lcmdlIHJlYWRGaWxlbmFtZXMo
KSBhbmQgcmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzQ3NjE3MjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgR2VuZXJhbGl6ZWQgUGFzdGVib2FyZEZpbGVSZWFkZXIgdG8gcmV0dXJuIG11bHRpcGxlIGZp
bGVzIGluc3RlYWQgb2YganVzdCBvbmUgZmlsZSwgYW5kIHJlcGxhY2VkIHRoZSB1c2UKKyAgICAg
ICAgb2YgUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpIHdpdGggaXQuIEJlY2F1c2UgZWxpbWlu
YXRlcyB0aGUgbmVlZCBmb3IgZmluZGluZyB0aGUgbGlzdCBvZiB0eXBlcyB0byByZWFkCisgICAg
ICAgIGFzIGZpbGVzIGluIGFkZGl0aW9uIHRvIGZpbGUgbmFtZXMsIHRoaXMgcGF0Y2ggYWxzbyBy
ZW1vdmVzIFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwgY2hhbmdlLgorCisg
ICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJh
bnNmZXI6OmZpbGVzIGNvbnN0KTogTm93IG1ha2VzIGEgc2luZ2xlIGNhbGwgdG8gUGFzdGVib2Fy
ZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikKKyAgICAgICAgaW5zdGVhZCBvZiByZWFkaW5n
IGZpbGVuYW1lcyBhbmQgdGhlbiBmYWxsaW5nIGJhY2sgdG8gaXQuIEFsc28gZ290IHJpZCBvZiBp
Zi1kZWYgZm9yIGRyYWcgZHJvcCBjaGVja3MKKyAgICAgICAgc2luY2UgZm9yRHJhZygpIGFuZCBm
b3JGaWxlRHJhZygpIGFyZSBhbHdheXMgZGVmaW5lZCBzaW5jZSByMjIyNjg4LgorICAgICAgICAq
IGVkaXRpbmcvV2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlcjo6cmVhZEZpbGVuYW1lKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6OnJlYWRCdWZmZXIp
OiBSZW5hbWVkIGZyb20gcmVhZC4KKyAgICAgICAgKiBlZGl0aW5nL1dlYkNvcmVQYXN0ZWJvYXJk
RmlsZVJlYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmRGaWxlUmVhZGVyKTogUmVtb3ZlZCB0aGUgY29uc3RydWN0b3Ig
c2luY2Ugd2Ugbm8gbG9uZ2VyIHNwZWNpZnkgYSBzcGVjaWZpYyB0eXBlIHRvCisgICAgICAgIHJl
YWQgb2ZmIG9mIHBhc3RlYm9hcmQsIGFuZCByZW5hbWVkIHRoZSBleGlzdGluZyByZWFkIGZ1bmN0
aW9uIHRvIHJlYWRCdWZmZXIsIGFuZCBhZGRlZCBhIG5ldyB2YXJpYW50CisgICAgICAgIHdoaWNo
IHRha2VzIGEgZmlsZW5hbWUuCisgICAgICAgICogcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OmltYWdlVHlwZVRvRmFrZUZpbGVuYW1lKTogUmV0dXJuICJpbWFnZS9wbmciIGZv
ciBJbWFnZVR5cGU6OlRJRkYgKHRvIGRvIFRJRkYtdG8tUE5HIGNvbnZlcnNpb247CisgICAgICAg
IHNlZSByMjIyNjU2IGZvciB3aHkgdGhpcyBpcyBuZWVkZWQpIG5vdyB0aGF0IHRoaXMgZnVuY3Rp
b24gaXMgdXNlZCB0byBjb252ZXJ0IGRpcmVjdGx5IGZyb20gaW1hZ2UgdHlwZQorICAgICAgICBj
b252ZXJ0ZWQgZnJvbSBjb2NvYSB0eXBlIGluc3RlYWQgb2YgdGhlIG9uZSByZXZlcnNlLWNvbnZl
cnRlZCBmcm9tIE1JTUUgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6Om1pbWVUeXBlVG9JbWFnZVR5
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNUcmVhdGVk
QXNGaWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc0Zv
ckxlZ2FjeVVuc2FmZUJpbmRpbmdzKTogVXNlIG5ld2x5IGFkZGVkIHJlYWRUeXBlc1dpdGhTZWN1
cml0eUNoZWNrLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRJRkZUb1BORyk6IEV4dHJhY3Rl
ZCBvdXQgb2YgcmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikuCisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpyZWFkKTogR2VuZXJhbGl6ZWQgdG8gYWRkIGZpbGVuYW1lcyBhcyB3ZWxsIGFz
IGltYWdlIGJ1ZmZlcnMgYXMgZmlsZXMuIEJlY2F1c2Ugbm93CisgICAgICAgIHdlJ3JlIGNvbmNl
cnRpbmcgQ29jb2EgdHlwZXMgdG8gSW1hZ2VUeXBlLCB3ZSBubyBsb25nZXIgaGF2ZSB0byBkZXRl
Y3Qgd2hlbiBUSUZGLWFzLVBORyBjb252ZXJzaW9uIGlzCisgICAgICAgIGhhcHBlbmluZyBoZXJl
LiBXZSBqdXN0IHRyZWF0IEltYWdlVHlwZTo6VElGRiBhcyBQTkcgYW5kIGRvIHRoZSBjb252ZXJz
aW9uLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0
YSk6IFVzZSBuZXdseSBhZGRlZCByZWFkQnVmZmVyRm9yVHlwZVdpdGhTZWN1cml0eUNoZWNrLgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFR5cGVzV2l0aFNlY3VyaXR5Q2hlY2sp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRCdWZmZXJGb3JUeXBl
V2l0aFNlY3VyaXR5Q2hlY2spOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVi
b2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkKTogSW1wbGVt
ZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNvbnRhaW5zRmlsZXMp
OiBJbXBsZW1lbnRlZCB3aXRob3V0IGNhbGxpbmcgcmVhZEZpbGVuYW1lcywgd2hpY2ggaGFzIGJl
ZW4gZGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEZpbGVDb3VudGVyKTogQWRkZWQuIFVzZWQg
dG8gY291bnRzIHRoZSBudW1iZXIgb2YgZmlsZXMgaW4gdGhlIHBhc3RlYm9hcmQuCisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjb250YWluc0ZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmQ6OnJlYWQpOiBNb3ZlZCB0aGUgY29kZSB0byBleHRyYWN0IGZpbGVuYW1lcyBv
dXQgb2YgcmVhZEZpbGVuYW1lcy4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRG
aWxlbmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BF
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcyk6
IERlbGV0ZWQuCisKIDIwMTctMTAtMDEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBBZGQgc3VwcG9ydCBmb3IgRE9NIGFib3J0aW5nIChodHRwczovL2RvbS5zcGVjLndo
YXR3Zy5vcmcvI2Fib3J0aW5nLW9uZ29pbmctYWN0aXZpdGllcykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9EYXRhVHJhbnNmZXIuY3BwCShyZXZpc2lvbiAyMjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRGF0YVRyYW5zZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDMzICsxODIsMjYgQEAg
VmVjdG9yPFN0cmluZz4gRGF0YVRyYW5zZmVyOjp0eXBlcygpIGNvbgogCiBGaWxlTGlzdCYgRGF0
YVRyYW5zZmVyOjpmaWxlcygpIGNvbnN0CiB7Ci0gICAgYm9vbCBuZXdseUNyZWF0ZWRGaWxlTGlz
dCA9ICFtX2ZpbGVMaXN0OwotICAgIGlmICghbV9maWxlTGlzdCkKLSAgICAgICAgbV9maWxlTGlz
dCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKLQogICAgIGlmICghY2FuUmVhZERhdGEoKSkgewotICAg
ICAgICBtX2ZpbGVMaXN0LT5jbGVhcigpOworICAgICAgICBpZiAobV9maWxlTGlzdCkKKyAgICAg
ICAgICAgIG1fZmlsZUxpc3QtPmNsZWFyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
ZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAgICAgICAgIHJldHVybiAqbV9maWxlTGlz
dDsKICAgICB9CiAKLSNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIGlmIChmb3JEcmFnKCkg
JiYgIWZvckZpbGVEcmFnKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fZmlsZUxpc3QtPmlzRW1wdHko
KSk7CisgICAgICAgIGlmIChtX2ZpbGVMaXN0KQorICAgICAgICAgICAgQVNTRVJUKG1fZmlsZUxp
c3QtPmlzRW1wdHkoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZmlsZUxpc3QgPSBG
aWxlTGlzdDo6Y3JlYXRlKCk7CiAgICAgICAgIHJldHVybiAqbV9maWxlTGlzdDsKICAgICB9Ci0j
ZW5kaWYKIAotICAgIGlmIChuZXdseUNyZWF0ZWRGaWxlTGlzdCkgewotICAgICAgICBmb3IgKGF1
dG8mIGZpbGVuYW1lIDogbV9wYXN0ZWJvYXJkLT5yZWFkRmlsZW5hbWVzKCkpCi0gICAgICAgICAg
ICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGZpbGVuYW1lKSk7Ci0gICAgICAgIGlm
IChtX2ZpbGVMaXN0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdHlwZSA6
IG1fcGFzdGVib2FyZC0+dHlwZXNUcmVhdGVkQXNGaWxlcygpKSB7Ci0gICAgICAgICAgICAgICAg
V2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyIHJlYWRlcih0eXBlKTsKLSAgICAgICAgICAgICAg
ICBtX3Bhc3RlYm9hcmQtPnJlYWQocmVhZGVyKTsKLSAgICAgICAgICAgICAgICBpZiAocmVhZGVy
LmZpbGUpCi0gICAgICAgICAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChyZWFkZXIuZmls
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGlmICgh
bV9maWxlTGlzdCkgeworICAgICAgICBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIgcmVhZGVy
OworICAgICAgICBtX3Bhc3RlYm9hcmQtPnJlYWQocmVhZGVyKTsKKyAgICAgICAgbV9maWxlTGlz
dCA9IEZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShyZWFkZXIuZmlsZXMpKTsKICAgICB9CiAgICAg
cmV0dXJuICptX2ZpbGVMaXN0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJD
b3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvV2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmNwcAkocmV2aXNpb24gMjIyNjg4
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6On5XZWJDb3JlUGFzdGVib2FyZEZpbGVS
ZWFkZXIoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgV2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyOjpy
ZWFkKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQor
dm9pZCBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6OnJlYWRGaWxlbmFtZShjb25zdCBTdHJp
bmcmIGZpbGVuYW1lKQoreworICAgIGZpbGVzLmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZW5hbWUp
KTsKK30KKwordm9pZCBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6OnJlYWRCdWZmZXIoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlLCBSZWY8U2hhcmVkQnVmZmVy
PiYmIGJ1ZmZlcikKIHsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBkYXRhLmFwcGVu
ZChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwotICAgIGZpbGUgPSBGaWxlOjpjcmVh
dGUoQmxvYjo6Y3JlYXRlKFdURk1vdmUoZGF0YSksIHR5cGUpLCBmaWxlbmFtZSk7CisgICAgZmls
ZXMuYXBwZW5kKEZpbGU6OmNyZWF0ZShCbG9iOjpjcmVhdGUoV1RGTW92ZShkYXRhKSwgdHlwZSks
IGZpbGVuYW1lKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29y
ZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuaAkocmV2aXNpb24gMjIyNjg4KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTUgKzMyLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEZpbGU7CiAKIHN0cnVjdCBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIgZmluYWwgOiBQYXN0
ZWJvYXJkRmlsZVJlYWRlciB7Ci0gICAgV2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyKGNvbnN0
IFN0cmluZyYgdHlwZSkKLSAgICAgICAgOiBQYXN0ZWJvYXJkRmlsZVJlYWRlcih0eXBlKQotICAg
IHsgfQotCiAgICAgfldlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlcigpOwogCi0gICAgdm9pZCBy
ZWFkKGNvbnN0IFN0cmluZyYsIFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZpbmFsOworICAgIHZvaWQg
cmVhZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIHZvaWQgcmVhZEJ1ZmZlcihj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUsIFJlZjxTaGFyZWRCdWZm
ZXI+JiYpIGZpbmFsOwogCi0gICAgUmVmUHRyPEZpbGU+IGZpbGU7CisgICAgVmVjdG9yPFJlZjxG
aWxlPj4gZmlsZXM7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0
ZWJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2Fy
ZC5oCShyZXZpc2lvbiAyMjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJv
YXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgY2xhc3MgRG9jdW1lbnRGcmFn
bWVudDsKIGNsYXNzIERyYWdEYXRhOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1lOworY2xh
c3MgUGFzdGVib2FyZFN0cmF0ZWd5OwogY2xhc3MgUmFuZ2U7CiBjbGFzcyBTZWxlY3Rpb25EYXRh
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwpAQCAtMTQ4LDE0ICsxNDksOSBAQCBzdHJ1Y3QgUGFzdGVi
b2FyZFBsYWluVGV4dCB7CiB9OwogCiBzdHJ1Y3QgUGFzdGVib2FyZEZpbGVSZWFkZXIgewotICAg
IFBhc3RlYm9hcmRGaWxlUmVhZGVyKGNvbnN0IFN0cmluZyYgdHlwZSkKLSAgICAgICAgOiB0eXBl
KHR5cGUpCi0gICAgeyB9CiAgICAgdmlydHVhbCB+UGFzdGVib2FyZEZpbGVSZWFkZXIoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVhZChjb25zdCBTdHJpbmcmLCBSZWY8U2hhcmVk
QnVmZmVyPiYmKSA9IDA7Ci0KLSAgICBjb25zdCBTdHJpbmcgdHlwZTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVhZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVh
ZEJ1ZmZlcihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUsIFJlZjxT
aGFyZWRCdWZmZXI+JiYpID0gMDsKIH07CiAKIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGVuc3VyZSB0
aGF0IHRoZSBjb250ZW50cyBvZiBzYW1lT3JpZ2luQ3VzdG9tRGF0YSBhcmUgbm90IGFjY2Vzc2li
bGUgYWNyb3NzIGRpZmZlcmVudCBvcmlnaW5zLgpAQCAtMTk4LDcgKzE5NCw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOwogICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4g
dHlwZXNTYWZlRm9yQmluZGluZ3MoKTsKICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVz
Rm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKTsKLSAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5
cGVzVHJlYXRlZEFzRmlsZXMoKTsKICAgICB2aXJ0dWFsIFN0cmluZyByZWFkU3RyaW5nKGNvbnN0
IFN0cmluZyYgdHlwZSk7CiAgICAgdmlydHVhbCBTdHJpbmcgcmVhZFN0cmluZ0luQ3VzdG9tRGF0
YShjb25zdCBTdHJpbmcmIHR5cGUpOwogCkBAIC0yODUsNiArMjgwLDggQEAgcHJpdmF0ZToKICAg
ICBTdHJpbmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUs
IGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwogICAgIHN0
YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxT
dHJpbmc+JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpOwogICAgIFN0cmluZyByZWFkU3RyaW5nRm9yUGxhdGZvcm1UeXBl
KGNvbnN0IFN0cmluZyYpOworICAgIFZlY3RvcjxTdHJpbmc+IHJlYWRUeXBlc1dpdGhTZWN1cml0
eUNoZWNrKCk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVhZEJ1ZmZlckZvclR5cGVXaXRo
U2VjdXJpdHlDaGVjayhjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RL
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaAkocmV2
aXNpb24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2Fy
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBAIHB1YmxpYzoKICAgICBib29sIGhh
c0RhdGEoKSBmaW5hbDsKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc1NhZmVGb3JCaW5kaW5ncygp
IGZpbmFsIHsgcmV0dXJuIG1fdHlwZXM7IH0KICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc0Zvckxl
Z2FjeVVuc2FmZUJpbmRpbmdzKCkgZmluYWwgeyByZXR1cm4gbV90eXBlczsgfQotICAgIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzVHJlYXRlZEFzRmlsZXMoKSBmaW5hbCB7IHJldHVybiB7IH07IH0KICAg
ICBTdHJpbmcgcmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpIGZpbmFsOwogICAgIFN0cmlu
ZyByZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgZmluYWw7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2Eu
bW0JKHJldmlzaW9uIDIyMjY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bh
c3RlYm9hcmRDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksMTIgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIGltYWdlVHlwZVRvRmFrZUZpbGVuYQogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBJbWFnZVR5cGU6OlRJ
RkY6CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICByZXR1cm4gImltYWdlL3BuZyI7IC8vIEZv
ciBXZWIgY29tcGF0aWJpbGl0eSwgd2UgcHJldGVuZCB0byBoYXZlIFBORyBpbnN0ZWFkLgorI2Vs
c2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsgLy8gRG9uJ3Qgc3VwcG9ydCBUSUZGIG9uIGlPUyBm
b3Igbm93LgorI2VuZGlmCiAgICAgY2FzZSBJbWFnZVR5cGU6OlBORzoKICAgICAgICAgcmV0dXJu
ICJpbWFnZS5wbmciOwogICAgIGNhc2UgSW1hZ2VUeXBlOjpKUEVHOgpAQCAtMTEwLDQ3ICsxMTQs
MTEgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGltYWdlVHlwZVRvRmFrZUZpbGVuYQogICAgIH0KIH0K
IAotc3RhdGljIEltYWdlVHlwZSBtaW1lVHlwZVRvSW1hZ2VUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChtaW1lVHlwZSA9PSAiaW1hZ2Uv
dGlmZiIpCi0gICAgICAgIHJldHVybiBJbWFnZVR5cGU6OlRJRkY7Ci0jZW5kaWYKLSAgICBpZiAo
bWltZVR5cGUgPT0gImltYWdlL3BuZyIpCi0gICAgICAgIHJldHVybiBJbWFnZVR5cGU6OlBORzsK
LSAgICBpZiAobWltZVR5cGUgPT0gImltYWdlL2pwZWciKQotICAgICAgICByZXR1cm4gSW1hZ2VU
eXBlOjpKUEVHOwotICAgIGlmIChtaW1lVHlwZSA9PSAiaW1hZ2UvZ2lmIikKLSAgICAgICAgcmV0
dXJuIEltYWdlVHlwZTo6R0lGOwotICAgIHJldHVybiBJbWFnZVR5cGU6OkludmFsaWQ7Ci19Ci0K
IGJvb2wgUGFzdGVib2FyZDo6c2hvdWxkVHJlYXRDb2NvYVR5cGVBc0ZpbGUoY29uc3QgU3RyaW5n
JiBjb2NvYVR5cGUpCiB7CiAgICAgcmV0dXJuIGNvY29hVHlwZVRvSW1hZ2VUeXBlKGNvY29hVHlw
ZSkgIT0gSW1hZ2VUeXBlOjpJbnZhbGlkOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJk
Ojp0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBjb2NvYVR5cGVz
OwotICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlw
ZXMoY29jb2FUeXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0KLSAgICAvLyBFbmZvcmNlIGNoYW5n
ZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5z
dGVhZCBvZiBiZWZvcmUgdG8gYmUKLSAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdl
ZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgot
ICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCi0gICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKLSAgICBmb3IgKGF1dG8m
IGNvY29hVHlwZSA6IGNvY29hVHlwZXMpIHsKLSAgICAgICAgaWYgKGF1dG8qIG1pbWVUeXBlID0g
aW1hZ2VUeXBlVG9NSU1FVHlwZShjb2NvYVR5cGVUb0ltYWdlVHlwZShjb2NvYVR5cGUpKSkKLSAg
ICAgICAgICAgIHJlc3VsdC5hZGQobWltZVR5cGUpOwotICAgIH0KLQotICAgIFZlY3RvcjxTdHJp
bmc+IHR5cGVzOwotICAgIGNvcHlUb1ZlY3RvcihyZXN1bHQsIHR5cGVzKTsKLSAgICByZXR1cm4g
dHlwZXM7Ci19Ci0KIGJvb2wgUGFzdGVib2FyZDo6Y29udGFpbnNGaWxlcygpCiB7CiAgICAgaWYg
KCFwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldE51bWJlck9m
RmlsZXMobV9wYXN0ZWJvYXJkTmFtZSkpIHsKQEAgLTE4Miw2MyArMTUwLDU0IEBAIFZlY3RvcjxT
dHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckIKIAogVmVjdG9yPFN0cmluZz4gUGFzdGVi
b2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpCiB7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gdHlwZXM7Ci0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0KLSAgICAvLyBFbmZvcmNlIGNo
YW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcg
aW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKLSAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJl
dHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRh
LgotICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCi0gICAgICAgIHJl
dHVybiB7IH07CisgICAgVmVjdG9yPFN0cmluZz4gY29jb2FUeXBlcyA9IHJlYWRUeXBlc1dpdGhT
ZWN1cml0eUNoZWNrKCk7CisgICAgaWYgKCFjb2NvYVR5cGVzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIGNvY29hVHlwZXM7CiAKICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKLSAgICBm
b3IgKGF1dG8mIGNvY29hVHlwZSA6IHR5cGVzKQorICAgIGZvciAoYXV0byYgY29jb2FUeXBlIDog
Y29jb2FUeXBlcykKICAgICAgICAgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKHJl
c3VsdCwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKIAorICAgIFZlY3RvcjxTdHJpbmc+
IHR5cGVzOwogICAgIGNvcHlUb1ZlY3RvcihyZXN1bHQsIHR5cGVzKTsKICAgICByZXR1cm4gdHlw
ZXM7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCitzdGF0aWMgUmVmPFNoYXJlZEJ1ZmZlcj4gY29u
dmVydFRJRkZUb1BORyhTaGFyZWRCdWZmZXImIHRpZmZCdWZmZXIpCit7CisgICAgYXV0byBpbWFn
ZSA9IGFkb3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aERhdGE6IHRpZmZC
dWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCldKTsKKyAgICBOU0RhdGEgKnBuZ0RhdGEgPSBbaW1h
Z2UgcmVwcmVzZW50YXRpb25Vc2luZ1R5cGU6TlNQTkdGaWxlVHlwZSBwcm9wZXJ0aWVzOkB7IH1d
OworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShwbmdEYXRhKTsKK30KKyNlbmRpZgor
CiB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlcikKIHsK
LSAgICBhdXRvIGltYWdlVHlwZSA9IG1pbWVUeXBlVG9JbWFnZVR5cGUocmVhZGVyLnR5cGUpOwot
ICAgIGlmIChpbWFnZVR5cGUgPT0gSW1hZ2VUeXBlOjpJbnZhbGlkKQorICAgIGF1dG8gZmlsZW5h
bWVzID0gcmVhZEZpbGVuYW1lcygpOworICAgIGlmICghZmlsZW5hbWVzLmlzRW1wdHkoKSkgewor
ICAgICAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogZmlsZW5hbWVzKQorICAgICAgICAgICAgcmVh
ZGVyLnJlYWRGaWxlbmFtZShmaWxlbmFtZSk7CiAgICAgICAgIHJldHVybjsKLQotICAgIFN0cmlu
ZyBjb2NvYVR5cGVUb1JlYWQ7Ci0gICAgU3RyaW5nIHRpZmZDb2NvYVR5cGVJblBhc3RlYm9hcmQ7
Ci0gICAgVmVjdG9yPFN0cmluZz4gY29jb2FUeXBlczsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKGNvY29hVHlwZXMsIG1fcGFzdGVib2Fy
ZE5hbWUpOwotICAgIGZvciAoYXV0byYgY29jb2FUeXBlIDogY29jb2FUeXBlcykgewotICAgICAg
ICBhdXRvIGltYWdlVHlwZUluUGFzdGVib2FyZCA9IGNvY29hVHlwZVRvSW1hZ2VUeXBlKGNvY29h
VHlwZSk7Ci0gICAgICAgIGlmIChpbWFnZVR5cGVJblBhc3RlYm9hcmQgPT0gaW1hZ2VUeXBlKSB7
Ci0gICAgICAgICAgICBjb2NvYVR5cGVUb1JlYWQgPSBjb2NvYVR5cGU7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAodGlmZkNvY29hVHlwZUluUGFzdGVib2FyZC5p
c051bGwoKSAmJiBpbWFnZVR5cGVJblBhc3RlYm9hcmQgPT0gSW1hZ2VUeXBlOjpUSUZGKQotICAg
ICAgICAgICAgdGlmZkNvY29hVHlwZUluUGFzdGVib2FyZCA9IGNvY29hVHlwZTsKICAgICB9CiAK
LSAgICBib29sIHRpZmZXYXNUcmVhdGVkQXNQTkdGb3JXZWJDb21wYXRpYmlsaXR5ID0gaW1hZ2VU
eXBlID09IEltYWdlVHlwZTo6UE5HICYmIGNvY29hVHlwZVRvUmVhZC5pc051bGwoKSAmJiAhdGlm
ZkNvY29hVHlwZUluUGFzdGVib2FyZC5pc051bGwoKTsKLSAgICBpZiAodGlmZldhc1RyZWF0ZWRB
c1BOR0ZvcldlYkNvbXBhdGliaWxpdHkpCi0gICAgICAgIGNvY29hVHlwZVRvUmVhZCA9IHRpZmZD
b2NvYVR5cGVJblBhc3RlYm9hcmQ7Ci0KLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIg
PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5
cGUoY29jb2FUeXBlVG9SZWFkLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIC8vIEVuZm9yY2Ug
Y2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGlu
ZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2Ug
YmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRh
dGEuCi0gICAgaWYgKCFidWZmZXIgfHwgbV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUp
KQotICAgICAgICByZXR1cm47Ci0KKyAgICBWZWN0b3I8U3RyaW5nPiBjb2NvYVR5cGVzID0gcmVh
ZFR5cGVzV2l0aFNlY3VyaXR5Q2hlY2soKTsKKyAgICBIYXNoU2V0PGNvbnN0IGNoYXIqPiBleGlz
dGluZ01JTUVzOworICAgIGZvciAoYXV0byYgY29jb2FUeXBlIDogY29jb2FUeXBlcykgeworICAg
ICAgICBhdXRvIGltYWdlVHlwZSA9IGNvY29hVHlwZVRvSW1hZ2VUeXBlKGNvY29hVHlwZSk7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlID0gaW1hZ2VUeXBlVG9NSU1FVHlwZShpbWFnZVR5
cGUpOworICAgICAgICBpZiAoaW1hZ2VUeXBlID09IEltYWdlVHlwZTo6SW52YWxpZCB8fCBleGlz
dGluZ01JTUVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBleGlzdGluZ01JTUVzLmFkZChtaW1lVHlwZSk7CisgICAgICAgIGF1dG8gYnVmZmVyID0g
cmVhZEJ1ZmZlckZvclR5cGVXaXRoU2VjdXJpdHlDaGVjayhjb2NvYVR5cGUpOwogI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBpZiAodGlmZldhc1RyZWF0ZWRBc1BOR0ZvcldlYkNvbXBhdGliaWxpdHkp
IHsKLSAgICAgICAgYXV0byB0aWZmRGF0YSA9IGJ1ZmZlci0+Y3JlYXRlTlNEYXRhKCk7Ci0gICAg
ICAgIGF1dG8gaW1hZ2UgPSBhZG9wdE5TKFtbTlNCaXRtYXBJbWFnZVJlcCBhbGxvY10gaW5pdFdp
dGhEYXRhOiB0aWZmRGF0YS5nZXQoKV0pOwotICAgICAgICBOU0RhdGEgKnBuZ0RhdGEgPSBbaW1h
Z2UgcmVwcmVzZW50YXRpb25Vc2luZ1R5cGU6TlNQTkdGaWxlVHlwZSBwcm9wZXJ0aWVzOkB7IH1d
OwotICAgICAgICByZWFkZXIucmVhZChpbWFnZVR5cGVUb0Zha2VGaWxlbmFtZShpbWFnZVR5cGUp
LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShwbmdEYXRhKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgICAgIGlmIChidWZmZXIgJiYgaW1hZ2VUeXBlID09IEltYWdlVHlwZTo6VElGRikKKyAg
ICAgICAgICAgIGJ1ZmZlciA9IGNvbnZlcnRUSUZGVG9QTkcoYnVmZmVyLnJlbGVhc2VOb25OdWxs
KCkpOwogI2VuZGlmCi0gICAgcmVhZGVyLnJlYWQoaW1hZ2VUeXBlVG9GYWtlRmlsZW5hbWUoaW1h
Z2VUeXBlKSwgYnVmZmVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBpZiAoIWJ1ZmZlcikK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZWFkZXIucmVhZEJ1ZmZlcihpbWFnZVR5
cGVUb0Zha2VGaWxlbmFtZShpbWFnZVR5cGUpLCBtaW1lVHlwZSwgYnVmZmVyLnJlbGVhc2VOb25O
dWxsKCkpOworICAgIH0KIH0KIAogU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0eXBlKQpAQCAtMjQ4LDE0ICsyMDcsMTYgQEAgU3RyaW5nIFBhc3RlYm9hcmQ6OnJl
YWRTdHJpbmcoY29uc3QgU3RyaQogCiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3Vz
dG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgYXV0byBidWZmZXIgPSBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoY3VzdG9t
V2ViS2l0UGFzdGVib2FyZERhdGFUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICBhdXRvIGJ1
ZmZlciA9IHJlYWRCdWZmZXJGb3JUeXBlV2l0aFNlY3VyaXR5Q2hlY2soY3VzdG9tV2ViS2l0UGFz
dGVib2FyZERhdGFUeXBlKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIE5TU3RyaW5nICpjdXN0b21EYXRhVmFsdWUgPSBjdXN0b21EYXRhRnJvbVNoYXJlZEJ1
ZmZlcigqYnVmZmVyKS5zYW1lT3JpZ2luQ3VzdG9tRGF0YS5nZXQodHlwZSk7Ci0gICAgaWYgKCFj
dXN0b21EYXRhVmFsdWUubGVuZ3RoKQorICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2Vs
dmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9y
ZSB0byBiZQorICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGlu
ZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCisgICAgaWYgKG1fY2hh
bmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5j
aGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBy
ZXR1cm4gY3VzdG9tRGF0YVZhbHVlOworCisgICAgcmV0dXJuIGN1c3RvbURhdGFGcm9tU2hhcmVk
QnVmZmVyKCpidWZmZXIpLnNhbWVPcmlnaW5DdXN0b21EYXRhLmdldCh0eXBlKTsKIH0KIAogdm9p
ZCBQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURhdGEoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEm
IGRhdGEpCkBAIC0yNjgsNSArMjI5LDI5IEBAIGxvbmcgUGFzdGVib2FyZDo6Y2hhbmdlQ291bnQo
KSBjb25zdAogICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpOwogfQogCitWZWN0b3I8U3RyaW5n
PiBQYXN0ZWJvYXJkOjpyZWFkVHlwZXNXaXRoU2VjdXJpdHlDaGVjaygpCit7CisgICAgVmVjdG9y
PFN0cmluZz4gY29jb2FUeXBlczsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPmdldFR5cGVzKGNvY29hVHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOworCisg
ICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVj
ayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCisgICAgLy8gc3VyZSBpdCBk
b2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFj
Y2Vzc2luZyB0aGUgZGF0YS4KKyAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5h
bWUpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIGNvY29hVHlwZXM7Cit9CisK
K1JlZlB0cjxTaGFyZWRCdWZmZXI+IFBhc3RlYm9hcmQ6OnJlYWRCdWZmZXJGb3JUeXBlV2l0aFNl
Y3VyaXR5Q2hlY2soY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGF1dG8gYnVmZmVyID0gcGxh
dGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JUeXBlKHR5
cGUsIG1fcGFzdGVib2FyZE5hbWUpOworCisgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJz
ZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVm
b3JlIHRvIGJlCisgICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0
aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KKyAgICBpZiAobV9j
aGFuZ2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHJldHVybiBidWZmZXI7CiB9CiAKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAJKHJldmlzaW9uIDIyMjY4OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQyLDggKzI0MiwxMSBAQCB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFdlYkNv
bnRlCiB7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYp
Cit2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlcikKIHsK
KyAgICByZWFkRnJvbUNsaXBib2FyZCgpOworICAgIGZvciAoYXV0byYgZmlsZW5hbWUgOiBtX3Nl
bGVjdGlvbkRhdGEtPmZpbGVuYW1lcygpKQorICAgICAgICByZWFkZXIucmVhZEZpbGVuYW1lKGZp
bGVuYW1lKTsKIH0KIAogYm9vbCBQYXN0ZWJvYXJkOjpoYXNEYXRhKCkKQEAgLTI4NiwxMSArMjg5
LDYgQEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhYwogICAgIHJldHVy
biB0eXBlczsKIH0KIAotVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNG
aWxlcygpCi17Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRT
dHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7CkBA
IC0zMjEsMTMgKzMxOSw4IEBAIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21E
YXQKIAogYm9vbCBQYXN0ZWJvYXJkOjpjb250YWluc0ZpbGVzKCkKIHsKLSAgICByZXR1cm4gcmVh
ZEZpbGVuYW1lcygpLnNpemUoKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVh
ZEZpbGVuYW1lcygpCi17CiAgICAgcmVhZEZyb21DbGlwYm9hcmQoKTsKLSAgICByZXR1cm4gbV9z
ZWxlY3Rpb25EYXRhLT5maWxlbmFtZXMoKTsKKyAgICByZXR1cm4gIW1fc2VsZWN0aW9uRGF0YS0+
ZmlsZW5hbWVzKCkuaXNFbXB0eSgpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlTWFya3Vw
KGNvbnN0IFN0cmluZyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVi
b2FyZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bh
c3RlYm9hcmRXaW4uY3BwCShyZXZpc2lvbiAyMjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MywxMSArMjgz
LDYgQEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhYwogICAgIHJldHVy
biB2ZWN0b3I7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFz
RmlsZXMoKQotewotICAgIHJldHVybiB7IH07Ci19Ci0KIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBpZiAoIW1fZGF0YU9iamVjdCAmJiBt
X2RyYWdEYXRhTWFwLmlzRW1wdHkoKSkKQEAgLTMxNCw0MyArMzA5LDU1IEBAIFN0cmluZyBQYXN0
ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXQKICAgICByZXR1cm4geyB9OwogfQogCitzdHJ1
Y3QgUGFzdGVib2FyZEZpbGVDb3VudGVyIGZpbmFsIDogcHVibGljIFBhc3RlYm9hcmRGaWxlUmVh
ZGVyIHsKKworICAgIHZvaWQgcmVhZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsgKytj
b3VudDsgfQorICAgIHZvaWQgcmVhZEJ1ZmZlcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBSZWY8U2hhcmVkQnVmZmVyPiYmKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisK
KyAgICBjb3VudCB7IDAgfTsKK307CisKIGJvb2wgUGFzdGVib2FyZDo6Y29udGFpbnNGaWxlcygp
CiB7Ci0gICAgcmV0dXJuIHJlYWRGaWxlbmFtZXMoKS5zaXplKCk7IC8vIEZJWE1FOiBNYWtlIHRo
aXMgY29kZSBtb3JlIGVmZmljaWVudC4KKyAgICAvLyBGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlv
biBjYW4gYmUgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgYnkgYXZvaWRpbmcgY2FsbHMgdG8gRHJh
Z1F1ZXJ5RmlsZVcuCisgICAgUGFzdGVib2FyZEZpbGVDb3VudGVyIHJlYWRlcjsKKyAgICByZWFk
KHJlYWRlcik7CisgICAgcmV0dXJuIHJlYWRlci5jb3VudDsKIH0KIAotVmVjdG9yPFN0cmluZz4g
UGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpy
ZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyJiByZWFkZXIpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4g
ZmlsZU5hbWVzOwotCiAjaWYgVVNFKENGKQogICAgIGlmIChtX2RhdGFPYmplY3QpIHsKICAgICAg
ICAgU1RHTUVESVVNIG1lZGl1bTsKICAgICAgICAgaWYgKEZBSUxFRChtX2RhdGFPYmplY3QtPkdl
dERhdGEoY2ZIRHJvcEZvcm1hdCgpLCAmbWVkaXVtKSkpCi0gICAgICAgICAgICByZXR1cm4gZmls
ZU5hbWVzOworICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEhEUk9QIGhkcm9wID0gcmVp
bnRlcnByZXRfY2FzdDxIRFJPUD4oR2xvYmFsTG9jayhtZWRpdW0uaEdsb2JhbCkpOwogICAgICAg
ICBpZiAoIWhkcm9wKQotICAgICAgICAgICAgcmV0dXJuIGZpbGVOYW1lczsKKyAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICBXQ0hBUiBmaWxlbmFtZVtNQVhfUEFUSF07CiAgICAgICAgIFVJ
TlQgZmlsZUNvdW50ID0gRHJhZ1F1ZXJ5RmlsZVcoaGRyb3AsIDB4RkZGRkZGRkYsIDAsIDApOwog
ICAgICAgICBmb3IgKFVJTlQgaSA9IDA7IGkgPCBmaWxlQ291bnQ7IGkrKykgewogICAgICAgICAg
ICAgaWYgKCFEcmFnUXVlcnlGaWxlVyhoZHJvcCwgaSwgZmlsZW5hbWUsIFdURl9BUlJBWV9MRU5H
VEgoZmlsZW5hbWUpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZp
bGVOYW1lcy5hcHBlbmQoZmlsZW5hbWUpOworICAgICAgICAgICAgcmVhZGVyLnJlYWRGaWxlbmFt
ZShmaWxlbmFtZSk7CiAgICAgICAgIH0KIAogICAgICAgICBHbG9iYWxVbmxvY2sobWVkaXVtLmhH
bG9iYWwpOwogICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKCZtZWRpdW0pOwotICAgICAgICByZXR1
cm4gZmlsZU5hbWVzOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghbV9kcmFnRGF0
YU1hcC5jb250YWlucyhjZkhEcm9wRm9ybWF0KCktPmNmRm9ybWF0KSkKLSAgICAgICAgcmV0dXJu
IGZpbGVOYW1lczsKLSAgICByZXR1cm4gbV9kcmFnRGF0YU1hcC5nZXQoY2ZIRHJvcEZvcm1hdCgp
LT5jZkZvcm1hdCk7CisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxTdHJpbmc+IGxpc3Qg
PSBtX2RyYWdEYXRhTWFwLmdldChjZkhEcm9wRm9ybWF0KCktPmNmRm9ybWF0KTsKKyAgICBmb3Ig
KGF1dG8mIGZpbGVuYW1lIDogbGlzdCkKKyAgICAgICAgcmVhZGVyLnJlYWRGaWxlbmFtZShmaWxl
bmFtZSk7CiAjZWxzZQogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZpbGVOYW1l
czsKKyAgICByZXR1cm4geyB9OwogI2VuZGlmCiB9CiAKQEAgLTEwNzIsMTAgKzEwNzksNiBAQCB2
b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFdlYkNvbnRlCiB7CiB9CiAKLXZvaWQgUGFz
dGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYpCi17Ci19Ci0KIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEltYWdlJikKIHsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BFLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQRS5jcHAJKHJldmlzaW9uIDIyMjY4
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BFLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjIsMTEgKzYyLDYgQEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6
dHlwZXNGb3JMZWdhYwogICAgIHJldHVybiB0eXBlczsKIH0KIAotVmVjdG9yPFN0cmluZz4gUGFz
dGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcygpCi17Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQog
U3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAg
IHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnJlYWRT
dHJpbmdGcm9tUGFzdGVib2FyZCgwLCB0eXBlKTsKQEAgLTEzMCwxMiArMTI1LDYgQEAgYm9vbCBQ
YXN0ZWJvYXJkOjpjb250YWluc0ZpbGVzKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZlY3Rv
cjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Ci19Ci0KIGJvb2wgUGFzdGVib2Fy
ZDo6Y2FuU21hcnRSZXBsYWNlKCkKIHsKICAgICByZXR1cm4gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322339</attachid>
            <date>2017-10-01 17:19:21 -0700</date>
            <delta_ts>2017-10-01 19:02:20 -0700</delta_ts>
            <desc>Fixed builds</desc>
            <filename>bug-177728-20171001171919.patch</filename>
            <type>text/plain</type>
            <size>25479</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjY5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE3LTEwLTAxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1lcmdlIHJlYWRGaWxlbmFtZXMo
KSBhbmQgcmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzQ3NjE3MjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgR2VuZXJhbGl6ZWQgUGFzdGVib2FyZEZpbGVSZWFkZXIgdG8gcmV0dXJuIG11bHRpcGxlIGZp
bGVzIGluc3RlYWQgb2YganVzdCBvbmUgZmlsZSwgYW5kIHJlcGxhY2VkIHRoZSB1c2UKKyAgICAg
ICAgb2YgUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpIHdpdGggaXQuIEJlY2F1c2UgZWxpbWlu
YXRlcyB0aGUgbmVlZCBmb3IgZmluZGluZyB0aGUgbGlzdCBvZiB0eXBlcyB0byByZWFkCisgICAg
ICAgIGFzIGZpbGVzIGluIGFkZGl0aW9uIHRvIGZpbGUgbmFtZXMsIHRoaXMgcGF0Y2ggYWxzbyBy
ZW1vdmVzIFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKS4KKworICAgICAgICBOb3Rl
IHRoYXQgUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpIGNvbnRpbnVlcyB0byBleGlzdCBpbiBt
YWNPUyBhbmQgaU9TIGFzIGl0J3MgaW50ZXJuYWxseSB1c2VkIGJ5CisgICAgICAgIFBhc3RlYm9h
cmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXIpIGluIFBhc3RlYm9hcmRDb2NvYS5tbS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwg
Y2hhbmdlLgorCisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhVHJhbnNmZXI6OmZpbGVzIGNvbnN0KTogTm93IG1ha2VzIGEgc2luZ2xlIGNhbGwg
dG8gUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikKKyAgICAgICAgaW5zdGVh
ZCBvZiByZWFkaW5nIGZpbGVuYW1lcyBhbmQgdGhlbiBmYWxsaW5nIGJhY2sgdG8gaXQuIEFsc28g
Z290IHJpZCBvZiBpZi1kZWYgZm9yIGRyYWcgZHJvcCBjaGVja3MKKyAgICAgICAgc2luY2UgZm9y
RHJhZygpIGFuZCBmb3JGaWxlRHJhZygpIGFyZSBhbHdheXMgZGVmaW5lZCBzaW5jZSByMjIyNjg4
LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEZpbGVUeXBlUmVhZGVyKTogQWRkZWQuIEdl
dHMgdGhlIGxpc3Qgb2YgYWxsIGZpbGUgdHlwZXMuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkRmlsZVR5cGVSZWFkZXI6OnJlYWRGaWxlbmFtZSk6IEFkZGVkLiBHZXRzIHRoZSBsaXN0IG9m
IGFsbCBmaWxlIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEZpbGVUeXBlUmVh
ZGVyOjpyZWFkQnVmZmVyKTogQWRkZWQuIEdldHMgdGhlIGxpc3Qgb2YgYWxsIGZpbGUgdHlwZXMu
CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6Omhhc0ZpbGVPZlR5cGUpOiBSZWltcGxl
bWVudGVkIHVzaW5nIFBhc3RlYm9hcmRGaWxlVHlwZVJlYWRlci4KKyAgICAgICAgKiBlZGl0aW5n
L1dlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJD
b3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6OnJlYWRGaWxlbmFtZSk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyOjpyZWFkQnVmZmVyKTogUmVuYW1l
ZCBmcm9tIHJlYWQuCisgICAgICAgICogZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFk
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkLmg6CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkRmlsZVJlYWRlcik6IFJlbW92ZWQgdGhlIGNvbnN0cnVjdG9yIHNpbmNlIHdl
IG5vIGxvbmdlciBzcGVjaWZ5IGEgc3BlY2lmaWMgdHlwZSB0bworICAgICAgICByZWFkIG9mZiBv
ZiBwYXN0ZWJvYXJkLCBhbmQgcmVuYW1lZCB0aGUgZXhpc3RpbmcgcmVhZCBmdW5jdGlvbiB0byBy
ZWFkQnVmZmVyLCBhbmQgYWRkZWQgYSBuZXcgdmFyaWFudAorICAgICAgICB3aGljaCB0YWtlcyBh
IGZpbGVuYW1lLgorICAgICAgICAqIHBsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
OjppbWFnZVR5cGVUb0Zha2VGaWxlbmFtZSk6IFJldHVybiAiaW1hZ2UvcG5nIiBmb3IgSW1hZ2VU
eXBlOjpUSUZGICh0byBkbyBUSUZGLXRvLVBORyBjb252ZXJzaW9uOworICAgICAgICBzZWUgcjIy
MjY1NiBmb3Igd2h5IHRoaXMgaXMgbmVlZGVkKSBub3cgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHVz
ZWQgdG8gY29udmVydCBkaXJlY3RseSBmcm9tIGltYWdlIHR5cGUKKyAgICAgICAgY29udmVydGVk
IGZyb20gY29jb2EgdHlwZSBpbnN0ZWFkIG9mIHRoZSBvbmUgcmV2ZXJzZS1jb252ZXJ0ZWQgZnJv
bSBNSU1FIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZVRvSW1hZ2VUeXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lV
bnNhZmVCaW5kaW5ncyk6IFVzZSBuZXdseSBhZGRlZCByZWFkVHlwZXNXaXRoU2VjdXJpdHlDaGVj
ay4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUSUZGVG9QTkcpOiBFeHRyYWN0ZWQgb3V0IG9m
IHJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXIpLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6cmVhZCk6IEdlbmVyYWxpemVkIHRvIGFkZCBmaWxlbmFtZXMgYXMgd2VsbCBhcyBpbWFnZSBi
dWZmZXJzIGFzIGZpbGVzLiBCZWNhdXNlIG5vdworICAgICAgICB3ZSdyZSBjb25jZXJ0aW5nIENv
Y29hIHR5cGVzIHRvIEltYWdlVHlwZSwgd2Ugbm8gbG9uZ2VyIGhhdmUgdG8gZGV0ZWN0IHdoZW4g
VElGRi1hcy1QTkcgY29udmVyc2lvbiBpcworICAgICAgICBoYXBwZW5pbmcgaGVyZS4gV2UganVz
dCB0cmVhdCBJbWFnZVR5cGU6OlRJRkYgYXMgUE5HIGFuZCBkbyB0aGUgY29udmVyc2lvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEpOiBVc2Ug
bmV3bHkgYWRkZWQgcmVhZEJ1ZmZlckZvclR5cGVXaXRoU2VjdXJpdHlDaGVjay4KKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRUeXBlc1dpdGhTZWN1cml0eUNoZWNrKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkQnVmZmVyRm9yVHlwZVdpdGhTZWN1
cml0eUNoZWNrKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6IEltcGxlbWVudGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjb250YWluc0ZpbGVzKTogSW1wbGVt
ZW50ZWQgd2l0aG91dCBjYWxsaW5nIHJlYWRGaWxlbmFtZXMsIHdoaWNoIGhhcyBiZWVuIGRlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRGaWxlQ291bnRlcik6IEFkZGVkLiBVc2VkIHRvIGNvdW50
cyB0aGUgbnVtYmVyIG9mIGZpbGVzIGluIHRoZSBwYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZEZpbGVDb3VudGVyOjpyZWFkRmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZEZpbGVDb3VudGVyOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmQ6OmNvbnRhaW5zRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6cmVhZCk6IE1vdmVkIHRoZSBjb2RlIHRvIGV4dHJhY3QgZmlsZW5hbWVzIG91dCBvZiByZWFk
RmlsZW5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcyk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKTogRGVsZXRlZC4K
KwogMjAxNy0xMC0wMSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciBET00gYWJvcnRpbmcgKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8j
YWJvcnRpbmctb25nb2luZy1hY3Rpdml0aWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Rh
dGFUcmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFu
c2Zlci5jcHAJKHJldmlzaW9uIDIyMjY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJh
bnNmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNDcgKzE4Miw1MCBAQCBWZWN0b3I8U3Ry
aW5nPiBEYXRhVHJhbnNmZXI6OnR5cGVzKCkgY29uCiAKIEZpbGVMaXN0JiBEYXRhVHJhbnNmZXI6
OmZpbGVzKCkgY29uc3QKIHsKLSAgICBib29sIG5ld2x5Q3JlYXRlZEZpbGVMaXN0ID0gIW1fZmls
ZUxpc3Q7Ci0gICAgaWYgKCFtX2ZpbGVMaXN0KQotICAgICAgICBtX2ZpbGVMaXN0ID0gRmlsZUxp
c3Q6OmNyZWF0ZSgpOwotCiAgICAgaWYgKCFjYW5SZWFkRGF0YSgpKSB7Ci0gICAgICAgIG1fZmls
ZUxpc3QtPmNsZWFyKCk7CisgICAgICAgIGlmIChtX2ZpbGVMaXN0KQorICAgICAgICAgICAgbV9m
aWxlTGlzdC0+Y2xlYXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9maWxlTGlzdCA9
IEZpbGVMaXN0OjpjcmVhdGUoKTsKICAgICAgICAgcmV0dXJuICptX2ZpbGVMaXN0OwogICAgIH0K
IAotI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgaWYgKGZvckRyYWcoKSAmJiAhZm9yRmls
ZURyYWcoKSkgewotICAgICAgICBBU1NFUlQobV9maWxlTGlzdC0+aXNFbXB0eSgpKTsKKyAgICAg
ICAgaWYgKG1fZmlsZUxpc3QpCisgICAgICAgICAgICBBU1NFUlQobV9maWxlTGlzdC0+aXNFbXB0
eSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9maWxlTGlzdCA9IEZpbGVMaXN0Ojpj
cmVhdGUoKTsKICAgICAgICAgcmV0dXJuICptX2ZpbGVMaXN0OwogICAgIH0KLSNlbmRpZgogCi0g
ICAgaWYgKG5ld2x5Q3JlYXRlZEZpbGVMaXN0KSB7Ci0gICAgICAgIGZvciAoYXV0byYgZmlsZW5h
bWUgOiBtX3Bhc3RlYm9hcmQtPnJlYWRGaWxlbmFtZXMoKSkKLSAgICAgICAgICAgIG1fZmlsZUxp
c3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZW5hbWUpKTsKLSAgICAgICAgaWYgKG1fZmlsZUxp
c3QtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogbV9wYXN0ZWJv
YXJkLT50eXBlc1RyZWF0ZWRBc0ZpbGVzKCkpIHsKLSAgICAgICAgICAgICAgICBXZWJDb3JlUGFz
dGVib2FyZEZpbGVSZWFkZXIgcmVhZGVyKHR5cGUpOwotICAgICAgICAgICAgICAgIG1fcGFzdGVi
b2FyZC0+cmVhZChyZWFkZXIpOwotICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuZmlsZSkKLSAg
ICAgICAgICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKHJlYWRlci5maWxlLnJlbGVhc2VO
b25OdWxsKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgaWYgKCFtX2ZpbGVMaXN0
KSB7CisgICAgICAgIFdlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlciByZWFkZXI7CisgICAgICAg
IG1fcGFzdGVib2FyZC0+cmVhZChyZWFkZXIpOworICAgICAgICBtX2ZpbGVMaXN0ID0gRmlsZUxp
c3Q6OmNyZWF0ZShXVEZNb3ZlKHJlYWRlci5maWxlcykpOwogICAgIH0KICAgICByZXR1cm4gKm1f
ZmlsZUxpc3Q7CiB9CiAKLWJvb2wgRGF0YVRyYW5zZmVyOjpoYXNGaWxlT2ZUeXBlKGNvbnN0IFN0
cmluZyYgdHlwZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5S
ZWFkVHlwZXMoKSk7CitzdHJ1Y3QgUGFzdGVib2FyZEZpbGVUeXBlUmVhZGVyIGZpbmFsIDogUGFz
dGVib2FyZEZpbGVSZWFkZXIgeworICAgIHZvaWQgcmVhZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUpCisgICAgeworICAgICAgICB0eXBlcy5hZGQoRmlsZTo6Y29udGVudFR5cGVGb3JG
aWxlKGZpbGVuYW1lKSk7CisgICAgfQogCi0gICAgZm9yIChhdXRvJiBwYXRoIDogbV9wYXN0ZWJv
YXJkLT5yZWFkRmlsZW5hbWVzKCkpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoRmlsZTo6Y29udGVudFR5cGVGb3JGaWxlKHBhdGgpLCB0eXBlKSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIHZvaWQgcmVhZEJ1ZmZlcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYpCisgICAgeworICAgICAgICB0eXBlcy5hZGQo
dHlwZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IHR5cGVzOworfTsKKworYm9vbCBEYXRhVHJhbnNmZXI6
Omhhc0ZpbGVPZlR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGNhblJlYWRUeXBlcygpKTsKKyAgICBQYXN0ZWJvYXJkRmlsZVR5
cGVSZWFkZXIgcmVhZGVyOworICAgIG1fcGFzdGVib2FyZC0+cmVhZChyZWFkZXIpOworICAgIHJl
dHVybiByZWFkZXIudHlwZXMuY29udGFpbnModHlwZSk7CiB9CiAKIGJvb2wgRGF0YVRyYW5zZmVy
OjpoYXNTdHJpbmdPZlR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmNwcAko
cmV2aXNpb24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb3JlUGFzdGVi
b2FyZEZpbGVSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6On5XZWJDb3Jl
UGFzdGVib2FyZEZpbGVSZWFkZXIoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgV2ViQ29yZVBhc3RlYm9h
cmRGaWxlUmVhZGVyOjpyZWFkKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIFJlZjxTaGFyZWRCdWZm
ZXI+JiYgYnVmZmVyKQordm9pZCBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6OnJlYWRGaWxl
bmFtZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQoreworICAgIGZpbGVzLmFwcGVuZChGaWxlOjpj
cmVhdGUoZmlsZW5hbWUpKTsKK30KKwordm9pZCBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6
OnJlYWRCdWZmZXIoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlLCBS
ZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKIHsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsK
ICAgICBkYXRhLmFwcGVuZChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwotICAgIGZp
bGUgPSBGaWxlOjpjcmVhdGUoQmxvYjo6Y3JlYXRlKFdURk1vdmUoZGF0YSksIHR5cGUpLCBmaWxl
bmFtZSk7CisgICAgZmlsZXMuYXBwZW5kKEZpbGU6OmNyZWF0ZShCbG9iOjpjcmVhdGUoV1RGTW92
ZShkYXRhKSwgdHlwZSksIGZpbGVuYW1lKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvV2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuaAkocmV2aXNp
b24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZp
bGVSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTUgKzMyLDEyIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEZpbGU7CiAKIHN0cnVjdCBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFk
ZXIgZmluYWwgOiBQYXN0ZWJvYXJkRmlsZVJlYWRlciB7Ci0gICAgV2ViQ29yZVBhc3RlYm9hcmRG
aWxlUmVhZGVyKGNvbnN0IFN0cmluZyYgdHlwZSkKLSAgICAgICAgOiBQYXN0ZWJvYXJkRmlsZVJl
YWRlcih0eXBlKQotICAgIHsgfQotCiAgICAgfldlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlcigp
OwogCi0gICAgdm9pZCByZWFkKGNvbnN0IFN0cmluZyYsIFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZp
bmFsOworICAgIHZvaWQgcmVhZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIHZv
aWQgcmVhZEJ1ZmZlcihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUs
IFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZpbmFsOwogCi0gICAgUmVmUHRyPEZpbGU+IGZpbGU7Cisg
ICAgVmVjdG9yPFJlZjxGaWxlPj4gZmlsZXM7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZC5oCShyZXZpc2lvbiAyMjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgY2xh
c3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIERyYWdEYXRhOwogY2xhc3MgRWxlbWVudDsKIGNs
YXNzIEZyYW1lOworY2xhc3MgUGFzdGVib2FyZFN0cmF0ZWd5OwogY2xhc3MgUmFuZ2U7CiBjbGFz
cyBTZWxlY3Rpb25EYXRhOwogY2xhc3MgU2hhcmVkQnVmZmVyOwpAQCAtMTQ4LDE0ICsxNDksOSBA
QCBzdHJ1Y3QgUGFzdGVib2FyZFBsYWluVGV4dCB7CiB9OwogCiBzdHJ1Y3QgUGFzdGVib2FyZEZp
bGVSZWFkZXIgewotICAgIFBhc3RlYm9hcmRGaWxlUmVhZGVyKGNvbnN0IFN0cmluZyYgdHlwZSkK
LSAgICAgICAgOiB0eXBlKHR5cGUpCi0gICAgeyB9CiAgICAgdmlydHVhbCB+UGFzdGVib2FyZEZp
bGVSZWFkZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVhZChjb25zdCBTdHJp
bmcmLCBSZWY8U2hhcmVkQnVmZmVyPiYmKSA9IDA7Ci0KLSAgICBjb25zdCBTdHJpbmcgdHlwZTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVhZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVhZEJ1ZmZlcihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJp
bmcmIHR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYpID0gMDsKIH07CiAKIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250ZW50cyBvZiBzYW1lT3JpZ2luQ3VzdG9tRGF0YSBh
cmUgbm90IGFjY2Vzc2libGUgYWNyb3NzIGRpZmZlcmVudCBvcmlnaW5zLgpAQCAtMTk4LDcgKzE5
NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOwogICAgIHZpcnR1YWwg
VmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yQmluZGluZ3MoKTsKICAgICB2aXJ0dWFsIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKTsKLSAgICB2aXJ0dWFsIFZl
Y3RvcjxTdHJpbmc+IHR5cGVzVHJlYXRlZEFzRmlsZXMoKTsKICAgICB2aXJ0dWFsIFN0cmluZyBy
ZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAgICAgdmlydHVhbCBTdHJpbmcgcmVhZFN0
cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogCkBAIC0yMTYsNyArMjExLDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29u
dGVudCYpOwogCiAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zRmlsZXMoKTsKLSAgICB2aXJ0dWFs
IFZlY3RvcjxTdHJpbmc+IHJlYWRGaWxlbmFtZXMoKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU21h
cnRSZXBsYWNlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVNYXJrdXAoY29uc3QgU3RyaW5n
JiBtYXJrdXApOwpAQCAtMjgyLDkgKzI3NiwxMiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShDT0NPQSkKKyAgICBWZWN0b3I8U3RyaW5nPiByZWFkRmlsZW5hbWVzKCk7CiAgICAg
U3RyaW5nIHJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBkb21UeXBlLCBs
b25nIGNoYW5nZUNvdW50LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKICAgICBzdGF0
aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3Ry
aW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKTsKICAgICBTdHJpbmcgcmVhZFN0cmluZ0ZvclBsYXRmb3JtVHlwZShj
b25zdCBTdHJpbmcmKTsKKyAgICBWZWN0b3I8U3RyaW5nPiByZWFkVHlwZXNXaXRoU2VjdXJpdHlD
aGVjaygpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJlYWRCdWZmZXJGb3JUeXBlV2l0aFNl
Y3VyaXR5Q2hlY2soY29uc3QgU3RyaW5nJik7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmgJKHJldmlz
aW9uIDIyMjY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNE
YXRhKCkgZmluYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yQmluZGluZ3MoKSBm
aW5hbCB7IHJldHVybiBtX3R5cGVzOyB9CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JMZWdh
Y3lVbnNhZmVCaW5kaW5ncygpIGZpbmFsIHsgcmV0dXJuIG1fdHlwZXM7IH0KLSAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkgZmluYWwgeyByZXR1cm4geyB9OyB9CiAgICAg
U3RyaW5nIHJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKSBmaW5hbDsKICAgICBTdHJpbmcg
cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpIGZpbmFsOwogCkBAIC01
OSw3ICs1OCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHdyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJD
b250ZW50JikgZmluYWwgeyB9CiAKICAgICBib29sIGNvbnRhaW5zRmlsZXMoKSBmaW5hbCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIFZlY3RvcjxTdHJpbmc+IHJlYWRGaWxlbmFtZXMoKSBmaW5hbCB7
IHJldHVybiB7IH07IH0KICAgICBib29sIGNhblNtYXJ0UmVwbGFjZSgpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICB2b2lkIHdyaXRlTWFya3VwKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRD
b2NvYS5tbQkocmV2aXNpb24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvUGFzdGVib2FyZENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSwxMiBAQCBz
dGF0aWMgY29uc3QgY2hhciogaW1hZ2VUeXBlVG9GYWtlRmlsZW5hCiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNlIEltYWdlVHlw
ZTo6VElGRjoKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHJldHVybiAiaW1hZ2UvcG5nIjsg
Ly8gRm9yIFdlYiBjb21wYXRpYmlsaXR5LCB3ZSBwcmV0ZW5kIHRvIGhhdmUgUE5HIGluc3RlYWQu
CisjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBudWxscHRyOyAvLyBEb24ndCBzdXBwb3J0IFRJRkYgb24g
aU9TIGZvciBub3cuCisjZW5kaWYKICAgICBjYXNlIEltYWdlVHlwZTo6UE5HOgogICAgICAgICBy
ZXR1cm4gImltYWdlLnBuZyI7CiAgICAgY2FzZSBJbWFnZVR5cGU6OkpQRUc6CkBAIC0xMTAsNDcg
KzExNCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogaW1hZ2VUeXBlVG9GYWtlRmlsZW5hCiAgICAg
fQogfQogCi1zdGF0aWMgSW1hZ2VUeXBlIG1pbWVUeXBlVG9JbWFnZVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKG1pbWVUeXBlID09ICJp
bWFnZS90aWZmIikKLSAgICAgICAgcmV0dXJuIEltYWdlVHlwZTo6VElGRjsKLSNlbmRpZgotICAg
IGlmIChtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIikKLSAgICAgICAgcmV0dXJuIEltYWdlVHlwZTo6
UE5HOwotICAgIGlmIChtaW1lVHlwZSA9PSAiaW1hZ2UvanBlZyIpCi0gICAgICAgIHJldHVybiBJ
bWFnZVR5cGU6OkpQRUc7Ci0gICAgaWYgKG1pbWVUeXBlID09ICJpbWFnZS9naWYiKQotICAgICAg
ICByZXR1cm4gSW1hZ2VUeXBlOjpHSUY7Ci0gICAgcmV0dXJuIEltYWdlVHlwZTo6SW52YWxpZDsK
LX0KLQogYm9vbCBQYXN0ZWJvYXJkOjpzaG91bGRUcmVhdENvY29hVHlwZUFzRmlsZShjb25zdCBT
dHJpbmcmIGNvY29hVHlwZSkKIHsKICAgICByZXR1cm4gY29jb2FUeXBlVG9JbWFnZVR5cGUoY29j
b2FUeXBlKSAhPSBJbWFnZVR5cGU6OkludmFsaWQ7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBhc3Rl
Ym9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IGNvY29h
VHlwZXM7Ci0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5n
ZXRUeXBlcyhjb2NvYVR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIC8vIEVuZm9yY2Ug
Y2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGlu
ZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2Ug
YmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRh
dGEuCi0gICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKLSAgICAgICAg
cmV0dXJuIHsgfTsKLQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwotICAgIGZvciAo
YXV0byYgY29jb2FUeXBlIDogY29jb2FUeXBlcykgewotICAgICAgICBpZiAoYXV0byogbWltZVR5
cGUgPSBpbWFnZVR5cGVUb01JTUVUeXBlKGNvY29hVHlwZVRvSW1hZ2VUeXBlKGNvY29hVHlwZSkp
KQotICAgICAgICAgICAgcmVzdWx0LmFkZChtaW1lVHlwZSk7Ci0gICAgfQotCi0gICAgVmVjdG9y
PFN0cmluZz4gdHlwZXM7Ci0gICAgY29weVRvVmVjdG9yKHJlc3VsdCwgdHlwZXMpOwotICAgIHJl
dHVybiB0eXBlczsKLX0KLQogYm9vbCBQYXN0ZWJvYXJkOjpjb250YWluc0ZpbGVzKCkKIHsKICAg
ICBpZiAoIXBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0TnVt
YmVyT2ZGaWxlcyhtX3Bhc3RlYm9hcmROYW1lKSkgewpAQCAtMTgyLDYzICsxNTAsNTQgQEAgVmVj
dG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQgogCiBWZWN0b3I8U3RyaW5nPiBQ
YXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkKIHsKLSAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlczsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIC8vIEVuZm9y
Y2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVh
ZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFu
Z2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhl
IGRhdGEuCi0gICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBh
c3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb2NvYVR5cGVzID0gcmVhZFR5cGVz
V2l0aFNlY3VyaXR5Q2hlY2soKTsKKyAgICBpZiAoIWNvY29hVHlwZXMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gY29jb2FUeXBlczsKIAogICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0Owot
ICAgIGZvciAoYXV0byYgY29jb2FUeXBlIDogdHlwZXMpCisgICAgZm9yIChhdXRvJiBjb2NvYVR5
cGUgOiBjb2NvYVR5cGVzKQogICAgICAgICBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5
cGUocmVzdWx0LCBjb2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogCisgICAgVmVjdG9yPFN0
cmluZz4gdHlwZXM7CiAgICAgY29weVRvVmVjdG9yKHJlc3VsdCwgdHlwZXMpOwogICAgIHJldHVy
biB0eXBlczsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3N0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjb252ZXJ0VElGRlRvUE5HKFNoYXJlZEJ1ZmZlciYgdGlmZkJ1ZmZlcikKK3sKKyAgICBhdXRv
IGltYWdlID0gYWRvcHROUyhbW05TQml0bWFwSW1hZ2VSZXAgYWxsb2NdIGluaXRXaXRoRGF0YTog
dGlmZkJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKV0pOworICAgIE5TRGF0YSAqcG5nRGF0YSA9
IFtpbWFnZSByZXByZXNlbnRhdGlvblVzaW5nVHlwZTpOU1BOR0ZpbGVUeXBlIHByb3BlcnRpZXM6
QHsgfV07CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHBuZ0RhdGEpOworfQorI2Vu
ZGlmCisKIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYgcmVhZGVy
KQogewotICAgIGF1dG8gaW1hZ2VUeXBlID0gbWltZVR5cGVUb0ltYWdlVHlwZShyZWFkZXIudHlw
ZSk7Ci0gICAgaWYgKGltYWdlVHlwZSA9PSBJbWFnZVR5cGU6OkludmFsaWQpCisgICAgYXV0byBm
aWxlbmFtZXMgPSByZWFkRmlsZW5hbWVzKCk7CisgICAgaWYgKCFmaWxlbmFtZXMuaXNFbXB0eSgp
KSB7CisgICAgICAgIGZvciAoYXV0byYgZmlsZW5hbWUgOiBmaWxlbmFtZXMpCisgICAgICAgICAg
ICByZWFkZXIucmVhZEZpbGVuYW1lKGZpbGVuYW1lKTsKICAgICAgICAgcmV0dXJuOwotCi0gICAg
U3RyaW5nIGNvY29hVHlwZVRvUmVhZDsKLSAgICBTdHJpbmcgdGlmZkNvY29hVHlwZUluUGFzdGVi
b2FyZDsKLSAgICBWZWN0b3I8U3RyaW5nPiBjb2NvYVR5cGVzOwotICAgIHBsYXRmb3JtU3RyYXRl
Z2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXMoY29jb2FUeXBlcywgbV9wYXN0
ZWJvYXJkTmFtZSk7Ci0gICAgZm9yIChhdXRvJiBjb2NvYVR5cGUgOiBjb2NvYVR5cGVzKSB7Ci0g
ICAgICAgIGF1dG8gaW1hZ2VUeXBlSW5QYXN0ZWJvYXJkID0gY29jb2FUeXBlVG9JbWFnZVR5cGUo
Y29jb2FUeXBlKTsKLSAgICAgICAgaWYgKGltYWdlVHlwZUluUGFzdGVib2FyZCA9PSBpbWFnZVR5
cGUpIHsKLSAgICAgICAgICAgIGNvY29hVHlwZVRvUmVhZCA9IGNvY29hVHlwZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0aWZmQ29jb2FUeXBlSW5QYXN0ZWJv
YXJkLmlzTnVsbCgpICYmIGltYWdlVHlwZUluUGFzdGVib2FyZCA9PSBJbWFnZVR5cGU6OlRJRkYp
Ci0gICAgICAgICAgICB0aWZmQ29jb2FUeXBlSW5QYXN0ZWJvYXJkID0gY29jb2FUeXBlOwogICAg
IH0KIAotICAgIGJvb2wgdGlmZldhc1RyZWF0ZWRBc1BOR0ZvcldlYkNvbXBhdGliaWxpdHkgPSBp
bWFnZVR5cGUgPT0gSW1hZ2VUeXBlOjpQTkcgJiYgY29jb2FUeXBlVG9SZWFkLmlzTnVsbCgpICYm
ICF0aWZmQ29jb2FUeXBlSW5QYXN0ZWJvYXJkLmlzTnVsbCgpOwotICAgIGlmICh0aWZmV2FzVHJl
YXRlZEFzUE5HRm9yV2ViQ29tcGF0aWJpbGl0eSkKLSAgICAgICAgY29jb2FUeXBlVG9SZWFkID0g
dGlmZkNvY29hVHlwZUluUGFzdGVib2FyZDsKLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1
ZmZlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVy
Rm9yVHlwZShjb2NvYVR5cGVUb1JlYWQsIG1fcGFzdGVib2FyZE5hbWUpOwotCi0gICAgLy8gRW5m
b3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciBy
ZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCi0gICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNo
YW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0
aGUgZGF0YS4KLSAgICBpZiAoIWJ1ZmZlciB8fCBtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJk
TmFtZSkpCi0gICAgICAgIHJldHVybjsKLQorICAgIFZlY3RvcjxTdHJpbmc+IGNvY29hVHlwZXMg
PSByZWFkVHlwZXNXaXRoU2VjdXJpdHlDaGVjaygpOworICAgIEhhc2hTZXQ8Y29uc3QgY2hhcio+
IGV4aXN0aW5nTUlNRXM7CisgICAgZm9yIChhdXRvJiBjb2NvYVR5cGUgOiBjb2NvYVR5cGVzKSB7
CisgICAgICAgIGF1dG8gaW1hZ2VUeXBlID0gY29jb2FUeXBlVG9JbWFnZVR5cGUoY29jb2FUeXBl
KTsKKyAgICAgICAgY29uc3QgY2hhciogbWltZVR5cGUgPSBpbWFnZVR5cGVUb01JTUVUeXBlKGlt
YWdlVHlwZSk7CisgICAgICAgIGlmIChpbWFnZVR5cGUgPT0gSW1hZ2VUeXBlOjpJbnZhbGlkIHx8
IGV4aXN0aW5nTUlNRXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGV4aXN0aW5nTUlNRXMuYWRkKG1pbWVUeXBlKTsKKyAgICAgICAgYXV0byBidWZm
ZXIgPSByZWFkQnVmZmVyRm9yVHlwZVdpdGhTZWN1cml0eUNoZWNrKGNvY29hVHlwZSk7CiAjaWYg
UExBVEZPUk0oTUFDKQotICAgIGlmICh0aWZmV2FzVHJlYXRlZEFzUE5HRm9yV2ViQ29tcGF0aWJp
bGl0eSkgewotICAgICAgICBhdXRvIHRpZmZEYXRhID0gYnVmZmVyLT5jcmVhdGVOU0RhdGEoKTsK
LSAgICAgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBp
bml0V2l0aERhdGE6IHRpZmZEYXRhLmdldCgpXSk7Ci0gICAgICAgIE5TRGF0YSAqcG5nRGF0YSA9
IFtpbWFnZSByZXByZXNlbnRhdGlvblVzaW5nVHlwZTpOU1BOR0ZpbGVUeXBlIHByb3BlcnRpZXM6
QHsgfV07Ci0gICAgICAgIHJlYWRlci5yZWFkKGltYWdlVHlwZVRvRmFrZUZpbGVuYW1lKGltYWdl
VHlwZSksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHBuZ0RhdGEpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICAgICAgaWYgKGJ1ZmZlciAmJiBpbWFnZVR5cGUgPT0gSW1hZ2VUeXBlOjpUSUZG
KQorICAgICAgICAgICAgYnVmZmVyID0gY29udmVydFRJRkZUb1BORyhidWZmZXIucmVsZWFzZU5v
bk51bGwoKSk7CiAjZW5kaWYKLSAgICByZWFkZXIucmVhZChpbWFnZVR5cGVUb0Zha2VGaWxlbmFt
ZShpbWFnZVR5cGUpLCBidWZmZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmICghYnVm
ZmVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlYWRlci5yZWFkQnVmZmVyKGlt
YWdlVHlwZVRvRmFrZUZpbGVuYW1lKGltYWdlVHlwZSksIG1pbWVUeXBlLCBidWZmZXIucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgfQogfQogCiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhj
b25zdCBTdHJpbmcmIHR5cGUpCkBAIC0yNDgsMTQgKzIwNywxNiBAQCBTdHJpbmcgUGFzdGVib2Fy
ZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpCiAKIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5n
SW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBhdXRvIGJ1ZmZlciA9IHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVyRm9yVHlwZShj
dXN0b21XZWJLaXRQYXN0ZWJvYXJkRGF0YVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOworICAgIGF1
dG8gYnVmZmVyID0gcmVhZEJ1ZmZlckZvclR5cGVXaXRoU2VjdXJpdHlDaGVjayhjdXN0b21XZWJL
aXRQYXN0ZWJvYXJkRGF0YVR5cGUpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgTlNTdHJpbmcgKmN1c3RvbURhdGFWYWx1ZSA9IGN1c3RvbURhdGFGcm9tU2hh
cmVkQnVmZmVyKCpidWZmZXIpLnNhbWVPcmlnaW5DdXN0b21EYXRhLmdldCh0eXBlKTsKLSAgICBp
ZiAoIWN1c3RvbURhdGFWYWx1ZS5sZW5ndGgpCisgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBv
dXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2Yg
YmVmb3JlIHRvIGJlCisgICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0
ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KKyAgICBpZiAo
bV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4geyB9Owot
ICAgIHJldHVybiBjdXN0b21EYXRhVmFsdWU7CisKKyAgICByZXR1cm4gY3VzdG9tRGF0YUZyb21T
aGFyZWRCdWZmZXIoKmJ1ZmZlcikuc2FtZU9yaWdpbkN1c3RvbURhdGEuZ2V0KHR5cGUpOwogfQog
CiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YSYgZGF0YSkKQEAgLTI2OCw1ICsyMjksMjkgQEAgbG9uZyBQYXN0ZWJvYXJkOjpjaGFuZ2VD
b3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSk7CiB9CiAKK1ZlY3RvcjxT
dHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRUeXBlc1dpdGhTZWN1cml0eUNoZWNrKCkKK3sKKyAgICBW
ZWN0b3I8U3RyaW5nPiBjb2NvYVR5cGVzOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXMoY29jb2FUeXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7
CisKKyAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdl
IGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKKyAgICAvLyBzdXJl
IGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBh
bmQgYWNjZXNzaW5nIHRoZSBkYXRhLgorICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJv
YXJkTmFtZSkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gY29jb2FUeXBlczsK
K30KKworUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gUGFzdGVib2FyZDo6cmVhZEJ1ZmZlckZvclR5cGVX
aXRoU2VjdXJpdHlDaGVjayhjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgYXV0byBidWZmZXIg
PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5
cGUodHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisKKyAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50
IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBv
ZiBiZWZvcmUgdG8gYmUKKyAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3Vy
IHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgorICAgIGlm
IChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAorfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAkocmV2aXNpb24gMjIyNjg4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDIsOCArMjQyLDExIEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJk
V2ViQ29udGUKIHsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRGaWxlUmVh
ZGVyJikKK3ZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYgcmVhZGVy
KQogeworICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7CisgICAgZm9yIChhdXRvJiBmaWxlbmFtZSA6
IG1fc2VsZWN0aW9uRGF0YS0+ZmlsZW5hbWVzKCkpCisgICAgICAgIHJlYWRlci5yZWFkRmlsZW5h
bWUoZmlsZW5hbWUpOwogfQogCiBib29sIFBhc3RlYm9hcmQ6Omhhc0RhdGEoKQpAQCAtMjg2LDEx
ICsyODksNiBAQCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjCiAgICAg
cmV0dXJuIHR5cGVzOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0
ZWRBc0ZpbGVzKCkKLXsKLSAgICByZXR1cm4geyB9OwotfQotCiBTdHJpbmcgUGFzdGVib2FyZDo6
cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgcmVhZEZyb21DbGlwYm9hcmQo
KTsKQEAgLTMyMSwxMyArMzE5LDggQEAgU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1
c3RvbURhdAogCiBib29sIFBhc3RlYm9hcmQ6OmNvbnRhaW5zRmlsZXMoKQogewotICAgIHJldHVy
biByZWFkRmlsZW5hbWVzKCkuc2l6ZSgpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJk
OjpyZWFkRmlsZW5hbWVzKCkKLXsKICAgICByZWFkRnJvbUNsaXBib2FyZCgpOwotICAgIHJldHVy
biBtX3NlbGVjdGlvbkRhdGEtPmZpbGVuYW1lcygpOworICAgIHJldHVybiAhbV9zZWxlY3Rpb25E
YXRhLT5maWxlbmFtZXMoKS5pc0VtcHR5KCk7CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVN
YXJrdXAoY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Q
YXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9uIDIyMjY4OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDEx
ICsyODMsNiBAQCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjCiAgICAg
cmV0dXJuIHZlY3RvcjsKIH0KIAotVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNUcmVh
dGVkQXNGaWxlcygpCi17Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogU3RyaW5nIFBhc3RlYm9hcmQ6
OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIGlmICghbV9kYXRhT2JqZWN0
ICYmIG1fZHJhZ0RhdGFNYXAuaXNFbXB0eSgpKQpAQCAtMzE0LDQzICszMDksNTUgQEAgU3RyaW5n
IFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdAogICAgIHJldHVybiB7IH07CiB9CiAK
K3N0cnVjdCBQYXN0ZWJvYXJkRmlsZUNvdW50ZXIgZmluYWwgOiBwdWJsaWMgUGFzdGVib2FyZEZp
bGVSZWFkZXIgeworCisgICAgdm9pZCByZWFkRmlsZW5hbWUoY29uc3QgU3RyaW5nJikgZmluYWwg
eyArK2NvdW50OyB9CisgICAgdm9pZCByZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KKworICAgIHVuc2lnbmVkIGNvdW50IHsgMCB9OworfTsKKwogYm9vbCBQYXN0ZWJvYXJkOjpj
b250YWluc0ZpbGVzKCkKIHsKLSAgICByZXR1cm4gcmVhZEZpbGVuYW1lcygpLnNpemUoKTsgLy8g
RklYTUU6IE1ha2UgdGhpcyBjb2RlIG1vcmUgZWZmaWNpZW50LgorICAgIC8vIEZJWE1FOiBUaGlz
IGltcGxlbWVudGF0aW9uIGNhbiBiZSBzbGlnaHRseSBtb3JlIGVmZmljaWVudCBieSBhdm9pZGlu
ZyBjYWxscyB0byBEcmFnUXVlcnlGaWxlVy4KKyAgICBQYXN0ZWJvYXJkRmlsZUNvdW50ZXIgcmVh
ZGVyOworICAgIHJlYWQocmVhZGVyKTsKKyAgICByZXR1cm4gcmVhZGVyLmNvdW50OwogfQogCi1W
ZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkKK1ZlY3RvcjxTdHJpbmc+
IFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlcikKIHsKLSAgICBW
ZWN0b3I8U3RyaW5nPiBmaWxlTmFtZXM7Ci0KICNpZiBVU0UoQ0YpCiAgICAgaWYgKG1fZGF0YU9i
amVjdCkgewogICAgICAgICBTVEdNRURJVU0gbWVkaXVtOwogICAgICAgICBpZiAoRkFJTEVEKG1f
ZGF0YU9iamVjdC0+R2V0RGF0YShjZkhEcm9wRm9ybWF0KCksICZtZWRpdW0pKSkKLSAgICAgICAg
ICAgIHJldHVybiBmaWxlTmFtZXM7CisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgSERS
T1AgaGRyb3AgPSByZWludGVycHJldF9jYXN0PEhEUk9QPihHbG9iYWxMb2NrKG1lZGl1bS5oR2xv
YmFsKSk7CiAgICAgICAgIGlmICghaGRyb3ApCi0gICAgICAgICAgICByZXR1cm4gZmlsZU5hbWVz
OworICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFdDSEFSIGZpbGVuYW1lW01BWF9QQVRI
XTsKICAgICAgICAgVUlOVCBmaWxlQ291bnQgPSBEcmFnUXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZG
RkZGRiwgMCwgMCk7CiAgICAgICAgIGZvciAoVUlOVCBpID0gMDsgaSA8IGZpbGVDb3VudDsgaSsr
KSB7CiAgICAgICAgICAgICBpZiAoIURyYWdRdWVyeUZpbGVXKGhkcm9wLCBpLCBmaWxlbmFtZSwg
V1RGX0FSUkFZX0xFTkdUSChmaWxlbmFtZSkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgZmlsZU5hbWVzLmFwcGVuZChmaWxlbmFtZSk7CisgICAgICAgICAgICByZWFk
ZXIucmVhZEZpbGVuYW1lKGZpbGVuYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIEdsb2JhbFVu
bG9jayhtZWRpdW0uaEdsb2JhbCk7CiAgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0oJm1lZGl1bSk7
Ci0gICAgICAgIHJldHVybiBmaWxlTmFtZXM7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
aWYgKCFtX2RyYWdEYXRhTWFwLmNvbnRhaW5zKGNmSERyb3BGb3JtYXQoKS0+Y2ZGb3JtYXQpKQot
ICAgICAgICByZXR1cm4gZmlsZU5hbWVzOwotICAgIHJldHVybiBtX2RyYWdEYXRhTWFwLmdldChj
ZkhEcm9wRm9ybWF0KCktPmNmRm9ybWF0KTsKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9y
PFN0cmluZz4gbGlzdCA9IG1fZHJhZ0RhdGFNYXAuZ2V0KGNmSERyb3BGb3JtYXQoKS0+Y2ZGb3Jt
YXQpOworICAgIGZvciAoYXV0byYgZmlsZW5hbWUgOiBsaXN0KQorICAgICAgICByZWFkZXIucmVh
ZEZpbGVuYW1lKGZpbGVuYW1lKTsKICNlbHNlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZmlsZU5hbWVzOworICAgIHJldHVybiB7IH07CiAjZW5kaWYKIH0KIApAQCAtMTA3Miwx
MCArMTA3OSw2IEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkV2ViQ29udGUKIHsK
IH0KIAotdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyJikKLXsKLX0K
LQogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkSW1hZ2UmKQogewogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BFLmNwcAko
cmV2aXNpb24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1Bhc3RlYm9h
cmRXUEUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMSArNjIsNiBAQCBWZWN0b3I8U3RyaW5n
PiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjCiAgICAgcmV0dXJuIHR5cGVzOwogfQogCi1WZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkKLXsKLSAgICByZXR1
cm4geyB9OwotfQotCiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcm
IHR5cGUpCiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKDAsIHR5cGUpOwpAQCAtMTMwLDEyICsx
MjUsNiBAQCBib29sIFBhc3RlYm9hcmQ6OmNvbnRhaW5zRmlsZXMoKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKLX0KLQog
Ym9vbCBQYXN0ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UoKQogewogICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322340</attachid>
            <date>2017-10-01 18:32:54 -0700</date>
            <delta_ts>2017-10-01 19:04:02 -0700</delta_ts>
            <desc>Fixed Windows build</desc>
            <filename>bug-177728-20171001183252.patch</filename>
            <type>text/plain</type>
            <size>25469</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjY5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE3LTEwLTAxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1lcmdlIHJlYWRGaWxlbmFtZXMo
KSBhbmQgcmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzQ3NjE3MjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgR2VuZXJhbGl6ZWQgUGFzdGVib2FyZEZpbGVSZWFkZXIgdG8gcmV0dXJuIG11bHRpcGxlIGZp
bGVzIGluc3RlYWQgb2YganVzdCBvbmUgZmlsZSwgYW5kIHJlcGxhY2VkIHRoZSB1c2UKKyAgICAg
ICAgb2YgUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpIHdpdGggaXQuIEJlY2F1c2UgZWxpbWlu
YXRlcyB0aGUgbmVlZCBmb3IgZmluZGluZyB0aGUgbGlzdCBvZiB0eXBlcyB0byByZWFkCisgICAg
ICAgIGFzIGZpbGVzIGluIGFkZGl0aW9uIHRvIGZpbGUgbmFtZXMsIHRoaXMgcGF0Y2ggYWxzbyBy
ZW1vdmVzIFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKS4KKworICAgICAgICBOb3Rl
IHRoYXQgUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpIGNvbnRpbnVlcyB0byBleGlzdCBpbiBt
YWNPUyBhbmQgaU9TIGFzIGl0J3MgaW50ZXJuYWxseSB1c2VkIGJ5CisgICAgICAgIFBhc3RlYm9h
cmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXIpIGluIFBhc3RlYm9hcmRDb2NvYS5tbS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwg
Y2hhbmdlLgorCisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhVHJhbnNmZXI6OmZpbGVzIGNvbnN0KTogTm93IG1ha2VzIGEgc2luZ2xlIGNhbGwg
dG8gUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikKKyAgICAgICAgaW5zdGVh
ZCBvZiByZWFkaW5nIGZpbGVuYW1lcyBhbmQgdGhlbiBmYWxsaW5nIGJhY2sgdG8gaXQuIEFsc28g
Z290IHJpZCBvZiBpZi1kZWYgZm9yIGRyYWcgZHJvcCBjaGVja3MKKyAgICAgICAgc2luY2UgZm9y
RHJhZygpIGFuZCBmb3JGaWxlRHJhZygpIGFyZSBhbHdheXMgZGVmaW5lZCBzaW5jZSByMjIyNjg4
LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEZpbGVUeXBlUmVhZGVyKTogQWRkZWQuIEdl
dHMgdGhlIGxpc3Qgb2YgYWxsIGZpbGUgdHlwZXMuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkRmlsZVR5cGVSZWFkZXI6OnJlYWRGaWxlbmFtZSk6IEFkZGVkLiBHZXRzIHRoZSBsaXN0IG9m
IGFsbCBmaWxlIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEZpbGVUeXBlUmVh
ZGVyOjpyZWFkQnVmZmVyKTogQWRkZWQuIEdldHMgdGhlIGxpc3Qgb2YgYWxsIGZpbGUgdHlwZXMu
CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6Omhhc0ZpbGVPZlR5cGUpOiBSZWltcGxl
bWVudGVkIHVzaW5nIFBhc3RlYm9hcmRGaWxlVHlwZVJlYWRlci4KKyAgICAgICAgKiBlZGl0aW5n
L1dlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJD
b3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6OnJlYWRGaWxlbmFtZSk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyOjpyZWFkQnVmZmVyKTogUmVuYW1l
ZCBmcm9tIHJlYWQuCisgICAgICAgICogZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFk
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkLmg6CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkRmlsZVJlYWRlcik6IFJlbW92ZWQgdGhlIGNvbnN0cnVjdG9yIHNpbmNlIHdl
IG5vIGxvbmdlciBzcGVjaWZ5IGEgc3BlY2lmaWMgdHlwZSB0bworICAgICAgICByZWFkIG9mZiBv
ZiBwYXN0ZWJvYXJkLCBhbmQgcmVuYW1lZCB0aGUgZXhpc3RpbmcgcmVhZCBmdW5jdGlvbiB0byBy
ZWFkQnVmZmVyLCBhbmQgYWRkZWQgYSBuZXcgdmFyaWFudAorICAgICAgICB3aGljaCB0YWtlcyBh
IGZpbGVuYW1lLgorICAgICAgICAqIHBsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
OjppbWFnZVR5cGVUb0Zha2VGaWxlbmFtZSk6IFJldHVybiAiaW1hZ2UvcG5nIiBmb3IgSW1hZ2VU
eXBlOjpUSUZGICh0byBkbyBUSUZGLXRvLVBORyBjb252ZXJzaW9uOworICAgICAgICBzZWUgcjIy
MjY1NiBmb3Igd2h5IHRoaXMgaXMgbmVlZGVkKSBub3cgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHVz
ZWQgdG8gY29udmVydCBkaXJlY3RseSBmcm9tIGltYWdlIHR5cGUKKyAgICAgICAgY29udmVydGVk
IGZyb20gY29jb2EgdHlwZSBpbnN0ZWFkIG9mIHRoZSBvbmUgcmV2ZXJzZS1jb252ZXJ0ZWQgZnJv
bSBNSU1FIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZVRvSW1hZ2VUeXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lV
bnNhZmVCaW5kaW5ncyk6IFVzZSBuZXdseSBhZGRlZCByZWFkVHlwZXNXaXRoU2VjdXJpdHlDaGVj
ay4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUSUZGVG9QTkcpOiBFeHRyYWN0ZWQgb3V0IG9m
IHJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXIpLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6cmVhZCk6IEdlbmVyYWxpemVkIHRvIGFkZCBmaWxlbmFtZXMgYXMgd2VsbCBhcyBpbWFnZSBi
dWZmZXJzIGFzIGZpbGVzLiBCZWNhdXNlIG5vdworICAgICAgICB3ZSdyZSBjb25jZXJ0aW5nIENv
Y29hIHR5cGVzIHRvIEltYWdlVHlwZSwgd2Ugbm8gbG9uZ2VyIGhhdmUgdG8gZGV0ZWN0IHdoZW4g
VElGRi1hcy1QTkcgY29udmVyc2lvbiBpcworICAgICAgICBoYXBwZW5pbmcgaGVyZS4gV2UganVz
dCB0cmVhdCBJbWFnZVR5cGU6OlRJRkYgYXMgUE5HIGFuZCBkbyB0aGUgY29udmVyc2lvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEpOiBVc2Ug
bmV3bHkgYWRkZWQgcmVhZEJ1ZmZlckZvclR5cGVXaXRoU2VjdXJpdHlDaGVjay4KKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRUeXBlc1dpdGhTZWN1cml0eUNoZWNrKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkQnVmZmVyRm9yVHlwZVdpdGhTZWN1
cml0eUNoZWNrKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6IEltcGxlbWVudGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjb250YWluc0ZpbGVzKTogSW1wbGVt
ZW50ZWQgd2l0aG91dCBjYWxsaW5nIHJlYWRGaWxlbmFtZXMsIHdoaWNoIGhhcyBiZWVuIGRlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRGaWxlQ291bnRlcik6IEFkZGVkLiBVc2VkIHRvIGNvdW50
cyB0aGUgbnVtYmVyIG9mIGZpbGVzIGluIHRoZSBwYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZEZpbGVDb3VudGVyOjpyZWFkRmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZEZpbGVDb3VudGVyOjpyZWFkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmQ6OmNvbnRhaW5zRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6cmVhZCk6IE1vdmVkIHRoZSBjb2RlIHRvIGV4dHJhY3QgZmlsZW5hbWVzIG91dCBvZiByZWFk
RmlsZW5hbWVzLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcyk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKTogRGVsZXRlZC4K
KwogMjAxNy0xMC0wMSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciBET00gYWJvcnRpbmcgKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8j
YWJvcnRpbmctb25nb2luZy1hY3Rpdml0aWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Rh
dGFUcmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFu
c2Zlci5jcHAJKHJldmlzaW9uIDIyMjY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJh
bnNmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNDcgKzE4Miw1MCBAQCBWZWN0b3I8U3Ry
aW5nPiBEYXRhVHJhbnNmZXI6OnR5cGVzKCkgY29uCiAKIEZpbGVMaXN0JiBEYXRhVHJhbnNmZXI6
OmZpbGVzKCkgY29uc3QKIHsKLSAgICBib29sIG5ld2x5Q3JlYXRlZEZpbGVMaXN0ID0gIW1fZmls
ZUxpc3Q7Ci0gICAgaWYgKCFtX2ZpbGVMaXN0KQotICAgICAgICBtX2ZpbGVMaXN0ID0gRmlsZUxp
c3Q6OmNyZWF0ZSgpOwotCiAgICAgaWYgKCFjYW5SZWFkRGF0YSgpKSB7Ci0gICAgICAgIG1fZmls
ZUxpc3QtPmNsZWFyKCk7CisgICAgICAgIGlmIChtX2ZpbGVMaXN0KQorICAgICAgICAgICAgbV9m
aWxlTGlzdC0+Y2xlYXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9maWxlTGlzdCA9
IEZpbGVMaXN0OjpjcmVhdGUoKTsKICAgICAgICAgcmV0dXJuICptX2ZpbGVMaXN0OwogICAgIH0K
IAotI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgaWYgKGZvckRyYWcoKSAmJiAhZm9yRmls
ZURyYWcoKSkgewotICAgICAgICBBU1NFUlQobV9maWxlTGlzdC0+aXNFbXB0eSgpKTsKKyAgICAg
ICAgaWYgKG1fZmlsZUxpc3QpCisgICAgICAgICAgICBBU1NFUlQobV9maWxlTGlzdC0+aXNFbXB0
eSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9maWxlTGlzdCA9IEZpbGVMaXN0Ojpj
cmVhdGUoKTsKICAgICAgICAgcmV0dXJuICptX2ZpbGVMaXN0OwogICAgIH0KLSNlbmRpZgogCi0g
ICAgaWYgKG5ld2x5Q3JlYXRlZEZpbGVMaXN0KSB7Ci0gICAgICAgIGZvciAoYXV0byYgZmlsZW5h
bWUgOiBtX3Bhc3RlYm9hcmQtPnJlYWRGaWxlbmFtZXMoKSkKLSAgICAgICAgICAgIG1fZmlsZUxp
c3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZW5hbWUpKTsKLSAgICAgICAgaWYgKG1fZmlsZUxp
c3QtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiB0eXBlIDogbV9wYXN0ZWJv
YXJkLT50eXBlc1RyZWF0ZWRBc0ZpbGVzKCkpIHsKLSAgICAgICAgICAgICAgICBXZWJDb3JlUGFz
dGVib2FyZEZpbGVSZWFkZXIgcmVhZGVyKHR5cGUpOwotICAgICAgICAgICAgICAgIG1fcGFzdGVi
b2FyZC0+cmVhZChyZWFkZXIpOwotICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuZmlsZSkKLSAg
ICAgICAgICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKHJlYWRlci5maWxlLnJlbGVhc2VO
b25OdWxsKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgaWYgKCFtX2ZpbGVMaXN0
KSB7CisgICAgICAgIFdlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlciByZWFkZXI7CisgICAgICAg
IG1fcGFzdGVib2FyZC0+cmVhZChyZWFkZXIpOworICAgICAgICBtX2ZpbGVMaXN0ID0gRmlsZUxp
c3Q6OmNyZWF0ZShXVEZNb3ZlKHJlYWRlci5maWxlcykpOwogICAgIH0KICAgICByZXR1cm4gKm1f
ZmlsZUxpc3Q7CiB9CiAKLWJvb2wgRGF0YVRyYW5zZmVyOjpoYXNGaWxlT2ZUeXBlKGNvbnN0IFN0
cmluZyYgdHlwZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihjYW5S
ZWFkVHlwZXMoKSk7CitzdHJ1Y3QgUGFzdGVib2FyZEZpbGVUeXBlUmVhZGVyIGZpbmFsIDogUGFz
dGVib2FyZEZpbGVSZWFkZXIgeworICAgIHZvaWQgcmVhZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUpCisgICAgeworICAgICAgICB0eXBlcy5hZGQoRmlsZTo6Y29udGVudFR5cGVGb3JG
aWxlKGZpbGVuYW1lKSk7CisgICAgfQogCi0gICAgZm9yIChhdXRvJiBwYXRoIDogbV9wYXN0ZWJv
YXJkLT5yZWFkRmlsZW5hbWVzKCkpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoRmlsZTo6Y29udGVudFR5cGVGb3JGaWxlKHBhdGgpLCB0eXBlKSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIHZvaWQgcmVhZEJ1ZmZlcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYpCisgICAgeworICAgICAgICB0eXBlcy5hZGQo
dHlwZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IHR5cGVzOworfTsKKworYm9vbCBEYXRhVHJhbnNmZXI6
Omhhc0ZpbGVPZlR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGNhblJlYWRUeXBlcygpKTsKKyAgICBQYXN0ZWJvYXJkRmlsZVR5
cGVSZWFkZXIgcmVhZGVyOworICAgIG1fcGFzdGVib2FyZC0+cmVhZChyZWFkZXIpOworICAgIHJl
dHVybiByZWFkZXIudHlwZXMuY29udGFpbnModHlwZSk7CiB9CiAKIGJvb2wgRGF0YVRyYW5zZmVy
OjpoYXNTdHJpbmdPZlR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmNwcAko
cmV2aXNpb24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb3JlUGFzdGVi
b2FyZEZpbGVSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6On5XZWJDb3Jl
UGFzdGVib2FyZEZpbGVSZWFkZXIoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgV2ViQ29yZVBhc3RlYm9h
cmRGaWxlUmVhZGVyOjpyZWFkKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIFJlZjxTaGFyZWRCdWZm
ZXI+JiYgYnVmZmVyKQordm9pZCBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6OnJlYWRGaWxl
bmFtZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQoreworICAgIGZpbGVzLmFwcGVuZChGaWxlOjpj
cmVhdGUoZmlsZW5hbWUpKTsKK30KKwordm9pZCBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6
OnJlYWRCdWZmZXIoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlLCBS
ZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKIHsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsK
ICAgICBkYXRhLmFwcGVuZChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwotICAgIGZp
bGUgPSBGaWxlOjpjcmVhdGUoQmxvYjo6Y3JlYXRlKFdURk1vdmUoZGF0YSksIHR5cGUpLCBmaWxl
bmFtZSk7CisgICAgZmlsZXMuYXBwZW5kKEZpbGU6OmNyZWF0ZShCbG9iOjpjcmVhdGUoV1RGTW92
ZShkYXRhKSwgdHlwZSksIGZpbGVuYW1lKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvV2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuaAkocmV2aXNp
b24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZp
bGVSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTUgKzMyLDEyIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEZpbGU7CiAKIHN0cnVjdCBXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFk
ZXIgZmluYWwgOiBQYXN0ZWJvYXJkRmlsZVJlYWRlciB7Ci0gICAgV2ViQ29yZVBhc3RlYm9hcmRG
aWxlUmVhZGVyKGNvbnN0IFN0cmluZyYgdHlwZSkKLSAgICAgICAgOiBQYXN0ZWJvYXJkRmlsZVJl
YWRlcih0eXBlKQotICAgIHsgfQotCiAgICAgfldlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlcigp
OwogCi0gICAgdm9pZCByZWFkKGNvbnN0IFN0cmluZyYsIFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZp
bmFsOworICAgIHZvaWQgcmVhZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIHZv
aWQgcmVhZEJ1ZmZlcihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUs
IFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZpbmFsOwogCi0gICAgUmVmUHRyPEZpbGU+IGZpbGU7Cisg
ICAgVmVjdG9yPFJlZjxGaWxlPj4gZmlsZXM7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZC5oCShyZXZpc2lvbiAyMjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgY2xh
c3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIERyYWdEYXRhOwogY2xhc3MgRWxlbWVudDsKIGNs
YXNzIEZyYW1lOworY2xhc3MgUGFzdGVib2FyZFN0cmF0ZWd5OwogY2xhc3MgUmFuZ2U7CiBjbGFz
cyBTZWxlY3Rpb25EYXRhOwogY2xhc3MgU2hhcmVkQnVmZmVyOwpAQCAtMTQ4LDE0ICsxNDksOSBA
QCBzdHJ1Y3QgUGFzdGVib2FyZFBsYWluVGV4dCB7CiB9OwogCiBzdHJ1Y3QgUGFzdGVib2FyZEZp
bGVSZWFkZXIgewotICAgIFBhc3RlYm9hcmRGaWxlUmVhZGVyKGNvbnN0IFN0cmluZyYgdHlwZSkK
LSAgICAgICAgOiB0eXBlKHR5cGUpCi0gICAgeyB9CiAgICAgdmlydHVhbCB+UGFzdGVib2FyZEZp
bGVSZWFkZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVhZChjb25zdCBTdHJp
bmcmLCBSZWY8U2hhcmVkQnVmZmVyPiYmKSA9IDA7Ci0KLSAgICBjb25zdCBTdHJpbmcgdHlwZTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVhZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVhZEJ1ZmZlcihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJp
bmcmIHR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYpID0gMDsKIH07CiAKIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250ZW50cyBvZiBzYW1lT3JpZ2luQ3VzdG9tRGF0YSBh
cmUgbm90IGFjY2Vzc2libGUgYWNyb3NzIGRpZmZlcmVudCBvcmlnaW5zLgpAQCAtMTk4LDcgKzE5
NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOwogICAgIHZpcnR1YWwg
VmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yQmluZGluZ3MoKTsKICAgICB2aXJ0dWFsIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKTsKLSAgICB2aXJ0dWFsIFZl
Y3RvcjxTdHJpbmc+IHR5cGVzVHJlYXRlZEFzRmlsZXMoKTsKICAgICB2aXJ0dWFsIFN0cmluZyBy
ZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAgICAgdmlydHVhbCBTdHJpbmcgcmVhZFN0
cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogCkBAIC0yMTYsNyArMjExLDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29u
dGVudCYpOwogCiAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zRmlsZXMoKTsKLSAgICB2aXJ0dWFs
IFZlY3RvcjxTdHJpbmc+IHJlYWRGaWxlbmFtZXMoKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU21h
cnRSZXBsYWNlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVNYXJrdXAoY29uc3QgU3RyaW5n
JiBtYXJrdXApOwpAQCAtMjgyLDkgKzI3NiwxMiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShDT0NPQSkKKyAgICBWZWN0b3I8U3RyaW5nPiByZWFkRmlsZW5hbWVzKCk7CiAgICAg
U3RyaW5nIHJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBkb21UeXBlLCBs
b25nIGNoYW5nZUNvdW50LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKICAgICBzdGF0
aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3Ry
aW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKTsKICAgICBTdHJpbmcgcmVhZFN0cmluZ0ZvclBsYXRmb3JtVHlwZShj
b25zdCBTdHJpbmcmKTsKKyAgICBWZWN0b3I8U3RyaW5nPiByZWFkVHlwZXNXaXRoU2VjdXJpdHlD
aGVjaygpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJlYWRCdWZmZXJGb3JUeXBlV2l0aFNl
Y3VyaXR5Q2hlY2soY29uc3QgU3RyaW5nJik7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmgJKHJldmlz
aW9uIDIyMjY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNE
YXRhKCkgZmluYWw7CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yQmluZGluZ3MoKSBm
aW5hbCB7IHJldHVybiBtX3R5cGVzOyB9CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JMZWdh
Y3lVbnNhZmVCaW5kaW5ncygpIGZpbmFsIHsgcmV0dXJuIG1fdHlwZXM7IH0KLSAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkgZmluYWwgeyByZXR1cm4geyB9OyB9CiAgICAg
U3RyaW5nIHJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKSBmaW5hbDsKICAgICBTdHJpbmcg
cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpIGZpbmFsOwogCkBAIC01
OSw3ICs1OCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHdyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJD
b250ZW50JikgZmluYWwgeyB9CiAKICAgICBib29sIGNvbnRhaW5zRmlsZXMoKSBmaW5hbCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIFZlY3RvcjxTdHJpbmc+IHJlYWRGaWxlbmFtZXMoKSBmaW5hbCB7
IHJldHVybiB7IH07IH0KICAgICBib29sIGNhblNtYXJ0UmVwbGFjZSgpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICB2b2lkIHdyaXRlTWFya3VwKGNvbnN0IFN0cmluZyYpIGZpbmFsIHsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRD
b2NvYS5tbQkocmV2aXNpb24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvUGFzdGVib2FyZENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSwxMiBAQCBz
dGF0aWMgY29uc3QgY2hhciogaW1hZ2VUeXBlVG9GYWtlRmlsZW5hCiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNlIEltYWdlVHlw
ZTo6VElGRjoKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHJldHVybiAiaW1hZ2UvcG5nIjsg
Ly8gRm9yIFdlYiBjb21wYXRpYmlsaXR5LCB3ZSBwcmV0ZW5kIHRvIGhhdmUgUE5HIGluc3RlYWQu
CisjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBudWxscHRyOyAvLyBEb24ndCBzdXBwb3J0IFRJRkYgb24g
aU9TIGZvciBub3cuCisjZW5kaWYKICAgICBjYXNlIEltYWdlVHlwZTo6UE5HOgogICAgICAgICBy
ZXR1cm4gImltYWdlLnBuZyI7CiAgICAgY2FzZSBJbWFnZVR5cGU6OkpQRUc6CkBAIC0xMTAsNDcg
KzExNCwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogaW1hZ2VUeXBlVG9GYWtlRmlsZW5hCiAgICAg
fQogfQogCi1zdGF0aWMgSW1hZ2VUeXBlIG1pbWVUeXBlVG9JbWFnZVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKG1pbWVUeXBlID09ICJp
bWFnZS90aWZmIikKLSAgICAgICAgcmV0dXJuIEltYWdlVHlwZTo6VElGRjsKLSNlbmRpZgotICAg
IGlmIChtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIikKLSAgICAgICAgcmV0dXJuIEltYWdlVHlwZTo6
UE5HOwotICAgIGlmIChtaW1lVHlwZSA9PSAiaW1hZ2UvanBlZyIpCi0gICAgICAgIHJldHVybiBJ
bWFnZVR5cGU6OkpQRUc7Ci0gICAgaWYgKG1pbWVUeXBlID09ICJpbWFnZS9naWYiKQotICAgICAg
ICByZXR1cm4gSW1hZ2VUeXBlOjpHSUY7Ci0gICAgcmV0dXJuIEltYWdlVHlwZTo6SW52YWxpZDsK
LX0KLQogYm9vbCBQYXN0ZWJvYXJkOjpzaG91bGRUcmVhdENvY29hVHlwZUFzRmlsZShjb25zdCBT
dHJpbmcmIGNvY29hVHlwZSkKIHsKICAgICByZXR1cm4gY29jb2FUeXBlVG9JbWFnZVR5cGUoY29j
b2FUeXBlKSAhPSBJbWFnZVR5cGU6OkludmFsaWQ7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBhc3Rl
Ym9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IGNvY29h
VHlwZXM7Ci0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5n
ZXRUeXBlcyhjb2NvYVR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIC8vIEVuZm9yY2Ug
Y2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGlu
ZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2Ug
YmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRh
dGEuCi0gICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKLSAgICAgICAg
cmV0dXJuIHsgfTsKLQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwotICAgIGZvciAo
YXV0byYgY29jb2FUeXBlIDogY29jb2FUeXBlcykgewotICAgICAgICBpZiAoYXV0byogbWltZVR5
cGUgPSBpbWFnZVR5cGVUb01JTUVUeXBlKGNvY29hVHlwZVRvSW1hZ2VUeXBlKGNvY29hVHlwZSkp
KQotICAgICAgICAgICAgcmVzdWx0LmFkZChtaW1lVHlwZSk7Ci0gICAgfQotCi0gICAgVmVjdG9y
PFN0cmluZz4gdHlwZXM7Ci0gICAgY29weVRvVmVjdG9yKHJlc3VsdCwgdHlwZXMpOwotICAgIHJl
dHVybiB0eXBlczsKLX0KLQogYm9vbCBQYXN0ZWJvYXJkOjpjb250YWluc0ZpbGVzKCkKIHsKICAg
ICBpZiAoIXBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0TnVt
YmVyT2ZGaWxlcyhtX3Bhc3RlYm9hcmROYW1lKSkgewpAQCAtMTgyLDYzICsxNTAsNTQgQEAgVmVj
dG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQgogCiBWZWN0b3I8U3RyaW5nPiBQ
YXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkKIHsKLSAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlczsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIC8vIEVuZm9y
Y2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVh
ZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFu
Z2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhl
IGRhdGEuCi0gICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBh
c3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb2NvYVR5cGVzID0gcmVhZFR5cGVz
V2l0aFNlY3VyaXR5Q2hlY2soKTsKKyAgICBpZiAoIWNvY29hVHlwZXMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gY29jb2FUeXBlczsKIAogICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0Owot
ICAgIGZvciAoYXV0byYgY29jb2FUeXBlIDogdHlwZXMpCisgICAgZm9yIChhdXRvJiBjb2NvYVR5
cGUgOiBjb2NvYVR5cGVzKQogICAgICAgICBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5
cGUocmVzdWx0LCBjb2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogCisgICAgVmVjdG9yPFN0
cmluZz4gdHlwZXM7CiAgICAgY29weVRvVmVjdG9yKHJlc3VsdCwgdHlwZXMpOwogICAgIHJldHVy
biB0eXBlczsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3N0YXRpYyBSZWY8U2hhcmVkQnVmZmVy
PiBjb252ZXJ0VElGRlRvUE5HKFNoYXJlZEJ1ZmZlciYgdGlmZkJ1ZmZlcikKK3sKKyAgICBhdXRv
IGltYWdlID0gYWRvcHROUyhbW05TQml0bWFwSW1hZ2VSZXAgYWxsb2NdIGluaXRXaXRoRGF0YTog
dGlmZkJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKV0pOworICAgIE5TRGF0YSAqcG5nRGF0YSA9
IFtpbWFnZSByZXByZXNlbnRhdGlvblVzaW5nVHlwZTpOU1BOR0ZpbGVUeXBlIHByb3BlcnRpZXM6
QHsgfV07CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHBuZ0RhdGEpOworfQorI2Vu
ZGlmCisKIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYgcmVhZGVy
KQogewotICAgIGF1dG8gaW1hZ2VUeXBlID0gbWltZVR5cGVUb0ltYWdlVHlwZShyZWFkZXIudHlw
ZSk7Ci0gICAgaWYgKGltYWdlVHlwZSA9PSBJbWFnZVR5cGU6OkludmFsaWQpCisgICAgYXV0byBm
aWxlbmFtZXMgPSByZWFkRmlsZW5hbWVzKCk7CisgICAgaWYgKCFmaWxlbmFtZXMuaXNFbXB0eSgp
KSB7CisgICAgICAgIGZvciAoYXV0byYgZmlsZW5hbWUgOiBmaWxlbmFtZXMpCisgICAgICAgICAg
ICByZWFkZXIucmVhZEZpbGVuYW1lKGZpbGVuYW1lKTsKICAgICAgICAgcmV0dXJuOwotCi0gICAg
U3RyaW5nIGNvY29hVHlwZVRvUmVhZDsKLSAgICBTdHJpbmcgdGlmZkNvY29hVHlwZUluUGFzdGVi
b2FyZDsKLSAgICBWZWN0b3I8U3RyaW5nPiBjb2NvYVR5cGVzOwotICAgIHBsYXRmb3JtU3RyYXRl
Z2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXMoY29jb2FUeXBlcywgbV9wYXN0
ZWJvYXJkTmFtZSk7Ci0gICAgZm9yIChhdXRvJiBjb2NvYVR5cGUgOiBjb2NvYVR5cGVzKSB7Ci0g
ICAgICAgIGF1dG8gaW1hZ2VUeXBlSW5QYXN0ZWJvYXJkID0gY29jb2FUeXBlVG9JbWFnZVR5cGUo
Y29jb2FUeXBlKTsKLSAgICAgICAgaWYgKGltYWdlVHlwZUluUGFzdGVib2FyZCA9PSBpbWFnZVR5
cGUpIHsKLSAgICAgICAgICAgIGNvY29hVHlwZVRvUmVhZCA9IGNvY29hVHlwZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0aWZmQ29jb2FUeXBlSW5QYXN0ZWJv
YXJkLmlzTnVsbCgpICYmIGltYWdlVHlwZUluUGFzdGVib2FyZCA9PSBJbWFnZVR5cGU6OlRJRkYp
Ci0gICAgICAgICAgICB0aWZmQ29jb2FUeXBlSW5QYXN0ZWJvYXJkID0gY29jb2FUeXBlOwogICAg
IH0KIAotICAgIGJvb2wgdGlmZldhc1RyZWF0ZWRBc1BOR0ZvcldlYkNvbXBhdGliaWxpdHkgPSBp
bWFnZVR5cGUgPT0gSW1hZ2VUeXBlOjpQTkcgJiYgY29jb2FUeXBlVG9SZWFkLmlzTnVsbCgpICYm
ICF0aWZmQ29jb2FUeXBlSW5QYXN0ZWJvYXJkLmlzTnVsbCgpOwotICAgIGlmICh0aWZmV2FzVHJl
YXRlZEFzUE5HRm9yV2ViQ29tcGF0aWJpbGl0eSkKLSAgICAgICAgY29jb2FUeXBlVG9SZWFkID0g
dGlmZkNvY29hVHlwZUluUGFzdGVib2FyZDsKLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1
ZmZlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVy
Rm9yVHlwZShjb2NvYVR5cGVUb1JlYWQsIG1fcGFzdGVib2FyZE5hbWUpOwotCi0gICAgLy8gRW5m
b3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciBy
ZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCi0gICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNo
YW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0
aGUgZGF0YS4KLSAgICBpZiAoIWJ1ZmZlciB8fCBtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJk
TmFtZSkpCi0gICAgICAgIHJldHVybjsKLQorICAgIFZlY3RvcjxTdHJpbmc+IGNvY29hVHlwZXMg
PSByZWFkVHlwZXNXaXRoU2VjdXJpdHlDaGVjaygpOworICAgIEhhc2hTZXQ8Y29uc3QgY2hhcio+
IGV4aXN0aW5nTUlNRXM7CisgICAgZm9yIChhdXRvJiBjb2NvYVR5cGUgOiBjb2NvYVR5cGVzKSB7
CisgICAgICAgIGF1dG8gaW1hZ2VUeXBlID0gY29jb2FUeXBlVG9JbWFnZVR5cGUoY29jb2FUeXBl
KTsKKyAgICAgICAgY29uc3QgY2hhciogbWltZVR5cGUgPSBpbWFnZVR5cGVUb01JTUVUeXBlKGlt
YWdlVHlwZSk7CisgICAgICAgIGlmIChpbWFnZVR5cGUgPT0gSW1hZ2VUeXBlOjpJbnZhbGlkIHx8
IGV4aXN0aW5nTUlNRXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGV4aXN0aW5nTUlNRXMuYWRkKG1pbWVUeXBlKTsKKyAgICAgICAgYXV0byBidWZm
ZXIgPSByZWFkQnVmZmVyRm9yVHlwZVdpdGhTZWN1cml0eUNoZWNrKGNvY29hVHlwZSk7CiAjaWYg
UExBVEZPUk0oTUFDKQotICAgIGlmICh0aWZmV2FzVHJlYXRlZEFzUE5HRm9yV2ViQ29tcGF0aWJp
bGl0eSkgewotICAgICAgICBhdXRvIHRpZmZEYXRhID0gYnVmZmVyLT5jcmVhdGVOU0RhdGEoKTsK
LSAgICAgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBp
bml0V2l0aERhdGE6IHRpZmZEYXRhLmdldCgpXSk7Ci0gICAgICAgIE5TRGF0YSAqcG5nRGF0YSA9
IFtpbWFnZSByZXByZXNlbnRhdGlvblVzaW5nVHlwZTpOU1BOR0ZpbGVUeXBlIHByb3BlcnRpZXM6
QHsgfV07Ci0gICAgICAgIHJlYWRlci5yZWFkKGltYWdlVHlwZVRvRmFrZUZpbGVuYW1lKGltYWdl
VHlwZSksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHBuZ0RhdGEpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICAgICAgaWYgKGJ1ZmZlciAmJiBpbWFnZVR5cGUgPT0gSW1hZ2VUeXBlOjpUSUZG
KQorICAgICAgICAgICAgYnVmZmVyID0gY29udmVydFRJRkZUb1BORyhidWZmZXIucmVsZWFzZU5v
bk51bGwoKSk7CiAjZW5kaWYKLSAgICByZWFkZXIucmVhZChpbWFnZVR5cGVUb0Zha2VGaWxlbmFt
ZShpbWFnZVR5cGUpLCBidWZmZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmICghYnVm
ZmVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlYWRlci5yZWFkQnVmZmVyKGlt
YWdlVHlwZVRvRmFrZUZpbGVuYW1lKGltYWdlVHlwZSksIG1pbWVUeXBlLCBidWZmZXIucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgfQogfQogCiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhj
b25zdCBTdHJpbmcmIHR5cGUpCkBAIC0yNDgsMTQgKzIwNywxNiBAQCBTdHJpbmcgUGFzdGVib2Fy
ZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpCiAKIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5n
SW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBhdXRvIGJ1ZmZlciA9IHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVyRm9yVHlwZShj
dXN0b21XZWJLaXRQYXN0ZWJvYXJkRGF0YVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOworICAgIGF1
dG8gYnVmZmVyID0gcmVhZEJ1ZmZlckZvclR5cGVXaXRoU2VjdXJpdHlDaGVjayhjdXN0b21XZWJL
aXRQYXN0ZWJvYXJkRGF0YVR5cGUpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgTlNTdHJpbmcgKmN1c3RvbURhdGFWYWx1ZSA9IGN1c3RvbURhdGFGcm9tU2hh
cmVkQnVmZmVyKCpidWZmZXIpLnNhbWVPcmlnaW5DdXN0b21EYXRhLmdldCh0eXBlKTsKLSAgICBp
ZiAoIWN1c3RvbURhdGFWYWx1ZS5sZW5ndGgpCisgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBv
dXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2Yg
YmVmb3JlIHRvIGJlCisgICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0
ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KKyAgICBpZiAo
bV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4geyB9Owot
ICAgIHJldHVybiBjdXN0b21EYXRhVmFsdWU7CisKKyAgICByZXR1cm4gY3VzdG9tRGF0YUZyb21T
aGFyZWRCdWZmZXIoKmJ1ZmZlcikuc2FtZU9yaWdpbkN1c3RvbURhdGEuZ2V0KHR5cGUpOwogfQog
CiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YSYgZGF0YSkKQEAgLTI2OCw1ICsyMjksMjkgQEAgbG9uZyBQYXN0ZWJvYXJkOjpjaGFuZ2VD
b3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSk7CiB9CiAKK1ZlY3RvcjxT
dHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRUeXBlc1dpdGhTZWN1cml0eUNoZWNrKCkKK3sKKyAgICBW
ZWN0b3I8U3RyaW5nPiBjb2NvYVR5cGVzOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXMoY29jb2FUeXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7
CisKKyAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdl
IGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKKyAgICAvLyBzdXJl
IGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBh
bmQgYWNjZXNzaW5nIHRoZSBkYXRhLgorICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJv
YXJkTmFtZSkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gY29jb2FUeXBlczsK
K30KKworUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gUGFzdGVib2FyZDo6cmVhZEJ1ZmZlckZvclR5cGVX
aXRoU2VjdXJpdHlDaGVjayhjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgYXV0byBidWZmZXIg
PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5
cGUodHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisKKyAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50
IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBv
ZiBiZWZvcmUgdG8gYmUKKyAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3Vy
IHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgorICAgIGlm
IChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAorfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAkocmV2aXNpb24gMjIyNjg4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDIsOCArMjQyLDExIEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJk
V2ViQ29udGUKIHsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRGaWxlUmVh
ZGVyJikKK3ZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYgcmVhZGVy
KQogeworICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7CisgICAgZm9yIChhdXRvJiBmaWxlbmFtZSA6
IG1fc2VsZWN0aW9uRGF0YS0+ZmlsZW5hbWVzKCkpCisgICAgICAgIHJlYWRlci5yZWFkRmlsZW5h
bWUoZmlsZW5hbWUpOwogfQogCiBib29sIFBhc3RlYm9hcmQ6Omhhc0RhdGEoKQpAQCAtMjg2LDEx
ICsyODksNiBAQCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjCiAgICAg
cmV0dXJuIHR5cGVzOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0
ZWRBc0ZpbGVzKCkKLXsKLSAgICByZXR1cm4geyB9OwotfQotCiBTdHJpbmcgUGFzdGVib2FyZDo6
cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgcmVhZEZyb21DbGlwYm9hcmQo
KTsKQEAgLTMyMSwxMyArMzE5LDggQEAgU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1
c3RvbURhdAogCiBib29sIFBhc3RlYm9hcmQ6OmNvbnRhaW5zRmlsZXMoKQogewotICAgIHJldHVy
biByZWFkRmlsZW5hbWVzKCkuc2l6ZSgpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJk
OjpyZWFkRmlsZW5hbWVzKCkKLXsKICAgICByZWFkRnJvbUNsaXBib2FyZCgpOwotICAgIHJldHVy
biBtX3NlbGVjdGlvbkRhdGEtPmZpbGVuYW1lcygpOworICAgIHJldHVybiAhbV9zZWxlY3Rpb25E
YXRhLT5maWxlbmFtZXMoKS5pc0VtcHR5KCk7CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVN
YXJrdXAoY29uc3QgU3RyaW5nJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Q
YXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9uIDIyMjY4OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDEx
ICsyODMsNiBAQCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjCiAgICAg
cmV0dXJuIHZlY3RvcjsKIH0KIAotVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNUcmVh
dGVkQXNGaWxlcygpCi17Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogU3RyaW5nIFBhc3RlYm9hcmQ6
OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIGlmICghbV9kYXRhT2JqZWN0
ICYmIG1fZHJhZ0RhdGFNYXAuaXNFbXB0eSgpKQpAQCAtMzE0LDQzICszMDksNTUgQEAgU3RyaW5n
IFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdAogICAgIHJldHVybiB7IH07CiB9CiAK
K3N0cnVjdCBQYXN0ZWJvYXJkRmlsZUNvdW50ZXIgZmluYWwgOiBwdWJsaWMgUGFzdGVib2FyZEZp
bGVSZWFkZXIgeworCisgICAgdm9pZCByZWFkRmlsZW5hbWUoY29uc3QgU3RyaW5nJikgZmluYWwg
eyArK2NvdW50OyB9CisgICAgdm9pZCByZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIFJlZjxTaGFyZWRCdWZmZXI+JiYpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KKworICAgIHVuc2lnbmVkIGNvdW50IHsgMCB9OworfTsKKwogYm9vbCBQYXN0ZWJvYXJkOjpj
b250YWluc0ZpbGVzKCkKIHsKLSAgICByZXR1cm4gcmVhZEZpbGVuYW1lcygpLnNpemUoKTsgLy8g
RklYTUU6IE1ha2UgdGhpcyBjb2RlIG1vcmUgZWZmaWNpZW50LgorICAgIC8vIEZJWE1FOiBUaGlz
IGltcGxlbWVudGF0aW9uIGNhbiBiZSBzbGlnaHRseSBtb3JlIGVmZmljaWVudCBieSBhdm9pZGlu
ZyBjYWxscyB0byBEcmFnUXVlcnlGaWxlVy4KKyAgICBQYXN0ZWJvYXJkRmlsZUNvdW50ZXIgcmVh
ZGVyOworICAgIHJlYWQocmVhZGVyKTsKKyAgICByZXR1cm4gcmVhZGVyLmNvdW50OwogfQogCi1W
ZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkKK3ZvaWQgUGFzdGVib2Fy
ZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYgcmVhZGVyKQogewotICAgIFZlY3RvcjxTdHJp
bmc+IGZpbGVOYW1lczsKLQogI2lmIFVTRShDRikKICAgICBpZiAobV9kYXRhT2JqZWN0KSB7CiAg
ICAgICAgIFNUR01FRElVTSBtZWRpdW07CiAgICAgICAgIGlmIChGQUlMRUQobV9kYXRhT2JqZWN0
LT5HZXREYXRhKGNmSERyb3BGb3JtYXQoKSwgJm1lZGl1bSkpKQotICAgICAgICAgICAgcmV0dXJu
IGZpbGVOYW1lczsKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBIRFJPUCBoZHJvcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8SERST1A+KEdsb2JhbExvY2sobWVkaXVtLmhHbG9iYWwpKTsKICAg
ICAgICAgaWYgKCFoZHJvcCkKLSAgICAgICAgICAgIHJldHVybiBmaWxlTmFtZXM7CisgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgV0NIQVIgZmlsZW5hbWVbTUFYX1BBVEhdOwogICAgICAg
ICBVSU5UIGZpbGVDb3VudCA9IERyYWdRdWVyeUZpbGVXKGhkcm9wLCAweEZGRkZGRkZGLCAwLCAw
KTsKICAgICAgICAgZm9yIChVSU5UIGkgPSAwOyBpIDwgZmlsZUNvdW50OyBpKyspIHsKICAgICAg
ICAgICAgIGlmICghRHJhZ1F1ZXJ5RmlsZVcoaGRyb3AsIGksIGZpbGVuYW1lLCBXVEZfQVJSQVlf
TEVOR1RIKGZpbGVuYW1lKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBmaWxlTmFtZXMuYXBwZW5kKGZpbGVuYW1lKTsKKyAgICAgICAgICAgIHJlYWRlci5yZWFkRmls
ZW5hbWUoZmlsZW5hbWUpOwogICAgICAgICB9CiAKICAgICAgICAgR2xvYmFsVW5sb2NrKG1lZGl1
bS5oR2xvYmFsKTsKICAgICAgICAgUmVsZWFzZVN0Z01lZGl1bSgmbWVkaXVtKTsKLSAgICAgICAg
cmV0dXJuIGZpbGVOYW1lczsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIW1fZHJh
Z0RhdGFNYXAuY29udGFpbnMoY2ZIRHJvcEZvcm1hdCgpLT5jZkZvcm1hdCkpCi0gICAgICAgIHJl
dHVybiBmaWxlTmFtZXM7Ci0gICAgcmV0dXJuIG1fZHJhZ0RhdGFNYXAuZ2V0KGNmSERyb3BGb3Jt
YXQoKS0+Y2ZGb3JtYXQpOworICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8U3RyaW5nPiBs
aXN0ID0gbV9kcmFnRGF0YU1hcC5nZXQoY2ZIRHJvcEZvcm1hdCgpLT5jZkZvcm1hdCk7CisgICAg
Zm9yIChhdXRvJiBmaWxlbmFtZSA6IGxpc3QpCisgICAgICAgIHJlYWRlci5yZWFkRmlsZW5hbWUo
ZmlsZW5hbWUpOwogI2Vsc2UKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmaWxl
TmFtZXM7CisgICAgcmV0dXJuIHsgfTsKICNlbmRpZgogfQogCkBAIC0xMDcyLDEwICsxMDc5LDYg
QEAgdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRXZWJDb250ZQogewogfQogCi12b2lk
IFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImKQotewotfQotCiB2b2lkIFBh
c3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRJbWFnZSYpCiB7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQRS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3BwCShyZXZpc2lvbiAy
MjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQRS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYyLDExICs2Miw2IEBAIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9h
cmQ6OnR5cGVzRm9yTGVnYWMKICAgICByZXR1cm4gdHlwZXM7CiB9CiAKLVZlY3RvcjxTdHJpbmc+
IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKQotewotICAgIHJldHVybiB7IH07Ci19
Ci0KIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsK
ICAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5y
ZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoMCwgdHlwZSk7CkBAIC0xMzAsMTIgKzEyNSw2IEBAIGJv
b2wgUGFzdGVib2FyZDo6Y29udGFpbnNGaWxlcygpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
ZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwotfQotCiBib29sIFBhc3Rl
Ym9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322342</attachid>
            <date>2017-10-01 19:04:06 -0700</date>
            <delta_ts>2017-10-01 19:40:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-177728-20171001190404.patch</filename>
            <type>text/plain</type>
            <size>26079</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjY5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE3LTEwLTAxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1lcmdlIHJlYWRGaWxlbmFtZXMo
KSBhbmQgcmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzQ3NjE3MjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICBH
ZW5lcmFsaXplZCBQYXN0ZWJvYXJkRmlsZVJlYWRlciB0byByZXR1cm4gbXVsdGlwbGUgZmlsZXMg
aW5zdGVhZCBvZiBqdXN0IG9uZSBmaWxlLCBhbmQgcmVwbGFjZWQgdGhlIHVzZQorICAgICAgICBv
ZiBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkgd2l0aCBpdC4gQmVjYXVzZSBlbGltaW5hdGVz
IHRoZSBuZWVkIGZvciBmaW5kaW5nIHRoZSBsaXN0IG9mIHR5cGVzIHRvIHJlYWQKKyAgICAgICAg
YXMgZmlsZXMgaW4gYWRkaXRpb24gdG8gZmlsZSBuYW1lcywgdGhpcyBwYXRjaCBhbHNvIHJlbW92
ZXMgUGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcygpLgorCisgICAgICAgIE5vdGUgdGhh
dCBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkgY29udGludWVzIHRvIGV4aXN0IGluIG1hY09T
IGFuZCBpT1MgYXMgaXQncyBpbnRlcm5hbGx5IHVzZWQgYnkKKyAgICAgICAgUGFzdGVib2FyZDo6
cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikgaW4gUGFzdGVib2FyZENvY29hLm1tLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3JhbCBjaGFu
Z2UuCisKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFUcmFuc2Zlcjo6ZmlsZXMgY29uc3QpOiBOb3cgbWFrZXMgYSBzaW5nbGUgY2FsbCB0byBQ
YXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyKQorICAgICAgICBpbnN0ZWFkIG9m
IHJlYWRpbmcgZmlsZW5hbWVzIGFuZCB0aGVuIGZhbGxpbmcgYmFjayB0byBpdC4gQWxzbyBnb3Qg
cmlkIG9mIGlmLWRlZiBmb3IgZHJhZyBkcm9wIGNoZWNrcworICAgICAgICBzaW5jZSBmb3JEcmFn
KCkgYW5kIGZvckZpbGVEcmFnKCkgYXJlIGFsd2F5cyBkZWZpbmVkIHNpbmNlIHIyMjI2ODguCisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRmlsZVR5cGVSZWFkZXIpOiBBZGRlZC4gR2V0cyB0
aGUgbGlzdCBvZiBhbGwgZmlsZSB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRG
aWxlVHlwZVJlYWRlcjo6cmVhZEZpbGVuYW1lKTogQWRkZWQuIEdldHMgdGhlIGxpc3Qgb2YgYWxs
IGZpbGUgdHlwZXMuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRmlsZVR5cGVSZWFkZXI6
OnJlYWRCdWZmZXIpOiBBZGRlZC4gR2V0cyB0aGUgbGlzdCBvZiBhbGwgZmlsZSB0eXBlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6aGFzRmlsZU9mVHlwZSk6IFJlaW1wbGVtZW50
ZWQgdXNpbmcgUGFzdGVib2FyZEZpbGVUeXBlUmVhZGVyLgorICAgICAgICAqIGVkaXRpbmcvV2Vi
Q29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVQ
YXN0ZWJvYXJkRmlsZVJlYWRlcjo6cmVhZEZpbGVuYW1lKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6OnJlYWRCdWZmZXIpOiBSZW5hbWVkIGZy
b20gcmVhZC4KKyAgICAgICAgKiBlZGl0aW5nL1dlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmRGaWxlUmVhZGVyKTogUmVtb3ZlZCB0aGUgY29uc3RydWN0b3Igc2luY2Ugd2Ugbm8g
bG9uZ2VyIHNwZWNpZnkgYSBzcGVjaWZpYyB0eXBlIHRvCisgICAgICAgIHJlYWQgb2ZmIG9mIHBh
c3RlYm9hcmQsIGFuZCByZW5hbWVkIHRoZSBleGlzdGluZyByZWFkIGZ1bmN0aW9uIHRvIHJlYWRC
dWZmZXIsIGFuZCBhZGRlZCBhIG5ldyB2YXJpYW50CisgICAgICAgIHdoaWNoIHRha2VzIGEgZmls
ZW5hbWUuCisgICAgICAgICogcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Omlt
YWdlVHlwZVRvRmFrZUZpbGVuYW1lKTogUmV0dXJuICJpbWFnZS9wbmciIGZvciBJbWFnZVR5cGU6
OlRJRkYgKHRvIGRvIFRJRkYtdG8tUE5HIGNvbnZlcnNpb247CisgICAgICAgIHNlZSByMjIyNjU2
IGZvciB3aHkgdGhpcyBpcyBuZWVkZWQpIG5vdyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0
byBjb252ZXJ0IGRpcmVjdGx5IGZyb20gaW1hZ2UgdHlwZQorICAgICAgICBjb252ZXJ0ZWQgZnJv
bSBjb2NvYSB0eXBlIGluc3RlYWQgb2YgdGhlIG9uZSByZXZlcnNlLWNvbnZlcnRlZCBmcm9tIE1J
TUUgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6Om1pbWVUeXBlVG9JbWFnZVR5cGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2Fm
ZUJpbmRpbmdzKTogVXNlIG5ld2x5IGFkZGVkIHJlYWRUeXBlc1dpdGhTZWN1cml0eUNoZWNrLgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRJRkZUb1BORyk6IEV4dHJhY3RlZCBvdXQgb2YgcmVh
ZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpy
ZWFkKTogR2VuZXJhbGl6ZWQgdG8gYWRkIGZpbGVuYW1lcyBhcyB3ZWxsIGFzIGltYWdlIGJ1ZmZl
cnMgYXMgZmlsZXMuIEJlY2F1c2Ugbm93CisgICAgICAgIHdlJ3JlIGNvbmNlcnRpbmcgQ29jb2Eg
dHlwZXMgdG8gSW1hZ2VUeXBlLCB3ZSBubyBsb25nZXIgaGF2ZSB0byBkZXRlY3Qgd2hlbiBUSUZG
LWFzLVBORyBjb252ZXJzaW9uIGlzCisgICAgICAgIGhhcHBlbmluZyBoZXJlLiBXZSBqdXN0IHRy
ZWF0IEltYWdlVHlwZTo6VElGRiBhcyBQTkcgYW5kIGRvIHRoZSBjb252ZXJzaW9uLgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YSk6IFVzZSBuZXds
eSBhZGRlZCByZWFkQnVmZmVyRm9yVHlwZVdpdGhTZWN1cml0eUNoZWNrLgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZDo6cmVhZFR5cGVzV2l0aFNlY3VyaXR5Q2hlY2spOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRCdWZmZXJGb3JUeXBlV2l0aFNlY3VyaXR5
Q2hlY2spOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkKTogSW1wbGVtZW50ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNvbnRhaW5zRmlsZXMpOiBJbXBsZW1lbnRl
ZCB3aXRob3V0IGNhbGxpbmcgcmVhZEZpbGVuYW1lcywgd2hpY2ggaGFzIGJlZW4gZGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZEZpbGVDb3VudGVyKTogQWRkZWQuIFVzZWQgdG8gY291bnRzIHRo
ZSBudW1iZXIgb2YgZmlsZXMgaW4gdGhlIHBhc3RlYm9hcmQuCisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkRmlsZUNvdW50ZXI6OnJlYWRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkRmlsZUNvdW50ZXI6OnJlYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6Y29udGFpbnNGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpy
ZWFkKTogTW92ZWQgdGhlIGNvZGUgdG8gZXh0cmFjdCBmaWxlbmFtZXMgb3V0IG9mIHJlYWRGaWxl
bmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQRS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMpOiBEZWxldGVkLgorCiAy
MDE3LTEwLTAxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIHN1
cHBvcnQgZm9yIERPTSBhYm9ydGluZyAoaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNhYm9y
dGluZy1vbmdvaW5nLWFjdGl2aXRpZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRy
YW5zZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVy
LmNwcAkocmV2aXNpb24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw0NyArMTgyLDUwIEBAIFZlY3RvcjxTdHJpbmc+
IERhdGFUcmFuc2Zlcjo6dHlwZXMoKSBjb24KIAogRmlsZUxpc3QmIERhdGFUcmFuc2Zlcjo6Zmls
ZXMoKSBjb25zdAogewotICAgIGJvb2wgbmV3bHlDcmVhdGVkRmlsZUxpc3QgPSAhbV9maWxlTGlz
dDsKLSAgICBpZiAoIW1fZmlsZUxpc3QpCi0gICAgICAgIG1fZmlsZUxpc3QgPSBGaWxlTGlzdDo6
Y3JlYXRlKCk7Ci0KICAgICBpZiAoIWNhblJlYWREYXRhKCkpIHsKLSAgICAgICAgbV9maWxlTGlz
dC0+Y2xlYXIoKTsKKyAgICAgICAgaWYgKG1fZmlsZUxpc3QpCisgICAgICAgICAgICBtX2ZpbGVM
aXN0LT5jbGVhcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2ZpbGVMaXN0ID0gRmls
ZUxpc3Q6OmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gKm1fZmlsZUxpc3Q7CiAgICAgfQogCi0j
aWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKICAgICBpZiAoZm9yRHJhZygpICYmICFmb3JGaWxlRHJh
ZygpKSB7Ci0gICAgICAgIEFTU0VSVChtX2ZpbGVMaXN0LT5pc0VtcHR5KCkpOworICAgICAgICBp
ZiAobV9maWxlTGlzdCkKKyAgICAgICAgICAgIEFTU0VSVChtX2ZpbGVMaXN0LT5pc0VtcHR5KCkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2ZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0
ZSgpOwogICAgICAgICByZXR1cm4gKm1fZmlsZUxpc3Q7CiAgICAgfQotI2VuZGlmCiAKLSAgICBp
ZiAobmV3bHlDcmVhdGVkRmlsZUxpc3QpIHsKLSAgICAgICAgZm9yIChhdXRvJiBmaWxlbmFtZSA6
IG1fcGFzdGVib2FyZC0+cmVhZEZpbGVuYW1lcygpKQotICAgICAgICAgICAgbV9maWxlTGlzdC0+
YXBwZW5kKEZpbGU6OmNyZWF0ZShmaWxlbmFtZSkpOwotICAgICAgICBpZiAobV9maWxlTGlzdC0+
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBtX3Bhc3RlYm9hcmQt
PnR5cGVzVHJlYXRlZEFzRmlsZXMoKSkgewotICAgICAgICAgICAgICAgIFdlYkNvcmVQYXN0ZWJv
YXJkRmlsZVJlYWRlciByZWFkZXIodHlwZSk7Ci0gICAgICAgICAgICAgICAgbV9wYXN0ZWJvYXJk
LT5yZWFkKHJlYWRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRlci5maWxlKQotICAgICAg
ICAgICAgICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQocmVhZGVyLmZpbGUucmVsZWFzZU5vbk51
bGwoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAoIW1fZmlsZUxpc3QpIHsK
KyAgICAgICAgV2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyIHJlYWRlcjsKKyAgICAgICAgbV9w
YXN0ZWJvYXJkLT5yZWFkKHJlYWRlcik7CisgICAgICAgIG1fZmlsZUxpc3QgPSBGaWxlTGlzdDo6
Y3JlYXRlKFdURk1vdmUocmVhZGVyLmZpbGVzKSk7CiAgICAgfQogICAgIHJldHVybiAqbV9maWxl
TGlzdDsKIH0KIAotYm9vbCBEYXRhVHJhbnNmZXI6Omhhc0ZpbGVPZlR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlKQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhblJlYWRU
eXBlcygpKTsKK3N0cnVjdCBQYXN0ZWJvYXJkRmlsZVR5cGVSZWFkZXIgZmluYWwgOiBQYXN0ZWJv
YXJkRmlsZVJlYWRlciB7CisgICAgdm9pZCByZWFkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSkKKyAgICB7CisgICAgICAgIHR5cGVzLmFkZChGaWxlOjpjb250ZW50VHlwZUZvckZpbGUo
ZmlsZW5hbWUpKTsKKyAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHBhdGggOiBtX3Bhc3RlYm9hcmQt
PnJlYWRGaWxlbmFtZXMoKSkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShG
aWxlOjpjb250ZW50VHlwZUZvckZpbGUocGF0aCksIHR5cGUpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgdm9pZCByZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJikKKyAgICB7CisgICAgICAgIHR5cGVzLmFkZCh0eXBl
KTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4gdHlwZXM7Cit9OworCitib29sIERhdGFUcmFuc2Zlcjo6aGFz
RmlsZU9mVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oY2FuUmVhZFR5cGVzKCkpOworICAgIFBhc3RlYm9hcmRGaWxlVHlwZVJl
YWRlciByZWFkZXI7CisgICAgbV9wYXN0ZWJvYXJkLT5yZWFkKHJlYWRlcik7CisgICAgcmV0dXJu
IHJlYWRlci50eXBlcy5jb250YWlucyh0eXBlKTsKIH0KIAogYm9vbCBEYXRhVHJhbnNmZXI6Omhh
c1N0cmluZ09mVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1dlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuY3BwCShyZXZp
c2lvbiAyMjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvcmVQYXN0ZWJvYXJk
RmlsZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFdlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlcjo6fldlYkNvcmVQYXN0
ZWJvYXJkRmlsZVJlYWRlcigpID0gZGVmYXVsdDsKIAotdm9pZCBXZWJDb3JlUGFzdGVib2FyZEZp
bGVSZWFkZXI6OnJlYWQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgUmVmPFNoYXJlZEJ1ZmZlcj4m
JiBidWZmZXIpCit2b2lkIFdlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlcjo6cmVhZEZpbGVuYW1l
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit7CisgICAgZmlsZXMuYXBwZW5kKEZpbGU6OmNyZWF0
ZShmaWxlbmFtZSkpOworfQorCit2b2lkIFdlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlcjo6cmVh
ZEJ1ZmZlcihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUsIFJlZjxT
aGFyZWRCdWZmZXI+JiYgYnVmZmVyKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAg
IGRhdGEuYXBwZW5kKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7Ci0gICAgZmlsZSA9
IEZpbGU6OmNyZWF0ZShCbG9iOjpjcmVhdGUoV1RGTW92ZShkYXRhKSwgdHlwZSksIGZpbGVuYW1l
KTsKKyAgICBmaWxlcy5hcHBlbmQoRmlsZTo6Y3JlYXRlKEJsb2I6OmNyZWF0ZShXVEZNb3ZlKGRh
dGEpLCB0eXBlKSwgZmlsZW5hbWUpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1dlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlci5oCShyZXZpc2lvbiAy
MjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvcmVQYXN0ZWJvYXJkRmlsZVJl
YWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgRmlsZTsKIAogc3RydWN0IFdlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlciBm
aW5hbCA6IFBhc3RlYm9hcmRGaWxlUmVhZGVyIHsKLSAgICBXZWJDb3JlUGFzdGVib2FyZEZpbGVS
ZWFkZXIoY29uc3QgU3RyaW5nJiB0eXBlKQotICAgICAgICA6IFBhc3RlYm9hcmRGaWxlUmVhZGVy
KHR5cGUpCi0gICAgeyB9Ci0KICAgICB+V2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyKCk7CiAK
LSAgICB2b2lkIHJlYWQoY29uc3QgU3RyaW5nJiwgUmVmPFNoYXJlZEJ1ZmZlcj4mJikgZmluYWw7
CisgICAgdm9pZCByZWFkRmlsZW5hbWUoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgdm9pZCBy
ZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgdHlwZSwgUmVm
PFNoYXJlZEJ1ZmZlcj4mJikgZmluYWw7CiAKLSAgICBSZWZQdHI8RmlsZT4gZmlsZTsKKyAgICBW
ZWN0b3I8UmVmPEZpbGU+PiBmaWxlczsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Bhc3RlYm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkLmgJKHJldmlzaW9uIDIyMjY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Bhc3RlYm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBjbGFzcyBE
b2N1bWVudEZyYWdtZW50OwogY2xhc3MgRHJhZ0RhdGE7CiBjbGFzcyBFbGVtZW50OwogY2xhc3Mg
RnJhbWU7CitjbGFzcyBQYXN0ZWJvYXJkU3RyYXRlZ3k7CiBjbGFzcyBSYW5nZTsKIGNsYXNzIFNl
bGVjdGlvbkRhdGE7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CkBAIC0xNDgsMTQgKzE0OSw5IEBAIHN0
cnVjdCBQYXN0ZWJvYXJkUGxhaW5UZXh0IHsKIH07CiAKIHN0cnVjdCBQYXN0ZWJvYXJkRmlsZVJl
YWRlciB7Ci0gICAgUGFzdGVib2FyZEZpbGVSZWFkZXIoY29uc3QgU3RyaW5nJiB0eXBlKQotICAg
ICAgICA6IHR5cGUodHlwZSkKLSAgICB7IH0KICAgICB2aXJ0dWFsIH5QYXN0ZWJvYXJkRmlsZVJl
YWRlcigpID0gZGVmYXVsdDsKLQotICAgIHZpcnR1YWwgdm9pZCByZWFkKGNvbnN0IFN0cmluZyYs
IFJlZjxTaGFyZWRCdWZmZXI+JiYpID0gMDsKLQotICAgIGNvbnN0IFN0cmluZyB0eXBlOworICAg
IHZpcnR1YWwgdm9pZCByZWFkRmlsZW5hbWUoY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYg
dHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJikgPSAwOwogfTsKIAogLy8gRklYTUU6IFdlIG5lZWQg
dG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHNhbWVPcmlnaW5DdXN0b21EYXRhIGFyZSBu
b3QgYWNjZXNzaWJsZSBhY3Jvc3MgZGlmZmVyZW50IG9yaWdpbnMuCkBAIC0xOTgsNyArMTk0LDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7CiAgICAgdmlydHVhbCBWZWN0
b3I8U3RyaW5nPiB0eXBlc1NhZmVGb3JCaW5kaW5ncygpOwogICAgIHZpcnR1YWwgVmVjdG9yPFN0
cmluZz4gdHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpOwotICAgIHZpcnR1YWwgVmVjdG9y
PFN0cmluZz4gdHlwZXNUcmVhdGVkQXNGaWxlcygpOwogICAgIHZpcnR1YWwgU3RyaW5nIHJlYWRT
dHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICB2aXJ0dWFsIFN0cmluZyByZWFkU3RyaW5n
SW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAKQEAgLTIxNiw3ICsyMTEsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50
Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNGaWxlcygpOwotICAgIHZpcnR1YWwgVmVj
dG9yPFN0cmluZz4gcmVhZEZpbGVuYW1lcygpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5TbWFydFJl
cGxhY2UoKTsKIAogICAgIHZpcnR1YWwgdm9pZCB3cml0ZU1hcmt1cChjb25zdCBTdHJpbmcmIG1h
cmt1cCk7CkBAIC0yODIsOSArMjc2LDEyIEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIFZlY3RvcjxTdHJpbmc+IHJlYWRGaWxlbmFtZXMoKTsKICAgICBTdHJp
bmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcg
Y2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwogICAgIHN0YXRpYyB2
b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+
JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpOwogICAgIFN0cmluZyByZWFkU3RyaW5nRm9yUGxhdGZvcm1UeXBlKGNvbnN0
IFN0cmluZyYpOworICAgIFZlY3RvcjxTdHJpbmc+IHJlYWRUeXBlc1dpdGhTZWN1cml0eUNoZWNr
KCk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVhZEJ1ZmZlckZvclR5cGVXaXRoU2VjdXJp
dHlDaGVjayhjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaAkocmV2aXNpb24g
MjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0RhdGEo
KSBmaW5hbDsKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc1NhZmVGb3JCaW5kaW5ncygpIGZpbmFs
IHsgcmV0dXJuIG1fdHlwZXM7IH0KICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc0ZvckxlZ2FjeVVu
c2FmZUJpbmRpbmdzKCkgZmluYWwgeyByZXR1cm4gbV90eXBlczsgfQotICAgIFZlY3RvcjxTdHJp
bmc+IHR5cGVzVHJlYXRlZEFzRmlsZXMoKSBmaW5hbCB7IHJldHVybiB7IH07IH0KICAgICBTdHJp
bmcgcmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpIGZpbmFsOwogICAgIFN0cmluZyByZWFk
U3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgZmluYWw7CiAKQEAgLTU5LDcg
KzU4LDYgQEAgcHVibGljOgogICAgIHZvaWQgd3JpdGUoY29uc3QgUGFzdGVib2FyZFdlYkNvbnRl
bnQmKSBmaW5hbCB7IH0KIAogICAgIGJvb2wgY29udGFpbnNGaWxlcygpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgVmVjdG9yPFN0cmluZz4gcmVhZEZpbGVuYW1lcygpIGZpbmFsIHsgcmV0
dXJuIHsgfTsgfQogICAgIGJvb2wgY2FuU21hcnRSZXBsYWNlKCkgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIHZvaWQgd3JpdGVNYXJrdXAoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29h
Lm1tCShyZXZpc2lvbiAyMjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Q
YXN0ZWJvYXJkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDggQEAgc3RhdGlj
IEltYWdlVHlwZSBjb2NvYVR5cGVUb0ltYWdlVHlwZShjbwogICAgIHJldHVybiBJbWFnZVR5cGU6
OkludmFsaWQ7CiB9CiAKKy8vIFN0cmluZyBsaXRlcmFscyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0
aW9uIG11c3QgYmUgZGVmaW5lZCBleGFjdGx5IG9uY2UKKy8vIHNpbmNlIHJlYWQoUGFzdGVib2Fy
ZEZpbGVSZWFkZXImKSB1c2VzIEhhc2hNYXA8Y29uc3QgY2hhcio+IHRvIGNoZWNrIHVuaXF1ZW5l
c3MuCiBzdGF0aWMgY29uc3QgY2hhciogaW1hZ2VUeXBlVG9NSU1FVHlwZShJbWFnZVR5cGUgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTgxLDcgKzgzLDcgQEAgc3RhdGljIGNvbnN0
IGNoYXIqIGltYWdlVHlwZVRvTUlNRVR5cGUoSQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAg
cmV0dXJuICJpbWFnZS9wbmciOyAvLyBGb3IgV2ViIGNvbXBhdGliaWxpdHksIHdlIHByZXRlbmQg
dG8gaGF2ZSBQTkcgaW5zdGVhZC4KICNlbHNlCi0gICAgICAgIHJldHVybiBudWxscHRyOyAvLyBE
b24ndCBzdXBwb3J0IFRJRkYgb24gaU9TIGZvciBub3cuCisgICAgICAgIHJldHVybiBudWxscHRy
OyAvLyBEb24ndCBzdXBwb3J0IHBhc3RpbmcgVElGRiBvbiBpT1MgZm9yIG5vdy4KICNlbmRpZgog
ICAgIGNhc2UgSW1hZ2VUeXBlOjpQTkc6CiAgICAgICAgIHJldHVybiAiaW1hZ2UvcG5nIjsKQEAg
LTk5LDggKzEwMSwxMiBAQCBzdGF0aWMgY29uc3QgY2hhciogaW1hZ2VUeXBlVG9GYWtlRmlsZW5h
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBjYXNlIEltYWdlVHlwZTo6VElGRjoKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHJl
dHVybiAiaW1hZ2UvcG5nIjsgLy8gRm9yIFdlYiBjb21wYXRpYmlsaXR5LCB3ZSBwcmV0ZW5kIHRv
IGhhdmUgUE5HIGluc3RlYWQuCisjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKICAgICBjYXNlIEltYWdlVHlwZTo6UE5H
OgogICAgICAgICByZXR1cm4gImltYWdlLnBuZyI7CiAgICAgY2FzZSBJbWFnZVR5cGU6OkpQRUc6
CkBAIC0xMTAsNDcgKzExNiwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogaW1hZ2VUeXBlVG9GYWtl
RmlsZW5hCiAgICAgfQogfQogCi1zdGF0aWMgSW1hZ2VUeXBlIG1pbWVUeXBlVG9JbWFnZVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKG1p
bWVUeXBlID09ICJpbWFnZS90aWZmIikKLSAgICAgICAgcmV0dXJuIEltYWdlVHlwZTo6VElGRjsK
LSNlbmRpZgotICAgIGlmIChtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIikKLSAgICAgICAgcmV0dXJu
IEltYWdlVHlwZTo6UE5HOwotICAgIGlmIChtaW1lVHlwZSA9PSAiaW1hZ2UvanBlZyIpCi0gICAg
ICAgIHJldHVybiBJbWFnZVR5cGU6OkpQRUc7Ci0gICAgaWYgKG1pbWVUeXBlID09ICJpbWFnZS9n
aWYiKQotICAgICAgICByZXR1cm4gSW1hZ2VUeXBlOjpHSUY7Ci0gICAgcmV0dXJuIEltYWdlVHlw
ZTo6SW52YWxpZDsKLX0KLQogYm9vbCBQYXN0ZWJvYXJkOjpzaG91bGRUcmVhdENvY29hVHlwZUFz
RmlsZShjb25zdCBTdHJpbmcmIGNvY29hVHlwZSkKIHsKICAgICByZXR1cm4gY29jb2FUeXBlVG9J
bWFnZVR5cGUoY29jb2FUeXBlKSAhPSBJbWFnZVR5cGU6OkludmFsaWQ7CiB9CiAKLVZlY3RvcjxT
dHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKQotewotICAgIFZlY3RvcjxT
dHJpbmc+IGNvY29hVHlwZXM7Ci0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5nZXRUeXBlcyhjb2NvYVR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAg
IC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sg
YWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9l
c24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nl
c3NpbmcgdGhlIGRhdGEuCi0gICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1l
KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0
OwotICAgIGZvciAoYXV0byYgY29jb2FUeXBlIDogY29jb2FUeXBlcykgewotICAgICAgICBpZiAo
YXV0byogbWltZVR5cGUgPSBpbWFnZVR5cGVUb01JTUVUeXBlKGNvY29hVHlwZVRvSW1hZ2VUeXBl
KGNvY29hVHlwZSkpKQotICAgICAgICAgICAgcmVzdWx0LmFkZChtaW1lVHlwZSk7Ci0gICAgfQot
Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgY29weVRvVmVjdG9yKHJlc3VsdCwgdHlw
ZXMpOwotICAgIHJldHVybiB0eXBlczsKLX0KLQogYm9vbCBQYXN0ZWJvYXJkOjpjb250YWluc0Zp
bGVzKCkKIHsKICAgICBpZiAoIXBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+Z2V0TnVtYmVyT2ZGaWxlcyhtX3Bhc3RlYm9hcmROYW1lKSkgewpAQCAtMTgyLDYzICsx
NTIsNTUgQEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQgogCiBWZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkKIHsK
LSAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQot
ICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hl
Y2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQg
ZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBh
Y2Nlc3NpbmcgdGhlIGRhdGEuCi0gICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmRO
YW1lKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIGNvY29hVHlwZXMgPSByZWFkVHlw
ZXNXaXRoU2VjdXJpdHlDaGVjaygpOworICAgIGlmIChjb2NvYVR5cGVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGNvY29hVHlwZXM7CiAKICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3Vs
dDsKLSAgICBmb3IgKGF1dG8mIGNvY29hVHlwZSA6IHR5cGVzKQorICAgIGZvciAoYXV0byYgY29j
b2FUeXBlIDogY29jb2FUeXBlcykKICAgICAgICAgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29j
b2FUeXBlKHJlc3VsdCwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKIAorICAgIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzOwogICAgIGNvcHlUb1ZlY3RvcihyZXN1bHQsIHR5cGVzKTsKICAgICBy
ZXR1cm4gdHlwZXM7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCitzdGF0aWMgUmVmPFNoYXJlZEJ1
ZmZlcj4gY29udmVydFRJRkZUb1BORyhTaGFyZWRCdWZmZXImIHRpZmZCdWZmZXIpCit7CisgICAg
YXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aERh
dGE6IHRpZmZCdWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCldKTsKKyAgICBOU0RhdGEgKnBuZ0Rh
dGEgPSBbaW1hZ2UgcmVwcmVzZW50YXRpb25Vc2luZ1R5cGU6TlNQTkdGaWxlVHlwZSBwcm9wZXJ0
aWVzOkB7IH1dOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShwbmdEYXRhKTsKK30K
KyNlbmRpZgorCiB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJl
YWRlcikKIHsKLSAgICBhdXRvIGltYWdlVHlwZSA9IG1pbWVUeXBlVG9JbWFnZVR5cGUocmVhZGVy
LnR5cGUpOwotICAgIGlmIChpbWFnZVR5cGUgPT0gSW1hZ2VUeXBlOjpJbnZhbGlkKQorICAgIGF1
dG8gZmlsZW5hbWVzID0gcmVhZEZpbGVuYW1lcygpOworICAgIGlmICghZmlsZW5hbWVzLmlzRW1w
dHkoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogZmlsZW5hbWVzKQorICAgICAg
ICAgICAgcmVhZGVyLnJlYWRGaWxlbmFtZShmaWxlbmFtZSk7CiAgICAgICAgIHJldHVybjsKLQot
ICAgIFN0cmluZyBjb2NvYVR5cGVUb1JlYWQ7Ci0gICAgU3RyaW5nIHRpZmZDb2NvYVR5cGVJblBh
c3RlYm9hcmQ7Ci0gICAgVmVjdG9yPFN0cmluZz4gY29jb2FUeXBlczsKLSAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKGNvY29hVHlwZXMsIG1f
cGFzdGVib2FyZE5hbWUpOwotICAgIGZvciAoYXV0byYgY29jb2FUeXBlIDogY29jb2FUeXBlcykg
ewotICAgICAgICBhdXRvIGltYWdlVHlwZUluUGFzdGVib2FyZCA9IGNvY29hVHlwZVRvSW1hZ2VU
eXBlKGNvY29hVHlwZSk7Ci0gICAgICAgIGlmIChpbWFnZVR5cGVJblBhc3RlYm9hcmQgPT0gaW1h
Z2VUeXBlKSB7Ci0gICAgICAgICAgICBjb2NvYVR5cGVUb1JlYWQgPSBjb2NvYVR5cGU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAodGlmZkNvY29hVHlwZUluUGFz
dGVib2FyZC5pc051bGwoKSAmJiBpbWFnZVR5cGVJblBhc3RlYm9hcmQgPT0gSW1hZ2VUeXBlOjpU
SUZGKQotICAgICAgICAgICAgdGlmZkNvY29hVHlwZUluUGFzdGVib2FyZCA9IGNvY29hVHlwZTsK
ICAgICB9CiAKLSAgICBib29sIHRpZmZXYXNUcmVhdGVkQXNQTkdGb3JXZWJDb21wYXRpYmlsaXR5
ID0gaW1hZ2VUeXBlID09IEltYWdlVHlwZTo6UE5HICYmIGNvY29hVHlwZVRvUmVhZC5pc051bGwo
KSAmJiAhdGlmZkNvY29hVHlwZUluUGFzdGVib2FyZC5pc051bGwoKTsKLSAgICBpZiAodGlmZldh
c1RyZWF0ZWRBc1BOR0ZvcldlYkNvbXBhdGliaWxpdHkpCi0gICAgICAgIGNvY29hVHlwZVRvUmVh
ZCA9IHRpZmZDb2NvYVR5cGVJblBhc3RlYm9hcmQ7Ci0KLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1
ZmZlckZvclR5cGUoY29jb2FUeXBlVG9SZWFkLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIC8v
IEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0
ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9lc24n
dCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3Np
bmcgdGhlIGRhdGEuCi0gICAgaWYgKCFidWZmZXIgfHwgbV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVi
b2FyZE5hbWUpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGNvY29hVHlwZXMgPSByZWFk
VHlwZXNXaXRoU2VjdXJpdHlDaGVjaygpOworICAgIEhhc2hTZXQ8Y29uc3QgY2hhcio+IGV4aXN0
aW5nTUlNRXM7CisgICAgZm9yIChhdXRvJiBjb2NvYVR5cGUgOiBjb2NvYVR5cGVzKSB7CisgICAg
ICAgIGF1dG8gaW1hZ2VUeXBlID0gY29jb2FUeXBlVG9JbWFnZVR5cGUoY29jb2FUeXBlKTsKKyAg
ICAgICAgY29uc3QgY2hhciogbWltZVR5cGUgPSBpbWFnZVR5cGVUb01JTUVUeXBlKGltYWdlVHlw
ZSk7CisgICAgICAgIGlmICghbWltZVR5cGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKCFleGlzdGluZ01JTUVzLmFkZChtaW1lVHlwZSkuaXNOZXdFbnRyeSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvIGJ1ZmZlciA9IHJlYWRCdWZmZXJGb3JUeXBlV2l0
aFNlY3VyaXR5Q2hlY2soY29jb2FUeXBlKTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKHRp
ZmZXYXNUcmVhdGVkQXNQTkdGb3JXZWJDb21wYXRpYmlsaXR5KSB7Ci0gICAgICAgIGF1dG8gdGlm
ZkRhdGEgPSBidWZmZXItPmNyZWF0ZU5TRGF0YSgpOwotICAgICAgICBhdXRvIGltYWdlID0gYWRv
cHROUyhbW05TQml0bWFwSW1hZ2VSZXAgYWxsb2NdIGluaXRXaXRoRGF0YTogdGlmZkRhdGEuZ2V0
KCldKTsKLSAgICAgICAgTlNEYXRhICpwbmdEYXRhID0gW2ltYWdlIHJlcHJlc2VudGF0aW9uVXNp
bmdUeXBlOk5TUE5HRmlsZVR5cGUgcHJvcGVydGllczpAeyB9XTsKLSAgICAgICAgcmVhZGVyLnJl
YWQoaW1hZ2VUeXBlVG9GYWtlRmlsZW5hbWUoaW1hZ2VUeXBlKSwgU2hhcmVkQnVmZmVyOjpjcmVh
dGUocG5nRGF0YSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICBpZiAoYnVmZmVy
ICYmIGltYWdlVHlwZSA9PSBJbWFnZVR5cGU6OlRJRkYpCisgICAgICAgICAgICBidWZmZXIgPSBj
b252ZXJ0VElGRlRvUE5HKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpKTsKICNlbmRpZgotICAgIHJl
YWRlci5yZWFkKGltYWdlVHlwZVRvRmFrZUZpbGVuYW1lKGltYWdlVHlwZSksIGJ1ZmZlci5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgcmVhZGVyLnJlYWRCdWZmZXIoaW1hZ2VUeXBlVG9GYWtlRmlsZW5hbWUoaW1h
Z2VUeXBlKSwgbWltZVR5cGUsIGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CiB9CiAK
IFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTI0
OCwxNCArMjEwLDE2IEBAIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmkK
IAogU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5n
JiB0eXBlKQogewotICAgIGF1dG8gYnVmZmVyID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JUeXBlKGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRh
VHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgYXV0byBidWZmZXIgPSByZWFkQnVmZmVyRm9y
VHlwZVdpdGhTZWN1cml0eUNoZWNrKGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRhVHlwZSk7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBOU1N0cmluZyAqY3Vz
dG9tRGF0YVZhbHVlID0gY3VzdG9tRGF0YUZyb21TaGFyZWRCdWZmZXIoKmJ1ZmZlcikuc2FtZU9y
aWdpbkN1c3RvbURhdGEuZ2V0KHR5cGUpOwotICAgIGlmICghY3VzdG9tRGF0YVZhbHVlLmxlbmd0
aCkKKyAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdl
IGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKKyAgICAvLyBzdXJl
IGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBh
bmQgYWNjZXNzaW5nIHRoZSBkYXRhLgorICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJv
YXJkTmFtZSkpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGN1c3RvbURhdGFWYWx1
ZTsKKworICAgIHJldHVybiBjdXN0b21EYXRhRnJvbVNoYXJlZEJ1ZmZlcigqYnVmZmVyKS5zYW1l
T3JpZ2luQ3VzdG9tRGF0YS5nZXQodHlwZSk7CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVD
dXN0b21EYXRhKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQpAQCAtMjY4LDUgKzIz
MiwyOSBAQCBsb25nIFBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50KCkgY29uc3QKICAgICByZXR1cm4g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudCht
X3Bhc3RlYm9hcmROYW1lKTsKIH0KIAorVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZFR5
cGVzV2l0aFNlY3VyaXR5Q2hlY2soKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGNvY29hVHlwZXM7
CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBl
cyhjb2NvYVR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKKworICAgIC8vIEVuZm9yY2UgY2hhbmdl
Q291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0
ZWFkIG9mIGJlZm9yZSB0byBiZQorICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2Vl
biBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCisg
ICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIHJldHVybiBjb2NvYVR5cGVzOwogfQogCitSZWZQdHI8U2hhcmVkQnVmZmVy
PiBQYXN0ZWJvYXJkOjpyZWFkQnVmZmVyRm9yVHlwZVdpdGhTZWN1cml0eUNoZWNrKGNvbnN0IFN0
cmluZyYgdHlwZSkKK3sKKyAgICBhdXRvIGJ1ZmZlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5w
YXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVyRm9yVHlwZSh0eXBlLCBtX3Bhc3RlYm9hcmROYW1l
KTsKKworICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4g
V2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQorICAgIC8vIHN1
cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50
IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCisgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3Rl
Ym9hcmROYW1lKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYnVmZmVy
OworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRHdGsuY3BwCShyZXZpc2lvbiAyMjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGFzdGVib2FyZEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw4ICsyNDIsMTEgQEAg
dm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRXZWJDb250ZQogewogfQogCi12b2lkIFBh
c3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImKQordm9pZCBQYXN0ZWJvYXJkOjpy
ZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyJiByZWFkZXIpCiB7CisgICAgcmVhZEZyb21DbGlwYm9h
cmQoKTsKKyAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogbV9zZWxlY3Rpb25EYXRhLT5maWxlbmFt
ZXMoKSkKKyAgICAgICAgcmVhZGVyLnJlYWRGaWxlbmFtZShmaWxlbmFtZSk7CiB9CiAKIGJvb2wg
UGFzdGVib2FyZDo6aGFzRGF0YSgpCkBAIC0yODYsMTEgKzI4OSw2IEBAIFZlY3RvcjxTdHJpbmc+
IFBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWMKICAgICByZXR1cm4gdHlwZXM7CiB9CiAKLVZlY3Rv
cjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKQotewotICAgIHJldHVy
biB7IH07Ci19Ci0KIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYg
dHlwZSkKIHsKICAgICByZWFkRnJvbUNsaXBib2FyZCgpOwpAQCAtMzIxLDEzICszMTksOCBAQCBT
dHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0CiAKIGJvb2wgUGFzdGVib2Fy
ZDo6Y29udGFpbnNGaWxlcygpCiB7Ci0gICAgcmV0dXJuIHJlYWRGaWxlbmFtZXMoKS5zaXplKCk7
Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMoKQotewogICAg
IHJlYWRGcm9tQ2xpcGJvYXJkKCk7Ci0gICAgcmV0dXJuIG1fc2VsZWN0aW9uRGF0YS0+ZmlsZW5h
bWVzKCk7CisgICAgcmV0dXJuICFtX3NlbGVjdGlvbkRhdGEtPmZpbGVuYW1lcygpLmlzRW1wdHko
KTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZU1hcmt1cChjb25zdCBTdHJpbmcmKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkocmV2
aXNpb24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsMTEgKzI4Myw2IEBAIFZlY3RvcjxTdHJpbmc+
IFBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWMKICAgICByZXR1cm4gdmVjdG9yOwogfQogCi1WZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkKLXsKLSAgICByZXR1
cm4geyB9OwotfQotCiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcm
IHR5cGUpCiB7CiAgICAgaWYgKCFtX2RhdGFPYmplY3QgJiYgbV9kcmFnRGF0YU1hcC5pc0VtcHR5
KCkpCkBAIC0zMTQsNDMgKzMwOSw1NCBAQCBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0lu
Q3VzdG9tRGF0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorc3RydWN0IFBhc3RlYm9hcmRGaWxlQ291
bnRlciBmaW5hbCA6IFBhc3RlYm9hcmRGaWxlUmVhZGVyIHsKKyAgICB2b2lkIHJlYWRGaWxlbmFt
ZShjb25zdCBTdHJpbmcmKSBmaW5hbCB7ICsrY291bnQ7IH0KKyAgICB2b2lkIHJlYWRCdWZmZXIo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmPFNoYXJlZEJ1ZmZlcj4mJikgZmluYWwg
eyArK2NvdW50OyB9CisKKyAgICB1bnNpZ25lZCBjb3VudCB7IDAgfTsKK307CisKIGJvb2wgUGFz
dGVib2FyZDo6Y29udGFpbnNGaWxlcygpCiB7Ci0gICAgcmV0dXJuIHJlYWRGaWxlbmFtZXMoKS5z
aXplKCk7IC8vIEZJWE1FOiBNYWtlIHRoaXMgY29kZSBtb3JlIGVmZmljaWVudC4KKyAgICAvLyBG
SVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQg
YnkgYXZvaWRpbmcgY2FsbHMgdG8gRHJhZ1F1ZXJ5RmlsZVcuCisgICAgUGFzdGVib2FyZEZpbGVD
b3VudGVyIHJlYWRlcjsKKyAgICByZWFkKHJlYWRlcik7CisgICAgcmV0dXJuIHJlYWRlci5jb3Vu
dDsKIH0KIAotVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCit2b2lk
IFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlcikKIHsKLSAgICBW
ZWN0b3I8U3RyaW5nPiBmaWxlTmFtZXM7Ci0KICNpZiBVU0UoQ0YpCiAgICAgaWYgKG1fZGF0YU9i
amVjdCkgewogICAgICAgICBTVEdNRURJVU0gbWVkaXVtOwogICAgICAgICBpZiAoRkFJTEVEKG1f
ZGF0YU9iamVjdC0+R2V0RGF0YShjZkhEcm9wRm9ybWF0KCksICZtZWRpdW0pKSkKLSAgICAgICAg
ICAgIHJldHVybiBmaWxlTmFtZXM7CisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgSERS
T1AgaGRyb3AgPSByZWludGVycHJldF9jYXN0PEhEUk9QPihHbG9iYWxMb2NrKG1lZGl1bS5oR2xv
YmFsKSk7CiAgICAgICAgIGlmICghaGRyb3ApCi0gICAgICAgICAgICByZXR1cm4gZmlsZU5hbWVz
OworICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFdDSEFSIGZpbGVuYW1lW01BWF9QQVRI
XTsKICAgICAgICAgVUlOVCBmaWxlQ291bnQgPSBEcmFnUXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZG
RkZGRiwgMCwgMCk7CiAgICAgICAgIGZvciAoVUlOVCBpID0gMDsgaSA8IGZpbGVDb3VudDsgaSsr
KSB7CiAgICAgICAgICAgICBpZiAoIURyYWdRdWVyeUZpbGVXKGhkcm9wLCBpLCBmaWxlbmFtZSwg
V1RGX0FSUkFZX0xFTkdUSChmaWxlbmFtZSkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgZmlsZU5hbWVzLmFwcGVuZChmaWxlbmFtZSk7CisgICAgICAgICAgICByZWFk
ZXIucmVhZEZpbGVuYW1lKGZpbGVuYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIEdsb2JhbFVu
bG9jayhtZWRpdW0uaEdsb2JhbCk7CiAgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0oJm1lZGl1bSk7
Ci0gICAgICAgIHJldHVybiBmaWxlTmFtZXM7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKCFtX2RyYWdEYXRhTWFwLmNvbnRhaW5zKGNmSERyb3BGb3JtYXQoKS0+Y2ZGb3JtYXQpKQot
ICAgICAgICByZXR1cm4gZmlsZU5hbWVzOwotICAgIHJldHVybiBtX2RyYWdEYXRhTWFwLmdldChj
ZkhEcm9wRm9ybWF0KCktPmNmRm9ybWF0KTsKKyAgICBhdXRvIGxpc3QgPSBtX2RyYWdEYXRhTWFw
LmZpbmQoY2ZIRHJvcEZvcm1hdCgpLT5jZkZvcm1hdCk7CisgICAgaWYgKGxpc3QgPT0gbV9kcmFn
RGF0YU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBmaWxlbmFt
ZSA6ICpsaXN0KQorICAgICAgICByZWFkZXIucmVhZEZpbGVuYW1lKGZpbGVuYW1lKTsKICNlbHNl
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmlsZU5hbWVzOworICAgIHJldHVy
biB7IH07CiAjZW5kaWYKIH0KIApAQCAtMTA3MiwxMCArMTA3OCw2IEBAIHZvaWQgUGFzdGVib2Fy
ZDo6cmVhZChQYXN0ZWJvYXJkV2ViQ29udGUKIHsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjpyZWFk
KFBhc3RlYm9hcmRGaWxlUmVhZGVyJikKLXsKLX0KLQogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShj
b25zdCBQYXN0ZWJvYXJkSW1hZ2UmKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BFLmNwcAkocmV2aXNpb24gMjIyNjg4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MiwxMSArNjIsNiBAQCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2Fj
CiAgICAgcmV0dXJuIHR5cGVzOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBl
c1RyZWF0ZWRBc0ZpbGVzKCkKLXsKLSAgICByZXR1cm4geyB9OwotfQotCiBTdHJpbmcgUGFzdGVi
b2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgcmV0dXJuIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZFN0cmluZ0Zyb21QYXN0
ZWJvYXJkKDAsIHR5cGUpOwpAQCAtMTMwLDEyICsxMjUsNiBAQCBib29sIFBhc3RlYm9hcmQ6OmNv
bnRhaW5zRmlsZXMoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmVjdG9yPFN0cmluZz4gUGFz
dGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKLX0KLQogYm9vbCBQYXN0ZWJvYXJkOjpjYW5TbWFydFJl
cGxhY2UoKQogewogICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322344</attachid>
            <date>2017-10-01 19:40:06 -0700</date>
            <delta_ts>2017-10-02 00:03:48 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-177728-20171001194004.patch</filename>
            <type>text/plain</type>
            <size>26085</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjY5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE3LTEwLTAxICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1lcmdlIHJlYWRGaWxlbmFtZXMo
KSBhbmQgcmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzcyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzQ3NjE3MjU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICBH
ZW5lcmFsaXplZCBQYXN0ZWJvYXJkRmlsZVJlYWRlciB0byByZXR1cm4gbXVsdGlwbGUgZmlsZXMg
aW5zdGVhZCBvZiBqdXN0IG9uZSBmaWxlLCBhbmQgcmVwbGFjZWQgdGhlIHVzZQorICAgICAgICBv
ZiBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkgd2l0aCBpdC4gQmVjYXVzZSBlbGltaW5hdGVz
IHRoZSBuZWVkIGZvciBmaW5kaW5nIHRoZSBsaXN0IG9mIHR5cGVzIHRvIHJlYWQKKyAgICAgICAg
YXMgZmlsZXMgaW4gYWRkaXRpb24gdG8gZmlsZSBuYW1lcywgdGhpcyBwYXRjaCBhbHNvIHJlbW92
ZXMgUGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcygpLgorCisgICAgICAgIE5vdGUgdGhh
dCBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkgY29udGludWVzIHRvIGV4aXN0IGluIG1hY09T
IGFuZCBpT1MgYXMgaXQncyBpbnRlcm5hbGx5IHVzZWQgYnkKKyAgICAgICAgUGFzdGVib2FyZDo6
cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikgaW4gUGFzdGVib2FyZENvY29hLm1tLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3JhbCBjaGFu
Z2UuCisKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFUcmFuc2Zlcjo6ZmlsZXMgY29uc3QpOiBOb3cgbWFrZXMgYSBzaW5nbGUgY2FsbCB0byBQ
YXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyKQorICAgICAgICBpbnN0ZWFkIG9m
IHJlYWRpbmcgZmlsZW5hbWVzIGFuZCB0aGVuIGZhbGxpbmcgYmFjayB0byBpdC4gQWxzbyBnb3Qg
cmlkIG9mIGlmLWRlZiBmb3IgZHJhZyBkcm9wIGNoZWNrcworICAgICAgICBzaW5jZSBmb3JEcmFn
KCkgYW5kIGZvckZpbGVEcmFnKCkgYXJlIGFsd2F5cyBkZWZpbmVkIHNpbmNlIHIyMjI2ODguCisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRmlsZVR5cGVSZWFkZXIpOiBBZGRlZC4gR2V0cyB0
aGUgbGlzdCBvZiBhbGwgZmlsZSB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRG
aWxlVHlwZVJlYWRlcjo6cmVhZEZpbGVuYW1lKTogQWRkZWQuIEdldHMgdGhlIGxpc3Qgb2YgYWxs
IGZpbGUgdHlwZXMuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRmlsZVR5cGVSZWFkZXI6
OnJlYWRCdWZmZXIpOiBBZGRlZC4gR2V0cyB0aGUgbGlzdCBvZiBhbGwgZmlsZSB0eXBlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlcjo6aGFzRmlsZU9mVHlwZSk6IFJlaW1wbGVtZW50
ZWQgdXNpbmcgUGFzdGVib2FyZEZpbGVUeXBlUmVhZGVyLgorICAgICAgICAqIGVkaXRpbmcvV2Vi
Q29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVQ
YXN0ZWJvYXJkRmlsZVJlYWRlcjo6cmVhZEZpbGVuYW1lKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXI6OnJlYWRCdWZmZXIpOiBSZW5hbWVkIGZy
b20gcmVhZC4KKyAgICAgICAgKiBlZGl0aW5nL1dlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmRGaWxlUmVhZGVyKTogUmVtb3ZlZCB0aGUgY29uc3RydWN0b3Igc2luY2Ugd2Ugbm8g
bG9uZ2VyIHNwZWNpZnkgYSBzcGVjaWZpYyB0eXBlIHRvCisgICAgICAgIHJlYWQgb2ZmIG9mIHBh
c3RlYm9hcmQsIGFuZCByZW5hbWVkIHRoZSBleGlzdGluZyByZWFkIGZ1bmN0aW9uIHRvIHJlYWRC
dWZmZXIsIGFuZCBhZGRlZCBhIG5ldyB2YXJpYW50CisgICAgICAgIHdoaWNoIHRha2VzIGEgZmls
ZW5hbWUuCisgICAgICAgICogcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6Omlt
YWdlVHlwZVRvRmFrZUZpbGVuYW1lKTogUmV0dXJuICJpbWFnZS9wbmciIGZvciBJbWFnZVR5cGU6
OlRJRkYgKHRvIGRvIFRJRkYtdG8tUE5HIGNvbnZlcnNpb247CisgICAgICAgIHNlZSByMjIyNjU2
IGZvciB3aHkgdGhpcyBpcyBuZWVkZWQpIG5vdyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0
byBjb252ZXJ0IGRpcmVjdGx5IGZyb20gaW1hZ2UgdHlwZQorICAgICAgICBjb252ZXJ0ZWQgZnJv
bSBjb2NvYSB0eXBlIGluc3RlYWQgb2YgdGhlIG9uZSByZXZlcnNlLWNvbnZlcnRlZCBmcm9tIE1J
TUUgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6Om1pbWVUeXBlVG9JbWFnZVR5cGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2Fm
ZUJpbmRpbmdzKTogVXNlIG5ld2x5IGFkZGVkIHJlYWRUeXBlc1dpdGhTZWN1cml0eUNoZWNrLgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRJRkZUb1BORyk6IEV4dHJhY3RlZCBvdXQgb2YgcmVh
ZChQYXN0ZWJvYXJkRmlsZVJlYWRlcikuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpy
ZWFkKTogR2VuZXJhbGl6ZWQgdG8gYWRkIGZpbGVuYW1lcyBhcyB3ZWxsIGFzIGltYWdlIGJ1ZmZl
cnMgYXMgZmlsZXMuIEJlY2F1c2Ugbm93CisgICAgICAgIHdlJ3JlIGNvbmNlcnRpbmcgQ29jb2Eg
dHlwZXMgdG8gSW1hZ2VUeXBlLCB3ZSBubyBsb25nZXIgaGF2ZSB0byBkZXRlY3Qgd2hlbiBUSUZG
LWFzLVBORyBjb252ZXJzaW9uIGlzCisgICAgICAgIGhhcHBlbmluZyBoZXJlLiBXZSBqdXN0IHRy
ZWF0IEltYWdlVHlwZTo6VElGRiBhcyBQTkcgYW5kIGRvIHRoZSBjb252ZXJzaW9uLgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YSk6IFVzZSBuZXds
eSBhZGRlZCByZWFkQnVmZmVyRm9yVHlwZVdpdGhTZWN1cml0eUNoZWNrLgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZDo6cmVhZFR5cGVzV2l0aFNlY3VyaXR5Q2hlY2spOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRCdWZmZXJGb3JUeXBlV2l0aFNlY3VyaXR5
Q2hlY2spOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkKTogSW1wbGVtZW50ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNvbnRhaW5zRmlsZXMpOiBJbXBsZW1lbnRl
ZCB3aXRob3V0IGNhbGxpbmcgcmVhZEZpbGVuYW1lcywgd2hpY2ggaGFzIGJlZW4gZGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZEZpbGVDb3VudGVyKTogQWRkZWQuIFVzZWQgdG8gY291bnRzIHRo
ZSBudW1iZXIgb2YgZmlsZXMgaW4gdGhlIHBhc3RlYm9hcmQuCisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkRmlsZUNvdW50ZXI6OnJlYWRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkRmlsZUNvdW50ZXI6OnJlYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6Y29udGFpbnNGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpy
ZWFkKTogTW92ZWQgdGhlIGNvZGUgdG8gZXh0cmFjdCBmaWxlbmFtZXMgb3V0IG9mIHJlYWRGaWxl
bmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQRS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMpOiBEZWxldGVkLgorCiAy
MDE3LTEwLTAxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIHN1
cHBvcnQgZm9yIERPTSBhYm9ydGluZyAoaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNhYm9y
dGluZy1vbmdvaW5nLWFjdGl2aXRpZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRy
YW5zZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVy
LmNwcAkocmV2aXNpb24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw0NyArMTgyLDUwIEBAIFZlY3RvcjxTdHJpbmc+
IERhdGFUcmFuc2Zlcjo6dHlwZXMoKSBjb24KIAogRmlsZUxpc3QmIERhdGFUcmFuc2Zlcjo6Zmls
ZXMoKSBjb25zdAogewotICAgIGJvb2wgbmV3bHlDcmVhdGVkRmlsZUxpc3QgPSAhbV9maWxlTGlz
dDsKLSAgICBpZiAoIW1fZmlsZUxpc3QpCi0gICAgICAgIG1fZmlsZUxpc3QgPSBGaWxlTGlzdDo6
Y3JlYXRlKCk7Ci0KICAgICBpZiAoIWNhblJlYWREYXRhKCkpIHsKLSAgICAgICAgbV9maWxlTGlz
dC0+Y2xlYXIoKTsKKyAgICAgICAgaWYgKG1fZmlsZUxpc3QpCisgICAgICAgICAgICBtX2ZpbGVM
aXN0LT5jbGVhcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2ZpbGVMaXN0ID0gRmls
ZUxpc3Q6OmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gKm1fZmlsZUxpc3Q7CiAgICAgfQogCi0j
aWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKICAgICBpZiAoZm9yRHJhZygpICYmICFmb3JGaWxlRHJh
ZygpKSB7Ci0gICAgICAgIEFTU0VSVChtX2ZpbGVMaXN0LT5pc0VtcHR5KCkpOworICAgICAgICBp
ZiAobV9maWxlTGlzdCkKKyAgICAgICAgICAgIEFTU0VSVChtX2ZpbGVMaXN0LT5pc0VtcHR5KCkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2ZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0
ZSgpOwogICAgICAgICByZXR1cm4gKm1fZmlsZUxpc3Q7CiAgICAgfQotI2VuZGlmCiAKLSAgICBp
ZiAobmV3bHlDcmVhdGVkRmlsZUxpc3QpIHsKLSAgICAgICAgZm9yIChhdXRvJiBmaWxlbmFtZSA6
IG1fcGFzdGVib2FyZC0+cmVhZEZpbGVuYW1lcygpKQotICAgICAgICAgICAgbV9maWxlTGlzdC0+
YXBwZW5kKEZpbGU6OmNyZWF0ZShmaWxlbmFtZSkpOwotICAgICAgICBpZiAobV9maWxlTGlzdC0+
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBtX3Bhc3RlYm9hcmQt
PnR5cGVzVHJlYXRlZEFzRmlsZXMoKSkgewotICAgICAgICAgICAgICAgIFdlYkNvcmVQYXN0ZWJv
YXJkRmlsZVJlYWRlciByZWFkZXIodHlwZSk7Ci0gICAgICAgICAgICAgICAgbV9wYXN0ZWJvYXJk
LT5yZWFkKHJlYWRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRlci5maWxlKQotICAgICAg
ICAgICAgICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQocmVhZGVyLmZpbGUucmVsZWFzZU5vbk51
bGwoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAoIW1fZmlsZUxpc3QpIHsK
KyAgICAgICAgV2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyIHJlYWRlcjsKKyAgICAgICAgbV9w
YXN0ZWJvYXJkLT5yZWFkKHJlYWRlcik7CisgICAgICAgIG1fZmlsZUxpc3QgPSBGaWxlTGlzdDo6
Y3JlYXRlKFdURk1vdmUocmVhZGVyLmZpbGVzKSk7CiAgICAgfQogICAgIHJldHVybiAqbV9maWxl
TGlzdDsKIH0KIAotYm9vbCBEYXRhVHJhbnNmZXI6Omhhc0ZpbGVPZlR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlKQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNhblJlYWRU
eXBlcygpKTsKK3N0cnVjdCBQYXN0ZWJvYXJkRmlsZVR5cGVSZWFkZXIgZmluYWwgOiBQYXN0ZWJv
YXJkRmlsZVJlYWRlciB7CisgICAgdm9pZCByZWFkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSkKKyAgICB7CisgICAgICAgIHR5cGVzLmFkZChGaWxlOjpjb250ZW50VHlwZUZvckZpbGUo
ZmlsZW5hbWUpKTsKKyAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHBhdGggOiBtX3Bhc3RlYm9hcmQt
PnJlYWRGaWxlbmFtZXMoKSkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShG
aWxlOjpjb250ZW50VHlwZUZvckZpbGUocGF0aCksIHR5cGUpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgdm9pZCByZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJikKKyAgICB7CisgICAgICAgIHR5cGVzLmFkZCh0eXBl
KTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4gdHlwZXM7Cit9OworCitib29sIERhdGFUcmFuc2Zlcjo6aGFz
RmlsZU9mVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oY2FuUmVhZFR5cGVzKCkpOworICAgIFBhc3RlYm9hcmRGaWxlVHlwZVJl
YWRlciByZWFkZXI7CisgICAgbV9wYXN0ZWJvYXJkLT5yZWFkKHJlYWRlcik7CisgICAgcmV0dXJu
IHJlYWRlci50eXBlcy5jb250YWlucyh0eXBlKTsKIH0KIAogYm9vbCBEYXRhVHJhbnNmZXI6Omhh
c1N0cmluZ09mVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1dlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuY3BwCShyZXZp
c2lvbiAyMjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvcmVQYXN0ZWJvYXJk
RmlsZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFdlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlcjo6fldlYkNvcmVQYXN0
ZWJvYXJkRmlsZVJlYWRlcigpID0gZGVmYXVsdDsKIAotdm9pZCBXZWJDb3JlUGFzdGVib2FyZEZp
bGVSZWFkZXI6OnJlYWQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgUmVmPFNoYXJlZEJ1ZmZlcj4m
JiBidWZmZXIpCit2b2lkIFdlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlcjo6cmVhZEZpbGVuYW1l
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit7CisgICAgZmlsZXMuYXBwZW5kKEZpbGU6OmNyZWF0
ZShmaWxlbmFtZSkpOworfQorCit2b2lkIFdlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlcjo6cmVh
ZEJ1ZmZlcihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIHR5cGUsIFJlZjxT
aGFyZWRCdWZmZXI+JiYgYnVmZmVyKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAg
IGRhdGEuYXBwZW5kKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7Ci0gICAgZmlsZSA9
IEZpbGU6OmNyZWF0ZShCbG9iOjpjcmVhdGUoV1RGTW92ZShkYXRhKSwgdHlwZSksIGZpbGVuYW1l
KTsKKyAgICBmaWxlcy5hcHBlbmQoRmlsZTo6Y3JlYXRlKEJsb2I6OmNyZWF0ZShXVEZNb3ZlKGRh
dGEpLCB0eXBlKSwgZmlsZW5hbWUpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9XZWJDb3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1dlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlci5oCShyZXZpc2lvbiAy
MjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvcmVQYXN0ZWJvYXJkRmlsZVJl
YWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgRmlsZTsKIAogc3RydWN0IFdlYkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlciBm
aW5hbCA6IFBhc3RlYm9hcmRGaWxlUmVhZGVyIHsKLSAgICBXZWJDb3JlUGFzdGVib2FyZEZpbGVS
ZWFkZXIoY29uc3QgU3RyaW5nJiB0eXBlKQotICAgICAgICA6IFBhc3RlYm9hcmRGaWxlUmVhZGVy
KHR5cGUpCi0gICAgeyB9Ci0KICAgICB+V2ViQ29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyKCk7CiAK
LSAgICB2b2lkIHJlYWQoY29uc3QgU3RyaW5nJiwgUmVmPFNoYXJlZEJ1ZmZlcj4mJikgZmluYWw7
CisgICAgdm9pZCByZWFkRmlsZW5hbWUoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgdm9pZCBy
ZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgdHlwZSwgUmVm
PFNoYXJlZEJ1ZmZlcj4mJikgZmluYWw7CiAKLSAgICBSZWZQdHI8RmlsZT4gZmlsZTsKKyAgICBW
ZWN0b3I8UmVmPEZpbGU+PiBmaWxlczsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Bhc3RlYm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkLmgJKHJldmlzaW9uIDIyMjY4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Bhc3RlYm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBjbGFzcyBE
b2N1bWVudEZyYWdtZW50OwogY2xhc3MgRHJhZ0RhdGE7CiBjbGFzcyBFbGVtZW50OwogY2xhc3Mg
RnJhbWU7CitjbGFzcyBQYXN0ZWJvYXJkU3RyYXRlZ3k7CiBjbGFzcyBSYW5nZTsKIGNsYXNzIFNl
bGVjdGlvbkRhdGE7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CkBAIC0xNDgsMTQgKzE0OSw5IEBAIHN0
cnVjdCBQYXN0ZWJvYXJkUGxhaW5UZXh0IHsKIH07CiAKIHN0cnVjdCBQYXN0ZWJvYXJkRmlsZVJl
YWRlciB7Ci0gICAgUGFzdGVib2FyZEZpbGVSZWFkZXIoY29uc3QgU3RyaW5nJiB0eXBlKQotICAg
ICAgICA6IHR5cGUodHlwZSkKLSAgICB7IH0KICAgICB2aXJ0dWFsIH5QYXN0ZWJvYXJkRmlsZVJl
YWRlcigpID0gZGVmYXVsdDsKLQotICAgIHZpcnR1YWwgdm9pZCByZWFkKGNvbnN0IFN0cmluZyYs
IFJlZjxTaGFyZWRCdWZmZXI+JiYpID0gMDsKLQotICAgIGNvbnN0IFN0cmluZyB0eXBlOworICAg
IHZpcnR1YWwgdm9pZCByZWFkRmlsZW5hbWUoY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZWFkQnVmZmVyKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYg
dHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4mJikgPSAwOwogfTsKIAogLy8gRklYTUU6IFdlIG5lZWQg
dG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHNhbWVPcmlnaW5DdXN0b21EYXRhIGFyZSBu
b3QgYWNjZXNzaWJsZSBhY3Jvc3MgZGlmZmVyZW50IG9yaWdpbnMuCkBAIC0xOTgsNyArMTk0LDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7CiAgICAgdmlydHVhbCBWZWN0
b3I8U3RyaW5nPiB0eXBlc1NhZmVGb3JCaW5kaW5ncygpOwogICAgIHZpcnR1YWwgVmVjdG9yPFN0
cmluZz4gdHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpOwotICAgIHZpcnR1YWwgVmVjdG9y
PFN0cmluZz4gdHlwZXNUcmVhdGVkQXNGaWxlcygpOwogICAgIHZpcnR1YWwgU3RyaW5nIHJlYWRT
dHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICB2aXJ0dWFsIFN0cmluZyByZWFkU3RyaW5n
SW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAKQEAgLTIxNiw3ICsyMTEsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50
Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNGaWxlcygpOwotICAgIHZpcnR1YWwgVmVj
dG9yPFN0cmluZz4gcmVhZEZpbGVuYW1lcygpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5TbWFydFJl
cGxhY2UoKTsKIAogICAgIHZpcnR1YWwgdm9pZCB3cml0ZU1hcmt1cChjb25zdCBTdHJpbmcmIG1h
cmt1cCk7CkBAIC0yODIsOSArMjc2LDEyIEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIFZlY3RvcjxTdHJpbmc+IHJlYWRGaWxlbmFtZXMoKTsKICAgICBTdHJp
bmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcg
Y2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwogICAgIHN0YXRpYyB2
b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+
JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpOwogICAgIFN0cmluZyByZWFkU3RyaW5nRm9yUGxhdGZvcm1UeXBlKGNvbnN0
IFN0cmluZyYpOworICAgIFZlY3RvcjxTdHJpbmc+IHJlYWRUeXBlc1dpdGhTZWN1cml0eUNoZWNr
KCk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVhZEJ1ZmZlckZvclR5cGVXaXRoU2VjdXJp
dHlDaGVjayhjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaAkocmV2aXNpb24g
MjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0RhdGEo
KSBmaW5hbDsKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc1NhZmVGb3JCaW5kaW5ncygpIGZpbmFs
IHsgcmV0dXJuIG1fdHlwZXM7IH0KICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc0ZvckxlZ2FjeVVu
c2FmZUJpbmRpbmdzKCkgZmluYWwgeyByZXR1cm4gbV90eXBlczsgfQotICAgIFZlY3RvcjxTdHJp
bmc+IHR5cGVzVHJlYXRlZEFzRmlsZXMoKSBmaW5hbCB7IHJldHVybiB7IH07IH0KICAgICBTdHJp
bmcgcmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpIGZpbmFsOwogICAgIFN0cmluZyByZWFk
U3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgZmluYWw7CiAKQEAgLTU5LDcg
KzU4LDYgQEAgcHVibGljOgogICAgIHZvaWQgd3JpdGUoY29uc3QgUGFzdGVib2FyZFdlYkNvbnRl
bnQmKSBmaW5hbCB7IH0KIAogICAgIGJvb2wgY29udGFpbnNGaWxlcygpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgVmVjdG9yPFN0cmluZz4gcmVhZEZpbGVuYW1lcygpIGZpbmFsIHsgcmV0
dXJuIHsgfTsgfQogICAgIGJvb2wgY2FuU21hcnRSZXBsYWNlKCkgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIHZvaWQgd3JpdGVNYXJrdXAoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29h
Lm1tCShyZXZpc2lvbiAyMjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Q
YXN0ZWJvYXJkQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDggQEAgc3RhdGlj
IEltYWdlVHlwZSBjb2NvYVR5cGVUb0ltYWdlVHlwZShjbwogICAgIHJldHVybiBJbWFnZVR5cGU6
OkludmFsaWQ7CiB9CiAKKy8vIFN0cmluZyBsaXRlcmFscyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0
aW9uIG11c3QgYmUgZGVmaW5lZCBleGFjdGx5IG9uY2UKKy8vIHNpbmNlIHJlYWQoUGFzdGVib2Fy
ZEZpbGVSZWFkZXImKSB1c2VzIEhhc2hNYXA8Y29uc3QgY2hhcio+IHRvIGNoZWNrIHVuaXF1ZW5l
c3MuCiBzdGF0aWMgY29uc3QgY2hhciogaW1hZ2VUeXBlVG9NSU1FVHlwZShJbWFnZVR5cGUgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTgxLDcgKzgzLDcgQEAgc3RhdGljIGNvbnN0
IGNoYXIqIGltYWdlVHlwZVRvTUlNRVR5cGUoSQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAg
cmV0dXJuICJpbWFnZS9wbmciOyAvLyBGb3IgV2ViIGNvbXBhdGliaWxpdHksIHdlIHByZXRlbmQg
dG8gaGF2ZSBQTkcgaW5zdGVhZC4KICNlbHNlCi0gICAgICAgIHJldHVybiBudWxscHRyOyAvLyBE
b24ndCBzdXBwb3J0IFRJRkYgb24gaU9TIGZvciBub3cuCisgICAgICAgIHJldHVybiBudWxscHRy
OyAvLyBEb24ndCBzdXBwb3J0IHBhc3RpbmcgVElGRiBvbiBpT1MgZm9yIG5vdy4KICNlbmRpZgog
ICAgIGNhc2UgSW1hZ2VUeXBlOjpQTkc6CiAgICAgICAgIHJldHVybiAiaW1hZ2UvcG5nIjsKQEAg
LTk5LDggKzEwMSwxMiBAQCBzdGF0aWMgY29uc3QgY2hhciogaW1hZ2VUeXBlVG9GYWtlRmlsZW5h
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBjYXNlIEltYWdlVHlwZTo6VElGRjoKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHJl
dHVybiAiaW1hZ2UvcG5nIjsgLy8gRm9yIFdlYiBjb21wYXRpYmlsaXR5LCB3ZSBwcmV0ZW5kIHRv
IGhhdmUgUE5HIGluc3RlYWQuCisjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKICAgICBjYXNlIEltYWdlVHlwZTo6UE5H
OgogICAgICAgICByZXR1cm4gImltYWdlLnBuZyI7CiAgICAgY2FzZSBJbWFnZVR5cGU6OkpQRUc6
CkBAIC0xMTAsNDcgKzExNiwxMSBAQCBzdGF0aWMgY29uc3QgY2hhciogaW1hZ2VUeXBlVG9GYWtl
RmlsZW5hCiAgICAgfQogfQogCi1zdGF0aWMgSW1hZ2VUeXBlIG1pbWVUeXBlVG9JbWFnZVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKG1p
bWVUeXBlID09ICJpbWFnZS90aWZmIikKLSAgICAgICAgcmV0dXJuIEltYWdlVHlwZTo6VElGRjsK
LSNlbmRpZgotICAgIGlmIChtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIikKLSAgICAgICAgcmV0dXJu
IEltYWdlVHlwZTo6UE5HOwotICAgIGlmIChtaW1lVHlwZSA9PSAiaW1hZ2UvanBlZyIpCi0gICAg
ICAgIHJldHVybiBJbWFnZVR5cGU6OkpQRUc7Ci0gICAgaWYgKG1pbWVUeXBlID09ICJpbWFnZS9n
aWYiKQotICAgICAgICByZXR1cm4gSW1hZ2VUeXBlOjpHSUY7Ci0gICAgcmV0dXJuIEltYWdlVHlw
ZTo6SW52YWxpZDsKLX0KLQogYm9vbCBQYXN0ZWJvYXJkOjpzaG91bGRUcmVhdENvY29hVHlwZUFz
RmlsZShjb25zdCBTdHJpbmcmIGNvY29hVHlwZSkKIHsKICAgICByZXR1cm4gY29jb2FUeXBlVG9J
bWFnZVR5cGUoY29jb2FUeXBlKSAhPSBJbWFnZVR5cGU6OkludmFsaWQ7CiB9CiAKLVZlY3RvcjxT
dHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKQotewotICAgIFZlY3RvcjxT
dHJpbmc+IGNvY29hVHlwZXM7Ci0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5nZXRUeXBlcyhjb2NvYVR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAg
IC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sg
YWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9l
c24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nl
c3NpbmcgdGhlIGRhdGEuCi0gICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1l
KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0
OwotICAgIGZvciAoYXV0byYgY29jb2FUeXBlIDogY29jb2FUeXBlcykgewotICAgICAgICBpZiAo
YXV0byogbWltZVR5cGUgPSBpbWFnZVR5cGVUb01JTUVUeXBlKGNvY29hVHlwZVRvSW1hZ2VUeXBl
KGNvY29hVHlwZSkpKQotICAgICAgICAgICAgcmVzdWx0LmFkZChtaW1lVHlwZSk7Ci0gICAgfQot
Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgY29weVRvVmVjdG9yKHJlc3VsdCwgdHlw
ZXMpOwotICAgIHJldHVybiB0eXBlczsKLX0KLQogYm9vbCBQYXN0ZWJvYXJkOjpjb250YWluc0Zp
bGVzKCkKIHsKICAgICBpZiAoIXBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+Z2V0TnVtYmVyT2ZGaWxlcyhtX3Bhc3RlYm9hcmROYW1lKSkgewpAQCAtMTgyLDYzICsx
NTIsNTUgQEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQgogCiBWZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkKIHsK
LSAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQot
ICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hl
Y2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQg
ZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBh
Y2Nlc3NpbmcgdGhlIGRhdGEuCi0gICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmRO
YW1lKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIGNvY29hVHlwZXMgPSByZWFkVHlw
ZXNXaXRoU2VjdXJpdHlDaGVjaygpOworICAgIGlmIChjb2NvYVR5cGVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGNvY29hVHlwZXM7CiAKICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3Vs
dDsKLSAgICBmb3IgKGF1dG8mIGNvY29hVHlwZSA6IHR5cGVzKQorICAgIGZvciAoYXV0byYgY29j
b2FUeXBlIDogY29jb2FUeXBlcykKICAgICAgICAgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29j
b2FUeXBlKHJlc3VsdCwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKIAorICAgIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzOwogICAgIGNvcHlUb1ZlY3RvcihyZXN1bHQsIHR5cGVzKTsKICAgICBy
ZXR1cm4gdHlwZXM7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCitzdGF0aWMgUmVmPFNoYXJlZEJ1
ZmZlcj4gY29udmVydFRJRkZUb1BORyhTaGFyZWRCdWZmZXImIHRpZmZCdWZmZXIpCit7CisgICAg
YXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aERh
dGE6IHRpZmZCdWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCldKTsKKyAgICBOU0RhdGEgKnBuZ0Rh
dGEgPSBbaW1hZ2UgcmVwcmVzZW50YXRpb25Vc2luZ1R5cGU6TlNQTkdGaWxlVHlwZSBwcm9wZXJ0
aWVzOkB7IH1dOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShwbmdEYXRhKTsKK30K
KyNlbmRpZgorCiB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJl
YWRlcikKIHsKLSAgICBhdXRvIGltYWdlVHlwZSA9IG1pbWVUeXBlVG9JbWFnZVR5cGUocmVhZGVy
LnR5cGUpOwotICAgIGlmIChpbWFnZVR5cGUgPT0gSW1hZ2VUeXBlOjpJbnZhbGlkKQorICAgIGF1
dG8gZmlsZW5hbWVzID0gcmVhZEZpbGVuYW1lcygpOworICAgIGlmICghZmlsZW5hbWVzLmlzRW1w
dHkoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogZmlsZW5hbWVzKQorICAgICAg
ICAgICAgcmVhZGVyLnJlYWRGaWxlbmFtZShmaWxlbmFtZSk7CiAgICAgICAgIHJldHVybjsKLQot
ICAgIFN0cmluZyBjb2NvYVR5cGVUb1JlYWQ7Ci0gICAgU3RyaW5nIHRpZmZDb2NvYVR5cGVJblBh
c3RlYm9hcmQ7Ci0gICAgVmVjdG9yPFN0cmluZz4gY29jb2FUeXBlczsKLSAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKGNvY29hVHlwZXMsIG1f
cGFzdGVib2FyZE5hbWUpOwotICAgIGZvciAoYXV0byYgY29jb2FUeXBlIDogY29jb2FUeXBlcykg
ewotICAgICAgICBhdXRvIGltYWdlVHlwZUluUGFzdGVib2FyZCA9IGNvY29hVHlwZVRvSW1hZ2VU
eXBlKGNvY29hVHlwZSk7Ci0gICAgICAgIGlmIChpbWFnZVR5cGVJblBhc3RlYm9hcmQgPT0gaW1h
Z2VUeXBlKSB7Ci0gICAgICAgICAgICBjb2NvYVR5cGVUb1JlYWQgPSBjb2NvYVR5cGU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAodGlmZkNvY29hVHlwZUluUGFz
dGVib2FyZC5pc051bGwoKSAmJiBpbWFnZVR5cGVJblBhc3RlYm9hcmQgPT0gSW1hZ2VUeXBlOjpU
SUZGKQotICAgICAgICAgICAgdGlmZkNvY29hVHlwZUluUGFzdGVib2FyZCA9IGNvY29hVHlwZTsK
ICAgICB9CiAKLSAgICBib29sIHRpZmZXYXNUcmVhdGVkQXNQTkdGb3JXZWJDb21wYXRpYmlsaXR5
ID0gaW1hZ2VUeXBlID09IEltYWdlVHlwZTo6UE5HICYmIGNvY29hVHlwZVRvUmVhZC5pc051bGwo
KSAmJiAhdGlmZkNvY29hVHlwZUluUGFzdGVib2FyZC5pc051bGwoKTsKLSAgICBpZiAodGlmZldh
c1RyZWF0ZWRBc1BOR0ZvcldlYkNvbXBhdGliaWxpdHkpCi0gICAgICAgIGNvY29hVHlwZVRvUmVh
ZCA9IHRpZmZDb2NvYVR5cGVJblBhc3RlYm9hcmQ7Ci0KLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1
ZmZlckZvclR5cGUoY29jb2FUeXBlVG9SZWFkLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIC8v
IEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0
ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9lc24n
dCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3Np
bmcgdGhlIGRhdGEuCi0gICAgaWYgKCFidWZmZXIgfHwgbV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVi
b2FyZE5hbWUpKQotICAgICAgICByZXR1cm47Ci0KKyAgICBhdXRvIGNvY29hVHlwZXMgPSByZWFk
VHlwZXNXaXRoU2VjdXJpdHlDaGVjaygpOworICAgIEhhc2hTZXQ8Y29uc3QgY2hhcio+IGV4aXN0
aW5nTUlNRXM7CisgICAgZm9yIChhdXRvJiBjb2NvYVR5cGUgOiBjb2NvYVR5cGVzKSB7CisgICAg
ICAgIGF1dG8gaW1hZ2VUeXBlID0gY29jb2FUeXBlVG9JbWFnZVR5cGUoY29jb2FUeXBlKTsKKyAg
ICAgICAgY29uc3QgY2hhciogbWltZVR5cGUgPSBpbWFnZVR5cGVUb01JTUVUeXBlKGltYWdlVHlw
ZSk7CisgICAgICAgIGlmICghbWltZVR5cGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKCFleGlzdGluZ01JTUVzLmFkZChtaW1lVHlwZSkuaXNOZXdFbnRyeSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvIGJ1ZmZlciA9IHJlYWRCdWZmZXJGb3JUeXBlV2l0
aFNlY3VyaXR5Q2hlY2soY29jb2FUeXBlKTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKHRp
ZmZXYXNUcmVhdGVkQXNQTkdGb3JXZWJDb21wYXRpYmlsaXR5KSB7Ci0gICAgICAgIGF1dG8gdGlm
ZkRhdGEgPSBidWZmZXItPmNyZWF0ZU5TRGF0YSgpOwotICAgICAgICBhdXRvIGltYWdlID0gYWRv
cHROUyhbW05TQml0bWFwSW1hZ2VSZXAgYWxsb2NdIGluaXRXaXRoRGF0YTogdGlmZkRhdGEuZ2V0
KCldKTsKLSAgICAgICAgTlNEYXRhICpwbmdEYXRhID0gW2ltYWdlIHJlcHJlc2VudGF0aW9uVXNp
bmdUeXBlOk5TUE5HRmlsZVR5cGUgcHJvcGVydGllczpAeyB9XTsKLSAgICAgICAgcmVhZGVyLnJl
YWQoaW1hZ2VUeXBlVG9GYWtlRmlsZW5hbWUoaW1hZ2VUeXBlKSwgU2hhcmVkQnVmZmVyOjpjcmVh
dGUocG5nRGF0YSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICBpZiAoYnVmZmVy
ICYmIGltYWdlVHlwZSA9PSBJbWFnZVR5cGU6OlRJRkYpCisgICAgICAgICAgICBidWZmZXIgPSBj
b252ZXJ0VElGRlRvUE5HKGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpKTsKICNlbmRpZgotICAgIHJl
YWRlci5yZWFkKGltYWdlVHlwZVRvRmFrZUZpbGVuYW1lKGltYWdlVHlwZSksIGJ1ZmZlci5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgcmVhZGVyLnJlYWRCdWZmZXIoaW1hZ2VUeXBlVG9GYWtlRmlsZW5hbWUoaW1h
Z2VUeXBlKSwgbWltZVR5cGUsIGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CiB9CiAK
IFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTI0
OCwxNCArMjEwLDE2IEBAIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmkK
IAogU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5n
JiB0eXBlKQogewotICAgIGF1dG8gYnVmZmVyID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JUeXBlKGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRh
VHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgYXV0byBidWZmZXIgPSByZWFkQnVmZmVyRm9y
VHlwZVdpdGhTZWN1cml0eUNoZWNrKGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRhVHlwZSk7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBOU1N0cmluZyAqY3Vz
dG9tRGF0YVZhbHVlID0gY3VzdG9tRGF0YUZyb21TaGFyZWRCdWZmZXIoKmJ1ZmZlcikuc2FtZU9y
aWdpbkN1c3RvbURhdGEuZ2V0KHR5cGUpOwotICAgIGlmICghY3VzdG9tRGF0YVZhbHVlLmxlbmd0
aCkKKyAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdl
IGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKKyAgICAvLyBzdXJl
IGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBh
bmQgYWNjZXNzaW5nIHRoZSBkYXRhLgorICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJv
YXJkTmFtZSkpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGN1c3RvbURhdGFWYWx1
ZTsKKworICAgIHJldHVybiBjdXN0b21EYXRhRnJvbVNoYXJlZEJ1ZmZlcigqYnVmZmVyKS5zYW1l
T3JpZ2luQ3VzdG9tRGF0YS5nZXQodHlwZSk7CiB9CiAKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVD
dXN0b21EYXRhKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQpAQCAtMjY4LDUgKzIz
MiwyOSBAQCBsb25nIFBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50KCkgY29uc3QKICAgICByZXR1cm4g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudCht
X3Bhc3RlYm9hcmROYW1lKTsKIH0KIAorVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZFR5
cGVzV2l0aFNlY3VyaXR5Q2hlY2soKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGNvY29hVHlwZXM7
CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBl
cyhjb2NvYVR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKKworICAgIC8vIEVuZm9yY2UgY2hhbmdl
Q291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0
ZWFkIG9mIGJlZm9yZSB0byBiZQorICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2Vl
biBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCisg
ICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIHJldHVybiBjb2NvYVR5cGVzOwogfQogCitSZWZQdHI8U2hhcmVkQnVmZmVy
PiBQYXN0ZWJvYXJkOjpyZWFkQnVmZmVyRm9yVHlwZVdpdGhTZWN1cml0eUNoZWNrKGNvbnN0IFN0
cmluZyYgdHlwZSkKK3sKKyAgICBhdXRvIGJ1ZmZlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5w
YXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVyRm9yVHlwZSh0eXBlLCBtX3Bhc3RlYm9hcmROYW1l
KTsKKworICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4g
V2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQorICAgIC8vIHN1
cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50
IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCisgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3Rl
Ym9hcmROYW1lKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYnVmZmVy
OworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRHdGsuY3BwCShyZXZpc2lvbiAyMjI2ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGFzdGVib2FyZEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw4ICsyNDIsMTEgQEAg
dm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRXZWJDb250ZQogewogfQogCi12b2lkIFBh
c3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImKQordm9pZCBQYXN0ZWJvYXJkOjpy
ZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyJiByZWFkZXIpCiB7CisgICAgcmVhZEZyb21DbGlwYm9h
cmQoKTsKKyAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogbV9zZWxlY3Rpb25EYXRhLT5maWxlbmFt
ZXMoKSkKKyAgICAgICAgcmVhZGVyLnJlYWRGaWxlbmFtZShmaWxlbmFtZSk7CiB9CiAKIGJvb2wg
UGFzdGVib2FyZDo6aGFzRGF0YSgpCkBAIC0yODYsMTEgKzI4OSw2IEBAIFZlY3RvcjxTdHJpbmc+
IFBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWMKICAgICByZXR1cm4gdHlwZXM7CiB9CiAKLVZlY3Rv
cjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKQotewotICAgIHJldHVy
biB7IH07Ci19Ci0KIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYg
dHlwZSkKIHsKICAgICByZWFkRnJvbUNsaXBib2FyZCgpOwpAQCAtMzIxLDEzICszMTksOCBAQCBT
dHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0CiAKIGJvb2wgUGFzdGVib2Fy
ZDo6Y29udGFpbnNGaWxlcygpCiB7Ci0gICAgcmV0dXJuIHJlYWRGaWxlbmFtZXMoKS5zaXplKCk7
Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMoKQotewogICAg
IHJlYWRGcm9tQ2xpcGJvYXJkKCk7Ci0gICAgcmV0dXJuIG1fc2VsZWN0aW9uRGF0YS0+ZmlsZW5h
bWVzKCk7CisgICAgcmV0dXJuICFtX3NlbGVjdGlvbkRhdGEtPmZpbGVuYW1lcygpLmlzRW1wdHko
KTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZU1hcmt1cChjb25zdCBTdHJpbmcmKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkocmV2
aXNpb24gMjIyNjg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsMTEgKzI4Myw2IEBAIFZlY3RvcjxTdHJpbmc+
IFBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWMKICAgICByZXR1cm4gdmVjdG9yOwogfQogCi1WZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkKLXsKLSAgICByZXR1
cm4geyB9OwotfQotCiBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcm
IHR5cGUpCiB7CiAgICAgaWYgKCFtX2RhdGFPYmplY3QgJiYgbV9kcmFnRGF0YU1hcC5pc0VtcHR5
KCkpCkBAIC0zMTQsNDMgKzMwOSw1NCBAQCBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0lu
Q3VzdG9tRGF0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorc3RydWN0IFBhc3RlYm9hcmRGaWxlQ291
bnRlciBmaW5hbCA6IFBhc3RlYm9hcmRGaWxlUmVhZGVyIHsKKyAgICB2b2lkIHJlYWRGaWxlbmFt
ZShjb25zdCBTdHJpbmcmKSBmaW5hbCB7ICsrY291bnQ7IH0KKyAgICB2b2lkIHJlYWRCdWZmZXIo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUmVmPFNoYXJlZEJ1ZmZlcj4mJikgZmluYWwg
eyArK2NvdW50OyB9CisKKyAgICB1bnNpZ25lZCBjb3VudCB7IDAgfTsKK307CisKIGJvb2wgUGFz
dGVib2FyZDo6Y29udGFpbnNGaWxlcygpCiB7Ci0gICAgcmV0dXJuIHJlYWRGaWxlbmFtZXMoKS5z
aXplKCk7IC8vIEZJWE1FOiBNYWtlIHRoaXMgY29kZSBtb3JlIGVmZmljaWVudC4KKyAgICAvLyBG
SVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQg
YnkgYXZvaWRpbmcgY2FsbHMgdG8gRHJhZ1F1ZXJ5RmlsZVcuCisgICAgUGFzdGVib2FyZEZpbGVD
b3VudGVyIHJlYWRlcjsKKyAgICByZWFkKHJlYWRlcik7CisgICAgcmV0dXJuIHJlYWRlci5jb3Vu
dDsKIH0KIAotVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCit2b2lk
IFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlcikKIHsKLSAgICBW
ZWN0b3I8U3RyaW5nPiBmaWxlTmFtZXM7Ci0KICNpZiBVU0UoQ0YpCiAgICAgaWYgKG1fZGF0YU9i
amVjdCkgewogICAgICAgICBTVEdNRURJVU0gbWVkaXVtOwogICAgICAgICBpZiAoRkFJTEVEKG1f
ZGF0YU9iamVjdC0+R2V0RGF0YShjZkhEcm9wRm9ybWF0KCksICZtZWRpdW0pKSkKLSAgICAgICAg
ICAgIHJldHVybiBmaWxlTmFtZXM7CisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgSERS
T1AgaGRyb3AgPSByZWludGVycHJldF9jYXN0PEhEUk9QPihHbG9iYWxMb2NrKG1lZGl1bS5oR2xv
YmFsKSk7CiAgICAgICAgIGlmICghaGRyb3ApCi0gICAgICAgICAgICByZXR1cm4gZmlsZU5hbWVz
OworICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFdDSEFSIGZpbGVuYW1lW01BWF9QQVRI
XTsKICAgICAgICAgVUlOVCBmaWxlQ291bnQgPSBEcmFnUXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZG
RkZGRiwgMCwgMCk7CiAgICAgICAgIGZvciAoVUlOVCBpID0gMDsgaSA8IGZpbGVDb3VudDsgaSsr
KSB7CiAgICAgICAgICAgICBpZiAoIURyYWdRdWVyeUZpbGVXKGhkcm9wLCBpLCBmaWxlbmFtZSwg
V1RGX0FSUkFZX0xFTkdUSChmaWxlbmFtZSkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgZmlsZU5hbWVzLmFwcGVuZChmaWxlbmFtZSk7CisgICAgICAgICAgICByZWFk
ZXIucmVhZEZpbGVuYW1lKGZpbGVuYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIEdsb2JhbFVu
bG9jayhtZWRpdW0uaEdsb2JhbCk7CiAgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0oJm1lZGl1bSk7
Ci0gICAgICAgIHJldHVybiBmaWxlTmFtZXM7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKCFtX2RyYWdEYXRhTWFwLmNvbnRhaW5zKGNmSERyb3BGb3JtYXQoKS0+Y2ZGb3JtYXQpKQot
ICAgICAgICByZXR1cm4gZmlsZU5hbWVzOwotICAgIHJldHVybiBtX2RyYWdEYXRhTWFwLmdldChj
ZkhEcm9wRm9ybWF0KCktPmNmRm9ybWF0KTsKKyAgICBhdXRvIGxpc3QgPSBtX2RyYWdEYXRhTWFw
LmZpbmQoY2ZIRHJvcEZvcm1hdCgpLT5jZkZvcm1hdCk7CisgICAgaWYgKGxpc3QgPT0gbV9kcmFn
RGF0YU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBmaWxlbmFt
ZSA6IGxpc3QtPnZhbHVlKQorICAgICAgICByZWFkZXIucmVhZEZpbGVuYW1lKGZpbGVuYW1lKTsK
ICNlbHNlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmlsZU5hbWVzOworICAg
IHJldHVybiB7IH07CiAjZW5kaWYKIH0KIApAQCAtMTA3MiwxMCArMTA3OCw2IEBAIHZvaWQgUGFz
dGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkV2ViQ29udGUKIHsKIH0KIAotdm9pZCBQYXN0ZWJvYXJk
OjpyZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyJikKLXsKLX0KLQogdm9pZCBQYXN0ZWJvYXJkOjp3
cml0ZShjb25zdCBQYXN0ZWJvYXJkSW1hZ2UmKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BFLmNwcAkocmV2aXNpb24gMjIyNjg4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MiwxMSArNjIsNiBAQCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0Zv
ckxlZ2FjCiAgICAgcmV0dXJuIHR5cGVzOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJk
Ojp0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkKLXsKLSAgICByZXR1cm4geyB9OwotfQotCiBTdHJpbmcg
UGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgcmV0dXJu
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZFN0cmluZ0Zy
b21QYXN0ZWJvYXJkKDAsIHR5cGUpOwpAQCAtMTMwLDEyICsxMjUsNiBAQCBib29sIFBhc3RlYm9h
cmQ6OmNvbnRhaW5zRmlsZXMoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmVjdG9yPFN0cmlu
Zz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKLX0KLQogYm9vbCBQYXN0ZWJvYXJkOjpjYW5T
bWFydFJlcGxhY2UoKQogewogICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>